:root {
  /* Sizes — mobile-first app scale */
  --text-3xl: 34px;
  --text-2xl: 28px;
  --text-xl: 22px;
  --text-lg: 18px;
  --text-md: 16px;
  --text-sm: 14px;
  --text-xs: 12px;
  --text-2xs: 11px;

  --leading-tight: 1.05;
  --leading-snug: 1.2;
  --leading-normal: 1.45;
  --leading-loose: 1.6;

  --tracking-display: -0.02em;
  --tracking-normal: 0;
  --tracking-label: 0.08em; /* uppercase Space Mono labels */

  --weight-regular: 400;
  --weight-medium: 500;
  --weight-bold: 700;

  /* Composite roles */
  --type-title: var(--weight-bold) var(--text-2xl) / var(--leading-tight) var(--font-display);
  --type-subtitle: var(--weight-regular) var(--text-lg) / var(--leading-snug) var(--font-display);
  --type-body: var(--weight-regular) var(--text-md) / var(--leading-normal) var(--font-body);
  --type-body-sm: var(--weight-regular) var(--text-sm) / var(--leading-normal) var(--font-body);
  --type-label: var(--weight-bold) var(--text-2xs) / 1 var(--font-mono);
  --type-metric: var(--weight-bold) var(--text-3xl) / 1 var(--font-display);
  --type-dialogue: var(--weight-regular) var(--text-sm) / var(--leading-loose) var(--font-dialogue);
  --type-fun: 800 var(--text-2xl) / var(--leading-snug) var(--font-fun);
}
