eidotter 0.40.2 → 0.41.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -6
- package/dist/components/Accordion/components/AccordionFill.js +1 -1
- package/dist/components/Accordion/components/Section.js +1 -1
- package/dist/components/Alert/components/Alert.js +3 -2
- package/dist/components/Brand/components/Logo.d.ts +7 -7
- package/dist/components/Brand/components/Logo.js +10 -15
- package/dist/components/Brand/components/LogoGeometry.d.ts +28 -0
- package/dist/components/Brand/components/LogoGeometry.js +78 -0
- package/dist/components/Brand/components/Mark.d.ts +13 -6
- package/dist/components/Brand/components/Mark.js +14 -10
- package/dist/components/Brand/components/Wordmark.js +1 -1
- package/dist/components/Brand/components/markGeometry.d.ts +15 -0
- package/dist/components/Brand/components/markGeometry.js +20 -7
- package/dist/components/Breadcrumb/components/Breadcrumb.js +2 -2
- package/dist/components/Button/components/Button.js +1 -1
- package/dist/components/Card/components/Card.d.ts +5 -0
- package/dist/components/Card/components/Card.js +8 -2
- package/dist/components/CmdPalette/components/CmdPalette.d.ts +4 -3
- package/dist/components/CmdPalette/components/CmdPalette.js +17 -12
- package/dist/components/DecayStrip/components/DecayStrip.js +1 -1
- package/dist/components/DosDialog/components/DosDialog.d.ts +90 -0
- package/dist/components/DosDialog/components/DosDialog.js +68 -0
- package/dist/components/DosDialog/components/index.d.ts +2 -0
- package/dist/components/DosDialog/components/index.js +1 -0
- package/dist/components/DosDialog/index.d.ts +2 -0
- package/dist/components/DosDialog/index.js +1 -0
- package/dist/components/DosFigure/components/DosFigure.d.ts +2 -2
- package/dist/components/DosFigure/components/DosFigure.js +14 -7
- package/dist/components/DosWindow/components/DosWindow.d.ts +39 -0
- package/dist/components/DosWindow/components/DosWindow.js +23 -0
- package/dist/components/DosWindow/components/index.d.ts +2 -0
- package/dist/components/DosWindow/components/index.js +1 -0
- package/dist/components/DosWindow/index.d.ts +2 -0
- package/dist/components/DosWindow/index.js +1 -0
- package/dist/components/FilterBar/components/FilterBar.d.ts +7 -4
- package/dist/components/Footer/components/Footer.js +1 -1
- package/dist/components/Gauge/components/Gauge.js +13 -2
- package/dist/components/Header/components/Header.d.ts +29 -1
- package/dist/components/Header/components/Header.js +20 -5
- package/dist/components/Icon/components/Icon.d.ts +9 -0
- package/dist/components/Icon/components/Icon.js +7 -3
- package/dist/components/IconButton/components/IconButton.d.ts +44 -0
- package/dist/components/IconButton/components/IconButton.js +19 -0
- package/dist/components/IconButton/components/index.d.ts +2 -0
- package/dist/components/IconButton/components/index.js +1 -0
- package/dist/components/IconButton/index.d.ts +2 -0
- package/dist/components/IconButton/index.js +1 -0
- package/dist/components/Input/components/Input.js +1 -1
- package/dist/components/Lightbox/components/Lightbox.d.ts +10 -4
- package/dist/components/Lightbox/components/Lightbox.js +19 -11
- package/dist/components/Meter/components/Meter.js +7 -3
- package/dist/components/Meter/components/MeterGroup.js +3 -3
- package/dist/components/Modal/components/Modal.d.ts +18 -6
- package/dist/components/Modal/components/Modal.js +18 -9
- package/dist/components/Nav/components/Nav.js +5 -4
- package/dist/components/Notification/components/Notification.js +3 -2
- package/dist/components/Progress/components/Progress.js +8 -6
- package/dist/components/RangeBar/components/RangeBar.js +8 -5
- package/dist/components/SeriesBars/components/SeriesBars.d.ts +9 -1
- package/dist/components/SeriesBars/components/SeriesBars.js +23 -11
- package/dist/components/Stat/components/Stat.js +1 -1
- package/dist/components/Tag/components/Tag.d.ts +8 -1
- package/dist/components/Tag/components/Tag.js +5 -5
- package/dist/components/VitalsStrip/components/VitalsStrip.js +9 -7
- package/dist/components/registry.js +230 -19
- package/dist/eidotter.css +3 -2
- package/dist/hooks/useAnimatedDismiss.js +5 -0
- package/dist/index.d.ts +9 -1
- package/dist/index.es.js +2414 -1747
- package/dist/index.umd.js +1 -1
- package/dist/utils/cn.d.ts +2 -0
- package/dist/utils/cn.js +33 -1
- package/dist/utils/dosFontSizes.d.ts +2 -0
- package/dist/utils/dosFontSizes.js +17 -0
- package/llms.txt +15 -7
- package/migrations/0.41.0.md +883 -0
- package/migrations/README.md +46 -0
- package/package.json +11 -3
- package/public/favicon.svg +1 -1
- package/src/styles/dos-utilities.css +9 -1
- package/src/styles/shadcn.css +63 -27
- package/src/styles/theme.amber-mono.css +4 -2
- package/src/styles/theme.amber-paper.css +106 -0
- package/src/styles/theme.cga-amber.css +3 -1
- package/src/styles/theme.cga-mode4-p0.css +3 -1
- package/src/styles/theme.cga-mode4-p1.css +3 -1
- package/src/styles/theme.cga-mode5.css +3 -1
- package/src/styles/theme.light.css +3 -1
- package/src/styles/tokens.css +5 -1
- package/tailwind.preset.cjs +23 -1
- package/dist/components/Brand/components/markGeometry.test.d.ts +0 -1
- package/dist/components/Connector/components/connectorGeometry.test.d.ts +0 -1
- package/dist/components/DecayStrip/components/resample.test.d.ts +0 -1
- package/dist/components/TimelineContainer/components/timelineUtils.test.d.ts +0 -1
- package/dist/components/TimelineContainer/components/useDrillDown.test.d.ts +0 -1
- package/dist/components/TimelineContainer/components/useSelection.test.d.ts +0 -1
- package/dist/components/TimelineContainer/components/useZoom.test.d.ts +0 -1
- package/dist/hooks/useTextScramble.test.d.ts +0 -1
- package/dist/hooks/useThemePortal.test.d.ts +0 -1
- package/dist/utils/health/formatValue.test.d.ts +0 -1
- package/dist/utils/health/healthPatterns.test.d.ts +0 -1
- package/dist/utils/health/resolveBand.test.d.ts +0 -1
- package/dist/utils/isSafeHref.test.d.ts +0 -1
- package/dist/utils/isSafeUrl.test.d.ts +0 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# eidotter migration guides
|
|
2
|
+
|
|
3
|
+
This folder holds one upgrade guide per eidotter release that has breaking or
|
|
4
|
+
visible changes for consumers. The guides are written for developers and AI
|
|
5
|
+
agents working in a consuming app who have not seen the eidotter repository.
|
|
6
|
+
|
|
7
|
+
## Naming
|
|
8
|
+
|
|
9
|
+
- `<version>.md`, for example `0.41.0.md`: one guide per minor (or major) whose
|
|
10
|
+
changes a consumer can see or must act on.
|
|
11
|
+
- Patch releases and purely additive minors get no guide. Their notes are in
|
|
12
|
+
the [CHANGELOG](https://github.com/CinimoDY/eiDotter/blob/main/CHANGELOG.md).
|
|
13
|
+
- A guide is written before its release is published, so it ships in that
|
|
14
|
+
version's npm package.
|
|
15
|
+
|
|
16
|
+
## How to use them
|
|
17
|
+
|
|
18
|
+
1. Find your installed version (`npm ls eidotter`) and your target version.
|
|
19
|
+
2. Read every guide whose version is greater than your installed version and
|
|
20
|
+
less than or equal to your target, oldest first. Each guide covers only the
|
|
21
|
+
step from the previous minor.
|
|
22
|
+
3. Each guide has the same shape: who must act, how to bump, breaking and
|
|
23
|
+
visible changes (each with what changed, how to find it, what to do, how to
|
|
24
|
+
verify), new pieces to adopt, an ordered checklist, and pointers for
|
|
25
|
+
consumers jumping several versions.
|
|
26
|
+
|
|
27
|
+
Remember the 0.x caret rule: `^0.40.2` never resolves to 0.41.0. Bump the range
|
|
28
|
+
explicitly.
|
|
29
|
+
|
|
30
|
+
## Where to find them
|
|
31
|
+
|
|
32
|
+
The folder ships in the npm package:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
node_modules/eidotter/migrations/README.md
|
|
36
|
+
node_modules/eidotter/migrations/0.41.0.md
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
It is also exported, so tooling can resolve a guide by path:
|
|
40
|
+
`require.resolve('eidotter/migrations/0.41.0.md')`.
|
|
41
|
+
|
|
42
|
+
## Guides
|
|
43
|
+
|
|
44
|
+
| Version | Summary |
|
|
45
|
+
|---|---|
|
|
46
|
+
| [0.41.0](./0.41.0.md) | 16px floor, CSS reset and unused utilities no longer leak, `text-secondary` meaning change, Header lockup default, overlays on `DosDialog` (removed classes), focus rings; adopt `IconButton`, `DosDialog`, `DosWindow`, the favicon export and the `amber-paper` theme |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eidotter",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.41.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A DOS Themed Design System",
|
|
6
6
|
"main": "./dist/index.umd.js",
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"./utilities": "./src/styles/dos-utilities.css",
|
|
30
30
|
"./tailwind.preset": "./tailwind.preset.cjs",
|
|
31
31
|
"./favicon.svg": "./public/favicon.svg",
|
|
32
|
+
"./migrations/*": "./migrations/*",
|
|
32
33
|
"./fonts.css": "./src/styles/fonts.css",
|
|
33
34
|
"./tokens.css": "./src/styles/tokens.css",
|
|
34
35
|
"./shadcn.css": "./src/styles/shadcn.css",
|
|
@@ -38,6 +39,7 @@
|
|
|
38
39
|
"./themes/cga-mode4-p1.css": "./src/styles/theme.cga-mode4-p1.css",
|
|
39
40
|
"./themes/cga-mode5.css": "./src/styles/theme.cga-mode5.css",
|
|
40
41
|
"./themes/light.css": "./src/styles/theme.light.css",
|
|
42
|
+
"./themes/amber-paper.css": "./src/styles/theme.amber-paper.css",
|
|
41
43
|
"./icons": {
|
|
42
44
|
"types": "./dist/icons/published.d.ts",
|
|
43
45
|
"import": "./dist/icons/published.js"
|
|
@@ -75,6 +77,7 @@
|
|
|
75
77
|
"src/styles/shadcn.css",
|
|
76
78
|
"src/styles/dos-utilities.css",
|
|
77
79
|
"guidelines",
|
|
80
|
+
"migrations",
|
|
78
81
|
"llms.txt"
|
|
79
82
|
],
|
|
80
83
|
"scripts": {
|
|
@@ -85,7 +88,7 @@
|
|
|
85
88
|
"fetch-icons": "node scripts/icons/fetch-svgs.mjs",
|
|
86
89
|
"generate-icons": "node scripts/icons/build-tsx.mjs && node scripts/icons/build-barrels.mjs",
|
|
87
90
|
"prepublishOnly": "npm run build",
|
|
88
|
-
"build-tokens": "node style-dictionary.config.mjs && node scripts/generate-shadcn-shim.mjs",
|
|
91
|
+
"build-tokens": "node style-dictionary.config.mjs && node scripts/generate-shadcn-shim.mjs && node scripts/generate-tailwind-safelist.mjs",
|
|
89
92
|
"lint": "eslint src/ --report-unused-disable-directives --max-warnings 0",
|
|
90
93
|
"lint-tokens": "node scripts/lint-token-refs.mjs",
|
|
91
94
|
"check-contrast": "node scripts/check-contrast.mjs",
|
|
@@ -100,7 +103,10 @@
|
|
|
100
103
|
"sync-figma-to-swift": "ts-node scripts/sync-figma-to-swift.ts",
|
|
101
104
|
"fetch-figma-snapshot": "ts-node scripts/fetch-figma-snapshot.ts",
|
|
102
105
|
"publish-figma-library": "ts-node scripts/publish-figma-library.ts",
|
|
103
|
-
"validate-tokens": "node scripts/validate-tokens.cjs"
|
|
106
|
+
"validate-tokens": "node scripts/validate-tokens.cjs",
|
|
107
|
+
"extract-code-contract": "tsx scripts/contracts/extract-code-contract.cli.ts",
|
|
108
|
+
"extract-figma-contract": "tsx scripts/contracts/extract-figma-contract.cli.ts",
|
|
109
|
+
"diff-contracts": "tsx scripts/contracts/diff-contracts.cli.ts"
|
|
104
110
|
},
|
|
105
111
|
"repository": {
|
|
106
112
|
"type": "git",
|
|
@@ -180,7 +186,9 @@
|
|
|
180
186
|
"tailwindcss": "^4.3.0",
|
|
181
187
|
"tailwindcss-react-aria-components": "^2.0.1",
|
|
182
188
|
"ts-jest": "^29.4.0",
|
|
189
|
+
"ts-morph": "^28.0.0",
|
|
183
190
|
"ts-node": "^10.9.2",
|
|
191
|
+
"tsx": "^4.23.1",
|
|
184
192
|
"typescript": "^5.7.3",
|
|
185
193
|
"typescript-eslint": "^8.54.0",
|
|
186
194
|
"vite": "^8.0.10"
|
package/public/favicon.svg
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 7 22 22" width="32" height="32"><defs> <radialGradient id="h" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(19 19.1) scale(13.2)"> <stop stop-color="#FFB000" stop-opacity="0.3" /> <stop offset="1" stop-color="#020003" stop-opacity="0" /> </radialGradient> <radialGradient id="c" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(19 18.9) scale(9.9)"> <stop stop-color="#FFB000" stop-opacity="0.45" /> <stop offset="0.6" stop-color="#9A5700" stop-opacity="0.22" /> <stop offset="1" stop-color="#020003" stop-opacity="0" /> </radialGradient> </defs> <path d="M19 29C25.0751 29 30 24.0751 30 18C30 11.9249 25.0751 7 19 7C12.9249 7 8 11.9249 8 18C8 24.0751 12.9249 29 19 29Z" fill="url(#h)" /> <path d="M19 27C23.9706 27 28 22.9706 28 18C28 13.0294 23.9706 9 19 9C14.0294 9 10 13.0294 10 18C10 22.9706 14.0294 27 19 27Z" fill="url(#c)" /> <path d="M20.375 9.0625H17.625V9.75H20.375V9.0625Z" fill="#FFB000" /> <path d="M16.9375 9.75H15.5625V10.4375H16.9375V9.75Z" fill="#FFB000" /> <path d="M17.625 9.75H16.9375V10.4375H17.625V9.75Z" fill="#FFB000" /> <path d="M22.4375 9.75H20.375V10.4375H22.4375V9.75Z" fill="#FFB000" /> <path d="M15.5625 10.4375H14.1875V11.125H15.5625V10.4375Z" fill="#FFB000" /> <path d="M23.8125 10.4375H22.4375V11.125H23.8125V10.4375Z" fill="#FFB000" /> <path d="M14.1875 11.125H13.5V11.8125H14.1875V11.125Z" fill="#FFB000" /> <path d="M25.1875 11.125H23.8125V11.8125H25.1875V11.125Z" fill="#FFB000" /> <path d="M13.5 11.8125H12.8125V12.5H13.5V11.8125Z" fill="#FFB000" /> <path d="M25.875 11.8125H25.1875V13.1875H25.875V11.8125Z" fill="#FFB000" /> <path d="M12.8125 12.5H12.125V13.875H12.8125V12.5Z" fill="#FFB000" /> <path d="M12.125 13.875H11.4375V15.9375H12.125V13.875Z" fill="#FFB000" /> <path d="M11.4375 15.9375H10.75V18H11.4375V15.9375Z" fill="#FFB000" /> <path d="M10.75 18H10.0625V19.375H10.75V18Z" fill="#FFB000" /> <path d="M11.4375 19.375H10.75V20.75H11.4375V19.375Z" fill="#FFB000" /> <path d="M12.125 20.75H11.4375V22.125H12.125V20.75Z" fill="#FFB000" /> <path d="M12.8125 22.125H12.125V23.5H12.8125V22.125Z" fill="#FFB000" /> <path d="M26.5625 13.1875H25.875V15.25H26.5625V13.1875Z" fill="#FFB000" /> <path d="M27.25 15.25H26.5625V17.3125H27.25V15.25Z" fill="#FFB000" /> <path d="M27.9375 17.3125H27.25V19.375H27.9375V17.3125Z" fill="#FFB000" /> <path d="M27.25 19.375H26.5625V20.75H27.25V19.375Z" fill="#FFB000" /> <path d="M26.5625 20.75H25.875V22.125H26.5625V20.75Z" fill="#FFB000" /> <path d="M25.875 22.125H25.1875V23.5H25.875V22.125Z" fill="#FFB000" /> <path d="M14.1875 23.5H12.8125V24.1875H14.1875V23.5Z" fill="#FFB000" /> <path d="M16.25 24.1875H14.1875V24.875H16.25V24.1875Z" fill="#FFB000" /> <path d="M18.3125 24.875H16.25V25.5625H18.3125V24.875Z" fill="#FFB000" /> <path d="M20.375 25.5625H18.3125V26.25H20.375V25.5625Z" fill="#FFB000" /> <path d="M22.4375 24.875H20.375V25.5625H22.4375V24.875Z" fill="#FFB000" /> <path d="M24.5 24.1875H22.4375V24.875H24.5V24.1875Z" fill="#FFB000" /> <path d="M25.1875 23.5H24.5V24.1875H25.1875V23.5Z" fill="#FFB000" /> <path d="M10.0625 15.9375H9.375V16.625H10.0625V15.9375Z" fill="#FFB000" /> <path d="M29.3125 16.625H28.625V17.3125H29.3125V16.625Z" fill="#FFB000" /> <path d="M28.625 20.75H27.9375V21.4375H28.625V20.75Z" fill="#FFB000" /> <path d="M10.75 21.4375H10.0625V22.125H10.75V21.4375Z" fill="#FFB000" /> <path d="M18.4375 21C20.6466 21 22.4375 19.2091 22.4375 17C22.4375 14.7909 20.6466 13 18.4375 13C16.2284 13 14.4375 14.7909 14.4375 17C14.4375 19.2091 16.2284 21 18.4375 21Z" fill="#
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 7 22 22" width="32" height="32"><defs> <radialGradient id="h" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(19 19.1) scale(13.2)"> <stop stop-color="#FFB000" stop-opacity="0.3" /> <stop offset="1" stop-color="#020003" stop-opacity="0" /> </radialGradient> <radialGradient id="c" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(19 18.9) scale(9.9)"> <stop stop-color="#FFB000" stop-opacity="0.45" /> <stop offset="0.6" stop-color="#9A5700" stop-opacity="0.22" /> <stop offset="1" stop-color="#020003" stop-opacity="0" /> </radialGradient> <radialGradient id="y" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(16.9 15.5) scale(5.6)"> <stop stop-color="#FFD97A" /> <stop offset="0.55" stop-color="#FFB000" /> <stop offset="1" stop-color="#B87C00" /> </radialGradient> </defs> <path d="M19 29C25.0751 29 30 24.0751 30 18C30 11.9249 25.0751 7 19 7C12.9249 7 8 11.9249 8 18C8 24.0751 12.9249 29 19 29Z" fill="url(#h)" /> <path d="M19 27C23.9706 27 28 22.9706 28 18C28 13.0294 23.9706 9 19 9C14.0294 9 10 13.0294 10 18C10 22.9706 14.0294 27 19 27Z" fill="url(#c)" /> <path d="M20.375 9.0625H17.625V9.75H20.375V9.0625Z" fill="#FFB000" /> <path d="M16.9375 9.75H15.5625V10.4375H16.9375V9.75Z" fill="#FFB000" /> <path d="M17.625 9.75H16.9375V10.4375H17.625V9.75Z" fill="#FFB000" /> <path d="M22.4375 9.75H20.375V10.4375H22.4375V9.75Z" fill="#FFB000" /> <path d="M15.5625 10.4375H14.1875V11.125H15.5625V10.4375Z" fill="#FFB000" /> <path d="M23.8125 10.4375H22.4375V11.125H23.8125V10.4375Z" fill="#FFB000" /> <path d="M14.1875 11.125H13.5V11.8125H14.1875V11.125Z" fill="#FFB000" /> <path d="M25.1875 11.125H23.8125V11.8125H25.1875V11.125Z" fill="#FFB000" /> <path d="M13.5 11.8125H12.8125V12.5H13.5V11.8125Z" fill="#FFB000" /> <path d="M25.875 11.8125H25.1875V13.1875H25.875V11.8125Z" fill="#FFB000" /> <path d="M12.8125 12.5H12.125V13.875H12.8125V12.5Z" fill="#FFB000" /> <path d="M12.125 13.875H11.4375V15.9375H12.125V13.875Z" fill="#FFB000" /> <path d="M11.4375 15.9375H10.75V18H11.4375V15.9375Z" fill="#FFB000" /> <path d="M10.75 18H10.0625V19.375H10.75V18Z" fill="#FFB000" /> <path d="M11.4375 19.375H10.75V20.75H11.4375V19.375Z" fill="#FFB000" /> <path d="M12.125 20.75H11.4375V22.125H12.125V20.75Z" fill="#FFB000" /> <path d="M12.8125 22.125H12.125V23.5H12.8125V22.125Z" fill="#FFB000" /> <path d="M26.5625 13.1875H25.875V15.25H26.5625V13.1875Z" fill="#FFB000" /> <path d="M27.25 15.25H26.5625V17.3125H27.25V15.25Z" fill="#FFB000" /> <path d="M27.9375 17.3125H27.25V19.375H27.9375V17.3125Z" fill="#FFB000" /> <path d="M27.25 19.375H26.5625V20.75H27.25V19.375Z" fill="#FFB000" /> <path d="M26.5625 20.75H25.875V22.125H26.5625V20.75Z" fill="#FFB000" /> <path d="M25.875 22.125H25.1875V23.5H25.875V22.125Z" fill="#FFB000" /> <path d="M14.1875 23.5H12.8125V24.1875H14.1875V23.5Z" fill="#FFB000" /> <path d="M16.25 24.1875H14.1875V24.875H16.25V24.1875Z" fill="#FFB000" /> <path d="M18.3125 24.875H16.25V25.5625H18.3125V24.875Z" fill="#FFB000" /> <path d="M20.375 25.5625H18.3125V26.25H20.375V25.5625Z" fill="#FFB000" /> <path d="M22.4375 24.875H20.375V25.5625H22.4375V24.875Z" fill="#FFB000" /> <path d="M24.5 24.1875H22.4375V24.875H24.5V24.1875Z" fill="#FFB000" /> <path d="M25.1875 23.5H24.5V24.1875H25.1875V23.5Z" fill="#FFB000" /> <path d="M10.0625 15.9375H9.375V16.625H10.0625V15.9375Z" fill="#FFB000" /> <path d="M29.3125 16.625H28.625V17.3125H29.3125V16.625Z" fill="#FFB000" /> <path d="M28.625 20.75H27.9375V21.4375H28.625V20.75Z" fill="#FFB000" /> <path d="M10.75 21.4375H10.0625V22.125H10.75V21.4375Z" fill="#FFB000" /> <path d="M18.4375 21C20.6466 21 22.4375 19.2091 22.4375 17C22.4375 14.7909 20.6466 13 18.4375 13C16.2284 13 14.4375 14.7909 14.4375 17C14.4375 19.2091 16.2284 21 18.4375 21Z" fill="url(#y)" /> <path d="M16.25 15.25H15.5625V17.3125H16.25V15.25Z" fill="#FFE8A8" opacity="0.8" /> <path d="M18.3125 13.875H16.25V14.5625H18.3125V13.875Z" fill="#FFE8A8" opacity="0.8" /> <path d="M17.5 15C17.7761 15 18 14.7761 18 14.5C18 14.2239 17.7761 14 17.5 14C17.2239 14 17 14.2239 17 14.5C17 14.7761 17.2239 15 17.5 15Z" fill="#FFFFFF" opacity="0.9" /> </svg>
|
|
@@ -43,6 +43,14 @@
|
|
|
43
43
|
font-synthesis: none;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
+
/* Text floor (DMNC-1579): body text, labels and controls never render below 16px
|
|
47
|
+
* (--typography-font-size-text-base, Tailwind text-dos-text-base). The DOS VGA font's native cell
|
|
48
|
+
* is 9x16, so 16px is the authentic size. The preset aliases Tailwind text-xs/text-sm to the same
|
|
49
|
+
* 1rem. Named exceptions, and the only ones: em-relative secondary glyphs that scale with their
|
|
50
|
+
* parent (CalendarHeatmap day labels 0.6em, ProgressRing centre label 0.5em, Stat/VitalsStrip unit
|
|
51
|
+
* suffix 0.5em of the display-size value). LegalPage sits on the floor since DMNC-1610.
|
|
52
|
+
*/
|
|
53
|
+
|
|
46
54
|
/* Body tier — JetBrains Mono Nerd Font (multi-weight; includes Nerd Font glyphs).
|
|
47
55
|
* Uses --typography-font-family-body and real body-weight tokens (DMNC-885). */
|
|
48
56
|
:where(
|
|
@@ -193,7 +201,7 @@
|
|
|
193
201
|
* Accessibility
|
|
194
202
|
* ========================================================================== */
|
|
195
203
|
|
|
196
|
-
@media (prefers-contrast: high) {
|
|
204
|
+
@media (prefers-contrast: high), (prefers-contrast: more) {
|
|
197
205
|
.dos-hero,
|
|
198
206
|
.dos-h1,
|
|
199
207
|
.dos-h2,
|
package/src/styles/shadcn.css
CHANGED
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
* then delete your own :root/.dark/etc. colour definitions. Re-themes via
|
|
9
9
|
* [data-theme]. Opt-in — NOT part of eidotter/styles.
|
|
10
10
|
*
|
|
11
|
-
* sidebar-*
|
|
12
|
-
*
|
|
11
|
+
* sidebar-* are best-effort aliases of the core roles; chart-* are five
|
|
12
|
+
* series chosen per theme (>=3:1 on --background, pairwise distinct).
|
|
13
|
+
* Override per surface for real sidebar/data-viz needs.
|
|
13
14
|
* ========================================================================== */
|
|
14
15
|
|
|
15
16
|
:root {
|
|
@@ -41,10 +42,10 @@
|
|
|
41
42
|
--sidebar-border: 37 75% 41%;
|
|
42
43
|
--sidebar-ring: 45 77% 55%;
|
|
43
44
|
--chart-1: 41 100% 50%;
|
|
44
|
-
--chart-2:
|
|
45
|
-
--chart-3:
|
|
46
|
-
--chart-4:
|
|
47
|
-
--chart-5:
|
|
45
|
+
--chart-2: 37 75% 41%;
|
|
46
|
+
--chart-3: 27 96% 81%;
|
|
47
|
+
--chart-4: 40 66% 48%;
|
|
48
|
+
--chart-5: 34 100% 30%;
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
[data-theme="amber-mono"], .theme-amber-mono {
|
|
@@ -66,7 +67,7 @@
|
|
|
66
67
|
--destructive-foreground: 0 0% 100%;
|
|
67
68
|
--border: 41 100% 50%;
|
|
68
69
|
--input: 41 100% 50%;
|
|
69
|
-
--ring:
|
|
70
|
+
--ring: 41 100% 50%;
|
|
70
71
|
--sidebar: 280 100% 1%;
|
|
71
72
|
--sidebar-foreground: 41 100% 50%;
|
|
72
73
|
--sidebar-primary: 41 100% 50%;
|
|
@@ -74,12 +75,12 @@
|
|
|
74
75
|
--sidebar-accent: 240 50% 1%;
|
|
75
76
|
--sidebar-accent-foreground: 41 100% 50%;
|
|
76
77
|
--sidebar-border: 41 100% 50%;
|
|
77
|
-
--sidebar-ring:
|
|
78
|
+
--sidebar-ring: 41 100% 50%;
|
|
78
79
|
--chart-1: 41 100% 50%;
|
|
79
80
|
--chart-2: 37 75% 41%;
|
|
80
81
|
--chart-3: 27 96% 81%;
|
|
81
|
-
--chart-4:
|
|
82
|
-
--chart-5:
|
|
82
|
+
--chart-4: 40 66% 48%;
|
|
83
|
+
--chart-5: 34 100% 30%;
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
[data-theme="cga-amber"], .theme-cga-amber {
|
|
@@ -96,7 +97,7 @@
|
|
|
96
97
|
--muted: 48 5% 22%;
|
|
97
98
|
--muted-foreground: 30 100% 33%;
|
|
98
99
|
--accent: 240 100% 33%;
|
|
99
|
-
--accent-foreground:
|
|
100
|
+
--accent-foreground: 38 100% 98%;
|
|
100
101
|
--destructive: 0 100% 33%;
|
|
101
102
|
--destructive-foreground: 0 0% 100%;
|
|
102
103
|
--border: 37 5% 66%;
|
|
@@ -111,9 +112,9 @@
|
|
|
111
112
|
--sidebar-border: 37 5% 66%;
|
|
112
113
|
--sidebar-ring: 41 100% 50%;
|
|
113
114
|
--chart-1: 41 100% 50%;
|
|
114
|
-
--chart-2:
|
|
115
|
-
--chart-3:
|
|
116
|
-
--chart-4:
|
|
115
|
+
--chart-2: 180 100% 67%;
|
|
116
|
+
--chart-3: 300 100% 67%;
|
|
117
|
+
--chart-4: 120 100% 67%;
|
|
117
118
|
--chart-5: 37 5% 66%;
|
|
118
119
|
}
|
|
119
120
|
|
|
@@ -146,10 +147,10 @@
|
|
|
146
147
|
--sidebar-border: 120 100% 50%;
|
|
147
148
|
--sidebar-ring: 60 100% 50%;
|
|
148
149
|
--chart-1: 60 100% 50%;
|
|
149
|
-
--chart-2:
|
|
150
|
-
--chart-3:
|
|
151
|
-
--chart-4:
|
|
152
|
-
--chart-5:
|
|
150
|
+
--chart-2: 120 100% 50%;
|
|
151
|
+
--chart-3: 0 100% 50%;
|
|
152
|
+
--chart-4: 180 100% 33%;
|
|
153
|
+
--chart-5: 0 0% 100%;
|
|
153
154
|
}
|
|
154
155
|
|
|
155
156
|
[data-theme="cga-mode4-p1"], .theme-cga-mode4-p1 {
|
|
@@ -181,10 +182,10 @@
|
|
|
181
182
|
--sidebar-border: 180 100% 50%;
|
|
182
183
|
--sidebar-ring: 38 100% 98%;
|
|
183
184
|
--chart-1: 180 100% 50%;
|
|
184
|
-
--chart-2:
|
|
185
|
+
--chart-2: 300 100% 50%;
|
|
185
186
|
--chart-3: 38 100% 98%;
|
|
186
|
-
--chart-4:
|
|
187
|
-
--chart-5:
|
|
187
|
+
--chart-4: 120 100% 33%;
|
|
188
|
+
--chart-5: 0 100% 67%;
|
|
188
189
|
}
|
|
189
190
|
|
|
190
191
|
[data-theme="cga-mode5"], .theme-cga-mode5 {
|
|
@@ -216,10 +217,10 @@
|
|
|
216
217
|
--sidebar-border: 180 100% 50%;
|
|
217
218
|
--sidebar-ring: 38 100% 98%;
|
|
218
219
|
--chart-1: 180 100% 50%;
|
|
219
|
-
--chart-2:
|
|
220
|
+
--chart-2: 0 100% 50%;
|
|
220
221
|
--chart-3: 38 100% 98%;
|
|
221
|
-
--chart-4:
|
|
222
|
-
--chart-5:
|
|
222
|
+
--chart-4: 120 100% 33%;
|
|
223
|
+
--chart-5: 180 100% 33%;
|
|
223
224
|
}
|
|
224
225
|
|
|
225
226
|
[data-theme="light"], .theme-light {
|
|
@@ -250,9 +251,44 @@
|
|
|
250
251
|
--sidebar-accent-foreground: 33 17% 10%;
|
|
251
252
|
--sidebar-border: 40 18% 80%;
|
|
252
253
|
--sidebar-ring: 34 100% 30%;
|
|
253
|
-
--chart-1:
|
|
254
|
+
--chart-1: 34 100% 30%;
|
|
254
255
|
--chart-2: 39 8% 40%;
|
|
255
|
-
--chart-3: 34 100%
|
|
256
|
-
--chart-4:
|
|
256
|
+
--chart-3: 34 100% 24%;
|
|
257
|
+
--chart-4: 28 74% 21%;
|
|
257
258
|
--chart-5: 33 17% 10%;
|
|
258
259
|
}
|
|
260
|
+
|
|
261
|
+
[data-theme="amber-paper"], .theme-amber-paper {
|
|
262
|
+
--background: 41 100% 50%;
|
|
263
|
+
--foreground: 280 100% 1%;
|
|
264
|
+
--card: 42 100% 45%;
|
|
265
|
+
--card-foreground: 280 100% 1%;
|
|
266
|
+
--popover: 42 100% 45%;
|
|
267
|
+
--popover-foreground: 280 100% 1%;
|
|
268
|
+
--primary: 280 100% 1%;
|
|
269
|
+
--primary-foreground: 41 100% 50%;
|
|
270
|
+
--secondary: 42 100% 45%;
|
|
271
|
+
--secondary-foreground: 280 100% 1%;
|
|
272
|
+
--muted: 42 100% 45%;
|
|
273
|
+
--muted-foreground: 28 74% 21%;
|
|
274
|
+
--accent: 280 100% 1%;
|
|
275
|
+
--accent-foreground: 41 100% 50%;
|
|
276
|
+
--destructive: 28 74% 21%;
|
|
277
|
+
--destructive-foreground: 41 100% 50%;
|
|
278
|
+
--border: 280 100% 1%;
|
|
279
|
+
--input: 280 100% 1%;
|
|
280
|
+
--ring: 280 100% 1%;
|
|
281
|
+
--sidebar: 41 100% 50%;
|
|
282
|
+
--sidebar-foreground: 280 100% 1%;
|
|
283
|
+
--sidebar-primary: 280 100% 1%;
|
|
284
|
+
--sidebar-primary-foreground: 41 100% 50%;
|
|
285
|
+
--sidebar-accent: 42 100% 45%;
|
|
286
|
+
--sidebar-accent-foreground: 280 100% 1%;
|
|
287
|
+
--sidebar-border: 280 100% 1%;
|
|
288
|
+
--sidebar-ring: 280 100% 1%;
|
|
289
|
+
--chart-1: 280 100% 1%;
|
|
290
|
+
--chart-2: 25 83% 14%;
|
|
291
|
+
--chart-3: 28 74% 21%;
|
|
292
|
+
--chart-4: 34 100% 24%;
|
|
293
|
+
--chart-5: 0 100% 33%;
|
|
294
|
+
}
|
|
@@ -41,7 +41,9 @@
|
|
|
41
41
|
--color-semantic-text-ai-gradient-from-light: #c0228a; /** AI-marker gradient start under light themes ([data-theme=light]/.light) — deep magenta, contrast on white. Static, brand-locked. Gradient-only; no Tailwind utility (DMNC-946). */
|
|
42
42
|
--color-semantic-text-ai-gradient-to-light: #7a3cc0; /** AI-marker gradient end under light themes — violet, contrast on white. Static, brand-locked. Gradient-only; no Tailwind utility (DMNC-946). */
|
|
43
43
|
--color-semantic-text-primary: var(--color-cga-amber);
|
|
44
|
-
--color-semantic-text-secondary: var(--color-cga-
|
|
44
|
+
--color-semantic-text-secondary: var(--color-cga-light-gray); /** DMNC-1494: visible de-emphasised tone on dark backgrounds. For dark text on an amber fill use `text.onAccent`. */
|
|
45
|
+
--color-semantic-text-on-accent: var(--color-cga-black); /** DMNC-1494: dark text/icon sitting on an accent (amber) fill. Was the value of `text.secondary`. */
|
|
46
|
+
--color-semantic-text-on-light: var(--color-cga-black); /** DMNC-1494: near-black text/icon for an unfilled element sitting on a light surface (e.g. Nav modern links). Near-black in every theme, unlike `text.onAccent`, which follows the accent fill. */
|
|
45
47
|
--color-semantic-text-accent: var(--color-cga-yellow);
|
|
46
48
|
--color-semantic-text-disabled: var(--color-cga-amber-dim);
|
|
47
49
|
--color-semantic-text-muted: var(--color-cga-light-gray);
|
|
@@ -53,7 +55,7 @@
|
|
|
53
55
|
--color-semantic-background-accent: var(--color-cga-amber);
|
|
54
56
|
--color-semantic-background-error: var(--color-cga-amber-dim); /** DMNC-1059: amber-mono is the DEFAULT theme — functional roles must NOT leak the honest :root red/green. Destructive fill uses dark amberDim so the white foreground keeps contrast (honest #AA0000 fill only appears under colour themes, e.g. cga-amber / the Modern theme DMNC-1058). */
|
|
55
57
|
--color-semantic-border-default: var(--color-cga-amber);
|
|
56
|
-
--color-semantic-border-focus: var(--color-cga-amber
|
|
58
|
+
--color-semantic-border-focus: var(--color-cga-amber);
|
|
57
59
|
--color-semantic-border-hover: var(--color-cga-yellow);
|
|
58
60
|
--color-semantic-border-disabled: var(--color-cga-amber-dim);
|
|
59
61
|
--color-semantic-border-success: var(--color-cga-amber-bright); /** DMNC-1059: amber-mono default — success border is amber, not honest green. */
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Do not edit directly, this file was auto-generated.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
[data-theme="amber-paper"], .theme-amber-paper {
|
|
6
|
+
--color-cga-black: #ffb000; /** Reverse video: the darkest CGA value becomes the amber ground. */
|
|
7
|
+
--color-cga-blue: #2c1203; /** Amber monochrome */
|
|
8
|
+
--color-cga-green: #411f06; /** Amber monochrome */
|
|
9
|
+
--color-cga-cyan: #552d0a; /** Amber monochrome */
|
|
10
|
+
--color-cga-red: #65360c; /** Amber monochrome */
|
|
11
|
+
--color-cga-magenta: #713e0d; /** Amber monochrome */
|
|
12
|
+
--color-cga-brown: #5f340e; /** Amber monochrome */
|
|
13
|
+
--color-cga-light-gray: #5f340e; /** Reverse video: tan body tone becomes dark brown (5.8:1 on ground). */
|
|
14
|
+
--color-cga-dark-gray: #e6a000; /** Reverse video: raised/secondary surface, a slightly darker amber shade. */
|
|
15
|
+
--color-cga-bright-blue: #2c1203;
|
|
16
|
+
--color-cga-bright-green: #2c1203;
|
|
17
|
+
--color-cga-bright-cyan: #2c1203;
|
|
18
|
+
--color-cga-bright-red: #2c1203;
|
|
19
|
+
--color-cga-bright-magenta: #2c1203;
|
|
20
|
+
--color-cga-yellow: #020003; /** Reverse video: accent yellow becomes ink. */
|
|
21
|
+
--color-cga-white: #2c1203; /** Reverse video: hover/emphasis tone becomes a deep brown. */
|
|
22
|
+
--color-cga-amber: #020003; /** Reverse video: amber ink becomes near-black. */
|
|
23
|
+
--color-cga-amber-bright: #1a1000; /** Reverse video: hover/active peaks go darker, not lighter. */
|
|
24
|
+
--color-cga-amber-dim: #7a4500; /** Reverse video: dim amber becomes mid brown (4.3:1 on ground, 3.5:1 on shade). */
|
|
25
|
+
--color-cga-amber-glow: rgba(0, 0, 0, 0); /** Reverse video has no phosphor bloom: transparent, so raw amber-glow rules render nothing. */
|
|
26
|
+
--color-cga-red-glow: rgba(255, 85, 85, 0.5); /** Red glow at 50% opacity */
|
|
27
|
+
--color-cga-green-glow: rgba(85, 255, 85, 0.5); /** Green glow at 50% opacity */
|
|
28
|
+
--color-cga-cyan-glow: rgba(85, 255, 255, 0.5); /** Cyan glow at 50% opacity */
|
|
29
|
+
--color-cga-magenta-glow: rgba(255, 85, 255, 0.5); /** Magenta glow at 50% opacity */
|
|
30
|
+
--color-cga-blue-glow: rgba(85, 85, 255, 0.5); /** Blue glow at 50% opacity */
|
|
31
|
+
--color-cga-white-glow: rgba(255, 245, 224, 0.5); /** Warm white glow at 50% opacity */
|
|
32
|
+
--color-cga-true-green: #00aa00; /** True CGA green — functional success / in-range. */
|
|
33
|
+
--color-cga-true-red: #aa0000; /** True CGA red — functional error / out-of-range. */
|
|
34
|
+
--color-cga-true-cyan: #00aaaa; /** True CGA cyan — functional info / sensor. */
|
|
35
|
+
--color-cga-true-white: #ffffff; /** True CGA white — theme-invariant light foreground for functional fills (white-on-red destructive, white-on-green success). #FFFFFF on cga-true.red #AA0000 is ~5.9:1 (passes WCAG AA). DMNC-922. */
|
|
36
|
+
--color-cga-true-red-bright: #ff5555; /** True CGA bright red — theme-invariant. The readable-as-TEXT-on-dark red (#FF5555 on the #020003 CRT bg passes AA, where the solid #AA0000 is only ~2.3:1). Use for error TEXT/icons on dark; use the solid `red` for fills. DMNC-922. */
|
|
37
|
+
--color-semantic-text-ai-draft: #ff1a8c; /** AI-drafted prose, not yet revised by human — Signalnoise hot pink. Brand-locked hex: same value across all themes so the AI marker is unmissable regardless of palette. Lives in base (T1) so all themes inherit it; the rest of color.semantic.* lives in web.tokens.json (T2). */
|
|
38
|
+
--color-semantic-text-ai-draft-glow: rgba(255, 26, 140, 0.5); /** Phosphor halo around AI-drafted prose. 50% rgba of the aiDraft hex; brand-locked alongside it. Used in text-shadow only; no Tailwind utility. */
|
|
39
|
+
--color-semantic-text-ai-gradient-from: #ff1a8c; /** AI-marker gradient start on amber/dark themes (Signalnoise pink). Static two-stop magenta gradient ('AI writer' style — no animation) clipped to the text in provenance.css; brand-locked; no Tailwind utility (DMNC-946). */
|
|
40
|
+
--color-semantic-text-ai-gradient-to: #ff55ff; /** AI-marker gradient end on amber/dark themes (bright magenta). Static, brand-locked. Gradient-only; no Tailwind utility (DMNC-946). */
|
|
41
|
+
--color-semantic-text-ai-gradient-from-light: #c0228a; /** AI-marker gradient start under light themes ([data-theme=light]/.light) — deep magenta, contrast on white. Static, brand-locked. Gradient-only; no Tailwind utility (DMNC-946). */
|
|
42
|
+
--color-semantic-text-ai-gradient-to-light: #7a3cc0; /** AI-marker gradient end under light themes — violet, contrast on white. Static, brand-locked. Gradient-only; no Tailwind utility (DMNC-946). */
|
|
43
|
+
--color-semantic-text-primary: #020003; /** Black ink body text (11.4:1 on ground). */
|
|
44
|
+
--color-semantic-text-secondary: #5f340e; /** DMNC-1494: visible de-emphasised tone on the amber ground (5.8:1). For text on a black fill use text.onAccent. */
|
|
45
|
+
--color-semantic-text-on-accent: #ffb000; /** DMNC-1494: text/icon on an accent (black) fill, amber. */
|
|
46
|
+
--color-semantic-text-on-light: #020003; /** DMNC-1494: near-black text/icon for an unfilled element sitting on a light surface (e.g. Nav modern links); the amber ground is the light surface here (11.4:1 on ground, 9.4:1 on shade). */
|
|
47
|
+
--color-semantic-text-accent: #1a1000; /** Accent text, near-black ink (10.3:1 on ground). Reverse video: where the default accent is brighter than amber, here it is the darker peak; distinct from background.brand so the shadcn chart ramp stays five distinct colours (DMNC-1436). */
|
|
48
|
+
--color-semantic-text-disabled: #7a4500; /** Disabled text/icon, mid brown, at least 3:1 on ground and shade. */
|
|
49
|
+
--color-semantic-text-muted: #5f340e; /** Muted supplementary text, dark brown (5.8:1 ground, 4.7:1 shade). */
|
|
50
|
+
--color-semantic-text-tertiary: #5f340e; /** Third-emphasis text, same as muted. */
|
|
51
|
+
--color-semantic-text-brand: #020003; /** Brand text, ink. */
|
|
52
|
+
--color-semantic-text-brand-bright: #1a1000; /** Brand emphasis text (hover/active peaks), near-black; reverse video peaks go darker. */
|
|
53
|
+
--color-semantic-text-on-brand: #ffb000; /** Text/icon on a black brand fill, amber. */
|
|
54
|
+
--color-semantic-text-error: #020003; /** Monochrome error text, ink (pair with icon/pattern, never colour alone). */
|
|
55
|
+
--color-semantic-text-warning: #411f06; /** Monochrome warning text, deep brown. */
|
|
56
|
+
--color-semantic-text-success: #2c1203; /** Monochrome success text, deep brown. */
|
|
57
|
+
--color-semantic-text-info: #5f340e; /** Monochrome info text, dark brown. */
|
|
58
|
+
--color-semantic-text-white: #ffb000; /** Light foreground for functional (dark) fills; in reverse video the light tone is the amber ground. */
|
|
59
|
+
--color-semantic-background-primary: #ffb000; /** Amber page ground. */
|
|
60
|
+
--color-semantic-background-secondary: #e6a000; /** Raised/card surface, slightly darker amber. */
|
|
61
|
+
--color-semantic-background-tertiary: #e6a000; /** Third surface level (same as secondary, mirrors the default). */
|
|
62
|
+
--color-semantic-background-accent: #020003; /** Accent fill: what was an amber fill is black ink. Pair with text.onAccent (amber). */
|
|
63
|
+
--color-semantic-background-brand: #020003; /** Brand fill (e.g. primary button), black. Pair with text.onBrand. */
|
|
64
|
+
--color-semantic-background-brand-bright: #2c1203; /** Brand emphasis fill (hover/active), deep brown, visibly distinct from the black brand fill. */
|
|
65
|
+
--color-semantic-background-brand-dim: #4a2808; /** Dim brand fill (card header, timeline axis), dark brown; text.onAccent (amber) reads 7.2:1 on it. Kept distinct from text.muted so the shadcn chart ramp stays five distinct colours (DMNC-1436). */
|
|
66
|
+
--color-semantic-background-error: #5f340e; /** Destructive fill stays monochrome: dark brown with text.white (amber) on it. */
|
|
67
|
+
--color-semantic-background-success: #411f06; /** Success fill stays monochrome: deep brown with text.white (amber) on it. */
|
|
68
|
+
--color-semantic-border-default: #020003; /** Ink border. */
|
|
69
|
+
--color-semantic-border-focus: #020003; /** Focus ring, ink. */
|
|
70
|
+
--color-semantic-border-hover: #2c1203; /** Hover border, deep brown. */
|
|
71
|
+
--color-semantic-border-disabled: #7a4500; /** Disabled border, mid brown. */
|
|
72
|
+
--color-semantic-border-brand: #020003; /** Brand border, ink. */
|
|
73
|
+
--color-semantic-border-brand-bright: #2c1203; /** Brand emphasis border. */
|
|
74
|
+
--color-semantic-border-brand-dim: #7a4500; /** Dim brand border, mid brown (3:1+ on ground). */
|
|
75
|
+
--color-semantic-border-error: #020003; /** Monochrome error border, ink. */
|
|
76
|
+
--color-semantic-border-success: #020003; /** Monochrome success border, ink. */
|
|
77
|
+
--color-semantic-link-default: #2c1203; /** Link, deep brown (9.6:1); distinguished by underline, not hue. */
|
|
78
|
+
--color-semantic-link-hover: #020003; /** Link hover, ink. */
|
|
79
|
+
--color-semantic-link-active: #5f340e; /** Link active, dark brown. */
|
|
80
|
+
--color-semantic-link-visited: #411f06; /** Visited, deep brown. */
|
|
81
|
+
--color-semantic-status-success: #2c1203; /** Monochrome status success. */
|
|
82
|
+
--color-semantic-status-warning: #411f06; /** Monochrome status warning. */
|
|
83
|
+
--color-semantic-status-error: #020003; /** Monochrome status error. */
|
|
84
|
+
--color-semantic-status-info: #5f340e; /** Monochrome status info. */
|
|
85
|
+
--color-semantic-alert-info: #e6a000; /** Alert surface, amber shade; tone is carried by icon + text, not hue. */
|
|
86
|
+
--color-semantic-alert-success: #e6a000; /** Alert surface, amber shade. */
|
|
87
|
+
--color-semantic-alert-warning: #e6a000; /** Alert surface, amber shade. */
|
|
88
|
+
--color-semantic-alert-error: #e6a000; /** Alert surface, amber shade. */
|
|
89
|
+
--color-semantic-glow-error: rgba(0, 0, 0, 0); /** No bloom on reverse video, transparent. */
|
|
90
|
+
--shadow-glow-xs: 0px 0px 8px 0px #02000300; /** No phosphor bloom on reverse video (transparent). */
|
|
91
|
+
--shadow-glow-sm: 0px 0px 10px 0px #02000300; /** No phosphor bloom on reverse video (transparent). */
|
|
92
|
+
--shadow-glow-md: 0px 0px 20px 0px #02000300; /** No phosphor bloom on reverse video (transparent). */
|
|
93
|
+
--shadow-glow-lg: 0px 0px 30px 0px #02000300; /** No phosphor bloom on reverse video (transparent). */
|
|
94
|
+
--focus-ring-color: #020003; /** Focus ring, ink on the amber ground. */
|
|
95
|
+
--effects-overlay: rgba(2, 0, 3, 0.7); /** Modal backdrop, ink at 70% so the amber dialog separates from the page. */
|
|
96
|
+
--effects-scanline-light: rgba(2, 0, 3, 0.05); /** Scanline band, faint ink. */
|
|
97
|
+
--effects-scanline-dark: rgba(2, 0, 3, 0.02); /** Scanline band, fainter ink. */
|
|
98
|
+
--effects-vignette-glow: rgba(2, 0, 3, 0); /** No inner glow on reverse video. */
|
|
99
|
+
--effects-vignette-edge: rgba(2, 0, 3, 0.15); /** Vignette edge darkening, ink at low alpha. */
|
|
100
|
+
--effects-vignette-corner: rgba(2, 0, 3, 0.3); /** Vignette corner darkening, ink at low alpha. */
|
|
101
|
+
--effects-screen-tint: rgba(2, 0, 3, 0.05); /** Screen tint, ink at about 5%. */
|
|
102
|
+
--effects-phosphor-glow: rgba(2, 0, 3, 0); /** No phosphor bloom on reverse video. */
|
|
103
|
+
--effects-bloom-outer: rgba(2, 0, 3, 0); /** No bloom on reverse video. */
|
|
104
|
+
--effects-bloom-center: rgba(2, 0, 3, 0); /** No bloom on reverse video. */
|
|
105
|
+
--effects-crt-background: #ffb000; /** CRT screen background, amber ground. */
|
|
106
|
+
}
|
|
@@ -45,7 +45,9 @@
|
|
|
45
45
|
--color-semantic-alert-warning: #352800;
|
|
46
46
|
--color-semantic-alert-error: #430500;
|
|
47
47
|
--color-semantic-text-primary: var(--color-cga-light-gray);
|
|
48
|
-
--color-semantic-text-secondary: var(--color-cga-
|
|
48
|
+
--color-semantic-text-secondary: var(--color-cga-light-gray); /** DMNC-1494: visible de-emphasised tone on dark backgrounds. For dark text on an amber fill use `text.onAccent`. */
|
|
49
|
+
--color-semantic-text-on-accent: var(--color-cga-white); /** DMNC-1494: text/icon sitting on an accent fill. Light here because the cga-amber accent fill is blue; elsewhere it is the old `text.secondary` value. */
|
|
50
|
+
--color-semantic-text-on-light: var(--color-cga-black); /** DMNC-1494: near-black text/icon for an unfilled element sitting on a light surface (e.g. Nav modern links). Near-black in every theme, unlike `text.onAccent`, which follows the accent fill. */
|
|
49
51
|
--color-semantic-text-accent: var(--color-cga-amber);
|
|
50
52
|
--color-semantic-text-disabled: var(--color-cga-dark-gray);
|
|
51
53
|
--color-semantic-text-muted: var(--color-cga-brown);
|
|
@@ -41,7 +41,9 @@
|
|
|
41
41
|
--color-semantic-text-ai-gradient-from-light: #c0228a; /** AI-marker gradient start under light themes ([data-theme=light]/.light) — deep magenta, contrast on white. Static, brand-locked. Gradient-only; no Tailwind utility (DMNC-946). */
|
|
42
42
|
--color-semantic-text-ai-gradient-to-light: #7a3cc0; /** AI-marker gradient end under light themes — violet, contrast on white. Static, brand-locked. Gradient-only; no Tailwind utility (DMNC-946). */
|
|
43
43
|
--color-semantic-text-primary: #ffff00;
|
|
44
|
-
--color-semantic-text-secondary: #
|
|
44
|
+
--color-semantic-text-secondary: #ffff00; /** DMNC-1494: visible de-emphasised tone (same as text.primary in this mode theme). */
|
|
45
|
+
--color-semantic-text-on-accent: #050300; /** DMNC-1494: dark text on an accent fill. Was the value of `text.secondary`. */
|
|
46
|
+
--color-semantic-text-on-light: #050300; /** DMNC-1494: near-black text/icon for an unfilled element sitting on a light surface (e.g. Nav modern links). Near-black in every theme, unlike `text.onAccent`, which follows the accent fill. */
|
|
45
47
|
--color-semantic-text-accent: #00ff00;
|
|
46
48
|
--color-semantic-text-disabled: #ff0000;
|
|
47
49
|
--color-semantic-text-muted: rgba(255, 255, 0, 0.65);
|
|
@@ -41,7 +41,9 @@
|
|
|
41
41
|
--color-semantic-text-ai-gradient-from-light: #c0228a; /** AI-marker gradient start under light themes ([data-theme=light]/.light) — deep magenta, contrast on white. Static, brand-locked. Gradient-only; no Tailwind utility (DMNC-946). */
|
|
42
42
|
--color-semantic-text-ai-gradient-to-light: #7a3cc0; /** AI-marker gradient end under light themes — violet, contrast on white. Static, brand-locked. Gradient-only; no Tailwind utility (DMNC-946). */
|
|
43
43
|
--color-semantic-text-primary: #fffcf7;
|
|
44
|
-
--color-semantic-text-secondary: #
|
|
44
|
+
--color-semantic-text-secondary: #fffcf7; /** DMNC-1494: visible de-emphasised tone (same as text.primary in this mode theme). */
|
|
45
|
+
--color-semantic-text-on-accent: #050300; /** DMNC-1494: dark text on an accent fill. Was the value of `text.secondary`. */
|
|
46
|
+
--color-semantic-text-on-light: #050300; /** DMNC-1494: near-black text/icon for an unfilled element sitting on a light surface (e.g. Nav modern links). Near-black in every theme, unlike `text.onAccent`, which follows the accent fill. */
|
|
45
47
|
--color-semantic-text-accent: #00ffff;
|
|
46
48
|
--color-semantic-text-disabled: #ff00ff;
|
|
47
49
|
--color-semantic-text-muted: rgba(255, 252, 247, 0.65);
|
|
@@ -41,7 +41,9 @@
|
|
|
41
41
|
--color-semantic-text-ai-gradient-from-light: #c0228a; /** AI-marker gradient start under light themes ([data-theme=light]/.light) — deep magenta, contrast on white. Static, brand-locked. Gradient-only; no Tailwind utility (DMNC-946). */
|
|
42
42
|
--color-semantic-text-ai-gradient-to-light: #7a3cc0; /** AI-marker gradient end under light themes — violet, contrast on white. Static, brand-locked. Gradient-only; no Tailwind utility (DMNC-946). */
|
|
43
43
|
--color-semantic-text-primary: #fffcf7;
|
|
44
|
-
--color-semantic-text-secondary: #
|
|
44
|
+
--color-semantic-text-secondary: #fffcf7; /** DMNC-1494: visible de-emphasised tone (same as text.primary in this mode theme). */
|
|
45
|
+
--color-semantic-text-on-accent: #050300; /** DMNC-1494: dark text on an accent fill. Was the value of `text.secondary`. */
|
|
46
|
+
--color-semantic-text-on-light: #050300; /** DMNC-1494: near-black text/icon for an unfilled element sitting on a light surface (e.g. Nav modern links). Near-black in every theme, unlike `text.onAccent`, which follows the accent fill. */
|
|
45
47
|
--color-semantic-text-accent: #00ffff;
|
|
46
48
|
--color-semantic-text-disabled: #ff0000;
|
|
47
49
|
--color-semantic-text-muted: rgba(255, 252, 247, 0.65);
|
|
@@ -41,7 +41,9 @@
|
|
|
41
41
|
--color-semantic-text-ai-gradient-from-light: #c0228a; /** AI-marker gradient start under light themes ([data-theme=light]/.light) — deep magenta, contrast on white. Static, brand-locked. Gradient-only; no Tailwind utility (DMNC-946). */
|
|
42
42
|
--color-semantic-text-ai-gradient-to-light: #7a3cc0; /** AI-marker gradient end under light themes — violet, contrast on white. Static, brand-locked. Gradient-only; no Tailwind utility (DMNC-946). */
|
|
43
43
|
--color-semantic-text-primary: #1f1b16; /** Warm near-black body text (~13:1 on bg.primary). */
|
|
44
|
-
--color-semantic-text-secondary: #1f1b16; /**
|
|
44
|
+
--color-semantic-text-secondary: #1f1b16; /** DMNC-1494: visible on the light page background (near-black). For dark text on an amber fill use `text.onAccent`. */
|
|
45
|
+
--color-semantic-text-on-accent: #1f1b16; /** DMNC-1494: dark text/icon on an amber accent fill. */
|
|
46
|
+
--color-semantic-text-on-light: #1f1b16; /** DMNC-1494: near-black text/icon for an unfilled element sitting on a light surface (e.g. Nav modern links). Near-black in every theme, unlike `text.onAccent`, which follows the accent fill. */
|
|
45
47
|
--color-semantic-text-accent: #9a5700; /** Deep-amber accent text (readable on light, ~5:1). */
|
|
46
48
|
--color-semantic-text-disabled: #a8a096; /** Disabled text/icon. */
|
|
47
49
|
--color-semantic-text-muted: #6e685d; /** Muted supplementary text (~5.5:1 on bg.primary). */
|
package/src/styles/tokens.css
CHANGED
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
--typography-font-family-primary: 'Perfect DOS VGA 437', monospace; /** Perfect DOS VGA 437 by Zeh Fernando (free-for-any-use; ships with bundled LICENSE.txt). Pixel-perfect-vector TTF — every glyph outline is axis-aligned, scales cleanly to any size. The `monospace` fallback preserves DOS aesthetic on @font-face failure. Used for display/heading tiers (dos-hero, dos-h1…h5). */
|
|
48
48
|
--typography-font-family-body: 'JetBrains Mono Nerd Font', monospace; /** JetBrains Mono Nerd Font (OFL-1.1; ships with bundled JetBrainsMonoNerdFont_OFL.txt). Multi-weight monospace body font — includes Nerd Font glyph extensions (powerline, devicons, language logos) for terminal-aesthetic UIs alongside pixelarticons. Ships as four per-weight woff2 files (Regular/Medium/SemiBold/Bold). Used for body/prose tiers (dos-body, dos-body-lg, dos-caption, dos-micro). Use fontWeight.body-* tokens for real weight variation (DMNC-885). */
|
|
49
49
|
--typography-font-family-fallback: monospace; /** Bare `monospace` stack — fail-loud diagnostic counterpart to `primary`. Compose with `primary` when consumers want strict Perfect-DOS-or-nothing rendering. */
|
|
50
|
+
--typography-font-size-text-base: 1rem; /** 16px — body floor (DOS VGA native 9x16 cell) for body text, labels and controls (DMNC-1579). Named exceptions: em-relative secondary glyphs that scale with their parent (CalendarHeatmap day labels 0.6em, ProgressRing centre label 0.5em, Stat/VitalsStrip unit suffix 0.5em of the display-size value) */
|
|
50
51
|
--typography-font-size-text-xs: 1.125rem; /** 18px — smallest body text */
|
|
51
52
|
--typography-font-size-text-sm: 1.25rem; /** 20px — secondary body text */
|
|
52
53
|
--typography-font-size-text-md: 1.375rem; /** 22px — default body text */
|
|
@@ -65,6 +66,7 @@
|
|
|
65
66
|
--typography-font-weight-body-medium: 500; /** Body: JetBrains Mono Nerd Font medium. */
|
|
66
67
|
--typography-font-weight-body-semibold: 600; /** Body: JetBrains Mono Nerd Font semibold. */
|
|
67
68
|
--typography-font-weight-body-bold: 700; /** Body: JetBrains Mono Nerd Font bold. */
|
|
69
|
+
--typography-line-height-text-base: 1.25rem; /** 20px */
|
|
68
70
|
--typography-line-height-text-xs: 1.125rem; /** 18px */
|
|
69
71
|
--typography-line-height-text-sm: 1.25rem; /** 20px */
|
|
70
72
|
--typography-line-height-text-md: 1.5rem; /** 24px */
|
|
@@ -195,7 +197,9 @@
|
|
|
195
197
|
--motion-easing-energize: ease-out; /** phosphor-energize easing (runs forwards). */
|
|
196
198
|
--motion-easing-blink: step-end; /** blink easing — hard step, no interpolation (terminal cursor). */
|
|
197
199
|
--color-semantic-text-primary: var(--color-cga-light-gray);
|
|
198
|
-
--color-semantic-text-secondary: var(--color-cga-
|
|
200
|
+
--color-semantic-text-secondary: var(--color-cga-light-gray); /** DMNC-1494: visible de-emphasised tone on dark backgrounds. For dark text on an amber fill use `text.onAccent`. */
|
|
201
|
+
--color-semantic-text-on-accent: var(--color-cga-black); /** DMNC-1494: dark text/icon sitting on an accent (amber) fill. Was the value of `text.secondary`. */
|
|
202
|
+
--color-semantic-text-on-light: var(--color-cga-black); /** DMNC-1494: near-black text/icon for an unfilled element sitting on a light surface (e.g. Nav modern links). Near-black in every theme, unlike `text.onAccent`, which follows the accent fill. */
|
|
199
203
|
--color-semantic-text-accent: var(--color-cga-yellow);
|
|
200
204
|
--color-semantic-text-disabled: var(--color-cga-dark-gray);
|
|
201
205
|
--color-semantic-text-muted: var(--color-cga-amber-dim); /** Muted supplementary text — timestamps, counts, footnotes. T10 handoff: dedicated amber-dim hex (in-family with primary), not brown; no opacity coupling. */
|
package/tailwind.preset.cjs
CHANGED
|
@@ -30,6 +30,7 @@ try {
|
|
|
30
30
|
animatePlugin = null;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
// DMNC-1579: text-xs/text-sm are aliased to the 16px body floor
|
|
33
34
|
const preset = {
|
|
34
35
|
"theme": {
|
|
35
36
|
"extend": {
|
|
@@ -72,6 +73,8 @@ const preset = {
|
|
|
72
73
|
"dos-text-ai-draft": "var(--color-semantic-text-ai-draft)",
|
|
73
74
|
"dos-text-primary": "var(--color-semantic-text-primary)",
|
|
74
75
|
"dos-text-secondary": "var(--color-semantic-text-secondary)",
|
|
76
|
+
"dos-text-on-accent": "var(--color-semantic-text-on-accent)",
|
|
77
|
+
"dos-text-on-light": "var(--color-semantic-text-on-light)",
|
|
75
78
|
"dos-text-accent": "var(--color-semantic-text-accent)",
|
|
76
79
|
"dos-text-disabled": "var(--color-semantic-text-disabled)",
|
|
77
80
|
"dos-text-muted": "var(--color-semantic-text-muted)",
|
|
@@ -120,6 +123,12 @@ const preset = {
|
|
|
120
123
|
]
|
|
121
124
|
},
|
|
122
125
|
"fontSize": {
|
|
126
|
+
"dos-text-base": [
|
|
127
|
+
"1rem",
|
|
128
|
+
{
|
|
129
|
+
"lineHeight": "1.25rem"
|
|
130
|
+
}
|
|
131
|
+
],
|
|
123
132
|
"dos-text-xs": "1.125rem",
|
|
124
133
|
"dos-text-sm": "1.25rem",
|
|
125
134
|
"dos-text-md": "1.375rem",
|
|
@@ -130,9 +139,22 @@ const preset = {
|
|
|
130
139
|
"dos-display-md": "2.625rem",
|
|
131
140
|
"dos-display-lg": "3.5rem",
|
|
132
141
|
"dos-display-xl": "4.125rem",
|
|
133
|
-
"dos-display-2xl": "4.875rem"
|
|
142
|
+
"dos-display-2xl": "4.875rem",
|
|
143
|
+
"xs": [
|
|
144
|
+
"1rem",
|
|
145
|
+
{
|
|
146
|
+
"lineHeight": "1.25rem"
|
|
147
|
+
}
|
|
148
|
+
],
|
|
149
|
+
"sm": [
|
|
150
|
+
"1rem",
|
|
151
|
+
{
|
|
152
|
+
"lineHeight": "1.25rem"
|
|
153
|
+
}
|
|
154
|
+
]
|
|
134
155
|
},
|
|
135
156
|
"lineHeight": {
|
|
157
|
+
"dos-text-base": "1.25rem",
|
|
136
158
|
"dos-text-xs": "1.125rem",
|
|
137
159
|
"dos-text-sm": "1.25rem",
|
|
138
160
|
"dos-text-md": "1.5rem",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|