fetchtype 0.1.0 → 0.2.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js","../../types/src/font.ts","../../types/src/tokens.ts","../../types/src/validation.ts","../../types/src/config.ts","../../types/src/agent.ts","../../types/src/registry.ts","../../fonts/src/catalog.ts","../../fonts/src/suggest.ts","../../fonts/src/registry.ts","../../fonts/src/pairing.ts","../../fonts/src/scoring.ts","../../fonts/src/size-guidance.ts","../../fonts/src/index.ts","../../core/src/index.ts","../../core/src/presets.ts","../../core/src/base.tokens.json","../../core/src/carbon.tokens.json","../../core/src/dashboard.tokens.json","../../core/src/docs.tokens.json","../../core/src/ecommerce.tokens.json","../../core/src/editorial.tokens.json","../../core/src/fluent.tokens.json","../../core/src/material.tokens.json","../../core/src/radix.tokens.json","../../core/src/spectrum.tokens.json","../../core/src/scale.ts","../../core/src/systems.ts","../../core/src/exporters/tailwind.ts","../../core/src/exporters/shadcn.ts","../../core/src/report.ts","../../core/src/w3c.ts","../../core/src/fallback.ts","../../core/src/prepare.ts","../../core/src/audit.ts","../../core/src/audit-url.ts","../../core/src/sarif.ts","../../core/src/drift.ts","../../core/src/config-resolver.ts","../../core/src/profiles.ts","../../core/src/generate.ts","../src/mcp.ts","../src/prompt-init.ts","../src/preview.ts"],"sourcesContent":["import { access, appendFile, mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, resolve } from 'node:path';\nimport process from 'node:process';\n\nimport chalk from 'chalk';\nimport { Command, CommanderError, Option } from 'commander';\nimport { lilconfig } from 'lilconfig';\n\nimport {\n buildTokenArtifacts,\n DEFAULT_TOKEN_SET,\n exportW3cTokens,\n formatSarifReport,\n generateHtmlReport,\n generateShadcnCss,\n generateTailwindConfig,\n getPreset,\n importW3cTokens,\n parseDesignTokenSet,\n PRESET_NAMES,\n prepareFont,\n queryTypographySystems,\n validateDesignTokenSet,\n validateFonts,\n auditDirectory,\n auditUrl,\n formatAuditReport,\n generateCorrectedTokens,\n detectDrift,\n resolveConfig,\n generateTokenSet,\n type AuditResult,\n type PrepareManifest,\n type DriftReport,\n} from '@fetchtype/core';\nimport { suggestFonts, type SuggestionContext, resolveFont, searchRegistry, registryStats, recommendPairings } from '@fetchtype/fonts';\nimport { generateFallbackCSS } from '@fetchtype/core';\nimport { startMcpServer } from './mcp.js';\nimport { startPreviewServer } from './preview.js';\nimport { resolvePromptToTokenSet } from './prompt-init.js';\nimport {\n type FetchTypeConfig,\n type TypographyPattern,\n type TypographySystemQueryKind,\n type TypographySystemReference,\n type TypographySystemsResult,\n type ValidationReport,\n} from '@fetchtype/types';\n\ntype Logger = {\n stdout: (text: string) => void;\n stderr: (text: string) => void;\n};\n\ntype BuildFormat = 'all' | 'css' | 'json' | 'tailwind' | 'shadcn' | 'w3c';\ntype DiagnosticLevel = 'error' | 'warning' | 'notice';\n\nconst defaultLogger: Logger = {\n stdout: (text) => {\n process.stdout.write(text);\n },\n stderr: (text) => {\n process.stderr.write(text);\n },\n};\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function loadJsonFile(path: string): Promise<unknown> {\n const contents = await readFile(path, 'utf8');\n return JSON.parse(contents);\n}\n\nasync function writeJsonFile(path: string, value: unknown): Promise<void> {\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, `${JSON.stringify(value, null, 2)}\\n`, 'utf8');\n}\n\nasync function loadConfig(cwd: string): Promise<FetchTypeConfig | undefined> {\n const explorer = lilconfig('fetchtype', {\n searchPlaces: ['fetchtype.config.json', '.fetchtyperc.json', '.fetchtyperc'],\n });\n const result = await explorer.search(cwd);\n return result ? resolveConfig(result.config) : undefined;\n}\n\nfunction formatReport(report: ValidationReport): string {\n const lines = [`Validation ${report.pass ? 'passed' : 'failed'}.`];\n\n if (report.diagnostics.length === 0) {\n lines.push('No diagnostics found.');\n if ((report.references ?? []).length > 0) {\n lines.push('', ...formatReferenceEvaluations(report));\n }\n return `${lines.join('\\n')}\\n`;\n }\n\n for (const diagnostic of report.diagnostics) {\n const actual = diagnostic.actual ? ` (${diagnostic.actual})` : '';\n lines.push(\n `- ${diagnostic.severity.toUpperCase()} ${diagnostic.rule} ${diagnostic.path || '<root>'}: ${diagnostic.message}${actual}`,\n );\n }\n\n lines.push(\n `Errors: ${report.counts.error}, warnings: ${report.counts.warning}, info: ${report.counts.info}`,\n );\n\n if (report.references && (report.references ?? []).length > 0) {\n lines.push('', ...formatReferenceEvaluations(report));\n }\n\n return `${lines.join('\\n')}\\n`;\n}\n\nfunction formatReferenceEvaluations(report: ValidationReport): string[] {\n const refs = report.references ?? [];\n const lines = [`Reference evaluations (${refs.length})`];\n\n for (const reference of refs) {\n lines.push(`- ${reference.referenceName}: ${reference.score}%`);\n if (reference.matched.length > 0) {\n lines.push(` Matches: ${reference.matched.slice(0, 3).join('; ')}`);\n }\n if (reference.mismatched.length > 0) {\n lines.push(` Gaps: ${reference.mismatched.slice(0, 3).join('; ')}`);\n }\n }\n\n return lines;\n}\n\nfunction formatSystemReference(system: TypographySystemReference): string[] {\n return [\n `- ${system.name} [${system.kind}]`,\n ` Use cases: ${system.useCases.join(', ')}`,\n ` Styles: ${system.styles.join(', ')}`,\n ` Keywords: ${system.keywords.join(', ')}`,\n ` Fonts: ${system.fonts.join(', ')}`,\n ` Notes: ${system.summary}`,\n ` Source: ${system.source}${system.sourceUrl ? ` (${system.sourceUrl})` : ''}`,\n ];\n}\n\nfunction formatPattern(pattern: TypographyPattern): string[] {\n return [\n `- ${pattern.name}`,\n ` Summary: ${pattern.summary}`,\n ` Keywords: ${pattern.keywords.join(', ')}`,\n ` Evidence: ${pattern.evidence.join(', ')}`,\n ];\n}\n\nfunction formatTypographySystemsResult(\n result: TypographySystemsResult,\n patternsOnly: boolean,\n): string {\n const lines: string[] = [];\n\n if (!patternsOnly) {\n lines.push(`Typography systems (${result.systems.length})`);\n\n if (result.systems.length === 0) {\n lines.push('No systems matched the provided filters.');\n } else {\n for (const system of result.systems) {\n lines.push(...formatSystemReference(system));\n }\n }\n }\n\n if (result.patterns.length > 0) {\n if (lines.length > 0) {\n lines.push('');\n }\n lines.push(`Extracted patterns (${result.patterns.length})`);\n for (const pattern of result.patterns) {\n lines.push(...formatPattern(pattern));\n }\n } else if (patternsOnly) {\n lines.push('No patterns matched the provided filters.');\n }\n\n lines.push('');\n lines.push(`Available use cases: ${result.availableUseCases.join(', ')}`);\n lines.push(`Available styles: ${result.availableStyles.join(', ')}`);\n\n return `${lines.join('\\n')}\\n`;\n}\n\nfunction escapeGithubCommandData(value: string): string {\n return value.replace(/%/g, '%25').replace(/\\r/g, '%0D').replace(/\\n/g, '%0A');\n}\n\nfunction escapeGithubCommandProperty(value: string): string {\n return escapeGithubCommandData(value).replace(/,/g, '%2C').replace(/:/g, '%3A');\n}\n\nfunction toGithubDiagnosticLevel(\n severity: ValidationReport['diagnostics'][number]['severity'],\n): DiagnosticLevel {\n if (severity === 'error') {\n return 'error';\n }\n\n if (severity === 'warning') {\n return 'warning';\n }\n\n return 'notice';\n}\n\nfunction formatGithubSummary(report: ValidationReport, source: string): string {\n const lines = [\n `## Fetchtype Validation ${report.pass ? 'Passed' : 'Failed'}`,\n '',\n `Source: \\`${source}\\``,\n '',\n '| Level | Count |',\n '| --- | ---: |',\n `| error | ${report.counts.error} |`,\n `| warning | ${report.counts.warning} |`,\n `| info | ${report.counts.info} |`,\n ];\n\n if (report.diagnostics.length === 0) {\n lines.push('', 'No diagnostics found.');\n return `${lines.join('\\n')}\\n`;\n }\n\n lines.push('', '### Diagnostics', '');\n\n for (const diagnostic of report.diagnostics) {\n const actual = diagnostic.actual ? ` (actual: ${diagnostic.actual})` : '';\n const location = diagnostic.path ? ` at \\`${diagnostic.path}\\`` : '';\n lines.push(\n `- [${diagnostic.severity}] \\`${diagnostic.rule}\\`${location}: ${diagnostic.message}${actual}`,\n );\n }\n\n if (report.references && (report.references ?? []).length > 0) {\n lines.push('', '### Reference Evaluations', '');\n for (const reference of report.references) {\n lines.push(`- \\`${reference.referenceId}\\`: ${reference.score}%`);\n lines.push(` ${reference.summary}`);\n }\n }\n\n return `${lines.join('\\n')}\\n`;\n}\n\nasync function emitGithubReport(\n report: ValidationReport,\n source: string,\n logger: Logger,\n): Promise<void> {\n const summaryPath = process.env.GITHUB_STEP_SUMMARY;\n\n if (summaryPath) {\n await appendFile(summaryPath, formatGithubSummary(report, source), 'utf8');\n }\n\n for (const diagnostic of report.diagnostics) {\n const level = toGithubDiagnosticLevel(diagnostic.severity);\n const title = escapeGithubCommandProperty(`fetchtype ${diagnostic.rule}`);\n const file = escapeGithubCommandProperty(source);\n const message = escapeGithubCommandData(\n `${diagnostic.message}${diagnostic.path ? ` (path: ${diagnostic.path})` : ''}${diagnostic.actual ? ` (actual: ${diagnostic.actual})` : ''}`,\n );\n logger.stderr(`::${level} title=${title},file=${file}::${message}\\n`);\n }\n}\n\nasync function handleInit(\n output: string,\n force: boolean,\n presetName: string | undefined,\n prompt: string | undefined,\n cwd: string,\n logger: Logger,\n): Promise<number> {\n const target = resolve(cwd, output);\n if (!force && (await pathExists(target))) {\n logger.stderr(chalk.red(`Error: ${output} already exists. Use --force to overwrite.\\n`));\n return 2;\n }\n\n let tokenSet = DEFAULT_TOKEN_SET;\n if (prompt && !presetName) {\n const result = resolvePromptToTokenSet(prompt);\n tokenSet = result.tokenSet;\n logger.stderr(chalk.cyan(`Inferred: ${result.reasoning}\\n`));\n if (result.recommendedReferences.length > 0) {\n logger.stderr(\n chalk.cyan(\n `Reference fit: ${result.recommendedReferences\n .slice(0, 3)\n .map((reference) => `${reference.referenceId} (${reference.score}%)`)\n .join(', ')}\\n`,\n ),\n );\n }\n } else if (presetName) {\n const preset = getPreset(presetName);\n if (!preset) {\n logger.stderr(\n chalk.red(\n `Error: Unknown preset \"${presetName}\". Available presets: ${PRESET_NAMES.join(', ')}\\n`,\n ),\n );\n return 2;\n }\n tokenSet = preset;\n }\n\n await writeJsonFile(target, tokenSet);\n logger.stdout(`${chalk.green('Created')} ${output}\\n`);\n return 0;\n}\n\nasync function handleCheck(\n input: string,\n installHook: boolean,\n cwd: string,\n logger: Logger,\n): Promise<number> {\n if (installHook) {\n const huskyDir = resolve(cwd, '.husky');\n const gitHooksDir = resolve(cwd, '.git/hooks');\n\n const huskyExists = await pathExists(huskyDir);\n const gitHooksExists = await pathExists(gitHooksDir);\n\n if (huskyExists) {\n const hookPath = resolve(huskyDir, 'pre-commit');\n await writeFile(hookPath, `npx fetchtype check\\n`, 'utf8');\n const { chmod } = await import('node:fs/promises');\n await chmod(hookPath, 0o755);\n logger.stdout(`${chalk.green('Installed')} pre-commit hook: ${hookPath}\\n`);\n return 0;\n }\n\n if (gitHooksExists) {\n const hookPath = resolve(gitHooksDir, 'pre-commit');\n const hookContent =\n '#!/usr/bin/env sh\\n# fetchtype pre-commit hook\\n# Validates typography tokens before commit\\n\\nnpx fetchtype check\\n';\n await writeFile(hookPath, hookContent, 'utf8');\n const { chmod } = await import('node:fs/promises');\n await chmod(hookPath, 0o755);\n logger.stdout(`${chalk.green('Installed')} pre-commit hook: ${hookPath}\\n`);\n return 0;\n }\n\n logger.stderr(chalk.red('Error: No .husky directory or .git/hooks directory found.\\n'));\n return 2;\n }\n\n const config = await loadConfig(cwd);\n\n const tokenFile = resolve(cwd, input);\n if (!(await pathExists(tokenFile))) {\n logger.stderr(chalk.red(`Error: Token file not found: ${input}\\n`));\n return 2;\n }\n\n const raw = await loadJsonFile(tokenFile);\n\n const validationConfig = config\n ? {\n rules: config.rules ?? {},\n fonts: config.fonts,\n performance: config.performance,\n requiredSubsets: config.requiredSubsets,\n }\n : undefined;\n\n const report = validateDesignTokenSet(raw, {}, validationConfig);\n\n // Run font validation and append diagnostics\n try {\n const tokenSet = parseDesignTokenSet(raw);\n const fontDiagnostics = validateFonts(tokenSet, validationConfig);\n report.diagnostics.push(...fontDiagnostics);\n for (const diagnostic of fontDiagnostics) {\n report.counts[diagnostic.severity] += 1;\n }\n } catch {\n // If parsing fails, font validation is skipped (schema errors already reported)\n }\n\n const totalErrors = report.counts.error;\n\n if (report.pass) {\n const passLabel =\n report.diagnostics.length === 0\n ? 'all rules passed'\n : `${report.diagnostics.filter((d: { severity: string }) => d.severity === 'info').length} rules passed`;\n logger.stdout(chalk.green(`✓ fetchtype: ${passLabel}\\n`));\n return 0;\n } else {\n logger.stdout(\n chalk.red(`✗ fetchtype: ${totalErrors} error${totalErrors !== 1 ? 's' : ''} found\\n`),\n );\n return 1;\n }\n}\n\ntype ValidateOutputFormat = 'text' | 'json' | 'sarif';\n\nasync function handleValidate(\n input: string,\n referenceSystems: string[],\n outputFormat: ValidateOutputFormat,\n github: boolean,\n cwd: string,\n logger: Logger,\n): Promise<number> {\n const config = await loadConfig(cwd);\n const target = resolve(cwd, input);\n const raw = await loadJsonFile(target);\n\n // Build ValidationConfig from loaded config\n const validationConfig = config\n ? {\n rules: config.rules ?? {},\n fonts: config.fonts,\n performance: config.performance,\n requiredSubsets: config.requiredSubsets,\n }\n : undefined;\n\n const report = validateDesignTokenSet(raw, { referenceSystems }, validationConfig);\n\n // Run font validation and append diagnostics (non-blocking — warnings/info only)\n try {\n const tokenSet = parseDesignTokenSet(raw);\n const fontDiagnostics = validateFonts(tokenSet, validationConfig);\n report.diagnostics.push(...fontDiagnostics);\n for (const diagnostic of fontDiagnostics) {\n report.counts[diagnostic.severity] += 1;\n }\n } catch {\n // If parsing fails, font validation is skipped (schema errors already reported)\n }\n\n if (outputFormat === 'sarif') {\n const sarifLog = formatSarifReport(report, input);\n logger.stdout(`${JSON.stringify(sarifLog, null, 2)}\\n`);\n } else if (outputFormat === 'json') {\n logger.stdout(`${JSON.stringify(report, null, 2)}\\n`);\n } else {\n logger.stdout(formatReport(report));\n }\n\n if (github) {\n await emitGithubReport(report, input, logger);\n }\n\n return report.pass ? 0 : 1;\n}\n\nasync function handleBuild(\n input: string,\n outDir: string | undefined,\n prefix: string,\n format: BuildFormat,\n referenceSystems: string[],\n asJson: boolean,\n withReport: boolean,\n cwd: string,\n logger: Logger,\n): Promise<number> {\n const config = await loadConfig(cwd);\n const target = resolve(cwd, input);\n\n // Build ValidationConfig from loaded config\n const validationConfig = config\n ? {\n rules: config.rules ?? {},\n fonts: config.fonts,\n performance: config.performance,\n requiredSubsets: config.requiredSubsets,\n }\n : undefined;\n\n const artifacts = buildTokenArtifacts(await loadJsonFile(target), { prefix, referenceSystems }, validationConfig);\n\n if (!artifacts.report.pass) {\n if (asJson) {\n logger.stdout(`${JSON.stringify(artifacts.report, null, 2)}\\n`);\n } else {\n logger.stdout(formatReport(artifacts.report));\n }\n\n return 1;\n }\n\n const outputDirectory = resolve(cwd, outDir ?? config?.outDir ?? 'dist/tokens');\n await mkdir(outputDirectory, { recursive: true });\n\n const cssPath = resolve(outputDirectory, 'tokens.css');\n const jsonPath = resolve(outputDirectory, 'tokens.json');\n const builtPaths: string[] = [];\n\n if (format === 'all' || format === 'css') {\n await writeFile(cssPath, `${artifacts.css}\\n`, 'utf8');\n builtPaths.push(cssPath);\n }\n\n if (format === 'all' || format === 'json') {\n await writeFile(jsonPath, `${artifacts.json}\\n`, 'utf8');\n builtPaths.push(jsonPath);\n }\n\n if (format === 'tailwind') {\n const tailwindPath = resolve(outputDirectory, 'tailwind.config.ts');\n const tailwindConfig = generateTailwindConfig(artifacts.tokenSet, { prefix });\n await writeFile(tailwindPath, `${tailwindConfig}\\n`, 'utf8');\n builtPaths.push(tailwindPath);\n }\n\n if (format === 'shadcn') {\n const shadcnPath = resolve(outputDirectory, 'shadcn.css');\n const shadcnCss = generateShadcnCss(artifacts.tokenSet);\n await writeFile(shadcnPath, `${shadcnCss}\\n`, 'utf8');\n builtPaths.push(shadcnPath);\n }\n\n if (format === 'w3c') {\n const w3cPath = resolve(outputDirectory, 'tokens.w3c.json');\n const w3cTokens = exportW3cTokens(artifacts.tokenSet);\n await writeFile(w3cPath, `${JSON.stringify(w3cTokens, null, 2)}\\n`, 'utf8');\n builtPaths.push(w3cPath);\n }\n\n if (withReport) {\n const reportPath = resolve(outputDirectory, 'report.html');\n const htmlReport = generateHtmlReport(artifacts.tokenSet, artifacts.report, artifacts.css);\n await writeFile(reportPath, htmlReport, 'utf8');\n builtPaths.push(reportPath);\n }\n\n if (asJson) {\n logger.stdout(\n `${JSON.stringify(\n {\n builtPaths,\n report: artifacts.report,\n },\n null,\n 2,\n )}\\n`,\n );\n } else {\n for (const builtPath of builtPaths) {\n logger.stdout(`${chalk.green('Built')} ${builtPath}\\n`);\n }\n }\n\n return 0;\n}\n\nasync function handleSystems(\n query: string | undefined,\n useCase: string | undefined,\n style: string | undefined,\n kind: TypographySystemQueryKind,\n patternsOnly: boolean,\n asJson: boolean,\n logger: Logger,\n): Promise<number> {\n const result = queryTypographySystems({\n query,\n useCase,\n style,\n kind,\n includePatterns: true,\n });\n\n if (asJson) {\n logger.stdout(`${JSON.stringify(result, null, 2)}\\n`);\n } else {\n logger.stdout(formatTypographySystemsResult(result, patternsOnly));\n }\n\n return 0;\n}\n\nfunction formatDriftReport(report: DriftReport): string {\n const lines = ['Typography Drift Report', '═══════════════════════'];\n\n if (report.breaking.length === 0 && report.nonBreaking.length === 0 && report.improvements.length === 0) {\n lines.push('', 'No changes detected.');\n return `${lines.join('\\n')}\\n`;\n }\n\n if (report.breaking.length > 0) {\n lines.push('', `\\u26d4 Breaking (${report.breaking.length})`);\n for (const change of report.breaking) {\n lines.push(`- ${change.path}: ${change.description}`);\n }\n }\n\n if (report.nonBreaking.length > 0) {\n lines.push('', `\\u26a0 Non-breaking (${report.nonBreaking.length})`);\n for (const change of report.nonBreaking) {\n lines.push(`- ${change.path}: ${change.description}`);\n }\n }\n\n if (report.improvements.length > 0) {\n lines.push('', `\\u2705 Improvements (${report.improvements.length})`);\n for (const change of report.improvements) {\n lines.push(`- ${change.path}: ${change.description}`);\n }\n }\n\n lines.push('', `Summary: ${report.summary}`);\n return `${lines.join('\\n')}\\n`;\n}\n\nasync function handleDrift(\n baselinePath: string,\n currentPath: string,\n asJson: boolean,\n ci: boolean,\n cwd: string,\n logger: Logger,\n): Promise<number> {\n const baselineTarget = resolve(cwd, baselinePath);\n const currentTarget = resolve(cwd, currentPath);\n\n const baselineRaw = await loadJsonFile(baselineTarget);\n const currentRaw = await loadJsonFile(currentTarget);\n\n let report: DriftReport;\n try {\n report = detectDrift(baselineRaw, currentRaw);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.stderr(chalk.red(`Error: ${message}\\n`));\n return 2;\n }\n\n if (asJson) {\n logger.stdout(`${JSON.stringify(report, null, 2)}\\n`);\n } else {\n const formatted = formatDriftReport(report);\n const lines = formatted.split('\\n');\n for (const line of lines) {\n if (line.startsWith('\\u26d4') || (line.startsWith('-') && report.breaking.some((c) => line.includes(c.path)))) {\n logger.stdout(`${chalk.red(line)}\\n`);\n } else if (line.startsWith('\\u26a0')) {\n logger.stdout(`${chalk.yellow(line)}\\n`);\n } else if (line.startsWith('\\u2705')) {\n logger.stdout(`${chalk.green(line)}\\n`);\n } else {\n logger.stdout(`${line}\\n`);\n }\n }\n }\n\n if (ci && report.breaking.length > 0) {\n return 1;\n }\n\n return 0;\n}\n\nasync function handleGenerate(\n context: string,\n brandColor: string | undefined,\n preset: string | undefined,\n asJson: boolean,\n output: string,\n cwd: string,\n logger: Logger,\n): Promise<number> {\n const result = generateTokenSet({ context, brandColor, preset });\n\n if (asJson) {\n logger.stdout(`${JSON.stringify(result.tokenSet, null, 2)}\\n`);\n return 0;\n }\n\n const outputPath = resolve(cwd, output);\n await writeJsonFile(outputPath, result.tokenSet);\n\n logger.stdout(`${chalk.green('Generated')} ${outputPath}\\n`);\n for (const line of result.reasoning) {\n logger.stdout(` ${line}\\n`);\n }\n if (result.warnings.length > 0) {\n for (const w of result.warnings) {\n logger.stderr(`${chalk.yellow('Warning:')} ${w}\\n`);\n }\n }\n\n return 0;\n}\n\nexport function createProgram(logger: Logger = defaultLogger, cwd = process.cwd()): Command {\n const program = new Command();\n\n program\n .name('fetchtype')\n .description('Validate and export typography tokens.')\n .showHelpAfterError();\n\n program\n .command('check')\n .description('Fast-path validation (pass/fail only). Suitable for pre-commit hooks.')\n .argument('[input]', 'Path to the token JSON file', 'tokens.json')\n .option('--install-hook', 'Install fetchtype check as a git pre-commit hook')\n .action(async (input: string, options: { installHook?: boolean }) => {\n program.setOptionValueWithSource(\n '_result',\n await handleCheck(input, Boolean(options.installHook), cwd, logger),\n 'cli',\n );\n });\n\n program\n .command('init')\n .description('Write a starter token file.')\n .argument('[output]', 'Output file path', 'fetchtype.tokens.json')\n .option('-f, --force', 'Overwrite existing file')\n .option('-p, --preset <name>', 'Use a named preset (base, editorial, dashboard, ecommerce, docs, fluent, material, carbon, spectrum, radix)')\n .option('--prompt <description>', 'Natural language description to infer token configuration')\n .action(async (output: string, options: { force?: boolean; preset?: string; prompt?: string }) => {\n program.setOptionValueWithSource(\n '_result',\n await handleInit(output, Boolean(options.force), options.preset, options.prompt, cwd, logger),\n 'cli',\n );\n });\n\n program\n .command('validate')\n .description('Validate a token file.')\n .requiredOption('-i, --input <path>', 'Path to the token JSON file')\n .option(\n '--reference <id>',\n 'Evaluate alignment against a typography system or archetype id (repeatable or comma-separated)',\n (value: string, previous: string[] = []) => [\n ...previous,\n ...value\n .split(',')\n .map((item) => item.trim())\n .filter((item) => item.length > 0),\n ],\n [],\n )\n .option('--github', 'Emit GitHub step summaries and workflow annotations')\n .option('--json', 'Print machine-readable JSON output (equivalent to --output-format json)')\n .option('--ci', 'CI mode: emit SARIF output and set exit code (equivalent to --output-format sarif)')\n .addOption(\n new Option('--output-format <format>', 'Output format: text, json, sarif')\n .choices(['text', 'json', 'sarif'])\n .default('text'),\n )\n .action(async (options: { input: string; reference: string[]; github?: boolean; json?: boolean; ci?: boolean; outputFormat: ValidateOutputFormat }) => {\n // --ci implies sarif; --json implies json; --output-format takes precedence when explicit\n let outputFormat: ValidateOutputFormat = options.outputFormat;\n if (options.ci && options.outputFormat === 'text') {\n outputFormat = 'sarif';\n } else if (options.json && options.outputFormat === 'text') {\n outputFormat = 'json';\n }\n\n program.setOptionValueWithSource(\n '_result',\n await handleValidate(\n options.input,\n options.reference,\n outputFormat,\n Boolean(options.github),\n cwd,\n logger,\n ),\n 'cli',\n );\n });\n\n program\n .command('build')\n .description('Generate CSS and JSON bundles from tokens.')\n .requiredOption('-i, --input <path>', 'Path to the token JSON file')\n .option('-o, --out-dir <path>', 'Output directory')\n .option('--prefix <value>', 'CSS variable prefix', 'ft')\n .option(\n '--reference <id>',\n 'Include reference evaluation in build/report output (repeatable or comma-separated)',\n (value: string, previous: string[] = []) => [\n ...previous,\n ...value\n .split(',')\n .map((item) => item.trim())\n .filter((item) => item.length > 0),\n ],\n [],\n )\n .addOption(\n new Option('--format <type>', 'Artifact format (all, css, json, tailwind, shadcn, w3c)')\n .choices(['all', 'css', 'json', 'tailwind', 'shadcn', 'w3c'])\n .default('all'),\n )\n .option('--json', 'Print machine-readable JSON output')\n .option('--report', 'Generate an HTML report alongside build artifacts')\n .action(\n async (options: {\n input: string;\n outDir?: string;\n prefix: string;\n format: BuildFormat;\n reference: string[];\n json?: boolean;\n report?: boolean;\n }) => {\n program.setOptionValueWithSource(\n '_result',\n await handleBuild(\n options.input,\n options.outDir,\n options.prefix,\n options.format,\n options.reference,\n Boolean(options.json),\n Boolean(options.report),\n cwd,\n logger,\n ),\n 'cli',\n );\n },\n );\n\n program\n .command('systems')\n .description('Query curated typography systems, keywords, and extracted patterns.')\n .option('--query <text>', 'Match by system name, keyword, or characteristic')\n .option('--use-case <name>', 'Filter by use case')\n .option('--style <name>', 'Filter by style')\n .addOption(\n new Option(\n '--kind <type>',\n 'Dataset subset (all, official-design-system, foundational-archetype)',\n )\n .choices(['all', 'official-design-system', 'foundational-archetype'])\n .default('all'),\n )\n .option('--patterns', 'Show extracted patterns only')\n .option('--json', 'Print machine-readable JSON output')\n .action(\n async (options: {\n query?: string;\n useCase?: string;\n style?: string;\n kind: TypographySystemQueryKind;\n patterns?: boolean;\n json?: boolean;\n }) => {\n program.setOptionValueWithSource(\n '_result',\n await handleSystems(\n options.query,\n options.useCase,\n options.style,\n options.kind,\n Boolean(options.patterns),\n Boolean(options.json),\n logger,\n ),\n 'cli',\n );\n },\n );\n\n program\n .command('import')\n .description('Import a W3C Design Tokens file into fetchtype format.')\n .requiredOption('-i, --input <path>', 'Path to the W3C token JSON file')\n .option('-o, --output <path>', 'Output file path', 'fetchtype.tokens.json')\n .action(async (options: { input: string; output: string }) => {\n const inputPath = resolve(cwd, options.input);\n const outputPath = resolve(cwd, options.output);\n try {\n const raw = await loadJsonFile(inputPath);\n const tokenSet = importW3cTokens(raw);\n const report = validateDesignTokenSet(tokenSet);\n await writeJsonFile(outputPath, tokenSet);\n logger.stdout(`${chalk.green('Imported')} ${options.output}\\n`);\n if (!report.pass) {\n logger.stderr(formatReport(report));\n }\n program.setOptionValueWithSource('_result', report.pass ? 0 : 1, 'cli');\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.stderr(chalk.red(`Error: ${message}\\n`));\n program.setOptionValueWithSource('_result', 2, 'cli');\n }\n });\n\n program\n .command('suggest')\n .description('Suggest fonts for a given usage context.')\n .requiredOption('-c, --context <type>', 'Usage context (display, interface, reading, mono)')\n .option('-l, --limit <number>', 'Maximum number of suggestions', '5')\n .option('--reference <id>', 'Bias suggestions toward a typography reference system or archetype')\n .option('--variable-only', 'Only suggest variable fonts')\n .option('--json', 'Print machine-readable JSON output')\n .action(\n async (options: {\n context: string;\n limit: string;\n reference?: string;\n variableOnly?: boolean;\n json?: boolean;\n }) => {\n const validContexts = ['display', 'interface', 'reading', 'mono'];\n if (!validContexts.includes(options.context)) {\n logger.stderr(\n chalk.red(\n `Error: Invalid context \"${options.context}\". Valid contexts: ${validContexts.join(', ')}\\n`,\n ),\n );\n program.setOptionValueWithSource('_result', 2, 'cli');\n return;\n }\n\n const suggestions = suggestFonts(options.context as SuggestionContext, {\n limit: Number(options.limit),\n variableOnly: Boolean(options.variableOnly),\n });\n\n if (Boolean(options.json)) {\n logger.stdout(`${JSON.stringify(suggestions, null, 2)}\\n`);\n } else {\n if (suggestions.length === 0) {\n logger.stdout('No fonts found matching the criteria.\\n');\n } else {\n const header = `${'Family'.padEnd(24)} ${'Category'.padEnd(14)} ${'Variable'.padEnd(10)} ${'Size'.padEnd(8)} Reason`;\n logger.stdout(`${header}\\n${'─'.repeat(header.length)}\\n`);\n for (const suggestion of suggestions) {\n logger.stdout(\n `${suggestion.family.padEnd(24)} ${suggestion.category.padEnd(14)} ${(suggestion.variable ? 'yes' : 'no').padEnd(10)} ${`${suggestion.sizeKb}KB`.padEnd(8)} ${suggestion.reason}\\n`,\n );\n }\n }\n }\n\n program.setOptionValueWithSource('_result', 0, 'cli');\n },\n );\n\n // ── Registry commands ──\n\n program\n .command('resolve <font>')\n .description('Resolve a font from the registry. Returns full metadata, install paths, and optional fallback CSS.')\n .option('--json', 'Print machine-readable JSON output')\n .option('--css', 'Print ready-to-use @font-face CSS block')\n .option('--fallback', 'Include platform-aware fallback CSS with metric overrides')\n .option('--compact', 'Use compact single @font-face for fallback (less precise, smaller CSS)')\n .action(\n async (font: string, options: { json?: boolean; css?: boolean; fallback?: boolean; compact?: boolean }) => {\n const entry = resolveFont(font);\n if (!entry) {\n logger.stderr(chalk.red(`Error: Font \"${font}\" not found in registry.\\n`));\n program.setOptionValueWithSource('_result', 1, 'cli');\n return;\n }\n\n if (options.json) {\n logger.stdout(`${JSON.stringify(entry, null, 2)}\\n`);\n } else if (options.css || options.fallback) {\n if (options.fallback) {\n const css = generateFallbackCSS(entry, { compact: options.compact });\n logger.stdout(`${css}\\n`);\n } else {\n // Basic @font-face from install info\n if (entry.install.googleCdn) {\n logger.stdout(`/* Google Fonts */\\n@import url('${entry.install.googleCdn}');\\n\\n`);\n }\n if (entry.install.fontsource) {\n logger.stdout(`/* Fontsource */\\nimport '${entry.install.fontsource}';\\n`);\n }\n }\n } else {\n // Human-readable summary\n logger.stdout(`${chalk.bold(entry.family)} (${entry.id})\\n`);\n logger.stdout(` Source: ${entry.source}\\n`);\n logger.stdout(` Category: ${entry.category}\\n`);\n logger.stdout(` Variable: ${entry.variable ? 'yes' : 'no'}\\n`);\n logger.stdout(` Weights: ${entry.weights.join(', ')}\\n`);\n logger.stdout(` Styles: ${entry.styles.join(', ')}\\n`);\n logger.stdout(` Subsets: ${entry.subsets.join(', ')}\\n`);\n logger.stdout(` Contexts: ${entry.contexts.join(', ')}\\n`);\n logger.stdout(` License: ${entry.license.type}\\n`);\n logger.stdout(` Payload: ~${Math.round(entry.performance.estimatedPayload / 1024)}KB (${entry.performance.loadingImpact})\\n`);\n if (entry.install.fontsource) {\n logger.stdout(` Install: ${entry.install.fontsource}\\n`);\n }\n if (entry.install.googleCdn) {\n logger.stdout(` CDN: ${entry.install.googleCdn}\\n`);\n }\n if (entry.install.system?.platforms) {\n logger.stdout(` Platforms: ${entry.install.system.platforms.join(', ')}\\n`);\n }\n }\n\n program.setOptionValueWithSource('_result', 0, 'cli');\n },\n );\n\n program\n .command('pair <font>')\n .description('Get font pairing recommendations from the registry.')\n .option('-r, --role <role>', 'Filter by role: heading, body, accent, mono')\n .option('-l, --limit <number>', 'Maximum number of pairings', '5')\n .option('--json', 'Print machine-readable JSON output')\n .action(\n async (font: string, options: { role?: string; limit: string; json?: boolean }) => {\n const entry = resolveFont(font);\n if (!entry) {\n logger.stderr(chalk.red(`Error: Font \"${font}\" not found in registry.\\n`));\n program.setOptionValueWithSource('_result', 1, 'cli');\n return;\n }\n\n const validRoles = ['heading', 'body', 'accent', 'mono'];\n if (options.role && !validRoles.includes(options.role)) {\n logger.stderr(chalk.red(`Error: Invalid role \"${options.role}\". Valid roles: ${validRoles.join(', ')}\\n`));\n program.setOptionValueWithSource('_result', 1, 'cli');\n return;\n }\n\n const pairings = recommendPairings(font, {\n role: options.role as 'heading' | 'body' | 'accent' | 'mono' | undefined,\n limit: Number(options.limit),\n });\n\n if (options.json) {\n logger.stdout(`${JSON.stringify(pairings, null, 2)}\\n`);\n } else {\n if (pairings.length === 0) {\n logger.stdout('No pairing recommendations found.\\n');\n } else {\n logger.stdout(`Pairing recommendations for ${chalk.bold(entry.family)}:\\n\\n`);\n const header = `${'Font'.padEnd(24)} ${'Role'.padEnd(10)} ${'Score'.padEnd(8)} Rationale`;\n logger.stdout(`${header}\\n${'─'.repeat(80)}\\n`);\n for (const p of pairings) {\n const pairFont = resolveFont(p.fontId);\n const name = pairFont?.family ?? p.fontId;\n logger.stdout(\n `${name.padEnd(24)} ${p.role.padEnd(10)} ${p.confidence.toFixed(2).padEnd(8)} ${p.rationale}\\n`,\n );\n }\n }\n }\n\n program.setOptionValueWithSource('_result', 0, 'cli');\n },\n );\n\n program\n .command('search [query...]')\n .description('Search the font registry with free-text and filters.')\n .option('-c, --context <type>', 'Filter by context (display, interface, reading, mono, editorial, data)')\n .option('--variable', 'Only variable fonts')\n .option('--category <cat>', 'Filter by category (sans-serif, serif, monospace, display, handwriting)')\n .option('--subset <name>', 'Filter by subset support (e.g. cyrillic)')\n .option('--max-payload <bytes>', 'Maximum estimated payload in bytes')\n .option('-l, --limit <number>', 'Maximum number of results', '20')\n .option('--json', 'Print machine-readable JSON output')\n .action(\n async (\n queryParts: string[],\n options: {\n context?: string;\n variable?: boolean;\n category?: string;\n subset?: string;\n maxPayload?: string;\n limit: string;\n json?: boolean;\n },\n ) => {\n const results = searchRegistry({\n query: queryParts.length > 0 ? queryParts.join(' ') : undefined,\n context: options.context as any,\n variable: options.variable,\n category: options.category as any,\n subset: options.subset,\n maxPayload: options.maxPayload ? Number(options.maxPayload) : undefined,\n limit: Number(options.limit),\n });\n\n if (options.json) {\n logger.stdout(`${JSON.stringify(results, null, 2)}\\n`);\n } else {\n const stats = registryStats();\n logger.stdout(`Registry: ${stats.count} fonts (${stats.variableCount} variable)\\n\\n`);\n\n if (results.length === 0) {\n logger.stdout('No fonts found matching the criteria.\\n');\n } else {\n const header = `${'Family'.padEnd(28)} ${'Category'.padEnd(14)} ${'Variable'.padEnd(10)} ${'Payload'.padEnd(10)} Contexts`;\n logger.stdout(`${header}\\n${'─'.repeat(90)}\\n`);\n for (const f of results) {\n const payload = f.source === 'system' ? 'system' : `~${Math.round(f.performance.estimatedPayload / 1024)}KB`;\n logger.stdout(\n `${f.family.padEnd(28)} ${f.category.padEnd(14)} ${(f.variable ? 'yes' : 'no').padEnd(10)} ${payload.padEnd(10)} ${f.contexts.join(', ')}\\n`,\n );\n }\n logger.stdout(`\\n${results.length} result${results.length !== 1 ? 's' : ''}\\n`);\n }\n }\n\n program.setOptionValueWithSource('_result', 0, 'cli');\n },\n );\n\n program\n .command('prepare <font>')\n .description('Download, optimize, and deploy a font for production use.')\n .option('--weights <weights>', 'Comma-separated weights (e.g. 400,500,700)')\n .option('--subsets <subsets>', 'Comma-separated subsets (e.g. latin,latin-ext)', 'latin')\n .option('-o, --output <dir>', 'Output directory', './dist/fonts')\n .option('--display <value>', 'font-display value', 'swap')\n .option('--no-fallbacks', 'Skip fallback CSS generation')\n .option('--budget <bytes>', 'Performance budget in bytes', '150000')\n .option('--tokens <path>', 'Path to fetchtype.tokens.json to update')\n .action(\n async (\n font: string,\n options: {\n weights?: string;\n subsets: string;\n output: string;\n display: string;\n fallbacks: boolean;\n budget: string;\n tokens?: string;\n },\n ) => {\n logger.stdout(`fetchtype prepare: ${chalk.bold(font)}\\n\\n`);\n\n const weights = options.weights\n ? options.weights.split(',').map((w) => Number(w.trim())).filter(Boolean)\n : undefined;\n const subsets = options.subsets.split(',').map((s) => s.trim()).filter(Boolean);\n const performanceBudget = Number(options.budget);\n const fontDisplay = options.display as 'swap' | 'block' | 'fallback' | 'optional' | 'auto';\n\n let manifest: PrepareManifest;\n try {\n logger.stdout(` Downloading ${chalk.cyan(font)} from Google Fonts...\\n`);\n manifest = await prepareFont({\n fontId: font,\n weights,\n subsets,\n outputDir: options.output,\n fontDisplay,\n generateFallbacks: options.fallbacks,\n performanceBudget,\n tokenFile: options.tokens,\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.stderr(chalk.red(` Error: ${message}\\n`));\n program.setOptionValueWithSource('_result', 1, 'cli');\n return;\n }\n\n // Downloaded files\n for (const file of manifest.files) {\n const kb = (file.size / 1024).toFixed(1);\n logger.stdout(` ${chalk.green('✓')} ${file.path.split('/').pop()} (${kb} KB)\\n`);\n }\n\n // Generated artifacts\n logger.stdout(`\\n Generated:\\n`);\n for (const file of manifest.files) {\n logger.stdout(` ${file.path}\\n`);\n }\n logger.stdout(` ${options.output}/font-face.css\\n`);\n if (options.fallbacks) {\n logger.stdout(` ${options.output}/fallback.css\\n`);\n }\n logger.stdout(` ${options.output}/preload.html\\n`);\n logger.stdout(` ${options.output}/manifest.json\\n`);\n\n // Performance\n const totalKb = (manifest.performance.totalSize / 1024).toFixed(1);\n const budgetKb = (manifest.performance.budgetLimit / 1024).toFixed(1);\n logger.stdout(`\\n Performance:\\n`);\n logger.stdout(\n ` Total: ${totalKb} KB / ${budgetKb} KB budget (${manifest.performance.budgetUsed}%)\\n`,\n );\n if (manifest.performance.budgetExceeded) {\n logger.stdout(\n ` ${chalk.yellow('⚠')} Exceeds performance budget\\n`,\n );\n } else {\n logger.stdout(` ${chalk.green('✓')} Within performance budget\\n`);\n }\n\n // Token file update\n if (options.tokens && manifest.tokenPatch) {\n logger.stdout(`\\n Updated: ${options.tokens}\\n`);\n }\n\n logger.stdout('\\n');\n program.setOptionValueWithSource('_result', 0, 'cli');\n },\n );\n\n program\n .command('audit')\n .description('Audit a project or URL for typography issues.')\n .option('--dir <path>', 'Directory to scan for typography issues')\n .option('--url <url>', 'URL to analyze for typography issues')\n .addOption(\n new Option('--format <format>', 'Output format: terminal, json')\n .choices(['terminal', 'json'])\n .default('terminal'),\n )\n .option('--fix', 'Generate corrected fetchtype.tokens.json')\n .action(\n async (options: {\n dir?: string;\n url?: string;\n format: 'terminal' | 'json';\n fix?: boolean;\n }) => {\n if (!options.dir && !options.url) {\n logger.stderr(chalk.red('Error: Provide either --dir <path> or --url <url>.\\n'));\n program.setOptionValueWithSource('_result', 2, 'cli');\n return;\n }\n if (options.dir && options.url) {\n logger.stderr(chalk.red('Error: Use --dir or --url, not both.\\n'));\n program.setOptionValueWithSource('_result', 2, 'cli');\n return;\n }\n\n let result: AuditResult;\n try {\n if (options.dir) {\n const target = resolve(cwd, options.dir);\n result = await auditDirectory(target);\n } else {\n result = await auditUrl(options.url!);\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.stderr(chalk.red(`Error: ${message}\\n`));\n program.setOptionValueWithSource('_result', 2, 'cli');\n return;\n }\n\n if (options.format === 'json') {\n logger.stdout(`${JSON.stringify(result, null, 2)}\\n`);\n } else {\n const reportText = formatAuditReport(result);\n for (const line of reportText.split('\\n')) {\n if (line.startsWith(' x ')) {\n logger.stdout(`${chalk.red(line)}\\n`);\n } else if (line.startsWith(' ! ')) {\n logger.stdout(`${chalk.yellow(line)}\\n`);\n } else if (line.startsWith(' i ')) {\n logger.stdout(`${chalk.cyan(line)}\\n`);\n } else if (line.startsWith(' -> ')) {\n logger.stdout(`${chalk.green(line)}\\n`);\n } else if (line.startsWith(' Fix:')) {\n logger.stdout(`${chalk.dim(line)}\\n`);\n } else {\n logger.stdout(`${line}\\n`);\n }\n }\n }\n\n if (options.fix && result.fontsDetected.length > 0) {\n const tokens = generateCorrectedTokens(result);\n const outputPath = resolve(cwd, 'fetchtype.tokens.json');\n await writeFile(outputPath, `${JSON.stringify(tokens, null, 2)}\\n`, 'utf8');\n logger.stdout(chalk.green('\\n Generated: fetchtype.tokens.json (corrected, validated, ready to build)\\n'));\n }\n\n const hasErrors = result.issues.some((i) => i.severity === 'error');\n program.setOptionValueWithSource('_result', hasErrors ? 1 : 0, 'cli');\n },\n );\n\n program\n .command('preview')\n .description('Start a live preview server for token visualization.')\n .requiredOption('-i, --input <path>', 'Path to the token JSON file')\n .option('--port <number>', 'Port to listen on', '3000')\n .action(async (options: { input: string; port: string }) => {\n const target = resolve(cwd, options.input);\n try {\n await startPreviewServer(target, Number(options.port));\n program.setOptionValueWithSource('_result', 0, 'cli');\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.stderr(chalk.red(`Error: ${message}\\n`));\n program.setOptionValueWithSource('_result', 2, 'cli');\n }\n });\n\n program\n .command('mcp')\n .description('Start MCP server for AI agent integration (stdio transport).')\n .action(async () => {\n await startMcpServer();\n program.setOptionValueWithSource('_result', 0, 'cli');\n });\n\n program\n .command('generate')\n .description('Generate a complete token file from a context keyword.')\n .requiredOption('--context <context>', 'Target context: saas-dashboard, editorial, ecommerce, docs, marketing, dashboard, etc.')\n .option('--brand <hex>', 'Primary brand color hex (e.g. #2563eb)')\n .option('-p, --preset <name>', 'Explicit preset name to use as base')\n .option('--json', 'Output token set to stdout as JSON instead of writing a file')\n .option('-o, --output <path>', 'Output file path', 'tokens.json')\n .action(\n async (options: { context: string; brand?: string; preset?: string; json?: boolean; output: string }) => {\n program.setOptionValueWithSource(\n '_result',\n await handleGenerate(\n options.context,\n options.brand,\n options.preset,\n Boolean(options.json),\n options.output,\n cwd,\n logger,\n ),\n 'cli',\n );\n },\n );\n\n program\n .command('drift')\n .description('Compare two token snapshots and report typography drift.')\n .requiredOption('--baseline <path>', 'Path to the baseline token JSON file')\n .requiredOption('--current <path>', 'Path to the current token JSON file')\n .option('--json', 'Print machine-readable JSON output')\n .option('--ci', 'Exit with code 1 if any breaking changes are detected')\n .action(\n async (options: { baseline: string; current: string; json?: boolean; ci?: boolean }) => {\n program.setOptionValueWithSource(\n '_result',\n await handleDrift(\n options.baseline,\n options.current,\n Boolean(options.json),\n Boolean(options.ci),\n cwd,\n logger,\n ),\n 'cli',\n );\n },\n );\n\n program.exitOverride();\n return program;\n}\n\nexport async function runCli(\n argv: string[] = process.argv.slice(2),\n logger: Logger = defaultLogger,\n cwd = process.cwd(),\n): Promise<number> {\n const program = createProgram(logger, cwd);\n\n try {\n await program.parseAsync(argv, { from: 'user' });\n return Number(program.getOptionValue('_result') ?? 0);\n } catch (error) {\n if (error instanceof CommanderError) {\n return error.exitCode;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n logger.stderr(chalk.red(`Error: ${message}\\n`));\n return 2;\n }\n}\n","export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","import { z } from 'zod';\n\n// -- Font source types --\n\nexport const FontSourceSchema = z.enum(['google', 'self-hosted', 'custom', 'generated']);\nexport type FontSource = z.infer<typeof FontSourceSchema>;\n\nexport const FontLicenseSchema = z.object({\n type: z.enum(['ofl', 'apache2', 'proprietary', 'custom', 'derivative']),\n name: z.string(),\n url: z.string().url().optional(),\n restrictions: z\n .object({\n domains: z.array(z.string()).optional(),\n regions: z.array(z.string()).optional(),\n redistribution: z.boolean().optional(),\n modification: z.boolean().optional(),\n })\n .optional(),\n});\nexport type FontLicense = z.infer<typeof FontLicenseSchema>;\n\nexport const FontAxisSchema = z.object({\n min: z.number(),\n max: z.number(),\n default: z.number(),\n});\nexport type FontAxis = z.infer<typeof FontAxisSchema>;\n\n// -- Font reference: pointer to a font in the library --\n\nexport const FontReferenceSchema = z.object({\n family: z.string(),\n source: FontSourceSchema,\n variable: z.boolean().default(false),\n axes: z.record(z.string(), FontAxisSchema).optional(),\n license: FontLicenseSchema.optional(),\n category: z.enum(['sans-serif', 'serif', 'monospace', 'display', 'handwriting']).optional(),\n fallbacks: z.array(z.string()).optional(),\n});\nexport type FontReference = z.infer<typeof FontReferenceSchema>;\n\n// -- Font intent: what the font is for --\n\nexport const FontIntentSchema = z.enum(['heading', 'body', 'ui', 'data', 'display', 'code']);\nexport type FontIntent = z.infer<typeof FontIntentSchema>;\n\n// -- Font spec: the AI-produced font selection --\n\nexport const FontSpecSchema = z.object({\n primary: FontReferenceSchema,\n secondary: FontReferenceSchema.optional(),\n mono: FontReferenceSchema.optional(),\n weights: z.array(z.number().min(1).max(1000)),\n opticalSizes: z\n .object({\n min: z.number(),\n max: z.number(),\n })\n .optional(),\n intent: FontIntentSchema,\n});\nexport type FontSpec = z.infer<typeof FontSpecSchema>;\n\n// -- Font metadata: used for library indexing + search --\n\nexport const FontMoodSchema = z.enum([\n 'modern',\n 'classic',\n 'playful',\n 'serious',\n 'elegant',\n 'technical',\n 'friendly',\n 'bold',\n 'minimal',\n 'warm',\n 'cold',\n 'luxury',\n 'casual',\n 'formal',\n]);\nexport type FontMood = z.infer<typeof FontMoodSchema>;\n\nexport const FontMetadataSchema = z.object({\n family: z.string(),\n source: FontSourceSchema,\n category: z.enum(['sans-serif', 'serif', 'monospace', 'display', 'handwriting']),\n variable: z.boolean(),\n axes: z.record(z.string(), FontAxisSchema).optional(),\n weights: z.array(z.number()),\n subsets: z.array(z.string()),\n moods: z.array(FontMoodSchema),\n readabilityScore: z.number().min(0).max(1),\n license: FontLicenseSchema,\n popularityRank: z.number().optional(),\n pairingHints: z.array(z.string()).optional(),\n});\nexport type FontMetadata = z.infer<typeof FontMetadataSchema>;\n\n// -- Font asset: the actual deliverable --\n\nexport const FontFormatSchema = z.enum(['woff2', 'woff', 'ttf', 'otf', 'variable']);\nexport type FontFormat = z.infer<typeof FontFormatSchema>;\n\nexport const FontAssetSchema = z.object({\n family: z.string(),\n weight: z.number().optional(),\n style: z.enum(['normal', 'italic']).default('normal'),\n format: FontFormatSchema,\n url: z.string(),\n subset: z.string().optional(),\n unicodeRange: z.string().optional(),\n sizeBytes: z.number().optional(),\n});\nexport type FontAsset = z.infer<typeof FontAssetSchema>;\n","import { z } from 'zod';\n\n// -- Typography context: what the text is used for --\n\nexport const TypographyContextSchema = z.enum([\n 'heading',\n 'subheading',\n 'body',\n 'caption',\n 'button',\n 'label',\n 'input',\n 'chart-label',\n 'chart-axis',\n 'chart-title',\n 'code',\n 'blockquote',\n]);\nexport type TypographyContext = z.infer<typeof TypographyContextSchema>;\n\nexport const TokenReferenceSchema = z.string().regex(/^\\{[A-Za-z0-9_.-]+\\}$/);\nexport type TokenReference = z.infer<typeof TokenReferenceSchema>;\n\n// -- Individual token types (W3C DTCG compatible) --\n\nexport const TypographyTokenSchema = z.object({\n fontFamily: z.union([z.string(), z.array(z.string())]),\n fontSize: z.string(),\n fontWeight: z.union([z.number(), z.string()]),\n lineHeight: z.union([z.string(), z.number()]),\n letterSpacing: z.string().optional(),\n textTransform: z.enum(['none', 'uppercase', 'lowercase', 'capitalize']).optional(),\n textDecoration: z.enum(['none', 'underline', 'line-through']).optional(),\n});\nexport type TypographyToken = z.infer<typeof TypographyTokenSchema>;\n\nexport const ColorTokenSchema = z.object({\n value: z.string(),\n description: z.string().optional(),\n});\nexport type ColorToken = z.infer<typeof ColorTokenSchema>;\n\nexport const ColorTokensSchema = z.object({\n text: z.object({\n primary: ColorTokenSchema,\n secondary: ColorTokenSchema,\n muted: ColorTokenSchema,\n accent: ColorTokenSchema,\n inverse: ColorTokenSchema,\n }),\n background: z.object({\n primary: ColorTokenSchema,\n secondary: ColorTokenSchema,\n accent: ColorTokenSchema,\n muted: ColorTokenSchema,\n }),\n border: z.object({\n default: ColorTokenSchema,\n muted: ColorTokenSchema,\n accent: ColorTokenSchema,\n }),\n interactive: z.object({\n default: ColorTokenSchema,\n hover: ColorTokenSchema,\n active: ColorTokenSchema,\n focus: ColorTokenSchema,\n disabled: ColorTokenSchema,\n }),\n});\nexport type ColorTokens = z.infer<typeof ColorTokensSchema>;\n\nexport const SpacingTokensSchema = z.object({\n unit: z.string(),\n scale: z.record(z.string(), z.string()),\n});\nexport type SpacingTokens = z.infer<typeof SpacingTokensSchema>;\n\nexport const LayoutTokensSchema = z.object({\n maxWidth: z.object({\n prose: z.string(),\n content: z.string(),\n wide: z.string(),\n full: z.string(),\n }),\n breakpoints: z.record(z.string(), z.string()),\n grid: z\n .object({\n columns: z.number(),\n gap: z.string(),\n })\n .optional(),\n});\nexport type LayoutTokens = z.infer<typeof LayoutTokensSchema>;\n\n// -- Hierarchy: the type scale and emphasis rules --\n\nexport const HeadingLevelSchema = z.object({\n fontSize: z.string(),\n fontWeight: z.union([z.number(), z.string()]),\n lineHeight: z.union([z.string(), z.number()]),\n letterSpacing: z.string().optional(),\n fontFamily: z.union([z.string(), z.array(z.string())]).optional(),\n});\nexport type HeadingLevel = z.infer<typeof HeadingLevelSchema>;\n\nexport const HierarchyRulesSchema = z.object({\n scale: z.enum(['minor-second', 'major-second', 'minor-third', 'major-third', 'perfect-fourth']),\n baseSize: z.string(),\n headings: z.object({\n h1: HeadingLevelSchema,\n h2: HeadingLevelSchema,\n h3: HeadingLevelSchema,\n h4: HeadingLevelSchema,\n h5: HeadingLevelSchema,\n h6: HeadingLevelSchema,\n }),\n emphasis: z.object({\n strong: z.object({ fontWeight: z.union([z.number(), z.string()]) }),\n subtle: z.object({ opacity: z.number(), fontSize: z.string().optional() }),\n }),\n});\nexport type HierarchyRules = z.infer<typeof HierarchyRulesSchema>;\n\n// -- The complete design token set --\n\nexport const DesignTokenSetSchema = z.object({\n typography: z.record(TypographyContextSchema, TypographyTokenSchema),\n color: z.object({\n light: ColorTokensSchema,\n dark: ColorTokensSchema,\n }),\n spacing: SpacingTokensSchema,\n layout: LayoutTokensSchema,\n hierarchy: HierarchyRulesSchema,\n themes: z.array(z.lazy(() => ThemeModeSchema)).default([]),\n modes: z.record(z.string(), z.lazy(() => ModeOverrideSchema)).default({}),\n /** Optional: required font subsets for locale/script coverage validation. */\n requiredSubsets: z.array(z.string()).optional(),\n /** Optional: font-display strategy for font loading validation. */\n fontDisplay: z.enum(['auto', 'block', 'swap', 'fallback', 'optional']).optional(),\n});\nexport type DesignTokenSet = z.infer<typeof DesignTokenSetSchema>;\n\n// -- Mode: a named typography/layout override --\n\nexport const ModeOverrideSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n tokens: z.record(z.string(), z.unknown()).default({}),\n});\nexport type ModeOverride = z.infer<typeof ModeOverrideSchema>;\n\n// -- Theme: a named set of token overrides --\n\nexport const ThemeColorSchemeSchema = z.enum(['light', 'dark', 'auto', 'brand', 'high-contrast']);\nexport type ThemeColorScheme = z.infer<typeof ThemeColorSchemeSchema>;\n\nexport const ThemeModeSchema = z.object({\n name: z.string(),\n colorScheme: ThemeColorSchemeSchema,\n selector: z.string().optional(),\n tokens: z.record(z.string(), z.unknown()).default({}),\n});\nexport type ThemeMode = z.infer<typeof ThemeModeSchema>;\n","import { z } from 'zod';\n\n// -- Validation types --\n\nexport const SeveritySchema = z.enum(['error', 'warning', 'info']);\nexport type Severity = z.infer<typeof SeveritySchema>;\n\nexport const DiagnosticSchema = z.object({\n rule: z.string(),\n severity: SeveritySchema,\n path: z.string(),\n message: z.string(),\n expected: z.string().optional(),\n actual: z.string().optional(),\n});\nexport type Diagnostic = z.infer<typeof DiagnosticSchema>;\n\nexport const ReferenceEvaluationSchema = z.object({\n referenceId: z.string(),\n referenceName: z.string(),\n score: z.number(),\n matched: z.array(z.string()),\n mismatched: z.array(z.string()),\n summary: z.string().optional(),\n});\nexport type ReferenceEvaluation = z.infer<typeof ReferenceEvaluationSchema>;\n\nexport const ValidationReportSchema = z.object({\n diagnostics: z.array(DiagnosticSchema),\n references: z.array(ReferenceEvaluationSchema).optional(),\n counts: z.object({\n error: z.number(),\n warning: z.number(),\n info: z.number(),\n }),\n pass: z.boolean(),\n});\nexport type ValidationReport = z.infer<typeof ValidationReportSchema>;\n\n// -- Validator interface --\n\nexport type Validator = {\n name: string;\n run: (tokenSet: unknown, config: ValidatorConfig) => Diagnostic[];\n};\n\nexport type ValidatorConfig = {\n severity: Record<string, Severity>;\n disable: string[];\n};\n","import { z } from 'zod';\n\nimport { SeveritySchema } from './validation.js';\n\n// -- Config schema --\n\nexport const ExportFormatSchema = z.enum(['css', 'json', 'tailwind', 'shadcn', 'w3c']);\nexport type ExportFormat = z.infer<typeof ExportFormatSchema>;\n\nexport const RuleConfigSchema = z.union([\n SeveritySchema, // Just set severity: \"error\" | \"warning\" | \"info\"\n z.literal(false), // Disable the rule\n z.object({\n severity: SeveritySchema,\n options: z.record(z.string(), z.unknown()).optional(),\n }),\n]);\nexport type RuleConfig = z.infer<typeof RuleConfigSchema>;\n\nexport const FetchTypeConfigSchema = z.object({\n // Extend a built-in profile or npm package config\n extends: z.union([z.string(), z.array(z.string())]).optional(),\n\n // Base preset to use (editorial, dashboard, etc.)\n preset: z.string().optional(),\n\n // Token file glob pattern(s)\n tokens: z.union([z.string(), z.array(z.string())]).default('tokens/**/*.json'),\n\n // Output directory\n outDir: z.string().default('dist/tokens'),\n\n // Export formats to produce\n exporters: z.array(ExportFormatSchema).default(['css', 'json']),\n\n // Theme settings\n themes: z\n .object({\n default: z.string().default('light'),\n })\n .default({}),\n\n // Validation rule configuration\n rules: z.record(z.string(), RuleConfigSchema).default({}),\n\n // Font policy\n fonts: z\n .object({\n allow: z.array(z.string()).optional(), // Only these fonts allowed\n block: z\n .array(\n z.union([\n z.string(),\n z.object({ family: z.string(), reason: z.string() }),\n ]),\n )\n .optional(), // These fonts blocked with reasons\n googleFontsApiKey: z.string().optional(),\n cacheDir: z.string().default('.fetchtype/fonts'),\n })\n .default({}),\n\n // Performance budgets\n performance: z\n .object({\n maxFontPayloadKb: z.number().optional(),\n maxFontCount: z.number().optional(),\n maxPreloadCount: z.number().optional(),\n })\n .default({}),\n\n // Required subsets for locale coverage\n requiredSubsets: z.array(z.string()).optional(),\n\n // Plugin packages (future)\n plugins: z.array(z.string()).default([]),\n});\nexport type FetchTypeConfig = z.infer<typeof FetchTypeConfigSchema>;\n","import { z } from 'zod';\n\nexport const AgentNextActionSchema = z.object({\n tool: z.string(),\n description: z.string(),\n suggestedArgs: z.record(z.string(), z.unknown()).optional(),\n});\nexport type AgentNextAction = z.infer<typeof AgentNextActionSchema>;\n\nexport const AgentDecisionSchema = z.object({\n decision: z.string(),\n confidence: z.number().min(0).max(1),\n alternatives: z\n .array(\n z.object({\n option: z.string(),\n tradeoff: z.string(),\n }),\n )\n .default([]),\n constraints: z.array(z.string()).default([]),\n nextActions: z.array(AgentNextActionSchema).default([]),\n});\nexport type AgentDecision = z.infer<typeof AgentDecisionSchema>;\n","import { z } from 'zod';\n\n// === Rendering Targets ===\n// The correct abstraction for fallback computation: rendering engines, not platforms.\n// Core Text (Apple), DirectWrite (Windows), FreeType (Android/Linux), Universal (Arial everywhere).\n\nexport const RenderingTargetSchema = z.enum([\n 'apple',\n 'windows',\n 'android',\n 'linux',\n 'universal',\n]);\nexport type RenderingTarget = z.infer<typeof RenderingTargetSchema>;\n\n// === Typographic Context ===\n// Where a font excels — distinct from token-level TypographyContext (heading/body/caption).\n\nexport const TypographicContextSchema = z.enum([\n 'display',\n 'interface',\n 'reading',\n 'mono',\n 'editorial',\n 'data',\n]);\nexport type TypographicContext = z.infer<typeof TypographicContextSchema>;\n\n// === Variable Axis ===\n\nexport const RegistryVariableAxisSchema = z.object({\n tag: z.string(),\n name: z.string(),\n min: z.number(),\n max: z.number(),\n default: z.number(),\n step: z.number(),\n cssProperty: z.string().nullable(),\n});\nexport type RegistryVariableAxis = z.infer<typeof RegistryVariableAxisSchema>;\n\n// === Fallback Target ===\n\nexport const FallbackOverridesSchema = z.object({\n ascentOverride: z.string(),\n descentOverride: z.string(),\n lineGapOverride: z.string(),\n sizeAdjust: z.string(),\n});\nexport type FallbackOverrides = z.infer<typeof FallbackOverridesSchema>;\n\nexport const FallbackTargetSchema = z.object({\n target: RenderingTargetSchema,\n fallbackFont: z.string(),\n localNames: z.array(z.string()),\n overrides: FallbackOverridesSchema,\n});\nexport type FallbackTarget = z.infer<typeof FallbackTargetSchema>;\n\n// === Pairing Recommendation ===\n\nexport const PairingRoleSchema = z.enum(['heading', 'body', 'accent', 'mono']);\nexport type PairingRole = z.infer<typeof PairingRoleSchema>;\n\nexport const PairingRecommendationSchema = z.object({\n fontId: z.string(),\n role: PairingRoleSchema,\n confidence: z.number().min(0).max(1),\n rationale: z.string(),\n source: z.enum(['curated', 'algorithmic']).optional(),\n});\nexport type PairingRecommendation = z.infer<typeof PairingRecommendationSchema>;\n\n// === System Font Info ===\n\nexport const SystemFontInfoSchema = z.object({\n platforms: z.array(RenderingTargetSchema),\n localNames: z.array(z.string()),\n cssKeywords: z.array(z.string()),\n note: z.string().nullable(),\n});\nexport type SystemFontInfo = z.infer<typeof SystemFontInfoSchema>;\n\n// === Font Entry Performance ===\n\nexport const FontPerformanceSchema = z.object({\n woff2Size: z.record(z.string(), z.number()),\n variableFileSize: z.number().nullable(),\n estimatedPayload: z.number(),\n loadingImpact: z.enum(['minimal', 'moderate', 'heavy']),\n});\nexport type FontPerformance = z.infer<typeof FontPerformanceSchema>;\n\n// === Font Entry Metrics ===\n\nexport const FontMetricsSchema = z.object({\n unitsPerEm: z.number(),\n ascent: z.number(),\n descent: z.number(),\n lineGap: z.number(),\n xHeight: z.number().nullable(),\n capHeight: z.number().nullable(),\n useTypoMetrics: z.boolean(),\n hheaAscent: z.number().nullable(),\n hheaDescent: z.number().nullable(),\n winAscent: z.number().nullable(),\n winDescent: z.number().nullable(),\n});\nexport type FontMetrics = z.infer<typeof FontMetricsSchema>;\n\n// === Font Entry Fallback Intelligence ===\n\nexport const FontFallbackSchema = z.object({\n targets: z.array(FallbackTargetSchema),\n requiresPlatformSplit: z.boolean(),\n generatedCSS: z.string(),\n});\nexport type FontFallback = z.infer<typeof FontFallbackSchema>;\n\n// === Font Entry Pairing Intelligence ===\n\nexport const FontPairingIntelligenceSchema = z.object({\n recommended: z.array(PairingRecommendationSchema),\n});\nexport type FontPairingIntelligence = z.infer<typeof FontPairingIntelligenceSchema>;\n\n// === Font Entry License ===\n\nexport const RegistryLicenseSchema = z.object({\n type: z.string(),\n url: z.string(),\n commercial: z.boolean(),\n selfHostable: z.boolean(),\n attribution: z.string().nullable(),\n});\nexport type RegistryLicense = z.infer<typeof RegistryLicenseSchema>;\n\n// === Font Entry Install / Deployment ===\n\nexport const FontInstallSchema = z.object({\n fontsource: z.string().nullable(),\n googleCdn: z.string().nullable(),\n npmPackage: z.string().nullable(),\n system: SystemFontInfoSchema.nullable(),\n});\nexport type FontInstall = z.infer<typeof FontInstallSchema>;\n\n// === FontEntry — the core registry schema ===\n\nexport const FontEntrySchema = z.object({\n // Identity\n id: z.string(),\n family: z.string(),\n version: z.string(),\n source: z.enum(['google', 'fontsource', 'system', 'community']),\n lastUpdated: z.string(),\n\n // Classification\n category: z.enum(['sans-serif', 'serif', 'monospace', 'display', 'handwriting']),\n tags: z.array(z.string()),\n contexts: z.array(TypographicContextSchema),\n\n // Technical\n variable: z.boolean(),\n axes: z.array(RegistryVariableAxisSchema),\n weights: z.array(z.number()),\n styles: z.array(z.enum(['normal', 'italic'])),\n subsets: z.array(z.string()),\n formats: z.array(z.enum(['woff2', 'woff', 'ttf', 'otf'])),\n hasItalic: z.boolean(),\n hasOpticalSizing: z.boolean(),\n\n // Performance (enriched)\n performance: FontPerformanceSchema,\n\n // Rendering (enriched)\n metrics: FontMetricsSchema,\n\n // Fallback Intelligence (enriched)\n fallback: FontFallbackSchema,\n\n // Pairing Intelligence (enriched)\n pairing: FontPairingIntelligenceSchema,\n\n // Licensing\n license: RegistryLicenseSchema,\n\n // Deployment\n install: FontInstallSchema,\n\n // Context Intelligence (enriched)\n contextScores: z.record(z.string(), z.number()).optional(),\n\n // Size Guidance (enriched)\n sizeGuidance: z.object({\n body: z.object({ min: z.number(), optimal: z.number(), max: z.number() }),\n display: z.object({ min: z.number() }),\n caption: z.object({ min: z.number() }),\n opticalSizeMapping: z.array(z.object({\n cssSize: z.number(),\n opszValue: z.number(),\n })).nullable(),\n }).optional(),\n});\nexport type FontEntry = z.infer<typeof FontEntrySchema>;\n\n// === Registry (collection of FontEntry) ===\n\nexport const FontRegistrySchema = z.object({\n version: z.string(),\n generatedAt: z.string(),\n count: z.number(),\n fonts: z.array(FontEntrySchema),\n});\nexport type FontRegistry = z.infer<typeof FontRegistrySchema>;\n","export type CatalogEntry = {\n family: string;\n category: 'sans-serif' | 'serif' | 'display' | 'monospace' | 'handwriting';\n weights: number[];\n variable: boolean;\n subsets: string[];\n sizeKb: number;\n contexts: ('display' | 'interface' | 'reading' | 'mono')[];\n};\n\nexport const GOOGLE_FONTS_CATALOG: CatalogEntry[] = [\n // Sans-serif — interface & display\n {\n family: 'Inter',\n category: 'sans-serif',\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n variable: true,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'greek', 'greek-ext', 'vietnamese'],\n sizeKb: 32,\n contexts: ['interface', 'reading'],\n },\n {\n family: 'Roboto',\n category: 'sans-serif',\n weights: [100, 300, 400, 500, 700, 900],\n variable: false,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'greek', 'greek-ext', 'vietnamese'],\n sizeKb: 18,\n contexts: ['interface', 'reading'],\n },\n {\n family: 'Open Sans',\n category: 'sans-serif',\n weights: [300, 400, 500, 600, 700, 800],\n variable: true,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'greek', 'greek-ext', 'hebrew', 'vietnamese'],\n sizeKb: 22,\n contexts: ['interface', 'reading'],\n },\n {\n family: 'Lato',\n category: 'sans-serif',\n weights: [100, 300, 400, 700, 900],\n variable: false,\n subsets: ['latin', 'latin-ext'],\n sizeKb: 24,\n contexts: ['interface', 'reading'],\n },\n {\n family: 'Montserrat',\n category: 'sans-serif',\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n variable: true,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'vietnamese'],\n sizeKb: 26,\n contexts: ['display', 'interface'],\n },\n {\n family: 'Source Sans 3',\n category: 'sans-serif',\n weights: [200, 300, 400, 500, 600, 700, 800, 900],\n variable: true,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'greek', 'greek-ext', 'vietnamese'],\n sizeKb: 20,\n contexts: ['interface', 'reading'],\n },\n {\n family: 'Noto Sans',\n category: 'sans-serif',\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n variable: true,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'greek', 'greek-ext', 'vietnamese', 'devanagari'],\n sizeKb: 23,\n contexts: ['interface', 'reading'],\n },\n {\n family: 'Poppins',\n category: 'sans-serif',\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n variable: false,\n subsets: ['latin', 'latin-ext', 'devanagari'],\n sizeKb: 17,\n contexts: ['interface', 'display'],\n },\n {\n family: 'Raleway',\n category: 'sans-serif',\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n variable: true,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'vietnamese'],\n sizeKb: 25,\n contexts: ['display', 'interface'],\n },\n {\n family: 'Nunito',\n category: 'sans-serif',\n weights: [200, 300, 400, 500, 600, 700, 800, 900],\n variable: true,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'vietnamese'],\n sizeKb: 21,\n contexts: ['interface', 'reading'],\n },\n {\n family: 'Work Sans',\n category: 'sans-serif',\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n variable: true,\n subsets: ['latin', 'latin-ext', 'vietnamese'],\n sizeKb: 22,\n contexts: ['interface', 'reading'],\n },\n {\n family: 'DM Sans',\n category: 'sans-serif',\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n variable: true,\n subsets: ['latin', 'latin-ext'],\n sizeKb: 20,\n contexts: ['interface', 'display'],\n },\n {\n family: 'Plus Jakarta Sans',\n category: 'sans-serif',\n weights: [200, 300, 400, 500, 600, 700, 800],\n variable: true,\n subsets: ['latin', 'latin-ext', 'vietnamese'],\n sizeKb: 19,\n contexts: ['interface', 'display'],\n },\n {\n family: 'Geist',\n category: 'sans-serif',\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n variable: true,\n subsets: ['latin', 'latin-ext'],\n sizeKb: 30,\n contexts: ['interface', 'display'],\n },\n\n // Serif — reading & display\n {\n family: 'Source Serif 4',\n category: 'serif',\n weights: [200, 300, 400, 500, 600, 700, 800, 900],\n variable: true,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'greek', 'vietnamese'],\n sizeKb: 28,\n contexts: ['reading', 'display'],\n },\n {\n family: 'Merriweather',\n category: 'serif',\n weights: [300, 400, 700, 900],\n variable: false,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'vietnamese'],\n sizeKb: 30,\n contexts: ['reading'],\n },\n {\n family: 'Playfair Display',\n category: 'serif',\n weights: [400, 500, 600, 700, 800, 900],\n variable: true,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'vietnamese'],\n sizeKb: 34,\n contexts: ['display'],\n },\n {\n family: 'Lora',\n category: 'serif',\n weights: [400, 500, 600, 700],\n variable: true,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'vietnamese'],\n sizeKb: 26,\n contexts: ['reading', 'display'],\n },\n {\n family: 'Crimson Text',\n category: 'serif',\n weights: [400, 600, 700],\n variable: false,\n subsets: ['latin', 'latin-ext', 'vietnamese'],\n sizeKb: 22,\n contexts: ['reading'],\n },\n {\n family: 'Libre Baskerville',\n category: 'serif',\n weights: [400, 700],\n variable: false,\n subsets: ['latin', 'latin-ext'],\n sizeKb: 30,\n contexts: ['reading'],\n },\n {\n family: 'EB Garamond',\n category: 'serif',\n weights: [400, 500, 600, 700, 800],\n variable: true,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'greek', 'greek-ext', 'vietnamese'],\n sizeKb: 32,\n contexts: ['reading', 'display'],\n },\n {\n family: 'Noto Serif',\n category: 'serif',\n weights: [100, 200, 300, 400, 500, 600, 700, 800, 900],\n variable: true,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'greek', 'greek-ext', 'vietnamese'],\n sizeKb: 27,\n contexts: ['reading'],\n },\n {\n family: 'PT Serif',\n category: 'serif',\n weights: [400, 700],\n variable: false,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext'],\n sizeKb: 20,\n contexts: ['reading'],\n },\n\n // Monospace\n {\n family: 'JetBrains Mono',\n category: 'monospace',\n weights: [100, 200, 300, 400, 500, 600, 700, 800],\n variable: true,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'greek', 'vietnamese'],\n sizeKb: 28,\n contexts: ['mono'],\n },\n {\n family: 'Fira Code',\n category: 'monospace',\n weights: [300, 400, 500, 600, 700],\n variable: true,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'greek', 'greek-ext'],\n sizeKb: 42,\n contexts: ['mono'],\n },\n {\n family: 'Source Code Pro',\n category: 'monospace',\n weights: [200, 300, 400, 500, 600, 700, 800, 900],\n variable: true,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'greek', 'greek-ext', 'vietnamese'],\n sizeKb: 22,\n contexts: ['mono'],\n },\n {\n family: 'IBM Plex Mono',\n category: 'monospace',\n weights: [100, 200, 300, 400, 500, 600, 700],\n variable: false,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'vietnamese'],\n sizeKb: 18,\n contexts: ['mono'],\n },\n {\n family: 'Inconsolata',\n category: 'monospace',\n weights: [200, 300, 400, 500, 600, 700, 800, 900],\n variable: true,\n subsets: ['latin', 'latin-ext', 'vietnamese'],\n sizeKb: 16,\n contexts: ['mono'],\n },\n {\n family: 'Space Mono',\n category: 'monospace',\n weights: [400, 700],\n variable: false,\n subsets: ['latin', 'latin-ext', 'vietnamese'],\n sizeKb: 14,\n contexts: ['mono'],\n },\n\n // Display\n {\n family: 'Oswald',\n category: 'sans-serif',\n weights: [200, 300, 400, 500, 600, 700],\n variable: true,\n subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'vietnamese'],\n sizeKb: 18,\n contexts: ['display'],\n },\n {\n family: 'Bebas Neue',\n category: 'display',\n weights: [400],\n variable: false,\n subsets: ['latin', 'latin-ext'],\n sizeKb: 12,\n contexts: ['display'],\n },\n {\n family: 'Anton',\n category: 'sans-serif',\n weights: [400],\n variable: false,\n subsets: ['latin', 'latin-ext', 'vietnamese'],\n sizeKb: 14,\n contexts: ['display'],\n },\n];\n\nexport function lookupFont(family: string): CatalogEntry | undefined {\n const normalized = family.toLowerCase().trim();\n return GOOGLE_FONTS_CATALOG.find((entry) => entry.family.toLowerCase() === normalized);\n}\n\nexport function searchFonts(query: {\n category?: string;\n context?: string;\n variable?: boolean;\n}): CatalogEntry[] {\n return GOOGLE_FONTS_CATALOG.filter((entry) => {\n if (query.category !== undefined && entry.category !== query.category) {\n return false;\n }\n if (query.context !== undefined && !entry.contexts.includes(query.context as CatalogEntry['contexts'][number])) {\n return false;\n }\n if (query.variable !== undefined && entry.variable !== query.variable) {\n return false;\n }\n return true;\n });\n}\n","import { type CatalogEntry, GOOGLE_FONTS_CATALOG } from './catalog.js';\n\nexport type SuggestionContext = 'display' | 'interface' | 'reading' | 'mono';\n\nexport type FontSuggestion = {\n family: string;\n category: string;\n reason: string;\n variable: boolean;\n sizeKb: number;\n};\n\nconst CONTEXT_REASONS: Record<SuggestionContext, (entry: CatalogEntry) => string> = {\n display: (entry) =>\n entry.category === 'display' || entry.category === 'serif'\n ? `${entry.family} is a ${entry.category} font with good optical presence for large-scale typography.`\n : `${entry.family} works well at display sizes with its distinctive character.`,\n interface: (entry) =>\n entry.weights.length >= 5\n ? `${entry.family} offers ${entry.weights.length} weights for flexible UI hierarchy.`\n : `${entry.family} is a clean ${entry.category} font suited for application interfaces.`,\n reading: (entry) =>\n entry.category === 'serif'\n ? `${entry.family} is optimized for comfortable long-form reading.`\n : `${entry.family} provides excellent readability for body text.`,\n mono: () => 'Designed for code and technical content with clear character distinction.',\n};\n\nexport function suggestFonts(\n context: SuggestionContext,\n options?: { limit?: number; variableOnly?: boolean },\n): FontSuggestion[] {\n const limit = options?.limit ?? 5;\n const variableOnly = options?.variableOnly ?? false;\n\n const candidates = GOOGLE_FONTS_CATALOG.filter((entry) => {\n if (!entry.contexts.includes(context)) {\n return false;\n }\n if (variableOnly && !entry.variable) {\n return false;\n }\n return true;\n });\n\n // Sort: variable fonts first, then by number of weights (more flexible), then by size (smaller better)\n const sorted = candidates.sort((a, b) => {\n if (a.variable !== b.variable) {\n return a.variable ? -1 : 1;\n }\n if (a.weights.length !== b.weights.length) {\n return b.weights.length - a.weights.length;\n }\n return a.sizeKb - b.sizeKb;\n });\n\n return sorted.slice(0, limit).map((entry) => ({\n family: entry.family,\n category: entry.category,\n reason: CONTEXT_REASONS[context](entry),\n variable: entry.variable,\n sizeKb: entry.sizeKb,\n }));\n}\n","/**\n * Runtime registry module.\n *\n * Loads the bundled registry.json and provides query functions\n * for font lookup, search, and filtering.\n */\n\nimport { readFileSync } from 'node:fs';\nimport { resolve, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { FontEntry, FontRegistry, TypographicContext } from '@fetchtype/types';\n\n// ---------------------------------------------------------------------------\n// Registry loading\n// ---------------------------------------------------------------------------\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst REGISTRY_PATH = resolve(__dirname, '../data/registry.json');\n\nlet _registry: FontRegistry | null = null;\n\nfunction getRegistry(): FontRegistry {\n if (!_registry) {\n const raw = readFileSync(REGISTRY_PATH, 'utf-8');\n _registry = JSON.parse(raw) as FontRegistry;\n }\n return _registry;\n}\n\n/** Get the full registry (for advanced use). */\nexport function loadRegistry(): FontRegistry {\n return getRegistry();\n}\n\n/** Get registry metadata without loading all fonts. */\nexport function registryStats(): { version: string; generatedAt: string; count: number; variableCount: number } {\n const reg = getRegistry();\n return {\n version: reg.version,\n generatedAt: reg.generatedAt,\n count: reg.count,\n variableCount: reg.fonts.filter(f => f.variable).length,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Lookup\n// ---------------------------------------------------------------------------\n\n/** Resolve a single font by ID (e.g. \"inter\") or family name (e.g. \"Inter\"). */\nexport function resolveFont(idOrFamily: string): FontEntry | undefined {\n const reg = getRegistry();\n const normalized = idOrFamily.trim().toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\n\n // Try ID match first (fast)\n const byId = reg.fonts.find(f => f.id === normalized);\n if (byId) return byId;\n\n // Try case-insensitive family match\n const lowerFamily = idOrFamily.trim().toLowerCase();\n return reg.fonts.find(f => f.family.toLowerCase() === lowerFamily);\n}\n\n/** Check if a font exists in the registry. */\nexport function hasFont(idOrFamily: string): boolean {\n return resolveFont(idOrFamily) !== undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Search\n// ---------------------------------------------------------------------------\n\nexport type RegistrySearchOptions = {\n /** Free-text query matched against family, tags, and category */\n query?: string;\n /** Filter by typographic context */\n context?: TypographicContext;\n /** Only variable fonts */\n variable?: boolean;\n /** Filter by category */\n category?: 'sans-serif' | 'serif' | 'monospace' | 'display' | 'handwriting';\n /** Filter by subset support (e.g. 'cyrillic') */\n subset?: string;\n /** Maximum estimated payload in bytes */\n maxPayload?: number;\n /** Font source filter */\n source?: 'google' | 'fontsource' | 'system' | 'community';\n /** Maximum number of results (default: 20) */\n limit?: number;\n};\n\n/** Search the registry with free-text and filters. */\nexport function searchRegistry(options: RegistrySearchOptions = {}): FontEntry[] {\n const reg = getRegistry();\n const limit = options.limit ?? 20;\n\n let results = reg.fonts;\n\n // Apply filters\n if (options.source) {\n results = results.filter(f => f.source === options.source);\n }\n if (options.category) {\n results = results.filter(f => f.category === options.category);\n }\n if (options.variable !== undefined) {\n results = results.filter(f => f.variable === options.variable);\n }\n if (options.context) {\n results = results.filter(f => f.contexts.includes(options.context!));\n }\n if (options.subset) {\n const subset = options.subset.toLowerCase();\n results = results.filter(f => f.subsets.some(s => s.toLowerCase() === subset));\n }\n if (options.maxPayload !== undefined) {\n results = results.filter(f => f.performance.estimatedPayload <= options.maxPayload!);\n }\n\n // Free-text search with relevance scoring\n if (options.query) {\n const terms = options.query.toLowerCase().split(/\\s+/).filter(Boolean);\n const scored = results\n .map(f => {\n const familyLower = f.family.toLowerCase();\n const searchable = [familyLower, f.category, ...f.tags, ...f.contexts, f.source].join(' ');\n if (!terms.every(term => searchable.includes(term))) return null;\n\n // Score: exact family match > starts-with > word boundary > substring\n let score = 0;\n for (const term of terms) {\n if (familyLower === term) score += 100;\n else if (familyLower.startsWith(term)) score += 50;\n else if (familyLower.includes(term)) score += 20;\n else if (f.tags.some(t => t.includes(term))) score += 10;\n else score += 1;\n }\n // Boost variable fonts and popular weight ranges\n if (f.variable) score += 3;\n if (f.weights.length >= 6) score += 2;\n return { font: f, score };\n })\n .filter((s): s is { font: FontEntry; score: number } => s !== null)\n .sort((a, b) => b.score - a.score);\n\n return scored.slice(0, limit).map(s => s.font);\n }\n\n return results.slice(0, limit);\n}\n\n// ---------------------------------------------------------------------------\n// Suggest (registry-aware version of the suggest engine)\n// ---------------------------------------------------------------------------\n\nexport type RegistrySuggestOptions = {\n context: TypographicContext;\n limit?: number;\n variable?: boolean;\n maxPayload?: number;\n subset?: string;\n};\n\n/** Suggest fonts for a typographic context, powered by the full registry. */\nexport function suggestFromRegistry(options: RegistrySuggestOptions): FontEntry[] {\n const reg = getRegistry();\n const limit = options.limit ?? 5;\n\n let candidates = reg.fonts.filter(f => {\n if (!f.contexts.includes(options.context)) return false;\n if (options.variable !== undefined && f.variable !== options.variable) return false;\n if (options.maxPayload !== undefined && f.performance.estimatedPayload > options.maxPayload) return false;\n if (options.subset) {\n const subset = options.subset.toLowerCase();\n if (!f.subsets.some(s => s.toLowerCase() === subset)) return false;\n }\n // Exclude system fonts from suggestions by default (they're zero-payload but not installable)\n if (f.source === 'system') return false;\n return true;\n });\n\n // Sort by relevance: variable first, more weights, smaller payload\n candidates.sort((a, b) => {\n if (a.variable !== b.variable) return a.variable ? -1 : 1;\n if (a.weights.length !== b.weights.length) return b.weights.length - a.weights.length;\n return a.performance.estimatedPayload - b.performance.estimatedPayload;\n });\n\n return candidates.slice(0, limit);\n}\n\n// ---------------------------------------------------------------------------\n// Pair (basic — enhanced in pairing intelligence module)\n// ---------------------------------------------------------------------------\n\n/** Get pairing recommendations for a font. */\nexport function getPairings(idOrFamily: string, role?: 'heading' | 'body' | 'accent' | 'mono'): FontEntry[] {\n const font = resolveFont(idOrFamily);\n if (!font) return [];\n\n const reg = getRegistry();\n const recs = font.pairing.recommended\n .filter(r => !role || r.role === role)\n .sort((a, b) => b.confidence - a.confidence);\n\n return recs\n .map(r => reg.fonts.find(f => f.id === r.fontId))\n .filter((f): f is FontEntry => f !== undefined);\n}\n","/**\n * Pairing intelligence module.\n *\n * Curated pairings for top fonts + algorithmic contrast-based fallback\n * for the long tail. Used by the registry enrichment pipeline and\n * the CLI/MCP pair command.\n */\n\nimport type { FontEntry, PairingRecommendation } from '@fetchtype/types';\nimport { loadRegistry, resolveFont } from './registry.js';\n\n// ---------------------------------------------------------------------------\n// Curated pairings for popular fonts\n// ---------------------------------------------------------------------------\n\ntype CuratedPairing = Omit<PairingRecommendation, 'fontId'> & { family: string };\n\n/** Curated pairings for the top fonts by popularity. */\nconst CURATED_PAIRINGS: Record<string, CuratedPairing[]> = {\n 'inter': [\n { family: 'Crimson Pro', role: 'heading', confidence: 0.92, rationale: 'Elegant old-style serif contrasts geometric sans for editorial layouts' },\n { family: 'Fraunces', role: 'heading', confidence: 0.90, rationale: 'Optical-size variable serif with strong display personality pairs cleanly' },\n { family: 'Source Serif 4', role: 'body', confidence: 0.88, rationale: 'Adobe serif with matching x-height for parallel reading columns' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.95, rationale: 'Purpose-built code font with clear character distinction' },\n { family: 'Playfair Display', role: 'heading', confidence: 0.85, rationale: 'High-contrast didone serif for dramatic display headlines' },\n ],\n 'roboto': [\n { family: 'Roboto Slab', role: 'heading', confidence: 0.93, rationale: 'Same design family — slab variant provides weight without style clash' },\n { family: 'Merriweather', role: 'body', confidence: 0.87, rationale: 'Screen-optimized serif with compatible metrics for body text' },\n { family: 'Roboto Mono', role: 'mono', confidence: 0.96, rationale: 'Same family monospace with matching proportions' },\n { family: 'Playfair Display', role: 'heading', confidence: 0.82, rationale: 'Classic serif contrast against neo-grotesque sans' },\n ],\n 'open-sans': [\n { family: 'Merriweather', role: 'heading', confidence: 0.90, rationale: 'Screen-optimized serif with compatible x-height' },\n { family: 'Lora', role: 'heading', confidence: 0.88, rationale: 'Contemporary serif with calligraphic roots for warm heading contrast' },\n { family: 'Source Code Pro', role: 'mono', confidence: 0.90, rationale: 'Adobe monospace with clear letterforms for code blocks' },\n ],\n 'montserrat': [\n { family: 'Merriweather', role: 'body', confidence: 0.88, rationale: 'Warm serif balances geometric sans display heads' },\n { family: 'Cardo', role: 'body', confidence: 0.85, rationale: 'Classical serif for long-form reading under geometric headers' },\n { family: 'Fira Mono', role: 'mono', confidence: 0.87, rationale: 'Humanist mono complements geometric sans' },\n ],\n 'lato': [\n { family: 'Merriweather', role: 'heading', confidence: 0.89, rationale: 'Warm serif heading with humanist sans body creates balanced hierarchy' },\n { family: 'Lora', role: 'heading', confidence: 0.87, rationale: 'Calligraphic serif adds personality above neutral body text' },\n ],\n 'poppins': [\n { family: 'Lora', role: 'body', confidence: 0.86, rationale: 'Warm serif body text under geometric sans headings' },\n { family: 'Libre Baskerville', role: 'body', confidence: 0.84, rationale: 'Classical body serif under modern geometric headers' },\n { family: 'Fira Code', role: 'mono', confidence: 0.88, rationale: 'Ligature-rich monospace pairs with geometric sans' },\n ],\n 'source-sans-3': [\n { family: 'Source Serif 4', role: 'heading', confidence: 0.95, rationale: 'Same design family — serif and sans share proportions and metrics' },\n { family: 'Source Code Pro', role: 'mono', confidence: 0.97, rationale: 'Same design family — perfect metric alignment across all three' },\n ],\n 'raleway': [\n { family: 'Merriweather', role: 'body', confidence: 0.87, rationale: 'Screen serif grounds elegant geometric display font' },\n { family: 'Lora', role: 'body', confidence: 0.85, rationale: 'Warm calligraphic serif as body under elegant sans heads' },\n ],\n 'nunito': [\n { family: 'Nunito Sans', role: 'body', confidence: 0.94, rationale: 'Sister font — rounded display with sans body for UI hierarchy' },\n { family: 'Merriweather', role: 'heading', confidence: 0.83, rationale: 'Warm serif heading over friendly rounded sans body' },\n ],\n 'playfair-display': [\n { family: 'Lato', role: 'body', confidence: 0.90, rationale: 'Neutral humanist sans grounds high-contrast serif display' },\n { family: 'Source Sans 3', role: 'body', confidence: 0.89, rationale: 'Clean sans body lets didone headlines shine' },\n { family: 'Fira Code', role: 'mono', confidence: 0.80, rationale: 'Modern monospace for technical contexts' },\n ],\n 'merriweather': [\n { family: 'Open Sans', role: 'body', confidence: 0.90, rationale: 'Clean sans body under warm serif headings' },\n { family: 'Lato', role: 'body', confidence: 0.89, rationale: 'Neutral humanist sans for comfortable reading' },\n { family: 'Source Code Pro', role: 'mono', confidence: 0.87, rationale: 'Matching screen-optimized monospace' },\n ],\n 'fira-code': [\n { family: 'Inter', role: 'body', confidence: 0.90, rationale: 'Clean sans for UI and docs around code blocks' },\n { family: 'IBM Plex Sans', role: 'body', confidence: 0.88, rationale: 'Corporate sans for documentation' },\n ],\n 'jetbrains-mono': [\n { family: 'Inter', role: 'body', confidence: 0.92, rationale: 'Clean geometric sans for documentation and UI' },\n { family: 'IBM Plex Sans', role: 'body', confidence: 0.89, rationale: 'Structured sans for technical documentation' },\n ],\n 'ibm-plex-sans': [\n { family: 'IBM Plex Serif', role: 'heading', confidence: 0.96, rationale: 'Same design family — serif for editorial depth' },\n { family: 'IBM Plex Mono', role: 'mono', confidence: 0.97, rationale: 'Same design family — perfect metric alignment' },\n ],\n 'dm-sans': [\n { family: 'DM Serif Display', role: 'heading', confidence: 0.95, rationale: 'Same design family — serif for display contrast' },\n { family: 'DM Mono', role: 'mono', confidence: 0.96, rationale: 'Same design family — matching monospace' },\n ],\n\n // ---------------------------------------------------------------------------\n // Tier 1 — Top Google Fonts (sans-serif)\n // ---------------------------------------------------------------------------\n\n 'oswald': [\n { family: 'Merriweather', role: 'body', confidence: 0.88, rationale: 'Warm serif body text balances condensed sans headings' },\n { family: 'Open Sans', role: 'body', confidence: 0.86, rationale: 'Clean neutral sans for readable body under bold condensed heads' },\n { family: 'Source Code Pro', role: 'mono', confidence: 0.84, rationale: 'Adobe monospace for code blocks in technical contexts' },\n ],\n 'pt-sans': [\n { family: 'PT Serif', role: 'heading', confidence: 0.95, rationale: 'Same design superfamily — serif variant provides editorial weight' },\n { family: 'PT Mono', role: 'mono', confidence: 0.96, rationale: 'Same design superfamily — monospace with matching metrics' },\n { family: 'Lora', role: 'heading', confidence: 0.85, rationale: 'Warm calligraphic serif contrasts humanist sans body' },\n ],\n 'noto-sans': [\n { family: 'Noto Serif', role: 'heading', confidence: 0.95, rationale: 'Same design superfamily — harmonized serif for multilingual typesetting' },\n { family: 'Noto Sans Mono', role: 'mono', confidence: 0.94, rationale: 'Same superfamily mono with full Unicode alignment' },\n { family: 'Playfair Display', role: 'heading', confidence: 0.83, rationale: 'High-contrast display serif adds editorial drama' },\n ],\n 'noto-serif': [\n { family: 'Noto Sans', role: 'body', confidence: 0.95, rationale: 'Same design superfamily — sans body under serif headings' },\n { family: 'Noto Sans Mono', role: 'mono', confidence: 0.94, rationale: 'Same superfamily mono for consistent multilingual code' },\n { family: 'Inter', role: 'body', confidence: 0.85, rationale: 'Clean geometric sans complements traditional serif headings' },\n ],\n 'ubuntu': [\n { family: 'Ubuntu Mono', role: 'mono', confidence: 0.96, rationale: 'Same design family — monospace with matching Canonical identity' },\n { family: 'Lora', role: 'heading', confidence: 0.85, rationale: 'Warm serif heading over friendly humanist sans body' },\n { family: 'Source Serif 4', role: 'heading', confidence: 0.84, rationale: 'Structured serif heading for technical documentation' },\n ],\n 'rubik': [\n { family: 'Roboto Slab', role: 'heading', confidence: 0.84, rationale: 'Rounded geometric sans pairs with geometric slab serif' },\n { family: 'Lora', role: 'heading', confidence: 0.86, rationale: 'Calligraphic serif adds warmth to rounded sans body' },\n { family: 'Fira Code', role: 'mono', confidence: 0.85, rationale: 'Rounded monospace complements rounded sans proportions' },\n ],\n 'work-sans': [\n { family: 'Merriweather', role: 'heading', confidence: 0.87, rationale: 'Screen serif heading grounds clean grotesque body text' },\n { family: 'Lora', role: 'heading', confidence: 0.86, rationale: 'Warm serif heading over neutral sans body' },\n { family: 'IBM Plex Mono', role: 'mono', confidence: 0.85, rationale: 'Structured monospace for code in professional contexts' },\n ],\n 'quicksand': [\n { family: 'EB Garamond', role: 'heading', confidence: 0.84, rationale: 'Classical serif provides gravitas against rounded geometric sans' },\n { family: 'Crimson Pro', role: 'body', confidence: 0.83, rationale: 'Refined serif body anchors playful rounded sans headings' },\n { family: 'Fira Code', role: 'mono', confidence: 0.82, rationale: 'Rounded mono echoes rounded sans geometry' },\n ],\n 'barlow': [\n { family: 'Merriweather', role: 'body', confidence: 0.86, rationale: 'Warm serif body under slightly condensed grotesque headings' },\n { family: 'Lora', role: 'body', confidence: 0.85, rationale: 'Calligraphic serif body grounds industrial sans heads' },\n { family: 'Source Code Pro', role: 'mono', confidence: 0.84, rationale: 'Neutral monospace for code alongside industrial sans' },\n ],\n 'mukta': [\n { family: 'Lora', role: 'heading', confidence: 0.84, rationale: 'Warm serif heading complements Devanagari-optimized sans' },\n { family: 'Merriweather', role: 'heading', confidence: 0.83, rationale: 'Screen-optimized serif heading for multilingual layouts' },\n { family: 'Fira Mono', role: 'mono', confidence: 0.82, rationale: 'Clean monospace for code blocks in multilingual docs' },\n ],\n 'cabin': [\n { family: 'Merriweather', role: 'heading', confidence: 0.87, rationale: 'Warm serif heading provides editorial contrast to humanist sans' },\n { family: 'Crimson Pro', role: 'body', confidence: 0.84, rationale: 'Elegant serif body under warm humanist sans headings' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.85, rationale: 'Sharp monospace for code alongside humanist sans' },\n ],\n 'josefin-sans': [\n { family: 'Josefin Slab', role: 'body', confidence: 0.94, rationale: 'Same design family — slab body under geometric sans headings' },\n { family: 'Lora', role: 'body', confidence: 0.84, rationale: 'Warm serif grounds elegant Art Deco inspired headings' },\n { family: 'Source Code Pro', role: 'mono', confidence: 0.82, rationale: 'Clean monospace for code in design-forward layouts' },\n ],\n 'dm-serif-display': [\n { family: 'DM Sans', role: 'body', confidence: 0.95, rationale: 'Same design family — sans body under serif display headings' },\n { family: 'DM Mono', role: 'mono', confidence: 0.94, rationale: 'Same design family — matching monospace for code' },\n { family: 'Inter', role: 'body', confidence: 0.85, rationale: 'Clean geometric sans grounds transitional serif display' },\n ],\n 'libre-baskerville': [\n { family: 'Libre Franklin', role: 'body', confidence: 0.93, rationale: 'Same Libre superfamily — Franklin sans body under Baskerville headings' },\n { family: 'Source Sans 3', role: 'body', confidence: 0.86, rationale: 'Neutral sans body for readable text under classical serif heads' },\n { family: 'Fira Code', role: 'mono', confidence: 0.83, rationale: 'Modern monospace for code in editorial contexts' },\n ],\n 'libre-franklin': [\n { family: 'Libre Baskerville', role: 'heading', confidence: 0.93, rationale: 'Same Libre superfamily — Baskerville headings over Franklin body' },\n { family: 'Lora', role: 'heading', confidence: 0.86, rationale: 'Warm serif heading complements clean neo-grotesque body' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.85, rationale: 'Sharp monospace for code alongside neo-grotesque sans' },\n ],\n 'bitter': [\n { family: 'Source Sans 3', role: 'body', confidence: 0.86, rationale: 'Clean sans body under friendly slab serif headings' },\n { family: 'Open Sans', role: 'body', confidence: 0.85, rationale: 'Neutral sans grounds warm slab serif' },\n { family: 'Fira Mono', role: 'mono', confidence: 0.83, rationale: 'Humanist monospace pairs with slab serif warmth' },\n ],\n 'oxygen': [\n { family: 'Merriweather', role: 'heading', confidence: 0.85, rationale: 'Screen serif headings ground clean sans body' },\n { family: 'Lora', role: 'heading', confidence: 0.84, rationale: 'Calligraphic serif provides editorial contrast' },\n { family: 'Ubuntu Mono', role: 'mono', confidence: 0.83, rationale: 'Friendly monospace complements rounded sans proportions' },\n ],\n 'arimo': [\n { family: 'Tinos', role: 'heading', confidence: 0.90, rationale: 'Same Croscore family — metrically compatible serif heading' },\n { family: 'Cousine', role: 'mono', confidence: 0.91, rationale: 'Same Croscore family — metrically compatible monospace' },\n { family: 'Lora', role: 'heading', confidence: 0.84, rationale: 'Warm serif heading over neutral sans body' },\n ],\n 'heebo': [\n { family: 'Merriweather', role: 'heading', confidence: 0.84, rationale: 'Screen serif headings over geometric sans body' },\n { family: 'Crimson Pro', role: 'heading', confidence: 0.83, rationale: 'Refined serif heading for editorial Hebrew/Latin layouts' },\n { family: 'Fira Code', role: 'mono', confidence: 0.84, rationale: 'Ligature monospace for code in technical docs' },\n ],\n 'manrope': [\n { family: 'Crimson Pro', role: 'heading', confidence: 0.87, rationale: 'Refined serif heading contrasts geometric-grotesque hybrid sans' },\n { family: 'Source Serif 4', role: 'body', confidence: 0.86, rationale: 'Structured serif body under modern sans headings' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.88, rationale: 'Modern code font pairs with modern sans' },\n ],\n 'outfit': [\n { family: 'Lora', role: 'heading', confidence: 0.85, rationale: 'Calligraphic serif heading adds warmth to geometric sans body' },\n { family: 'Source Serif 4', role: 'body', confidence: 0.84, rationale: 'Structured serif body grounds modern geometric sans' },\n { family: 'Fira Code', role: 'mono', confidence: 0.85, rationale: 'Modern monospace pairs with modern geometric sans' },\n ],\n 'plus-jakarta-sans': [\n { family: 'Lora', role: 'heading', confidence: 0.86, rationale: 'Warm serif heading provides editorial contrast to modern sans' },\n { family: 'Crimson Pro', role: 'body', confidence: 0.85, rationale: 'Refined serif body under soft geometric sans headings' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.87, rationale: 'Sharp code font complements modern geometric proportions' },\n { family: 'Source Serif 4', role: 'heading', confidence: 0.84, rationale: 'Structured serif heading for technical documentation' },\n ],\n 'figtree': [\n { family: 'Merriweather', role: 'heading', confidence: 0.86, rationale: 'Screen serif heading grounds friendly geometric sans body' },\n { family: 'Lora', role: 'heading', confidence: 0.85, rationale: 'Warm serif heading over approachable sans body' },\n { family: 'Fira Code', role: 'mono', confidence: 0.84, rationale: 'Clean monospace for code alongside friendly sans' },\n ],\n 'lexend': [\n { family: 'Source Serif 4', role: 'heading', confidence: 0.85, rationale: 'Structured serif heading with readability-focused sans body' },\n { family: 'Merriweather', role: 'heading', confidence: 0.84, rationale: 'Screen-optimized serif heading over accessibility-focused sans' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.86, rationale: 'Clear character distinction matches readability focus' },\n ],\n 'urbanist': [\n { family: 'Lora', role: 'heading', confidence: 0.85, rationale: 'Warm calligraphic serif heading contrasts geometric sans body' },\n { family: 'Playfair Display', role: 'heading', confidence: 0.84, rationale: 'High-contrast didone serif for dramatic display over minimal sans' },\n { family: 'Fira Code', role: 'mono', confidence: 0.84, rationale: 'Modern monospace complements geometric sans geometry' },\n ],\n 'space-grotesk': [\n { family: 'Space Mono', role: 'mono', confidence: 0.95, rationale: 'Same design family — grotesk and mono share Space proportional logic' },\n { family: 'Lora', role: 'heading', confidence: 0.84, rationale: 'Warm serif heading over quirky geometric body' },\n { family: 'Source Serif 4', role: 'body', confidence: 0.83, rationale: 'Structured serif body grounds distinctive geometric sans' },\n ],\n 'albert-sans': [\n { family: 'Merriweather', role: 'heading', confidence: 0.85, rationale: 'Screen serif headings ground modern geometric sans body' },\n { family: 'Crimson Pro', role: 'heading', confidence: 0.84, rationale: 'Elegant serif heading over clean geometric body text' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.85, rationale: 'Modern monospace for code alongside geometric sans' },\n ],\n 'sora': [\n { family: 'Source Serif 4', role: 'heading', confidence: 0.85, rationale: 'Structured serif heading over geometric sans body' },\n { family: 'Lora', role: 'body', confidence: 0.84, rationale: 'Warm serif body grounds futuristic geometric sans headings' },\n { family: 'Fira Code', role: 'mono', confidence: 0.85, rationale: 'Technical monospace pairs with precise geometric forms' },\n ],\n 'red-hat-display': [\n { family: 'Red Hat Text', role: 'body', confidence: 0.96, rationale: 'Same design family — text variant optimized for body sizes' },\n { family: 'Red Hat Mono', role: 'mono', confidence: 0.96, rationale: 'Same design family — matching monospace with Red Hat identity' },\n { family: 'Merriweather', role: 'body', confidence: 0.83, rationale: 'Warm serif body under distinctive display headings' },\n ],\n 'red-hat-text': [\n { family: 'Red Hat Display', role: 'heading', confidence: 0.96, rationale: 'Same design family — display variant for headings' },\n { family: 'Red Hat Mono', role: 'mono', confidence: 0.96, rationale: 'Same design family — monospace for code blocks' },\n { family: 'Lora', role: 'heading', confidence: 0.84, rationale: 'Warm serif heading over clean text sans body' },\n ],\n 'red-hat-mono': [\n { family: 'Red Hat Display', role: 'heading', confidence: 0.95, rationale: 'Same design family — display variant for documentation headings' },\n { family: 'Red Hat Text', role: 'body', confidence: 0.96, rationale: 'Same design family — text variant for body around code' },\n { family: 'Inter', role: 'body', confidence: 0.85, rationale: 'Clean geometric sans for UI around code blocks' },\n ],\n 'karla': [\n { family: 'Merriweather', role: 'heading', confidence: 0.86, rationale: 'Screen serif heading over grotesque sans body text' },\n { family: 'Lora', role: 'heading', confidence: 0.85, rationale: 'Warm calligraphic serif heading contrasts clean grotesque' },\n { family: 'Inconsolata', role: 'mono', confidence: 0.84, rationale: 'Humanist monospace echoes grotesque sans warmth' },\n ],\n 'archivo': [\n { family: 'Source Serif 4', role: 'heading', confidence: 0.86, rationale: 'Structured serif heading grounds workhorse grotesque body' },\n { family: 'Merriweather', role: 'heading', confidence: 0.85, rationale: 'Screen serif heading over strong grotesque body text' },\n { family: 'Fira Code', role: 'mono', confidence: 0.84, rationale: 'Technical monospace for code alongside sturdy sans' },\n ],\n 'public-sans': [\n { family: 'Merriweather', role: 'heading', confidence: 0.87, rationale: 'Warm serif heading over neutral government-style sans body' },\n { family: 'Lora', role: 'heading', confidence: 0.85, rationale: 'Calligraphic serif heading adds personality to neutral sans' },\n { family: 'IBM Plex Mono', role: 'mono', confidence: 0.86, rationale: 'Professional monospace for code in civic/gov contexts' },\n ],\n 'be-vietnam-pro': [\n { family: 'Merriweather', role: 'heading', confidence: 0.85, rationale: 'Screen serif heading over clean geometric sans body' },\n { family: 'Lora', role: 'heading', confidence: 0.84, rationale: 'Warm serif heading adds editorial depth to modern sans' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.85, rationale: 'Modern monospace for code alongside geometric sans' },\n ],\n 'catamaran': [\n { family: 'Merriweather', role: 'heading', confidence: 0.84, rationale: 'Screen serif heading over geometric Tamil/Latin sans body' },\n { family: 'Lora', role: 'heading', confidence: 0.83, rationale: 'Calligraphic serif heading for multilingual layouts' },\n { family: 'Fira Mono', role: 'mono', confidence: 0.82, rationale: 'Clean monospace for code in multilingual docs' },\n ],\n 'mulish': [\n { family: 'Lora', role: 'heading', confidence: 0.86, rationale: 'Warm serif heading over clean minimal sans body' },\n { family: 'Playfair Display', role: 'heading', confidence: 0.84, rationale: 'Dramatic serif heading against quiet geometric sans body' },\n { family: 'Fira Code', role: 'mono', confidence: 0.84, rationale: 'Modern monospace for code alongside minimal sans' },\n ],\n 'hind': [\n { family: 'Merriweather', role: 'heading', confidence: 0.85, rationale: 'Screen serif heading over Devanagari-optimized sans body' },\n { family: 'Lora', role: 'heading', confidence: 0.84, rationale: 'Warm serif heading for multilingual editorial layouts' },\n { family: 'Source Code Pro', role: 'mono', confidence: 0.83, rationale: 'Neutral monospace for technical documentation' },\n ],\n 'asap': [\n { family: 'Merriweather', role: 'heading', confidence: 0.85, rationale: 'Screen serif heading over rounded humanist sans body' },\n { family: 'Crimson Pro', role: 'heading', confidence: 0.84, rationale: 'Refined serif heading contrasts friendly rounded sans' },\n { family: 'Fira Mono', role: 'mono', confidence: 0.83, rationale: 'Humanist monospace echoes rounded sans warmth' },\n ],\n 'overpass': [\n { family: 'Merriweather', role: 'heading', confidence: 0.85, rationale: 'Warm serif heading over open-source grotesque body' },\n { family: 'Lora', role: 'heading', confidence: 0.84, rationale: 'Calligraphic serif heading adds editorial depth' },\n { family: 'Overpass Mono', role: 'mono', confidence: 0.93, rationale: 'Same design family — monospace with matching proportions' },\n ],\n 'signika': [\n { family: 'Merriweather', role: 'body', confidence: 0.84, rationale: 'Warm serif body under rounded signage-inspired headings' },\n { family: 'Lora', role: 'body', confidence: 0.83, rationale: 'Calligraphic serif body grounds friendly display sans' },\n { family: 'Fira Mono', role: 'mono', confidence: 0.82, rationale: 'Humanist monospace for code alongside rounded sans' },\n ],\n 'commissioner': [\n { family: 'Lora', role: 'heading', confidence: 0.86, rationale: 'Warm serif heading over variable geometric-humanist body' },\n { family: 'Source Serif 4', role: 'heading', confidence: 0.85, rationale: 'Structured serif heading for professional layouts' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.86, rationale: 'Modern monospace for code alongside variable sans' },\n ],\n 'atkinson-hyperlegible': [\n { family: 'Merriweather', role: 'heading', confidence: 0.86, rationale: 'Screen serif heading over accessibility-optimized body sans' },\n { family: 'Source Serif 4', role: 'heading', confidence: 0.85, rationale: 'Clear serif heading complements legibility-focused body' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.87, rationale: 'High-legibility monospace matches accessibility focus' },\n ],\n\n // ---------------------------------------------------------------------------\n // Tier 2 — Popular serifs and display fonts\n // ---------------------------------------------------------------------------\n\n 'lora': [\n { family: 'Open Sans', role: 'body', confidence: 0.88, rationale: 'Neutral sans body under warm calligraphic serif headings' },\n { family: 'Lato', role: 'body', confidence: 0.87, rationale: 'Humanist sans body pairs naturally with calligraphic serif' },\n { family: 'Source Sans 3', role: 'body', confidence: 0.86, rationale: 'Clean sans body lets warm serif headings carry the personality' },\n { family: 'Fira Code', role: 'mono', confidence: 0.83, rationale: 'Modern monospace for code blocks in editorial contexts' },\n ],\n 'cormorant': [\n { family: 'Inter', role: 'body', confidence: 0.86, rationale: 'Clean geometric sans grounds ornate Garamond-inspired display serif' },\n { family: 'Source Sans 3', role: 'body', confidence: 0.85, rationale: 'Neutral sans body under elegant high-contrast serif headings' },\n { family: 'Fira Code', role: 'mono', confidence: 0.81, rationale: 'Modern monospace for code alongside classical display serif' },\n ],\n 'eb-garamond': [\n { family: 'Inter', role: 'body', confidence: 0.87, rationale: 'Clean geometric sans body under classical Garamond headings' },\n { family: 'Source Sans 3', role: 'body', confidence: 0.86, rationale: 'Neutral sans body grounds Renaissance serif display' },\n { family: 'Lato', role: 'body', confidence: 0.85, rationale: 'Humanist sans body under traditional serif headings' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.83, rationale: 'Sharp code font for technical content in editorial layouts' },\n ],\n 'spectral': [\n { family: 'Inter', role: 'body', confidence: 0.86, rationale: 'Clean geometric sans body under literary serif headings' },\n { family: 'Open Sans', role: 'body', confidence: 0.85, rationale: 'Neutral sans body for readable text under serif heads' },\n { family: 'Fira Code', role: 'mono', confidence: 0.83, rationale: 'Modern monospace for code in mixed editorial layouts' },\n ],\n 'literata': [\n { family: 'Inter', role: 'body', confidence: 0.87, rationale: 'Clean sans body under reading-optimized serif headings' },\n { family: 'Source Sans 3', role: 'body', confidence: 0.86, rationale: 'Neutral sans body designed for screen alongside ebook serif' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.84, rationale: 'Code font with clear letterforms for digital publishing' },\n ],\n 'cardo': [\n { family: 'Open Sans', role: 'body', confidence: 0.86, rationale: 'Clean sans body under classical scholarly serif headings' },\n { family: 'Lato', role: 'body', confidence: 0.85, rationale: 'Humanist sans body grounds Bembo-inspired serif' },\n { family: 'Source Code Pro', role: 'mono', confidence: 0.82, rationale: 'Neutral monospace for code in academic contexts' },\n ],\n 'frank-ruhl-libre': [\n { family: 'Inter', role: 'body', confidence: 0.85, rationale: 'Clean sans body under strong modern serif headings' },\n { family: 'Open Sans', role: 'body', confidence: 0.84, rationale: 'Neutral sans body for Hebrew/Latin mixed layouts' },\n { family: 'Fira Mono', role: 'mono', confidence: 0.82, rationale: 'Humanist monospace for code in multilingual contexts' },\n ],\n 'bodoni-moda': [\n { family: 'Inter', role: 'body', confidence: 0.87, rationale: 'Clean minimal sans body under extreme-contrast didone headings' },\n { family: 'Lato', role: 'body', confidence: 0.86, rationale: 'Neutral humanist sans grounds fashion-forward Bodoni display' },\n { family: 'Source Sans 3', role: 'body', confidence: 0.85, rationale: 'Clean sans body lets dramatic serifs command attention' },\n ],\n 'fraunces': [\n { family: 'Inter', role: 'body', confidence: 0.88, rationale: 'Clean geometric sans grounds expressive variable serif display' },\n { family: 'Work Sans', role: 'body', confidence: 0.85, rationale: 'Clean grotesque body under playful old-style serif headings' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.84, rationale: 'Modern monospace for code alongside expressive display serif' },\n ],\n 'alegreya': [\n { family: 'Alegreya Sans', role: 'body', confidence: 0.95, rationale: 'Same design family — sans variant for body under serif headings' },\n { family: 'Open Sans', role: 'body', confidence: 0.85, rationale: 'Neutral sans body under calligraphic humanist serif' },\n { family: 'Fira Code', role: 'mono', confidence: 0.82, rationale: 'Modern monospace for code in literary/editorial contexts' },\n ],\n 'crimson-text': [\n { family: 'Open Sans', role: 'body', confidence: 0.87, rationale: 'Clean sans body under Garamond-inspired serif headings' },\n { family: 'Lato', role: 'body', confidence: 0.86, rationale: 'Humanist sans body grounds classic serif display' },\n { family: 'Source Code Pro', role: 'mono', confidence: 0.83, rationale: 'Neutral monospace for code alongside classical serif' },\n ],\n 'crimson-pro': [\n { family: 'Inter', role: 'body', confidence: 0.87, rationale: 'Clean geometric sans body under refined variable serif headings' },\n { family: 'Open Sans', role: 'body', confidence: 0.86, rationale: 'Neutral sans body lets elegant serif headings lead' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.84, rationale: 'Sharp code font complements refined serif design' },\n ],\n 'vollkorn': [\n { family: 'Open Sans', role: 'body', confidence: 0.86, rationale: 'Clean sans body under warm bread-and-butter text serif' },\n { family: 'Lato', role: 'body', confidence: 0.85, rationale: 'Humanist sans grounds sturdy everyday serif' },\n { family: 'Fira Mono', role: 'mono', confidence: 0.83, rationale: 'Humanist monospace complements warm text serif' },\n ],\n 'gentium-plus': [\n { family: 'Open Sans', role: 'body', confidence: 0.85, rationale: 'Clean sans body under scholarly humanist serif headings' },\n { family: 'Source Sans 3', role: 'body', confidence: 0.84, rationale: 'Neutral sans body for academic multilingual layouts' },\n { family: 'Source Code Pro', role: 'mono', confidence: 0.82, rationale: 'Neutral monospace for linguistic and academic code' },\n ],\n 'petrona': [\n { family: 'Inter', role: 'body', confidence: 0.85, rationale: 'Clean sans body under high-contrast variable serif headings' },\n { family: 'Open Sans', role: 'body', confidence: 0.84, rationale: 'Neutral sans body grounds expressive serif display' },\n { family: 'Fira Code', role: 'mono', confidence: 0.82, rationale: 'Modern monospace for code alongside expressive serif' },\n ],\n 'baskervville': [\n { family: 'Inter', role: 'body', confidence: 0.87, rationale: 'Clean sans body under refined transitional serif headings' },\n { family: 'Open Sans', role: 'body', confidence: 0.86, rationale: 'Neutral sans body lets Baskerville-inspired headings shine' },\n { family: 'Fira Mono', role: 'mono', confidence: 0.83, rationale: 'Humanist mono pairs with transitional serif warmth' },\n ],\n 'newsreader': [\n { family: 'Inter', role: 'body', confidence: 0.86, rationale: 'Clean geometric sans body under editorial serif headings' },\n { family: 'Source Sans 3', role: 'body', confidence: 0.85, rationale: 'Neutral sans body for news and editorial layouts' },\n { family: 'IBM Plex Mono', role: 'mono', confidence: 0.84, rationale: 'Professional monospace for data in journalistic contexts' },\n ],\n\n // ---------------------------------------------------------------------------\n // Tier 3 — Monospace fonts\n // ---------------------------------------------------------------------------\n\n 'source-code-pro': [\n { family: 'Source Sans 3', role: 'body', confidence: 0.97, rationale: 'Same Adobe design family — perfect metric alignment' },\n { family: 'Source Serif 4', role: 'heading', confidence: 0.96, rationale: 'Same Adobe design family — serif heading over code' },\n { family: 'Inter', role: 'body', confidence: 0.87, rationale: 'Clean geometric sans for UI documentation around code' },\n ],\n 'roboto-mono': [\n { family: 'Roboto', role: 'body', confidence: 0.96, rationale: 'Same design family — sans body around monospace code blocks' },\n { family: 'Roboto Slab', role: 'heading', confidence: 0.93, rationale: 'Same design family — slab serif heading for documentation' },\n { family: 'Inter', role: 'body', confidence: 0.86, rationale: 'Clean geometric sans for UI around code' },\n ],\n 'ibm-plex-mono': [\n { family: 'IBM Plex Sans', role: 'body', confidence: 0.97, rationale: 'Same design family — sans body around monospace code' },\n { family: 'IBM Plex Serif', role: 'heading', confidence: 0.96, rationale: 'Same design family — serif heading for editorial code docs' },\n { family: 'Inter', role: 'body', confidence: 0.86, rationale: 'Clean sans alternative for UI documentation' },\n ],\n 'fira-mono': [\n { family: 'Inter', role: 'body', confidence: 0.87, rationale: 'Clean geometric sans for docs around Fira monospace code' },\n { family: 'Open Sans', role: 'body', confidence: 0.85, rationale: 'Neutral sans body for documentation around code' },\n { family: 'Merriweather', role: 'heading', confidence: 0.83, rationale: 'Screen serif heading for technical documentation' },\n ],\n 'space-mono': [\n { family: 'Space Grotesk', role: 'body', confidence: 0.95, rationale: 'Same design family — grotesk body around monospace code' },\n { family: 'Inter', role: 'body', confidence: 0.86, rationale: 'Clean geometric sans for UI around quirky monospace' },\n { family: 'Work Sans', role: 'body', confidence: 0.84, rationale: 'Clean grotesque body grounds distinctive monospace' },\n ],\n 'inconsolata': [\n { family: 'Inter', role: 'body', confidence: 0.87, rationale: 'Clean geometric sans for UI around humanist monospace' },\n { family: 'Open Sans', role: 'body', confidence: 0.86, rationale: 'Neutral sans body for documentation alongside code' },\n { family: 'Lora', role: 'heading', confidence: 0.83, rationale: 'Warm serif heading for editorial developer content' },\n ],\n 'ubuntu-mono': [\n { family: 'Ubuntu', role: 'body', confidence: 0.96, rationale: 'Same design family — Ubuntu sans body around monospace code' },\n { family: 'Inter', role: 'body', confidence: 0.85, rationale: 'Clean geometric sans for UI docs around Ubuntu mono' },\n { family: 'Merriweather', role: 'heading', confidence: 0.83, rationale: 'Screen serif heading for technical documentation' },\n ],\n 'dm-mono': [\n { family: 'DM Sans', role: 'body', confidence: 0.96, rationale: 'Same design family — sans body around matching monospace' },\n { family: 'DM Serif Display', role: 'heading', confidence: 0.94, rationale: 'Same design family — serif heading for documentation' },\n { family: 'Inter', role: 'body', confidence: 0.85, rationale: 'Clean geometric sans alternative for UI around code' },\n ],\n 'cascadia-code': [\n { family: 'Inter', role: 'body', confidence: 0.88, rationale: 'Clean geometric sans for UI alongside Microsoft terminal mono' },\n { family: 'Open Sans', role: 'body', confidence: 0.85, rationale: 'Neutral sans body for documentation around code' },\n { family: 'Source Serif 4', role: 'heading', confidence: 0.83, rationale: 'Structured serif heading for developer documentation' },\n ],\n 'cousine': [\n { family: 'Arimo', role: 'body', confidence: 0.91, rationale: 'Same Croscore family — metrically compatible sans body' },\n { family: 'Tinos', role: 'heading', confidence: 0.90, rationale: 'Same Croscore family — metrically compatible serif heading' },\n { family: 'Inter', role: 'body', confidence: 0.85, rationale: 'Clean geometric sans for modern UI around code' },\n ],\n\n // ---------------------------------------------------------------------------\n // Tier 4 — Design system fonts and extras\n // ---------------------------------------------------------------------------\n\n 'noto-sans-display': [\n { family: 'Noto Serif', role: 'body', confidence: 0.93, rationale: 'Same Noto superfamily — serif body under sans display headings' },\n { family: 'Noto Sans Mono', role: 'mono', confidence: 0.92, rationale: 'Same Noto superfamily — matching monospace' },\n { family: 'Lora', role: 'body', confidence: 0.83, rationale: 'Warm serif body under clean display sans headings' },\n ],\n 'pt-serif': [\n { family: 'PT Sans', role: 'body', confidence: 0.95, rationale: 'Same design superfamily — sans body under serif headings' },\n { family: 'PT Mono', role: 'mono', confidence: 0.96, rationale: 'Same design superfamily — matching monospace for code' },\n { family: 'Open Sans', role: 'body', confidence: 0.85, rationale: 'Neutral sans body grounds ParaType serif' },\n ],\n 'pt-mono': [\n { family: 'PT Sans', role: 'body', confidence: 0.95, rationale: 'Same design superfamily — sans body around matching monospace' },\n { family: 'PT Serif', role: 'heading', confidence: 0.95, rationale: 'Same design superfamily — serif heading for documentation' },\n { family: 'Inter', role: 'body', confidence: 0.84, rationale: 'Clean geometric sans for modern UI around code' },\n ],\n 'zilla-slab': [\n { family: 'Inter', role: 'body', confidence: 0.86, rationale: 'Clean geometric sans body under Mozilla slab serif headings' },\n { family: 'Open Sans', role: 'body', confidence: 0.85, rationale: 'Neutral sans body grounds distinctive slab serif' },\n { family: 'Fira Code', role: 'mono', confidence: 0.88, rationale: 'Mozilla Fira monospace matches Zilla open-source identity' },\n ],\n 'arvo': [\n { family: 'Open Sans', role: 'body', confidence: 0.86, rationale: 'Clean sans body under geometric slab serif headings' },\n { family: 'Lato', role: 'body', confidence: 0.85, rationale: 'Humanist sans body grounds sturdy slab serif' },\n { family: 'Source Code Pro', role: 'mono', confidence: 0.83, rationale: 'Neutral monospace for code alongside geometric slab' },\n ],\n 'josefin-slab': [\n { family: 'Josefin Sans', role: 'heading', confidence: 0.94, rationale: 'Same design family — sans headings over slab serif body' },\n { family: 'Open Sans', role: 'body', confidence: 0.84, rationale: 'Neutral sans body under Art Deco slab serif headings' },\n { family: 'Source Code Pro', role: 'mono', confidence: 0.82, rationale: 'Clean monospace for code alongside vintage slab serif' },\n ],\n\n // ---------------------------------------------------------------------------\n // Additional popular sans-serif fonts\n // ---------------------------------------------------------------------------\n\n 'nunito-sans': [\n { family: 'Nunito', role: 'heading', confidence: 0.94, rationale: 'Same design family — rounded variant for display headings' },\n { family: 'Lora', role: 'heading', confidence: 0.85, rationale: 'Warm serif heading over friendly sans body' },\n { family: 'Fira Code', role: 'mono', confidence: 0.84, rationale: 'Modern monospace for code in friendly UI contexts' },\n ],\n 'alegreya-sans': [\n { family: 'Alegreya', role: 'heading', confidence: 0.95, rationale: 'Same design family — serif heading over matching sans body' },\n { family: 'Lora', role: 'heading', confidence: 0.84, rationale: 'Warm serif heading over humanist sans body' },\n { family: 'Fira Code', role: 'mono', confidence: 0.82, rationale: 'Modern monospace for code in literary layouts' },\n ],\n 'exo-2': [\n { family: 'Merriweather', role: 'body', confidence: 0.84, rationale: 'Warm serif body grounds geometric-futuristic sans headings' },\n { family: 'Lora', role: 'body', confidence: 0.83, rationale: 'Calligraphic serif body anchors tech-forward sans display' },\n { family: 'Fira Code', role: 'mono', confidence: 0.85, rationale: 'Technical monospace matches futuristic sans aesthetic' },\n ],\n 'titillium-web': [\n { family: 'Merriweather', role: 'body', confidence: 0.84, rationale: 'Screen serif body grounds academic-born geometric sans' },\n { family: 'Source Serif 4', role: 'heading', confidence: 0.83, rationale: 'Structured serif heading over technical sans body' },\n { family: 'Fira Code', role: 'mono', confidence: 0.85, rationale: 'Technical monospace complements design-school origins' },\n ],\n 'assistant': [\n { family: 'Merriweather', role: 'heading', confidence: 0.85, rationale: 'Screen serif heading over clean variable sans body' },\n { family: 'Lora', role: 'heading', confidence: 0.84, rationale: 'Warm serif heading adds editorial depth to modern sans' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.85, rationale: 'Modern monospace for code alongside variable sans' },\n ],\n 'maven-pro': [\n { family: 'Merriweather', role: 'body', confidence: 0.84, rationale: 'Warm serif body grounds rounded geometric sans headings' },\n { family: 'Lora', role: 'body', confidence: 0.83, rationale: 'Calligraphic serif body anchors friendly geometric display' },\n { family: 'Fira Code', role: 'mono', confidence: 0.83, rationale: 'Modern monospace for code alongside geometric sans' },\n ],\n 'varela-round': [\n { family: 'Merriweather', role: 'heading', confidence: 0.84, rationale: 'Warm serif heading provides editorial contrast to rounded sans' },\n { family: 'Crimson Pro', role: 'body', confidence: 0.83, rationale: 'Refined serif body grounds soft rounded sans headings' },\n { family: 'Fira Mono', role: 'mono', confidence: 0.82, rationale: 'Humanist mono complements rounded sans warmth' },\n ],\n 'dosis': [\n { family: 'Merriweather', role: 'body', confidence: 0.84, rationale: 'Screen serif body under rounded geometric sans headings' },\n { family: 'Lora', role: 'body', confidence: 0.83, rationale: 'Calligraphic serif body grounds friendly geometric display' },\n { family: 'Source Code Pro', role: 'mono', confidence: 0.82, rationale: 'Neutral monospace for code alongside rounded sans' },\n ],\n 'kanit': [\n { family: 'Merriweather', role: 'body', confidence: 0.83, rationale: 'Screen serif body grounds Thai/Latin geometric sans headings' },\n { family: 'Lora', role: 'body', confidence: 0.82, rationale: 'Warm serif body under structured sans headings' },\n { family: 'Fira Mono', role: 'mono', confidence: 0.82, rationale: 'Clean monospace for code in multilingual layouts' },\n ],\n 'questrial': [\n { family: 'Merriweather', role: 'heading', confidence: 0.84, rationale: 'Screen serif heading over clean geometric sans body' },\n { family: 'Lora', role: 'heading', confidence: 0.83, rationale: 'Warm serif heading contrasts precise geometric body' },\n { family: 'Fira Code', role: 'mono', confidence: 0.83, rationale: 'Modern monospace for code alongside geometric sans' },\n ],\n 'encode-sans': [\n { family: 'Merriweather', role: 'heading', confidence: 0.85, rationale: 'Screen serif heading over variable width sans body' },\n { family: 'Lora', role: 'heading', confidence: 0.84, rationale: 'Warm serif heading adds depth to versatile sans body' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.85, rationale: 'Modern monospace for code alongside variable sans' },\n ],\n 'nanum-gothic': [\n { family: 'Nanum Myeongjo', role: 'heading', confidence: 0.93, rationale: 'Same Nanum family — serif heading for Korean/Latin editorial' },\n { family: 'Merriweather', role: 'heading', confidence: 0.83, rationale: 'Screen serif heading for CJK-Latin mixed layouts' },\n { family: 'Source Code Pro', role: 'mono', confidence: 0.82, rationale: 'Neutral monospace for code in multilingual docs' },\n ],\n 'nanum-myeongjo': [\n { family: 'Nanum Gothic', role: 'body', confidence: 0.93, rationale: 'Same Nanum family — gothic sans body under serif headings' },\n { family: 'Open Sans', role: 'body', confidence: 0.83, rationale: 'Clean sans body for Korean/Latin editorial layouts' },\n { family: 'Source Code Pro', role: 'mono', confidence: 0.82, rationale: 'Neutral monospace for code in multilingual contexts' },\n ],\n 'sarabun': [\n { family: 'Merriweather', role: 'heading', confidence: 0.83, rationale: 'Screen serif heading for Thai/Latin layouts' },\n { family: 'Lora', role: 'heading', confidence: 0.82, rationale: 'Warm serif heading for multilingual editorial' },\n { family: 'Fira Mono', role: 'mono', confidence: 0.81, rationale: 'Clean monospace for code in Thai/Latin docs' },\n ],\n 'prompt': [\n { family: 'Merriweather', role: 'heading', confidence: 0.83, rationale: 'Screen serif heading for Thai/Latin modern layouts' },\n { family: 'Lora', role: 'heading', confidence: 0.82, rationale: 'Warm serif heading for multilingual contexts' },\n { family: 'Fira Code', role: 'mono', confidence: 0.83, rationale: 'Modern monospace for code in Thai/Latin docs' },\n ],\n 'noto-sans-mono': [\n { family: 'Noto Sans', role: 'body', confidence: 0.95, rationale: 'Same Noto superfamily — sans body around matching monospace' },\n { family: 'Noto Serif', role: 'heading', confidence: 0.94, rationale: 'Same Noto superfamily — serif heading for documentation' },\n { family: 'Inter', role: 'body', confidence: 0.85, rationale: 'Clean geometric sans for modern UI around code' },\n ],\n 'tinos': [\n { family: 'Arimo', role: 'body', confidence: 0.91, rationale: 'Same Croscore family — metrically compatible sans body' },\n { family: 'Cousine', role: 'mono', confidence: 0.91, rationale: 'Same Croscore family — metrically compatible monospace' },\n { family: 'Open Sans', role: 'body', confidence: 0.85, rationale: 'Neutral sans body under Times-compatible serif headings' },\n ],\n 'source-serif-4': [\n { family: 'Source Sans 3', role: 'body', confidence: 0.95, rationale: 'Same Adobe design family — sans body under serif headings' },\n { family: 'Source Code Pro', role: 'mono', confidence: 0.97, rationale: 'Same Adobe design family — perfect metric alignment across all three' },\n { family: 'Inter', role: 'body', confidence: 0.86, rationale: 'Clean geometric sans body under structured serif headings' },\n ],\n 'roboto-slab': [\n { family: 'Roboto', role: 'body', confidence: 0.93, rationale: 'Same design family — neo-grotesque body under slab serif headings' },\n { family: 'Roboto Mono', role: 'mono', confidence: 0.94, rationale: 'Same design family — monospace for code alongside slab serif' },\n { family: 'Open Sans', role: 'body', confidence: 0.85, rationale: 'Neutral sans body grounds geometric slab serif' },\n ],\n 'ibm-plex-serif': [\n { family: 'IBM Plex Sans', role: 'body', confidence: 0.96, rationale: 'Same design family — sans body under matching serif headings' },\n { family: 'IBM Plex Mono', role: 'mono', confidence: 0.97, rationale: 'Same design family — matching monospace for code' },\n { family: 'Inter', role: 'body', confidence: 0.85, rationale: 'Clean geometric sans alternative for body text' },\n ],\n 'overpass-mono': [\n { family: 'Overpass', role: 'body', confidence: 0.93, rationale: 'Same design family — grotesque body around matching monospace' },\n { family: 'Inter', role: 'body', confidence: 0.85, rationale: 'Clean geometric sans for modern UI around code' },\n { family: 'Source Serif 4', role: 'heading', confidence: 0.83, rationale: 'Structured serif heading for developer documentation' },\n ],\n 'fira-sans': [\n { family: 'Fira Code', role: 'mono', confidence: 0.93, rationale: 'Same design family — ligature monospace with matching Mozilla identity' },\n { family: 'Fira Mono', role: 'mono', confidence: 0.94, rationale: 'Same design family — monospace without ligatures' },\n { family: 'Merriweather', role: 'heading', confidence: 0.86, rationale: 'Screen serif heading over clean humanist sans body' },\n { family: 'Lora', role: 'heading', confidence: 0.85, rationale: 'Warm serif heading adds editorial depth to humanist sans' },\n ],\n 'antic-slab': [\n { family: 'Open Sans', role: 'body', confidence: 0.84, rationale: 'Neutral sans body under friendly slab serif headings' },\n { family: 'Lato', role: 'body', confidence: 0.83, rationale: 'Humanist sans body grounds warm slab serif' },\n { family: 'Fira Mono', role: 'mono', confidence: 0.81, rationale: 'Humanist monospace for code alongside slab serif' },\n ],\n 'tenor-sans': [\n { family: 'Merriweather', role: 'heading', confidence: 0.84, rationale: 'Screen serif heading over elegant geometric sans body' },\n { family: 'Lora', role: 'heading', confidence: 0.83, rationale: 'Warm serif heading contrasts refined sans body' },\n { family: 'Source Code Pro', role: 'mono', confidence: 0.82, rationale: 'Clean monospace for code alongside refined sans' },\n ],\n 'jost': [\n { family: 'Crimson Pro', role: 'heading', confidence: 0.86, rationale: 'Refined serif heading contrasts Futura-inspired geometric sans' },\n { family: 'Source Serif 4', role: 'body', confidence: 0.85, rationale: 'Structured serif body grounds Bauhaus-inspired headings' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.85, rationale: 'Sharp monospace for code alongside geometric sans' },\n ],\n 'inter-tight': [\n { family: 'Crimson Pro', role: 'heading', confidence: 0.87, rationale: 'Refined serif heading over condensed geometric sans body' },\n { family: 'Source Serif 4', role: 'heading', confidence: 0.86, rationale: 'Structured serif heading for compact layout headings' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.88, rationale: 'Same design aesthetic as Inter — tight monospace for code' },\n ],\n 'instrument-sans': [\n { family: 'Instrument Serif', role: 'heading', confidence: 0.94, rationale: 'Same design family — serif heading over matching sans body' },\n { family: 'Merriweather', role: 'heading', confidence: 0.84, rationale: 'Screen serif heading over clean modern sans body' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.85, rationale: 'Modern monospace for code alongside clean sans' },\n ],\n 'instrument-serif': [\n { family: 'Instrument Sans', role: 'body', confidence: 0.94, rationale: 'Same design family — sans body under matching serif headings' },\n { family: 'Inter', role: 'body', confidence: 0.86, rationale: 'Clean geometric sans body under elegant serif display' },\n { family: 'Fira Code', role: 'mono', confidence: 0.83, rationale: 'Modern monospace for code in editorial layouts' },\n ],\n 'wix-madefor-display': [\n { family: 'Merriweather', role: 'body', confidence: 0.84, rationale: 'Screen serif body under purpose-built display sans headings' },\n { family: 'Lora', role: 'body', confidence: 0.83, rationale: 'Warm serif body grounds friendly display sans' },\n { family: 'Fira Code', role: 'mono', confidence: 0.83, rationale: 'Modern monospace for code in web builder contexts' },\n ],\n 'bricolage-grotesque': [\n { family: 'Lora', role: 'body', confidence: 0.85, rationale: 'Warm serif body grounds eclectic grotesque display headings' },\n { family: 'Source Serif 4', role: 'body', confidence: 0.84, rationale: 'Structured serif body anchors expressive grotesque' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.84, rationale: 'Modern monospace for code alongside quirky grotesque' },\n ],\n 'geist': [\n { family: 'Source Serif 4', role: 'heading', confidence: 0.86, rationale: 'Structured serif heading over Vercel system sans body' },\n { family: 'Crimson Pro', role: 'heading', confidence: 0.85, rationale: 'Refined serif heading contrasts minimal sans body' },\n { family: 'Geist Mono', role: 'mono', confidence: 0.96, rationale: 'Same design family — matching monospace for code' },\n { family: 'JetBrains Mono', role: 'mono', confidence: 0.88, rationale: 'Popular developer monospace for code in Vercel/Next.js projects' },\n ],\n 'geist-mono': [\n { family: 'Geist', role: 'body', confidence: 0.96, rationale: 'Same design family — matching sans for UI around code' },\n { family: 'Inter', role: 'body', confidence: 0.88, rationale: 'Clean geometric sans for documentation around code' },\n { family: 'Source Serif 4', role: 'heading', confidence: 0.84, rationale: 'Structured serif heading for developer documentation' },\n ],\n};\n\n// ---------------------------------------------------------------------------\n// Algorithmic pairing fallback\n// ---------------------------------------------------------------------------\n\ntype PairingStrategy = {\n targetCategories: string[];\n rationale: string;\n};\n\nconst CONTRAST_STRATEGIES: Record<string, Record<string, PairingStrategy>> = {\n 'sans-serif': {\n heading: { targetCategories: ['serif', 'display'], rationale: 'Serif heading adds contrast over sans body' },\n body: { targetCategories: ['serif'], rationale: 'Serif for long-form reading alongside sans headlines' },\n accent: { targetCategories: ['display', 'handwriting'], rationale: 'Display/decorative font for accent elements' },\n mono: { targetCategories: ['monospace'], rationale: 'Monospace for code and data elements' },\n },\n 'serif': {\n heading: { targetCategories: ['sans-serif'], rationale: 'Sans heading provides modern contrast' },\n body: { targetCategories: ['sans-serif'], rationale: 'Sans body for readability under serif headlines' },\n accent: { targetCategories: ['display'], rationale: 'Display font for accent elements' },\n mono: { targetCategories: ['monospace'], rationale: 'Monospace for code and data elements' },\n },\n 'monospace': {\n heading: { targetCategories: ['sans-serif'], rationale: 'Sans heading for documentation structure' },\n body: { targetCategories: ['sans-serif'], rationale: 'Sans body for UI around code' },\n accent: { targetCategories: ['sans-serif'], rationale: 'Sans accent for navigation elements' },\n mono: { targetCategories: ['monospace'], rationale: 'Same category for consistent code styling' },\n },\n 'display': {\n heading: { targetCategories: ['display', 'serif'], rationale: 'Display or serif for complementary headlines' },\n body: { targetCategories: ['sans-serif', 'serif'], rationale: 'Readable body font under display headlines' },\n accent: { targetCategories: ['sans-serif'], rationale: 'Clean sans for supporting UI elements' },\n mono: { targetCategories: ['monospace'], rationale: 'Monospace for code and data elements' },\n },\n 'handwriting': {\n heading: { targetCategories: ['serif', 'sans-serif'], rationale: 'Formal heading under decorative elements' },\n body: { targetCategories: ['sans-serif', 'serif'], rationale: 'Readable body font under decorative headers' },\n accent: { targetCategories: ['sans-serif'], rationale: 'Clean supporting font' },\n mono: { targetCategories: ['monospace'], rationale: 'Monospace for code elements' },\n },\n};\n\n/**\n * Generate algorithmic pairing recommendations.\n *\n * Uses contrast-based heuristics: pair sans with serif, geometric with humanist, etc.\n */\nfunction algorithmicPairings(font: FontEntry, role?: 'heading' | 'body' | 'accent' | 'mono'): PairingRecommendation[] {\n const reg = loadRegistry();\n const strategies = CONTRAST_STRATEGIES[font.category] ?? CONTRAST_STRATEGIES['sans-serif']!;\n const roles: ('heading' | 'body' | 'accent' | 'mono')[] = role ? [role] : ['heading', 'body', 'mono'];\n if (!strategies) return [];\n\n const recommendations: PairingRecommendation[] = [];\n\n for (const r of roles) {\n const strategy = strategies[r];\n if (!strategy) continue;\n\n // Find candidate fonts in the target categories\n const candidates = reg.fonts\n .filter(f =>\n f.id !== font.id &&\n f.source !== 'system' &&\n strategy.targetCategories.includes(f.category) &&\n f.weights.length >= 3,\n )\n .slice(0, 100); // Limit search space\n\n // Score candidates by quality signals\n const scored = candidates.map(c => {\n let score = 0.5;\n if (c.variable) score += 0.1;\n if (c.weights.length >= 6) score += 0.05;\n if (c.hasItalic) score += 0.05;\n if (c.subsets.length >= 3) score += 0.05;\n // Prefer fonts that share subset coverage\n const sharedSubsets = font.subsets.filter(s => c.subsets.includes(s));\n score += Math.min(sharedSubsets.length * 0.02, 0.1);\n return { fontId: c.id, role: r, confidence: Math.min(score, 0.95), rationale: strategy.rationale, source: 'algorithmic' as const };\n });\n\n scored.sort((a, b) => b.confidence - a.confidence);\n recommendations.push(...scored.slice(0, 3));\n }\n\n return recommendations;\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Get pairing recommendations for a font.\n *\n * Uses curated data for popular fonts, falls back to algorithmic contrast pairing.\n */\nexport function recommendPairings(\n idOrFamily: string,\n options?: { role?: 'heading' | 'body' | 'accent' | 'mono'; limit?: number },\n): PairingRecommendation[] {\n const font = resolveFont(idOrFamily);\n if (!font) return [];\n\n const limit = options?.limit ?? 5;\n const role = options?.role;\n\n // Try curated pairings first\n const curated = CURATED_PAIRINGS[font.id];\n if (curated) {\n const reg = loadRegistry();\n const resolved: PairingRecommendation[] = curated\n .filter(p => !role || p.role === role)\n .flatMap(p => {\n const match = reg.fonts.find(f => f.family === p.family);\n if (!match) return [];\n return [{ fontId: match.id, role: p.role, confidence: p.confidence, rationale: p.rationale, source: 'curated' as const }];\n });\n\n if (resolved.length >= limit) {\n return resolved.slice(0, limit);\n }\n\n // Fill remaining slots with algorithmic\n const algoResults = algorithmicPairings(font, role)\n .filter(a => !resolved.some(r => r?.fontId === a.fontId));\n return [...resolved, ...algoResults].slice(0, limit);\n }\n\n // Algorithmic fallback\n return algorithmicPairings(font, role).slice(0, limit);\n}\n\nexport type ResolvedPairing = {\n font: FontEntry;\n role: 'heading' | 'body' | 'accent' | 'mono';\n confidence: number;\n rationale: string;\n};\n\n/**\n * Resolve pairing recommendations to full FontEntry objects.\n */\nexport function resolvePairings(\n idOrFamily: string,\n options?: { role?: 'heading' | 'body' | 'accent' | 'mono'; limit?: number },\n): ResolvedPairing[] {\n const recs = recommendPairings(idOrFamily, options);\n return recs\n .map(rec => {\n const font = resolveFont(rec.fontId);\n if (!font) return null;\n return { font, role: rec.role, confidence: rec.confidence, rationale: rec.rationale };\n })\n .filter((f): f is ResolvedPairing => f !== null);\n}\n","import type { FontEntry } from '@fetchtype/types';\n\nexport type TypographicContext = 'display' | 'interface' | 'reading' | 'mono' | 'editorial' | 'data';\n\nexport type ContextScores = Record<TypographicContext, number>;\n\nfunction cap(score: number): number {\n return Math.min(1.0, Math.max(0, Math.round(score * 1000) / 1000));\n}\n\nfunction hasAxis(font: FontEntry, tag: string): boolean {\n return font.axes.some((a) => a.tag === tag);\n}\n\nfunction computeDisplayScore(font: FontEntry): number {\n let score = 0;\n if (font.category === 'display' || font.category === 'handwriting') score += 0.3;\n else if (font.category === 'serif') score += 0.2;\n else if (font.category === 'sans-serif') score += 0.1;\n if (hasAxis(font, 'wght')) score += 0.2;\n if (hasAxis(font, 'opsz') || font.hasOpticalSizing) score += 0.15;\n if (font.weights.some((w) => w >= 700)) score += 0.1;\n if (font.tags.some((t) => ['geometric', 'elegant', 'decorative'].includes(t))) score += 0.05;\n return cap(score);\n}\n\nfunction computeInterfaceScore(font: FontEntry): number {\n let score = 0;\n if (font.category === 'sans-serif') score += 0.3;\n if (font.weights.length >= 5) score += 0.2;\n if (font.metrics.xHeight !== null && font.metrics.xHeight > 0) score += 0.15;\n if (font.variable) score += 0.1;\n if (font.performance.loadingImpact === 'minimal' || font.performance.loadingImpact === 'low' as string)\n score += 0.1;\n if (font.subsets.includes('latin-ext')) score += 0.1;\n if (font.tags.some((t) => ['clean', 'neutral', 'geometric'].includes(t))) score += 0.05;\n return cap(score);\n}\n\nfunction computeReadingScore(font: FontEntry): number {\n let score = 0;\n if (font.category === 'serif') score += 0.25;\n else if (font.category === 'sans-serif') score += 0.15;\n if (font.hasItalic) score += 0.2;\n if (font.weights.length >= 3) score += 0.15;\n if (hasAxis(font, 'opsz') || font.hasOpticalSizing) score += 0.1;\n if (font.subsets.length > 3) score += 0.1;\n if (font.tags.some((t) => ['humanist', 'classic', 'readable'].includes(t))) score += 0.05;\n return cap(score);\n}\n\nfunction computeMonoScore(font: FontEntry): number {\n if (font.category !== 'monospace') return 0;\n let score = 0.6;\n if (font.tags.some((t) => t === 'ligatures')) score += 0.15;\n if (font.weights.length >= 3) score += 0.1;\n if (font.variable) score += 0.1;\n if (font.tags.some((t) => t === 'coding')) score += 0.05;\n return cap(score);\n}\n\nfunction computeEditorialScore(font: FontEntry): number {\n let score = 0;\n if (font.category === 'serif' || font.category === 'display') score += 0.25;\n if (font.hasItalic) score += 0.2;\n if (hasAxis(font, 'opsz') || font.hasOpticalSizing) score += 0.15;\n if (hasAxis(font, 'wght')) score += 0.15;\n if (font.weights.length >= 5) score += 0.1;\n if (font.tags.some((t) => ['elegant', 'literary', 'classic'].includes(t))) score += 0.1;\n if (font.subsets.length > 1) score += 0.05;\n return cap(score);\n}\n\nfunction computeDataScore(font: FontEntry): number {\n let score = 0;\n if (font.category === 'monospace') score += 0.3;\n else if (font.category === 'sans-serif') score += 0.25;\n if (font.performance.loadingImpact === 'minimal') score += 0.15;\n if (font.variable) score += 0.1;\n if (hasAxis(font, 'wdth')) score += 0.1;\n if (font.tags.some((t) => ['tabular', 'technical'].includes(t))) score += 0.1;\n return cap(score);\n}\n\nexport function computeContextScores(font: FontEntry): ContextScores {\n return {\n display: computeDisplayScore(font),\n interface: computeInterfaceScore(font),\n reading: computeReadingScore(font),\n mono: computeMonoScore(font),\n editorial: computeEditorialScore(font),\n data: computeDataScore(font),\n };\n}\n","import type { FontEntry } from '@fetchtype/types';\n\nexport type SizeGuidance = {\n body: { min: number; optimal: number; max: number };\n display: { min: number };\n caption: { min: number };\n opticalSizeMapping: Array<{ cssSize: number; opszValue: number }> | null;\n};\n\n// Typical xHeight proportion relative to unitsPerEm for sans-serif/serif fonts.\n// Values below this suggest a smaller-looking font that needs larger sizes.\nconst AVERAGE_X_HEIGHT_RATIO = 0.52;\n\nexport function computeSizeGuidance(font: FontEntry): SizeGuidance {\n const { category, axes, metrics, performance } = font;\n\n // --- Body size defaults by category ---\n let bodyMin = 14;\n let bodyOptimal = 16;\n let bodyMax = 20;\n\n if (category === 'serif') {\n bodyMin = 14;\n bodyOptimal = 16;\n bodyMax = 20;\n } else if (category === 'sans-serif') {\n bodyMin = 14;\n bodyOptimal = 16;\n bodyMax = 20;\n } else if (category === 'display') {\n bodyMin = 24;\n bodyOptimal = 36;\n bodyMax = 96;\n } else if (category === 'handwriting') {\n bodyMin = 16;\n bodyOptimal = 20;\n bodyMax = 28;\n } else if (category === 'monospace') {\n bodyMin = 13;\n bodyOptimal = 14;\n bodyMax = 18;\n }\n\n // --- Adjust based on metrics ---\n if (metrics && metrics.xHeight != null && metrics.unitsPerEm > 0) {\n const xHeightRatio = metrics.xHeight / metrics.unitsPerEm;\n if (xHeightRatio < AVERAGE_X_HEIGHT_RATIO) {\n // Small x-height — font appears smaller; nudge min up\n const bump = xHeightRatio < AVERAGE_X_HEIGHT_RATIO - 0.06 ? 2 : 1;\n bodyMin = Math.min(bodyMin + bump, bodyOptimal);\n }\n }\n\n // Heavy fonts: note is implicit via the payload field (no change to sizes needed\n // per spec, but we leave a hook here for future use).\n void performance;\n\n // --- Display size by category ---\n let displayMin = 24;\n if (category === 'display') {\n displayMin = 20;\n } else if (category === 'monospace') {\n displayMin = 18;\n } else if (category === 'handwriting') {\n displayMin = 20;\n }\n\n // --- Caption size by category ---\n let captionMin = 11;\n if (category === 'display') {\n captionMin = 14;\n } else if (category === 'monospace') {\n captionMin = 10;\n } else if (category === 'handwriting') {\n captionMin = 12;\n }\n\n // --- Optical size mapping ---\n const opszAxis = axes.find((a) => a.tag === 'opsz');\n let opticalSizeMapping: SizeGuidance['opticalSizeMapping'] = null;\n\n if (opszAxis) {\n const { min: axisMin, max: axisMax } = opszAxis;\n\n // Linear interpolation helper\n function lerp(cssSize: number): number {\n // Map cssSize range [8, 96] to opsz range [axisMin, axisMax]\n const t = Math.max(0, Math.min(1, (cssSize - 8) / (96 - 8)));\n return Math.round((axisMin + t * (axisMax - axisMin)) * 10) / 10;\n }\n\n const middle = Math.round((axisMin + axisMax) / 2 * 10) / 10;\n opticalSizeMapping = [\n { cssSize: 12, opszValue: lerp(12) },\n { cssSize: 16, opszValue: lerp(16) },\n { cssSize: 72, opszValue: lerp(72) },\n ];\n\n // Ensure the middle mapping actually uses the middle axis value (sanity override)\n void middle;\n }\n\n return {\n body: { min: bodyMin, optimal: bodyOptimal, max: bodyMax },\n display: { min: displayMin },\n caption: { min: captionMin },\n opticalSizeMapping,\n };\n}\n","import type { FontAsset, FontReference } from '@fetchtype/types';\n\nexport { GOOGLE_FONTS_CATALOG, lookupFont, searchFonts, type CatalogEntry } from './catalog.js';\nexport { suggestFonts, type FontSuggestion, type SuggestionContext } from './suggest.js';\nexport {\n loadRegistry,\n registryStats,\n resolveFont,\n hasFont,\n searchRegistry,\n suggestFromRegistry,\n getPairings,\n type RegistrySearchOptions,\n type RegistrySuggestOptions,\n} from './registry.js';\nexport { recommendPairings, resolvePairings } from './pairing.js';\nexport { computeContextScores, type ContextScores, type TypographicContext } from './scoring.js';\nexport { computeSizeGuidance, type SizeGuidance } from './size-guidance.js';\n\nexport const SYSTEM_FONT_STACKS = {\n 'sans-serif': ['ui-sans-serif', 'system-ui', '-apple-system', 'BlinkMacSystemFont', 'sans-serif'],\n serif: ['Iowan Old Style', 'Georgia', 'Times New Roman', 'serif'],\n monospace: ['ui-monospace', 'SFMono-Regular', 'Menlo', 'monospace'],\n display: ['Avenir Next', 'Segoe UI', 'sans-serif'],\n handwriting: ['Segoe Print', 'Bradley Hand', 'cursive'],\n} as const;\n\nfunction quoteFontFamily(family: string): string {\n return /\\s/.test(family) && !family.startsWith('\"') ? `\"${family}\"` : family;\n}\n\nfunction slugifyFamily(family: string): string {\n return family\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-');\n}\n\nexport type FontResolution = {\n source: FontReference['source'];\n stylesheetUrl?: string;\n assets: FontAsset[];\n fontFaceCss?: string;\n preloadHints: string[];\n};\n\nexport type GoogleFontOptions = {\n display?: 'auto' | 'block' | 'swap' | 'fallback' | 'optional';\n weights?: number[];\n};\n\nexport type SelfHostedFontOptions = {\n basePath?: string;\n weights?: number[];\n};\n\nexport function resolveFontStack(\n reference: Pick<FontReference, 'family' | 'fallbacks' | 'category'>,\n): string[] {\n const category = reference.category ?? 'sans-serif';\n const fallbacks = reference.fallbacks?.length\n ? reference.fallbacks\n : [...SYSTEM_FONT_STACKS[category]];\n\n return [quoteFontFamily(reference.family), ...fallbacks.map(quoteFontFamily)];\n}\n\nexport function stringifyFontStack(\n reference: Pick<FontReference, 'family' | 'fallbacks' | 'category'>,\n): string {\n return resolveFontStack(reference).join(', ');\n}\n\nexport function buildGoogleFontsStylesheetUrl(\n family: string,\n options: GoogleFontOptions = {},\n): string {\n const url = new URL('https://fonts.googleapis.com/css2');\n const formattedFamily = family.trim().split(/\\s+/).join('+');\n const weights = options.weights?.length\n ? [...new Set(options.weights)].sort((a, b) => a - b)\n : [];\n const familyParam = weights.length\n ? `${formattedFamily}:wght@${weights.join(';')}`\n : formattedFamily;\n\n url.searchParams.set('family', familyParam);\n url.searchParams.set('display', options.display ?? 'swap');\n\n return url.toString();\n}\n\nexport function buildSelfHostedAssets(\n reference: Pick<FontReference, 'family' | 'variable'>,\n options: SelfHostedFontOptions = {},\n): FontAsset[] {\n const basePath = options.basePath ?? '/fonts';\n const slug = slugifyFamily(reference.family);\n const weights = options.weights?.length\n ? [...new Set(options.weights)].sort((a, b) => a - b)\n : [400];\n\n if (reference.variable) {\n return [\n {\n family: reference.family,\n style: 'normal',\n format: 'variable',\n url: `${basePath}/${slug}-variable.woff2`,\n },\n ];\n }\n\n return weights.map((weight) => ({\n family: reference.family,\n weight,\n style: 'normal',\n format: 'woff2',\n url: `${basePath}/${slug}-${weight}.woff2`,\n }));\n}\n\nexport function generateFontFaceCss(reference: FontReference, assets: FontAsset[]): string {\n return assets\n .map((asset) => {\n const lines = [\n '@font-face {',\n ` font-family: ${quoteFontFamily(reference.family)};`,\n ` src: url(\"${asset.url}\") format(\"${asset.format === 'variable' ? 'woff2-variations' : asset.format}\");`,\n ];\n\n if (asset.weight) {\n lines.push(` font-weight: ${asset.weight};`);\n } else if (reference.variable) {\n lines.push(' font-weight: 1 1000;');\n }\n\n lines.push(` font-style: ${asset.style ?? 'normal'};`);\n lines.push(' font-display: swap;');\n\n if (asset.unicodeRange) {\n lines.push(` unicode-range: ${asset.unicodeRange};`);\n }\n\n lines.push('}');\n return lines.join('\\n');\n })\n .join('\\n\\n');\n}\n\nexport function resolveFontReference(\n reference: FontReference,\n options: GoogleFontOptions & SelfHostedFontOptions = {},\n): FontResolution {\n if (reference.source === 'google') {\n const stylesheetUrl = buildGoogleFontsStylesheetUrl(reference.family, options);\n\n return {\n source: reference.source,\n stylesheetUrl,\n assets: [],\n preloadHints: [stylesheetUrl],\n };\n }\n\n if (reference.source === 'self-hosted') {\n const assets = buildSelfHostedAssets(reference, options);\n\n return {\n source: reference.source,\n assets,\n fontFaceCss: generateFontFaceCss(reference, assets),\n preloadHints: assets.map((asset) => asset.url),\n };\n }\n\n return {\n source: reference.source,\n assets: [],\n preloadHints: [],\n };\n}\n","import {\n DesignTokenSetSchema,\n type DesignTokenSet,\n type Diagnostic,\n type ModeOverride,\n type ThemeMode,\n type ValidationReport,\n} from '@fetchtype/types';\n\nimport type { Severity } from '@fetchtype/types';\n\nimport { lookupFont, resolveFont, SYSTEM_FONT_STACKS } from '@fetchtype/fonts';\n\nimport { DEFAULT_TOKEN_SET, getPreset, PRESET_NAMES, PRESETS } from './presets.js';\nimport { computeHeadingSizes, SCALE_RATIOS } from './scale.js';\nimport {\n evaluateTypographyReferences,\n findBestTypographyReferences,\n} from './systems.js';\n\nexport type BuildOptions = {\n prefix?: string;\n minBodyLineHeight?: number;\n minButtonSizePx?: number;\n maxProseWidthCh?: number;\n referenceSystems?: string[];\n};\n\nexport type ValidationConfig = {\n rules: Record<\n string,\n false | Severity | { severity: Severity; options?: Record<string, unknown> }\n >;\n fonts?: {\n allow?: string[];\n block?: Array<string | { family: string; reason: string }>;\n };\n performance?: {\n maxFontPayloadKb?: number;\n maxFontCount?: number;\n maxPreloadCount?: number;\n };\n requiredSubsets?: string[];\n};\n\nexport type BuildArtifacts = {\n tokenSet: DesignTokenSet;\n report: ValidationReport;\n css: string;\n json: string;\n};\n\nconst DEFAULT_OPTIONS: Required<BuildOptions> = {\n prefix: 'ft',\n minBodyLineHeight: 1.5,\n minButtonSizePx: 14,\n maxProseWidthCh: 75,\n referenceSystems: [],\n};\n\ntype ParsedValue = {\n value: number;\n unit: string | null;\n};\n\nconst TOKEN_REFERENCE_PATTERN = /^\\{([A-Za-z0-9_.-]+)\\}$/;\n\nfunction createDiagnostic(\n rule: string,\n severity: Diagnostic['severity'],\n path: string,\n message: string,\n expected?: string,\n actual?: string,\n): Diagnostic {\n return {\n rule,\n severity,\n path,\n message,\n expected,\n actual,\n };\n}\n\nfunction getRuleSeverity(\n rule: string,\n config?: ValidationConfig,\n): Diagnostic['severity'] | false | undefined {\n if (!config?.rules) return undefined; // use default\n if (!(rule in config.rules)) return undefined; // use default\n const ruleConfig = config.rules[rule];\n if (ruleConfig === false) return false; // disabled\n if (typeof ruleConfig === 'string') return ruleConfig; // severity override\n if (typeof ruleConfig === 'object') return ruleConfig.severity;\n return undefined; // use default\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction parseReferencePath(value: string): string[] | null {\n const match = value.match(TOKEN_REFERENCE_PATTERN);\n return match?.[1] ? match[1].split('.') : null;\n}\n\nfunction getValueAtPath(root: unknown, path: string[]): unknown {\n let current: unknown = root;\n\n for (const segment of path) {\n if (Array.isArray(current)) {\n const index = Number(segment);\n if (!Number.isInteger(index)) {\n return undefined;\n }\n\n current = current[index];\n continue;\n }\n\n if (!isRecord(current) || !(segment in current)) {\n return undefined;\n }\n\n current = current[segment];\n }\n\n return current;\n}\n\nfunction setValueAtPath(root: unknown, path: string[], value: unknown): boolean {\n if (path.length === 0) {\n return false;\n }\n\n let current: unknown = root;\n\n for (let index = 0; index < path.length - 1; index += 1) {\n const segment = path[index];\n if (segment === undefined) {\n return false;\n }\n\n if (Array.isArray(current)) {\n const arrayIndex = Number(segment);\n if (!Number.isInteger(arrayIndex)) {\n return false;\n }\n\n current = current[arrayIndex];\n continue;\n }\n\n if (!isRecord(current) || !(segment in current)) {\n return false;\n }\n\n current = current[segment];\n }\n\n const lastSegment = path[path.length - 1];\n if (lastSegment === undefined) {\n return false;\n }\n\n if (Array.isArray(current)) {\n const arrayIndex = Number(lastSegment);\n if (!Number.isInteger(arrayIndex) || current[arrayIndex] === undefined) {\n return false;\n }\n\n current[arrayIndex] = value;\n return true;\n }\n\n if (!isRecord(current) || !(lastSegment in current)) {\n return false;\n }\n\n current[lastSegment] = value;\n return true;\n}\n\nfunction resolvePathValue(root: unknown, path: string[], stack: string[]): unknown {\n const key = path.join('.');\n if (stack.includes(key)) {\n throw new Error(`Circular token reference detected at {${key}}.`);\n }\n\n const value = getValueAtPath(root, path);\n if (value === undefined) {\n throw new Error(`Token reference {${key}} could not be resolved.`);\n }\n\n const resolved = resolveNode(value, root, [...stack, key]);\n if (!setValueAtPath(root, path, resolved)) {\n throw new Error(`Resolved token reference {${key}} could not be written back.`);\n }\n\n return resolved;\n}\n\nfunction resolveNode(node: unknown, root: unknown, stack: string[]): unknown {\n if (typeof node === 'string') {\n const referencePath = parseReferencePath(node);\n return referencePath ? resolvePathValue(root, referencePath, stack) : node;\n }\n\n if (Array.isArray(node)) {\n return node.map((item) => resolveNode(item, root, stack));\n }\n\n if (isRecord(node)) {\n for (const [key, value] of Object.entries(node)) {\n node[key] = resolveNode(value, root, stack);\n }\n }\n\n return node;\n}\n\nfunction parseNumericValue(value: string | number): ParsedValue | null {\n if (typeof value === 'number') {\n return { value, unit: null };\n }\n\n const match = value.trim().match(/^(-?\\d+(?:\\.\\d+)?)(px|rem|em|ch)?$/);\n if (!match) {\n return null;\n }\n\n return {\n value: Number(match[1]),\n unit: match[2] ?? null,\n };\n}\n\nfunction toPx(value: string | number, baseFontSize = 16): number | null {\n const parsed = parseNumericValue(value);\n if (!parsed) {\n return null;\n }\n\n if (parsed.unit === null || parsed.unit === 'px') {\n return parsed.value;\n }\n\n if (parsed.unit === 'rem' || parsed.unit === 'em') {\n return parsed.value * baseFontSize;\n }\n\n return null;\n}\n\nfunction toUnitlessLineHeight(\n lineHeight: string | number,\n fontSize: string | number,\n): number | null {\n if (typeof lineHeight === 'number') {\n return lineHeight;\n }\n\n const fontSizePx = toPx(fontSize);\n const parsed = parseNumericValue(lineHeight);\n\n if (!parsed) {\n return null;\n }\n\n if (parsed.unit === null) {\n return parsed.value;\n }\n\n if ((parsed.unit === 'px' || parsed.unit === 'rem' || parsed.unit === 'em') && fontSizePx) {\n const lineHeightPx = toPx(lineHeight);\n return lineHeightPx ? lineHeightPx / fontSizePx : null;\n }\n\n return null;\n}\n\nfunction toCh(value: string): number | null {\n const parsed = parseNumericValue(value);\n return parsed?.unit === 'ch' ? parsed.value : null;\n}\n\nfunction parseHexColor(value: string): [number, number, number] | null {\n const normalized = value.trim();\n if (!/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(normalized)) {\n return null;\n }\n\n const hex =\n normalized.length === 4\n ? normalized\n .slice(1)\n .split('')\n .map((part) => `${part}${part}`)\n .join('')\n : normalized.slice(1);\n\n const red = Number.parseInt(hex.slice(0, 2), 16);\n const green = Number.parseInt(hex.slice(2, 4), 16);\n const blue = Number.parseInt(hex.slice(4, 6), 16);\n\n return [red, green, blue];\n}\n\nfunction toLinearChannel(channel: number): number {\n const normalized = channel / 255;\n return normalized <= 0.03928 ? normalized / 12.92 : ((normalized + 0.055) / 1.055) ** 2.4;\n}\n\nfunction getLuminance([red, green, blue]: [number, number, number]): number {\n return (\n 0.2126 * toLinearChannel(red) + 0.7152 * toLinearChannel(green) + 0.0722 * toLinearChannel(blue)\n );\n}\n\nfunction getContrastRatio(foreground: string, background: string): number | null {\n const foregroundRgb = parseHexColor(foreground);\n const backgroundRgb = parseHexColor(background);\n\n if (!foregroundRgb || !backgroundRgb) {\n return null;\n }\n\n const foregroundLuminance = getLuminance(foregroundRgb);\n const backgroundLuminance = getLuminance(backgroundRgb);\n const lighter = Math.max(foregroundLuminance, backgroundLuminance);\n const darker = Math.min(foregroundLuminance, backgroundLuminance);\n\n return Number(((lighter + 0.05) / (darker + 0.05)).toFixed(2));\n}\n\nfunction formatFontFamily(fontFamily: string | string[]): string {\n return Array.isArray(fontFamily) ? fontFamily.join(', ') : fontFamily;\n}\n\nfunction prefixThemeDiagnostics(theme: ThemeMode, diagnostics: Diagnostic[]): Diagnostic[] {\n return diagnostics.map((diagnostic) => ({\n ...diagnostic,\n rule: `theme.${theme.name}.${diagnostic.rule}`,\n path: diagnostic.path ? `themes.${theme.name}.${diagnostic.path}` : `themes.${theme.name}`,\n }));\n}\n\nfunction validateResolvedTokenSet(\n tokenSet: DesignTokenSet,\n options: Required<BuildOptions>,\n diagnostics: Diagnostic[],\n config?: ValidationConfig,\n): void {\n appendTokenDiagnostics(tokenSet, options, diagnostics, config);\n}\n\nexport function resolveDesignTokenSet(tokenSet: DesignTokenSet): DesignTokenSet {\n const cloned = structuredClone(tokenSet);\n const themes = cloned.themes;\n const modes = cloned.modes;\n cloned.themes = [];\n cloned.modes = {};\n\n const resolved = resolveNode(cloned, cloned, []) as DesignTokenSet;\n resolved.themes = themes;\n resolved.modes = modes;\n return resolved;\n}\n\nexport function applyThemeMode(tokenSet: DesignTokenSet, theme: ThemeMode): DesignTokenSet {\n const themed = structuredClone(tokenSet);\n themed.themes = [];\n\n for (const [path, value] of Object.entries(theme.tokens)) {\n const pathSegments = path.split('.');\n if (getValueAtPath(themed, pathSegments) === undefined) {\n throw new Error(`Theme \"${theme.name}\" references unknown path \"${path}\".`);\n }\n\n if (!setValueAtPath(themed, pathSegments, structuredClone(value))) {\n throw new Error(`Theme \"${theme.name}\" could not apply override for \"${path}\".`);\n }\n }\n\n const resolved = resolveDesignTokenSet(themed);\n resolved.themes = [];\n return resolved;\n}\n\nexport function applyModeOverride(tokenSet: DesignTokenSet, mode: ModeOverride): DesignTokenSet {\n const moded = structuredClone(tokenSet);\n moded.themes = [];\n moded.modes = {};\n\n for (const [path, value] of Object.entries(mode.tokens)) {\n const pathSegments = path.split('.');\n if (getValueAtPath(moded, pathSegments) === undefined) {\n throw new Error(`Mode \"${mode.name}\" references unknown path \"${path}\".`);\n }\n\n if (!setValueAtPath(moded, pathSegments, structuredClone(value))) {\n throw new Error(`Mode \"${mode.name}\" could not apply override for \"${path}\".`);\n }\n }\n\n const resolved = resolveDesignTokenSet(moded);\n resolved.themes = [];\n resolved.modes = {};\n return resolved;\n}\n\nfunction prefixModeDiagnostics(mode: ModeOverride, diagnostics: Diagnostic[]): Diagnostic[] {\n return diagnostics.map((diagnostic) => ({\n ...diagnostic,\n rule: `mode.${mode.name}.${diagnostic.rule}`,\n path: diagnostic.path ? `modes.${mode.name}.${diagnostic.path}` : `modes.${mode.name}`,\n }));\n}\n\nfunction pushDiagnosticWithConfig(\n diagnostics: Diagnostic[],\n config: ValidationConfig | undefined,\n rule: string,\n defaultSeverity: Diagnostic['severity'],\n path: string,\n message: string,\n expected?: string,\n actual?: string,\n): void {\n const overrideSeverity = getRuleSeverity(rule, config);\n if (overrideSeverity === false) return; // rule disabled\n const severity = overrideSeverity ?? defaultSeverity;\n diagnostics.push(createDiagnostic(rule, severity, path, message, expected, actual));\n}\n\nfunction appendTokenDiagnostics(\n tokenSet: DesignTokenSet,\n options: Required<BuildOptions>,\n diagnostics: Diagnostic[],\n config?: ValidationConfig,\n): void {\n const lightContrast = getContrastRatio(\n tokenSet.color.light.text.primary.value,\n tokenSet.color.light.background.primary.value,\n );\n if (lightContrast !== null && lightContrast < 4.5) {\n pushDiagnosticWithConfig(\n diagnostics, config,\n 'contrast.text-primary.light',\n 'error',\n 'color.light.text.primary',\n 'Primary light-mode text does not meet minimum contrast against the light background.',\n '>= 4.5:1',\n `${lightContrast}:1`,\n );\n }\n\n const darkContrast = getContrastRatio(\n tokenSet.color.dark.text.primary.value,\n tokenSet.color.dark.background.primary.value,\n );\n if (darkContrast !== null && darkContrast < 4.5) {\n pushDiagnosticWithConfig(\n diagnostics, config,\n 'contrast.text-primary.dark',\n 'error',\n 'color.dark.text.primary',\n 'Primary dark-mode text does not meet minimum contrast against the dark background.',\n '>= 4.5:1',\n `${darkContrast}:1`,\n );\n }\n\n const bodyToken = tokenSet.typography.body;\n if (!bodyToken) {\n pushDiagnosticWithConfig(\n diagnostics, config,\n 'schema.required-context.body',\n 'error',\n 'typography.body',\n 'The token set is missing the required body typography context.',\n );\n } else {\n const bodyLineHeight = toUnitlessLineHeight(bodyToken.lineHeight, bodyToken.fontSize);\n if (bodyLineHeight !== null && bodyLineHeight < options.minBodyLineHeight) {\n pushDiagnosticWithConfig(\n diagnostics, config,\n 'text-spacing.body-line-height',\n 'warning',\n 'typography.body.lineHeight',\n 'Body text line-height is below the recommended readability threshold.',\n `>= ${options.minBodyLineHeight}`,\n `${bodyLineHeight}`,\n );\n }\n }\n\n const buttonToken = tokenSet.typography.button;\n if (!buttonToken) {\n pushDiagnosticWithConfig(\n diagnostics, config,\n 'schema.required-context.button',\n 'error',\n 'typography.button',\n 'The token set is missing the required button typography context.',\n );\n } else {\n const buttonFontSize = toPx(buttonToken.fontSize);\n if (buttonFontSize !== null && buttonFontSize < options.minButtonSizePx) {\n pushDiagnosticWithConfig(\n diagnostics, config,\n 'font-size-min.button',\n 'warning',\n 'typography.button.fontSize',\n 'Button font size is below the recommended minimum for interactive UI.',\n `>= ${options.minButtonSizePx}px`,\n `${buttonFontSize}px`,\n );\n }\n }\n\n const proseWidth = toCh(tokenSet.layout.maxWidth.prose);\n if (proseWidth !== null && proseWidth > options.maxProseWidthCh) {\n pushDiagnosticWithConfig(\n diagnostics, config,\n 'line-length.prose',\n 'warning',\n 'layout.maxWidth.prose',\n 'Prose width is wider than the recommended comfortable reading range.',\n `<= ${options.maxProseWidthCh}ch`,\n `${proseWidth}ch`,\n );\n }\n\n // -- Caption/label min font-size --\n const captionToken = tokenSet.typography.caption;\n if (captionToken) {\n const captionPx = toPx(captionToken.fontSize);\n if (captionPx !== null && captionPx < 11) {\n pushDiagnosticWithConfig(\n diagnostics, config,\n 'font-size-min.caption',\n 'warning',\n 'typography.caption.fontSize',\n 'Caption font size is below the recommended minimum of 11px.',\n '>= 11px',\n `${captionPx}px`,\n );\n }\n }\n\n const labelToken = tokenSet.typography.label;\n if (labelToken) {\n const labelPx = toPx(labelToken.fontSize);\n if (labelPx !== null && labelPx < 11) {\n pushDiagnosticWithConfig(\n diagnostics, config,\n 'font-size-min.label',\n 'warning',\n 'typography.label.fontSize',\n 'Label font size is below the recommended minimum of 11px.',\n '>= 11px',\n `${labelPx}px`,\n );\n }\n }\n\n // -- Line-height ratio: heading vs body --\n const h1Token = tokenSet.hierarchy.headings.h1;\n if (bodyToken && h1Token) {\n const h1LineHeight = toUnitlessLineHeight(h1Token.lineHeight, h1Token.fontSize);\n const bodyLh = toUnitlessLineHeight(bodyToken.lineHeight, bodyToken.fontSize);\n if (h1LineHeight !== null && bodyLh !== null && h1LineHeight >= bodyLh) {\n pushDiagnosticWithConfig(\n diagnostics, config,\n 'line-height.heading-vs-body',\n 'warning',\n 'hierarchy.headings.h1.lineHeight',\n 'Heading line-height should be less than body line-height for proper visual hierarchy.',\n `< ${bodyLh}`,\n `${h1LineHeight}`,\n );\n }\n }\n\n // -- Spacing scale monotonic --\n const spacingEntries = Object.entries(tokenSet.spacing.scale);\n if (spacingEntries.length > 1) {\n const spacingPxValues = spacingEntries.map(([key, value]) => ({\n key,\n px: toPx(value),\n }));\n for (let i = 1; i < spacingPxValues.length; i += 1) {\n const prev = spacingPxValues[i - 1];\n const curr = spacingPxValues[i];\n if (prev?.px !== null && curr?.px !== null && prev !== undefined && curr !== undefined && prev.px !== null && curr.px !== null && curr.px <= prev.px) {\n pushDiagnosticWithConfig(\n diagnostics, config,\n 'spacing.scale-monotonic',\n 'warning',\n `spacing.scale.${curr.key}`,\n `Spacing scale values should be monotonically increasing. \"${curr.key}\" (${curr.px}px) is not greater than \"${prev.key}\" (${prev.px}px).`,\n `> ${prev.px}px`,\n `${curr.px}px`,\n );\n break;\n }\n }\n }\n\n // -- Heading size direction: h1 > h2 > ... > h6 --\n const headingLevels = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const;\n const headingSizes = headingLevels.map((level) => ({\n level,\n px: toPx(tokenSet.hierarchy.headings[level].fontSize),\n }));\n for (let i = 1; i < headingSizes.length; i += 1) {\n const prev = headingSizes[i - 1];\n const curr = headingSizes[i];\n if (prev?.px !== null && curr?.px !== null && prev !== undefined && curr !== undefined && prev.px !== null && curr.px !== null && curr.px >= prev.px) {\n pushDiagnosticWithConfig(\n diagnostics, config,\n 'heading.size-direction',\n 'warning',\n `hierarchy.headings.${curr.level}.fontSize`,\n `Heading sizes should decrease from h1 to h6. \"${curr.level}\" (${curr.px}px) is not smaller than \"${prev.level}\" (${prev.px}px).`,\n `< ${prev.px}px`,\n `${curr.px}px`,\n );\n break;\n }\n }\n\n // -- Scale divergence --\n const scaleName = tokenSet.hierarchy.scale;\n const scaleRatio = SCALE_RATIOS[scaleName];\n if (scaleRatio !== undefined) {\n const baseSizePx = toPx(tokenSet.hierarchy.baseSize);\n if (baseSizePx !== null) {\n const expected = computeHeadingSizes(baseSizePx, scaleRatio);\n for (const level of headingLevels) {\n const actualPx = toPx(tokenSet.hierarchy.headings[level].fontSize);\n const expectedPx = expected[level];\n if (actualPx !== null && expectedPx !== undefined) {\n const divergence = Math.abs(actualPx - expectedPx) / expectedPx;\n if (divergence > 0.1) {\n pushDiagnosticWithConfig(\n diagnostics, config,\n 'heading.scale-divergence',\n 'warning',\n `hierarchy.headings.${level}.fontSize`,\n `Heading \"${level}\" font size diverges more than 10% from the computed ${scaleName} scale.`,\n `~${expectedPx.toFixed(1)}px`,\n `${actualPx}px`,\n );\n }\n }\n }\n }\n }\n\n // -- F065: Fluid type validation (clamp) --\n const allFontSizes: { path: string; value: string }[] = [];\n for (const [context, token] of Object.entries(tokenSet.typography)) {\n allFontSizes.push({ path: `typography.${context}.fontSize`, value: token.fontSize });\n }\n for (const [level, token] of Object.entries(tokenSet.hierarchy.headings)) {\n allFontSizes.push({ path: `hierarchy.headings.${level}.fontSize`, value: token.fontSize });\n }\n\n for (const { path, value } of allFontSizes) {\n const clampMatch = value.match(/^clamp\\(\\s*([^,]+)\\s*,\\s*([^,]+)\\s*,\\s*([^)]+)\\s*\\)$/);\n if (!clampMatch) continue;\n\n const minVal = toPx(clampMatch[1]!.trim());\n const maxVal = toPx(clampMatch[3]!.trim());\n\n if (minVal !== null && maxVal !== null && minVal > maxVal) {\n pushDiagnosticWithConfig(\n diagnostics, config,\n 'font.fluid-type',\n 'error',\n path,\n `Fluid type clamp() has min (${minVal}px) greater than max (${maxVal}px).`,\n `min <= max`,\n `${minVal}px > ${maxVal}px`,\n );\n }\n\n if (minVal !== null && minVal < 12 && path.includes('body')) {\n pushDiagnosticWithConfig(\n diagnostics, config,\n 'font.fluid-type',\n 'warning',\n path,\n `Fluid type minimum (${minVal}px) is below the recommended 12px floor for body text.`,\n '>= 12px',\n `${minVal}px`,\n );\n }\n }\n}\n\nfunction appendReferenceDiagnostics(\n tokenSet: DesignTokenSet,\n referenceSystems: string[],\n diagnostics: Diagnostic[],\n): ValidationReport['references'] {\n const requestedSystems = referenceSystems.includes('auto')\n ? referenceSystems.filter((system) => system !== 'auto')\n : referenceSystems;\n const autoEvaluations = referenceSystems.includes('auto')\n ? findBestTypographyReferences(tokenSet)\n : [];\n const { evaluations, unknownReferences } = evaluateTypographyReferences(tokenSet, requestedSystems);\n const combinedEvaluations = [...autoEvaluations, ...evaluations].filter(\n (evaluation, index, collection) =>\n collection.findIndex((item) => item.referenceId === evaluation.referenceId) === index,\n );\n\n for (const unknownReference of unknownReferences) {\n diagnostics.push(\n createDiagnostic(\n 'reference-system.unknown',\n 'error',\n '<root>',\n `Unknown typography reference \"${unknownReference}\".`,\n ),\n );\n }\n\n for (const evaluation of combinedEvaluations) {\n diagnostics.push(\n createDiagnostic(\n `reference-system.${evaluation.referenceId}.score`,\n evaluation.score >= 70 ? 'info' : 'warning',\n '<root>',\n `${evaluation.referenceName} alignment score: ${evaluation.score}%.`,\n '>= 70% recommended for a close match',\n `${evaluation.score}%`,\n ),\n );\n\n if (evaluation.mismatched.length > 0) {\n diagnostics.push(\n createDiagnostic(\n `reference-system.${evaluation.referenceId}.mismatches`,\n 'warning',\n '<root>',\n `${evaluation.referenceName} gaps: ${evaluation.mismatched.slice(0, 3).join('; ')}.`,\n ),\n );\n }\n }\n\n return combinedEvaluations;\n}\n\nfunction createReport(\n diagnostics: Diagnostic[],\n references: ValidationReport['references'] = [],\n): ValidationReport {\n const counts = diagnostics.reduce(\n (accumulator, diagnostic) => {\n accumulator[diagnostic.severity] += 1;\n return accumulator;\n },\n { error: 0, warning: 0, info: 0 },\n );\n\n return {\n diagnostics,\n references,\n counts,\n pass: counts.error === 0,\n };\n}\n\nfunction toKebabCase(value: string): string {\n return value\n .replace(/[^a-zA-Z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n}\n\nfunction camelToKebab(value: string): string {\n return value.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nfunction cssVariable(prefix: string, parts: string[]): string {\n return `--${[prefix, ...parts].map(toKebabCase).join('-')}`;\n}\n\nfunction cssVariableFromTokenPath(prefix: string, parts: string[]): string {\n return `--${[prefix, ...parts.map(camelToKebab)].map(toKebabCase).join('-')}`;\n}\n\nfunction pushTypographyVariables(lines: string[], tokenSet: DesignTokenSet, prefix: string): void {\n for (const [context, token] of Object.entries(tokenSet.typography)) {\n lines.push(\n ` ${cssVariable(prefix, ['typography', context, 'font-family'])}: ${formatFontFamily(token.fontFamily)};`,\n );\n lines.push(\n ` ${cssVariable(prefix, ['typography', context, 'font-size'])}: ${token.fontSize};`,\n );\n lines.push(\n ` ${cssVariable(prefix, ['typography', context, 'font-weight'])}: ${token.fontWeight};`,\n );\n lines.push(\n ` ${cssVariable(prefix, ['typography', context, 'line-height'])}: ${token.lineHeight};`,\n );\n\n if (token.letterSpacing) {\n lines.push(\n ` ${cssVariable(prefix, ['typography', context, 'letter-spacing'])}: ${token.letterSpacing};`,\n );\n }\n }\n}\n\nfunction pushColorVariables(\n lines: string[],\n tokenSet: DesignTokenSet,\n prefix: string,\n mode: 'light' | 'dark',\n): void {\n for (const [groupName, group] of Object.entries(tokenSet.color[mode])) {\n for (const [tokenName, tokenValue] of Object.entries(group)) {\n lines.push(\n ` ${cssVariable(prefix, ['color', mode, groupName, tokenName])}: ${tokenValue.value};`,\n );\n }\n }\n}\n\nfunction pushSpacingVariables(lines: string[], tokenSet: DesignTokenSet, prefix: string): void {\n lines.push(` ${cssVariable(prefix, ['spacing', 'unit'])}: ${tokenSet.spacing.unit};`);\n\n for (const [tokenName, tokenValue] of Object.entries(tokenSet.spacing.scale)) {\n lines.push(` ${cssVariable(prefix, ['spacing', tokenName])}: ${tokenValue};`);\n }\n}\n\nfunction pushLayoutVariables(lines: string[], tokenSet: DesignTokenSet, prefix: string): void {\n for (const [tokenName, tokenValue] of Object.entries(tokenSet.layout.maxWidth)) {\n lines.push(` ${cssVariable(prefix, ['layout', 'max-width', tokenName])}: ${tokenValue};`);\n }\n\n for (const [tokenName, tokenValue] of Object.entries(tokenSet.layout.breakpoints)) {\n lines.push(` ${cssVariable(prefix, ['layout', 'breakpoint', tokenName])}: ${tokenValue};`);\n }\n\n if (tokenSet.layout.grid) {\n lines.push(\n ` ${cssVariable(prefix, ['layout', 'grid', 'columns'])}: ${tokenSet.layout.grid.columns};`,\n );\n lines.push(` ${cssVariable(prefix, ['layout', 'grid', 'gap'])}: ${tokenSet.layout.grid.gap};`);\n }\n}\n\nfunction pushHierarchyVariables(lines: string[], tokenSet: DesignTokenSet, prefix: string): void {\n lines.push(` ${cssVariable(prefix, ['hierarchy', 'scale'])}: ${tokenSet.hierarchy.scale};`);\n lines.push(\n ` ${cssVariable(prefix, ['hierarchy', 'base-size'])}: ${tokenSet.hierarchy.baseSize};`,\n );\n\n for (const [heading, token] of Object.entries(tokenSet.hierarchy.headings)) {\n lines.push(` ${cssVariable(prefix, ['heading', heading, 'font-size'])}: ${token.fontSize};`);\n lines.push(\n ` ${cssVariable(prefix, ['heading', heading, 'font-weight'])}: ${token.fontWeight};`,\n );\n lines.push(\n ` ${cssVariable(prefix, ['heading', heading, 'line-height'])}: ${token.lineHeight};`,\n );\n }\n}\n\nexport function parseDesignTokenSet(input: unknown): DesignTokenSet {\n return DesignTokenSetSchema.parse(input);\n}\n\nexport function validateDesignTokenSet(\n input: unknown,\n options: BuildOptions = {},\n validationConfig?: ValidationConfig,\n): ValidationReport {\n const mergedOptions = { ...DEFAULT_OPTIONS, ...options };\n const parsed = DesignTokenSetSchema.safeParse(input);\n\n if (!parsed.success) {\n const diagnostics = parsed.error.issues.map((issue) =>\n createDiagnostic('schema.invalid', 'error', issue.path.join('.'), issue.message),\n );\n\n return createReport(diagnostics);\n }\n\n const diagnostics: Diagnostic[] = [];\n const seenThemeNames = new Set<string>();\n for (const theme of parsed.data.themes) {\n if (seenThemeNames.has(theme.name)) {\n diagnostics.push(\n createDiagnostic(\n 'theme.duplicate-name',\n 'error',\n `themes.${theme.name}`,\n `Duplicate theme name \"${theme.name}\" found in token set.`,\n ),\n );\n }\n\n seenThemeNames.add(theme.name);\n }\n\n let resolvedBase: DesignTokenSet;\n try {\n resolvedBase = resolveDesignTokenSet(parsed.data);\n } catch (error) {\n diagnostics.push(\n createDiagnostic(\n 'reference.invalid',\n 'error',\n '<root>',\n error instanceof Error ? error.message : String(error),\n ),\n );\n return createReport(diagnostics);\n }\n\n validateResolvedTokenSet(resolvedBase, mergedOptions, diagnostics, validationConfig);\n\n for (const theme of parsed.data.themes) {\n try {\n const resolvedTheme = applyThemeMode(resolvedBase, theme);\n const themeDiagnostics: Diagnostic[] = [];\n validateResolvedTokenSet(resolvedTheme, mergedOptions, themeDiagnostics, validationConfig);\n diagnostics.push(...prefixThemeDiagnostics(theme, themeDiagnostics));\n } catch (error) {\n diagnostics.push(\n createDiagnostic(\n 'theme.invalid-override',\n 'error',\n `themes.${theme.name}`,\n error instanceof Error ? error.message : String(error),\n ),\n );\n }\n\n // Theme dark-mode completeness: if a theme modifies color.light.*, it should also modify color.dark.*\n const lightTokenPaths = Object.keys(theme.tokens).filter((path) =>\n path.startsWith('color.light.'),\n );\n if (lightTokenPaths.length > 0) {\n const darkTokenPaths = new Set(\n Object.keys(theme.tokens).filter((path) => path.startsWith('color.dark.')),\n );\n for (const lightPath of lightTokenPaths) {\n const correspondingDark = lightPath.replace('color.light.', 'color.dark.');\n if (!darkTokenPaths.has(correspondingDark)) {\n diagnostics.push(\n createDiagnostic(\n 'theme.dark-mode-completeness',\n 'warning',\n `themes.${theme.name}`,\n `Theme \"${theme.name}\" overrides \"${lightPath}\" but does not override the corresponding dark token \"${correspondingDark}\".`,\n ),\n );\n }\n }\n }\n }\n\n // -- Mode validation --\n for (const [modeName, mode] of Object.entries(parsed.data.modes)) {\n try {\n const resolvedMode = applyModeOverride(resolvedBase, mode);\n const modeDiagnostics: Diagnostic[] = [];\n validateResolvedTokenSet(resolvedMode, mergedOptions, modeDiagnostics, validationConfig);\n diagnostics.push(...prefixModeDiagnostics(mode, modeDiagnostics));\n\n // Warn if mode sets line-height below minimum body threshold\n const bodyLhOverride = mode.tokens['typography.body.lineHeight'];\n if (bodyLhOverride !== undefined) {\n const numericLh = typeof bodyLhOverride === 'number' ? bodyLhOverride : null;\n if (numericLh !== null && numericLh < mergedOptions.minBodyLineHeight) {\n diagnostics.push(\n createDiagnostic(\n `mode.${modeName}.line-height-below-body-min`,\n 'warning',\n `modes.${modeName}.typography.body.lineHeight`,\n `Mode \"${modeName}\" overrides body line-height to ${numericLh}, which is below the minimum threshold of ${mergedOptions.minBodyLineHeight}.`,\n `>= ${mergedOptions.minBodyLineHeight}`,\n `${numericLh}`,\n ),\n );\n }\n }\n\n // Warn if mode changes fontFamily to a single string without fallbacks\n for (const [tokenPath, tokenValue] of Object.entries(mode.tokens)) {\n if (tokenPath.endsWith('.fontFamily')) {\n const isBareString = typeof tokenValue === 'string';\n const isSingleArray = Array.isArray(tokenValue) && tokenValue.length === 1;\n if (isBareString || isSingleArray) {\n diagnostics.push(\n createDiagnostic(\n `mode.${modeName}.font-family-no-fallback`,\n 'warning',\n `modes.${modeName}.${tokenPath}`,\n `Mode \"${modeName}\" sets \"${tokenPath}\" without fallback fonts. Consider adding at least one generic fallback.`,\n ),\n );\n }\n }\n }\n } catch (error) {\n diagnostics.push(\n createDiagnostic(\n 'mode.invalid-override',\n 'error',\n `modes.${modeName}`,\n error instanceof Error ? error.message : String(error),\n ),\n );\n }\n }\n\n const references = mergedOptions.referenceSystems.length\n ? appendReferenceDiagnostics(resolvedBase, mergedOptions.referenceSystems, diagnostics)\n : [];\n\n return createReport(diagnostics, references);\n}\n\nexport function generateCssVariables(tokenSet: DesignTokenSet, options: BuildOptions = {}): string {\n const prefix = options.prefix ?? DEFAULT_OPTIONS.prefix;\n const resolvedBase = resolveDesignTokenSet(tokenSet);\n const rootLines = [':root {'];\n\n pushTypographyVariables(rootLines, resolvedBase, prefix);\n pushColorVariables(rootLines, resolvedBase, prefix, 'light');\n pushSpacingVariables(rootLines, resolvedBase, prefix);\n pushLayoutVariables(rootLines, resolvedBase, prefix);\n pushHierarchyVariables(rootLines, resolvedBase, prefix);\n rootLines.push('}');\n\n const darkLines = ['[data-theme=\"dark\"] {'];\n pushColorVariables(darkLines, resolvedBase, prefix, 'dark');\n darkLines.push('}');\n\n const themeBlocks: string[] = [];\n for (const theme of tokenSet.themes) {\n const themedTokenSet = applyThemeMode(resolvedBase, theme);\n const selector = theme.selector ?? `[data-theme=\"${theme.name}\"]`;\n const lines = [`${selector} {`];\n pushTypographyVariables(lines, themedTokenSet, prefix);\n pushColorVariables(lines, themedTokenSet, prefix, 'light');\n pushColorVariables(lines, themedTokenSet, prefix, 'dark');\n pushSpacingVariables(lines, themedTokenSet, prefix);\n pushLayoutVariables(lines, themedTokenSet, prefix);\n pushHierarchyVariables(lines, themedTokenSet, prefix);\n lines.push('}');\n themeBlocks.push(...lines, '');\n }\n\n const modeBlocks: string[] = [];\n for (const [modeName, mode] of Object.entries(tokenSet.modes)) {\n const modedTokenSet = applyModeOverride(resolvedBase, mode);\n const selector = `[data-mode=\"${modeName}\"]`;\n const lines = [`${selector} {`];\n\n // Only emit variables that the mode actually overrides\n for (const [tokenPath] of Object.entries(mode.tokens)) {\n const pathParts = tokenPath.split('.');\n const resolvedValue = getValueAtPath(modedTokenSet, pathParts);\n const varName = cssVariableFromTokenPath(prefix, pathParts);\n if (Array.isArray(resolvedValue)) {\n lines.push(` ${varName}: ${resolvedValue.join(', ')};`);\n } else if (resolvedValue !== undefined) {\n lines.push(` ${varName}: ${resolvedValue};`);\n }\n }\n\n lines.push('}');\n modeBlocks.push(...lines, '');\n }\n\n return [...rootLines, '', ...darkLines, '', ...themeBlocks, ...modeBlocks].join('\\n');\n}\n\nexport function buildTokenArtifacts(\n input: unknown,\n options: BuildOptions = {},\n validationConfig?: ValidationConfig,\n): BuildArtifacts {\n const authoredTokenSet = parseDesignTokenSet(input);\n const tokenSet = resolveDesignTokenSet(authoredTokenSet);\n const report = validateDesignTokenSet(authoredTokenSet, options, validationConfig);\n tokenSet.themes = authoredTokenSet.themes;\n tokenSet.modes = authoredTokenSet.modes;\n\n return {\n tokenSet,\n report,\n css: generateCssVariables(authoredTokenSet, options),\n json: JSON.stringify(tokenSet, null, 2),\n };\n}\n\nconst SYSTEM_FONT_FAMILY_SET = new Set(\n Object.values(SYSTEM_FONT_STACKS).flat().map((f) => f.toLowerCase()),\n);\n\nexport function validateFonts(tokenSet: DesignTokenSet, config?: ValidationConfig): Diagnostic[] {\n const diagnostics: Diagnostic[] = [];\n const seenFamilies = new Map<string, number>();\n\n // Collect all fontFamily values from typography contexts and headings\n const fontFamilySources: { path: string; fontFamily: string | string[] }[] = [];\n\n for (const [context, token] of Object.entries(tokenSet.typography)) {\n fontFamilySources.push({\n path: `typography.${context}.fontFamily`,\n fontFamily: token.fontFamily,\n });\n }\n\n for (const [level, token] of Object.entries(tokenSet.hierarchy.headings)) {\n if (token.fontFamily) {\n fontFamilySources.push({\n path: `hierarchy.headings.${level}.fontFamily`,\n fontFamily: token.fontFamily,\n });\n }\n }\n\n for (const { path, fontFamily } of fontFamilySources) {\n const families = Array.isArray(fontFamily) ? fontFamily : [fontFamily];\n\n // Skip token references — they'll be resolved elsewhere\n if (families.length === 1 && families[0] && TOKEN_REFERENCE_PATTERN.test(families[0])) {\n continue;\n }\n\n // Missing fallbacks check\n if (families.length <= 1) {\n diagnostics.push(\n createDiagnostic(\n 'font.missing-fallbacks',\n 'warning',\n path,\n 'Font family has no fallback fonts. Add at least one generic fallback (e.g., sans-serif, serif).',\n ),\n );\n }\n\n // Track the primary family for payload estimation\n const primary = families[0];\n if (primary && !TOKEN_REFERENCE_PATTERN.test(primary)) {\n const key = primary.toLowerCase().replace(/^[\"']|[\"']$/g, '');\n if (!seenFamilies.has(key)) {\n const entry = lookupFont(key);\n if (entry) {\n seenFamilies.set(key, entry.sizeKb);\n } else if (!SYSTEM_FONT_FAMILY_SET.has(key)) {\n // Font availability check\n diagnostics.push(\n createDiagnostic(\n 'font.unknown-family',\n 'info',\n path,\n `Font \"${primary}\" is not found in the Google Fonts catalog or system font stacks.`,\n ),\n );\n seenFamilies.set(key, 0);\n } else {\n seenFamilies.set(key, 0);\n }\n }\n }\n }\n\n // Payload estimate check\n const totalPayloadKb = [...seenFamilies.values()].reduce((sum, kb) => sum + kb, 0);\n if (totalPayloadKb > 150) {\n diagnostics.push(\n createDiagnostic(\n 'font.payload-estimate',\n 'warning',\n 'typography',\n `Estimated total font payload (~${totalPayloadKb}KB) exceeds the recommended 150KB budget.`,\n '<= 150KB',\n `~${totalPayloadKb}KB`,\n ),\n );\n }\n\n // -- F061: Font weight consistency validation --\n for (const { path, fontFamily } of fontFamilySources) {\n const families = Array.isArray(fontFamily) ? fontFamily : [fontFamily];\n const primary = families[0];\n if (!primary || TOKEN_REFERENCE_PATTERN.test(primary)) continue;\n\n const key = primary.toLowerCase().replace(/^[\"']|[\"']$/g, '');\n const registryEntry = resolveFont(key);\n if (!registryEntry) continue;\n\n // Find the fontWeight for this token\n const pathParts = path.split('.');\n let fontWeight: number | string | undefined;\n if (pathParts[0] === 'typography') {\n const ctx = pathParts[1] as string;\n fontWeight = tokenSet.typography[ctx as keyof typeof tokenSet.typography]?.fontWeight;\n } else if (pathParts[0] === 'hierarchy' && pathParts[1] === 'headings') {\n const level = pathParts[2] as keyof typeof tokenSet.hierarchy.headings;\n fontWeight = tokenSet.hierarchy.headings[level]?.fontWeight;\n }\n\n if (fontWeight !== undefined) {\n const numWeight = typeof fontWeight === 'string' ? parseInt(fontWeight, 10) : fontWeight;\n if (!isNaN(numWeight) && registryEntry.weights.length > 0 && !registryEntry.weights.includes(numWeight)) {\n // For variable fonts, check the wght axis range instead\n const wghtAxis = registryEntry.axes.find(a => a.tag === 'wght');\n if (wghtAxis) {\n if (numWeight < wghtAxis.min || numWeight > wghtAxis.max) {\n diagnostics.push(\n createDiagnostic(\n 'font.weight-available',\n 'warning',\n path.replace('.fontFamily', '.fontWeight'),\n `Font \"${registryEntry.family}\" variable weight axis range is ${wghtAxis.min}-${wghtAxis.max}, but weight ${numWeight} is used.`,\n `${wghtAxis.min}-${wghtAxis.max}`,\n `${numWeight}`,\n ),\n );\n }\n } else {\n diagnostics.push(\n createDiagnostic(\n 'font.weight-available',\n 'warning',\n path.replace('.fontFamily', '.fontWeight'),\n `Font \"${registryEntry.family}\" does not offer weight ${numWeight}. Available: ${registryEntry.weights.join(', ')}.`,\n registryEntry.weights.join(', '),\n `${numWeight}`,\n ),\n );\n }\n }\n }\n }\n\n // -- F062: Variable font axis validation --\n for (const { path, fontFamily } of fontFamilySources) {\n const families = Array.isArray(fontFamily) ? fontFamily : [fontFamily];\n const primary = families[0];\n if (!primary || TOKEN_REFERENCE_PATTERN.test(primary)) continue;\n\n const key = primary.toLowerCase().replace(/^[\"']|[\"']$/g, '');\n const registryEntry = resolveFont(key);\n if (!registryEntry || !registryEntry.variable || registryEntry.axes.length === 0) continue;\n\n // Check optical sizing axis\n if (registryEntry.hasOpticalSizing) {\n const opszAxis = registryEntry.axes.find(a => a.tag === 'opsz');\n if (opszAxis) {\n const pathParts = path.split('.');\n let fontSize: string | undefined;\n if (pathParts[0] === 'typography') {\n const ctx = pathParts[1] as string;\n fontSize = tokenSet.typography[ctx as keyof typeof tokenSet.typography]?.fontSize;\n } else if (pathParts[0] === 'hierarchy' && pathParts[1] === 'headings') {\n const level = pathParts[2] as keyof typeof tokenSet.hierarchy.headings;\n fontSize = tokenSet.hierarchy.headings[level]?.fontSize;\n }\n if (fontSize) {\n const px = toPx(fontSize);\n if (px !== null && (px < opszAxis.min || px > opszAxis.max)) {\n diagnostics.push(\n createDiagnostic(\n 'font.axis-range',\n 'info',\n path.replace('.fontFamily', '.fontSize'),\n `Font \"${registryEntry.family}\" optical size axis range is ${opszAxis.min}-${opszAxis.max}pt. Font size ${px}px is outside this range.`,\n `${opszAxis.min}-${opszAxis.max}`,\n `${px}`,\n ),\n );\n }\n }\n }\n }\n }\n\n // -- F063: Subset coverage validation --\n if (tokenSet.requiredSubsets && tokenSet.requiredSubsets.length > 0) {\n const checkedFamilies = new Set<string>();\n for (const { path, fontFamily } of fontFamilySources) {\n const families = Array.isArray(fontFamily) ? fontFamily : [fontFamily];\n const primary = families[0];\n if (!primary || TOKEN_REFERENCE_PATTERN.test(primary)) continue;\n\n const key = primary.toLowerCase().replace(/^[\"']|[\"']$/g, '');\n if (checkedFamilies.has(key)) continue;\n checkedFamilies.add(key);\n\n const registryEntry = resolveFont(key);\n if (!registryEntry) continue;\n\n const missingSubsets = tokenSet.requiredSubsets.filter(\n sub => !registryEntry.subsets.includes(sub),\n );\n if (missingSubsets.length > 0) {\n diagnostics.push(\n createDiagnostic(\n 'font.subset-coverage',\n 'warning',\n path,\n `Font \"${registryEntry.family}\" is missing required subsets: ${missingSubsets.join(', ')}.`,\n tokenSet.requiredSubsets.join(', '),\n registryEntry.subsets.join(', '),\n ),\n );\n }\n }\n }\n\n // -- F064: Font loading strategy validation --\n if (tokenSet.fontDisplay === 'auto') {\n diagnostics.push(\n createDiagnostic(\n 'font.display-strategy',\n 'warning',\n 'fontDisplay',\n 'font-display is set to \"auto\". Consider \"swap\" for text visibility or \"optional\" for performance.',\n '\"swap\" or \"optional\"',\n '\"auto\"',\n ),\n );\n }\n\n let fontFaceCount = 0;\n for (const [, entry] of seenFamilies) {\n if (entry > 0) fontFaceCount++;\n }\n if (fontFaceCount > 4) {\n diagnostics.push(\n createDiagnostic(\n 'font.preload-count',\n 'warning',\n 'typography',\n `${fontFaceCount} web fonts are loaded. Consider reducing to 4 or fewer, or using preload hints for critical fonts.`,\n '<= 4 web fonts',\n `${fontFaceCount}`,\n ),\n );\n }\n\n // -- F076: Font allowlist --\n if (config?.fonts?.allow && config.fonts.allow.length > 0) {\n const allowSet = new Set(config.fonts.allow.map((f) => f.toLowerCase()));\n const allowlistSeverity = getRuleSeverity('policy.font-allowlist', config);\n if (allowlistSeverity !== false) {\n const severity = (typeof allowlistSeverity === 'string' ? allowlistSeverity : 'error') as Diagnostic['severity'];\n for (const { path, fontFamily } of fontFamilySources) {\n const families = Array.isArray(fontFamily) ? fontFamily : [fontFamily];\n // Skip token references\n if (families.length === 1 && families[0] && TOKEN_REFERENCE_PATTERN.test(families[0])) {\n continue;\n }\n const primary = families[0];\n if (!primary || TOKEN_REFERENCE_PATTERN.test(primary)) continue;\n const key = primary.toLowerCase().replace(/^[\"']|[\"']$/g, '');\n // Allow if in the allowlist or it's a known system font\n if (!allowSet.has(key) && !SYSTEM_FONT_FAMILY_SET.has(key)) {\n diagnostics.push(\n createDiagnostic(\n 'policy.font-allowlist',\n severity,\n path,\n `Font \"${primary}\" is not in the project font allowlist.`,\n config.fonts.allow.join(', '),\n primary,\n ),\n );\n }\n }\n }\n }\n\n // -- F076: Font blocklist --\n if (config?.fonts?.block && config.fonts.block.length > 0) {\n const blocklistSeverity = getRuleSeverity('policy.font-blocklist', config);\n if (blocklistSeverity !== false) {\n const severity = (typeof blocklistSeverity === 'string' ? blocklistSeverity : 'error') as Diagnostic['severity'];\n // Normalize blocklist entries to { family: string; reason?: string }\n const blockEntries = config.fonts.block.map((entry) =>\n typeof entry === 'string'\n ? { family: entry, reason: undefined }\n : { family: entry.family, reason: entry.reason },\n );\n const blockMap = new Map(\n blockEntries.map((e) => [e.family.toLowerCase(), e.reason]),\n );\n for (const { path, fontFamily } of fontFamilySources) {\n const families = Array.isArray(fontFamily) ? fontFamily : [fontFamily];\n if (families.length === 1 && families[0] && TOKEN_REFERENCE_PATTERN.test(families[0])) {\n continue;\n }\n const primary = families[0];\n if (!primary || TOKEN_REFERENCE_PATTERN.test(primary)) continue;\n const key = primary.toLowerCase().replace(/^[\"']|[\"']$/g, '');\n if (blockMap.has(key)) {\n const reason = blockMap.get(key);\n const reasonSuffix = reason ? ` Reason: ${reason}` : '';\n diagnostics.push(\n createDiagnostic(\n 'policy.font-blocklist',\n severity,\n path,\n `Font \"${primary}\" is on the project blocklist.${reasonSuffix}`,\n undefined,\n primary,\n ),\n );\n }\n }\n }\n }\n\n return diagnostics;\n}\n\nexport { DEFAULT_TOKEN_SET, getPreset, PRESET_NAMES, PRESETS };\nexport { computeHeadingSizes, generateHeadings, SCALE_RATIOS } from './scale.js';\nexport { generateTailwindConfig } from './exporters/tailwind.js';\nexport { generateShadcnCss } from './exporters/shadcn.js';\nexport { generateHtmlReport } from './report.js';\nexport {\n evaluateTypographyReferences,\n findBestTypographyReferences,\n getAllTypographySystemIds,\n getTypographySystemById,\n queryTypographySystems,\n TYPOGRAPHY_PATTERNS,\n TYPOGRAPHY_SYSTEMS,\n} from './systems.js';\nexport { importW3cTokens, exportW3cTokens } from './w3c.js';\nexport {\n computeFallbackOverrides,\n computeFallbackTargets,\n generateFallbackCSS,\n requiresPlatformSplit,\n SYSTEM_FALLBACK_METRICS,\n type CSSOverrides,\n type FallbackCSSOptions,\n} from './fallback.js';\nexport {\n prepareFont,\n generateFontFaceCSS,\n generatePreloadTags,\n type PrepareOptions,\n type PrepareManifest,\n} from './prepare.js';\nexport {\n auditDirectory,\n generateCorrectedTokens,\n formatAuditReport,\n formatAuditMigrationGuide,\n type AuditIssue,\n type AuditResult,\n type DetectedFont,\n} from './audit.js';\nexport { auditUrl } from './audit-url.js';\nexport { formatSarifReport, type SarifLog } from './sarif.js';\nexport { detectDrift, type DriftReport, type DriftChange, type DriftChangeKind } from './drift.js';\nexport { resolveConfig } from './config-resolver.js';\nexport { resolveProfile, BUILT_IN_PROFILES } from './profiles.js';\nexport { generateTokenSet, type GenerateOptions, type GenerateResult } from './generate.js';\n","import { DesignTokenSetSchema, type DesignTokenSet } from '@fetchtype/types';\n\nimport baseTokenSet from './base.tokens.json' with { type: 'json' };\nimport carbonTokenSet from './carbon.tokens.json' with { type: 'json' };\nimport dashboardTokenSet from './dashboard.tokens.json' with { type: 'json' };\nimport docsTokenSet from './docs.tokens.json' with { type: 'json' };\nimport ecommerceTokenSet from './ecommerce.tokens.json' with { type: 'json' };\nimport editorialTokenSet from './editorial.tokens.json' with { type: 'json' };\nimport fluentTokenSet from './fluent.tokens.json' with { type: 'json' };\nimport materialTokenSet from './material.tokens.json' with { type: 'json' };\nimport radixTokenSet from './radix.tokens.json' with { type: 'json' };\nimport spectrumTokenSet from './spectrum.tokens.json' with { type: 'json' };\n\nexport const DEFAULT_TOKEN_SET: DesignTokenSet = DesignTokenSetSchema.parse(baseTokenSet);\n\nexport const PRESETS: Record<string, DesignTokenSet> = {\n base: DesignTokenSetSchema.parse(baseTokenSet),\n editorial: DesignTokenSetSchema.parse(editorialTokenSet),\n dashboard: DesignTokenSetSchema.parse(dashboardTokenSet),\n ecommerce: DesignTokenSetSchema.parse(ecommerceTokenSet),\n docs: DesignTokenSetSchema.parse(docsTokenSet),\n fluent: DesignTokenSetSchema.parse(fluentTokenSet),\n material: DesignTokenSetSchema.parse(materialTokenSet),\n carbon: DesignTokenSetSchema.parse(carbonTokenSet),\n spectrum: DesignTokenSetSchema.parse(spectrumTokenSet),\n radix: DesignTokenSetSchema.parse(radixTokenSet),\n};\n\nexport const PRESET_NAMES: string[] = Object.keys(PRESETS);\n\nexport function getPreset(name: string): DesignTokenSet | undefined {\n return PRESETS[name];\n}\n","{\n \"typography\": {\n \"heading\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"3rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.1,\n \"letterSpacing\": \"-0.02em\"\n },\n \"subheading\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"2rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2,\n \"letterSpacing\": \"-0.01em\"\n },\n \"body\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.6\n },\n \"caption\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.4\n },\n \"button\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.9375rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2,\n \"letterSpacing\": \"0.01em\",\n \"textTransform\": \"none\"\n },\n \"label\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.3\n },\n \"input\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.4\n },\n \"chart-label\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.8125rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.3\n },\n \"chart-axis\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.75rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.3\n },\n \"chart-title\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.125rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2\n },\n \"code\": {\n \"fontFamily\": [\"JetBrains Mono\", \"ui-monospace\", \"monospace\"],\n \"fontSize\": \"0.9375rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.5\n },\n \"blockquote\": {\n \"fontFamily\": [\"Source Serif 4\", \"Georgia\", \"serif\"],\n \"fontSize\": \"1.125rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.7,\n \"letterSpacing\": \"0em\"\n }\n },\n \"color\": {\n \"light\": {\n \"text\": {\n \"primary\": { \"value\": \"#111827\" },\n \"secondary\": { \"value\": \"#374151\" },\n \"muted\": { \"value\": \"#6b7280\" },\n \"accent\": { \"value\": \"{color.light.interactive.default.value}\" },\n \"inverse\": { \"value\": \"#f9fafb\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#ffffff\" },\n \"secondary\": { \"value\": \"#f8fafc\" },\n \"accent\": { \"value\": \"#dbeafe\" },\n \"muted\": { \"value\": \"#e5e7eb\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#d1d5db\" },\n \"muted\": { \"value\": \"#e5e7eb\" },\n \"accent\": { \"value\": \"#60a5fa\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#2563eb\" },\n \"hover\": { \"value\": \"#1d4ed8\" },\n \"active\": { \"value\": \"#1e40af\" },\n \"focus\": { \"value\": \"#2563eb\" },\n \"disabled\": { \"value\": \"#94a3b8\" }\n }\n },\n \"dark\": {\n \"text\": {\n \"primary\": { \"value\": \"#f9fafb\" },\n \"secondary\": { \"value\": \"#d1d5db\" },\n \"muted\": { \"value\": \"#9ca3af\" },\n \"accent\": { \"value\": \"{color.dark.interactive.default.value}\" },\n \"inverse\": { \"value\": \"#111827\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#0f172a\" },\n \"secondary\": { \"value\": \"#111827\" },\n \"accent\": { \"value\": \"#1e3a8a\" },\n \"muted\": { \"value\": \"#1f2937\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#334155\" },\n \"muted\": { \"value\": \"#1f2937\" },\n \"accent\": { \"value\": \"#3b82f6\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#60a5fa\" },\n \"hover\": { \"value\": \"#93c5fd\" },\n \"active\": { \"value\": \"#bfdbfe\" },\n \"focus\": { \"value\": \"#60a5fa\" },\n \"disabled\": { \"value\": \"#475569\" }\n }\n }\n },\n \"spacing\": {\n \"unit\": \"0.25rem\",\n \"scale\": {\n \"xs\": \"0.25rem\",\n \"sm\": \"0.5rem\",\n \"md\": \"0.75rem\",\n \"lg\": \"1rem\",\n \"xl\": \"1.5rem\",\n \"2xl\": \"2rem\",\n \"3xl\": \"3rem\"\n }\n },\n \"layout\": {\n \"maxWidth\": {\n \"prose\": \"68ch\",\n \"content\": \"72rem\",\n \"wide\": \"90rem\",\n \"full\": \"100%\"\n },\n \"breakpoints\": {\n \"sm\": \"40rem\",\n \"md\": \"48rem\",\n \"lg\": \"64rem\",\n \"xl\": \"80rem\"\n },\n \"grid\": {\n \"columns\": 12,\n \"gap\": \"1.5rem\"\n }\n },\n \"hierarchy\": {\n \"scale\": \"major-third\",\n \"baseSize\": \"1rem\",\n \"headings\": {\n \"h1\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"3.052rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.05,\n \"letterSpacing\": \"-0.03em\"\n },\n \"h2\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"2.441rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.08,\n \"letterSpacing\": \"-0.02em\"\n },\n \"h3\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.953rem\",\n \"fontWeight\": 650,\n \"lineHeight\": 1.12\n },\n \"h4\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.563rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2\n },\n \"h5\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.25rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.3\n },\n \"h6\": {\n \"fontFamily\": \"{typography.body.fontFamily}\",\n \"fontSize\": \"1rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.4\n }\n },\n \"emphasis\": {\n \"strong\": { \"fontWeight\": 650 },\n \"subtle\": { \"opacity\": 0.78, \"fontSize\": \"0.9375rem\" }\n }\n },\n \"modes\": {\n \"display\": {\n \"name\": \"display\",\n \"description\": \"Large-scale typography for hero sections and marketing\",\n \"tokens\": {\n \"typography.heading.fontFamily\": [\"Iowan Old Style\", \"Baskerville\", \"Georgia\", \"serif\"],\n \"typography.heading.lineHeight\": 0.95,\n \"typography.heading.letterSpacing\": \"-0.04em\",\n \"hierarchy.headings.h1.lineHeight\": 0.95,\n \"hierarchy.headings.h1.letterSpacing\": \"-0.04em\",\n \"hierarchy.headings.h2.lineHeight\": 0.98,\n \"hierarchy.headings.h2.letterSpacing\": \"-0.03em\"\n }\n },\n \"interface\": {\n \"name\": \"interface\",\n \"description\": \"Compact typography for application UI\",\n \"tokens\": {\n \"typography.heading.fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"typography.heading.lineHeight\": 1.1,\n \"typography.heading.letterSpacing\": \"-0.02em\",\n \"typography.body.lineHeight\": 1.5,\n \"spacing.scale.xl\": \"1.25rem\",\n \"spacing.scale.2xl\": \"1.5rem\"\n }\n },\n \"reading\": {\n \"name\": \"reading\",\n \"description\": \"Optimized for long-form reading\",\n \"tokens\": {\n \"typography.body.fontFamily\": [\"Source Serif 4\", \"Georgia\", \"serif\"],\n \"typography.body.lineHeight\": 1.8,\n \"typography.body.fontSize\": \"1.125rem\",\n \"layout.maxWidth.prose\": \"62ch\"\n }\n },\n \"mono\": {\n \"name\": \"mono\",\n \"description\": \"Monospace-first for code and technical content\",\n \"tokens\": {\n \"typography.body.fontFamily\": [\"JetBrains Mono\", \"ui-monospace\", \"monospace\"],\n \"typography.body.fontSize\": \"0.9375rem\",\n \"typography.body.lineHeight\": 1.6,\n \"typography.heading.fontFamily\": [\"JetBrains Mono\", \"ui-monospace\", \"monospace\"]\n }\n }\n },\n \"themes\": [\n {\n \"name\": \"brand-ocean\",\n \"colorScheme\": \"brand\",\n \"tokens\": {\n \"color.light.interactive.default.value\": \"#0f766e\",\n \"color.light.interactive.hover.value\": \"#115e59\",\n \"color.light.interactive.active.value\": \"#134e4a\",\n \"color.light.text.accent.value\": \"{color.light.interactive.default.value}\",\n \"color.light.background.accent.value\": \"#ccfbf1\",\n \"color.dark.interactive.default.value\": \"#2dd4bf\",\n \"color.dark.interactive.hover.value\": \"#5eead4\",\n \"color.dark.text.accent.value\": \"{color.dark.interactive.default.value}\"\n }\n },\n {\n \"name\": \"high-contrast-dark\",\n \"colorScheme\": \"high-contrast\",\n \"tokens\": {\n \"color.dark.text.primary.value\": \"#ffffff\",\n \"color.dark.text.secondary.value\": \"#ffffff\",\n \"color.dark.background.primary.value\": \"#000000\",\n \"color.dark.background.secondary.value\": \"#000000\",\n \"color.dark.border.default.value\": \"#ffffff\",\n \"layout.maxWidth.prose\": \"62ch\"\n }\n }\n ]\n}\n","{\n \"typography\": {\n \"heading\": {\n \"fontFamily\": [\"IBM Plex Sans\", \"Helvetica Neue\", \"Arial\", \"sans-serif\"],\n \"fontSize\": \"2.625rem\",\n \"fontWeight\": 300,\n \"lineHeight\": 1.19\n },\n \"subheading\": {\n \"fontFamily\": [\"IBM Plex Sans\", \"Helvetica Neue\", \"Arial\", \"sans-serif\"],\n \"fontSize\": \"1.75rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.29\n },\n \"body\": {\n \"fontFamily\": [\"IBM Plex Sans\", \"Helvetica Neue\", \"Arial\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.43,\n \"letterSpacing\": \"0.01em\"\n },\n \"caption\": {\n \"fontFamily\": [\"IBM Plex Sans\", \"Helvetica Neue\", \"Arial\", \"sans-serif\"],\n \"fontSize\": \"0.75rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.33,\n \"letterSpacing\": \"0.02em\"\n },\n \"button\": {\n \"fontFamily\": [\"IBM Plex Sans\", \"Helvetica Neue\", \"Arial\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.29,\n \"letterSpacing\": \"0.01em\",\n \"textTransform\": \"none\"\n },\n \"label\": {\n \"fontFamily\": [\"IBM Plex Sans\", \"Helvetica Neue\", \"Arial\", \"sans-serif\"],\n \"fontSize\": \"0.75rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.33,\n \"letterSpacing\": \"0.02em\"\n },\n \"input\": {\n \"fontFamily\": [\"IBM Plex Sans\", \"Helvetica Neue\", \"Arial\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.43\n },\n \"code\": {\n \"fontFamily\": [\"IBM Plex Mono\", \"ui-monospace\", \"monospace\"],\n \"fontSize\": \"0.8125rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.54\n }\n },\n \"color\": {\n \"light\": {\n \"text\": {\n \"primary\": { \"value\": \"#161616\" },\n \"secondary\": { \"value\": \"#525252\" },\n \"muted\": { \"value\": \"#8d8d8d\" },\n \"accent\": { \"value\": \"{color.light.interactive.default.value}\" },\n \"inverse\": { \"value\": \"#ffffff\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#ffffff\" },\n \"secondary\": { \"value\": \"#f4f4f4\" },\n \"accent\": { \"value\": \"#d0e2ff\" },\n \"muted\": { \"value\": \"#e0e0e0\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#c6c6c6\" },\n \"muted\": { \"value\": \"#e0e0e0\" },\n \"accent\": { \"value\": \"#0f62fe\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#0f62fe\" },\n \"hover\": { \"value\": \"#0043ce\" },\n \"active\": { \"value\": \"#002d9c\" },\n \"focus\": { \"value\": \"#0f62fe\" },\n \"disabled\": { \"value\": \"#c6c6c6\" }\n }\n },\n \"dark\": {\n \"text\": {\n \"primary\": { \"value\": \"#f4f4f4\" },\n \"secondary\": { \"value\": \"#c6c6c6\" },\n \"muted\": { \"value\": \"#6f6f6f\" },\n \"accent\": { \"value\": \"{color.dark.interactive.default.value}\" },\n \"inverse\": { \"value\": \"#161616\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#262626\" },\n \"secondary\": { \"value\": \"#161616\" },\n \"accent\": { \"value\": \"#002d9c\" },\n \"muted\": { \"value\": \"#393939\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#525252\" },\n \"muted\": { \"value\": \"#393939\" },\n \"accent\": { \"value\": \"#4589ff\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#4589ff\" },\n \"hover\": { \"value\": \"#78a9ff\" },\n \"active\": { \"value\": \"#a6c8ff\" },\n \"focus\": { \"value\": \"#4589ff\" },\n \"disabled\": { \"value\": \"#525252\" }\n }\n }\n },\n \"spacing\": {\n \"unit\": \"0.125rem\",\n \"scale\": {\n \"xs\": \"0.125rem\",\n \"sm\": \"0.25rem\",\n \"md\": \"0.5rem\",\n \"lg\": \"1rem\",\n \"xl\": \"1.5rem\",\n \"2xl\": \"2rem\",\n \"3xl\": \"3rem\"\n }\n },\n \"layout\": {\n \"maxWidth\": {\n \"prose\": \"68ch\",\n \"content\": \"66rem\",\n \"wide\": \"99rem\",\n \"full\": \"100%\"\n },\n \"breakpoints\": {\n \"sm\": \"20rem\",\n \"md\": \"42rem\",\n \"lg\": \"66rem\",\n \"xl\": \"82rem\"\n },\n \"grid\": {\n \"columns\": 16,\n \"gap\": \"1rem\"\n }\n },\n \"hierarchy\": {\n \"scale\": \"perfect-fourth\",\n \"baseSize\": \"0.875rem\",\n \"headings\": {\n \"h1\": {\n \"fontFamily\": [\"IBM Plex Sans\", \"Helvetica Neue\", \"Arial\", \"sans-serif\"],\n \"fontSize\": \"3.375rem\",\n \"fontWeight\": 300,\n \"lineHeight\": 1.07\n },\n \"h2\": {\n \"fontFamily\": [\"IBM Plex Sans\", \"Helvetica Neue\", \"Arial\", \"sans-serif\"],\n \"fontSize\": \"2.625rem\",\n \"fontWeight\": 300,\n \"lineHeight\": 1.19\n },\n \"h3\": {\n \"fontFamily\": [\"IBM Plex Sans\", \"Helvetica Neue\", \"Arial\", \"sans-serif\"],\n \"fontSize\": \"2rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.25\n },\n \"h4\": {\n \"fontFamily\": [\"IBM Plex Sans\", \"Helvetica Neue\", \"Arial\", \"sans-serif\"],\n \"fontSize\": \"1.75rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.29\n },\n \"h5\": {\n \"fontFamily\": [\"IBM Plex Sans\", \"Helvetica Neue\", \"Arial\", \"sans-serif\"],\n \"fontSize\": \"1.25rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.4\n },\n \"h6\": {\n \"fontFamily\": [\"IBM Plex Sans\", \"Helvetica Neue\", \"Arial\", \"sans-serif\"],\n \"fontSize\": \"1rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.5\n }\n },\n \"emphasis\": {\n \"strong\": { \"fontWeight\": 600 },\n \"subtle\": { \"opacity\": 0.7, \"fontSize\": \"0.8125rem\" }\n }\n },\n \"modes\": {\n \"display\": {\n \"name\": \"display\",\n \"description\": \"Carbon expressive display typography\",\n \"tokens\": {\n \"typography.heading.fontSize\": \"3.375rem\",\n \"typography.heading.fontWeight\": 300,\n \"typography.heading.lineHeight\": 1.07\n }\n },\n \"interface\": {\n \"name\": \"interface\",\n \"description\": \"Carbon productive compact typography\",\n \"tokens\": {\n \"typography.body.fontSize\": \"0.875rem\",\n \"typography.body.lineHeight\": 1.29,\n \"spacing.scale.xl\": \"1rem\"\n }\n }\n },\n \"themes\": [\n {\n \"name\": \"carbon-g100\",\n \"colorScheme\": \"brand\",\n \"tokens\": {\n \"color.dark.background.primary.value\": \"#161616\",\n \"color.dark.background.secondary.value\": \"#262626\",\n \"color.dark.text.primary.value\": \"#f4f4f4\",\n \"color.dark.border.default.value\": \"#6f6f6f\"\n }\n }\n ]\n}\n","{\n \"typography\": {\n \"heading\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.5rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.1,\n \"letterSpacing\": \"-0.01em\"\n },\n \"subheading\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.125rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2\n },\n \"body\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.5\n },\n \"caption\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.75rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.4\n },\n \"button\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2,\n \"textTransform\": \"none\"\n },\n \"label\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.75rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.3\n },\n \"input\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.4\n },\n \"chart-label\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.6875rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.3\n },\n \"chart-axis\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.625rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.3\n },\n \"chart-title\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2\n },\n \"code\": {\n \"fontFamily\": [\"JetBrains Mono\", \"ui-monospace\", \"monospace\"],\n \"fontSize\": \"0.8125rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.4\n },\n \"blockquote\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.9375rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.5\n }\n },\n \"color\": {\n \"light\": {\n \"text\": {\n \"primary\": { \"value\": \"#111827\" },\n \"secondary\": { \"value\": \"#374151\" },\n \"muted\": { \"value\": \"#6b7280\" },\n \"accent\": { \"value\": \"#2563eb\" },\n \"inverse\": { \"value\": \"#f9fafb\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#ffffff\" },\n \"secondary\": { \"value\": \"#f8fafc\" },\n \"accent\": { \"value\": \"#dbeafe\" },\n \"muted\": { \"value\": \"#e5e7eb\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#d1d5db\" },\n \"muted\": { \"value\": \"#e5e7eb\" },\n \"accent\": { \"value\": \"#60a5fa\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#2563eb\" },\n \"hover\": { \"value\": \"#1d4ed8\" },\n \"active\": { \"value\": \"#1e40af\" },\n \"focus\": { \"value\": \"#2563eb\" },\n \"disabled\": { \"value\": \"#94a3b8\" }\n }\n },\n \"dark\": {\n \"text\": {\n \"primary\": { \"value\": \"#f9fafb\" },\n \"secondary\": { \"value\": \"#d1d5db\" },\n \"muted\": { \"value\": \"#9ca3af\" },\n \"accent\": { \"value\": \"#60a5fa\" },\n \"inverse\": { \"value\": \"#111827\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#0f172a\" },\n \"secondary\": { \"value\": \"#111827\" },\n \"accent\": { \"value\": \"#1e3a8a\" },\n \"muted\": { \"value\": \"#1f2937\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#334155\" },\n \"muted\": { \"value\": \"#1f2937\" },\n \"accent\": { \"value\": \"#3b82f6\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#60a5fa\" },\n \"hover\": { \"value\": \"#93c5fd\" },\n \"active\": { \"value\": \"#bfdbfe\" },\n \"focus\": { \"value\": \"#60a5fa\" },\n \"disabled\": { \"value\": \"#475569\" }\n }\n }\n },\n \"spacing\": {\n \"unit\": \"0.25rem\",\n \"scale\": {\n \"xs\": \"0.125rem\",\n \"sm\": \"0.25rem\",\n \"md\": \"0.5rem\",\n \"lg\": \"0.75rem\",\n \"xl\": \"1rem\",\n \"2xl\": \"1.5rem\",\n \"3xl\": \"2rem\"\n }\n },\n \"layout\": {\n \"maxWidth\": {\n \"prose\": \"60ch\",\n \"content\": \"72rem\",\n \"wide\": \"90rem\",\n \"full\": \"100%\"\n },\n \"breakpoints\": {\n \"sm\": \"40rem\",\n \"md\": \"48rem\",\n \"lg\": \"64rem\",\n \"xl\": \"80rem\"\n },\n \"grid\": {\n \"columns\": 12,\n \"gap\": \"1rem\"\n }\n },\n \"hierarchy\": {\n \"scale\": \"minor-second\",\n \"baseSize\": \"0.875rem\",\n \"headings\": {\n \"h1\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.2108rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.05\n },\n \"h2\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.1342rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.08\n },\n \"h3\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.0626rem\",\n \"fontWeight\": 650,\n \"lineHeight\": 1.12\n },\n \"h4\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.9956rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2\n },\n \"h5\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.9331rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.3\n },\n \"h6\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.4\n }\n },\n \"emphasis\": {\n \"strong\": { \"fontWeight\": 650 },\n \"subtle\": { \"opacity\": 0.78, \"fontSize\": \"0.8125rem\" }\n }\n },\n \"themes\": []\n}\n","{\n \"typography\": {\n \"heading\": {\n \"fontFamily\": [\"Source Serif 4\", \"Georgia\", \"serif\"],\n \"fontSize\": \"2.5rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.1,\n \"letterSpacing\": \"-0.02em\"\n },\n \"subheading\": {\n \"fontFamily\": [\"Source Serif 4\", \"Georgia\", \"serif\"],\n \"fontSize\": \"1.75rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2\n },\n \"body\": {\n \"fontFamily\": [\"Source Serif 4\", \"Georgia\", \"serif\"],\n \"fontSize\": \"1rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.7\n },\n \"caption\": {\n \"fontFamily\": [\"Source Serif 4\", \"Georgia\", \"serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.5\n },\n \"button\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.9375rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2,\n \"textTransform\": \"none\"\n },\n \"label\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.3\n },\n \"input\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.4\n },\n \"chart-label\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.8125rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.3\n },\n \"chart-axis\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.75rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.3\n },\n \"chart-title\": {\n \"fontFamily\": [\"Source Serif 4\", \"Georgia\", \"serif\"],\n \"fontSize\": \"1.125rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2\n },\n \"code\": {\n \"fontFamily\": [\"JetBrains Mono\", \"ui-monospace\", \"monospace\"],\n \"fontSize\": \"0.9375rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.5\n },\n \"blockquote\": {\n \"fontFamily\": [\"Source Serif 4\", \"Georgia\", \"serif\"],\n \"fontSize\": \"1.125rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.8,\n \"letterSpacing\": \"0em\"\n }\n },\n \"color\": {\n \"light\": {\n \"text\": {\n \"primary\": { \"value\": \"#111827\" },\n \"secondary\": { \"value\": \"#374151\" },\n \"muted\": { \"value\": \"#6b7280\" },\n \"accent\": { \"value\": \"#2563eb\" },\n \"inverse\": { \"value\": \"#f9fafb\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#ffffff\" },\n \"secondary\": { \"value\": \"#f8fafc\" },\n \"accent\": { \"value\": \"#dbeafe\" },\n \"muted\": { \"value\": \"#e5e7eb\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#d1d5db\" },\n \"muted\": { \"value\": \"#e5e7eb\" },\n \"accent\": { \"value\": \"#60a5fa\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#2563eb\" },\n \"hover\": { \"value\": \"#1d4ed8\" },\n \"active\": { \"value\": \"#1e40af\" },\n \"focus\": { \"value\": \"#2563eb\" },\n \"disabled\": { \"value\": \"#94a3b8\" }\n }\n },\n \"dark\": {\n \"text\": {\n \"primary\": { \"value\": \"#f9fafb\" },\n \"secondary\": { \"value\": \"#d1d5db\" },\n \"muted\": { \"value\": \"#9ca3af\" },\n \"accent\": { \"value\": \"#60a5fa\" },\n \"inverse\": { \"value\": \"#111827\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#0f172a\" },\n \"secondary\": { \"value\": \"#111827\" },\n \"accent\": { \"value\": \"#1e3a8a\" },\n \"muted\": { \"value\": \"#1f2937\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#334155\" },\n \"muted\": { \"value\": \"#1f2937\" },\n \"accent\": { \"value\": \"#3b82f6\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#60a5fa\" },\n \"hover\": { \"value\": \"#93c5fd\" },\n \"active\": { \"value\": \"#bfdbfe\" },\n \"focus\": { \"value\": \"#60a5fa\" },\n \"disabled\": { \"value\": \"#475569\" }\n }\n }\n },\n \"spacing\": {\n \"unit\": \"0.25rem\",\n \"scale\": {\n \"xs\": \"0.25rem\",\n \"sm\": \"0.5rem\",\n \"md\": \"0.75rem\",\n \"lg\": \"1rem\",\n \"xl\": \"1.5rem\",\n \"2xl\": \"2rem\",\n \"3xl\": \"3rem\"\n }\n },\n \"layout\": {\n \"maxWidth\": {\n \"prose\": \"68ch\",\n \"content\": \"72rem\",\n \"wide\": \"90rem\",\n \"full\": \"100%\"\n },\n \"breakpoints\": {\n \"sm\": \"40rem\",\n \"md\": \"48rem\",\n \"lg\": \"64rem\",\n \"xl\": \"80rem\"\n },\n \"grid\": {\n \"columns\": 12,\n \"gap\": \"1.5rem\"\n }\n },\n \"hierarchy\": {\n \"scale\": \"minor-third\",\n \"baseSize\": \"1rem\",\n \"headings\": {\n \"h1\": {\n \"fontFamily\": [\"Source Serif 4\", \"Georgia\", \"serif\"],\n \"fontSize\": \"2.4883rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.05,\n \"letterSpacing\": \"-0.02em\"\n },\n \"h2\": {\n \"fontFamily\": [\"Source Serif 4\", \"Georgia\", \"serif\"],\n \"fontSize\": \"2.0736rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.08,\n \"letterSpacing\": \"-0.02em\"\n },\n \"h3\": {\n \"fontFamily\": [\"Source Serif 4\", \"Georgia\", \"serif\"],\n \"fontSize\": \"1.728rem\",\n \"fontWeight\": 650,\n \"lineHeight\": 1.12\n },\n \"h4\": {\n \"fontFamily\": [\"Source Serif 4\", \"Georgia\", \"serif\"],\n \"fontSize\": \"1.44rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2\n },\n \"h5\": {\n \"fontFamily\": [\"Source Serif 4\", \"Georgia\", \"serif\"],\n \"fontSize\": \"1.2rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.3\n },\n \"h6\": {\n \"fontFamily\": [\"Source Serif 4\", \"Georgia\", \"serif\"],\n \"fontSize\": \"1rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.4\n }\n },\n \"emphasis\": {\n \"strong\": { \"fontWeight\": 700 },\n \"subtle\": { \"opacity\": 0.78, \"fontSize\": \"0.9375rem\" }\n }\n },\n \"themes\": []\n}\n","{\n \"typography\": {\n \"heading\": {\n \"fontFamily\": [\"DM Sans\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"2.5rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.1,\n \"letterSpacing\": \"-0.02em\"\n },\n \"subheading\": {\n \"fontFamily\": [\"DM Sans\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.5rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2\n },\n \"body\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.6\n },\n \"caption\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.4\n },\n \"button\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.2,\n \"letterSpacing\": \"0.02em\",\n \"textTransform\": \"uppercase\"\n },\n \"label\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.3\n },\n \"input\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.4\n },\n \"chart-label\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.8125rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.3\n },\n \"chart-axis\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.75rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.3\n },\n \"chart-title\": {\n \"fontFamily\": [\"DM Sans\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.125rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2\n },\n \"code\": {\n \"fontFamily\": [\"JetBrains Mono\", \"ui-monospace\", \"monospace\"],\n \"fontSize\": \"0.9375rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.5\n },\n \"blockquote\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.125rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.7\n }\n },\n \"color\": {\n \"light\": {\n \"text\": {\n \"primary\": { \"value\": \"#111827\" },\n \"secondary\": { \"value\": \"#374151\" },\n \"muted\": { \"value\": \"#6b7280\" },\n \"accent\": { \"value\": \"#2563eb\" },\n \"inverse\": { \"value\": \"#f9fafb\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#ffffff\" },\n \"secondary\": { \"value\": \"#f8fafc\" },\n \"accent\": { \"value\": \"#dbeafe\" },\n \"muted\": { \"value\": \"#e5e7eb\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#d1d5db\" },\n \"muted\": { \"value\": \"#e5e7eb\" },\n \"accent\": { \"value\": \"#60a5fa\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#2563eb\" },\n \"hover\": { \"value\": \"#1d4ed8\" },\n \"active\": { \"value\": \"#1e40af\" },\n \"focus\": { \"value\": \"#2563eb\" },\n \"disabled\": { \"value\": \"#94a3b8\" }\n }\n },\n \"dark\": {\n \"text\": {\n \"primary\": { \"value\": \"#f9fafb\" },\n \"secondary\": { \"value\": \"#d1d5db\" },\n \"muted\": { \"value\": \"#9ca3af\" },\n \"accent\": { \"value\": \"#60a5fa\" },\n \"inverse\": { \"value\": \"#111827\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#0f172a\" },\n \"secondary\": { \"value\": \"#111827\" },\n \"accent\": { \"value\": \"#1e3a8a\" },\n \"muted\": { \"value\": \"#1f2937\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#334155\" },\n \"muted\": { \"value\": \"#1f2937\" },\n \"accent\": { \"value\": \"#3b82f6\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#60a5fa\" },\n \"hover\": { \"value\": \"#93c5fd\" },\n \"active\": { \"value\": \"#bfdbfe\" },\n \"focus\": { \"value\": \"#60a5fa\" },\n \"disabled\": { \"value\": \"#475569\" }\n }\n }\n },\n \"spacing\": {\n \"unit\": \"0.25rem\",\n \"scale\": {\n \"xs\": \"0.25rem\",\n \"sm\": \"0.5rem\",\n \"md\": \"0.75rem\",\n \"lg\": \"1rem\",\n \"xl\": \"1.5rem\",\n \"2xl\": \"2rem\",\n \"3xl\": \"3rem\"\n }\n },\n \"layout\": {\n \"maxWidth\": {\n \"prose\": \"65ch\",\n \"content\": \"72rem\",\n \"wide\": \"90rem\",\n \"full\": \"100%\"\n },\n \"breakpoints\": {\n \"sm\": \"40rem\",\n \"md\": \"48rem\",\n \"lg\": \"64rem\",\n \"xl\": \"80rem\"\n },\n \"grid\": {\n \"columns\": 12,\n \"gap\": \"1.5rem\"\n }\n },\n \"hierarchy\": {\n \"scale\": \"major-second\",\n \"baseSize\": \"1rem\",\n \"headings\": {\n \"h1\": {\n \"fontFamily\": [\"DM Sans\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.8021rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.05,\n \"letterSpacing\": \"-0.02em\"\n },\n \"h2\": {\n \"fontFamily\": [\"DM Sans\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.6018rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.08,\n \"letterSpacing\": \"-0.02em\"\n },\n \"h3\": {\n \"fontFamily\": [\"DM Sans\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.4238rem\",\n \"fontWeight\": 650,\n \"lineHeight\": 1.12\n },\n \"h4\": {\n \"fontFamily\": [\"DM Sans\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.2656rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2\n },\n \"h5\": {\n \"fontFamily\": [\"DM Sans\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.125rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.3\n },\n \"h6\": {\n \"fontFamily\": [\"DM Sans\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.4\n }\n },\n \"emphasis\": {\n \"strong\": { \"fontWeight\": 700 },\n \"subtle\": { \"opacity\": 0.78, \"fontSize\": \"0.9375rem\" }\n }\n },\n \"themes\": []\n}\n","{\n \"typography\": {\n \"heading\": {\n \"fontFamily\": [\"Georgia\", \"Iowan Old Style\", \"serif\"],\n \"fontSize\": \"3rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.1,\n \"letterSpacing\": \"-0.02em\"\n },\n \"subheading\": {\n \"fontFamily\": [\"Georgia\", \"Iowan Old Style\", \"serif\"],\n \"fontSize\": \"2rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2,\n \"letterSpacing\": \"-0.01em\"\n },\n \"body\": {\n \"fontFamily\": [\"Georgia\", \"Iowan Old Style\", \"serif\"],\n \"fontSize\": \"1.125rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.8\n },\n \"caption\": {\n \"fontFamily\": [\"Georgia\", \"Iowan Old Style\", \"serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.5\n },\n \"button\": {\n \"fontFamily\": [\"Georgia\", \"Iowan Old Style\", \"serif\"],\n \"fontSize\": \"1rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2,\n \"textTransform\": \"none\"\n },\n \"label\": {\n \"fontFamily\": [\"Georgia\", \"Iowan Old Style\", \"serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.3\n },\n \"input\": {\n \"fontFamily\": [\"Georgia\", \"Iowan Old Style\", \"serif\"],\n \"fontSize\": \"1.125rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.5\n },\n \"chart-label\": {\n \"fontFamily\": [\"Georgia\", \"Iowan Old Style\", \"serif\"],\n \"fontSize\": \"0.8125rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.3\n },\n \"chart-axis\": {\n \"fontFamily\": [\"Georgia\", \"Iowan Old Style\", \"serif\"],\n \"fontSize\": \"0.75rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.3\n },\n \"chart-title\": {\n \"fontFamily\": [\"Georgia\", \"Iowan Old Style\", \"serif\"],\n \"fontSize\": \"1.25rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2\n },\n \"code\": {\n \"fontFamily\": [\"JetBrains Mono\", \"ui-monospace\", \"monospace\"],\n \"fontSize\": \"0.9375rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.5\n },\n \"blockquote\": {\n \"fontFamily\": [\"Georgia\", \"Iowan Old Style\", \"serif\"],\n \"fontSize\": \"1.25rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.8,\n \"letterSpacing\": \"0em\"\n }\n },\n \"color\": {\n \"light\": {\n \"text\": {\n \"primary\": { \"value\": \"#111827\" },\n \"secondary\": { \"value\": \"#374151\" },\n \"muted\": { \"value\": \"#6b7280\" },\n \"accent\": { \"value\": \"#2563eb\" },\n \"inverse\": { \"value\": \"#f9fafb\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#ffffff\" },\n \"secondary\": { \"value\": \"#f8fafc\" },\n \"accent\": { \"value\": \"#dbeafe\" },\n \"muted\": { \"value\": \"#e5e7eb\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#d1d5db\" },\n \"muted\": { \"value\": \"#e5e7eb\" },\n \"accent\": { \"value\": \"#60a5fa\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#2563eb\" },\n \"hover\": { \"value\": \"#1d4ed8\" },\n \"active\": { \"value\": \"#1e40af\" },\n \"focus\": { \"value\": \"#2563eb\" },\n \"disabled\": { \"value\": \"#94a3b8\" }\n }\n },\n \"dark\": {\n \"text\": {\n \"primary\": { \"value\": \"#f9fafb\" },\n \"secondary\": { \"value\": \"#d1d5db\" },\n \"muted\": { \"value\": \"#9ca3af\" },\n \"accent\": { \"value\": \"#60a5fa\" },\n \"inverse\": { \"value\": \"#111827\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#0f172a\" },\n \"secondary\": { \"value\": \"#111827\" },\n \"accent\": { \"value\": \"#1e3a8a\" },\n \"muted\": { \"value\": \"#1f2937\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#334155\" },\n \"muted\": { \"value\": \"#1f2937\" },\n \"accent\": { \"value\": \"#3b82f6\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#60a5fa\" },\n \"hover\": { \"value\": \"#93c5fd\" },\n \"active\": { \"value\": \"#bfdbfe\" },\n \"focus\": { \"value\": \"#60a5fa\" },\n \"disabled\": { \"value\": \"#475569\" }\n }\n }\n },\n \"spacing\": {\n \"unit\": \"0.25rem\",\n \"scale\": {\n \"xs\": \"0.5rem\",\n \"sm\": \"0.75rem\",\n \"md\": \"1rem\",\n \"lg\": \"1.5rem\",\n \"xl\": \"2rem\",\n \"2xl\": \"3rem\",\n \"3xl\": \"4rem\"\n }\n },\n \"layout\": {\n \"maxWidth\": {\n \"prose\": \"72ch\",\n \"content\": \"72rem\",\n \"wide\": \"90rem\",\n \"full\": \"100%\"\n },\n \"breakpoints\": {\n \"sm\": \"40rem\",\n \"md\": \"48rem\",\n \"lg\": \"64rem\",\n \"xl\": \"80rem\"\n },\n \"grid\": {\n \"columns\": 12,\n \"gap\": \"2rem\"\n }\n },\n \"hierarchy\": {\n \"scale\": \"perfect-fourth\",\n \"baseSize\": \"1.125rem\",\n \"headings\": {\n \"h1\": {\n \"fontFamily\": [\"Georgia\", \"Iowan Old Style\", \"serif\"],\n \"fontSize\": \"4.7348rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.05,\n \"letterSpacing\": \"-0.02em\"\n },\n \"h2\": {\n \"fontFamily\": [\"Georgia\", \"Iowan Old Style\", \"serif\"],\n \"fontSize\": \"3.552rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.08,\n \"letterSpacing\": \"-0.02em\"\n },\n \"h3\": {\n \"fontFamily\": [\"Georgia\", \"Iowan Old Style\", \"serif\"],\n \"fontSize\": \"2.6647rem\",\n \"fontWeight\": 650,\n \"lineHeight\": 1.12,\n \"letterSpacing\": \"-0.02em\"\n },\n \"h4\": {\n \"fontFamily\": [\"Georgia\", \"Iowan Old Style\", \"serif\"],\n \"fontSize\": \"1.999rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2\n },\n \"h5\": {\n \"fontFamily\": [\"Georgia\", \"Iowan Old Style\", \"serif\"],\n \"fontSize\": \"1.4996rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.3\n },\n \"h6\": {\n \"fontFamily\": [\"Georgia\", \"Iowan Old Style\", \"serif\"],\n \"fontSize\": \"1.125rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.4\n }\n },\n \"emphasis\": {\n \"strong\": { \"fontWeight\": 700 },\n \"subtle\": { \"opacity\": 0.78, \"fontSize\": \"1rem\" }\n }\n },\n \"themes\": []\n}\n","{\n \"typography\": {\n \"heading\": {\n \"fontFamily\": [\"Segoe UI Variable\", \"Segoe UI\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"2.5rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.15,\n \"letterSpacing\": \"-0.02em\"\n },\n \"subheading\": {\n \"fontFamily\": [\"Segoe UI Variable\", \"Segoe UI\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.5rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.25,\n \"letterSpacing\": \"-0.01em\"\n },\n \"body\": {\n \"fontFamily\": [\"Segoe UI Variable\", \"Segoe UI\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.43\n },\n \"caption\": {\n \"fontFamily\": [\"Segoe UI Variable\", \"Segoe UI\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.75rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.33\n },\n \"button\": {\n \"fontFamily\": [\"Segoe UI Variable\", \"Segoe UI\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.43,\n \"textTransform\": \"none\"\n },\n \"label\": {\n \"fontFamily\": [\"Segoe UI Variable\", \"Segoe UI\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.43\n },\n \"input\": {\n \"fontFamily\": [\"Segoe UI Variable\", \"Segoe UI\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.43\n },\n \"code\": {\n \"fontFamily\": [\"Cascadia Code\", \"Consolas\", \"ui-monospace\", \"monospace\"],\n \"fontSize\": \"0.8125rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.54\n }\n },\n \"color\": {\n \"light\": {\n \"text\": {\n \"primary\": { \"value\": \"#242424\" },\n \"secondary\": { \"value\": \"#616161\" },\n \"muted\": { \"value\": \"#a1a1a1\" },\n \"accent\": { \"value\": \"{color.light.interactive.default.value}\" },\n \"inverse\": { \"value\": \"#ffffff\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#ffffff\" },\n \"secondary\": { \"value\": \"#fafafa\" },\n \"accent\": { \"value\": \"#ebf3fc\" },\n \"muted\": { \"value\": \"#f0f0f0\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#d1d1d1\" },\n \"muted\": { \"value\": \"#e0e0e0\" },\n \"accent\": { \"value\": \"#0f6cbd\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#0f6cbd\" },\n \"hover\": { \"value\": \"#115ea3\" },\n \"active\": { \"value\": \"#0c3b5e\" },\n \"focus\": { \"value\": \"#0f6cbd\" },\n \"disabled\": { \"value\": \"#bdbdbd\" }\n }\n },\n \"dark\": {\n \"text\": {\n \"primary\": { \"value\": \"#ffffff\" },\n \"secondary\": { \"value\": \"#d6d6d6\" },\n \"muted\": { \"value\": \"#8a8a8a\" },\n \"accent\": { \"value\": \"{color.dark.interactive.default.value}\" },\n \"inverse\": { \"value\": \"#242424\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#292929\" },\n \"secondary\": { \"value\": \"#1f1f1f\" },\n \"accent\": { \"value\": \"#0c3b5e\" },\n \"muted\": { \"value\": \"#383838\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#474747\" },\n \"muted\": { \"value\": \"#383838\" },\n \"accent\": { \"value\": \"#479ef5\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#479ef5\" },\n \"hover\": { \"value\": \"#62abf5\" },\n \"active\": { \"value\": \"#96c6fa\" },\n \"focus\": { \"value\": \"#479ef5\" },\n \"disabled\": { \"value\": \"#474747\" }\n }\n }\n },\n \"spacing\": {\n \"unit\": \"0.25rem\",\n \"scale\": {\n \"xs\": \"0.25rem\",\n \"sm\": \"0.5rem\",\n \"md\": \"0.5rem\",\n \"lg\": \"0.75rem\",\n \"xl\": \"1rem\",\n \"2xl\": \"1.5rem\",\n \"3xl\": \"2rem\"\n }\n },\n \"layout\": {\n \"maxWidth\": {\n \"prose\": \"68ch\",\n \"content\": \"72rem\",\n \"wide\": \"90rem\",\n \"full\": \"100%\"\n },\n \"breakpoints\": {\n \"sm\": \"30rem\",\n \"md\": \"48rem\",\n \"lg\": \"64rem\",\n \"xl\": \"85.375rem\"\n },\n \"grid\": {\n \"columns\": 12,\n \"gap\": \"1rem\"\n }\n },\n \"hierarchy\": {\n \"scale\": \"major-second\",\n \"baseSize\": \"0.875rem\",\n \"headings\": {\n \"h1\": {\n \"fontFamily\": [\"Segoe UI Variable\", \"Segoe UI\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"2.5rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.12,\n \"letterSpacing\": \"-0.02em\"\n },\n \"h2\": {\n \"fontFamily\": [\"Segoe UI Variable\", \"Segoe UI\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.75rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.14,\n \"letterSpacing\": \"-0.01em\"\n },\n \"h3\": {\n \"fontFamily\": [\"Segoe UI Variable\", \"Segoe UI\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.5rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.17\n },\n \"h4\": {\n \"fontFamily\": [\"Segoe UI Variable\", \"Segoe UI\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.25rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.2\n },\n \"h5\": {\n \"fontFamily\": [\"Segoe UI Variable\", \"Segoe UI\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.25\n },\n \"h6\": {\n \"fontFamily\": [\"Segoe UI Variable\", \"Segoe UI\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.43\n }\n },\n \"emphasis\": {\n \"strong\": { \"fontWeight\": 700 },\n \"subtle\": { \"opacity\": 0.7, \"fontSize\": \"0.8125rem\" }\n }\n },\n \"modes\": {\n \"display\": {\n \"name\": \"display\",\n \"description\": \"Large-scale Fluent typography for hero sections\",\n \"tokens\": {\n \"typography.heading.fontSize\": \"3.5rem\",\n \"typography.heading.lineHeight\": 1.05,\n \"typography.heading.letterSpacing\": \"-0.03em\"\n }\n },\n \"interface\": {\n \"name\": \"interface\",\n \"description\": \"Compact Fluent UI component typography\",\n \"tokens\": {\n \"typography.body.fontSize\": \"0.8125rem\",\n \"typography.body.lineHeight\": 1.38,\n \"spacing.scale.xl\": \"0.75rem\"\n }\n }\n },\n \"themes\": [\n {\n \"name\": \"fluent-teams\",\n \"colorScheme\": \"brand\",\n \"tokens\": {\n \"color.light.interactive.default.value\": \"#5b5fc7\",\n \"color.light.interactive.hover.value\": \"#4f52b2\",\n \"color.light.background.accent.value\": \"#e8ebfa\",\n \"color.dark.interactive.default.value\": \"#7f85f5\",\n \"color.dark.interactive.hover.value\": \"#9299f7\"\n }\n }\n ]\n}\n","{\n \"typography\": {\n \"heading\": {\n \"fontFamily\": [\"Roboto\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"2.8125rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.16,\n \"letterSpacing\": \"0em\"\n },\n \"subheading\": {\n \"fontFamily\": [\"Roboto\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.75rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.29,\n \"letterSpacing\": \"0em\"\n },\n \"body\": {\n \"fontFamily\": [\"Roboto\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.43,\n \"letterSpacing\": \"0.0178em\"\n },\n \"caption\": {\n \"fontFamily\": [\"Roboto\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.6875rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.45,\n \"letterSpacing\": \"0.0333em\"\n },\n \"button\": {\n \"fontFamily\": [\"Roboto\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.43,\n \"letterSpacing\": \"0.0107em\",\n \"textTransform\": \"none\"\n },\n \"label\": {\n \"fontFamily\": [\"Roboto\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"0.75rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.33,\n \"letterSpacing\": \"0.0417em\"\n },\n \"input\": {\n \"fontFamily\": [\"Roboto\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.5,\n \"letterSpacing\": \"0.0094em\"\n },\n \"code\": {\n \"fontFamily\": [\"Roboto Mono\", \"ui-monospace\", \"monospace\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.43\n }\n },\n \"color\": {\n \"light\": {\n \"text\": {\n \"primary\": { \"value\": \"#1c1b1f\" },\n \"secondary\": { \"value\": \"#49454f\" },\n \"muted\": { \"value\": \"#79747e\" },\n \"accent\": { \"value\": \"{color.light.interactive.default.value}\" },\n \"inverse\": { \"value\": \"#f4eff4\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#fffbfe\" },\n \"secondary\": { \"value\": \"#f7f2fa\" },\n \"accent\": { \"value\": \"#eaddff\" },\n \"muted\": { \"value\": \"#e7e0ec\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#cac4d0\" },\n \"muted\": { \"value\": \"#e7e0ec\" },\n \"accent\": { \"value\": \"#6750a4\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#6750a4\" },\n \"hover\": { \"value\": \"#4f378b\" },\n \"active\": { \"value\": \"#381e72\" },\n \"focus\": { \"value\": \"#6750a4\" },\n \"disabled\": { \"value\": \"#c4c7c5\" }\n }\n },\n \"dark\": {\n \"text\": {\n \"primary\": { \"value\": \"#e6e1e5\" },\n \"secondary\": { \"value\": \"#cac4d0\" },\n \"muted\": { \"value\": \"#938f99\" },\n \"accent\": { \"value\": \"{color.dark.interactive.default.value}\" },\n \"inverse\": { \"value\": \"#313033\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#1c1b1f\" },\n \"secondary\": { \"value\": \"#211f26\" },\n \"accent\": { \"value\": \"#4a4458\" },\n \"muted\": { \"value\": \"#36343b\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#49454f\" },\n \"muted\": { \"value\": \"#36343b\" },\n \"accent\": { \"value\": \"#d0bcff\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#d0bcff\" },\n \"hover\": { \"value\": \"#e8deff\" },\n \"active\": { \"value\": \"#f6edff\" },\n \"focus\": { \"value\": \"#d0bcff\" },\n \"disabled\": { \"value\": \"#49454f\" }\n }\n }\n },\n \"spacing\": {\n \"unit\": \"0.25rem\",\n \"scale\": {\n \"xs\": \"0.25rem\",\n \"sm\": \"0.5rem\",\n \"md\": \"0.75rem\",\n \"lg\": \"1rem\",\n \"xl\": \"1.5rem\",\n \"2xl\": \"2rem\",\n \"3xl\": \"3rem\"\n }\n },\n \"layout\": {\n \"maxWidth\": {\n \"prose\": \"68ch\",\n \"content\": \"72rem\",\n \"wide\": \"90rem\",\n \"full\": \"100%\"\n },\n \"breakpoints\": {\n \"sm\": \"37.5rem\",\n \"md\": \"52.5rem\",\n \"lg\": \"75rem\",\n \"xl\": \"100rem\"\n },\n \"grid\": {\n \"columns\": 12,\n \"gap\": \"1.5rem\"\n }\n },\n \"hierarchy\": {\n \"scale\": \"major-third\",\n \"baseSize\": \"0.875rem\",\n \"headings\": {\n \"h1\": {\n \"fontFamily\": [\"Roboto\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"3.5625rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.12,\n \"letterSpacing\": \"-0.0156em\"\n },\n \"h2\": {\n \"fontFamily\": [\"Roboto\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"2.8125rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.16,\n \"letterSpacing\": \"0em\"\n },\n \"h3\": {\n \"fontFamily\": [\"Roboto\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"2rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.25,\n \"letterSpacing\": \"0.0156em\"\n },\n \"h4\": {\n \"fontFamily\": [\"Roboto\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.75rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.29,\n \"letterSpacing\": \"0em\"\n },\n \"h5\": {\n \"fontFamily\": [\"Roboto\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.5rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.33,\n \"letterSpacing\": \"0em\"\n },\n \"h6\": {\n \"fontFamily\": [\"Roboto\", \"system-ui\", \"sans-serif\"],\n \"fontSize\": \"1.375rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.27,\n \"letterSpacing\": \"0em\"\n }\n },\n \"emphasis\": {\n \"strong\": { \"fontWeight\": 700 },\n \"subtle\": { \"opacity\": 0.74, \"fontSize\": \"0.8125rem\" }\n }\n },\n \"modes\": {\n \"display\": {\n \"name\": \"display\",\n \"description\": \"Material Design display typography\",\n \"tokens\": {\n \"typography.heading.fontSize\": \"3.5625rem\",\n \"typography.heading.fontWeight\": 400,\n \"typography.heading.lineHeight\": 1.12,\n \"typography.heading.letterSpacing\": \"-0.0156em\"\n }\n },\n \"interface\": {\n \"name\": \"interface\",\n \"description\": \"Compact Material Design component typography\",\n \"tokens\": {\n \"typography.body.fontSize\": \"0.8125rem\",\n \"typography.body.lineHeight\": 1.38,\n \"spacing.scale.xl\": \"1rem\"\n }\n }\n },\n \"themes\": [\n {\n \"name\": \"material-green\",\n \"colorScheme\": \"brand\",\n \"tokens\": {\n \"color.light.interactive.default.value\": \"#386a20\",\n \"color.light.interactive.hover.value\": \"#2d5518\",\n \"color.light.background.accent.value\": \"#c4efaf\",\n \"color.dark.interactive.default.value\": \"#a9d18e\",\n \"color.dark.interactive.hover.value\": \"#bfe0a6\"\n }\n }\n ]\n}\n","{\n \"typography\": {\n \"heading\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"-apple-system\", \"sans-serif\"],\n \"fontSize\": \"2.25rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.22,\n \"letterSpacing\": \"-0.025em\"\n },\n \"subheading\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"-apple-system\", \"sans-serif\"],\n \"fontSize\": \"1.5rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.33,\n \"letterSpacing\": \"-0.01em\"\n },\n \"body\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"-apple-system\", \"sans-serif\"],\n \"fontSize\": \"0.9375rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.6\n },\n \"caption\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"-apple-system\", \"sans-serif\"],\n \"fontSize\": \"0.8125rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.38\n },\n \"button\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"-apple-system\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.43,\n \"textTransform\": \"none\"\n },\n \"label\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"-apple-system\", \"sans-serif\"],\n \"fontSize\": \"0.8125rem\",\n \"fontWeight\": 500,\n \"lineHeight\": 1.23\n },\n \"input\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"-apple-system\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.43\n },\n \"code\": {\n \"fontFamily\": [\"JetBrains Mono\", \"Menlo\", \"ui-monospace\", \"monospace\"],\n \"fontSize\": \"0.8125rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.54\n }\n },\n \"color\": {\n \"light\": {\n \"text\": {\n \"primary\": { \"value\": \"#11181c\" },\n \"secondary\": { \"value\": \"#3b4752\" },\n \"muted\": { \"value\": \"#687076\" },\n \"accent\": { \"value\": \"{color.light.interactive.default.value}\" },\n \"inverse\": { \"value\": \"#ffffff\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#ffffff\" },\n \"secondary\": { \"value\": \"#f9f9fb\" },\n \"accent\": { \"value\": \"#e1e9ff\" },\n \"muted\": { \"value\": \"#eceef0\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#d7dbdf\" },\n \"muted\": { \"value\": \"#e6e8eb\" },\n \"accent\": { \"value\": \"#3e63dd\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#3e63dd\" },\n \"hover\": { \"value\": \"#3358d4\" },\n \"active\": { \"value\": \"#2f4eb2\" },\n \"focus\": { \"value\": \"#3e63dd\" },\n \"disabled\": { \"value\": \"#b5b9bd\" }\n }\n },\n \"dark\": {\n \"text\": {\n \"primary\": { \"value\": \"#edeef0\" },\n \"secondary\": { \"value\": \"#b0b4ba\" },\n \"muted\": { \"value\": \"#7c8188\" },\n \"accent\": { \"value\": \"{color.dark.interactive.default.value}\" },\n \"inverse\": { \"value\": \"#11181c\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#111113\" },\n \"secondary\": { \"value\": \"#191a1c\" },\n \"accent\": { \"value\": \"#1f2b5f\" },\n \"muted\": { \"value\": \"#27282b\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#3a3d42\" },\n \"muted\": { \"value\": \"#27282b\" },\n \"accent\": { \"value\": \"#7b93db\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#7b93db\" },\n \"hover\": { \"value\": \"#93a8e5\" },\n \"active\": { \"value\": \"#b1c2f0\" },\n \"focus\": { \"value\": \"#7b93db\" },\n \"disabled\": { \"value\": \"#3a3d42\" }\n }\n }\n },\n \"spacing\": {\n \"unit\": \"0.25rem\",\n \"scale\": {\n \"xs\": \"0.25rem\",\n \"sm\": \"0.5rem\",\n \"md\": \"0.75rem\",\n \"lg\": \"1rem\",\n \"xl\": \"1.5rem\",\n \"2xl\": \"2rem\",\n \"3xl\": \"3rem\"\n }\n },\n \"layout\": {\n \"maxWidth\": {\n \"prose\": \"65ch\",\n \"content\": \"72rem\",\n \"wide\": \"90rem\",\n \"full\": \"100%\"\n },\n \"breakpoints\": {\n \"sm\": \"30rem\",\n \"md\": \"48rem\",\n \"lg\": \"64rem\",\n \"xl\": \"80rem\"\n },\n \"grid\": {\n \"columns\": 12,\n \"gap\": \"1.25rem\"\n }\n },\n \"hierarchy\": {\n \"scale\": \"major-third\",\n \"baseSize\": \"0.9375rem\",\n \"headings\": {\n \"h1\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"-apple-system\", \"sans-serif\"],\n \"fontSize\": \"2.25rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.17,\n \"letterSpacing\": \"-0.025em\"\n },\n \"h2\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"-apple-system\", \"sans-serif\"],\n \"fontSize\": \"1.875rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.2,\n \"letterSpacing\": \"-0.02em\"\n },\n \"h3\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"-apple-system\", \"sans-serif\"],\n \"fontSize\": \"1.5rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.25,\n \"letterSpacing\": \"-0.01em\"\n },\n \"h4\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"-apple-system\", \"sans-serif\"],\n \"fontSize\": \"1.25rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.3\n },\n \"h5\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"-apple-system\", \"sans-serif\"],\n \"fontSize\": \"1.0625rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.35\n },\n \"h6\": {\n \"fontFamily\": [\"Inter\", \"system-ui\", \"-apple-system\", \"sans-serif\"],\n \"fontSize\": \"0.9375rem\",\n \"fontWeight\": 600,\n \"lineHeight\": 1.4\n }\n },\n \"emphasis\": {\n \"strong\": { \"fontWeight\": 600 },\n \"subtle\": { \"opacity\": 0.72, \"fontSize\": \"0.8125rem\" }\n }\n },\n \"modes\": {\n \"display\": {\n \"name\": \"display\",\n \"description\": \"Radix display typography for hero content\",\n \"tokens\": {\n \"typography.heading.fontSize\": \"3.5rem\",\n \"typography.heading.lineHeight\": 1.08,\n \"typography.heading.letterSpacing\": \"-0.04em\"\n }\n },\n \"interface\": {\n \"name\": \"interface\",\n \"description\": \"Radix compact component typography\",\n \"tokens\": {\n \"typography.body.fontSize\": \"0.8125rem\",\n \"typography.body.lineHeight\": 1.38,\n \"spacing.scale.xl\": \"1rem\"\n }\n }\n },\n \"themes\": [\n {\n \"name\": \"radix-violet\",\n \"colorScheme\": \"brand\",\n \"tokens\": {\n \"color.light.interactive.default.value\": \"#6e56cf\",\n \"color.light.interactive.hover.value\": \"#5b4ab5\",\n \"color.light.background.accent.value\": \"#ede9fe\",\n \"color.dark.interactive.default.value\": \"#9e8cfc\",\n \"color.dark.interactive.hover.value\": \"#b4a5ff\"\n }\n }\n ]\n}\n","{\n \"typography\": {\n \"heading\": {\n \"fontFamily\": [\"Adobe Clean\", \"Source Sans 3\", \"Helvetica Neue\", \"sans-serif\"],\n \"fontSize\": \"2.75rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.18,\n \"letterSpacing\": \"-0.01em\"\n },\n \"subheading\": {\n \"fontFamily\": [\"Adobe Clean\", \"Source Sans 3\", \"Helvetica Neue\", \"sans-serif\"],\n \"fontSize\": \"1.5rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.25,\n \"letterSpacing\": \"-0.005em\"\n },\n \"body\": {\n \"fontFamily\": [\"Adobe Clean\", \"Source Sans 3\", \"Helvetica Neue\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.49\n },\n \"caption\": {\n \"fontFamily\": [\"Adobe Clean\", \"Source Sans 3\", \"Helvetica Neue\", \"sans-serif\"],\n \"fontSize\": \"0.6875rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.45\n },\n \"button\": {\n \"fontFamily\": [\"Adobe Clean\", \"Source Sans 3\", \"Helvetica Neue\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.2,\n \"textTransform\": \"none\"\n },\n \"label\": {\n \"fontFamily\": [\"Adobe Clean\", \"Source Sans 3\", \"Helvetica Neue\", \"sans-serif\"],\n \"fontSize\": \"0.75rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.3\n },\n \"input\": {\n \"fontFamily\": [\"Adobe Clean\", \"Source Sans 3\", \"Helvetica Neue\", \"sans-serif\"],\n \"fontSize\": \"0.875rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.49\n },\n \"code\": {\n \"fontFamily\": [\"Source Code Pro\", \"ui-monospace\", \"monospace\"],\n \"fontSize\": \"0.8125rem\",\n \"fontWeight\": 400,\n \"lineHeight\": 1.54\n }\n },\n \"color\": {\n \"light\": {\n \"text\": {\n \"primary\": { \"value\": \"#1d1d1d\" },\n \"secondary\": { \"value\": \"#464646\" },\n \"muted\": { \"value\": \"#747474\" },\n \"accent\": { \"value\": \"{color.light.interactive.default.value}\" },\n \"inverse\": { \"value\": \"#ffffff\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#ffffff\" },\n \"secondary\": { \"value\": \"#f8f8f8\" },\n \"accent\": { \"value\": \"#e5e5f7\" },\n \"muted\": { \"value\": \"#eaeaea\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#cacaca\" },\n \"muted\": { \"value\": \"#e1e1e1\" },\n \"accent\": { \"value\": \"#0d66d0\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#0d66d0\" },\n \"hover\": { \"value\": \"#095aba\" },\n \"active\": { \"value\": \"#054da0\" },\n \"focus\": { \"value\": \"#0d66d0\" },\n \"disabled\": { \"value\": \"#b8b8b8\" }\n }\n },\n \"dark\": {\n \"text\": {\n \"primary\": { \"value\": \"#ffffff\" },\n \"secondary\": { \"value\": \"#cdcdcd\" },\n \"muted\": { \"value\": \"#909090\" },\n \"accent\": { \"value\": \"{color.dark.interactive.default.value}\" },\n \"inverse\": { \"value\": \"#1d1d1d\" }\n },\n \"background\": {\n \"primary\": { \"value\": \"#1e1e1e\" },\n \"secondary\": { \"value\": \"#2c2c2c\" },\n \"accent\": { \"value\": \"#1b3a5e\" },\n \"muted\": { \"value\": \"#3a3a3a\" }\n },\n \"border\": {\n \"default\": { \"value\": \"#4a4a4a\" },\n \"muted\": { \"value\": \"#3a3a3a\" },\n \"accent\": { \"value\": \"#378ef0\" }\n },\n \"interactive\": {\n \"default\": { \"value\": \"#378ef0\" },\n \"hover\": { \"value\": \"#5aa9fa\" },\n \"active\": { \"value\": \"#7cc0ff\" },\n \"focus\": { \"value\": \"#378ef0\" },\n \"disabled\": { \"value\": \"#4a4a4a\" }\n }\n }\n },\n \"spacing\": {\n \"unit\": \"0.25rem\",\n \"scale\": {\n \"xs\": \"0.25rem\",\n \"sm\": \"0.5rem\",\n \"md\": \"0.75rem\",\n \"lg\": \"1rem\",\n \"xl\": \"1.5rem\",\n \"2xl\": \"2rem\",\n \"3xl\": \"3rem\"\n }\n },\n \"layout\": {\n \"maxWidth\": {\n \"prose\": \"68ch\",\n \"content\": \"72rem\",\n \"wide\": \"90rem\",\n \"full\": \"100%\"\n },\n \"breakpoints\": {\n \"sm\": \"40rem\",\n \"md\": \"48rem\",\n \"lg\": \"64rem\",\n \"xl\": \"80rem\"\n },\n \"grid\": {\n \"columns\": 12,\n \"gap\": \"1.5rem\"\n }\n },\n \"hierarchy\": {\n \"scale\": \"major-third\",\n \"baseSize\": \"0.875rem\",\n \"headings\": {\n \"h1\": {\n \"fontFamily\": [\"Adobe Clean\", \"Source Sans 3\", \"Helvetica Neue\", \"sans-serif\"],\n \"fontSize\": \"2.75rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.13,\n \"letterSpacing\": \"-0.01em\"\n },\n \"h2\": {\n \"fontFamily\": [\"Adobe Clean\", \"Source Sans 3\", \"Helvetica Neue\", \"sans-serif\"],\n \"fontSize\": \"2.25rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.17,\n \"letterSpacing\": \"-0.005em\"\n },\n \"h3\": {\n \"fontFamily\": [\"Adobe Clean\", \"Source Sans 3\", \"Helvetica Neue\", \"sans-serif\"],\n \"fontSize\": \"1.75rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.21\n },\n \"h4\": {\n \"fontFamily\": [\"Adobe Clean\", \"Source Sans 3\", \"Helvetica Neue\", \"sans-serif\"],\n \"fontSize\": \"1.5rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.25\n },\n \"h5\": {\n \"fontFamily\": [\"Adobe Clean\", \"Source Sans 3\", \"Helvetica Neue\", \"sans-serif\"],\n \"fontSize\": \"1.125rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.33\n },\n \"h6\": {\n \"fontFamily\": [\"Adobe Clean\", \"Source Sans 3\", \"Helvetica Neue\", \"sans-serif\"],\n \"fontSize\": \"0.9375rem\",\n \"fontWeight\": 700,\n \"lineHeight\": 1.4\n }\n },\n \"emphasis\": {\n \"strong\": { \"fontWeight\": 700 },\n \"subtle\": { \"opacity\": 0.75, \"fontSize\": \"0.8125rem\" }\n }\n },\n \"modes\": {\n \"display\": {\n \"name\": \"display\",\n \"description\": \"Spectrum display typography for hero content\",\n \"tokens\": {\n \"typography.heading.fontSize\": \"3.625rem\",\n \"typography.heading.lineHeight\": 1.07,\n \"typography.heading.letterSpacing\": \"-0.02em\"\n }\n },\n \"interface\": {\n \"name\": \"interface\",\n \"description\": \"Spectrum compact component typography\",\n \"tokens\": {\n \"typography.body.fontSize\": \"0.8125rem\",\n \"typography.body.lineHeight\": 1.38,\n \"spacing.scale.xl\": \"1rem\"\n }\n }\n },\n \"themes\": [\n {\n \"name\": \"spectrum-express\",\n \"colorScheme\": \"brand\",\n \"tokens\": {\n \"color.light.interactive.default.value\": \"#1473e6\",\n \"color.light.interactive.hover.value\": \"#0d66d0\",\n \"color.light.background.accent.value\": \"#deebff\",\n \"color.dark.interactive.default.value\": \"#4b9cf5\",\n \"color.dark.interactive.hover.value\": \"#6bb1ff\"\n }\n }\n ]\n}\n","export const SCALE_RATIOS: Record<string, number> = {\n 'minor-second': 1.067,\n 'major-second': 1.125,\n 'minor-third': 1.2,\n 'major-third': 1.25,\n 'perfect-fourth': 1.333,\n 'perfect-fifth': 1.5,\n};\n\nexport type HeadingSizes = {\n h1: number;\n h2: number;\n h3: number;\n h4: number;\n h5: number;\n h6: number;\n};\n\nexport function computeHeadingSizes(baseSize: number, ratio: number): HeadingSizes {\n return {\n h6: baseSize,\n h5: baseSize * ratio,\n h4: baseSize * ratio ** 2,\n h3: baseSize * ratio ** 3,\n h2: baseSize * ratio ** 4,\n h1: baseSize * ratio ** 5,\n };\n}\n\ntype HeadingToken = {\n fontSize: string;\n fontWeight: number;\n lineHeight: number;\n letterSpacing?: string;\n};\n\ntype HeadingsMap = {\n h1: HeadingToken;\n h2: HeadingToken;\n h3: HeadingToken;\n h4: HeadingToken;\n h5: HeadingToken;\n h6: HeadingToken;\n};\n\nfunction toRem(px: number, basePx: number): string {\n return `${Number((px / basePx).toFixed(4))}rem`;\n}\n\nfunction parseBaseSize(baseSize: string): number {\n const match = baseSize.match(/^(-?\\d+(?:\\.\\d+)?)(rem)?$/);\n if (!match) {\n return 16;\n }\n const value = Number(match[1]);\n return match[2] === 'rem' ? value * 16 : value;\n}\n\nexport function generateHeadings(baseSize: string, scaleName: string): HeadingsMap {\n const ratio = SCALE_RATIOS[scaleName] ?? 1.25;\n const basePx = parseBaseSize(baseSize);\n const sizes = computeHeadingSizes(basePx, ratio);\n\n type HeadingKey = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\n const weights: Record<HeadingKey, number> = {\n h1: 700,\n h2: 700,\n h3: 650,\n h4: 600,\n h5: 600,\n h6: 600,\n };\n\n const lineHeights: Record<HeadingKey, number> = {\n h1: 1.05,\n h2: 1.08,\n h3: 1.12,\n h4: 1.2,\n h5: 1.3,\n h6: 1.4,\n };\n\n const result: Record<string, HeadingToken> = {};\n for (const level of ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const) {\n const token: HeadingToken = {\n fontSize: toRem(sizes[level], 16),\n fontWeight: weights[level],\n lineHeight: lineHeights[level],\n };\n if (sizes[level] >= 24) {\n token.letterSpacing = '-0.02em';\n }\n result[level] = token;\n }\n\n return result as HeadingsMap;\n}\n","import type {\n DesignTokenSet,\n ReferenceEvaluation,\n TypographyPattern,\n TypographyContext,\n TypographySystemKind,\n TypographySystemReference,\n TypographySystemsQuery,\n TypographySystemsResult,\n} from '@fetchtype/types';\n\nexport const TYPOGRAPHY_SYSTEMS: TypographySystemReference[] = [\n {\n id: 'material-3',\n name: 'Material 3',\n kind: 'official-design-system',\n source: 'Google Material Design 3',\n sourceUrl: 'https://developer.android.com/develop/ui/compose/designsystems/material3',\n summary:\n 'Semantic 15-style ramp for adaptive app UI with strong display, title, body, and label roles.',\n useCases: ['mobile-native', 'cross-platform-product', 'consumer-app'],\n styles: ['systematic-ui', 'adaptive-sans', 'semantic-ramp'],\n keywords: [\n 'material-3',\n 'android',\n 'display',\n 'headline',\n 'title',\n 'body',\n 'label',\n 'adaptive',\n 'tokens',\n ],\n fonts: ['Roboto', 'Roboto Flex'],\n characteristics: [\n 'Uses named roles instead of exposing only raw point sizes.',\n 'Separates expressive large text from compact component text.',\n 'Fits product teams that need predictable component mapping.',\n 'Good reference for mobile-first systems with responsive scaling.',\n ],\n },\n {\n id: 'apple-hig',\n name: 'Apple Human Interface Guidelines',\n kind: 'official-design-system',\n source: 'Apple Human Interface Guidelines',\n sourceUrl: 'https://developer.apple.com/design/human-interface-guidelines/typography',\n summary:\n 'Platform-native text styles built around Dynamic Type, optical consistency, and accessibility scaling.',\n useCases: ['mobile-native', 'cross-platform-product', 'accessibility-first'],\n styles: ['system-native', 'adaptive-sans', 'accessibility-first'],\n keywords: [\n 'apple',\n 'dynamic type',\n 'sf pro',\n 'sf compact',\n 'new york',\n 'text styles',\n 'legibility',\n 'native',\n ],\n fonts: ['SF Pro', 'SF Compact', 'New York'],\n characteristics: [\n 'Use predefined text styles rather than hand-tuned one-off sizes.',\n 'Scales through content-size categories, including accessibility sizes.',\n 'Preserves platform familiarity across iPhone, iPad, watch, and Mac contexts.',\n 'Strong reference for systems where accessibility resizing is non-negotiable.',\n ],\n },\n {\n id: 'carbon',\n name: 'Carbon',\n kind: 'official-design-system',\n source: 'IBM Carbon Design System',\n sourceUrl: 'https://carbondesignsystem.com/elements/typography/type-sets/',\n summary:\n 'Enterprise typography system with separate productive and expressive type sets built on IBM Plex.',\n useCases: ['enterprise-saas', 'dashboard-analytics', 'marketing-brand'],\n styles: ['productive-ui', 'expressive-ui', 'enterprise-neutral'],\n keywords: [\n 'carbon',\n 'ibm plex',\n 'productive',\n 'expressive',\n 'enterprise',\n 'data-dense',\n 'tokenized',\n ],\n fonts: ['IBM Plex Sans', 'IBM Plex Serif', 'IBM Plex Mono'],\n characteristics: [\n 'Splits dense operational UI from richer storytelling surfaces.',\n 'Uses a coordinated superfamily for UI, prose, and code.',\n 'Balances scale discipline with room for brand expression.',\n 'Good reference when one product needs both admin and marketing modes.',\n ],\n },\n {\n id: 'fluent-2',\n name: 'Fluent 2',\n kind: 'official-design-system',\n source: 'Microsoft Fluent 2',\n sourceUrl: 'https://fluent2.microsoft.design/typography',\n summary:\n 'Numeric type ramp for broad Microsoft product surfaces with variable-font support and practical legibility.',\n useCases: ['enterprise-saas', 'cross-platform-product', 'productivity-suite'],\n styles: ['humanist-ui', 'systematic-ui', 'enterprise-neutral'],\n keywords: [\n 'fluent-2',\n 'microsoft',\n 'segoe',\n 'numeric ramp',\n '20-28',\n 'variable font',\n 'productivity',\n ],\n fonts: ['Segoe UI Variable', 'Segoe UI'],\n characteristics: [\n 'Pairs font size and line height in compact numeric tokens.',\n 'Optimized for long-running productivity sessions and dense interfaces.',\n 'Uses variable-font flexibility without making the system feel experimental.',\n 'Good reference for broad enterprise surfaces spanning web and native apps.',\n ],\n },\n {\n id: 'atlassian',\n name: 'Atlassian Design System',\n kind: 'official-design-system',\n source: 'Atlassian Design System',\n sourceUrl: 'https://atlassian.design/foundations/typography/',\n summary:\n 'Compact, rem-based product typography system tuned for collaboration UIs and developer-adjacent workflows.',\n useCases: ['saas-ui', 'developer-tools', 'documentation'],\n styles: ['functional-ui', 'humanist-ui', 'tokenized-scale'],\n keywords: [\n 'atlassian',\n 'atlassian sans',\n 'atlassian mono',\n 'rem scale',\n 'compact',\n 'b2b',\n 'collaboration',\n ],\n fonts: ['Atlassian Sans', 'Atlassian Mono'],\n characteristics: [\n 'Uses a modest scale progression that behaves well in dense product layouts.',\n 'Keeps a tight relationship between UI text, headings, and code snippets.',\n 'Strong for tools that mix prose, tables, and workflow controls.',\n 'Useful reference when a B2B UI needs clarity without blandness.',\n ],\n },\n {\n id: 'primer',\n name: 'GitHub Primer',\n kind: 'official-design-system',\n source: 'GitHub Primer',\n sourceUrl: 'https://primer.style/product/primitives/typography/',\n summary:\n 'Developer-oriented typography primitives balancing neutral UI text, readable documentation, and strong code presentation.',\n useCases: ['developer-tools', 'documentation', 'saas-ui'],\n styles: ['developer-centric', 'neutral-ui', 'mono-technical'],\n keywords: [\n 'primer',\n 'github',\n 'mona sans',\n 'hubot sans',\n 'documentation',\n 'code',\n 'developer workflow',\n ],\n fonts: ['Mona Sans', 'Hubot Sans', 'ui-monospace'],\n characteristics: [\n 'Treats prose, interface text, and code as separate but coordinated layers.',\n 'Works well for product surfaces with adjacent docs and markdown content.',\n 'Favors neutrality and rhythm over decorative hierarchy.',\n 'Useful reference for tooling products and technical platforms.',\n ],\n },\n {\n id: 'polaris',\n name: 'Shopify Polaris',\n kind: 'official-design-system',\n source: 'Shopify Polaris',\n sourceUrl: 'https://polaris.shopify.com/foundations/typography',\n summary:\n 'Commerce-admin typography centered on semantic text components, scannability, and merchant-task efficiency.',\n useCases: ['commerce-admin', 'saas-ui', 'dashboard-analytics'],\n styles: ['functional-ui', 'commerce-conversion', 'tokenized-scale'],\n keywords: [\n 'polaris',\n 'shopify',\n 'merchant',\n 'commerce',\n 'admin',\n 'scannable',\n 'semantic text',\n ],\n fonts: ['system-ui'],\n characteristics: [\n 'Prioritizes clarity in lists, settings, forms, and operational workflows.',\n 'Uses semantic text primitives over highly ornamental headline logic.',\n 'Pairs well with dense tables, prices, and status-heavy interfaces.',\n 'Useful reference for back-office and merchant tooling.',\n ],\n },\n {\n id: 'uswds',\n name: 'USWDS',\n kind: 'official-design-system',\n source: 'U.S. Web Design System',\n sourceUrl: 'https://designsystem.digital.gov/design-tokens/typesetting/',\n summary:\n 'Public-sector typesetting system with explicit guidance for measure, line height, and readable content structure.',\n useCases: ['government-service', 'forms-and-content', 'documentation'],\n styles: ['accessible-public-sector', 'plain-language', 'functional-ui'],\n keywords: [\n 'uswds',\n 'public sector',\n 'measure',\n 'line length',\n 'line height',\n 'forms',\n 'readability',\n ],\n fonts: ['Public Sans', 'Merriweather'],\n characteristics: [\n 'Encodes readability defaults directly into the system.',\n 'Optimized for trustworthy, low-drama service experiences.',\n 'Strong reference for high-stakes public content and transactional forms.',\n 'Useful when content clarity matters more than brand novelty.',\n ],\n },\n {\n id: 'govuk',\n name: 'GOV.UK Design System',\n kind: 'official-design-system',\n source: 'GOV.UK Design System',\n sourceUrl: 'https://design-system.service.gov.uk/styles/typography/',\n summary:\n 'Transaction-oriented service typography using a small set of robust styles and plain-language discipline.',\n useCases: ['government-service', 'forms-and-content', 'transactional-service'],\n styles: ['accessible-public-sector', 'plain-language', 'systematic-ui'],\n keywords: [\n 'govuk',\n 'service design',\n 'plain english',\n 'forms',\n 'accessible',\n 'trust',\n 'predictable',\n ],\n fonts: ['GDS Transport', 'Arial', 'sans-serif'],\n characteristics: [\n 'Limits style variance so services stay consistent across teams.',\n 'Optimized for completion, comprehension, and user confidence.',\n 'Strong reference for plain-spoken, high-trust transaction flows.',\n 'Useful when typography should feel dependable rather than branded.',\n ],\n },\n {\n id: 'bbc-gel',\n name: 'BBC GEL',\n kind: 'official-design-system',\n source: 'BBC GEL',\n sourceUrl: 'https://bbc.github.io/gel/foundations/typography/',\n summary:\n 'Editorial and broadcast typography system balancing responsive headlines, readable body text, and multi-platform clarity.',\n useCases: ['editorial-publishing', 'broadcast-news', 'marketing-brand'],\n styles: ['editorial-serif', 'broadcast-functional', 'responsive-hierarchy'],\n keywords: [\n 'bbc',\n 'gel',\n 'news',\n 'headline',\n 'editorial',\n 'responsive',\n 'broadcast',\n ],\n fonts: ['BBC Reith Serif', 'BBC Reith Sans'],\n characteristics: [\n 'Balances fast-scanning headlines with calm article reading rhythm.',\n 'Works across web, mobile, and living-room surfaces.',\n 'Useful reference for content-rich products that need authority and pace.',\n 'Good bridge between strict UI systems and classic editorial practice.',\n ],\n },\n {\n id: 'swiss-modernist-grid',\n name: 'Swiss Modernist Grid',\n kind: 'foundational-archetype',\n source: 'Fetchtype curated reference set',\n summary:\n 'Neutral grid-first typography with asymmetry, clear hierarchy, and disciplined grotesk usage.',\n useCases: ['branding', 'wayfinding', 'editorial-publishing', 'product-ui'],\n styles: ['neo-grotesk', 'grid-first', 'minimalist'],\n keywords: [\n 'swiss',\n 'international style',\n 'grid',\n 'helvetica',\n 'univers',\n 'asymmetry',\n 'objective',\n ],\n fonts: ['Helvetica', 'Univers', 'Akzidenz-Grotesk'],\n characteristics: [\n 'Uses scale, spacing, and alignment instead of ornament to create hierarchy.',\n 'Strong reference for institutional, cultural, and wayfinding systems.',\n 'Useful when a system needs to feel rational and timeless.',\n 'Best when paired with rigorous spacing and layout rules.',\n ],\n },\n {\n id: 'humanist-ui-sans',\n name: 'Humanist UI Sans',\n kind: 'foundational-archetype',\n source: 'Fetchtype curated reference set',\n summary:\n 'Friendly interface archetype built around open apertures, clear differentiation, and small-size legibility.',\n useCases: ['saas-ui', 'mobile-native', 'forms-and-content'],\n styles: ['humanist-ui', 'accessibility-first', 'functional-ui'],\n keywords: [\n 'humanist sans',\n 'open apertures',\n 'legible',\n 'friendly',\n 'ui',\n 'forms',\n 'clarity',\n ],\n fonts: ['Frutiger', 'Myriad', 'Source Sans', 'Segoe UI'],\n characteristics: [\n 'Keeps ambiguous glyphs distinct at small sizes.',\n 'Useful when a product should feel approachable without losing rigor.',\n 'Works well in forms, nav, settings, and public-service content.',\n 'Strong baseline archetype for accessible UI systems.',\n ],\n },\n {\n id: 'editorial-old-style-serif',\n name: 'Editorial Old-Style Serif',\n kind: 'foundational-archetype',\n source: 'Fetchtype curated reference set',\n summary:\n 'Long-form reading archetype with restrained serif hierarchy, moderate measure, and generous leading.',\n useCases: ['editorial-publishing', 'documentation', 'long-form-reading'],\n styles: ['editorial-serif', 'classic', 'bookish'],\n keywords: [\n 'editorial',\n 'old-style serif',\n 'reading',\n 'measure',\n 'leading',\n 'book',\n 'essay',\n ],\n fonts: ['Garamond', 'Georgia', 'Miller', 'Source Serif'],\n characteristics: [\n 'Optimizes sustained paragraph reading instead of interface density.',\n 'Usually pairs with a neutral sans for captions, UI, or metadata.',\n 'Strong reference for essays, docs, and magazine-like experiences.',\n 'Works best with explicit line-length rules.',\n ],\n },\n {\n id: 'neo-grotesk-corporate-ui',\n name: 'Neo-Grotesk Corporate UI',\n kind: 'foundational-archetype',\n source: 'Fetchtype curated reference set',\n summary:\n 'Dense corporate interface archetype using neutral sans forms, disciplined weights, and restrained personality.',\n useCases: ['enterprise-saas', 'dashboard-analytics', 'branding'],\n styles: ['neo-grotesk', 'corporate-neutral', 'data-dense'],\n keywords: [\n 'neo-grotesk',\n 'corporate',\n 'neutral',\n 'inter',\n 'helvetica',\n 'efficiency',\n 'dense',\n ],\n fonts: ['Helvetica Neue', 'Inter', \"Suisse Int'l\"],\n characteristics: [\n 'Supports tables, dashboards, and operational admin surfaces.',\n 'Signals competence and control rather than warmth or play.',\n 'Useful reference for financial, B2B, and analytics products.',\n 'Needs careful spacing to avoid feeling cold or cramped.',\n ],\n },\n {\n id: 'monospace-technical',\n name: 'Monospace Technical',\n kind: 'foundational-archetype',\n source: 'Fetchtype curated reference set',\n summary:\n 'Code-forward archetype emphasizing alignment, character distinction, and tabular rhythm for technical surfaces.',\n useCases: ['developer-tools', 'terminal-ui', 'documentation'],\n styles: ['mono-technical', 'data-dense', 'utilitarian'],\n keywords: [\n 'monospace',\n 'code',\n 'terminal',\n 'tabular',\n 'developer',\n 'diagnostics',\n 'logs',\n ],\n fonts: ['JetBrains Mono', 'IBM Plex Mono', 'SF Mono'],\n characteristics: [\n 'Strong for commands, logs, metrics, and fixed-width alignment.',\n 'Should usually be paired with a sans UI layer for comfort.',\n 'Useful reference for CLIs, IDEs, and observability tools.',\n 'Benefits from tabular figures and restrained hierarchy.',\n ],\n },\n {\n id: 'luxury-fashion-serif',\n name: 'Luxury Fashion Serif',\n kind: 'foundational-archetype',\n source: 'Fetchtype curated reference set',\n summary:\n 'High-contrast display-led archetype for premium branding, campaigns, and editorial hero moments.',\n useCases: ['marketing-brand', 'ecommerce-luxury', 'editorial-publishing'],\n styles: ['high-contrast-serif', 'luxury', 'display-led'],\n keywords: [\n 'luxury',\n 'didone',\n 'fashion',\n 'editorial',\n 'premium',\n 'hero',\n 'contrast',\n ],\n fonts: ['Didot', 'Canela', 'Bodoni'],\n characteristics: [\n 'Best at large sizes with sparse, controlled copy.',\n 'Needs a calmer support system for small text and utilities.',\n 'Useful reference for brand campaigns and premium product storytelling.',\n 'Poor fit for dense operational interfaces.',\n ],\n },\n {\n id: 'signage-wayfinding',\n name: 'Signage Wayfinding',\n kind: 'foundational-archetype',\n source: 'Fetchtype curated reference set',\n summary:\n 'Distance-legibility archetype for transport, kiosks, maps, and high-speed public navigation.',\n useCases: ['wayfinding', 'transport', 'public-service'],\n styles: ['wayfinding', 'high-legibility', 'functional'],\n keywords: [\n 'signage',\n 'wayfinding',\n 'transport',\n 'distance',\n 'legibility',\n 'maps',\n 'public',\n ],\n fonts: ['Frutiger', 'Transport', 'DIN'],\n characteristics: [\n 'Optimized for brief messages that must be understood quickly.',\n 'Useful reference for kiosks, event navigation, and public maps.',\n 'Pairs typography tightly with iconography and color coding.',\n 'Rewards short copy and strong contrast more than elaborate hierarchy.',\n ],\n },\n];\n\nexport const TYPOGRAPHY_PATTERNS: TypographyPattern[] = [\n {\n id: 'semantic-roles-over-raw-sizes',\n name: 'Semantic roles over raw sizes',\n summary:\n 'Mature systems name text by function such as display, title, body, or label instead of only exposing size tokens.',\n keywords: ['semantic roles', 'design tokens', 'component mapping', 'text styles'],\n evidence: ['material-3', 'apple-hig', 'atlassian', 'primer', 'polaris', 'govuk'],\n implications: [\n 'Choose names that still work after visual refreshes.',\n 'Map roles to product components before tuning the numeric scale.',\n 'Keep the public API semantic even if the underlying sizes change.',\n ],\n },\n {\n id: 'productive-and-expressive-modes',\n name: 'Productive and expressive modes',\n summary:\n 'Systems that span both utility UI and storytelling surfaces often split into calm operational text and more expressive display modes.',\n keywords: ['productive', 'expressive', 'campaign', 'dual mode'],\n evidence: ['carbon', 'bbc-gel', 'luxury-fashion-serif', 'neo-grotesk-corporate-ui'],\n implications: [\n 'Separate day-to-day UI tokens from campaign or editorial moments.',\n 'Keep body text conservative even when display text becomes dramatic.',\n 'Avoid forcing one scale to cover admin tables and hero banners equally well.',\n ],\n },\n {\n id: 'accessibility-through-defaults',\n name: 'Accessibility through defaults',\n summary:\n 'Strong systems make readable line height, predictable scaling, and comfort-oriented defaults automatic rather than optional.',\n keywords: ['accessibility', 'dynamic type', 'line height', 'comfortable defaults'],\n evidence: ['apple-hig', 'uswds', 'govuk', 'material-3', 'humanist-ui-sans'],\n implications: [\n 'Bake minimum readable line height and scaling into the base system.',\n 'Prefer fewer exceptional cases and more robust defaults.',\n 'Treat resizing, contrast, and line length as system behavior, not one-off fixes.',\n ],\n },\n {\n id: 'paired-superfamilies',\n name: 'Paired superfamilies',\n summary:\n 'Robust systems often use coordinated sans, serif, and mono families so prose, UI, and code feel related without becoming monotonous.',\n keywords: ['superfamily', 'sans serif mono', 'coordination', 'pairing'],\n evidence: ['carbon', 'atlassian', 'bbc-gel', 'primer', 'monospace-technical'],\n implications: [\n 'Prefer families that can cover more than one text context coherently.',\n 'Reserve mono for code, diagnostics, or numeric emphasis rather than everything.',\n 'Use family changes strategically to signal context shifts.',\n ],\n },\n {\n id: 'tabular-thinking-for-data',\n name: 'Tabular thinking for data surfaces',\n summary:\n 'Dashboard, commerce, and developer systems consistently optimize around aligned numbers, restrained widths, and strong scanning rhythm.',\n keywords: ['tabular figures', 'numbers', 'dashboard', 'scannable'],\n evidence: [\n 'fluent-2',\n 'carbon',\n 'primer',\n 'polaris',\n 'monospace-technical',\n 'neo-grotesk-corporate-ui',\n ],\n implications: [\n 'Support tabular figures and narrow-but-legible widths where data density matters.',\n 'Use mono sparingly as a precision layer for data and commands.',\n 'Keep hierarchy obvious even when the layout is compact.',\n ],\n },\n {\n id: 'limited-styles-for-transaction-flows',\n name: 'Limited styles for transaction flows',\n summary:\n 'Transaction-heavy services work best when the number of text styles is deliberately small and repeated consistently.',\n keywords: ['limited palette', 'forms', 'transactions', 'consistency'],\n evidence: ['govuk', 'polaris', 'atlassian', 'uswds'],\n implications: [\n 'Reduce the number of heading and helper-text variants in form-heavy products.',\n 'Favor repetition over novelty in operational interfaces.',\n 'Use content structure and spacing to do more of the hierarchy work.',\n ],\n },\n {\n id: 'responsive-display-conservative-body',\n name: 'Responsive display, conservative body',\n summary:\n 'Expressive systems allow broader movement in headlines while keeping body text comparatively stable for reading comfort.',\n keywords: ['headline flexibility', 'body stability', 'responsive display'],\n evidence: ['material-3', 'bbc-gel', 'luxury-fashion-serif'],\n implications: [\n 'Let marketing and editorial headlines flex more than body tokens.',\n 'Avoid aggressive body-size changes across breakpoints.',\n 'Protect reading rhythm even when the top of the page is dramatic.',\n ],\n },\n {\n id: 'trust-through-plainness',\n name: 'Trust through plainness',\n summary:\n 'High-stakes and public-service systems build trust with low-drama typography, plain language, and predictable spacing.',\n keywords: ['trust', 'plain language', 'public service', 'calm'],\n evidence: ['govuk', 'uswds', 'apple-hig', 'carbon'],\n implications: [\n 'Dial down decorative gestures in regulated or high-stakes contexts.',\n 'Choose familiarity and clarity before brand theatrics.',\n 'Use typography to reduce anxiety and cognitive load.',\n ],\n },\n {\n id: 'measure-and-reading-rhythm',\n name: 'Measure and reading rhythm',\n summary:\n 'Editorial and service-content systems repeatedly enforce line length and rhythm instead of treating them as layout afterthoughts.',\n keywords: ['measure', 'line length', 'reading rhythm', 'long-form'],\n evidence: ['uswds', 'govuk', 'editorial-old-style-serif', 'bbc-gel'],\n implications: [\n 'Define max prose width explicitly rather than leaving it to container width.',\n 'Tune line height and measure together, not independently.',\n 'Use paragraph rhythm as a first-class token concern for content products.',\n ],\n },\n {\n id: 'platform-familiarity',\n name: 'Platform familiarity',\n summary:\n 'Native and cross-platform systems gain usability by matching the typographic expectations of their host platforms.',\n keywords: ['native', 'platform conventions', 'familiarity', 'system fonts'],\n evidence: ['apple-hig', 'material-3', 'fluent-2'],\n implications: [\n 'Use platform defaults when matching host expectations matters more than brand differentiation.',\n 'Be cautious about imposing one cross-platform type voice on every surface.',\n 'Treat familiarity as a usability feature, not a compromise.',\n ],\n },\n];\n\nconst AVAILABLE_KINDS: TypographySystemKind[] = [\n 'official-design-system',\n 'foundational-archetype',\n];\n\ntype NumericRange = {\n min?: number;\n max?: number;\n};\n\ntype TypographyFamilyCategory = 'serif' | 'sans' | 'mono' | 'system';\n\ntype ReferenceValidationProfile = {\n bodySizePx?: NumericRange;\n bodyLineHeight?: NumericRange;\n proseWidthCh?: NumericRange;\n h1SizePx?: NumericRange;\n preferredScales?: DesignTokenSet['hierarchy']['scale'][];\n bodyCategories?: TypographyFamilyCategory[];\n headingCategories?: TypographyFamilyCategory[];\n expectsGrid?: boolean;\n requiredContexts?: TypographyContext[];\n signalContexts?: TypographyContext[];\n};\n\ntype ReferenceEvaluationResult = {\n evaluations: ReferenceEvaluation[];\n unknownReferences: string[];\n};\n\nconst REFERENCE_VALIDATION_PROFILES: Record<string, ReferenceValidationProfile> = {\n 'material-3': {\n bodySizePx: { min: 14, max: 17 },\n bodyLineHeight: { min: 1.35, max: 1.65 },\n h1SizePx: { min: 36, max: 64 },\n bodyCategories: ['sans', 'system'],\n headingCategories: ['sans', 'system'],\n requiredContexts: ['label', 'button'],\n },\n 'apple-hig': {\n bodySizePx: { min: 16, max: 19 },\n bodyLineHeight: { min: 1.35, max: 1.7 },\n bodyCategories: ['system', 'sans'],\n headingCategories: ['system', 'sans'],\n },\n carbon: {\n bodySizePx: { min: 14, max: 16 },\n bodyLineHeight: { min: 1.35, max: 1.65 },\n bodyCategories: ['sans'],\n headingCategories: ['sans'],\n expectsGrid: true,\n signalContexts: ['code', 'chart-label'],\n },\n 'fluent-2': {\n bodySizePx: { min: 12, max: 16 },\n bodyLineHeight: { min: 1.3, max: 1.55 },\n bodyCategories: ['sans', 'system'],\n headingCategories: ['sans', 'system'],\n signalContexts: ['chart-label', 'chart-axis'],\n },\n atlassian: {\n bodySizePx: { min: 14, max: 16 },\n bodyLineHeight: { min: 1.35, max: 1.55 },\n bodyCategories: ['sans'],\n headingCategories: ['sans'],\n signalContexts: ['code'],\n },\n primer: {\n bodySizePx: { min: 15, max: 17 },\n bodyLineHeight: { min: 1.45, max: 1.7 },\n proseWidthCh: { min: 55, max: 75 },\n bodyCategories: ['sans'],\n headingCategories: ['sans'],\n signalContexts: ['code'],\n },\n polaris: {\n bodySizePx: { min: 14, max: 16 },\n bodyLineHeight: { min: 1.35, max: 1.6 },\n bodyCategories: ['sans', 'system'],\n headingCategories: ['sans', 'system'],\n signalContexts: ['label', 'chart-label'],\n },\n uswds: {\n bodySizePx: { min: 16, max: 20 },\n bodyLineHeight: { min: 1.5, max: 1.8 },\n proseWidthCh: { min: 55, max: 75 },\n bodyCategories: ['sans'],\n headingCategories: ['sans', 'serif'],\n },\n govuk: {\n bodySizePx: { min: 16, max: 20 },\n bodyLineHeight: { min: 1.45, max: 1.75 },\n proseWidthCh: { min: 55, max: 75 },\n bodyCategories: ['sans'],\n headingCategories: ['sans'],\n requiredContexts: ['label', 'button', 'input'],\n },\n 'bbc-gel': {\n bodySizePx: { min: 16, max: 18 },\n bodyLineHeight: { min: 1.5, max: 1.8 },\n proseWidthCh: { min: 55, max: 75 },\n h1SizePx: { min: 36, max: 60 },\n bodyCategories: ['sans', 'serif'],\n headingCategories: ['sans', 'serif'],\n signalContexts: ['blockquote'],\n },\n 'swiss-modernist-grid': {\n bodySizePx: { min: 14, max: 17 },\n bodyLineHeight: { min: 1.35, max: 1.6 },\n bodyCategories: ['sans'],\n headingCategories: ['sans'],\n expectsGrid: true,\n },\n 'humanist-ui-sans': {\n bodySizePx: { min: 14, max: 17 },\n bodyLineHeight: { min: 1.45, max: 1.75 },\n bodyCategories: ['sans', 'system'],\n headingCategories: ['sans', 'system'],\n requiredContexts: ['label', 'input'],\n },\n 'editorial-old-style-serif': {\n bodySizePx: { min: 16, max: 19 },\n bodyLineHeight: { min: 1.55, max: 1.95 },\n proseWidthCh: { min: 55, max: 75 },\n bodyCategories: ['serif'],\n headingCategories: ['serif', 'sans'],\n signalContexts: ['blockquote'],\n },\n 'neo-grotesk-corporate-ui': {\n bodySizePx: { min: 14, max: 16 },\n bodyLineHeight: { min: 1.35, max: 1.55 },\n bodyCategories: ['sans'],\n headingCategories: ['sans'],\n expectsGrid: true,\n signalContexts: ['chart-label', 'chart-axis'],\n },\n 'monospace-technical': {\n bodySizePx: { min: 13, max: 16 },\n bodyLineHeight: { min: 1.4, max: 1.65 },\n bodyCategories: ['mono'],\n headingCategories: ['mono', 'sans'],\n requiredContexts: ['code'],\n },\n 'luxury-fashion-serif': {\n bodySizePx: { min: 15, max: 18 },\n bodyLineHeight: { min: 1.45, max: 1.8 },\n h1SizePx: { min: 48, max: 90 },\n bodyCategories: ['serif', 'sans'],\n headingCategories: ['serif'],\n },\n 'signage-wayfinding': {\n bodySizePx: { min: 15, max: 20 },\n bodyLineHeight: { min: 1.2, max: 1.5 },\n h1SizePx: { min: 32, max: 72 },\n bodyCategories: ['sans'],\n headingCategories: ['sans'],\n },\n};\n\nfunction normalize(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction matchesFilter(values: string[], filter: string | undefined): boolean {\n if (!filter) {\n return true;\n }\n\n const normalizedFilter = normalize(filter);\n return values.some((value) => {\n const normalizedValue = normalize(value);\n return normalizedValue === normalizedFilter || normalizedValue.includes(normalizedFilter);\n });\n}\n\nfunction matchesQuery(system: TypographySystemReference, query: string | undefined): boolean {\n if (!query) {\n return true;\n }\n\n const normalizedQuery = normalize(query);\n const haystack = [\n system.id,\n system.name,\n system.source,\n system.summary,\n ...system.useCases,\n ...system.styles,\n ...system.keywords,\n ...system.fonts,\n ...system.characteristics,\n ]\n .map((value) => normalize(value))\n .join(' ');\n\n return haystack.includes(normalizedQuery);\n}\n\nfunction uniqueSorted(values: string[]): string[] {\n return [...new Set(values)].sort((left, right) => left.localeCompare(right));\n}\n\nfunction toPx(value: string | number): number | null {\n if (typeof value === 'number') {\n return value;\n }\n\n const match = value.trim().match(/^(-?\\d+(?:\\.\\d+)?)(px|rem|em|ch)?$/);\n if (!match) {\n return null;\n }\n\n const numeric = Number(match[1]);\n const unit = match[2] ?? null;\n\n if (unit === null || unit === 'px') {\n return numeric;\n }\n\n if (unit === 'rem' || unit === 'em') {\n return numeric * 16;\n }\n\n return null;\n}\n\nfunction toCh(value: string): number | null {\n const match = value.trim().match(/^(-?\\d+(?:\\.\\d+)?)(ch)$/);\n return match ? Number(match[1]) : null;\n}\n\nfunction toUnitlessLineHeight(\n lineHeight: string | number,\n fontSize: string | number,\n): number | null {\n if (typeof lineHeight === 'number') {\n return lineHeight;\n }\n\n const lineHeightPx = toPx(lineHeight);\n const fontSizePx = toPx(fontSize);\n\n if (lineHeightPx !== null && fontSizePx !== null && fontSizePx > 0) {\n return lineHeightPx / fontSizePx;\n }\n\n const numeric = Number(lineHeight);\n return Number.isNaN(numeric) ? null : numeric;\n}\n\nfunction isWithinRange(value: number | null, range: NumericRange): boolean {\n if (value === null) {\n return false;\n }\n\n if (range.min !== undefined && value < range.min) {\n return false;\n }\n\n if (range.max !== undefined && value > range.max) {\n return false;\n }\n\n return true;\n}\n\nfunction describeRange(range: NumericRange, unit = ''): string {\n const min = range.min !== undefined ? `${range.min}${unit}` : undefined;\n const max = range.max !== undefined ? `${range.max}${unit}` : undefined;\n\n if (min && max) {\n return `${min}-${max}`;\n }\n\n return min ?? max ?? 'configured range';\n}\n\nfunction toFontFamilies(fontFamily: string | string[]): string[] {\n return Array.isArray(fontFamily)\n ? fontFamily\n : fontFamily.split(',').map((value) => value.trim());\n}\n\nfunction detectFamilyCategory(fontFamily: string | string[]): TypographyFamilyCategory {\n const normalizedFamilies = toFontFamilies(fontFamily).map((value) => value.toLowerCase());\n const joined = normalizedFamilies.join(' ');\n\n if (\n joined.includes('mono') ||\n joined.includes('monospace') ||\n joined.includes('jetbrains') ||\n joined.includes('menlo') ||\n joined.includes('consolas') ||\n joined.includes('courier')\n ) {\n return 'mono';\n }\n\n if (joined.includes('system-ui') || joined.includes('ui-sans') || joined.includes('sf pro')) {\n return 'system';\n }\n\n if (\n joined.includes('serif') ||\n joined.includes('georgia') ||\n joined.includes('garamond') ||\n joined.includes('baskerville') ||\n joined.includes('merriweather') ||\n joined.includes('times') ||\n joined.includes('didot') ||\n joined.includes('bodoni') ||\n joined.includes('canela') ||\n joined.includes('new york') ||\n joined.includes('iowan')\n ) {\n return 'serif';\n }\n\n return 'sans';\n}\n\nfunction summarizeEvaluation(\n system: TypographySystemReference,\n score: number,\n matched: string[],\n mismatched: string[],\n): string {\n const strongTraits = matched.slice(0, 2).join('; ') || 'no strong trait matches yet';\n const mainGap = mismatched[0] ?? 'no notable gaps';\n return `${system.name}: ${score}% alignment. Matches ${strongTraits}. Main gap: ${mainGap}.`;\n}\n\nexport function getTypographySystemById(id: string): TypographySystemReference | undefined {\n return TYPOGRAPHY_SYSTEMS.find((system) => system.id === id);\n}\n\nexport function getAllTypographySystemIds(): string[] {\n return TYPOGRAPHY_SYSTEMS.map((system) => system.id);\n}\n\nexport function evaluateTypographyReferences(\n tokenSet: DesignTokenSet,\n referenceIds: string[],\n): ReferenceEvaluationResult {\n const evaluations: ReferenceEvaluation[] = [];\n const unknownReferences: string[] = [];\n\n const bodyToken = tokenSet.typography.body;\n const headingToken = tokenSet.typography.heading;\n const bodyCategory = bodyToken ? detectFamilyCategory(bodyToken.fontFamily) : null;\n const headingCategory = headingToken ? detectFamilyCategory(headingToken.fontFamily) : null;\n const bodySizePx = bodyToken ? toPx(bodyToken.fontSize) : null;\n const bodyLineHeight = bodyToken\n ? toUnitlessLineHeight(bodyToken.lineHeight, bodyToken.fontSize)\n : null;\n const proseWidthCh = toCh(tokenSet.layout.maxWidth.prose);\n const h1SizePx = toPx(tokenSet.hierarchy.headings.h1.fontSize);\n const availableContexts = new Set(\n Object.entries(tokenSet.typography)\n .filter(([, value]) => value !== undefined)\n .map(([context]) => context as TypographyContext),\n );\n\n for (const referenceId of referenceIds) {\n const system = getTypographySystemById(referenceId);\n const profile = REFERENCE_VALIDATION_PROFILES[referenceId];\n\n if (!system || !profile) {\n unknownReferences.push(referenceId);\n continue;\n }\n\n const matched: string[] = [];\n const mismatched: string[] = [];\n let totalChecks = 0;\n let passedChecks = 0;\n\n if (profile.bodySizePx) {\n totalChecks += 1;\n if (isWithinRange(bodySizePx, profile.bodySizePx)) {\n matched.push(`body size sits in the ${describeRange(profile.bodySizePx, 'px')}px range`);\n passedChecks += 1;\n } else {\n mismatched.push(\n `body size should sit near ${describeRange(profile.bodySizePx, 'px')}px`,\n );\n }\n }\n\n if (profile.bodyLineHeight) {\n totalChecks += 1;\n if (isWithinRange(bodyLineHeight, profile.bodyLineHeight)) {\n matched.push(\n `body line-height fits the ${describeRange(profile.bodyLineHeight)} reference rhythm`,\n );\n passedChecks += 1;\n } else {\n mismatched.push(\n `body line-height should sit near ${describeRange(profile.bodyLineHeight)}`,\n );\n }\n }\n\n if (profile.proseWidthCh) {\n totalChecks += 1;\n if (isWithinRange(proseWidthCh, profile.proseWidthCh)) {\n matched.push(`prose width fits the ${describeRange(profile.proseWidthCh, 'ch')}ch range`);\n passedChecks += 1;\n } else {\n mismatched.push(\n `prose width should sit near ${describeRange(profile.proseWidthCh, 'ch')}ch`,\n );\n }\n }\n\n if (profile.h1SizePx) {\n totalChecks += 1;\n if (isWithinRange(h1SizePx, profile.h1SizePx)) {\n matched.push(`h1 size matches the ${describeRange(profile.h1SizePx, 'px')}px display band`);\n passedChecks += 1;\n } else {\n mismatched.push(`h1 size should sit near ${describeRange(profile.h1SizePx, 'px')}px`);\n }\n }\n\n if (profile.preferredScales) {\n totalChecks += 1;\n if (profile.preferredScales.includes(tokenSet.hierarchy.scale)) {\n matched.push(`scale \"${tokenSet.hierarchy.scale}\" matches the reference direction`);\n passedChecks += 1;\n } else {\n mismatched.push(\n `scale should favor ${profile.preferredScales.join(', ')} rather than \"${tokenSet.hierarchy.scale}\"`,\n );\n }\n }\n\n if (profile.bodyCategories && bodyCategory) {\n totalChecks += 1;\n if (profile.bodyCategories.includes(bodyCategory)) {\n matched.push(`body font category \"${bodyCategory}\" fits the reference`);\n passedChecks += 1;\n } else {\n mismatched.push(\n `body font should feel ${profile.bodyCategories.join(' or ')} rather than ${bodyCategory}`,\n );\n }\n }\n\n if (profile.headingCategories && headingCategory) {\n totalChecks += 1;\n if (profile.headingCategories.includes(headingCategory)) {\n matched.push(`heading font category \"${headingCategory}\" fits the reference`);\n passedChecks += 1;\n } else {\n mismatched.push(\n `heading font should feel ${profile.headingCategories.join(' or ')} rather than ${headingCategory}`,\n );\n }\n }\n\n if (profile.expectsGrid !== undefined) {\n totalChecks += 1;\n const hasGrid = tokenSet.layout.grid !== undefined;\n if (hasGrid === profile.expectsGrid) {\n matched.push(\n profile.expectsGrid\n ? 'grid tokens are present, which supports this reference'\n : 'grid tokens are omitted, which suits this reference',\n );\n passedChecks += 1;\n } else {\n mismatched.push(\n profile.expectsGrid\n ? 'a defined layout grid would strengthen this reference fit'\n : 'a lighter layout system would better fit this reference',\n );\n }\n }\n\n if (profile.requiredContexts) {\n totalChecks += 1;\n const missingContexts = profile.requiredContexts.filter(\n (context) => !availableContexts.has(context),\n );\n if (missingContexts.length === 0) {\n matched.push(`required contexts are present: ${profile.requiredContexts.join(', ')}`);\n passedChecks += 1;\n } else {\n mismatched.push(`missing reference contexts: ${missingContexts.join(', ')}`);\n }\n }\n\n if (profile.signalContexts) {\n totalChecks += 1;\n const hasSignalContext = profile.signalContexts.some((context) => availableContexts.has(context));\n if (hasSignalContext) {\n matched.push(`signal contexts support the reference: ${profile.signalContexts.join(', ')}`);\n passedChecks += 1;\n } else {\n mismatched.push(`add one of these contexts to better match the reference: ${profile.signalContexts.join(', ')}`);\n }\n }\n\n const score = totalChecks === 0 ? 0 : Math.round((passedChecks / totalChecks) * 100);\n\n evaluations.push({\n referenceId: system.id,\n referenceName: system.name,\n score,\n matched,\n mismatched,\n summary: summarizeEvaluation(system, score, matched, mismatched),\n });\n }\n\n return { evaluations, unknownReferences };\n}\n\nexport function findBestTypographyReferences(\n tokenSet: DesignTokenSet,\n limit = 3,\n): ReferenceEvaluation[] {\n const { evaluations } = evaluateTypographyReferences(tokenSet, getAllTypographySystemIds());\n return evaluations\n .sort((left, right) => right.score - left.score)\n .slice(0, limit);\n}\n\nexport function queryTypographySystems(\n options: TypographySystemsQuery = {},\n): TypographySystemsResult {\n const kind = options.kind ?? 'all';\n const systems = TYPOGRAPHY_SYSTEMS.filter((system) => {\n if (kind !== 'all' && system.kind !== kind) {\n return false;\n }\n\n if (!matchesFilter(system.useCases, options.useCase)) {\n return false;\n }\n\n if (!matchesFilter(system.styles, options.style)) {\n return false;\n }\n\n return matchesQuery(system, options.query);\n });\n\n const matchingSystemIds = new Set(systems.map((system) => system.id));\n const patterns =\n options.includePatterns === false\n ? []\n : TYPOGRAPHY_PATTERNS.filter((pattern) =>\n pattern.evidence.some((systemId) => matchingSystemIds.has(systemId)),\n );\n\n return {\n systems,\n patterns,\n availableUseCases: uniqueSorted(TYPOGRAPHY_SYSTEMS.flatMap((system) => system.useCases)),\n availableStyles: uniqueSorted(TYPOGRAPHY_SYSTEMS.flatMap((system) => system.styles)),\n availableKinds: AVAILABLE_KINDS,\n };\n}\n","import type { DesignTokenSet } from '@fetchtype/types';\n\ntype TailwindOptions = {\n prefix?: string;\n};\n\nfunction formatFontFamily(fontFamily: string | string[]): string[] {\n return Array.isArray(fontFamily) ? fontFamily : [fontFamily];\n}\n\nfunction indent(level: number): string {\n return ' '.repeat(level);\n}\n\nfunction quote(value: string): string {\n return `'${value}'`;\n}\n\nexport function generateTailwindConfig(\n tokenSet: DesignTokenSet,\n _options?: TailwindOptions,\n): string {\n const lines: string[] = ['// Generated by fetchtype', 'export default {'];\n const i1 = indent(1);\n const i2 = indent(2);\n const i3 = indent(3);\n\n // -- theme --\n lines.push(`${i1}theme: {`);\n\n // -- fontSize --\n lines.push(`${i2}fontSize: {`);\n for (const [context, token] of Object.entries(tokenSet.typography)) {\n const meta: string[] = [];\n meta.push(`lineHeight: ${quote(String(token.lineHeight))}`);\n meta.push(`fontWeight: ${quote(String(token.fontWeight))}`);\n if (token.letterSpacing) {\n meta.push(`letterSpacing: ${quote(token.letterSpacing)}`);\n }\n lines.push(\n `${i3}${quote(context)}: [${quote(String(token.fontSize))}, { ${meta.join(', ')} }],`,\n );\n }\n lines.push(`${i2}},`);\n\n // -- fontFamily --\n lines.push(`${i2}fontFamily: {`);\n const emittedFamilyContexts = new Set<string>();\n for (const [context, token] of Object.entries(tokenSet.typography)) {\n const familyKey = JSON.stringify(token.fontFamily);\n if (emittedFamilyContexts.has(familyKey)) {\n continue;\n }\n emittedFamilyContexts.add(familyKey);\n const families = formatFontFamily(token.fontFamily).map(quote).join(', ');\n lines.push(`${i3}${quote(context)}: [${families}],`);\n }\n lines.push(`${i2}},`);\n\n // -- colors --\n lines.push(`${i2}colors: {`);\n for (const [groupName, group] of Object.entries(tokenSet.color.light)) {\n for (const [tokenName, tokenValue] of Object.entries(group)) {\n lines.push(`${i3}${quote(`${groupName}-${tokenName}`)}: ${quote(tokenValue.value)},`);\n }\n }\n lines.push(`${i2}},`);\n\n // -- spacing --\n lines.push(`${i2}spacing: {`);\n for (const [name, value] of Object.entries(tokenSet.spacing.scale)) {\n lines.push(`${i3}${quote(name)}: ${quote(value)},`);\n }\n lines.push(`${i2}},`);\n\n // -- maxWidth --\n lines.push(`${i2}maxWidth: {`);\n for (const [name, value] of Object.entries(tokenSet.layout.maxWidth)) {\n lines.push(`${i3}${quote(name)}: ${quote(value)},`);\n }\n lines.push(`${i2}},`);\n\n // close theme and default export\n lines.push(`${i1}},`);\n lines.push('};');\n lines.push('');\n\n return lines.join('\\n');\n}\n","import type { DesignTokenSet, ColorTokens } from '@fetchtype/types';\n\ntype ShadcnOptions = {\n prefix?: string;\n};\n\nfunction parseHexColor(value: string): [number, number, number] | null {\n const normalized = value.trim();\n if (!/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(normalized)) {\n return null;\n }\n\n const hex =\n normalized.length === 4\n ? normalized\n .slice(1)\n .split('')\n .map((part) => `${part}${part}`)\n .join('')\n : normalized.slice(1);\n\n const red = Number.parseInt(hex.slice(0, 2), 16);\n const green = Number.parseInt(hex.slice(2, 4), 16);\n const blue = Number.parseInt(hex.slice(4, 6), 16);\n\n return [red, green, blue];\n}\n\nexport function hexToHslValues(hex: string): string | null {\n const rgb = parseHexColor(hex);\n if (!rgb) {\n return null;\n }\n\n const [r, g, b] = rgb;\n const rNorm = r / 255;\n const gNorm = g / 255;\n const bNorm = b / 255;\n\n const max = Math.max(rNorm, gNorm, bNorm);\n const min = Math.min(rNorm, gNorm, bNorm);\n const delta = max - min;\n\n const lightness = (max + min) / 2;\n\n if (delta === 0) {\n return `0 0% ${Math.round(lightness * 100)}%`;\n }\n\n const saturation = delta / (1 - Math.abs(2 * lightness - 1));\n\n let hue: number;\n if (max === rNorm) {\n hue = 60 * (((gNorm - bNorm) / delta) % 6);\n } else if (max === gNorm) {\n hue = 60 * ((bNorm - rNorm) / delta + 2);\n } else {\n hue = 60 * ((rNorm - gNorm) / delta + 4);\n }\n\n if (hue < 0) {\n hue += 360;\n }\n\n const h = Number(hue.toFixed(1));\n const s = Number((saturation * 100).toFixed(1));\n const l = Number((lightness * 100).toFixed(1));\n\n return `${h} ${s}% ${l}%`;\n}\n\ntype ColorMapping = {\n shadcnVar: string;\n group: keyof ColorTokens;\n token: string;\n};\n\nconst COLOR_MAPPINGS: ColorMapping[] = [\n { shadcnVar: 'background', group: 'background', token: 'primary' },\n { shadcnVar: 'foreground', group: 'text', token: 'primary' },\n { shadcnVar: 'primary', group: 'interactive', token: 'default' },\n { shadcnVar: 'primary-foreground', group: 'text', token: 'inverse' },\n { shadcnVar: 'secondary', group: 'background', token: 'secondary' },\n { shadcnVar: 'secondary-foreground', group: 'text', token: 'secondary' },\n { shadcnVar: 'muted', group: 'background', token: 'muted' },\n { shadcnVar: 'muted-foreground', group: 'text', token: 'muted' },\n { shadcnVar: 'accent', group: 'background', token: 'accent' },\n { shadcnVar: 'accent-foreground', group: 'text', token: 'accent' },\n { shadcnVar: 'border', group: 'border', token: 'default' },\n { shadcnVar: 'input', group: 'border', token: 'default' },\n { shadcnVar: 'ring', group: 'interactive', token: 'focus' },\n];\n\nfunction getColorValue(\n colors: ColorTokens,\n group: keyof ColorTokens,\n token: string,\n): string | null {\n const groupObj = colors[group] as Record<string, { value: string }>;\n const entry = groupObj[token];\n return entry ? entry.value : null;\n}\n\nfunction emitBlock(\n colors: ColorTokens,\n prefix: string | undefined,\n): string[] {\n const lines: string[] = [];\n\n for (const mapping of COLOR_MAPPINGS) {\n const hex = getColorValue(colors, mapping.group, mapping.token);\n if (!hex) {\n continue;\n }\n\n const hsl = hexToHslValues(hex);\n if (!hsl) {\n continue;\n }\n\n const varName = prefix ? `--${prefix}-${mapping.shadcnVar}` : `--${mapping.shadcnVar}`;\n lines.push(` ${varName}: ${hsl};`);\n }\n\n return lines;\n}\n\nexport function generateShadcnCss(\n tokenSet: DesignTokenSet,\n options?: ShadcnOptions,\n): string {\n const prefix = options?.prefix;\n const lines: string[] = [];\n\n // :root block (light mode)\n lines.push(':root {');\n lines.push(...emitBlock(tokenSet.color.light, prefix));\n\n // Add radius\n const radiusVar = prefix ? `--${prefix}-radius` : '--radius';\n lines.push(` ${radiusVar}: 0.5rem;`);\n lines.push('}');\n\n // .dark block\n lines.push('');\n lines.push('.dark {');\n lines.push(...emitBlock(tokenSet.color.dark, prefix));\n lines.push('}');\n lines.push('');\n\n return lines.join('\\n');\n}\n","import type { DesignTokenSet, ValidationReport } from '@fetchtype/types';\n\nfunction escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n}\n\nfunction formatFontFamily(fontFamily: string | string[]): string {\n return Array.isArray(fontFamily) ? fontFamily.join(', ') : fontFamily;\n}\n\nfunction severityBadge(severity: string): string {\n const colors: Record<string, string> = {\n error: '#dc2626',\n warning: '#d97706',\n info: '#2563eb',\n };\n const color = colors[severity] ?? '#6b7280';\n return `<span style=\"display:inline-block;padding:2px 8px;border-radius:4px;background:${color};color:#fff;font-size:0.75rem;font-weight:600;text-transform:uppercase;\">${escapeHtml(severity)}</span>`;\n}\n\nfunction contrastRatio(fg: string, bg: string): string {\n const parse = (hex: string): [number, number, number] | null => {\n const m = hex.trim().match(/^#(?:([0-9a-fA-F]{3})|([0-9a-fA-F]{6}))$/);\n if (!m) return null;\n const h = m[1]\n ? m[1].split('').map((c) => `${c}${c}`).join('')\n : m[2]!;\n return [\n Number.parseInt(h.slice(0, 2), 16),\n Number.parseInt(h.slice(2, 4), 16),\n Number.parseInt(h.slice(4, 6), 16),\n ];\n };\n\n const luminance = ([r, g, b]: [number, number, number]): number => {\n const channel = (c: number) => {\n const s = c / 255;\n return s <= 0.03928 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;\n };\n return 0.2126 * channel(r) + 0.7152 * channel(g) + 0.0722 * channel(b);\n };\n\n const fgRgb = parse(fg);\n const bgRgb = parse(bg);\n if (!fgRgb || !bgRgb) return 'N/A';\n\n const l1 = luminance(fgRgb);\n const l2 = luminance(bgRgb);\n const lighter = Math.max(l1, l2);\n const darker = Math.min(l1, l2);\n return ((lighter + 0.05) / (darker + 0.05)).toFixed(2);\n}\n\nfunction renderColorSwatch(\n label: string,\n value: string,\n bgColor: string,\n): string {\n const ratio = contrastRatio(value, bgColor);\n return `<div style=\"display:flex;align-items:center;gap:8px;margin:4px 0;\">\n <div style=\"width:32px;height:32px;border-radius:4px;background:${escapeHtml(value)};border:1px solid #d1d5db;flex-shrink:0;\"></div>\n <div style=\"font-size:0.8125rem;\">\n <strong>${escapeHtml(label)}</strong><br>\n <code>${escapeHtml(value)}</code>\n <span style=\"color:#6b7280;margin-left:4px;\">${ratio}:1</span>\n </div>\n </div>`;\n}\n\nfunction renderColorGroup(\n groupName: string,\n group: Record<string, { value: string }>,\n bgColor: string,\n): string {\n const swatches = Object.entries(group)\n .map(([name, token]) => renderColorSwatch(name, token.value, bgColor))\n .join('\\n');\n return `<div style=\"margin-bottom:16px;\">\n <h4 style=\"font-family:system-ui,sans-serif;font-size:0.875rem;font-weight:600;margin:0 0 8px 0;text-transform:capitalize;\">${escapeHtml(groupName)}</h4>\n ${swatches}\n </div>`;\n}\n\nfunction renderColorPalette(tokenSet: DesignTokenSet): string {\n const lightBg = tokenSet.color.light.background.primary.value;\n const darkBg = tokenSet.color.dark.background.primary.value;\n\n const lightGroups = Object.entries(tokenSet.color.light)\n .map(([name, group]) => renderColorGroup(name, group, lightBg))\n .join('\\n');\n\n const darkGroups = Object.entries(tokenSet.color.dark)\n .map(([name, group]) => renderColorGroup(name, group, darkBg))\n .join('\\n');\n\n return `<section style=\"margin-bottom:32px;\">\n <h2 style=\"font-family:system-ui,sans-serif;font-size:1.25rem;font-weight:700;margin:0 0 16px 0;border-bottom:1px solid #e5e7eb;padding-bottom:8px;\">Color Palette</h2>\n <div style=\"display:grid;grid-template-columns:1fr 1fr;gap:24px;\">\n <div style=\"padding:16px;border-radius:8px;background:${escapeHtml(lightBg)};border:1px solid #e5e7eb;\">\n <h3 style=\"font-family:system-ui,sans-serif;font-size:1rem;font-weight:600;margin:0 0 12px 0;color:${escapeHtml(tokenSet.color.light.text.primary.value)};\">Light Mode</h3>\n ${lightGroups}\n </div>\n <div style=\"padding:16px;border-radius:8px;background:${escapeHtml(darkBg)};border:1px solid #334155;\">\n <h3 style=\"font-family:system-ui,sans-serif;font-size:1rem;font-weight:600;margin:0 0 12px 0;color:${escapeHtml(tokenSet.color.dark.text.primary.value)};\">Dark Mode</h3>\n ${darkGroups}\n </div>\n </div>\n </section>`;\n}\n\nfunction renderHeadingSpecimens(tokenSet: DesignTokenSet): string {\n const levels = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const;\n const specimens = levels.map((level) => {\n const token = tokenSet.hierarchy.headings[level];\n const family = token.fontFamily ? formatFontFamily(token.fontFamily) : 'inherit';\n return `<${level} style=\"font-family:${escapeHtml(family)};font-size:${escapeHtml(String(token.fontSize))};font-weight:${token.fontWeight};line-height:${token.lineHeight};margin:8px 0;\">${level.toUpperCase()} — ${escapeHtml(String(token.fontSize))} / ${token.fontWeight} / ${token.lineHeight}</${level}>`;\n });\n\n return `<section style=\"margin-bottom:32px;\">\n <h2 style=\"font-family:system-ui,sans-serif;font-size:1.25rem;font-weight:700;margin:0 0 16px 0;border-bottom:1px solid #e5e7eb;padding-bottom:8px;\">Heading Hierarchy</h2>\n ${specimens.join('\\n')}\n </section>`;\n}\n\nfunction renderBodySpecimen(tokenSet: DesignTokenSet): string {\n const body = tokenSet.typography.body;\n if (!body) return '';\n\n const family = formatFontFamily(body.fontFamily);\n return `<section style=\"margin-bottom:32px;\">\n <h2 style=\"font-family:system-ui,sans-serif;font-size:1.25rem;font-weight:700;margin:0 0 16px 0;border-bottom:1px solid #e5e7eb;padding-bottom:8px;\">Body Text</h2>\n <p style=\"font-family:${escapeHtml(family)};font-size:${escapeHtml(body.fontSize)};font-weight:${body.fontWeight};line-height:${body.lineHeight};max-width:68ch;margin:0;\">\n The quick brown fox jumps over the lazy dog. Typography is the art and technique of arranging type to make written language legible, readable, and appealing when displayed. Good typography establishes a strong visual hierarchy, provides graphic balance, and sets the overall tone of the product.\n </p>\n <p style=\"font-family:system-ui,sans-serif;font-size:0.75rem;color:#6b7280;margin:8px 0 0 0;\">\n ${escapeHtml(family)} &middot; ${escapeHtml(body.fontSize)} &middot; weight ${body.fontWeight} &middot; line-height ${body.lineHeight}\n </p>\n </section>`;\n}\n\nfunction renderButtonSpecimen(tokenSet: DesignTokenSet): string {\n const btn = tokenSet.typography.button;\n if (!btn) return '';\n\n const family = formatFontFamily(btn.fontFamily);\n const interactive = tokenSet.color.light.interactive;\n return `<section style=\"margin-bottom:32px;\">\n <h2 style=\"font-family:system-ui,sans-serif;font-size:1.25rem;font-weight:700;margin:0 0 16px 0;border-bottom:1px solid #e5e7eb;padding-bottom:8px;\">Button Specimen</h2>\n <button style=\"font-family:${escapeHtml(family)};font-size:${escapeHtml(btn.fontSize)};font-weight:${btn.fontWeight};line-height:${btn.lineHeight};${btn.letterSpacing ? `letter-spacing:${escapeHtml(btn.letterSpacing)};` : ''}${btn.textTransform ? `text-transform:${escapeHtml(btn.textTransform)};` : ''}background:${escapeHtml(interactive.default.value)};color:#fff;border:none;border-radius:6px;padding:10px 20px;cursor:pointer;\">\n Button Label\n </button>\n <p style=\"font-family:system-ui,sans-serif;font-size:0.75rem;color:#6b7280;margin:8px 0 0 0;\">\n ${escapeHtml(family)} &middot; ${escapeHtml(btn.fontSize)} &middot; weight ${btn.fontWeight}\n </p>\n </section>`;\n}\n\nfunction renderSpacingScale(tokenSet: DesignTokenSet): string {\n const entries = Object.entries(tokenSet.spacing.scale);\n const blocks = entries.map(\n ([name, value]) =>\n `<div style=\"display:flex;align-items:center;gap:12px;margin:4px 0;\">\n <div style=\"width:${escapeHtml(value)};height:24px;background:#3b82f6;border-radius:3px;flex-shrink:0;\"></div>\n <span style=\"font-family:system-ui,sans-serif;font-size:0.8125rem;\"><strong>${escapeHtml(name)}</strong> &mdash; ${escapeHtml(value)}</span>\n </div>`,\n );\n\n return `<section style=\"margin-bottom:32px;\">\n <h2 style=\"font-family:system-ui,sans-serif;font-size:1.25rem;font-weight:700;margin:0 0 16px 0;border-bottom:1px solid #e5e7eb;padding-bottom:8px;\">Spacing Scale</h2>\n <p style=\"font-family:system-ui,sans-serif;font-size:0.8125rem;color:#6b7280;margin:0 0 12px 0;\">Base unit: ${escapeHtml(tokenSet.spacing.unit)}</p>\n ${blocks.join('\\n')}\n </section>`;\n}\n\nfunction renderDiagnostics(report: ValidationReport): string {\n if (report.diagnostics.length === 0) {\n return `<section style=\"margin-bottom:32px;\">\n <h2 style=\"font-family:system-ui,sans-serif;font-size:1.25rem;font-weight:700;margin:0 0 16px 0;border-bottom:1px solid #e5e7eb;padding-bottom:8px;\">Validation Results</h2>\n <p style=\"font-family:system-ui,sans-serif;font-size:0.875rem;color:#16a34a;\">All checks passed. No diagnostics.</p>\n </section>`;\n }\n\n const rows = report.diagnostics\n .map(\n (d) =>\n `<tr>\n <td style=\"padding:6px 12px;border-bottom:1px solid #e5e7eb;\">${severityBadge(d.severity)}</td>\n <td style=\"padding:6px 12px;border-bottom:1px solid #e5e7eb;font-family:ui-monospace,monospace;font-size:0.8125rem;\">${escapeHtml(d.rule)}</td>\n <td style=\"padding:6px 12px;border-bottom:1px solid #e5e7eb;font-family:ui-monospace,monospace;font-size:0.8125rem;\">${escapeHtml(d.path)}</td>\n <td style=\"padding:6px 12px;border-bottom:1px solid #e5e7eb;font-size:0.8125rem;\">${escapeHtml(d.message)}</td>\n </tr>`,\n )\n .join('\\n');\n\n const statusColor = report.pass ? '#16a34a' : '#dc2626';\n const statusText = report.pass ? 'Passed' : 'Failed';\n\n return `<section style=\"margin-bottom:32px;\">\n <h2 style=\"font-family:system-ui,sans-serif;font-size:1.25rem;font-weight:700;margin:0 0 16px 0;border-bottom:1px solid #e5e7eb;padding-bottom:8px;\">Validation Results</h2>\n <p style=\"font-family:system-ui,sans-serif;font-size:0.875rem;margin:0 0 12px 0;\">\n Status: <strong style=\"color:${statusColor};\">${statusText}</strong>\n &mdash; ${report.counts.error} errors, ${report.counts.warning} warnings, ${report.counts.info} info\n </p>\n <table style=\"width:100%;border-collapse:collapse;font-family:system-ui,sans-serif;\">\n <thead>\n <tr style=\"background:#f9fafb;\">\n <th style=\"padding:8px 12px;text-align:left;border-bottom:2px solid #e5e7eb;font-size:0.8125rem;\">Severity</th>\n <th style=\"padding:8px 12px;text-align:left;border-bottom:2px solid #e5e7eb;font-size:0.8125rem;\">Rule</th>\n <th style=\"padding:8px 12px;text-align:left;border-bottom:2px solid #e5e7eb;font-size:0.8125rem;\">Path</th>\n <th style=\"padding:8px 12px;text-align:left;border-bottom:2px solid #e5e7eb;font-size:0.8125rem;\">Message</th>\n </tr>\n </thead>\n <tbody>\n ${rows}\n </tbody>\n </table>\n </section>`;\n}\n\nfunction renderModeSwitcher(tokenSet: DesignTokenSet): string {\n const modeNames = Object.keys(tokenSet.modes);\n if (modeNames.length === 0) return '';\n\n const buttons = modeNames\n .map(\n (name) =>\n `<button data-mode=\"${escapeHtml(name)}\" style=\"font-family:system-ui,sans-serif;font-size:0.8125rem;padding:6px 14px;border:1px solid #d1d5db;border-radius:4px;background:#fff;cursor:pointer;margin:0 4px 4px 0;\">${escapeHtml(name)}</button>`,\n )\n .join('\\n');\n\n return `<section style=\"margin-bottom:32px;\">\n <h2 style=\"font-family:system-ui,sans-serif;font-size:1.25rem;font-weight:700;margin:0 0 16px 0;border-bottom:1px solid #e5e7eb;padding-bottom:8px;\">Modes</h2>\n <div style=\"display:flex;flex-wrap:wrap;gap:4px;\">\n ${buttons}\n </div>\n </section>`;\n}\n\nexport function generateHtmlReport(\n tokenSet: DesignTokenSet,\n report: ValidationReport,\n css: string,\n): string {\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Fetchtype Token Report</title>\n <style>\n${css}\n\n/* Report UI styles */\n*, *::before, *::after { box-sizing: border-box; }\nbody {\n font-family: system-ui, -apple-system, sans-serif;\n margin: 0;\n padding: 24px;\n background: #fff;\n color: #111827;\n line-height: 1.5;\n}\n.report-container {\n max-width: 960px;\n margin: 0 auto;\n}\n </style>\n</head>\n<body>\n <div class=\"report-container\">\n <header style=\"margin-bottom:32px;\">\n <h1 style=\"font-family:system-ui,sans-serif;font-size:1.75rem;font-weight:800;margin:0 0 4px 0;\">Fetchtype Token Report</h1>\n <p style=\"font-family:system-ui,sans-serif;font-size:0.875rem;color:#6b7280;margin:0;\">Generated ${escapeHtml(new Date().toISOString().split('T')[0]!)}</p>\n </header>\n\n ${renderHeadingSpecimens(tokenSet)}\n ${renderBodySpecimen(tokenSet)}\n ${renderButtonSpecimen(tokenSet)}\n ${renderColorPalette(tokenSet)}\n ${renderSpacingScale(tokenSet)}\n ${renderModeSwitcher(tokenSet)}\n ${renderDiagnostics(report)}\n </div>\n</body>\n</html>`;\n}\n","import { DesignTokenSetSchema, type DesignTokenSet } from '@fetchtype/types';\n\nimport { DEFAULT_TOKEN_SET } from './presets.js';\n\ntype W3cToken = {\n $type?: string;\n $value?: unknown;\n $description?: string;\n $extensions?: Record<string, unknown>;\n [key: string]: unknown;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n// ---------------------------------------------------------------------------\n// Helpers: flatten / unflatten nested objects with dot-path keys\n// ---------------------------------------------------------------------------\n\nfunction flattenW3c(\n node: Record<string, unknown>,\n prefix: string,\n result: Map<string, W3cToken>,\n inheritedType?: string,\n): void {\n const nodeType = (node['$type'] as string | undefined) ?? inheritedType;\n\n if (node['$value'] !== undefined) {\n result.set(prefix, {\n $type: nodeType,\n $value: node['$value'],\n ...(node['$description'] ? { $description: node['$description'] as string } : {}),\n });\n return;\n }\n\n for (const [key, value] of Object.entries(node)) {\n if (key.startsWith('$')) {\n continue;\n }\n\n if (isRecord(value)) {\n flattenW3c(value, prefix ? `${prefix}.${key}` : key, result, nodeType);\n }\n }\n}\n\nfunction setNestedValue(root: Record<string, unknown>, path: string[], value: unknown): void {\n let current = root;\n for (let i = 0; i < path.length - 1; i += 1) {\n const segment = path[i]!;\n if (!isRecord(current[segment])) {\n current[segment] = {};\n }\n current = current[segment] as Record<string, unknown>;\n }\n current[path[path.length - 1]!] = value;\n}\n\n// ---------------------------------------------------------------------------\n// Import: W3C → fetchtype\n// ---------------------------------------------------------------------------\n\nexport function importW3cTokens(w3cDocument: unknown): DesignTokenSet {\n if (!isRecord(w3cDocument)) {\n throw new Error('W3C token document must be a JSON object.');\n }\n\n const flat = new Map<string, W3cToken>();\n flattenW3c(w3cDocument, '', flat);\n\n // Start with a deep clone of DEFAULT_TOKEN_SET so every required field exists\n const base = structuredClone(DEFAULT_TOKEN_SET);\n\n // Merge discovered tokens into the base\n for (const [path, token] of flat) {\n const segments = path.split('.');\n const type = token.$type;\n const value = token.$value;\n\n if (type === 'color') {\n applyColorToken(base, segments, value);\n } else if (type === 'typography') {\n applyTypographyToken(base, segments, value);\n } else if (type === 'dimension') {\n applyDimensionToken(base, segments, value);\n } else if (type === 'fontFamily') {\n applyFontFamilyToken(base, segments, value);\n }\n }\n\n // Restore themes/modes from $extensions if present\n const extensions = (w3cDocument as Record<string, unknown>)['$extensions'];\n if (isRecord(extensions)) {\n const themes = extensions['com.fetchtype.themes'];\n if (Array.isArray(themes)) {\n base.themes = themes as DesignTokenSet['themes'];\n }\n const modes = extensions['com.fetchtype.modes'];\n if (isRecord(modes)) {\n base.modes = modes as DesignTokenSet['modes'];\n }\n }\n\n return DesignTokenSetSchema.parse(base);\n}\n\nfunction applyColorToken(\n base: DesignTokenSet,\n segments: string[],\n value: unknown,\n): void {\n // Expected paths: color.{dark.}?{group}.{name}\n if (segments[0] !== 'color' || segments.length < 3) {\n return;\n }\n\n let mode: 'light' | 'dark' = 'light';\n let groupStart = 1;\n\n if (segments[1] === 'dark') {\n mode = 'dark';\n groupStart = 2;\n } else if (segments[1] === 'light') {\n groupStart = 2;\n }\n\n const groupName = segments[groupStart];\n const tokenName = segments[groupStart + 1];\n\n if (!groupName || !tokenName) {\n return;\n }\n\n const group = (base.color[mode] as Record<string, Record<string, { value: string }>>)[groupName];\n if (group && tokenName in group) {\n group[tokenName] = { value: String(value) };\n }\n}\n\nfunction applyTypographyToken(\n base: DesignTokenSet,\n segments: string[],\n value: unknown,\n): void {\n // Expected path: typography.{context}\n if (segments[0] !== 'typography' || segments.length < 2) {\n return;\n }\n\n const context = segments[1]!;\n if (!isRecord(value)) {\n return;\n }\n\n const token: Record<string, unknown> = {};\n if (value['fontFamily'] !== undefined) {\n token['fontFamily'] = value['fontFamily'];\n }\n if (value['fontSize'] !== undefined) {\n token['fontSize'] = String(value['fontSize']);\n }\n if (value['fontWeight'] !== undefined) {\n token['fontWeight'] = value['fontWeight'];\n }\n if (value['lineHeight'] !== undefined) {\n token['lineHeight'] = value['lineHeight'];\n }\n if (value['letterSpacing'] !== undefined) {\n token['letterSpacing'] = String(value['letterSpacing']);\n }\n if (value['textTransform'] !== undefined) {\n token['textTransform'] = value['textTransform'];\n }\n if (value['textDecoration'] !== undefined) {\n token['textDecoration'] = value['textDecoration'];\n }\n\n // Only apply if we have at least fontFamily, fontSize, fontWeight, lineHeight\n if (\n token['fontFamily'] !== undefined &&\n token['fontSize'] !== undefined &&\n token['fontWeight'] !== undefined &&\n token['lineHeight'] !== undefined\n ) {\n (base.typography as Record<string, unknown>)[context] = token;\n }\n}\n\nfunction applyDimensionToken(\n base: DesignTokenSet,\n segments: string[],\n value: unknown,\n): void {\n if (segments.length < 2) {\n return;\n }\n\n const section = segments[0];\n const name = segments[segments.length - 1]!;\n\n if (section === 'spacing') {\n // spacing.{name}\n base.spacing.scale[name] = String(value);\n } else if (section === 'layout') {\n if (segments[1] === 'maxWidth' && segments[2]) {\n const key = segments[2] as keyof typeof base.layout.maxWidth;\n if (key in base.layout.maxWidth) {\n base.layout.maxWidth[key] = String(value);\n }\n } else if (segments[1] === 'breakpoints' && segments[2]) {\n base.layout.breakpoints[segments[2]] = String(value);\n }\n }\n}\n\nfunction applyFontFamilyToken(\n _base: DesignTokenSet,\n _segments: string[],\n _value: unknown,\n): void {\n // fontFamily tokens are informational; they typically get consumed\n // through typography tokens that reference them. No direct mapping needed.\n}\n\n// ---------------------------------------------------------------------------\n// Export: fetchtype → W3C\n// ---------------------------------------------------------------------------\n\nexport function exportW3cTokens(tokenSet: DesignTokenSet): Record<string, unknown> {\n const root: Record<string, unknown> = {};\n\n // -- Colors --\n for (const mode of ['light', 'dark'] as const) {\n const colorMode = tokenSet.color[mode];\n for (const [groupName, group] of Object.entries(colorMode)) {\n for (const [tokenName, tokenValue] of Object.entries(\n group as Record<string, { value: string; description?: string }>,\n )) {\n const w3cToken: Record<string, unknown> = {\n $type: 'color',\n $value: tokenValue.value,\n };\n if (tokenValue.description) {\n w3cToken['$description'] = tokenValue.description;\n }\n setNestedValue(root, ['color', mode, groupName, tokenName], w3cToken);\n }\n }\n }\n\n // -- Typography --\n for (const [context, token] of Object.entries(tokenSet.typography)) {\n const typValue: Record<string, unknown> = {\n fontFamily: token.fontFamily,\n fontSize: token.fontSize,\n fontWeight: token.fontWeight,\n lineHeight: token.lineHeight,\n };\n if (token.letterSpacing) {\n typValue['letterSpacing'] = token.letterSpacing;\n }\n if (token.textTransform) {\n typValue['textTransform'] = token.textTransform;\n }\n if (token.textDecoration) {\n typValue['textDecoration'] = token.textDecoration;\n }\n setNestedValue(root, ['typography', context], {\n $type: 'typography',\n $value: typValue,\n });\n }\n\n // -- Spacing --\n setNestedValue(root, ['spacing', 'unit'], {\n $type: 'dimension',\n $value: tokenSet.spacing.unit,\n });\n for (const [name, value] of Object.entries(tokenSet.spacing.scale)) {\n setNestedValue(root, ['spacing', name], {\n $type: 'dimension',\n $value: value,\n });\n }\n\n // -- Layout --\n for (const [name, value] of Object.entries(tokenSet.layout.maxWidth)) {\n setNestedValue(root, ['layout', 'maxWidth', name], {\n $type: 'dimension',\n $value: value,\n });\n }\n for (const [name, value] of Object.entries(tokenSet.layout.breakpoints)) {\n setNestedValue(root, ['layout', 'breakpoints', name], {\n $type: 'dimension',\n $value: value,\n });\n }\n if (tokenSet.layout.grid) {\n setNestedValue(root, ['layout', 'grid', 'columns'], {\n $type: 'number',\n $value: tokenSet.layout.grid.columns,\n });\n setNestedValue(root, ['layout', 'grid', 'gap'], {\n $type: 'dimension',\n $value: tokenSet.layout.grid.gap,\n });\n }\n\n // -- Hierarchy --\n setNestedValue(root, ['hierarchy', 'scale'], {\n $type: 'string',\n $value: tokenSet.hierarchy.scale,\n });\n setNestedValue(root, ['hierarchy', 'baseSize'], {\n $type: 'dimension',\n $value: tokenSet.hierarchy.baseSize,\n });\n for (const [level, heading] of Object.entries(tokenSet.hierarchy.headings)) {\n const headingValue: Record<string, unknown> = {\n fontSize: heading.fontSize,\n fontWeight: heading.fontWeight,\n lineHeight: heading.lineHeight,\n };\n if (heading.letterSpacing) {\n headingValue['letterSpacing'] = heading.letterSpacing;\n }\n if (heading.fontFamily) {\n headingValue['fontFamily'] = heading.fontFamily;\n }\n setNestedValue(root, ['hierarchy', 'headings', level], {\n $type: 'typography',\n $value: headingValue,\n });\n }\n\n // -- Emphasis --\n setNestedValue(root, ['hierarchy', 'emphasis', 'strong'], {\n $type: 'typography',\n $value: { fontWeight: tokenSet.hierarchy.emphasis.strong.fontWeight },\n });\n setNestedValue(root, ['hierarchy', 'emphasis', 'subtle'], {\n $type: 'typography',\n $value: {\n opacity: tokenSet.hierarchy.emphasis.subtle.opacity,\n ...(tokenSet.hierarchy.emphasis.subtle.fontSize\n ? { fontSize: tokenSet.hierarchy.emphasis.subtle.fontSize }\n : {}),\n },\n });\n\n // -- Themes & modes in $extensions --\n const extensions: Record<string, unknown> = {};\n if (tokenSet.themes.length > 0) {\n extensions['com.fetchtype.themes'] = tokenSet.themes;\n }\n if (Object.keys(tokenSet.modes).length > 0) {\n extensions['com.fetchtype.modes'] = tokenSet.modes;\n }\n if (Object.keys(extensions).length > 0) {\n root['$extensions'] = extensions;\n }\n\n return root;\n}\n","/**\n * Platform-aware fallback CSS generator.\n *\n * Computes @font-face declarations with metric overrides (ascent-override,\n * descent-override, line-gap-override, size-adjust) for each rendering target.\n * This eliminates CLS (Cumulative Layout Shift) during font loading.\n */\n\nimport type { FontEntry, FontMetrics, RenderingTarget, FallbackTarget } from '@fetchtype/types';\n\n// ---------------------------------------------------------------------------\n// System font metrics (extracted from actual font files)\n// ---------------------------------------------------------------------------\n\n/** Metrics for system fonts used as fallbacks on each rendering target. */\nexport const SYSTEM_FALLBACK_METRICS: Record<\n RenderingTarget,\n Record<'sans-serif' | 'serif' | 'monospace', { font: string; localNames: string[]; metrics: FontMetrics }>\n> = {\n apple: {\n 'sans-serif': {\n font: 'Helvetica Neue',\n localNames: ['Helvetica Neue'],\n metrics: {\n unitsPerEm: 1000, ascent: 952, descent: -213, lineGap: 28,\n xHeight: 517, capHeight: 714, useTypoMetrics: false,\n hheaAscent: 952, hheaDescent: -213, winAscent: 975, winDescent: 217,\n },\n },\n serif: {\n font: 'Georgia',\n localNames: ['Georgia'],\n metrics: {\n unitsPerEm: 2048, ascent: 1878, descent: -449, lineGap: 0,\n xHeight: 986, capHeight: 1419, useTypoMetrics: true,\n hheaAscent: 1878, hheaDescent: -449, winAscent: 1878, winDescent: 449,\n },\n },\n monospace: {\n font: 'Menlo',\n localNames: ['Menlo'],\n metrics: {\n unitsPerEm: 2048, ascent: 1901, descent: -483, lineGap: 0,\n xHeight: 1120, capHeight: 1493, useTypoMetrics: true,\n hheaAscent: 1901, hheaDescent: -483, winAscent: 1901, winDescent: 483,\n },\n },\n },\n windows: {\n 'sans-serif': {\n font: 'Segoe UI',\n localNames: ['Segoe UI Variable', 'Segoe UI'],\n metrics: {\n unitsPerEm: 2048, ascent: 2210, descent: -514, lineGap: 0,\n xHeight: 1024, capHeight: 1434, useTypoMetrics: true,\n hheaAscent: 2210, hheaDescent: -514, winAscent: 2210, winDescent: 514,\n },\n },\n serif: {\n font: 'Times New Roman',\n localNames: ['Times New Roman'],\n metrics: {\n unitsPerEm: 2048, ascent: 1825, descent: -443, lineGap: 87,\n xHeight: 916, capHeight: 1356, useTypoMetrics: false,\n hheaAscent: 1825, hheaDescent: -443, winAscent: 2000, winDescent: 454,\n },\n },\n monospace: {\n font: 'Consolas',\n localNames: ['Cascadia Mono', 'Consolas'],\n metrics: {\n unitsPerEm: 2048, ascent: 1884, descent: -514, lineGap: 0,\n xHeight: 1064, capHeight: 1462, useTypoMetrics: true,\n hheaAscent: 1884, hheaDescent: -514, winAscent: 2048, winDescent: 514,\n },\n },\n },\n android: {\n 'sans-serif': {\n font: 'Roboto',\n localNames: ['Roboto'],\n metrics: {\n unitsPerEm: 2048, ascent: 1900, descent: -500, lineGap: 0,\n xHeight: 1082, capHeight: 1456, useTypoMetrics: true,\n hheaAscent: 1900, hheaDescent: -500, winAscent: 1946, winDescent: 512,\n },\n },\n serif: {\n font: 'Noto Serif',\n localNames: ['Noto Serif'],\n metrics: {\n unitsPerEm: 1000, ascent: 1069, descent: -293, lineGap: 0,\n xHeight: null, capHeight: null, useTypoMetrics: true,\n hheaAscent: 1069, hheaDescent: -293, winAscent: 1069, winDescent: 293,\n },\n },\n monospace: {\n font: 'Roboto Mono',\n localNames: ['Roboto Mono'],\n metrics: {\n unitsPerEm: 2048, ascent: 2146, descent: -555, lineGap: 0,\n xHeight: null, capHeight: null, useTypoMetrics: true,\n hheaAscent: 2146, hheaDescent: -555, winAscent: 2146, winDescent: 555,\n },\n },\n },\n linux: {\n 'sans-serif': {\n font: 'Noto Sans',\n localNames: ['Noto Sans'],\n metrics: {\n unitsPerEm: 1000, ascent: 1069, descent: -293, lineGap: 0,\n xHeight: 536, capHeight: 714, useTypoMetrics: true,\n hheaAscent: 1069, hheaDescent: -293, winAscent: 1069, winDescent: 293,\n },\n },\n serif: {\n font: 'Noto Serif',\n localNames: ['Noto Serif'],\n metrics: {\n unitsPerEm: 1000, ascent: 1069, descent: -293, lineGap: 0,\n xHeight: null, capHeight: null, useTypoMetrics: true,\n hheaAscent: 1069, hheaDescent: -293, winAscent: 1069, winDescent: 293,\n },\n },\n monospace: {\n font: 'Noto Sans Mono',\n localNames: ['Noto Sans Mono'],\n metrics: {\n unitsPerEm: 1000, ascent: 1069, descent: -293, lineGap: 0,\n xHeight: null, capHeight: null, useTypoMetrics: true,\n hheaAscent: 1069, hheaDescent: -293, winAscent: 1069, winDescent: 293,\n },\n },\n },\n universal: {\n 'sans-serif': {\n font: 'Arial',\n localNames: ['Arial'],\n metrics: {\n unitsPerEm: 2048, ascent: 1854, descent: -434, lineGap: 67,\n xHeight: 1062, capHeight: 1467, useTypoMetrics: false,\n hheaAscent: 1854, hheaDescent: -434, winAscent: 2007, winDescent: 435,\n },\n },\n serif: {\n font: 'Times New Roman',\n localNames: ['Times New Roman'],\n metrics: {\n unitsPerEm: 2048, ascent: 1825, descent: -443, lineGap: 87,\n xHeight: 916, capHeight: 1356, useTypoMetrics: false,\n hheaAscent: 1825, hheaDescent: -443, winAscent: 2000, winDescent: 454,\n },\n },\n monospace: {\n font: 'Courier New',\n localNames: ['Courier New'],\n metrics: {\n unitsPerEm: 2048, ascent: 1705, descent: -615, lineGap: 0,\n xHeight: 846, capHeight: 1297, useTypoMetrics: true,\n hheaAscent: 1705, hheaDescent: -615, winAscent: 1705, winDescent: 615,\n },\n },\n },\n};\n\n// ---------------------------------------------------------------------------\n// Override computation\n// ---------------------------------------------------------------------------\n\n/**\n * Get the effective ascent/descent/lineGap for a font, considering\n * the useTypoMetrics flag and the rendering target.\n */\nfunction getEffectiveMetrics(\n m: FontMetrics,\n target: RenderingTarget,\n): { ascent: number; descent: number; lineGap: number; unitsPerEm: number } {\n // When USE_TYPO_METRICS is set, all platforms use sTypo values\n if (m.useTypoMetrics) {\n return { ascent: m.ascent, descent: m.descent, lineGap: m.lineGap, unitsPerEm: m.unitsPerEm };\n }\n\n // When not set, macOS/iOS use hhea, Windows uses win metrics\n if (target === 'apple') {\n return {\n ascent: m.hheaAscent ?? m.ascent,\n descent: m.hheaDescent ?? m.descent,\n lineGap: m.lineGap,\n unitsPerEm: m.unitsPerEm,\n };\n }\n\n if (target === 'windows') {\n return {\n ascent: m.winAscent ?? m.ascent,\n descent: -(m.winDescent ?? Math.abs(m.descent)),\n lineGap: 0,\n unitsPerEm: m.unitsPerEm,\n };\n }\n\n // Android/Linux/universal — use typo values as best guess\n return { ascent: m.ascent, descent: m.descent, lineGap: m.lineGap, unitsPerEm: m.unitsPerEm };\n}\n\n/** Format a number as a CSS percentage with 2 decimal places. */\nfunction pct(value: number): string {\n return `${(value * 100).toFixed(2)}%`;\n}\n\nexport type CSSOverrides = {\n ascentOverride: string;\n descentOverride: string;\n lineGapOverride: string;\n sizeAdjust: string;\n};\n\n/**\n * Compute fallback metric overrides for a target font against a fallback font.\n *\n * The overrides make the fallback font occupy the same vertical space as the\n * target font, eliminating CLS when the web font loads.\n */\nexport function computeFallbackOverrides(\n targetMetrics: FontMetrics,\n fallbackMetrics: FontMetrics,\n target: RenderingTarget,\n): CSSOverrides {\n const t = getEffectiveMetrics(targetMetrics, target);\n const f = getEffectiveMetrics(fallbackMetrics, target);\n\n // Vertical overrides are expressed as percentages of the used font size.\n // They tell the browser what metrics to apply to the fallback font so\n // its line box matches the target font.\n const ascentOverride = t.ascent / t.unitsPerEm;\n const descentOverride = Math.abs(t.descent) / t.unitsPerEm;\n const lineGapOverride = t.lineGap / t.unitsPerEm;\n\n // size-adjust corrects horizontal advance width differences.\n // Without avgCharWidth data, we approximate using ascent+|descent| ratio.\n const targetTotal = t.ascent + Math.abs(t.descent) + t.lineGap;\n const fallbackTotal = f.ascent + Math.abs(f.descent) + f.lineGap;\n const sizeAdjust = (fallbackTotal / f.unitsPerEm) / (targetTotal / t.unitsPerEm);\n\n return {\n ascentOverride: pct(ascentOverride),\n descentOverride: pct(descentOverride),\n lineGapOverride: pct(lineGapOverride),\n sizeAdjust: pct(sizeAdjust),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Fallback target computation\n// ---------------------------------------------------------------------------\n\nfunction categoryToGeneric(category: string): 'sans-serif' | 'serif' | 'monospace' {\n if (category === 'monospace') return 'monospace';\n if (category === 'serif') return 'serif';\n return 'sans-serif';\n}\n\nconst TARGETS: RenderingTarget[] = ['windows', 'apple', 'android', 'linux', 'universal'];\n\n/**\n * Compute fallback targets for a font entry against all 5 rendering targets.\n */\nexport function computeFallbackTargets(entry: FontEntry): FallbackTarget[] {\n const generic = categoryToGeneric(entry.category);\n\n return TARGETS.map(target => {\n const fb = SYSTEM_FALLBACK_METRICS[target][generic];\n const overrides = computeFallbackOverrides(entry.metrics, fb.metrics, target);\n\n return {\n target,\n fallbackFont: fb.font,\n localNames: fb.localNames,\n overrides,\n };\n });\n}\n\n/**\n * Check if a font requires platform-specific fallback splits.\n *\n * When USE_TYPO_METRICS is set (~90% of fonts), all platforms use the same\n * metric tables and the vertical overrides are identical. Only size-adjust varies.\n */\nexport function requiresPlatformSplit(metrics: FontMetrics): boolean {\n return !metrics.useTypoMetrics;\n}\n\n// ---------------------------------------------------------------------------\n// CSS generation\n// ---------------------------------------------------------------------------\n\nexport type FallbackCSSOptions = {\n /** Wrap in @supports (overflow-anchor: auto) to exclude Safari */\n safariWrap?: boolean;\n /** Use compact single @font-face instead of per-target */\n compact?: boolean;\n /** Include font-family stack declaration */\n includeStack?: boolean;\n /** CSS selector for the font-family declaration */\n selector?: string;\n};\n\n/**\n * Generate platform-aware fallback CSS for a font entry.\n *\n * Returns the complete CSS with per-rendering-target @font-face blocks\n * and optional font-family stack.\n */\nexport function generateFallbackCSS(entry: FontEntry, options: FallbackCSSOptions = {}): string {\n const {\n safariWrap = true,\n compact = false,\n includeStack = true,\n selector = 'body',\n } = options;\n\n const targets = entry.fallback.targets.length > 0\n ? entry.fallback.targets\n : computeFallbackTargets(entry);\n\n const generic = categoryToGeneric(entry.category);\n const lines: string[] = [];\n\n if (compact && !requiresPlatformSplit(entry.metrics)) {\n // Compact mode: single @font-face with combined local() sources\n const allLocalNames = targets.flatMap(t => t.localNames);\n const universalTarget = targets.find(t => t.target === 'universal') ?? targets[0]!;\n const localSrc = allLocalNames.map(n => `local(\"${n}\")`).join(', ');\n\n const block = [\n `@font-face {`,\n ` font-family: \"${entry.family} Fallback\";`,\n ` src: ${localSrc};`,\n ` ascent-override: ${universalTarget.overrides.ascentOverride};`,\n ` descent-override: ${universalTarget.overrides.descentOverride};`,\n ` line-gap-override: ${universalTarget.overrides.lineGapOverride};`,\n ` size-adjust: ${universalTarget.overrides.sizeAdjust};`,\n `}`,\n ].join('\\n');\n\n if (safariWrap) {\n lines.push(`/* Safari exclusion — overflow-anchor is not supported in Safari */`);\n lines.push(`@supports (overflow-anchor: auto) {`);\n lines.push(block.split('\\n').map(l => ` ${l}`).join('\\n'));\n lines.push(`}`);\n } else {\n lines.push(block);\n }\n } else {\n // Full mode: per-target @font-face blocks\n const targetBlocks = targets.map(t => {\n const targetLabel = t.target.charAt(0).toUpperCase() + t.target.slice(1);\n const fallbackName = t.target === 'universal'\n ? `${entry.family} Fallback`\n : `${entry.family} Fallback ${targetLabel}`;\n const localSrc = t.localNames.map(n => `local(\"${n}\")`).join(', ');\n\n return [\n `/* ${targetLabel} target — ${t.fallbackFont} */`,\n `@font-face {`,\n ` font-family: \"${fallbackName}\";`,\n ` src: ${localSrc};`,\n ` ascent-override: ${t.overrides.ascentOverride};`,\n ` descent-override: ${t.overrides.descentOverride};`,\n ` line-gap-override: ${t.overrides.lineGapOverride};`,\n ` size-adjust: ${t.overrides.sizeAdjust};`,\n `}`,\n ].join('\\n');\n });\n\n if (safariWrap) {\n lines.push(`/* Generated by fetchtype — platform-aware fallback CSS */`);\n lines.push(`/* Safari exclusion — overflow-anchor is not supported in Safari */`);\n lines.push(`@supports (overflow-anchor: auto) {`);\n for (const block of targetBlocks) {\n lines.push(block.split('\\n').map(l => ` ${l}`).join('\\n'));\n lines.push('');\n }\n lines.push(`}`);\n } else {\n lines.push(`/* Generated by fetchtype — platform-aware fallback CSS */`);\n for (const block of targetBlocks) {\n lines.push(block);\n lines.push('');\n }\n }\n }\n\n if (includeStack) {\n lines.push('');\n const fallbackNames = compact\n ? [`\"${entry.family} Fallback\"`]\n : targets\n .filter(t => t.target !== 'universal')\n .map(t => `\"${entry.family} Fallback ${t.target.charAt(0).toUpperCase() + t.target.slice(1)}\"`)\n .concat([`\"${entry.family} Fallback\"`]);\n\n lines.push(`${selector} {`);\n lines.push(` font-family:`);\n lines.push(` ${entry.family},`);\n for (let i = 0; i < fallbackNames.length; i++) {\n lines.push(` ${fallbackNames[i]},`);\n }\n lines.push(` ${generic};`);\n lines.push(`}`);\n }\n\n return lines.join('\\n');\n}\n","/**\n * Font Build Pipeline — Phase 3 (F055-F057)\n *\n * Downloads, processes, and generates production-ready font assets from\n * Google Fonts, including WOFF2 files, @font-face CSS, fallback CSS,\n * preload tags, and a manifest.\n */\n\nimport { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\n\nimport { resolveFont } from '@fetchtype/fonts';\nimport type { FontEntry } from '@fetchtype/types';\n\nimport { generateFallbackCSS as generateFallbackCSSFromCore } from './fallback.js';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type PrepareOptions = {\n fontId: string;\n weights?: number[];\n subsets?: string[];\n outputDir?: string;\n formats?: ('woff2' | 'woff')[];\n fontDisplay?: 'swap' | 'block' | 'fallback' | 'optional' | 'auto';\n generateFallbacks?: boolean;\n performanceBudget?: number;\n tokenFile?: string;\n};\n\nexport type PrepareManifest = {\n fontId: string;\n family: string;\n version: string;\n generatedAt: string;\n files: Array<{\n path: string;\n weight: number;\n style: 'normal' | 'italic';\n subset: string;\n format: 'woff2' | 'woff';\n size: number;\n }>;\n css: {\n fontFace: string;\n fallback: string;\n preload: string;\n };\n performance: {\n totalSize: number;\n budgetUsed: number;\n budgetExceeded: boolean;\n budgetLimit: number;\n };\n preloadTags: string[];\n tokenPatch?: object;\n};\n\n// ---------------------------------------------------------------------------\n// Internal types for parsed CSS2 API font faces\n// ---------------------------------------------------------------------------\n\ntype ParsedFontFace = {\n subset: string;\n weight: number;\n style: 'normal' | 'italic';\n src: string;\n unicodeRange: string;\n};\n\n// ---------------------------------------------------------------------------\n// Google Fonts CSS2 API helpers\n// ---------------------------------------------------------------------------\n\nconst USER_AGENT =\n 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';\n\n/**\n * Fetch the Google Fonts CSS2 response for a given family / weights.\n * Uses a desktop UA so we always get WOFF2.\n */\nasync function fetchGoogleFontsCSS(\n family: string,\n weights: number[],\n style: 'normal' | 'italic',\n): Promise<string> {\n const familyEncoded = encodeURIComponent(family);\n let url: string;\n\n if (style === 'italic') {\n // For italic, use ital,wght axis with 1,weight format\n const weightParam = weights.map((w) => `0,${w};1,${w}`).join(';');\n url = `https://fonts.googleapis.com/css2?family=${familyEncoded}:ital,wght@${weightParam}&display=swap`;\n } else {\n // For normal, just use wght axis with weight values\n const weightParam = weights.join(';');\n url = `https://fonts.googleapis.com/css2?family=${familyEncoded}:wght@${weightParam}&display=swap`;\n }\n\n const response = await fetch(url, {\n headers: { 'User-Agent': USER_AGENT },\n });\n\n if (!response.ok) {\n throw new Error(\n `Google Fonts API returned ${response.status} for \"${family}\"`,\n );\n }\n\n return response.text();\n}\n\n/**\n * Parse the CSS2 API response into structured font face descriptors.\n * Each @font-face block is preceded by a subset comment like \"/* latin *\\/\".\n */\nexport function parseGoogleFontsCSS(css: string): ParsedFontFace[] {\n const results: ParsedFontFace[] = [];\n\n const blockPattern = /\\/\\*\\s*([^*]+?)\\s*\\*\\/\\s*@font-face\\s*\\{([^}]+)\\}/g;\n let match: RegExpExecArray | null;\n\n while ((match = blockPattern.exec(css)) !== null) {\n const subset = match[1]?.trim() ?? 'latin';\n const body = match[2] ?? '';\n\n const weightMatch = body.match(/font-weight:\\s*(\\d+)/);\n const weight = weightMatch ? Number(weightMatch[1]) : 400;\n\n const styleMatch = body.match(/font-style:\\s*(normal|italic)/);\n const style: 'normal' | 'italic' =\n styleMatch?.[1] === 'italic' ? 'italic' : 'normal';\n\n const srcMatch = body.match(/src:\\s*url\\(([^)]+)\\)\\s*format\\('woff2'\\)/);\n if (!srcMatch) continue;\n const src = srcMatch[1]?.trim() ?? '';\n\n const rangeMatch = body.match(/unicode-range:\\s*([^;]+);/);\n const unicodeRange = rangeMatch?.[1]?.trim() ?? '';\n\n results.push({ subset, weight, style, src, unicodeRange });\n }\n\n return results;\n}\n\n/**\n * Download a file from a URL and return its content as bytes.\n */\nasync function downloadFile(url: string): Promise<Uint8Array> {\n const response = await fetch(url, {\n headers: { 'User-Agent': USER_AGENT },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to download ${url}: HTTP ${response.status}`);\n }\n\n const arrayBuffer = await response.arrayBuffer();\n return new Uint8Array(arrayBuffer);\n}\n\n/**\n * Build a safe filename for a font file.\n * Pattern: {family-kebab}-{subset}-{weight}-{style}.woff2\n */\nfunction buildFontFileName(\n family: string,\n subset: string,\n weight: number,\n style: 'normal' | 'italic',\n format: 'woff2' | 'woff',\n): string {\n const familySlug = family\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n const subsetSlug = subset.toLowerCase().replace(/[^a-z0-9]+/g, '-');\n return `${familySlug}-${subsetSlug}-${weight}-${style}.${format}`;\n}\n\n// ---------------------------------------------------------------------------\n// CSS generators (exported)\n// ---------------------------------------------------------------------------\n\n/**\n * Generate @font-face CSS from a PrepareManifest.\n */\nexport function generateFontFaceCSS(manifest: PrepareManifest): string {\n const lines: string[] = [\n '/* Generated by fetchtype — @font-face declarations */',\n ];\n\n for (const file of manifest.files) {\n const fileName = file.path.split('/').pop() ?? file.path;\n lines.push('');\n lines.push('@font-face {');\n lines.push(` font-family: '${manifest.family}';`);\n lines.push(` font-style: ${file.style};`);\n lines.push(` font-weight: ${file.weight};`);\n lines.push(` font-display: swap;`);\n lines.push(` src: url('./${fileName}') format('${file.format}');`);\n lines.push('}');\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Generate HTML preload tags from a PrepareManifest.\n */\nexport function generatePreloadTags(manifest: PrepareManifest): string {\n const lines: string[] = [\n '<!-- Generated by fetchtype — font preload tags -->',\n ];\n\n for (const tag of manifest.preloadTags) {\n lines.push(tag);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Generate fallback CSS for a font using the core fallback engine.\n */\nexport function generateFallbackCSS(\n fontId: string,\n _family: string,\n _category: string,\n): string {\n const entry = resolveFont(fontId);\n if (!entry) {\n return `/* fetchtype: fallback CSS unavailable — \"${fontId}\" not found in registry */`;\n }\n\n return generateFallbackCSSFromCore(entry, {\n safariWrap: true,\n compact: false,\n includeStack: true,\n selector: 'body',\n });\n}\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\nfunction buildPreloadTagsList(\n files: PrepareManifest['files'],\n primaryWeights: number[],\n primarySubset: string,\n): string[] {\n const criticalFiles = files.filter(\n (f) =>\n f.subset === primarySubset &&\n primaryWeights.includes(f.weight) &&\n f.style === 'normal',\n );\n\n return criticalFiles.map(\n (f) =>\n `<link rel=\"preload\" href=\"${f.path}\" as=\"font\" type=\"font/woff2\" crossorigin=\"anonymous\">`,\n );\n}\n\nasync function updateTokenFile(\n tokenFile: string,\n entry: FontEntry,\n): Promise<object | undefined> {\n let raw: unknown;\n try {\n const contents = await readFile(tokenFile, 'utf-8');\n raw = JSON.parse(contents);\n } catch {\n return undefined;\n }\n\n if (typeof raw !== 'object' || raw === null) return undefined;\n\n const tokens = raw as Record<string, unknown>;\n const patch: Record<string, unknown> = {};\n\n const typography = tokens['typography'] as Record<string, unknown> | undefined;\n if (typography) {\n const body = typography['body'] as Record<string, unknown> | undefined;\n if (body) {\n if (Array.isArray(body['fontFamily'])) {\n const existing = body['fontFamily'] as string[];\n if (!existing.includes(entry.family)) {\n body['fontFamily'] = [entry.family, ...existing];\n patch['typography.body.fontFamily'] = body['fontFamily'];\n }\n } else if (\n typeof body['fontFamily'] === 'string' &&\n !body['fontFamily'].includes(entry.family)\n ) {\n body['fontFamily'] = [entry.family, body['fontFamily'] as string];\n patch['typography.body.fontFamily'] = body['fontFamily'];\n }\n }\n }\n\n await writeFile(tokenFile, `${JSON.stringify(tokens, null, 2)}\\n`, 'utf-8');\n return Object.keys(patch).length > 0 ? patch : undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Main entry point\n// ---------------------------------------------------------------------------\n\nexport async function prepareFont(\n options: PrepareOptions,\n): Promise<PrepareManifest> {\n const {\n fontId,\n weights,\n subsets = ['latin'],\n outputDir = './dist/fonts',\n formats = ['woff2'],\n fontDisplay = 'swap',\n generateFallbacks = true,\n performanceBudget = 150000,\n tokenFile,\n } = options;\n\n // 1. Resolve font from registry\n const entry = resolveFont(fontId);\n if (!entry) {\n throw new Error(\n `Font \"${fontId}\" not found in registry. Use fetchtype search to find available fonts.`,\n );\n }\n\n if (entry.source === 'system') {\n throw new Error(\n `Font \"${entry.family}\" is a system font and cannot be downloaded from Google Fonts.`,\n );\n }\n\n if (!entry.install.googleCdn) {\n throw new Error(\n `Font \"${entry.family}\" does not have a Google Fonts CDN URL.`,\n );\n }\n\n // 2. Determine weights\n const defaultWeights = [400, 500, 700];\n const availableWeights = entry.weights;\n const resolvedWeights = weights\n ? weights.filter((w) => availableWeights.includes(w))\n : defaultWeights.filter((w) => availableWeights.includes(w));\n\n if (resolvedWeights.length === 0) {\n const requested = (weights ?? defaultWeights).join(', ');\n throw new Error(\n `None of the requested weights [${requested}] are available for \"${entry.family}\". Available: ${availableWeights.join(', ')}`,\n );\n }\n\n // 3. Fetch and parse Google Fonts CSS2 API\n const normalFaces = await fetchGoogleFontsCSS(\n entry.family,\n resolvedWeights,\n 'normal',\n ).then(parseGoogleFontsCSS);\n\n const italicFaces: ParsedFontFace[] = entry.hasItalic\n ? await fetchGoogleFontsCSS(entry.family, resolvedWeights, 'italic')\n .then(parseGoogleFontsCSS)\n .catch(() => [])\n : [];\n\n const allFaces = [...normalFaces, ...italicFaces];\n const filteredFaces = allFaces.filter((face) =>\n subsets.includes(face.subset),\n );\n\n if (filteredFaces.length === 0) {\n throw new Error(\n `No font files found for \"${entry.family}\" with subsets [${subsets.join(', ')}]. Available subsets: ${entry.subsets.join(', ')}`,\n );\n }\n\n // 4. Create output directory\n const absoluteOutputDir = resolve(outputDir);\n await mkdir(absoluteOutputDir, { recursive: true });\n\n // 5. Download font files and build @font-face blocks\n const manifestFiles: PrepareManifest['files'] = [];\n const fontFaceBlocks: string[] = [\n `/* Generated by fetchtype — @font-face declarations */`,\n `/* font-display: ${fontDisplay} */`,\n ];\n\n for (const face of filteredFaces) {\n if (!formats.includes('woff2')) continue;\n\n const fileName = buildFontFileName(\n entry.family,\n face.subset,\n face.weight,\n face.style,\n 'woff2',\n );\n const filePath = resolve(absoluteOutputDir, fileName);\n\n const buffer = await downloadFile(face.src);\n await writeFile(filePath, buffer);\n\n manifestFiles.push({\n path: `${outputDir}/${fileName}`,\n weight: face.weight,\n style: face.style,\n subset: face.subset,\n format: 'woff2',\n size: buffer.length,\n });\n\n fontFaceBlocks.push('');\n fontFaceBlocks.push(`/* ${face.subset} */`);\n fontFaceBlocks.push(`@font-face {`);\n fontFaceBlocks.push(` font-family: '${entry.family}';`);\n fontFaceBlocks.push(` font-style: ${face.style};`);\n fontFaceBlocks.push(` font-weight: ${face.weight};`);\n fontFaceBlocks.push(` font-display: ${fontDisplay};`);\n fontFaceBlocks.push(` src: url('./${fileName}') format('woff2');`);\n if (face.unicodeRange) {\n fontFaceBlocks.push(` unicode-range: ${face.unicodeRange};`);\n }\n fontFaceBlocks.push(`}`);\n }\n\n const fontFaceCSS = fontFaceBlocks.join('\\n');\n\n // 6. Generate fallback CSS\n const fallbackCSS = generateFallbacks\n ? generateFallbackCSSFromCore(entry, {\n safariWrap: true,\n compact: false,\n includeStack: true,\n selector: 'body',\n })\n : `/* Fallback CSS generation skipped */`;\n\n // 7. Build preload tags\n const primarySubset = subsets[0] ?? 'latin';\n const primaryWeights = resolvedWeights.slice(0, 3);\n const preloadTags = buildPreloadTagsList(\n manifestFiles,\n primaryWeights,\n primarySubset,\n );\n const preloadHTML = [\n `<!-- Generated by fetchtype — font preload tags -->`,\n ...preloadTags,\n ].join('\\n');\n\n // 8. Performance budget\n const totalSize = manifestFiles.reduce((sum, f) => sum + f.size, 0);\n const budgetUsed = Number(((totalSize / performanceBudget) * 100).toFixed(1));\n const budgetExceeded = totalSize > performanceBudget;\n\n // 9. Build manifest\n const manifest: PrepareManifest = {\n fontId: entry.id,\n family: entry.family,\n version: entry.version,\n generatedAt: new Date().toISOString(),\n files: manifestFiles,\n css: {\n fontFace: fontFaceCSS,\n fallback: fallbackCSS,\n preload: preloadHTML,\n },\n performance: {\n totalSize,\n budgetUsed,\n budgetExceeded,\n budgetLimit: performanceBudget,\n },\n preloadTags,\n };\n\n // 10. Write CSS and HTML artifacts\n await writeFile(\n resolve(absoluteOutputDir, 'font-face.css'),\n `${fontFaceCSS}\\n`,\n 'utf-8',\n );\n await writeFile(\n resolve(absoluteOutputDir, 'fallback.css'),\n `${fallbackCSS}\\n`,\n 'utf-8',\n );\n await writeFile(\n resolve(absoluteOutputDir, 'preload.html'),\n `${preloadHTML}\\n`,\n 'utf-8',\n );\n\n // 11. Update token file if requested\n if (tokenFile) {\n const patch = await updateTokenFile(tokenFile, entry);\n if (patch) {\n manifest.tokenPatch = patch;\n }\n }\n\n // 12. Write manifest\n await writeFile(\n resolve(absoluteOutputDir, 'manifest.json'),\n `${JSON.stringify(manifest, null, 2)}\\n`,\n 'utf-8',\n );\n\n return manifest;\n}\n","/**\n * Typography Audit Engine — Phase 2\n *\n * Static analysis scanner that inspects a project directory for typography\n * issues: render-blocking fonts, missing font-display, GDPR-risky CDN loads,\n * inconsistent scales, and more.\n *\n * Design decisions:\n * - Regex-based parsing only (no AST) for zero extra dependencies.\n * - node:fs/promises + node:path for file I/O.\n * - resolveFont from @fetchtype/fonts for registry lookups.\n */\n\nimport { readdir, readFile, stat } from 'node:fs/promises';\nimport { extname, join, relative } from 'node:path';\n\nimport { resolveFont } from '@fetchtype/fonts';\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport type AuditIssue = {\n rule: string;\n severity: 'error' | 'warning' | 'info';\n file: string;\n line?: number;\n message: string;\n fix?: string;\n};\n\nexport type DetectedFont = {\n family: string;\n weights: number[];\n source: 'google-cdn' | 'fontsource' | 'font-face' | 'system' | 'unknown';\n hasDisplay: boolean;\n locations: string[];\n};\n\nexport type AuditResult = {\n scanned: {\n cssFiles: number;\n tailwindConfigs: number;\n htmlFiles: number;\n packageJsons: number;\n totalFiles: number;\n };\n fontsDetected: DetectedFont[];\n issues: AuditIssue[];\n generatedTokens?: object;\n migrationGuide: string[];\n};\n\n// ---------------------------------------------------------------------------\n// Internal types\n// ---------------------------------------------------------------------------\n\ntype FileSet = {\n css: string[];\n tailwind: string[];\n html: string[];\n packageJsons: string[];\n};\n\ntype FontAccumulator = Map<string, DetectedFont>;\n\n// ---------------------------------------------------------------------------\n// Constants / patterns\n// ---------------------------------------------------------------------------\n\nconst SKIP_DIRS = new Set(['node_modules', '.git', 'dist', '.next', '.nuxt', 'out', 'build', '.astro', '.turbo', '.cache']);\n\n// Fontsource package pattern\nconst FONTSOURCE_PKG_RE = /^@fontsource(?:-variable)?\\/(.+)/;\n\n// Google Fonts family extraction from URL\nconst GF_FAMILY_SEGMENT_RE = /family=([^&;'\"\\s]+)/g;\n\n// ---------------------------------------------------------------------------\n// Utilities\n// ---------------------------------------------------------------------------\n\nfunction lineNumber(content: string, index: number): number {\n return content.slice(0, index).split('\\n').length;\n}\n\nfunction normalizeFamily(raw: string): string {\n return raw.trim().replace(/^[\"']|[\"']$/g, '').trim();\n}\n\nfunction parseGoogleFontsFamilies(url: string): string[] {\n const families: string[] = [];\n let match: RegExpExecArray | null;\n const re = new RegExp(GF_FAMILY_SEGMENT_RE.source, 'g');\n while ((match = re.exec(url)) !== null) {\n const segment = match[1];\n if (!segment) continue;\n const name = segment.split(':')[0] ?? segment;\n families.push(decodeURIComponent(name).replace(/\\+/g, ' '));\n }\n return families;\n}\n\nfunction extractWeightsFromGfUrl(url: string, family: string): number[] {\n const encodedFamily = family.replace(/ /g, '+');\n const familyPattern = new RegExp(`family=${encodedFamily}:(?:[^&'\"\\\\s]*)`, 'i');\n const m = familyPattern.exec(url);\n if (!m) return [400];\n const after = m[0].split('@')[1] ?? '';\n const weightNums = [...after.matchAll(/\\d{3}/g)].map((x) => Number(x[0]));\n const seen = new Set<number>();\n return weightNums.filter((w) => {\n if (seen.has(w)) return false;\n seen.add(w);\n return true;\n });\n}\n\nfunction hexToRgb(hex: string): [number, number, number] | null {\n const raw = hex.trim();\n if (!/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(raw)) return null;\n const full =\n raw.length === 4\n ? raw\n .slice(1)\n .split('')\n .map((c) => `${c}${c}`)\n .join('')\n : raw.slice(1);\n return [\n Number.parseInt(full.slice(0, 2), 16),\n Number.parseInt(full.slice(2, 4), 16),\n Number.parseInt(full.slice(4, 6), 16),\n ];\n}\n\nfunction linearise(c: number): number {\n const n = c / 255;\n return n <= 0.03928 ? n / 12.92 : ((n + 0.055) / 1.055) ** 2.4;\n}\n\nfunction luminance([r, g, b]: [number, number, number]): number {\n return 0.2126 * linearise(r) + 0.7152 * linearise(g) + 0.0722 * linearise(b);\n}\n\nfunction contrastRatio(fg: string, bg: string): number | null {\n const fgRgb = hexToRgb(fg);\n const bgRgb = hexToRgb(bg);\n if (!fgRgb || !bgRgb) return null;\n const l1 = luminance(fgRgb);\n const l2 = luminance(bgRgb);\n const lighter = Math.max(l1, l2);\n const darker = Math.min(l1, l2);\n return Number(((lighter + 0.05) / (darker + 0.05)).toFixed(2));\n}\n\nfunction upsertFont(\n acc: FontAccumulator,\n family: string,\n source: DetectedFont['source'],\n weights: number[],\n hasDisplay: boolean,\n location: string,\n): void {\n const key = family.toLowerCase();\n const existing = acc.get(key);\n if (existing) {\n for (const w of weights) {\n if (!existing.weights.includes(w)) existing.weights.push(w);\n }\n if (!existing.locations.includes(location)) existing.locations.push(location);\n if (hasDisplay) existing.hasDisplay = true;\n const priority: Record<DetectedFont['source'], number> = {\n 'google-cdn': 4,\n fontsource: 3,\n 'font-face': 2,\n system: 1,\n unknown: 0,\n };\n if (priority[source] > priority[existing.source]) {\n existing.source = source;\n }\n } else {\n acc.set(key, {\n family,\n weights: [...weights],\n source,\n hasDisplay,\n locations: [location],\n });\n }\n}\n\n// ---------------------------------------------------------------------------\n// File discovery\n// ---------------------------------------------------------------------------\n\nasync function collectFiles(dir: string): Promise<FileSet> {\n const files: FileSet = { css: [], tailwind: [], html: [], packageJsons: [] };\n\n async function walk(current: string): Promise<void> {\n let entries: import('node:fs').Dirent[];\n try {\n entries = await readdir(current, { withFileTypes: true, encoding: 'utf8' }) as import('node:fs').Dirent[];\n } catch {\n return;\n }\n\n for (const entry of entries) {\n const name = entry.name as string;\n const fullPath = join(current, name);\n if (entry.isDirectory()) {\n if (SKIP_DIRS.has(name)) continue;\n await walk(fullPath);\n } else if (entry.isFile()) {\n const ext = extname(name).toLowerCase();\n const base = name.toLowerCase();\n\n if (ext === '.css' || ext === '.scss' || ext === '.sass' || ext === '.less') {\n files.css.push(fullPath);\n } else if (\n base.startsWith('tailwind.config')\n && (ext === '.js' || ext === '.ts' || ext === '.cjs' || ext === '.mjs' || ext === '')\n ) {\n files.tailwind.push(fullPath);\n } else if (ext === '.html' || ext === '.jsx' || ext === '.tsx' || ext === '.vue' || ext === '.svelte') {\n files.html.push(fullPath);\n } else if (base === 'package.json') {\n files.packageJsons.push(fullPath);\n }\n }\n }\n }\n\n await walk(dir);\n return files;\n}\n\n// ---------------------------------------------------------------------------\n// CSS scanner\n// ---------------------------------------------------------------------------\n\nfunction scanCss(\n content: string,\n filePath: string,\n rootDir: string,\n issues: AuditIssue[],\n fonts: FontAccumulator,\n): void {\n const rel = relative(rootDir, filePath);\n\n // --- @import render-blocking (Google Fonts) ---\n const importRe = /@import\\s+url\\(['\"]?(https?:\\/\\/fonts\\.googleapis\\.com[^'\")\\s]*)/g;\n let m: RegExpExecArray | null;\n while ((m = importRe.exec(content)) !== null) {\n const ln = lineNumber(content, m.index);\n issues.push({\n rule: 'audit.render-blocking',\n severity: 'error',\n file: rel,\n line: ln,\n message: '@import used for Google Fonts loading — render-blocking on critical path.',\n fix: 'Replace @import with a <link rel=\"preconnect\"> + <link rel=\"stylesheet\"> in HTML, or use Fontsource.',\n });\n\n const url = m[1] ?? '';\n const hasDisplay = /[?&]display=/.test(url);\n const families = parseGoogleFontsFamilies(url);\n for (const family of families) {\n const weights = extractWeightsFromGfUrl(url, family);\n upsertFont(fonts, family, 'google-cdn', weights.length > 0 ? weights : [400], hasDisplay, rel);\n }\n\n if (!hasDisplay) {\n issues.push({\n rule: 'audit.missing-font-display',\n severity: 'warning',\n file: rel,\n line: ln,\n message: 'Google Fonts @import URL missing &display= parameter — FOIT risk.',\n fix: 'Add &display=swap (or =optional) to the Google Fonts URL.',\n });\n }\n\n issues.push({\n rule: 'audit.google-cdn',\n severity: 'warning',\n file: rel,\n line: ln,\n message: 'Fonts loaded from fonts.googleapis.com — exposes visitor IPs to Google (GDPR).',\n fix: 'Self-host via Fontsource or download fonts and serve from your own CDN.',\n });\n }\n\n // --- @font-face blocks ---\n const faceRe = /@font-face\\s*\\{([^}]+)\\}/g;\n while ((m = faceRe.exec(content)) !== null) {\n const block = m[1] ?? '';\n const ln = lineNumber(content, m.index);\n\n const familyMatch = /font-family\\s*:\\s*(['\"]?)([^'\";]+)\\1/.exec(block);\n const family = familyMatch ? normalizeFamily(familyMatch[2] ?? '') : 'unknown';\n\n const hasDisplay = /font-display\\s*:\\s*([^;]+)/.test(block);\n\n const weightMatch = /font-weight\\s*:\\s*(\\d+)(?:\\s+(\\d+))?/.exec(block);\n const weights: number[] = [];\n if (weightMatch) {\n weights.push(Number(weightMatch[1]));\n if (weightMatch[2]) weights.push(Number(weightMatch[2]));\n } else {\n weights.push(400);\n }\n\n upsertFont(fonts, family, 'font-face', weights, hasDisplay, rel);\n\n if (!hasDisplay) {\n issues.push({\n rule: 'audit.no-font-display',\n severity: 'error',\n file: rel,\n line: ln,\n message: `@font-face for \"${family}\" missing font-display — FOIT risk on slow connections.`,\n fix: 'Add font-display: swap; (or optional) to this @font-face rule.',\n });\n }\n\n if (!/unicode-range\\s*:/.test(block)) {\n issues.push({\n rule: 'audit.no-subset',\n severity: 'warning',\n file: rel,\n line: ln,\n message: `@font-face for \"${family}\" has no unicode-range restriction — loads full font file.`,\n fix: 'Add unicode-range: U+0000-00FF; (or use Fontsource which does this automatically).',\n });\n }\n }\n\n // --- line-height values ---\n const lhRe = /line-height\\s*:\\s*([^;{}]+)/g;\n const lineHeights: string[] = [];\n while ((m = lhRe.exec(content)) !== null) {\n const val = (m[1] ?? '').trim();\n if (val && !val.startsWith('var(') && !val.startsWith('calc(')) {\n lineHeights.push(val);\n }\n }\n\n const uniqueLh = [...new Set(lineHeights.map((lh) => lh.replace(/\\s+/g, ' ')))];\n if (uniqueLh.length > 2) {\n issues.push({\n rule: 'audit.inconsistent-line-height',\n severity: 'warning',\n file: rel,\n message: `Multiple line-height values detected (${uniqueLh.slice(0, 4).join(', ')}${uniqueLh.length > 4 ? '…' : ''}) — consider a consistent scale.`,\n fix: 'Define line-height values as CSS custom properties or token references.',\n });\n }\n\n // --- font-size values ---\n const sizeRe = /font-size\\s*:\\s*([^;{}]+)/g;\n const fontSizes: string[] = [];\n while ((m = sizeRe.exec(content)) !== null) {\n const val = (m[1] ?? '').trim();\n if (val && !val.startsWith('var(') && !val.startsWith('calc(')) {\n fontSizes.push(val);\n }\n }\n\n const pxSizes = fontSizes\n .map((s) => {\n const parsed = /^(\\d+(?:\\.\\d+)?)px$/.exec(s);\n return parsed ? Number(parsed[1]) : null;\n })\n .filter((n): n is number => n !== null);\n\n if (pxSizes.length >= 4) {\n const uniquePx = [...new Set(pxSizes)].sort((a, b) => a - b);\n if (uniquePx.length >= 5) {\n issues.push({\n rule: 'audit.inconsistent-scale',\n severity: 'warning',\n file: rel,\n message: `Many distinct font-size values (${uniquePx.slice(0, 5).join('px, ')}px…) — no consistent type scale detected.`,\n fix: 'Adopt a modular type scale and define sizes as CSS variables via fetchtype.',\n });\n }\n }\n\n // --- Colour contrast estimation ---\n const colors: string[] = [];\n const bgColors: string[] = [];\n\n const colorRe = /(?:^|[;\\s{])color\\s*:\\s*(#[0-9a-fA-F]{3,6})/gm;\n while ((m = colorRe.exec(content)) !== null) {\n if (m[1]) colors.push(m[1]);\n }\n const bgRe = /background(?:-color)?\\s*:\\s*(#[0-9a-fA-F]{3,6})/gm;\n while ((m = bgRe.exec(content)) !== null) {\n if (m[1]) bgColors.push(m[1]);\n }\n\n for (const fg of colors.slice(0, 5)) {\n for (const bg of bgColors.slice(0, 5)) {\n const ratio = contrastRatio(fg, bg);\n if (ratio !== null && ratio < 4.5) {\n issues.push({\n rule: 'audit.contrast-warning',\n severity: 'warning',\n file: rel,\n message: `Colour pair ${fg} on ${bg} may fail WCAG AA (estimated ratio ${ratio}:1 < 4.5).`,\n fix: 'Increase colour contrast between text and background to at least 4.5:1.',\n });\n }\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Tailwind config scanner\n// ---------------------------------------------------------------------------\n\nfunction scanTailwind(\n content: string,\n filePath: string,\n rootDir: string,\n _issues: AuditIssue[],\n fonts: FontAccumulator,\n): void {\n const rel = relative(rootDir, filePath);\n\n const familyMatch = /fontFamily\\s*:\\s*\\{([^}]+)\\}/.exec(content);\n if (familyMatch) {\n const block = familyMatch[1] ?? '';\n const keyRe = /(\\w+)\\s*:\\s*[\\[']([^'\\]]+)/g;\n let m: RegExpExecArray | null;\n while ((m = keyRe.exec(block)) !== null) {\n const familyRaw = normalizeFamily(m[2] ?? '');\n if (familyRaw) {\n upsertFont(fonts, familyRaw, 'unknown', [400], false, rel);\n }\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// HTML / JSX scanner\n// ---------------------------------------------------------------------------\n\nfunction scanHtml(\n content: string,\n filePath: string,\n rootDir: string,\n issues: AuditIssue[],\n fonts: FontAccumulator,\n): void {\n const rel = relative(rootDir, filePath);\n\n // <link> tags for Google Fonts\n const linkRe = /<link[^>]+href=[\"']https?:\\/\\/fonts\\.googleapis\\.com\\/css[^\"']*[\"'][^>]*>/gi;\n let m: RegExpExecArray | null;\n while ((m = linkRe.exec(content)) !== null) {\n const tag = m[0];\n const ln = lineNumber(content, m.index);\n const hrefMatch = /href=[\"']([^\"']+)[\"']/.exec(tag);\n const url = hrefMatch?.[1] ?? '';\n\n issues.push({\n rule: 'audit.google-cdn',\n severity: 'warning',\n file: rel,\n line: ln,\n message: 'Google Fonts <link> tag — exposes visitor IPs to Google (GDPR exposure).',\n fix: 'Self-host via Fontsource or download fonts and serve from your own CDN.',\n });\n\n const hasDisplay = /[?&]display=/.test(url);\n if (!hasDisplay) {\n issues.push({\n rule: 'audit.missing-font-display',\n severity: 'warning',\n file: rel,\n line: ln,\n message: 'Google Fonts <link> missing &display= parameter — browser default is block, causing FOIT.',\n fix: 'Add &display=swap to the Google Fonts URL (e.g. ?family=Inter&display=swap).',\n });\n }\n\n const families = parseGoogleFontsFamilies(url);\n for (const family of families) {\n const weights = extractWeightsFromGfUrl(url, family);\n upsertFont(fonts, family, 'google-cdn', weights.length > 0 ? weights : [400], hasDisplay, rel);\n }\n }\n\n // Inline font-family styles\n const inlineRe = /style=[\"'][^\"']*font-family\\s*:\\s*([^;'\"]+)/gi;\n while ((m = inlineRe.exec(content)) !== null) {\n const family = normalizeFamily(m[1]?.split(',')[0] ?? '');\n if (family) {\n const ln = lineNumber(content, m.index);\n issues.push({\n rule: 'audit.inline-font-style',\n severity: 'info',\n file: rel,\n line: ln,\n message: `Inline font-family style \"${family}\" — hard to override and not design-token-driven.`,\n fix: 'Replace inline style with a CSS class using a token-driven font-family variable.',\n });\n upsertFont(fonts, family, 'unknown', [400], false, rel);\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// package.json scanner\n// ---------------------------------------------------------------------------\n\nfunction scanPackageJson(\n content: string,\n filePath: string,\n rootDir: string,\n fonts: FontAccumulator,\n): void {\n const rel = relative(rootDir, filePath);\n let parsed: unknown;\n try {\n parsed = JSON.parse(content);\n } catch {\n return;\n }\n\n if (typeof parsed !== 'object' || parsed === null) return;\n\n const pkg = parsed as Record<string, unknown>;\n const allDeps: Record<string, unknown> = {};\n\n for (const key of ['dependencies', 'devDependencies', 'peerDependencies'] as const) {\n const section = pkg[key];\n if (section && typeof section === 'object') {\n Object.assign(allDeps, section);\n }\n }\n\n for (const depName of Object.keys(allDeps)) {\n const match = FONTSOURCE_PKG_RE.exec(depName);\n if (match) {\n const familySlug = match[1] ?? '';\n const family = familySlug.split('-').map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');\n upsertFont(fonts, family, 'fontsource', [400], false, rel);\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Cross-reference analysis\n// ---------------------------------------------------------------------------\n\nfunction crossReference(fonts: FontAccumulator, issues: AuditIssue[]): void {\n for (const [, font] of fonts) {\n if (font.source === 'google-cdn' || font.source === 'fontsource') {\n issues.push({\n rule: 'audit.no-fallback-metrics',\n severity: 'warning',\n file: font.locations[0] ?? '<unknown>',\n message: `\"${font.family}\" loaded via ${font.source} without fallback metric overrides — CLS risk during font swap.`,\n fix: `Run \\`fetchtype resolve \"${font.family}\" --fallback\\` to generate platform-aware fallback CSS.`,\n });\n }\n\n const registryEntry = resolveFont(font.family);\n if (registryEntry && font.weights.length > 3) {\n issues.push({\n rule: 'audit.unused-weights',\n severity: 'info',\n file: font.locations[0] ?? '<unknown>',\n message: `\"${font.family}\" loads ${font.weights.length} weights (${font.weights.join(', ')}) — verify all are used to reduce payload.`,\n fix: 'Audit which font weights are actually applied in CSS and remove unused ones.',\n });\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Token generation\n// ---------------------------------------------------------------------------\n\nexport function generateCorrectedTokens(result: AuditResult): object {\n const primaryFont = result.fontsDetected.find((f) => f.source !== 'system') ?? result.fontsDetected[0];\n const monoFont = result.fontsDetected.find((f) => {\n const entry = resolveFont(f.family);\n return entry?.category === 'monospace';\n });\n\n const primaryFamily = primaryFont?.family ?? 'Inter';\n const monoFamily = monoFont?.family ?? 'JetBrains Mono';\n\n return {\n $schema: 'https://fetchtype.dev/schema/v1',\n _generated: {\n by: 'fetchtype audit',\n from: 'static-analysis',\n note: 'Review and validate before use: fetchtype validate -i fetchtype.tokens.json',\n },\n typography: {\n body: {\n fontFamily: [primaryFamily, 'system-ui', 'sans-serif'],\n fontSize: '1rem',\n fontWeight: 400,\n lineHeight: 1.6,\n },\n heading: {\n fontFamily: [primaryFamily, 'system-ui', 'sans-serif'],\n fontSize: '1.5rem',\n fontWeight: 700,\n lineHeight: 1.25,\n },\n code: {\n fontFamily: [monoFamily, 'ui-monospace', 'monospace'],\n fontSize: '0.875rem',\n fontWeight: 400,\n lineHeight: 1.7,\n },\n },\n fonts: result.fontsDetected.map((f) => ({\n family: f.family,\n source: f.source,\n weights: f.weights.sort((a, b) => a - b),\n display: 'swap',\n })),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Report formatters\n// ---------------------------------------------------------------------------\n\nexport function formatAuditReport(result: AuditResult): string {\n const lines: string[] = [];\n\n lines.push('fetchtype audit report');\n lines.push('='.repeat(50));\n lines.push('');\n\n lines.push(' Scanned:');\n lines.push(` ${result.scanned.cssFiles} CSS file${result.scanned.cssFiles !== 1 ? 's' : ''}`);\n lines.push(` ${result.scanned.tailwindConfigs} Tailwind config${result.scanned.tailwindConfigs !== 1 ? 's' : ''}`);\n lines.push(` ${result.scanned.htmlFiles} HTML/JSX file${result.scanned.htmlFiles !== 1 ? 's' : ''}`);\n lines.push(` ${result.scanned.packageJsons} package.json file${result.scanned.packageJsons !== 1 ? 's' : ''}`);\n lines.push(` ${result.scanned.totalFiles} total`);\n lines.push('');\n\n if (result.fontsDetected.length > 0) {\n lines.push(' Fonts detected:');\n for (const font of result.fontsDetected) {\n const weights = font.weights.sort((a, b) => a - b).join(', ');\n const display = font.hasDisplay ? 'display=swap' : 'no font-display';\n lines.push(` ${font.family} (${weights}) -- ${font.source}, ${display}`);\n if (font.locations.length > 0) {\n lines.push(` locations: ${font.locations.slice(0, 3).join(', ')}${font.locations.length > 3 ? '...' : ''}`);\n }\n }\n lines.push('');\n } else {\n lines.push(' No fonts detected.');\n lines.push('');\n }\n\n const errors = result.issues.filter((i) => i.severity === 'error');\n const warnings = result.issues.filter((i) => i.severity === 'warning');\n const infos = result.issues.filter((i) => i.severity === 'info');\n\n if (result.issues.length === 0) {\n lines.push(' No issues found.');\n } else {\n lines.push(' Issues:');\n for (const issue of errors) {\n const loc = issue.line ? `[${issue.file}:${issue.line}]` : `[${issue.file}]`;\n lines.push(` x ${issue.message} ${loc}`);\n if (issue.fix) lines.push(` Fix: ${issue.fix}`);\n }\n for (const issue of warnings) {\n const loc = issue.line ? `[${issue.file}:${issue.line}]` : `[${issue.file}]`;\n lines.push(` ! ${issue.message} ${loc}`);\n if (issue.fix) lines.push(` Fix: ${issue.fix}`);\n }\n for (const issue of infos) {\n const loc = issue.line ? `[${issue.file}:${issue.line}]` : `[${issue.file}]`;\n lines.push(` i ${issue.message} ${loc}`);\n }\n }\n\n lines.push('');\n lines.push(` ${errors.length} error${errors.length !== 1 ? 's' : ''}, ${warnings.length} warning${warnings.length !== 1 ? 's' : ''}, ${infos.length} info`);\n\n if (result.migrationGuide.length > 0) {\n lines.push('');\n lines.push(' Migration guide:');\n for (const step of result.migrationGuide) {\n lines.push(` -> ${step}`);\n }\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n\nexport function formatAuditMigrationGuide(result: AuditResult): string[] {\n const steps: string[] = [];\n\n const hasGoogleCdn = result.fontsDetected.some((f) => f.source === 'google-cdn');\n const hasRenderBlocking = result.issues.some((i) => i.rule === 'audit.render-blocking');\n const hasNoFontDisplay = result.issues.some((i) => i.rule === 'audit.no-font-display');\n const hasMissingDisplay = result.issues.some((i) => i.rule === 'audit.missing-font-display');\n const hasNoSubset = result.issues.some((i) => i.rule === 'audit.no-subset');\n const hasNoFallbackMetrics = result.issues.some((i) => i.rule === 'audit.no-fallback-metrics');\n const hasContrastWarnings = result.issues.some((i) => i.rule === 'audit.contrast-warning');\n const hasInconsistentScale = result.issues.some((i) => i.rule === 'audit.inconsistent-scale');\n\n if (hasGoogleCdn || hasRenderBlocking) {\n const families = result.fontsDetected\n .filter((f) => f.source === 'google-cdn')\n .map((f) => f.family.toLowerCase().replace(/ /g, '-'));\n if (families.length > 0) {\n steps.push(`Install via Fontsource: npm i @fontsource-variable/${families[0]}${families.length > 1 ? ` @fontsource-variable/${families[1]}` : ''}`);\n } else {\n steps.push('Replace Google Fonts CDN with Fontsource for self-hosted, GDPR-compliant delivery.');\n }\n }\n\n if (hasRenderBlocking) {\n steps.push('Remove @import rules for fonts. Move to <link rel=\"preload\"> in <head> or use Fontsource import.');\n }\n\n if (hasNoFontDisplay || hasMissingDisplay) {\n steps.push('Add font-display: swap; to all @font-face declarations. Add &display=swap to Google Fonts URLs.');\n }\n\n if (hasNoSubset) {\n steps.push('Add unicode-range restrictions to @font-face blocks, or migrate to Fontsource which subsets automatically.');\n }\n\n if (hasNoFallbackMetrics) {\n steps.push('Generate fallback metric overrides to eliminate CLS: fetchtype resolve <font> --fallback > fallback.css');\n }\n\n if (result.fontsDetected.length > 0) {\n steps.push(`Initialize a fetchtype token file: fetchtype init --prompt \"${result.fontsDetected.map((f) => f.family).join(', ')} project\"`);\n steps.push('Validate generated tokens: fetchtype validate -i fetchtype.tokens.json');\n steps.push('Build CSS variables: fetchtype build -i fetchtype.tokens.json');\n }\n\n if (hasContrastWarnings) {\n steps.push('Review flagged colour pairs and adjust to meet WCAG AA (4.5:1 for normal text, 3:1 for large text).');\n }\n\n if (hasInconsistentScale) {\n steps.push('Define a modular type scale in fetchtype.tokens.json and generate consistent heading sizes.');\n }\n\n return steps;\n}\n\n// ---------------------------------------------------------------------------\n// Main entry point\n// ---------------------------------------------------------------------------\n\nexport async function auditDirectory(dir: string): Promise<AuditResult> {\n try {\n const s = await stat(dir);\n if (!s.isDirectory()) {\n throw new Error(`\"${dir}\" is not a directory.`);\n }\n } catch (error) {\n if ((error as { code?: string }).code === 'ENOENT') {\n throw new Error(`Directory \"${dir}\" does not exist.`);\n }\n throw error;\n }\n\n const files = await collectFiles(dir);\n const issues: AuditIssue[] = [];\n const fonts: FontAccumulator = new Map();\n\n for (const filePath of files.css) {\n let content: string;\n try {\n content = await readFile(filePath, 'utf8');\n } catch {\n continue;\n }\n scanCss(content, filePath, dir, issues, fonts);\n }\n\n for (const filePath of files.tailwind) {\n let content: string;\n try {\n content = await readFile(filePath, 'utf8');\n } catch {\n continue;\n }\n scanTailwind(content, filePath, dir, issues, fonts);\n }\n\n for (const filePath of files.html) {\n let content: string;\n try {\n content = await readFile(filePath, 'utf8');\n } catch {\n continue;\n }\n scanHtml(content, filePath, dir, issues, fonts);\n }\n\n for (const filePath of files.packageJsons) {\n let content: string;\n try {\n content = await readFile(filePath, 'utf8');\n } catch {\n continue;\n }\n scanPackageJson(content, filePath, dir, fonts);\n }\n\n crossReference(fonts, issues);\n\n const fontsDetected = [...fonts.values()];\n const result: AuditResult = {\n scanned: {\n cssFiles: files.css.length,\n tailwindConfigs: files.tailwind.length,\n htmlFiles: files.html.length,\n packageJsons: files.packageJsons.length,\n totalFiles:\n files.css.length +\n files.tailwind.length +\n files.html.length +\n files.packageJsons.length,\n },\n fontsDetected,\n issues,\n migrationGuide: [],\n };\n\n result.migrationGuide = formatAuditMigrationGuide(result);\n\n if (fontsDetected.length > 0) {\n result.generatedTokens = generateCorrectedTokens(result);\n }\n\n return result;\n}\n","/**\n * URL-based typography audit (F052).\n *\n * Uses fetch() to download HTML and linked CSS, then applies the same\n * detection rules as the directory scanner.\n *\n * LIMITATIONS:\n * - Cannot detect computed styles (window.getComputedStyle) without a real browser.\n * - Cannot measure CLS directly — only detects structural risk indicators.\n * - Redirects, auth-gated pages, and single-page apps (JS-rendered) will have\n * limited coverage. Use the --dir scanner against source files for full coverage.\n * - Only follows <link rel=\"stylesheet\"> and <style> tags in the initial HTML.\n * Dynamically injected CSS (e.g. via JavaScript) is invisible to this scanner.\n */\n\nimport type { AuditResult, AuditIssue, DetectedFont } from './audit.js';\nimport { generateCorrectedTokens, formatAuditMigrationGuide } from './audit.js';\n\n// ---------------------------------------------------------------------------\n// Helpers (duplicated lightly from audit.ts to keep this file self-contained)\n// ---------------------------------------------------------------------------\n\nfunction lineNumber(content: string, index: number): number {\n return content.slice(0, index).split('\\n').length;\n}\n\nfunction normalizeFamily(raw: string): string {\n return raw.trim().replace(/^[\"']|[\"']$/g, '').trim();\n}\n\nfunction parseGoogleFontsFamilies(url: string): string[] {\n const families: string[] = [];\n const re = /family=([^&;'\"\\s]+)/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(url)) !== null) {\n const segment = match[1];\n if (!segment) continue;\n const name = segment.split(':')[0] ?? segment;\n families.push(decodeURIComponent(name).replace(/\\+/g, ' '));\n }\n return families;\n}\n\nfunction upsertFont(\n acc: Map<string, DetectedFont>,\n family: string,\n source: DetectedFont['source'],\n weights: number[],\n hasDisplay: boolean,\n location: string,\n): void {\n const key = family.toLowerCase();\n const existing = acc.get(key);\n if (existing) {\n for (const w of weights) {\n if (!existing.weights.includes(w)) existing.weights.push(w);\n }\n if (!existing.locations.includes(location)) existing.locations.push(location);\n if (hasDisplay) existing.hasDisplay = true;\n } else {\n acc.set(key, { family, weights: [...weights], source, hasDisplay, locations: [location] });\n }\n}\n\n// ---------------------------------------------------------------------------\n// Fetch helpers\n// ---------------------------------------------------------------------------\n\nasync function fetchText(url: string): Promise<string | null> {\n try {\n const response = await fetch(url, {\n headers: { 'User-Agent': 'fetchtype-audit/1.0 (https://fetchtype.dev)' },\n signal: AbortSignal.timeout(10_000),\n });\n if (!response.ok) return null;\n return await response.text();\n } catch {\n return null;\n }\n}\n\nfunction resolveUrl(base: string, href: string): string {\n try {\n return new URL(href, base).href;\n } catch {\n return href;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Scanners\n// ---------------------------------------------------------------------------\n\nfunction scanCssContent(\n content: string,\n source: string,\n issues: AuditIssue[],\n fonts: Map<string, DetectedFont>,\n): void {\n // @import for Google Fonts\n const importRe = /@import\\s+url\\(['\"]?(https?:\\/\\/fonts\\.googleapis\\.com[^'\")\\s]*)/g;\n let m: RegExpExecArray | null;\n while ((m = importRe.exec(content)) !== null) {\n const ln = lineNumber(content, m.index);\n const url = m[1] ?? '';\n const hasDisplay = /[?&]display=/.test(url);\n\n issues.push({\n rule: 'audit.render-blocking',\n severity: 'error',\n file: source,\n line: ln,\n message: '@import used for Google Fonts — render-blocking on critical path.',\n fix: 'Replace @import with <link rel=\"preconnect\"> + <link rel=\"stylesheet\"> in HTML head.',\n });\n\n issues.push({\n rule: 'audit.google-cdn',\n severity: 'warning',\n file: source,\n line: ln,\n message: 'Fonts loaded from fonts.googleapis.com — exposes visitor IPs to Google (GDPR).',\n fix: 'Self-host via Fontsource.',\n });\n\n if (!hasDisplay) {\n issues.push({\n rule: 'audit.missing-font-display',\n severity: 'warning',\n file: source,\n line: ln,\n message: 'Google Fonts URL missing &display= parameter — FOIT risk.',\n fix: 'Add &display=swap to the URL.',\n });\n }\n\n for (const family of parseGoogleFontsFamilies(url)) {\n upsertFont(fonts, family, 'google-cdn', [400], hasDisplay, source);\n }\n }\n\n // @font-face blocks\n const faceRe = /@font-face\\s*\\{([^}]+)\\}/g;\n while ((m = faceRe.exec(content)) !== null) {\n const block = m[1] ?? '';\n const ln = lineNumber(content, m.index);\n\n const familyMatch = /font-family\\s*:\\s*(['\"]?)([^'\";]+)\\1/.exec(block);\n const family = familyMatch ? normalizeFamily(familyMatch[2] ?? '') : 'unknown';\n const hasDisplay = /font-display\\s*:/.test(block);\n\n upsertFont(fonts, family, 'font-face', [400], hasDisplay, source);\n\n if (!hasDisplay) {\n issues.push({\n rule: 'audit.no-font-display',\n severity: 'error',\n file: source,\n line: ln,\n message: `@font-face for \"${family}\" missing font-display — FOIT risk.`,\n fix: 'Add font-display: swap; to this @font-face rule.',\n });\n }\n\n if (!/unicode-range\\s*:/.test(block)) {\n issues.push({\n rule: 'audit.no-subset',\n severity: 'warning',\n file: source,\n line: ln,\n message: `@font-face for \"${family}\" has no unicode-range restriction — full font loaded.`,\n fix: 'Add unicode-range restriction or switch to Fontsource.',\n });\n }\n }\n}\n\nfunction scanHtmlContent(\n html: string,\n pageUrl: string,\n issues: AuditIssue[],\n fonts: Map<string, DetectedFont>,\n): string[] {\n const cssLinks: string[] = [];\n\n // <link rel=\"stylesheet\" href=\"...\">\n const linkRe = /<link[^>]+rel=[\"']stylesheet[\"'][^>]*>/gi;\n let m: RegExpExecArray | null;\n while ((m = linkRe.exec(html)) !== null) {\n const hrefMatch = /href=[\"']([^\"']+)[\"']/.exec(m[0]);\n if (hrefMatch?.[1]) {\n cssLinks.push(resolveUrl(pageUrl, hrefMatch[1]));\n }\n }\n\n // <link> for Google Fonts\n const gfLinkRe = /<link[^>]+href=[\"']https?:\\/\\/fonts\\.googleapis\\.com\\/css[^\"']*[\"'][^>]*>/gi;\n while ((m = gfLinkRe.exec(html)) !== null) {\n const ln = lineNumber(html, m.index);\n const hrefMatch = /href=[\"']([^\"']+)[\"']/.exec(m[0]);\n const url = hrefMatch?.[1] ?? '';\n const hasDisplay = /[?&]display=/.test(url);\n\n issues.push({\n rule: 'audit.google-cdn',\n severity: 'warning',\n file: pageUrl,\n line: ln,\n message: 'Google Fonts <link> detected — GDPR exposure.',\n fix: 'Self-host via Fontsource.',\n });\n\n if (!hasDisplay) {\n issues.push({\n rule: 'audit.missing-font-display',\n severity: 'warning',\n file: pageUrl,\n line: ln,\n message: 'Google Fonts <link> missing &display= parameter — FOIT risk.',\n fix: 'Add &display=swap to the URL.',\n });\n }\n\n for (const family of parseGoogleFontsFamilies(url)) {\n upsertFont(fonts, family, 'google-cdn', [400], hasDisplay, pageUrl);\n }\n }\n\n // <style> blocks\n const styleRe = /<style[^>]*>([\\s\\S]*?)<\\/style>/gi;\n while ((m = styleRe.exec(html)) !== null) {\n if (m[1]) {\n scanCssContent(m[1], `${pageUrl} <style>`, issues, fonts);\n }\n }\n\n return cssLinks;\n}\n\n// ---------------------------------------------------------------------------\n// Main URL audit function\n// ---------------------------------------------------------------------------\n\n/**\n * Audit a URL for typography issues.\n *\n * Fetches the page HTML, extracts linked CSS files, and applies static\n * detection rules equivalent to the directory scanner.\n *\n * NOTE: This function cannot detect:\n * - Computed/applied styles (requires a real browser runtime)\n * - JavaScript-injected CSS or fonts\n * - CLS measurements (requires PerformanceObserver in a browser)\n * - Fonts loaded conditionally based on user interaction\n */\nexport async function auditUrl(url: string): Promise<AuditResult> {\n const issues: AuditIssue[] = [];\n const fonts = new Map<string, DetectedFont>();\n\n const cssLinksFound: string[] = [];\n let htmlFetched = false;\n\n // Fetch and scan HTML\n const html = await fetchText(url);\n if (html) {\n htmlFetched = true;\n const linkedCss = scanHtmlContent(html, url, issues, fonts);\n cssLinksFound.push(...linkedCss);\n } else {\n issues.push({\n rule: 'audit.fetch-failed',\n severity: 'error',\n file: url,\n message: `Could not fetch \"${url}\" — check that the URL is accessible.`,\n });\n }\n\n // Fetch and scan linked CSS (skip Google Fonts CDN — it requires a browser to resolve)\n let cssCount = 0;\n for (const cssUrl of cssLinksFound) {\n if (cssUrl.includes('fonts.googleapis.com')) continue;\n const css = await fetchText(cssUrl);\n if (css) {\n cssCount++;\n scanCssContent(css, cssUrl, issues, fonts);\n }\n }\n\n const fontsDetected = [...fonts.values()];\n const result: AuditResult = {\n scanned: {\n cssFiles: cssCount,\n tailwindConfigs: 0,\n htmlFiles: htmlFetched ? 1 : 0,\n packageJsons: 0,\n totalFiles: cssCount + (htmlFetched ? 1 : 0),\n },\n fontsDetected,\n issues,\n migrationGuide: [],\n };\n\n result.migrationGuide = formatAuditMigrationGuide(result);\n\n if (fontsDetected.length > 0) {\n result.generatedTokens = generateCorrectedTokens(result);\n }\n\n return result;\n}\n","import type { ValidationReport } from '@fetchtype/types';\n\nexport type SarifLog = {\n $schema: string;\n version: string;\n runs: SarifRun[];\n};\n\ntype SarifRun = {\n tool: {\n driver: {\n name: string;\n version: string;\n informationUri: string;\n rules: SarifRule[];\n };\n };\n results: SarifResult[];\n};\n\ntype SarifRule = {\n id: string;\n shortDescription: { text: string };\n defaultConfiguration: { level: string };\n};\n\ntype SarifResult = {\n ruleId: string;\n level: 'error' | 'warning' | 'note';\n message: { text: string };\n locations: Array<{\n physicalLocation: {\n artifactLocation: { uri: string };\n region?: { startLine: number };\n };\n }>;\n};\n\nfunction toSarifLevel(severity: 'error' | 'warning' | 'info'): 'error' | 'warning' | 'note' {\n if (severity === 'error') return 'error';\n if (severity === 'warning') return 'warning';\n return 'note';\n}\n\nexport function formatSarifReport(report: ValidationReport, tokenFilePath: string): SarifLog {\n // Deduplicate rules from diagnostics\n const ruleMap = new Map<string, SarifRule>();\n for (const diagnostic of report.diagnostics) {\n if (!ruleMap.has(diagnostic.rule)) {\n ruleMap.set(diagnostic.rule, {\n id: diagnostic.rule,\n shortDescription: { text: diagnostic.message },\n defaultConfiguration: { level: toSarifLevel(diagnostic.severity) },\n });\n }\n }\n\n const rules = Array.from(ruleMap.values());\n\n const results: SarifResult[] = report.diagnostics.map((diagnostic) => {\n const messageParts = [diagnostic.message];\n if (diagnostic.path) {\n messageParts.push(`path: ${diagnostic.path}`);\n }\n if (diagnostic.actual) {\n messageParts.push(`actual: ${diagnostic.actual}`);\n }\n if (diagnostic.expected) {\n messageParts.push(`expected: ${diagnostic.expected}`);\n }\n\n return {\n ruleId: diagnostic.rule,\n level: toSarifLevel(diagnostic.severity),\n message: { text: messageParts.join('; ') },\n locations: [\n {\n physicalLocation: {\n artifactLocation: { uri: tokenFilePath },\n },\n },\n ],\n };\n });\n\n return {\n $schema:\n 'https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/sarif-2.1/schema/sarif-schema-2.1.0.json',\n version: '2.1.0',\n runs: [\n {\n tool: {\n driver: {\n name: 'fetchtype',\n version: '0.0.0',\n informationUri: 'https://fetchtype.com',\n rules,\n },\n },\n results,\n },\n ],\n };\n}\n","import type { TypographyContext } from '@fetchtype/types';\nimport { parseDesignTokenSet } from './index.js';\n\nexport type DriftChangeKind = 'breaking' | 'non-breaking' | 'improvement';\n\nexport type DriftChange = {\n kind: DriftChangeKind;\n category: string;\n path: string;\n description: string;\n baseline: string | undefined;\n current: string | undefined;\n};\n\nexport type DriftReport = {\n breaking: DriftChange[];\n nonBreaking: DriftChange[];\n improvements: DriftChange[];\n summary: string;\n};\n\n// --- Helpers ---\n\n/**\n * Parse a CSS length string like \"16px\", \"1rem\", \"clamp(14px,2vw,24px)\" into\n * a pixel value. Returns NaN when parsing fails.\n *\n * We take the minimum of clamp() as the effective minimum size.\n */\nfunction parsePx(value: string): number {\n if (typeof value !== 'string') return NaN;\n\n // Handle clamp(min, preferred, max) — take the min\n const clampMatch = value.match(/^clamp\\(\\s*([^,]+),/);\n if (clampMatch) {\n return parsePx(clampMatch[1]!.trim());\n }\n\n const pxMatch = value.match(/^([\\d.]+)px$/);\n if (pxMatch) return parseFloat(pxMatch[1]!);\n\n const remMatch = value.match(/^([\\d.]+)rem$/);\n if (remMatch) return parseFloat(remMatch[1]!) * 16;\n\n const emMatch = value.match(/^([\\d.]+)em$/);\n if (emMatch) return parseFloat(emMatch[1]!) * 16;\n\n return NaN;\n}\n\nfunction normalizeFontFamily(ff: string | string[]): string {\n return Array.isArray(ff) ? ff[0] ?? '' : ff;\n}\n\nfunction primaryFont(ff: string | string[]): string {\n const primary = normalizeFontFamily(ff);\n return primary.trim().replace(/['\"]/g, '');\n}\n\nfunction makeChange(\n kind: DriftChangeKind,\n category: string,\n path: string,\n description: string,\n baseline: string | undefined,\n current: string | undefined,\n): DriftChange {\n return { kind, category, path, description, baseline, current };\n}\n\n// --- Main detector ---\n\nexport function detectDrift(baselineRaw: unknown, currentRaw: unknown): DriftReport {\n const baseline = parseDesignTokenSet(baselineRaw);\n const current = parseDesignTokenSet(currentRaw);\n\n const breaking: DriftChange[] = [];\n const nonBreaking: DriftChange[] = [];\n const improvements: DriftChange[] = [];\n\n // ── Typography contexts ──\n const allContexts = new Set([\n ...Object.keys(baseline.typography),\n ...Object.keys(current.typography),\n ]);\n\n for (const ctx of allContexts) {\n const base = baseline.typography[ctx as TypographyContext];\n const curr = current.typography[ctx as TypographyContext];\n\n if (!base && curr) {\n // New context added\n improvements.push(\n makeChange(\n 'improvement',\n 'font',\n `typography.${ctx}`,\n `New typography context \"${ctx}\" added`,\n undefined,\n String(curr.fontSize),\n ),\n );\n continue;\n }\n\n if (base && !curr) {\n // Context removed — this is breaking\n breaking.push(\n makeChange(\n 'breaking',\n 'font',\n `typography.${ctx}`,\n `Typography context \"${ctx}\" removed`,\n String(base.fontSize),\n undefined,\n ),\n );\n continue;\n }\n\n if (!base || !curr) continue;\n\n // Font family changed\n const baseFamily = primaryFont(base.fontFamily);\n const currFamily = primaryFont(curr.fontFamily);\n if (baseFamily.toLowerCase() !== currFamily.toLowerCase()) {\n breaking.push(\n makeChange(\n 'breaking',\n 'font',\n `typography.${ctx}.fontFamily`,\n `Font family changed from \"${baseFamily}\" to \"${currFamily}\" in context \"${ctx}\"`,\n baseFamily,\n currFamily,\n ),\n );\n }\n\n // Font size changes\n const basePx = parsePx(base.fontSize);\n const currPx = parsePx(curr.fontSize);\n if (!Number.isNaN(basePx) && !Number.isNaN(currPx) && basePx !== currPx) {\n const pct = ((currPx - basePx) / basePx) * 100;\n const absPct = Math.abs(pct);\n const pctStr = `${pct > 0 ? '+' : ''}${pct.toFixed(1)}%`;\n\n // Body font decreased below 14px — breaking\n if (ctx === 'body' && currPx < 14) {\n breaking.push(\n makeChange(\n 'breaking',\n 'scale',\n `typography.${ctx}.fontSize`,\n `Body font size decreased below 14px (now ${currPx}px, was ${basePx}px)`,\n base.fontSize,\n curr.fontSize,\n ),\n );\n } else if (absPct <= 20) {\n nonBreaking.push(\n makeChange(\n 'non-breaking',\n 'scale',\n `typography.${ctx}.fontSize`,\n `Font size in \"${ctx}\" changed from ${base.fontSize} to ${curr.fontSize} (${pctStr})`,\n base.fontSize,\n curr.fontSize,\n ),\n );\n } else {\n // Large size change > 20%\n breaking.push(\n makeChange(\n 'breaking',\n 'scale',\n `typography.${ctx}.fontSize`,\n `Font size in \"${ctx}\" changed by more than 20%: ${base.fontSize} → ${curr.fontSize} (${pctStr})`,\n base.fontSize,\n curr.fontSize,\n ),\n );\n }\n }\n\n // Letter spacing changes\n if (\n base.letterSpacing !== undefined &&\n curr.letterSpacing !== undefined &&\n base.letterSpacing !== curr.letterSpacing\n ) {\n nonBreaking.push(\n makeChange(\n 'non-breaking',\n 'scale',\n `typography.${ctx}.letterSpacing`,\n `Letter spacing in \"${ctx}\" changed from ${base.letterSpacing} to ${curr.letterSpacing}`,\n base.letterSpacing,\n curr.letterSpacing,\n ),\n );\n }\n\n // Line height changes\n const baseLineHeight = String(base.lineHeight);\n const currLineHeight = String(curr.lineHeight);\n if (baseLineHeight !== currLineHeight) {\n nonBreaking.push(\n makeChange(\n 'non-breaking',\n 'scale',\n `typography.${ctx}.lineHeight`,\n `Line height in \"${ctx}\" changed from ${baseLineHeight} to ${currLineHeight}`,\n baseLineHeight,\n currLineHeight,\n ),\n );\n }\n }\n\n // ── Heading size order ──\n const headingKeys = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const;\n for (let i = 0; i < headingKeys.length - 1; i++) {\n const bigger = headingKeys[i]!;\n const smaller = headingKeys[i + 1]!;\n const biggerPx = parsePx(current.hierarchy.headings[bigger].fontSize);\n const smallerPx = parsePx(current.hierarchy.headings[smaller].fontSize);\n if (!Number.isNaN(biggerPx) && !Number.isNaN(smallerPx) && smallerPx > biggerPx) {\n // Only flag if this wasn't already broken in baseline\n const baselineBiggerPx = parsePx(baseline.hierarchy.headings[bigger].fontSize);\n const baselineSmallerPx = parsePx(baseline.hierarchy.headings[smaller].fontSize);\n const wasAlreadyBroken =\n !Number.isNaN(baselineBiggerPx) &&\n !Number.isNaN(baselineSmallerPx) &&\n baselineSmallerPx > baselineBiggerPx;\n\n if (!wasAlreadyBroken) {\n breaking.push(\n makeChange(\n 'breaking',\n 'scale',\n `hierarchy.headings.${smaller}.fontSize`,\n `Heading size order violated: ${smaller} (${current.hierarchy.headings[smaller].fontSize}) is now larger than ${bigger} (${current.hierarchy.headings[bigger].fontSize})`,\n current.hierarchy.headings[bigger].fontSize,\n current.hierarchy.headings[smaller].fontSize,\n ),\n );\n }\n }\n }\n\n // ── Scale type changed ──\n if (baseline.hierarchy.scale !== current.hierarchy.scale) {\n breaking.push(\n makeChange(\n 'breaking',\n 'scale',\n 'hierarchy.scale',\n `Scale type changed from \"${baseline.hierarchy.scale}\" to \"${current.hierarchy.scale}\"`,\n baseline.hierarchy.scale,\n current.hierarchy.scale,\n ),\n );\n }\n\n // ── Themes ──\n const baselineThemeNames = new Set(baseline.themes.map((t) => t.name));\n const currentThemeNames = new Set(current.themes.map((t) => t.name));\n\n for (const name of baselineThemeNames) {\n if (!currentThemeNames.has(name)) {\n breaking.push(\n makeChange(\n 'breaking',\n 'theme',\n `themes.${name}`,\n `Theme \"${name}\" was removed`,\n name,\n undefined,\n ),\n );\n }\n }\n\n for (const name of currentThemeNames) {\n if (!baselineThemeNames.has(name)) {\n improvements.push(\n makeChange(\n 'improvement',\n 'theme',\n `themes.${name}`,\n `New theme \"${name}\" added`,\n undefined,\n name,\n ),\n );\n }\n }\n\n // ── Modes ──\n const baselineModeNames = new Set(Object.keys(baseline.modes ?? {}));\n const currentModeNames = new Set(Object.keys(current.modes ?? {}));\n\n for (const name of baselineModeNames) {\n if (!currentModeNames.has(name)) {\n breaking.push(\n makeChange(\n 'breaking',\n 'mode',\n `modes.${name}`,\n `Mode \"${name}\" was removed`,\n name,\n undefined,\n ),\n );\n }\n }\n\n for (const name of currentModeNames) {\n if (!baselineModeNames.has(name)) {\n improvements.push(\n makeChange(\n 'improvement',\n 'mode',\n `modes.${name}`,\n `New mode \"${name}\" added`,\n undefined,\n name,\n ),\n );\n }\n }\n\n // ── Colors (hex comparison) ──\n const colorModes = ['light', 'dark'] as const;\n const colorGroups = ['text', 'background', 'border', 'interactive'] as const;\n\n for (const mode of colorModes) {\n for (const group of colorGroups) {\n const baseGroup = baseline.color[mode][group] as Record<string, { value: string }>;\n const currGroup = current.color[mode][group] as Record<string, { value: string }>;\n\n for (const key of Object.keys(baseGroup)) {\n const baseVal = baseGroup[key]?.value;\n const currVal = currGroup[key]?.value;\n if (baseVal !== undefined && currVal !== undefined && baseVal !== currVal) {\n nonBreaking.push(\n makeChange(\n 'non-breaking',\n 'color',\n `color.${mode}.${group}.${key}.value`,\n `Color token color.${mode}.${group}.${key} changed from ${baseVal} to ${currVal}`,\n baseVal,\n currVal,\n ),\n );\n }\n }\n }\n }\n\n // ── Spacing changes ──\n const baseSpacingKeys = Object.keys(baseline.spacing.scale);\n const currSpacingKeys = Object.keys(current.spacing.scale);\n\n // Find changed spacing values\n for (const key of baseSpacingKeys) {\n if (currSpacingKeys.includes(key)) {\n const baseVal = baseline.spacing.scale[key];\n const currVal = current.spacing.scale[key];\n if (baseVal !== currVal) {\n nonBreaking.push(\n makeChange(\n 'non-breaking',\n 'spacing',\n `spacing.scale.${key}`,\n `Spacing scale \"${key}\" changed from ${baseVal} to ${currVal}`,\n baseVal,\n currVal,\n ),\n );\n }\n }\n }\n\n // ── Dark mode completeness improvement ──\n // If baseline was missing dark mode tokens (text colors match light) but current has distinct ones\n const baselineDarkSameAsLight =\n baseline.color.dark.text.primary.value === baseline.color.light.text.primary.value;\n const currentDarkDifferent =\n current.color.dark.text.primary.value !== current.color.light.text.primary.value;\n\n if (baselineDarkSameAsLight && currentDarkDifferent) {\n improvements.push(\n makeChange(\n 'improvement',\n 'color',\n 'color.dark',\n 'Dark mode color tokens now differ from light mode (dark mode completeness improved)',\n baseline.color.dark.text.primary.value,\n current.color.dark.text.primary.value,\n ),\n );\n }\n\n const totalCount = breaking.length + nonBreaking.length + improvements.length;\n const summary =\n totalCount === 0\n ? 'No changes detected.'\n : `${breaking.length} breaking, ${nonBreaking.length} non-breaking, ${improvements.length} improvement${improvements.length !== 1 ? 's' : ''}`;\n\n return { breaking, nonBreaking, improvements, summary };\n}\n","import { FetchTypeConfigSchema, type FetchTypeConfig } from '@fetchtype/types';\n\nimport { resolveProfile } from './profiles.js';\n\n/**\n * Resolve a raw config object by expanding any `extends` chain, merging\n * bases left-to-right, and applying local overrides on top.\n * Pure: no file I/O, no async.\n */\nexport function resolveConfig(raw: Partial<FetchTypeConfig>): FetchTypeConfig {\n const { extends: extendsField, ...localOverrides } = raw;\n\n if (!extendsField) {\n return FetchTypeConfigSchema.parse(localOverrides);\n }\n\n const names = Array.isArray(extendsField) ? extendsField : [extendsField];\n\n // Resolve and merge bases left-to-right\n let merged: Record<string, unknown> = {};\n for (const name of names) {\n if (!name.startsWith('fetchtype:')) {\n throw new Error(\n `npm package extends not yet supported, use built-in profiles: fetchtype:recommended, fetchtype:strict, fetchtype:accessibility`,\n );\n }\n const profile = resolveProfile(name);\n if (!profile) {\n throw new Error(\n `Unknown built-in profile \"${name}\". Available profiles: fetchtype:recommended, fetchtype:strict, fetchtype:accessibility`,\n );\n }\n merged = mergeConfigs(merged as Partial<FetchTypeConfig>, profile);\n }\n\n // Apply local overrides on top\n const resolved = mergeConfigs(merged as Partial<FetchTypeConfig>, localOverrides);\n return FetchTypeConfigSchema.parse(resolved);\n}\n\nfunction mergeConfigs(\n base: Partial<FetchTypeConfig>,\n override: Partial<FetchTypeConfig>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = { ...base, ...override };\n\n // Deep-merge rules per-rule (override wins per key, not full replacement)\n if (base.rules !== undefined || override.rules !== undefined) {\n result['rules'] = {\n ...(base.rules ?? {}),\n ...(override.rules ?? {}),\n };\n }\n\n // Deep-merge performance (override wins per key)\n if (base.performance !== undefined || override.performance !== undefined) {\n result['performance'] = {\n ...(base.performance ?? {}),\n ...(override.performance ?? {}),\n };\n }\n\n // Deep-merge fonts (override wins per key)\n if (base.fonts !== undefined || override.fonts !== undefined) {\n result['fonts'] = {\n ...(base.fonts ?? {}),\n ...(override.fonts ?? {}),\n };\n }\n\n return result;\n}\n","import type { FetchTypeConfig } from '@fetchtype/types';\n\n// \"fetchtype:recommended\" — current defaults, all rules enabled at their default severities\nexport const RECOMMENDED_PROFILE: Partial<FetchTypeConfig> = {\n rules: {}, // empty = all defaults\n};\n\n// \"fetchtype:strict\" — all rules as errors, tight thresholds\nexport const STRICT_PROFILE: Partial<FetchTypeConfig> = {\n rules: {\n 'color.contrast': 'error',\n 'color.dark-mode': 'error',\n 'scale.descending': 'error',\n 'scale.base-size': 'error',\n 'spacing.consistency': 'error',\n 'type.line-height': 'error',\n 'type.caption-minimum': 'error',\n 'layout.max-width': 'error',\n 'font.fallback-fonts': 'error',\n 'font.weight-available': 'error',\n 'font.axis-range': 'error',\n 'font.subset-coverage': 'error',\n 'font.display-strategy': 'error',\n 'font.preload-count': 'error',\n 'font.fluid-type': 'error',\n 'font.payload-budget': 'error',\n 'font.availability': 'error',\n 'policy.font-allowlist': 'error',\n 'policy.font-blocklist': 'error',\n },\n performance: {\n maxFontCount: 3,\n maxPreloadCount: 2,\n },\n};\n\n// \"fetchtype:accessibility\" — WCAG AAA focus, large minimums\nexport const ACCESSIBILITY_PROFILE: Partial<FetchTypeConfig> = {\n rules: {\n 'color.contrast': { severity: 'error', options: { minRatio: 7 } },\n 'type.line-height': { severity: 'error', options: { min: 1.5 } },\n 'type.caption-minimum': 'error',\n 'scale.base-size': { severity: 'error', options: { minPx: 16 } },\n 'font.display-strategy': 'error',\n },\n requiredSubsets: ['latin', 'latin-ext'],\n};\n\nexport const BUILT_IN_PROFILES: Record<string, Partial<FetchTypeConfig>> = {\n 'fetchtype:recommended': RECOMMENDED_PROFILE,\n 'fetchtype:strict': STRICT_PROFILE,\n 'fetchtype:accessibility': ACCESSIBILITY_PROFILE,\n};\n\nexport function resolveProfile(name: string): Partial<FetchTypeConfig> | undefined {\n return BUILT_IN_PROFILES[name];\n}\n","import type { DesignTokenSet } from '@fetchtype/types';\n\nimport { DEFAULT_TOKEN_SET, getPreset } from './presets.js';\nimport { validateDesignTokenSet } from './index.js';\n\nexport type GenerateOptions = {\n context: string; // 'saas-dashboard', 'editorial', 'ecommerce', 'docs', 'marketing'\n brandColor?: string; // primary brand color hex\n maxFonts?: number; // max web fonts (default 2)\n budgetKb?: number; // font payload budget\n subsets?: string[]; // required subsets\n accessibility?: 'wcag-aa' | 'wcag-aaa'; // accessibility level\n preset?: string; // explicit preset name to use as base\n};\n\nexport type GenerateResult = {\n tokenSet: DesignTokenSet;\n reasoning: string[]; // explain decisions made\n fonts: { primary: string; secondary: string; mono?: string };\n warnings: string[];\n};\n\nfunction mapContextToPreset(context: string): string {\n const contextMap: Record<string, string> = {\n saas: 'dashboard',\n 'saas-dashboard': 'dashboard',\n dashboard: 'dashboard',\n admin: 'dashboard',\n app: 'dashboard',\n editorial: 'editorial',\n blog: 'editorial',\n magazine: 'editorial',\n news: 'editorial',\n ecommerce: 'ecommerce',\n shop: 'ecommerce',\n store: 'ecommerce',\n docs: 'docs',\n documentation: 'docs',\n api: 'docs',\n marketing: 'base',\n landing: 'base',\n corporate: 'base',\n // Design system presets\n material: 'material',\n carbon: 'carbon',\n fluent: 'fluent',\n radix: 'radix',\n spectrum: 'spectrum',\n };\n\n const key = context.toLowerCase().replace(/[\\s_-]+/g, '-');\n return contextMap[key] ?? 'base';\n}\n\nfunction applyBrandColor(tokens: DesignTokenSet, hex: string): void {\n // Apply to accent colors in both light and dark modes\n tokens.color.light.text.accent = { value: hex, description: 'Brand accent' };\n tokens.color.light.background.accent = { value: hex, description: 'Brand accent bg' };\n tokens.color.light.interactive.default = { value: hex, description: 'Brand interactive' };\n // Dark mode: same color (could be lightened but keep it simple)\n tokens.color.dark.text.accent = { value: hex, description: 'Brand accent' };\n tokens.color.dark.background.accent = { value: hex, description: 'Brand accent bg' };\n tokens.color.dark.interactive.default = { value: hex, description: 'Brand interactive' };\n}\n\nfunction extractFontFamily(value: string | string[]): string {\n if (Array.isArray(value)) {\n return value[0] ?? 'system-ui';\n }\n // fontFamily may be a comma-separated stack like \"Inter, sans-serif\"\n return value.split(',')[0]?.trim() ?? 'system-ui';\n}\n\nfunction extractPrimaryFont(tokens: DesignTokenSet): string {\n const body = tokens.typography['body'];\n if (body) {\n return extractFontFamily(body.fontFamily);\n }\n // Fallback: first typography context\n const first = Object.values(tokens.typography)[0];\n if (first) {\n return extractFontFamily(first.fontFamily);\n }\n return 'system-ui';\n}\n\nfunction extractSecondaryFont(tokens: DesignTokenSet): string {\n const heading = tokens.typography['heading'];\n\n if (heading) {\n const headingFamily = extractFontFamily(heading.fontFamily);\n const bodyFamily = extractPrimaryFont(tokens);\n // Only return heading font as secondary if it differs from body\n if (headingFamily !== bodyFamily) {\n return headingFamily;\n }\n }\n\n // Fallback: look for code context\n const code = tokens.typography['code'];\n if (code) {\n const codeFamily = extractFontFamily(code.fontFamily);\n const bodyFamily = extractPrimaryFont(tokens);\n if (codeFamily !== bodyFamily) {\n return codeFamily;\n }\n }\n\n // All contexts use the same font — return it again\n return extractPrimaryFont(tokens);\n}\n\nfunction extractMonoFont(tokens: DesignTokenSet): string | undefined {\n const code = tokens.typography['code'];\n if (!code) return undefined;\n const family = extractFontFamily(code.fontFamily);\n const primary = extractPrimaryFont(tokens);\n return family !== primary ? family : undefined;\n}\n\nexport function generateTokenSet(options: GenerateOptions): GenerateResult {\n const reasoning: string[] = [];\n const warnings: string[] = [];\n\n // 1. Select base preset from context keyword\n const presetName = options.preset ?? mapContextToPreset(options.context);\n const baseTokens = structuredClone(getPreset(presetName) ?? DEFAULT_TOKEN_SET);\n reasoning.push(`Base preset: ${presetName}`);\n\n // 2. If brandColor provided, apply it to the token set\n if (options.brandColor) {\n applyBrandColor(baseTokens, options.brandColor);\n reasoning.push(`Applied brand color: ${options.brandColor}`);\n }\n\n // 3. Note accessibility level if specified\n if (options.accessibility) {\n reasoning.push(`Accessibility target: ${options.accessibility}`);\n }\n\n // 4. Note font budget constraints if specified\n if (options.maxFonts !== undefined) {\n reasoning.push(`Max fonts: ${options.maxFonts}`);\n }\n if (options.budgetKb !== undefined) {\n reasoning.push(`Font budget: ${options.budgetKb}kb`);\n }\n if (options.subsets && options.subsets.length > 0) {\n reasoning.push(`Required subsets: ${options.subsets.join(', ')}`);\n }\n\n // 5. Validate the token set\n const report = validateDesignTokenSet(baseTokens);\n if (!report.pass) {\n warnings.push(\n ...report.diagnostics\n .filter((d) => d.severity === 'error')\n .map((d) => d.message),\n );\n }\n\n // 6. Extract font info from the token set\n const primaryFont = extractPrimaryFont(baseTokens);\n const secondaryFont = extractSecondaryFont(baseTokens);\n const monoFont = extractMonoFont(baseTokens);\n\n const fonts: GenerateResult['fonts'] = { primary: primaryFont, secondary: secondaryFont };\n if (monoFont) {\n fonts.mono = monoFont;\n }\n\n return {\n tokenSet: baseTokens,\n reasoning,\n fonts,\n warnings,\n };\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\n\nimport {\n buildTokenArtifacts,\n generateShadcnCss,\n generateTailwindConfig,\n getPreset,\n PRESET_NAMES,\n prepareFont,\n queryTypographySystems,\n validateDesignTokenSet,\n auditDirectory,\n formatAuditReport,\n generateTokenSet,\n} from '@fetchtype/core';\nimport { suggestFonts, type SuggestionContext, resolveFont, searchRegistry, recommendPairings, registryStats } from '@fetchtype/fonts';\nimport { generateFallbackCSS } from '@fetchtype/core';\nimport type {\n AgentDecision,\n Diagnostic,\n TypographySystemsResult,\n ValidationReport,\n} from '@fetchtype/types';\nimport { resolvePromptToTokenSet } from './prompt-init.js';\n\ntype ToolSchema = Record<string, z.ZodTypeAny>;\n\ntype ToolArgs = Record<string, unknown>;\n\ntype ToolResponse = {\n content: Array<{ type: 'text'; text: string }>;\n isError?: boolean;\n};\n\ntype ToolHandler = (args: ToolArgs) => ToolResponse | Promise<ToolResponse>;\n\ntype AgentPriority = 'high' | 'medium' | 'low';\n\ntype AgentImplementationItem = {\n rule: string;\n priority: AgentPriority;\n path: string;\n changeType:\n | 'increase'\n | 'decrease'\n | 'add'\n | 'remove'\n | 'align'\n | 'review'\n | 'correct';\n instruction: string;\n expected?: string;\n actual?: string;\n};\n\ntype AgentValidationPayload = {\n format: 'fetchtype-agent-validation/v1';\n summary: {\n pass: boolean;\n counts: ValidationReport['counts'];\n referenceSystems: string[];\n };\n blockingIssues: AgentImplementationItem[];\n followUpIssues: AgentImplementationItem[];\n referenceEvaluations: ValidationReport['references'];\n implementationPlan: AgentImplementationItem[];\n rawReport: ValidationReport;\n};\n\ntype AgentSystemsPayload = {\n format: 'fetchtype-agent-systems/v1';\n query: {\n text?: string;\n useCase?: string;\n style?: string;\n kind: string;\n };\n recommendations: Array<{\n referenceId: string;\n name: string;\n kind: string;\n rationale: string[];\n implementationKeywords: string[];\n tokenBias: {\n primaryCategory: 'serif' | 'sans' | 'mono' | 'system';\n density: 'compact' | 'balanced' | 'comfortable' | 'expressive';\n hierarchy: 'semantic' | 'scale-led' | 'editorial' | 'technical';\n };\n }>;\n patterns: Array<{\n id: string;\n name: string;\n summary: string;\n implementationImplications: string[];\n }>;\n nextCommands: string[];\n rawResult: TypographySystemsResult;\n};\n\ntype AgentInitPayload = {\n format: 'fetchtype-agent-init/v1';\n summary: {\n source: 'preset' | 'prompt' | 'default';\n preset?: string;\n prompt?: string;\n reasoning: string;\n };\n recommendedReferences: Array<{\n referenceId: string;\n referenceName: string;\n score: number;\n why: string;\n }>;\n nextCommands: string[];\n tokenSet: unknown;\n};\n\ntype AgentSuggestPayload = {\n format: 'fetchtype-agent-suggest/v1';\n summary: {\n context: SuggestionContext;\n variableOnly: boolean;\n referenceSystem?: string;\n };\n relatedReferences: Array<{\n referenceId: string;\n name: string;\n reason: string;\n }>;\n suggestions: Array<{\n family: string;\n category: string;\n variable: boolean;\n sizeKb: number;\n rationale: string;\n }>;\n implementationNotes: string[];\n nextCommands: string[];\n};\n\nfunction registerTool(\n server: McpServer,\n name: string,\n description: string,\n params: ToolSchema,\n handler: ToolHandler,\n): void {\n const register = server.tool.bind(server) as unknown as (\n toolName: string,\n toolDescription: string,\n toolParams: ToolSchema,\n toolHandler: ToolHandler,\n ) => unknown;\n\n register(name, description, params, handler);\n}\n\nfunction textResponse(text: string, isError = false): ToolResponse {\n return {\n content: [{ type: 'text', text }],\n ...(isError ? { isError: true } : {}),\n };\n}\n\nfunction wrapDecision(payload: unknown, decision: AgentDecision): string {\n return JSON.stringify({ ...decision, data: payload }, null, 2);\n}\n\nfunction getPriority(severity: Diagnostic['severity']): AgentPriority {\n if (severity === 'error') {\n return 'high';\n }\n\n if (severity === 'warning') {\n return 'medium';\n }\n\n return 'low';\n}\n\nfunction inferChangeType(rule: string): AgentImplementationItem['changeType'] {\n if (\n rule.startsWith('contrast.') ||\n rule.includes('font-size-min') ||\n rule.includes('line-height')\n ) {\n return 'increase';\n }\n\n if (rule.includes('line-length') || rule.includes('payload') || rule.includes('size-direction')) {\n return 'decrease';\n }\n\n if (rule.includes('missing-fallback') || rule.includes('required-context')) {\n return 'add';\n }\n\n if (rule.includes('unknown') || rule.includes('invalid')) {\n return 'correct';\n }\n\n if (rule.includes('reference-system')) {\n return 'align';\n }\n\n return 'review';\n}\n\nfunction inferInstruction(diagnostic: Diagnostic): string {\n if (diagnostic.rule.startsWith('contrast.')) {\n return 'Adjust the foreground/background token pair until it meets WCAG AA contrast.';\n }\n\n if (diagnostic.rule === 'text-spacing.body-line-height') {\n return 'Increase body line-height to the recommended readability threshold or higher.';\n }\n\n if (diagnostic.rule.startsWith('font-size-min.')) {\n return 'Increase the font size for this context to meet the minimum readable threshold.';\n }\n\n if (diagnostic.rule === 'line-length.prose') {\n return 'Reduce `layout.maxWidth.prose` so long-form reading stays within the target measure.';\n }\n\n if (diagnostic.rule === 'spacing.scale-monotonic') {\n return 'Reorder or increase spacing tokens so each step is larger than the previous one.';\n }\n\n if (diagnostic.rule === 'heading.size-direction') {\n return 'Make heading sizes descend from `h1` through `h6` without reversals.';\n }\n\n if (diagnostic.rule === 'heading.scale-divergence') {\n return 'Realign heading sizes to the declared type scale or change the scale token.';\n }\n\n if (diagnostic.rule === 'font.missing-fallbacks') {\n return 'Add generic fallback families after the primary family.';\n }\n\n if (diagnostic.rule === 'font.payload-estimate') {\n return 'Reduce unique families, weights, or variable-font scope to lower payload.';\n }\n\n if (diagnostic.rule === 'reference-system.unknown') {\n return 'Replace the unknown reference id with a valid system or archetype id.';\n }\n\n if (diagnostic.rule.endsWith('.mismatches')) {\n return 'Adjust the token set toward the selected reference profile before implementation.';\n }\n\n if (diagnostic.rule.endsWith('.score')) {\n return 'Use this score to decide whether the current token set is close enough to the target reference.';\n }\n\n return diagnostic.message;\n}\n\nfunction toImplementationItem(diagnostic: Diagnostic): AgentImplementationItem {\n return {\n rule: diagnostic.rule,\n priority: getPriority(diagnostic.severity),\n path: diagnostic.path,\n changeType: inferChangeType(diagnostic.rule),\n instruction: inferInstruction(diagnostic),\n ...(diagnostic.expected ? { expected: diagnostic.expected } : {}),\n ...(diagnostic.actual ? { actual: diagnostic.actual } : {}),\n };\n}\n\nexport function formatAgentValidationPayload(\n report: ValidationReport,\n referenceSystems: string[],\n): AgentValidationPayload {\n const items = report.diagnostics.map(toImplementationItem);\n const blockingIssues = items.filter((item) => item.priority === 'high');\n const followUpIssues = items.filter((item) => item.priority !== 'high');\n\n return {\n format: 'fetchtype-agent-validation/v1',\n summary: {\n pass: report.pass,\n counts: report.counts,\n referenceSystems,\n },\n blockingIssues,\n followUpIssues,\n referenceEvaluations: report.references,\n implementationPlan: [...blockingIssues, ...followUpIssues],\n rawReport: report,\n };\n}\n\nfunction inferPrimaryCategory(fonts: string[]): 'serif' | 'sans' | 'mono' | 'system' {\n const joined = fonts.join(' ').toLowerCase();\n\n if (joined.includes('mono')) {\n return 'mono';\n }\n\n if (joined.includes('system-ui') || joined.includes('sf pro') || joined.includes('segoe')) {\n return 'system';\n }\n\n if (\n joined.includes('serif') ||\n joined.includes('georgia') ||\n joined.includes('garamond') ||\n joined.includes('didot') ||\n joined.includes('bodoni') ||\n joined.includes('canela')\n ) {\n return 'serif';\n }\n\n return 'sans';\n}\n\nfunction inferDensity(styles: string[]): 'compact' | 'balanced' | 'comfortable' | 'expressive' {\n if (styles.some((style) => ['data-dense', 'functional-ui', 'productive-ui'].includes(style))) {\n return 'compact';\n }\n\n if (\n styles.some((style) => ['editorial-serif', 'bookish', 'accessible-public-sector'].includes(style))\n ) {\n return 'comfortable';\n }\n\n if (styles.some((style) => ['display-led', 'expressive-ui', 'luxury'].includes(style))) {\n return 'expressive';\n }\n\n return 'balanced';\n}\n\nfunction inferHierarchy(styles: string[]): 'semantic' | 'scale-led' | 'editorial' | 'technical' {\n if (styles.some((style) => ['semantic-ramp', 'systematic-ui'].includes(style))) {\n return 'semantic';\n }\n\n if (styles.some((style) => ['editorial-serif', 'display-led'].includes(style))) {\n return 'editorial';\n }\n\n if (styles.some((style) => ['mono-technical', 'developer-centric'].includes(style))) {\n return 'technical';\n }\n\n return 'scale-led';\n}\n\nexport function formatAgentSystemsPayload(\n result: TypographySystemsResult,\n query: { text?: string; useCase?: string; style?: string; kind: string },\n): AgentSystemsPayload {\n const recommendations = result.systems.slice(0, 4).map((system) => ({\n referenceId: system.id,\n name: system.name,\n kind: system.kind,\n rationale: [\n system.summary,\n ...system.characteristics.slice(0, 2),\n ],\n implementationKeywords: system.keywords.slice(0, 8),\n tokenBias: {\n primaryCategory: inferPrimaryCategory(system.fonts),\n density: inferDensity(system.styles),\n hierarchy: inferHierarchy(system.styles),\n },\n }));\n\n const nextCommands = recommendations.slice(0, 2).map(\n (system) =>\n `fetchtype validate -i <tokens.json> --reference ${system.referenceId} --json`,\n );\n\n return {\n format: 'fetchtype-agent-systems/v1',\n query,\n recommendations,\n patterns: result.patterns.map((pattern) => ({\n id: pattern.id,\n name: pattern.name,\n summary: pattern.summary,\n implementationImplications: pattern.implications,\n })),\n nextCommands,\n rawResult: result,\n };\n}\n\n\n\nfunction getRelatedSystemsForContext(context: SuggestionContext): TypographySystemsResult {\n const useCaseMap: Record<SuggestionContext, string> = {\n display: 'marketing-brand',\n interface: 'saas-ui',\n reading: 'editorial-publishing',\n mono: 'developer-tools',\n };\n\n return queryTypographySystems({ useCase: useCaseMap[context] });\n}\n\nexport function formatAgentInitPayload(input: {\n tokenSet: unknown;\n reasoning: string;\n recommendedReferences: Array<{\n referenceId: string;\n referenceName: string;\n score: number;\n }>;\n source: 'preset' | 'prompt' | 'default';\n preset?: string;\n prompt?: string;\n}): AgentInitPayload {\n return {\n format: 'fetchtype-agent-init/v1',\n summary: {\n source: input.source,\n ...(input.preset ? { preset: input.preset } : {}),\n ...(input.prompt ? { prompt: input.prompt } : {}),\n reasoning: input.reasoning,\n },\n recommendedReferences: input.recommendedReferences.map((reference) => ({\n ...reference,\n why: `Use \\`${reference.referenceId}\\` as the first validation target for this token set.`,\n })),\n nextCommands: [\n 'fetchtype validate -i <tokens.json> --reference auto --json',\n ...input.recommendedReferences\n .slice(0, 2)\n .map(\n (reference) =>\n `fetchtype validate -i <tokens.json> --reference ${reference.referenceId} --json`,\n ),\n ],\n tokenSet: input.tokenSet,\n };\n}\n\nexport function formatAgentSuggestPayload(input: {\n context: SuggestionContext;\n variableOnly: boolean;\n referenceSystem?: string;\n suggestions: Array<{\n family: string;\n category: string;\n reason: string;\n variable: boolean;\n sizeKb: number;\n }>;\n}): AgentSuggestPayload {\n const relatedResult = input.referenceSystem\n ? queryTypographySystems({ query: input.referenceSystem })\n : getRelatedSystemsForContext(input.context);\n const relatedReferences = relatedResult.systems.slice(0, 3).map((system) => ({\n referenceId: system.id,\n name: system.name,\n reason: system.summary,\n }));\n\n return {\n format: 'fetchtype-agent-suggest/v1',\n summary: {\n context: input.context,\n variableOnly: input.variableOnly,\n ...(input.referenceSystem ? { referenceSystem: input.referenceSystem } : {}),\n },\n relatedReferences,\n suggestions: input.suggestions.map((suggestion) => ({\n family: suggestion.family,\n category: suggestion.category,\n variable: suggestion.variable,\n sizeKb: suggestion.sizeKb,\n rationale: suggestion.reason,\n })),\n implementationNotes: [\n 'Pick the first suggestion as the primary candidate unless product constraints override it.',\n 'Validate the final token set against one of the related references before build/export.',\n ],\n nextCommands: relatedReferences\n .slice(0, 2)\n .map(\n (reference) =>\n `fetchtype validate -i <tokens.json> --reference ${reference.referenceId} --json`,\n ),\n };\n}\n\nexport function createMcpServer(): McpServer {\n const server = new McpServer({\n name: 'fetchtype',\n version: '0.1.0',\n });\n\n registerTool(\n server,\n 'fetchtype_validate',\n 'Validate a design token set against fetchtype rules',\n {\n tokens: z.unknown(),\n referenceSystems: z.array(z.string()).optional(),\n },\n async (args) => {\n const tokens = args.tokens;\n const referenceSystems = Array.isArray(args.referenceSystems)\n ? args.referenceSystems.filter((value): value is string => typeof value === 'string')\n : [];\n const report = validateDesignTokenSet(tokens, { referenceSystems });\n const payload = formatAgentValidationPayload(report, referenceSystems);\n const issueCount = report.diagnostics.length;\n const fixNextActions = report.diagnostics.slice(0, 3).map((d) => ({\n tool: 'fetchtype_validate',\n description: `Fix: ${d.rule} — ${d.message}`,\n suggestedArgs: { tokens, referenceSystems },\n }));\n return textResponse(\n wrapDecision(payload, {\n decision: `Validation ${report.pass ? 'passed' : 'failed'} with ${issueCount} issue${issueCount !== 1 ? 's' : ''}`,\n confidence: report.pass ? 1.0 : 0,\n alternatives: [],\n constraints: [],\n nextActions: report.pass\n ? [{ tool: 'fetchtype_build', description: 'Build artifacts from validated token set' }]\n : fixNextActions,\n }),\n );\n },\n );\n\n registerTool(\n server,\n 'fetchtype_build',\n 'Build artifacts (CSS, JSON, Tailwind, shadcn) from a design token set',\n {\n tokens: z.unknown(),\n format: z.enum(['css', 'json', 'tailwind', 'shadcn']).optional(),\n },\n async (args) => {\n const tokens = args.tokens;\n const format = args.format;\n const artifacts = buildTokenArtifacts(tokens);\n\n if (!artifacts.report.pass) {\n return textResponse(JSON.stringify(artifacts.report, null, 2), true);\n }\n\n const formats = ['css', 'json', 'tailwind', 'shadcn'];\n let output: string;\n switch (format) {\n case 'tailwind':\n output = generateTailwindConfig(artifacts.tokenSet);\n break;\n case 'shadcn':\n output = generateShadcnCss(artifacts.tokenSet);\n break;\n case 'json':\n output = artifacts.json;\n break;\n case 'css':\n default:\n output = artifacts.css;\n break;\n }\n\n const builtFormats = format ? [format] : formats;\n return textResponse(\n wrapDecision(\n { output, format: format ?? 'css' },\n {\n decision: `Built ${builtFormats.length} format${builtFormats.length !== 1 ? 's' : ''}: ${builtFormats.join(', ')}`,\n confidence: 1.0,\n alternatives: [],\n constraints: [],\n nextActions: [\n { tool: 'fetchtype_prepare', description: 'Prepare fonts for production' },\n ],\n },\n ),\n );\n },\n );\n\n registerTool(\n server,\n 'fetchtype_suggest',\n 'Suggest fonts for a given usage context',\n {\n context: z.enum(['display', 'interface', 'reading', 'mono']),\n limit: z.number().optional(),\n referenceSystem: z.string().optional(),\n variableOnly: z.boolean().optional(),\n },\n async (args) => {\n const context = args.context as SuggestionContext;\n const limit = typeof args.limit === 'number' ? args.limit : 5;\n const variableOnly = typeof args.variableOnly === 'boolean' ? args.variableOnly : false;\n const referenceSystem =\n typeof args.referenceSystem === 'string' ? args.referenceSystem : undefined;\n const suggestions = suggestFonts(context, {\n limit,\n variableOnly,\n } as Parameters<typeof suggestFonts>[1]);\n const payload = formatAgentSuggestPayload({\n context,\n variableOnly,\n ...(referenceSystem ? { referenceSystem } : {}),\n suggestions,\n });\n const topFont = suggestions[0];\n const topScore = topFont ? (topFont.sizeKb < 50 ? 0.9 : 0.75) : 0.5;\n return textResponse(\n wrapDecision(payload, {\n decision: topFont\n ? `Recommended ${topFont.family} for ${context}`\n : `No fonts found for ${context}`,\n confidence: topScore,\n alternatives: suggestions.slice(1, 3).map((s) => ({\n option: s.family,\n tradeoff: s.reason,\n })),\n constraints: variableOnly ? ['variable fonts only'] : [],\n nextActions: topFont\n ? [\n {\n tool: 'fetchtype_pair',\n description: `Get pairings for ${topFont.family}`,\n suggestedArgs: { font: topFont.family },\n },\n ]\n : [],\n }),\n );\n },\n );\n\n registerTool(\n server,\n 'fetchtype_init',\n 'Get a starter token set, optionally from a named preset',\n { preset: z.string().optional(), prompt: z.string().optional() },\n async (args) => {\n const preset = typeof args.preset === 'string' ? args.preset : undefined;\n const prompt = typeof args.prompt === 'string' ? args.prompt : undefined;\n\n if (prompt && !preset) {\n const result = resolvePromptToTokenSet(prompt);\n const promptPayload = formatAgentInitPayload({\n tokenSet: result.tokenSet,\n reasoning: result.reasoning,\n recommendedReferences: result.recommendedReferences,\n source: 'prompt',\n prompt,\n });\n return textResponse(\n wrapDecision(promptPayload, {\n decision: `Created token set from prompt: \"${prompt}\"`,\n confidence: 0.8,\n alternatives: [],\n constraints: [],\n nextActions: [\n { tool: 'fetchtype_validate', description: 'Validate the generated token set' },\n ],\n }),\n );\n }\n\n const tokenSet = preset ? getPreset(preset) : getPreset('base');\n if (!tokenSet) {\n return textResponse(\n `Unknown preset \"${preset}\". Available: ${PRESET_NAMES.join(', ')}`,\n true,\n );\n }\n const referenceReport = validateDesignTokenSet(tokenSet, {\n referenceSystems: ['auto'],\n });\n const presetPayload = formatAgentInitPayload({\n tokenSet,\n reasoning: preset ? `Using preset \"${preset}\".` : 'Using default base preset.',\n recommendedReferences: (referenceReport.references ?? []).map((reference) => ({\n referenceId: reference.referenceId,\n referenceName: reference.referenceName,\n score: reference.score,\n })),\n source: preset ? 'preset' : 'default',\n ...(preset ? { preset } : {}),\n });\n return textResponse(\n wrapDecision(presetPayload, {\n decision: `Created token set from ${preset ? `preset \"${preset}\"` : 'default base preset'}`,\n confidence: 0.9,\n alternatives: [],\n constraints: [],\n nextActions: [\n { tool: 'fetchtype_validate', description: 'Validate the generated token set' },\n ],\n }),\n );\n },\n );\n\n registerTool(\n server,\n 'fetchtype_presets',\n 'List available fetchtype presets',\n {},\n async () => {\n const presetList = PRESET_NAMES.map((name) => ({\n name,\n description: getPresetDescription(name),\n }));\n return textResponse(JSON.stringify(presetList, null, 2));\n },\n );\n\n registerTool(\n server,\n 'fetchtype_systems',\n 'Query curated typography systems, associated keywords, and extracted cross-system patterns',\n {\n query: z.string().optional(),\n useCase: z.string().optional(),\n style: z.string().optional(),\n kind: z\n .enum(['all', 'official-design-system', 'foundational-archetype'])\n .optional(),\n includePatterns: z.boolean().optional(),\n },\n async (args) => {\n const query = typeof args.query === 'string' ? args.query : undefined;\n const useCase = typeof args.useCase === 'string' ? args.useCase : undefined;\n const style = typeof args.style === 'string' ? args.style : undefined;\n const kind =\n args.kind === 'all' ||\n args.kind === 'official-design-system' ||\n args.kind === 'foundational-archetype'\n ? args.kind\n : undefined;\n const includePatterns =\n typeof args.includePatterns === 'boolean' ? args.includePatterns : undefined;\n const result = queryTypographySystems({\n query,\n useCase,\n style,\n kind: kind ?? 'all',\n includePatterns: includePatterns ?? true,\n });\n\n return textResponse(\n JSON.stringify(\n formatAgentSystemsPayload(result, {\n ...(query ? { text: query } : {}),\n ...(useCase ? { useCase } : {}),\n ...(style ? { style } : {}),\n kind: kind ?? 'all',\n }),\n null,\n 2,\n ),\n );\n },\n );\n\n // ── Registry tools (Phase 1) ──\n\n registerTool(\n server,\n 'fetchtype_resolve',\n 'Resolve a font from the registry. Returns full metadata including install paths, metrics, and classification.',\n {\n font: z.string().describe('Font family name or ID (e.g. \"inter\", \"Roboto\")'),\n },\n async (args) => {\n const font = typeof args.font === 'string' ? args.font : '';\n const entry = resolveFont(font);\n if (!entry) {\n return textResponse(`Font \"${font}\" not found in registry. Use fetchtype_search to find available fonts.`, true);\n }\n return textResponse(JSON.stringify(entry, null, 2));\n },\n );\n\n registerTool(\n server,\n 'fetchtype_pair',\n 'Get font pairing recommendations. Returns curated and algorithmic pairings with confidence scores.',\n {\n font: z.string().describe('Font family name or ID to get pairings for'),\n role: z.enum(['heading', 'body', 'accent', 'mono']).optional().describe('Filter by pairing role'),\n limit: z.number().optional().describe('Max number of recommendations (default: 5)'),\n },\n async (args) => {\n const font = typeof args.font === 'string' ? args.font : '';\n const role = args.role as 'heading' | 'body' | 'accent' | 'mono' | undefined;\n const limit = typeof args.limit === 'number' ? args.limit : 5;\n\n const entry = resolveFont(font);\n if (!entry) {\n return textResponse(`Font \"${font}\" not found in registry.`, true);\n }\n\n const pairings = recommendPairings(font, { role, limit });\n const topPairing = pairings[0];\n const pairingPayload = {\n font: { id: entry.id, family: entry.family },\n pairings,\n nextCommands: pairings.slice(0, 2).map((p) => `fetchtype resolve ${p.fontId} --fallback`),\n };\n return textResponse(\n wrapDecision(pairingPayload, {\n decision: topPairing\n ? `Use ${topPairing.fontId} with ${entry.family}`\n : `No pairings found for ${entry.family}`,\n confidence: topPairing ? topPairing.confidence : 0.5,\n alternatives: pairings.slice(1, 3).map((p) => ({\n option: p.fontId,\n tradeoff: p.rationale ?? 'Alternative pairing option',\n })),\n constraints: role ? [`role filter: ${role}`] : [],\n nextActions: [\n {\n tool: 'fetchtype_validate',\n description: 'Validate token set with selected fonts',\n },\n ],\n }),\n );\n },\n );\n\n registerTool(\n server,\n 'fetchtype_fallback',\n 'Generate platform-aware fallback CSS with metric overrides for CLS-free font loading across Windows, Apple, Android, Linux.',\n {\n font: z.string().describe('Font family name or ID'),\n compact: z.boolean().optional().describe('Use single @font-face instead of per-platform (less precise, smaller CSS)'),\n safariWrap: z.boolean().optional().describe('Wrap in @supports to exclude Safari (default: true)'),\n },\n async (args) => {\n const font = typeof args.font === 'string' ? args.font : '';\n const compact = typeof args.compact === 'boolean' ? args.compact : false;\n const safariWrap = typeof args.safariWrap === 'boolean' ? args.safariWrap : true;\n\n const entry = resolveFont(font);\n if (!entry) {\n return textResponse(`Font \"${font}\" not found in registry.`, true);\n }\n\n const css = generateFallbackCSS(entry, { compact, safariWrap, includeStack: true });\n return textResponse(css);\n },\n );\n\n registerTool(\n server,\n 'fetchtype_prepare',\n 'Download and optimize a font for production use. Generates WOFF2 files, @font-face CSS, fallback CSS, preload tags, and manifest.',\n {\n fontId: z.string().describe('Font ID from registry (e.g. \"inter\", \"roboto\")'),\n weights: z.array(z.number()).optional().describe('Weights to include (default: [400, 500, 700])'),\n subsets: z.array(z.string()).optional().describe('Subsets (default: [\"latin\"])'),\n outputDir: z.string().optional().describe('Output directory (default: \"./dist/fonts\")'),\n fontDisplay: z.enum(['swap', 'block', 'fallback', 'optional', 'auto']).optional().describe('font-display strategy (default: swap)'),\n generateFallbacks: z.boolean().optional().describe('Generate fallback CSS (default: true)'),\n performanceBudget: z.number().optional().describe('Budget in bytes (default: 150000)'),\n tokenFile: z.string().optional().describe('Token file to update with font reference'),\n },\n async (args) => {\n const fontId = typeof args.fontId === 'string' ? args.fontId : '';\n if (!fontId) {\n return textResponse('fontId is required.', true);\n }\n\n const weights = Array.isArray(args.weights) ? (args.weights as number[]) : undefined;\n const subsets = Array.isArray(args.subsets) ? (args.subsets as string[]) : undefined;\n const outputDir = typeof args.outputDir === 'string' ? args.outputDir : './dist/fonts';\n const fontDisplay = typeof args.fontDisplay === 'string'\n ? (args.fontDisplay as 'swap' | 'block' | 'fallback' | 'optional' | 'auto')\n : 'swap';\n const generateFallbacks = typeof args.generateFallbacks === 'boolean' ? args.generateFallbacks : true;\n const performanceBudget = typeof args.performanceBudget === 'number' ? args.performanceBudget : 150000;\n const tokenFile = typeof args.tokenFile === 'string' ? args.tokenFile : undefined;\n\n try {\n const manifest = await prepareFont({\n fontId,\n weights,\n subsets,\n outputDir,\n fontDisplay,\n generateFallbacks,\n performanceBudget,\n tokenFile,\n });\n\n return textResponse(\n JSON.stringify(\n {\n format: 'fetchtype-prepare/v1',\n fontId: manifest.fontId,\n family: manifest.family,\n version: manifest.version,\n outputDir,\n files: manifest.files.map((f) => ({\n path: f.path,\n weight: f.weight,\n style: f.style,\n subset: f.subset,\n format: f.format,\n sizeKb: Number((f.size / 1024).toFixed(1)),\n })),\n performance: manifest.performance,\n preloadTags: manifest.preloadTags,\n tokenPatch: manifest.tokenPatch ?? null,\n nextCommands: [\n `# Add to your HTML <head>:`,\n ...manifest.preloadTags,\n `# Import the CSS:`,\n `@import '${outputDir}/font-face.css';`,\n `@import '${outputDir}/fallback.css';`,\n ],\n },\n null,\n 2,\n ),\n );\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return textResponse(`fetchtype_prepare failed: ${message}`, true);\n }\n },\n );\n\n registerTool(\n server,\n 'fetchtype_search',\n 'Search the font registry with free-text and filters. Returns matching fonts with metadata.',\n {\n query: z.string().optional().describe('Free-text search (matches family name, tags, category)'),\n context: z.enum(['display', 'interface', 'reading', 'mono', 'editorial', 'data']).optional(),\n category: z.enum(['sans-serif', 'serif', 'monospace', 'display', 'handwriting']).optional(),\n variable: z.boolean().optional().describe('Only variable fonts'),\n subset: z.string().optional().describe('Filter by subset support (e.g. \"cyrillic\")'),\n maxPayload: z.number().optional().describe('Maximum estimated payload in bytes'),\n limit: z.number().optional().describe('Max results (default: 20)'),\n },\n async (args) => {\n const results = searchRegistry({\n query: typeof args.query === 'string' ? args.query : undefined,\n context: args.context as any,\n category: args.category as any,\n variable: typeof args.variable === 'boolean' ? args.variable : undefined,\n subset: typeof args.subset === 'string' ? args.subset : undefined,\n maxPayload: typeof args.maxPayload === 'number' ? args.maxPayload : undefined,\n limit: typeof args.limit === 'number' ? args.limit : 20,\n });\n\n const stats = registryStats();\n return textResponse(JSON.stringify({\n registry: { count: stats.count, variableCount: stats.variableCount },\n results: results.map(f => ({\n id: f.id,\n family: f.family,\n category: f.category,\n variable: f.variable,\n weights: f.weights,\n contexts: f.contexts,\n estimatedPayload: f.performance.estimatedPayload,\n loadingImpact: f.performance.loadingImpact,\n source: f.source,\n install: f.install.fontsource ?? f.install.googleCdn ?? null,\n })),\n count: results.length,\n }, null, 2));\n },\n );\n\n registerTool(\n server,\n 'fetchtype_audit',\n 'Audit a directory or file content for typography issues. Use to self-audit generated code.',\n {\n dir: z.string().optional().describe('Directory path to audit'),\n content: z.string().optional().describe('CSS/HTML content to audit inline (for self-audit)'),\n format: z.enum(['json', 'summary']).optional().describe('Output format (default: summary)'),\n },\n async (args) => {\n const dir = typeof args.dir === 'string' ? args.dir : undefined;\n const content = typeof args.content === 'string' ? args.content : undefined;\n const format = args.format === 'json' || args.format === 'summary' ? args.format : 'summary';\n\n if (!dir && !content) {\n return textResponse('Provide either \"dir\" (directory path) or \"content\" (inline CSS/HTML) to audit.', true);\n }\n\n if (dir && content) {\n return textResponse('Provide either \"dir\" or \"content\", not both.', true);\n }\n\n let auditDir: string;\n let tempPath: string | undefined;\n\n if (content) {\n // Write inline content to a temp file, audit it, then clean up\n const { mkdtemp, writeFile: wf, rm: _rm } = await import('node:fs/promises');\n const { tmpdir } = await import('node:os');\n const { join } = await import('node:path');\n\n const tmpDir = await mkdtemp(join(tmpdir(), 'fetchtype-mcp-audit-'));\n tempPath = tmpDir;\n\n // Detect content type from a simple heuristic\n const isHtml = /<html|<!DOCTYPE|<link|<style/i.test(content);\n const fileName = isHtml ? 'inline.html' : 'inline.css';\n await wf(join(tmpDir, fileName), content, 'utf8');\n auditDir = tmpDir;\n } else {\n auditDir = dir!;\n }\n\n try {\n const result = await auditDirectory(auditDir);\n\n let output: string;\n if (format === 'json') {\n output = JSON.stringify(result, null, 2);\n } else {\n const report = formatAuditReport(result);\n const errorCount = result.issues.filter((i) => i.severity === 'error').length;\n const warnCount = result.issues.filter((i) => i.severity === 'warning').length;\n output = `${report}\\nSelf-audit complete: ${errorCount} error${errorCount !== 1 ? 's' : ''}, ${warnCount} warning${warnCount !== 1 ? 's' : ''}.`;\n }\n\n return textResponse(output, result.issues.some((i) => i.severity === 'error'));\n } finally {\n if (tempPath) {\n const { rm } = await import('node:fs/promises');\n await rm(tempPath, { recursive: true, force: true });\n }\n }\n },\n );\n\n // ── Meta-tool: fetchtype_workflow ──\n\n registerTool(\n server,\n 'fetchtype_workflow',\n 'Plan a complete typography workflow. Returns ordered sequence of fetchtype tools to call.',\n {\n goal: z.string().describe(\n 'What you want to achieve, e.g., \"set up typography for a SaaS dashboard\"',\n ),\n },\n async (args) => {\n const goal = typeof args.goal === 'string' ? args.goal : '';\n const lowerGoal = goal.toLowerCase();\n\n type WorkflowKey = 'setup' | 'audit' | 'build' | 'fonts';\n\n type WorkflowStep = {\n tool: string;\n description: string;\n suggestedArgs?: Record<string, unknown>;\n };\n\n const workflowDefinitions: Record<WorkflowKey, WorkflowStep[]> = {\n setup: [\n { tool: 'fetchtype_suggest', description: 'Find fonts for your context' },\n { tool: 'fetchtype_pair', description: 'Get curated font pairings' },\n { tool: 'fetchtype_init', description: 'Generate a starter token set' },\n { tool: 'fetchtype_validate', description: 'Validate the token set' },\n { tool: 'fetchtype_build', description: 'Build CSS/JSON/Tailwind artifacts' },\n ],\n audit: [\n { tool: 'fetchtype_audit', description: 'Audit existing typography for issues' },\n { tool: 'fetchtype_validate', description: 'Validate token set against rules' },\n ],\n build: [\n { tool: 'fetchtype_validate', description: 'Validate before building' },\n { tool: 'fetchtype_build', description: 'Build artifacts' },\n { tool: 'fetchtype_prepare', description: 'Prepare fonts for production' },\n ],\n fonts: [\n { tool: 'fetchtype_suggest', description: 'Find candidate fonts' },\n { tool: 'fetchtype_pair', description: 'Get pairing recommendations' },\n { tool: 'fetchtype_resolve', description: 'Resolve font metadata' },\n ],\n };\n\n let matchedKey: WorkflowKey;\n let matchedWorkflow: WorkflowStep[];\n\n if (\n lowerGoal.includes('audit') ||\n lowerGoal.includes('check') ||\n lowerGoal.includes('review')\n ) {\n matchedKey = 'audit';\n } else if (\n lowerGoal.includes('build') ||\n lowerGoal.includes('export') ||\n lowerGoal.includes('compile')\n ) {\n matchedKey = 'build';\n } else if (\n lowerGoal.includes('font') ||\n lowerGoal.includes('pairing') ||\n lowerGoal.includes('typeface')\n ) {\n matchedKey = 'fonts';\n } else {\n // Default to full setup workflow for goals like \"set up\", \"create\", \"new project\"\n matchedKey = 'setup';\n }\n\n matchedWorkflow = workflowDefinitions[matchedKey];\n\n const responsePayload = {\n goal,\n workflow: matchedKey,\n steps: matchedWorkflow.map((step, index) => ({\n step: index + 1,\n ...step,\n })),\n description: `${matchedWorkflow.length}-step workflow for: ${goal}`,\n };\n\n return textResponse(\n wrapDecision(responsePayload, {\n decision: `Use the \"${matchedKey}\" workflow for: ${goal}`,\n confidence: 0.85,\n alternatives: (Object.keys(workflowDefinitions) as WorkflowKey[])\n .filter((key) => key !== matchedKey)\n .slice(0, 2)\n .map((key) => ({\n option: key,\n tradeoff: `${workflowDefinitions[key].length} steps — suited for ${key} goals`,\n })),\n constraints: [],\n nextActions: matchedWorkflow.slice(0, 1).map((step) => ({\n tool: step.tool,\n description: `Start with: ${step.description}`,\n })),\n }),\n );\n },\n );\n\n registerTool(\n server,\n 'fetchtype_generate',\n 'Generate a complete, validated token set from context and constraints. One call, one output.',\n {\n context: z.string().describe('Target context: saas-dashboard, editorial, ecommerce, docs, marketing'),\n brandColor: z.string().optional().describe('Primary brand color hex, e.g., #2563eb'),\n preset: z.string().optional().describe('Explicit preset name to use as base'),\n },\n ({ context, brandColor, preset }) => {\n const result = generateTokenSet({\n context: String(context),\n brandColor: brandColor !== undefined ? String(brandColor) : undefined,\n preset: preset !== undefined ? String(preset) : undefined,\n });\n\n return textResponse(\n wrapDecision(result, {\n decision: `Generated ${String(context)} token set`,\n confidence: result.warnings.length === 0 ? 0.95 : 0.7,\n alternatives: [],\n constraints: result.warnings,\n nextActions: [{ tool: 'fetchtype_validate', description: 'Validate the generated token set' }],\n }),\n );\n },\n );\n\n return server;\n}\n\nfunction getPresetDescription(name: string): string {\n const descriptions: Record<string, string> = {\n base: 'Clean sans-serif foundation with Inter. Good starting point for most projects.',\n editorial: 'Serif-forward layout optimized for long-form reading and articles.',\n dashboard: 'Compact, data-dense typography for admin panels and analytics.',\n ecommerce: 'Product-focused hierarchy with clear pricing and CTA typography.',\n docs: 'Technical documentation layout with strong code and prose support.',\n };\n return descriptions[name] ?? 'No description available.';\n}\n\nexport async function startMcpServer(): Promise<void> {\n const server = createMcpServer();\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n","import {\n findBestTypographyReferences,\n getPreset,\n} from '@fetchtype/core';\nimport type { DesignTokenSet } from '@fetchtype/types';\n\ntype PromptResult = {\n tokenSet: DesignTokenSet;\n reasoning: string;\n recommendedReferences: Array<{\n referenceId: string;\n referenceName: string;\n score: number;\n }>;\n};\n\ntype PresetPattern = {\n preset: string;\n keywords: string[];\n label: string;\n};\n\nconst PRESET_PATTERNS: PresetPattern[] = [\n { preset: 'dashboard', keywords: ['dashboard', 'admin', 'data', 'compact', 'dense', 'analytics'], label: 'dashboard' },\n { preset: 'editorial', keywords: ['editorial', 'blog', 'magazine', 'content', 'article', 'journal', 'news'], label: 'editorial' },\n { preset: 'docs', keywords: ['docs', 'documentation', 'technical', 'api', 'reference', 'guide'], label: 'docs' },\n { preset: 'ecommerce', keywords: ['ecommerce', 'shop', 'store', 'product', 'catalog', 'marketplace'], label: 'ecommerce' },\n];\n\ntype Modifier = {\n keywords: string[];\n label: string;\n apply: (tokenSet: DesignTokenSet) => void;\n};\n\nconst MODIFIERS: Modifier[] = [\n {\n keywords: ['traditional', 'classic', 'serif', 'elegant'],\n label: 'serif fonts',\n apply(tokenSet) {\n const serifStack = ['Georgia', 'Times New Roman', 'serif'];\n for (const key of Object.keys(tokenSet.typography)) {\n const ctx = key as keyof typeof tokenSet.typography;\n const typographyToken = tokenSet.typography[ctx];\n if (\n typographyToken &&\n !toFontFamilyArray(typographyToken.fontFamily).some(\n (fontFamily) => fontFamily === 'monospace' || fontFamily === 'ui-monospace',\n )\n ) {\n tokenSet.typography[ctx] = { ...typographyToken, fontFamily: serifStack };\n }\n }\n for (const level of Object.keys(tokenSet.hierarchy.headings)) {\n const heading = tokenSet.hierarchy.headings[level as keyof typeof tokenSet.hierarchy.headings];\n if (heading && typeof heading === 'object' && 'fontFamily' in heading) {\n (heading as { fontFamily: string[] }).fontFamily = serifStack;\n }\n }\n },\n },\n {\n keywords: ['compact', 'dense', 'small', 'tight'],\n label: 'compact sizing',\n apply(tokenSet) {\n tokenSet.spacing = {\n ...tokenSet.spacing,\n scale: {\n ...tokenSet.spacing.scale,\n lg: '0.75rem',\n xl: '1rem',\n '2xl': '1.5rem',\n '3xl': '2rem',\n },\n };\n if (tokenSet.typography.body) {\n tokenSet.typography.body = {\n ...tokenSet.typography.body,\n fontSize: '0.875rem',\n lineHeight: 1.4,\n };\n }\n },\n },\n {\n keywords: ['spacious', 'generous', 'airy', 'relaxed', 'open'],\n label: 'spacious layout',\n apply(tokenSet) {\n tokenSet.spacing = {\n ...tokenSet.spacing,\n scale: {\n ...tokenSet.spacing.scale,\n lg: '1.25rem',\n xl: '2rem',\n '2xl': '3rem',\n '3xl': '4rem',\n },\n };\n if (tokenSet.typography.body) {\n tokenSet.typography.body = {\n ...tokenSet.typography.body,\n lineHeight: 1.9,\n };\n }\n },\n },\n {\n keywords: ['high contrast', 'high-contrast', 'accessible', 'a11y'],\n label: 'high contrast colors',\n apply(tokenSet) {\n tokenSet.color.light.text.primary = { value: '#000000' };\n tokenSet.color.light.text.secondary = { value: '#1a1a1a' };\n tokenSet.color.light.background.primary = { value: '#ffffff' };\n tokenSet.color.dark.text.primary = { value: '#ffffff' };\n tokenSet.color.dark.text.secondary = { value: '#f0f0f0' };\n tokenSet.color.dark.background.primary = { value: '#000000' };\n },\n },\n {\n keywords: ['monospace', 'code', 'terminal', 'hacker'],\n label: 'monospace fonts',\n apply(tokenSet) {\n const monoStack = ['JetBrains Mono', 'ui-monospace', 'monospace'];\n for (const key of Object.keys(tokenSet.typography)) {\n const ctx = key as keyof typeof tokenSet.typography;\n if (tokenSet.typography[ctx]) {\n tokenSet.typography[ctx] = { ...tokenSet.typography[ctx], fontFamily: monoStack };\n }\n }\n for (const level of Object.keys(tokenSet.hierarchy.headings)) {\n const heading = tokenSet.hierarchy.headings[level as keyof typeof tokenSet.hierarchy.headings];\n if (heading && typeof heading === 'object' && 'fontFamily' in heading) {\n (heading as { fontFamily: string[] }).fontFamily = monoStack;\n }\n }\n },\n },\n];\n\nfunction normalizePrompt(prompt: string): string {\n return prompt.toLowerCase().trim();\n}\n\nfunction toFontFamilyArray(fontFamily: string | string[]): string[] {\n return Array.isArray(fontFamily) ? fontFamily : fontFamily.split(',').map((value) => value.trim());\n}\n\nfunction detectPreset(prompt: string): { preset: string; reason: string } {\n const normalized = normalizePrompt(prompt);\n\n for (const pattern of PRESET_PATTERNS) {\n for (const keyword of pattern.keywords) {\n if (normalized.includes(keyword)) {\n return {\n preset: pattern.preset,\n reason: `Matched \"${keyword}\" → ${pattern.label} preset`,\n };\n }\n }\n }\n\n return { preset: 'base', reason: 'No specific domain detected → base preset' };\n}\n\nfunction detectModifiers(prompt: string): { label: string; apply: (ts: DesignTokenSet) => void }[] {\n const normalized = normalizePrompt(prompt);\n const matched: { label: string; apply: (ts: DesignTokenSet) => void }[] = [];\n\n for (const modifier of MODIFIERS) {\n for (const keyword of modifier.keywords) {\n if (normalized.includes(keyword)) {\n matched.push({ label: modifier.label, apply: modifier.apply });\n break;\n }\n }\n }\n\n return matched;\n}\n\nexport function resolvePromptToTokenSet(prompt: string): PromptResult {\n const { preset, reason } = detectPreset(prompt);\n const baseTokenSet = getPreset(preset)!;\n\n // Deep clone to avoid mutating the preset\n const tokenSet: DesignTokenSet = JSON.parse(JSON.stringify(baseTokenSet));\n\n const modifiers = detectModifiers(prompt);\n const reasoningParts = [reason];\n\n for (const modifier of modifiers) {\n modifier.apply(tokenSet);\n reasoningParts.push(`Applied modifier: ${modifier.label}`);\n }\n\n if (modifiers.length === 0) {\n reasoningParts.push('No modifiers applied');\n }\n\n const recommendedReferences = findBestTypographyReferences(tokenSet).map((reference) => ({\n referenceId: reference.referenceId,\n referenceName: reference.referenceName,\n score: reference.score,\n }));\n\n if (recommendedReferences.length > 0) {\n reasoningParts.push(\n `Best-fit references: ${recommendedReferences\n .map(\n (reference: {\n referenceName: string;\n score: number;\n }) => `${reference.referenceName} (${reference.score}%)`,\n )\n .join(', ')}`,\n );\n }\n\n return {\n tokenSet,\n reasoning: reasoningParts.join('. ') + '.',\n recommendedReferences,\n };\n}\n","import { createServer } from 'node:http';\nimport { readFileSync, watch } from 'node:fs';\nimport { resolve } from 'node:path';\n\nimport {\n buildTokenArtifacts,\n generateHtmlReport,\n} from '@fetchtype/core';\n\nfunction escapePreviewHtml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\n\nfunction buildHtml(absolutePath: string): string {\n try {\n const contents = readFileSync(absolutePath, 'utf8');\n const input = JSON.parse(contents);\n const artifacts = buildTokenArtifacts(input);\n return generateHtmlReport(artifacts.tokenSet, artifacts.report, artifacts.css);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[fetchtype preview] Error: ${message}\\n`);\n return `<!DOCTYPE html><html><body><pre style=\"color:red;\">${escapePreviewHtml(message)}</pre></body></html>`;\n }\n}\n\nexport function startPreviewServer(\n tokenFilePath: string,\n port = 3000,\n): Promise<void> {\n const absolutePath = resolve(tokenFilePath);\n let cachedHtml = buildHtml(absolutePath);\n\n const server = createServer((_req, res) => {\n res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });\n res.end(cachedHtml);\n });\n\n return new Promise<void>((resolvePromise, reject) => {\n server.listen(port, () => {\n process.stderr.write(`[fetchtype preview] http://localhost:${port}\\n`);\n process.stderr.write(`[fetchtype preview] Watching ${absolutePath}\\n`);\n\n try {\n const watcher = watch(absolutePath, () => {\n process.stderr.write(`[fetchtype preview] File changed, rebuilding...\\n`);\n cachedHtml = buildHtml(absolutePath);\n });\n\n process.on('SIGINT', () => {\n watcher.close();\n server.close();\n resolvePromise();\n });\n\n process.on('SIGTERM', () => {\n watcher.close();\n server.close();\n resolvePromise();\n });\n } catch {\n // watch may not be available; server still works without auto-reload\n }\n });\n\n server.on('error', reject);\n });\n}\n"],"mappings":"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","names":["mkdir","readFile","writeFile","dirname","resolve","process","util","objectUtil","errorUtil","errorMap","ctx","result","issues","elements","processed","result","r","ZodFirstPartyTypeKind","z","resolve","readFile","formatFontFamily","luminance","DesignTokenSetSchema","resolve","contrastRatio","resolveFont","primaryFont","readFile","lineNumber","normalizeFamily","parseGoogleFontsFamilies","upsertFont","pct","isRecord","toPx","toUnitlessLineHeight","toCh","parseHexColor","formatFontFamily","DesignTokenSetSchema","diagnostics","join","readFileSync","resolve","readFileSync","resolve","process","readFile","mkdir","dirname","writeFile","resolve"]}