{"_id":"@adenyrr/astro-sovereign-tty","_rev":"3-1938dff5f0a6cdeb4c8d35e931e3b7f6","name":"@adenyrr/astro-sovereign-tty","dist-tags":{"latest":"3.0.1"},"versions":{"2.0.1":{"name":"@adenyrr/astro-sovereign-tty","version":"2.0.1","license":"SEE LICENSE IN LICENSE","_id":"@adenyrr/astro-sovereign-tty@2.0.1","maintainers":[{"name":"adenyrr","email":"adenyrr@proton.me"}],"homepage":"https://github.com/adenyrr/astro-sovereign-tty#readme","bugs":{"url":"https://github.com/adenyrr/astro-sovereign-tty/issues"},"dist":{"shasum":"5af0a282336196b501c1710f75455486e3af01b8","tarball":"https://registry.npmjs.org/@adenyrr/astro-sovereign-tty/-/astro-sovereign-tty-2.0.1.tgz","fileCount":36,"integrity":"sha512-ppyOa7V3tAh5FuNccIwDlKgX2eMN/5ZIHctmOxpovMg8cCjiD/Wg/LKydYEwRTTZC/U+lcZ4IMIxyJFTmay+XQ==","signatures":[{"sig":"MEUCIQCvQzFAGu2qBu2/3efSK1+pf3Sr99bOVQUHtKmqJJkrAQIgRlLYIx7HiRA6QIcrj1ntKaB89/uWpdR7Ma0mX5vcHXU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":124840},"type":"module","engines":{"node":">=22.12.0"},"exports":{".":"./src/index.ts","./i18n":"./src/i18n.ts","./base.css":"./src/styles/base.css","./print.css":"./src/styles/print.css","./safe-href":"./src/utils/safe-href.ts","./compat.css":"./src/styles/compat.css","./navigation":"./src/utils/navigation.ts","./styles.css":"./src/styles/styles.css","./tokens.css":"./src/styles/tokens.css","./Fonts.astro":"./src/components/Fonts.astro","./Footer.astro":"./src/components/Footer.astro","./Header.astro":"./src/components/Header.astro","./tailwind.css":"./src/styles/tailwind.css","./components.css":"./src/styles/components.css","./themes/docu.css":"./src/styles/themes/docu.css","./Animations.astro":"./src/components/Animations.astro","./themes/train.css":"./src/styles/themes/train.css","./ThemeScript.astro":"./src/components/ThemeScript.astro","./ThemeToggle.astro":"./src/components/ThemeToggle.astro","./themes/adenyrr.css":"./src/styles/themes/adenyrr.css","./AmbientBackground.astro":"./src/components/AmbientBackground.astro","./ReadingModeToggle.astro":"./src/components/ReadingModeToggle.astro"},"gitHead":"cbf3a799415ec81ee3f5f3510a6df4a68be794b6","scripts":{"dev":"astro dev --root \"$INIT_CWD/playground\"","lint":"eslint . && stylelint \"src/**/*.{css,astro}\" \"playground/**/*.{css,astro}\"","test":"vitest run","check":"astro check && tsc --noEmit","format":"prettier --check .","verify":"npm run format && npm run lint && npm run check && npm run test && npm run test:tokens","test:a11y":"npm run build:playground && playwright test","format:fix":"prettier --write .","test:fonts":"node scripts/check-fonts.mjs","test:tokens":"node scripts/check-contrast.mjs","test:package":"node scripts/check-package.mjs","build:playground":"astro build --root playground","test:performance":"node scripts/run-lighthouse.mjs","preview:playground":"node scripts/serve-playground.mjs"},"_npmUser":{"name":"adenyrr","email":"adenyrr@proton.me"},"overrides":{"@typescript-eslint/scope-manager":"8.55.0"},"repository":{"url":"git+https://github.com/adenyrr/astro-sovereign-tty.git","type":"git"},"_npmVersion":"10.9.0","description":"Accessible sovereign terminal-style UI components and themes for Astro","directories":{},"_nodeVersion":"22.12.0","dependencies":{"@lucide/astro":"^1.33.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"astro":"^7.2.4","eslint":"9.39.4","vitest":"^4.0.18","globals":"^16.4.0","prettier":"^3.9.6","stylelint":"^17.14.1","@eslint/js":"9.39.4","typescript":"^5.9.2","tailwindcss":"^4.1.18","postcss-html":"^2.0.0","@astrojs/check":"^0.9.6","@playwright/test":"1.62.1","typescript-eslint":"8.55.0","eslint-plugin-astro":"1.7.0","@axe-core/playwright":"4.13.0","prettier-plugin-astro":"^0.14.1","stylelint-config-standard":"^40.0.0"},"peerDependencies":{"astro":"^6.2.0 || ^7.0.0","tailwindcss":"^4.1.18"},"peerDependenciesMeta":{"tailwindcss":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/astro-sovereign-tty_2.0.1_1787825795285_0.578786069528636","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"@adenyrr/astro-sovereign-tty","version":"2.1.2","license":"SEE LICENSE IN LICENSE","_id":"@adenyrr/astro-sovereign-tty@2.1.2","maintainers":[{"name":"adenyrr","email":"adenyrr@proton.me"}],"homepage":"https://github.com/adenyrr/astro-sovereign-tty#readme","bugs":{"url":"https://github.com/adenyrr/astro-sovereign-tty/issues"},"dist":{"shasum":"6baf415a41e676942b40c57d6342e19b57fb008a","tarball":"https://registry.npmjs.org/@adenyrr/astro-sovereign-tty/-/astro-sovereign-tty-2.1.2.tgz","fileCount":36,"integrity":"sha512-6DyTwQH2o9yDkVUPfbpYp1QiGWFvi3REjLk10+XJvLqzdONQ6hlvsW63TLbc7s6DIHP2uV2mAgPhfZxr9i/Bvg==","signatures":[{"sig":"MEUCIDzjjdPzqiPvi38OBuNanPbskLiNbkcNqrUI9FBhCi7PAiEAsg03VmkxQ76Sv8pWazu1xVe/gqfyr2YAKc5OLkM8xDo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126023},"type":"module","engines":{"node":">=22.12.0"},"exports":{".":"./src/index.ts","./i18n":"./src/i18n.ts","./base.css":"./src/styles/base.css","./print.css":"./src/styles/print.css","./safe-href":"./src/utils/safe-href.ts","./compat.css":"./src/styles/compat.css","./navigation":"./src/utils/navigation.ts","./styles.css":"./src/styles/styles.css","./tokens.css":"./src/styles/tokens.css","./Fonts.astro":"./src/components/Fonts.astro","./Footer.astro":"./src/components/Footer.astro","./Header.astro":"./src/components/Header.astro","./tailwind.css":"./src/styles/tailwind.css","./components.css":"./src/styles/components.css","./themes/docu.css":"./src/styles/themes/docu.css","./Animations.astro":"./src/components/Animations.astro","./themes/train.css":"./src/styles/themes/train.css","./ThemeScript.astro":"./src/components/ThemeScript.astro","./ThemeToggle.astro":"./src/components/ThemeToggle.astro","./themes/adenyrr.css":"./src/styles/themes/adenyrr.css","./AmbientBackground.astro":"./src/components/AmbientBackground.astro","./ReadingModeToggle.astro":"./src/components/ReadingModeToggle.astro"},"gitHead":"c57639732061a74bed17f3f65faf8f928c651276","scripts":{"dev":"astro dev --root \"$INIT_CWD/playground\"","lint":"eslint . && stylelint \"src/**/*.{css,astro}\" \"playground/**/*.{css,astro}\"","test":"vitest run","check":"astro check && tsc --noEmit","format":"prettier --check .","verify":"npm run format && npm run lint && npm run check && npm run test && npm run test:tokens","test:a11y":"npm run build:playground && playwright test","format:fix":"prettier --write .","test:fonts":"node scripts/check-fonts.mjs","test:tokens":"node scripts/check-contrast.mjs","test:package":"node scripts/check-package.mjs","build:playground":"astro build --root playground","test:performance":"node scripts/run-lighthouse.mjs","preview:playground":"node scripts/serve-playground.mjs"},"_npmUser":{"name":"adenyrr","email":"adenyrr@proton.me"},"overrides":{"@typescript-eslint/scope-manager":"8.55.0"},"repository":{"url":"git+https://github.com/adenyrr/astro-sovereign-tty.git","type":"git"},"_npmVersion":"10.9.0","description":"Accessible sovereign terminal-style UI components and themes for Astro","directories":{},"_nodeVersion":"22.12.0","dependencies":{"@lucide/astro":"^1.33.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"astro":"^7.2.4","eslint":"9.39.4","vitest":"^4.0.18","globals":"^16.4.0","prettier":"^3.9.6","stylelint":"^17.14.1","@eslint/js":"9.39.4","typescript":"^5.9.2","tailwindcss":"^4.1.18","postcss-html":"^2.0.0","@astrojs/check":"^0.9.6","@playwright/test":"1.62.1","typescript-eslint":"8.55.0","eslint-plugin-astro":"1.7.0","@axe-core/playwright":"4.13.0","prettier-plugin-astro":"^0.14.1","stylelint-config-standard":"^40.0.0"},"peerDependencies":{"astro":"^6.2.0 || ^7.0.0","tailwindcss":"^4.1.18"},"peerDependenciesMeta":{"tailwindcss":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/astro-sovereign-tty_2.1.2_1787837797220_0.2106482037988886","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@adenyrr/astro-sovereign-tty","version":"3.0.1","description":"Accessible terminal-inspired UI components and themes for Astro","type":"module","scripts":{"build":"tsc --project tsconfig.build.json","check":"astro check && tsc --noEmit","lint":"eslint . && stylelint \"src/**/*.{css,astro}\" \"playground/**/*.{css,astro}\"","format":"prettier --check .","format:fix":"prettier --write .","test":"vitest run","test:a11y":"npm run build:playground && playwright test","test:tokens":"node scripts/check-contrast.mjs","test:fonts":"node scripts/check-fonts.mjs","test:performance":"node scripts/run-lighthouse.mjs","test:package":"npm run build && node scripts/check-package.mjs && publint run --strict && attw --pack --profile node16 --entrypoints . ./integration ./i18n ./safe-href ./navigation ./csp --ignore-rules false-cjs cjs-resolves-to-esm","test:tarball":"npm run build && node scripts/test-tarball.mjs","dev":"astro dev --root \"$INIT_CWD/playground\"","build:playground":"astro build --root playground","preview:playground":"node scripts/serve-playground.mjs","verify":"npm run format && npm run lint && npm run check && npm run test && npm run test:tokens","prepack":"npm run build"},"sideEffects":["**/*.css","**/*.astro"],"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./integration":{"types":"./dist/integration.d.ts","import":"./dist/integration.js","default":"./dist/integration.js"},"./i18n":{"types":"./dist/i18n.d.ts","import":"./dist/i18n.js","default":"./dist/i18n.js"},"./safe-href":{"types":"./dist/utils/safe-href.d.ts","import":"./dist/utils/safe-href.js","default":"./dist/utils/safe-href.js"},"./navigation":{"types":"./dist/utils/navigation.d.ts","import":"./dist/utils/navigation.js","default":"./dist/utils/navigation.js"},"./csp":{"types":"./dist/utils/csp.d.ts","import":"./dist/utils/csp.js","default":"./dist/utils/csp.js"},"./package.json":"./package.json","./styles.css":"./src/styles/styles.css","./global.css":"./src/styles/global.css","./tokens.css":"./src/styles/tokens.css","./base.css":"./src/styles/base.css","./components.css":"./src/styles/components.css","./tailwind.css":"./src/styles/tailwind.css","./compat.css":"./src/styles/compat.css","./print.css":"./src/styles/print.css","./themes/adenyrr.css":"./src/styles/themes/adenyrr.css","./themes/docu.css":"./src/styles/themes/docu.css","./themes/train.css":"./src/styles/themes/train.css","./Header.astro":"./src/components/Header.astro","./Footer.astro":"./src/components/Footer.astro","./ThemeToggle.astro":"./src/components/ThemeToggle.astro","./ThemeScript.astro":"./src/components/ThemeScript.astro","./Fonts.astro":"./src/components/Fonts.astro","./ReadingModeToggle.astro":"./src/components/ReadingModeToggle.astro","./AmbientBackground.astro":"./src/components/AmbientBackground.astro","./Animations.astro":"./src/components/Animations.astro"},"peerDependencies":{"astro":"^6.2.0 || ^7.0.0","tailwindcss":"^4.1.18"},"peerDependenciesMeta":{"tailwindcss":{"optional":true}},"dependencies":{"@lucide/astro":"^1.33.0"},"devDependencies":{"@arethetypeswrong/cli":"^0.18.5","@astrojs/check":"^0.9.6","@axe-core/playwright":"4.13.0","@eslint/js":"9.39.4","@playwright/test":"1.62.1","astro":"^7.2.4","eslint":"9.39.4","eslint-plugin-astro":"1.7.0","globals":"^16.4.0","postcss-html":"^2.0.0","prettier":"^3.9.6","prettier-plugin-astro":"^0.14.1","publint":"^0.3.24","stylelint":"^17.14.1","stylelint-config-standard":"^40.0.0","tailwindcss":"^4.1.18","typescript":"^5.9.2","typescript-eslint":"8.55.0","vitest":"^4.0.18"},"overrides":{"@typescript-eslint/scope-manager":"8.55.0"},"engines":{"node":">=22.12.0"},"license":"Apache-2.0","author":{"name":"adenyrr","email":"adenyrr@proton.me"},"keywords":["astro","astro-component","design-system","accessibility","wcag","theme","terminal","css-tokens"],"repository":{"type":"git","url":"git+https://github.com/adenyrr/astro-sovereign-tty.git"},"homepage":"https://github.com/adenyrr/astro-sovereign-tty#readme","bugs":{"url":"https://github.com/adenyrr/astro-sovereign-tty/issues"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_id":"@adenyrr/astro-sovereign-tty@3.0.1","gitHead":"5f88b2b1c017fba2b011492a1361cff384a98b0f","_nodeVersion":"22.12.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-tbmR2OyoeLZRqbkMzDYEdrKhNKlVTIpA76MNkJtU250R9SywzZdEiq2DJ7TEJOnDa4D9Pbcn6/tW4in77WElzA==","shasum":"b28467ea6bb274528998f1684e57989fa301197c","tarball":"https://registry.npmjs.org/@adenyrr/astro-sovereign-tty/-/astro-sovereign-tty-3.0.1.tgz","fileCount":69,"unpackedSize":165617,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIB8udfft3XmwqBImjZ3rEgNUprYt8Mni9nW55POwwQM7AiEAo2uUK/+j8r36sWKgClrxEjqr2+FLGeTLN02wNj2dJJE="}]},"_npmUser":{"name":"adenyrr","email":"adenyrr@proton.me"},"directories":{},"maintainers":[{"name":"adenyrr","email":"adenyrr@proton.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/astro-sovereign-tty_3.0.1_1788696257378_0.3269471702132418"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-27T10:16:35.136Z","modified":"2026-09-06T12:04:17.652Z","2.0.1":"2026-08-27T10:16:35.449Z","2.1.2":"2026-08-27T13:36:37.362Z","3.0.1":"2026-09-06T12:04:17.511Z"},"bugs":{"url":"https://github.com/adenyrr/astro-sovereign-tty/issues"},"license":"Apache-2.0","homepage":"https://github.com/adenyrr/astro-sovereign-tty#readme","repository":{"type":"git","url":"git+https://github.com/adenyrr/astro-sovereign-tty.git"},"description":"Accessible terminal-inspired UI components and themes for Astro","maintainers":[{"name":"adenyrr","email":"adenyrr@proton.me"}],"readme":"# @adenyrr/astro-sovereign-tty\n\n[![npm version](https://img.shields.io/npm/v/%40adenyrr%2Fastro-sovereign-tty)](https://www.npmjs.com/package/@adenyrr/astro-sovereign-tty)\n[![Pipeline](https://github.com/adenyrr/astro-sovereign-tty/actions/workflows/verify.yml/badge.svg?branch=main)](https://github.com/adenyrr/astro-sovereign-tty/actions/workflows/verify.yml)\n[![Release v3.0.1](https://img.shields.io/badge/Release-v3.0.1-blue)](https://github.com/adenyrr/astro-sovereign-tty/releases/tag/v3.0.1)\n[![Astro](https://img.shields.io/badge/Astro-6%20%7C%207-purple)](https://astro.build)\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue)](LICENSE)\n\nShared terminal-inspired visual chrome for Astro sites.\n\nThis package provides reusable headers, footers, light/dark tokens, reading mode, ambient backgrounds, motion accents, and typography for Astro applications. Named themes remain optional presets.\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/adenyrr/astro-sovereign-tty/v3.0.1/preview.svg\" alt=\"Preview of @adenyrr/astro-sovereign-tty: terminal chrome rendered in light and dark themes.\" width=\"1000\" />\n</p>\n\n## Features\n\n- Shared workstation-style header and footer chrome\n- Light and dark theme support via CSS variables and `light-dark()`\n- Binary reading mode: Inclusive Sans normally, Atkinson Hyperlegible Next on demand\n- Ambient background and subtle motion treatment\n- Layered design tokens and global styling with no required Tailwind runtime\n- Mobile drawer navigation with accessible interaction patterns\n- Type-safe configuration via `SiteChromeConfig`\n\n## Requirements\n\n- Node.js `>= 22.12.0`\n- Astro `^6.2.0 || ^7.0.0`\n- A project using Astro pages or layouts\n\n## Installation\n\nInstall the package in your Astro app:\n\n```bash\nnpm install @adenyrr/astro-sovereign-tty\n```\n\n## Dependencies\n\nThe only runtime dependency is `@lucide/astro`. Font files are resolved and self-hosted by each consumer through Astro Fonts.\n\nPeer dependency:\n\n- `astro`: `^6.2.0 || ^7.0.0`\n- `tailwindcss`: `^4.1.18` (optional, only for `tailwind.css`)\n\nDevelopment dependencies used for validation:\n\n- `@astrojs/check`\n- `typescript`\n\n## Usage\n\nAdd the font integration once to `astro.config.mjs`. It supplies the Astro Fonts configuration required by `<Fonts />`:\n\n```js\nimport { defineConfig } from 'astro/config';\nimport sovereignTty from '@adenyrr/astro-sovereign-tty/integration';\n\nexport default defineConfig({ integrations: [sovereignTty()] });\n```\n\nImport the global theme stylesheet once in your Astro layout or app root:\n\n```astro\n---\nimport '@adenyrr/astro-sovereign-tty/styles.css';\nimport Header from '@adenyrr/astro-sovereign-tty/Header.astro';\nimport Footer from '@adenyrr/astro-sovereign-tty/Footer.astro';\nimport Fonts from '@adenyrr/astro-sovereign-tty/Fonts.astro';\nimport ThemeScript from '@adenyrr/astro-sovereign-tty/ThemeScript.astro';\nimport type { SiteChromeConfig } from '@adenyrr/astro-sovereign-tty';\n\nconst config: SiteChromeConfig = {\n  locale: 'en', // default; use `fr` or override individual `labels`\n  features: {\n    readingMode: true,\n  },\n  appearance: {\n    ambientBackground: true,\n  },\n  header: {\n    show: true,\n    brandName: 'Example',\n    brandHost: '@site',\n    homeUrl: '/',\n    hideOnScroll: true,\n    basePath: '/',\n    navigation: [\n      { label: 'Blog', route: '/blog', enabled: true },\n      { label: 'Projects', route: '/projects', enabled: true },\n      { label: 'GitHub', url: 'https://github.com/example', external: true, enabled: true },\n    ],\n    socialLinks: [\n      { label: 'GitHub', icon: 'Github', url: 'https://github.com/example', enabled: true },\n    ],\n  },\n  footer: {\n    show: true,\n    author: 'Example',\n    authorUrl: 'https://example.com',\n    signatureCommand: 'whoami',\n    note: 'Building systems that feel like a workspace.',\n    navigationLabel: 'Navigation',\n    connectLabel: 'Connect',\n    backToTopLabel: 'Back to top',\n    shellPrompt: 'example',\n    branch: 'main',\n  },\n};\n---\n\n<html lang=\"en\">\n  <head>\n    <ThemeScript />\n    <Fonts />\n    <meta name=\"color-scheme\" content=\"light dark\" />\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n  </head>\n  <body>\n    <Header config={config} currentPath={Astro.url.pathname} />\n    <main id=\"main\">\n      <slot />\n    </main>\n    <Footer config={config} />\n  </body>\n</html>\n```\n\n### Available exports\n\nThe package exposes the following entry points:\n\n- `@adenyrr/astro-sovereign-tty`\n- `@adenyrr/astro-sovereign-tty/integration`\n- `@adenyrr/astro-sovereign-tty/i18n`\n- `@adenyrr/astro-sovereign-tty/navigation`\n- `@adenyrr/astro-sovereign-tty/safe-href`\n- `@adenyrr/astro-sovereign-tty/csp`\n- `@adenyrr/astro-sovereign-tty/package.json`\n- `@adenyrr/astro-sovereign-tty/styles.css`\n- `@adenyrr/astro-sovereign-tty/global.css` (deprecated alias)\n- `@adenyrr/astro-sovereign-tty/tokens.css`\n- `@adenyrr/astro-sovereign-tty/base.css`\n- `@adenyrr/astro-sovereign-tty/components.css`\n- `@adenyrr/astro-sovereign-tty/tailwind.css` (optional)\n- `@adenyrr/astro-sovereign-tty/compat.css` (legacy vaul styles)\n- `@adenyrr/astro-sovereign-tty/print.css` (opt-in)\n- `@adenyrr/astro-sovereign-tty/themes/adenyrr.css`\n- `@adenyrr/astro-sovereign-tty/themes/docu.css`\n- `@adenyrr/astro-sovereign-tty/themes/train.css`\n- `@adenyrr/astro-sovereign-tty/Header.astro`\n- `@adenyrr/astro-sovereign-tty/Footer.astro`\n- `@adenyrr/astro-sovereign-tty/ThemeToggle.astro`\n- `@adenyrr/astro-sovereign-tty/ThemeScript.astro`\n- `@adenyrr/astro-sovereign-tty/Fonts.astro`\n- `@adenyrr/astro-sovereign-tty/ReadingModeToggle.astro`\n- `@adenyrr/astro-sovereign-tty/AmbientBackground.astro`\n- `@adenyrr/astro-sovereign-tty/Animations.astro`\n\n## Best practices\n\n- Import the stylesheet once at the app root, not in every page component.\n- Import Tailwind, vaul compatibility, and print contracts only where the consumer needs them; see [`docs/tokens.md`](docs/tokens.md).\n- Add `sovereignTty()` before rendering `Fonts`; use the manual configuration in [`docs/fonts.md`](docs/fonts.md) only when replacing one of its fonts.\n- Keep `currentPath` aligned with the route you are rendering for correct active nav state.\n- Use `SiteChromeConfig` instead of ad hoc object literals when building shared layouts.\n- Respect `enabled` and feature flags to keep content and navigation context-aware.\n- Keep reading content compatible with the 66-character measure and WCAG Text Spacing overrides.\n- Prefer semantic markup and accessible labels for navigation and actions.\n- Treat configurable links as untrusted input: the chrome applies the exported `safeHref()` guard.\n- Keep the package on the supported Astro major versions to avoid mismatched rendering behavior.\n- With Astro CSP enabled, use `<ThemeScript csp />`; without CSP, the default `<ThemeScript />` is intentionally silent.\n- Follow the tested WCAG contract and consumer responsibilities in [`docs/accessibility.md`](docs/accessibility.md).\n\n### Site themes\n\nLoad one static brand contract after `styles.css`; no runtime class or JavaScript is required:\n\n```astro\n---\nimport '@adenyrr/astro-sovereign-tty/styles.css';\nimport '@adenyrr/astro-sovereign-tty/themes/train.css';\n---\n```\n\n| @adenyrr/astro-sovereign-tty | Astro      | adenyrr.me           | docu              | training           |\n| ---------------------------- | ---------- | -------------------- | ----------------- | ------------------ |\n| 3.x                          | 6.2+ / 7.x | `themes/adenyrr.css` | `themes/docu.css` | `themes/train.css` |\n\n### Migrating from 1.x and 2.x\n\nVersion 3 adds the font integration and makes CSP hashing explicit. Follow the [v3 migration guide](docs/migration-v2.md).\n\n## Development\n\nClone the repository and install dependencies:\n\n```bash\ngit clone https://github.com/adenyrr/astro-sovereign-tty.git\ncd astro-sovereign-tty\nnpm install\nnpm run verify\n```\n\nThe project validates against Astro and TypeScript via:\n\n```bash\nnpm run verify\n```\n\n## Versioning and release\n\nCurrent release: `v3.0.1`\n\nStable tags are published as the public scoped npm package `@adenyrr/astro-sovereign-tty`. The release pipeline expects a protected, masked `NPM_TOKEN` permitted to publish this package to `registry.npmjs.org`.\n\n## License\n\nThis project is licensed under the [Apache License 2.0](LICENSE).\n\n## Public API stability\n\nEvery entry point listed above, exported TypeScript type, component prop, and token documented in [`docs/tokens.md`](docs/tokens.md) is a SemVer contract. Removing or changing one incompatibly requires a new major version. Named themes are optional presets, not a required identity layer.\n","readmeFilename":"README.md","keywords":["astro","astro-component","design-system","accessibility","wcag","theme","terminal","css-tokens"],"author":{"name":"adenyrr","email":"adenyrr@proton.me"}}