@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
@@ -13,9 +13,9 @@
13
13
  }
14
14
  /* Higher specificity needed to override .rf-hero p (0,1,1) */
15
15
  .rf-hero .rf-hero__eyebrow {
16
- font-size: 0.875rem;
17
- font-weight: 600;
18
- letter-spacing: 0.05em;
16
+ font-size: var(--rf-text-sm);
17
+ font-weight: var(--rf-weight-semibold);
18
+ letter-spacing: var(--rf-tracking-wider);
19
19
  text-transform: uppercase;
20
20
  color: var(--rf-color-primary);
21
21
  margin: 0 0 1rem;
@@ -29,9 +29,9 @@
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-hero .rf-hero__eyebrow:has(a):hover {
@@ -39,7 +39,7 @@
39
39
  }
40
40
  .rf-hero .rf-hero__eyebrow:has(a) a {
41
41
  color: var(--rf-color-primary);
42
- font-weight: 600;
42
+ font-weight: var(--rf-weight-semibold);
43
43
  text-decoration: none;
44
44
  }
45
45
  .rf-hero .rf-hero__eyebrow:has(a) a::before {
@@ -93,7 +93,7 @@
93
93
  .rf-hero__actions pre {
94
94
  margin: 0;
95
95
  padding: 0.7rem 1.75rem;
96
- font-size: 0.95rem;
96
+ font-size: var(--rf-text);
97
97
  border-radius: var(--rf-radius-sm);
98
98
  background: var(--rf-color-code-bg);
99
99
  color: var(--rf-color-code-text);
@@ -102,10 +102,11 @@
102
102
  }
103
103
  .rf-hero h1,
104
104
  .rf-hero__headline {
105
+ /* Hero display headline — a one-off above the --rf-text scale's top step. */
105
106
  font-size: 3.25rem;
106
- font-weight: 800;
107
- letter-spacing: -0.035em;
108
- line-height: 1.1;
107
+ font-weight: var(--rf-weight-bold);
108
+ letter-spacing: var(--rf-tracking-tight);
109
+ line-height: var(--rf-leading-tight);
109
110
  margin: 0 0 1rem;
110
111
  background: linear-gradient(135deg, var(--rf-color-text) 0%, var(--rf-color-muted) 100%);
111
112
  -webkit-background-clip: text;
@@ -115,8 +116,8 @@
115
116
  /* Higher specificity needed to override .rf-hero p (0,1,1) */
116
117
  .rf-hero p,
117
118
  .rf-hero .rf-hero__blurb {
118
- font-size: 1.2rem;
119
- line-height: 1.65;
119
+ font-size: var(--rf-text-xl);
120
+ line-height: var(--rf-leading-relaxed);
120
121
  color: var(--rf-color-muted);
121
122
  margin: 0 0 2rem;
122
123
  max-width: 40rem;
@@ -152,8 +153,8 @@
152
153
  padding: 0.7rem 1.75rem;
153
154
  border-radius: var(--rf-radius-sm);
154
155
  text-decoration: none;
155
- font-weight: 600;
156
- font-size: 0.95rem;
156
+ font-weight: var(--rf-weight-semibold);
157
+ font-size: var(--rf-text);
157
158
  transition: all 200ms ease;
158
159
  }
159
160
  .rf-hero li:first-child a {
@@ -181,6 +182,23 @@
181
182
  margin-top: 3rem;
182
183
  border-radius: var(--rf-radius-lg);
183
184
  }
185
+ /* BUG-001 — hero DOM is content-first (headline before media: the right
186
+ * reading order for the classic hero), inverting the shared media-first
187
+ * stacked contract in layouts/split.css. Counter it so the labels are
188
+ * truthful: `bottom` (the hero default) is plain block flow — media renders
189
+ * after the content, exactly the historical look — and an explicit `top`
190
+ * flips the visual order without touching the DOM. */
191
+ .rf-hero[data-media-position="bottom"] {
192
+ display: block;
193
+ }
194
+ .rf-hero[data-media-position="top"] {
195
+ display: flex;
196
+ flex-direction: column-reverse;
197
+ }
198
+ .rf-hero[data-media-position="top"] > .rf-hero__media {
199
+ margin-top: 0;
200
+ margin-bottom: 3rem;
201
+ }
184
202
  .rf-hero__media img {
185
203
  display: block;
186
204
  width: 100%;
@@ -190,6 +208,90 @@
190
208
  margin: 0;
191
209
  }
192
210
 
211
+ /* ── Cover mode (SPEC-101) — `media-position="cover"` ───────────────────
212
+ * The shared cover layer (dimensions/cover.css) does the grid stacking, the
213
+ * default scrim, and the overlay anchoring; these rules supply the hero-band
214
+ * specifics. This file imports after cover.css, so equal-specificity rules
215
+ * here win. */
216
+
217
+ /* The section's generous padding moves to the overlaid content — on the root
218
+ * it would inset the media well (the backdrop must be flush with the band). */
219
+ .rf-hero--cover {
220
+ padding: 0;
221
+ }
222
+ .rf-hero--cover > [data-name="content"] {
223
+ --rune-padding: 7rem 2rem 6.5rem;
224
+ }
225
+
226
+ /* Band height authority: a hero is a full-width band, not a portrait tile.
227
+ * Height comes from a viewport-aware floor — deliberately NOT a default
228
+ * aspect-ratio: with `aspect-ratio` + `min-height`, the ratio transfers a
229
+ * winning min-height back into *width* on narrow screens (a 22rem-tall 21/9
230
+ * band computes ~820px wide on a 375px phone — the band marches off-screen).
231
+ * `--cover-aspect: auto` releases the shared 3/4 tile default; an explicit
232
+ * `aspect` knob still lands as an inline style and owns the shape. */
233
+ .rf-hero--cover {
234
+ --cover-aspect: auto;
235
+ min-height: clamp(22rem, 55vh, 40rem);
236
+ }
237
+ /* An explicit aspect owns the shape — drop the floor so the same
238
+ * ratio-vs-min-height transfer can't reintroduce the overflow. */
239
+ .rf-hero--cover[data-aspect] {
240
+ min-height: 0;
241
+ }
242
+
243
+ /* The shared cover layer applies `container-type: size` (size containment) for
244
+ * its orientation query — under it the band cannot grow with its content, so
245
+ * tall content clips at min-height. The hero band doesn't use the orientation
246
+ * query (the centred-band default below covers `auto` placement), so release
247
+ * the containment and let the band stretch to fit. */
248
+ .rf-hero--cover[data-media-position="cover"][data-cover-scope="full"] {
249
+ container-type: normal;
250
+ }
251
+
252
+ /* Named height scale (`height="sm…xl"`): an explicit band height. */
253
+ .rf-hero--cover[data-height="sm"] { min-height: 20rem; }
254
+ .rf-hero--cover[data-height="md"] { min-height: 28rem; }
255
+ .rf-hero--cover[data-height="lg"] { min-height: 36rem; }
256
+ .rf-hero--cover[data-height="xl"] { min-height: 44rem; }
257
+
258
+ /* Mobile: the desktop overlay padding (7rem bands) would eat most of the well
259
+ * on a phone — tighten it so the content fits the band. */
260
+ @media (max-width: 640px) {
261
+ .rf-hero--cover > [data-name="content"] {
262
+ --rune-padding: 3.5rem 1.25rem 3rem;
263
+ }
264
+ }
265
+
266
+ /* A full-bleed band sits flush — no media radius on the well. */
267
+ .rf-hero--cover > [data-section="media"] {
268
+ border-radius: 0;
269
+ }
270
+
271
+ /* Legibility over the scrim: the primary action hard-codes white text above,
272
+ * which inverts to white-on-near-white once the cover scheme flips
273
+ * --rf-color-primary on the dark overlay. Use the scheme's tokens instead. */
274
+ .rf-hero--cover li:first-child a {
275
+ color: var(--rf-color-on-accent, var(--rf-color-bg));
276
+ }
277
+
278
+ /* Centre-band default: a hero overlay reads as a centred band, not the
279
+ * cover-card caption strip — seat it mid-well unless the author anchors it
280
+ * with an explicit `content-place`. */
281
+ .rf-hero--cover[data-media-position="cover"]:is([data-content-place="auto"], :not([data-content-place])) > [data-name="content"] {
282
+ align-self: center;
283
+ justify-self: stretch;
284
+ }
285
+
286
+ /* The default cover scrim is edge-weighted (a caption-strip treatment); under
287
+ * the centred band it would leave the headline on undarkened media. With no
288
+ * explicit `content-place`, darken the well evenly (slightly bottom-weighted).
289
+ * An explicit `content-place` re-enters the shared content-edge scrim contract,
290
+ * and `scrim="none"` still opts out. */
291
+ .rf-hero--cover:is([data-content-place="auto"], :not([data-content-place])):not([data-scrim="none"]) > [data-section="media"]::after {
292
+ background-image: var(--cover-scrim-image, linear-gradient(rgb(0 0 0 / 0.45), rgb(0 0 0 / 0.35) 50%, rgb(0 0 0 / 0.55)));
293
+ }
294
+
193
295
  /* Mobile: stack actions full-width so the code block and button line up */
194
296
  @media (max-width: 640px) {
195
297
  .rf-hero__actions {
@@ -46,14 +46,14 @@
46
46
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 11.08V12a10 10 0 1 1-5.93-9.14'/%3E%3Cpolyline points='22 4 12 14.01 9 11.01'/%3E%3C/svg%3E");
47
47
  }
48
48
  .rf-hint__header [data-meta-value] {
49
- font-weight: 600;
49
+ font-weight: var(--rf-weight-semibold);
50
50
  text-transform: capitalize;
51
- font-size: 0.8rem;
52
- letter-spacing: 0.03em;
51
+ font-size: var(--rf-text-xs);
52
+ letter-spacing: var(--rf-tracking-wide);
53
53
  }
54
54
  .rf-hint__body {
55
- font-size: 0.925rem;
56
- line-height: 1.65;
55
+ font-size: var(--rf-text-sm);
56
+ line-height: var(--rf-leading-relaxed);
57
57
  }
58
58
  .rf-hint__body p:last-child {
59
59
  margin-bottom: 0;
@@ -78,7 +78,7 @@
78
78
  margin: 1rem 0 0;
79
79
  padding: 0.625rem 1rem;
80
80
  border-radius: var(--rf-radius-sm);
81
- font-size: 0.875rem;
81
+ font-size: var(--rf-text-sm);
82
82
  }
83
83
  .rf-hint--in-hero .rf-hint__header {
84
84
  margin-bottom: 0.25rem;
@@ -88,5 +88,5 @@
88
88
  .rf-hint--in-feature {
89
89
  margin: 0.75rem 0 0;
90
90
  padding: 0.5rem 0.875rem;
91
- font-size: 0.85rem;
91
+ font-size: var(--rf-text-sm);
92
92
  }
@@ -11,7 +11,7 @@
11
11
  }
12
12
  .rf-howto__content ul li {
13
13
  padding: 0.2rem 0;
14
- line-height: 1.6;
14
+ line-height: var(--rf-leading-relaxed);
15
15
  }
16
16
  .rf-howto__content ul li::marker {
17
17
  color: var(--rf-color-primary);
@@ -29,7 +29,7 @@
29
29
  padding: 0.625rem 0;
30
30
  padding-left: 2.25rem;
31
31
  position: relative;
32
- line-height: 1.65;
32
+ line-height: var(--rf-leading-relaxed);
33
33
  }
34
34
  .rf-howto__content ol > li + li {
35
35
  border-top: 1px solid var(--rf-color-border);
@@ -44,8 +44,8 @@
44
44
  display: flex;
45
45
  align-items: center;
46
46
  justify-content: center;
47
- font-size: 0.75rem;
48
- font-weight: 700;
47
+ font-size: var(--rf-text-xs);
48
+ font-weight: var(--rf-weight-bold);
49
49
  color: var(--rf-color-primary);
50
50
  background: var(--rf-color-surface);
51
51
  border-radius: var(--rf-radius-full);
@@ -63,10 +63,10 @@
63
63
  border-radius: 0 var(--rf-radius-md) var(--rf-radius-md) 0;
64
64
  padding: 0.75rem 1.25rem;
65
65
  margin: 1.75rem 0 0;
66
- font-size: 0.9125rem;
66
+ font-size: var(--rf-text-sm);
67
67
  font-style: italic;
68
68
  color: var(--rf-color-muted);
69
- line-height: 1.6;
69
+ line-height: var(--rf-leading-relaxed);
70
70
  }
71
71
  .rf-howto__content blockquote p {
72
72
  margin: 0;
@@ -14,8 +14,8 @@
14
14
  margin-bottom: 0;
15
15
  }
16
16
  .rf-itinerary-day__header {
17
- font-size: 1.15rem;
18
- font-weight: 700;
17
+ font-size: var(--rf-text-lg);
18
+ font-weight: var(--rf-weight-bold);
19
19
  color: var(--rf-color-text);
20
20
  margin-bottom: 1rem;
21
21
  padding-bottom: 0.5rem;
@@ -58,26 +58,26 @@
58
58
  /* Stop time */
59
59
  .rf-itinerary-stop__time {
60
60
  display: block;
61
- font-size: 0.8rem;
62
- font-weight: 600;
61
+ font-size: var(--rf-text-xs);
62
+ font-weight: var(--rf-weight-semibold);
63
63
  color: var(--rf-color-primary);
64
- letter-spacing: 0.02em;
64
+ letter-spacing: var(--rf-tracking-wide);
65
65
  margin-bottom: 0.15rem;
66
66
  }
67
67
 
68
68
  /* Stop location */
69
69
  .rf-itinerary-stop__location {
70
70
  display: block;
71
- font-size: 1.05rem;
72
- font-weight: 700;
71
+ font-size: var(--rf-text);
72
+ font-weight: var(--rf-weight-bold);
73
73
  color: var(--rf-color-text);
74
74
  margin-bottom: 0.35rem;
75
75
  }
76
76
 
77
77
  /* Stop body */
78
78
  .rf-itinerary-stop__body {
79
- font-size: 0.925rem;
80
- line-height: 1.65;
79
+ font-size: var(--rf-text-sm);
80
+ line-height: var(--rf-leading-relaxed);
81
81
  color: var(--rf-color-muted);
82
82
  }
83
83
  .rf-itinerary-stop__body p:last-child {
@@ -90,8 +90,8 @@
90
90
  position: absolute;
91
91
  top: 0.15rem;
92
92
  right: 0;
93
- font-size: 0.75rem;
94
- font-weight: 500;
93
+ font-size: var(--rf-text-xs);
94
+ font-weight: var(--rf-weight-medium);
95
95
  color: var(--rf-color-muted);
96
96
  background: var(--rf-color-surface);
97
97
  padding: 0.1rem 0.5rem;
@@ -162,7 +162,7 @@
162
162
  }
163
163
  .rf-itinerary--compact .rf-itinerary-stop__location {
164
164
  display: inline;
165
- font-size: 0.925rem;
165
+ font-size: var(--rf-text-sm);
166
166
  }
167
167
  .rf-itinerary--compact .rf-itinerary-stop__time {
168
168
  display: inline;
@@ -27,8 +27,8 @@
27
27
  padding: 0.25rem 0.75rem;
28
28
  background: rgba(0, 0, 0, 0.6);
29
29
  color: white;
30
- font-size: 0.75rem;
31
- font-weight: 600;
30
+ font-size: var(--rf-text-xs);
31
+ font-weight: var(--rf-weight-semibold);
32
32
  border-radius: var(--rf-radius-sm);
33
33
  pointer-events: none;
34
34
  }
@@ -43,7 +43,7 @@
43
43
  .rf-juxtapose-panel__body {
44
44
  /* Content fills the panel */
45
45
  }
46
- .rf-juxtapose-panel__body img {
46
+ .rf-juxtapose-panel__body :is(img, .rf-placeholder) {
47
47
  display: block;
48
48
  width: 100%;
49
49
  height: auto;
@@ -105,7 +105,7 @@
105
105
 
106
106
  .rf-juxtapose__divider-handle::before {
107
107
  content: '\2194'; /* ↔ */
108
- font-size: 1rem;
108
+ font-size: var(--rf-text);
109
109
  color: var(--rf-color-muted);
110
110
  line-height: 1;
111
111
  }
@@ -137,8 +137,8 @@
137
137
  border-radius: var(--rf-radius-full);
138
138
  background: transparent;
139
139
  color: var(--rf-color-muted);
140
- font-size: 0.75rem;
141
- font-weight: 500;
140
+ font-size: var(--rf-text-xs);
141
+ font-weight: var(--rf-weight-medium);
142
142
  cursor: pointer;
143
143
  transition: background 150ms ease, color 150ms ease;
144
144
  }
@@ -16,8 +16,8 @@
16
16
  }
17
17
  .rf-lore > span[property="title"] {
18
18
  display: block;
19
- font-size: 1.5rem;
20
- font-weight: 700;
19
+ font-size: var(--rf-text-2xl);
20
+ font-weight: var(--rf-weight-bold);
21
21
  margin-bottom: 0.5rem;
22
22
  color: var(--rf-color-text);
23
23
  }
@@ -36,8 +36,8 @@
36
36
  padding: 0.5rem 1rem;
37
37
  background: var(--rf-color-bg);
38
38
  border-radius: var(--rf-radius-md);
39
- font-size: 0.875rem;
40
- font-weight: 500;
39
+ font-size: var(--rf-text-sm);
40
+ font-weight: var(--rf-weight-medium);
41
41
  color: var(--rf-color-muted);
42
42
  cursor: pointer;
43
43
  z-index: 1;
@@ -36,7 +36,7 @@
36
36
  padding: 1.5rem;
37
37
  margin: 0;
38
38
  list-style: decimal inside;
39
- font-size: 0.925rem;
39
+ font-size: var(--rf-text-sm);
40
40
  color: var(--rf-color-muted);
41
41
  }
42
42
 
@@ -73,7 +73,7 @@
73
73
 
74
74
  .rf-map-pin__group {
75
75
  display: inline-block;
76
- font-size: 0.75rem;
76
+ font-size: var(--rf-text-xs);
77
77
  padding: 0.1rem 0.5rem;
78
78
  border-radius: var(--rf-radius-sm, 0.25rem);
79
79
  background: var(--rf-color-surface, #f0f0f0);
@@ -113,18 +113,18 @@
113
113
  .rf-map .leaflet-popup-content-wrapper {
114
114
  border-radius: var(--rf-radius-md, 0.5rem);
115
115
  font-family: var(--rf-font-sans, inherit);
116
- font-size: 0.875rem;
116
+ font-size: var(--rf-text-sm);
117
117
  color: var(--rf-color-text);
118
118
  }
119
119
 
120
120
  .rf-map .leaflet-popup-content {
121
121
  margin: 0.75rem 1rem;
122
- line-height: 1.5;
122
+ line-height: var(--rf-leading-normal);
123
123
  }
124
124
 
125
125
  .rf-map .leaflet-popup-content strong {
126
126
  display: block;
127
- font-size: 0.95rem;
127
+ font-size: var(--rf-text);
128
128
  margin-bottom: 0.25rem;
129
129
  }
130
130
 
@@ -134,7 +134,7 @@
134
134
 
135
135
  .rf-map .leaflet-popup-content small {
136
136
  color: var(--rf-color-muted);
137
- font-size: 0.8rem;
137
+ font-size: var(--rf-text-xs);
138
138
  }
139
139
 
140
140
  .rf-map .leaflet-popup-content a {
@@ -24,7 +24,7 @@
24
24
  }
25
25
 
26
26
  /* Media container */
27
- .rf-mediatext__media img {
27
+ .rf-mediatext__media :is(img, .rf-placeholder) {
28
28
  max-width: 100%;
29
29
  height: auto;
30
30
  border-radius: var(--rf-radius-md);
@@ -16,8 +16,8 @@
16
16
  margin-bottom: 1.5rem;
17
17
  }
18
18
  .rf-milestone__body {
19
- font-size: 0.925rem;
20
- line-height: 1.65;
19
+ font-size: var(--rf-text-sm);
20
+ line-height: var(--rf-leading-relaxed);
21
21
  }
22
22
  .rf-milestone__body ul {
23
23
  padding-left: 1.5rem;
@@ -33,10 +33,10 @@
33
33
  margin-bottom: 1rem;
34
34
  }
35
35
  .rf-milestone__backlog-group-label {
36
- font-size: 0.75rem;
37
- font-weight: 700;
36
+ font-size: var(--rf-text-xs);
37
+ font-weight: var(--rf-weight-bold);
38
38
  text-transform: uppercase;
39
- letter-spacing: 0.05em;
39
+ letter-spacing: var(--rf-tracking-wider);
40
40
  color: var(--rf-color-muted);
41
41
  margin: 0 0 0.375rem;
42
42
  }
@@ -53,8 +53,8 @@
53
53
  .rf-milestone__tab {
54
54
  flex: 0 0 auto;
55
55
  padding: 0.5rem 1rem;
56
- font-size: 0.8125rem;
57
- font-weight: 500;
56
+ font-size: var(--rf-text-sm);
57
+ font-weight: var(--rf-weight-medium);
58
58
  color: var(--rf-color-muted);
59
59
  background: none;
60
60
  border: none;
@@ -70,7 +70,7 @@
70
70
  .rf-milestone__tab--active {
71
71
  color: var(--rf-color-primary);
72
72
  border-bottom-color: var(--rf-color-primary);
73
- font-weight: 600;
73
+ font-weight: var(--rf-weight-semibold);
74
74
  }
75
75
  .rf-milestone__panels {
76
76
  padding: 0;
@@ -93,13 +93,13 @@
93
93
  margin-bottom: 0.375rem;
94
94
  }
95
95
  .rf-milestone__progress-label {
96
- font-size: 0.75rem;
97
- font-weight: 600;
96
+ font-size: var(--rf-text-xs);
97
+ font-weight: var(--rf-weight-semibold);
98
98
  color: var(--rf-color-muted);
99
99
  }
100
100
  .rf-milestone__progress-count {
101
- font-size: 0.75rem;
102
- font-weight: 600;
101
+ font-size: var(--rf-text-xs);
102
+ font-weight: var(--rf-weight-semibold);
103
103
  color: var(--rf-color-muted);
104
104
  }
105
105
  .rf-milestone__progress-bar {
@@ -93,8 +93,8 @@
93
93
 
94
94
  .rf-mockup__label {
95
95
  text-align: center;
96
- font-size: 0.75rem;
97
- font-weight: 500;
96
+ font-size: var(--rf-text-xs);
97
+ font-weight: var(--rf-weight-medium);
98
98
  color: var(--rf-color-muted);
99
99
  margin-top: 0.75rem;
100
100
  }
@@ -154,8 +154,8 @@
154
154
  justify-content: space-between;
155
155
  padding: 0 1.5rem;
156
156
  height: 44px;
157
- font-size: 0.75rem;
158
- font-weight: 600;
157
+ font-size: var(--rf-text-xs);
158
+ font-weight: var(--rf-weight-semibold);
159
159
  color: var(--rf-color-text);
160
160
  background: var(--rf-color-bg);
161
161
  position: relative;
@@ -168,8 +168,8 @@
168
168
 
169
169
  .rf-mockup__status-icons::after {
170
170
  content: '\25CF\25CF\25CF \25AE 100%';
171
- font-size: 0.625rem;
172
- letter-spacing: 0.05em;
171
+ font-size: var(--rf-text-xs);
172
+ letter-spacing: var(--rf-tracking-wider);
173
173
  color: var(--rf-color-muted);
174
174
  }
175
175
 
@@ -382,7 +382,7 @@
382
382
  }
383
383
 
384
384
  .rf-mockup__url {
385
- font-size: 0.75rem;
385
+ font-size: var(--rf-text-xs);
386
386
  font-family: var(--rf-font-sans);
387
387
  color: var(--mockup-chrome-text);
388
388
  white-space: nowrap;