{"_id":"@dloizides/design-tokens","_rev":"12-c69b722d69c52a16f2df1f78c8b3828d","name":"@dloizides/design-tokens","dist-tags":{"latest":"1.12.0"},"versions":{"1.0.1":{"name":"@dloizides/design-tokens","version":"1.0.1","keywords":["design-tokens","theme","css-variables","tailwind-preset","tenant-theme","dloizides"],"author":{"name":"dloizides"},"license":"MIT","_id":"@dloizides/design-tokens@1.0.1","maintainers":[{"name":"dloizides","email":"loizidesdemetris@gmail.com"}],"homepage":"https://github.com/openmindednewby/design-tokens#readme","bugs":{"url":"https://github.com/openmindednewby/design-tokens/issues"},"dist":{"shasum":"01edd53a0505d5d783a3dcaed289bfcaae4588f1","tarball":"https://registry.npmjs.org/@dloizides/design-tokens/-/design-tokens-1.0.1.tgz","fileCount":10,"integrity":"sha512-8hFu87VZUdbqlNgyp3iBqdrhtH2TbVIAwzqGD22rKJrOiq5m4fCLYhv7JFR0oviulEdL3knG7zpcSFbm/ob92A==","signatures":[{"sig":"MEUCIEQlksNeNGJghuVz9vJRCbEVBNKDXNEAYx0TDFejlYCZAiEA9/Dw8vuy2rUiCsU0VwcyC/p3Rq2LbyfFMwp4jdXPfEo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":136816},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"rimraf dist && tsup","clean":"rimraf dist","lint:fix":"eslint src --ext .ts --fix","typecheck":"tsc --noEmit","test:watch":"jest --watch","build:watch":"tsup --watch","deps:health":"npm run deps:outdated && npm run deps:unused","deps:unused":"npx depcheck --ignores \"@types/jest,@types/node,rimraf\"","deps:licenses":"npx license-checker --onlyAllow \"MIT;Apache-2.0;ISC;BSD-2-Clause;BSD-3-Clause;0BSD;Unlicense;CC0-1.0\"","deps:outdated":"npm outdated || exit 0","test:coverage":"jest --coverage","prepublishOnly":"npm run clean && npm run build && npm run test","security:audit":"npm audit --audit-level=high"},"_npmUser":{"name":"dloizides","email":"loizidesdemetris@gmail.com"},"repository":{"url":"git+https://github.com/openmindednewby/design-tokens.git","type":"git"},"_npmVersion":"10.9.3","description":"Framework-agnostic design-token SOURCE for the dloizides.com portfolio. One typed token set per app (aml / erevna / katalogos), seeded byte-for-byte from each app's CURRENT values, emitted in three forms from one source: CSS custom properties (:root) for ","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.0.0","eslint":"^8.57.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.4.0","@types/jest":"^29.5.0","@types/node":"^20.19.32","eslint-plugin-sonarjs":"^4.0.3","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^7.0.0","@typescript-eslint/eslint-plugin":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/design-tokens_1.0.1_1783592246518_0.13445270595915182","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@dloizides/design-tokens","version":"1.1.0","keywords":["design-tokens","theme","css-variables","tailwind-preset","tenant-theme","dloizides"],"author":{"name":"dloizides"},"license":"MIT","_id":"@dloizides/design-tokens@1.1.0","maintainers":[{"name":"dloizides","email":"loizidesdemetris@gmail.com"}],"homepage":"https://github.com/openmindednewby/design-tokens#readme","bugs":{"url":"https://github.com/openmindednewby/design-tokens/issues"},"dist":{"shasum":"090f01434c51c66bc5f26e6348a9fd0a565d8e7a","tarball":"https://registry.npmjs.org/@dloizides/design-tokens/-/design-tokens-1.1.0.tgz","fileCount":10,"integrity":"sha512-oWFRv+8Dz2U3sLY9FMU7B1Lsj++xYHizz0U24ooZ1p2YYqZPg3JRdUFxIosp2UjLe6PBHf6CW3qW6FUPYnoydg==","signatures":[{"sig":"MEUCIGSirXzIOMH8AsKjmcbHKK3XV4jqIiz+2bB+p4VfyNT9AiEAjlEqGcIpQ1RyeTNPjbjTVzj5K1/1TvJya8HY3DaZLEQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170039},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"76d8126d48b6e3f0f243db34e36370883ae98630","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"rimraf dist && tsup","clean":"rimraf dist","lint:fix":"eslint src --ext .ts --fix","typecheck":"tsc --noEmit","test:watch":"jest --watch","build:watch":"tsup --watch","deps:health":"npm run deps:outdated && npm run deps:unused","deps:unused":"npx depcheck --ignores \"@types/jest,@types/node,rimraf\"","deps:licenses":"npx license-checker --onlyAllow \"MIT;Apache-2.0;ISC;BSD-2-Clause;BSD-3-Clause;0BSD;Unlicense;CC0-1.0\"","deps:outdated":"npm outdated || exit 0","test:coverage":"jest --coverage","prepublishOnly":"npm run clean && npm run build && npm run test","security:audit":"npm audit --audit-level=high"},"_npmUser":{"name":"dloizides","email":"loizidesdemetris@gmail.com"},"repository":{"url":"git+https://github.com/openmindednewby/design-tokens.git","type":"git"},"_npmVersion":"10.9.3","description":"Framework-agnostic design-token SOURCE for the dloizides.com portfolio. One typed token set per app (aml / erevna / katalogos), seeded byte-for-byte from each app's CURRENT values, emitted in three forms from one source: CSS custom properties (:root) for ","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.0.0","eslint":"^8.57.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.4.0","@types/jest":"^29.5.0","@types/node":"^20.19.32","eslint-plugin-sonarjs":"^4.0.3","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^7.0.0","@typescript-eslint/eslint-plugin":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/design-tokens_1.1.0_1784392549679_0.13824547965044753","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@dloizides/design-tokens","version":"1.2.0","keywords":["design-tokens","theme","css-variables","tailwind-preset","tenant-theme","dloizides"],"author":{"name":"dloizides"},"license":"MIT","_id":"@dloizides/design-tokens@1.2.0","maintainers":[{"name":"dloizides","email":"loizidesdemetris@gmail.com"}],"homepage":"https://github.com/openmindednewby/design-tokens#readme","bugs":{"url":"https://github.com/openmindednewby/design-tokens/issues"},"dist":{"shasum":"ca411334da649cfcd0ad2d24bd0c7404eb768f1a","tarball":"https://registry.npmjs.org/@dloizides/design-tokens/-/design-tokens-1.2.0.tgz","fileCount":10,"integrity":"sha512-t3kD9euUwea4SwAZaPbVTexB7zlgvRaUI+1XrXZ24NVJ9Jd86R1cH6UDCmsKySg2LWqBA1XXJX3khYQd5/I5kg==","signatures":[{"sig":"MEQCIG0avW59pkeGId2jF/cVcLnqmVT86zBEEN6X2Cz9Qf0bAiBgcMS7zvmsusZ6Yl5vwd0wPnipa2NQarfGgvEIUxiTTw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214475},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"d5642df40e6517b44f3819b62c8cbe81a0f306f7","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"rimraf dist && tsup","clean":"rimraf dist","lint:fix":"eslint src --ext .ts --fix","typecheck":"tsc --noEmit","test:watch":"jest --watch","build:watch":"tsup --watch","deps:health":"npm run deps:outdated && npm run deps:unused","deps:unused":"npx depcheck --ignores \"@types/jest,@types/node,rimraf\"","deps:licenses":"npx license-checker --onlyAllow \"MIT;Apache-2.0;ISC;BSD-2-Clause;BSD-3-Clause;0BSD;Unlicense;CC0-1.0\"","deps:outdated":"npm outdated || exit 0","test:coverage":"jest --coverage","prepublishOnly":"npm run clean && npm run build && npm run test","security:audit":"npm audit --audit-level=high"},"_npmUser":{"name":"dloizides","email":"loizidesdemetris@gmail.com"},"repository":{"url":"git+https://github.com/openmindednewby/design-tokens.git","type":"git"},"_npmVersion":"10.9.3","description":"Framework-agnostic design-token SOURCE for the dloizides.com portfolio. One typed token set per app (aml / erevna / katalogos), seeded byte-for-byte from each app's CURRENT values, emitted in three forms from one source: CSS custom properties (:root) for ","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.0.0","eslint":"^8.57.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.4.0","@types/jest":"^29.5.0","@types/node":"^20.19.32","eslint-plugin-sonarjs":"^4.0.3","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^7.0.0","@typescript-eslint/eslint-plugin":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/design-tokens_1.2.0_1784403804942_0.24411859437126493","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@dloizides/design-tokens","version":"1.3.0","keywords":["design-tokens","theme","css-variables","tailwind-preset","tenant-theme","dloizides"],"author":{"name":"dloizides"},"license":"MIT","_id":"@dloizides/design-tokens@1.3.0","maintainers":[{"name":"dloizides","email":"loizidesdemetris@gmail.com"}],"homepage":"https://github.com/openmindednewby/design-tokens#readme","bugs":{"url":"https://github.com/openmindednewby/design-tokens/issues"},"dist":{"shasum":"1ca1120dcfbb92522ce73b81be0792fc0190d2a4","tarball":"https://registry.npmjs.org/@dloizides/design-tokens/-/design-tokens-1.3.0.tgz","fileCount":10,"integrity":"sha512-Yv2iX5GWtSyc0qtCvy/mF4CmYY/v0v8ZIoYP2bXlbFpSlMsSZcQ/vWgMpU+MTyeReEFac0HTzpvvRbuwpO0thA==","signatures":[{"sig":"MEQCIHYnCAQOyP8jRGCWicw9r9wuitzMAq8lfvtfSlYO/jt0AiAgOzNct8QpvmHEyJDPGge/5lHH2hpAkBpiGM0U98FGig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":240065},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"80f98e3fc9feb7087c639b749e388f660e3b4b1f","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"rimraf dist && tsup","clean":"rimraf dist","lint:fix":"eslint src --ext .ts --fix","typecheck":"tsc --noEmit","test:watch":"jest --watch","build:watch":"tsup --watch","deps:health":"npm run deps:outdated && npm run deps:unused","deps:unused":"npx depcheck --ignores \"@types/jest,@types/node,rimraf\"","deps:licenses":"npx license-checker --onlyAllow \"MIT;Apache-2.0;ISC;BSD-2-Clause;BSD-3-Clause;0BSD;Unlicense;CC0-1.0\"","deps:outdated":"npm outdated || exit 0","test:coverage":"jest --coverage","prepublishOnly":"npm run clean && npm run build && npm run test","security:audit":"npm audit --audit-level=high"},"_npmUser":{"name":"dloizides","email":"loizidesdemetris@gmail.com"},"repository":{"url":"git+https://github.com/openmindednewby/design-tokens.git","type":"git"},"_npmVersion":"10.9.3","description":"Framework-agnostic design-token SOURCE for the dloizides.com portfolio. One typed token set per app (aml / erevna / katalogos), seeded byte-for-byte from each app's CURRENT values, emitted in three forms from one source: CSS custom properties (:root) for ","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.0.0","eslint":"^8.57.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.4.0","@types/jest":"^29.5.0","@types/node":"^20.19.32","eslint-plugin-sonarjs":"^4.0.3","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^7.0.0","@typescript-eslint/eslint-plugin":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/design-tokens_1.3.0_1784553290150_0.3739156257209273","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@dloizides/design-tokens","version":"1.4.0","keywords":["design-tokens","theme","css-variables","tailwind-preset","tenant-theme","dloizides"],"author":{"name":"dloizides"},"license":"MIT","_id":"@dloizides/design-tokens@1.4.0","maintainers":[{"name":"dloizides","email":"loizidesdemetris@gmail.com"}],"homepage":"https://github.com/openmindednewby/design-tokens#readme","bugs":{"url":"https://github.com/openmindednewby/design-tokens/issues"},"dist":{"shasum":"7588b19ec3fe82b85fb8a34bd1f2f55290f9c3bb","tarball":"https://registry.npmjs.org/@dloizides/design-tokens/-/design-tokens-1.4.0.tgz","fileCount":10,"integrity":"sha512-LVStMaNwrO06aBifPdvOF7GyI7l4djwRP42XAa8Mp1Vauq5+/Meo/Xz5GdveVG49nNJqC/sUhO6pk0/ethi05w==","signatures":[{"sig":"MEUCIQCnPijUkjdsIDji88d3Zf85lRuScqzxPACcsEaCKbapHwIgLBakMFVMytBBfFieZr2uOE5s9oAxRkC43TAz/VjGSiY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":266670},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"c188b6811527a3cae0e24527827552cca3c00840","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"rimraf dist && tsup","clean":"rimraf dist","lint:fix":"eslint src --ext .ts --fix","typecheck":"tsc --noEmit","test:watch":"jest --watch","build:watch":"tsup --watch","deps:health":"npm run deps:outdated && npm run deps:unused","deps:unused":"npx depcheck --ignores \"@types/jest,@types/node,rimraf\"","deps:licenses":"npx license-checker --onlyAllow \"MIT;Apache-2.0;ISC;BSD-2-Clause;BSD-3-Clause;0BSD;Unlicense;CC0-1.0\"","deps:outdated":"npm outdated || exit 0","test:coverage":"jest --coverage","prepublishOnly":"npm run clean && npm run build && npm run test","security:audit":"npm audit --audit-level=high"},"_npmUser":{"name":"dloizides","email":"loizidesdemetris@gmail.com"},"repository":{"url":"git+https://github.com/openmindednewby/design-tokens.git","type":"git"},"_npmVersion":"10.9.3","description":"Framework-agnostic design-token SOURCE for the dloizides.com portfolio. One typed token set per app (aml / erevna / katalogos), seeded byte-for-byte from each app's CURRENT values, emitted in three forms from one source: CSS custom properties (:root) for ","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.0.0","eslint":"^8.57.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.4.0","@types/jest":"^29.5.0","@types/node":"^20.19.32","eslint-plugin-sonarjs":"^4.0.3","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^7.0.0","@typescript-eslint/eslint-plugin":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/design-tokens_1.4.0_1784655650212_0.5863581983342578","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@dloizides/design-tokens","version":"1.5.0","keywords":["design-tokens","theme","css-variables","tailwind-preset","tenant-theme","dloizides"],"author":{"name":"dloizides"},"license":"MIT","_id":"@dloizides/design-tokens@1.5.0","maintainers":[{"name":"dloizides","email":"loizidesdemetris@gmail.com"}],"homepage":"https://github.com/openmindednewby/design-tokens#readme","bugs":{"url":"https://github.com/openmindednewby/design-tokens/issues"},"dist":{"shasum":"a427a026d8f8bfefb0011674626aebad04e3c2b2","tarball":"https://registry.npmjs.org/@dloizides/design-tokens/-/design-tokens-1.5.0.tgz","fileCount":10,"integrity":"sha512-QU0auk24zJFBtosf/Y6BZiuNW6pEHDsxEz88nAE9n8fy1bJ1rjtyc28GLr7i9gcM+JbIp+Cf1VHkynn7YFeQOg==","signatures":[{"sig":"MEUCICErjKXvpxaWKIViJ87r17MKoxPfvaDbwHwk7zY6/iU2AiEAvkayNbpaqoCh20mt3WNB3EQFzhX3RBn2uKhYXCkta44=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":282023},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"a05f5061efda3cec921dcab252f7f089559eaa60","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"rimraf dist && tsup","clean":"rimraf dist","lint:fix":"eslint src --ext .ts --fix","typecheck":"tsc --noEmit","test:watch":"jest --watch","build:watch":"tsup --watch","deps:health":"npm run deps:outdated && npm run deps:unused","deps:unused":"npx depcheck --ignores \"@types/jest,@types/node,rimraf\"","deps:licenses":"npx license-checker --onlyAllow \"MIT;Apache-2.0;ISC;BSD-2-Clause;BSD-3-Clause;0BSD;Unlicense;CC0-1.0\"","deps:outdated":"npm outdated || exit 0","test:coverage":"jest --coverage","prepublishOnly":"npm run clean && npm run build && npm run test","security:audit":"npm audit --audit-level=high"},"_npmUser":{"name":"dloizides","email":"loizidesdemetris@gmail.com"},"repository":{"url":"git+https://github.com/openmindednewby/design-tokens.git","type":"git"},"_npmVersion":"10.9.3","description":"Framework-agnostic design-token SOURCE for the dloizides.com portfolio. One typed token set per app (aml / erevna / katalogos), seeded byte-for-byte from each app's CURRENT values, emitted in three forms from one source: CSS custom properties (:root) for ","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.0.0","eslint":"^8.57.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.4.0","@types/jest":"^29.5.0","@types/node":"^20.19.32","eslint-plugin-sonarjs":"^4.0.3","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^7.0.0","@typescript-eslint/eslint-plugin":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/design-tokens_1.5.0_1785134241991_0.07004891709142114","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@dloizides/design-tokens","version":"1.6.0","keywords":["design-tokens","theme","css-variables","tailwind-preset","tenant-theme","dloizides"],"author":{"name":"dloizides"},"license":"MIT","_id":"@dloizides/design-tokens@1.6.0","maintainers":[{"name":"dloizides","email":"loizidesdemetris@gmail.com"}],"homepage":"https://github.com/openmindednewby/design-tokens#readme","bugs":{"url":"https://github.com/openmindednewby/design-tokens/issues"},"dist":{"shasum":"1143b3f2310b76866d16307ab187a6aa7e3568fd","tarball":"https://registry.npmjs.org/@dloizides/design-tokens/-/design-tokens-1.6.0.tgz","fileCount":10,"integrity":"sha512-Nv/IzhL7z51ttADwaetkbqnkixkU2ioyBIGUSHwSqSiuYXynizOM9DNF0W9E4vVMqpuyG7MjGuOvwRZKbKeWIQ==","signatures":[{"sig":"MEUCICRda+cYOXYpz2OrZyo9LGISgPT2RLv1TbXxIzJp2865AiEAnMvVEYhCOJ+vXvzE6vHnR3Tnjjq0kVB/S0fQVLFbg3k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":290309},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"271462a57c2b3d56cdf27644c0dc8b7ee0517d05","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"rimraf dist && tsup","clean":"rimraf dist","lint:fix":"eslint src --ext .ts --fix","typecheck":"tsc --noEmit","test:watch":"jest --watch","build:watch":"tsup --watch","deps:health":"npm run deps:outdated && npm run deps:unused","deps:unused":"npx depcheck --ignores \"@types/jest,@types/node,rimraf\"","deps:licenses":"npx license-checker --onlyAllow \"MIT;Apache-2.0;ISC;BSD-2-Clause;BSD-3-Clause;0BSD;Unlicense;CC0-1.0\"","deps:outdated":"npm outdated || exit 0","test:coverage":"jest --coverage","prepublishOnly":"npm run clean && npm run build && npm run test","security:audit":"npm audit --audit-level=high"},"_npmUser":{"name":"dloizides","email":"loizidesdemetris@gmail.com"},"repository":{"url":"git+https://github.com/openmindednewby/design-tokens.git","type":"git"},"_npmVersion":"10.9.3","description":"Framework-agnostic design-token SOURCE for the dloizides.com portfolio. One typed token set per app (aml / erevna / katalogos), seeded byte-for-byte from each app's CURRENT values, emitted in three forms from one source: CSS custom properties (:root) for ","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.0.0","eslint":"^8.57.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.4.0","@types/jest":"^29.5.0","@types/node":"^20.19.32","eslint-plugin-sonarjs":"^4.0.3","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^7.0.0","@typescript-eslint/eslint-plugin":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/design-tokens_1.6.0_1785189461880_0.0689923386774407","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@dloizides/design-tokens","version":"1.7.0","keywords":["design-tokens","theme","css-variables","tailwind-preset","tenant-theme","dloizides"],"author":{"name":"dloizides"},"license":"MIT","_id":"@dloizides/design-tokens@1.7.0","maintainers":[{"name":"dloizides","email":"loizidesdemetris@gmail.com"}],"homepage":"https://github.com/openmindednewby/design-tokens#readme","bugs":{"url":"https://github.com/openmindednewby/design-tokens/issues"},"dist":{"shasum":"d2b9b2f16cb45a4666ceccdcae18824a5230f9b6","tarball":"https://registry.npmjs.org/@dloizides/design-tokens/-/design-tokens-1.7.0.tgz","fileCount":10,"integrity":"sha512-O2snf/4slw3sZTgjI6PDzV5iWu/AMrXZYsi6wORTTQcd6a/tVGB2e5xMXl93HSfaX0aF86/X7QhqujHy9E+Eeg==","signatures":[{"sig":"MEUCIQDGUL1Kl4rZgEEvMqZkqfNRLoBNaVcQbu+hwitWedZtiQIgeP4leXCb2Mm3Kfcy2oeLuTb2uC4fElw3u1AvYhiiCLQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":304774},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"b7d6660a46450e21d7e1a9f6bfe1ddf9ebe75b85","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"rimraf dist && tsup","clean":"rimraf dist","lint:fix":"eslint src --ext .ts --fix","typecheck":"tsc --noEmit","test:watch":"jest --watch","build:watch":"tsup --watch","deps:health":"npm run deps:outdated && npm run deps:unused","deps:unused":"npx depcheck --ignores \"@types/jest,@types/node,rimraf\"","deps:licenses":"npx license-checker --onlyAllow \"MIT;Apache-2.0;ISC;BSD-2-Clause;BSD-3-Clause;0BSD;Unlicense;CC0-1.0\"","deps:outdated":"npm outdated || exit 0","test:coverage":"jest --coverage","prepublishOnly":"npm run clean && npm run build && npm run test","security:audit":"npm audit --audit-level=high"},"_npmUser":{"name":"dloizides","email":"loizidesdemetris@gmail.com"},"repository":{"url":"git+https://github.com/openmindednewby/design-tokens.git","type":"git"},"_npmVersion":"10.9.3","description":"Framework-agnostic design-token SOURCE for the dloizides.com portfolio. One typed token set per app (aml / erevna / katalogos), seeded byte-for-byte from each app's CURRENT values, emitted in three forms from one source: CSS custom properties (:root) for ","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.0.0","eslint":"^8.57.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.4.0","@types/jest":"^29.5.0","@types/node":"^20.19.32","eslint-plugin-sonarjs":"^4.0.3","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^7.0.0","@typescript-eslint/eslint-plugin":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/design-tokens_1.7.0_1785622624083_0.5364571123333857","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@dloizides/design-tokens","version":"1.9.0","keywords":["design-tokens","theme","css-variables","tailwind-preset","tenant-theme","dloizides"],"author":{"name":"dloizides"},"license":"MIT","_id":"@dloizides/design-tokens@1.9.0","maintainers":[{"name":"dloizides","email":"loizidesdemetris@gmail.com"}],"homepage":"https://github.com/openmindednewby/design-tokens#readme","bugs":{"url":"https://github.com/openmindednewby/design-tokens/issues"},"dist":{"shasum":"8390ef77972e8b565fa202d4d91f89c0b8b6a4f0","tarball":"https://registry.npmjs.org/@dloizides/design-tokens/-/design-tokens-1.9.0.tgz","fileCount":10,"integrity":"sha512-VfxgQwft0uxjiuprlhYTRyh/QCe3fhClyYP6sEYhWTngcfDBMBgdVIZr8Hrk+bhnJytjuqopJZpGIxynne1gqA==","signatures":[{"sig":"MEYCIQCIWve0eX6VfWE5Ky2H4rt6Kp97V6kiBoTi5lLWgFCbZwIhAKLT6V3WfTklwxQeREf331cXNb7UdxnvRP5NG9ga+zBi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":305034},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"375d320f86606313e52ff7d3913800cd97c62aea","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"rimraf dist && tsup","clean":"rimraf dist","lint:fix":"eslint src --ext .ts --fix","typecheck":"tsc --noEmit","test:watch":"jest --watch","build:watch":"tsup --watch","deps:health":"npm run deps:outdated && npm run deps:unused","deps:unused":"npx depcheck --ignores \"@types/jest,@types/node,rimraf\"","deps:licenses":"npx license-checker --onlyAllow \"MIT;Apache-2.0;ISC;BSD-2-Clause;BSD-3-Clause;0BSD;Unlicense;CC0-1.0\"","deps:outdated":"npm outdated || exit 0","test:coverage":"jest --coverage","prepublishOnly":"npm run clean && npm run build && npm run test","security:audit":"npm audit --audit-level=high"},"_npmUser":{"name":"dloizides","email":"loizidesdemetris@gmail.com"},"repository":{"url":"git+https://github.com/openmindednewby/design-tokens.git","type":"git"},"_npmVersion":"10.9.3","description":"Framework-agnostic design-token SOURCE for the dloizides.com portfolio. One typed token set per app (aml / erevna / katalogos), seeded byte-for-byte from each app's CURRENT values, emitted in three forms from one source: CSS custom properties (:root) for ","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.0.0","eslint":"^8.57.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.4.0","@types/jest":"^29.5.0","@types/node":"^20.19.32","eslint-plugin-sonarjs":"^4.0.3","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^7.0.0","@typescript-eslint/eslint-plugin":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/design-tokens_1.9.0_1786202795099_0.5843148451531626","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@dloizides/design-tokens","version":"1.10.0","keywords":["design-tokens","theme","css-variables","tailwind-preset","tenant-theme","dloizides"],"author":{"name":"dloizides"},"license":"MIT","_id":"@dloizides/design-tokens@1.10.0","maintainers":[{"name":"dloizides","email":"loizidesdemetris@gmail.com"}],"homepage":"https://github.com/openmindednewby/design-tokens#readme","bugs":{"url":"https://github.com/openmindednewby/design-tokens/issues"},"dist":{"shasum":"e0698cefceb14938218848090c1672d61519643d","tarball":"https://registry.npmjs.org/@dloizides/design-tokens/-/design-tokens-1.10.0.tgz","fileCount":10,"integrity":"sha512-kecrQYsdtWrdbeqCWeXrW4HJC4iHu6/DfP1GW0n1ZWk9aMwR2FGGw9Mt7W16JgcawpjXMxY7bRN0DkkWykpXIw==","signatures":[{"sig":"MEUCIQDOKK5H9SXRx1SFaTCv4hwgtt+F4xHe69xtMJmI3X9iygIgTudakT2izuh9CcZ2FPRFNTkAwsuJ4Rx0V1TXWMaukzM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":323341},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"e0ca5bc28747efdadb6900b146d9ae4e1c4b4bc7","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"rimraf dist && tsup","clean":"rimraf dist","lint:fix":"eslint src --ext .ts --fix","typecheck":"tsc --noEmit","test:watch":"jest --watch","build:watch":"tsup --watch","deps:health":"npm run deps:outdated && npm run deps:unused","deps:unused":"npx depcheck --ignores \"@types/jest,@types/node,rimraf\"","deps:licenses":"npx license-checker --onlyAllow \"MIT;Apache-2.0;ISC;BSD-2-Clause;BSD-3-Clause;0BSD;Unlicense;CC0-1.0\"","deps:outdated":"npm outdated || exit 0","test:coverage":"jest --coverage","prepublishOnly":"npm run clean && npm run build && npm run test","security:audit":"npm audit --audit-level=high"},"_npmUser":{"name":"dloizides","email":"loizidesdemetris@gmail.com"},"repository":{"url":"git+https://github.com/openmindednewby/design-tokens.git","type":"git"},"_npmVersion":"10.9.3","description":"Framework-agnostic design-token SOURCE for the dloizides.com portfolio. One typed token set per app (aml / erevna / katalogos), seeded byte-for-byte from each app's CURRENT values, emitted in three forms from one source: CSS custom properties (:root) for ","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.0.0","eslint":"^8.57.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.4.0","@types/jest":"^29.5.0","@types/node":"^20.19.32","eslint-plugin-sonarjs":"^4.0.3","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^7.0.0","@typescript-eslint/eslint-plugin":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/design-tokens_1.10.0_1789080376220_0.3909612334488921","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"@dloizides/design-tokens","version":"1.11.0","keywords":["design-tokens","theme","css-variables","tailwind-preset","tenant-theme","dloizides"],"author":{"name":"dloizides"},"license":"MIT","_id":"@dloizides/design-tokens@1.11.0","maintainers":[{"name":"dloizides","email":"loizidesdemetris@gmail.com"}],"homepage":"https://github.com/openmindednewby/design-tokens#readme","bugs":{"url":"https://github.com/openmindednewby/design-tokens/issues"},"dist":{"shasum":"ff8f32ce1828342f00968385c762aef1c3386125","tarball":"https://registry.npmjs.org/@dloizides/design-tokens/-/design-tokens-1.11.0.tgz","fileCount":10,"integrity":"sha512-Rn4tPZj0MUzeoDePuF+FauluYpc/7thjFz+4DmPnSasYxdSJ927S5MvcW2bRvOf+qbdpRde/SPs+ZLsv6K5M7g==","signatures":[{"sig":"MEUCIAZWjj8YnbI2Yf4UvOruG2pYBEMuiLkrjH2ccLAbdLCoAiEA2QdVrCIK86YJHyU1rmq+4JaBqPiu4JDoi3pjVkHcyVA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":334063},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"aa343d7f3da069af050db20fd6f1021cf8e0532d","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"rimraf dist && tsup","clean":"rimraf dist","lint:fix":"eslint src --ext .ts --fix","typecheck":"tsc --noEmit","test:watch":"jest --watch","build:watch":"tsup --watch","deps:health":"npm run deps:outdated && npm run deps:unused","deps:unused":"npx depcheck --ignores \"@types/jest,@types/node,rimraf\"","deps:licenses":"npx license-checker --onlyAllow \"MIT;Apache-2.0;ISC;BSD-2-Clause;BSD-3-Clause;0BSD;Unlicense;CC0-1.0\"","deps:outdated":"npm outdated || exit 0","test:coverage":"jest --coverage","prepublishOnly":"npm run clean && npm run build && npm run test","security:audit":"npm audit --audit-level=high"},"_npmUser":{"name":"dloizides","email":"loizidesdemetris@gmail.com"},"repository":{"url":"git+https://github.com/openmindednewby/design-tokens.git","type":"git"},"_npmVersion":"10.9.3","description":"Framework-agnostic design-token SOURCE for the dloizides.com portfolio. One typed token set per app (aml / erevna / katalogos), seeded byte-for-byte from each app's CURRENT values, emitted in three forms from one source: CSS custom properties (:root) for ","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.0.0","eslint":"^8.57.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.4.0","@types/jest":"^29.5.0","@types/node":"^20.19.32","eslint-plugin-sonarjs":"^4.0.3","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^7.0.0","@typescript-eslint/eslint-plugin":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/design-tokens_1.11.0_1789382152156_0.23204190640535094","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"_id":"@dloizides/design-tokens@1.12.0","bugs":{"url":"https://github.com/openmindednewby/design-tokens/issues"},"dist":{"shasum":"7278e10c6c90443b064140335733182977cedcf5","tarball":"https://registry.npmjs.org/@dloizides/design-tokens/-/design-tokens-1.12.0.tgz","fileCount":10,"integrity":"sha512-a8/4jh3L4vwrQeUD5lGdobxINuD7L7Io4V/0NQGajUqRBs9QqW+9SQwRh7wZV914jwl2bPv8wPG6vSBA0SUDQg==","signatures":[{"sig":"MEUCIBkACsctADkpxnUUhpohfXQk81b4HdZZKwICIOp4CZFVAiEAm0OgSWVXKsbI/moSx92MzI7bzxwYyJY9YECDzp0v8RE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDEr7am4SOewjo8jGCC8ShLy3uyHOECwgqf0SNEWFfJwQIgRe+R+vH7zzTLYph22QRy10wop204KFVrfTXQ2XKmblY="}],"unpackedSize":374444},"main":"./dist/index.js","name":"@dloizides/design-tokens","types":"./dist/index.d.ts","author":{"name":"dloizides"},"module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"gitHead":"479d42a70c8294e62b7065ddcbabb135313469b4","license":"MIT","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"rimraf dist && tsup","clean":"rimraf dist","lint:fix":"eslint src --ext .ts --fix","typecheck":"tsc --noEmit","test:watch":"jest --watch","build:watch":"tsup --watch","deps:health":"npm run deps:outdated && npm run deps:unused","deps:unused":"npx depcheck --ignores \"@types/jest,@types/node,rimraf\"","deps:licenses":"npx license-checker --onlyAllow \"MIT;Apache-2.0;ISC;BSD-2-Clause;BSD-3-Clause;0BSD;Unlicense;CC0-1.0\"","deps:outdated":"npm outdated || exit 0","test:coverage":"jest --coverage","prepublishOnly":"npm run clean && npm run build && npm run test","security:audit":"npm audit --audit-level=high"},"version":"1.12.0","_npmUser":{"name":"dloizides","email":"loizidesdemetris@gmail.com"},"homepage":"https://github.com/openmindednewby/design-tokens#readme","keywords":["design-tokens","theme","css-variables","tailwind-preset","tenant-theme","dloizides"],"repository":{"url":"git+https://github.com/openmindednewby/design-tokens.git","type":"git"},"_npmVersion":"10.9.3","description":"Framework-agnostic design-token SOURCE for the dloizides.com portfolio. One typed token set per app (aml / erevna / katalogos), seeded byte-for-byte from each app's CURRENT values, emitted in three forms from one source: CSS custom properties (:root) for ","directories":{},"maintainers":[{"name":"dloizides","email":"loizidesdemetris@gmail.com"}],"sideEffects":false,"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.0.0","eslint":"^8.57.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.4.0","@types/jest":"^29.5.0","@types/node":"^20.19.32","eslint-plugin-sonarjs":"^4.0.3","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^7.0.0","@typescript-eslint/eslint-plugin":"^7.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/design-tokens_1.12.0_1790634253859_0.8847836467503898"}}},"time":{"created":"2026-07-09T10:17:26.315Z","modified":"2026-09-28T22:24:14.113Z","1.0.1":"2026-07-09T10:17:26.681Z","1.1.0":"2026-07-18T16:35:49.808Z","1.2.0":"2026-07-18T19:43:25.088Z","1.3.0":"2026-07-20T13:14:50.287Z","1.4.0":"2026-07-21T17:40:50.489Z","1.5.0":"2026-07-27T06:37:22.184Z","1.6.0":"2026-07-27T21:57:42.026Z","1.7.0":"2026-08-01T22:17:04.224Z","1.9.0":"2026-08-08T15:26:35.247Z","1.10.0":"2026-09-10T22:46:16.400Z","1.11.0":"2026-09-14T10:35:52.287Z","1.12.0":"2026-09-28T22:24:13.935Z"},"bugs":{"url":"https://github.com/openmindednewby/design-tokens/issues"},"author":{"name":"dloizides"},"license":"MIT","homepage":"https://github.com/openmindednewby/design-tokens#readme","keywords":["design-tokens","theme","css-variables","tailwind-preset","tenant-theme","dloizides"],"repository":{"url":"git+https://github.com/openmindednewby/design-tokens.git","type":"git"},"description":"Framework-agnostic design-token SOURCE for the dloizides.com portfolio. One typed token set per app (aml / erevna / katalogos), seeded byte-for-byte from each app's CURRENT values, emitted in three forms from one source: CSS custom properties (:root) for ","maintainers":[{"name":"dloizides","email":"loizidesdemetris@gmail.com"}],"readme":"# @dloizides/design-tokens\n\nFramework-agnostic **design-token source** for the dloizides.com portfolio — the cross-stack\nunifier (task #78). One typed token set per app, seeded **byte-for-byte from each app's current\nvalues**, emitted in **three forms from one source**.\n\n> **#1 rule — behaviour-preserving extraction, not a redesign.** Every preset mirrors the app's\n> existing look. Adopting this package changes **nothing** visually. Runtime tests assert the RN\n> output deep-equals the app's current `DEFAULT_THEME_CONFIG` and the AML CSS reproduces `ui.css`'s\n> `:root` verbatim.\n\nValues only — **no components**. (Shared React components live in `@dloizides/ui-layout`,\n`ui-forms`, `ui-feedback`, `ui-icons`, `ui-tables`.)\n\n## The four output forms\n\nOne `DesignTokens` object per app feeds four pure emitters:\n\n| Form | Emitter | Consumer stack | Output |\n|------|---------|----------------|--------|\n| **(a) CSS custom properties** | `toCssVars(tokens, names, opts?)` | Stack-A vanilla-JS (AML console) | a `:root { --…: …; }` string (+ optional dark-mode block) |\n| **(b) RN-web theme object** | `toRnTheme(tokens)` | RN-web (erevna, katalogos) | a `TenantThemeConfig`-compatible object |\n| **(c) Tailwind preset** | `toTailwindPreset(tokens)` | DOM-React (SyncfusionThemeStudio) | `{ theme: { extend: { colors, borderRadius, boxShadow, fontFamily } } }` |\n| **(d) Shared UI kit theme** | `toUiTheme(tokens, mode?)` | RN-web on the `@dloizides/ui-*` kit (ichnos, kefi) | a `UiTheme` for `ui-feedback`'s `UiProvider` |\n\n```ts\nimport {\n  AML_TOKENS, EREVNA_TOKENS, KATALOGOS_TOKENS, PRESETS,\n  toCssVars, toRnTheme, toTailwindPreset, toUiTheme,\n  AML_CSS_VAR_NAMES, DEFAULT_CSS_VAR_NAMES,\n} from '@dloizides/design-tokens';\n\n// (a) AML console — reproduces wwwroot/shared/ui.css :root exactly\nconst css = toCssVars(AML_TOKENS, AML_CSS_VAR_NAMES);\n\n// (b) RN-web — drop in as the tenant-theme fallback (deep-equals the current default)\nconst rnDefault = toRnTheme(EREVNA_TOKENS);\n\n// (c) DOM-React ThemeStudio — spread into tailwind.config.presets\nconst tw = toTailwindPreset(KATALOGOS_TOKENS);\n\n// (d) Shared UI kit — hand straight to <UiProvider theme={…}>\nconst uiTheme = toUiTheme(MY_TOKENS);\n```\n\n### `toUiTheme` is a LOSSLESS carrier\n\n`toUiTheme` exists because the naive projection an app writes by hand —\n`value => ({ '100': v, '500': v, '700': v })` — collapses a scale to one value, silently\ndiscarding the deeper brand step and every status background tint. A provider fed that way\ncannot reproduce the palette it was built from, which is what stops a shared component\n(`StatCard`, `ThemedTextInput`, `Field`) from rendering on-brand in a consuming app.\n\nEvery token lands in an addressable slot, so an app can project its whole palette back out of\nthe live provider rather than keeping a static parallel copy:\n\n| Token | Slot |\n|-------|------|\n| `primary` / `secondary` / `accent` | `palette.primary` / `.secondary` / `.accent` at `UI_MAIN_STEP` |\n| `onBrand` | `palette.onBrand` |\n| `light.surfaceMuted` (or `dark.*`, per `mode`) | `palette.surfaceMuted` |\n| `semantic.success` … | `semantic.success` at `UI_MAIN_STEP` |\n| `semantic.successBg` … | `semantic.success` at `UI_TINT_STEP` |\n\nThe `UiTheme` shape is declared **structurally** in this package (as `RnThemeConfig` declares\n`TenantThemeConfig`), so the zero-dependency / zero-peer guarantee holds: the token source\nnever depends on the kit it feeds.\n\n## The per-app presets\n\nEach preset is seeded from that app's current source of truth:\n\n| Preset | Seeded from | Notes |\n|--------|-------------|-------|\n| `EREVNA_TOKENS` | `erevna-web/src/theme/presets/default.ts` + `theme/utils/palette.ts` | primary `#005f73`, secondary `#94d2bd`, accent `#008d5c`; full light+dark mode |\n| `KATALOGOS_TOKENS` | `katalogos-web/src/theme/presets/default.ts` | currently **identical** to Erevna; kept separate so they can diverge |\n| `AML_TOKENS` | `PROOViD/AMLService/.../wwwroot/shared/ui.css` `:root` | brand `#4f46e5`; dark app-shell + light workspace + verdict palette + radii/shadows/fonts |\n| `INTERVIEWPREP_TOKENS` | `InterviewPrep/sites/portal/theme.css` (dark `:root` + `[data-theme='light']`) | DARK-FIRST: emit with `toCssVars(INTERVIEWPREP_TOKENS, INTERVIEWPREP_CSS_VAR_NAMES, { lightSelector: \":root[data-theme='light']\" })` (1.12.0); per-mode `brandFill`/`dangerFill`/... carry the site colours |\n\nRN presets carry **no** `typography`/`radii`/`shadows`/`extensions` — the RN theme has no\ncentralized tokens for those today, so they are omitted (nothing to emit → zero change). The AML\npreset carries the richer superset (dark app-shell, ink scale, verdict palette, radii, shadows,\nfonts) in its `extensions` group.\n\n## FINREG module colours (`FINREG_MODULE_COLORS`, 1.5.0)\n\nFINREG is a multi-module product (Payments / Accounting / CRM). Its interim **EDA** logo binds a\ncolour to each module — the three orbits *are* the three modules — so colour reads as module\nidentity rather than as one app's brand `primary`. Those tokens therefore sit **beside** the\nper-app presets, not inside one:\n\n| Module | `base` (fill) | on white | `onWhite` (AA text/icon) | on white |\n|--------|---------------|----------|--------------------------|----------|\n| Payments (cyan) | `#4FD8F0` | 1.69:1 ✗ | `#0C7D91` | 4.82:1 ✓ |\n| Accounting (magenta) | `#E85FBF` | 3.08:1 ✗ | `#D11E9B` | 4.81:1 ✓ |\n| CRM (violet) | `#7B8FF7` | 2.95:1 ✗ | `#4763F4` | 4.82:1 ✓ |\n\nThe `base` hexes are a **decided** design input (the logo), transcribed verbatim. They are light\nfills — none clears the WCAG AA 4.5:1 text floor on white — so anything painting a module colour\nas **text or an icon on white** uses `onWhite`, the darkened same-hue companion. The `onWhite`\nvalues were derived (lightest shade of the hue that still clears AA, carried a little past the\nfloor) and both halves are pinned by `finregModules.test.ts` with their measured ratios, so a\ndrift below AA fails the build. This is the SOURCE of these hexes — consumers read the token, they\ndo not re-declare the literal (`no-raw-color-literal`).\n\n## Motion tokens (`DEFAULT_MOTION`, 1.7.0)\n\nMotion is uniform across every portal, so — unlike colour — there is ONE shipped default rather\nthan one per preset. `DEFAULT_MOTION` carries `durations` (ms) and `easings`:\n\n| Duration | ms | Easing | control points | css |\n|----------|----|--------|----------------|-----|\n| `instant` | 0 | `standard` | `[0.2,0,0,1]` | `cubic-bezier(0.2,0,0,1)` |\n| `fast` | 140 | `decelerate` | `[0,0,0,1]` | `cubic-bezier(0,0,0,1)` |\n| `base` | 200 | `accelerate` | `[0.3,0,1,1]` | `cubic-bezier(0.3,0,1,1)` |\n| `slow` | 300 | | | |\n\n`instant` (0) is the reduced-motion collapse target. Each easing carries **both** a web `css`\n`cubic-bezier(...)` string and the `bezier` `[x1,y1,x2,y2]` control points, so `@dloizides/ui-motion`\ncan build a matching RN `Easing.bezier(...)` and web + native animate on the same curve. `motion` is\nan OPTIONAL field on `DesignTokens` (a preset MAY override it), so existing presets/emitters are\nbyte-identical.\n\n## The token shape (aligned to `TenantThemeConfig`)\n\nThe **core** fields intentionally mirror `@dloizides/tenant-theme-web`'s `TenantThemeConfig`\n(`primary`, `secondary`, `accent`, `semantic`, `light`, `dark`, `typography`, `branding`) so a\nper-tenant theme override layers cleanly on top of a preset — the tenant blob and the preset speak\nthe same field names. Fields the core cannot express (a dark app-shell, an ink scale, sanctions\nverdict triads) live in an optional `extensions` group and are documented as **Stack-A supersets**,\nnot part of the `TenantThemeConfig` contract.\n\nThree additions (1.2.0) are core rather than extensions, because they are needed by any app with\na status badge or a filled brand button — not by one stack:\n\n| Field | Why it needs its own slot |\n|-------|---------------------------|\n| `light.surfaceMuted` / `dark.surfaceMuted` | The inset surface (table header rows, chips, wells) *recedes*; `surface` and `surfaceElevated` both lift. Neither substitutes. |\n| `onBrand` | The foreground on a `primary` fill. A contrast partner of `primary`, so it sits beside it, not in a mode block. Defaults to white; a **pale** primary must set it. |\n| `semantic.successBg` / `warningBg` / `errorBg` / `infoBg` | A status tint is hand-picked for contrast, not derivable from its base — so it cannot be computed and must be carried. |\n\nAll optional, and every emitter emits them **only** when a preset declares them, so presets that\npredate 1.2.0 produce byte-identical output.\n\n## The cross-stack naming contract (#78b)\n\nDifferent stacks use different CSS-variable names for the same token. `toCssVars` takes a\n**name map** (`CssVarNames`) that says which CSS variable each token field emits as; a field mapped\nto `undefined` is skipped. Two maps ship:\n\n- **`DEFAULT_CSS_VAR_NAMES`** — canonical kebab names (`--primary`, `--background`, `--radius`, …),\n  with a dark-mode block. Adopt these for a fresh consumer.\n- **`AML_CSS_VAR_NAMES`** — the AML console's existing `ui.css` names, so nothing there changes.\n\n### AML name-mapping table (core → `ui.css` variable)\n\n| Token field | AML CSS var | Note |\n|-------------|-------------|------|\n| `primary` | `--brand` | |\n| `secondary`, `accent` | *(skipped)* | AML is single-brand; `ui.css` never reads them |\n| `semantic.success/warning/error` | *(via `--ok`/`--warn`/`--bad`)* | emitted from the `verdict` extension |\n| `semantic.info` | *(skipped)* | no AML variable |\n| `light.background` | `--bg` | |\n| `light.surface` | `--surface` | |\n| `light.surfaceElevated` | *(via `--surface-2`)* | emitted from `workspace.surfaceAlt` |\n| `light.text` | *(via `--ink`)* | emitted from `ink.base` |\n| `light.textSecondary` | *(via `--ink-soft`)* | emitted from `ink.soft` |\n| `light.border` | `--line` | |\n| `light.divider` | *(skipped)* | AML reuses `--line` |\n| `dark.*` | *(skipped)* | AML has no light/dark toggle; its dark shell is the `shell` extension in `:root` |\n| `radii.{xs,sm,md,lg,pill}` | `--r-xs`, `--r-sm`, `--r`, `--r-lg`, `--r-pill` | |\n| `shadows.{sm,md,pop}` | `--sh-1`, `--sh-2`, `--sh-pop` | |\n| `typography.fontFamily` / `monoFamily` | `--font` / `--mono` | |\n| `extensions.shell.*` | `--shell`, `--shell-2`, `--shell-line`, `--on-shell`, `--on-shell-dim` | |\n| `extensions.brand.*` | `--brand-press`, `--brand-soft`, `--brand-ring` | |\n| `extensions.ink.*` | `--ink`, `--ink-soft`, `--ink-faint`, `--ink-2` | |\n| `extensions.workspace.*` | `--surface-2`, `--line-strong` | |\n| `extensions.verdict.*` | `--ok*`, `--warn*`, `--bad*` (base/soft/ink) | |\n\n### Open naming decisions (need a human call before wider adoption)\n\nThese were resolved conservatively to guarantee zero change, but a human should confirm the\nintended long-term semantics:\n\n1. **AML `secondary`/`accent`** — AML has a single brand. The preset mirrors `--brand` into both so\n   the core shape is complete, but `ui.css` reads neither. If AML ever gains a real secondary\n   brand, set it here.\n2. **AML `dark` = the app-shell.** AML has a dark shell over a light workspace, **not** a\n   light/dark *mode toggle*. The preset seeds `dark` from the shell so the shape is complete, and\n   the AML name map omits `dark*` so no dark-mode block is emitted (the shell is emitted from the\n   `shell` extension in `:root`). If a real AML dark mode is introduced, this needs revisiting.\n3. **`semantic.info`** — AML has no `info` colour; it mirrors `--brand`. Confirm before relying on\n   `info` in AML.\n4. **RN `radii`/`shadows`.** The RN apps have no centralized radius/shadow tokens today, so the RN\n   presets omit them. If RN adopts a radius/shadow scale later, decide whether it should share\n   AML's values or define its own.\n\n## Adoption (separate tasks — this package ships values only)\n\nThis package does **not** modify any consuming app. Adoption is tracked separately:\n- AML: replace the hand-written `:root` in `ui.css` with `toCssVars(AML_TOKENS, AML_CSS_VAR_NAMES)` output.\n- erevna/katalogos: import `toRnTheme(EREVNA_TOKENS)` as the `defaultThemeConfig` fallback.\n- ThemeStudio: spread `toTailwindPreset(...)` into `tailwind.config`'s `presets`.\n\n## Scripts\n\n`npm run build` (tsup → CJS+ESM+d.ts), `npm test` (jest, 100% coverage), `npm run lint`,\n`npm run typecheck`. Publish via `./publish.ps1 patch|minor|major`.\n","readmeFilename":"README.md"}