@refrakt-md/lumina 0.21.0 → 0.22.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.
Files changed (106) hide show
  1. package/dist/tokens.d.ts +5 -3
  2. package/dist/tokens.d.ts.map +1 -1
  3. package/dist/tokens.js +42 -3
  4. package/dist/tokens.js.map +1 -1
  5. package/index.css +1 -0
  6. package/package.json +6 -5
  7. package/styles/dimensions/checklist.css +1 -1
  8. package/styles/dimensions/density.css +3 -3
  9. package/styles/dimensions/frame.css +4 -4
  10. package/styles/dimensions/metadata.css +6 -6
  11. package/styles/dimensions/sections.css +6 -6
  12. package/styles/dimensions/sequence.css +3 -3
  13. package/styles/global.css +15 -15
  14. package/styles/layouts/blog.css +31 -31
  15. package/styles/layouts/default.css +9 -9
  16. package/styles/layouts/docs.css +6 -6
  17. package/styles/layouts/mobile.css +2 -2
  18. package/styles/layouts/on-this-page.css +5 -5
  19. package/styles/layouts/plan.css +24 -24
  20. package/styles/layouts/search.css +14 -14
  21. package/styles/layouts/version-switcher.css +6 -6
  22. package/styles/runes/accordion.css +10 -10
  23. package/styles/runes/aggregate.css +1 -1
  24. package/styles/runes/annotate.css +5 -5
  25. package/styles/runes/api.css +1 -1
  26. package/styles/runes/audio.css +9 -9
  27. package/styles/runes/badge.css +2 -2
  28. package/styles/runes/bento.css +2 -2
  29. package/styles/runes/blog.css +15 -15
  30. package/styles/runes/bond.css +3 -3
  31. package/styles/runes/breadcrumb.css +2 -2
  32. package/styles/runes/budget.css +20 -20
  33. package/styles/runes/bug.css +2 -2
  34. package/styles/runes/card.css +3 -3
  35. package/styles/runes/cast.css +5 -5
  36. package/styles/runes/changelog.css +8 -8
  37. package/styles/runes/character.css +3 -3
  38. package/styles/runes/chart.css +5 -5
  39. package/styles/runes/codegroup.css +3 -3
  40. package/styles/runes/collection.css +3 -3
  41. package/styles/runes/compare.css +5 -5
  42. package/styles/runes/comparison.css +22 -22
  43. package/styles/runes/conversation.css +4 -4
  44. package/styles/runes/cta.css +14 -14
  45. package/styles/runes/datatable.css +8 -8
  46. package/styles/runes/decision.css +2 -2
  47. package/styles/runes/design-context.css +2 -2
  48. package/styles/runes/details.css +4 -4
  49. package/styles/runes/diagram.css +3 -3
  50. package/styles/runes/diff.css +6 -6
  51. package/styles/runes/drawer.css +8 -8
  52. package/styles/runes/embed.css +1 -1
  53. package/styles/runes/event.css +2 -2
  54. package/styles/runes/expand.css +5 -5
  55. package/styles/runes/faction.css +3 -3
  56. package/styles/runes/feature.css +11 -11
  57. package/styles/runes/figure.css +3 -3
  58. package/styles/runes/form.css +16 -16
  59. package/styles/runes/gallery.css +7 -7
  60. package/styles/runes/hero.css +15 -14
  61. package/styles/runes/hint.css +7 -7
  62. package/styles/runes/howto.css +6 -6
  63. package/styles/runes/itinerary.css +12 -12
  64. package/styles/runes/juxtapose.css +6 -6
  65. package/styles/runes/lore.css +4 -4
  66. package/styles/runes/map.css +6 -6
  67. package/styles/runes/mediatext.css +1 -1
  68. package/styles/runes/milestone.css +12 -12
  69. package/styles/runes/mockup.css +7 -7
  70. package/styles/runes/nav.css +34 -34
  71. package/styles/runes/organization.css +3 -3
  72. package/styles/runes/pagination.css +5 -5
  73. package/styles/runes/palette.css +13 -13
  74. package/styles/runes/placeholder.css +16 -0
  75. package/styles/runes/plan-history.css +20 -20
  76. package/styles/runes/plan-progress.css +3 -3
  77. package/styles/runes/plan-ref.css +1 -1
  78. package/styles/runes/playlist.css +8 -8
  79. package/styles/runes/plot.css +6 -6
  80. package/styles/runes/preview.css +6 -6
  81. package/styles/runes/pricing.css +16 -16
  82. package/styles/runes/progress.css +2 -2
  83. package/styles/runes/pullquote.css +6 -5
  84. package/styles/runes/realm.css +3 -3
  85. package/styles/runes/recipe.css +9 -9
  86. package/styles/runes/relationships.css +2 -2
  87. package/styles/runes/reveal.css +10 -10
  88. package/styles/runes/sandbox.css +3 -3
  89. package/styles/runes/section.css +6 -6
  90. package/styles/runes/sidenote.css +2 -2
  91. package/styles/runes/spacing.css +11 -11
  92. package/styles/runes/spec.css +2 -2
  93. package/styles/runes/steps.css +10 -10
  94. package/styles/runes/storyboard.css +2 -2
  95. package/styles/runes/swatch.css +1 -1
  96. package/styles/runes/symbol.css +10 -10
  97. package/styles/runes/tabs.css +9 -9
  98. package/styles/runes/testimonial.css +7 -7
  99. package/styles/runes/textblock.css +4 -4
  100. package/styles/runes/timeline.css +7 -7
  101. package/styles/runes/toc.css +4 -4
  102. package/styles/runes/track.css +10 -10
  103. package/styles/runes/typography.css +12 -12
  104. package/styles/runes/work.css +2 -2
  105. package/tokens/base.css +43 -66
  106. package/tokens/dark.css +76 -80
package/dist/tokens.d.ts CHANGED
@@ -5,9 +5,11 @@ import type { ThemeTokensConfig } from '@refrakt-md/types';
5
5
  * "quiet spectrum walk" syntax palette (teal / violet / rust / ochre /
6
6
  * sage), and the four muted-earthy status colours.
7
7
  *
8
- * This is the *source of truth* for Lumina's runtime CSS values; the
9
- * hand-authored `tokens/base.css` and `tokens/dark.css` mirror it
10
- * verbatim and a coverage test keeps the two in lockstep.
8
+ * This is the *source of truth* for Lumina's runtime CSS values. The
9
+ * `tokens/base.css` and `tokens/dark.css` files are **generated** from this
10
+ * export by `scripts/generate-tokens.mjs` (run as part of the package build via
11
+ * `generateThemeStylesheet`); a drift test (`test/token-generation.test.ts`)
12
+ * fails CI if the committed CSS diverges. Edit this file, never the CSS.
11
13
  *
12
14
  * Sites that want the previous cream-and-navy appearance opt into the
13
15
  * `tideline` preset shipping alongside this default (see
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,YAAY,EAAE,iBAyL1B,CAAC"}
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,YAAY,EAAE,iBAkO1B,CAAC"}
package/dist/tokens.js CHANGED
@@ -4,9 +4,11 @@
4
4
  * "quiet spectrum walk" syntax palette (teal / violet / rust / ochre /
5
5
  * sage), and the four muted-earthy status colours.
6
6
  *
7
- * This is the *source of truth* for Lumina's runtime CSS values; the
8
- * hand-authored `tokens/base.css` and `tokens/dark.css` mirror it
9
- * verbatim and a coverage test keeps the two in lockstep.
7
+ * This is the *source of truth* for Lumina's runtime CSS values. The
8
+ * `tokens/base.css` and `tokens/dark.css` files are **generated** from this
9
+ * export by `scripts/generate-tokens.mjs` (run as part of the package build via
10
+ * `generateThemeStylesheet`); a drift test (`test/token-generation.test.ts`)
11
+ * fails CI if the committed CSS diverges. Edit this file, never the CSS.
10
12
  *
11
13
  * Sites that want the previous cream-and-navy appearance opt into the
12
14
  * `tideline` preset shipping alongside this default (see
@@ -19,6 +21,43 @@ export const luminaTokens = {
19
21
  font: {
20
22
  sans: "'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
21
23
  mono: "'JetBrains Mono', 'Fira Code', ui-monospace, 'Cascadia Code', monospace",
24
+ // Lumina is a unified-neutral theme: its headings use the same sans as
25
+ // body. The slot exists so an editorial theme can swap in a serif/display
26
+ // family without touching rune CSS.
27
+ display: "'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
28
+ },
29
+ // SPEC-094 — typographic scale. A roughly-1.2 modular scale anchored at a
30
+ // 1rem body. Nothing consumes these yet (WORK-405 migrates Lumina's
31
+ // hardcoded sizes onto them); values match Lumina's current type feel.
32
+ text: {
33
+ xs: '0.75rem',
34
+ sm: '0.875rem',
35
+ base: '1rem',
36
+ lg: '1.125rem',
37
+ xl: '1.25rem',
38
+ '2xl': '1.5rem',
39
+ '3xl': '1.875rem',
40
+ '4xl': '2.5rem',
41
+ },
42
+ weight: {
43
+ light: '300',
44
+ normal: '400',
45
+ medium: '500',
46
+ semibold: '600',
47
+ bold: '700',
48
+ },
49
+ leading: {
50
+ tight: '1.2',
51
+ snug: '1.35',
52
+ normal: '1.5',
53
+ relaxed: '1.65',
54
+ loose: '2',
55
+ },
56
+ tracking: {
57
+ tight: '-0.01em',
58
+ normal: '0',
59
+ wide: '0.03em',
60
+ wider: '0.06em',
22
61
  },
23
62
  color: {
24
63
  text: '#1c1a17',
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"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"}
package/index.css CHANGED
@@ -80,6 +80,7 @@
80
80
  @import './styles/runes/faction.css';
81
81
  @import './styles/runes/feature.css';
82
82
  @import './styles/runes/figure.css';
83
+ @import './styles/runes/placeholder.css';
83
84
  @import './styles/runes/gallery.css';
84
85
  @import './styles/runes/form.css';
85
86
  @import './styles/runes/grid.css';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@refrakt-md/lumina",
3
3
  "description": "Lumina theme for refrakt.md — design tokens, CSS, identity transform, and layout configs",
4
- "version": "0.21.0",
4
+ "version": "0.22.0",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -80,12 +80,13 @@
80
80
  "assets"
81
81
  ],
82
82
  "scripts": {
83
- "build": "tsc"
83
+ "build": "tsc && node scripts/generate-tokens.mjs",
84
+ "generate-tokens": "node scripts/generate-tokens.mjs"
84
85
  },
85
86
  "dependencies": {
86
- "@refrakt-md/runes": "0.21.0",
87
- "@refrakt-md/transform": "0.21.0",
88
- "@refrakt-md/types": "0.21.0"
87
+ "@refrakt-md/runes": "0.22.0",
88
+ "@refrakt-md/transform": "0.22.0",
89
+ "@refrakt-md/types": "0.22.0"
89
90
  },
90
91
  "devDependencies": {
91
92
  "postcss": "^8.4.0"
@@ -40,7 +40,7 @@
40
40
 
41
41
  [data-checked="active"] {
42
42
  color: var(--rf-color-primary);
43
- font-weight: 600;
43
+ font-weight: var(--rf-weight-semibold);
44
44
  }
45
45
 
46
46
  /* Skipped — muted with strikethrough */
@@ -9,14 +9,14 @@
9
9
 
10
10
  [data-density="full"] {
11
11
  --rune-padding: var(--rf-spacing-md);
12
- --rf-title-size: 1.5rem;
12
+ --rf-title-size: var(--rf-text-2xl);
13
13
  }
14
14
 
15
15
  /* ─── Compact: truncated descriptions, tight spacing ──────────────── */
16
16
 
17
17
  [data-density="compact"] {
18
18
  --rune-padding: var(--rf-spacing-sm);
19
- --rf-title-size: 1.25rem;
19
+ --rf-title-size: var(--rf-text-xl);
20
20
  }
21
21
 
22
22
  [data-density="compact"] [data-section="description"] {
@@ -34,7 +34,7 @@
34
34
 
35
35
  [data-density="minimal"] {
36
36
  --rune-padding: var(--rf-spacing-xs);
37
- --rf-title-size: 1rem;
37
+ --rf-title-size: var(--rf-text);
38
38
  }
39
39
 
40
40
  [data-density="minimal"] [data-section="description"] {
@@ -42,7 +42,7 @@
42
42
  * guest so a displaced image's shadow falls into the slot's exposed
43
43
  * interior (clipped at the slot's `overflow: hidden` boundary like any
44
44
  * other in-slot content). */
45
- [data-section="media"][data-frame-shadow] > :is(img, video, [data-rune]) {
45
+ [data-section="media"][data-frame-shadow] > :is(img, video, .rf-placeholder, [data-rune]) {
46
46
  filter: var(--frame-shadow);
47
47
  }
48
48
 
@@ -50,7 +50,7 @@
50
50
  [style*="--frame-aspect"] { aspect-ratio: var(--frame-aspect); }
51
51
 
52
52
  /* ── Crop anchor — focal point when the guest is cut ─────────────────── */
53
- [style*="--frame-anchor"] > :is(img, video) { object-position: var(--frame-anchor); }
53
+ [style*="--frame-anchor"] > :is(img, video, .rf-placeholder) { object-position: var(--frame-anchor); }
54
54
 
55
55
  /* ── Placement of the framed box within its slot ─────────────────────── */
56
56
  [style*="--frame-place-x"] { justify-self: var(--frame-place-x, auto); align-self: var(--frame-place-y, auto); }
@@ -59,7 +59,7 @@
59
59
  /* `[data-rune]` extends the rule to nested rune guests (codegroup, mockup,
60
60
  * chart, etc.), so frame chrome stays guest-agnostic — the same selector
61
61
  * pattern the displace rule uses. */
62
- [style*="--frame-oversize"] > :is(img, video, [data-rune]) { width: calc(100% * var(--frame-oversize, 1)); max-width: none; }
62
+ [style*="--frame-oversize"] > :is(img, video, .rf-placeholder, [data-rune]) { width: calc(100% * var(--frame-oversize, 1)); max-width: none; }
63
63
 
64
64
  /* ── Displacement (peek / spill) — move the guest toward an edge/corner.
65
65
  * The host decides whether the guest is cropped or spills; this only moves it.
@@ -80,7 +80,7 @@
80
80
  * parent's edge for a true breakout. */
81
81
 
82
82
  /* — Case 1: media-zone displace → translate the inner guest, zone clips. */
83
- [data-section="media"][data-displace] > :is(img, video, [data-rune]) {
83
+ [data-section="media"][data-displace] > :is(img, video, .rf-placeholder, [data-rune]) {
84
84
  transform: translate(var(--displace-x, 0), var(--displace-y, 0));
85
85
  }
86
86
  [data-section="media"][data-displace="top"] { --displace-y: calc(-1 * var(--frame-offset, var(--rf-spacing-lg))); }
@@ -22,7 +22,7 @@
22
22
  [data-meta-type="id"],
23
23
  [data-meta-type="code"] {
24
24
  font-family: var(--rf-font-mono, monospace);
25
- font-size: var(--meta-font-size, 0.8125rem);
25
+ font-size: var(--meta-font-size, var(--rf-text-sm));
26
26
  }
27
27
 
28
28
  /* IDs read as primary-coloured references wherever they appear (eyebrow
@@ -30,7 +30,7 @@
30
30
  * not a per-layout one. `code` (e.g. API paths) stays neutral monospace. */
31
31
  [data-meta-type="id"] {
32
32
  color: var(--rf-color-primary);
33
- font-weight: 500;
33
+ font-weight: var(--rf-weight-medium);
34
34
  }
35
35
 
36
36
  [data-meta-type="quantity"] {
@@ -123,14 +123,14 @@
123
123
  }
124
124
 
125
125
  [data-zone-layout="definition-list"] dt {
126
- font-size: 0.75rem;
127
- font-weight: 500;
126
+ font-size: var(--rf-text-xs);
127
+ font-weight: var(--rf-weight-medium);
128
128
  color: var(--rf-color-muted);
129
129
  }
130
130
 
131
131
  [data-zone-layout="definition-list"] dd {
132
132
  margin: 0;
133
- font-size: 0.875rem;
133
+ font-size: var(--rf-text-sm);
134
134
  }
135
135
 
136
136
  /* Multi-value dd (fields with `splitOn`) renders a row of chips
@@ -145,7 +145,7 @@
145
145
 
146
146
  /* Label element within a chip — thin, muted; pairs visually with the value */
147
147
  [data-meta-label] {
148
- font-weight: 400;
148
+ font-weight: var(--rf-weight-normal);
149
149
  opacity: 0.65;
150
150
  }
151
151
 
@@ -33,9 +33,9 @@
33
33
  * through nested densities AND beat per-rune title sizes. */
34
34
  [data-section="title"] {
35
35
  font-family: var(--rf-font-sans);
36
- font-size: var(--rf-title-size, 1.5rem);
37
- font-weight: 700;
38
- line-height: 1.2;
36
+ font-size: var(--rf-title-size, var(--rf-text-2xl));
37
+ font-weight: var(--rf-weight-bold);
38
+ line-height: var(--rf-leading-tight);
39
39
  color: var(--rf-color-text);
40
40
  margin: 0;
41
41
  }
@@ -43,8 +43,8 @@
43
43
  /* ─── Description: secondary text ─────────────────────────────────── */
44
44
 
45
45
  [data-section="description"] {
46
- font-size: 1rem;
47
- line-height: 1.5;
46
+ font-size: var(--rf-text);
47
+ line-height: var(--rf-leading-normal);
48
48
  color: var(--rf-color-muted);
49
49
  margin: var(--rf-spacing-xs) 0 var(--rf-spacing-md);
50
50
  }
@@ -52,7 +52,7 @@
52
52
  /* ─── Body: main content ──────────────────────────────────────────── */
53
53
 
54
54
  [data-section="body"] {
55
- line-height: 1.6;
55
+ line-height: var(--rf-leading-relaxed);
56
56
  color: var(--rf-color-text);
57
57
  }
58
58
 
@@ -23,8 +23,8 @@
23
23
  display: flex;
24
24
  align-items: center;
25
25
  justify-content: center;
26
- font-size: 0.75rem;
27
- font-weight: 700;
26
+ font-size: var(--rf-text-xs);
27
+ font-weight: var(--rf-weight-bold);
28
28
  font-variant-numeric: tabular-nums;
29
29
  color: var(--rf-color-primary);
30
30
  background: var(--rf-color-surface-active);
@@ -110,7 +110,7 @@
110
110
  [data-density="compact"] [data-sequence="numbered"] > li::before {
111
111
  width: 1.25rem;
112
112
  height: 1.25rem;
113
- font-size: 0.625rem;
113
+ font-size: var(--rf-text-xs);
114
114
  }
115
115
 
116
116
  [data-density="compact"] [data-sequence="connected"] > li {
package/styles/global.css CHANGED
@@ -9,7 +9,7 @@ html {
9
9
  font-family: var(--rf-font-sans);
10
10
  color: var(--rf-color-text);
11
11
  background: var(--rf-color-bg);
12
- line-height: 1.7;
12
+ line-height: var(--rf-leading-relaxed);
13
13
  -webkit-font-smoothing: antialiased;
14
14
  -moz-osx-font-smoothing: grayscale;
15
15
  -webkit-text-size-adjust: 100%;
@@ -97,17 +97,17 @@ body {
97
97
  }
98
98
 
99
99
  h1, h2, h3, h4, h5, h6 {
100
- line-height: 1.25;
100
+ line-height: var(--rf-leading-tight);
101
101
  margin-top: 2em;
102
102
  margin-bottom: 0.5em;
103
- font-weight: 650;
104
- letter-spacing: -0.015em;
103
+ font-weight: var(--rf-weight-semibold);
104
+ letter-spacing: var(--rf-tracking-tight);
105
105
  }
106
106
 
107
- h1 { font-size: 1.875rem; font-weight: 700; letter-spacing: -0.025em; }
108
- h2 { font-size: 1.5rem; }
109
- h3 { font-size: 1.2rem; }
110
- h4 { font-size: 1.05rem; }
107
+ h1 { font-size: var(--rf-text-3xl); font-weight: var(--rf-weight-bold); letter-spacing: var(--rf-tracking-tight); }
108
+ h2 { font-size: var(--rf-text-2xl); }
109
+ h3 { font-size: var(--rf-text-xl); }
110
+ h4 { font-size: var(--rf-text); }
111
111
 
112
112
  p {
113
113
  margin-top: 0;
@@ -124,7 +124,7 @@ a:hover {
124
124
  text-decoration: underline;
125
125
  }
126
126
 
127
- strong { font-weight: 600; }
127
+ strong { font-weight: var(--rf-weight-semibold); }
128
128
 
129
129
  code {
130
130
  font-family: var(--rf-font-mono);
@@ -142,8 +142,8 @@ pre {
142
142
  border-radius: var(--rf-radius-md);
143
143
  overflow-x: auto;
144
144
  margin: 1.5rem 0;
145
- font-size: 0.875rem;
146
- line-height: 1.7;
145
+ font-size: var(--rf-text-sm);
146
+ line-height: var(--rf-leading-relaxed);
147
147
  border: 1px solid var(--rf-color-border);
148
148
  }
149
149
 
@@ -183,17 +183,17 @@ table {
183
183
  width: 100%;
184
184
  border-collapse: collapse;
185
185
  margin: 1.5rem 0;
186
- font-size: 0.9rem;
186
+ font-size: var(--rf-text-sm);
187
187
  }
188
188
 
189
189
  th {
190
190
  text-align: left;
191
- font-weight: 600;
191
+ font-weight: var(--rf-weight-semibold);
192
192
  padding: 0.625rem 1rem;
193
193
  border-bottom: 1px solid var(--rf-color-border);
194
- font-size: 0.8rem;
194
+ font-size: var(--rf-text-xs);
195
195
  text-transform: uppercase;
196
- letter-spacing: 0.04em;
196
+ letter-spacing: var(--rf-tracking-wide);
197
197
  color: var(--rf-color-muted);
198
198
  }
199
199
 
@@ -45,9 +45,9 @@
45
45
  display: inline-flex;
46
46
  align-items: center;
47
47
  gap: 0.5rem;
48
- font-weight: 600;
49
- font-size: 1.2rem;
50
- letter-spacing: -0.02em;
48
+ font-weight: var(--rf-weight-semibold);
49
+ font-size: var(--rf-text-xl);
50
+ letter-spacing: var(--rf-tracking-tight);
51
51
  }
52
52
  .rf-blog-header img,
53
53
  .rf-blog-header p:first-child a > .rf-icon {
@@ -60,7 +60,7 @@
60
60
  color: currentColor;
61
61
  }
62
62
  .rf-blog-header__inner p ~ p {
63
- font-size: 0.85rem;
63
+ font-size: var(--rf-text-sm);
64
64
  }
65
65
  .rf-blog-header__inner p ~ p a {
66
66
  margin-left: 1.5rem;
@@ -93,16 +93,16 @@
93
93
  max-width: 42rem;
94
94
  }
95
95
  .rf-blog-index__title {
96
- font-size: 2.25rem;
97
- font-weight: 800;
98
- line-height: 1.15;
99
- letter-spacing: -0.02em;
96
+ font-size: var(--rf-text-4xl);
97
+ font-weight: var(--rf-weight-bold);
98
+ line-height: var(--rf-leading-tight);
99
+ letter-spacing: var(--rf-tracking-tight);
100
100
  margin: 0 0 1rem;
101
101
  color: var(--rf-color-text);
102
102
  }
103
103
  .rf-blog-index__body {
104
104
  margin-bottom: 2rem;
105
- line-height: 1.8;
105
+ line-height: var(--rf-leading-relaxed);
106
106
  color: var(--rf-color-muted);
107
107
  }
108
108
  .rf-blog-index__body:empty {
@@ -130,8 +130,8 @@
130
130
  text-decoration: none;
131
131
  }
132
132
  .rf-blog-card__title {
133
- font-size: 1.35rem;
134
- font-weight: 700;
133
+ font-size: var(--rf-text-xl);
134
+ font-weight: var(--rf-weight-bold);
135
135
  margin: 0 0 0.5rem;
136
136
  color: var(--rf-color-text);
137
137
  }
@@ -139,7 +139,7 @@
139
139
  display: flex;
140
140
  align-items: center;
141
141
  gap: 0.75rem;
142
- font-size: 0.85rem;
142
+ font-size: var(--rf-text-sm);
143
143
  color: var(--rf-color-muted);
144
144
  margin-bottom: 0.5rem;
145
145
  }
@@ -149,8 +149,8 @@
149
149
  }
150
150
  .rf-blog-card__desc {
151
151
  margin: 0 0 0.75rem;
152
- font-size: 0.95rem;
153
- line-height: 1.6;
152
+ font-size: var(--rf-text);
153
+ line-height: var(--rf-leading-relaxed);
154
154
  color: var(--rf-color-muted);
155
155
  }
156
156
  .rf-blog-card__tags {
@@ -160,8 +160,8 @@
160
160
  margin-bottom: 0.75rem;
161
161
  }
162
162
  .rf-blog-card__link {
163
- font-size: 0.85rem;
164
- font-weight: 600;
163
+ font-size: var(--rf-text-sm);
164
+ font-weight: var(--rf-weight-semibold);
165
165
  color: var(--rf-color-primary, var(--rf-color-text));
166
166
  }
167
167
 
@@ -175,10 +175,10 @@
175
175
  border-bottom: 1px solid var(--rf-color-border);
176
176
  }
177
177
  .rf-blog-article__title {
178
- font-size: 2.25rem;
179
- font-weight: 800;
180
- line-height: 1.15;
181
- letter-spacing: -0.02em;
178
+ font-size: var(--rf-text-4xl);
179
+ font-weight: var(--rf-weight-bold);
180
+ line-height: var(--rf-leading-tight);
181
+ letter-spacing: var(--rf-tracking-tight);
182
182
  margin: 0 0 1rem;
183
183
  color: var(--rf-color-text);
184
184
  }
@@ -186,11 +186,11 @@
186
186
  display: flex;
187
187
  align-items: center;
188
188
  gap: 0.75rem;
189
- font-size: 0.9rem;
189
+ font-size: var(--rf-text-sm);
190
190
  color: var(--rf-color-muted);
191
191
  }
192
192
  .rf-blog-article__meta time {
193
- font-weight: 500;
193
+ font-weight: var(--rf-weight-medium);
194
194
  }
195
195
  .rf-blog-article__author::before {
196
196
  content: '\00b7';
@@ -203,8 +203,8 @@
203
203
  margin-top: 0.75rem;
204
204
  }
205
205
  .rf-blog-article__tag {
206
- font-size: 0.75rem;
207
- font-weight: 500;
206
+ font-size: var(--rf-text-xs);
207
+ font-weight: var(--rf-weight-medium);
208
208
  padding: 0.2rem 0.6rem;
209
209
  border-radius: 9999px;
210
210
  background: var(--rf-color-surface);
@@ -214,7 +214,7 @@
214
214
 
215
215
  /* ---- Article body typography ---- */
216
216
  .rf-blog-article__body {
217
- line-height: 1.8;
217
+ line-height: var(--rf-leading-relaxed);
218
218
  }
219
219
  .rf-blog-article__body h2 {
220
220
  margin-top: 2.5rem;
@@ -234,16 +234,16 @@
234
234
  .rf-blog-sidebar {
235
235
  position: sticky;
236
236
  top: 2.5rem;
237
- font-size: 0.85rem;
237
+ font-size: var(--rf-text-sm);
238
238
  color: var(--rf-color-muted);
239
239
  }
240
240
  .rf-blog-sidebar h2,
241
241
  .rf-blog-sidebar h3,
242
242
  .rf-blog-sidebar h4 {
243
- font-size: 0.75rem;
244
- font-weight: 600;
243
+ font-size: var(--rf-text-xs);
244
+ font-weight: var(--rf-weight-semibold);
245
245
  text-transform: uppercase;
246
- letter-spacing: 0.05em;
246
+ letter-spacing: var(--rf-tracking-wider);
247
247
  color: var(--rf-color-muted);
248
248
  margin-top: 0;
249
249
  margin-bottom: 0.5rem;
@@ -269,7 +269,7 @@
269
269
  border-top: 1px solid var(--rf-color-border);
270
270
  padding: 2rem 1.5rem;
271
271
  text-align: center;
272
- font-size: 0.85rem;
272
+ font-size: var(--rf-text-sm);
273
273
  color: var(--rf-color-muted);
274
274
  }
275
275
 
@@ -282,7 +282,7 @@
282
282
  grid-template-columns: 1fr;
283
283
  }
284
284
  .rf-blog-article__title {
285
- font-size: 1.75rem;
285
+ font-size: var(--rf-text-3xl);
286
286
  }
287
287
  .rf-blog-sidebar {
288
288
  position: static;
@@ -31,9 +31,9 @@
31
31
  }
32
32
  .rf-header h1, .rf-header h2, .rf-header h3 {
33
33
  margin: 0;
34
- font-size: 1.2rem;
35
- font-weight: 600;
36
- letter-spacing: -0.02em;
34
+ font-size: var(--rf-text-xl);
35
+ font-weight: var(--rf-weight-semibold);
36
+ letter-spacing: var(--rf-tracking-tight);
37
37
  line-height: 1;
38
38
  }
39
39
  .rf-header a {
@@ -48,9 +48,9 @@
48
48
  display: inline-flex;
49
49
  align-items: center;
50
50
  gap: 0.5rem;
51
- font-weight: 600;
52
- font-size: 1.2rem;
53
- letter-spacing: -0.02em;
51
+ font-weight: var(--rf-weight-semibold);
52
+ font-size: var(--rf-text-xl);
53
+ letter-spacing: var(--rf-tracking-tight);
54
54
  }
55
55
  .rf-header img,
56
56
  .rf-header p:first-child a > .rf-icon {
@@ -66,7 +66,7 @@
66
66
  color: currentColor;
67
67
  }
68
68
  .rf-header__inner p ~ p {
69
- font-size: 0.85rem;
69
+ font-size: var(--rf-text-sm);
70
70
  }
71
71
  .rf-header__inner p ~ p a {
72
72
  margin-left: 1.5rem;
@@ -234,7 +234,7 @@
234
234
  border-top: 1px solid var(--rf-color-border);
235
235
  background: var(--rf-color-bg);
236
236
  color: var(--rf-color-muted);
237
- font-size: 0.875rem;
237
+ font-size: var(--rf-text-sm);
238
238
  }
239
239
  .rf-footer > * {
240
240
  width: 100%;
@@ -242,6 +242,6 @@
242
242
  }
243
243
  .rf-footer p {
244
244
  margin: 1.5rem 0 0;
245
- font-size: 0.8rem;
245
+ font-size: var(--rf-text-xs);
246
246
  color: var(--rf-color-muted);
247
247
  }
@@ -45,9 +45,9 @@
45
45
  display: inline-flex;
46
46
  align-items: center;
47
47
  gap: 0.5rem;
48
- font-weight: 600;
49
- font-size: 1.2rem;
50
- letter-spacing: -0.02em;
48
+ font-weight: var(--rf-weight-semibold);
49
+ font-size: var(--rf-text-xl);
50
+ letter-spacing: var(--rf-tracking-tight);
51
51
  }
52
52
  .rf-docs-header img,
53
53
  .rf-docs-header p:first-child a > .rf-icon {
@@ -60,7 +60,7 @@
60
60
  color: currentColor;
61
61
  }
62
62
  .rf-docs-header__inner p ~ p {
63
- font-size: 0.85rem;
63
+ font-size: var(--rf-text-sm);
64
64
  }
65
65
  .rf-docs-header__inner p ~ p a {
66
66
  margin-left: 1.5rem;
@@ -215,7 +215,7 @@ html:has(.rf-docs-header) {
215
215
  color: var(--rf-color-text);
216
216
  }
217
217
  .rf-docs-toolbar__breadcrumb {
218
- font-size: 0.8rem;
218
+ font-size: var(--rf-text-xs);
219
219
  color: var(--rf-color-muted);
220
220
  /* `flex: 1 1 0` (basis 0, not auto) so the breadcrumb shrinks against
221
221
  * the available space rather than starting at its full content width —
@@ -237,7 +237,7 @@ html:has(.rf-docs-header) {
237
237
  }
238
238
  .rf-docs-breadcrumb-page {
239
239
  color: var(--rf-color-text);
240
- font-weight: 500;
240
+ font-weight: var(--rf-weight-medium);
241
241
  }
242
242
 
243
243
  /* ---- Hide TOC on medium screens ---- */
@@ -68,8 +68,8 @@
68
68
  .rf-mobile-panel .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link {
69
69
  display: block;
70
70
  padding: 0;
71
- font-size: 1.5rem;
72
- font-weight: 700;
71
+ font-size: var(--rf-text-2xl);
72
+ font-weight: var(--rf-weight-bold);
73
73
  color: var(--rf-color-text);
74
74
  text-decoration: none;
75
75
  background: transparent;