@refrakt-md/lumina 0.21.0 → 0.23.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 (131) hide show
  1. package/base.css +2 -1
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +7 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/tokens.d.ts +5 -3
  6. package/dist/tokens.d.ts.map +1 -1
  7. package/dist/tokens.js +44 -3
  8. package/dist/tokens.js.map +1 -1
  9. package/index.css +11 -1
  10. package/package.json +7 -5
  11. package/styles/base/attributes.css +6 -7
  12. package/styles/dimensions/checklist.css +7 -36
  13. package/styles/dimensions/cover.css +13 -95
  14. package/styles/dimensions/density.css +6 -3
  15. package/styles/dimensions/frame.css +7 -4
  16. package/styles/dimensions/media.css +14 -61
  17. package/styles/dimensions/metadata.css +30 -80
  18. package/styles/dimensions/sections.css +16 -30
  19. package/styles/dimensions/sequence.css +17 -82
  20. package/styles/dimensions/state.css +39 -56
  21. package/styles/dimensions/substrate.css +3 -0
  22. package/styles/dimensions/surfaces.css +73 -113
  23. package/styles/elements/blockquote.css +3 -2
  24. package/styles/elements/code.css +3 -0
  25. package/styles/elements/table.css +3 -0
  26. package/styles/global.css +24 -63
  27. package/styles/layouts/blog.css +34 -95
  28. package/styles/layouts/default.css +12 -86
  29. package/styles/layouts/docs.css +9 -159
  30. package/styles/layouts/mobile.css +3 -52
  31. package/styles/layouts/on-this-page.css +8 -7
  32. package/styles/layouts/plan.css +27 -158
  33. package/styles/layouts/search.css +17 -82
  34. package/styles/layouts/split.css +24 -169
  35. package/styles/layouts/theme-toggle.css +3 -29
  36. package/styles/layouts/version-switcher.css +9 -10
  37. package/styles/runes/accordion.css +25 -68
  38. package/styles/runes/aggregate.css +4 -13
  39. package/styles/runes/annotate.css +11 -40
  40. package/styles/runes/api.css +4 -1
  41. package/styles/runes/audio.css +12 -50
  42. package/styles/runes/badge.css +5 -2
  43. package/styles/runes/bar.css +3 -0
  44. package/styles/runes/bento.css +18 -161
  45. package/styles/runes/bg.css +3 -37
  46. package/styles/runes/blog.css +18 -20
  47. package/styles/runes/bond.css +6 -26
  48. package/styles/runes/breadcrumb.css +7 -15
  49. package/styles/runes/budget.css +23 -45
  50. package/styles/runes/bug.css +5 -2
  51. package/styles/runes/card.css +27 -95
  52. package/styles/runes/cast.css +10 -27
  53. package/styles/runes/changelog.css +13 -17
  54. package/styles/runes/character.css +6 -20
  55. package/styles/runes/chart.css +15 -57
  56. package/styles/runes/codegroup.css +18 -26
  57. package/styles/runes/collection.css +8 -85
  58. package/styles/runes/compare.css +8 -19
  59. package/styles/runes/comparison.css +29 -56
  60. package/styles/runes/conversation.css +9 -31
  61. package/styles/runes/cta.css +17 -40
  62. package/styles/runes/datatable.css +33 -48
  63. package/styles/runes/decision.css +5 -2
  64. package/styles/runes/design-context.css +5 -4
  65. package/styles/runes/details.css +9 -17
  66. package/styles/runes/diagram.css +8 -16
  67. package/styles/runes/diff.css +11 -94
  68. package/styles/runes/drawer.css +9 -113
  69. package/styles/runes/embed.css +5 -13
  70. package/styles/runes/event.css +5 -3
  71. package/styles/runes/expand.css +10 -45
  72. package/styles/runes/faction.css +6 -12
  73. package/styles/runes/feature.css +15 -43
  74. package/styles/runes/figure.css +7 -26
  75. package/styles/runes/file-ref.css +3 -18
  76. package/styles/runes/form.css +19 -48
  77. package/styles/runes/gallery.css +8 -140
  78. package/styles/runes/grid.css +4 -56
  79. package/styles/runes/hero.css +28 -140
  80. package/styles/runes/hint.css +23 -48
  81. package/styles/runes/howto.css +9 -31
  82. package/styles/runes/itinerary.css +15 -44
  83. package/styles/runes/juxtapose.css +17 -92
  84. package/styles/runes/lore.css +7 -14
  85. package/styles/runes/map.css +9 -42
  86. package/styles/runes/mediatext.css +4 -45
  87. package/styles/runes/milestone.css +15 -28
  88. package/styles/runes/mockup.css +10 -115
  89. package/styles/runes/nav.css +37 -212
  90. package/styles/runes/organization.css +6 -5
  91. package/styles/runes/page-section.css +3 -4
  92. package/styles/runes/pagination.css +10 -42
  93. package/styles/runes/palette.css +16 -35
  94. package/styles/runes/placeholder.css +16 -0
  95. package/styles/runes/plan-history.css +23 -43
  96. package/styles/runes/plan-progress.css +6 -7
  97. package/styles/runes/plan-ref.css +4 -1
  98. package/styles/runes/playlist.css +10 -44
  99. package/styles/runes/plot.css +9 -25
  100. package/styles/runes/preview.css +9 -34
  101. package/styles/runes/pricing.css +23 -41
  102. package/styles/runes/progress.css +8 -27
  103. package/styles/runes/pullquote.css +9 -31
  104. package/styles/runes/realm.css +6 -12
  105. package/styles/runes/recipe.css +12 -36
  106. package/styles/runes/relationships.css +5 -36
  107. package/styles/runes/reveal.css +17 -22
  108. package/styles/runes/sandbox.css +9 -39
  109. package/styles/runes/section.css +10 -24
  110. package/styles/runes/showcase.css +3 -20
  111. package/styles/runes/sidenote.css +5 -4
  112. package/styles/runes/snippet.css +3 -0
  113. package/styles/runes/spacing.css +14 -33
  114. package/styles/runes/spec.css +5 -2
  115. package/styles/runes/steps.css +14 -46
  116. package/styles/runes/storyboard.css +4 -19
  117. package/styles/runes/swatch.css +4 -7
  118. package/styles/runes/symbol.css +16 -14
  119. package/styles/runes/tabs.css +15 -18
  120. package/styles/runes/testimonial.css +12 -13
  121. package/styles/runes/textblock.css +6 -24
  122. package/styles/runes/timeline.css +10 -28
  123. package/styles/runes/tint.css +3 -0
  124. package/styles/runes/toc.css +9 -7
  125. package/styles/runes/track.css +12 -41
  126. package/styles/runes/typography.css +15 -27
  127. package/styles/runes/work.css +5 -2
  128. package/styles/runes/xref.css +3 -1
  129. package/tokens/base.css +56 -66
  130. package/tokens/dark.css +79 -80
  131. package/styles/dimensions/guest-posture.css +0 -27
@@ -1,9 +1,9 @@
1
+ @layer skin {
1
2
  /* Nav */
2
3
  .rf-nav {
3
4
  padding: 0.5rem 0;
4
5
  }
5
6
  .rf-nav ul {
6
- list-style: none;
7
7
  padding: 0;
8
8
  margin: 0;
9
9
  }
@@ -20,27 +20,26 @@
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
- display: block;
39
38
  padding: 0.375rem 0.75rem;
40
39
  border-radius: var(--rf-radius-sm);
41
40
  color: var(--rf-color-text);
42
41
  text-decoration: none;
43
- font-size: 0.85rem;
42
+ font-size: var(--rf-text-sm);
44
43
  transition: background-color 150ms ease, color 150ms ease;
45
44
  }
46
45
  .rf-nav-item__link:hover {
@@ -53,7 +52,7 @@
53
52
  .rf-nav-item__link[aria-current="page"] {
54
53
  background: color-mix(in srgb, var(--rf-color-primary) 8%, transparent);
55
54
  color: var(--rf-color-primary);
56
- font-weight: 600;
55
+ font-weight: var(--rf-weight-semibold);
57
56
  }
58
57
  /* SPEC-055: ancestor-of-current-page link — subtler treatment than the
59
58
  * exact-match aria-current state. Themes can collapse the two into a
@@ -63,7 +62,7 @@
63
62
  }
64
63
  .rf-nav-item {
65
64
  padding: 0.375rem 0.75rem;
66
- font-size: 0.85rem;
65
+ font-size: var(--rf-text-sm);
67
66
  color: var(--rf-color-muted);
68
67
  }
69
68
 
@@ -72,23 +71,14 @@
72
71
  * instead of wrapping to the next line — the link's `display: block` would
73
72
  * otherwise eat the full row. */
74
73
  .rf-nav-item:has(> .rf-badge[data-name="badge"]) {
75
- display: flex;
76
- align-items: center;
77
74
  gap: 0.375rem;
78
75
  padding: 0;
79
76
  }
80
- .rf-nav-item:has(> .rf-badge[data-name="badge"]) > .rf-nav-item__link {
81
- flex: 0 1 auto;
82
- min-width: 0;
83
- }
84
77
 
85
78
  /* ─── Collapsible groups (vertical sidebar) ───────────────────────────── */
86
79
 
87
80
  .rf-nav--collapsible .rf-nav-group h2,
88
81
  .rf-nav--collapsible .rf-nav-group h3 {
89
- display: flex;
90
- align-items: center;
91
- justify-content: space-between;
92
82
  cursor: pointer;
93
83
  user-select: none;
94
84
  border-radius: var(--rf-radius-sm);
@@ -104,12 +94,8 @@
104
94
  }
105
95
  .rf-nav--collapsible .rf-nav-group h2::after,
106
96
  .rf-nav--collapsible .rf-nav-group h3::after {
107
- content: '';
108
- width: 0.5rem;
109
- height: 0.5rem;
110
97
  border-right: 1.5px solid currentColor;
111
98
  border-bottom: 1.5px solid currentColor;
112
- transform: rotate(45deg);
113
99
  transition: transform 200ms ease;
114
100
  margin-right: 0.25rem;
115
101
  }
@@ -119,18 +105,8 @@
119
105
  .rf-nav--collapsible .rf-nav-group > .rf-nav-group__panel,
120
106
  .rf-nav--collapsible .rf-nav-group > ul,
121
107
  .rf-nav--collapsible .rf-nav-group > ol {
122
- overflow: hidden;
123
108
  transition: height 200ms ease;
124
109
  }
125
- .rf-nav--collapsible .rf-nav-group[data-collapsed="true"] > .rf-nav-group__panel,
126
- .rf-nav--collapsible .rf-nav-group[data-collapsed="true"] > ul,
127
- .rf-nav--collapsible .rf-nav-group[data-collapsed="true"] > ol {
128
- height: 0;
129
- }
130
- .rf-nav--collapsible .rf-nav-group[data-collapsed="true"] h2::after,
131
- .rf-nav--collapsible .rf-nav-group[data-collapsed="true"] h3::after {
132
- transform: rotate(-45deg);
133
- }
134
110
 
135
111
  @media (prefers-reduced-motion: reduce) {
136
112
  .rf-nav--collapsible .rf-nav-group > .rf-nav-group__panel,
@@ -155,10 +131,7 @@
155
131
  }
156
132
  .rf-nav--menubar > .rf-nav__top-level > ul,
157
133
  .rf-nav--menubar > .rf-nav__top-level ul {
158
- display: flex;
159
- flex-wrap: wrap;
160
134
  gap: 0.25rem;
161
- align-items: center;
162
135
  margin: 0;
163
136
  }
164
137
  .rf-nav--menubar > .rf-nav__top-level li {
@@ -166,10 +139,9 @@
166
139
  margin: 0;
167
140
  }
168
141
  .rf-nav--menubar > .rf-nav__top-level .rf-nav-item__link {
169
- display: inline-block;
170
142
  padding: 0.375rem 0.75rem;
171
- font-weight: 500;
172
- font-size: 0.9rem;
143
+ font-weight: var(--rf-weight-medium);
144
+ font-size: var(--rf-text-sm);
173
145
  border-radius: var(--rf-radius-sm);
174
146
  color: var(--rf-color-muted);
175
147
  transition: background-color 150ms ease, color 150ms ease;
@@ -180,15 +152,13 @@
180
152
  }
181
153
  .rf-nav--menubar .rf-nav-group {
182
154
  margin: 0;
183
- position: relative;
184
- display: inline-block;
185
155
  }
186
156
  .rf-nav--menubar .rf-nav-group h2,
187
157
  .rf-nav--menubar .rf-nav-group h3 {
188
158
  margin: 0;
189
159
  padding: 0.375rem 0.75rem;
190
- font-size: 0.9rem;
191
- font-weight: 500;
160
+ font-size: var(--rf-text-sm);
161
+ font-weight: var(--rf-weight-medium);
192
162
  line-height: inherit;
193
163
  text-transform: none;
194
164
  letter-spacing: normal;
@@ -210,35 +180,15 @@
210
180
  * wrapper so the rule works equally well for simple <ul> dropdowns and
211
181
  * rich panels containing nested navs / intro / footer slots. */
212
182
  .rf-nav--menubar .rf-nav-group > .rf-nav-group__panel {
213
- display: block;
214
- position: absolute;
215
- top: 100%;
216
- right: 0;
217
- left: auto;
218
- min-width: 14rem;
219
183
  padding: 0.5rem;
220
184
  background: var(--rf-color-bg);
221
185
  border: 1px solid var(--rf-color-border);
222
186
  border-radius: var(--rf-radius-md);
223
187
  box-shadow: var(--rf-shadow-md, 0 4px 12px rgba(0, 0, 0, 0.08));
224
- z-index: 50;
225
- opacity: 0;
226
- visibility: hidden;
227
- pointer-events: none;
228
- transform: translateY(-4px);
229
188
  transition: opacity 150ms ease, visibility 150ms ease, transform 150ms ease;
230
189
  }
231
- .rf-nav--menubar .rf-nav-group:hover > .rf-nav-group__panel,
232
- .rf-nav--menubar .rf-nav-group:focus-within > .rf-nav-group__panel,
233
- .rf-nav--menubar .rf-nav-group[data-open="true"] > .rf-nav-group__panel {
234
- opacity: 1;
235
- visibility: visible;
236
- pointer-events: auto;
237
- transform: translateY(0);
238
- }
239
190
  /* Inside the panel, lists render naturally (no extra positioning). */
240
191
  .rf-nav--menubar .rf-nav-group__panel ul {
241
- list-style: none;
242
192
  padding: 0;
243
193
  margin: 0;
244
194
  }
@@ -250,67 +200,40 @@
250
200
  * `> ul > li > a` so it only catches flat panels — nested columns navs
251
201
  * (which sit inside `.rf-nav--columns`) keep their own item styling. */
252
202
  .rf-nav--menubar .rf-nav-group__panel > ul > li > .rf-nav-item__link {
253
- display: block;
254
- width: 100%;
255
- box-sizing: border-box;
256
203
  padding: 0.5rem 0.75rem;
257
204
  }
258
205
  .rf-nav--menubar .rf-nav-group .rf-nav-item__link {
259
- font-size: 0.85rem;
260
- font-weight: 400;
206
+ font-size: var(--rf-text-sm);
207
+ font-weight: var(--rf-weight-normal);
261
208
  }
262
209
  .rf-nav--menubar > nav,
263
210
  .rf-nav--menubar {
264
- display: flex;
265
- flex-wrap: wrap;
266
211
  gap: 0.25rem;
267
- align-items: center;
268
- }
269
- .rf-nav--menubar [data-name="trigger"] {
270
- display: none;
271
212
  }
272
213
 
273
214
  @media (max-width: 768px) {
274
- /* Mobile: render the menubar as a flat vertical side-nav. No hamburger
275
- trigger, no click-to-expand groups — category headings render as plain
276
- headings with their items always visible. */
277
- .rf-nav--menubar [data-name="trigger"] {
278
- display: none;
279
- }
280
215
  .rf-nav--menubar {
281
- flex-direction: column;
282
- align-items: stretch;
283
216
  gap: 0;
284
217
  }
285
- .rf-nav--menubar > .rf-nav__top-level,
286
- .rf-nav--menubar > .rf-nav-group {
287
- display: block;
288
- width: 100%;
289
- }
290
218
  .rf-nav--menubar > .rf-nav__top-level > ul {
291
- flex-direction: column;
292
- align-items: stretch;
293
219
  gap: 0;
294
220
  }
295
221
  .rf-nav--menubar > .rf-nav__top-level .rf-nav-item__link {
296
- display: block;
297
222
  padding: 0.5rem 0.75rem;
298
223
  }
299
224
  .rf-nav--menubar .rf-nav-group {
300
- position: static;
301
- display: block;
302
225
  margin: 1rem 0 0;
303
226
  }
304
227
  .rf-nav--menubar .rf-nav-group h2,
305
228
  .rf-nav--menubar .rf-nav-group h3 {
306
- font-size: 0.7rem;
229
+ font-size: var(--rf-text-xs);
307
230
  text-transform: uppercase;
308
- letter-spacing: 0.06em;
231
+ letter-spacing: var(--rf-tracking-wider);
309
232
  color: var(--rf-color-muted);
310
233
  background: transparent;
311
234
  cursor: default;
312
235
  padding: 0.5rem 0.75rem 0.25rem;
313
- font-weight: 600;
236
+ font-weight: var(--rf-weight-semibold);
314
237
  }
315
238
  .rf-nav--menubar .rf-nav-group h2:hover,
316
239
  .rf-nav--menubar .rf-nav-group h3:hover,
@@ -320,30 +243,20 @@
320
243
  color: var(--rf-color-muted);
321
244
  }
322
245
  .rf-nav--menubar .rf-nav-group > .rf-nav-group__panel {
323
- position: static;
324
- display: block;
325
- min-width: 0;
326
246
  padding: 0;
327
247
  background: transparent;
328
248
  border: 0;
329
249
  box-shadow: none;
330
- opacity: 1;
331
- visibility: visible;
332
- pointer-events: auto;
333
- transform: none;
334
250
  }
335
251
  }
336
252
 
337
253
  /* ─── Columns layout (footer) ─────────────────────────────────────────── */
338
254
 
339
255
  .rf-nav--columns {
340
- display: grid;
341
- grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
342
256
  gap: 2rem;
343
257
  padding: 1.5rem 0;
344
258
  }
345
259
  .rf-nav--columns .rf-nav__top-level {
346
- grid-column: 1 / -1;
347
260
  padding-bottom: 1rem;
348
261
  margin-bottom: 0;
349
262
  border-bottom: 0;
@@ -356,7 +269,7 @@
356
269
  padding-left: 0;
357
270
  margin-bottom: 0.75rem;
358
271
  color: var(--rf-color-text);
359
- font-size: 0.75rem;
272
+ font-size: var(--rf-text-xs);
360
273
  }
361
274
  .rf-nav--columns .rf-nav-item__link {
362
275
  padding: 0.25rem 0;
@@ -379,7 +292,6 @@
379
292
  /* Keep two columns on mobile. `minmax(0, 1fr)` lets columns shrink
380
293
  * below their min-content width so long link labels don't push the
381
294
  * grid wider than the viewport and trigger horizontal scroll. */
382
- grid-template-columns: repeat(2, minmax(0, 1fr));
383
295
  gap: 1.25rem 1.5rem;
384
296
  }
385
297
  .rf-nav--columns .rf-nav-item__link {
@@ -399,10 +311,7 @@
399
311
  }
400
312
  .rf-nav--cards > .rf-nav__top-level > ul,
401
313
  .rf-nav--cards > ul {
402
- display: grid;
403
- grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
404
314
  gap: 1rem;
405
- list-style: none;
406
315
  padding: 0;
407
316
  margin: 0;
408
317
  }
@@ -411,13 +320,11 @@
411
320
  }
412
321
  .rf-nav--cards .rf-nav-group h2,
413
322
  .rf-nav--cards .rf-nav-group h3 {
414
- font-size: 0.85rem;
323
+ font-size: var(--rf-text-sm);
415
324
  padding-left: 0;
416
325
  margin-bottom: 1rem;
417
326
  }
418
327
  .rf-nav--cards .rf-nav-group > ul {
419
- display: grid;
420
- grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
421
328
  gap: 1rem;
422
329
  }
423
330
  .rf-nav--cards .rf-nav-item {
@@ -426,8 +333,6 @@
426
333
  font-size: inherit;
427
334
  }
428
335
  .rf-nav--cards .rf-nav-item__link {
429
- display: flex;
430
- flex-direction: column;
431
336
  gap: 0.5rem;
432
337
  padding: 1.25rem;
433
338
  background: var(--rf-color-surface, var(--rf-color-bg));
@@ -436,7 +341,6 @@
436
341
  color: var(--rf-color-text);
437
342
  text-decoration: none;
438
343
  transition: border-color 150ms ease, transform 150ms ease, box-shadow 150ms ease;
439
- height: 100%;
440
344
  }
441
345
  .rf-nav--cards .rf-nav-item__link:hover {
442
346
  border-color: var(--rf-color-primary);
@@ -445,60 +349,31 @@
445
349
  box-shadow: var(--rf-shadow-sm, 0 2px 6px rgba(0, 0, 0, 0.05));
446
350
  }
447
351
  .rf-nav--cards .rf-nav-item__icon {
448
- width: 1.5rem;
449
- height: 1.5rem;
450
352
  color: var(--rf-color-primary);
451
353
  margin-bottom: 0.25rem;
452
354
  }
453
355
  .rf-nav--cards .rf-nav-item__title {
454
- font-size: 1rem;
455
- font-weight: 600;
356
+ font-size: var(--rf-text);
357
+ font-weight: var(--rf-weight-semibold);
456
358
  color: var(--rf-color-text);
457
359
  }
458
360
  .rf-nav--cards .rf-nav-item__description {
459
- font-size: 0.85rem;
361
+ font-size: var(--rf-text-sm);
460
362
  color: var(--rf-color-muted);
461
- line-height: 1.5;
462
- }
463
-
464
- @media (max-width: 500px) {
465
- .rf-nav--cards > ul,
466
- .rf-nav--cards > .rf-nav__top-level > ul,
467
- .rf-nav--cards .rf-nav-group > ul {
468
- grid-template-columns: 1fr;
469
- }
363
+ line-height: var(--rf-leading-normal);
470
364
  }
471
365
 
472
366
  /* ─── Per-item description (SPEC-054, any layout) ─────────────────────── */
473
367
 
474
368
  .rf-nav-item__description {
475
- display: block;
476
- font-size: 0.8125rem;
369
+ font-size: var(--rf-text-sm);
477
370
  color: var(--rf-color-muted);
478
- line-height: 1.4;
371
+ line-height: var(--rf-leading-snug);
479
372
  margin-top: 0.125rem;
480
373
  }
481
374
 
482
375
  /* ─── Menubar group slots (SPEC-054 rich panel content) ──────────────── */
483
376
 
484
- /* Rich menubar panels: when the panel contains intro / nested nav / footer
485
- * blocks, it auto-sizes to fit content rather than the narrow flat dropdown
486
- * default. */
487
- .rf-nav--menubar .rf-nav-group__panel:has(.rf-nav-group__intro),
488
- .rf-nav--menubar .rf-nav-group__panel:has(.rf-nav-group__footer),
489
- .rf-nav--menubar .rf-nav-group__panel:has(.rf-nav) {
490
- min-width: 20rem;
491
- max-width: 36rem;
492
- }
493
-
494
- /* When the panel contains a nested columns nav with explicit column wrappers,
495
- * widen the cap so each column has room for a one-line description rather
496
- * than wrapping to three or four. */
497
- .rf-nav--menubar .rf-nav-group__panel:has(.rf-nav--columns > div[data-name="column"]) {
498
- min-width: 36rem;
499
- max-width: 56rem;
500
- }
501
-
502
377
  /* Nested columns nav inside a menubar panel: render as a distinct surface
503
378
  * card so the column grid reads as a grouped block rather than bleeding
504
379
  * into the panel's chrome. Resets the standalone columns padding (which
@@ -521,10 +396,9 @@
521
396
  padding: 0;
522
397
  }
523
398
  .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link {
524
- display: block;
525
399
  padding: 0.75rem;
526
400
  color: var(--rf-color-text);
527
- font-weight: 500;
401
+ font-weight: var(--rf-weight-medium);
528
402
  border-radius: var(--rf-radius-sm);
529
403
  }
530
404
  .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link:hover {
@@ -540,7 +414,7 @@
540
414
  background: var(--rf-color-surface-active);
541
415
  }
542
416
  .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link .rf-nav-item__description {
543
- font-weight: 400;
417
+ font-weight: var(--rf-weight-normal);
544
418
  color: var(--rf-color-muted);
545
419
  }
546
420
 
@@ -563,7 +437,7 @@
563
437
  * muted lead-in above the panel content. */
564
438
  .rf-nav-group__intro p:only-child {
565
439
  margin: 0;
566
- font-size: 0.75rem;
440
+ font-size: var(--rf-text-xs);
567
441
  color: var(--rf-color-muted);
568
442
  }
569
443
 
@@ -572,12 +446,12 @@
572
446
  }
573
447
  .rf-nav-group__footer p {
574
448
  margin: 0;
575
- font-size: 0.8125rem;
449
+ font-size: var(--rf-text-sm);
576
450
  color: var(--rf-color-muted);
577
451
  }
578
452
  .rf-nav-group__footer a {
579
453
  color: var(--rf-color-primary);
580
- font-weight: 500;
454
+ font-weight: var(--rf-weight-medium);
581
455
  }
582
456
 
583
457
  /* ─── Multi-section columns (SPEC-054 columns flow rule) ──────────────── */
@@ -588,60 +462,30 @@
588
462
  .rf-nav--columns .rf-nav-group__column,
589
463
  .rf-nav--columns .rf-nav__column,
590
464
  .rf-nav--columns > div[data-name="column"] {
591
- display: flex;
592
- flex-direction: column;
593
465
  gap: 1.25rem;
594
466
  }
595
467
 
596
- /* Multi-section columns mode: when the author has placed explicit `---`
597
- * dividers, the structure already declares the column count. Use
598
- * grid-auto-flow:column so each `data-name="column"` wrapper becomes its own
599
- * track — this expands the container to fit the tracks rather than
600
- * collapsing to one column when the container is narrow (e.g. nested inside
601
- * a menubar panel at its min-width). */
602
- .rf-nav--columns:has(> div[data-name="column"]) {
603
- display: grid;
604
- grid-template-columns: unset;
605
- grid-auto-flow: column;
606
- grid-auto-columns: minmax(14rem, 1fr);
607
- }
608
-
609
468
  /* Stepped collapse: at four columns × 14rem min + gaps the grid needs ~62rem
610
469
  * of width, so below ~900px the explicit-column flow would overflow. Step
611
470
  * down to a 2×N grid before going single-column at the narrowest breakpoint. */
612
- @media (max-width: 900px) {
613
- .rf-nav--columns:has(> div[data-name="column"]) {
614
- grid-auto-flow: row;
615
- grid-auto-columns: unset;
616
- grid-template-columns: repeat(2, minmax(0, 1fr));
617
- }
618
- }
619
471
 
620
472
  @media (max-width: 600px) {
621
473
  .rf-nav--columns:has(> div[data-name="column"]) {
622
- grid-auto-flow: row;
623
- grid-auto-columns: unset;
624
474
  /* Keep two columns on mobile. `minmax(0, 1fr)` lets columns shrink
625
475
  * below their min-content width so long link labels don't push the
626
476
  * grid wider than the viewport and trigger horizontal scroll. */
627
- grid-template-columns: repeat(2, minmax(0, 1fr));
628
477
  }
629
478
  }
630
479
 
631
480
  /* ─── Strip layout (SPEC-054 compact secondary nav) ───────────────────── */
632
481
 
633
482
  .rf-nav--strip {
634
- display: flex;
635
- flex-wrap: wrap;
636
483
  gap: 0.5rem 1rem;
637
484
  padding: 0.5rem 0;
638
- font-size: 0.8125rem;
485
+ font-size: var(--rf-text-sm);
639
486
  }
640
487
  .rf-nav--strip ul {
641
- display: flex;
642
- flex-wrap: wrap;
643
488
  gap: 0.5rem 1rem;
644
- list-style: none;
645
489
  padding: 0;
646
490
  margin: 0;
647
491
  }
@@ -649,10 +493,9 @@
649
493
  padding: 0;
650
494
  }
651
495
  .rf-nav--strip .rf-nav-item__link {
652
- display: inline-block;
653
496
  padding: 0.25rem 0;
654
497
  color: var(--rf-color-muted);
655
- font-size: 0.8125rem;
498
+ font-size: var(--rf-text-sm);
656
499
  border-radius: 0;
657
500
  background: transparent;
658
501
  }
@@ -669,7 +512,7 @@
669
512
  * compact-but-still-tap-friendly. */
670
513
  .rf-nav-group__footer .rf-nav--strip {
671
514
  padding: 0;
672
- font-size: 0.75rem;
515
+ font-size: var(--rf-text-xs);
673
516
  }
674
517
 
675
518
  /* ─── Mobile menubar: nested columns collapse ─────────────────────────── */
@@ -686,9 +529,6 @@
686
529
  background: transparent;
687
530
  border: 0;
688
531
  border-radius: 0;
689
- grid-auto-flow: row;
690
- grid-auto-columns: unset;
691
- grid-template-columns: 1fr;
692
532
  }
693
533
  /* Tighter padding + bolder weight matches the visual rhythm of the
694
534
  * regular flat menubar group items above. Hover swaps to a text-colour
@@ -696,27 +536,12 @@
696
536
  * highlighted bands as the user scrolls. */
697
537
  .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link {
698
538
  padding: 0.25rem 0.75rem;
699
- font-weight: 500;
539
+ font-weight: var(--rf-weight-medium);
700
540
  }
701
541
  .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link:hover {
702
542
  background: transparent;
703
543
  color: var(--rf-color-primary);
704
544
  }
705
- /* Descriptions are space-eaters in a vertical drawer — hide them and let
706
- * the link title carry the line on its own. */
707
- .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__description {
708
- display: none;
709
- }
710
- /* Rich-panel min-widths (20rem / 36rem) above aren't viewport-gated and
711
- * would push the drawer wider than the mobile viewport. The drawer
712
- * renders the menubar as a flat vertical list, so no min-width is
713
- * needed — clamp to fit. Placed after the rich-panel rules so source
714
- * order wins the cascade at equal specificity. */
715
- .rf-nav--menubar .rf-nav-group__panel:has(.rf-nav-group__intro),
716
- .rf-nav--menubar .rf-nav-group__panel:has(.rf-nav-group__footer),
717
- .rf-nav--menubar .rf-nav-group__panel:has(.rf-nav),
718
- .rf-nav--menubar .rf-nav-group__panel:has(.rf-nav--columns > div[data-name="column"]) {
719
- min-width: 0;
720
- max-width: 100%;
721
- }
545
+ }
546
+
722
547
  }
@@ -1,16 +1,15 @@
1
+ @layer skin {
1
2
  /* Organization */
2
3
  .rf-organization__type {
3
- font-size: 0.75rem;
4
- font-weight: 400;
4
+ font-size: var(--rf-text-xs);
5
+ font-weight: var(--rf-weight-normal);
5
6
  text-transform: uppercase;
6
- letter-spacing: 0.05em;
7
+ letter-spacing: var(--rf-tracking-wider);
7
8
  color: var(--rf-color-muted);
8
9
  opacity: 0.6;
9
10
  margin-bottom: 0.5rem;
10
11
  }
11
12
  .rf-organization__body img {
12
- max-height: 80px;
13
- width: auto;
14
13
  margin-bottom: 1rem;
15
14
  }
16
15
  .rf-organization__body ul,
@@ -19,3 +18,5 @@
19
18
  }
20
19
  .rf-organization__body a { color: var(--rf-color-primary); }
21
20
  .rf-organization__body a:hover { color: var(--rf-color-primary-hover); }
21
+
22
+ }
@@ -1,3 +1,4 @@
1
+ @layer skin {
1
2
  /* PageSection */
2
3
  .rf-page-section {
3
4
  padding: 3rem 0;
@@ -7,15 +8,13 @@
7
8
  margin-top: 0;
8
9
  }
9
10
  .rf-page-section--split {
10
- display: grid;
11
- grid-template-columns: 1fr 1fr;
12
11
  gap: 3rem;
13
- align-items: start;
14
12
  }
15
13
 
16
14
  @media (max-width: 768px) {
17
15
  .rf-page-section--split {
18
- grid-template-columns: 1fr;
19
16
  gap: 1.5rem;
20
17
  }
21
18
  }
19
+
20
+ }