@refrakt-md/lumina 0.32.0 → 0.34.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 (142) hide show
  1. package/base.css +29 -29
  2. package/contracts/structures.json +58 -60
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js.map +1 -1
  5. package/dist/icons.d.ts.map +1 -1
  6. package/dist/icons.js +57 -57
  7. package/dist/icons.js.map +1 -1
  8. package/dist/presets/catppuccin.js.map +1 -1
  9. package/dist/presets/dracula.js.map +1 -1
  10. package/dist/presets/gruvbox.js.map +1 -1
  11. package/dist/presets/niwaki.js.map +1 -1
  12. package/dist/presets/nord.js.map +1 -1
  13. package/dist/presets/one-dark.js.map +1 -1
  14. package/dist/presets/solarized.js.map +1 -1
  15. package/dist/presets/tideline.d.ts.map +1 -1
  16. package/dist/presets/tideline.js +20 -4
  17. package/dist/presets/tideline.js.map +1 -1
  18. package/dist/presets/tokyo-night.js.map +1 -1
  19. package/dist/tokens.js.map +1 -1
  20. package/index.css +124 -124
  21. package/package.json +5 -5
  22. package/presets.json +61 -13
  23. package/styles/base/attributes.css +32 -13
  24. package/styles/dimensions/checklist.css +45 -46
  25. package/styles/dimensions/cover.css +71 -51
  26. package/styles/dimensions/density.css +69 -65
  27. package/styles/dimensions/frame.css +116 -57
  28. package/styles/dimensions/metadata.css +110 -103
  29. package/styles/dimensions/motion.css +42 -13
  30. package/styles/dimensions/reading.css +27 -27
  31. package/styles/dimensions/sections.css +44 -45
  32. package/styles/dimensions/sequence.css +56 -57
  33. package/styles/dimensions/state.css +8 -2
  34. package/styles/dimensions/substrate.css +82 -58
  35. package/styles/dimensions/surfaces.css +65 -62
  36. package/styles/elements/blockquote.css +24 -25
  37. package/styles/elements/code.css +72 -71
  38. package/styles/elements/table.css +36 -37
  39. package/styles/global.css +163 -121
  40. package/styles/layouts/blog.css +219 -218
  41. package/styles/layouts/default.css +168 -167
  42. package/styles/layouts/docs.css +121 -122
  43. package/styles/layouts/mobile.css +54 -55
  44. package/styles/layouts/on-this-page.css +46 -47
  45. package/styles/layouts/plan.css +248 -247
  46. package/styles/layouts/search.css +142 -140
  47. package/styles/layouts/split.css +45 -45
  48. package/styles/layouts/theme-toggle.css +33 -31
  49. package/styles/layouts/version-switcher.css +38 -37
  50. package/styles/runes/accordion.css +90 -81
  51. package/styles/runes/aggregate.css +50 -39
  52. package/styles/runes/annotate.css +46 -45
  53. package/styles/runes/api.css +22 -23
  54. package/styles/runes/audio.css +140 -141
  55. package/styles/runes/badge.css +12 -13
  56. package/styles/runes/bar.css +4 -5
  57. package/styles/runes/bento.css +73 -62
  58. package/styles/runes/bg.css +62 -47
  59. package/styles/runes/blog.css +89 -90
  60. package/styles/runes/bond.css +49 -50
  61. package/styles/runes/breadcrumb.css +34 -35
  62. package/styles/runes/budget.css +126 -127
  63. package/styles/runes/bug.css +28 -27
  64. package/styles/runes/card.css +63 -60
  65. package/styles/runes/carousel.css +15 -15
  66. package/styles/runes/cast.css +50 -51
  67. package/styles/runes/changelog.css +45 -46
  68. package/styles/runes/character.css +31 -32
  69. package/styles/runes/chart.css +194 -106
  70. package/styles/runes/codegroup.css +109 -100
  71. package/styles/runes/collection.css +87 -86
  72. package/styles/runes/compare.css +38 -39
  73. package/styles/runes/comparison.css +205 -179
  74. package/styles/runes/conversation.css +36 -33
  75. package/styles/runes/cta.css +135 -132
  76. package/styles/runes/datatable.css +84 -83
  77. package/styles/runes/decision.css +25 -26
  78. package/styles/runes/design-context.css +21 -23
  79. package/styles/runes/details.css +26 -27
  80. package/styles/runes/diagram.css +28 -29
  81. package/styles/runes/diff.css +75 -72
  82. package/styles/runes/drawer.css +276 -198
  83. package/styles/runes/embed.css +20 -21
  84. package/styles/runes/event.css +35 -36
  85. package/styles/runes/expand.css +43 -34
  86. package/styles/runes/faction.css +47 -48
  87. package/styles/runes/feature.css +119 -112
  88. package/styles/runes/figure.css +11 -12
  89. package/styles/runes/file-ref.css +11 -13
  90. package/styles/runes/form.css +155 -154
  91. package/styles/runes/gallery.css +59 -60
  92. package/styles/runes/grid.css +10 -7
  93. package/styles/runes/hero.css +189 -185
  94. package/styles/runes/hint.css +57 -58
  95. package/styles/runes/howto.css +62 -64
  96. package/styles/runes/itinerary.css +133 -134
  97. package/styles/runes/juxtapose.css +83 -82
  98. package/styles/runes/lore.css +32 -34
  99. package/styles/runes/map.css +106 -99
  100. package/styles/runes/mediatext.css +30 -27
  101. package/styles/runes/milestone.css +98 -97
  102. package/styles/runes/mockup.css +338 -335
  103. package/styles/runes/nav.css +465 -450
  104. package/styles/runes/organization.css +23 -20
  105. package/styles/runes/page-section.css +14 -15
  106. package/styles/runes/pagination.css +45 -44
  107. package/styles/runes/palette.css +78 -80
  108. package/styles/runes/placeholder.css +8 -9
  109. package/styles/runes/plan-history.css +160 -161
  110. package/styles/runes/plan-progress.css +15 -16
  111. package/styles/runes/plan-ref.css +32 -23
  112. package/styles/runes/playlist.css +106 -107
  113. package/styles/runes/plot.css +92 -91
  114. package/styles/runes/preview.css +152 -149
  115. package/styles/runes/pricing.css +133 -123
  116. package/styles/runes/progress.css +32 -27
  117. package/styles/runes/pullquote.css +89 -90
  118. package/styles/runes/realm.css +47 -48
  119. package/styles/runes/recipe.css +112 -114
  120. package/styles/runes/relationships.css +77 -76
  121. package/styles/runes/reveal.css +90 -79
  122. package/styles/runes/sandbox.css +59 -60
  123. package/styles/runes/section.css +57 -50
  124. package/styles/runes/showcase.css +35 -16
  125. package/styles/runes/sidenote.css +30 -27
  126. package/styles/runes/snippet.css +8 -9
  127. package/styles/runes/spacing.css +86 -88
  128. package/styles/runes/spec.css +24 -25
  129. package/styles/runes/steps.css +89 -80
  130. package/styles/runes/storyboard.css +46 -45
  131. package/styles/runes/swatch.css +22 -23
  132. package/styles/runes/symbol.css +117 -118
  133. package/styles/runes/tabs.css +88 -79
  134. package/styles/runes/testimonial.css +43 -44
  135. package/styles/runes/textblock.css +32 -28
  136. package/styles/runes/timeline.css +63 -64
  137. package/styles/runes/tint.css +214 -215
  138. package/styles/runes/toc.css +40 -41
  139. package/styles/runes/track.css +89 -90
  140. package/styles/runes/typography.css +89 -91
  141. package/styles/runes/work.css +47 -36
  142. package/styles/runes/xref.css +21 -22
@@ -1,547 +1,562 @@
1
1
  @layer skin {
2
- /* Nav */
3
- .rf-nav {
4
- padding: 0.5rem 0;
5
- }
6
- .rf-nav ul {
7
- padding: 0;
8
- margin: 0;
9
- }
10
- .rf-nav li {
11
- padding: 0.0625rem 0;
12
- }
13
- .rf-nav-group {
14
- margin-bottom: 1.75rem;
15
- }
16
- /* Top-level items — product switcher links above groups */
17
- .rf-nav__top-level {
18
- padding-bottom: 1.25rem;
19
- margin-bottom: 1.25rem;
20
- border-bottom: 1px solid var(--rf-color-border);
21
- }
22
- .rf-nav__top-level .rf-nav-item__link {
23
- font-weight: var(--rf-weight-semibold);
24
- font-size: var(--rf-text-sm);
25
- }
26
- .rf-nav-group h2,
27
- .rf-nav-group h3 {
28
- font-size: var(--rf-text-xs);
29
- text-transform: uppercase;
30
- letter-spacing: var(--rf-tracking-wider);
31
- color: var(--rf-color-muted);
32
- margin-top: 0;
33
- margin-bottom: 0.5rem;
34
- padding-left: 0.75rem;
35
- font-weight: var(--rf-weight-semibold);
36
- }
37
- .rf-nav-item__link {
38
- padding: 0.375rem 0.75rem;
39
- border-radius: var(--rf-radius-sm);
40
- color: var(--rf-color-text);
41
- text-decoration: none;
42
- font-size: var(--rf-text-sm);
43
- transition: background-color 150ms ease, color 150ms ease;
44
- }
45
- .rf-nav-item__link:hover {
46
- background: var(--rf-color-surface);
47
- color: var(--rf-color-text);
48
- text-decoration: none;
49
- }
50
- /* SPEC-055: current page receives aria-current="page" at build time
2
+ /* Nav */
3
+ .rf-nav {
4
+ padding: 0.5rem 0;
5
+ }
6
+ .rf-nav ul {
7
+ padding: 0;
8
+ margin: 0;
9
+ }
10
+ .rf-nav li {
11
+ padding: 0.0625rem 0;
12
+ }
13
+ .rf-nav-group {
14
+ margin-bottom: 1.75rem;
15
+ }
16
+ /* Top-level items — product switcher links above groups */
17
+ .rf-nav__top-level {
18
+ padding-bottom: 1.25rem;
19
+ margin-bottom: 1.25rem;
20
+ border-bottom: 1px solid var(--rf-color-border);
21
+ }
22
+ .rf-nav__top-level .rf-nav-item__link {
23
+ font-weight: var(--rf-weight-semibold);
24
+ font-size: var(--rf-text-sm);
25
+ }
26
+ .rf-nav-group h2,
27
+ .rf-nav-group h3 {
28
+ font-size: var(--rf-text-xs);
29
+ text-transform: uppercase;
30
+ letter-spacing: var(--rf-tracking-wider);
31
+ color: var(--rf-color-muted);
32
+ margin-top: 0;
33
+ margin-bottom: 0.5rem;
34
+ padding-left: 0.75rem;
35
+ font-weight: var(--rf-weight-semibold);
36
+ }
37
+ .rf-nav-item__link {
38
+ padding: 0.375rem 0.75rem;
39
+ border-radius: var(--rf-radius-sm);
40
+ color: var(--rf-color-text);
41
+ text-decoration: none;
42
+ font-size: var(--rf-text-sm);
43
+ transition:
44
+ background-color 150ms ease,
45
+ color 150ms ease;
46
+ }
47
+ .rf-nav-item__link:hover {
48
+ background: var(--rf-color-surface);
49
+ color: var(--rf-color-text);
50
+ text-decoration: none;
51
+ }
52
+ /* SPEC-055: current page receives aria-current="page" at build time
51
53
  * (replaces the legacy --active modifier set at runtime by rf-nav). */
52
- .rf-nav-item__link[aria-current="page"] {
53
- background: color-mix(in srgb, var(--rf-color-primary) 8%, transparent);
54
- color: var(--rf-color-primary);
55
- font-weight: var(--rf-weight-semibold);
56
- }
57
- /* SPEC-055: ancestor-of-current-page link — subtler treatment than the
54
+ .rf-nav-item__link[aria-current="page"] {
55
+ background: color-mix(in srgb, var(--rf-color-primary) 8%, transparent);
56
+ color: var(--rf-color-primary);
57
+ font-weight: var(--rf-weight-semibold);
58
+ }
59
+ /* SPEC-055: ancestor-of-current-page link — subtler treatment than the
58
60
  * exact-match aria-current state. Themes can collapse the two into a
59
61
  * single style if they prefer. */
60
- .rf-nav-item__link[data-active="ancestor"] {
61
- color: var(--rf-color-primary);
62
- }
63
- .rf-nav-item {
64
- padding: 0.375rem 0.75rem;
65
- font-size: var(--rf-text-sm);
66
- color: var(--rf-color-muted);
67
- }
62
+ .rf-nav-item__link[data-active="ancestor"] {
63
+ color: var(--rf-color-primary);
64
+ }
65
+ .rf-nav-item {
66
+ padding: 0.375rem 0.75rem;
67
+ font-size: var(--rf-text-sm);
68
+ color: var(--rf-color-muted);
69
+ }
68
70
 
69
- /* Items with an inline badge (recognised by the nav schema and tagged with
71
+ /* Items with an inline badge (recognised by the nav schema and tagged with
70
72
  * data-name="badge") sit on one row so the badge rides alongside the link
71
73
  * instead of wrapping to the next line — the link's `display: block` would
72
74
  * otherwise eat the full row. */
73
- .rf-nav-item:has(> .rf-badge[data-name="badge"]) {
74
- gap: 0.375rem;
75
- padding: 0;
76
- }
75
+ .rf-nav-item:has(> .rf-badge[data-name="badge"]) {
76
+ gap: 0.375rem;
77
+ padding: 0;
78
+ }
77
79
 
78
- /* ─── Collapsible groups (vertical sidebar) ───────────────────────────── */
80
+ /* ─── Collapsible groups (vertical sidebar) ───────────────────────────── */
79
81
 
80
- .rf-nav--collapsible .rf-nav-group h2,
81
- .rf-nav--collapsible .rf-nav-group h3 {
82
- cursor: pointer;
83
- user-select: none;
84
- border-radius: var(--rf-radius-sm);
85
- }
86
- .rf-nav--collapsible .rf-nav-group h2:hover,
87
- .rf-nav--collapsible .rf-nav-group h3:hover {
88
- color: var(--rf-color-text);
89
- }
90
- .rf-nav--collapsible .rf-nav-group h2:focus-visible,
91
- .rf-nav--collapsible .rf-nav-group h3:focus-visible {
92
- outline: 2px solid var(--rf-color-primary);
93
- outline-offset: 2px;
94
- }
95
- .rf-nav--collapsible .rf-nav-group h2::after,
96
- .rf-nav--collapsible .rf-nav-group h3::after {
97
- border-right: 1.5px solid currentColor;
98
- border-bottom: 1.5px solid currentColor;
99
- transition: transform 200ms ease;
100
- margin-right: 0.25rem;
101
- }
102
- /* SPEC-054 wraps the group body in `<div data-name="panel">`. Animate that
82
+ .rf-nav--collapsible .rf-nav-group h2,
83
+ .rf-nav--collapsible .rf-nav-group h3 {
84
+ cursor: pointer;
85
+ user-select: none;
86
+ border-radius: var(--rf-radius-sm);
87
+ }
88
+ .rf-nav--collapsible .rf-nav-group h2:hover,
89
+ .rf-nav--collapsible .rf-nav-group h3:hover {
90
+ color: var(--rf-color-text);
91
+ }
92
+ .rf-nav--collapsible .rf-nav-group h2:focus-visible,
93
+ .rf-nav--collapsible .rf-nav-group h3:focus-visible {
94
+ outline: 2px solid var(--rf-color-primary);
95
+ outline-offset: 2px;
96
+ }
97
+ .rf-nav--collapsible .rf-nav-group h2::after,
98
+ .rf-nav--collapsible .rf-nav-group h3::after {
99
+ border-right: 1.5px solid currentColor;
100
+ border-bottom: 1.5px solid currentColor;
101
+ transition: transform 200ms ease;
102
+ margin-right: 0.25rem;
103
+ }
104
+ /* SPEC-054 wraps the group body in `<div data-name="panel">`. Animate that
103
105
  * wrapper; keep the direct ul/ol selectors as a fallback for older trees
104
106
  * that haven't picked up the panel structure. */
105
- .rf-nav--collapsible .rf-nav-group > .rf-nav-group__panel,
106
- .rf-nav--collapsible .rf-nav-group > ul,
107
- .rf-nav--collapsible .rf-nav-group > ol {
108
- transition: height 200ms ease;
109
- }
110
-
111
- @media (prefers-reduced-motion: reduce) {
112
107
  .rf-nav--collapsible .rf-nav-group > .rf-nav-group__panel,
113
108
  .rf-nav--collapsible .rf-nav-group > ul,
114
- .rf-nav--collapsible .rf-nav-group > ol,
115
- .rf-nav--collapsible .rf-nav-group h2::after,
116
- .rf-nav--collapsible .rf-nav-group h3::after {
117
- transition: none;
109
+ .rf-nav--collapsible .rf-nav-group > ol {
110
+ transition: height 200ms ease;
118
111
  }
119
- }
120
112
 
121
- /* ─── Menubar layout (header) ─────────────────────────────────────────── */
113
+ @media (prefers-reduced-motion: reduce) {
114
+ .rf-nav--collapsible .rf-nav-group > .rf-nav-group__panel,
115
+ .rf-nav--collapsible .rf-nav-group > ul,
116
+ .rf-nav--collapsible .rf-nav-group > ol,
117
+ .rf-nav--collapsible .rf-nav-group h2::after,
118
+ .rf-nav--collapsible .rf-nav-group h3::after {
119
+ transition: none;
120
+ }
121
+ }
122
122
 
123
- .rf-nav--menubar {
124
- padding: 0;
125
- margin: 0;
126
- }
127
- .rf-nav--menubar > .rf-nav__top-level {
128
- padding: 0;
129
- margin: 0;
130
- border: 0;
131
- }
132
- .rf-nav--menubar > .rf-nav__top-level > ul,
133
- .rf-nav--menubar > .rf-nav__top-level ul {
134
- gap: 0.25rem;
135
- margin: 0;
136
- }
137
- .rf-nav--menubar > .rf-nav__top-level li {
138
- padding: 0;
139
- margin: 0;
140
- }
141
- .rf-nav--menubar > .rf-nav__top-level .rf-nav-item__link {
142
- padding: 0.375rem 0.75rem;
143
- font-weight: var(--rf-weight-medium);
144
- font-size: var(--rf-text-sm);
145
- border-radius: var(--rf-radius-sm);
146
- color: var(--rf-color-muted);
147
- transition: background-color 150ms ease, color 150ms ease;
148
- }
149
- .rf-nav--menubar > .rf-nav__top-level .rf-nav-item__link:hover {
150
- background: var(--rf-color-surface);
151
- color: var(--rf-color-text);
152
- }
153
- .rf-nav--menubar .rf-nav-group {
154
- margin: 0;
155
- }
156
- .rf-nav--menubar .rf-nav-group h2,
157
- .rf-nav--menubar .rf-nav-group h3 {
158
- margin: 0;
159
- padding: 0.375rem 0.75rem;
160
- font-size: var(--rf-text-sm);
161
- font-weight: var(--rf-weight-medium);
162
- line-height: inherit;
163
- text-transform: none;
164
- letter-spacing: normal;
165
- color: var(--rf-color-muted);
166
- cursor: pointer;
167
- user-select: none;
168
- border-radius: var(--rf-radius-sm);
169
- transition: background-color 150ms ease, color 150ms ease;
170
- }
171
- .rf-nav--menubar .rf-nav-group h2:hover,
172
- .rf-nav--menubar .rf-nav-group h3:hover,
173
- .rf-nav--menubar .rf-nav-group[data-open="true"] h2,
174
- .rf-nav--menubar .rf-nav-group[data-open="true"] h3 {
175
- background: var(--rf-color-surface);
176
- color: var(--rf-color-text);
177
- }
178
- /* The dropdown panel is the <div data-name="panel"> wrapper added by the
179
- * nav schema's buildGroupTag. Positioning + visibility live on this
180
- * wrapper so the rule works equally well for simple <ul> dropdowns and
181
- * rich panels containing nested navs / intro / footer slots. */
182
- .rf-nav--menubar .rf-nav-group > .rf-nav-group__panel {
183
- padding: 0.5rem;
184
- background: var(--rf-color-bg);
185
- border: 1px solid var(--rf-color-border);
186
- border-radius: var(--rf-radius-md);
187
- box-shadow: var(--rf-shadow-md, 0 4px 12px rgba(0, 0, 0, 0.08));
188
- transition: opacity 150ms ease, visibility 150ms ease, transform 150ms ease;
189
- }
190
- /* Inside the panel, lists render naturally (no extra positioning). */
191
- .rf-nav--menubar .rf-nav-group__panel ul {
192
- padding: 0;
193
- margin: 0;
194
- }
195
- .rf-nav--menubar .rf-nav-group__panel li {
196
- padding: 0;
197
- }
198
- /* Flat dropdown items: force the link to fill the panel's content width so
199
- * the hover hit-area is the whole row rather than just the text. Scoped to
200
- * `> ul > li > a` so it only catches flat panels — nested columns navs
201
- * (which sit inside `.rf-nav--columns`) keep their own item styling. */
202
- .rf-nav--menubar .rf-nav-group__panel > ul > li > .rf-nav-item__link {
203
- padding: 0.5rem 0.75rem;
204
- }
205
- .rf-nav--menubar .rf-nav-group .rf-nav-item__link {
206
- font-size: var(--rf-text-sm);
207
- font-weight: var(--rf-weight-normal);
208
- }
209
- .rf-nav--menubar > nav,
210
- .rf-nav--menubar {
211
- gap: 0.25rem;
212
- }
123
+ /* ─── Menubar layout (header) ─────────────────────────────────────────── */
213
124
 
214
- @media (max-width: 768px) {
215
125
  .rf-nav--menubar {
216
- gap: 0;
126
+ padding: 0;
127
+ margin: 0;
128
+ }
129
+ .rf-nav--menubar > .rf-nav__top-level {
130
+ padding: 0;
131
+ margin: 0;
132
+ border: 0;
217
133
  }
218
- .rf-nav--menubar > .rf-nav__top-level > ul {
219
- gap: 0;
134
+ .rf-nav--menubar > .rf-nav__top-level > ul,
135
+ .rf-nav--menubar > .rf-nav__top-level ul {
136
+ gap: 0.25rem;
137
+ margin: 0;
138
+ }
139
+ .rf-nav--menubar > .rf-nav__top-level li {
140
+ padding: 0;
141
+ margin: 0;
220
142
  }
221
143
  .rf-nav--menubar > .rf-nav__top-level .rf-nav-item__link {
222
- padding: 0.5rem 0.75rem;
144
+ padding: 0.375rem 0.75rem;
145
+ font-weight: var(--rf-weight-medium);
146
+ font-size: var(--rf-text-sm);
147
+ border-radius: var(--rf-radius-sm);
148
+ color: var(--rf-color-muted);
149
+ transition:
150
+ background-color 150ms ease,
151
+ color 150ms ease;
152
+ }
153
+ .rf-nav--menubar > .rf-nav__top-level .rf-nav-item__link:hover {
154
+ background: var(--rf-color-surface);
155
+ color: var(--rf-color-text);
223
156
  }
224
157
  .rf-nav--menubar .rf-nav-group {
225
- margin: 1rem 0 0;
158
+ margin: 0;
226
159
  }
227
160
  .rf-nav--menubar .rf-nav-group h2,
228
161
  .rf-nav--menubar .rf-nav-group h3 {
229
- font-size: var(--rf-text-xs);
230
- text-transform: uppercase;
231
- letter-spacing: var(--rf-tracking-wider);
162
+ margin: 0;
163
+ padding: 0.375rem 0.75rem;
164
+ font-size: var(--rf-text-sm);
165
+ font-weight: var(--rf-weight-medium);
166
+ line-height: inherit;
167
+ text-transform: none;
168
+ letter-spacing: normal;
232
169
  color: var(--rf-color-muted);
233
- background: transparent;
234
- cursor: default;
235
- padding: 0.5rem 0.75rem 0.25rem;
236
- font-weight: var(--rf-weight-semibold);
170
+ cursor: pointer;
171
+ user-select: none;
172
+ border-radius: var(--rf-radius-sm);
173
+ transition:
174
+ background-color 150ms ease,
175
+ color 150ms ease;
237
176
  }
238
177
  .rf-nav--menubar .rf-nav-group h2:hover,
239
178
  .rf-nav--menubar .rf-nav-group h3:hover,
240
179
  .rf-nav--menubar .rf-nav-group[data-open="true"] h2,
241
180
  .rf-nav--menubar .rf-nav-group[data-open="true"] h3 {
242
- background: transparent;
243
- color: var(--rf-color-muted);
181
+ background: var(--rf-color-surface);
182
+ color: var(--rf-color-text);
244
183
  }
184
+ /* The dropdown panel is the <div data-name="panel"> wrapper added by the
185
+ * nav schema's buildGroupTag. Positioning + visibility live on this
186
+ * wrapper so the rule works equally well for simple <ul> dropdowns and
187
+ * rich panels containing nested navs / intro / footer slots. */
245
188
  .rf-nav--menubar .rf-nav-group > .rf-nav-group__panel {
189
+ padding: 0.5rem;
190
+ background: var(--rf-color-bg);
191
+ border: 1px solid var(--rf-color-border);
192
+ border-radius: var(--rf-radius-md);
193
+ box-shadow: var(--rf-shadow-md, 0 4px 12px rgba(0, 0, 0, 0.08));
194
+ transition:
195
+ opacity 150ms ease,
196
+ visibility 150ms ease,
197
+ transform 150ms ease;
198
+ }
199
+ /* Inside the panel, lists render naturally (no extra positioning). */
200
+ .rf-nav--menubar .rf-nav-group__panel ul {
246
201
  padding: 0;
247
- background: transparent;
248
- border: 0;
249
- box-shadow: none;
202
+ margin: 0;
203
+ }
204
+ .rf-nav--menubar .rf-nav-group__panel li {
205
+ padding: 0;
206
+ }
207
+ /* Flat dropdown items: force the link to fill the panel's content width so
208
+ * the hover hit-area is the whole row rather than just the text. Scoped to
209
+ * `> ul > li > a` so it only catches flat panels — nested columns navs
210
+ * (which sit inside `.rf-nav--columns`) keep their own item styling. */
211
+ .rf-nav--menubar .rf-nav-group__panel > ul > li > .rf-nav-item__link {
212
+ padding: 0.5rem 0.75rem;
213
+ }
214
+ .rf-nav--menubar .rf-nav-group .rf-nav-item__link {
215
+ font-size: var(--rf-text-sm);
216
+ font-weight: var(--rf-weight-normal);
217
+ }
218
+ .rf-nav--menubar > nav,
219
+ .rf-nav--menubar {
220
+ gap: 0.25rem;
250
221
  }
251
- }
252
222
 
253
- /* ─── Columns layout (footer) ─────────────────────────────────────────── */
223
+ @media (max-width: 768px) {
224
+ .rf-nav--menubar {
225
+ gap: 0;
226
+ }
227
+ .rf-nav--menubar > .rf-nav__top-level > ul {
228
+ gap: 0;
229
+ }
230
+ .rf-nav--menubar > .rf-nav__top-level .rf-nav-item__link {
231
+ padding: 0.5rem 0.75rem;
232
+ }
233
+ .rf-nav--menubar .rf-nav-group {
234
+ margin: 1rem 0 0;
235
+ }
236
+ .rf-nav--menubar .rf-nav-group h2,
237
+ .rf-nav--menubar .rf-nav-group h3 {
238
+ font-size: var(--rf-text-xs);
239
+ text-transform: uppercase;
240
+ letter-spacing: var(--rf-tracking-wider);
241
+ color: var(--rf-color-muted);
242
+ background: transparent;
243
+ cursor: default;
244
+ padding: 0.5rem 0.75rem 0.25rem;
245
+ font-weight: var(--rf-weight-semibold);
246
+ }
247
+ .rf-nav--menubar .rf-nav-group h2:hover,
248
+ .rf-nav--menubar .rf-nav-group h3:hover,
249
+ .rf-nav--menubar .rf-nav-group[data-open="true"] h2,
250
+ .rf-nav--menubar .rf-nav-group[data-open="true"] h3 {
251
+ background: transparent;
252
+ color: var(--rf-color-muted);
253
+ }
254
+ .rf-nav--menubar .rf-nav-group > .rf-nav-group__panel {
255
+ padding: 0;
256
+ background: transparent;
257
+ border: 0;
258
+ box-shadow: none;
259
+ }
260
+ }
254
261
 
255
- .rf-nav--columns {
256
- gap: 2rem;
257
- padding: 1.5rem 0;
258
- }
259
- .rf-nav--columns .rf-nav__top-level {
260
- padding-bottom: 1rem;
261
- margin-bottom: 0;
262
- border-bottom: 0;
263
- }
264
- .rf-nav--columns .rf-nav-group {
265
- margin: 0;
266
- }
267
- .rf-nav--columns .rf-nav-group h2,
268
- .rf-nav--columns .rf-nav-group h3 {
269
- padding-left: 0;
270
- margin-bottom: 0.75rem;
271
- color: var(--rf-color-text);
272
- font-size: var(--rf-text-xs);
273
- }
274
- .rf-nav--columns .rf-nav-item__link {
275
- padding: 0.25rem 0;
276
- color: var(--rf-color-muted);
277
- }
278
- .rf-nav--columns .rf-nav-item__link:hover {
279
- background: transparent;
280
- color: var(--rf-color-text);
281
- }
282
- /* Standalone columns (footer, section landing) use a text-only treatment
262
+ /* ─── Columns layout (footer) ─────────────────────────────────────────── */
263
+
264
+ .rf-nav--columns {
265
+ gap: 2rem;
266
+ padding: 1.5rem 0;
267
+ }
268
+ .rf-nav--columns .rf-nav__top-level {
269
+ padding-bottom: 1rem;
270
+ margin-bottom: 0;
271
+ border-bottom: 0;
272
+ }
273
+ .rf-nav--columns .rf-nav-group {
274
+ margin: 0;
275
+ }
276
+ .rf-nav--columns .rf-nav-group h2,
277
+ .rf-nav--columns .rf-nav-group h3 {
278
+ padding-left: 0;
279
+ margin-bottom: 0.75rem;
280
+ color: var(--rf-color-text);
281
+ font-size: var(--rf-text-xs);
282
+ }
283
+ .rf-nav--columns .rf-nav-item__link {
284
+ padding: 0.25rem 0;
285
+ color: var(--rf-color-muted);
286
+ }
287
+ .rf-nav--columns .rf-nav-item__link:hover {
288
+ background: transparent;
289
+ color: var(--rf-color-text);
290
+ }
291
+ /* Standalone columns (footer, section landing) use a text-only treatment
283
292
  * for the active item — the generic `.rf-nav-item__link[aria-current="page"]`
284
293
  * surface tint would compete with the column layout's quiet rhythm. The
285
294
  * nested-in-menubar case re-enables the tint below at higher specificity. */
286
- .rf-nav--columns .rf-nav-item__link[aria-current="page"] {
287
- background: transparent;
288
- }
295
+ .rf-nav--columns .rf-nav-item__link[aria-current="page"] {
296
+ background: transparent;
297
+ }
289
298
 
290
- @media (max-width: 600px) {
291
- .rf-nav--columns {
292
- /* Keep two columns on mobile. `minmax(0, 1fr)` lets columns shrink
299
+ @media (max-width: 600px) {
300
+ .rf-nav--columns {
301
+ /* Keep two columns on mobile. `minmax(0, 1fr)` lets columns shrink
293
302
  * below their min-content width so long link labels don't push the
294
303
  * grid wider than the viewport and trigger horizontal scroll. */
295
- gap: 1.25rem 1.5rem;
304
+ gap: 1.25rem 1.5rem;
305
+ }
306
+ .rf-nav--columns .rf-nav-item__link {
307
+ overflow-wrap: anywhere;
308
+ }
296
309
  }
297
- .rf-nav--columns .rf-nav-item__link {
298
- overflow-wrap: anywhere;
299
- }
300
- }
301
310
 
302
- /* ─── Cards layout (section landing) ──────────────────────────────────── */
311
+ /* ─── Cards layout (section landing) ──────────────────────────────────── */
303
312
 
304
- .rf-nav--cards {
305
- padding: 0;
306
- }
307
- .rf-nav--cards > .rf-nav__top-level {
308
- padding: 0;
309
- margin: 0 0 1.5rem;
310
- border: 0;
311
- }
312
- .rf-nav--cards > .rf-nav__top-level > ul,
313
- .rf-nav--cards > ul {
314
- gap: 1rem;
315
- padding: 0;
316
- margin: 0;
317
- }
318
- .rf-nav--cards .rf-nav-group {
319
- margin: 0 0 2rem;
320
- }
321
- .rf-nav--cards .rf-nav-group h2,
322
- .rf-nav--cards .rf-nav-group h3 {
323
- font-size: var(--rf-text-sm);
324
- padding-left: 0;
325
- margin-bottom: 1rem;
326
- }
327
- .rf-nav--cards .rf-nav-group > ul {
328
- gap: 1rem;
329
- }
330
- .rf-nav--cards .rf-nav-item {
331
- padding: 0;
332
- color: inherit;
333
- font-size: inherit;
334
- }
335
- .rf-nav--cards .rf-nav-item__link {
336
- gap: 0.5rem;
337
- padding: 1.25rem;
338
- background: var(--rf-color-surface, var(--rf-color-bg));
339
- border: 1px solid var(--rf-color-border);
340
- border-radius: var(--rf-radius-md);
341
- color: var(--rf-color-text);
342
- text-decoration: none;
343
- transition: border-color 150ms ease, transform 150ms ease, box-shadow 150ms ease;
344
- }
345
- .rf-nav--cards .rf-nav-item__link:hover {
346
- border-color: var(--rf-color-primary);
347
- background: var(--rf-color-surface, var(--rf-color-bg));
348
- transform: translateY(-1px);
349
- box-shadow: var(--rf-shadow-sm, 0 2px 6px rgba(0, 0, 0, 0.05));
350
- }
351
- .rf-nav--cards .rf-nav-item__icon {
352
- color: var(--rf-color-primary);
353
- margin-bottom: 0.25rem;
354
- }
355
- .rf-nav--cards .rf-nav-item__title {
356
- font-size: var(--rf-text);
357
- font-weight: var(--rf-weight-semibold);
358
- color: var(--rf-color-text);
359
- }
360
- .rf-nav--cards .rf-nav-item__description {
361
- font-size: var(--rf-text-sm);
362
- color: var(--rf-color-muted);
363
- line-height: var(--rf-leading-normal);
364
- }
313
+ .rf-nav--cards {
314
+ padding: 0;
315
+ }
316
+ .rf-nav--cards > .rf-nav__top-level {
317
+ padding: 0;
318
+ margin: 0 0 1.5rem;
319
+ border: 0;
320
+ }
321
+ .rf-nav--cards > .rf-nav__top-level > ul,
322
+ .rf-nav--cards > ul {
323
+ gap: 1rem;
324
+ padding: 0;
325
+ margin: 0;
326
+ }
327
+ .rf-nav--cards .rf-nav-group {
328
+ margin: 0 0 2rem;
329
+ }
330
+ .rf-nav--cards .rf-nav-group h2,
331
+ .rf-nav--cards .rf-nav-group h3 {
332
+ font-size: var(--rf-text-sm);
333
+ padding-left: 0;
334
+ margin-bottom: 1rem;
335
+ }
336
+ .rf-nav--cards .rf-nav-group > ul {
337
+ gap: 1rem;
338
+ }
339
+ .rf-nav--cards .rf-nav-item {
340
+ padding: 0;
341
+ color: inherit;
342
+ font-size: inherit;
343
+ }
344
+ .rf-nav--cards .rf-nav-item__link {
345
+ gap: 0.5rem;
346
+ padding: 1.25rem;
347
+ background: var(--rf-color-surface, var(--rf-color-bg));
348
+ border: 1px solid var(--rf-color-border);
349
+ border-radius: var(--rf-radius-md);
350
+ color: var(--rf-color-text);
351
+ text-decoration: none;
352
+ transition:
353
+ border-color 150ms ease,
354
+ transform 150ms ease,
355
+ box-shadow 150ms ease;
356
+ }
357
+ .rf-nav--cards .rf-nav-item__link:hover {
358
+ border-color: var(--rf-color-primary);
359
+ background: var(--rf-color-surface, var(--rf-color-bg));
360
+ transform: translateY(-1px);
361
+ box-shadow: var(--rf-shadow-sm, 0 2px 6px rgba(0, 0, 0, 0.05));
362
+ }
363
+ .rf-nav--cards .rf-nav-item__icon {
364
+ color: var(--rf-color-primary);
365
+ margin-bottom: 0.25rem;
366
+ }
367
+ .rf-nav--cards .rf-nav-item__title {
368
+ font-size: var(--rf-text);
369
+ font-weight: var(--rf-weight-semibold);
370
+ color: var(--rf-color-text);
371
+ }
372
+ .rf-nav--cards .rf-nav-item__description {
373
+ font-size: var(--rf-text-sm);
374
+ color: var(--rf-color-muted);
375
+ line-height: var(--rf-leading-normal);
376
+ }
365
377
 
366
- /* ─── Per-item description (SPEC-054, any layout) ─────────────────────── */
378
+ /* ─── Per-item description (SPEC-054, any layout) ─────────────────────── */
367
379
 
368
- .rf-nav-item__description {
369
- font-size: var(--rf-text-sm);
370
- color: var(--rf-color-muted);
371
- line-height: var(--rf-leading-snug);
372
- margin-top: 0.125rem;
373
- }
380
+ .rf-nav-item__description {
381
+ font-size: var(--rf-text-sm);
382
+ color: var(--rf-color-muted);
383
+ line-height: var(--rf-leading-snug);
384
+ margin-top: 0.125rem;
385
+ }
374
386
 
375
- /* ─── Menubar group slots (SPEC-054 rich panel content) ──────────────── */
387
+ /* ─── Menubar group slots (SPEC-054 rich panel content) ──────────────── */
376
388
 
377
- /* Nested columns nav inside a menubar panel: render as a distinct surface
389
+ /* Nested columns nav inside a menubar panel: render as a distinct surface
378
390
  * card so the column grid reads as a grouped block rather than bleeding
379
391
  * into the panel's chrome. Resets the standalone columns padding (which
380
392
  * assumes a footer-like context) and tightens the gap for the tighter
381
393
  * dropdown box. */
382
- .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns {
383
- padding: 0.75rem;
384
- gap: 1rem;
385
- background: var(--rf-color-surface);
386
- border: 1px solid var(--rf-color-border);
387
- border-radius: var(--rf-radius-sm);
388
- }
394
+ .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns {
395
+ padding: 0.75rem;
396
+ gap: 1rem;
397
+ background: var(--rf-color-surface);
398
+ border: 1px solid var(--rf-color-border);
399
+ border-radius: var(--rf-radius-sm);
400
+ }
389
401
 
390
- /* Items inside a nested menubar columns nav: render the whole link as one
402
+ /* Items inside a nested menubar columns nav: render the whole link as one
391
403
  * generously padded click target with the title on top in regular text
392
404
  * colour and the description stacked below in muted colour. The description
393
405
  * `<span>` lives inside the `<a>` (see navItem transform), so styling on
394
406
  * the link covers both lines. */
395
- .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item {
396
- padding: 0;
397
- }
398
- .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link {
399
- padding: 0.75rem;
400
- color: var(--rf-color-text);
401
- font-weight: var(--rf-weight-medium);
402
- border-radius: var(--rf-radius-sm);
403
- }
404
- .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link:hover {
405
- background: var(--rf-color-surface-hover);
406
- color: var(--rf-color-text);
407
- }
408
- /* Re-enable a neutral surface tint on the active item inside a menubar
407
+ .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item {
408
+ padding: 0;
409
+ }
410
+ .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link {
411
+ padding: 0.75rem;
412
+ color: var(--rf-color-text);
413
+ font-weight: var(--rf-weight-medium);
414
+ border-radius: var(--rf-radius-sm);
415
+ }
416
+ .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link:hover {
417
+ background: var(--rf-color-surface-hover);
418
+ color: var(--rf-color-text);
419
+ }
420
+ /* Re-enable a neutral surface tint on the active item inside a menubar
409
421
  * dropdown — the standalone-columns override above zeroes the background,
410
422
  * but here it helps the current page stand out from peers in a tight
411
423
  * panel. Uses the purpose-built interactive-surface tokens so the contrast
412
424
  * direction stays correct in dark mode. */
413
- .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link[aria-current="page"] {
414
- background: var(--rf-color-surface-active);
415
- }
416
- .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link .rf-nav-item__description {
417
- font-weight: var(--rf-weight-normal);
418
- color: var(--rf-color-muted);
419
- }
425
+ .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link[aria-current="page"] {
426
+ background: var(--rf-color-surface-active);
427
+ }
428
+ .rf-nav--menubar
429
+ .rf-nav-group__panel
430
+ .rf-nav--columns
431
+ .rf-nav-item__link
432
+ .rf-nav-item__description {
433
+ font-weight: var(--rf-weight-normal);
434
+ color: var(--rf-color-muted);
435
+ }
420
436
 
421
- /* Intro / footer slots inside a menubar panel get airy padding so the
437
+ /* Intro / footer slots inside a menubar panel get airy padding so the
422
438
  * eyebrow / "see all" links breathe inside the dropdown frame. */
423
- .rf-nav--menubar .rf-nav-group__panel > .rf-nav-group__intro {
424
- margin: 0 0 0.75rem;
425
- padding: 0.5rem 0.75rem 0;
426
- }
427
- .rf-nav--menubar .rf-nav-group__panel > .rf-nav-group__footer {
428
- margin: 0.75rem 0 0;
429
- padding: 0 0.75rem 0.5rem;
430
- }
439
+ .rf-nav--menubar .rf-nav-group__panel > .rf-nav-group__intro {
440
+ margin: 0 0 0.75rem;
441
+ padding: 0.5rem 0.75rem 0;
442
+ }
443
+ .rf-nav--menubar .rf-nav-group__panel > .rf-nav-group__footer {
444
+ margin: 0.75rem 0 0;
445
+ padding: 0 0.75rem 0.5rem;
446
+ }
431
447
 
432
- .rf-nav-group__intro {
433
- margin: 0 0 0.75rem;
434
- }
448
+ .rf-nav-group__intro {
449
+ margin: 0 0 0.75rem;
450
+ }
435
451
 
436
- /* Eyebrow intro: a plain paragraph in the intro slot renders as a small
452
+ /* Eyebrow intro: a plain paragraph in the intro slot renders as a small
437
453
  * muted lead-in above the panel content. */
438
- .rf-nav-group__intro p:only-child {
439
- margin: 0;
440
- font-size: var(--rf-text-xs);
441
- color: var(--rf-color-muted);
442
- }
454
+ .rf-nav-group__intro p:only-child {
455
+ margin: 0;
456
+ font-size: var(--rf-text-xs);
457
+ color: var(--rf-color-muted);
458
+ }
443
459
 
444
- .rf-nav-group__footer {
445
- margin: 0.75rem 0 0;
446
- }
447
- .rf-nav-group__footer p {
448
- margin: 0;
449
- font-size: var(--rf-text-sm);
450
- color: var(--rf-color-muted);
451
- }
452
- .rf-nav-group__footer a {
453
- color: var(--rf-color-primary);
454
- font-weight: var(--rf-weight-medium);
455
- }
460
+ .rf-nav-group__footer {
461
+ margin: 0.75rem 0 0;
462
+ }
463
+ .rf-nav-group__footer p {
464
+ margin: 0;
465
+ font-size: var(--rf-text-sm);
466
+ color: var(--rf-color-muted);
467
+ }
468
+ .rf-nav-group__footer a {
469
+ color: var(--rf-color-primary);
470
+ font-weight: var(--rf-weight-medium);
471
+ }
456
472
 
457
- /* ─── Multi-section columns (SPEC-054 columns flow rule) ──────────────── */
473
+ /* ─── Multi-section columns (SPEC-054 columns flow rule) ──────────────── */
458
474
 
459
- /* When the columns layout has <hr> separators, groups are bucketed into
475
+ /* When the columns layout has <hr> separators, groups are bucketed into
460
476
  * .rf-nav-group__column wrappers (or .rf-nav__column at the nav level for
461
477
  * headingless mode). Each column stacks one or more sections vertically. */
462
- .rf-nav--columns .rf-nav-group__column,
463
- .rf-nav--columns .rf-nav__column,
464
- .rf-nav--columns > div[data-name="column"] {
465
- gap: 1.25rem;
466
- }
478
+ .rf-nav--columns .rf-nav-group__column,
479
+ .rf-nav--columns .rf-nav__column,
480
+ .rf-nav--columns > div[data-name="column"] {
481
+ gap: 1.25rem;
482
+ }
467
483
 
468
- /* Stepped collapse: at four columns × 14rem min + gaps the grid needs ~62rem
484
+ /* Stepped collapse: at four columns × 14rem min + gaps the grid needs ~62rem
469
485
  * of width, so below ~900px the explicit-column flow would overflow. Step
470
486
  * down to a 2×N grid before going single-column at the narrowest breakpoint. */
471
487
 
472
- @media (max-width: 600px) {
473
- .rf-nav--columns:has(> div[data-name="column"]) {
474
- /* Keep two columns on mobile. `minmax(0, 1fr)` lets columns shrink
488
+ @media (max-width: 600px) {
489
+ .rf-nav--columns:has(> div[data-name="column"]) {
490
+ /* Keep two columns on mobile. `minmax(0, 1fr)` lets columns shrink
475
491
  * below their min-content width so long link labels don't push the
476
492
  * grid wider than the viewport and trigger horizontal scroll. */
493
+ }
477
494
  }
478
- }
479
495
 
480
- /* ─── Strip layout (SPEC-054 compact secondary nav) ───────────────────── */
496
+ /* ─── Strip layout (SPEC-054 compact secondary nav) ───────────────────── */
481
497
 
482
- .rf-nav--strip {
483
- gap: 0.5rem 1rem;
484
- padding: 0.5rem 0;
485
- font-size: var(--rf-text-sm);
486
- }
487
- .rf-nav--strip ul {
488
- gap: 0.5rem 1rem;
489
- padding: 0;
490
- margin: 0;
491
- }
492
- .rf-nav--strip li {
493
- padding: 0;
494
- }
495
- .rf-nav--strip .rf-nav-item__link {
496
- padding: 0.25rem 0;
497
- color: var(--rf-color-muted);
498
- font-size: var(--rf-text-sm);
499
- border-radius: 0;
500
- background: transparent;
501
- }
502
- .rf-nav--strip .rf-nav-item__link:hover {
503
- color: var(--rf-color-text);
504
- background: transparent;
505
- }
506
- .rf-nav--strip .rf-nav-item__link[aria-current="page"] {
507
- color: var(--rf-color-primary);
508
- background: transparent;
509
- }
498
+ .rf-nav--strip {
499
+ gap: 0.5rem 1rem;
500
+ padding: 0.5rem 0;
501
+ font-size: var(--rf-text-sm);
502
+ }
503
+ .rf-nav--strip ul {
504
+ gap: 0.5rem 1rem;
505
+ padding: 0;
506
+ margin: 0;
507
+ }
508
+ .rf-nav--strip li {
509
+ padding: 0;
510
+ }
511
+ .rf-nav--strip .rf-nav-item__link {
512
+ padding: 0.25rem 0;
513
+ color: var(--rf-color-muted);
514
+ font-size: var(--rf-text-sm);
515
+ border-radius: 0;
516
+ background: transparent;
517
+ }
518
+ .rf-nav--strip .rf-nav-item__link:hover {
519
+ color: var(--rf-color-text);
520
+ background: transparent;
521
+ }
522
+ .rf-nav--strip .rf-nav-item__link[aria-current="page"] {
523
+ color: var(--rf-color-primary);
524
+ background: transparent;
525
+ }
510
526
 
511
- /* When a strip nav is nested inside a menubar panel footer slot, render
527
+ /* When a strip nav is nested inside a menubar panel footer slot, render
512
528
  * compact-but-still-tap-friendly. */
513
- .rf-nav-group__footer .rf-nav--strip {
514
- padding: 0;
515
- font-size: var(--rf-text-xs);
516
- }
529
+ .rf-nav-group__footer .rf-nav--strip {
530
+ padding: 0;
531
+ font-size: var(--rf-text-xs);
532
+ }
517
533
 
518
- /* ─── Mobile menubar: nested columns collapse ─────────────────────────── */
534
+ /* ─── Mobile menubar: nested columns collapse ─────────────────────────── */
519
535
 
520
- /* Placed at the end of the file so the source order beats the desktop
536
+ /* Placed at the end of the file so the source order beats the desktop
521
537
  * nested-columns rules at equal specificity. On a collapsed menubar
522
538
  * drawer (≤ 768px), drop the columns nav's surface card chrome and
523
539
  * flatten to a single-column flow so each item visually matches a
524
540
  * regular flat-dropdown item rather than a card-styled grid cell. */
525
- @media (max-width: 768px) {
526
- .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns {
527
- padding: 0;
528
- gap: 0;
529
- background: transparent;
530
- border: 0;
531
- border-radius: 0;
532
- }
533
- /* Tighter padding + bolder weight matches the visual rhythm of the
541
+ @media (max-width: 768px) {
542
+ .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns {
543
+ padding: 0;
544
+ gap: 0;
545
+ background: transparent;
546
+ border: 0;
547
+ border-radius: 0;
548
+ }
549
+ /* Tighter padding + bolder weight matches the visual rhythm of the
534
550
  * regular flat menubar group items above. Hover swaps to a text-colour
535
551
  * change rather than a surface tint so the drawer doesn't fill with
536
552
  * highlighted bands as the user scrolls. */
537
- .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link {
538
- padding: 0.25rem 0.75rem;
539
- font-weight: var(--rf-weight-medium);
553
+ .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link {
554
+ padding: 0.25rem 0.75rem;
555
+ font-weight: var(--rf-weight-medium);
556
+ }
557
+ .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link:hover {
558
+ background: transparent;
559
+ color: var(--rf-color-primary);
560
+ }
540
561
  }
541
- .rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link:hover {
542
- background: transparent;
543
- color: var(--rf-color-primary);
544
- }
545
- }
546
-
547
562
  }