summaryrefslogtreecommitdiff
path: root/_ds/pantograph-design-system-56a1c74e-41c1-486b-ba3c-4eabdfacef31/tokens/typography.css
blob: be943df232ff1cfa5b6190af6133aefcd09fea84 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/* ============================================================
   Pantograph — Typography tokens
   ------------------------------------------------------------
   Two voices. Minimal, like the product:
     • Saira Condensed — THE primary face. Display, headings,
       UI, body, prose, eyebrows, scale numerals. Tall and
       narrow; reads as engraved instrument lettering.
     • IBM Plex Mono  — code, terminals, the panto CLI, tabular
       numerals, anything "machine".

   --font-sans / --font-serif / --font-display all resolve to
   Saira Condensed, so role tokens and existing components keep
   working while the system runs on a single primary face.
   ============================================================ */

:root {
  /* Families — one primary face, one mono */
  --font-primary: 'Saira Condensed', 'Arial Narrow', sans-serif;
  --font-mono:    'IBM Plex Mono', ui-monospace, 'SF Mono', Menlo, monospace;

  /* Aliases — all point at the primary face (legacy role names) */
  --font-display: var(--font-primary);
  --font-sans:    var(--font-primary);
  --font-serif:   var(--font-primary);

  /* Type scale (1.250 major-third, rooted at 16px) */
  --text-2xs:  0.6875rem;  /* 11px — tick labels, legal */
  --text-xs:   0.75rem;    /* 12px — captions, eyebrows */
  --text-sm:   0.875rem;   /* 14px — secondary UI text */
  --text-base: 1rem;       /* 16px — body */
  --text-md:   1.125rem;   /* 18px — lead paragraph */
  --text-lg:   1.375rem;   /* 22px — h4 / card titles */
  --text-xl:   1.75rem;    /* 28px — h3 */
  --text-2xl:  2.25rem;    /* 36px — h2 */
  --text-3xl:  3rem;       /* 48px — h1 */
  --text-4xl:  4rem;       /* 64px — display */
  --text-5xl:  5.5rem;     /* 88px — hero display */

  /* Weights */
  --weight-regular:  400;
  --weight-medium:   500;
  --weight-semibold: 600;
  --weight-bold:     700;

  /* Line heights */
  --leading-tight:   1.05;  /* display */
  --leading-snug:    1.25;  /* headings */
  --leading-normal:  1.5;   /* UI / sans body */
  --leading-relaxed: 1.7;   /* serif prose */
  --leading-mono:    1.6;   /* code */

  /* Letter spacing */
  --tracking-label:  0.14em;  /* ALL-CAPS engraved labels */
  --tracking-tight: -0.01em;  /* large display */
  --tracking-normal: 0;

  /* ---- Semantic roles ---- */
  --role-display: var(--weight-bold) var(--text-4xl)/var(--leading-tight) var(--font-display);
  --role-h1:      var(--weight-bold) var(--text-3xl)/var(--leading-snug) var(--font-display);
  --role-h2:      var(--weight-semibold) var(--text-2xl)/var(--leading-snug) var(--font-sans);
  --role-h3:      var(--weight-semibold) var(--text-xl)/var(--leading-snug) var(--font-sans);
  --role-body:    var(--weight-regular) var(--text-base)/var(--leading-normal) var(--font-sans);
  --role-prose:   var(--weight-regular) var(--text-md)/var(--leading-relaxed) var(--font-primary);
  --role-code:    var(--weight-regular) var(--text-sm)/var(--leading-mono) var(--font-mono);
  --role-label:   var(--weight-semibold) var(--text-xs)/1 var(--font-display);
}