@dataimago/tokens 0.1.0-alpha.22 → 0.1.0-alpha.27
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/dist/index.cjs +34 -2
- package/dist/index.mjs +34 -2
- package/dist/tokens.css +18 -1
- package/dist/tokens.dtcg.json +18 -2
- package/dist/tokens.scss +18 -1
- package/dist/tokens.studio.json +39 -1
- package/dist/tokens.w3c.dtcg.json +49 -2
- package/package.json +1 -1
- package/src/dataviz.json +22 -0
- package/src/theme-colors-p3.json +26 -0
- package/src/theme-colors.json +10 -0
- package/src/typography.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -17,6 +17,11 @@ const tokens = {
|
|
|
17
17
|
"dark": "#1c1917",
|
|
18
18
|
"description": "Cards, modals, dropdowns — one step above page (stone-50 on stone-100 / ink-800 on stone-900-aligned dark)"
|
|
19
19
|
},
|
|
20
|
+
"figure-plate": {
|
|
21
|
+
"light": "#f7f7f6",
|
|
22
|
+
"dark": "#dcdcda",
|
|
23
|
+
"description": "Figure plate: the ground a .box figure sits on, in HTML (figure img.box, the figure modal) and the PDF (di-figure-plate). Figures are dark ink and Okabe-Ito colours drawn for a light ground, so the plate stays light in dark mode, dimmed one step to cut glare: stone-50 (light) / stone-200 (dark). Dark-mode plate #dcdcda: dark ink 13.5:1, okabe-ito blue 3.8, vermillion 2.8, bluish-green 2.5, reddish-purple 2.2, sky-blue 1.7, orange 1.6 (the light plate's 4.8/3.6/3.2/2.9/2.2/2.1); the light content.secondary frame 3.9:1 on it. Hue separation is checked plate-independently by the data-viz colour-blind gate. Maintainer decision 2026-11-01 (dimmed light plate); a 42%-white mix over the dark page (#777774) was rejected (colours ~1.2:1)."
|
|
24
|
+
},
|
|
20
25
|
"sunken": {
|
|
21
26
|
"light": "#faf2e3",
|
|
22
27
|
"dark": "#0c0a09",
|
|
@@ -59,6 +64,11 @@ const tokens = {
|
|
|
59
64
|
"dark": "rgba(253, 249, 242, 0.60)",
|
|
60
65
|
"description": "Card border color with transparency for subtle definition. See border.subtle on why the alpha is load-bearing and why no number is quoted here."
|
|
61
66
|
},
|
|
67
|
+
"figure-frame": {
|
|
68
|
+
"light": "#6a6a6a",
|
|
69
|
+
"dark": "#6a6a6a",
|
|
70
|
+
"description": "Figure frame: the 1px rule round a .box figure and the border of an enlarged figure in the figure modal. It sits on surface.figure-plate, which is light in both modes, so the frame keeps the light content.secondary value in both: 5.0:1 on the light plate #f7f7f6 and 3.9:1 on the dimmed dark-mode plate #dcdcda (WCAG 1.4.11 non-text, 3:1). The PDF's di-figure-frame is the same colour (2026-11-01)."
|
|
71
|
+
},
|
|
62
72
|
"code": {
|
|
63
73
|
"light": "#d6d3d1",
|
|
64
74
|
"dark": "#292524",
|
|
@@ -234,6 +244,28 @@ const tokens = {
|
|
|
234
244
|
"dark": "#D6D6D6",
|
|
235
245
|
"description": "Innermost band (gray 0.20); mirrored in dark mode, where #333333 would be 1.46:1. Dark value approved by the maintainer 2026-10-29 (dataviz-check --propose-dark)."
|
|
236
246
|
}
|
|
247
|
+
},
|
|
248
|
+
"sgpc-bucket": {
|
|
249
|
+
"very-low": {
|
|
250
|
+
"value": "#D55E00",
|
|
251
|
+
"description": "= okabe-ito.vermillion. SGPc growth bucket 1 of 5 (very low) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
252
|
+
},
|
|
253
|
+
"low": {
|
|
254
|
+
"value": "#E69F00",
|
|
255
|
+
"description": "= okabe-ito.orange. SGPc growth bucket 2 of 5 (low) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
256
|
+
},
|
|
257
|
+
"typical": {
|
|
258
|
+
"value": "#56B4E9",
|
|
259
|
+
"description": "= okabe-ito.sky-blue. SGPc growth bucket 3 of 5 (typical) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
260
|
+
},
|
|
261
|
+
"high": {
|
|
262
|
+
"value": "#009E73",
|
|
263
|
+
"description": "= okabe-ito.bluish-green. SGPc growth bucket 4 of 5 (high) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
264
|
+
},
|
|
265
|
+
"very-high": {
|
|
266
|
+
"value": "#0072B2",
|
|
267
|
+
"description": "= okabe-ito.blue. SGPc growth bucket 5 of 5 (very high) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
268
|
+
}
|
|
237
269
|
}
|
|
238
270
|
}
|
|
239
271
|
},
|
|
@@ -393,8 +425,8 @@ const tokens = {
|
|
|
393
425
|
"font": {
|
|
394
426
|
"family": {
|
|
395
427
|
"sans": {
|
|
396
|
-
"value": "Noto Sans,
|
|
397
|
-
"description": "Primary sans-serif font - body text"
|
|
428
|
+
"value": "Noto Sans, Noto Sans Math, system-ui, sans-serif",
|
|
429
|
+
"description": "Primary sans-serif font - body text. Noto Sans Math is second so a glyph Noto Sans lacks (arrows such as U+2192, maths operators) is drawn by the shipped Noto, not a system font; a page downloads the maths face only when it needs such a glyph. Fira Sans, a leftover of the ai-native extension, was dropped (2026-11-01)."
|
|
398
430
|
},
|
|
399
431
|
"mono": {
|
|
400
432
|
"value": "Noto Sans Mono, SF Mono, Monaco, Inconsolata, monospace",
|
package/dist/index.mjs
CHANGED
|
@@ -17,6 +17,11 @@ const tokens = {
|
|
|
17
17
|
"dark": "#1c1917",
|
|
18
18
|
"description": "Cards, modals, dropdowns — one step above page (stone-50 on stone-100 / ink-800 on stone-900-aligned dark)"
|
|
19
19
|
},
|
|
20
|
+
"figure-plate": {
|
|
21
|
+
"light": "#f7f7f6",
|
|
22
|
+
"dark": "#dcdcda",
|
|
23
|
+
"description": "Figure plate: the ground a .box figure sits on, in HTML (figure img.box, the figure modal) and the PDF (di-figure-plate). Figures are dark ink and Okabe-Ito colours drawn for a light ground, so the plate stays light in dark mode, dimmed one step to cut glare: stone-50 (light) / stone-200 (dark). Dark-mode plate #dcdcda: dark ink 13.5:1, okabe-ito blue 3.8, vermillion 2.8, bluish-green 2.5, reddish-purple 2.2, sky-blue 1.7, orange 1.6 (the light plate's 4.8/3.6/3.2/2.9/2.2/2.1); the light content.secondary frame 3.9:1 on it. Hue separation is checked plate-independently by the data-viz colour-blind gate. Maintainer decision 2026-11-01 (dimmed light plate); a 42%-white mix over the dark page (#777774) was rejected (colours ~1.2:1)."
|
|
24
|
+
},
|
|
20
25
|
"sunken": {
|
|
21
26
|
"light": "#faf2e3",
|
|
22
27
|
"dark": "#0c0a09",
|
|
@@ -59,6 +64,11 @@ const tokens = {
|
|
|
59
64
|
"dark": "rgba(253, 249, 242, 0.60)",
|
|
60
65
|
"description": "Card border color with transparency for subtle definition. See border.subtle on why the alpha is load-bearing and why no number is quoted here."
|
|
61
66
|
},
|
|
67
|
+
"figure-frame": {
|
|
68
|
+
"light": "#6a6a6a",
|
|
69
|
+
"dark": "#6a6a6a",
|
|
70
|
+
"description": "Figure frame: the 1px rule round a .box figure and the border of an enlarged figure in the figure modal. It sits on surface.figure-plate, which is light in both modes, so the frame keeps the light content.secondary value in both: 5.0:1 on the light plate #f7f7f6 and 3.9:1 on the dimmed dark-mode plate #dcdcda (WCAG 1.4.11 non-text, 3:1). The PDF's di-figure-frame is the same colour (2026-11-01)."
|
|
71
|
+
},
|
|
62
72
|
"code": {
|
|
63
73
|
"light": "#d6d3d1",
|
|
64
74
|
"dark": "#292524",
|
|
@@ -234,6 +244,28 @@ const tokens = {
|
|
|
234
244
|
"dark": "#D6D6D6",
|
|
235
245
|
"description": "Innermost band (gray 0.20); mirrored in dark mode, where #333333 would be 1.46:1. Dark value approved by the maintainer 2026-10-29 (dataviz-check --propose-dark)."
|
|
236
246
|
}
|
|
247
|
+
},
|
|
248
|
+
"sgpc-bucket": {
|
|
249
|
+
"very-low": {
|
|
250
|
+
"value": "#D55E00",
|
|
251
|
+
"description": "= okabe-ito.vermillion. SGPc growth bucket 1 of 5 (very low) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
252
|
+
},
|
|
253
|
+
"low": {
|
|
254
|
+
"value": "#E69F00",
|
|
255
|
+
"description": "= okabe-ito.orange. SGPc growth bucket 2 of 5 (low) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
256
|
+
},
|
|
257
|
+
"typical": {
|
|
258
|
+
"value": "#56B4E9",
|
|
259
|
+
"description": "= okabe-ito.sky-blue. SGPc growth bucket 3 of 5 (typical) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
260
|
+
},
|
|
261
|
+
"high": {
|
|
262
|
+
"value": "#009E73",
|
|
263
|
+
"description": "= okabe-ito.bluish-green. SGPc growth bucket 4 of 5 (high) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
264
|
+
},
|
|
265
|
+
"very-high": {
|
|
266
|
+
"value": "#0072B2",
|
|
267
|
+
"description": "= okabe-ito.blue. SGPc growth bucket 5 of 5 (very high) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
268
|
+
}
|
|
237
269
|
}
|
|
238
270
|
}
|
|
239
271
|
},
|
|
@@ -393,8 +425,8 @@ const tokens = {
|
|
|
393
425
|
"font": {
|
|
394
426
|
"family": {
|
|
395
427
|
"sans": {
|
|
396
|
-
"value": "Noto Sans,
|
|
397
|
-
"description": "Primary sans-serif font - body text"
|
|
428
|
+
"value": "Noto Sans, Noto Sans Math, system-ui, sans-serif",
|
|
429
|
+
"description": "Primary sans-serif font - body text. Noto Sans Math is second so a glyph Noto Sans lacks (arrows such as U+2192, maths operators) is drawn by the shipped Noto, not a system font; a page downloads the maths face only when it needs such a glyph. Fira Sans, a leftover of the ai-native extension, was dropped (2026-11-01)."
|
|
398
430
|
},
|
|
399
431
|
"mono": {
|
|
400
432
|
"value": "Noto Sans Mono, SF Mono, Monaco, Inconsolata, monospace",
|
package/dist/tokens.css
CHANGED
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
--transition-standard: 0.25s ease-in-out;
|
|
64
64
|
--transition-smooth: 0.35s ease;
|
|
65
65
|
--transition-logo: 0.3s;
|
|
66
|
-
--font-family-sans: Noto Sans,
|
|
66
|
+
--font-family-sans: Noto Sans, Noto Sans Math, system-ui, sans-serif;
|
|
67
67
|
--font-family-mono: Noto Sans Mono, SF Mono, Monaco, Inconsolata, monospace;
|
|
68
68
|
--font-family-display: var(--font-family-display-editorial);
|
|
69
69
|
--font-family-display-editorial: Josefin Sans, Noto Sans, system-ui, sans-serif;
|
|
@@ -130,6 +130,11 @@
|
|
|
130
130
|
--color-dataviz-categorical-5: #0072B2;
|
|
131
131
|
--color-dataviz-categorical-6: #D55E00;
|
|
132
132
|
--color-dataviz-categorical-7: #CC79A7;
|
|
133
|
+
--color-dataviz-sgpc-bucket-very-low: #D55E00;
|
|
134
|
+
--color-dataviz-sgpc-bucket-low: #E69F00;
|
|
135
|
+
--color-dataviz-sgpc-bucket-typical: #56B4E9;
|
|
136
|
+
--color-dataviz-sgpc-bucket-high: #009E73;
|
|
137
|
+
--color-dataviz-sgpc-bucket-very-high: #0072B2;
|
|
133
138
|
}
|
|
134
139
|
|
|
135
140
|
:root, [data-bs-theme="light"] {
|
|
@@ -139,6 +144,8 @@
|
|
|
139
144
|
--color-surface-page-scrolled: color(display-p3 0.9294 0.9294 0.9223);
|
|
140
145
|
--color-surface-elevated: #f7f7f6;
|
|
141
146
|
--color-surface-elevated: color(display-p3 0.9686 0.9686 0.9651);
|
|
147
|
+
--color-surface-figure-plate: #f7f7f6;
|
|
148
|
+
--color-surface-figure-plate: color(display-p3 0.9686 0.9686 0.9651);
|
|
142
149
|
--color-surface-sunken: #faf2e3;
|
|
143
150
|
--color-surface-sunken: color(display-p3 0.9749 0.9501 0.8963);
|
|
144
151
|
--color-surface-navbar: #ededeb;
|
|
@@ -155,6 +162,8 @@
|
|
|
155
162
|
--color-border-strong: color(display-p3 0.0457 0.0395 0.0358 / 0.75);
|
|
156
163
|
--color-border-card: rgba(12, 10, 9, 0.60);
|
|
157
164
|
--color-border-card: color(display-p3 0.0457 0.0395 0.0358 / 0.60);
|
|
165
|
+
--color-border-figure-frame: #6a6a6a;
|
|
166
|
+
--color-border-figure-frame: color(display-p3 0.4157 0.4157 0.4157);
|
|
158
167
|
--color-border-code: #d6d3d1;
|
|
159
168
|
--color-border-code: color(display-p3 0.8371 0.8278 0.8205);
|
|
160
169
|
--color-content-primary: #14140f;
|
|
@@ -211,6 +220,8 @@
|
|
|
211
220
|
--color-surface-page-scrolled: color(display-p3 0.0784 0.0784 0.0643);
|
|
212
221
|
--color-surface-elevated: #1c1917;
|
|
213
222
|
--color-surface-elevated: color(display-p3 0.1078 0.0985 0.0911);
|
|
223
|
+
--color-surface-figure-plate: #dcdcda;
|
|
224
|
+
--color-surface-figure-plate: color(display-p3 0.8627 0.8627 0.8556);
|
|
214
225
|
--color-surface-sunken: #0c0a09;
|
|
215
226
|
--color-surface-sunken: color(display-p3 0.0457 0.0395 0.0358);
|
|
216
227
|
--color-surface-navbar: #141410;
|
|
@@ -227,6 +238,8 @@
|
|
|
227
238
|
--color-border-strong: color(display-p3 0.9894 0.977 0.9518 / 0.75);
|
|
228
239
|
--color-border-card: rgba(253, 249, 242, 0.60);
|
|
229
240
|
--color-border-card: color(display-p3 0.9894 0.977 0.9518 / 0.60);
|
|
241
|
+
--color-border-figure-frame: #6a6a6a;
|
|
242
|
+
--color-border-figure-frame: color(display-p3 0.4157 0.4157 0.4157);
|
|
230
243
|
--color-border-code: #292524;
|
|
231
244
|
--color-border-code: color(display-p3 0.1581 0.1456 0.1418);
|
|
232
245
|
--color-content-primary: #fdf9f2;
|
|
@@ -284,6 +297,8 @@
|
|
|
284
297
|
--color-surface-page-scrolled: color(display-p3 0.0784 0.0784 0.0643);
|
|
285
298
|
--color-surface-elevated: #1c1917;
|
|
286
299
|
--color-surface-elevated: color(display-p3 0.1078 0.0985 0.0911);
|
|
300
|
+
--color-surface-figure-plate: #dcdcda;
|
|
301
|
+
--color-surface-figure-plate: color(display-p3 0.8627 0.8627 0.8556);
|
|
287
302
|
--color-surface-sunken: #0c0a09;
|
|
288
303
|
--color-surface-sunken: color(display-p3 0.0457 0.0395 0.0358);
|
|
289
304
|
--color-surface-navbar: #141410;
|
|
@@ -300,6 +315,8 @@
|
|
|
300
315
|
--color-border-strong: color(display-p3 0.9894 0.977 0.9518 / 0.75);
|
|
301
316
|
--color-border-card: rgba(253, 249, 242, 0.60);
|
|
302
317
|
--color-border-card: color(display-p3 0.9894 0.977 0.9518 / 0.60);
|
|
318
|
+
--color-border-figure-frame: #6a6a6a;
|
|
319
|
+
--color-border-figure-frame: color(display-p3 0.4157 0.4157 0.4157);
|
|
303
320
|
--color-border-code: #292524;
|
|
304
321
|
--color-border-code: color(display-p3 0.1581 0.1456 0.1418);
|
|
305
322
|
--color-content-primary: #fdf9f2;
|
package/dist/tokens.dtcg.json
CHANGED
|
@@ -25,6 +25,14 @@
|
|
|
25
25
|
"$type": "color",
|
|
26
26
|
"$description": "Cards, modals, dropdowns — one step above page (stone-50 on stone-100 / ink-800 on stone-900-aligned dark)"
|
|
27
27
|
},
|
|
28
|
+
"figure-plate": {
|
|
29
|
+
"$value": {
|
|
30
|
+
"light": "#f7f7f6",
|
|
31
|
+
"dark": "#dcdcda"
|
|
32
|
+
},
|
|
33
|
+
"$type": "color",
|
|
34
|
+
"$description": "Figure plate: the ground a .box figure sits on, in HTML (figure img.box, the figure modal) and the PDF (di-figure-plate). Figures are dark ink and Okabe-Ito colours drawn for a light ground, so the plate stays light in dark mode, dimmed one step to cut glare: stone-50 (light) / stone-200 (dark). Dark-mode plate #dcdcda: dark ink 13.5:1, okabe-ito blue 3.8, vermillion 2.8, bluish-green 2.5, reddish-purple 2.2, sky-blue 1.7, orange 1.6 (the light plate's 4.8/3.6/3.2/2.9/2.2/2.1); the light content.secondary frame 3.9:1 on it. Hue separation is checked plate-independently by the data-viz colour-blind gate. Maintainer decision 2026-11-01 (dimmed light plate); a 42%-white mix over the dark page (#777774) was rejected (colours ~1.2:1)."
|
|
35
|
+
},
|
|
28
36
|
"sunken": {
|
|
29
37
|
"$value": {
|
|
30
38
|
"light": "#faf2e3",
|
|
@@ -91,6 +99,14 @@
|
|
|
91
99
|
"$type": "color",
|
|
92
100
|
"$description": "Card border color with transparency for subtle definition. See border.subtle on why the alpha is load-bearing and why no number is quoted here."
|
|
93
101
|
},
|
|
102
|
+
"figure-frame": {
|
|
103
|
+
"$value": {
|
|
104
|
+
"light": "#6a6a6a",
|
|
105
|
+
"dark": "#6a6a6a"
|
|
106
|
+
},
|
|
107
|
+
"$type": "color",
|
|
108
|
+
"$description": "Figure frame: the 1px rule round a .box figure and the border of an enlarged figure in the figure modal. It sits on surface.figure-plate, which is light in both modes, so the frame keeps the light content.secondary value in both: 5.0:1 on the light plate #f7f7f6 and 3.9:1 on the dimmed dark-mode plate #dcdcda (WCAG 1.4.11 non-text, 3:1). The PDF's di-figure-frame is the same colour (2026-11-01)."
|
|
109
|
+
},
|
|
94
110
|
"code": {
|
|
95
111
|
"$value": {
|
|
96
112
|
"light": "#d6d3d1",
|
|
@@ -497,9 +513,9 @@
|
|
|
497
513
|
"font": {
|
|
498
514
|
"family": {
|
|
499
515
|
"sans": {
|
|
500
|
-
"$value": "Noto Sans,
|
|
516
|
+
"$value": "Noto Sans, Noto Sans Math, system-ui, sans-serif",
|
|
501
517
|
"$type": "other",
|
|
502
|
-
"$description": "Primary sans-serif font - body text"
|
|
518
|
+
"$description": "Primary sans-serif font - body text. Noto Sans Math is second so a glyph Noto Sans lacks (arrows such as U+2192, maths operators) is drawn by the shipped Noto, not a system font; a page downloads the maths face only when it needs such a glyph. Fira Sans, a leftover of the ai-native extension, was dropped (2026-11-01)."
|
|
503
519
|
},
|
|
504
520
|
"mono": {
|
|
505
521
|
"$value": "Noto Sans Mono, SF Mono, Monaco, Inconsolata, monospace",
|
package/dist/tokens.scss
CHANGED
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
--transition-standard: 0.25s ease-in-out;
|
|
64
64
|
--transition-smooth: 0.35s ease;
|
|
65
65
|
--transition-logo: 0.3s;
|
|
66
|
-
--font-family-sans: Noto Sans,
|
|
66
|
+
--font-family-sans: Noto Sans, Noto Sans Math, system-ui, sans-serif;
|
|
67
67
|
--font-family-mono: Noto Sans Mono, SF Mono, Monaco, Inconsolata, monospace;
|
|
68
68
|
--font-family-display: var(--font-family-display-editorial);
|
|
69
69
|
--font-family-display-editorial: Josefin Sans, Noto Sans, system-ui, sans-serif;
|
|
@@ -130,6 +130,11 @@
|
|
|
130
130
|
--color-dataviz-categorical-5: #0072B2;
|
|
131
131
|
--color-dataviz-categorical-6: #D55E00;
|
|
132
132
|
--color-dataviz-categorical-7: #CC79A7;
|
|
133
|
+
--color-dataviz-sgpc-bucket-very-low: #D55E00;
|
|
134
|
+
--color-dataviz-sgpc-bucket-low: #E69F00;
|
|
135
|
+
--color-dataviz-sgpc-bucket-typical: #56B4E9;
|
|
136
|
+
--color-dataviz-sgpc-bucket-high: #009E73;
|
|
137
|
+
--color-dataviz-sgpc-bucket-very-high: #0072B2;
|
|
133
138
|
}
|
|
134
139
|
|
|
135
140
|
:root, [data-bs-theme="light"] {
|
|
@@ -139,6 +144,8 @@
|
|
|
139
144
|
--color-surface-page-scrolled: color(display-p3 0.9294 0.9294 0.9223);
|
|
140
145
|
--color-surface-elevated: #f7f7f6;
|
|
141
146
|
--color-surface-elevated: color(display-p3 0.9686 0.9686 0.9651);
|
|
147
|
+
--color-surface-figure-plate: #f7f7f6;
|
|
148
|
+
--color-surface-figure-plate: color(display-p3 0.9686 0.9686 0.9651);
|
|
142
149
|
--color-surface-sunken: #faf2e3;
|
|
143
150
|
--color-surface-sunken: color(display-p3 0.9749 0.9501 0.8963);
|
|
144
151
|
--color-surface-navbar: #ededeb;
|
|
@@ -155,6 +162,8 @@
|
|
|
155
162
|
--color-border-strong: color(display-p3 0.0457 0.0395 0.0358 / 0.75);
|
|
156
163
|
--color-border-card: rgba(12, 10, 9, 0.60);
|
|
157
164
|
--color-border-card: color(display-p3 0.0457 0.0395 0.0358 / 0.60);
|
|
165
|
+
--color-border-figure-frame: #6a6a6a;
|
|
166
|
+
--color-border-figure-frame: color(display-p3 0.4157 0.4157 0.4157);
|
|
158
167
|
--color-border-code: #d6d3d1;
|
|
159
168
|
--color-border-code: color(display-p3 0.8371 0.8278 0.8205);
|
|
160
169
|
--color-content-primary: #14140f;
|
|
@@ -211,6 +220,8 @@
|
|
|
211
220
|
--color-surface-page-scrolled: color(display-p3 0.0784 0.0784 0.0643);
|
|
212
221
|
--color-surface-elevated: #1c1917;
|
|
213
222
|
--color-surface-elevated: color(display-p3 0.1078 0.0985 0.0911);
|
|
223
|
+
--color-surface-figure-plate: #dcdcda;
|
|
224
|
+
--color-surface-figure-plate: color(display-p3 0.8627 0.8627 0.8556);
|
|
214
225
|
--color-surface-sunken: #0c0a09;
|
|
215
226
|
--color-surface-sunken: color(display-p3 0.0457 0.0395 0.0358);
|
|
216
227
|
--color-surface-navbar: #141410;
|
|
@@ -227,6 +238,8 @@
|
|
|
227
238
|
--color-border-strong: color(display-p3 0.9894 0.977 0.9518 / 0.75);
|
|
228
239
|
--color-border-card: rgba(253, 249, 242, 0.60);
|
|
229
240
|
--color-border-card: color(display-p3 0.9894 0.977 0.9518 / 0.60);
|
|
241
|
+
--color-border-figure-frame: #6a6a6a;
|
|
242
|
+
--color-border-figure-frame: color(display-p3 0.4157 0.4157 0.4157);
|
|
230
243
|
--color-border-code: #292524;
|
|
231
244
|
--color-border-code: color(display-p3 0.1581 0.1456 0.1418);
|
|
232
245
|
--color-content-primary: #fdf9f2;
|
|
@@ -284,6 +297,8 @@
|
|
|
284
297
|
--color-surface-page-scrolled: color(display-p3 0.0784 0.0784 0.0643);
|
|
285
298
|
--color-surface-elevated: #1c1917;
|
|
286
299
|
--color-surface-elevated: color(display-p3 0.1078 0.0985 0.0911);
|
|
300
|
+
--color-surface-figure-plate: #dcdcda;
|
|
301
|
+
--color-surface-figure-plate: color(display-p3 0.8627 0.8627 0.8556);
|
|
287
302
|
--color-surface-sunken: #0c0a09;
|
|
288
303
|
--color-surface-sunken: color(display-p3 0.0457 0.0395 0.0358);
|
|
289
304
|
--color-surface-navbar: #141410;
|
|
@@ -300,6 +315,8 @@
|
|
|
300
315
|
--color-border-strong: color(display-p3 0.9894 0.977 0.9518 / 0.75);
|
|
301
316
|
--color-border-card: rgba(253, 249, 242, 0.60);
|
|
302
317
|
--color-border-card: color(display-p3 0.9894 0.977 0.9518 / 0.60);
|
|
318
|
+
--color-border-figure-frame: #6a6a6a;
|
|
319
|
+
--color-border-figure-frame: color(display-p3 0.4157 0.4157 0.4157);
|
|
303
320
|
--color-border-code: #292524;
|
|
304
321
|
--color-border-code: color(display-p3 0.1581 0.1456 0.1418);
|
|
305
322
|
--color-content-primary: #fdf9f2;
|
package/dist/tokens.studio.json
CHANGED
|
@@ -14,6 +14,10 @@
|
|
|
14
14
|
"value": "#f7f7f6",
|
|
15
15
|
"type": "color"
|
|
16
16
|
},
|
|
17
|
+
"figure-plate": {
|
|
18
|
+
"value": "#f7f7f6",
|
|
19
|
+
"type": "color"
|
|
20
|
+
},
|
|
17
21
|
"sunken": {
|
|
18
22
|
"value": "#faf2e3",
|
|
19
23
|
"type": "color"
|
|
@@ -48,6 +52,10 @@
|
|
|
48
52
|
"value": "rgba(12, 10, 9, 0.60)",
|
|
49
53
|
"type": "color"
|
|
50
54
|
},
|
|
55
|
+
"figure-frame": {
|
|
56
|
+
"value": "#6a6a6a",
|
|
57
|
+
"type": "color"
|
|
58
|
+
},
|
|
51
59
|
"code": {
|
|
52
60
|
"value": "#d6d3d1",
|
|
53
61
|
"type": "color"
|
|
@@ -209,6 +217,28 @@
|
|
|
209
217
|
"value": "#333333",
|
|
210
218
|
"type": "color"
|
|
211
219
|
}
|
|
220
|
+
},
|
|
221
|
+
"sgpc-bucket": {
|
|
222
|
+
"very-low": {
|
|
223
|
+
"value": "#D55E00",
|
|
224
|
+
"type": "color"
|
|
225
|
+
},
|
|
226
|
+
"low": {
|
|
227
|
+
"value": "#E69F00",
|
|
228
|
+
"type": "color"
|
|
229
|
+
},
|
|
230
|
+
"typical": {
|
|
231
|
+
"value": "#56B4E9",
|
|
232
|
+
"type": "color"
|
|
233
|
+
},
|
|
234
|
+
"high": {
|
|
235
|
+
"value": "#009E73",
|
|
236
|
+
"type": "color"
|
|
237
|
+
},
|
|
238
|
+
"very-high": {
|
|
239
|
+
"value": "#0072B2",
|
|
240
|
+
"type": "color"
|
|
241
|
+
}
|
|
212
242
|
}
|
|
213
243
|
}
|
|
214
244
|
},
|
|
@@ -265,7 +295,7 @@
|
|
|
265
295
|
"font": {
|
|
266
296
|
"family": {
|
|
267
297
|
"sans": {
|
|
268
|
-
"value": "Noto Sans,
|
|
298
|
+
"value": "Noto Sans, Noto Sans Math, system-ui, sans-serif",
|
|
269
299
|
"type": "other"
|
|
270
300
|
},
|
|
271
301
|
"mono": {
|
|
@@ -502,6 +532,10 @@
|
|
|
502
532
|
"value": "#1c1917",
|
|
503
533
|
"type": "color"
|
|
504
534
|
},
|
|
535
|
+
"figure-plate": {
|
|
536
|
+
"value": "#dcdcda",
|
|
537
|
+
"type": "color"
|
|
538
|
+
},
|
|
505
539
|
"sunken": {
|
|
506
540
|
"value": "#0c0a09",
|
|
507
541
|
"type": "color"
|
|
@@ -536,6 +570,10 @@
|
|
|
536
570
|
"value": "rgba(253, 249, 242, 0.60)",
|
|
537
571
|
"type": "color"
|
|
538
572
|
},
|
|
573
|
+
"figure-frame": {
|
|
574
|
+
"value": "#6a6a6a",
|
|
575
|
+
"type": "color"
|
|
576
|
+
},
|
|
539
577
|
"code": {
|
|
540
578
|
"value": "#292524",
|
|
541
579
|
"type": "color"
|
|
@@ -31,6 +31,16 @@
|
|
|
31
31
|
},
|
|
32
32
|
"$description": "Cards, modals, dropdowns — one step above page (stone-50 on stone-100 / ink-800 on stone-900-aligned dark)"
|
|
33
33
|
},
|
|
34
|
+
"figure-plate": {
|
|
35
|
+
"$value": "#f7f7f6",
|
|
36
|
+
"$type": "color",
|
|
37
|
+
"$extensions": {
|
|
38
|
+
"com.dataimago.theme": {
|
|
39
|
+
"dark": "#dcdcda"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"$description": "Figure plate: the ground a .box figure sits on, in HTML (figure img.box, the figure modal) and the PDF (di-figure-plate). Figures are dark ink and Okabe-Ito colours drawn for a light ground, so the plate stays light in dark mode, dimmed one step to cut glare: stone-50 (light) / stone-200 (dark). Dark-mode plate #dcdcda: dark ink 13.5:1, okabe-ito blue 3.8, vermillion 2.8, bluish-green 2.5, reddish-purple 2.2, sky-blue 1.7, orange 1.6 (the light plate's 4.8/3.6/3.2/2.9/2.2/2.1); the light content.secondary frame 3.9:1 on it. Hue separation is checked plate-independently by the data-viz colour-blind gate. Maintainer decision 2026-11-01 (dimmed light plate); a 42%-white mix over the dark page (#777774) was rejected (colours ~1.2:1)."
|
|
43
|
+
},
|
|
34
44
|
"sunken": {
|
|
35
45
|
"$value": "#faf2e3",
|
|
36
46
|
"$type": "color",
|
|
@@ -113,6 +123,16 @@
|
|
|
113
123
|
},
|
|
114
124
|
"$description": "Card border color with transparency for subtle definition. See border.subtle on why the alpha is load-bearing and why no number is quoted here."
|
|
115
125
|
},
|
|
126
|
+
"figure-frame": {
|
|
127
|
+
"$value": "#6a6a6a",
|
|
128
|
+
"$type": "color",
|
|
129
|
+
"$extensions": {
|
|
130
|
+
"com.dataimago.theme": {
|
|
131
|
+
"dark": "#6a6a6a"
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
"$description": "Figure frame: the 1px rule round a .box figure and the border of an enlarged figure in the figure modal. It sits on surface.figure-plate, which is light in both modes, so the frame keeps the light content.secondary value in both: 5.0:1 on the light plate #f7f7f6 and 3.9:1 on the dimmed dark-mode plate #dcdcda (WCAG 1.4.11 non-text, 3:1). The PDF's di-figure-frame is the same colour (2026-11-01)."
|
|
135
|
+
},
|
|
116
136
|
"code": {
|
|
117
137
|
"$value": "#d6d3d1",
|
|
118
138
|
"$type": "color",
|
|
@@ -406,6 +426,33 @@
|
|
|
406
426
|
},
|
|
407
427
|
"$description": "Innermost band (gray 0.20); mirrored in dark mode, where #333333 would be 1.46:1. Dark value approved by the maintainer 2026-10-29 (dataviz-check --propose-dark)."
|
|
408
428
|
}
|
|
429
|
+
},
|
|
430
|
+
"sgpc-bucket": {
|
|
431
|
+
"very-low": {
|
|
432
|
+
"$value": "#D55E00",
|
|
433
|
+
"$type": "color",
|
|
434
|
+
"$description": "= okabe-ito.vermillion. SGPc growth bucket 1 of 5 (very low) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
435
|
+
},
|
|
436
|
+
"low": {
|
|
437
|
+
"$value": "#E69F00",
|
|
438
|
+
"$type": "color",
|
|
439
|
+
"$description": "= okabe-ito.orange. SGPc growth bucket 2 of 5 (low) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
440
|
+
},
|
|
441
|
+
"typical": {
|
|
442
|
+
"$value": "#56B4E9",
|
|
443
|
+
"$type": "color",
|
|
444
|
+
"$description": "= okabe-ito.sky-blue. SGPc growth bucket 3 of 5 (typical) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
445
|
+
},
|
|
446
|
+
"high": {
|
|
447
|
+
"$value": "#009E73",
|
|
448
|
+
"$type": "color",
|
|
449
|
+
"$description": "= okabe-ito.bluish-green. SGPc growth bucket 4 of 5 (high) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
450
|
+
},
|
|
451
|
+
"very-high": {
|
|
452
|
+
"$value": "#0072B2",
|
|
453
|
+
"$type": "color",
|
|
454
|
+
"$description": "= okabe-ito.blue. SGPc growth bucket 5 of 5 (very high) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
455
|
+
}
|
|
409
456
|
}
|
|
410
457
|
}
|
|
411
458
|
},
|
|
@@ -480,8 +527,8 @@
|
|
|
480
527
|
"font": {
|
|
481
528
|
"family": {
|
|
482
529
|
"sans": {
|
|
483
|
-
"$value": "Noto Sans,
|
|
484
|
-
"$description": "Primary sans-serif font - body text"
|
|
530
|
+
"$value": "Noto Sans, Noto Sans Math, system-ui, sans-serif",
|
|
531
|
+
"$description": "Primary sans-serif font - body text. Noto Sans Math is second so a glyph Noto Sans lacks (arrows such as U+2192, maths operators) is drawn by the shipped Noto, not a system font; a page downloads the maths face only when it needs such a glyph. Fira Sans, a leftover of the ai-native extension, was dropped (2026-11-01)."
|
|
485
532
|
},
|
|
486
533
|
"mono": {
|
|
487
534
|
"$value": "Noto Sans Mono, SF Mono, Monaco, Inconsolata, monospace",
|
package/package.json
CHANGED
package/src/dataviz.json
CHANGED
|
@@ -87,6 +87,28 @@
|
|
|
87
87
|
"dark": "#D6D6D6",
|
|
88
88
|
"description": "Innermost band (gray 0.20); mirrored in dark mode, where #333333 would be 1.46:1. Dark value approved by the maintainer 2026-10-29 (dataviz-check --propose-dark)."
|
|
89
89
|
}
|
|
90
|
+
},
|
|
91
|
+
"sgpc-bucket": {
|
|
92
|
+
"very-low": {
|
|
93
|
+
"value": "#D55E00",
|
|
94
|
+
"description": "= okabe-ito.vermillion. SGPc growth bucket 1 of 5 (very low) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
95
|
+
},
|
|
96
|
+
"low": {
|
|
97
|
+
"value": "#E69F00",
|
|
98
|
+
"description": "= okabe-ito.orange. SGPc growth bucket 2 of 5 (low) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
99
|
+
},
|
|
100
|
+
"typical": {
|
|
101
|
+
"value": "#56B4E9",
|
|
102
|
+
"description": "= okabe-ito.sky-blue. SGPc growth bucket 3 of 5 (typical) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
103
|
+
},
|
|
104
|
+
"high": {
|
|
105
|
+
"value": "#009E73",
|
|
106
|
+
"description": "= okabe-ito.bluish-green. SGPc growth bucket 4 of 5 (high) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
107
|
+
},
|
|
108
|
+
"very-high": {
|
|
109
|
+
"value": "#0072B2",
|
|
110
|
+
"description": "= okabe-ito.blue. SGPc growth bucket 5 of 5 (very high) on the ordered scale very low → very high. Colour is never the only channel: pair it with a marker and the bucket letter code. Author decision 2026-11-01, matching the LIwLD paper's figures."
|
|
111
|
+
}
|
|
90
112
|
}
|
|
91
113
|
}
|
|
92
114
|
}
|
package/src/theme-colors-p3.json
CHANGED
|
@@ -40,6 +40,19 @@
|
|
|
40
40
|
},
|
|
41
41
|
"description": "Cards, modals, dropdowns — one step above page (stone-50 on stone-100 / ink-800 on stone-900-aligned dark)"
|
|
42
42
|
},
|
|
43
|
+
"figure-plate": {
|
|
44
|
+
"light": {
|
|
45
|
+
"srgb": "#f7f7f6",
|
|
46
|
+
"oklch": "oklch(97.59% 0.0013 106.42)",
|
|
47
|
+
"p3": "color(display-p3 0.9686 0.9686 0.9651)"
|
|
48
|
+
},
|
|
49
|
+
"dark": {
|
|
50
|
+
"srgb": "#dcdcda",
|
|
51
|
+
"oklch": "oklch(89.39% 0.0027 106.45)",
|
|
52
|
+
"p3": "color(display-p3 0.8627 0.8627 0.8556)"
|
|
53
|
+
},
|
|
54
|
+
"description": "Figure plate: the ground a .box figure sits on, in HTML (figure img.box, the figure modal) and the PDF (di-figure-plate). Figures are dark ink and Okabe-Ito colours drawn for a light ground, so the plate stays light in dark mode, dimmed one step to cut glare: stone-50 (light) / stone-200 (dark). Dark-mode plate #dcdcda: dark ink 13.5:1, okabe-ito blue 3.8, vermillion 2.8, bluish-green 2.5, reddish-purple 2.2, sky-blue 1.7, orange 1.6 (the light plate's 4.8/3.6/3.2/2.9/2.2/2.1); the light content.secondary frame 3.9:1 on it. Hue separation is checked plate-independently by the data-viz colour-blind gate. Maintainer decision 2026-11-01 (dimmed light plate); a 42%-white mix over the dark page (#777774) was rejected (colours ~1.2:1)."
|
|
55
|
+
},
|
|
43
56
|
"sunken": {
|
|
44
57
|
"light": {
|
|
45
58
|
"srgb": "#faf2e3",
|
|
@@ -146,6 +159,19 @@
|
|
|
146
159
|
},
|
|
147
160
|
"description": "Card border color with transparency for subtle definition. See border.subtle on why the alpha is load-bearing and why no number is quoted here."
|
|
148
161
|
},
|
|
162
|
+
"figure-frame": {
|
|
163
|
+
"light": {
|
|
164
|
+
"srgb": "#6a6a6a",
|
|
165
|
+
"oklch": "oklch(52.43% 0 0)",
|
|
166
|
+
"p3": "color(display-p3 0.4157 0.4157 0.4157)"
|
|
167
|
+
},
|
|
168
|
+
"dark": {
|
|
169
|
+
"srgb": "#6a6a6a",
|
|
170
|
+
"oklch": "oklch(52.43% 0 0)",
|
|
171
|
+
"p3": "color(display-p3 0.4157 0.4157 0.4157)"
|
|
172
|
+
},
|
|
173
|
+
"description": "Figure frame: the 1px rule round a .box figure and the border of an enlarged figure in the figure modal. It sits on surface.figure-plate, which is light in both modes, so the frame keeps the light content.secondary value in both: 5.0:1 on the light plate #f7f7f6 and 3.9:1 on the dimmed dark-mode plate #dcdcda (WCAG 1.4.11 non-text, 3:1). The PDF's di-figure-frame is the same colour (2026-11-01)."
|
|
174
|
+
},
|
|
149
175
|
"code": {
|
|
150
176
|
"light": {
|
|
151
177
|
"srgb": "#d6d3d1",
|
package/src/theme-colors.json
CHANGED
|
@@ -16,6 +16,11 @@
|
|
|
16
16
|
"dark": "#1c1917",
|
|
17
17
|
"description": "Cards, modals, dropdowns — one step above page (stone-50 on stone-100 / ink-800 on stone-900-aligned dark)"
|
|
18
18
|
},
|
|
19
|
+
"figure-plate": {
|
|
20
|
+
"light": "#f7f7f6",
|
|
21
|
+
"dark": "#dcdcda",
|
|
22
|
+
"description": "Figure plate: the ground a .box figure sits on, in HTML (figure img.box, the figure modal) and the PDF (di-figure-plate). Figures are dark ink and Okabe-Ito colours drawn for a light ground, so the plate stays light in dark mode, dimmed one step to cut glare: stone-50 (light) / stone-200 (dark). Dark-mode plate #dcdcda: dark ink 13.5:1, okabe-ito blue 3.8, vermillion 2.8, bluish-green 2.5, reddish-purple 2.2, sky-blue 1.7, orange 1.6 (the light plate's 4.8/3.6/3.2/2.9/2.2/2.1); the light content.secondary frame 3.9:1 on it. Hue separation is checked plate-independently by the data-viz colour-blind gate. Maintainer decision 2026-11-01 (dimmed light plate); a 42%-white mix over the dark page (#777774) was rejected (colours ~1.2:1)."
|
|
23
|
+
},
|
|
19
24
|
"sunken": {
|
|
20
25
|
"light": "#faf2e3",
|
|
21
26
|
"dark": "#0c0a09",
|
|
@@ -58,6 +63,11 @@
|
|
|
58
63
|
"dark": "rgba(253, 249, 242, 0.60)",
|
|
59
64
|
"description": "Card border color with transparency for subtle definition. See border.subtle on why the alpha is load-bearing and why no number is quoted here."
|
|
60
65
|
},
|
|
66
|
+
"figure-frame": {
|
|
67
|
+
"light": "#6a6a6a",
|
|
68
|
+
"dark": "#6a6a6a",
|
|
69
|
+
"description": "Figure frame: the 1px rule round a .box figure and the border of an enlarged figure in the figure modal. It sits on surface.figure-plate, which is light in both modes, so the frame keeps the light content.secondary value in both: 5.0:1 on the light plate #f7f7f6 and 3.9:1 on the dimmed dark-mode plate #dcdcda (WCAG 1.4.11 non-text, 3:1). The PDF's di-figure-frame is the same colour (2026-11-01)."
|
|
70
|
+
},
|
|
61
71
|
"code": {
|
|
62
72
|
"light": "#d6d3d1",
|
|
63
73
|
"dark": "#292524",
|
package/src/typography.json
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"font": {
|
|
3
3
|
"family": {
|
|
4
4
|
"sans": {
|
|
5
|
-
"value": "Noto Sans,
|
|
6
|
-
"description": "Primary sans-serif font - body text"
|
|
5
|
+
"value": "Noto Sans, Noto Sans Math, system-ui, sans-serif",
|
|
6
|
+
"description": "Primary sans-serif font - body text. Noto Sans Math is second so a glyph Noto Sans lacks (arrows such as U+2192, maths operators) is drawn by the shipped Noto, not a system font; a page downloads the maths face only when it needs such a glyph. Fira Sans, a leftover of the ai-native extension, was dropped (2026-11-01)."
|
|
7
7
|
},
|
|
8
8
|
"mono": {
|
|
9
9
|
"value": "Noto Sans Mono, SF Mono, Monaco, Inconsolata, monospace",
|