@refrakt-md/lumina 0.22.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 (130) 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.map +1 -1
  6. package/dist/tokens.js +2 -0
  7. package/dist/tokens.js.map +1 -1
  8. package/index.css +10 -1
  9. package/package.json +5 -4
  10. package/styles/base/attributes.css +6 -7
  11. package/styles/dimensions/checklist.css +6 -35
  12. package/styles/dimensions/cover.css +13 -95
  13. package/styles/dimensions/density.css +3 -0
  14. package/styles/dimensions/frame.css +3 -0
  15. package/styles/dimensions/media.css +14 -61
  16. package/styles/dimensions/metadata.css +24 -74
  17. package/styles/dimensions/sections.css +10 -24
  18. package/styles/dimensions/sequence.css +14 -79
  19. package/styles/dimensions/state.css +39 -56
  20. package/styles/dimensions/substrate.css +3 -0
  21. package/styles/dimensions/surfaces.css +73 -113
  22. package/styles/elements/blockquote.css +3 -2
  23. package/styles/elements/code.css +3 -0
  24. package/styles/elements/table.css +3 -0
  25. package/styles/global.css +9 -48
  26. package/styles/layouts/blog.css +3 -64
  27. package/styles/layouts/default.css +3 -77
  28. package/styles/layouts/docs.css +3 -153
  29. package/styles/layouts/mobile.css +1 -50
  30. package/styles/layouts/on-this-page.css +3 -2
  31. package/styles/layouts/plan.css +3 -134
  32. package/styles/layouts/search.css +3 -68
  33. package/styles/layouts/split.css +24 -169
  34. package/styles/layouts/theme-toggle.css +3 -29
  35. package/styles/layouts/version-switcher.css +3 -4
  36. package/styles/runes/accordion.css +15 -58
  37. package/styles/runes/aggregate.css +3 -12
  38. package/styles/runes/annotate.css +6 -35
  39. package/styles/runes/api.css +3 -0
  40. package/styles/runes/audio.css +3 -41
  41. package/styles/runes/badge.css +3 -0
  42. package/styles/runes/bar.css +3 -0
  43. package/styles/runes/bento.css +16 -159
  44. package/styles/runes/bg.css +3 -37
  45. package/styles/runes/blog.css +3 -5
  46. package/styles/runes/bond.css +3 -23
  47. package/styles/runes/breadcrumb.css +5 -13
  48. package/styles/runes/budget.css +3 -25
  49. package/styles/runes/bug.css +3 -0
  50. package/styles/runes/card.css +24 -92
  51. package/styles/runes/cast.css +5 -22
  52. package/styles/runes/changelog.css +5 -9
  53. package/styles/runes/character.css +3 -17
  54. package/styles/runes/chart.css +10 -52
  55. package/styles/runes/codegroup.css +15 -23
  56. package/styles/runes/collection.css +5 -82
  57. package/styles/runes/compare.css +3 -14
  58. package/styles/runes/comparison.css +7 -34
  59. package/styles/runes/conversation.css +5 -27
  60. package/styles/runes/cta.css +3 -26
  61. package/styles/runes/datatable.css +25 -40
  62. package/styles/runes/decision.css +3 -0
  63. package/styles/runes/design-context.css +3 -2
  64. package/styles/runes/details.css +5 -13
  65. package/styles/runes/diagram.css +5 -13
  66. package/styles/runes/diff.css +5 -88
  67. package/styles/runes/drawer.css +1 -105
  68. package/styles/runes/embed.css +4 -12
  69. package/styles/runes/event.css +3 -1
  70. package/styles/runes/expand.css +5 -40
  71. package/styles/runes/faction.css +3 -9
  72. package/styles/runes/feature.css +4 -32
  73. package/styles/runes/figure.css +5 -24
  74. package/styles/runes/file-ref.css +3 -18
  75. package/styles/runes/form.css +3 -32
  76. package/styles/runes/gallery.css +3 -135
  77. package/styles/runes/grid.css +4 -56
  78. package/styles/runes/hero.css +13 -126
  79. package/styles/runes/hint.css +16 -41
  80. package/styles/runes/howto.css +3 -25
  81. package/styles/runes/itinerary.css +3 -32
  82. package/styles/runes/juxtapose.css +12 -87
  83. package/styles/runes/lore.css +3 -10
  84. package/styles/runes/map.css +3 -36
  85. package/styles/runes/mediatext.css +3 -44
  86. package/styles/runes/milestone.css +3 -16
  87. package/styles/runes/mockup.css +3 -108
  88. package/styles/runes/nav.css +3 -178
  89. package/styles/runes/organization.css +3 -2
  90. package/styles/runes/page-section.css +3 -4
  91. package/styles/runes/pagination.css +5 -37
  92. package/styles/runes/palette.css +3 -22
  93. package/styles/runes/placeholder.css +3 -3
  94. package/styles/runes/plan-history.css +3 -23
  95. package/styles/runes/plan-progress.css +3 -4
  96. package/styles/runes/plan-ref.css +3 -0
  97. package/styles/runes/playlist.css +2 -36
  98. package/styles/runes/plot.css +3 -19
  99. package/styles/runes/preview.css +3 -28
  100. package/styles/runes/pricing.css +7 -25
  101. package/styles/runes/progress.css +6 -25
  102. package/styles/runes/pullquote.css +3 -26
  103. package/styles/runes/realm.css +3 -9
  104. package/styles/runes/recipe.css +3 -27
  105. package/styles/runes/relationships.css +3 -34
  106. package/styles/runes/reveal.css +7 -12
  107. package/styles/runes/sandbox.css +6 -36
  108. package/styles/runes/section.css +4 -18
  109. package/styles/runes/showcase.css +3 -20
  110. package/styles/runes/sidenote.css +3 -2
  111. package/styles/runes/snippet.css +3 -0
  112. package/styles/runes/spacing.css +3 -22
  113. package/styles/runes/spec.css +3 -0
  114. package/styles/runes/steps.css +4 -36
  115. package/styles/runes/storyboard.css +2 -17
  116. package/styles/runes/swatch.css +3 -6
  117. package/styles/runes/symbol.css +6 -4
  118. package/styles/runes/tabs.css +6 -9
  119. package/styles/runes/testimonial.css +5 -6
  120. package/styles/runes/textblock.css +2 -20
  121. package/styles/runes/timeline.css +3 -21
  122. package/styles/runes/tint.css +3 -0
  123. package/styles/runes/toc.css +5 -3
  124. package/styles/runes/track.css +2 -31
  125. package/styles/runes/typography.css +3 -15
  126. package/styles/runes/work.css +3 -0
  127. package/styles/runes/xref.css +3 -1
  128. package/tokens/base.css +13 -0
  129. package/tokens/dark.css +3 -0
  130. package/styles/dimensions/guest-posture.css +0 -27
package/styles/global.css CHANGED
@@ -1,9 +1,11 @@
1
- /* Lumina Theme — Global Base Styles */
2
-
3
- /* Reset */
4
- *, *::before, *::after {
5
- box-sizing: border-box;
6
- }
1
+ @layer skin {
2
+ /* Lumina Theme — Global Base Styles (skin).
3
+ *
4
+ * Structure (box model, zone resets, prose/heading/list/table rhythm, the
5
+ * responsive-image + scroll mechanisms) lives in @refrakt-md/skeleton
6
+ * (styles/global.css) per SPEC-094 §3 / WORK-438. What remains here is skin:
7
+ * typography, colour, native chrome, and the surface treatment of code/pre/
8
+ * tables. */
7
9
 
8
10
  html {
9
11
  font-family: var(--rf-font-sans);
@@ -24,18 +26,12 @@ html {
24
26
  text-size-adjust: 100%;
25
27
  }
26
28
 
27
- body {
28
- margin: 0;
29
- }
30
-
31
29
  /* ─── Theme-aware browser chrome (WORK-351) ─────────────────────────
32
30
  * Make native chrome — scrollbars, form controls, the main viewport
33
31
  * scrollbar — follow the active theme instead of always rendering in
34
32
  * the OS default scheme. */
35
33
 
36
- /* `color-scheme` so the UA paints native widgets/scrollbars per mode.
37
- * Mirrors the dark-token selectors (explicit toggle + system preference
38
- * unless forced light). */
34
+ /* `color-scheme` so the UA paints native widgets/scrollbars per mode. */
39
35
  :root { color-scheme: light; }
40
36
  [data-theme="dark"] { color-scheme: dark; }
41
37
  @media (prefers-color-scheme: dark) {
@@ -98,8 +94,6 @@ body {
98
94
 
99
95
  h1, h2, h3, h4, h5, h6 {
100
96
  line-height: var(--rf-leading-tight);
101
- margin-top: 2em;
102
- margin-bottom: 0.5em;
103
97
  font-weight: var(--rf-weight-semibold);
104
98
  letter-spacing: var(--rf-tracking-tight);
105
99
  }
@@ -109,11 +103,6 @@ h2 { font-size: var(--rf-text-2xl); }
109
103
  h3 { font-size: var(--rf-text-xl); }
110
104
  h4 { font-size: var(--rf-text); }
111
105
 
112
- p {
113
- margin-top: 0;
114
- margin-bottom: 1rem;
115
- }
116
-
117
106
  a {
118
107
  color: var(--rf-color-primary);
119
108
  text-decoration: none;
@@ -140,8 +129,6 @@ pre {
140
129
  color: var(--rf-color-code-text);
141
130
  padding: 1.25rem 1.5rem;
142
131
  border-radius: var(--rf-radius-md);
143
- overflow-x: auto;
144
- margin: 1.5rem 0;
145
132
  font-size: var(--rf-text-sm);
146
133
  line-height: var(--rf-leading-relaxed);
147
134
  border: 1px solid var(--rf-color-border);
@@ -154,35 +141,12 @@ pre code {
154
141
  border-radius: 0;
155
142
  }
156
143
 
157
- img {
158
- max-width: 100%;
159
- height: auto;
160
- }
161
-
162
144
  hr {
163
145
  border: none;
164
146
  border-top: 1px solid var(--rf-color-border);
165
- margin: 2rem 0;
166
- }
167
-
168
- ul, ol {
169
- padding-left: 1.5rem;
170
- margin-top: 0;
171
- margin-bottom: 1rem;
172
- }
173
-
174
- li {
175
- margin-bottom: 0.25rem;
176
- }
177
-
178
- li > p {
179
- margin-bottom: 0.5rem;
180
147
  }
181
148
 
182
149
  table {
183
- width: 100%;
184
- border-collapse: collapse;
185
- margin: 1.5rem 0;
186
150
  font-size: var(--rf-text-sm);
187
151
  }
188
152
 
@@ -202,7 +166,4 @@ td {
202
166
  border-bottom: 1px solid var(--rf-color-border);
203
167
  }
204
168
 
205
- meta {
206
- display: none;
207
169
  }
208
-
@@ -1,3 +1,4 @@
1
+ @layer skin {
1
2
  /* Blog layout */
2
3
 
3
4
  /* The blog header chrome is taller (1.125rem padding + 2rem logo), so
@@ -8,33 +9,18 @@
8
9
  }
9
10
  /* ---- Header ---- */
10
11
  .rf-blog-header {
11
- position: sticky;
12
- top: 0;
13
- z-index: 100;
14
12
  background: var(--rf-color-bg);
15
13
  border-bottom: 1px solid var(--rf-color-border);
16
14
  }
17
15
  .rf-blog-header__inner {
18
- display: flex;
19
- align-items: center;
20
16
  gap: 1rem;
21
17
  padding: 1.125rem 1.5rem;
22
18
  }
23
- .rf-blog-header__inner .rf-search-trigger {
24
- margin-left: auto;
25
- }
26
- .rf-blog-header__inner p ~ p {
27
- order: 1;
28
- }
29
- .rf-blog-header__inner .rf-mobile-menu-btn {
30
- order: 2;
31
- }
32
19
  .rf-blog-header p {
33
20
  margin: 0;
34
21
  line-height: 1;
35
22
  }
36
23
  .rf-blog-header a {
37
- display: inline-block;
38
24
  color: inherit;
39
25
  text-decoration: none;
40
26
  }
@@ -42,20 +28,12 @@
42
28
  text-decoration: none;
43
29
  }
44
30
  .rf-blog-header p:first-child a {
45
- display: inline-flex;
46
- align-items: center;
47
31
  gap: 0.5rem;
48
32
  font-weight: var(--rf-weight-semibold);
49
33
  font-size: var(--rf-text-xl);
50
34
  letter-spacing: var(--rf-tracking-tight);
51
35
  }
52
- .rf-blog-header img,
53
36
  .rf-blog-header p:first-child a > .rf-icon {
54
- height: 2rem;
55
- width: 2rem;
56
- }
57
- .rf-blog-header p:first-child a > .rf-icon {
58
- display: inline-block;
59
37
  vertical-align: middle;
60
38
  color: currentColor;
61
39
  }
@@ -70,27 +48,15 @@
70
48
  color: var(--rf-color-text);
71
49
  }
72
50
  .rf-blog-header__inner p ~ p a svg {
73
- width: 1.1rem;
74
- height: 1.1rem;
75
51
  vertical-align: -0.15em;
76
52
  }
77
53
 
78
54
  /* ---- Layout container ---- */
79
55
  .rf-blog {
80
- max-width: 72rem;
81
- margin: 0 auto;
82
56
  padding: 2.5rem 1.5rem 4rem;
83
57
  }
84
58
  .rf-blog--has-sidebar {
85
- display: grid;
86
- grid-template-columns: 1fr 16rem;
87
59
  gap: 3rem;
88
- align-items: start;
89
- }
90
-
91
- /* ---- Blog index ---- */
92
- .rf-blog-index {
93
- max-width: 42rem;
94
60
  }
95
61
  .rf-blog-index__title {
96
62
  font-size: var(--rf-text-4xl);
@@ -105,18 +71,12 @@
105
71
  line-height: var(--rf-leading-relaxed);
106
72
  color: var(--rf-color-muted);
107
73
  }
108
- .rf-blog-index__body:empty {
109
- display: none;
110
- }
111
74
  .rf-blog-index__posts {
112
- display: flex;
113
- flex-direction: column;
114
75
  gap: 1.5rem;
115
76
  }
116
77
 
117
78
  /* ---- Post card ---- */
118
79
  .rf-blog-card {
119
- display: block;
120
80
  padding: 1.5rem;
121
81
  border: 1px solid var(--rf-color-border);
122
82
  border-radius: var(--rf-radius-md, 0.5rem);
@@ -136,8 +96,6 @@
136
96
  color: var(--rf-color-text);
137
97
  }
138
98
  .rf-blog-card__meta {
139
- display: flex;
140
- align-items: center;
141
99
  gap: 0.75rem;
142
100
  font-size: var(--rf-text-sm);
143
101
  color: var(--rf-color-muted);
@@ -154,8 +112,6 @@
154
112
  color: var(--rf-color-muted);
155
113
  }
156
114
  .rf-blog-card__tags {
157
- display: flex;
158
- flex-wrap: wrap;
159
115
  gap: 0.5rem;
160
116
  margin-bottom: 0.75rem;
161
117
  }
@@ -164,11 +120,6 @@
164
120
  font-weight: var(--rf-weight-semibold);
165
121
  color: var(--rf-color-primary, var(--rf-color-text));
166
122
  }
167
-
168
- /* ---- Article ---- */
169
- .rf-blog-article {
170
- max-width: 42rem;
171
- }
172
123
  .rf-blog-article__header {
173
124
  margin-bottom: 2.5rem;
174
125
  padding-bottom: 1.5rem;
@@ -183,8 +134,6 @@
183
134
  color: var(--rf-color-text);
184
135
  }
185
136
  .rf-blog-article__meta {
186
- display: flex;
187
- align-items: center;
188
137
  gap: 0.75rem;
189
138
  font-size: var(--rf-text-sm);
190
139
  color: var(--rf-color-muted);
@@ -197,8 +146,6 @@
197
146
  margin-right: 0.75rem;
198
147
  }
199
148
  .rf-blog-article__tags {
200
- display: flex;
201
- flex-wrap: wrap;
202
149
  gap: 0.5rem;
203
150
  margin-top: 0.75rem;
204
151
  }
@@ -232,8 +179,6 @@
232
179
 
233
180
  /* ---- Sidebar ---- */
234
181
  .rf-blog-sidebar {
235
- position: sticky;
236
- top: 2.5rem;
237
182
  font-size: var(--rf-text-sm);
238
183
  color: var(--rf-color-muted);
239
184
  }
@@ -249,7 +194,6 @@
249
194
  margin-bottom: 0.5rem;
250
195
  }
251
196
  .rf-blog-sidebar ul {
252
- list-style: none;
253
197
  padding: 0;
254
198
  margin: 0;
255
199
  }
@@ -275,18 +219,13 @@
275
219
 
276
220
  /* ---- Mobile ---- */
277
221
  @media (max-width: 768px) {
278
- .rf-blog-header__inner p ~ p {
279
- display: none;
280
- }
281
- .rf-blog--has-sidebar {
282
- grid-template-columns: 1fr;
283
- }
284
222
  .rf-blog-article__title {
285
223
  font-size: var(--rf-text-3xl);
286
224
  }
287
225
  .rf-blog-sidebar {
288
- position: static;
289
226
  border-top: 1px solid var(--rf-color-border);
290
227
  padding-top: 1.5rem;
291
228
  }
292
229
  }
230
+
231
+ }
@@ -1,30 +1,13 @@
1
+ @layer skin {
1
2
  /* Default layout */
2
3
  .rf-header {
3
- position: sticky;
4
- top: 0;
5
- z-index: 100;
6
4
  background: var(--rf-color-bg);
7
5
  border-bottom: 1px solid var(--rf-color-border);
8
6
  }
9
7
  .rf-header__inner {
10
- display: flex;
11
- align-items: center;
12
8
  gap: 1rem;
13
9
  padding: 0.625rem 1.5rem;
14
10
  }
15
- .rf-header__inner .rf-search-trigger {
16
- margin-left: auto;
17
- order: 1;
18
- }
19
- .rf-header__inner > rf-nav {
20
- order: 3;
21
- }
22
- .rf-header__inner p ~ p {
23
- order: 1;
24
- }
25
- .rf-header__inner .rf-mobile-menu-btn {
26
- order: 3;
27
- }
28
11
  .rf-header p {
29
12
  margin: 0;
30
13
  line-height: 1;
@@ -37,7 +20,6 @@
37
20
  line-height: 1;
38
21
  }
39
22
  .rf-header a {
40
- display: inline-block;
41
23
  color: inherit;
42
24
  text-decoration: none;
43
25
  }
@@ -45,23 +27,12 @@
45
27
  text-decoration: none;
46
28
  }
47
29
  .rf-header p:first-child a {
48
- display: inline-flex;
49
- align-items: center;
50
30
  gap: 0.5rem;
51
31
  font-weight: var(--rf-weight-semibold);
52
32
  font-size: var(--rf-text-xl);
53
33
  letter-spacing: var(--rf-tracking-tight);
54
34
  }
55
- .rf-header img,
56
35
  .rf-header p:first-child a > .rf-icon {
57
- height: 2rem;
58
- width: 2rem;
59
- }
60
- .rf-header img {
61
- width: auto;
62
- }
63
- .rf-header p:first-child a > .rf-icon {
64
- display: inline-block;
65
36
  vertical-align: middle;
66
37
  color: currentColor;
67
38
  }
@@ -76,8 +47,6 @@
76
47
  color: var(--rf-color-text);
77
48
  }
78
49
  .rf-header__inner p ~ p a svg {
79
- width: 1.1rem;
80
- height: 1.1rem;
81
50
  vertical-align: -0.15em;
82
51
  }
83
52
  .rf-page-content {
@@ -86,39 +55,8 @@
86
55
 
87
56
  padding-top: 2.5rem;
88
57
  padding-bottom: 4rem;
89
- container-type: inline-size;
90
- }
91
- /* Markdoc wraps content in <article>; make it the grid container.
92
- 5-track named grid: full | wide | content | wide | full */
93
- .rf-page-content > article {
94
- display: grid;
95
- grid-template-columns:
96
- [full-start] 1fr
97
- [wide-start] minmax(0, var(--rf-wide-inset, 8rem))
98
- [content-start] min(var(--rf-content-max), 100% - var(--rf-content-gutter) * 2)
99
- [content-end] minmax(0, var(--rf-wide-inset, 8rem))
100
- [wide-end] 1fr
101
- [full-end];
102
- }
103
- .rf-page-content > article > * {
104
- grid-column: content;
105
- }
106
-
107
- /* Width constraint via data-width attribute — narrower than content */
108
- .rf-page-content > article > [data-width="compact"] {
109
- max-width: var(--rf-width-compact, 30rem);
110
- margin-inline: auto;
111
- }
112
- .rf-page-content > article > [data-width="narrow"] {
113
- max-width: var(--rf-width-narrow, 40rem);
114
- margin-inline: auto;
115
- }
116
- /* Width breakout via data-width attribute — wider than content */
117
- .rf-page-content > article > [data-width="wide"] {
118
- grid-column: wide;
119
58
  }
120
59
  .rf-page-content > article > [data-width="full"] {
121
- grid-column: full;
122
60
  padding-inline: max(
123
61
  var(--rf-content-gutter, 1.5rem),
124
62
  calc((100% - var(--rf-content-max, 80rem)) / 2)
@@ -126,7 +64,6 @@
126
64
  }
127
65
  /* Tinted sections also break out to full width */
128
66
  .rf-page-content > article > :is([data-tint], [data-color-scheme]):not([data-width]) {
129
- grid-column: full;
130
67
  padding-inline: max(
131
68
  var(--rf-content-gutter, 1.5rem),
132
69
  calc((100% - var(--rf-content-max, 80rem)) / 2)
@@ -219,29 +156,18 @@
219
156
  padding-bottom: 0;
220
157
  }
221
158
 
222
- @media (max-width: 768px) {
223
- .rf-header__inner p ~ p {
224
- display: none;
225
- }
226
- }
227
-
228
159
  /* Site footer */
229
160
  .rf-footer {
230
- display: flex;
231
- flex-direction: column;
232
- align-items: center;
233
161
  padding: 2.5rem 1.5rem 2rem;
234
162
  border-top: 1px solid var(--rf-color-border);
235
163
  background: var(--rf-color-bg);
236
164
  color: var(--rf-color-muted);
237
165
  font-size: var(--rf-text-sm);
238
166
  }
239
- .rf-footer > * {
240
- width: 100%;
241
- max-width: 80rem;
242
- }
243
167
  .rf-footer p {
244
168
  margin: 1.5rem 0 0;
245
169
  font-size: var(--rf-text-xs);
246
170
  color: var(--rf-color-muted);
247
171
  }
172
+
173
+ }
@@ -1,40 +1,20 @@
1
+ @layer skin {
1
2
  /* Docs layout */
2
3
 
3
4
  /* ---- Fixed header ---- */
4
5
  .rf-docs-header {
5
- position: fixed;
6
- top: 0;
7
- left: 0;
8
- right: 0;
9
- z-index: 10;
10
6
  background: var(--rf-color-bg, #fff);
11
7
  border-bottom: 1px solid var(--rf-color-border);
12
8
  }
13
9
  .rf-docs-header__inner {
14
- display: flex;
15
- align-items: center;
16
10
  gap: 1rem;
17
11
  padding: 0.625rem 1.5rem;
18
12
  }
19
- .rf-docs-header__inner .rf-search-trigger {
20
- margin-left: auto;
21
- order: 1;
22
- }
23
- .rf-docs-header__inner > rf-nav {
24
- order: 3;
25
- }
26
- .rf-docs-header__inner p ~ p {
27
- order: 1;
28
- }
29
- .rf-docs-header__inner .rf-mobile-menu-btn {
30
- order: 3;
31
- }
32
13
  .rf-docs-header p {
33
14
  margin: 0;
34
15
  line-height: 1;
35
16
  }
36
17
  .rf-docs-header a {
37
- display: inline-block;
38
18
  color: inherit;
39
19
  text-decoration: none;
40
20
  }
@@ -42,20 +22,12 @@
42
22
  text-decoration: none;
43
23
  }
44
24
  .rf-docs-header p:first-child a {
45
- display: inline-flex;
46
- align-items: center;
47
25
  gap: 0.5rem;
48
26
  font-weight: var(--rf-weight-semibold);
49
27
  font-size: var(--rf-text-xl);
50
28
  letter-spacing: var(--rf-tracking-tight);
51
29
  }
52
- .rf-docs-header img,
53
- .rf-docs-header p:first-child a > .rf-icon {
54
- height: 2rem;
55
- width: 2rem;
56
- }
57
30
  .rf-docs-header p:first-child a > .rf-icon {
58
- display: inline-block;
59
31
  vertical-align: middle;
60
32
  color: currentColor;
61
33
  }
@@ -70,44 +42,14 @@
70
42
  color: var(--rf-color-text);
71
43
  }
72
44
  .rf-docs-header__inner p ~ p a svg {
73
- width: 1.1rem;
74
- height: 1.1rem;
75
45
  vertical-align: -0.15em;
76
46
  }
77
47
 
78
- /* ---- Body wrapper: sidebar + content row ----
79
- * The `body` slot in docsLayout groups sidebar + main so `position: sticky`
80
- * on the sidebar has a containing block that ends *before* the footer.
81
- * When the user scrolls past the wrapper's bottom (i.e. when the footer
82
- * comes into view) sticky releases and the sidebar scrolls away with the
83
- * page rather than overlaying the footer. */
84
- .rf-docs-body {
85
- display: flex;
86
- align-items: flex-start;
87
- }
88
-
89
48
  /* ---- Sticky sidebar ---- */
90
49
  .rf-docs-sidebar {
91
- position: sticky;
92
- top: 3.125rem;
93
- align-self: flex-start;
94
- flex-shrink: 0;
95
- width: 240px;
96
- height: calc(100vh - 3.125rem);
97
- overflow-y: auto;
98
50
  padding: 1.5rem;
99
51
  border-right: 1px solid var(--rf-color-border);
100
52
  background: var(--rf-color-bg, #fff);
101
- z-index: 5;
102
- }
103
- /* Match the sticky offset in the natural-flow position too. The fixed header
104
- * is out of flow so `.rf-docs-body` starts at viewport top; without this
105
- * margin, the sidebar's static position sits at Y=0 with its top 3.125rem
106
- * hidden under the header — visible only when the page scrolls enough for
107
- * sticky to activate. Scoped to `:has(.rf-docs-header)` so layouts without a
108
- * header don't gain an unwanted top gap. */
109
- html:has(.rf-docs-header) .rf-docs-sidebar {
110
- margin-top: 3.125rem;
111
53
  }
112
54
  .rf-docs-sidebar::-webkit-scrollbar {
113
55
  width: 0;
@@ -115,52 +57,14 @@ html:has(.rf-docs-header) .rf-docs-sidebar {
115
57
 
116
58
  /* ---- Content area ---- */
117
59
  .rf-docs-content {
118
- flex: 1;
119
- min-width: 0;
120
60
  padding-top: 4.75rem;
121
61
  padding-bottom: 4rem;
122
- container-type: inline-size;
123
62
  }
124
63
  .rf-docs-content__inner {
125
- max-width: 60rem;
126
- margin: 0 auto;
127
64
  --rf-content-padding: 2.5rem;
128
65
  }
129
66
  .rf-docs-content__inner--has-toc {
130
- display: flex;
131
67
  gap: 6rem;
132
- max-width: calc(60rem + 220px + 6rem);
133
- }
134
- .rf-docs-content__inner--has-toc .rf-docs-content__body {
135
- flex: 1;
136
- min-width: 0;
137
- }
138
-
139
- /* Width-variant grid — mirrors default layout's 5-track grid,
140
- simplified to 3 tracks (no full breakout in docs context).
141
- The wide inset tracks also serve as the content gutter. */
142
- .rf-docs-content__body > div > article {
143
- display: grid;
144
- grid-template-columns:
145
- [wide-start] minmax(var(--rf-content-padding, 2.5rem), var(--rf-docs-wide-inset, 3rem))
146
- [content-start] minmax(0, 1fr)
147
- [content-end] minmax(var(--rf-content-padding, 2.5rem), var(--rf-docs-wide-inset, 3rem))
148
- [wide-end];
149
- }
150
- .rf-docs-content__body > div > article > * {
151
- grid-column: content;
152
- }
153
- .rf-docs-content__body > div > article > [data-width="wide"],
154
- .rf-docs-content__body > div > article > [data-width="full"] {
155
- grid-column: wide;
156
- }
157
- .rf-docs-content__body > div > article > [data-width="compact"] {
158
- max-width: var(--rf-width-compact, 30rem);
159
- margin-inline: auto;
160
- }
161
- .rf-docs-content__body > div > article > [data-width="narrow"] {
162
- max-width: var(--rf-width-narrow, 40rem);
163
- margin-inline: auto;
164
68
  }
165
69
 
166
70
  /* Pagination wrapper sits outside the article grid, so it gets its own
@@ -173,34 +77,18 @@ html:has(.rf-docs-header) .rf-docs-sidebar {
173
77
 
174
78
  /* ---- "On this page" sidebar ---- */
175
79
  .rf-docs-toc {
176
- width: 220px;
177
- flex-shrink: 0;
178
- position: sticky;
179
- top: 5.75rem;
180
- align-self: flex-start;
181
- max-height: calc(100vh - 5.75rem);
182
- overflow-y: auto;
183
80
  padding: 0 1.25rem;
184
81
  }
185
82
  .rf-docs-toc::-webkit-scrollbar {
186
83
  width: 0;
187
84
  }
188
85
 
189
- /* ---- Fixed-header offset ---- */
190
- html:has(.rf-docs-header) {
191
- scroll-padding-top: 5rem;
192
- }
193
-
194
86
  /* ---- Mobile toolbar (hidden on desktop) ---- */
195
87
  .rf-docs-toolbar {
196
- display: none;
197
- align-items: center;
198
88
  gap: 0.75rem;
199
89
  padding: 0.625rem 1rem;
200
90
  border-bottom: 1px solid var(--rf-color-border);
201
91
  background: var(--rf-color-bg, #fff);
202
- max-width: 100%;
203
- overflow: hidden;
204
92
  }
205
93
  .rf-docs-toolbar__hamburger {
206
94
  background: none;
@@ -209,7 +97,6 @@ html:has(.rf-docs-header) {
209
97
  cursor: pointer;
210
98
  color: var(--rf-color-muted);
211
99
  line-height: 0;
212
- flex-shrink: 0;
213
100
  }
214
101
  .rf-docs-toolbar__hamburger:hover {
215
102
  color: var(--rf-color-text);
@@ -222,9 +109,6 @@ html:has(.rf-docs-header) {
222
109
  * combined with `min-width: 0` this is what triggers ellipsis on long
223
110
  * titles. Without basis 0 a long page title overflows the toolbar and
224
111
  * forces horizontal page scroll on narrow viewports. */
225
- flex: 1 1 0;
226
- min-width: 0;
227
- overflow: hidden;
228
112
  text-overflow: ellipsis;
229
113
  white-space: nowrap;
230
114
  }
@@ -241,45 +125,9 @@ html:has(.rf-docs-header) {
241
125
  }
242
126
 
243
127
  /* ---- Hide TOC on medium screens ---- */
244
- @media (max-width: 1100px) {
245
- .rf-docs-toc {
246
- display: none;
247
- }
248
- .rf-docs-content__inner--has-toc {
249
- display: block;
250
- max-width: 60rem;
251
- }
252
- }
253
128
 
254
129
  /* ---- Mobile overrides ---- */
255
130
  @media (max-width: 768px) {
256
- .rf-docs-header {
257
- position: sticky;
258
- top: 0;
259
- }
260
- .rf-docs-header__inner p ~ p {
261
- display: none;
262
- }
263
- /* The toolbar is sticky directly below the header so the hamburger —
264
- which doubles as the open/close trigger for the sidebar-nav panel —
265
- stays reachable while the panel is open or the page is scrolled.
266
- `top` is 1px less than the header height so the two bars overlap by
267
- a pixel — sub-pixel rounding during scroll can otherwise leave a
268
- hairline gap that lets page content shine through.
269
- z-index sits above the .rf-mobile-panel (99) so the hamburger
270
- stays clickable while the panel is open. */
271
- .rf-docs-toolbar {
272
- display: flex;
273
- position: sticky;
274
- top: calc(3.5rem - 1px);
275
- z-index: 100;
276
- }
277
- .rf-mobile-panel--nav {
278
- top: calc(6.25rem - 1px);
279
- }
280
- .rf-docs-sidebar {
281
- display: none;
282
- }
283
131
  .rf-docs-content {
284
132
  padding-top: 2rem;
285
133
  }
@@ -288,3 +136,5 @@ html:has(.rf-docs-header) {
288
136
  --rf-docs-wide-inset: 1.5rem;
289
137
  }
290
138
  }
139
+
140
+ }