{"_id":"@charcuterie/tokens","_rev":"18-ea3cfd7d99205c93c836aacea04dc1e2","name":"@charcuterie/tokens","dist-tags":{"latest":"1.10.2"},"versions":{"0.1.0":{"name":"@charcuterie/tokens","version":"0.1.0","license":"MIT","_id":"@charcuterie/tokens@0.1.0","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"f9dce6006eedf3ad31ce9131eb8fe1d56cb051f5","tarball":"https://registry.npmjs.org/@charcuterie/tokens/-/tokens-0.1.0.tgz","fileCount":102,"integrity":"sha512-zICnABrl98yHYfwFp3RqqAHWRe4LWzyOP8hL2UIFaRvAb/ukCzUUE1KtdAPGlBrCN5OsohBdgb/FPkf6YiaxZQ==","signatures":[{"sig":"MEUCIQD2ziKvJfsqBF+DLG2ucWFts8+L7UHRHcn/Bue1INPnygIgcQg+93TU5+aioykSohrHYOdmEYfCyXf5e/pAmkOkn6Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":748580},"main":"./dist/index.js","type":"module","_from":"file:/tmp/tokens.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","default":"./dist/index.js"},"./src/*":"./src/*","./epaper":{"types":"./dist/epaper.d.ts","source":"./src/epaper.ts","default":"./dist/epaper.js"},"./fonts/*":"./dist/fonts/*","./fonts.css":"./dist/fonts.css","./theme.css":"./dist/theme.css","./tokens.json":"./dist/tokens.json","./variables.css":"./dist/variables.css"},"scripts":{"test":"vitest","build":"tsc -p tsconfig.build.json && node scripts/buildTokens.ts && node scripts/copyFonts.ts","prepack":"yarn build","typecheck":"tsc --noEmit","fetch:fonts":"node scripts/fetchFonts.ts","build:tokens":"node scripts/buildTokens.ts","check:contrast":"node scripts/checkContrast.ts","preview:themes":"node scripts/buildPreview.ts"},"_npmUser":{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"},"_resolved":"/tmp/tokens.tgz","_integrity":"sha512-zICnABrl98yHYfwFp3RqqAHWRe4LWzyOP8hL2UIFaRvAb/ukCzUUE1KtdAPGlBrCN5OsohBdgb/FPkf6YiaxZQ==","repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"_npmVersion":"11.16.0","description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.6.2"},"_npmOperationalInternal":{"tmp":"tmp/tokens_0.1.0_1785472254300_0.057296229596396575","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@charcuterie/tokens","version":"0.2.0","license":"MIT","_id":"@charcuterie/tokens@0.2.0","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"97ab81f44b49230d344153a7b451c8de52caee13","tarball":"https://registry.npmjs.org/@charcuterie/tokens/-/tokens-0.2.0.tgz","fileCount":101,"integrity":"sha512-93tj1osF248v1z8sZ6e8E1iCnKhyBFl6WXi7Ucj7w+6ZXU93OfPnuusYq9MvBYWoDpzjBDpqK6LRcSR7JHlMjw==","signatures":[{"sig":"MEUCIQD34BbnmTYqIYYtBtvNUKNCJy0Ez/HsMVmILtXrL136QAIgchMR2xAMvroA0e4izj4mz3jZdUI1Gpy3mzy3tYDEQ0A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2ftokens@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":755955},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","default":"./dist/index.js"},"./src/*":"./src/*","./epaper":{"types":"./dist/epaper.d.ts","source":"./src/epaper.ts","default":"./dist/epaper.js"},"./fonts/*":"./dist/fonts/*","./fonts.css":"./dist/fonts.css","./theme.css":"./dist/theme.css","./tokens.json":"./dist/tokens.json","./variables.css":"./dist/variables.css"},"scripts":{"test":"vitest","build":"tsc -p tsconfig.build.json && node scripts/buildTokens.ts && node scripts/copyFonts.ts","prepack":"yarn build","typecheck":"tsc --noEmit","fetch:fonts":"node scripts/fetchFonts.ts","build:tokens":"node scripts/buildTokens.ts","check:contrast":"node scripts/checkContrast.ts","preview:themes":"node scripts/buildPreview.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d533d781-73cd-42c1-b431-07dfec5aee72"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"_npmVersion":"11.16.0","description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.6.2"},"_npmOperationalInternal":{"tmp":"tmp/tokens_0.2.0_1785486602166_0.08289761117079175","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@charcuterie/tokens","version":"1.0.0","license":"MIT","_id":"@charcuterie/tokens@1.0.0","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"1a2b78b552e588e0b0d2ba276cb35e830b763984","tarball":"https://registry.npmjs.org/@charcuterie/tokens/-/tokens-1.0.0.tgz","fileCount":102,"integrity":"sha512-EhtmpvsQGY1gAYSAmltn3A8vp6oCw4S8ztzp8uCl2YBB2KoxWagaeq7lXxPyRYa72qWVoAjaLoO1RfGQ+4Xp2A==","signatures":[{"sig":"MEUCIAqn0m12rhGRdWSu/wbmfeEph6i2KnA85RDhT92jpLDPAiEAh8woQtHjjvDDMAtmAGvsSdNcC2gJw6M/5+Z3U6n36H0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2ftokens@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":829272},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","default":"./dist/index.js"},"./src/*":"./src/*","./epaper":{"types":"./dist/epaper.d.ts","source":"./src/epaper.ts","default":"./dist/epaper.js"},"./fonts/*":"./dist/fonts/*","./fonts.css":"./dist/fonts.css","./theme.css":"./dist/theme.css","./tokens.json":"./dist/tokens.json","./variables.css":"./dist/variables.css","./first-paint.css":"./dist/first-paint.css"},"scripts":{"test":"vitest","build":"tsc -p tsconfig.build.json && node scripts/buildTokens.ts && node scripts/copyFonts.ts","prepack":"yarn build","typecheck":"tsc --noEmit","fetch:fonts":"node scripts/fetchFonts.ts","build:tokens":"node scripts/buildTokens.ts","check:contrast":"node scripts/checkContrast.ts","preview:epaper":"node scripts/buildEpaperPreview.ts","preview:themes":"node scripts/buildPreview.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d533d781-73cd-42c1-b431-07dfec5aee72"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"_npmVersion":"11.16.0","description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.6.2"},"_npmOperationalInternal":{"tmp":"tmp/tokens_1.0.0_1785684107448_0.19059760674202586","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@charcuterie/tokens","version":"1.1.0","license":"MIT","_id":"@charcuterie/tokens@1.1.0","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"3e802e08e00da0ab45f8d4307c9227075134c3bc","tarball":"https://registry.npmjs.org/@charcuterie/tokens/-/tokens-1.1.0.tgz","fileCount":104,"integrity":"sha512-ZSfHQEqUPoZ0pPUQUJBWcHUZUWA5pDpPqf3QxlGzyRx8twpgqtDsmqUdcDjA4ZBQFaak+zaAJwdjsflv1u+sVw==","signatures":[{"sig":"MEQCICLh4ijBnw+Uh0f9ev4B+/TRNlV66lguW8Ra683oEIUvAiAiCm7T6NWx7zLx1Vx7WjGLZCc3s96jD2c3YHL9B5t8Hg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2ftokens@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":843044},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","default":"./dist/index.js"},"./src/*":"./src/*","./epaper":{"types":"./dist/epaper.d.ts","source":"./src/epaper.ts","default":"./dist/epaper.js"},"./fonts/*":"./dist/fonts/*","./fonts.css":"./dist/fonts.css","./theme.css":"./dist/theme.css","./tokens.json":"./dist/tokens.json","./variables.css":"./dist/variables.css","./first-paint.css":"./dist/first-paint.css"},"scripts":{"test":"vitest","build":"tsc -p tsconfig.build.json && node scripts/buildTokens.ts && node scripts/copyFonts.ts","prepack":"yarn build","typecheck":"tsc --noEmit","fetch:fonts":"node scripts/fetchFonts.ts","build:tokens":"node scripts/buildTokens.ts","check:contrast":"node scripts/checkContrast.ts","preview:epaper":"node scripts/buildEpaperPreview.ts","preview:themes":"node scripts/buildPreview.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d533d781-73cd-42c1-b431-07dfec5aee72"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"_npmVersion":"11.16.0","description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.6.2"},"_npmOperationalInternal":{"tmp":"tmp/tokens_1.1.0_1785745718541_0.8169024579303688","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@charcuterie/tokens","version":"1.1.1","license":"MIT","_id":"@charcuterie/tokens@1.1.1","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"1979da681607989401f33a3c05422f274ea7949f","tarball":"https://registry.npmjs.org/@charcuterie/tokens/-/tokens-1.1.1.tgz","fileCount":104,"integrity":"sha512-CgaYY50dA9K6IwFv3oD+9PkwTTU3bTjS+TKdMiI/1JfnCdyfXkzGXhtm9+0KtC8Nqdyvd7kLXL64xBs0m3G3nQ==","signatures":[{"sig":"MEUCIQCTyoh7JBvtKGIiKONuY27Mgu/F92HwhQjWHcu+8o4nugIgCxlRIhU2ROKhoPM6pHxKNLu+0dQIMOVkYyScThC/lH4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2ftokens@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":848483},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","default":"./dist/index.js"},"./src/*":"./src/*","./epaper":{"types":"./dist/epaper.d.ts","source":"./src/epaper.ts","default":"./dist/epaper.js"},"./fonts/*":"./dist/fonts/*","./fonts.css":"./dist/fonts.css","./theme.css":"./dist/theme.css","./tokens.json":"./dist/tokens.json","./variables.css":"./dist/variables.css","./first-paint.css":"./dist/first-paint.css"},"scripts":{"test":"vitest","build":"tsc -p tsconfig.build.json && node scripts/buildTokens.ts && node scripts/copyFonts.ts","prepack":"yarn build","typecheck":"tsc --noEmit","fetch:fonts":"node scripts/fetchFonts.ts","build:tokens":"node scripts/buildTokens.ts","check:contrast":"node scripts/checkContrast.ts","preview:epaper":"node scripts/buildEpaperPreview.ts","preview:themes":"node scripts/buildPreview.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d533d781-73cd-42c1-b431-07dfec5aee72"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"_npmVersion":"11.16.0","description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.6.2"},"_npmOperationalInternal":{"tmp":"tmp/tokens_1.1.1_1785791540050_0.3026615630996041","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@charcuterie/tokens","version":"1.1.2","license":"MIT","_id":"@charcuterie/tokens@1.1.2","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"4d09de40860df5d0988cbd35a05bbfd8336429d1","tarball":"https://registry.npmjs.org/@charcuterie/tokens/-/tokens-1.1.2.tgz","fileCount":104,"integrity":"sha512-loVBTzF+ezgjzontr5/8gTco/AEO1i3deFVpGPoLPj1xOVtcjHTWin5vo500v4Z/ouqYuefZtmaw7qbk6uurjg==","signatures":[{"sig":"MEUCIQCkVydYPeG+c3vICeKrO2Mkm49tgYWaC/a4ZjxLYIMJawIgUZ8U4ul/mz6QBH5E/PK9q9y0ogxjtdKycy3A+/WAtGU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2ftokens@1.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":848696},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","default":"./dist/index.js"},"./src/*":"./src/*","./epaper":{"types":"./dist/epaper.d.ts","source":"./src/epaper.ts","default":"./dist/epaper.js"},"./fonts/*":"./dist/fonts/*","./fonts.css":"./dist/fonts.css","./theme.css":"./dist/theme.css","./tokens.json":"./dist/tokens.json","./variables.css":"./dist/variables.css","./first-paint.css":"./dist/first-paint.css"},"scripts":{"test":"vitest","build":"tsc -p tsconfig.build.json && node scripts/buildTokens.ts && node scripts/copyFonts.ts","prepack":"yarn build","typecheck":"tsc --noEmit","fetch:fonts":"node scripts/fetchFonts.ts","build:tokens":"node scripts/buildTokens.ts","check:contrast":"node scripts/checkContrast.ts","preview:epaper":"node scripts/buildEpaperPreview.ts","preview:themes":"node scripts/buildPreview.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d533d781-73cd-42c1-b431-07dfec5aee72"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"_npmVersion":"11.16.0","description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.6.2"},"_npmOperationalInternal":{"tmp":"tmp/tokens_1.1.2_1785916493585_0.9327594685066638","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@charcuterie/tokens","version":"1.1.3","license":"MIT","_id":"@charcuterie/tokens@1.1.3","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"013bd3b98b379c9adcd182083a0ffd287835b1c9","tarball":"https://registry.npmjs.org/@charcuterie/tokens/-/tokens-1.1.3.tgz","fileCount":104,"integrity":"sha512-+y6fl2RmHl9hka+YUlceiFlCmJ3S5ne/1tQ0jIbvaypIP53tL5QDiQEKX660+L9s0V9UL7N80dI5wzDn12Ze1g==","signatures":[{"sig":"MEUCIQC2LBdrrji7eczcO1cLk6FDH8W7KpqqxfewsNmsZbYNuQIgIXmJxQFX5iQG4RDcn9kxLg2nxI4QlrwC6raKx07SEEs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2ftokens@1.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":848696},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","default":"./dist/index.js"},"./src/*":"./src/*","./epaper":{"types":"./dist/epaper.d.ts","source":"./src/epaper.ts","default":"./dist/epaper.js"},"./fonts/*":"./dist/fonts/*","./fonts.css":"./dist/fonts.css","./theme.css":"./dist/theme.css","./tokens.json":"./dist/tokens.json","./variables.css":"./dist/variables.css","./first-paint.css":"./dist/first-paint.css"},"scripts":{"test":"vitest","build":"tsc -p tsconfig.build.json && node scripts/buildTokens.ts && node scripts/copyFonts.ts","prepack":"yarn build","typecheck":"tsc --noEmit","fetch:fonts":"node scripts/fetchFonts.ts","build:tokens":"node scripts/buildTokens.ts","check:contrast":"node scripts/checkContrast.ts","preview:epaper":"node scripts/buildEpaperPreview.ts","preview:themes":"node scripts/buildPreview.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d533d781-73cd-42c1-b431-07dfec5aee72"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"_npmVersion":"11.16.0","description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.6.2"},"_npmOperationalInternal":{"tmp":"tmp/tokens_1.1.3_1785917608377_0.8941238956950737","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@charcuterie/tokens","version":"1.2.0","license":"MIT","_id":"@charcuterie/tokens@1.2.0","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"5b455f1759a39fb364f85091a17acb6642b2fad2","tarball":"https://registry.npmjs.org/@charcuterie/tokens/-/tokens-1.2.0.tgz","fileCount":104,"integrity":"sha512-A0Zaa33RTiIj4hMM98dC+dZc92hlAlYkbd9wZYDqL6JOHR5TJ57JaGeD7CtSxaK/sC2ZuY7qtUJ9JXdpHwgbRg==","signatures":[{"sig":"MEUCIQD3/99EjdbHz2vZOWNdtAlBKlBZ4nMLnDwQ7Dpmgd90DQIgO2r+cwB2tkdJJ0M/eaangfB/5UOPTME73iSzlPRBfwU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2ftokens@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":854086},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","default":"./dist/index.js"},"./src/*":"./src/*","./epaper":{"types":"./dist/epaper.d.ts","source":"./src/epaper.ts","default":"./dist/epaper.js"},"./fonts/*":"./dist/fonts/*","./fonts.css":"./dist/fonts.css","./theme.css":"./dist/theme.css","./tokens.json":"./dist/tokens.json","./variables.css":"./dist/variables.css","./first-paint.css":"./dist/first-paint.css"},"scripts":{"test":"vitest","build":"tsc -p tsconfig.build.json && node scripts/buildTokens.ts && node scripts/copyFonts.ts","prepack":"yarn build","typecheck":"tsc --noEmit","fetch:fonts":"node scripts/fetchFonts.ts","build:tokens":"node scripts/buildTokens.ts","check:contrast":"node scripts/checkContrast.ts","preview:epaper":"node scripts/buildEpaperPreview.ts","preview:themes":"node scripts/buildPreview.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d533d781-73cd-42c1-b431-07dfec5aee72"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"_npmVersion":"11.19.0","description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.6.2"},"_npmOperationalInternal":{"tmp":"tmp/tokens_1.2.0_1786351227647_0.7708171991174337","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@charcuterie/tokens","version":"1.3.0","license":"MIT","_id":"@charcuterie/tokens@1.3.0","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"3701cde9cc0e422314faac792e3a57595aef03de","tarball":"https://registry.npmjs.org/@charcuterie/tokens/-/tokens-1.3.0.tgz","fileCount":104,"integrity":"sha512-JpFK82mnW2ZpQLFJl18C1K44ZQ+rzZGtGqHd/KFo9T6W/AzZdoySC7lPxBEKGoIk57kATs+ctcPHLig4fDYllQ==","signatures":[{"sig":"MEYCIQD0h7/U6APxhjnXbpHmx+lqw0c092QxYVz+KW4Laa/5YAIhAMCZO93LEd3D+a+sAeCAgGUPvsGXE7ynjmMw5r39/1Cm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2ftokens@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":858301},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","default":"./dist/index.js"},"./src/*":"./src/*","./epaper":{"types":"./dist/epaper.d.ts","source":"./src/epaper.ts","default":"./dist/epaper.js"},"./fonts/*":"./dist/fonts/*","./fonts.css":"./dist/fonts.css","./theme.css":"./dist/theme.css","./tokens.json":"./dist/tokens.json","./variables.css":"./dist/variables.css","./first-paint.css":"./dist/first-paint.css"},"scripts":{"test":"vitest","build":"tsc -p tsconfig.build.json && node scripts/buildTokens.ts && node scripts/copyFonts.ts","prepack":"yarn build","typecheck":"tsc --noEmit","fetch:fonts":"node scripts/fetchFonts.ts","build:tokens":"node scripts/buildTokens.ts","check:contrast":"node scripts/checkContrast.ts","preview:epaper":"node scripts/buildEpaperPreview.ts","preview:themes":"node scripts/buildPreview.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d533d781-73cd-42c1-b431-07dfec5aee72"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"_npmVersion":"11.19.0","description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.6.2"},"_npmOperationalInternal":{"tmp":"tmp/tokens_1.3.0_1786354071501_0.6576712009709518","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@charcuterie/tokens","version":"1.4.0","license":"MIT","_id":"@charcuterie/tokens@1.4.0","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"1b8ef592fdba7065930836906f4dcdb07ff91742","tarball":"https://registry.npmjs.org/@charcuterie/tokens/-/tokens-1.4.0.tgz","fileCount":104,"integrity":"sha512-Zq/4B45FFkoDGVs3D/VLGrlv/lr3NGALcw8jq3EYj/I6rRej7Taws51ssYDEbT0t87i3fEpbue4baGR9tsBYAg==","signatures":[{"sig":"MEYCIQDylMNsErkZS3J5dL3CYGx6vQl3UniYlHjC2JofPQlOsAIhAKeamnxe1FTi+aAHcV0itkP8OF+tGjOYgHLsuUgpwKhf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2ftokens@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":869303},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","default":"./dist/index.js"},"./src/*":"./src/*","./epaper":{"types":"./dist/epaper.d.ts","source":"./src/epaper.ts","default":"./dist/epaper.js"},"./fonts/*":"./dist/fonts/*","./fonts.css":"./dist/fonts.css","./theme.css":"./dist/theme.css","./tokens.json":"./dist/tokens.json","./variables.css":"./dist/variables.css","./first-paint.css":"./dist/first-paint.css"},"scripts":{"test":"vitest","build":"tsc -p tsconfig.build.json && node scripts/buildTokens.ts && node scripts/copyFonts.ts","prepack":"yarn build","typecheck":"tsc --noEmit","fetch:fonts":"node scripts/fetchFonts.ts","build:tokens":"node scripts/buildTokens.ts","check:contrast":"node scripts/checkContrast.ts","preview:epaper":"node scripts/buildEpaperPreview.ts","preview:themes":"node scripts/buildPreview.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d533d781-73cd-42c1-b431-07dfec5aee72"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"_npmVersion":"11.19.0","description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.6.2"},"_npmOperationalInternal":{"tmp":"tmp/tokens_1.4.0_1786362122489_0.7414792477081196","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@charcuterie/tokens","version":"1.5.0","license":"MIT","_id":"@charcuterie/tokens@1.5.0","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"cde49ee8f99ded773f4ed8eff5dd2a92460d3d57","tarball":"https://registry.npmjs.org/@charcuterie/tokens/-/tokens-1.5.0.tgz","fileCount":104,"integrity":"sha512-n2AKSFJtS55sY1epJprgJ4awGs5ptvqNXghlfED6/hQ1oiTpmQqDQjxpGcsGsc5zS2t1Y4UcPdvo0vXHXXJAqQ==","signatures":[{"sig":"MEUCICLjAhQzK05G5R6FTHD0Qz3nVvLxCQT22vdgI9XelPVhAiEAwoo2c1/oGkqzdbDOi7RuKTK6j7q+CPLZbuqO4BIIWmU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2ftokens@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":891223},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","default":"./dist/index.js"},"./src/*":"./src/*","./epaper":{"types":"./dist/epaper.d.ts","source":"./src/epaper.ts","default":"./dist/epaper.js"},"./fonts/*":"./dist/fonts/*","./fonts.css":"./dist/fonts.css","./theme.css":"./dist/theme.css","./tokens.json":"./dist/tokens.json","./variables.css":"./dist/variables.css","./first-paint.css":"./dist/first-paint.css"},"scripts":{"test":"vitest","build":"tsc -p tsconfig.build.json && node scripts/buildTokens.ts && node scripts/copyFonts.ts","prepack":"yarn build","typecheck":"tsc --noEmit","fetch:fonts":"node scripts/fetchFonts.ts","build:tokens":"node scripts/buildTokens.ts","check:contrast":"node scripts/checkContrast.ts","preview:epaper":"node scripts/buildEpaperPreview.ts","preview:themes":"node scripts/buildPreview.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d533d781-73cd-42c1-b431-07dfec5aee72"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"_npmVersion":"11.19.0","description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.6.2"},"_npmOperationalInternal":{"tmp":"tmp/tokens_1.5.0_1786363300509_0.45415400759730096","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@charcuterie/tokens","version":"1.6.0","license":"MIT","_id":"@charcuterie/tokens@1.6.0","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"92da714d673cfa2195b8e01d6bb1c7cd0b1b367f","tarball":"https://registry.npmjs.org/@charcuterie/tokens/-/tokens-1.6.0.tgz","fileCount":122,"integrity":"sha512-cfov5J45aKQmQMlDveX8IB7zEOY5oURV6TF3F0aDZgORo9ghP/aTOYTLTDdYgnYyNJQLnEOTBYESGAqR1qHuKw==","signatures":[{"sig":"MEQCIAlJQL8lPYLFhD7G0gfZsBTLhtHwJBilRbgK3cThI5IFAiA+bSmvla0Vi7hHpKSORwHUTvOyJLKB4AqqvXdV0VOO8Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2ftokens@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1099358},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","default":"./dist/index.js"},"./src/*":"./src/*","./epaper":{"types":"./dist/epaper.d.ts","source":"./src/epaper.ts","default":"./dist/epaper.js"},"./fonts/*":"./dist/fonts/*","./fonts.css":"./dist/fonts.css","./theme.css":"./dist/theme.css","./tokens.json":"./dist/tokens.json","./variables.css":"./dist/variables.css","./first-paint.css":"./dist/first-paint.css"},"scripts":{"test":"vitest","build":"tsc -p tsconfig.build.json && node scripts/buildTokens.ts && node scripts/copyFonts.ts","prepack":"yarn build","typecheck":"tsc --noEmit","fetch:fonts":"node scripts/fetchFonts.ts","build:tokens":"node scripts/buildTokens.ts","check:contrast":"node scripts/checkContrast.ts","preview:epaper":"node scripts/buildEpaperPreview.ts","preview:themes":"node scripts/buildPreview.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d533d781-73cd-42c1-b431-07dfec5aee72"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"_npmVersion":"11.19.0","description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.6.2"},"_npmOperationalInternal":{"tmp":"tmp/tokens_1.6.0_1787254841770_0.6760487567662179","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@charcuterie/tokens","version":"1.7.0","license":"MIT","_id":"@charcuterie/tokens@1.7.0","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"2c9a2f54b63244d1fc7b941b54099717abd3b685","tarball":"https://registry.npmjs.org/@charcuterie/tokens/-/tokens-1.7.0.tgz","fileCount":122,"integrity":"sha512-mcr0v5vDlVQkdVeq4wvJCel5657Bn/3UVn6NJc4W+iyuJxDqnz1LFLoqrACKY20nGdx9BK4Fyy6Rg4z3SSo9ag==","signatures":[{"sig":"MEUCIHWZ4/xRNUmKX+B2MEkJve0QRBxQQhSz9VIxSOH6LZoeAiEAkcmLhok3hf/FXIs7ht+aoTH9l3FAr36JJhCsbaVk5WQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2ftokens@1.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1105396},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","default":"./dist/index.js"},"./src/*":"./src/*","./epaper":{"types":"./dist/epaper.d.ts","source":"./src/epaper.ts","default":"./dist/epaper.js"},"./fonts/*":"./dist/fonts/*","./fonts.css":"./dist/fonts.css","./theme.css":"./dist/theme.css","./tokens.json":"./dist/tokens.json","./variables.css":"./dist/variables.css","./first-paint.css":"./dist/first-paint.css"},"scripts":{"test":"vitest","build":"tsc -p tsconfig.build.json && node scripts/buildTokens.ts && node scripts/copyFonts.ts","prepack":"yarn build","typecheck":"tsc --noEmit","fetch:fonts":"node scripts/fetchFonts.ts","build:tokens":"node scripts/buildTokens.ts","check:contrast":"node scripts/checkContrast.ts","preview:epaper":"node scripts/buildEpaperPreview.ts","preview:themes":"node scripts/buildPreview.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d533d781-73cd-42c1-b431-07dfec5aee72"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"_npmVersion":"11.19.0","description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","directories":{},"sideEffects":false,"_nodeVersion":"26.8.1","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.6.2"},"_npmOperationalInternal":{"tmp":"tmp/tokens_1.7.0_1788409400364_0.1439234161345393","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@charcuterie/tokens","version":"1.8.0","license":"MIT","_id":"@charcuterie/tokens@1.8.0","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"763f5e3fa3759c4015b7069a40a1a11726e60707","tarball":"https://registry.npmjs.org/@charcuterie/tokens/-/tokens-1.8.0.tgz","fileCount":122,"integrity":"sha512-zKbmRRgYzPwOYfD/gvTwH6kNt9eovf35btdYuNnc1truCws++KCLEZyNrOXHJNY0oh+Lb2OI4UzVDi3QSDLL1Q==","signatures":[{"sig":"MEQCIGd1FpfO9ddyMO6Su7zY3HT9viiRFp9AAfHUY/Zlz8kTAiBqC97imEe+zNQLoXl3jVE2g9yyRORl/EAYe7xWKmQlEA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2ftokens@1.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1116910},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","default":"./dist/index.js"},"./src/*":"./src/*","./epaper":{"types":"./dist/epaper.d.ts","source":"./src/epaper.ts","default":"./dist/epaper.js"},"./fonts/*":"./dist/fonts/*","./fonts.css":"./dist/fonts.css","./theme.css":"./dist/theme.css","./tokens.json":"./dist/tokens.json","./variables.css":"./dist/variables.css","./first-paint.css":"./dist/first-paint.css"},"scripts":{"test":"vitest","build":"tsc -p tsconfig.build.json && node scripts/buildTokens.ts && node scripts/copyFonts.ts","prepack":"yarn build","typecheck":"tsc --noEmit","fetch:fonts":"node scripts/fetchFonts.ts","build:tokens":"node scripts/buildTokens.ts","check:contrast":"node scripts/checkContrast.ts","preview:epaper":"node scripts/buildEpaperPreview.ts","preview:themes":"node scripts/buildPreview.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d533d781-73cd-42c1-b431-07dfec5aee72"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"_npmVersion":"11.19.0","description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","directories":{},"sideEffects":false,"_nodeVersion":"26.8.1","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.6.2"},"_npmOperationalInternal":{"tmp":"tmp/tokens_1.8.0_1788848973488_0.3119290216925277","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@charcuterie/tokens","version":"1.9.0","license":"MIT","_id":"@charcuterie/tokens@1.9.0","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"514bf0b2f391f9a1c445ac8ca38383aa73e8b568","tarball":"https://registry.npmjs.org/@charcuterie/tokens/-/tokens-1.9.0.tgz","fileCount":122,"integrity":"sha512-cRxr1CNS+4YyjVCYVOFuS9WUDHdTmb87I5/piuwOCzFQKBikMs5vIW36wFReFKXm4CAg4y1EnyLnk9JP+G+lTA==","signatures":[{"sig":"MEUCIQDmdDwU5dikafOsGZFIn4cm9didZiWo/QFclmRiRpuTFgIgTQxkwr5o13p5IOgMogm9nvRtbmU4am//wMdW3NaJGFE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2ftokens@1.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1121998},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","default":"./dist/index.js"},"./src/*":"./src/*","./epaper":{"types":"./dist/epaper.d.ts","source":"./src/epaper.ts","default":"./dist/epaper.js"},"./fonts/*":"./dist/fonts/*","./fonts.css":"./dist/fonts.css","./theme.css":"./dist/theme.css","./tokens.json":"./dist/tokens.json","./variables.css":"./dist/variables.css","./first-paint.css":"./dist/first-paint.css"},"scripts":{"test":"vitest","build":"tsc -p tsconfig.build.json && node scripts/buildTokens.ts && node scripts/copyFonts.ts","prepack":"yarn build","typecheck":"tsc --noEmit","fetch:fonts":"node scripts/fetchFonts.ts","build:tokens":"node scripts/buildTokens.ts","check:contrast":"node scripts/checkContrast.ts","preview:epaper":"node scripts/buildEpaperPreview.ts","preview:themes":"node scripts/buildPreview.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d533d781-73cd-42c1-b431-07dfec5aee72"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"_npmVersion":"11.19.0","description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","directories":{},"sideEffects":false,"_nodeVersion":"26.8.1","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.6.2"},"_npmOperationalInternal":{"tmp":"tmp/tokens_1.9.0_1788897466744_0.8226252895507458","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@charcuterie/tokens","version":"1.10.0","license":"MIT","_id":"@charcuterie/tokens@1.10.0","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"2b1c9e76406f67ffdd1948077a604535a47d262f","tarball":"https://registry.npmjs.org/@charcuterie/tokens/-/tokens-1.10.0.tgz","fileCount":122,"integrity":"sha512-GuyPmLnEjxv0arkwQf4G0XY60p/MiLWPXXNOe0ujWezKwim3gv2gmWttE0GQVmw+5QWHSvQn/vokZRwFqMaKJg==","signatures":[{"sig":"MEUCIG3yvYAvJz91ZrJaN//tKslMA2J3oYGI7WCTpUkDX0yVAiEAtWmf/vYHqiZ1N6AT+NvOWx1qhxfQW8AYoFBQgMZej5E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDlu7EIRyNxMmtyzcE4YxC/tYy1K70+7xkUb/NCv9oT7AiEAtKHcBGA1xPRNYd1NUWNBTiPQFaRYUnm90z3EdQsw08U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2ftokens@1.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1124604},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","default":"./dist/index.js"},"./src/*":"./src/*","./epaper":{"types":"./dist/epaper.d.ts","source":"./src/epaper.ts","default":"./dist/epaper.js"},"./fonts/*":"./dist/fonts/*","./fonts.css":"./dist/fonts.css","./theme.css":"./dist/theme.css","./tokens.json":"./dist/tokens.json","./variables.css":"./dist/variables.css","./first-paint.css":"./dist/first-paint.css"},"scripts":{"test":"vitest","build":"tsc -p tsconfig.build.json && node scripts/buildTokens.ts && node scripts/copyFonts.ts","prepack":"yarn build","typecheck":"tsc --noEmit","fetch:fonts":"node scripts/fetchFonts.ts","build:tokens":"node scripts/buildTokens.ts","check:contrast":"node scripts/checkContrast.ts","preview:epaper":"node scripts/buildEpaperPreview.ts","preview:themes":"node scripts/buildPreview.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d533d781-73cd-42c1-b431-07dfec5aee72"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"_npmVersion":"11.19.1","description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","directories":{},"sideEffects":false,"_nodeVersion":"26.9.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.6.2"},"_npmOperationalInternal":{"tmp":"tmp/tokens_1.10.0_1789721391000_0.11668968130315349","host":"s3://npm-registry-packages-npm-production"}},"1.10.1":{"name":"@charcuterie/tokens","version":"1.10.1","license":"MIT","_id":"@charcuterie/tokens@1.10.1","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"6f8d460ac89e81418c5b52847276a549853e79cf","tarball":"https://registry.npmjs.org/@charcuterie/tokens/-/tokens-1.10.1.tgz","fileCount":122,"integrity":"sha512-QrG+GxctxXnMo21Zwn8TBaYmP1rABWqfRxCFE+Rb0UbrHfpSLXMBr1Ubnt0yDICzNxehJjP+YxMSwbC+uOrOQw==","signatures":[{"sig":"MEUCIDdiDs1m5Iu3WkWDXYqfEnAyNrlzIDPoFATpRGGg26VVAiEAupWHan08jH0GFeQNvTVTaKGjxUtAtHZZZ2QKMTqYiZY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIF9+BqswH/ASe9H3l79eGSTZztbvo7gelIrbWz5Waox3AiEAqowfjPGaIYWwNlqM4JIOIN+NynOwTKvWJm/vnVEHavg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2ftokens@1.10.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1124640},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","default":"./dist/index.js"},"./src/*":"./src/*","./epaper":{"types":"./dist/epaper.d.ts","source":"./src/epaper.ts","default":"./dist/epaper.js"},"./fonts/*":"./dist/fonts/*","./fonts.css":"./dist/fonts.css","./theme.css":"./dist/theme.css","./tokens.json":"./dist/tokens.json","./variables.css":"./dist/variables.css","./first-paint.css":"./dist/first-paint.css"},"scripts":{"test":"vitest","build":"tsc -p tsconfig.build.json && node scripts/buildTokens.ts && node scripts/copyFonts.ts","prepack":"yarn build","typecheck":"tsc --noEmit","fetch:fonts":"node scripts/fetchFonts.ts","build:tokens":"node scripts/buildTokens.ts","check:contrast":"node scripts/checkContrast.ts","preview:epaper":"node scripts/buildEpaperPreview.ts","preview:themes":"node scripts/buildPreview.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d533d781-73cd-42c1-b431-07dfec5aee72"}},"repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"_npmVersion":"11.19.1","description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","directories":{},"sideEffects":false,"_nodeVersion":"26.9.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.6.2"},"_npmOperationalInternal":{"tmp":"tmp/tokens_1.10.1_1789971958424_0.9431228163398151","host":"s3://npm-registry-packages-npm-production"}},"1.10.2":{"_id":"@charcuterie/tokens@1.10.2","bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"dist":{"shasum":"364781e02d85e16c152c76e4a377896c5dc83e27","tarball":"https://registry.npmjs.org/@charcuterie/tokens/-/tokens-1.10.2.tgz","fileCount":122,"integrity":"sha512-7LiUYEfRm1XmWsAjX2BL5NMEjbkz+KExFYTW5WfnCJAJwsnqDjGhmhAP1ICzAo64/1Wn7VbQO8Xks4bb6/OmYA==","signatures":[{"sig":"MEYCIQCnSdAuC3cBDoqdSe1tmAhVhhEwucrjuYDeGEaHBMNVBAIhAN7lVTjFwvM4O0IpXcauiHnMsCVoaSQRTWTud63NdL4y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCID5+kWjmrXQVKDL3e7mM9G3Tp4GHYdg7IVxL7+NaRyB4AiBc4uR5tY0zM2nr4lkv1nT93VWo/h/GV03wzggR2XZDFw=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@charcuterie%2ftokens@1.10.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1127176},"main":"./dist/index.js","name":"@charcuterie/tokens","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","default":"./dist/index.js"},"./src/*":"./src/*","./epaper":{"types":"./dist/epaper.d.ts","source":"./src/epaper.ts","default":"./dist/epaper.js"},"./fonts/*":"./dist/fonts/*","./fonts.css":"./dist/fonts.css","./theme.css":"./dist/theme.css","./tokens.json":"./dist/tokens.json","./variables.css":"./dist/variables.css","./first-paint.css":"./dist/first-paint.css"},"license":"MIT","scripts":{"test":"vitest","build":"tsc -p tsconfig.build.json && node scripts/buildTokens.ts && node scripts/copyFonts.ts","prepack":"yarn build","typecheck":"tsc --noEmit","fetch:fonts":"node scripts/fetchFonts.ts","build:tokens":"node scripts/buildTokens.ts","check:contrast":"node scripts/checkContrast.ts","preview:epaper":"node scripts/buildEpaperPreview.ts","preview:themes":"node scripts/buildPreview.ts"},"version":"1.10.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d533d781-73cd-42c1-b431-07dfec5aee72"}},"homepage":"https://github.com/Sawtaytoes/charcuterie#readme","repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"_npmVersion":"11.19.1","description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","directories":{},"maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"sideEffects":false,"_nodeVersion":"26.10.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.6.2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tokens_1.10.2_1790617054162_0.9708786804922145"}}},"time":{"created":"2026-07-31T04:30:54.168Z","modified":"2026-09-28T17:37:34.737Z","0.1.0":"2026-07-31T04:30:54.490Z","0.2.0":"2026-07-31T08:30:02.376Z","1.0.0":"2026-08-02T15:21:47.620Z","1.1.0":"2026-08-03T08:28:38.741Z","1.1.1":"2026-08-03T21:12:20.207Z","1.1.2":"2026-08-05T07:54:53.745Z","1.1.3":"2026-08-05T08:13:28.548Z","1.2.0":"2026-08-10T08:40:27.810Z","1.3.0":"2026-08-10T09:27:51.674Z","1.4.0":"2026-08-10T11:42:02.663Z","1.5.0":"2026-08-10T12:01:40.654Z","1.6.0":"2026-08-20T19:40:42.023Z","1.7.0":"2026-09-03T04:23:20.508Z","1.8.0":"2026-09-08T06:29:33.657Z","1.9.0":"2026-09-08T19:57:46.896Z","1.10.0":"2026-09-18T08:49:51.119Z","1.10.1":"2026-09-21T06:25:58.549Z","1.10.2":"2026-09-28T17:37:34.264Z"},"bugs":{"url":"https://github.com/Sawtaytoes/charcuterie/issues"},"license":"MIT","homepage":"https://github.com/Sawtaytoes/charcuterie#readme","repository":{"url":"git+https://github.com/Sawtaytoes/charcuterie.git","type":"git","directory":"packages/tokens"},"description":"Design tokens for the Charcuterie component library. Zero dependencies, no React.","maintainers":[{"name":"sawtaytoes","email":"saturn2888+npm@gmail.com"}],"readme":"# `@charcuterie/tokens`\n\nThe design-token layer. **Zero dependencies, no React.**\n\n`castkit/packages/views` renders to ePaper PNGs through Satori and needs colour and\nspacing values without pulling in a React tree; `slatecast` has a 60 KB gz budget. Both\nare why this is a separate package from `@charcuterie/ui`. React consumers never see two\nnames — they import `@charcuterie/ui/tokens`. It is a build-graph split, not an API split.\n\n## Running it\n\nNode 24 runs the TypeScript directly, so **nothing needs installing** to use any of\nthe scripts:\n\n```bash\nnode scripts/checkContrast.ts   # the WCAG 2.2 AA gate — exits non-zero on failure\nnode scripts/buildTokens.ts     # → dist/{variables,theme,first-paint}.css, dist/tokens.json\nnode scripts/fetchFonts.ts      # re-download the three shipped faces → fonts/, src/fonts.css\nnode scripts/buildPreview.ts    # → preview/index.html, the M0 bake-off board\nnode scripts/buildEpaperPreview.ts  # → preview/epaper-palette.html, the ePaper board\n```\n\nThat is deliberate and worth keeping: the M0 bake-off shipped before this workspace\nexisted, and a token change should stay one command away from a rebuilt board.\n\n`fetchFonts.ts` is the exception that needs a network, and it is the only script here\nthat writes a tracked binary. It clears `fonts/` before refetching, because Google's\nfilenames carry a content hash and an overwrite would leave the old ones orphaned in the\npackage forever.\n\n## The fonts\n\nThree faces, self-hosted, latin subsets only — Baloo 2 (`--font-display`), Outfit\n(`--font-sans`) and Victor Mono (`--font-mono`), all SIL OFL. Consumers add one line:\n\n```css\n@import \"@charcuterie/tokens/fonts.css\";\n```\n\nA separate entry point from `theme.css` on purpose: importing tokens should not force a\nfont download. A Satori consumer wants the woff2 alone and can reach them at\n`@charcuterie/tokens/fonts/<name>.woff2`.\n\n**The mono is Victor Mono, not Dank Mono.** That is a licensing constraint rather than a\npreference, and overriding it per-app is a supported one-liner —\n[the decision](../../docs/decisions/2026-07-30-the-shipped-mono-is-victor-mono.md) has\nthe snippet. In this fleet the licensed Dank Mono woff2 must not enter any repo; it\nreaches an app by a read-only bind mount off the NAS —\n[how](../../docs/decisions/2026-08-05-dank-mono-reaches-the-fleet-by-bind-mount.md).\n\nThrough Yarn, from anywhere in the repo:\n\n```bash\nyarn workspace @charcuterie/tokens build   # tsc → dist/*.js + .d.ts, then the CSS\nyarn workspace @charcuterie/tokens test    # Vitest, including the contrast gate\n```\n\n`build` runs on `prepack`, so `dist/` is generated rather than committed.\n\n**Both source workflows are live at once** because `tsconfig.base.json` sets\n`rewriteRelativeImportExtensions`. Source imports siblings as `./contrast.ts` — which\nis what lets Node run it with no build — and tsc rewrites those to `./contrast.js` on\nthe way out. Without that flag the two workflows are mutually exclusive.\n\n### The contrast gate is now a test\n\n`src/contrast.test.ts` wraps the same audit `scripts/checkContrast.ts` prints. That is\nthe *only* thing M1 changed about it. One source of truth, asked by the board, the\nscript, and CI alike — a script gates only what somebody remembers to run.\n\n## The two tiers\n\n**Tier 1** is raw ramps (`neutral.50…950`). A component may never reference one. They\nexist so a variant author has something to build tier 2 out of.\n\n**Tier 2** is semantic roles, and it is the only tier components may name:\n\n| Group | Roles |\n| --- | --- |\n| `surface` | `base`, `raised`, `sunken`, `overlay`, `inverse` |\n| `content` | `primary`, `secondary`, `muted`, `disabled`, `onAccent` |\n| `border` | `subtle`, `default`, `strong`, `focus` |\n| `intent` | `{neutral, accent, success, warning, danger, info}` × `{surface, surfaceHover, border, content, solid, solidHover, onSolid}` |\n| `categorical` | `{1 … 10}` × the same seven roles |\n| `focus` | `ring`, `ringOffset`, and `focusRing.width` / `.offset` |\n\n`intent` is the generalization of ripdeck's `TONE_CLASS` map — the one it currently\ndeclares identically in both `VerdictBadge.tsx` and `TowerAlerts.tsx`.\n\n### `intent` means something; `categorical` deliberately does not\n\nEvery member of `intent` is a **claim**: `danger` is not a colour, it is a statement about\nwhat happens if you press the thing, and components switch on it. `categorical` is the\nfamily for colour a **user chose** — a Docket label, a project, a chart series — where a\nsemantic name would be a lie the design system told on their behalf. Numbered, because\nthere is nothing to name.\n\nIt is generated rather than hand-picked: `CATEGORICAL_HUES` states a hue angle and\n`buildCategoricalScheme` solves each role against a contrast target, per variant, per\nscheme. A variant states its *character* (`chromaScale`, `contentContrast`) and never a\nhex.\n\nTwo gates, not one. Every categorical pair is enrolled in `contrastAudit.ts` beside the\nintents — and additionally **gated against each other**, because two indexes can both clear\n4.5:1 on the same surface and be the same colour as each other with every number on the\nboard green. `getCategoricalDistinctnessFailures` measures every pair in OKLab; the\ntightest `solid` pair in the fleet is ΔEok 0.0893, against the 0.0835 Tableau 10 achieves\nfor itself.\n\n`getCategoricalIndex(key)` is the stable string → index fallback for rows that predate the\nfeature. It is a fallback, never an override — a stored pick wins.\n\nBoundary with `Swatch`: `Swatch` takes colour **arriving from the world** (a physical\nsticker, an album accent) and can promise nothing about it; `categorical` is a curated set\nthe user picks *from*, so it can promise everything.\n[Decision](../../docs/decisions/2026-08-19-categorical-is-a-curated-palette-not-ungoverned-colour.md).\n\n### Why intents carry a *solid* as well as a *surface*\n\nThe plan named four intent roles. Building the specimen board surfaced a fifth need\nimmediately. `surface` is the **tinted** treatment the fleet already uses for status\npills (`bg-blue-950 text-blue-300`); a primary button is a **saturated fill** with its own\ntext colour. Deriving one from the other is exactly the guesswork this layer exists to\ndelete, so both are stated — and `onSolid` is stated too, because whether white or\nnear-black wins on a given fill genuinely varies per intent (in `layered`, white fails on\nthe coral accent and near-black passes at 5.4:1).\n\n## The three axes, and the one profile\n\n`data-scheme` (light | dark) · `data-density` (comfortable | compact | kiosk) ·\n`data-variant` (the visual direction) — all three are `<html>` attributes and all three\ncompose. One attribute flip re-themes everything with **zero re-render**, because nothing\nin React ever observes the change.\n\n**ePaper is not a fourth axis.** It is a separate export (`@charcuterie/tokens/epaper`)\nbecause it removes capabilities rather than restyling them: no hover, no opacity, no\nshadow, no transition, and colour restricted to a set small enough to hold a sharp edge.\nModelling it as `data-scheme=\"epaper\"` would imply a `data-variant` still applies to it,\nwhich it cannot.\n\n### Six is what one *pixel* can be, not what the panel can show\n\nThe profile used to claim its palette was \"six colours the panel can physically render.\"\nThat is **false**, and it is why the restriction read as arbitrary. A Spectra 6 panel\nsets each pixel to one of six inks; a *region* of pixels renders far more, because the\ndriver dithers — which is exactly what the fleet's photo path has always relied on.\n\nThe real rule is keyed to **what is being drawn**\n([decision](../../docs/decisions/2026-07-31-epaper-restricts-colour-by-what-is-drawn-not-by-the-panel.md)):\n\n| what | what it may use | count on Spectra 6 |\n| --- | --- | --- |\n| photographs | the full dithered gamut — not this profile's business | near-continuous |\n| flat fills, large areas | `inks` **+ `blends`** | **19** |\n| borders, small text, icons | `inks` only | 6 |\n\n```ts\nimport { epaperPanels, spectra6Blends } from \"@charcuterie/tokens/epaper\"\n\n// a large fill — the panel-side quantizer turns this one flat hex\n// into a 50/50 yellow-red checkerboard\nconst fill = spectra6Blends.yellowRed // #DB8225\n\n// a 1px rule — six inks only, or it becomes a dotted line\nconst rule = epaperPanels.spectra6.family === \"fixedInk\"\n  ? epaperPanels.spectra6.inks.black\n  : undefined\n```\n\nTwo of the fifteen ink pairs are **absent rather than present-and-wrong**: `blackYellow`\nand `yellowBlue` quantize to a different pair entirely, so there is no hex that reaches\nthem.\n\n`epaperPanels` is keyed by panel and discriminated on `family`. `fixedInk` panels carry\n`inks` / `emittedInks` / `blends`; `continuousTone` panels — E Ink Gallery 3's ~50,000\ncolour ACeP, **not in the fleet** — carry none of them, because there is no palette to\nenumerate and therefore none to invent.\n\n`node scripts/buildEpaperPreview.ts` draws the whole thing, checkerboards and all, from\n`src/epaper.ts`. The committed board is\n[`docs/previews/2026-07-31-m6g-epaper-palette.html`](../../docs/previews/2026-07-31-m6g-epaper-palette.html).\n\n## The first-paint rule ships from here — copy it, never `<link>` it\n\nEvery app needs one line of CSS in its entry HTML that paints the canvas before any\nstylesheet has parsed, or a dark app opens with a full-page white flash. `dist/first-paint.css`\nis that line, generated for both schemes from the same token `variables.css` reads:\n\n```html\n<style>\n  html, body { background-color: var(--color-surface-base, #131822); color-scheme: dark; }\n</style>\n```\n\n**Paste it. Do not `<link>` it.** A stylesheet request is a network round-trip, and beating\nthat round-trip is the rule's entire job — linking the file would reintroduce the flash it\nexists to prevent while looking like the tidier option. It is exported\n(`@charcuterie/tokens/first-paint.css`) so a build can read it and so \"where did this\nsnippet come from\" has an answer.\n\n**The `var()` is the whole reason this ships from a package instead of a wiki page.** An\ninline `<style>` is **unlayered**, and unlayered author CSS beats every `@layer` regardless\nof specificity — Tailwind v4 emits utilities into `@layer utilities`. So the bare form,\n`background-color: #131822`, does not merely paint early: it **outranks `bg-surface-base` on\n`<body>` permanently**, and no `data-scheme` flip can reach the page background. Light mode\nthen renders light cards on a dark canvas. Written as a *fallback*, the literal applies only\nwhile `--color-surface-base` is undefined — the one moment the rule was ever for.\n\nThree apps hand-copied the bare form and three apps got the bug.\n[The decision record](../../docs/decisions/2026-07-31-tokens-ships-the-first-paint-snippet.md)\nhas the measurements.\n\n`color-scheme` needs no `var()`: `variables.css`'s `[data-scheme]` rule is unlayered too, so\nit wins on specificity rather than losing to this one.\n\n### Gate the copy in your app\n\n`buildFirstPaintRule` returns the rule alone — one line, no comment — so a consumer's drift\ntest is one assertion, and it pins the `var()` as well as the hex:\n\n```ts\nimport { buildFirstPaintRule, daylight } from \"@charcuterie/tokens\"\n\nexpect(indexHtml).toContain(\n  buildFirstPaintRule(daylight, \"dark\"),\n)\n```\n\nThat is the gate the three broken apps could not write, because each owned only its own copy.\n\n## `colour` in TypeScript, `--color-*` in CSS\n\nThis split is deliberate and **must not be \"fixed\"**.\n\nTS identifiers use `colour`, matching `e6Colour` / `colourMode` / `getAccentColour` in\n`castkit/packages/views/src/viewStyles.ts`, per the house rule about matching existing\nnomenclature. CSS custom properties use `--color-*` because **Tailwind v4's `@theme` only\ngenerates `bg-*` / `text-*` / `border-*` utilities from the `--color-` namespace**.\nRenaming them to `--colour-*` silently produces a stylesheet with no utilities.\n\n## Logical properties only\n\nEvery spatial value is consumed as a logical property — `padding-inline`, `margin-block`,\n`inset-inline-start`, `border-inline-start`, `text-align: start`. Never `left`/`right`.\nIn Tailwind that means `ms-`/`me-`/`ps-`/`pe-`/`start-`/`end-`/`border-s`/`border-e`.\n\nThis costs nothing now and makes RTL nearly free later, which is why it is a rule rather\nthan a preference. `scripts/previewStyles.ts` is written entirely this way and is the\nfirst fixture the eventual ESLint rule will be tested against.\n\n## Contrast is a test, not a guideline\n\n`scripts/checkContrast.ts` walks every content-on-surface and intent pair across every\n(variant × scheme) and exits non-zero below threshold.\n\n- **WCAG 2.2 is the gate** — 4.5:1 for text (1.4.3), 3:1 for control boundaries and focus\n  indicators (1.4.11). It is normative and it is what an audit will use.\n- **APCA is reported alongside** — it models perceived contrast far better on dark UI,\n  but WCAG 3 is still a working draft, so gating on it means gating on a moving target.\n\nTwo categories are reported but never gated, each with a stated reason:\n\n- `content.disabled`, because WCAG explicitly exempts inactive controls, and gating it\n  would force disabled text to look enabled.\n- Decorative lines — `border.subtle`, `border.default`, and **intent** badge outlines.\n  1.4.11 covers boundaries *required to identify a control*, not every line on screen.\n  `border.strong` **is** gated, because that is the role a text input, checkbox, and switch\n  track draw themselves with — and so is a **categorical** border, because a pill reading\n  \"Homelab\" is identified by its colour and by nothing else\n  ([decision](../../docs/decisions/2026-08-19-categorical-borders-are-gated-where-intent-borders-are-exempt.md)).\n\nGetting that scoping wrong is not harmless: gating decoration at 3:1 produced 65 \"failures\"\non the first run, which is precisely how a contrast gate gets switched off.\n\nThe audit also asserts **alias drift**: `content.onAccent` must equal\n`intent.accent.onSolid`, and `border.focus` must equal `focus.ring`. Two names for one\nvalue is a bug waiting for the first person who tunes only one of them.\n\n## Adding a variant\n\nCopy any file in `src/variants/`, change the values, add it to `src/variants/index.ts`,\nthen run `node scripts/checkContrast.ts`. If it exits zero, run `buildPreview.ts` and look\nat it. Both steps are required — the gate proves it is *readable*, not that it is *good*.\n\n`src/variants.test.ts` also holds the properties a new direction is most likely to\nbreak: light mode is not pure white, `raised` and `sunken` are actually separated from\n`base`, every intent *and every categorical index* carries all seven roles, every swatch is\nopaque 6-digit hex, the ten categorical hues stay tellable apart, and the focus ring has a\nnon-zero width. Update the roster assertion in that file when you\nadd one; that assertion exists so a variant cannot be added *silently*.\n\n## Closed at M3: the structural namespaces now reach Tailwind too\n\n`theme.css` maps `--color-*` into `@theme`, which generates `bg-*` / `text-*` / `border-*`.\nAs of M3 it also **bridges five structural namespaces**, so a component writes ordinary\nutilities and gets our values:\n\n| Published | Reads | Utility it fixes |\n| --- | --- | --- |\n| `--text-{xs…2xl}` | `--font-size-*` | `text-sm` — and ours is density-scaled |\n| `--leading-*` | `--line-height-*` | `leading-normal` |\n| `--shadow-{low,medium,high}` | `--elevation-*` | `shadow-low`, scheme-aware |\n| `--ease-*` | `--easing-*` | `ease-standard` |\n| `--spacing` | `space[1]` | `p-3` is a token value, not a coincidence |\n\n`--radius-*`, `--tracking-*`, `--font-*`, and `--font-weight-*` needed no bridge: they\ncollide with Tailwind's namespaces at `:root` already, which the M1 collision audit pinned\nas intended. `--duration-*` and `--control-*` have no Tailwind namespace at all, so\ncomponents reach them as `duration-(--duration-fast)` and `h-(--control-height-md)`.\n\nThe set is pinned by `THEME_BRIDGES` and asserted both ways in `tailwindCollisions.test.ts`:\nan unpublished-but-declared bridge fails, and so does a published-but-undeclared one. Every\nentry deliberately **redefines an existing utility in every consumer** — that is the point,\nand it is why it is a decision rather than a tweak:\n[the ADR](../../docs/decisions/2026-07-29-theme-css-bridges-tailwind-namespaces.md).\n\n`packages/docs/src/TokenSpecimen.tsx` still reads them through `var()`. It is left that way\nas the before-picture; `@charcuterie/ui` is the after.\n\n## Container-query variants are generated here too\n\n`theme.css` emits one `@custom-variant` per step of the container-query scale, with a\n**literal** threshold, because a container query's condition is resolved before custom\nproperties exist — `@container (min-inline-size: var(--cq-sm))` is invalid CSS:\n\n```css\n@custom-variant cq-sm (@container (min-inline-size: 24rem));\n```\n\nSo `cq-sm:` … `cq-xl:` are ours, matching `--cq-*`, rather than Tailwind's `@sm:`, which\nreads the `--container-*` namespace our scale deliberately moved off.\n[Decision](../../docs/decisions/2026-07-29-container-query-variants-are-generated.md).\n","readmeFilename":"README.md"}