@kolkrabbi/kol-theme 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.
@@ -0,0 +1,1090 @@
1
+ /**
2
+ * KOL Typography — Right Grotesk family
3
+ *
4
+ * Loaded cuts: Right Grotesk (display, regular width), Compact, Tall, Wide,
5
+ * Narrow, Spatial, Tight, Text (text-optical grade), Text Compact,
6
+ * Text Spatial, Text Wide, Mono.
7
+ *
8
+ * PP weight convention: Fine 100 · Light 300 · Regular 400 · Medium 500 ·
9
+ * Dark 600 · Bold 700 · Black 900.
10
+ *
11
+ * Files at /fonts/Right-Grotesk*\/*.woff2.
12
+ *
13
+ * Type-scale tokens at :root below; consumed by display/heading/text/helper
14
+ * classes. Retune sizes in one place.
15
+ */
16
+
17
+ /* =============================================================================
18
+ * FONT FACE DECLARATIONS — Right Grotesk family
19
+ *
20
+ * Generated to cover every weight present on disk, so the type scale never
21
+ * silently rounds to a neighbouring cut. PP convention:
22
+ * Fine 100 · Light 300 · Regular 400 · Medium 500 · Dark 600 · Bold 700 · Black 900.
23
+ * Mono @font-face lives in kol-typography-mono.css.
24
+ * ============================================================================= */
25
+
26
+ /* ── Right Grotesk ── */
27
+ @font-face {
28
+ font-family: "Right Grotesk";
29
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-FineItalic.woff2") format("woff2");
30
+ font-weight: 100;
31
+ font-style: italic;
32
+ font-display: swap;
33
+ }
34
+ @font-face {
35
+ font-family: "Right Grotesk";
36
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-Fine.woff2") format("woff2");
37
+ font-weight: 100;
38
+ font-style: normal;
39
+ font-display: swap;
40
+ }
41
+ @font-face {
42
+ font-family: "Right Grotesk";
43
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-LightItalic.woff2") format("woff2");
44
+ font-weight: 300;
45
+ font-style: italic;
46
+ font-display: swap;
47
+ }
48
+ @font-face {
49
+ font-family: "Right Grotesk";
50
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-Light.woff2") format("woff2");
51
+ font-weight: 300;
52
+ font-style: normal;
53
+ font-display: swap;
54
+ }
55
+ @font-face {
56
+ font-family: "Right Grotesk";
57
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-RegularItalic.woff2") format("woff2");
58
+ font-weight: 400;
59
+ font-style: italic;
60
+ font-display: swap;
61
+ }
62
+ @font-face {
63
+ font-family: "Right Grotesk";
64
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-Regular.woff2") format("woff2");
65
+ font-weight: 400;
66
+ font-style: normal;
67
+ font-display: swap;
68
+ }
69
+ @font-face {
70
+ font-family: "Right Grotesk";
71
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-MediumItalic.woff2") format("woff2");
72
+ font-weight: 500;
73
+ font-style: italic;
74
+ font-display: swap;
75
+ }
76
+ @font-face {
77
+ font-family: "Right Grotesk";
78
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-Medium.woff2") format("woff2");
79
+ font-weight: 500;
80
+ font-style: normal;
81
+ font-display: swap;
82
+ }
83
+ @font-face {
84
+ font-family: "Right Grotesk";
85
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-DarkItalic.woff2") format("woff2");
86
+ font-weight: 600;
87
+ font-style: italic;
88
+ font-display: swap;
89
+ }
90
+ @font-face {
91
+ font-family: "Right Grotesk";
92
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-Dark.woff2") format("woff2");
93
+ font-weight: 600;
94
+ font-style: normal;
95
+ font-display: swap;
96
+ }
97
+ @font-face {
98
+ font-family: "Right Grotesk";
99
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-BoldItalic.woff2") format("woff2");
100
+ font-weight: 700;
101
+ font-style: italic;
102
+ font-display: swap;
103
+ }
104
+ @font-face {
105
+ font-family: "Right Grotesk";
106
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-Bold.woff2") format("woff2");
107
+ font-weight: 700;
108
+ font-style: normal;
109
+ font-display: swap;
110
+ }
111
+ @font-face {
112
+ font-family: "Right Grotesk";
113
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-BlackItalic.woff2") format("woff2");
114
+ font-weight: 900;
115
+ font-style: italic;
116
+ font-display: swap;
117
+ }
118
+ @font-face {
119
+ font-family: "Right Grotesk";
120
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-Black.woff2") format("woff2");
121
+ font-weight: 900;
122
+ font-style: normal;
123
+ font-display: swap;
124
+ }
125
+
126
+ /* ── Right Grotesk Compact ── */
127
+ @font-face {
128
+ font-family: "Right Grotesk Compact";
129
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-CompactFineItalic.woff2") format("woff2");
130
+ font-weight: 100;
131
+ font-style: italic;
132
+ font-display: swap;
133
+ }
134
+ @font-face {
135
+ font-family: "Right Grotesk Compact";
136
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-CompactFine.woff2") format("woff2");
137
+ font-weight: 100;
138
+ font-style: normal;
139
+ font-display: swap;
140
+ }
141
+ @font-face {
142
+ font-family: "Right Grotesk Compact";
143
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-CompactLightItalic.woff2") format("woff2");
144
+ font-weight: 300;
145
+ font-style: italic;
146
+ font-display: swap;
147
+ }
148
+ @font-face {
149
+ font-family: "Right Grotesk Compact";
150
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-CompactLight.woff2") format("woff2");
151
+ font-weight: 300;
152
+ font-style: normal;
153
+ font-display: swap;
154
+ }
155
+ @font-face {
156
+ font-family: "Right Grotesk Compact";
157
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-CompactRegularItalic.woff2") format("woff2");
158
+ font-weight: 400;
159
+ font-style: italic;
160
+ font-display: swap;
161
+ }
162
+ @font-face {
163
+ font-family: "Right Grotesk Compact";
164
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-CompactRegular.woff2") format("woff2");
165
+ font-weight: 400;
166
+ font-style: normal;
167
+ font-display: swap;
168
+ }
169
+ @font-face {
170
+ font-family: "Right Grotesk Compact";
171
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-CompactMediumItalic.woff2") format("woff2");
172
+ font-weight: 500;
173
+ font-style: italic;
174
+ font-display: swap;
175
+ }
176
+ @font-face {
177
+ font-family: "Right Grotesk Compact";
178
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-CompactMedium.woff2") format("woff2");
179
+ font-weight: 500;
180
+ font-style: normal;
181
+ font-display: swap;
182
+ }
183
+ @font-face {
184
+ font-family: "Right Grotesk Compact";
185
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-CompactDarkItalic.woff2") format("woff2");
186
+ font-weight: 600;
187
+ font-style: italic;
188
+ font-display: swap;
189
+ }
190
+ @font-face {
191
+ font-family: "Right Grotesk Compact";
192
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-CompactDark.woff2") format("woff2");
193
+ font-weight: 600;
194
+ font-style: normal;
195
+ font-display: swap;
196
+ }
197
+ @font-face {
198
+ font-family: "Right Grotesk Compact";
199
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-CompactBoldItalic.woff2") format("woff2");
200
+ font-weight: 700;
201
+ font-style: italic;
202
+ font-display: swap;
203
+ }
204
+ @font-face {
205
+ font-family: "Right Grotesk Compact";
206
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-CompactBold.woff2") format("woff2");
207
+ font-weight: 700;
208
+ font-style: normal;
209
+ font-display: swap;
210
+ }
211
+ @font-face {
212
+ font-family: "Right Grotesk Compact";
213
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-CompactBlackItalic.woff2") format("woff2");
214
+ font-weight: 900;
215
+ font-style: italic;
216
+ font-display: swap;
217
+ }
218
+ @font-face {
219
+ font-family: "Right Grotesk Compact";
220
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-CompactBlack.woff2") format("woff2");
221
+ font-weight: 900;
222
+ font-style: normal;
223
+ font-display: swap;
224
+ }
225
+
226
+ /* ── Right Grotesk Narrow ── */
227
+ @font-face {
228
+ font-family: "Right Grotesk Narrow";
229
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-NarrowFineItalic.woff2") format("woff2");
230
+ font-weight: 100;
231
+ font-style: italic;
232
+ font-display: swap;
233
+ }
234
+ @font-face {
235
+ font-family: "Right Grotesk Narrow";
236
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-NarrowFine.woff2") format("woff2");
237
+ font-weight: 100;
238
+ font-style: normal;
239
+ font-display: swap;
240
+ }
241
+ @font-face {
242
+ font-family: "Right Grotesk Narrow";
243
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-NarrowLightItalic.woff2") format("woff2");
244
+ font-weight: 300;
245
+ font-style: italic;
246
+ font-display: swap;
247
+ }
248
+ @font-face {
249
+ font-family: "Right Grotesk Narrow";
250
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-NarrowLight.woff2") format("woff2");
251
+ font-weight: 300;
252
+ font-style: normal;
253
+ font-display: swap;
254
+ }
255
+ @font-face {
256
+ font-family: "Right Grotesk Narrow";
257
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-NarrowRegularItalic.woff2") format("woff2");
258
+ font-weight: 400;
259
+ font-style: italic;
260
+ font-display: swap;
261
+ }
262
+ @font-face {
263
+ font-family: "Right Grotesk Narrow";
264
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-NarrowRegular.woff2") format("woff2");
265
+ font-weight: 400;
266
+ font-style: normal;
267
+ font-display: swap;
268
+ }
269
+ @font-face {
270
+ font-family: "Right Grotesk Narrow";
271
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-NarrowMediumItalic.woff2") format("woff2");
272
+ font-weight: 500;
273
+ font-style: italic;
274
+ font-display: swap;
275
+ }
276
+ @font-face {
277
+ font-family: "Right Grotesk Narrow";
278
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-NarrowMedium.woff2") format("woff2");
279
+ font-weight: 500;
280
+ font-style: normal;
281
+ font-display: swap;
282
+ }
283
+ @font-face {
284
+ font-family: "Right Grotesk Narrow";
285
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-NarrowDarkItalic.woff2") format("woff2");
286
+ font-weight: 600;
287
+ font-style: italic;
288
+ font-display: swap;
289
+ }
290
+ @font-face {
291
+ font-family: "Right Grotesk Narrow";
292
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-NarrowDark.woff2") format("woff2");
293
+ font-weight: 600;
294
+ font-style: normal;
295
+ font-display: swap;
296
+ }
297
+ @font-face {
298
+ font-family: "Right Grotesk Narrow";
299
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-NarrowBoldItalic.woff2") format("woff2");
300
+ font-weight: 700;
301
+ font-style: italic;
302
+ font-display: swap;
303
+ }
304
+ @font-face {
305
+ font-family: "Right Grotesk Narrow";
306
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-NarrowBold.woff2") format("woff2");
307
+ font-weight: 700;
308
+ font-style: normal;
309
+ font-display: swap;
310
+ }
311
+ @font-face {
312
+ font-family: "Right Grotesk Narrow";
313
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-NarrowBlackItalic.woff2") format("woff2");
314
+ font-weight: 900;
315
+ font-style: italic;
316
+ font-display: swap;
317
+ }
318
+ @font-face {
319
+ font-family: "Right Grotesk Narrow";
320
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-NarrowBlack.woff2") format("woff2");
321
+ font-weight: 900;
322
+ font-style: normal;
323
+ font-display: swap;
324
+ }
325
+
326
+ /* ── Right Grotesk Tall ── */
327
+ @font-face {
328
+ font-family: "Right Grotesk Tall";
329
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TallFineItalic.woff2") format("woff2");
330
+ font-weight: 100;
331
+ font-style: italic;
332
+ font-display: swap;
333
+ }
334
+ @font-face {
335
+ font-family: "Right Grotesk Tall";
336
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TallFine.woff2") format("woff2");
337
+ font-weight: 100;
338
+ font-style: normal;
339
+ font-display: swap;
340
+ }
341
+ @font-face {
342
+ font-family: "Right Grotesk Tall";
343
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TallLightItalic.woff2") format("woff2");
344
+ font-weight: 300;
345
+ font-style: italic;
346
+ font-display: swap;
347
+ }
348
+ @font-face {
349
+ font-family: "Right Grotesk Tall";
350
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TallLight.woff2") format("woff2");
351
+ font-weight: 300;
352
+ font-style: normal;
353
+ font-display: swap;
354
+ }
355
+ @font-face {
356
+ font-family: "Right Grotesk Tall";
357
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TallRegularItalic.woff2") format("woff2");
358
+ font-weight: 400;
359
+ font-style: italic;
360
+ font-display: swap;
361
+ }
362
+ @font-face {
363
+ font-family: "Right Grotesk Tall";
364
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TallRegular.woff2") format("woff2");
365
+ font-weight: 400;
366
+ font-style: normal;
367
+ font-display: swap;
368
+ }
369
+ @font-face {
370
+ font-family: "Right Grotesk Tall";
371
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TallMediumItalic.woff2") format("woff2");
372
+ font-weight: 500;
373
+ font-style: italic;
374
+ font-display: swap;
375
+ }
376
+ @font-face {
377
+ font-family: "Right Grotesk Tall";
378
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TallMedium.woff2") format("woff2");
379
+ font-weight: 500;
380
+ font-style: normal;
381
+ font-display: swap;
382
+ }
383
+ @font-face {
384
+ font-family: "Right Grotesk Tall";
385
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TallDarkItalic.woff2") format("woff2");
386
+ font-weight: 600;
387
+ font-style: italic;
388
+ font-display: swap;
389
+ }
390
+ @font-face {
391
+ font-family: "Right Grotesk Tall";
392
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TallDark.woff2") format("woff2");
393
+ font-weight: 600;
394
+ font-style: normal;
395
+ font-display: swap;
396
+ }
397
+ @font-face {
398
+ font-family: "Right Grotesk Tall";
399
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TallBoldItalic.woff2") format("woff2");
400
+ font-weight: 700;
401
+ font-style: italic;
402
+ font-display: swap;
403
+ }
404
+ @font-face {
405
+ font-family: "Right Grotesk Tall";
406
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TallBold.woff2") format("woff2");
407
+ font-weight: 700;
408
+ font-style: normal;
409
+ font-display: swap;
410
+ }
411
+ @font-face {
412
+ font-family: "Right Grotesk Tall";
413
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TallBlackItalic.woff2") format("woff2");
414
+ font-weight: 900;
415
+ font-style: italic;
416
+ font-display: swap;
417
+ }
418
+ @font-face {
419
+ font-family: "Right Grotesk Tall";
420
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TallBlack.woff2") format("woff2");
421
+ font-weight: 900;
422
+ font-style: normal;
423
+ font-display: swap;
424
+ }
425
+
426
+ /* ── Right Grotesk Wide ── */
427
+ @font-face {
428
+ font-family: "Right Grotesk Wide";
429
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-WideFineItalic.woff2") format("woff2");
430
+ font-weight: 100;
431
+ font-style: italic;
432
+ font-display: swap;
433
+ }
434
+ @font-face {
435
+ font-family: "Right Grotesk Wide";
436
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-WideFine.woff2") format("woff2");
437
+ font-weight: 100;
438
+ font-style: normal;
439
+ font-display: swap;
440
+ }
441
+ @font-face {
442
+ font-family: "Right Grotesk Wide";
443
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-WideLightItalic.woff2") format("woff2");
444
+ font-weight: 300;
445
+ font-style: italic;
446
+ font-display: swap;
447
+ }
448
+ @font-face {
449
+ font-family: "Right Grotesk Wide";
450
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-WideLight.woff2") format("woff2");
451
+ font-weight: 300;
452
+ font-style: normal;
453
+ font-display: swap;
454
+ }
455
+ @font-face {
456
+ font-family: "Right Grotesk Wide";
457
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-WideRegularItalic.woff2") format("woff2");
458
+ font-weight: 400;
459
+ font-style: italic;
460
+ font-display: swap;
461
+ }
462
+ @font-face {
463
+ font-family: "Right Grotesk Wide";
464
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-WideRegular.woff2") format("woff2");
465
+ font-weight: 400;
466
+ font-style: normal;
467
+ font-display: swap;
468
+ }
469
+ @font-face {
470
+ font-family: "Right Grotesk Wide";
471
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-WideMediumItalic.woff2") format("woff2");
472
+ font-weight: 500;
473
+ font-style: italic;
474
+ font-display: swap;
475
+ }
476
+ @font-face {
477
+ font-family: "Right Grotesk Wide";
478
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-WideMedium.woff2") format("woff2");
479
+ font-weight: 500;
480
+ font-style: normal;
481
+ font-display: swap;
482
+ }
483
+ @font-face {
484
+ font-family: "Right Grotesk Wide";
485
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-WideDarkItalic.woff2") format("woff2");
486
+ font-weight: 600;
487
+ font-style: italic;
488
+ font-display: swap;
489
+ }
490
+ @font-face {
491
+ font-family: "Right Grotesk Wide";
492
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-WideDark.woff2") format("woff2");
493
+ font-weight: 600;
494
+ font-style: normal;
495
+ font-display: swap;
496
+ }
497
+ @font-face {
498
+ font-family: "Right Grotesk Wide";
499
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-WideBoldItalic.woff2") format("woff2");
500
+ font-weight: 700;
501
+ font-style: italic;
502
+ font-display: swap;
503
+ }
504
+ @font-face {
505
+ font-family: "Right Grotesk Wide";
506
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-WideBold.woff2") format("woff2");
507
+ font-weight: 700;
508
+ font-style: normal;
509
+ font-display: swap;
510
+ }
511
+ @font-face {
512
+ font-family: "Right Grotesk Wide";
513
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-WideBlackItalic.woff2") format("woff2");
514
+ font-weight: 900;
515
+ font-style: italic;
516
+ font-display: swap;
517
+ }
518
+ @font-face {
519
+ font-family: "Right Grotesk Wide";
520
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-WideBlack.woff2") format("woff2");
521
+ font-weight: 900;
522
+ font-style: normal;
523
+ font-display: swap;
524
+ }
525
+
526
+ /* ── Right Grotesk Spatial ── */
527
+ @font-face {
528
+ font-family: "Right Grotesk Spatial";
529
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-SpatialFineItalic.woff2") format("woff2");
530
+ font-weight: 100;
531
+ font-style: italic;
532
+ font-display: swap;
533
+ }
534
+ @font-face {
535
+ font-family: "Right Grotesk Spatial";
536
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-SpatialFine.woff2") format("woff2");
537
+ font-weight: 100;
538
+ font-style: normal;
539
+ font-display: swap;
540
+ }
541
+ @font-face {
542
+ font-family: "Right Grotesk Spatial";
543
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-SpatialLightItalic.woff2") format("woff2");
544
+ font-weight: 300;
545
+ font-style: italic;
546
+ font-display: swap;
547
+ }
548
+ @font-face {
549
+ font-family: "Right Grotesk Spatial";
550
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-SpatialLight.woff2") format("woff2");
551
+ font-weight: 300;
552
+ font-style: normal;
553
+ font-display: swap;
554
+ }
555
+ @font-face {
556
+ font-family: "Right Grotesk Spatial";
557
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-SpatialRegularItalic.woff2") format("woff2");
558
+ font-weight: 400;
559
+ font-style: italic;
560
+ font-display: swap;
561
+ }
562
+ @font-face {
563
+ font-family: "Right Grotesk Spatial";
564
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-SpatialRegular.woff2") format("woff2");
565
+ font-weight: 400;
566
+ font-style: normal;
567
+ font-display: swap;
568
+ }
569
+ @font-face {
570
+ font-family: "Right Grotesk Spatial";
571
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-SpatialMediumItalic.woff2") format("woff2");
572
+ font-weight: 500;
573
+ font-style: italic;
574
+ font-display: swap;
575
+ }
576
+ @font-face {
577
+ font-family: "Right Grotesk Spatial";
578
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-SpatialMedium.woff2") format("woff2");
579
+ font-weight: 500;
580
+ font-style: normal;
581
+ font-display: swap;
582
+ }
583
+ @font-face {
584
+ font-family: "Right Grotesk Spatial";
585
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-SpatialDarkItalic.woff2") format("woff2");
586
+ font-weight: 600;
587
+ font-style: italic;
588
+ font-display: swap;
589
+ }
590
+ @font-face {
591
+ font-family: "Right Grotesk Spatial";
592
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-SpatialDark.woff2") format("woff2");
593
+ font-weight: 600;
594
+ font-style: normal;
595
+ font-display: swap;
596
+ }
597
+ @font-face {
598
+ font-family: "Right Grotesk Spatial";
599
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-SpatialBoldItalic.woff2") format("woff2");
600
+ font-weight: 700;
601
+ font-style: italic;
602
+ font-display: swap;
603
+ }
604
+ @font-face {
605
+ font-family: "Right Grotesk Spatial";
606
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-SpatialBold.woff2") format("woff2");
607
+ font-weight: 700;
608
+ font-style: normal;
609
+ font-display: swap;
610
+ }
611
+ @font-face {
612
+ font-family: "Right Grotesk Spatial";
613
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-SpatialBlackItalic.woff2") format("woff2");
614
+ font-weight: 900;
615
+ font-style: italic;
616
+ font-display: swap;
617
+ }
618
+ @font-face {
619
+ font-family: "Right Grotesk Spatial";
620
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-SpatialBlack.woff2") format("woff2");
621
+ font-weight: 900;
622
+ font-style: normal;
623
+ font-display: swap;
624
+ }
625
+
626
+ /* ── Right Grotesk Tight ── */
627
+ @font-face {
628
+ font-family: "Right Grotesk Tight";
629
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TightFineItalic.woff2") format("woff2");
630
+ font-weight: 100;
631
+ font-style: italic;
632
+ font-display: swap;
633
+ }
634
+ @font-face {
635
+ font-family: "Right Grotesk Tight";
636
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TightFine.woff2") format("woff2");
637
+ font-weight: 100;
638
+ font-style: normal;
639
+ font-display: swap;
640
+ }
641
+ @font-face {
642
+ font-family: "Right Grotesk Tight";
643
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TightLightItalic.woff2") format("woff2");
644
+ font-weight: 300;
645
+ font-style: italic;
646
+ font-display: swap;
647
+ }
648
+ @font-face {
649
+ font-family: "Right Grotesk Tight";
650
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TightLight.woff2") format("woff2");
651
+ font-weight: 300;
652
+ font-style: normal;
653
+ font-display: swap;
654
+ }
655
+ @font-face {
656
+ font-family: "Right Grotesk Tight";
657
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TightRegularItalic.woff2") format("woff2");
658
+ font-weight: 400;
659
+ font-style: italic;
660
+ font-display: swap;
661
+ }
662
+ @font-face {
663
+ font-family: "Right Grotesk Tight";
664
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TightRegular.woff2") format("woff2");
665
+ font-weight: 400;
666
+ font-style: normal;
667
+ font-display: swap;
668
+ }
669
+ @font-face {
670
+ font-family: "Right Grotesk Tight";
671
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TightMediumItalic.woff2") format("woff2");
672
+ font-weight: 500;
673
+ font-style: italic;
674
+ font-display: swap;
675
+ }
676
+ @font-face {
677
+ font-family: "Right Grotesk Tight";
678
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TightMedium.woff2") format("woff2");
679
+ font-weight: 500;
680
+ font-style: normal;
681
+ font-display: swap;
682
+ }
683
+ @font-face {
684
+ font-family: "Right Grotesk Tight";
685
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TightDarkItalic.woff2") format("woff2");
686
+ font-weight: 600;
687
+ font-style: italic;
688
+ font-display: swap;
689
+ }
690
+ @font-face {
691
+ font-family: "Right Grotesk Tight";
692
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TightDark.woff2") format("woff2");
693
+ font-weight: 600;
694
+ font-style: normal;
695
+ font-display: swap;
696
+ }
697
+ @font-face {
698
+ font-family: "Right Grotesk Tight";
699
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TightBoldItalic.woff2") format("woff2");
700
+ font-weight: 700;
701
+ font-style: italic;
702
+ font-display: swap;
703
+ }
704
+ @font-face {
705
+ font-family: "Right Grotesk Tight";
706
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TightBold.woff2") format("woff2");
707
+ font-weight: 700;
708
+ font-style: normal;
709
+ font-display: swap;
710
+ }
711
+ @font-face {
712
+ font-family: "Right Grotesk Tight";
713
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TightBlackItalic.woff2") format("woff2");
714
+ font-weight: 900;
715
+ font-style: italic;
716
+ font-display: swap;
717
+ }
718
+ @font-face {
719
+ font-family: "Right Grotesk Tight";
720
+ src: url("/fonts/Right-Grotesk/PPRightGrotesk-TightBlack.woff2") format("woff2");
721
+ font-weight: 900;
722
+ font-style: normal;
723
+ font-display: swap;
724
+ }
725
+
726
+ /* ── Right Grotesk Text ── */
727
+ @font-face {
728
+ font-family: "Right Grotesk Text";
729
+ src: url("/fonts/Right-Grotesk-Text/PPRightGroteskText-RegularItalic.woff2") format("woff2");
730
+ font-weight: 400;
731
+ font-style: italic;
732
+ font-display: swap;
733
+ }
734
+ @font-face {
735
+ font-family: "Right Grotesk Text";
736
+ src: url("/fonts/Right-Grotesk-Text/PPRightGroteskText-Regular.woff2") format("woff2");
737
+ font-weight: 400;
738
+ font-style: normal;
739
+ font-display: swap;
740
+ }
741
+
742
+ /* =============================================================================
743
+ * ROOT VARIABLES
744
+ * ============================================================================= */
745
+
746
+ :root {
747
+ /* Sans family tokens — three cuts loaded. Editor convention used in prose:
748
+ * Narrow for top-of-scale (display, large headings), Compact for mid (smaller
749
+ * headings, lede), base for body. Atomic classes follow the same convention. */
750
+ --kol-font-family-sans: 'Right Grotesk', sans-serif;
751
+ --kol-font-family-sans-narrow: 'Right Grotesk Narrow', 'Right Grotesk', sans-serif;
752
+ --kol-font-family-sans-compact: 'Right Grotesk Compact', 'Right Grotesk', sans-serif;
753
+
754
+ /* Type size tokens — numbered scale, 01 = largest, ascending = smaller.
755
+ * Mobile-first; @media overrides below scale display + heading-01 up on
756
+ * wider viewports. All other sizes stay fixed. */
757
+
758
+ /* Display — hero typography (3 stops) */
759
+ --kol-text-display-01: 56px;
760
+ --kol-text-display-02: 44px;
761
+ --kol-text-display-03: 36px;
762
+
763
+ /* Heading — H1 → H6 (6 stops) */
764
+ --kol-text-heading-01: 48px;
765
+ --kol-text-heading-02: 40px;
766
+ --kol-text-heading-03: 32px;
767
+ --kol-text-heading-04: 24px;
768
+ --kol-text-heading-05: 20px;
769
+ --kol-text-heading-06: 16px;
770
+
771
+ /* Body — reading copy (3 stops) */
772
+ --kol-text-body-01: 16px;
773
+ --kol-text-body-02: 14px;
774
+ --kol-text-body-03: 12px;
775
+ }
776
+
777
+ @media (min-width: 768px) {
778
+ :root {
779
+ --kol-text-display-01: 80px;
780
+ --kol-text-display-02: 56px;
781
+ --kol-text-display-03: 42px;
782
+ --kol-text-heading-01: 56px;
783
+ }
784
+ }
785
+
786
+ @media (min-width: 1280px) {
787
+ :root {
788
+ --kol-text-display-01: 96px;
789
+ --kol-text-display-02: 64px;
790
+ --kol-text-display-03: 48px;
791
+ --kol-text-heading-01: 64px;
792
+ }
793
+ }
794
+
795
+ /* =============================================================================
796
+ * DISPLAY — sans Narrow, weight 600. Numbered 01 (largest) → 03 (smallest).
797
+ * ============================================================================= */
798
+
799
+ .kol-sans-display-01 {
800
+ font-family: var(--kol-font-family-sans-narrow);
801
+ font-size: var(--kol-text-display-01);
802
+ line-height: 100%;
803
+ font-weight: 600;
804
+ }
805
+
806
+ .kol-sans-display-02 {
807
+ font-family: var(--kol-font-family-sans-narrow);
808
+ font-size: var(--kol-text-display-02);
809
+ line-height: 100%;
810
+ font-weight: 600;
811
+ }
812
+
813
+ /* .kol-sans-display-03 deferred — orphan in current consumers. Token defined.
814
+ * Add the class when a consumer needs it. */
815
+
816
+ /* =============================================================================
817
+ * HEADINGS — H1 sans Narrow, H2-H5 sans Compact, weight 500.
818
+ * 01 = H1 anchor (matches prose H1). 02-06 use Compact for visual rhythm
819
+ * (matches prose H2-H4). 06 token defined; class deferred until consumer.
820
+ * ============================================================================= */
821
+
822
+ .kol-sans-heading-01 {
823
+ font-family: var(--kol-font-family-sans-narrow);
824
+ font-size: var(--kol-text-heading-01);
825
+ line-height: 110%;
826
+ font-weight: 500;
827
+ }
828
+
829
+ .kol-sans-heading-02 {
830
+ font-family: var(--kol-font-family-sans-compact);
831
+ font-size: var(--kol-text-heading-02);
832
+ line-height: 110%;
833
+ font-weight: 500;
834
+ }
835
+
836
+ .kol-sans-heading-03 {
837
+ font-family: var(--kol-font-family-sans-compact);
838
+ font-size: var(--kol-text-heading-03);
839
+ line-height: 120%;
840
+ font-weight: 500;
841
+ }
842
+
843
+ .kol-sans-heading-04 {
844
+ font-family: var(--kol-font-family-sans-compact);
845
+ font-size: var(--kol-text-heading-04);
846
+ line-height: 100%;
847
+ font-weight: 500;
848
+ }
849
+
850
+ .kol-sans-heading-05 {
851
+ font-family: var(--kol-font-family-sans-compact);
852
+ font-size: var(--kol-text-heading-05);
853
+ line-height: 125%;
854
+ font-weight: 500;
855
+ }
856
+
857
+ /* =============================================================================
858
+ * BODY — sans base, weight 400. Atomic body copy for chrome / cards / descriptions.
859
+ * Distinct from .kol-prose body (300, lighter, for editorial long-form copy).
860
+ * ============================================================================= */
861
+
862
+ .kol-sans-body-01 {
863
+ font-family: var(--kol-font-family-sans);
864
+ font-size: var(--kol-text-body-01);
865
+ line-height: 160%;
866
+ font-weight: 400;
867
+ }
868
+
869
+ .kol-sans-body-02 {
870
+ font-family: var(--kol-font-family-sans);
871
+ font-size: var(--kol-text-body-02);
872
+ line-height: 160%;
873
+ font-weight: 400;
874
+ }
875
+
876
+ .kol-sans-body-03 {
877
+ font-family: var(--kol-font-family-sans);
878
+ font-size: var(--kol-text-body-03);
879
+ line-height: 150%;
880
+ font-weight: 400;
881
+ }
882
+
883
+ /* `.kol-mono-text` retired — consumers use Tailwind `font-mono` (single-class
884
+ * family marker). `.kol-helper-{xl..xxxxs}` t-shirt scale retired — consumers
885
+ * migrated to `.kol-helper-{8,10,12,14,16,20}` defined in kol-typography-mono.css. */
886
+
887
+
888
+ /* =============================================================================
889
+ * PROSE (rich-text running copy container) — editorial typography
890
+ * Right Grotesk family. 4-pt grid sizes, absolute px line-heights.
891
+ * ============================================================================= */
892
+
893
+ .kol-prose {
894
+ max-width: 720px;
895
+ font-family: var(--kol-font-family-sans);
896
+ font-size: 16px;
897
+ font-weight: 300;
898
+ line-height: 24px;
899
+ letter-spacing: 0.02em;
900
+ color: var(--kol-fg-80);
901
+ }
902
+
903
+ .kol-prose > :first-child { margin-top: 0; }
904
+ .kol-prose > :last-child { margin-bottom: 0; }
905
+
906
+ /* ─── Section head — label + title + lede.
907
+ Self-contained: do NOT nest inside .kol-prose, the descendant
908
+ p/h2 rules below would override these. Render as flat siblings. ─── */
909
+
910
+ .kol-prose-label {
911
+ font-family: var(--kol-font-family-mono);
912
+ font-size: 12px;
913
+ font-weight: 500;
914
+ line-height: 16px;
915
+ letter-spacing: 0.1em;
916
+ text-transform: uppercase;
917
+ color: var(--kol-fg-48);
918
+ margin: 0 0 16px;
919
+ }
920
+
921
+ /* Display scale — D1 (hero), D2 (sub-hero), D3 (chapter title / .kol-prose-title alias). */
922
+
923
+ .kol-prose-display {
924
+ font-family: var(--kol-font-family-sans-narrow);
925
+ font-size: 80px;
926
+ font-weight: 500;
927
+ line-height: 80px;
928
+ letter-spacing: -0.01em;
929
+ color: var(--kol-surface-on-primary);
930
+ margin: 0 0 24px;
931
+ }
932
+
933
+ .kol-prose-display-md {
934
+ font-family: var(--kol-font-family-sans-narrow);
935
+ font-size: 64px;
936
+ font-weight: 500;
937
+ line-height: 68px;
938
+ letter-spacing: -0.01em;
939
+ color: var(--kol-surface-on-primary);
940
+ margin: 0 0 24px;
941
+ }
942
+
943
+ .kol-prose-title {
944
+ font-family: var(--kol-font-family-sans-narrow);
945
+ font-size: 56px;
946
+ font-weight: 500;
947
+ line-height: 60px;
948
+ letter-spacing: -0.01em;
949
+ color: var(--kol-surface-on-primary);
950
+ margin: 0 0 24px;
951
+ }
952
+
953
+ .kol-prose-lede {
954
+ font-family: var(--kol-font-family-sans-compact);
955
+ font-size: 24px;
956
+ font-weight: 400;
957
+ line-height: 28px;
958
+ letter-spacing: 0.02em;
959
+ color: var(--kol-surface-on-primary);
960
+ margin: 0 0 40px;
961
+ }
962
+
963
+ /* Editorial subtitle — sits under a display/title as the tagline. Narrow
964
+ * family at 13px uppercase, dimmed via fg-64. Distinct from .kol-prose-label
965
+ * which is Mono and used for section eyebrows / kickers. */
966
+ .kol-prose-tagline {
967
+ font-family: var(--kol-font-family-sans-narrow);
968
+ font-size: 14px;
969
+ font-weight: 500;
970
+ line-height: 16px;
971
+ letter-spacing: 0.14em;
972
+ text-transform: uppercase;
973
+ color: var(--kol-fg-64);
974
+ margin: 0;
975
+ }
976
+
977
+ /* ─── Headings ─── */
978
+
979
+ /* H1 uses sans-narrow + heading-01. H2-H6 use sans-compact + heading-{03,04,05,06}.
980
+ * H2 intentionally skips heading-02 (40px) — visual hierarchy works better with
981
+ * a bigger jump from H1 (48 → 32 vs 48 → 40). Convention preserved from prior
982
+ * prose. Sizes resolve through tokens — edit token, every consumer follows. */
983
+ .kol-prose h1,
984
+ .kol-prose h2,
985
+ .kol-prose h3,
986
+ .kol-prose h4,
987
+ .kol-prose h5,
988
+ .kol-prose h6 {
989
+ font-weight: 500;
990
+ color: var(--kol-surface-on-primary);
991
+ }
992
+
993
+ .kol-prose h1 { font-family: var(--kol-font-family-sans-narrow); font-size: var(--kol-text-heading-01); line-height: 52px; margin: 0 0 24px; }
994
+ .kol-prose h2 { font-family: var(--kol-font-family-sans-compact); font-weight: 400; font-size: var(--kol-text-heading-03); line-height: 40px; margin: 56px 0 16px; }
995
+ .kol-prose h3 { font-family: var(--kol-font-family-sans-compact); font-weight: 400; font-size: var(--kol-text-heading-04); line-height: 32px; margin: 40px 0 12px; }
996
+ .kol-prose h4 { font-family: var(--kol-font-family-sans-compact); font-weight: 400; font-size: var(--kol-text-heading-05); line-height: 28px; margin: 32px 0 8px; }
997
+ .kol-prose h5 { font-family: var(--kol-font-family-sans-compact); font-weight: 500; font-size: var(--kol-text-heading-06); line-height: 24px; margin: 24px 0 6px; }
998
+ .kol-prose h6 { font-family: var(--kol-font-family-sans-compact); font-weight: 500; font-size: var(--kol-text-heading-06); line-height: 24px; margin: 24px 0 6px; text-transform: uppercase; letter-spacing: 0.04em; }
999
+
1000
+ /* ─── Body + lists ─── */
1001
+
1002
+ .kol-prose p { margin: 0 0 24px; letter-spacing: 0.02em; }
1003
+ .kol-prose p + p { margin-top: 0; }
1004
+
1005
+ .kol-prose ul,
1006
+ .kol-prose ol { padding-left: 24px; margin: 0 0 24px; }
1007
+ .kol-prose ul { list-style-type: disc; }
1008
+ .kol-prose ol { list-style-type: decimal; }
1009
+ .kol-prose li { margin: 0 0 8px; line-height: 24px; }
1010
+
1011
+ /* ─── Inline ─── */
1012
+
1013
+ .kol-prose em { font-style: italic; }
1014
+ .kol-prose strong { font-weight: 700; }
1015
+
1016
+ /* ─── Code (inline + block) — JetBrains Mono via the mono token. Same family
1017
+ * as `.kol-mono-N` so a future swap cascades. Body weight 400. ─── */
1018
+
1019
+ .kol-prose code {
1020
+ font-family: var(--kol-font-family-mono);
1021
+ font-size: 0.875em; /* ~14px when prose body is 16px — proportional */
1022
+ font-weight: 400;
1023
+ background: var(--kol-fg-04);
1024
+ padding: 0.1em 0.35em;
1025
+ border-radius: 3px;
1026
+ }
1027
+
1028
+ .kol-prose pre {
1029
+ font-family: var(--kol-font-family-mono);
1030
+ font-size: 14px;
1031
+ font-weight: 400;
1032
+ line-height: 22px;
1033
+ margin: 24px 0;
1034
+ padding: 16px 20px;
1035
+ background: var(--kol-fg-04);
1036
+ border-radius: 6px;
1037
+ overflow-x: auto;
1038
+ }
1039
+
1040
+ /* Code inside pre — strip inline-code styles to avoid double background / padding. */
1041
+ .kol-prose pre code {
1042
+ background: none;
1043
+ padding: 0;
1044
+ font-size: inherit;
1045
+ border-radius: 0;
1046
+ }
1047
+
1048
+ /* ─── Blockquote ─── */
1049
+
1050
+ .kol-prose blockquote {
1051
+ margin: 40px 0;
1052
+ padding: 8px 0 8px 24px;
1053
+ border-left: 2px solid var(--kol-fg-32);
1054
+ font-weight: 600;
1055
+ }
1056
+
1057
+ .kol-prose blockquote p {
1058
+ margin: 0 0 8px;
1059
+ font-size: 24px;
1060
+ line-height: 32px;
1061
+ color: var(--kol-surface-on-primary);
1062
+ }
1063
+
1064
+ .kol-prose blockquote cite {
1065
+ display: block;
1066
+ margin-top: 12px;
1067
+ font-style: normal;
1068
+ font-size: 12px;
1069
+ font-weight: 500;
1070
+ line-height: 16px;
1071
+ letter-spacing: 0.04em;
1072
+ color: var(--kol-fg-48);
1073
+ }
1074
+
1075
+ .kol-prose blockquote cite::before { content: '— '; opacity: 0.6; }
1076
+
1077
+ /* =============================================================================
1078
+ * TAILWIND CONTRACT — font-family exposures
1079
+ * Lets JSX use font-display / font-narrow / etc. instead of arbitrary value
1080
+ * syntax. Family strings include sans-serif fallbacks for graceful degradation
1081
+ * before Right Grotesk loads.
1082
+ * ============================================================================= */
1083
+
1084
+ @theme {
1085
+ --font-display: 'Right Grotesk', sans-serif;
1086
+ --font-text: 'Right Grotesk', sans-serif;
1087
+ --font-serif: 'Right Grotesk', sans-serif;
1088
+ --font-narrow: 'Right Grotesk Narrow', 'Right Grotesk', sans-serif;
1089
+ /* --font-mono lives in kol-typography-mono.css — keeps mono concerns in one file. */
1090
+ }