@refrakt-md/lumina 0.20.2 → 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 (108) hide show
  1. package/contracts/structures.json +154 -5
  2. package/dist/tokens.d.ts +5 -3
  3. package/dist/tokens.d.ts.map +1 -1
  4. package/dist/tokens.js +42 -3
  5. package/dist/tokens.js.map +1 -1
  6. package/index.css +2 -0
  7. package/package.json +6 -5
  8. package/styles/dimensions/checklist.css +1 -1
  9. package/styles/dimensions/cover.css +18 -0
  10. package/styles/dimensions/density.css +3 -0
  11. package/styles/dimensions/frame.css +4 -4
  12. package/styles/dimensions/metadata.css +6 -6
  13. package/styles/dimensions/sections.css +12 -15
  14. package/styles/dimensions/sequence.css +3 -3
  15. package/styles/global.css +15 -15
  16. package/styles/layouts/blog.css +31 -31
  17. package/styles/layouts/default.css +9 -9
  18. package/styles/layouts/docs.css +6 -6
  19. package/styles/layouts/mobile.css +2 -2
  20. package/styles/layouts/on-this-page.css +5 -5
  21. package/styles/layouts/plan.css +24 -24
  22. package/styles/layouts/search.css +14 -14
  23. package/styles/layouts/version-switcher.css +6 -6
  24. package/styles/runes/accordion.css +10 -10
  25. package/styles/runes/aggregate.css +1 -1
  26. package/styles/runes/annotate.css +5 -5
  27. package/styles/runes/api.css +1 -1
  28. package/styles/runes/audio.css +9 -9
  29. package/styles/runes/badge.css +2 -2
  30. package/styles/runes/bento.css +2 -2
  31. package/styles/runes/blog.css +15 -15
  32. package/styles/runes/bond.css +3 -3
  33. package/styles/runes/breadcrumb.css +2 -2
  34. package/styles/runes/budget.css +20 -20
  35. package/styles/runes/bug.css +2 -2
  36. package/styles/runes/card.css +3 -3
  37. package/styles/runes/cast.css +5 -5
  38. package/styles/runes/changelog.css +8 -8
  39. package/styles/runes/character.css +3 -3
  40. package/styles/runes/chart.css +5 -5
  41. package/styles/runes/codegroup.css +3 -3
  42. package/styles/runes/collection.css +3 -3
  43. package/styles/runes/compare.css +5 -5
  44. package/styles/runes/comparison.css +22 -22
  45. package/styles/runes/conversation.css +4 -4
  46. package/styles/runes/cta.css +14 -14
  47. package/styles/runes/datatable.css +8 -8
  48. package/styles/runes/decision.css +2 -2
  49. package/styles/runes/design-context.css +2 -2
  50. package/styles/runes/details.css +4 -4
  51. package/styles/runes/diagram.css +3 -3
  52. package/styles/runes/diff.css +6 -6
  53. package/styles/runes/drawer.css +8 -8
  54. package/styles/runes/embed.css +1 -1
  55. package/styles/runes/event.css +2 -2
  56. package/styles/runes/expand.css +5 -5
  57. package/styles/runes/faction.css +3 -3
  58. package/styles/runes/feature.css +23 -11
  59. package/styles/runes/figure.css +3 -3
  60. package/styles/runes/form.css +16 -16
  61. package/styles/runes/gallery.css +7 -7
  62. package/styles/runes/hero.css +116 -14
  63. package/styles/runes/hint.css +7 -7
  64. package/styles/runes/howto.css +6 -6
  65. package/styles/runes/itinerary.css +12 -12
  66. package/styles/runes/juxtapose.css +6 -6
  67. package/styles/runes/lore.css +4 -4
  68. package/styles/runes/map.css +6 -6
  69. package/styles/runes/mediatext.css +1 -1
  70. package/styles/runes/milestone.css +12 -12
  71. package/styles/runes/mockup.css +7 -7
  72. package/styles/runes/nav.css +34 -34
  73. package/styles/runes/organization.css +3 -3
  74. package/styles/runes/pagination.css +5 -5
  75. package/styles/runes/palette.css +13 -13
  76. package/styles/runes/placeholder.css +16 -0
  77. package/styles/runes/plan-history.css +20 -20
  78. package/styles/runes/plan-progress.css +3 -3
  79. package/styles/runes/plan-ref.css +1 -1
  80. package/styles/runes/playlist.css +8 -8
  81. package/styles/runes/plot.css +6 -6
  82. package/styles/runes/preview.css +6 -6
  83. package/styles/runes/pricing.css +16 -16
  84. package/styles/runes/progress.css +2 -2
  85. package/styles/runes/pullquote.css +6 -5
  86. package/styles/runes/realm.css +3 -3
  87. package/styles/runes/recipe.css +9 -9
  88. package/styles/runes/relationships.css +2 -2
  89. package/styles/runes/reveal.css +10 -10
  90. package/styles/runes/sandbox.css +52 -2
  91. package/styles/runes/section.css +70 -0
  92. package/styles/runes/sidenote.css +2 -2
  93. package/styles/runes/spacing.css +11 -11
  94. package/styles/runes/spec.css +2 -2
  95. package/styles/runes/steps.css +22 -10
  96. package/styles/runes/storyboard.css +2 -2
  97. package/styles/runes/swatch.css +1 -1
  98. package/styles/runes/symbol.css +10 -10
  99. package/styles/runes/tabs.css +9 -9
  100. package/styles/runes/testimonial.css +7 -7
  101. package/styles/runes/textblock.css +4 -4
  102. package/styles/runes/timeline.css +7 -7
  103. package/styles/runes/toc.css +4 -4
  104. package/styles/runes/track.css +10 -10
  105. package/styles/runes/typography.css +12 -12
  106. package/styles/runes/work.css +2 -2
  107. package/tokens/base.css +43 -66
  108. package/tokens/dark.css +76 -80
@@ -20,19 +20,19 @@
20
20
  border-bottom: 1px solid var(--rf-color-border);
21
21
  }
22
22
  .rf-nav__top-level .rf-nav-item__link {
23
- font-weight: 600;
24
- font-size: 0.9rem;
23
+ font-weight: var(--rf-weight-semibold);
24
+ font-size: var(--rf-text-sm);
25
25
  }
26
26
  .rf-nav-group h2,
27
27
  .rf-nav-group h3 {
28
- font-size: 0.7rem;
28
+ font-size: var(--rf-text-xs);
29
29
  text-transform: uppercase;
30
- letter-spacing: 0.06em;
30
+ letter-spacing: var(--rf-tracking-wider);
31
31
  color: var(--rf-color-muted);
32
32
  margin-top: 0;
33
33
  margin-bottom: 0.5rem;
34
34
  padding-left: 0.75rem;
35
- font-weight: 600;
35
+ font-weight: var(--rf-weight-semibold);
36
36
  }
37
37
  .rf-nav-item__link {
38
38
  display: block;
@@ -40,7 +40,7 @@
40
40
  border-radius: var(--rf-radius-sm);
41
41
  color: var(--rf-color-text);
42
42
  text-decoration: none;
43
- font-size: 0.85rem;
43
+ font-size: var(--rf-text-sm);
44
44
  transition: background-color 150ms ease, color 150ms ease;
45
45
  }
46
46
  .rf-nav-item__link:hover {
@@ -53,7 +53,7 @@
53
53
  .rf-nav-item__link[aria-current="page"] {
54
54
  background: color-mix(in srgb, var(--rf-color-primary) 8%, transparent);
55
55
  color: var(--rf-color-primary);
56
- font-weight: 600;
56
+ font-weight: var(--rf-weight-semibold);
57
57
  }
58
58
  /* SPEC-055: ancestor-of-current-page link — subtler treatment than the
59
59
  * exact-match aria-current state. Themes can collapse the two into a
@@ -63,7 +63,7 @@
63
63
  }
64
64
  .rf-nav-item {
65
65
  padding: 0.375rem 0.75rem;
66
- font-size: 0.85rem;
66
+ font-size: var(--rf-text-sm);
67
67
  color: var(--rf-color-muted);
68
68
  }
69
69
 
@@ -168,8 +168,8 @@
168
168
  .rf-nav--menubar > .rf-nav__top-level .rf-nav-item__link {
169
169
  display: inline-block;
170
170
  padding: 0.375rem 0.75rem;
171
- font-weight: 500;
172
- font-size: 0.9rem;
171
+ font-weight: var(--rf-weight-medium);
172
+ font-size: var(--rf-text-sm);
173
173
  border-radius: var(--rf-radius-sm);
174
174
  color: var(--rf-color-muted);
175
175
  transition: background-color 150ms ease, color 150ms ease;
@@ -187,8 +187,8 @@
187
187
  .rf-nav--menubar .rf-nav-group h3 {
188
188
  margin: 0;
189
189
  padding: 0.375rem 0.75rem;
190
- font-size: 0.9rem;
191
- font-weight: 500;
190
+ font-size: var(--rf-text-sm);
191
+ font-weight: var(--rf-weight-medium);
192
192
  line-height: inherit;
193
193
  text-transform: none;
194
194
  letter-spacing: normal;
@@ -256,8 +256,8 @@
256
256
  padding: 0.5rem 0.75rem;
257
257
  }
258
258
  .rf-nav--menubar .rf-nav-group .rf-nav-item__link {
259
- font-size: 0.85rem;
260
- font-weight: 400;
259
+ font-size: var(--rf-text-sm);
260
+ font-weight: var(--rf-weight-normal);
261
261
  }
262
262
  .rf-nav--menubar > nav,
263
263
  .rf-nav--menubar {
@@ -303,14 +303,14 @@
303
303
  }
304
304
  .rf-nav--menubar .rf-nav-group h2,
305
305
  .rf-nav--menubar .rf-nav-group h3 {
306
- font-size: 0.7rem;
306
+ font-size: var(--rf-text-xs);
307
307
  text-transform: uppercase;
308
- letter-spacing: 0.06em;
308
+ letter-spacing: var(--rf-tracking-wider);
309
309
  color: var(--rf-color-muted);
310
310
  background: transparent;
311
311
  cursor: default;
312
312
  padding: 0.5rem 0.75rem 0.25rem;
313
- font-weight: 600;
313
+ font-weight: var(--rf-weight-semibold);
314
314
  }
315
315
  .rf-nav--menubar .rf-nav-group h2:hover,
316
316
  .rf-nav--menubar .rf-nav-group h3:hover,
@@ -356,7 +356,7 @@
356
356
  padding-left: 0;
357
357
  margin-bottom: 0.75rem;
358
358
  color: var(--rf-color-text);
359
- font-size: 0.75rem;
359
+ font-size: var(--rf-text-xs);
360
360
  }
361
361
  .rf-nav--columns .rf-nav-item__link {
362
362
  padding: 0.25rem 0;
@@ -411,7 +411,7 @@
411
411
  }
412
412
  .rf-nav--cards .rf-nav-group h2,
413
413
  .rf-nav--cards .rf-nav-group h3 {
414
- font-size: 0.85rem;
414
+ font-size: var(--rf-text-sm);
415
415
  padding-left: 0;
416
416
  margin-bottom: 1rem;
417
417
  }
@@ -451,14 +451,14 @@
451
451
  margin-bottom: 0.25rem;
452
452
  }
453
453
  .rf-nav--cards .rf-nav-item__title {
454
- font-size: 1rem;
455
- font-weight: 600;
454
+ font-size: var(--rf-text);
455
+ font-weight: var(--rf-weight-semibold);
456
456
  color: var(--rf-color-text);
457
457
  }
458
458
  .rf-nav--cards .rf-nav-item__description {
459
- font-size: 0.85rem;
459
+ font-size: var(--rf-text-sm);
460
460
  color: var(--rf-color-muted);
461
- line-height: 1.5;
461
+ line-height: var(--rf-leading-normal);
462
462
  }
463
463
 
464
464
  @media (max-width: 500px) {
@@ -473,9 +473,9 @@
473
473
 
474
474
  .rf-nav-item__description {
475
475
  display: block;
476
- font-size: 0.8125rem;
476
+ font-size: var(--rf-text-sm);
477
477
  color: var(--rf-color-muted);
478
- line-height: 1.4;
478
+ line-height: var(--rf-leading-snug);
479
479
  margin-top: 0.125rem;
480
480
  }
481
481
 
@@ -524,7 +524,7 @@
524
524
  display: block;
525
525
  padding: 0.75rem;
526
526
  color: var(--rf-color-text);
527
- font-weight: 500;
527
+ font-weight: var(--rf-weight-medium);
528
528
  border-radius: var(--rf-radius-sm);
529
529
  }
530
530
  .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link:hover {
@@ -540,7 +540,7 @@
540
540
  background: var(--rf-color-surface-active);
541
541
  }
542
542
  .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link .rf-nav-item__description {
543
- font-weight: 400;
543
+ font-weight: var(--rf-weight-normal);
544
544
  color: var(--rf-color-muted);
545
545
  }
546
546
 
@@ -563,7 +563,7 @@
563
563
  * muted lead-in above the panel content. */
564
564
  .rf-nav-group__intro p:only-child {
565
565
  margin: 0;
566
- font-size: 0.75rem;
566
+ font-size: var(--rf-text-xs);
567
567
  color: var(--rf-color-muted);
568
568
  }
569
569
 
@@ -572,12 +572,12 @@
572
572
  }
573
573
  .rf-nav-group__footer p {
574
574
  margin: 0;
575
- font-size: 0.8125rem;
575
+ font-size: var(--rf-text-sm);
576
576
  color: var(--rf-color-muted);
577
577
  }
578
578
  .rf-nav-group__footer a {
579
579
  color: var(--rf-color-primary);
580
- font-weight: 500;
580
+ font-weight: var(--rf-weight-medium);
581
581
  }
582
582
 
583
583
  /* ─── Multi-section columns (SPEC-054 columns flow rule) ──────────────── */
@@ -635,7 +635,7 @@
635
635
  flex-wrap: wrap;
636
636
  gap: 0.5rem 1rem;
637
637
  padding: 0.5rem 0;
638
- font-size: 0.8125rem;
638
+ font-size: var(--rf-text-sm);
639
639
  }
640
640
  .rf-nav--strip ul {
641
641
  display: flex;
@@ -652,7 +652,7 @@
652
652
  display: inline-block;
653
653
  padding: 0.25rem 0;
654
654
  color: var(--rf-color-muted);
655
- font-size: 0.8125rem;
655
+ font-size: var(--rf-text-sm);
656
656
  border-radius: 0;
657
657
  background: transparent;
658
658
  }
@@ -669,7 +669,7 @@
669
669
  * compact-but-still-tap-friendly. */
670
670
  .rf-nav-group__footer .rf-nav--strip {
671
671
  padding: 0;
672
- font-size: 0.75rem;
672
+ font-size: var(--rf-text-xs);
673
673
  }
674
674
 
675
675
  /* ─── Mobile menubar: nested columns collapse ─────────────────────────── */
@@ -696,7 +696,7 @@
696
696
  * highlighted bands as the user scrolls. */
697
697
  .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link {
698
698
  padding: 0.25rem 0.75rem;
699
- font-weight: 500;
699
+ font-weight: var(--rf-weight-medium);
700
700
  }
701
701
  .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link:hover {
702
702
  background: transparent;
@@ -1,9 +1,9 @@
1
1
  /* Organization */
2
2
  .rf-organization__type {
3
- font-size: 0.75rem;
4
- font-weight: 400;
3
+ font-size: var(--rf-text-xs);
4
+ font-weight: var(--rf-weight-normal);
5
5
  text-transform: uppercase;
6
- letter-spacing: 0.05em;
6
+ letter-spacing: var(--rf-tracking-wider);
7
7
  color: var(--rf-color-muted);
8
8
  opacity: 0.6;
9
9
  margin-bottom: 0.5rem;
@@ -28,7 +28,7 @@
28
28
  border-radius: var(--rf-radius-md);
29
29
  color: var(--rf-color-text);
30
30
  text-decoration: none;
31
- font-size: 0.9rem;
31
+ font-size: var(--rf-text-sm);
32
32
  transition: border-color 150ms ease, background-color 150ms ease;
33
33
  flex: 1 1 0;
34
34
  min-width: 0;
@@ -55,13 +55,13 @@
55
55
 
56
56
  .rf-pagination [data-name="marker"] {
57
57
  color: var(--rf-color-muted);
58
- font-weight: 400;
59
- font-size: 1.1rem;
58
+ font-weight: var(--rf-weight-normal);
59
+ font-size: var(--rf-text-lg);
60
60
  line-height: 1;
61
61
  }
62
62
 
63
63
  .rf-pagination [data-name="label"] {
64
- font-weight: 500;
64
+ font-weight: var(--rf-weight-medium);
65
65
  }
66
66
 
67
67
  /* The pagination rune emits prev as `<marker> <label>` but next as
@@ -80,6 +80,6 @@
80
80
  .rf-pagination__next {
81
81
  padding: 0.625rem 0.875rem;
82
82
  max-width: calc(50% - 0.25rem);
83
- font-size: 0.85rem;
83
+ font-size: var(--rf-text-sm);
84
84
  }
85
85
  }
@@ -1,7 +1,7 @@
1
1
  /* Palette — color swatch grid */
2
2
  .rf-palette__title {
3
- font-size: 1.125rem;
4
- font-weight: 600;
3
+ font-size: var(--rf-text-lg);
4
+ font-weight: var(--rf-weight-semibold);
5
5
  margin-bottom: 1rem;
6
6
  }
7
7
  .rf-palette__group {
@@ -11,10 +11,10 @@
11
11
  margin-bottom: 0;
12
12
  }
13
13
  .rf-palette__group-title {
14
- font-size: 0.8rem;
15
- font-weight: 600;
14
+ font-size: var(--rf-text-xs);
15
+ font-weight: var(--rf-weight-semibold);
16
16
  text-transform: uppercase;
17
- letter-spacing: 0.05em;
17
+ letter-spacing: var(--rf-tracking-wider);
18
18
  color: var(--rf-color-muted);
19
19
  margin-bottom: 0.75rem;
20
20
  }
@@ -43,24 +43,24 @@
43
43
  border: 1px solid rgba(0, 0, 0, 0.08);
44
44
  }
45
45
  .rf-palette__swatch-name {
46
- font-weight: 500;
47
- font-size: 0.875rem;
46
+ font-weight: var(--rf-weight-medium);
47
+ font-size: var(--rf-text-sm);
48
48
  }
49
49
  .rf-palette__swatch-value {
50
50
  font-family: var(--rf-font-mono, monospace);
51
- font-size: 0.75rem;
51
+ font-size: var(--rf-text-xs);
52
52
  color: var(--rf-color-muted);
53
53
  }
54
54
  .rf-palette__swatch-contrast {
55
55
  font-family: var(--rf-font-mono, monospace);
56
- font-size: 0.7rem;
56
+ font-size: var(--rf-text-xs);
57
57
  color: var(--rf-color-muted);
58
58
  }
59
59
  .rf-palette__swatch-a11y {
60
60
  display: flex;
61
61
  gap: 0.5rem;
62
- font-size: 0.7rem;
63
- font-weight: 500;
62
+ font-size: var(--rf-text-xs);
63
+ font-weight: var(--rf-weight-medium);
64
64
  }
65
65
  .rf-palette__swatch-a11y--pass {
66
66
  color: var(--rf-color-success, #10b981);
@@ -83,12 +83,12 @@
83
83
  align-items: flex-end;
84
84
  justify-content: center;
85
85
  min-height: 4rem;
86
- font-size: 0.625rem;
86
+ font-size: var(--rf-text-xs);
87
87
  font-family: var(--rf-font-mono, monospace);
88
88
  }
89
89
  .rf-palette__scale + .rf-palette__swatch-name {
90
90
  margin-top: 0.25rem;
91
- font-size: 0.8rem;
91
+ font-size: var(--rf-text-xs);
92
92
  }
93
93
 
94
94
  /* Context-aware: no outer margin when inside design-context */
@@ -0,0 +1,16 @@
1
+ /* Placeholder — generated inline SVG from the `placeholder:<shape>` image-src
2
+ * scheme (SPEC-106). The SVG carries its own viewBox aspect and tints itself
3
+ * with theme tokens (surface / muted / border), so it tracks the active tint
4
+ * and dark mode for free. These rules just make it behave like a responsive
5
+ * replaced element wherever a real `<img>` would have gone. */
6
+ .rf-placeholder {
7
+ display: block;
8
+ width: 100%;
9
+ height: auto;
10
+ border-radius: var(--rf-radius-media);
11
+ }
12
+
13
+ /* Avatar shape reads as round. */
14
+ .rf-placeholder[data-shape="avatar"] {
15
+ border-radius: 50%;
16
+ }
@@ -4,8 +4,8 @@
4
4
  margin: 2rem 0;
5
5
  }
6
6
  .rf-plan-history__heading {
7
- font-size: 1.05rem;
8
- font-weight: 700;
7
+ font-size: var(--rf-text);
8
+ font-weight: var(--rf-weight-bold);
9
9
  color: var(--rf-color-text);
10
10
  margin: 0 0 1rem;
11
11
  }
@@ -52,15 +52,15 @@
52
52
  /* Date + hash header */
53
53
  .rf-plan-history__date {
54
54
  display: inline;
55
- font-size: 0.8rem;
56
- font-weight: 600;
55
+ font-size: var(--rf-text-xs);
56
+ font-weight: var(--rf-weight-semibold);
57
57
  color: var(--rf-color-primary);
58
- letter-spacing: 0.02em;
58
+ letter-spacing: var(--rf-tracking-wide);
59
59
  margin-right: 0.5rem;
60
60
  }
61
61
  .rf-plan-history__hash {
62
62
  font-family: var(--rf-font-mono);
63
- font-size: 0.75rem;
63
+ font-size: var(--rf-text-xs);
64
64
  color: var(--rf-color-muted);
65
65
  text-decoration: none;
66
66
  }
@@ -77,12 +77,12 @@ a.rf-plan-history__hash:hover {
77
77
  display: flex;
78
78
  align-items: center;
79
79
  gap: 0.25rem;
80
- font-size: 0.925rem;
81
- line-height: 1.65;
80
+ font-size: var(--rf-text-sm);
81
+ line-height: var(--rf-leading-relaxed);
82
82
  color: var(--rf-color-muted);
83
83
  }
84
84
  .rf-plan-history__field {
85
- font-weight: 500;
85
+ font-weight: var(--rf-weight-medium);
86
86
  color: var(--rf-color-text);
87
87
  }
88
88
  .rf-plan-history__field::after {
@@ -95,7 +95,7 @@ a.rf-plan-history__hash:hover {
95
95
 
96
96
  /* Value badges (add/remove) */
97
97
  .rf-plan-history__value {
98
- font-size: 0.875rem;
98
+ font-size: var(--rf-text-sm);
99
99
  padding: 0.0625rem 0.375rem;
100
100
  border-radius: var(--rf-radius-sm);
101
101
  }
@@ -111,12 +111,12 @@ a.rf-plan-history__hash:hover {
111
111
 
112
112
  /* Event kind labels */
113
113
  .rf-plan-history__created {
114
- font-size: 0.925rem;
114
+ font-size: var(--rf-text-sm);
115
115
  color: var(--rf-color-muted);
116
116
  }
117
117
  .rf-plan-history__resolution,
118
118
  .rf-plan-history__content-edit {
119
- font-size: 0.925rem;
119
+ font-size: var(--rf-text-sm);
120
120
  color: var(--rf-color-muted);
121
121
  font-style: italic;
122
122
  }
@@ -128,8 +128,8 @@ a.rf-plan-history__hash:hover {
128
128
  margin: 0.25rem 0 0;
129
129
  }
130
130
  .rf-plan-history__criteria li {
131
- font-size: 0.8125rem;
132
- line-height: 1.65;
131
+ font-size: var(--rf-text-sm);
132
+ line-height: var(--rf-leading-relaxed);
133
133
  color: var(--rf-color-text);
134
134
  }
135
135
  .rf-plan-history__criteria li[data-action="checked"] {
@@ -157,8 +157,8 @@ a.rf-plan-history__hash:hover {
157
157
  /* Global feed (commit-grouped) */
158
158
  .rf-plan-history--global .rf-plan-history__commit-message {
159
159
  display: block;
160
- font-size: 1.05rem;
161
- font-weight: 700;
160
+ font-size: var(--rf-text);
161
+ font-weight: var(--rf-weight-bold);
162
162
  color: var(--rf-color-text);
163
163
  margin-top: 0.25rem;
164
164
  margin-bottom: 0.5rem;
@@ -167,13 +167,13 @@ a.rf-plan-history__hash:hover {
167
167
  display: flex;
168
168
  align-items: baseline;
169
169
  gap: 0.5rem;
170
- font-size: 0.8125rem;
171
- line-height: 1.65;
170
+ font-size: var(--rf-text-sm);
171
+ line-height: var(--rf-leading-relaxed);
172
172
  }
173
173
  .rf-plan-history--global .rf-plan-history__entity-id {
174
- font-weight: 600;
174
+ font-weight: var(--rf-weight-semibold);
175
175
  font-family: var(--rf-font-mono);
176
- font-size: 0.75rem;
176
+ font-size: var(--rf-text-xs);
177
177
  color: var(--rf-color-primary);
178
178
  white-space: nowrap;
179
179
  }
@@ -14,9 +14,9 @@
14
14
  }
15
15
  .rf-plan-progress__heading {
16
16
  margin: 0;
17
- font-size: 0.8125rem;
18
- font-weight: 600;
17
+ font-size: var(--rf-text-sm);
18
+ font-weight: var(--rf-weight-semibold);
19
19
  text-transform: uppercase;
20
- letter-spacing: 0.05em;
20
+ letter-spacing: var(--rf-tracking-wider);
21
21
  color: var(--rf-color-muted);
22
22
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  .rf-plan-ref {
4
4
  font-family: var(--rf-font-mono, ui-monospace, monospace);
5
- font-size: 0.8125rem;
5
+ font-size: var(--rf-text-sm);
6
6
  color: var(--rf-color-info, #339af0);
7
7
  text-decoration: none;
8
8
  border-bottom: 1px dashed var(--rf-color-info, #339af0);
@@ -44,9 +44,9 @@
44
44
  }
45
45
  .rf-playlist__content > .rf-playlist__header p {
46
46
  margin: 0;
47
- font-size: 0.925rem;
47
+ font-size: var(--rf-text-sm);
48
48
  color: var(--rf-color-muted);
49
- line-height: 1.5;
49
+ line-height: var(--rf-leading-normal);
50
50
  }
51
51
 
52
52
  /* Tracks list wrapper */
@@ -85,7 +85,7 @@
85
85
  width: auto;
86
86
  height: auto;
87
87
  min-width: 1.5rem;
88
- font-size: 0.8rem;
88
+ font-size: var(--rf-text-xs);
89
89
  font-variant-numeric: tabular-nums;
90
90
  color: var(--rf-color-muted);
91
91
  background: none;
@@ -97,8 +97,8 @@
97
97
  /* Track name */
98
98
  .rf-playlist__tracks [data-name="track-name"] {
99
99
  flex: 1;
100
- font-size: 0.9375rem;
101
- font-weight: 500;
100
+ font-size: var(--rf-text);
101
+ font-weight: var(--rf-weight-medium);
102
102
  color: var(--rf-color-text);
103
103
  min-width: 0;
104
104
  overflow: hidden;
@@ -108,7 +108,7 @@
108
108
 
109
109
  /* Track artist */
110
110
  .rf-playlist__tracks [data-name="track-artist"] {
111
- font-size: 0.8125rem;
111
+ font-size: var(--rf-text-sm);
112
112
  color: var(--rf-color-muted);
113
113
  flex-shrink: 0;
114
114
  }
@@ -120,7 +120,7 @@
120
120
 
121
121
  /* Track duration — pushed right */
122
122
  .rf-playlist__tracks [data-name="track-duration"] {
123
- font-size: 0.8125rem;
123
+ font-size: var(--rf-text-sm);
124
124
  color: var(--rf-color-muted);
125
125
  font-variant-numeric: tabular-nums;
126
126
  flex-shrink: 0;
@@ -131,7 +131,7 @@
131
131
 
132
132
  /* Track meta (date etc.) */
133
133
  .rf-playlist__tracks [data-name="track-meta"] {
134
- font-size: 0.75rem;
134
+ font-size: var(--rf-text-xs);
135
135
  color: var(--rf-color-muted);
136
136
  flex-shrink: 0;
137
137
  }
@@ -5,8 +5,8 @@
5
5
  }
6
6
  .rf-plot > span[property="name"] {
7
7
  display: block;
8
- font-size: 1.5rem;
9
- font-weight: 700;
8
+ font-size: var(--rf-text-2xl);
9
+ font-weight: var(--rf-weight-bold);
10
10
  margin-bottom: 0.5rem;
11
11
  color: var(--rf-color-text);
12
12
  }
@@ -46,15 +46,15 @@
46
46
  box-shadow: 0 0 0 2px var(--rf-color-surface-active);
47
47
  }
48
48
  .rf-beat > span[data-field="label"] {
49
- font-weight: 600;
50
- font-size: 1rem;
49
+ font-weight: var(--rf-weight-semibold);
50
+ font-size: var(--rf-text);
51
51
  color: var(--rf-color-text);
52
52
  }
53
53
  .rf-beat__body {
54
54
  margin-top: 0.25rem;
55
- font-size: 0.9375rem;
55
+ font-size: var(--rf-text);
56
56
  color: var(--rf-color-muted);
57
- line-height: 1.6;
57
+ line-height: var(--rf-leading-relaxed);
58
58
  }
59
59
  .rf-beat__body p {
60
60
  margin: 0;
@@ -12,11 +12,11 @@
12
12
  min-height: 2rem;
13
13
  }
14
14
  .rf-preview__title {
15
- font-size: 0.75rem;
16
- font-weight: 600;
15
+ font-size: var(--rf-text-xs);
16
+ font-weight: var(--rf-weight-semibold);
17
17
  color: var(--rf-color-muted);
18
18
  text-transform: uppercase;
19
- letter-spacing: 0.05em;
19
+ letter-spacing: var(--rf-tracking-wider);
20
20
  }
21
21
 
22
22
  /* Controls container (view toggle + theme toggle) */
@@ -116,7 +116,7 @@
116
116
  position: absolute;
117
117
  top: 0.25rem;
118
118
  right: 0.5rem;
119
- font-size: 0.625rem;
119
+ font-size: var(--rf-text-xs);
120
120
  color: var(--rf-color-muted);
121
121
  font-variant-numeric: tabular-nums;
122
122
  pointer-events: none;
@@ -149,8 +149,8 @@
149
149
  border: none;
150
150
  background: transparent;
151
151
  color: var(--rf-color-muted);
152
- font-size: 0.75rem;
153
- font-weight: 500;
152
+ font-size: var(--rf-text-xs);
153
+ font-weight: var(--rf-weight-medium);
154
154
  cursor: pointer;
155
155
  border-bottom: 2px solid transparent;
156
156
  transition: color 150ms ease, border-color 150ms ease;
@@ -15,9 +15,9 @@
15
15
  margin-top: 0;
16
16
  }
17
17
  .rf-pricing__eyebrow {
18
- font-size: 0.8125rem;
19
- font-weight: 600;
20
- letter-spacing: 0.05em;
18
+ font-size: var(--rf-text-sm);
19
+ font-weight: var(--rf-weight-semibold);
20
+ letter-spacing: var(--rf-tracking-wider);
21
21
  text-transform: uppercase;
22
22
  color: var(--rf-color-primary);
23
23
  margin: 0 0 0.5rem;
@@ -29,13 +29,13 @@
29
29
  border: 1px solid var(--rf-color-border);
30
30
  border-radius: var(--rf-radius-full);
31
31
  color: var(--rf-color-text);
32
- font-weight: 400;
32
+ font-weight: var(--rf-weight-normal);
33
33
  text-transform: none;
34
- letter-spacing: 0;
34
+ letter-spacing: var(--rf-tracking-normal);
35
35
  transition: border-color 150ms ease;
36
36
  }
37
37
  .rf-pricing__eyebrow:has(a):hover { border-color: var(--rf-color-muted); }
38
- .rf-pricing__eyebrow:has(a) a { color: var(--rf-color-primary); font-weight: 600; text-decoration: none; }
38
+ .rf-pricing__eyebrow:has(a) a { color: var(--rf-color-primary); font-weight: var(--rf-weight-semibold); text-decoration: none; }
39
39
  .rf-pricing__eyebrow:has(a) a::before { content: ''; position: absolute; inset: 0; border-radius: inherit; }
40
40
  .rf-pricing__blurb {
41
41
  color: var(--rf-color-muted);
@@ -78,17 +78,17 @@
78
78
  }
79
79
  .rf-tier h1[property="name"] {
80
80
  margin: 0 0 0.5rem;
81
- font-size: 1.1rem;
82
- font-weight: 600;
81
+ font-size: var(--rf-text-lg);
82
+ font-weight: var(--rf-weight-semibold);
83
83
  color: var(--rf-color-muted);
84
84
  }
85
85
  .rf-tier p[property="price"] {
86
- font-size: 2.5rem;
87
- font-weight: 700;
88
- letter-spacing: -0.03em;
86
+ font-size: var(--rf-text-4xl);
87
+ font-weight: var(--rf-weight-bold);
88
+ letter-spacing: var(--rf-tracking-tight);
89
89
  color: var(--rf-color-text);
90
90
  margin-bottom: 1.5rem;
91
- line-height: 1.1;
91
+ line-height: var(--rf-leading-tight);
92
92
  }
93
93
  .rf-tier__body {
94
94
  flex: 1;
@@ -100,22 +100,22 @@
100
100
  }
101
101
  .rf-tier__body li {
102
102
  padding: 0.375rem 0;
103
- font-size: 0.9rem;
103
+ font-size: var(--rf-text-sm);
104
104
  color: var(--rf-color-muted);
105
105
  }
106
106
  .rf-tier__body li::before {
107
107
  content: '\2713';
108
108
  margin-right: 0.5rem;
109
109
  color: var(--rf-color-success);
110
- font-weight: 600;
110
+ font-weight: var(--rf-weight-semibold);
111
111
  }
112
112
  .rf-tier__body a {
113
113
  display: block;
114
114
  text-align: center;
115
115
  padding: 0.625rem 1.5rem;
116
116
  border-radius: var(--rf-radius-sm);
117
- font-weight: 600;
118
- font-size: 0.9rem;
117
+ font-weight: var(--rf-weight-semibold);
118
+ font-size: var(--rf-text-sm);
119
119
  text-decoration: none;
120
120
  transition: background-color 200ms ease, box-shadow 200ms ease, transform 200ms ease;
121
121
  margin-top: auto;