@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
@@ -15,9 +15,9 @@
15
15
  }
16
16
  /* Higher specificity needed to override .rf-cta p (0,1,1) */
17
17
  .rf-cta .rf-cta__eyebrow {
18
- font-size: 0.875rem;
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.75rem;
@@ -31,9 +31,9 @@
31
31
  border: 1px solid var(--rf-color-border);
32
32
  border-radius: var(--rf-radius-full);
33
33
  color: var(--rf-color-text);
34
- font-weight: 400;
34
+ font-weight: var(--rf-weight-normal);
35
35
  text-transform: none;
36
- letter-spacing: 0;
36
+ letter-spacing: var(--rf-tracking-normal);
37
37
  transition: border-color 150ms ease;
38
38
  }
39
39
  .rf-cta .rf-cta__eyebrow:has(a):hover {
@@ -41,7 +41,7 @@
41
41
  }
42
42
  .rf-cta .rf-cta__eyebrow:has(a) a {
43
43
  color: var(--rf-color-primary);
44
- font-weight: 600;
44
+ font-weight: var(--rf-weight-semibold);
45
45
  text-decoration: none;
46
46
  }
47
47
  .rf-cta .rf-cta__eyebrow:has(a) a::before {
@@ -57,12 +57,12 @@
57
57
  .rf-cta h2,
58
58
  .rf-cta h3,
59
59
  .rf-cta__headline {
60
- font-size: 2.5rem;
61
- font-weight: 750;
62
- letter-spacing: -0.03em;
60
+ font-size: var(--rf-text-4xl);
61
+ font-weight: var(--rf-weight-bold);
62
+ letter-spacing: var(--rf-tracking-tight);
63
63
  margin-bottom: 0.75rem;
64
64
  margin-top: 0;
65
- line-height: 1.15;
65
+ line-height: var(--rf-leading-tight);
66
66
  background: linear-gradient(135deg, var(--rf-color-text) 0%, var(--rf-color-muted) 100%);
67
67
  -webkit-background-clip: text;
68
68
  -webkit-text-fill-color: transparent;
@@ -71,11 +71,11 @@
71
71
  /* Higher specificity needed to override .rf-cta p (0,1,1) */
72
72
  .rf-cta p,
73
73
  .rf-cta .rf-cta__blurb {
74
- font-size: 1.15rem;
74
+ font-size: var(--rf-text-lg);
75
75
  color: var(--rf-color-muted);
76
76
  max-width: 540px;
77
77
  margin: 0 auto 2rem;
78
- line-height: 1.65;
78
+ line-height: var(--rf-leading-relaxed);
79
79
  }
80
80
  .rf-cta ul {
81
81
  display: flex;
@@ -97,8 +97,8 @@
97
97
  padding: 0.625rem 1.5rem;
98
98
  border-radius: var(--rf-radius-sm);
99
99
  text-decoration: none;
100
- font-weight: 600;
101
- font-size: 0.925rem;
100
+ font-weight: var(--rf-weight-semibold);
101
+ font-size: var(--rf-text-sm);
102
102
  transition: all 200ms ease;
103
103
  }
104
104
  .rf-cta li:first-child a {
@@ -10,7 +10,7 @@
10
10
  padding: 0.35rem 0.625rem;
11
11
  border: 1px solid var(--rf-color-border);
12
12
  border-radius: var(--rf-radius-sm);
13
- font-size: 0.8rem;
13
+ font-size: var(--rf-text-xs);
14
14
  font-family: var(--rf-font-sans);
15
15
  background: var(--rf-color-bg);
16
16
  color: var(--rf-color-text);
@@ -47,10 +47,10 @@
47
47
  .rf-datatable__content th {
48
48
  text-align: left;
49
49
  padding: 0.75rem 1rem;
50
- font-size: 0.75rem;
51
- font-weight: 600;
50
+ font-size: var(--rf-text-xs);
51
+ font-weight: var(--rf-weight-semibold);
52
52
  text-transform: uppercase;
53
- letter-spacing: 0.05em;
53
+ letter-spacing: var(--rf-tracking-wider);
54
54
  color: var(--rf-color-muted);
55
55
  background: var(--rf-color-surface);
56
56
  }
@@ -58,13 +58,13 @@
58
58
  color: var(--rf-color-text);
59
59
  }
60
60
  .rf-datatable__content .sort-indicator {
61
- font-size: 0.65rem;
61
+ font-size: var(--rf-text-xs);
62
62
  opacity: 0.7;
63
63
  }
64
64
  .rf-datatable__content td {
65
65
  padding: 0.75rem 1rem;
66
66
  border-bottom: 1px solid var(--rf-color-border);
67
- font-size: 0.875rem;
67
+ font-size: var(--rf-text-sm);
68
68
  }
69
69
  .rf-datatable__content tr:last-child td {
70
70
  border-bottom: none;
@@ -86,7 +86,7 @@
86
86
  border-radius: var(--rf-radius-sm);
87
87
  background: transparent;
88
88
  color: var(--rf-color-muted);
89
- font-size: 0.8rem;
89
+ font-size: var(--rf-text-xs);
90
90
  font-family: var(--rf-font-sans);
91
91
  cursor: pointer;
92
92
  transition: color 150ms ease, background 150ms ease;
@@ -100,6 +100,6 @@
100
100
  cursor: not-allowed;
101
101
  }
102
102
  .rf-datatable__page-info {
103
- font-size: 0.75rem;
103
+ font-size: var(--rf-text-xs);
104
104
  color: var(--rf-color-muted);
105
105
  }
@@ -17,8 +17,8 @@
17
17
  }
18
18
 
19
19
  .rf-decision__body {
20
- font-size: 0.925rem;
21
- line-height: 1.65;
20
+ font-size: var(--rf-text-sm);
21
+ line-height: var(--rf-leading-relaxed);
22
22
  }
23
23
  .rf-decision__body > section {
24
24
  margin-top: 1rem;
@@ -1,7 +1,7 @@
1
1
  /* Design Context — unified token card wrapper */
2
2
  .rf-design-context__title {
3
- font-size: 1.25rem;
4
- font-weight: 700;
3
+ font-size: var(--rf-text-xl);
4
+ font-weight: var(--rf-weight-bold);
5
5
  margin-bottom: 1rem;
6
6
  }
7
7
  .rf-design-context__sections {
@@ -6,8 +6,8 @@
6
6
  align-items: center;
7
7
  gap: 0.5rem;
8
8
  padding: 0.75rem 0;
9
- font-weight: 600;
10
- font-size: 0.925rem;
9
+ font-weight: var(--rf-weight-semibold);
10
+ font-size: var(--rf-text-sm);
11
11
  cursor: pointer;
12
12
  user-select: none;
13
13
  list-style: none;
@@ -30,8 +30,8 @@
30
30
  }
31
31
  .rf-details__body {
32
32
  padding: 0 0 1rem;
33
- font-size: 0.925rem;
34
- line-height: 1.65;
33
+ font-size: var(--rf-text-sm);
34
+ line-height: var(--rf-leading-relaxed);
35
35
  }
36
36
  .rf-details__body p:last-child {
37
37
  margin-bottom: 0;
@@ -7,8 +7,8 @@
7
7
  overflow: hidden;
8
8
  }
9
9
  .rf-diagram__title {
10
- font-weight: 600;
11
- font-size: 1rem;
10
+ font-weight: var(--rf-weight-semibold);
11
+ font-size: var(--rf-text);
12
12
  margin-bottom: 1rem;
13
13
  }
14
14
  .rf-diagram__container {
@@ -22,7 +22,7 @@
22
22
  }
23
23
  .rf-diagram__source {
24
24
  text-align: left;
25
- font-size: 0.875rem;
25
+ font-size: var(--rf-text-sm);
26
26
  margin: 0;
27
27
  }
28
28
 
@@ -15,14 +15,14 @@
15
15
  overflow-x: auto;
16
16
  overflow-y: hidden;
17
17
  overscroll-behavior-x: contain;
18
- font-size: 0.875rem;
18
+ font-size: var(--rf-text-sm);
19
19
  background: var(--rf-color-code-bg);
20
20
  }
21
21
  .rf-diff__header {
22
22
  padding: 0.5rem 1rem;
23
23
  font-family: var(--rf-font-sans);
24
- font-size: 0.75rem;
25
- font-weight: 600;
24
+ font-size: var(--rf-text-xs);
25
+ font-weight: var(--rf-weight-semibold);
26
26
  color: var(--rf-color-muted);
27
27
  background: var(--rf-color-surface);
28
28
  border-bottom: 1px solid var(--rf-color-border);
@@ -52,8 +52,8 @@
52
52
  overflow-x: auto;
53
53
  overscroll-behavior-x: contain;
54
54
  font-family: var(--rf-font-mono);
55
- font-size: 0.8125rem;
56
- line-height: 1.6;
55
+ font-size: var(--rf-text-sm);
56
+ line-height: var(--rf-leading-relaxed);
57
57
  }
58
58
 
59
59
  /* WORK-304 — inner rows wrapper, sized as `display: grid; min-width:
@@ -118,7 +118,7 @@
118
118
  width: 2.5em;
119
119
  min-height: 1.6em;
120
120
  text-align: right;
121
- font-size: 0.75rem;
121
+ font-size: var(--rf-text-xs);
122
122
  font-variant-numeric: tabular-nums;
123
123
  user-select: none;
124
124
  color: var(--rf-color-muted);
@@ -61,10 +61,10 @@ section.rf-drawer .rf-drawer__header {
61
61
 
62
62
  section.rf-drawer .rf-drawer__title {
63
63
  margin: 0;
64
- font-size: 1.05rem;
65
- font-weight: 600;
64
+ font-size: var(--rf-text);
65
+ font-weight: var(--rf-weight-semibold);
66
66
  color: var(--rf-color-primary);
67
- letter-spacing: 0.01em;
67
+ letter-spacing: var(--rf-tracking-normal);
68
68
  }
69
69
 
70
70
  section.rf-drawer .rf-drawer__body > :first-child { margin-top: 0; }
@@ -77,7 +77,7 @@ section.rf-drawer .rf-drawer__footer {
77
77
  margin-top: var(--rf-spacing-md);
78
78
  padding-top: var(--rf-spacing-sm);
79
79
  border-top: 1px solid var(--rf-drawer-border);
80
- font-size: 0.875rem;
80
+ font-size: var(--rf-text-sm);
81
81
  color: var(--rf-color-muted);
82
82
  }
83
83
  section.rf-drawer .rf-drawer__footer > :first-child { margin-top: 0; }
@@ -134,8 +134,8 @@ dialog.rf-drawer .rf-drawer__header {
134
134
  }
135
135
  dialog.rf-drawer .rf-drawer__title {
136
136
  margin: 0;
137
- font-size: 1.05rem;
138
- font-weight: 600;
137
+ font-size: var(--rf-text);
138
+ font-weight: var(--rf-weight-semibold);
139
139
  }
140
140
 
141
141
  dialog.rf-drawer .rf-drawer__close {
@@ -145,7 +145,7 @@ dialog.rf-drawer .rf-drawer__close {
145
145
  cursor: pointer;
146
146
  color: var(--rf-color-muted);
147
147
  padding: var(--rf-spacing-xs) var(--rf-spacing-sm);
148
- font-size: 1.25rem;
148
+ font-size: var(--rf-text-xl);
149
149
  line-height: 1;
150
150
  border-radius: var(--rf-radius-sm);
151
151
  flex-shrink: 0;
@@ -170,7 +170,7 @@ dialog.rf-drawer .rf-drawer__footer {
170
170
  padding: var(--rf-spacing-sm) var(--rf-spacing-lg);
171
171
  border-top: 1px solid var(--rf-drawer-border);
172
172
  background: var(--rf-drawer-bg);
173
- font-size: 0.875rem;
173
+ font-size: var(--rf-text-sm);
174
174
  color: var(--rf-color-muted);
175
175
  }
176
176
  dialog.rf-drawer .rf-drawer__footer > :first-child { margin-top: 0; }
@@ -20,7 +20,7 @@
20
20
  border: none;
21
21
  }
22
22
  .rf-embed__fallback {
23
- font-size: 0.85rem;
23
+ font-size: var(--rf-text-sm);
24
24
  color: var(--rf-color-muted);
25
25
  margin-top: 0.5rem;
26
26
  }
@@ -16,8 +16,8 @@
16
16
  background: var(--rf-color-primary);
17
17
  color: var(--rf-color-on-primary);
18
18
  border-radius: var(--rf-radius-md);
19
- font-weight: 500;
20
- font-size: 0.875rem;
19
+ font-weight: var(--rf-weight-medium);
20
+ font-size: var(--rf-text-sm);
21
21
  text-decoration: none;
22
22
  }
23
23
  .rf-event__register a:hover {
@@ -39,9 +39,9 @@
39
39
  .rf-expand[data-outline-scope] :is(h1, h2, h3, h4, h5, h6):first-child {
40
40
  margin-top: 0;
41
41
  }
42
- .rf-expand[data-outline-scope] h1 { font-size: 1.5rem; }
43
- .rf-expand[data-outline-scope] h2 { font-size: 1.25rem; }
44
- .rf-expand[data-outline-scope] h3 { font-size: 1.1rem; }
42
+ .rf-expand[data-outline-scope] h1 { font-size: var(--rf-text-2xl); }
43
+ .rf-expand[data-outline-scope] h2 { font-size: var(--rf-text-xl); }
44
+ .rf-expand[data-outline-scope] h3 { font-size: var(--rf-text-lg); }
45
45
 
46
46
  .rf-expand > :first-child { margin-top: 0; }
47
47
  .rf-expand > :last-child { margin-bottom: 0; }
@@ -49,7 +49,7 @@
49
49
  .rf-expand__canonical-link {
50
50
  display: inline-block;
51
51
  margin-top: var(--rf-spacing-sm);
52
- font-size: 0.875rem;
52
+ font-size: var(--rf-text-sm);
53
53
  color: var(--rf-color-primary);
54
54
  text-decoration: none;
55
55
  }
@@ -67,6 +67,6 @@
67
67
  background: var(--rf-color-danger-bg);
68
68
  color: var(--rf-color-danger);
69
69
  font-family: var(--rf-font-mono);
70
- font-size: 0.875rem;
70
+ font-size: var(--rf-text-sm);
71
71
  border-radius: 0 var(--rf-radius-sm) var(--rf-radius-sm) 0;
72
72
  }
@@ -59,9 +59,9 @@
59
59
  }
60
60
  .rf-faction-section__name {
61
61
  display: block;
62
- font-size: 1.25rem;
63
- font-weight: 700;
64
- line-height: 1.3;
62
+ font-size: var(--rf-text-xl);
63
+ font-weight: var(--rf-weight-bold);
64
+ line-height: var(--rf-leading-snug);
65
65
  margin-bottom: 0.5rem;
66
66
  color: var(--rf-color-text);
67
67
  }
@@ -9,9 +9,9 @@
9
9
  margin-bottom: 1.5rem;
10
10
  }
11
11
  .rf-feature__eyebrow {
12
- font-size: 0.8125rem;
13
- font-weight: 600;
14
- letter-spacing: 0.05em;
12
+ font-size: var(--rf-text-sm);
13
+ font-weight: var(--rf-weight-semibold);
14
+ letter-spacing: var(--rf-tracking-wider);
15
15
  text-transform: uppercase;
16
16
  color: var(--rf-color-primary);
17
17
  margin: 0 0 0.5rem;
@@ -23,13 +23,13 @@
23
23
  border: 1px solid var(--rf-color-border);
24
24
  border-radius: var(--rf-radius-full);
25
25
  color: var(--rf-color-text);
26
- font-weight: 400;
26
+ font-weight: var(--rf-weight-normal);
27
27
  text-transform: none;
28
- letter-spacing: 0;
28
+ letter-spacing: var(--rf-tracking-normal);
29
29
  transition: border-color 150ms ease;
30
30
  }
31
31
  .rf-feature__eyebrow:has(a):hover { border-color: var(--rf-color-muted); }
32
- .rf-feature__eyebrow:has(a) a { color: var(--rf-color-primary); font-weight: 600; text-decoration: none; }
32
+ .rf-feature__eyebrow:has(a) a { color: var(--rf-color-primary); font-weight: var(--rf-weight-semibold); text-decoration: none; }
33
33
  .rf-feature__eyebrow:has(a) a::before { content: ''; position: absolute; inset: 0; border-radius: inherit; }
34
34
  .rf-feature__headline {
35
35
  margin-top: 0;
@@ -97,10 +97,10 @@
97
97
  background: var(--rf-color-surface);
98
98
  }
99
99
  .rf-feature__feature-item dt {
100
- font-weight: 650;
101
- font-size: 1.125rem;
100
+ font-weight: var(--rf-weight-semibold);
101
+ font-size: var(--rf-text-lg);
102
102
  margin-bottom: 0.75rem;
103
- letter-spacing: -0.01em;
103
+ letter-spacing: var(--rf-tracking-tight);
104
104
  color: var(--rf-color-text);
105
105
  }
106
106
  .rf-feature__feature-item dt:has(> .rf-icon) {
@@ -116,8 +116,8 @@
116
116
  .rf-feature__feature-item dd {
117
117
  margin: 0;
118
118
  color: var(--rf-color-muted);
119
- font-size: 0.9rem;
120
- line-height: 1.65;
119
+ font-size: var(--rf-text-sm);
120
+ line-height: var(--rf-leading-relaxed);
121
121
  }
122
122
 
123
123
  /* Context-aware: feature inside a hero — no top padding, tighter spacing */
@@ -132,3 +132,15 @@
132
132
  .rf-feature--in-grid {
133
133
  padding: 0;
134
134
  }
135
+
136
+ /* BUG-001 — content-first DOM inverts the shared media-first stacked contract
137
+ * (layouts/split.css): counter it so the labels are truthful. `bottom` (the
138
+ * default) is plain block flow — media after the content, the historical
139
+ * look; an explicit `top` flips the visual order without touching the DOM. */
140
+ .rf-feature[data-media-position="bottom"] {
141
+ display: block;
142
+ }
143
+ .rf-feature[data-media-position="top"] {
144
+ display: flex;
145
+ flex-direction: column-reverse;
146
+ }
@@ -1,5 +1,5 @@
1
1
  /* Figure */
2
- .rf-figure img {
2
+ .rf-figure :is(img, .rf-placeholder) {
3
3
  display: block;
4
4
  max-width: 100%;
5
5
  height: auto;
@@ -12,7 +12,7 @@
12
12
  * inline-end. `object-fit: cover` crops only if the natural aspect doesn't
13
13
  * match — and `frame-anchor` already picks the focal point of that crop
14
14
  * (the same contract as a card's media slot). */
15
- .rf-figure[style*="--frame-aspect"] img {
15
+ .rf-figure[style*="--frame-aspect"] :is(img, .rf-placeholder) {
16
16
  width: 100%;
17
17
  height: 100%;
18
18
  object-fit: cover;
@@ -20,7 +20,7 @@
20
20
  }
21
21
  .rf-figure figcaption {
22
22
  margin-top: 0.625rem;
23
- font-size: 0.825rem;
23
+ font-size: var(--rf-text-sm);
24
24
  color: var(--rf-color-muted);
25
25
  text-align: center;
26
26
  font-style: italic;
@@ -36,7 +36,7 @@
36
36
  /* Compact variant */
37
37
  .rf-form--compact {
38
38
  gap: 0.75rem;
39
- font-size: 0.875rem;
39
+ font-size: var(--rf-text-sm);
40
40
  }
41
41
  .rf-form--compact .rf-form__body {
42
42
  gap: 0.75rem;
@@ -45,7 +45,7 @@
45
45
  .rf-form--compact textarea,
46
46
  .rf-form--compact select {
47
47
  padding: 0.375rem 0.625rem;
48
- font-size: 0.8125rem;
48
+ font-size: var(--rf-text-sm);
49
49
  }
50
50
  /* Field */
51
51
  .rf-form-field {
@@ -54,8 +54,8 @@
54
54
  gap: 0.375rem;
55
55
  }
56
56
  .rf-form-field label {
57
- font-size: 0.875rem;
58
- font-weight: 600;
57
+ font-size: var(--rf-text-sm);
58
+ font-weight: var(--rf-weight-semibold);
59
59
  color: var(--rf-color-text);
60
60
  }
61
61
  .rf-form-field__required {
@@ -68,7 +68,7 @@
68
68
  padding: 0.5rem 0.75rem;
69
69
  border: 1px solid var(--rf-color-border);
70
70
  border-radius: var(--rf-radius-md);
71
- font-size: 0.9375rem;
71
+ font-size: var(--rf-text);
72
72
  font-family: inherit;
73
73
  color: var(--rf-color-text);
74
74
  background: var(--rf-color-bg);
@@ -94,8 +94,8 @@
94
94
  margin: 0.5rem 0 0;
95
95
  }
96
96
  .rf-form-fieldset legend {
97
- font-size: 1.0625rem;
98
- font-weight: 700;
97
+ font-size: var(--rf-text-lg);
98
+ font-weight: var(--rf-weight-bold);
99
99
  color: var(--rf-color-text);
100
100
  padding: 0;
101
101
  margin-bottom: 0.75rem;
@@ -106,8 +106,8 @@
106
106
  padding: 0;
107
107
  }
108
108
  .rf-form-choice-group legend {
109
- font-size: 0.875rem;
110
- font-weight: 600;
109
+ font-size: var(--rf-text-sm);
110
+ font-weight: var(--rf-weight-semibold);
111
111
  color: var(--rf-color-text);
112
112
  padding: 0;
113
113
  margin-bottom: 0.5rem;
@@ -118,7 +118,7 @@
118
118
  gap: 0.5rem;
119
119
  padding: 0.375rem 0;
120
120
  cursor: pointer;
121
- font-size: 0.9375rem;
121
+ font-size: var(--rf-text);
122
122
  }
123
123
  .rf-form-choice input {
124
124
  width: auto;
@@ -132,8 +132,8 @@
132
132
  color: white;
133
133
  border: none;
134
134
  border-radius: var(--rf-radius-md);
135
- font-size: 0.9375rem;
136
- font-weight: 600;
135
+ font-size: var(--rf-text);
136
+ font-weight: var(--rf-weight-semibold);
137
137
  cursor: pointer;
138
138
  transition: background 0.15s;
139
139
  align-self: flex-start;
@@ -146,13 +146,13 @@
146
146
  }
147
147
  /* Help & description */
148
148
  .rf-form__help {
149
- font-size: 0.8125rem;
149
+ font-size: var(--rf-text-sm);
150
150
  color: var(--rf-color-muted);
151
151
  font-style: italic;
152
152
  margin: 0;
153
153
  }
154
154
  .rf-form__text {
155
- font-size: 0.9375rem;
155
+ font-size: var(--rf-text);
156
156
  color: var(--rf-color-muted);
157
157
  margin: 0;
158
158
  }
@@ -166,8 +166,8 @@
166
166
  .rf-form__status {
167
167
  padding: 0.75rem 1rem;
168
168
  border-radius: var(--rf-radius-md);
169
- font-size: 0.875rem;
170
- font-weight: 500;
169
+ font-size: var(--rf-text-sm);
170
+ font-weight: var(--rf-weight-medium);
171
171
  }
172
172
  .rf-form__status--submitting {
173
173
  background: var(--rf-color-surface);
@@ -34,7 +34,7 @@
34
34
  border-radius: var(--rf-radius-md);
35
35
  margin: 0;
36
36
  }
37
- .rf-gallery__item img {
37
+ .rf-gallery__item :is(img, .rf-placeholder) {
38
38
  width: 100%;
39
39
  height: 100%;
40
40
  object-fit: cover;
@@ -48,13 +48,13 @@
48
48
  padding: 0.5rem 0.75rem;
49
49
  background: linear-gradient(transparent, rgba(0, 0, 0, 0.6));
50
50
  color: white;
51
- font-size: 0.825rem;
51
+ font-size: var(--rf-text-sm);
52
52
  }
53
53
 
54
54
  /* Gallery caption */
55
55
  .rf-gallery > figcaption {
56
56
  margin-top: 0.625rem;
57
- font-size: 0.825rem;
57
+ font-size: var(--rf-text-sm);
58
58
  color: var(--rf-color-muted);
59
59
  text-align: center;
60
60
  font-style: italic;
@@ -89,7 +89,7 @@
89
89
  display: flex;
90
90
  align-items: center;
91
91
  justify-content: center;
92
- font-size: 1.25rem;
92
+ font-size: var(--rf-text-xl);
93
93
  opacity: 0.8;
94
94
  transition: opacity 0.2s;
95
95
  }
@@ -124,7 +124,7 @@
124
124
  }
125
125
  /* In masonry the row height isn't pinned, so let each image take its natural
126
126
  * height (grid mode keeps `height: 100%` for uniform tiles). */
127
- .rf-gallery[data-layout="masonry"] .rf-gallery__item img {
127
+ .rf-gallery[data-layout="masonry"] .rf-gallery__item :is(img, .rf-placeholder) {
128
128
  height: auto;
129
129
  }
130
130
 
@@ -159,7 +159,7 @@
159
159
  border: none;
160
160
  background: rgba(255, 255, 255, 0.15);
161
161
  color: white;
162
- font-size: 1.5rem;
162
+ font-size: var(--rf-text-2xl);
163
163
  cursor: pointer;
164
164
  display: flex;
165
165
  align-items: center;
@@ -175,7 +175,7 @@
175
175
  border: none;
176
176
  background: rgba(255, 255, 255, 0.15);
177
177
  color: white;
178
- font-size: 1.5rem;
178
+ font-size: var(--rf-text-2xl);
179
179
  cursor: pointer;
180
180
  display: flex;
181
181
  align-items: center;