@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.json
ADDED
|
@@ -0,0 +1,548 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$meta": {
|
|
3
|
+
"generated": "scripts/type.ts",
|
|
4
|
+
"base": 16,
|
|
5
|
+
"scale": "Tailwind default",
|
|
6
|
+
"families": {
|
|
7
|
+
"display": {
|
|
8
|
+
"stack": "var(--font-display)",
|
|
9
|
+
"label": "Mohr",
|
|
10
|
+
"weights": [
|
|
11
|
+
900
|
|
12
|
+
],
|
|
13
|
+
"transform": "uppercase",
|
|
14
|
+
"note": "Display / headlines · Black 900 · always UPPERCASE. Two licensed cuts (no other Mohr weights exist).",
|
|
15
|
+
"cuts": [
|
|
16
|
+
{
|
|
17
|
+
"label": "Black",
|
|
18
|
+
"weight": 900,
|
|
19
|
+
"style": "normal",
|
|
20
|
+
"fontFamily": "'MohrAlt'",
|
|
21
|
+
"license": "web only"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"label": "Black Italic",
|
|
25
|
+
"weight": 900,
|
|
26
|
+
"style": "italic",
|
|
27
|
+
"fontFamily": "'Mohr-BlackIt'",
|
|
28
|
+
"license": "core + mobile"
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
"sans": {
|
|
33
|
+
"stack": "var(--font-sans)",
|
|
34
|
+
"label": "GT Haptik",
|
|
35
|
+
"weights": [
|
|
36
|
+
400,
|
|
37
|
+
700
|
|
38
|
+
],
|
|
39
|
+
"transform": "none",
|
|
40
|
+
"note": "Workhorse for body, labels, UI · Regular 400 / Bold 700 (no 600). Light 300 is specced but not self-hosted.",
|
|
41
|
+
"cuts": [
|
|
42
|
+
{
|
|
43
|
+
"label": "Regular",
|
|
44
|
+
"weight": 400,
|
|
45
|
+
"style": "normal",
|
|
46
|
+
"fontFamily": "'GT Haptik'"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"label": "Regular Italic",
|
|
50
|
+
"weight": 400,
|
|
51
|
+
"style": "italic",
|
|
52
|
+
"fontFamily": "'GT Haptik'"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"label": "Bold",
|
|
56
|
+
"weight": 700,
|
|
57
|
+
"style": "normal",
|
|
58
|
+
"fontFamily": "'GT Haptik'"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"label": "Bold Italic",
|
|
62
|
+
"weight": 700,
|
|
63
|
+
"style": "italic",
|
|
64
|
+
"fontFamily": "'GT Haptik'"
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
"mono": {
|
|
69
|
+
"stack": "var(--font-mono)",
|
|
70
|
+
"label": "JetBrains Mono",
|
|
71
|
+
"weights": [
|
|
72
|
+
400,
|
|
73
|
+
700
|
|
74
|
+
],
|
|
75
|
+
"transform": "none",
|
|
76
|
+
"note": "Code, token names, hex values · 400 / 700 · self-hosted (OFL).",
|
|
77
|
+
"cuts": [
|
|
78
|
+
{
|
|
79
|
+
"label": "Regular",
|
|
80
|
+
"weight": 400,
|
|
81
|
+
"style": "normal",
|
|
82
|
+
"fontFamily": "'JetBrains Mono'"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"label": "Bold",
|
|
86
|
+
"weight": 700,
|
|
87
|
+
"style": "normal",
|
|
88
|
+
"fontFamily": "'JetBrains Mono'"
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"contexts": {
|
|
94
|
+
"product": {
|
|
95
|
+
"label": "Product (web)",
|
|
96
|
+
"cut": "upright",
|
|
97
|
+
"note": "The default, global surface. Restrained: display dropped (a hero has no place in a dense dashboard) and headings pulled down the ramp. Sizes shift, families do not — headline is Mohr Black uppercase, every smaller role GT Haptik. MohrAlt upright cut where display does appear.",
|
|
98
|
+
"families": {}
|
|
99
|
+
},
|
|
100
|
+
"mobile": {
|
|
101
|
+
"label": "Mobile app",
|
|
102
|
+
"cut": "italic",
|
|
103
|
+
"note": "Native app, bold: display trimmed one step for small screens. Mohr-BlackIt italic cut.",
|
|
104
|
+
"families": {}
|
|
105
|
+
},
|
|
106
|
+
"marketing": {
|
|
107
|
+
"label": "Marketing",
|
|
108
|
+
"cut": "italic",
|
|
109
|
+
"note": "Hero surfaces: display goes fluid (viewport-tied clamp up to the top of the ramp); everything else canonical.",
|
|
110
|
+
"families": {}
|
|
111
|
+
},
|
|
112
|
+
"deck": {
|
|
113
|
+
"label": "Deck",
|
|
114
|
+
"cut": "upright",
|
|
115
|
+
"note": "Presentations (Slidev on UnoCSS, 1920×1080 canvas): the top of the ramp, sized for a ROOM rather than a reader. Ships as --type-deck-* vars — UnoCSS shares Tailwind’s size scale, so the steps mean the same thing there.",
|
|
116
|
+
"families": {
|
|
117
|
+
"headline": "sans"
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"note": "Size ramp is Tailwind's default font-size scale (xs…7xl, md = 16px base), used verbatim. Line-height is generated from size; family/weight/tracking/transform are authored per role. Contexts remap roles to ramp steps (product low, deck/marketing high); leading and voice follow the role."
|
|
122
|
+
},
|
|
123
|
+
"ramp": [
|
|
124
|
+
{
|
|
125
|
+
"step": 1,
|
|
126
|
+
"name": "xs",
|
|
127
|
+
"px": 12,
|
|
128
|
+
"rem": 0.75,
|
|
129
|
+
"lineHeight": 1.333
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"step": 2,
|
|
133
|
+
"name": "sm",
|
|
134
|
+
"px": 14,
|
|
135
|
+
"rem": 0.875,
|
|
136
|
+
"lineHeight": 1.429
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"step": 3,
|
|
140
|
+
"name": "md",
|
|
141
|
+
"px": 16,
|
|
142
|
+
"rem": 1,
|
|
143
|
+
"lineHeight": 1.5
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"step": 4,
|
|
147
|
+
"name": "lg",
|
|
148
|
+
"px": 18,
|
|
149
|
+
"rem": 1.125,
|
|
150
|
+
"lineHeight": 1.556
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"step": 5,
|
|
154
|
+
"name": "xl",
|
|
155
|
+
"px": 20,
|
|
156
|
+
"rem": 1.25,
|
|
157
|
+
"lineHeight": 1.4
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"step": 6,
|
|
161
|
+
"name": "2xl",
|
|
162
|
+
"px": 24,
|
|
163
|
+
"rem": 1.5,
|
|
164
|
+
"lineHeight": 1.333
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"step": 7,
|
|
168
|
+
"name": "3xl",
|
|
169
|
+
"px": 30,
|
|
170
|
+
"rem": 1.875,
|
|
171
|
+
"lineHeight": 1.2
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"step": 8,
|
|
175
|
+
"name": "4xl",
|
|
176
|
+
"px": 36,
|
|
177
|
+
"rem": 2.25,
|
|
178
|
+
"lineHeight": 1.111
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"step": 9,
|
|
182
|
+
"name": "5xl",
|
|
183
|
+
"px": 48,
|
|
184
|
+
"rem": 3,
|
|
185
|
+
"lineHeight": 1
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"step": 10,
|
|
189
|
+
"name": "6xl",
|
|
190
|
+
"px": 60,
|
|
191
|
+
"rem": 3.75,
|
|
192
|
+
"lineHeight": 1
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"step": 11,
|
|
196
|
+
"name": "7xl",
|
|
197
|
+
"px": 72,
|
|
198
|
+
"rem": 4.5,
|
|
199
|
+
"lineHeight": 1
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"step": 12,
|
|
203
|
+
"name": "8xl",
|
|
204
|
+
"px": 96,
|
|
205
|
+
"rem": 6,
|
|
206
|
+
"lineHeight": 1
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"step": 13,
|
|
210
|
+
"name": "9xl",
|
|
211
|
+
"px": 128,
|
|
212
|
+
"rem": 8,
|
|
213
|
+
"lineHeight": 1
|
|
214
|
+
}
|
|
215
|
+
],
|
|
216
|
+
"roles": [
|
|
217
|
+
{
|
|
218
|
+
"name": "display",
|
|
219
|
+
"family": "display",
|
|
220
|
+
"familyLabel": "Mohr",
|
|
221
|
+
"fontStack": "var(--font-display)",
|
|
222
|
+
"size": "5xl",
|
|
223
|
+
"px": 48,
|
|
224
|
+
"rem": 3,
|
|
225
|
+
"lineHeight": 1,
|
|
226
|
+
"weight": 900,
|
|
227
|
+
"tracking": 0.01,
|
|
228
|
+
"transform": "uppercase",
|
|
229
|
+
"italicCut": true,
|
|
230
|
+
"fluid": "clamp(2.25rem, 1.5rem + 3vw, 4.5rem)",
|
|
231
|
+
"cssVar": "--type-display",
|
|
232
|
+
"class": "type-display",
|
|
233
|
+
"contexts": {
|
|
234
|
+
"product": null,
|
|
235
|
+
"mobile": 36,
|
|
236
|
+
"marketing": "fluid",
|
|
237
|
+
"deck": 96
|
|
238
|
+
},
|
|
239
|
+
"contextLineHeights": {
|
|
240
|
+
"product": 1,
|
|
241
|
+
"mobile": 1,
|
|
242
|
+
"marketing": 1,
|
|
243
|
+
"deck": 1
|
|
244
|
+
},
|
|
245
|
+
"note": "Hero statement, the big Mohr moment. Marketing keeps the full fluid clamp; product web trims it away."
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"name": "headline",
|
|
249
|
+
"family": "display",
|
|
250
|
+
"familyLabel": "Mohr",
|
|
251
|
+
"fontStack": "var(--font-display)",
|
|
252
|
+
"size": "3xl",
|
|
253
|
+
"px": 30,
|
|
254
|
+
"rem": 1.875,
|
|
255
|
+
"lineHeight": 1.1,
|
|
256
|
+
"weight": 900,
|
|
257
|
+
"tracking": 0.01,
|
|
258
|
+
"transform": "uppercase",
|
|
259
|
+
"italicCut": true,
|
|
260
|
+
"fluid": null,
|
|
261
|
+
"cssVar": "--type-headline",
|
|
262
|
+
"class": "type-headline",
|
|
263
|
+
"contexts": {
|
|
264
|
+
"product": 24,
|
|
265
|
+
"mobile": 24,
|
|
266
|
+
"marketing": 30,
|
|
267
|
+
"deck": 72
|
|
268
|
+
},
|
|
269
|
+
"contextLineHeights": {
|
|
270
|
+
"product": 1.1,
|
|
271
|
+
"mobile": 1.1,
|
|
272
|
+
"marketing": 1.1,
|
|
273
|
+
"deck": 1.1
|
|
274
|
+
},
|
|
275
|
+
"note": "Page titles. Mohr Black, uppercased."
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"name": "title",
|
|
279
|
+
"family": "sans",
|
|
280
|
+
"familyLabel": "GT Haptik",
|
|
281
|
+
"fontStack": "var(--font-sans)",
|
|
282
|
+
"size": "2xl",
|
|
283
|
+
"px": 24,
|
|
284
|
+
"rem": 1.5,
|
|
285
|
+
"lineHeight": 1.18,
|
|
286
|
+
"weight": 700,
|
|
287
|
+
"tracking": 0,
|
|
288
|
+
"transform": "none",
|
|
289
|
+
"italicCut": false,
|
|
290
|
+
"fluid": null,
|
|
291
|
+
"cssVar": "--type-title",
|
|
292
|
+
"class": "type-title",
|
|
293
|
+
"contexts": {
|
|
294
|
+
"product": 20,
|
|
295
|
+
"mobile": 20,
|
|
296
|
+
"marketing": 24,
|
|
297
|
+
"deck": 60
|
|
298
|
+
},
|
|
299
|
+
"contextLineHeights": {
|
|
300
|
+
"product": 1.18,
|
|
301
|
+
"mobile": 1.18,
|
|
302
|
+
"marketing": 1.18,
|
|
303
|
+
"deck": 1.18
|
|
304
|
+
},
|
|
305
|
+
"note": "Section titles and card headers — GT Haptik Bold, sentence case. Sans on purpose: titles are frequent, so keeping the heavy Mohr for display + headline stops the UI turning shouty."
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
"name": "heading-sm",
|
|
309
|
+
"family": "sans",
|
|
310
|
+
"familyLabel": "GT Haptik",
|
|
311
|
+
"fontStack": "var(--font-sans)",
|
|
312
|
+
"size": "lg",
|
|
313
|
+
"px": 18,
|
|
314
|
+
"rem": 1.125,
|
|
315
|
+
"lineHeight": 1.3,
|
|
316
|
+
"weight": 700,
|
|
317
|
+
"tracking": 0,
|
|
318
|
+
"transform": "none",
|
|
319
|
+
"italicCut": false,
|
|
320
|
+
"fluid": null,
|
|
321
|
+
"cssVar": "--type-heading-sm",
|
|
322
|
+
"class": "type-heading-sm",
|
|
323
|
+
"contexts": {
|
|
324
|
+
"product": 18,
|
|
325
|
+
"mobile": 18,
|
|
326
|
+
"marketing": 18,
|
|
327
|
+
"deck": 48
|
|
328
|
+
},
|
|
329
|
+
"contextLineHeights": {
|
|
330
|
+
"product": 1.3,
|
|
331
|
+
"mobile": 1.3,
|
|
332
|
+
"marketing": 1.3,
|
|
333
|
+
"deck": 1.3
|
|
334
|
+
},
|
|
335
|
+
"note": "Subsection heading — GT Haptik Bold at reading size, tighter leading. The bold step below title, for headers nested under a section (h3-level). Distinct from subtitle, which is the light lead paragraph at the same size."
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
"name": "heading-xs",
|
|
339
|
+
"family": "sans",
|
|
340
|
+
"familyLabel": "GT Haptik",
|
|
341
|
+
"fontStack": "var(--font-sans)",
|
|
342
|
+
"size": "md",
|
|
343
|
+
"px": 16,
|
|
344
|
+
"rem": 1,
|
|
345
|
+
"lineHeight": 1.3,
|
|
346
|
+
"weight": 700,
|
|
347
|
+
"tracking": 0,
|
|
348
|
+
"transform": "none",
|
|
349
|
+
"italicCut": false,
|
|
350
|
+
"fluid": null,
|
|
351
|
+
"cssVar": "--type-heading-xs",
|
|
352
|
+
"class": "type-heading-xs",
|
|
353
|
+
"contexts": {
|
|
354
|
+
"product": 16,
|
|
355
|
+
"mobile": 16,
|
|
356
|
+
"marketing": 16,
|
|
357
|
+
"deck": 36
|
|
358
|
+
},
|
|
359
|
+
"contextLineHeights": {
|
|
360
|
+
"product": 1.3,
|
|
361
|
+
"mobile": 1.3,
|
|
362
|
+
"marketing": 1.3,
|
|
363
|
+
"deck": 1.3
|
|
364
|
+
},
|
|
365
|
+
"note": "Deepest subsection heading (h4-level) — GT Haptik Bold at body size, tighter leading. One rung below heading-sm; sits on the md base step like body, split from it by weight. For headings nested under a subsection, above body-sm copy."
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
"name": "subtitle",
|
|
369
|
+
"family": "sans",
|
|
370
|
+
"familyLabel": "GT Haptik",
|
|
371
|
+
"fontStack": "var(--font-sans)",
|
|
372
|
+
"size": "lg",
|
|
373
|
+
"px": 18,
|
|
374
|
+
"rem": 1.125,
|
|
375
|
+
"lineHeight": 1.5,
|
|
376
|
+
"weight": 400,
|
|
377
|
+
"tracking": 0,
|
|
378
|
+
"transform": "none",
|
|
379
|
+
"italicCut": false,
|
|
380
|
+
"fluid": null,
|
|
381
|
+
"cssVar": "--type-subtitle",
|
|
382
|
+
"class": "type-subtitle",
|
|
383
|
+
"contexts": {
|
|
384
|
+
"product": 18,
|
|
385
|
+
"mobile": 18,
|
|
386
|
+
"marketing": 18,
|
|
387
|
+
"deck": 60
|
|
388
|
+
},
|
|
389
|
+
"contextLineHeights": {
|
|
390
|
+
"product": 1.5,
|
|
391
|
+
"mobile": 1.5,
|
|
392
|
+
"marketing": 1.5,
|
|
393
|
+
"deck": 1.35
|
|
394
|
+
},
|
|
395
|
+
"note": "Lead paragraph / deck — the sans bridge under a Mohr headline."
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
"name": "body",
|
|
399
|
+
"family": "sans",
|
|
400
|
+
"familyLabel": "GT Haptik",
|
|
401
|
+
"fontStack": "var(--font-sans)",
|
|
402
|
+
"size": "md",
|
|
403
|
+
"px": 16,
|
|
404
|
+
"rem": 1,
|
|
405
|
+
"lineHeight": 1.6,
|
|
406
|
+
"weight": 400,
|
|
407
|
+
"tracking": 0,
|
|
408
|
+
"transform": "none",
|
|
409
|
+
"italicCut": false,
|
|
410
|
+
"fluid": null,
|
|
411
|
+
"cssVar": "--type-body",
|
|
412
|
+
"class": "type-body",
|
|
413
|
+
"contexts": {
|
|
414
|
+
"product": 16,
|
|
415
|
+
"mobile": 16,
|
|
416
|
+
"marketing": 16,
|
|
417
|
+
"deck": 48
|
|
418
|
+
},
|
|
419
|
+
"contextLineHeights": {
|
|
420
|
+
"product": 1.6,
|
|
421
|
+
"mobile": 1.6,
|
|
422
|
+
"marketing": 1.6,
|
|
423
|
+
"deck": 1.45
|
|
424
|
+
},
|
|
425
|
+
"note": "Default reading size — the 1rem base (Tailwind text-base)."
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
"name": "body-sm",
|
|
429
|
+
"family": "sans",
|
|
430
|
+
"familyLabel": "GT Haptik",
|
|
431
|
+
"fontStack": "var(--font-sans)",
|
|
432
|
+
"size": "sm",
|
|
433
|
+
"px": 14,
|
|
434
|
+
"rem": 0.875,
|
|
435
|
+
"lineHeight": 1.5,
|
|
436
|
+
"weight": 400,
|
|
437
|
+
"tracking": 0,
|
|
438
|
+
"transform": "none",
|
|
439
|
+
"italicCut": false,
|
|
440
|
+
"fluid": null,
|
|
441
|
+
"cssVar": "--type-body-sm",
|
|
442
|
+
"class": "type-body-sm",
|
|
443
|
+
"contexts": {
|
|
444
|
+
"product": 14,
|
|
445
|
+
"mobile": 14,
|
|
446
|
+
"marketing": 14,
|
|
447
|
+
"deck": 36
|
|
448
|
+
},
|
|
449
|
+
"contextLineHeights": {
|
|
450
|
+
"product": 1.5,
|
|
451
|
+
"mobile": 1.5,
|
|
452
|
+
"marketing": 1.5,
|
|
453
|
+
"deck": 1.5
|
|
454
|
+
},
|
|
455
|
+
"note": "Dense UI and secondary copy."
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
"name": "label",
|
|
459
|
+
"family": "sans",
|
|
460
|
+
"familyLabel": "GT Haptik",
|
|
461
|
+
"fontStack": "var(--font-sans)",
|
|
462
|
+
"size": "sm",
|
|
463
|
+
"px": 14,
|
|
464
|
+
"rem": 0.875,
|
|
465
|
+
"lineHeight": 1.2,
|
|
466
|
+
"weight": 700,
|
|
467
|
+
"tracking": 0.01,
|
|
468
|
+
"transform": "none",
|
|
469
|
+
"italicCut": false,
|
|
470
|
+
"fluid": null,
|
|
471
|
+
"cssVar": "--type-label",
|
|
472
|
+
"class": "type-label",
|
|
473
|
+
"contexts": {
|
|
474
|
+
"product": 14,
|
|
475
|
+
"mobile": 14,
|
|
476
|
+
"marketing": 14,
|
|
477
|
+
"deck": 36
|
|
478
|
+
},
|
|
479
|
+
"contextLineHeights": {
|
|
480
|
+
"product": 1.2,
|
|
481
|
+
"mobile": 1.2,
|
|
482
|
+
"marketing": 1.2,
|
|
483
|
+
"deck": 1.2
|
|
484
|
+
},
|
|
485
|
+
"note": "Buttons, chips, form labels — Bold with slight tracking."
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
"name": "caption",
|
|
489
|
+
"family": "sans",
|
|
490
|
+
"familyLabel": "GT Haptik",
|
|
491
|
+
"fontStack": "var(--font-sans)",
|
|
492
|
+
"size": "xs",
|
|
493
|
+
"px": 12,
|
|
494
|
+
"rem": 0.75,
|
|
495
|
+
"lineHeight": 1.4,
|
|
496
|
+
"weight": 400,
|
|
497
|
+
"tracking": 0,
|
|
498
|
+
"transform": "none",
|
|
499
|
+
"italicCut": false,
|
|
500
|
+
"fluid": null,
|
|
501
|
+
"cssVar": "--type-caption",
|
|
502
|
+
"class": "type-caption",
|
|
503
|
+
"contexts": {
|
|
504
|
+
"product": 12,
|
|
505
|
+
"mobile": 12,
|
|
506
|
+
"marketing": 12,
|
|
507
|
+
"deck": 36
|
|
508
|
+
},
|
|
509
|
+
"contextLineHeights": {
|
|
510
|
+
"product": 1.4,
|
|
511
|
+
"mobile": 1.4,
|
|
512
|
+
"marketing": 1.4,
|
|
513
|
+
"deck": 1.4
|
|
514
|
+
},
|
|
515
|
+
"note": "Captions, metadata, helper text."
|
|
516
|
+
},
|
|
517
|
+
{
|
|
518
|
+
"name": "overline",
|
|
519
|
+
"family": "sans",
|
|
520
|
+
"familyLabel": "GT Haptik",
|
|
521
|
+
"fontStack": "var(--font-sans)",
|
|
522
|
+
"size": "xs",
|
|
523
|
+
"px": 12,
|
|
524
|
+
"rem": 0.75,
|
|
525
|
+
"lineHeight": 1.1,
|
|
526
|
+
"weight": 700,
|
|
527
|
+
"tracking": 0.08,
|
|
528
|
+
"transform": "uppercase",
|
|
529
|
+
"italicCut": false,
|
|
530
|
+
"fluid": null,
|
|
531
|
+
"cssVar": "--type-overline",
|
|
532
|
+
"class": "type-overline",
|
|
533
|
+
"contexts": {
|
|
534
|
+
"product": 12,
|
|
535
|
+
"mobile": 12,
|
|
536
|
+
"marketing": 12,
|
|
537
|
+
"deck": 30
|
|
538
|
+
},
|
|
539
|
+
"contextLineHeights": {
|
|
540
|
+
"product": 1.1,
|
|
541
|
+
"mobile": 1.1,
|
|
542
|
+
"marketing": 1.1,
|
|
543
|
+
"deck": 1.1
|
|
544
|
+
},
|
|
545
|
+
"note": "Eyebrow / overline — uppercase, wide tracking."
|
|
546
|
+
}
|
|
547
|
+
]
|
|
548
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/* Forest type ramp as Tailwind v4 font-size utilities — generated by scripts/type.ts. Do not edit.
|
|
2
|
+
The ramp IS Tailwind's default scale, so these match the framework defaults (plus a text-md alias for
|
|
3
|
+
text-base). Import in any product to get text-xs … text-7xl + paired line-heights from one source. */
|
|
4
|
+
@theme {
|
|
5
|
+
--text-xs: 0.75rem;
|
|
6
|
+
--text-xs--line-height: 1.3333;
|
|
7
|
+
--text-sm: 0.875rem;
|
|
8
|
+
--text-sm--line-height: 1.4286;
|
|
9
|
+
--text-md: 1rem; /* base */
|
|
10
|
+
--text-md--line-height: 1.5;
|
|
11
|
+
--text-lg: 1.125rem;
|
|
12
|
+
--text-lg--line-height: 1.5556;
|
|
13
|
+
--text-xl: 1.25rem;
|
|
14
|
+
--text-xl--line-height: 1.4;
|
|
15
|
+
--text-2xl: 1.5rem;
|
|
16
|
+
--text-2xl--line-height: 1.3333;
|
|
17
|
+
--text-3xl: 1.875rem;
|
|
18
|
+
--text-3xl--line-height: 1.2;
|
|
19
|
+
--text-4xl: 2.25rem;
|
|
20
|
+
--text-4xl--line-height: 1.1111;
|
|
21
|
+
--text-5xl: 3rem;
|
|
22
|
+
--text-5xl--line-height: 1;
|
|
23
|
+
--text-6xl: 3.75rem;
|
|
24
|
+
--text-6xl--line-height: 1;
|
|
25
|
+
--text-7xl: 4.5rem;
|
|
26
|
+
--text-7xl--line-height: 1;
|
|
27
|
+
--text-8xl: 6rem;
|
|
28
|
+
--text-8xl--line-height: 1;
|
|
29
|
+
--text-9xl: 8rem;
|
|
30
|
+
--text-9xl--line-height: 1;
|
|
31
|
+
}
|