{
  "version": 3,
  "sources": ["../src/plugin.ts", "../package.json", "../src/_internal/plugin-constants.ts", "../src/rules/consistent-font-display.ts", "../src/_internal/create-stylelint-rule.ts", "../src/_internal/font-analysis.ts", "../src/rules/consistent-font-family-casing.ts", "../src/rules/local-src-before-url.ts", "../src/rules/no-absolute-font-url.ts", "../src/rules/no-data-uri-src.ts", "../src/rules/no-duplicate-descriptors-in-font-face.ts", "../src/rules/no-duplicate-font-face.ts", "../src/rules/no-duplicate-font-family-src.ts", "../src/rules/no-duplicate-src-format.ts", "../src/rules/no-empty-font-face.ts", "../src/rules/no-font-face-in-media-query.ts", "../src/rules/no-font-face-in-selectors.ts", "../src/rules/no-generic-family-in-font-face.ts", "../src/rules/no-http-font-url.ts", "../src/rules/no-invalid-font-display.ts", "../src/rules/no-invalid-font-style.ts", "../src/rules/no-invalid-font-weight.ts", "../src/rules/no-invalid-unicode-range.ts", "../src/_internal/unicode-range.ts", "../src/rules/no-legacy-formats.ts", "../src/rules/no-local-src-in-font-face.ts", "../src/rules/no-missing-fallback-before-web-font.ts", "../src/rules/no-missing-font-file.ts", "../src/rules/no-overlapping-unicode-range.ts", "../src/rules/no-protocol-relative-font-url.ts", "../src/rules/no-src-format-mismatch.ts", "../src/rules/no-unquoted-font-family-in-font-face.ts", "../src/rules/no-unused-font-face.ts", "../src/rules/no-whitespace-in-unquoted-family.ts", "../src/rules/prefer-variable-fonts.ts", "../src/rules/prefer-woff2.ts", "../src/rules/require-font-display.ts", "../src/rules/require-font-family-in-font-face.ts", "../src/rules/require-font-style.ts", "../src/rules/require-font-weight.ts", "../src/rules/require-format-hint.ts", "../src/rules/require-src-in-font-face.ts", "../src/rules/require-system-font-fallback.ts", "../src/rules/require-unicode-range-for-large-family.ts", "../src/rules/require-unicode-range-for-subset-fonts.ts", "../src/rules/woff2-before-woff.ts", "../src/_internal/rules-registry.ts"],
  "sourcesContent": ["/**\n * @packageDocumentation\n * Public plugin entrypoint for `stylelint-plugin-font` exports and\n * shareable config wiring.\n */\nimport type { Config, Plugin as StylelintPlugin } from \"stylelint\";\n\nimport { isDefined, objectKeys } from \"ts-extras\";\n\nimport type { StylelintPluginRuleContract } from \"./_internal/create-stylelint-rule.js\";\n\nimport {\n    CONFIG_NAMES as configNamesValue,\n    type FontConfigName as InternalFontConfigName,\n    PACKAGE_NAME as packageNameValue,\n    PACKAGE_VERSION as packageVersionValue,\n    PLUGIN_NAMESPACE as pluginNamespaceValue,\n} from \"./_internal/plugin-constants.js\";\nimport { fontRules as fontRulesValue } from \"./_internal/rules-registry.js\";\n\n/** Public shareable config map exported by this package. */\nexport type FontConfigMap = Record<FontConfigName, FontShareableConfig>;\n/** Shareable config names exposed by this package. */\nexport type FontConfigName = InternalFontConfigName;\n/** Public fully-qualified rule ids supported by this package. */\nexport type FontRuleId = `${typeof pluginNamespaceValue}/${string}`;\n\n/** Public unqualified rule names supported by this package. */\nexport type FontRuleName = Extract<keyof typeof fontRulesValue, string>;\n\n/** Shareable config shape exported by this package. */\nexport type FontShareableConfig = Config & {\n    plugins: (string | StylelintPlugin)[];\n    rules: NonNullable<Config[\"rules\"]>;\n};\n\n/** Internal ordered registry entry tuple. */\ntype FontRuleEntry = readonly [string, StylelintPluginRuleContract];\n/** Internal runtime rule registry shape. */\ntype FontRulesMap = Readonly<Record<string, StylelintPluginRuleContract>>;\n\n/** Local package metadata values used to avoid import re-export warnings. */\nconst packageMetaName = packageNameValue;\nconst packageMetaNamespace = pluginNamespaceValue;\nconst packageMetaVersion = packageVersionValue;\n/** Local rule registry alias used to avoid import re-export warnings. */\nconst runtimeRules = fontRulesValue;\n/** Local config-name alias used to avoid import re-export warnings. */\nconst publicConfigNames = configNamesValue;\n\n/** Public package metadata exported alongside the plugin pack. */\nexport const meta: Readonly<{\n    name: string;\n    namespace: string;\n    version: string;\n}> = {\n    name: packageMetaName,\n    namespace: packageMetaNamespace,\n    version: packageMetaVersion,\n};\n\n/** Public rule registry keyed by unqualified rule name. */\nexport const rules: FontRulesMap = runtimeRules;\n\n/** Stable ordered unqualified rule names. */\nexport const ruleNames: readonly string[] = objectKeys(rules).toSorted(\n    (left, right) => left.localeCompare(right)\n);\n\n/** Stable ordered registry entries used to derive configs and ids. */\nconst fontRuleEntries: readonly FontRuleEntry[] = (() => {\n    const entries: FontRuleEntry[] = [];\n\n    for (const ruleName of ruleNames) {\n        const rule = rules[ruleName];\n\n        if (!isDefined(rule)) {\n            continue;\n        }\n\n        entries.push([ruleName, rule]);\n    }\n\n    return entries;\n})();\n\n/** Default plugin-pack export consumed by Stylelint. */\nexport const plugins: readonly StylelintPlugin[] = fontRuleEntries.map(\n    ([, rule]) => rule\n);\n\n/** Stable ordered fully qualified rule ids. */\nexport const ruleIds: readonly FontRuleId[] = fontRuleEntries.map(\n    ([, rule]) => rule.ruleName as FontRuleId\n);\n\n/** Rule ids included in the recommended shareable config. */\nconst recommendedRuleIds: readonly FontRuleId[] = fontRuleEntries\n    .filter(([, rule]) => rule.docs.recommended)\n    .map(([, rule]) => rule.ruleName as FontRuleId);\n\n/**\n * Build one shareable Stylelint config.\n *\n * @param enabledRuleIds - Rule ids to enable in the config.\n *\n * @returns Shareable Stylelint config.\n */\nfunction createConfig(\n    enabledRuleIds: readonly FontRuleId[]\n): FontShareableConfig {\n    return {\n        plugins: [...plugins],\n        rules: (() => {\n            const rulesConfig: NonNullable<Config[\"rules\"]> = {};\n\n            for (const ruleId of enabledRuleIds) {\n                rulesConfig[ruleId] = true;\n            }\n\n            return rulesConfig;\n        })(),\n    };\n}\n\n/**\n * Build one shareable config while applying explicit severity per rule.\n *\n * @param enabledRuleIds - Rule ids to enable.\n */\nfunction createConfigWithSeverity(\n    enabledRuleIds: readonly FontRuleId[]\n): FontShareableConfig {\n    const config = createConfig(enabledRuleIds);\n\n    const severityByRule: Readonly<Record<FontRuleId, \"error\" | \"warning\">> = {\n        \"font/consistent-font-display\": \"warning\",\n        \"font/consistent-font-family-casing\": \"warning\",\n        \"font/local-src-before-url\": \"error\",\n        \"font/no-absolute-font-url\": \"warning\",\n        \"font/no-data-uri-src\": \"warning\",\n        \"font/no-duplicate-descriptors-in-font-face\": \"error\",\n        \"font/no-duplicate-font-face\": \"error\",\n        \"font/no-duplicate-font-family-src\": \"error\",\n        \"font/no-duplicate-src-format\": \"error\",\n        \"font/no-empty-font-face\": \"error\",\n        \"font/no-font-face-in-media-query\": \"warning\",\n        \"font/no-font-face-in-selectors\": \"error\",\n        \"font/no-generic-family-in-font-face\": \"error\",\n        \"font/no-http-font-url\": \"error\",\n        \"font/no-invalid-font-display\": \"error\",\n        \"font/no-invalid-font-style\": \"error\",\n        \"font/no-invalid-font-weight\": \"error\",\n        \"font/no-invalid-unicode-range\": \"error\",\n        \"font/no-legacy-formats\": \"warning\",\n        \"font/no-local-src-in-font-face\": \"warning\",\n        \"font/no-missing-fallback-before-web-font\": \"warning\",\n        \"font/no-missing-font-file\": \"warning\",\n        \"font/no-overlapping-unicode-range\": \"warning\",\n        \"font/no-protocol-relative-font-url\": \"error\",\n        \"font/no-src-format-mismatch\": \"error\",\n        \"font/no-unquoted-font-family-in-font-face\": \"warning\",\n        \"font/no-unused-font-face\": \"warning\",\n        \"font/no-whitespace-in-unquoted-family\": \"error\",\n        \"font/prefer-variable-fonts\": \"warning\",\n        \"font/prefer-woff2\": \"warning\",\n        \"font/require-font-display\": \"error\",\n        \"font/require-font-family-in-font-face\": \"error\",\n        \"font/require-font-style\": \"warning\",\n        \"font/require-font-weight\": \"warning\",\n        \"font/require-format-hint\": \"warning\",\n        \"font/require-src-in-font-face\": \"error\",\n        \"font/require-system-font-fallback\": \"warning\",\n        \"font/require-unicode-range-for-large-family\": \"warning\",\n        \"font/require-unicode-range-for-subset-fonts\": \"warning\",\n        \"font/woff2-before-woff\": \"warning\",\n    };\n\n    for (const ruleId of enabledRuleIds) {\n        const severity = severityByRule[ruleId];\n\n        config.rules[ruleId] = [true, { severity }];\n    }\n\n    return config;\n}\n\n/** Shareable config exports exposed by the package. */\nexport const fontPluginConfigs: FontConfigMap = {\n    \"font-all\": createConfigWithSeverity(ruleIds),\n    \"font-recommended\": createConfigWithSeverity(recommendedRuleIds),\n};\n\n/** Stable ordered shareable config names. */\nexport const configNames: readonly FontConfigName[] = publicConfigNames;\n\n/** Default export consumed by Stylelint when the package is used as a plugin. */\nexport default plugins;\n", "{\n    \"$schema\": \"https://www.schemastore.org/package.json\",\n    \"name\": \"stylelint-plugin-font\",\n    \"version\": \"1.1.5\",\n    \"private\": false,\n    \"description\": \"Stylelint rules and shareable configs for web-font loading quality and fallback performance.\",\n    \"keywords\": [\n        \"stylelint\",\n        \"stylelint-plugin\",\n        \"stylelint-config\",\n        \"stylelintconfig\",\n        \"stylelintplugin\",\n        \"font-face\",\n        \"fonts\",\n        \"font-loading\",\n        \"css\",\n        \"postcss\"\n    ],\n    \"homepage\": \"https://nick2bad4u.github.io/stylelint-plugin-font\",\n    \"bugs\": {\n        \"url\": \"https://github.com/Nick2bad4u/stylelint-plugin-font/issues\",\n        \"email\": \"20943337+Nick2bad4u@users.noreply.github.com\"\n    },\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"git+https://github.com/Nick2bad4u/stylelint-plugin-font.git\"\n    },\n    \"license\": \"MIT\",\n    \"author\": \"Nick2bad4u <20943337+Nick2bad4u@users.noreply.github.com> (https://github.com/Nick2bad4u)\",\n    \"contributors\": [\n        {\n            \"name\": \"Nick2bad4u\",\n            \"email\": \"20943337+Nick2bad4u@users.noreply.github.com\",\n            \"url\": \"https://github.com/Nick2bad4u\"\n        }\n    ],\n    \"sideEffects\": false,\n    \"type\": \"module\",\n    \"exports\": {\n        \".\": {\n            \"import\": {\n                \"types\": \"./dist/plugin.d.ts\",\n                \"default\": \"./dist/plugin.js\"\n            },\n            \"require\": {\n                \"types\": \"./dist/plugin.d.cts\",\n                \"default\": \"./dist/plugin.cjs\"\n            },\n            \"default\": \"./dist/plugin.js\"\n        },\n        \"./configs/font-all\": {\n            \"import\": {\n                \"types\": \"./dist/configs/font-all.d.ts\",\n                \"default\": \"./dist/configs/font-all.js\"\n            },\n            \"require\": {\n                \"types\": \"./dist/configs/font-all.d.cts\",\n                \"default\": \"./dist/configs/font-all.cjs\"\n            }\n        },\n        \"./configs/font-recommended\": {\n            \"import\": {\n                \"types\": \"./dist/configs/font-recommended.d.ts\",\n                \"default\": \"./dist/configs/font-recommended.js\"\n            },\n            \"require\": {\n                \"types\": \"./dist/configs/font-recommended.d.cts\",\n                \"default\": \"./dist/configs/font-recommended.cjs\"\n            }\n        },\n        \"./package.json\": \"./package.json\",\n        \"./recommended\": {\n            \"import\": {\n                \"types\": \"./dist/configs/font-all.d.ts\",\n                \"default\": \"./dist/configs/font-all.js\"\n            },\n            \"require\": {\n                \"types\": \"./dist/configs/font-all.d.cts\",\n                \"default\": \"./dist/configs/font-all.cjs\"\n            }\n        }\n    },\n    \"main\": \"./dist/plugin.cjs\",\n    \"types\": \"./dist/plugin.d.ts\",\n    \"typesVersions\": {\n        \"*\": {\n            \"configs/font-all\": [\n                \"./dist/configs/font-all.d.ts\"\n            ],\n            \"configs/font-recommended\": [\n                \"./dist/configs/font-recommended.d.ts\"\n            ],\n            \"recommended\": [\n                \"./dist/configs/font-all.d.ts\"\n            ]\n        }\n    },\n    \"files\": [\n        \"dist\",\n        \"docs/rules/**\",\n        \"CHANGELOG.md\"\n    ],\n    \"workspaces\": [\n        \"docs/docusaurus\"\n    ],\n    \"scripts\": {\n        \"prebench\": \"npm run build\",\n        \"bench\": \"node benchmarks/run-eslint-stats.mjs\",\n        \"prebench:compare\": \"npm run build\",\n        \"bench:compare\": \"node benchmarks/run-eslint-stats.mjs --iterations=6 --warmup=2 --compare=coverage/benchmarks/eslint-stats.json\",\n        \"prebench:eslint:stats\": \"npm run build\",\n        \"bench:eslint:stats\": \"node benchmarks/run-eslint-stats.mjs\",\n        \"prebench:eslint:timing\": \"npm run build\",\n        \"bench:eslint:timing\": \"cross-env TIMING=all eslint --config benchmarks/eslint-timing.config.mjs --stats \\\"test/fixtures/typed/*.invalid.ts\\\"\",\n        \"prebench:rule-benchmark\": \"npm run build\",\n        \"bench:rule-benchmark\": \"eslint-rule-benchmark run\",\n        \"prebench:ui\": \"npm run build\",\n        \"bench:ui\": \"vitest bench --ui\",\n        \"prebench:watch\": \"npm run build\",\n        \"bench:watch\": \"vitest bench\",\n        \"build\": \"tsc -b tsconfig.build.json --force && npm run build:types:cjs && npm run build:cjs && npm run build:configs:cjs\",\n        \"build:cjs\": \"esbuild dist/plugin.js --bundle --format=cjs --platform=node --packages=external --sourcemap --outfile=dist/plugin.cjs --footer:js=\\\"module.exports = Object.assign(module.exports.default, module.exports);\\\"\",\n        \"build:clean\": \"node -e \\\"require('node:fs').rmSync('dist',{recursive:true,force:true})\\\"\",\n        \"build:configs:cjs\": \"node -e \\\"const fs=require('node:fs');['font-all','font-recommended'].forEach(n=>{fs.writeFileSync('dist/configs/'+n+'.cjs','\\\\\\\"use strict\\\\\\\";\\\\nconst{fontPluginConfigs}=require(\\\\\\\"../plugin.cjs\\\\\\\");\\\\nmodule.exports=fontPluginConfigs[\\\\\\\"'+n+'\\\\\\\"];\\\\n','utf8');fs.writeFileSync('dist/configs/'+n+'.d.cts','import type{FontShareableConfig}from\\\\\\\"../plugin.cjs\\\\\\\";\\\\ndeclare const config:FontShareableConfig;\\\\nexport=config;\\\\n','utf8');})\\\"\",\n        \"build:eslint-inspector\": \"npx -y @eslint/config-inspector@latest build --outDir \\\"docs/docusaurus/static/eslint-inspector\\\" --base \\\"/stylelint-plugin-font/eslint-inspector/\\\"\",\n        \"build:eslint-inspector:local\": \"npx @eslint/config-inspector\",\n        \"build:stylelint-inspector\": \"npx -y stylelint-config-inspector@latest build --outDir \\\"docs/docusaurus/static/stylelint-inspector\\\" --base \\\"/stylelint-plugin-font/stylelint-inspector/\\\"\",\n        \"build:stylelint-inspector:local\": \"npx stylelint-config-inspector@latest\",\n        \"build:types:cjs\": \"node -e \\\"require('node:fs').copyFileSync('dist/plugin.d.ts','dist/plugin.d.cts')\\\"\",\n        \"changelog:generate\": \"git-cliff --config cliff.toml --output CHANGELOG.md\",\n        \"changelog:preview\": \"git-cliff --config cliff.toml --unreleased\",\n        \"changelog:release-notes\": \"git-cliff --config cliff.toml --current --strip all\",\n        \"clean:cache\": \"del-cli dist coverage cache .cache .vite .turbo\",\n        \"clean:cache:coverage\": \"del-cli coverage .coverage\",\n        \"clean:cache:dist\": \"del-cli dist release\",\n        \"clean:cache:eslint\": \"del-cli .cache/.eslintcache\",\n        \"clean:cache:ncu\": \"del-cli .cache/.ncu-cache.json\",\n        \"clean:cache:prettier\": \"del-cli .cache/.prettier-cache .prettier-cache .prettiercache\",\n        \"clean:cache:stryker\": \"del-cli .stryker-tmp\",\n        \"clean:cache:stylelint\": \"del-cli .cache/stylelintcache stylelintcache .stylelintcache\",\n        \"clean:cache:temp\": \"del-cli .temp\",\n        \"clean:cache:typescript\": \"del-cli .cache/**.tsbuildinfo .cache/builds\",\n        \"clean:cache:vite\": \"del-cli .cache/vite .cache/vitest .cache/vitest-zero-coverage .cache/vite-zero-coverage\",\n        \"clean:database\": \"node -e \\\"const fs=require('node:fs');const path=require('node:path');const appData=process.env.APPDATA; if(appData){fs.rmSync(path.join(appData,'uptime-watcher','uptime-watcher.sqlite'),{force:true});}\\\"\",\n        \"clean:docs\": \"del-cli docs/docusaurus/.docusaurus docs/docusaurus/build docs/docusaurus/site-docs/developer/api\",\n        \"clean:docusaurus\": \"npm run clean:docs && npm run --workspace docs/docusaurus clear\",\n        \"cognitive-complexity\": \"cognitive-complexity-ts --threshold 10\",\n        \"precommit\": \"npm run sync:rules:write\",\n        \"commit\": \"git-cz\",\n        \"contrib\": \"all-contributors\",\n        \"contrib:add\": \"all-contributors add\",\n        \"contrib:check\": \"all-contributors check\",\n        \"contrib:compare\": \"npm run contrib:check\",\n        \"contrib:generate\": \"all-contributors generate\",\n        \"coverage\": \"vitest run --coverage\",\n        \"docs:api\": \"npm run --workspace docs/docusaurus docs:api\",\n        \"docs:api:local\": \"npm run --workspace docs/docusaurus docs:api:local\",\n        \"docs:build\": \"npm run --workspace docs/docusaurus build\",\n        \"docs:build:local\": \"npm run --workspace docs/docusaurus build:local\",\n        \"docs:check-links\": \"npm run docs:api && node ./scripts/check-doc-links.mjs\",\n        \"docs:devtools:metadata\": \"node scripts/generate-devtools-workspace-metadata.mjs\",\n        \"docs:serve\": \"npm run --workspace docs/docusaurus serve\",\n        \"docs:start\": \"npm run --workspace docs/docusaurus start\",\n        \"docs:start:devtools\": \"npm run docs:devtools:metadata && npm run docs:api:local && npm run --workspace docs/docusaurus start:devtools\",\n        \"docs:toc\": \"remark docs --use remark-toc --output\",\n        \"docs:typecheck\": \"npm run --workspace docs/docusaurus typecheck\",\n        \"docs:typedoc\": \"npm run --workspace docs/docusaurus docs:api\",\n        \"docs:validate-links\": \"remark docs --use remark-validate-links --frail\",\n        \"knip\": \"cross-env NODE_OPTIONS=--max_old_space_size=4096 NODE_NO_WARNINGS=1 npx knip -c knip.config.ts --include-libs --cache --cache-location .cache/knip --tsConfig tsconfig.json\",\n        \"lint\": \"cross-env NODE_OPTIONS=--max_old_space_size=16384 eslint --cache --cache-strategy content --cache-location .cache/.eslintcache\",\n        \"lint:action\": \"npm run lint:actions\",\n        \"lint:actions\": \"node scripts/lint-actionlint.mjs\",\n        \"lint:all\": \"npm run lint && npm run typecheck && npm run lint:css && npm run lint:prettier && npm run lint:remark && npm run lint:package && npm run lint:gitleaks && npm run lint:secretlint && npm run lint:yaml && npm run lint:actions && npm run lint:circular && npm run sync:rules:check\",\n        \"lint:all:fix\": \"npm run lint:fix && npm run typecheck && npm run lint:css:fix && npm run lint:prettier:fix && npm run lint:remark && npm run lint:package && npm run lint:secretlint && npm run lint:yaml:fix && npm run lint:actions && npm run lint:circular && npm run sync:rules:write\",\n        \"lint:all:fix:quiet\": \"npm run lint:fix:quiet && npm run typecheck && npm run lint:css:fix && npm run lint:prettier:fix && npm run lint:remark && npm run lint:package && npm run lint:secretlint && npm run lint:yaml:fix && npm run lint:actions && npm run lint:circular && npm run sync:rules:write\",\n        \"lint:circular\": \"npm run madge:circular\",\n        \"lint:compat:stylelint16\": \"node scripts/run-stylelint16-compat.mjs\",\n        \"lint:config:build\": \"npm run build:eslint-inspector\",\n        \"lint:config:inspect\": \"npx eslint --inspect-config\",\n        \"prelint:css\": \"npm run build\",\n        \"lint:css\": \"stylelint --cache --config stylelint.config.mjs --cache-strategy content --cache-location .cache/stylelintcache src/ docs/ --custom-formatter stylelint-formatter-pretty && echo \\\"Stylelint done!\\\"\",\n        \"prelint:css:fix\": \"npm run build\",\n        \"lint:css:fix\": \"stylelint --cache --config stylelint.config.mjs --cache-strategy content --cache-location .cache/stylelintcache src/ docs/ --custom-formatter stylelint-formatter-pretty --fix && echo \\\"Stylelint done!\\\"\",\n        \"lint:depcheck\": \"npm run knip -- --include dependencies,unlisted,unresolved\",\n        \"lint:deps\": \"npm run lint:depcheck\",\n        \"lint:dupes\": \"jscpd src/ --config jscpd.json\",\n        \"lint:dupes:all\": \"jscpd src/ --config jscpd.json --min-lines 3\",\n        \"lint:dupes:skiplocal\": \"jscpd src/ --skipLocal --config jscpd.json\",\n        \"lint:dupes:skiplocal:all\": \"jscpd src/ --skipLocal --config jscpd.json --min-lines 3\",\n        \"lint:duplicates\": \"npm run lint:dupes\",\n        \"lint:exports\": \"ts-unused-exports tsconfig.json src/plugin.ts --excludePathsFromReport=plugin.ts\",\n        \"lint:fix\": \"cross-env NODE_OPTIONS=--max_old_space_size=16384 eslint --cache --cache-strategy content --cache-location .cache/.eslintcache --fix\",\n        \"lint:fix:quiet\": \"cross-env ESLINT_PROGRESS=off NODE_OPTIONS=--max_old_space_size=16384 eslint --cache --cache-strategy content --cache-location .cache/.eslintcache --fix && echo \\\"Eslint fix done!\\\"\",\n        \"lint:gitleaks\": \"gitleaks dir --config .gitleaks.toml .\",\n        \"lint:grype\": \"grype . -c .grype.yaml --name stylelint-plugin-font\",\n        \"lint:knip\": \"npm run knip\",\n        \"lint:knip:exports\": \"npm run knip -- --include exports,nsExports,classMembers,types,nsTypes,enumMembers,duplicates\",\n        \"lint:knip:unused:exports\": \"npm run knip -- --dependencies --exports\",\n        \"lint:leaves\": \"npm run madge:leaves\",\n        \"lint:metrics\": \"npm run sloc\",\n        \"lint:node-version-files\": \"node scripts/sync-node-version-files.mjs --check-current\",\n        \"lint:orphans\": \"npm run madge:orphans\",\n        \"lint:package\": \"npm run lint:node-version-files && npm run lint:package-sort && npm run lint:packagelintrc && echo \\\"Package.json lint done!\\\"\",\n        \"lint:package:strict\": \"npm run lint:node-version-files && npm run lint:package-sort && npm run lint:package-check:strict && npm run lint:packagelintrc && echo \\\"Package.json lint done!\\\"\",\n        \"lint:package-check\": \"publint && attw --pack .\",\n        \"lint:package-check:strict\": \"publint && attw --pack . --profile strict\",\n        \"lint:package-json\": \"npmPkgJsonLint . --config .npmpackagejsonlintrc.json\",\n        \"lint:package-sort\": \"sort-package-json \\\"./package.json\\\" \\\"./docs/docusaurus/package.json\\\"\",\n        \"lint:package-sort-check\": \"sort-package-json --check \\\"./package.json\\\" \\\"./docs/docusaurus/package.json\\\"\",\n        \"lint:packagelintrc\": \"npmPkgJsonLint . --config .npmpackagejsonlintrc.json\",\n        \"lint:prettier\": \"prettier . --log-level warn --cache --cache-location=.cache/.prettier-cache --cache-strategy=content --check\",\n        \"lint:prettier:fix\": \"prettier . --log-level warn --cache --cache-location=.cache/.prettier-cache --cache-strategy=content --write\",\n        \"lint:publint\": \"publint\",\n        \"lint:quiet\": \"cross-env ESLINT_PROGRESS=nofile NODE_OPTIONS=--max_old_space_size=16384 eslint --cache --cache-strategy content --cache-location .cache/.eslintcache && echo \\\"Eslint done!\\\"\",\n        \"lint:remark\": \"remark --rc-path .remarkrc.mjs --silently-ignore --ignore-path .remarkignore --frail \\\"*.{md,mdx}\\\" \\\"docs/**/*.{md,mdx}\\\" --quiet\",\n        \"lint:remark:fix\": \"prettier --log-level warn --ignore-path prettierignore.remark --cache --cache-location=.cache/.prettier-cache --cache-strategy=content --no-error-on-unmatched-pattern --write \\\"*.{md,mdx}\\\" \\\"docs/**/*.{md,mdx}\\\" && npm run remark:fix\",\n        \"lint:secretlint\": \"secretlint --secretlintrc .secretlintrc.cjs --secretlintignore .secretlintignore \\\"./*\\\" \\\".vscode/**\\\" \\\"assets/**\\\" \\\"src/**\\\" \\\"electron/**\\\" \\\"shared/**\\\" \\\"config/**\\\" \\\"scripts/**\\\" \\\"playwright/**\\\" \\\"storybook/**\\\" \\\".storybook\\\" \\\"tests/**\\\" \\\"benchmarks/**\\\" \\\".devin/**\\\" \\\"public/**\\\" \\\".github/**\\\" \\\"docs/Architecture/**\\\" \\\"docs/*\\\" \\\"docs/assets/**\\\" \\\"docs/Guides/**\\\" \\\"docs/Testing/**\\\" \\\"docs/TSDoc/**\\\" \\\"docs/docusaurus/src/**\\\" \\\"docs/docusaurus/static/**\\\" \\\"docs/docusaurus/blog/**\\\" \\\"docs/docusaurus/docs/**\\\" \\\"docs/docusaurus/docs/*\\\"\",\n        \"lint:secrets\": \"detect-secrets scan\",\n        \"lint:unused\": \"npm run knip -- --include unlisted,unresolved,duplicates\",\n        \"lint:unused-deps\": \"npm run knip -- --include dependencies,unlisted,unresolved\",\n        \"lint:yaml\": \"cross-env NODE_OPTIONS=--max_old_space_size=16384 eslint --cache --cache-strategy content --cache-location .cache/.eslintcache \\\"**/*.{yml,yaml}\\\" && echo \\\"YAML lint done!\\\"\",\n        \"lint:yaml:fix\": \"cross-env NODE_OPTIONS=--max_old_space_size=16384 eslint --cache --cache-strategy content --cache-location .cache/.eslintcache --fix \\\"**/*.{yml,yaml}\\\" && echo \\\"YAML lint (fix) done!\\\"\",\n        \"madge:circular\": \"node scripts/check-circular-deps.mjs\",\n        \"madge:leaves\": \"madge --leaves --no-spinner --ts-config tsconfig.json --extensions ts,tsx,js,jsx,mjs,cjs,cts,mts ./src --exclude \\\"(^|[\\\\/])(test|dist|node_modules|cache|\\\\.cache|coverage|build|eslint-inspector|temp|\\\\.docusaurus)($|[\\\\/])|\\\\.css$\\\"\",\n        \"madge:orphans\": \"madge --orphans --no-spinner --ts-config tsconfig.json --extensions ts,tsx,js,jsx,mjs,cjs,cts,mts ./src --exclude \\\"(^|[\\\\/])(test|dist|node_modules|cache|\\\\.cache|coverage|build|eslint-inspector|temp|\\\\.docusaurus)($|[\\\\/])|\\\\.css$\\\"\",\n        \"open:coverage\": \"open-cli coverage/index.html\",\n        \"prepublishOnly\": \"npm run release:check\",\n        \"release:check\": \"npm run release:verify\",\n        \"release:verify\": \"cross-env NODE_OPTIONS= npm run build && cross-env NODE_OPTIONS= npm run lint:all && cross-env NODE_OPTIONS= npm run typecheck && cross-env NODE_OPTIONS= npm run test:docs-guardrails && cross-env NODE_OPTIONS= VITEST_TYPECHECK=false npm run test && cross-env NODE_OPTIONS= npm run sync:readme-rules-table && cross-env NODE_OPTIONS= npm run sync:configs-rules-matrix && cross-env NODE_OPTIONS= npm run docs:check-links && npm run lint:package:strict && npm run lint:compat:stylelint16\",\n        \"remark:fix\": \"remark --rc-path .remarkrc.mjs --silently-ignore --ignore-path .remarkignore --frail --quiet --output -- \\\"*.{md,mdx}\\\" \\\"docs/**/*.{md,mdx}\\\"\",\n        \"remark:test-config\": \"remark --rc-path .remarkrc.mjs --silently-ignore --ignore-path .remarkignore --frail \\\"README.md\\\"\",\n        \"sync:configs-rules-matrix\": \"node scripts/sync-configs-rules-matrix.mjs\",\n        \"sync:configs-rules-matrix:write\": \"node scripts/sync-configs-rules-matrix.mjs --write\",\n        \"sync:node-version-files\": \"node scripts/sync-node-version-files.mjs\",\n        \"sync:peer-stylelint-range\": \"node scripts/sync-peer-stylelint-range.mjs\",\n        \"sync:presets-rules-matrix\": \"node scripts/sync-presets-rules-matrix.mjs\",\n        \"sync:readme-rules-table\": \"node scripts/sync-readme-rules-table.mjs\",\n        \"sync:readme-rules-table:update\": \"node scripts/sync-readme-rules-table.mjs --write\",\n        \"sync:readme-rules-table:write\": \"node scripts/sync-readme-rules-table.mjs --write\",\n        \"sync:rules:check\": \"npm run build && npm run sync:readme-rules-table && npm run sync:configs-rules-matrix\",\n        \"sync:rules:write\": \"npm run build && npm run sync:readme-rules-table:write && npm run sync:configs-rules-matrix:write\",\n        \"pretest\": \"npm run build\",\n        \"test\": \"vitest run\",\n        \"test:ci\": \"cross-env CI=true vitest run --reporter=default\",\n        \"test:coverage\": \"vitest run --coverage --reporter=default\",\n        \"test:coverage:detailed\": \"vitest run --coverage --reporter=verbose\",\n        \"test:coverage:minimal\": \"vitest run --coverage --reporter=dot\",\n        \"test:coverage:open\": \"npm run test:coverage && npm run open:coverage\",\n        \"test:coverage:quiet\": \"vitest run --coverage --reporter=default --silent\",\n        \"test:coverage:verbose\": \"vitest run --coverage --reporter=verbose\",\n        \"test:detailed\": \"vitest run --reporter=verbose\",\n        \"test:docs-guardrails\": \"vitest run test/stylelint-docs-guardrails.test.ts\",\n        \"test:minimal\": \"vitest run --reporter=dot\",\n        \"test:open\": \"npm run test:coverage && npm run open:coverage\",\n        \"test:quiet\": \"vitest run --reporter=default --silent\",\n        \"test:serial\": \"cross-env MAX_THREADS=1 vitest run\",\n        \"test:stryker\": \"stryker run --ignoreStatic --concurrency 12 --incrementalFile .cache/stryker/incremental-fast.json\",\n        \"test:stryker:ci\": \"cross-env CI=true stryker run --ignoreStatic --concurrency 2 --incrementalFile .cache/stryker/incremental-fast-ci.json\",\n        \"test:stryker:full\": \"stryker run --concurrency 12 --incrementalFile .cache/stryker/incremental-full.json\",\n        \"test:stryker:full:ci\": \"cross-env CI=true stryker run --concurrency 2 --incrementalFile .cache/stryker/incremental-full-ci.json\",\n        \"test:verbose\": \"vitest run --reporter=verbose\",\n        \"test:watch\": \"vitest\",\n        \"typecheck\": \"tsc -p tsconfig.json --noEmit && tsc -p tsconfig.build.json --noEmit && tsc -p tsconfig.eslint.json --noEmit && tsc -p tsconfig.js.json --noEmit && npm run --workspace docs/docusaurus typecheck\",\n        \"typecheck:all\": \"npm run typecheck\",\n        \"types:update\": \"typesync\",\n        \"update-actions\": \"npx actions-up --yes --style sha\",\n        \"update-deps\": \"npx ncu -i --install never && npm update --workspaces --force && npm install --force && npm run sync:peer-stylelint-range && npm run sync:node-version-files && npm run sync:rules:write\",\n        \"verify:readme-rules-table\": \"npm run build && npm run sync:readme-rules-table\"\n    },\n    \"overrides\": {\n        \"jsonc-eslint-parser\": \"$jsonc-eslint-parser\"\n    },\n    \"dependencies\": {\n        \"ts-extras\": \"^1.2.0\",\n        \"type-fest\": \"^5.7.0\"\n    },\n    \"devDependencies\": {\n        \"@arethetypeswrong/cli\": \"^0.18.4\",\n        \"@csstools/stylelint-formatter-github\": \"^2.0.0\",\n        \"@double-great/remark-lint-alt-text\": \"^1.1.1\",\n        \"@eslint/config-inspector\": \"^3.0.4\",\n        \"@microsoft/tsdoc-config\": \"^0.18.1\",\n        \"@stryker-ignorer/console-all\": \"^0.3.2\",\n        \"@stryker-mutator/core\": \"^9.6.1\",\n        \"@stryker-mutator/typescript-checker\": \"^9.6.1\",\n        \"@stryker-mutator/vitest-runner\": \"^9.6.1\",\n        \"@types/htmlhint\": \"^1.1.5\",\n        \"@types/madge\": \"^5.0.3\",\n        \"@types/node\": \"^26.1.0\",\n        \"@types/react\": \"^19.2.17\",\n        \"@types/sloc\": \"^0.2.3\",\n        \"@typescript-eslint/rule-tester\": \"^8.62.1\",\n        \"@vitest/coverage-v8\": \"^4.1.9\",\n        \"@vitest/ui\": \"^4.1.9\",\n        \"actionlint\": \"^2.0.6\",\n        \"all-contributors-cli\": \"^6.26.1\",\n        \"cognitive-complexity-ts\": \"^0.8.2\",\n        \"commitlint\": \"^21.2.0\",\n        \"commitlint-config-gitmoji\": \"^2.3.1\",\n        \"cross-env\": \"^10.1.0\",\n        \"del-cli\": \"^7.0.0\",\n        \"detect-secrets\": \"^1.0.6\",\n        \"eslint\": \"^10.6.0\",\n        \"eslint-config-nick2bad4u\": \"^3.3.1\",\n        \"eslint-formatter-unix\": \"^9.0.1\",\n        \"eslint-rule-benchmark\": \"^0.8.0\",\n        \"fast-check\": \"^4.8.0\",\n        \"git-cliff\": \"^2.13.1\",\n        \"gitleaks-config-nick2bad4u\": \"^1.0.3\",\n        \"gitleaks-secret-scanner\": \"^2.1.1\",\n        \"htmlhint\": \"^1.9.2\",\n        \"jscpd\": \"^5.0.11\",\n        \"knip\": \"^6.24.0\",\n        \"leasot\": \"^14.4.0\",\n        \"madge\": \"^8.0.0\",\n        \"markdown-link-check\": \"^3.14.2\",\n        \"npm-check-updates\": \"^22.2.9\",\n        \"npm-package-json-lint\": \"^10.4.1\",\n        \"npm-package-json-lint-config-nick2bad4u\": \"^1.0.4\",\n        \"picocolors\": \"^1.1.1\",\n        \"postcss\": \"^8.5.16\",\n        \"prettier\": \"^3.9.4\",\n        \"prettier-config-nick2bad4u\": \"^1.0.22\",\n        \"publint\": \"^0.3.21\",\n        \"rehype-katex\": \"^7.0.1\",\n        \"remark\": \"^15.0.1\",\n        \"remark-cli\": \"^12.0.1\",\n        \"remark-config-nick2bad4u\": \"^1.1.3\",\n        \"secretlint\": \"^13.0.2\",\n        \"secretlint-config-nick2bad4u\": \"^1.1.1\",\n        \"sloc\": \"^0.3.2\",\n        \"sort-package-json\": \"^4.0.0\",\n        \"storybook\": \"^10.4.6\",\n        \"stylelint\": \"^17.14.0\",\n        \"stylelint-config-nick2bad4u\": \"^1.0.20\",\n        \"ts-unused-exports\": \"^11.0.1\",\n        \"tsdoc-config-nick2bad4u\": \"^1.0.6\",\n        \"typedoc\": \"^0.28.19\",\n        \"typedoc-config-nick2bad4u\": \"^2.0.1\",\n        \"typescript\": \"^6.0.3\",\n        \"typescript-eslint\": \"^8.62.1\",\n        \"typesync\": \"^0.14.3\",\n        \"vfile\": \"^6.0.3\",\n        \"vite\": \"^8.1.3\",\n        \"vite-tsconfig-paths\": \"^6.1.1\",\n        \"vitest\": \"^4.1.9\",\n        \"yamllint-config-nick2bad4u\": \"^1.1.1\",\n        \"yamllint-js\": \"^0.2.4\"\n    },\n    \"peerDependencies\": {\n        \"stylelint\": \"^16.0.0 || ^17.14.0\"\n    },\n    \"packageManager\": \"npm@11.18.0\",\n    \"engines\": {\n        \"node\": \">=22.0.0\"\n    },\n    \"devEngines\": {\n        \"runtime\": {\n            \"name\": \"node\",\n            \"version\": \">=22.0.0\",\n            \"onFail\": \"error\"\n        },\n        \"packageManager\": {\n            \"name\": \"npm\",\n            \"version\": \">=11.0.0\",\n            \"onFail\": \"error\"\n        }\n    },\n    \"publishConfig\": {\n        \"provenance\": true,\n        \"registry\": \"https://registry.npmjs.org/\"\n    },\n    \"readme\": \"README.md\"\n}\n", "/**\n * @packageDocumentation\n * Static package and docs constants used throughout the Stylelint plugin runtime.\n */\nimport type { ArrayValues } from \"type-fest\";\n\nimport packageJson from \"../../package.json\" with { type: \"json\" };\n\n/** Public npm package name. */\nexport const PACKAGE_NAME = \"stylelint-plugin-font\";\n/** Public Stylelint rule namespace. */\nexport const PLUGIN_NAMESPACE = \"font\";\n/** Public GitHub repository URL. */\nexport const REPOSITORY_URL =\n    \"https://github.com/Nick2bad4u/stylelint-plugin-font\";\n/** Public documentation site URL. */\nexport const DOCS_SITE_URL =\n    \"https://nick2bad4u.github.io/stylelint-plugin-font\";\n/** Base URL for authored rule documentation. */\nexport const DOCS_RULES_BASE_URL: `${string}/docs/rules` = `${DOCS_SITE_URL}/docs/rules`;\n/** Supported shareable config names exported by this package. */\nexport const CONFIG_NAMES = [\"font-all\", \"font-recommended\"] as const;\n\n/** Shareable config names exported by the plugin runtime. */\nexport type FontConfigName = ArrayValues<typeof CONFIG_NAMES>;\n\n/**\n * Resolve package version from package.json data.\n *\n * @param pkg - Parsed package metadata value.\n *\n * @returns The package version, or `0.0.0` when unavailable.\n */\nfunction getPackageVersion(pkg: unknown): string {\n    if (typeof pkg !== \"object\" || pkg === null) {\n        return \"0.0.0\";\n    }\n\n    const version: unknown = Reflect.get(pkg, \"version\");\n\n    return typeof version === \"string\" ? version : \"0.0.0\";\n}\n\n/** Published package version resolved from `package.json`. */\nexport const PACKAGE_VERSION: string = getPackageVersion(packageJson);\n\n/**\n * Create the canonical docs URL for one authored rule page.\n */\nexport function createRuleDocsUrl(ruleName: string): string {\n    return `${DOCS_RULES_BASE_URL}/${ruleName}`;\n}\n\n/**\n * Create a fully qualified Stylelint rule name for this plugin namespace.\n */\nexport function createRuleName<const T extends string>(\n    ruleName: T\n): `${typeof PLUGIN_NAMESPACE}/${T}` {\n    return `${PLUGIN_NAMESPACE}/${ruleName}`;\n}\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport { collectFontFaceBlocks } from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"consistent-font-display\");\nconst messages: {\n    rejected: (expected: string, actual: string) => string;\n} = ruleMessages(ruleName, {\n    rejected: (expected: string, actual: string): string =>\n        `Inconsistent \\`font-display\\` value: expected \"${expected}\" but found \"${actual}\". Keep one display strategy per stylesheet to reduce loading inconsistency.`,\n});\nconst docs = {\n    description:\n        \"Require `@font-face` declarations in the same file to use a consistent `font-display` value.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"consistent-font-display\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        let baselineDisplay = \"\";\n        let hasBaselineDisplay = false;\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const display = block.displayDecl?.value.trim().toLowerCase();\n\n            if (!isDefined(display) || display.length === 0) {\n                continue;\n            }\n\n            if (!hasBaselineDisplay) {\n                baselineDisplay = display;\n                hasBaselineDisplay = true;\n                continue;\n            }\n\n            if (display === baselineDisplay) {\n                continue;\n            }\n\n            report({\n                message: messages.rejected(baselineDisplay, display),\n                node: block.atRule,\n                result,\n                ruleName,\n            });\n        }\n    };\n\n/** Require consistent `font-display` value across all `@font-face` declarations. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "/**\n * @packageDocumentation\n * Shared helper for authoring statically typed Stylelint rules in this template.\n */\nimport type { Except } from \"type-fest\";\n\nimport stylelint, {\n    type Rule,\n    type RuleBase,\n    type RuleMessages,\n    type RuleMeta,\n} from \"stylelint\";\n\n/** Input contract for the shared Stylelint rule creator. */\nexport type CreateStylelintRuleOptions<\n    P = unknown,\n    S = Readonly<Record<string, never>> | undefined,\n    M extends RuleMessages = RuleMessages,\n> = Readonly<{\n    docs: StylelintRuleDocs;\n    messages: M;\n    meta?: Readonly<Except<RuleMeta, \"url\"> & { url?: string }>;\n    primaryOptionArray?: boolean;\n    rule: RuleBase<P, S>;\n    ruleName: string;\n}>;\n\n/** Fully assembled plugin object shape used by this template's rule registry. */\nexport type StylelintPluginRule<\n    P = unknown,\n    S = Readonly<Record<string, never>> | undefined,\n    M extends RuleMessages = RuleMessages,\n> = Readonly<{\n    docs: StylelintRuleDocs;\n    messages: M;\n    meta: Readonly<{ docs: StylelintRuleDocs }> & RuleMeta;\n    rule: Rule<P, S, M>;\n    ruleName: string;\n}> &\n    ReturnType<typeof stylelint.createPlugin>;\n\n/** Nongeneric public rule contract used for heterogeneous runtime registries. */\nexport type StylelintPluginRuleContract = Readonly<{\n    docs: StylelintRuleDocs;\n    messages: RuleMessages;\n    meta: Readonly<{ docs: StylelintRuleDocs }> & RuleMeta;\n    rule: Rule;\n    ruleName: string;\n}> &\n    ReturnType<typeof stylelint.createPlugin>;\n\n/** Static authored docs metadata carried alongside each rule definition. */\nexport type StylelintRuleDocs = Readonly<{\n    description: string;\n    recommended: boolean;\n    url: string;\n}>;\n\n/**\n * Create a Stylelint plugin object while stamping the static runtime metadata\n * that Stylelint and this template expect.\n */\nexport const createStylelintRule = <\n    P = unknown,\n    S = Readonly<Record<string, never>> | undefined,\n    M extends RuleMessages = RuleMessages,\n>(\n    options: CreateStylelintRuleOptions<P, S, M>\n): StylelintPluginRule<P, S, M> => {\n    const { docs, messages, rule, ruleName } = options;\n    const baseMeta: RuleMeta = {\n        ...options.meta,\n        url: options.meta?.url ?? docs.url,\n    };\n    const meta: Readonly<{ docs: StylelintRuleDocs }> & RuleMeta = {\n        ...baseMeta,\n        docs,\n    };\n    const typedRule = rule as Rule<P, S, M>;\n\n    typedRule.ruleName = ruleName;\n    typedRule.messages = messages;\n    typedRule.meta = meta;\n\n    if (options.primaryOptionArray === true) {\n        typedRule.primaryOptionArray = true;\n    }\n\n    const plugin = stylelint.createPlugin(ruleName, typedRule);\n\n    return {\n        ...plugin,\n        docs,\n        messages,\n        meta,\n        rule: typedRule,\n        ruleName,\n    };\n};\n", "import type { AtRule, Declaration, Root, Rule } from \"postcss\";\n\nimport { isDefined, setHas } from \"ts-extras\";\n\n/** Parsed comma-separated token with source index boundaries. */\nexport type CommaSegment = Readonly<{\n    end: number;\n    start: number;\n    text: string;\n}>;\n\n/** Parsed `@font-face` metadata used by multiple rules. */\nexport type FontFaceBlock = Readonly<{\n    atRule: AtRule;\n    displayDecl: Declaration | undefined;\n    familyDecl: Declaration | undefined;\n    familyName: string | undefined;\n    familyNameLower: string | undefined;\n    srcDecl: Declaration | undefined;\n    styleDecl: Declaration | undefined;\n    unicodeRangeDecl: Declaration | undefined;\n    weightDecl: Declaration | undefined;\n}>;\n\n/** Parsed src list item from one `@font-face` src declaration. */\nexport type FontSrcEntry = Readonly<{\n    hasFormatHint: boolean;\n    isDataUri: boolean;\n    isLocal: boolean;\n    isUrl: boolean;\n    normalizedFormat: string | undefined;\n    normalizedUrl: string | undefined;\n    raw: string;\n    url: string | undefined;\n}>;\n\n/** Mutable parser state for comma-list splitting. */\ninterface CommaSplitState {\n    depth: number;\n    inDoubleQuote: boolean;\n    inSingleQuote: boolean;\n}\n\n/** Known generic or system fallback family names. */\nconst fallbackFamilyNames = new Set([\n    \"-apple-system\",\n    \"blinkmacsystemfont\",\n    \"cursive\",\n    \"emoji\",\n    \"fangsong\",\n    \"fantasy\",\n    \"math\",\n    \"monospace\",\n    \"sans-serif\",\n    \"segoe ui\",\n    \"serif\",\n    \"system-ui\",\n    \"ui-monospace\",\n    \"ui-rounded\",\n    \"ui-sans-serif\",\n    \"ui-serif\",\n]);\n\n// \u2500\u2500\u2500 Leaf helpers (no internal dependencies) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Stable key used to identify one face variant for duplicate checks. */\nexport function buildFaceVariantKey(block: Readonly<FontFaceBlock>): string {\n    const family = block.familyNameLower ?? \"\";\n    const weight = block.weightDecl?.value.trim().toLowerCase() ?? \"400\";\n    const style = block.styleDecl?.value.trim().toLowerCase() ?? \"normal\";\n\n    return `${family}@@${weight}@@${style}`;\n}\n\n/** Collect `@font-face` blocks with commonly queried declarations. */\nexport function collectFontFaceBlocks(\n    root: Readonly<Root>\n): readonly FontFaceBlock[] {\n    const blocks: FontFaceBlock[] = [];\n\n    root.walkAtRules(\"font-face\", (atRule) => {\n        const familyDecl = getDecl(atRule, \"font-family\");\n        const familyName = familyDecl\n            ? normalizeFamilyToken(familyDecl.value)\n            : undefined;\n\n        blocks.push({\n            atRule,\n            displayDecl: getDecl(atRule, \"font-display\"),\n            familyDecl,\n            familyName,\n            familyNameLower: familyName?.toLowerCase(),\n            srcDecl: getDecl(atRule, \"src\"),\n            styleDecl: getDecl(atRule, \"font-style\"),\n            unicodeRangeDecl: getDecl(atRule, \"unicode-range\"),\n            weightDecl: getDecl(atRule, \"font-weight\"),\n        });\n    });\n\n    return blocks;\n}\n\n/** Get first declaration by property inside one at-rule. */\nexport function getDecl(\n    atRule: Readonly<AtRule>,\n    prop: string\n): Declaration | undefined {\n    const nodes = atRule.nodes ?? [];\n\n    for (const node of nodes) {\n        if (node.type === \"decl\" && node.prop === prop) {\n            return node;\n        }\n    }\n\n    return undefined;\n}\n\n/** Return normalized format hint or infer it from a URL extension. */\nexport function inferFormatHint(\n    entry: Readonly<FontSrcEntry>\n): string | undefined {\n    if (isDefined(entry.normalizedFormat)) {\n        return entry.normalizedFormat;\n    }\n\n    const url = entry.normalizedUrl;\n\n    if (!isDefined(url)) {\n        return undefined;\n    }\n\n    if (url.endsWith(\".woff2\")) {\n        return \"woff2\";\n    }\n\n    if (url.endsWith(\".woff\")) {\n        return \"woff\";\n    }\n\n    if (url.endsWith(\".ttf\")) {\n        return \"truetype\";\n    }\n\n    if (url.endsWith(\".otf\")) {\n        return \"opentype\";\n    }\n\n    if (url.endsWith(\".svg\")) {\n        return \"svg\";\n    }\n\n    if (url.endsWith(\".eot\")) {\n        return \"embedded-opentype\";\n    }\n\n    return undefined;\n}\n\n// \u2500\u2500\u2500 Private parsing helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Return true when a declaration belongs to an `@font-face` block. */\nexport function isInsideFontFace(decl: Readonly<Declaration>): boolean {\n    const parent = decl.parent;\n\n    return (\n        parent?.type === \"atrule\" && parent.name.toLowerCase() === \"font-face\"\n    );\n}\n\n/** Return true when token is explicitly quoted. */\nexport function isQuoted(value: string): boolean {\n    const trimmed = value.trim();\n    const first = trimmed.at(0);\n    const last = trimmed.at(-1);\n\n    return (\n        ((first === '\"' && last === '\"') || (first === \"'\" && last === \"'\")) &&\n        trimmed.length >= 2\n    );\n}\n\n/** Return true when a family token is generic/system fallback-like. */\nexport function isSystemFallbackFamily(token: string): boolean {\n    return setHas(fallbackFamilyNames, token.trim().toLowerCase());\n}\n\n/** Normalize one `font-family` token for matching/comparison. */\nexport function normalizeFamilyToken(token: string): string {\n    return stripSurroundingQuotes(token).trim();\n}\n\n/** Parse one font-family declaration value into comma-separated names. */\nexport function parseFamilyList(value: string): readonly string[] {\n    return splitCommaList(value)\n        .map((segment) => normalizeFamilyToken(segment.text))\n        .filter((token) => token.length > 0);\n}\n\n// \u2500\u2500\u2500 Public parsing utilities \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Parse one `@font-face` src declaration value into structured entries. */\nexport function parseFontSrcEntries(value: string): readonly FontSrcEntry[] {\n    return splitCommaList(value).map((segment) => {\n        const rawSegment = segment.text;\n        const normalized = rawSegment.toLowerCase();\n        const url = getUrlValue(rawSegment);\n        const normalizedFormat = getFormatHint(rawSegment);\n        const normalizedUrl = url?.toLowerCase();\n\n        return {\n            hasFormatHint: isDefined(normalizedFormat),\n            isDataUri: /^data:/iv.test(normalizedUrl ?? \"\"),\n            isLocal: /\\blocal\\s*\\(/iv.test(normalized),\n            isUrl: /\\burl\\s*\\(/iv.test(normalized),\n            normalizedFormat,\n            normalizedUrl: normalizedUrl?.toLowerCase(),\n            raw: rawSegment,\n            url,\n        };\n    });\n}\n\n/** Split one CSS comma-list while preserving nested parentheses and quotes. */\nexport function splitCommaList(value: string): readonly CommaSegment[] {\n    const segments: CommaSegment[] = [];\n    let start = 0;\n    const state: CommaSplitState = {\n        depth: 0,\n        inDoubleQuote: false,\n        inSingleQuote: false,\n    };\n\n    for (let index = 0; index < value.length; index += 1) {\n        const character = value[index] ?? \"\";\n\n        updateQuoteState(state, {\n            character,\n            previous: index > 0 ? (value[index - 1] ?? \"\") : \"\",\n        });\n\n        if (state.inSingleQuote || state.inDoubleQuote) {\n            continue;\n        }\n\n        if (shouldConsumeStructuralCharacter(state, character)) {\n            continue;\n        }\n\n        if (character === \",\" && state.depth === 0) {\n            const raw = value.slice(start, index).trim();\n\n            if (raw.length > 0) {\n                segments.push({\n                    end: index,\n                    start,\n                    text: raw,\n                });\n            }\n\n            start = index + 1;\n        }\n    }\n\n    const trailing = value.slice(start).trim();\n\n    if (trailing.length > 0) {\n        segments.push({\n            end: value.length,\n            start,\n            text: trailing,\n        });\n    }\n\n    return segments;\n}\n\n/** Remove one layer of single/double quotes from a CSS string token. */\nexport function stripSurroundingQuotes(value: string): string {\n    const trimmed = value.trim();\n\n    if (trimmed.length < 2) {\n        return trimmed;\n    }\n\n    const first = trimmed.at(0);\n    const last = trimmed.at(-1);\n\n    if ((first === '\"' && last === '\"') || (first === \"'\" && last === \"'\")) {\n        return trimmed.slice(1, -1).trim();\n    }\n\n    return trimmed;\n}\n\n/** Iterate declaration nodes from regular style rules only. */\nexport function walkNormalRuleDecls(\n    root: Readonly<Root>,\n    prop: string,\n    visitor: (decl: Readonly<Declaration>, rule: Readonly<Rule>) => void\n): void {\n    root.walkDecls(prop, (decl) => {\n        const parent = decl.parent;\n\n        if (parent?.type !== \"rule\") {\n            return;\n        }\n\n        visitor(decl, parent);\n    });\n}\n\n/** Extract normalized format hint token from one src segment. */\nfunction getFormatHint(segment: string): string | undefined {\n    const captured = getFunctionArgument(segment, \"format\");\n\n    return captured?.toLowerCase();\n}\n\n/** Extract one function argument value from a CSS value segment. */\nfunction getFunctionArgument(\n    segment: string,\n    functionName: \"format\" | \"url\"\n): string | undefined {\n    const marker = `${functionName}(`;\n    const normalized = segment.toLowerCase();\n    const markerIndex = normalized.indexOf(marker);\n\n    if (markerIndex === -1) {\n        return undefined;\n    }\n\n    const startIndex = markerIndex + marker.length;\n    const closingIndex = segment.indexOf(\")\", startIndex);\n\n    if (closingIndex === -1) {\n        return undefined;\n    }\n\n    const rawArgument = segment.slice(startIndex, closingIndex).trim();\n\n    return stripSurroundingQuotes(rawArgument);\n}\n\n/** Extract normalized URL from one src segment when present. */\nfunction getUrlValue(segment: string): string | undefined {\n    return getFunctionArgument(segment, \"url\");\n}\n\n/** Apply parser depth updates for structural characters. */\nfunction shouldConsumeStructuralCharacter(\n    // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types -- CommaSplitState is intentionally mutable\n    state: CommaSplitState,\n    character: string\n): boolean {\n    if (character === \"(\") {\n        state.depth += 1;\n        return true;\n    }\n\n    if (character === \")\") {\n        state.depth = Math.max(0, state.depth - 1);\n        return true;\n    }\n\n    return false;\n}\n\n/** Update single/double quote tracking state for list parsing. */\nfunction updateQuoteState(\n    // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types -- CommaSplitState is intentionally mutable\n    state: CommaSplitState,\n    input: Readonly<{ character: string; previous: string }>\n): void {\n    const { character, previous } = input;\n\n    if (previous === \"\\\\\") {\n        return;\n    }\n\n    if (character === \"'\" && !state.inDoubleQuote) {\n        state.inSingleQuote = !state.inSingleQuote;\n        return;\n    }\n\n    if (character === '\"' && !state.inSingleQuote) {\n        state.inDoubleQuote = !state.inDoubleQuote;\n    }\n}\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    isQuoted,\n    stripSurroundingQuotes,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"consistent-font-family-casing\");\nconst messages: {\n    rejected: (expected: string, actual: string) => string;\n} = ruleMessages(ruleName, {\n    rejected: (expected: string, actual: string): string =>\n        `Inconsistent font-family casing: expected \"${expected}\" but found \"${actual}\". Use one canonical family spelling for all @font-face declarations.`,\n});\nconst docs = {\n    description:\n        \"Require consistent `font-family` casing across `@font-face` declarations.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"consistent-font-family-casing\"),\n} as const;\n\nfunction normalizeTokenWithCanonicalCase(\n    original: string,\n    canonical: string\n): string {\n    if (isQuoted(original)) {\n        const quote = original.trim().at(0) ?? '\"';\n\n        return `${quote}${canonical}${quote}`;\n    }\n\n    if (canonical.includes(\" \")) {\n        return `\"${canonical}\"`;\n    }\n\n    return canonical;\n}\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        const canonicalByLower = new Map<string, string>();\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const familyDecl = block.familyDecl;\n\n            if (!isDefined(familyDecl) || !isDefined(block.familyName)) {\n                continue;\n            }\n\n            const normalizedLower = block.familyName.toLowerCase();\n            const canonical = canonicalByLower.get(normalizedLower);\n\n            if (!isDefined(canonical)) {\n                canonicalByLower.set(normalizedLower, block.familyName);\n                continue;\n            }\n\n            if (canonical === block.familyName) {\n                continue;\n            }\n\n            report({\n                fix() {\n                    familyDecl.value = normalizeTokenWithCanonicalCase(\n                        familyDecl.value,\n                        canonical\n                    );\n                },\n                message: messages.rejected(\n                    canonical,\n                    stripSurroundingQuotes(familyDecl.value)\n                ),\n                node: familyDecl,\n                result,\n                ruleName,\n            });\n        }\n    };\n\n/** Require consistent `font-family` casing across all `@font-face` declarations. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        meta: { fixable: true },\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { arrayJoin, isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    parseFontSrcEntries,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"local-src-before-url\");\nconst messages: { rejected: () => string } = ruleMessages(ruleName, {\n    rejected: (): string =>\n        \"`src` lists `url()` before `local()`. Move all `local(...)` entries ahead of network URLs so installed fonts are preferred.\",\n});\nconst docs = {\n    description:\n        \"Require `local(...)` entries to appear before `url(...)` entries in `@font-face src`.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"local-src-before-url\"),\n} as const;\n\nfunction reorderLocalEntriesFirst(value: string): string {\n    const entries = parseFontSrcEntries(value);\n    const locals = entries\n        .filter((entry) => entry.isLocal)\n        .map((entry) => entry.raw);\n    const rest = entries\n        .filter((entry) => !entry.isLocal)\n        .map((entry) => entry.raw);\n\n    return arrayJoin([...locals, ...rest], \", \");\n}\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const srcDecl = block.srcDecl;\n\n            if (!isDefined(srcDecl)) {\n                continue;\n            }\n\n            const entries = parseFontSrcEntries(srcDecl.value);\n            const firstUrlIndex = entries.findIndex((entry) => entry.isUrl);\n            const firstLocalIndex = entries.findIndex((entry) => entry.isLocal);\n\n            if (\n                firstUrlIndex === -1 ||\n                firstLocalIndex === -1 ||\n                firstLocalIndex < firstUrlIndex\n            ) {\n                continue;\n            }\n\n            report({\n                fix() {\n                    srcDecl.value = reorderLocalEntriesFirst(srcDecl.value);\n                },\n                message: messages.rejected(),\n                node: srcDecl,\n                result,\n                ruleName,\n            });\n        }\n    };\n\n/** Require `local(...)` entries before `url(...)` entries in `@font-face src`. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        meta: { fixable: true },\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    parseFontSrcEntries,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-absolute-font-url\");\nconst messages: { rejected: (url: string) => string } = ruleMessages(ruleName, {\n    rejected: (url: string): string =>\n        `Absolute font URL \"${url}\" detected. Prefer relative paths so assets keep working under sub-path deployments and CDN prefixes.`,\n});\nconst docs = {\n    description:\n        \"Disallow absolute root-relative font URLs in `@font-face src` declarations.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-absolute-font-url\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const srcDecl = block.srcDecl;\n\n            if (!isDefined(srcDecl)) {\n                continue;\n            }\n\n            const violatingEntry = parseFontSrcEntries(srcDecl.value).find(\n                (entry) => {\n                    const url = entry.normalizedUrl;\n\n                    return isDefined(url) && /^\\/(?!\\/)/v.test(url);\n                }\n            );\n\n            if (!isDefined(violatingEntry)) {\n                continue;\n            }\n\n            report({\n                message: messages.rejected(violatingEntry.normalizedUrl ?? \"/\"),\n                node: srcDecl,\n                result,\n                ruleName,\n            });\n        }\n    };\n\n/** Disallow absolute HTTP/HTTPS URLs in `@font-face src` declarations. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    parseFontSrcEntries,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-data-uri-src\");\nconst messages: { rejected: () => string } = ruleMessages(ruleName, {\n    rejected: (): string =>\n        \"Data-URI font source detected in `@font-face src`. Avoid inlining fonts as base64; it inflates CSS size and slows first parse.\",\n});\nconst docs = {\n    description: \"Disallow `data:` URL font sources in `@font-face src`.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-data-uri-src\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const srcDecl = block.srcDecl;\n\n            if (!isDefined(srcDecl)) {\n                continue;\n            }\n\n            const hasDataUri = parseFontSrcEntries(srcDecl.value).some(\n                (entry) => entry.isDataUri\n            );\n\n            if (!hasDataUri) {\n                continue;\n            }\n\n            report({\n                message: messages.rejected(),\n                node: srcDecl,\n                result,\n                ruleName,\n            });\n        }\n    };\n\n/** Disallow data URI fonts in `@font-face src` declarations. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import type { ChildNode, Declaration } from \"postcss\";\n\nimport stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport { collectFontFaceBlocks } from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-duplicate-descriptors-in-font-face\");\n\nconst messages: { rejected: (prop: string) => string } = ruleMessages(\n    ruleName,\n    {\n        rejected: (prop: string): string =>\n            `Duplicate \\`${prop}\\` descriptor in \\`@font-face\\`. Only the last declaration takes effect; the earlier one is silently ignored. Remove the duplicate to clarify intent.`,\n    }\n);\n\nconst docs = {\n    description:\n        \"Disallow duplicate descriptor declarations within a single `@font-face` block.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-duplicate-descriptors-in-font-face\"),\n} as const;\n\n/** Type guard: narrow a PostCSS ChildNode to a mutable Declaration. */\nfunction isDecl(node: Readonly<ChildNode>): node is Declaration {\n    return node.type === \"decl\";\n}\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const { nodes } = block.atRule;\n\n            if (!isDefined(nodes)) {\n                continue;\n            }\n\n            const seenProps = new Map<string, Declaration>();\n\n            for (const node of nodes) {\n                if (!isDecl(node)) {\n                    continue;\n                }\n\n                const prop = node.prop.trim().toLowerCase();\n                const previous = seenProps.get(prop);\n\n                if (isDefined(previous)) {\n                    report({\n                        message: messages.rejected(node.prop),\n                        node,\n                        result,\n                        ruleName,\n                        word: node.prop,\n                    });\n                } else {\n                    seenProps.set(prop, node);\n                }\n            }\n        }\n    };\n\n/**\n * Disallow duplicate descriptor declarations within a single `@font-face`\n * block.\n */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { setHas } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    buildFaceVariantKey,\n    collectFontFaceBlocks,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-duplicate-font-face\");\nconst messages: { rejected: (family: string) => string } = ruleMessages(\n    ruleName,\n    {\n        rejected: (family: string): string =>\n            `Duplicate @font-face variant detected for family \"${family}\" with the same style/weight tuple. Keep one authoritative face per tuple.`,\n    }\n);\nconst docs = {\n    description:\n        \"Disallow duplicate `@font-face` blocks that share the same `font-family` + `font-style` + `font-weight` variant.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-duplicate-font-face\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        const seen = new Set<string>();\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const key = buildFaceVariantKey(block);\n\n            if (key.length === 0) {\n                continue;\n            }\n\n            if (setHas(seen, key)) {\n                report({\n                    message: messages.rejected(\n                        block.familyName ?? \"(unknown family)\"\n                    ),\n                    node: block.atRule,\n                    result,\n                    ruleName,\n                });\n                continue;\n            }\n\n            seen.add(key);\n        }\n    };\n\n/**\n * Disallow duplicate `@font-face` declarations with the same family, weight,\n * and style.\n */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import type { ArrayElement } from \"type-fest\";\n\nimport stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    parseFontSrcEntries,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-duplicate-font-family-src\");\n\nconst messages: {\n    rejected: (url: string, family: string) => string;\n} = ruleMessages(ruleName, {\n    rejected: (url: string, family: string): string =>\n        `Duplicate src URL \"${url}\" found in multiple \\`@font-face\\` blocks for family \"${family}\". Each variant should reference a unique source file.`,\n});\n\nconst docs = {\n    description:\n        \"Disallow duplicate `src` URLs across `@font-face` blocks that share the same `font-family` name.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-duplicate-font-family-src\"),\n} as const;\n\nfunction getOrCreateSeenUrls(\n    urlsByFamily: Map<string, Set<string>>,\n    family: string\n): Set<string> {\n    const existing = urlsByFamily.get(family);\n\n    if (isDefined(existing)) {\n        return existing;\n    }\n\n    const created = new Set<string>();\n    urlsByFamily.set(family, created);\n\n    return created;\n}\n\nfunction reportDuplicateUrlsForBlock(\n    input: Readonly<{\n        family: string;\n        familyDisplayName: string;\n        result: Parameters<ReturnType<RuleBase<boolean, undefined>>>[1];\n        seenUrls: Set<string>;\n        srcDecl: NonNullable<\n            ArrayElement<ReturnType<typeof collectFontFaceBlocks>>[\"srcDecl\"]\n        >;\n    }>\n): void {\n    const { family, familyDisplayName, result, seenUrls, srcDecl } = input;\n\n    for (const entry of parseFontSrcEntries(srcDecl.value)) {\n        if (!entry.isUrl || !isDefined(entry.normalizedUrl)) {\n            continue;\n        }\n\n        const normalizedUrl = entry.normalizedUrl;\n\n        if (!setHas(seenUrls, normalizedUrl)) {\n            seenUrls.add(normalizedUrl);\n            continue;\n        }\n\n        report({\n            message: messages.rejected(\n                entry.url ?? normalizedUrl,\n                familyDisplayName\n            ),\n            node: srcDecl,\n            result,\n            ruleName,\n            word: family.length > 0 ? normalizedUrl : entry.raw,\n        });\n    }\n}\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        const blocks = collectFontFaceBlocks(root);\n\n        // Map: normalised family name \u2192 set of already-seen normalised URLs.\n        // The map is built in source order so the second (and later) occurrence\n        // of a URL is what gets reported, matching user expectations.\n        const urlsByFamily = new Map<string, Set<string>>();\n\n        for (const block of blocks) {\n            if (\n                !isDefined(block.familyNameLower) ||\n                !isDefined(block.srcDecl)\n            ) {\n                continue;\n            }\n\n            const family = block.familyNameLower;\n\n            reportDuplicateUrlsForBlock({\n                family,\n                familyDisplayName: block.familyName ?? family,\n                result,\n                seenUrls: getOrCreateSeenUrls(urlsByFamily, family),\n                srcDecl: block.srcDecl,\n            });\n        }\n    };\n\n/** Disallow duplicate `src` URLs across `@font-face` blocks for the same family. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    parseFontSrcEntries,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-duplicate-src-format\");\n\nconst messages: {\n    rejected: (format: string, family: string) => string;\n} = ruleMessages(ruleName, {\n    rejected: (format: string, family: string): string =>\n        `Duplicate \\`format(\"${format}\")\\` hint in \\`@font-face src\\` for family \"${family}\". Browsers stop at the first matching format entry; subsequent entries with the same format are never downloaded.`,\n});\n\nconst docs = {\n    description:\n        \"Disallow duplicate explicit `format()` hints within a single `@font-face src` declaration.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-duplicate-src-format\"),\n} as const;\n\n/**\n * Scan a src entry list and return the first format string that appears more\n * than once, or `undefined` when all format hints are distinct.\n */\nfunction findFirstDuplicateFormat(\n    entries: readonly { readonly normalizedFormat: string | undefined }[]\n): string | undefined {\n    const seenFormats = new Set<string>();\n\n    for (const entry of entries) {\n        const { normalizedFormat: format } = entry;\n\n        if (!isDefined(format)) {\n            continue;\n        }\n\n        if (setHas(seenFormats, format)) {\n            return format;\n        }\n\n        seenFormats.add(format);\n    }\n\n    return undefined;\n}\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const srcDecl = block.srcDecl;\n\n            if (!isDefined(srcDecl)) {\n                continue;\n            }\n\n            const entries = parseFontSrcEntries(srcDecl.value);\n\n            const firstDuplicate = findFirstDuplicateFormat(entries);\n\n            if (!isDefined(firstDuplicate)) {\n                continue;\n            }\n\n            const familyLabel = block.familyName ?? \"(unknown)\";\n\n            report({\n                message: messages.rejected(firstDuplicate, familyLabel),\n                node: srcDecl,\n                result,\n                ruleName,\n                word: `format(\"${firstDuplicate}\")`,\n            });\n        }\n    };\n\n/** Disallow duplicate `format()` hints in a single `@font-face src` list. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport { collectFontFaceBlocks } from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-empty-font-face\");\n\nconst messages: { rejected: () => string } = ruleMessages(ruleName, {\n    rejected: (): string =>\n        \"Empty `@font-face` block detected. A `@font-face` block with no declarations is completely inert and has no effect. Add descriptors or remove the block.\",\n});\n\nconst docs = {\n    description:\n        \"Disallow empty `@font-face` declaration blocks that contain no descriptors.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-empty-font-face\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const nodes = block.atRule.nodes ?? [];\n            const hasDeclaration = nodes.some((node) => node.type === \"decl\");\n\n            if (!hasDeclaration) {\n                report({\n                    message: messages.rejected(),\n                    node: block.atRule,\n                    result,\n                    ruleName,\n                });\n            }\n        }\n    };\n\n/** Disallow empty `@font-face` blocks that contain no descriptors. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import type { AtRule } from \"postcss\";\n\nimport stylelint, { type RuleBase } from \"stylelint\";\nimport { safeCastTo, setHas } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-font-face-in-media-query\");\n\n/**\n * Pattern matching conditional at-rule names that should not contain\n * `@font-face` blocks. Nesting `@font-face` inside these rules produces\n * unreliable download behavior across browsers \u2014 some browsers ignore the media\n * condition and download the font unconditionally.\n */\nconst CONDITIONAL_AT_RULE_PATTERN = /^(?:container|media|supports)$/iv;\n\nconst messages: { rejected: (wrapperName: string) => string } = ruleMessages(\n    ruleName,\n    {\n        rejected: (wrapperName: string): string =>\n            `\\`@font-face\\` is nested inside \\`@${wrapperName}\\`. Browser behavior for conditional \\`@font-face\\` blocks is unreliable \u2014 some browsers download the font regardless of whether the condition matches. Move \\`@font-face\\` declarations to the top level of the stylesheet.`,\n    }\n);\n\nconst docs = {\n    description:\n        \"Disallow `@font-face` blocks nested inside `@media`, `@supports`, or `@container` at-rules.\",\n    recommended: false,\n    url: createRuleDocsUrl(\"no-font-face-in-media-query\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        /**\n         * Track already-reported `@font-face` nodes to avoid double-reporting\n         * when a block is nested inside multiple conditional wrappers (e.g.,\n         * `@supports > @media > @font-face`). PostCSS walks in pre-order, so\n         * the outermost wrapper is always visited first.\n         */\n        const alreadyReported = new Set<Readonly<AtRule>>();\n\n        root.walkAtRules(\n            CONDITIONAL_AT_RULE_PATTERN,\n            (condAtRule: Readonly<AtRule>) => {\n                condAtRule.walkAtRules(\n                    \"font-face\",\n                    (fontFaceAtRule: Readonly<AtRule>) => {\n                        if (setHas(alreadyReported, fontFaceAtRule)) {\n                            return;\n                        }\n\n                        alreadyReported.add(fontFaceAtRule);\n\n                        const wrapperName = condAtRule.name.toLowerCase();\n\n                        report({\n                            message: messages.rejected(wrapperName),\n                            node: safeCastTo<AtRule>(fontFaceAtRule),\n                            result,\n                            ruleName,\n                            word: `@${wrapperName}`,\n                        });\n                    }\n                );\n            }\n        );\n    };\n\n/**\n * Disallow `@font-face` blocks nested inside `@media`, `@supports`, or\n * `@container`.\n */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import type { AtRule } from \"postcss\";\n\nimport stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-font-face-in-selectors\");\n\nconst messages: { rejected: () => string } = ruleMessages(ruleName, {\n    rejected: (): string =>\n        \"`@font-face` rule is nested inside a regular selector. Font-face declarations should only appear at the root level or inside at-rules like `@media`, `@supports`, `@layer`, or `@container` for optimal performance and clarity.\",\n});\n\nconst docs = {\n    description:\n        \"Disallow `@font-face` rules nested inside regular CSS selectors.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-font-face-in-selectors\"),\n} as const;\n\n/** Check if the parent of a node is a regular selector (not an at-rule). */\nfunction hasRegularSelectorParent(node: Readonly<AtRule>): boolean {\n    let parent: unknown = node.parent;\n\n    while (isDefined(parent) && typeof parent === \"object\") {\n        // Cast to access properties safely\n        const typedParent = parent as { parent?: unknown; type: string };\n        const parentType = typedParent.type;\n\n        // If we encounter a regular rule (selector), that's a violation\n        if (parentType === \"rule\") {\n            return true;\n        }\n\n        // At-rules (like @media, @supports, @layer) and document are OK\u2014keep walking\n        if (parentType === \"atrule\" || parentType === \"document\") {\n            parent = typedParent.parent;\n            continue;\n        }\n\n        // Root level found\u2014no regular selector parent\n        if (parentType === \"root\") {\n            return false;\n        }\n\n        // Unknown type\u2014stop walking\n        return false;\n    }\n\n    return false;\n}\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        root.walkAtRules(\"font-face\", (atRule) => {\n            if (hasRegularSelectorParent(atRule)) {\n                report({\n                    message: messages.rejected(),\n                    node: atRule,\n                    result,\n                    ruleName,\n                });\n            }\n        });\n    };\n\n/** Disallow `@font-face` rules nested inside regular CSS selectors. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport { collectFontFaceBlocks } from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-generic-family-in-font-face\");\n\n/**\n * Generic CSS family keywords that are forbidden as the `font-family`\n * descriptor value inside an `@font-face` block.\n *\n * The CSS Fonts specification requires this descriptor to specify a custom\n * author-defined family name, not a CSS-defined generic keyword. Using a\n * generic keyword silently shadows the built-in generic family, making the name\n * unresolvable in practice and breaking inheritance.\n *\n * Reference: https://www.w3.org/TR/css-fonts-4/#font-family-desc\n */\nconst GENERIC_FAMILY_KEYWORDS = new Set([\n    \"cursive\",\n    \"emoji\",\n    \"fangsong\",\n    \"fantasy\",\n    \"math\",\n    \"monospace\",\n    \"sans-serif\",\n    \"serif\",\n    \"system-ui\",\n    \"ui-monospace\",\n    \"ui-rounded\",\n    \"ui-sans-serif\",\n    \"ui-serif\",\n]);\n\nconst messages: { rejected: (value: string) => string } = ruleMessages(\n    ruleName,\n    {\n        rejected: (value: string): string =>\n            `\"${value}\" is a CSS generic family keyword and must not be used as the \\`font-family\\` descriptor value inside \\`@font-face\\`. Provide a custom family name instead.`,\n    }\n);\n\nconst docs = {\n    description:\n        \"Disallow CSS generic family keywords as `font-family` descriptor values inside `@font-face` blocks.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-generic-family-in-font-face\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const familyDecl = block.familyDecl;\n\n            if (!isDefined(familyDecl)) {\n                continue;\n            }\n\n            const rawValue = familyDecl.value.trim().toLowerCase();\n\n            // Strip surrounding quotes for the generic-keyword check.\n            const unquoted =\n                (rawValue.startsWith('\"') && rawValue.endsWith('\"')) ||\n                (rawValue.startsWith(\"'\") && rawValue.endsWith(\"'\"))\n                    ? rawValue.slice(1, -1).trim()\n                    : rawValue;\n\n            if (!setHas(GENERIC_FAMILY_KEYWORDS, unquoted)) {\n                continue;\n            }\n\n            report({\n                message: messages.rejected(familyDecl.value.trim()),\n                node: familyDecl,\n                result,\n                ruleName,\n                word: familyDecl.value.trim(),\n            });\n        }\n    };\n\n/** Disallow CSS generic family keywords as `font-family` in `@font-face`. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    parseFontSrcEntries,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-http-font-url\");\nconst httpScheme = \"http:\";\n\nconst messages: { rejected: (url: string) => string } = ruleMessages(ruleName, {\n    rejected: (url: string): string =>\n        `Insecure \\`http://\\` URL \"${url}\" detected in \\`@font-face src\\`. Loading fonts over plain HTTP exposes users to man-in-the-middle attacks and font substitution. Use \\`https://\\` or a relative path instead.`,\n});\n\nconst docs = {\n    description:\n        \"Disallow plain `http://` URLs in `@font-face src` declarations.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-http-font-url\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const srcDecl = block.srcDecl;\n\n            if (!isDefined(srcDecl)) {\n                continue;\n            }\n\n            const violatingEntry = parseFontSrcEntries(srcDecl.value).find(\n                (entry) => {\n                    const url = entry.normalizedUrl;\n\n                    return (\n                        isDefined(url) &&\n                        url.toLowerCase().startsWith(`${httpScheme}//`)\n                    );\n                }\n            );\n\n            if (!isDefined(violatingEntry)) {\n                continue;\n            }\n\n            const offendingUrl =\n                violatingEntry.normalizedUrl ?? `${httpScheme}//`;\n\n            report({\n                message: messages.rejected(offendingUrl),\n                node: srcDecl,\n                result,\n                ruleName,\n                word: offendingUrl,\n            });\n        }\n    };\n\n/** Disallow plain `http://` URLs in `@font-face src` declarations. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport { collectFontFaceBlocks } from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-invalid-font-display\");\nconst messages: { rejected: (value: string) => string } = ruleMessages(\n    ruleName,\n    {\n        rejected: (value: string): string =>\n            `Invalid \\`font-display\\` descriptor value \"${value}\". Valid values are: \"auto\", \"block\", \"swap\", \"fallback\", and \"optional\".`,\n    }\n);\nconst docs = {\n    description:\n        \"Disallow invalid `font-display` descriptor values in `@font-face` blocks.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-invalid-font-display\"),\n} as const;\n\nconst validFontDisplayValues = new Set([\n    \"auto\",\n    \"block\",\n    \"fallback\",\n    \"optional\",\n    \"swap\",\n]);\n\nfunction isValidFontDisplay(value: string): boolean {\n    const normalized = value.trim().toLowerCase();\n\n    return setHas(validFontDisplayValues, normalized);\n}\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const displayDecl = block.displayDecl;\n\n            if (\n                !isDefined(displayDecl) ||\n                isValidFontDisplay(displayDecl.value)\n            ) {\n                continue;\n            }\n\n            report({\n                message: messages.rejected(displayDecl.value),\n                node: displayDecl,\n                result,\n                ruleName,\n                word: displayDecl.value,\n            });\n        }\n    };\n\n/** Disallow invalid `font-display` descriptor values in `@font-face` blocks. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { arrayFirst, isDefined, stringSplit } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport { collectFontFaceBlocks } from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-invalid-font-style\");\n\nconst messages: { rejected: (value: string) => string } = ruleMessages(\n    ruleName,\n    {\n        rejected: (value: string): string =>\n            `Invalid \\`font-style\\` descriptor value \"${value}\". Valid values are: \"normal\", \"italic\", \"oblique\", \"oblique <angle>\" (e.g. \"oblique 10deg\"), or \"oblique <min> <max>\" for variable fonts (e.g. \"oblique -90deg 90deg\").`,\n    }\n);\n\nconst docs = {\n    description:\n        \"Disallow invalid `font-style` descriptor values in `@font-face` blocks.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-invalid-font-style\"),\n} as const;\n\n/**\n * Validate a `font-style` descriptor value. Valid forms:\n *\n * - \"normal\"\n * - \"italic\"\n * - \"oblique\"\n * - \"oblique <angle>\" (e.g., \"oblique 10deg\")\n * - \"oblique <angle> <angle>\" (variable-font range, e.g., \"oblique -90deg 90deg\")\n *\n * Per CSS Fonts Level 4, `oblique` in `@font-face` accepts an optional angle or\n * an angle range (min max) to describe the available slant range for variable\n * fonts.\n */\nfunction isValidAngle(token: string): boolean {\n    // Angle: optional minus, digits with optional decimal, optional \"deg\" unit\n    // eslint-disable-next-line security/detect-unsafe-regex -- Pattern is safe; no ReDoS risk\n    return /^-?\\d+(?:\\.\\d+)?(?:deg)?$/v.test(token);\n}\n\nfunction isValidFontStyle(value: string): boolean {\n    const trimmed = value.trim().toLowerCase();\n\n    // Simple keywords\n    if (trimmed === \"normal\" || trimmed === \"italic\") {\n        return true;\n    }\n\n    // Oblique without angle\n    if (trimmed === \"oblique\") {\n        return true;\n    }\n\n    // Oblique with one or two angles (e.g. \"oblique 10deg\" or \"oblique -90deg 90deg\")\n    if (trimmed.startsWith(\"oblique\")) {\n        const anglepart = trimmed.slice(\"oblique\".length).trim();\n        // Split on whitespace \u2014 one or two angle tokens\n        const normalizedAnglePart = anglepart.replaceAll(/\\s+/gv, \" \").trim();\n        const tokens = stringSplit(normalizedAnglePart, \" \");\n\n        if (tokens.length === 1) {\n            return isValidAngle(arrayFirst(tokens) ?? \"\");\n        }\n\n        if (tokens.length === 2) {\n            const [minAngle, maxAngle] = tokens;\n\n            return isValidAngle(minAngle ?? \"\") && isValidAngle(maxAngle ?? \"\");\n        }\n\n        return false;\n    }\n\n    return false;\n}\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const styleDecl = block.styleDecl;\n\n            if (!isDefined(styleDecl) || isValidFontStyle(styleDecl.value)) {\n                continue;\n            }\n\n            report({\n                message: messages.rejected(styleDecl.value),\n                node: styleDecl,\n                result,\n                ruleName,\n                word: styleDecl.value,\n            });\n        }\n    };\n\n/** Disallow invalid `font-style` descriptor values in `@font-face` blocks. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { arrayAt, isDefined, stringSplit } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport { collectFontFaceBlocks } from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-invalid-font-weight\");\n\nconst messages: { rejected: (value: string) => string } = ruleMessages(\n    ruleName,\n    {\n        rejected: (value: string): string =>\n            `Invalid \\`font-weight\\` descriptor value \"${value}\". Valid values are: integers 1\u20131000, the keywords \"normal\" (= 400) or \"bold\" (= 700), or a range \"MIN MAX\" for variable fonts.`,\n    }\n);\n\nconst docs = {\n    description:\n        \"Disallow invalid `font-weight` descriptor values in `@font-face` blocks.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-invalid-font-weight\"),\n} as const;\n\n/**\n * Validate a `font-weight` descriptor value. Valid forms:\n *\n * - \"normal\" (keyword, equivalent to 400)\n * - \"bold\" (keyword, equivalent to 700)\n * - \"100\" to \"1000\" (integer)\n * - \"100 900\" (range for variable fonts)\n */\nfunction isValidFontWeight(value: string): boolean {\n    const trimmed = value.trim();\n\n    if (\n        trimmed.toLowerCase() === \"normal\" ||\n        trimmed.toLowerCase() === \"bold\"\n    ) {\n        return true;\n    }\n\n    // Single number: 1-1000\n    if (/^\\d+$/v.test(trimmed)) {\n        const num = Number(trimmed);\n\n        return num >= 1 && num <= 1000;\n    }\n\n    // Range: \"100 900\" format\n    if (/^\\d+\\s+\\d+$/v.test(trimmed)) {\n        const normalizedRange = trimmed.replaceAll(/\\s+/gv, \" \");\n        const parts = stringSplit(normalizedRange, \" \");\n        const min = Number(arrayAt(parts, 0) ?? \"0\");\n        const max = Number(arrayAt(parts, 1) ?? \"0\");\n\n        return min >= 1 && max <= 1000 && min <= max;\n    }\n\n    return false;\n}\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const weightDecl = block.weightDecl;\n\n            if (!isDefined(weightDecl) || isValidFontWeight(weightDecl.value)) {\n                continue;\n            }\n\n            report({\n                message: messages.rejected(weightDecl.value),\n                node: weightDecl,\n                result,\n                ruleName,\n                word: weightDecl.value,\n            });\n        }\n    };\n\n/** Disallow invalid `font-weight` descriptor values in `@font-face` blocks. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport { collectFontFaceBlocks } from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\nimport { parseUnicodeRangeSet } from \"../_internal/unicode-range.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-invalid-unicode-range\");\nconst messages: { rejected: (value: string) => string } = ruleMessages(\n    ruleName,\n    {\n        rejected: (value: string): string =>\n            `Invalid \\`unicode-range\\` descriptor value \"${value}\". Use valid Unicode ranges like \\`U+0000-00FF\\`, \\`U+4??\\`, or comma-separated combinations.`,\n    }\n);\nconst docs = {\n    description:\n        \"Disallow invalid `unicode-range` descriptor values in `@font-face` blocks.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-invalid-unicode-range\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const unicodeRangeDecl = block.unicodeRangeDecl;\n\n            if (!isDefined(unicodeRangeDecl)) {\n                continue;\n            }\n\n            if (isDefined(parseUnicodeRangeSet(unicodeRangeDecl.value))) {\n                continue;\n            }\n\n            report({\n                message: messages.rejected(unicodeRangeDecl.value),\n                node: unicodeRangeDecl,\n                result,\n                ruleName,\n                word: unicodeRangeDecl.value,\n            });\n        }\n    };\n\n/** Disallow invalid `unicode-range` descriptor values in `@font-face` blocks. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import { isDefined, isEmpty, isFinite, stringSplit } from \"ts-extras\";\n\n/** One parsed unicode-range interval in numeric form (inclusive). */\nexport type UnicodeInterval = Readonly<{\n    end: number;\n    start: number;\n}>;\n\n/** Parsed unicode-range descriptor preserving original text for reporting. */\nexport type UnicodeRangeSet = Readonly<{\n    displayValue: string;\n    intervals: readonly UnicodeInterval[];\n}>;\n\n/** Return true when any interval from the left set overlaps with the right set. */\nexport function hasOverlappingIntervals(\n    leftIntervals: readonly UnicodeInterval[],\n    rightIntervals: readonly UnicodeInterval[]\n): boolean {\n    for (const left of leftIntervals) {\n        for (const right of rightIntervals) {\n            if (left.start <= right.end && right.start <= left.end) {\n                return true;\n            }\n        }\n    }\n\n    return false;\n}\n\n/** Parse one `unicode-range` descriptor value into numeric intervals. */\nexport function parseUnicodeRangeSet(\n    value: string\n): undefined | UnicodeRangeSet {\n    const intervals: UnicodeInterval[] = [];\n\n    for (const token of stringSplit(value, \",\")) {\n        const parsedInterval = parseUnicodeRangeToken(token.trim());\n\n        if (!isDefined(parsedInterval)) {\n            return undefined;\n        }\n\n        intervals.push(parsedInterval);\n    }\n\n    if (isEmpty(intervals)) {\n        return undefined;\n    }\n\n    return {\n        displayValue: value.trim(),\n        intervals,\n    };\n}\n\nfunction isValidUnicodePart(token: string): boolean {\n    if (token.length === 0 || token.length > 6) {\n        return false;\n    }\n\n    for (const character of token) {\n        const isHex =\n            (character >= \"0\" && character <= \"9\") ||\n            (character >= \"A\" && character <= \"F\");\n\n        if (!isHex && character !== \"?\") {\n            return false;\n        }\n    }\n\n    return true;\n}\n\nfunction parseUnicodeRangeToken(token: string): undefined | UnicodeInterval {\n    const normalized = token.trim().toUpperCase();\n\n    if (!normalized.startsWith(\"U+\")) {\n        return undefined;\n    }\n\n    const body = normalized.slice(2);\n    const separatorIndex = body.indexOf(\"-\");\n    const hasRange = separatorIndex !== -1;\n    const startToken = hasRange ? body.slice(0, separatorIndex) : body;\n    const endToken = hasRange ? body.slice(separatorIndex + 1) : undefined;\n\n    if (!isValidUnicodePart(startToken)) {\n        return undefined;\n    }\n\n    if (startToken.includes(\"?\")) {\n        if (isDefined(endToken)) {\n            return undefined;\n        }\n\n        return wildcardToInterval(startToken);\n    }\n\n    const start = Number.parseInt(startToken, 16);\n\n    if (!isFinite(start)) {\n        return undefined;\n    }\n\n    if (!isDefined(endToken)) {\n        return {\n            end: start,\n            start,\n        };\n    }\n\n    if (endToken.includes(\"?\")) {\n        return undefined;\n    }\n\n    if (!isValidUnicodePart(endToken)) {\n        return undefined;\n    }\n\n    const end = Number.parseInt(endToken, 16);\n\n    if (!isFinite(end)) {\n        return undefined;\n    }\n\n    return {\n        end: Math.max(start, end),\n        start: Math.min(start, end),\n    };\n}\n\nfunction wildcardToInterval(token: string): UnicodeInterval {\n    const start = Number.parseInt(token.replaceAll(\"?\", \"0\"), 16);\n    const end = Number.parseInt(token.replaceAll(\"?\", \"F\"), 16);\n\n    return {\n        end,\n        start,\n    };\n}\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { arrayJoin, isDefined, setHas } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    inferFormatHint,\n    parseFontSrcEntries,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst legacyFormats = new Set([\n    \"embedded-opentype\",\n    \"eot\",\n    \"svg\",\n    \"truetype\",\n]);\nconst ruleName = createRuleName(\"no-legacy-formats\");\nconst messages: { rejected: (format: string) => string } = ruleMessages(\n    ruleName,\n    {\n        rejected: (format: string): string =>\n            `Legacy font format \"${format}\" detected in @font-face src. Remove legacy entries (eot/svg/truetype) for modern-targeted projects.`,\n    }\n);\nconst docs = {\n    description:\n        \"Disallow legacy `@font-face` formats (`eot`, `svg`, `truetype`) in modern projects.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-legacy-formats\"),\n} as const;\n\nfunction removeLegacyEntries(value: string): string {\n    return arrayJoin(\n        parseFontSrcEntries(value)\n            .filter((entry) => {\n                const format = inferFormatHint(entry);\n\n                return !isDefined(format) || !setHas(legacyFormats, format);\n            })\n            .map((entry) => entry.raw),\n        \", \"\n    );\n}\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const srcDecl = block.srcDecl;\n\n            if (!isDefined(srcDecl)) {\n                continue;\n            }\n\n            const entries = parseFontSrcEntries(srcDecl.value);\n            const firstLegacy = entries\n                .map((entry) => inferFormatHint(entry))\n                .find(\n                    (format) =>\n                        isDefined(format) && setHas(legacyFormats, format)\n                );\n\n            if (!isDefined(firstLegacy)) {\n                continue;\n            }\n\n            report({\n                fix() {\n                    srcDecl.value = removeLegacyEntries(srcDecl.value);\n                },\n                message: messages.rejected(firstLegacy),\n                node: srcDecl,\n                result,\n                ruleName,\n            });\n        }\n    };\n\n/**\n * Disallow legacy `@font-face` formats (`eot`, `svg`, `truetype`) in modern\n * projects.\n */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        meta: { fixable: true },\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    parseFontSrcEntries,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-local-src-in-font-face\");\n\nconst messages: { rejected: (token: string) => string } = ruleMessages(\n    ruleName,\n    {\n        rejected: (token: string): string =>\n            `\\`local()\\` source \"${token}\" in \\`@font-face src\\` detected. Local font lookups are unpredictable \u2014 the user's installed font may differ in version, hinting, or metrics from the expected web font, causing visual inconsistencies or layout shifts. Use only remote URL sources for predictable rendering.`,\n    }\n);\n\nconst docs = {\n    description:\n        \"Disallow `local()` references in `@font-face src` declarations.\",\n    recommended: false,\n    url: createRuleDocsUrl(\"no-local-src-in-font-face\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const srcDecl = block.srcDecl;\n\n            if (!isDefined(srcDecl)) {\n                continue;\n            }\n\n            for (const entry of parseFontSrcEntries(srcDecl.value)) {\n                if (!entry.isLocal) {\n                    continue;\n                }\n\n                report({\n                    message: messages.rejected(entry.raw),\n                    node: srcDecl,\n                    result,\n                    ruleName,\n                    word: entry.raw,\n                });\n            }\n        }\n    };\n\n/** Disallow `local()` references in `@font-face src` declarations. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { arrayAt, isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    isInsideFontFace,\n    isSystemFallbackFamily,\n    parseFamilyList,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-missing-fallback-before-web-font\");\nconst messages: { rejected: (family: string) => string } = ruleMessages(\n    ruleName,\n    {\n        rejected: (family: string): string =>\n            `Web-font-first stack detected (\"${family}\") without a concrete fallback family. Add at least one fallback after the primary web font.`,\n    }\n);\nconst docs = {\n    description:\n        \"Disallow web-font-first `font-family` stacks that omit a fallback family.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-missing-fallback-before-web-font\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        root.walkDecls(\"font-family\", (decl) => {\n            if (isInsideFontFace(decl)) {\n                return;\n            }\n\n            const families = parseFamilyList(decl.value);\n            const firstFamily = arrayAt(families, 0);\n\n            if (\n                !isDefined(firstFamily) ||\n                isSystemFallbackFamily(firstFamily)\n            ) {\n                return;\n            }\n\n            const hasFallback = families\n                .slice(1)\n                .some((family) => isSystemFallbackFamily(family));\n\n            if (hasFallback) {\n                return;\n            }\n\n            report({\n                message: messages.rejected(firstFamily),\n                node: decl,\n                result,\n                ruleName,\n            });\n        });\n    };\n\n/**\n * Require a local or system font before each web-font URL in `font-family`\n * stacks.\n */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import type { Root } from \"postcss\";\nimport type { ArrayElement } from \"type-fest\";\n\nimport { access } from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    parseFontSrcEntries,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-missing-font-file\");\nconst messages: { rejected: (url: string, resolvedPath: string) => string } =\n    ruleMessages(ruleName, {\n        rejected: (url: string, resolvedPath: string): string =>\n            `Missing local font file for src URL \"${url}\". Expected file at \"${resolvedPath}\". Fix the path or place the font asset at that location.`,\n    });\nconst docs = {\n    description:\n        \"Disallow local `@font-face src:url(...)` paths that do not resolve to an existing font file on disk.\",\n    recommended: false,\n    url: createRuleDocsUrl(\"no-missing-font-file\"),\n} as const;\n\nfunction decodeUrlPath(pathLikeUrl: string): string {\n    try {\n        return decodeURI(pathLikeUrl);\n    } catch {\n        return pathLikeUrl;\n    }\n}\n\nasync function fileExists(\n    cache: Map<string, boolean>,\n    resolvedPath: string\n): Promise<boolean> {\n    const cached = cache.get(resolvedPath);\n\n    if (isDefined(cached)) {\n        return cached;\n    }\n\n    let hasFile = true;\n\n    try {\n        await access(resolvedPath);\n    } catch {\n        hasFile = false;\n    }\n\n    cache.set(resolvedPath, hasFile);\n\n    return hasFile;\n}\n\nfunction getFirstDelimiterIndex(queryIndex: number, hashIndex: number): number {\n    if (queryIndex === -1 && hashIndex === -1) {\n        return -1;\n    }\n\n    if (queryIndex === -1) {\n        return hashIndex;\n    }\n\n    if (hashIndex === -1) {\n        return queryIndex;\n    }\n\n    return Math.min(queryIndex, hashIndex);\n}\n\nfunction getLocalResolvedPath(\n    sourceFilePath: string,\n    entry: Readonly<ArrayElement<ReturnType<typeof parseFontSrcEntries>>>\n): string | undefined {\n    if (!entry.isUrl || entry.isLocal || !isDefined(entry.url)) {\n        return undefined;\n    }\n\n    if (!isLocalPathUrl(entry.url)) {\n        return undefined;\n    }\n\n    return toResolvedPath(sourceFilePath, entry.url);\n}\n\nfunction getSourceFilePath(root: Readonly<Root>): string | undefined {\n    const sourcePath = root.source?.input.file;\n\n    if (!isDefined(sourcePath) || sourcePath.trim().length === 0) {\n        return undefined;\n    }\n\n    if (!sourcePath.startsWith(\"file://\")) {\n        return sourcePath;\n    }\n\n    try {\n        return fileURLToPath(sourcePath);\n    } catch {\n        return undefined;\n    }\n}\n\nfunction isLocalPathUrl(url: string): boolean {\n    const normalized = url.trim();\n\n    if (normalized.length === 0) {\n        return false;\n    }\n\n    if (normalized.startsWith(\"#\") || normalized.startsWith(\"var(\")) {\n        return false;\n    }\n\n    if (/^[a-z][\\d+\\-.a-z]*:/iv.test(normalized)) {\n        return false;\n    }\n\n    return (\n        !normalized.startsWith(\"//\") &&\n        !normalized.startsWith(\"/\") &&\n        !normalized.startsWith(\"\\\\\")\n    );\n}\n\nfunction stripQueryAndFragment(url: string): string {\n    const queryIndex = url.indexOf(\"?\");\n    const hashIndex = url.indexOf(\"#\");\n    const cutIndex = getFirstDelimiterIndex(queryIndex, hashIndex);\n\n    if (cutIndex === -1) {\n        return url;\n    }\n\n    return url.slice(0, cutIndex);\n}\n\nfunction toResolvedPath(\n    sourceFilePath: string,\n    url: string\n): string | undefined {\n    const urlPath = stripQueryAndFragment(url).trim();\n\n    if (urlPath.length === 0) {\n        return undefined;\n    }\n\n    const decodedPath = decodeUrlPath(urlPath);\n\n    if (path.isAbsolute(decodedPath)) {\n        return path.normalize(decodedPath);\n    }\n\n    return path.resolve(path.dirname(sourceFilePath), decodedPath);\n}\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => async (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        const sourceFilePath = getSourceFilePath(root);\n\n        if (!isDefined(sourceFilePath)) {\n            return;\n        }\n\n        const existenceCache = new Map<string, boolean>();\n\n        const missingEntryGroups = await Promise.all(\n            collectFontFaceBlocks(root).map(async (block) => {\n                const srcDecl = block.srcDecl;\n\n                if (!isDefined(srcDecl)) {\n                    return [];\n                }\n\n                const maybeEntries = await Promise.all(\n                    parseFontSrcEntries(srcDecl.value).map(async (entry) => {\n                        const resolvedPath = getLocalResolvedPath(\n                            sourceFilePath,\n                            entry\n                        );\n\n                        if (!isDefined(resolvedPath)) {\n                            return undefined;\n                        }\n\n                        if (await fileExists(existenceCache, resolvedPath)) {\n                            return undefined;\n                        }\n\n                        return {\n                            originalUrl:\n                                entry.url ?? entry.normalizedUrl ?? entry.raw,\n                            resolvedPath,\n                            srcDecl,\n                            word: entry.raw,\n                        };\n                    })\n                );\n\n                return maybeEntries.filter(isDefined);\n            })\n        );\n\n        const missingEntries = missingEntryGroups.flat();\n\n        for (const entry of missingEntries) {\n            report({\n                message: messages.rejected(\n                    entry.originalUrl,\n                    entry.resolvedPath\n                ),\n                node: entry.srcDecl,\n                result,\n                ruleName,\n                word: entry.word,\n            });\n        }\n    };\n\n/** Disallow local font URLs that reference files missing from disk. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import type { AtRule } from \"postcss\";\n\nimport stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    buildFaceVariantKey,\n    collectFontFaceBlocks,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\nimport {\n    hasOverlappingIntervals,\n    parseUnicodeRangeSet,\n    type UnicodeRangeSet,\n} from \"../_internal/unicode-range.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-overlapping-unicode-range\");\nconst messages: {\n    rejected: (family: string, previous: string, current: string) => string;\n} = ruleMessages(ruleName, {\n    rejected: (family: string, previous: string, current: string): string =>\n        `Overlapping unicode-range subsets detected for family \"${family}\" in the same style/weight tuple (${previous} overlaps ${current}). Split subsets into non-overlapping ranges to avoid duplicate downloads.`,\n});\nconst docs = {\n    description:\n        \"Disallow overlapping `unicode-range` subsets across `@font-face` blocks that share the same family/style/weight tuple.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-overlapping-unicode-range\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        const byVariant = new Map<\n            string,\n            {\n                familyName: string;\n                node: AtRule;\n                rangeSet: UnicodeRangeSet;\n            }[]\n        >();\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const unicodeRangeDecl = block.unicodeRangeDecl;\n\n            if (!isDefined(unicodeRangeDecl)) {\n                continue;\n            }\n\n            const parsedRangeSet = parseUnicodeRangeSet(unicodeRangeDecl.value);\n\n            if (!isDefined(parsedRangeSet)) {\n                continue;\n            }\n\n            const variantKey = buildFaceVariantKey(block);\n\n            if (variantKey.length === 0) {\n                continue;\n            }\n\n            const list = byVariant.get(variantKey) ?? [];\n            list.push({\n                familyName: block.familyName ?? \"(unknown family)\",\n                node: block.atRule,\n                rangeSet: parsedRangeSet,\n            });\n            byVariant.set(variantKey, list);\n        }\n\n        for (const sameVariantFaces of byVariant.values()) {\n            reportOverlapsForVariant(sameVariantFaces, (current, previous) => {\n                report({\n                    message: messages.rejected(\n                        current.familyName,\n                        previous.rangeSet.displayValue,\n                        current.rangeSet.displayValue\n                    ),\n                    node: current.node,\n                    result,\n                    ruleName,\n                });\n            });\n        }\n    };\n\n/**\n * Disallow overlapping `unicode-range` subsets for the same family/style/weight\n * tuple.\n */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n\ntype FaceEntry = Readonly<{\n    familyName: string;\n    node: AtRule;\n    rangeSet: UnicodeRangeSet;\n}>;\n\nfunction hasOverlappingInterval(\n    leftIntervals: Readonly<UnicodeRangeSet>[\"intervals\"],\n    rightIntervals: Readonly<UnicodeRangeSet>[\"intervals\"]\n): boolean {\n    return hasOverlappingIntervals(leftIntervals, rightIntervals);\n}\n\nfunction reportOverlapsForVariant(\n    sameVariantFaces: readonly FaceEntry[],\n    reportOverlap: (current: FaceEntry, previous: FaceEntry) => void\n): void {\n    if (sameVariantFaces.length < 2) {\n        return;\n    }\n\n    const reportedKeys = new Set<string>();\n\n    for (\n        let currentIndex = 0;\n        currentIndex < sameVariantFaces.length;\n        currentIndex += 1\n    ) {\n        const current = sameVariantFaces[currentIndex];\n\n        if (!isDefined(current)) {\n            continue;\n        }\n\n        for (\n            let previousIndex = 0;\n            previousIndex < currentIndex;\n            previousIndex += 1\n        ) {\n            const previous = sameVariantFaces[previousIndex];\n\n            if (!isDefined(previous)) {\n                continue;\n            }\n\n            if (\n                !hasOverlappingInterval(\n                    previous.rangeSet.intervals,\n                    current.rangeSet.intervals\n                )\n            ) {\n                continue;\n            }\n\n            const pairKey = `${previousIndex}:${currentIndex}`;\n\n            if (setHas(reportedKeys, pairKey)) {\n                continue;\n            }\n\n            reportedKeys.add(pairKey);\n\n            reportOverlap(current, previous);\n        }\n    }\n}\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    parseFontSrcEntries,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-protocol-relative-font-url\");\n\nconst messages: { rejected: (url: string) => string } = ruleMessages(ruleName, {\n    rejected: (url: string): string =>\n        `Protocol-relative URL \"${url}\" detected in \\`@font-face src\\`. Protocol-relative URLs inherit the page protocol and silently fall back to HTTP on non-HTTPS pages. Use an explicit \\`https://\\` URL or a relative path instead.`,\n});\n\nconst docs = {\n    description:\n        \"Disallow protocol-relative URLs (`//`) in `@font-face src` declarations.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-protocol-relative-font-url\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const srcDecl = block.srcDecl;\n\n            if (!isDefined(srcDecl)) {\n                continue;\n            }\n\n            const violatingEntry = parseFontSrcEntries(srcDecl.value).find(\n                (entry) => {\n                    const url = entry.normalizedUrl;\n\n                    return isDefined(url) && url.startsWith(\"//\");\n                }\n            );\n\n            if (!isDefined(violatingEntry)) {\n                continue;\n            }\n\n            report({\n                message: messages.rejected(\n                    violatingEntry.normalizedUrl ?? \"//\"\n                ),\n                node: srcDecl,\n                result,\n                ruleName,\n                word: violatingEntry.normalizedUrl ?? \"//\",\n            });\n        }\n    };\n\n/** Disallow protocol-relative `//` URLs in `@font-face src` declarations. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { arrayFirst, isDefined, stringSplit } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    parseFontSrcEntries,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-src-format-mismatch\");\n\nconst messages: {\n    rejected: (ext: string, declaredFmt: string, expectedFmt: string) => string;\n} = ruleMessages(ruleName, {\n    rejected: (ext: string, declaredFmt: string, expectedFmt: string): string =>\n        `URL extension \"${ext}\" contradicts \\`format(\"${declaredFmt}\")\\` in \\`@font-face src\\` \u2014 expected \\`format(\"${expectedFmt}\")\\`. Mismatched format hints cause browsers to fetch the wrong format, wasting bandwidth and potentially breaking font loading. Align the extension and the format() value.`,\n});\n\nconst docs = {\n    description:\n        \"Disallow `@font-face src` entries where the URL file extension contradicts the explicit `format()` hint.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-src-format-mismatch\"),\n} as const;\n\n/**\n * Known file-extension-to-CSS-format-keyword mappings.\n *\n * Only extensions with a single canonical format keyword are included. `.svg`\n * is intentionally omitted because `svg` and `svg-fonts` are both valid format\n * hints for `.svg` files, making a strict match unreliable.\n */\nconst EXTENSION_TO_FORMAT: ReadonlyMap<string, string> = new Map([\n    [\".eot\", \"embedded-opentype\"],\n    [\".otf\", \"opentype\"],\n    [\".ttf\", \"truetype\"],\n    [\".woff2\", \"woff2\"],\n    [\".woff\", \"woff\"],\n]);\n\n/**\n * Extract the lowercase file extension from a URL, stripping any query-string\n * or fragment before the lookup.\n */\nfunction extractExtension(url: string): string | undefined {\n    const querylessUrl = arrayFirst(stringSplit(url, \"?\")) ?? \"\";\n    const fragmentlessUrl = arrayFirst(stringSplit(querylessUrl, \"#\")) ?? \"\";\n    const lastDot = fragmentlessUrl.lastIndexOf(\".\");\n\n    if (lastDot === -1 || lastDot === fragmentlessUrl.length - 1) {\n        return undefined;\n    }\n\n    return fragmentlessUrl.slice(lastDot).toLowerCase();\n}\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const srcDecl = block.srcDecl;\n\n            if (!isDefined(srcDecl)) {\n                continue;\n            }\n\n            for (const entry of parseFontSrcEntries(srcDecl.value)) {\n                const url = entry.normalizedUrl;\n                const declaredFmt = entry.normalizedFormat;\n\n                // Only check URL-based entries that have an explicit format hint.\n                if (\n                    !isDefined(url) ||\n                    !isDefined(declaredFmt) ||\n                    entry.isLocal\n                ) {\n                    continue;\n                }\n\n                const ext = extractExtension(url);\n\n                if (!isDefined(ext)) {\n                    continue;\n                }\n\n                const expectedFmt = EXTENSION_TO_FORMAT.get(ext);\n\n                // If the extension is unrecognised or the formats match, skip.\n                if (!isDefined(expectedFmt) || expectedFmt === declaredFmt) {\n                    continue;\n                }\n\n                report({\n                    message: messages.rejected(ext, declaredFmt, expectedFmt),\n                    node: srcDecl,\n                    result,\n                    ruleName,\n                    word: entry.raw,\n                });\n            }\n        }\n    };\n\n/**\n * Disallow `@font-face src` entries where the URL extension contradicts the\n * format() hint.\n */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport { collectFontFaceBlocks, isQuoted } from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-unquoted-font-family-in-font-face\");\n\nconst messages: { rejected: (value: string) => string } = ruleMessages(\n    ruleName,\n    {\n        rejected: (value: string): string =>\n            `Unquoted \\`font-family\\` descriptor value \"${value}\" in \\`@font-face\\`. Quote the family name to prevent ambiguity, accidental generic-keyword shadowing, and parser inconsistencies.`,\n    }\n);\n\nconst docs = {\n    description:\n        \"Require the `font-family` descriptor value inside `@font-face` to be quoted.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-unquoted-font-family-in-font-face\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const familyDecl = block.familyDecl;\n\n            if (!isDefined(familyDecl)) {\n                continue;\n            }\n\n            const rawValue = familyDecl.value.trim();\n\n            if (isQuoted(rawValue)) {\n                continue;\n            }\n\n            report({\n                fix() {\n                    familyDecl.value = `\"${rawValue}\"`;\n                },\n                message: messages.rejected(rawValue),\n                node: familyDecl,\n                result,\n                ruleName,\n                word: rawValue,\n            });\n        }\n    };\n\n/** Require the `font-family` descriptor value inside `@font-face` to be quoted. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        meta: { fixable: true },\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined, setHas } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    isInsideFontFace,\n    parseFamilyList,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-unused-font-face\");\n\nconst messages: { rejected: (family: string) => string } = ruleMessages(\n    ruleName,\n    {\n        rejected: (family: string): string =>\n            `\\`@font-face\\` block defines \\`font-family: \"${family}\"\\` but it is never referenced by a \\`font-family\\` declaration in this stylesheet. Remove the unused \\`@font-face\\` block or add a matching \\`font-family\\` reference.`,\n    }\n);\n\nconst docs = {\n    description:\n        \"Disallow `@font-face` blocks whose `font-family` name is never referenced in any `font-family` declaration.\",\n    recommended: false,\n    url: createRuleDocsUrl(\"no-unused-font-face\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        // Collect all font-family names referenced outside @font-face blocks.\n        // Skip declarations that use CSS custom properties (var(...)) because\n        // we cannot statically resolve the runtime value.\n        const referencedFamilies = new Set<string>();\n\n        root.walkDecls(\"font-family\", (decl) => {\n            if (isInsideFontFace(decl)) {\n                return;\n            }\n\n            if (decl.value.includes(\"var(\")) {\n                return;\n            }\n\n            for (const family of parseFamilyList(decl.value)) {\n                referencedFamilies.add(family.toLowerCase());\n            }\n        });\n\n        // Report each @font-face whose declared family is never referenced.\n        for (const block of collectFontFaceBlocks(root)) {\n            if (\n                !isDefined(block.familyDecl) ||\n                !isDefined(block.familyNameLower)\n            ) {\n                continue;\n            }\n\n            if (!setHas(referencedFamilies, block.familyNameLower)) {\n                report({\n                    message: messages.rejected(\n                        block.familyName ?? block.familyNameLower\n                    ),\n                    node: block.atRule,\n                    result,\n                    ruleName,\n                });\n            }\n        }\n    };\n\n/**\n * Disallow `@font-face` blocks that are never referenced in `font-family`\n * declarations.\n */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { arrayAt, arrayJoin } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    isQuoted,\n    parseFamilyList,\n    splitCommaList,\n    stripSurroundingQuotes,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"no-whitespace-in-unquoted-family\");\nconst messages: { rejected: (family: string) => string } = ruleMessages(\n    ruleName,\n    {\n        rejected: (family: string): string =>\n            `Font family \"${family}\" contains whitespace but is unquoted. Quote multi-word family names to keep parsing unambiguous.`,\n    }\n);\nconst docs = {\n    description: \"Disallow unquoted whitespace-containing `font-family` names.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"no-whitespace-in-unquoted-family\"),\n} as const;\n\nfunction quoteUnquotedWhitespaceTokens(value: string): string {\n    return arrayJoin(\n        splitCommaList(value).map((segment) => {\n            const raw = segment.text.trim();\n\n            if (isQuoted(raw) || !/\\s/v.test(raw)) {\n                return raw;\n            }\n\n            return `\"${stripSurroundingQuotes(raw)}\"`;\n        }),\n        \", \"\n    );\n}\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        root.walkDecls(\"font-family\", (decl) => {\n            const hasViolation = splitCommaList(decl.value).some((segment) => {\n                const token = segment.text.trim();\n\n                return !isQuoted(token) && /\\s/v.test(token);\n            });\n\n            if (!hasViolation) {\n                return;\n            }\n\n            const firstFamily =\n                arrayAt(parseFamilyList(decl.value), 0) ?? \"(unknown family)\";\n\n            report({\n                fix() {\n                    decl.value = quoteUnquotedWhitespaceTokens(decl.value);\n                },\n                message: messages.rejected(firstFamily),\n                node: decl,\n                result,\n                ruleName,\n            });\n        });\n    };\n\n/** Disallow unquoted whitespace-containing `font-family` names. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        meta: { fixable: true },\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { arrayFirst, isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    type FontFaceBlock,\n    inferFormatHint,\n    parseFontSrcEntries,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst variableWeightPattern = /^\\s*\\d+\\s+\\d+\\s*$/v;\nconst ruleName = createRuleName(\"prefer-variable-fonts\");\nconst messages: { rejected: (family: string) => string } = ruleMessages(\n    ruleName,\n    {\n        rejected: (family: string): string =>\n            `Family \"${family}\" defines many static weight-specific faces. Consider a variable-font source to reduce duplicate payload and simplify maintenance.`,\n    }\n);\nconst docs = {\n    description:\n        \"Prefer variable-font workflows when the same family defines many static `@font-face` weight variants.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"prefer-variable-fonts\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        const byFamily = new Map<string, FontFaceBlock[]>();\n\n        for (const block of collectFontFaceBlocks(root)) {\n            if (!isDefined(block.familyNameLower)) {\n                continue;\n            }\n\n            const list = byFamily.get(block.familyNameLower) ?? [];\n            list.push(block);\n            byFamily.set(block.familyNameLower, list);\n        }\n\n        for (const familyBlocks of byFamily.values()) {\n            if (familyBlocks.length < 3) {\n                continue;\n            }\n\n            const hasVariableWeightRange = familyBlocks.some((block) =>\n                variableWeightPattern.test(block.weightDecl?.value ?? \"\")\n            );\n\n            if (hasVariableWeightRange) {\n                continue;\n            }\n\n            const hasLikelyVariableSource = familyBlocks.some((block) =>\n                parseFontSrcEntries(block.srcDecl?.value ?? \"\").some(\n                    (entry) =>\n                        inferFormatHint(entry) === \"woff2\" &&\n                        (entry.normalizedUrl?.includes(\"variable\") ?? false)\n                )\n            );\n\n            if (hasLikelyVariableSource) {\n                continue;\n            }\n\n            const firstBlock = arrayFirst(familyBlocks);\n\n            if (!isDefined(firstBlock)) {\n                continue;\n            }\n\n            report({\n                message: messages.rejected(\n                    firstBlock.familyName ?? \"(unknown family)\"\n                ),\n                node: firstBlock.atRule,\n                result,\n                ruleName,\n            });\n        }\n    };\n\n/**\n * Prefer variable font declarations over multiple static `@font-face` blocks\n * for the same family.\n */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    inferFormatHint,\n    parseFontSrcEntries,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"prefer-woff2\");\nconst messages: { rejected: () => string } = ruleMessages(ruleName, {\n    rejected: (): string =>\n        \"No `woff2` source found in this `@font-face` `src` list. Include `woff2` for best compression and broad modern support.\",\n});\nconst docs = {\n    description:\n        \"Prefer including a `woff2` source in every `@font-face` src list.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"prefer-woff2\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const srcDecl = block.srcDecl;\n\n            if (!isDefined(srcDecl)) {\n                continue;\n            }\n\n            const hasWoff2 = parseFontSrcEntries(srcDecl.value).some(\n                (entry) => {\n                    if (!entry.isUrl) {\n                        return false;\n                    }\n\n                    return inferFormatHint(entry) === \"woff2\";\n                }\n            );\n\n            if (hasWoff2) {\n                continue;\n            }\n\n            report({\n                message: messages.rejected(),\n                node: srcDecl,\n                result,\n                ruleName,\n            });\n        }\n    };\n\n/**\n * Prefer `woff2` format entries in `@font-face src` declarations over older\n * formats.\n */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport { collectFontFaceBlocks } from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"require-font-display\");\nconst messages: { rejected: () => string } = ruleMessages(ruleName, {\n    rejected: (): string =>\n        \"Missing `font-display` in `@font-face`. Add `font-display: swap` to avoid FOIT and improve perceived text rendering.\",\n});\nconst docs = {\n    description:\n        \"Require `font-display` in every `@font-face` declaration block.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"require-font-display\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            if (isDefined(block.displayDecl)) {\n                continue;\n            }\n\n            report({\n                fix() {\n                    block.atRule.append({\n                        prop: \"font-display\",\n                        value: \"swap\",\n                    });\n                },\n                message: messages.rejected(),\n                node: block.atRule,\n                result,\n                ruleName,\n            });\n        }\n    };\n\n/** Require `font-display` in every `@font-face` declaration block. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        meta: { fixable: true },\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport { collectFontFaceBlocks } from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"require-font-family-in-font-face\");\n\nconst messages: { rejected: () => string } = ruleMessages(ruleName, {\n    rejected: (): string =>\n        \"`@font-face` block is missing a `font-family` descriptor. Without `font-family`, the block cannot be referenced by any `font-family` property and has no effect.\",\n});\n\nconst docs = {\n    description:\n        \"Require a `font-family` descriptor in every `@font-face` declaration block.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"require-font-family-in-font-face\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            if (isDefined(block.familyDecl)) {\n                continue;\n            }\n\n            report({\n                message: messages.rejected(),\n                node: block.atRule,\n                result,\n                ruleName,\n            });\n        }\n    };\n\n/** Require a `font-family` descriptor in every `@font-face` declaration block. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport { collectFontFaceBlocks } from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"require-font-style\");\nconst messages: { rejected: () => string } = ruleMessages(ruleName, {\n    rejected: (): string =>\n        \"Missing `font-style` in `@font-face`. Declare an explicit style (for example `normal` or `italic`) to avoid ambiguous face selection.\",\n});\nconst docs = {\n    description: \"Require explicit `font-style` in every `@font-face` block.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"require-font-style\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            if (isDefined(block.styleDecl)) {\n                continue;\n            }\n\n            report({\n                fix() {\n                    block.atRule.append({\n                        prop: \"font-style\",\n                        value: \"normal\",\n                    });\n                },\n                message: messages.rejected(),\n                node: block.atRule,\n                result,\n                ruleName,\n            });\n        }\n    };\n\n/** Require explicit `font-style` in every `@font-face` block. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        meta: { fixable: true },\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport { collectFontFaceBlocks } from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"require-font-weight\");\nconst messages: { rejected: () => string } = ruleMessages(ruleName, {\n    rejected: (): string =>\n        \"Missing `font-weight` in `@font-face`. Declare an explicit weight (`400`, `700`, or a valid range) so browsers map faces predictably.\",\n});\nconst docs = {\n    description: \"Require explicit `font-weight` in every `@font-face` block.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"require-font-weight\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            if (isDefined(block.weightDecl)) {\n                continue;\n            }\n\n            report({\n                fix() {\n                    block.atRule.append({\n                        prop: \"font-weight\",\n                        value: \"400\",\n                    });\n                },\n                message: messages.rejected(),\n                node: block.atRule,\n                result,\n                ruleName,\n            });\n        }\n    };\n\n/** Require explicit `font-weight` in every `@font-face` block. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        meta: { fixable: true },\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { arrayJoin, isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    inferFormatHint,\n    parseFontSrcEntries,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"require-format-hint\");\nconst messages: { rejected: () => string } = ruleMessages(ruleName, {\n    rejected: (): string =>\n        \"`src: url(...)` entry is missing `format(...)`. Add an explicit format hint so browsers can skip unnecessary font probing.\",\n});\nconst docs = {\n    description:\n        \"Require `format(...)` hints for `url(...)` sources in `@font-face src` values.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"require-format-hint\"),\n} as const;\n\nfunction addInferredFormatHints(value: string): string {\n    const entries = parseFontSrcEntries(value);\n\n    return arrayJoin(\n        entries.map((entry) => {\n            if (!entry.isUrl || entry.hasFormatHint) {\n                return entry.raw;\n            }\n\n            const inferredFormat = inferFormatHint(entry);\n\n            if (!isDefined(inferredFormat)) {\n                return entry.raw;\n            }\n\n            return `${entry.raw} format(\"${inferredFormat}\")`;\n        }),\n        \", \"\n    );\n}\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const srcDecl = block.srcDecl;\n\n            if (!isDefined(srcDecl)) {\n                continue;\n            }\n\n            const entries = parseFontSrcEntries(srcDecl.value);\n            const hasViolation = entries.some(\n                (entry) => entry.isUrl && !entry.hasFormatHint\n            );\n\n            if (!hasViolation) {\n                continue;\n            }\n\n            report({\n                fix() {\n                    srcDecl.value = addInferredFormatHints(srcDecl.value);\n                },\n                message: messages.rejected(),\n                node: srcDecl,\n                result,\n                ruleName,\n            });\n        }\n    };\n\n/**\n * Require explicit `format(...)` hints for all `url(...)` entries in\n * `@font-face src`.\n */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        meta: { fixable: true },\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport { collectFontFaceBlocks } from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"require-src-in-font-face\");\n\nconst messages: { rejected: (family: string) => string } = ruleMessages(\n    ruleName,\n    {\n        rejected: (family: string): string =>\n            `\\`@font-face\\` block for family \"${family}\" is missing a \\`src\\` descriptor. Without \\`src\\`, the browser cannot locate or download the font and the block has no effect.`,\n    }\n);\n\nconst docs = {\n    description:\n        \"Require a `src` descriptor in every `@font-face` declaration block.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"require-src-in-font-face\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            if (isDefined(block.srcDecl)) {\n                continue;\n            }\n\n            // Fall back to a placeholder identifier when font-family is absent.\n            const familyLabel = block.familyName ?? \"(unknown)\";\n\n            report({\n                message: messages.rejected(familyLabel),\n                node: block.atRule,\n                result,\n                ruleName,\n            });\n        }\n    };\n\n/** Require a `src` descriptor in every `@font-face` declaration block. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { arrayAt, isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    isInsideFontFace,\n    isSystemFallbackFamily,\n    parseFamilyList,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"require-system-font-fallback\");\nconst messages: { rejected: () => string } = ruleMessages(ruleName, {\n    rejected: (): string =>\n        \"`font-family` stack is missing a system-font fallback at the end. Append `system-ui` as a final fallback to reduce rendering surprises.\",\n});\nconst docs = {\n    description:\n        \"Require regular selector `font-family` stacks to end with a system fallback.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"require-system-font-fallback\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        root.walkDecls(\"font-family\", (decl) => {\n            if (isInsideFontFace(decl)) {\n                return;\n            }\n\n            const families = parseFamilyList(decl.value);\n            const finalFamily = arrayAt(families, -1);\n\n            if (isDefined(finalFamily) && isSystemFallbackFamily(finalFamily)) {\n                return;\n            }\n\n            report({\n                fix() {\n                    decl.value = `${decl.value.trim()}, system-ui`;\n                },\n                message: messages.rejected(),\n                node: decl,\n                result,\n                ruleName,\n            });\n        });\n    };\n\n/**\n * Require `font-family` stacks in regular rules to end with a system-font\n * fallback.\n */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        meta: { fixable: true },\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    type FontFaceBlock,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"require-unicode-range-for-large-family\");\nconst messages: { rejected: (family: string) => string } = ruleMessages(\n    ruleName,\n    {\n        rejected: (family: string): string =>\n            `Font family \"${family}\" has 4+ @font-face variants but this face is missing \\`unicode-range\\`. Add a range to avoid unnecessary font downloads.`,\n    }\n);\nconst docs = {\n    description:\n        \"Require `unicode-range` for families that define four or more `@font-face` blocks in the same file.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"require-unicode-range-for-large-family\"),\n} as const;\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        const blocks = collectFontFaceBlocks(root);\n        const byFamily = new Map<string, FontFaceBlock[]>();\n\n        for (const block of blocks) {\n            if (!isDefined(block.familyNameLower)) {\n                continue;\n            }\n\n            const existing = byFamily.get(block.familyNameLower) ?? [];\n            existing.push(block);\n            byFamily.set(block.familyNameLower, existing);\n        }\n\n        for (const familyBlocks of byFamily.values()) {\n            if (familyBlocks.length < 4) {\n                continue;\n            }\n\n            for (const block of familyBlocks) {\n                if (isDefined(block.unicodeRangeDecl)) {\n                    continue;\n                }\n\n                report({\n                    message: messages.rejected(\n                        block.familyName ?? \"(unknown family)\"\n                    ),\n                    node: block.atRule,\n                    result,\n                    ruleName,\n                });\n            }\n        }\n    };\n\n/**\n * Require `unicode-range` in `@font-face` for families with many declared\n * faces.\n */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { isDefined, setHas, stringSplit } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    parseFontSrcEntries,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"require-unicode-range-for-subset-fonts\");\nconst messages: { rejected: (token: string) => string } = ruleMessages(\n    ruleName,\n    {\n        rejected: (token: string): string =>\n            `Subset-like font source token \"${token}\" detected in \\`@font-face src\\` but this block is missing \\`unicode-range\\`. Add an explicit range so the subset file only loads for matching glyphs.`,\n    }\n);\nconst docs = {\n    description:\n        \"Require `unicode-range` when `@font-face src` URLs appear to target script/language subsets (for example `latin`, `cyrillic`, `japanese`).\",\n    recommended: false,\n    url: createRuleDocsUrl(\"require-unicode-range-for-subset-fonts\"),\n} as const;\n\nconst subsetTokens = new Set([\n    \"arabic\",\n    \"armenian\",\n    \"bengali\",\n    \"cjk\",\n    \"cyrillic\",\n    \"cyrillicext\",\n    \"devanagari\",\n    \"georgian\",\n    \"greek\",\n    \"greekext\",\n    \"gurmukhi\",\n    \"han\",\n    \"hangul\",\n    \"hebrew\",\n    \"hiragana\",\n    \"japanese\",\n    \"kannada\",\n    \"katakana\",\n    \"khmer\",\n    \"korean\",\n    \"lao\",\n    \"latin\",\n    \"latinext\",\n    \"malayalam\",\n    \"odia\",\n    \"oriya\",\n    \"sinhala\",\n    \"tamil\",\n    \"telugu\",\n    \"thai\",\n    \"vietnamese\",\n]);\n\nfunction getSubsetTokenFromUrl(url: string): string | undefined {\n    const urlWithoutQuery = stripQueryAndFragment(url).toLowerCase();\n    const normalized = urlWithoutQuery.replaceAll(/[^a-z]+/gv, \" \").trim();\n    const tokens = stringSplit(normalized, \" \");\n\n    for (const token of tokens) {\n        if (setHas(subsetTokens, token)) {\n            return token;\n        }\n    }\n\n    return undefined;\n}\n\nfunction stripQueryAndFragment(url: string): string {\n    const queryIndex = url.indexOf(\"?\");\n    const hashIndex = url.indexOf(\"#\");\n\n    if (queryIndex === -1 && hashIndex === -1) {\n        return url;\n    }\n\n    if (queryIndex === -1) {\n        return url.slice(0, hashIndex);\n    }\n\n    if (hashIndex === -1) {\n        return url.slice(0, queryIndex);\n    }\n\n    return url.slice(0, Math.min(queryIndex, hashIndex));\n}\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            if (\n                isDefined(block.unicodeRangeDecl) ||\n                !isDefined(block.srcDecl)\n            ) {\n                continue;\n            }\n\n            const subsetToken = parseFontSrcEntries(block.srcDecl.value)\n                .map((entry) => entry.normalizedUrl)\n                .filter(isDefined)\n                .map((url) => getSubsetTokenFromUrl(url))\n                .find(isDefined);\n\n            if (!isDefined(subsetToken)) {\n                continue;\n            }\n\n            report({\n                message: messages.rejected(subsetToken),\n                node: block.atRule,\n                result,\n                ruleName,\n            });\n        }\n    };\n\n/** Require `unicode-range` for subset-like `@font-face` source URLs. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "import stylelint, { type RuleBase } from \"stylelint\";\nimport { arrayJoin, isDefined } from \"ts-extras\";\n\nimport {\n    createStylelintRule,\n    type StylelintPluginRule,\n} from \"../_internal/create-stylelint-rule.js\";\nimport {\n    collectFontFaceBlocks,\n    inferFormatHint,\n    parseFontSrcEntries,\n} from \"../_internal/font-analysis.js\";\nimport {\n    createRuleDocsUrl,\n    createRuleName,\n} from \"../_internal/plugin-constants.js\";\n\nconst { report, ruleMessages, validateOptions } = stylelint.utils;\nconst ruleName = createRuleName(\"woff2-before-woff\");\nconst messages: { rejected: () => string } = ruleMessages(ruleName, {\n    rejected: (): string =>\n        \"`woff` appears before `woff2` in `src`. List `woff2` first so capable browsers pick the most efficient resource.\",\n});\nconst docs = {\n    description:\n        \"Require `woff2` entries to appear before `woff` entries in `@font-face src`.\",\n    recommended: true,\n    url: createRuleDocsUrl(\"woff2-before-woff\"),\n} as const;\n\nfunction reorderWoff2BeforeWoff(value: string): string {\n    const entries = parseFontSrcEntries(value);\n    const woff2Entries = entries.filter(\n        (entry) => inferFormatHint(entry) === \"woff2\"\n    );\n    const nonWoff2Entries = entries.filter(\n        (entry) => inferFormatHint(entry) !== \"woff2\"\n    );\n\n    return arrayJoin(\n        [...woff2Entries, ...nonWoff2Entries].map((entry) => entry.raw),\n        \", \"\n    );\n}\n\nconst ruleFunction: RuleBase<boolean, undefined> =\n    (primary) => (root, result) => {\n        const isValid = validateOptions(result, ruleName, {\n            actual: primary,\n            possible: [true],\n        });\n\n        if (!isValid) {\n            return;\n        }\n\n        for (const block of collectFontFaceBlocks(root)) {\n            const srcDecl = block.srcDecl;\n\n            if (!isDefined(srcDecl)) {\n                continue;\n            }\n\n            const formats = parseFontSrcEntries(srcDecl.value).map((entry) =>\n                inferFormatHint(entry)\n            );\n            const firstWoffIndex = formats.indexOf(\"woff\");\n            const firstWoff2Index = formats.indexOf(\"woff2\");\n\n            if (\n                firstWoffIndex === -1 ||\n                firstWoff2Index === -1 ||\n                firstWoff2Index < firstWoffIndex\n            ) {\n                continue;\n            }\n\n            report({\n                fix() {\n                    srcDecl.value = reorderWoff2BeforeWoff(srcDecl.value);\n                },\n                message: messages.rejected(),\n                node: srcDecl,\n                result,\n                ruleName,\n            });\n        }\n    };\n\n/** Require `woff2` entries before `woff` entries in `@font-face src`. */\nconst rule: StylelintPluginRule<boolean, undefined, typeof messages> =\n    createStylelintRule({\n        docs,\n        messages,\n        meta: { fixable: true },\n        rule: ruleFunction,\n        ruleName,\n    });\n\nexport default rule;\n", "/**\n * @packageDocumentation\n * Canonical registry of public Stylelint rules exported by this package.\n */\nimport type { StylelintPluginRuleContract } from \"./create-stylelint-rule.js\";\n\nimport * as consistentFontDisplayModule from \"../rules/consistent-font-display.js\";\nimport * as consistentFontFamilyCasingModule from \"../rules/consistent-font-family-casing.js\";\nimport * as localSrcBeforeUrlModule from \"../rules/local-src-before-url.js\";\nimport * as noAbsoluteFontUrlModule from \"../rules/no-absolute-font-url.js\";\nimport * as noDataUriSrcModule from \"../rules/no-data-uri-src.js\";\nimport * as noDuplicateDescriptorsInFontFaceModule from \"../rules/no-duplicate-descriptors-in-font-face.js\";\nimport * as noDuplicateFontFaceModule from \"../rules/no-duplicate-font-face.js\";\nimport * as noDuplicateFontFamilySrcModule from \"../rules/no-duplicate-font-family-src.js\";\nimport * as noDuplicateSrcFormatModule from \"../rules/no-duplicate-src-format.js\";\nimport * as noEmptyFontFaceModule from \"../rules/no-empty-font-face.js\";\nimport * as noFontFaceInMediaQueryModule from \"../rules/no-font-face-in-media-query.js\";\nimport * as noFontFaceInSelectorsModule from \"../rules/no-font-face-in-selectors.js\";\nimport * as noGenericFamilyInFontFaceModule from \"../rules/no-generic-family-in-font-face.js\";\nimport * as noHttpFontUrlModule from \"../rules/no-http-font-url.js\";\nimport * as noInvalidFontDisplayModule from \"../rules/no-invalid-font-display.js\";\nimport * as noInvalidFontStyleModule from \"../rules/no-invalid-font-style.js\";\nimport * as noInvalidFontWeightModule from \"../rules/no-invalid-font-weight.js\";\nimport * as noInvalidUnicodeRangeModule from \"../rules/no-invalid-unicode-range.js\";\nimport * as noLegacyFormatsModule from \"../rules/no-legacy-formats.js\";\nimport * as noLocalSrcInFontFaceModule from \"../rules/no-local-src-in-font-face.js\";\nimport * as noMissingFallbackBeforeWebFontModule from \"../rules/no-missing-fallback-before-web-font.js\";\nimport * as noMissingFontFileModule from \"../rules/no-missing-font-file.js\";\nimport * as noOverlappingUnicodeRangeModule from \"../rules/no-overlapping-unicode-range.js\";\nimport * as noProtocolRelativeFontUrlModule from \"../rules/no-protocol-relative-font-url.js\";\nimport * as noSrcFormatMismatchModule from \"../rules/no-src-format-mismatch.js\";\nimport * as noUnquotedFontFamilyInFontFaceModule from \"../rules/no-unquoted-font-family-in-font-face.js\";\nimport * as noUnusedFontFaceModule from \"../rules/no-unused-font-face.js\";\nimport * as noWhitespaceInUnquotedFamilyModule from \"../rules/no-whitespace-in-unquoted-family.js\";\nimport * as preferVariableFontsModule from \"../rules/prefer-variable-fonts.js\";\nimport * as preferWoff2Module from \"../rules/prefer-woff2.js\";\nimport * as requireFontDisplayModule from \"../rules/require-font-display.js\";\nimport * as requireFontFamilyInFontFaceModule from \"../rules/require-font-family-in-font-face.js\";\nimport * as requireFontStyleModule from \"../rules/require-font-style.js\";\nimport * as requireFontWeightModule from \"../rules/require-font-weight.js\";\nimport * as requireFormatHintModule from \"../rules/require-format-hint.js\";\nimport * as requireSrcInFontFaceModule from \"../rules/require-src-in-font-face.js\";\nimport * as requireSystemFontFallbackModule from \"../rules/require-system-font-fallback.js\";\nimport * as requireUnicodeRangeForLargeFamilyModule from \"../rules/require-unicode-range-for-large-family.js\";\nimport * as requireUnicodeRangeForSubsetFontsModule from \"../rules/require-unicode-range-for-subset-fonts.js\";\nimport * as woff2BeforeWoffModule from \"../rules/woff2-before-woff.js\";\n\n/** Public rule registry keyed by unqualified rule name. */\nexport const fontRules: Readonly<Record<string, StylelintPluginRuleContract>> =\n    {\n        \"consistent-font-display\": consistentFontDisplayModule.default,\n        \"consistent-font-family-casing\":\n            consistentFontFamilyCasingModule.default,\n        \"local-src-before-url\": localSrcBeforeUrlModule.default,\n        \"no-absolute-font-url\": noAbsoluteFontUrlModule.default,\n        \"no-data-uri-src\": noDataUriSrcModule.default,\n        \"no-duplicate-descriptors-in-font-face\":\n            noDuplicateDescriptorsInFontFaceModule.default,\n        \"no-duplicate-font-face\": noDuplicateFontFaceModule.default,\n        \"no-duplicate-font-family-src\": noDuplicateFontFamilySrcModule.default,\n        \"no-duplicate-src-format\": noDuplicateSrcFormatModule.default,\n        \"no-empty-font-face\": noEmptyFontFaceModule.default,\n        \"no-font-face-in-media-query\": noFontFaceInMediaQueryModule.default,\n        \"no-font-face-in-selectors\": noFontFaceInSelectorsModule.default,\n        \"no-generic-family-in-font-face\":\n            noGenericFamilyInFontFaceModule.default,\n        \"no-http-font-url\": noHttpFontUrlModule.default,\n        \"no-invalid-font-display\": noInvalidFontDisplayModule.default,\n        \"no-invalid-font-style\": noInvalidFontStyleModule.default,\n        \"no-invalid-font-weight\": noInvalidFontWeightModule.default,\n        \"no-invalid-unicode-range\": noInvalidUnicodeRangeModule.default,\n        \"no-legacy-formats\": noLegacyFormatsModule.default,\n        \"no-local-src-in-font-face\": noLocalSrcInFontFaceModule.default,\n        \"no-missing-fallback-before-web-font\":\n            noMissingFallbackBeforeWebFontModule.default,\n        \"no-missing-font-file\": noMissingFontFileModule.default,\n        \"no-overlapping-unicode-range\": noOverlappingUnicodeRangeModule.default,\n        \"no-protocol-relative-font-url\":\n            noProtocolRelativeFontUrlModule.default,\n        \"no-src-format-mismatch\": noSrcFormatMismatchModule.default,\n        \"no-unquoted-font-family-in-font-face\":\n            noUnquotedFontFamilyInFontFaceModule.default,\n        \"no-unused-font-face\": noUnusedFontFaceModule.default,\n        \"no-whitespace-in-unquoted-family\":\n            noWhitespaceInUnquotedFamilyModule.default,\n        \"prefer-variable-fonts\": preferVariableFontsModule.default,\n        \"prefer-woff2\": preferWoff2Module.default,\n        \"require-font-display\": requireFontDisplayModule.default,\n        \"require-font-family-in-font-face\":\n            requireFontFamilyInFontFaceModule.default,\n        \"require-font-style\": requireFontStyleModule.default,\n        \"require-font-weight\": requireFontWeightModule.default,\n        \"require-format-hint\": requireFormatHintModule.default,\n        \"require-src-in-font-face\": requireSrcInFontFaceModule.default,\n        \"require-system-font-fallback\": requireSystemFontFallbackModule.default,\n        \"require-unicode-range-for-large-family\":\n            requireUnicodeRangeForLargeFamilyModule.default,\n        \"require-unicode-range-for-subset-fonts\":\n            requireUnicodeRangeForSubsetFontsModule.default,\n        \"woff2-before-woff\": woff2BeforeWoffModule.default,\n    };\n\n/** Public rule registry type. */\nexport type FontRulesRegistry = typeof fontRules;\n"],
  "mappings": "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",
  "names": ["import_ts_extras", "ruleName", "import_stylelint", "import_ts_extras", "docs", "messages", "rule", "ruleName", "meta", "stylelint", "stylelint", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "stripQueryAndFragment", "ruleFunction", "rule", "import_stylelint", "import_ts_extras", "report", "ruleMessages", "validateOptions", "stylelint", "ruleName", "messages", "docs", "ruleFunction", "rule", "ruleName", "rule"]
}
