@humanforest/tokens 0.1.0
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/LICENSE +67 -0
- package/dataviz/dataviz.css +149 -0
- package/dataviz/tokens.json +1591 -0
- package/dataviz/unovis.css +151 -0
- package/deck/deck.css +515 -0
- package/deck/deck.json +358 -0
- package/geo/london-boroughs.json +1 -0
- package/geo/london-dots-coarse.json +1 -0
- package/geo/london-dots-fine.json +1 -0
- package/geo/london-dots-medium.json +1 -0
- package/geo/london-dots-ultra.json +1 -0
- package/geo/london-wards.json +1 -0
- package/glyphs/glyphs.json +1 -0
- package/logos/f-rot.svg +4 -0
- package/logos/f.svg +4 -0
- package/logos/favicon-c2w.svg +9 -0
- package/logos/favicon-console.svg +9 -0
- package/logos/favicon-ds.svg +9 -0
- package/logos/favicon-fleet.svg +9 -0
- package/logos/favicon-flex.svg +9 -0
- package/logos/favicon-plus.svg +9 -0
- package/logos/favicon-radar.svg +9 -0
- package/logos/favicon-tower.svg +9 -0
- package/logos/lockup-horizontal.svg +17 -0
- package/logos/lockup-vertical.svg +17 -0
- package/logos/mark-mono.svg +4 -0
- package/logos/mark.svg +7 -0
- package/logos/wordmark.svg +9 -0
- package/motion/motion.css +104 -0
- package/motion/motion.json +85 -0
- package/motion/motion.theme.css +16 -0
- package/package.json +50 -0
- package/scales/ramps.css +182 -0
- package/scales/ramps.json +605 -0
- package/scales/theme.css +256 -0
- package/src/colourEngine.ts +604 -0
- package/src/glyphs.ts +127 -0
- package/src/logo.ts +50 -0
- package/src/subbrands.ts +44 -0
- package/src/sublogo.ts +80 -0
- package/src/sublogoSvg.ts +134 -0
- package/type/type.css +232 -0
- package/type/type.deck.css +74 -0
- package/type/type.json +548 -0
- package/type/type.theme.css +31 -0
package/type/type.css
ADDED
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/* Forest typography core — generated by scripts/type.ts (size ramp = Tailwind's default scale). Do not edit.
|
|
2
|
+
Parallels packages/tokens/scales/scales.css: a systematic ramp + named roles. Families resolve via the shared
|
|
3
|
+
@theme vars in packages/ui/src/styles/forest.css (--font-display / --font-sans / --font-mono). */
|
|
4
|
+
:root {
|
|
5
|
+
/* size ramp = Tailwind's default font-size scale, named xs…7xl (md = 16px base). Namespaced so it
|
|
6
|
+
never collides with Tailwind's own --text-* scale. Use as var(--type-text-lg) etc. For real
|
|
7
|
+
text-<name> Tailwind utilities, import the opt-in packages/tokens/type/type.theme.css. */
|
|
8
|
+
--type-text-xs: 0.75rem;
|
|
9
|
+
--type-text-sm: 0.875rem;
|
|
10
|
+
--type-text-md: 1rem; /* md · base */
|
|
11
|
+
--type-text-lg: 1.125rem;
|
|
12
|
+
--type-text-xl: 1.25rem;
|
|
13
|
+
--type-text-2xl: 1.5rem;
|
|
14
|
+
--type-text-3xl: 1.875rem;
|
|
15
|
+
--type-text-4xl: 2.25rem;
|
|
16
|
+
--type-text-5xl: 3rem;
|
|
17
|
+
--type-text-6xl: 3.75rem;
|
|
18
|
+
--type-text-7xl: 4.5rem;
|
|
19
|
+
--type-text-8xl: 6rem;
|
|
20
|
+
--type-text-9xl: 8rem;
|
|
21
|
+
|
|
22
|
+
/* role bundles — size · leading · weight · tracking · family */
|
|
23
|
+
--type-display-size: 3rem;
|
|
24
|
+
--type-display-line-height: 1;
|
|
25
|
+
--type-display-weight: 900;
|
|
26
|
+
--type-display-tracking: 0.01em;
|
|
27
|
+
--type-display-family: var(--font-display);
|
|
28
|
+
--type-display-transform: uppercase;
|
|
29
|
+
--type-display-size-fluid: clamp(2.25rem, 1.5rem + 3vw, 4.5rem);
|
|
30
|
+
--type-headline-size: 1.875rem;
|
|
31
|
+
--type-headline-line-height: 1.1;
|
|
32
|
+
--type-headline-weight: 900;
|
|
33
|
+
--type-headline-tracking: 0.01em;
|
|
34
|
+
--type-headline-family: var(--font-display);
|
|
35
|
+
--type-headline-transform: uppercase;
|
|
36
|
+
--type-title-size: 1.5rem;
|
|
37
|
+
--type-title-line-height: 1.18;
|
|
38
|
+
--type-title-weight: 700;
|
|
39
|
+
--type-title-tracking: 0em;
|
|
40
|
+
--type-title-family: var(--font-sans);
|
|
41
|
+
--type-title-transform: none;
|
|
42
|
+
--type-heading-sm-size: 1.125rem;
|
|
43
|
+
--type-heading-sm-line-height: 1.3;
|
|
44
|
+
--type-heading-sm-weight: 700;
|
|
45
|
+
--type-heading-sm-tracking: 0em;
|
|
46
|
+
--type-heading-sm-family: var(--font-sans);
|
|
47
|
+
--type-heading-sm-transform: none;
|
|
48
|
+
--type-heading-xs-size: 1rem;
|
|
49
|
+
--type-heading-xs-line-height: 1.3;
|
|
50
|
+
--type-heading-xs-weight: 700;
|
|
51
|
+
--type-heading-xs-tracking: 0em;
|
|
52
|
+
--type-heading-xs-family: var(--font-sans);
|
|
53
|
+
--type-heading-xs-transform: none;
|
|
54
|
+
--type-subtitle-size: 1.125rem;
|
|
55
|
+
--type-subtitle-line-height: 1.5;
|
|
56
|
+
--type-subtitle-weight: 400;
|
|
57
|
+
--type-subtitle-tracking: 0em;
|
|
58
|
+
--type-subtitle-family: var(--font-sans);
|
|
59
|
+
--type-subtitle-transform: none;
|
|
60
|
+
--type-body-size: 1rem;
|
|
61
|
+
--type-body-line-height: 1.6;
|
|
62
|
+
--type-body-weight: 400;
|
|
63
|
+
--type-body-tracking: 0em;
|
|
64
|
+
--type-body-family: var(--font-sans);
|
|
65
|
+
--type-body-transform: none;
|
|
66
|
+
--type-body-sm-size: 0.875rem;
|
|
67
|
+
--type-body-sm-line-height: 1.5;
|
|
68
|
+
--type-body-sm-weight: 400;
|
|
69
|
+
--type-body-sm-tracking: 0em;
|
|
70
|
+
--type-body-sm-family: var(--font-sans);
|
|
71
|
+
--type-body-sm-transform: none;
|
|
72
|
+
--type-label-size: 0.875rem;
|
|
73
|
+
--type-label-line-height: 1.2;
|
|
74
|
+
--type-label-weight: 700;
|
|
75
|
+
--type-label-tracking: 0.01em;
|
|
76
|
+
--type-label-family: var(--font-sans);
|
|
77
|
+
--type-label-transform: none;
|
|
78
|
+
--type-caption-size: 0.75rem;
|
|
79
|
+
--type-caption-line-height: 1.4;
|
|
80
|
+
--type-caption-weight: 400;
|
|
81
|
+
--type-caption-tracking: 0em;
|
|
82
|
+
--type-caption-family: var(--font-sans);
|
|
83
|
+
--type-caption-transform: none;
|
|
84
|
+
--type-overline-size: 0.75rem;
|
|
85
|
+
--type-overline-line-height: 1.1;
|
|
86
|
+
--type-overline-weight: 700;
|
|
87
|
+
--type-overline-tracking: 0.08em;
|
|
88
|
+
--type-overline-family: var(--font-sans);
|
|
89
|
+
--type-overline-transform: uppercase;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/* role utility classes — set the whole bundle in one class (text-transform baked in for Mohr/overline) */
|
|
93
|
+
.type-display {
|
|
94
|
+
font-family: var(--type-display-family);
|
|
95
|
+
font-size: var(--type-display-size);
|
|
96
|
+
line-height: var(--type-display-line-height);
|
|
97
|
+
font-weight: var(--type-display-weight);
|
|
98
|
+
letter-spacing: var(--type-display-tracking);
|
|
99
|
+
text-transform: var(--type-display-transform);
|
|
100
|
+
}
|
|
101
|
+
.type-headline {
|
|
102
|
+
font-family: var(--type-headline-family);
|
|
103
|
+
font-size: var(--type-headline-size);
|
|
104
|
+
line-height: var(--type-headline-line-height);
|
|
105
|
+
font-weight: var(--type-headline-weight);
|
|
106
|
+
letter-spacing: var(--type-headline-tracking);
|
|
107
|
+
text-transform: var(--type-headline-transform);
|
|
108
|
+
}
|
|
109
|
+
.type-title {
|
|
110
|
+
font-family: var(--type-title-family);
|
|
111
|
+
font-size: var(--type-title-size);
|
|
112
|
+
line-height: var(--type-title-line-height);
|
|
113
|
+
font-weight: var(--type-title-weight);
|
|
114
|
+
letter-spacing: var(--type-title-tracking);
|
|
115
|
+
text-transform: var(--type-title-transform);
|
|
116
|
+
}
|
|
117
|
+
.type-heading-sm {
|
|
118
|
+
font-family: var(--type-heading-sm-family);
|
|
119
|
+
font-size: var(--type-heading-sm-size);
|
|
120
|
+
line-height: var(--type-heading-sm-line-height);
|
|
121
|
+
font-weight: var(--type-heading-sm-weight);
|
|
122
|
+
letter-spacing: var(--type-heading-sm-tracking);
|
|
123
|
+
text-transform: var(--type-heading-sm-transform);
|
|
124
|
+
}
|
|
125
|
+
.type-heading-xs {
|
|
126
|
+
font-family: var(--type-heading-xs-family);
|
|
127
|
+
font-size: var(--type-heading-xs-size);
|
|
128
|
+
line-height: var(--type-heading-xs-line-height);
|
|
129
|
+
font-weight: var(--type-heading-xs-weight);
|
|
130
|
+
letter-spacing: var(--type-heading-xs-tracking);
|
|
131
|
+
text-transform: var(--type-heading-xs-transform);
|
|
132
|
+
}
|
|
133
|
+
.type-subtitle {
|
|
134
|
+
font-family: var(--type-subtitle-family);
|
|
135
|
+
font-size: var(--type-subtitle-size);
|
|
136
|
+
line-height: var(--type-subtitle-line-height);
|
|
137
|
+
font-weight: var(--type-subtitle-weight);
|
|
138
|
+
letter-spacing: var(--type-subtitle-tracking);
|
|
139
|
+
text-transform: var(--type-subtitle-transform);
|
|
140
|
+
}
|
|
141
|
+
.type-body {
|
|
142
|
+
font-family: var(--type-body-family);
|
|
143
|
+
font-size: var(--type-body-size);
|
|
144
|
+
line-height: var(--type-body-line-height);
|
|
145
|
+
font-weight: var(--type-body-weight);
|
|
146
|
+
letter-spacing: var(--type-body-tracking);
|
|
147
|
+
text-transform: var(--type-body-transform);
|
|
148
|
+
}
|
|
149
|
+
.type-body-sm {
|
|
150
|
+
font-family: var(--type-body-sm-family);
|
|
151
|
+
font-size: var(--type-body-sm-size);
|
|
152
|
+
line-height: var(--type-body-sm-line-height);
|
|
153
|
+
font-weight: var(--type-body-sm-weight);
|
|
154
|
+
letter-spacing: var(--type-body-sm-tracking);
|
|
155
|
+
text-transform: var(--type-body-sm-transform);
|
|
156
|
+
}
|
|
157
|
+
.type-label {
|
|
158
|
+
font-family: var(--type-label-family);
|
|
159
|
+
font-size: var(--type-label-size);
|
|
160
|
+
line-height: var(--type-label-line-height);
|
|
161
|
+
font-weight: var(--type-label-weight);
|
|
162
|
+
letter-spacing: var(--type-label-tracking);
|
|
163
|
+
text-transform: var(--type-label-transform);
|
|
164
|
+
}
|
|
165
|
+
.type-caption {
|
|
166
|
+
font-family: var(--type-caption-family);
|
|
167
|
+
font-size: var(--type-caption-size);
|
|
168
|
+
line-height: var(--type-caption-line-height);
|
|
169
|
+
font-weight: var(--type-caption-weight);
|
|
170
|
+
letter-spacing: var(--type-caption-tracking);
|
|
171
|
+
text-transform: var(--type-caption-transform);
|
|
172
|
+
}
|
|
173
|
+
.type-overline {
|
|
174
|
+
font-family: var(--type-overline-family);
|
|
175
|
+
font-size: var(--type-overline-size);
|
|
176
|
+
line-height: var(--type-overline-line-height);
|
|
177
|
+
font-weight: var(--type-overline-weight);
|
|
178
|
+
letter-spacing: var(--type-overline-tracking);
|
|
179
|
+
text-transform: var(--type-overline-transform);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/* fluid display — marketing/hero: scales with the viewport up to the top of the ramp */
|
|
183
|
+
.type-display--fluid {
|
|
184
|
+
font-size: var(--type-display-size-fluid);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/* treatments — orthogonal to size, compose onto any role. Family/figures, never a size. */
|
|
188
|
+
.type-tabular {
|
|
189
|
+
/* Mohr ships no tnum feature — measured, its "1" is 13.01px against "0" at 23.66px (30px/700), and
|
|
190
|
+
font-variant-numeric moves neither. So aligned digits need the family too, not just the figure set:
|
|
191
|
+
--font-sans goes flat at 0 spread. Composing this onto a display role therefore swaps the family.
|
|
192
|
+
That is the trade — a metric that must align cannot be set in the display face. Note --font-sans
|
|
193
|
+
caps at 700, so a display role's 900 renders as bold here, lighter than an adjacent Mohr heading. */
|
|
194
|
+
font-family: var(--font-sans);
|
|
195
|
+
font-variant-numeric: tabular-nums; /* aligned digits: tables, metrics */
|
|
196
|
+
/* Display roles uppercase, which is correct for a heading and wrong for a measured value: unit
|
|
197
|
+
letters are case-significant, so "4m 12s" must not render as "4M 12S" (mega, siemens). */
|
|
198
|
+
text-transform: none;
|
|
199
|
+
}
|
|
200
|
+
.type-mono {
|
|
201
|
+
font-family: var(--font-mono); /* code, token names, hex, IDs at whatever size the role sets */
|
|
202
|
+
font-size: 0.875em; /* mono runs optically large; the shrink matches sans x-height at the same step */
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/* bare <code>/<kbd>/<samp> default: Tailwind Preflight already sets font-family: var(--font-mono) at
|
|
206
|
+
1em, so this only adds the optical shrink — making a bare tag identical to .type-mono. <pre> keeps
|
|
207
|
+
its own size so Shiki code blocks are untouched. */
|
|
208
|
+
@layer base {
|
|
209
|
+
code,
|
|
210
|
+
kbd,
|
|
211
|
+
samp {
|
|
212
|
+
font-size: 0.875em;
|
|
213
|
+
}
|
|
214
|
+
/* Inline <code> renders as a boxed chip — the system's inline-code treatment, distinct from the bare
|
|
215
|
+
.type-mono treatment (which is for data: hex, token names, numbers, never boxed). Use <code> for
|
|
216
|
+
actual code/syntax in prose. Shiki blocks (pre code) opt out below. box-decoration-break keeps the
|
|
217
|
+
box intact when inline code wraps across lines. */
|
|
218
|
+
:not(pre) > code {
|
|
219
|
+
background: var(--ui-bg-elevated);
|
|
220
|
+
border: 1px solid var(--ui-border-muted);
|
|
221
|
+
border-radius: 0.25rem;
|
|
222
|
+
padding: 0.05em 0.35em;
|
|
223
|
+
box-decoration-break: clone;
|
|
224
|
+
-webkit-box-decoration-break: clone;
|
|
225
|
+
}
|
|
226
|
+
pre code {
|
|
227
|
+
font-size: inherit;
|
|
228
|
+
background: none;
|
|
229
|
+
border: 0;
|
|
230
|
+
padding: 0;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/* Forest deck type — generated by scripts/type.ts. Do not edit.
|
|
2
|
+
The deck context: canonical roles remapped to the top of the ramp for the 1920×1080 slide canvas
|
|
3
|
+
(display 8xl · headline 7xl · title 6xl · body 5xl …). Plain vars because Slidev runs UnoCSS —
|
|
4
|
+
consumed by packages/slidev-theme/styles/base.css so a deck cannot express an off-system size. */
|
|
5
|
+
:root {
|
|
6
|
+
--type-deck-text-xs: 0.75rem;
|
|
7
|
+
--type-deck-text-sm: 0.875rem;
|
|
8
|
+
--type-deck-text-md: 1rem;
|
|
9
|
+
--type-deck-text-lg: 1.125rem;
|
|
10
|
+
--type-deck-text-xl: 1.25rem;
|
|
11
|
+
--type-deck-text-2xl: 1.5rem;
|
|
12
|
+
--type-deck-text-3xl: 1.875rem;
|
|
13
|
+
--type-deck-text-4xl: 2.25rem;
|
|
14
|
+
--type-deck-text-5xl: 3rem;
|
|
15
|
+
--type-deck-text-6xl: 3.75rem;
|
|
16
|
+
--type-deck-text-7xl: 4.5rem;
|
|
17
|
+
--type-deck-text-8xl: 6rem;
|
|
18
|
+
--type-deck-text-9xl: 8rem;
|
|
19
|
+
--type-deck-display-size: 6rem;
|
|
20
|
+
--type-deck-display-line-height: 1;
|
|
21
|
+
--type-deck-display-weight: 900;
|
|
22
|
+
--type-deck-display-tracking: 0.01em;
|
|
23
|
+
--type-deck-display-family: var(--font-display);
|
|
24
|
+
--type-deck-headline-size: 4.5rem;
|
|
25
|
+
--type-deck-headline-line-height: 1.1;
|
|
26
|
+
--type-deck-headline-weight: 700;
|
|
27
|
+
--type-deck-headline-tracking: 0.01em;
|
|
28
|
+
--type-deck-headline-family: var(--font-sans);
|
|
29
|
+
--type-deck-title-size: 3.75rem;
|
|
30
|
+
--type-deck-title-line-height: 1.18;
|
|
31
|
+
--type-deck-title-weight: 700;
|
|
32
|
+
--type-deck-title-tracking: 0em;
|
|
33
|
+
--type-deck-title-family: var(--font-sans);
|
|
34
|
+
--type-deck-heading-sm-size: 3rem;
|
|
35
|
+
--type-deck-heading-sm-line-height: 1.3;
|
|
36
|
+
--type-deck-heading-sm-weight: 700;
|
|
37
|
+
--type-deck-heading-sm-tracking: 0em;
|
|
38
|
+
--type-deck-heading-sm-family: var(--font-sans);
|
|
39
|
+
--type-deck-heading-xs-size: 2.25rem;
|
|
40
|
+
--type-deck-heading-xs-line-height: 1.3;
|
|
41
|
+
--type-deck-heading-xs-weight: 700;
|
|
42
|
+
--type-deck-heading-xs-tracking: 0em;
|
|
43
|
+
--type-deck-heading-xs-family: var(--font-sans);
|
|
44
|
+
--type-deck-subtitle-size: 3.75rem;
|
|
45
|
+
--type-deck-subtitle-line-height: 1.35;
|
|
46
|
+
--type-deck-subtitle-weight: 400;
|
|
47
|
+
--type-deck-subtitle-tracking: 0em;
|
|
48
|
+
--type-deck-subtitle-family: var(--font-sans);
|
|
49
|
+
--type-deck-body-size: 3rem;
|
|
50
|
+
--type-deck-body-line-height: 1.45;
|
|
51
|
+
--type-deck-body-weight: 400;
|
|
52
|
+
--type-deck-body-tracking: 0em;
|
|
53
|
+
--type-deck-body-family: var(--font-sans);
|
|
54
|
+
--type-deck-body-sm-size: 2.25rem;
|
|
55
|
+
--type-deck-body-sm-line-height: 1.5;
|
|
56
|
+
--type-deck-body-sm-weight: 400;
|
|
57
|
+
--type-deck-body-sm-tracking: 0em;
|
|
58
|
+
--type-deck-body-sm-family: var(--font-sans);
|
|
59
|
+
--type-deck-label-size: 2.25rem;
|
|
60
|
+
--type-deck-label-line-height: 1.2;
|
|
61
|
+
--type-deck-label-weight: 700;
|
|
62
|
+
--type-deck-label-tracking: 0.01em;
|
|
63
|
+
--type-deck-label-family: var(--font-sans);
|
|
64
|
+
--type-deck-caption-size: 2.25rem;
|
|
65
|
+
--type-deck-caption-line-height: 1.4;
|
|
66
|
+
--type-deck-caption-weight: 400;
|
|
67
|
+
--type-deck-caption-tracking: 0em;
|
|
68
|
+
--type-deck-caption-family: var(--font-sans);
|
|
69
|
+
--type-deck-overline-size: 1.875rem;
|
|
70
|
+
--type-deck-overline-line-height: 1.1;
|
|
71
|
+
--type-deck-overline-weight: 700;
|
|
72
|
+
--type-deck-overline-tracking: 0.08em;
|
|
73
|
+
--type-deck-overline-family: var(--font-sans);
|
|
74
|
+
}
|