@dataimago/tokens-neutral 0.1.0-alpha.6
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 +67 -0
- package/dist/index.cjs +439 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.mjs +438 -0
- package/dist/tokens.css +196 -0
- package/dist/tokens.scss +196 -0
- package/package.json +52 -0
- package/src/colors.json +44 -0
- package/src/theme-colors.json +76 -0
- package/src/typography.json +78 -0
package/dist/tokens.scss
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
--color-palette-ink-50: #f5f5f4;
|
|
3
|
+
--color-palette-ink-100: #e7e5e4;
|
|
4
|
+
--color-palette-ink-200: #d6d3d1;
|
|
5
|
+
--color-palette-ink-300: #a8a29e;
|
|
6
|
+
--color-palette-ink-400: #78716c;
|
|
7
|
+
--color-palette-ink-500: #57534e;
|
|
8
|
+
--color-palette-ink-600: #44403c;
|
|
9
|
+
--color-palette-ink-700: #292524;
|
|
10
|
+
--color-palette-ink-800: #1c1917;
|
|
11
|
+
--color-palette-ink-900: #0c0a09;
|
|
12
|
+
--color-palette-stone-50: #f7f7f6;
|
|
13
|
+
--color-palette-stone-100: #ededeb;
|
|
14
|
+
--color-palette-stone-200: #dcdcda;
|
|
15
|
+
--color-palette-stone-300: #c1c1bf;
|
|
16
|
+
--color-palette-stone-400: #a0a0a0;
|
|
17
|
+
--color-palette-stone-500: #7c7c7c;
|
|
18
|
+
--color-palette-stone-600: #5e5e5c;
|
|
19
|
+
--color-palette-stone-700: #424240;
|
|
20
|
+
--color-palette-stone-800: #292927;
|
|
21
|
+
--color-palette-stone-900: #14140f;
|
|
22
|
+
--color-palette-paper-50: #fefdfb;
|
|
23
|
+
--color-palette-paper-100: #fdf9f2;
|
|
24
|
+
--color-palette-paper-200: #faf2e3;
|
|
25
|
+
--color-palette-paper-300: #f5e8cf;
|
|
26
|
+
--color-palette-paper-400: #edd9b3;
|
|
27
|
+
--color-palette-paper-500: #e0c088;
|
|
28
|
+
--color-functional-success: #27AE60;
|
|
29
|
+
--color-functional-warning: #F39C12;
|
|
30
|
+
--color-functional-error: #E74C3C;
|
|
31
|
+
--color-functional-info: #3498DB;
|
|
32
|
+
--transition-quick: 0.15s ease;
|
|
33
|
+
--transition-standard: 0.25s ease-in-out;
|
|
34
|
+
--transition-smooth: 0.35s ease;
|
|
35
|
+
--transition-logo: 0.3s;
|
|
36
|
+
--font-family-sans: Noto Sans, Fira Sans, system-ui, sans-serif;
|
|
37
|
+
--font-family-mono: JetBrains Mono, SF Mono, Monaco, Inconsolata, monospace;
|
|
38
|
+
--font-family-display: var(--font-family-display-editorial);
|
|
39
|
+
--font-family-display-editorial: Noto Sans, system-ui, sans-serif;
|
|
40
|
+
--font-family-display-documentation: Noto Sans, system-ui, sans-serif;
|
|
41
|
+
--font-family-brand: Noto Sans, system-ui, sans-serif;
|
|
42
|
+
--font-family-math: Noto Sans Math, Noto Sans, system-ui, sans-serif;
|
|
43
|
+
--font-size-micro: 0.75rem;
|
|
44
|
+
--font-size-small: 0.875rem;
|
|
45
|
+
--font-size-base: 1rem;
|
|
46
|
+
--font-size-readable: 1.125rem;
|
|
47
|
+
--font-size-emphasis: 1.25rem;
|
|
48
|
+
--font-size-heading-small: 1.5rem;
|
|
49
|
+
--font-size-heading-medium: 1.875rem;
|
|
50
|
+
--font-size-heading-large: 2.25rem;
|
|
51
|
+
--font-size-heading-xl: 3rem;
|
|
52
|
+
--font-weight-extralight: 200;
|
|
53
|
+
--font-weight-light: 300;
|
|
54
|
+
--font-weight-normal: 400;
|
|
55
|
+
--font-weight-medium: 500;
|
|
56
|
+
--font-weight-semibold: 600;
|
|
57
|
+
--font-weight-bold: 700;
|
|
58
|
+
--font-weight-heading-h1: var(--font-weight-semibold);
|
|
59
|
+
--font-weight-heading-h2: var(--font-weight-semibold);
|
|
60
|
+
--font-weight-heading-h3: var(--font-weight-medium);
|
|
61
|
+
--font-weight-heading-h4: var(--font-weight-normal);
|
|
62
|
+
--font-weight-heading-h5: var(--font-weight-normal);
|
|
63
|
+
--font-weight-heading-h6: var(--font-weight-normal);
|
|
64
|
+
--font-weight-heading-subtitle: var(--font-weight-semibold);
|
|
65
|
+
--font-style-normal: normal;
|
|
66
|
+
--font-style-italic: italic;
|
|
67
|
+
--font-style-oblique: oblique;
|
|
68
|
+
--font-lineHeight-tight: 1.25;
|
|
69
|
+
--font-lineHeight-normal: 1.5;
|
|
70
|
+
--font-lineHeight-relaxed: 1.625;
|
|
71
|
+
--font-feature-settings-display: "normal";
|
|
72
|
+
--font-feature-settings-body: "normal";
|
|
73
|
+
--spacing-xs: 0.25rem;
|
|
74
|
+
--spacing-sm: 0.5rem;
|
|
75
|
+
--spacing-md: 1rem;
|
|
76
|
+
--spacing-lg: 1.5rem;
|
|
77
|
+
--spacing-xl: 2rem;
|
|
78
|
+
--spacing-2xl: 3rem;
|
|
79
|
+
--spacing-3xl: 4rem;
|
|
80
|
+
--radius-sm: 0.25rem;
|
|
81
|
+
--radius-md: 0.5rem;
|
|
82
|
+
--radius-lg: 0.75rem;
|
|
83
|
+
--radius-xl: 1rem;
|
|
84
|
+
--radius-full: 9999px;
|
|
85
|
+
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
86
|
+
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);
|
|
87
|
+
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);
|
|
88
|
+
--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
:root, [data-bs-theme="light"] {
|
|
92
|
+
--color-surface-page: #ededeb;
|
|
93
|
+
--color-surface-page-scrolled: #ededeb;
|
|
94
|
+
--color-surface-elevated: #f7f7f6;
|
|
95
|
+
--color-surface-sunken: #faf2e3;
|
|
96
|
+
--color-surface-navbar: #ededeb;
|
|
97
|
+
--color-surface-navbar-scrolled: #ededeb;
|
|
98
|
+
--color-surface-code: #faf2e3;
|
|
99
|
+
--color-border-subtle: rgba(12, 10, 9, 0.08);
|
|
100
|
+
--color-border-moderate: rgba(12, 10, 9, 0.15);
|
|
101
|
+
--color-border-strong: rgba(12, 10, 9, 0.25);
|
|
102
|
+
--color-border-card: rgba(12, 10, 9, 0.15);
|
|
103
|
+
--color-border-code: #d6d3d1;
|
|
104
|
+
--color-content-primary: #14140f;
|
|
105
|
+
--color-content-secondary: #7c7c7c;
|
|
106
|
+
--color-content-muted: #78716c;
|
|
107
|
+
--color-content-inverse: #fdf9f2;
|
|
108
|
+
--color-interactive-primary: #292524;
|
|
109
|
+
--color-interactive-hover: #1c1917;
|
|
110
|
+
--color-interactive-accent: #292524;
|
|
111
|
+
--color-interactive-focus: #292524;
|
|
112
|
+
--contrast-high: rgb(20, 20, 16);
|
|
113
|
+
--contrast-readable: rgb(20, 20, 16);
|
|
114
|
+
--contrast-medium: #7c7c7c;
|
|
115
|
+
--contrast-subtle: #7c7c7c;
|
|
116
|
+
--shadow-subtle: 0 1px 2px 0 rgb(20 20 16 / 0.05);
|
|
117
|
+
--shadow-moderate: 0 4px 6px -1px rgb(20 20 16 / 0.1);
|
|
118
|
+
--shadow-prominent: 0 10px 15px -3px rgb(20 20 16 / 0.1);
|
|
119
|
+
--border-subtle: rgba(20, 20, 16, 0.1);
|
|
120
|
+
--border-moderate: rgba(20, 20, 16, 0.15);
|
|
121
|
+
--border-focus: #3498DB;
|
|
122
|
+
--navigation-hover-background: rgba(20, 20, 16, 0.05);
|
|
123
|
+
--navigation-active-background: rgba(20, 20, 16, 0.1);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
[data-bs-theme="dark"] {
|
|
127
|
+
--color-surface-page: #141410;
|
|
128
|
+
--color-surface-page-scrolled: #141410;
|
|
129
|
+
--color-surface-elevated: #1c1917;
|
|
130
|
+
--color-surface-sunken: #0c0a09;
|
|
131
|
+
--color-surface-navbar: #141410;
|
|
132
|
+
--color-surface-navbar-scrolled: #141410;
|
|
133
|
+
--color-surface-code: #1c1917;
|
|
134
|
+
--color-border-subtle: rgba(253, 249, 242, 0.08);
|
|
135
|
+
--color-border-moderate: rgba(253, 249, 242, 0.15);
|
|
136
|
+
--color-border-strong: rgba(253, 249, 242, 0.25);
|
|
137
|
+
--color-border-card: rgba(253, 249, 242, 0.15);
|
|
138
|
+
--color-border-code: #292524;
|
|
139
|
+
--color-content-primary: #fdf9f2;
|
|
140
|
+
--color-content-secondary: #a8a29e;
|
|
141
|
+
--color-content-muted: #78716c;
|
|
142
|
+
--color-content-inverse: #0c0a09;
|
|
143
|
+
--color-interactive-primary: #d6d3d1;
|
|
144
|
+
--color-interactive-hover: #a8a29e;
|
|
145
|
+
--color-interactive-accent: #d6d3d1;
|
|
146
|
+
--color-interactive-focus: #d6d3d1;
|
|
147
|
+
--contrast-high: rgb(237, 237, 235);
|
|
148
|
+
--contrast-readable: rgb(237, 237, 235);
|
|
149
|
+
--contrast-medium: #83838f;
|
|
150
|
+
--contrast-subtle: #83838f;
|
|
151
|
+
--shadow-subtle: 0 1px 2px 0 rgb(237 237 235 / 0.03);
|
|
152
|
+
--shadow-moderate: 0 4px 6px -1px rgb(237 237 235 / 0.05);
|
|
153
|
+
--shadow-prominent: 0 10px 15px -3px rgb(237 237 235 / 0.4);
|
|
154
|
+
--border-subtle: rgba(237, 237, 235, 0.1);
|
|
155
|
+
--border-moderate: rgba(237, 237, 235, 0.15);
|
|
156
|
+
--border-focus: #4FC3F7;
|
|
157
|
+
--navigation-hover-background: rgba(237, 237, 235, 0.05);
|
|
158
|
+
--navigation-active-background: rgba(237, 237, 235, 0.1);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
@media (prefers-color-scheme: dark) {
|
|
162
|
+
:root {
|
|
163
|
+
--color-surface-page: #141410;
|
|
164
|
+
--color-surface-page-scrolled: #141410;
|
|
165
|
+
--color-surface-elevated: #1c1917;
|
|
166
|
+
--color-surface-sunken: #0c0a09;
|
|
167
|
+
--color-surface-navbar: #141410;
|
|
168
|
+
--color-surface-navbar-scrolled: #141410;
|
|
169
|
+
--color-surface-code: #1c1917;
|
|
170
|
+
--color-border-subtle: rgba(253, 249, 242, 0.08);
|
|
171
|
+
--color-border-moderate: rgba(253, 249, 242, 0.15);
|
|
172
|
+
--color-border-strong: rgba(253, 249, 242, 0.25);
|
|
173
|
+
--color-border-card: rgba(253, 249, 242, 0.15);
|
|
174
|
+
--color-border-code: #292524;
|
|
175
|
+
--color-content-primary: #fdf9f2;
|
|
176
|
+
--color-content-secondary: #a8a29e;
|
|
177
|
+
--color-content-muted: #78716c;
|
|
178
|
+
--color-content-inverse: #0c0a09;
|
|
179
|
+
--color-interactive-primary: #d6d3d1;
|
|
180
|
+
--color-interactive-hover: #a8a29e;
|
|
181
|
+
--color-interactive-accent: #d6d3d1;
|
|
182
|
+
--color-interactive-focus: #d6d3d1;
|
|
183
|
+
--contrast-high: rgb(237, 237, 235);
|
|
184
|
+
--contrast-readable: rgb(237, 237, 235);
|
|
185
|
+
--contrast-medium: #83838f;
|
|
186
|
+
--contrast-subtle: #83838f;
|
|
187
|
+
--shadow-subtle: 0 1px 2px 0 rgb(237 237 235 / 0.03);
|
|
188
|
+
--shadow-moderate: 0 4px 6px -1px rgb(237 237 235 / 0.05);
|
|
189
|
+
--shadow-prominent: 0 10px 15px -3px rgb(237 237 235 / 0.4);
|
|
190
|
+
--border-subtle: rgba(237, 237, 235, 0.1);
|
|
191
|
+
--border-moderate: rgba(237, 237, 235, 0.15);
|
|
192
|
+
--border-focus: #4FC3F7;
|
|
193
|
+
--navigation-hover-background: rgba(237, 237, 235, 0.05);
|
|
194
|
+
--navigation-active-background: rgba(237, 237, 235, 0.1);
|
|
195
|
+
}
|
|
196
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dataimago/tokens-neutral",
|
|
3
|
+
"version": "0.1.0-alpha.6",
|
|
4
|
+
"description": "dataimago neutral-identity design tokens — Noto Sans throughout, neutral palette; sensible defaults for externally-owned consumers (Level-3 user apps, third-party Level-2 verticals). Non-identity tokens (spacing, radius, motion, effects, components) are read from @dataimago/tokens at build time so the two packages stay in lockstep.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/dataimago/dataimago-design.git",
|
|
9
|
+
"directory": "packages/tokens-neutral"
|
|
10
|
+
},
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public",
|
|
13
|
+
"registry": "https://registry.npmjs.org/"
|
|
14
|
+
},
|
|
15
|
+
"type": "module",
|
|
16
|
+
"main": "./dist/index.cjs",
|
|
17
|
+
"module": "./dist/index.mjs",
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"import": "./dist/index.mjs",
|
|
23
|
+
"require": "./dist/index.cjs"
|
|
24
|
+
},
|
|
25
|
+
"./colors": "./src/colors.json",
|
|
26
|
+
"./theme-colors": "./src/theme-colors.json",
|
|
27
|
+
"./typography": "./src/typography.json",
|
|
28
|
+
"./spacing": "./src/spacing.json",
|
|
29
|
+
"./effects": "./src/effects.json",
|
|
30
|
+
"./frequent": "./src/frequent.json",
|
|
31
|
+
"./components": "./src/components.json",
|
|
32
|
+
"./css": "./dist/tokens.css",
|
|
33
|
+
"./scss": "./dist/tokens.scss"
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"src",
|
|
37
|
+
"dist",
|
|
38
|
+
"README.md"
|
|
39
|
+
],
|
|
40
|
+
"peerDependencies": {
|
|
41
|
+
"@dataimago/tokens": "^0.1.0-alpha.4"
|
|
42
|
+
},
|
|
43
|
+
"keywords": [
|
|
44
|
+
"design-tokens",
|
|
45
|
+
"dataimago",
|
|
46
|
+
"design-system",
|
|
47
|
+
"neutral-identity"
|
|
48
|
+
],
|
|
49
|
+
"scripts": {
|
|
50
|
+
"build": "node build.mjs"
|
|
51
|
+
}
|
|
52
|
+
}
|
package/src/colors.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"color": {
|
|
3
|
+
"palette": {
|
|
4
|
+
"ink": {
|
|
5
|
+
"50": { "value": "#f5f5f4", "description": "Ink scale — warmest near-white" },
|
|
6
|
+
"100": { "value": "#e7e5e4", "description": "Ink scale — subtle neutral surface tint" },
|
|
7
|
+
"200": { "value": "#d6d3d1", "description": "Ink scale — borders, dividers on light surfaces" },
|
|
8
|
+
"300": { "value": "#a8a29e", "description": "Ink scale — muted text on dark surfaces" },
|
|
9
|
+
"400": { "value": "#78716c", "description": "Ink scale — secondary text on dark surfaces" },
|
|
10
|
+
"500": { "value": "#57534e", "description": "Ink scale — secondary text on light surfaces" },
|
|
11
|
+
"600": { "value": "#44403c", "description": "Ink scale — primary text on mid surfaces" },
|
|
12
|
+
"700": { "value": "#292524", "description": "Ink scale — primary text, high contrast; neutral interactive primary" },
|
|
13
|
+
"800": { "value": "#1c1917", "description": "Ink scale — surfaces in dark mode" },
|
|
14
|
+
"900": { "value": "#0c0a09", "description": "Ink scale — near-black; primary dark surface and text color" }
|
|
15
|
+
},
|
|
16
|
+
"stone": {
|
|
17
|
+
"50": { "value": "#f7f7f6", "description": "Stone scale — lightest cool-neutral surface; cards/modals one step above page" },
|
|
18
|
+
"100": { "value": "#ededeb", "description": "Stone scale — canonical page background (light mode)" },
|
|
19
|
+
"200": { "value": "#dcdcda", "description": "Stone scale — borders, dividers" },
|
|
20
|
+
"300": { "value": "#c1c1bf", "description": "Stone scale — pressed border / disabled chrome" },
|
|
21
|
+
"400": { "value": "#a0a0a0", "description": "Stone scale — disabled text, muted icons" },
|
|
22
|
+
"500": { "value": "#7c7c7c", "description": "Stone scale — secondary text" },
|
|
23
|
+
"600": { "value": "#5e5e5c", "description": "Stone scale — caption / metadata text on light surfaces" },
|
|
24
|
+
"700": { "value": "#424240", "description": "Stone scale — primary text on light surfaces" },
|
|
25
|
+
"800": { "value": "#292927", "description": "Stone scale — high-contrast headings on light surfaces" },
|
|
26
|
+
"900": { "value": "#14140f", "description": "Stone scale — body text on light surfaces" }
|
|
27
|
+
},
|
|
28
|
+
"paper": {
|
|
29
|
+
"50": { "value": "#fefdfb", "description": "Paper scale — lightest warm surface; elevated cards/modals when warm tint is desired" },
|
|
30
|
+
"100": { "value": "#fdf9f2", "description": "Paper scale — warm page-background option" },
|
|
31
|
+
"200": { "value": "#faf2e3", "description": "Paper scale — code-block and pull-quote background" },
|
|
32
|
+
"300": { "value": "#f5e8cf", "description": "Paper scale — call-out / emphasised panel background" },
|
|
33
|
+
"400": { "value": "#edd9b3", "description": "Paper scale — muted warm accent" },
|
|
34
|
+
"500": { "value": "#e0c088", "description": "Paper scale — strong warm accent; wheat" }
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"functional": {
|
|
38
|
+
"success": { "value": "#27AE60", "description": "Success states and positive actions" },
|
|
39
|
+
"warning": { "value": "#F39C12", "description": "Warning states and caution" },
|
|
40
|
+
"error": { "value": "#E74C3C", "description": "Error states and critical issues" },
|
|
41
|
+
"info": { "value": "#3498DB", "description": "Informational content" }
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"color": {
|
|
3
|
+
"surface": {
|
|
4
|
+
"page": {
|
|
5
|
+
"light": "#ededeb",
|
|
6
|
+
"dark": "#141410",
|
|
7
|
+
"description": "Main page background — stone-100 (light) / stone-900 (dark)"
|
|
8
|
+
},
|
|
9
|
+
"page-scrolled": {
|
|
10
|
+
"light": "#ededeb",
|
|
11
|
+
"dark": "#141410",
|
|
12
|
+
"description": "Page background when navbar shrinks — matches page"
|
|
13
|
+
},
|
|
14
|
+
"elevated": {
|
|
15
|
+
"light": "#f7f7f6",
|
|
16
|
+
"dark": "#1c1917",
|
|
17
|
+
"description": "Cards, modals, dropdowns — one step above page (stone-50 / ink-800)"
|
|
18
|
+
},
|
|
19
|
+
"sunken": {
|
|
20
|
+
"light": "#faf2e3",
|
|
21
|
+
"dark": "#0c0a09",
|
|
22
|
+
"description": "Input fields, code blocks — below page level (paper-200 light / ink-900 dark)"
|
|
23
|
+
},
|
|
24
|
+
"navbar": {
|
|
25
|
+
"light": "#ededeb",
|
|
26
|
+
"dark": "#141410",
|
|
27
|
+
"description": "Navbar background — matches page in both themes"
|
|
28
|
+
},
|
|
29
|
+
"navbar-scrolled": {
|
|
30
|
+
"light": "#ededeb",
|
|
31
|
+
"dark": "#141410",
|
|
32
|
+
"description": "Navbar when scrolled/shrunk — matches page-scrolled"
|
|
33
|
+
},
|
|
34
|
+
"code": {
|
|
35
|
+
"light": "#faf2e3",
|
|
36
|
+
"dark": "#1c1917",
|
|
37
|
+
"description": "Code block and inline code background"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"border": {
|
|
41
|
+
"subtle": { "light": "rgba(12, 10, 9, 0.08)", "dark": "rgba(253, 249, 242, 0.08)", "description": "Subtle borders — element separation" },
|
|
42
|
+
"moderate": { "light": "rgba(12, 10, 9, 0.15)", "dark": "rgba(253, 249, 242, 0.15)", "description": "Moderate borders — defined boundaries" },
|
|
43
|
+
"strong": { "light": "rgba(12, 10, 9, 0.25)", "dark": "rgba(253, 249, 242, 0.25)", "description": "Strong borders — prominent separation" },
|
|
44
|
+
"card": { "light": "rgba(12, 10, 9, 0.15)", "dark": "rgba(253, 249, 242, 0.15)", "description": "Card border color with transparency for subtle definition" },
|
|
45
|
+
"code": { "light": "#d6d3d1", "dark": "#292524", "description": "Code block border" }
|
|
46
|
+
},
|
|
47
|
+
"content": {
|
|
48
|
+
"primary": { "light": "#14140f", "dark": "#fdf9f2", "description": "Primary text — stone-900 on stone-100 (light) / paper-100 on dark surface" },
|
|
49
|
+
"secondary": { "light": "#7c7c7c", "dark": "#a8a29e", "description": "Secondary text — stone-500 (light) / ink-300 (dark)" },
|
|
50
|
+
"muted": { "light": "#78716c", "dark": "#78716c", "description": "Muted text — captions, meta info" },
|
|
51
|
+
"inverse": { "light": "#fdf9f2", "dark": "#0c0a09", "description": "Inverse text — for contrasting backgrounds" }
|
|
52
|
+
},
|
|
53
|
+
"interactive": {
|
|
54
|
+
"primary": {
|
|
55
|
+
"light": "#292524",
|
|
56
|
+
"dark": "#d6d3d1",
|
|
57
|
+
"description": "Primary interactive — ink-700 on light (15:1 on stone-100, AAA) / ink-200 on dark (high contrast quiet voice). Neutral default; @dataimago/tokens uses forest-700/forest-300 for dataimago house identity. Owners customize by overriding."
|
|
58
|
+
},
|
|
59
|
+
"hover": {
|
|
60
|
+
"light": "#1c1917",
|
|
61
|
+
"dark": "#a8a29e",
|
|
62
|
+
"description": "Hover state — ink-800 on light (one step deeper) / ink-300 on dark"
|
|
63
|
+
},
|
|
64
|
+
"accent": {
|
|
65
|
+
"light": "#292524",
|
|
66
|
+
"dark": "#d6d3d1",
|
|
67
|
+
"description": "Accent — neutral default mirrors interactive.primary (ink-700 / ink-200). The neutral package intentionally ships without a brand-color accent role; consumers that want a sky-blue, copper, forest, or other distinctive accent override this token. @dataimago/tokens maps this role to mode-aware presentation-blue per iteration-2."
|
|
68
|
+
},
|
|
69
|
+
"focus": {
|
|
70
|
+
"light": "#292524",
|
|
71
|
+
"dark": "#d6d3d1",
|
|
72
|
+
"description": "Focus indicators — mirrors interactive.primary"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"font": {
|
|
3
|
+
"family": {
|
|
4
|
+
"sans": {
|
|
5
|
+
"value": "Noto Sans, Fira Sans, system-ui, sans-serif",
|
|
6
|
+
"description": "Primary sans-serif font - body text. Same as @dataimago/tokens (Noto Sans is neutral)."
|
|
7
|
+
},
|
|
8
|
+
"mono": {
|
|
9
|
+
"value": "JetBrains Mono, SF Mono, Monaco, Inconsolata, monospace",
|
|
10
|
+
"description": "Monospace font - code blocks and technical content. Same as @dataimago/tokens."
|
|
11
|
+
},
|
|
12
|
+
"display": {
|
|
13
|
+
"value": "var(--font-family-display-editorial)",
|
|
14
|
+
"description": "Alias of display-editorial. Preserved for naming-parity with @dataimago/tokens; consumers writing `var(--font-family-display)` get sensible neutral output."
|
|
15
|
+
},
|
|
16
|
+
"display-editorial": {
|
|
17
|
+
"value": "Noto Sans, system-ui, sans-serif",
|
|
18
|
+
"description": "Editorial display family — neutral default. @dataimago/tokens uses Josefin Sans here; @dataimago/tokens-neutral substitutes Noto Sans so externally-owned consumers (Level-3 user apps, third-party Level-2 hubs) ship without inheriting the dataimago house typographic identity. Owners may override by extending the Tailwind preset or redeclaring the CSS variable."
|
|
19
|
+
},
|
|
20
|
+
"display-documentation": {
|
|
21
|
+
"value": "Noto Sans, system-ui, sans-serif",
|
|
22
|
+
"description": "Documentation display family — Noto Sans. Identical to @dataimago/tokens (this family was already Noto Sans in the house package)."
|
|
23
|
+
},
|
|
24
|
+
"brand": {
|
|
25
|
+
"value": "Noto Sans, system-ui, sans-serif",
|
|
26
|
+
"description": "Brand font — neutral default. @dataimago/tokens uses Futura for the dataimago navbar wordmark; @dataimago/tokens-neutral substitutes Noto Sans. Owners customize by extending the Tailwind preset."
|
|
27
|
+
},
|
|
28
|
+
"math": {
|
|
29
|
+
"value": "Noto Sans Math, Noto Sans, system-ui, sans-serif",
|
|
30
|
+
"description": "Mathematical notation font — Noto Sans Math. Same as @dataimago/tokens (neutral by virtue of Noto's broad coverage)."
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"size": {
|
|
34
|
+
"micro": { "value": "0.75rem", "description": "Micro text - captions, metadata" },
|
|
35
|
+
"small": { "value": "0.875rem", "description": "Small text - secondary information" },
|
|
36
|
+
"base": { "value": "1rem", "description": "Base text size - body content" },
|
|
37
|
+
"readable": { "value": "1.125rem", "description": "Comfortable reading size - main content" },
|
|
38
|
+
"emphasis": { "value": "1.25rem", "description": "Emphasized text - call-outs" },
|
|
39
|
+
"heading-small": { "value": "1.5rem", "description": "Small headings - H4, H5" },
|
|
40
|
+
"heading-medium": { "value": "1.875rem", "description": "Medium headings - H3" },
|
|
41
|
+
"heading-large": { "value": "2.25rem", "description": "Large headings - H2" },
|
|
42
|
+
"heading-xl": { "value": "3rem", "description": "Extra large headings - H1" }
|
|
43
|
+
},
|
|
44
|
+
"weight": {
|
|
45
|
+
"extralight": { "value": "200", "description": "Extra-light weight — reserved for display-scale refinements (subtitles, oversized numerals)" },
|
|
46
|
+
"light": { "value": "300", "description": "Light weight — minor headings (h4–h6), large display at small sizes" },
|
|
47
|
+
"normal": { "value": "400", "description": "Normal text weight — body content" },
|
|
48
|
+
"medium": { "value": "500", "description": "Medium weight — emphasis within text" },
|
|
49
|
+
"semibold": { "value": "600", "description": "Semi-bold — subtitles, important text, default h1/h2 in the neutral stack" },
|
|
50
|
+
"bold": { "value": "700", "description": "Bold — strong emphasis" },
|
|
51
|
+
"heading": {
|
|
52
|
+
"_invariant": "Heading-weight cluster — neutral default uses semibold (600) for h1/h2 because Noto Sans's medium (500) feels light at hero scale where Josefin's medium has geometric character. Owners may override per-heading by extending the Tailwind preset.",
|
|
53
|
+
"h1": { "value": "var(--font-weight-semibold)", "description": "Heading h1 weight — semibold (600). Neutral default; @dataimago/tokens uses medium (500) tuned for Josefin Sans's geometric voice." },
|
|
54
|
+
"h2": { "value": "var(--font-weight-semibold)", "description": "Heading h2 weight — semibold (600). Neutral default; @dataimago/tokens uses medium (500)." },
|
|
55
|
+
"h3": { "value": "var(--font-weight-medium)", "description": "Heading h3 weight — medium (500). Same hierarchy logic as the house package; sized differentiation does the rest." },
|
|
56
|
+
"h4": { "value": "var(--font-weight-normal)", "description": "Heading h4 weight — normal (400). Minor heading." },
|
|
57
|
+
"h5": { "value": "var(--font-weight-normal)", "description": "Heading h5 weight — normal (400). Minor heading." },
|
|
58
|
+
"h6": { "value": "var(--font-weight-normal)", "description": "Heading h6 weight — normal (400). Minor heading." },
|
|
59
|
+
"subtitle": { "value": "var(--font-weight-semibold)", "description": "Subtitle weight — semibold (600)." }
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"style": {
|
|
63
|
+
"normal": { "value": "normal", "description": "Normal font style - upright text" },
|
|
64
|
+
"italic": { "value": "italic", "description": "Italic style - sloped text with true italic glyphs" },
|
|
65
|
+
"oblique": { "value": "oblique", "description": "Oblique style - sloped text without true italic design" }
|
|
66
|
+
},
|
|
67
|
+
"lineHeight": {
|
|
68
|
+
"tight": { "value": "1.25", "description": "Tight line height - headings" },
|
|
69
|
+
"normal": { "value": "1.5", "description": "Normal line height - body text" },
|
|
70
|
+
"relaxed": { "value": "1.625", "description": "Relaxed line height - long-form content" }
|
|
71
|
+
},
|
|
72
|
+
"feature-settings": {
|
|
73
|
+
"_invariant": "OpenType feature settings — neutral defaults. @dataimago/tokens applies lining figures (lnum) to display headings to correct Josefin Sans's old-style default figures; Noto Sans uses uniform-baseline figures natively, so the neutral package emits `normal` for both display and body.",
|
|
74
|
+
"display": { "value": "\"normal\"", "description": "Default figure style for display headings (neutral default). Noto Sans's native figures are uniform-baseline; no lnum override needed." },
|
|
75
|
+
"body": { "value": "\"normal\"", "description": "Default figure style for body text (neutral default)." }
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|