@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.
- package/base.css +29 -29
- package/contracts/structures.json +58 -60
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +57 -57
- package/dist/icons.js.map +1 -1
- package/dist/presets/catppuccin.js.map +1 -1
- package/dist/presets/dracula.js.map +1 -1
- package/dist/presets/gruvbox.js.map +1 -1
- package/dist/presets/niwaki.js.map +1 -1
- package/dist/presets/nord.js.map +1 -1
- package/dist/presets/one-dark.js.map +1 -1
- package/dist/presets/solarized.js.map +1 -1
- package/dist/presets/tideline.d.ts.map +1 -1
- package/dist/presets/tideline.js +20 -4
- package/dist/presets/tideline.js.map +1 -1
- package/dist/presets/tokyo-night.js.map +1 -1
- package/dist/tokens.js.map +1 -1
- package/index.css +124 -124
- package/package.json +5 -5
- package/presets.json +61 -13
- package/styles/base/attributes.css +32 -13
- package/styles/dimensions/checklist.css +45 -46
- package/styles/dimensions/cover.css +71 -51
- package/styles/dimensions/density.css +69 -65
- package/styles/dimensions/frame.css +116 -57
- package/styles/dimensions/metadata.css +110 -103
- package/styles/dimensions/motion.css +42 -13
- package/styles/dimensions/reading.css +27 -27
- package/styles/dimensions/sections.css +44 -45
- package/styles/dimensions/sequence.css +56 -57
- package/styles/dimensions/state.css +8 -2
- package/styles/dimensions/substrate.css +82 -58
- package/styles/dimensions/surfaces.css +65 -62
- package/styles/elements/blockquote.css +24 -25
- package/styles/elements/code.css +72 -71
- package/styles/elements/table.css +36 -37
- package/styles/global.css +163 -121
- package/styles/layouts/blog.css +219 -218
- package/styles/layouts/default.css +168 -167
- package/styles/layouts/docs.css +121 -122
- package/styles/layouts/mobile.css +54 -55
- package/styles/layouts/on-this-page.css +46 -47
- package/styles/layouts/plan.css +248 -247
- package/styles/layouts/search.css +142 -140
- package/styles/layouts/split.css +45 -45
- package/styles/layouts/theme-toggle.css +33 -31
- package/styles/layouts/version-switcher.css +38 -37
- package/styles/runes/accordion.css +90 -81
- package/styles/runes/aggregate.css +50 -39
- package/styles/runes/annotate.css +46 -45
- package/styles/runes/api.css +22 -23
- package/styles/runes/audio.css +140 -141
- package/styles/runes/badge.css +12 -13
- package/styles/runes/bar.css +4 -5
- package/styles/runes/bento.css +73 -62
- package/styles/runes/bg.css +62 -47
- package/styles/runes/blog.css +89 -90
- package/styles/runes/bond.css +49 -50
- package/styles/runes/breadcrumb.css +34 -35
- package/styles/runes/budget.css +126 -127
- package/styles/runes/bug.css +28 -27
- package/styles/runes/card.css +63 -60
- package/styles/runes/carousel.css +15 -15
- package/styles/runes/cast.css +50 -51
- package/styles/runes/changelog.css +45 -46
- package/styles/runes/character.css +31 -32
- package/styles/runes/chart.css +194 -106
- package/styles/runes/codegroup.css +109 -100
- package/styles/runes/collection.css +87 -86
- package/styles/runes/compare.css +38 -39
- package/styles/runes/comparison.css +205 -179
- package/styles/runes/conversation.css +36 -33
- package/styles/runes/cta.css +135 -132
- package/styles/runes/datatable.css +84 -83
- package/styles/runes/decision.css +25 -26
- package/styles/runes/design-context.css +21 -23
- package/styles/runes/details.css +26 -27
- package/styles/runes/diagram.css +28 -29
- package/styles/runes/diff.css +75 -72
- package/styles/runes/drawer.css +276 -198
- package/styles/runes/embed.css +20 -21
- package/styles/runes/event.css +35 -36
- package/styles/runes/expand.css +43 -34
- package/styles/runes/faction.css +47 -48
- package/styles/runes/feature.css +119 -112
- package/styles/runes/figure.css +11 -12
- package/styles/runes/file-ref.css +11 -13
- package/styles/runes/form.css +155 -154
- package/styles/runes/gallery.css +59 -60
- package/styles/runes/grid.css +10 -7
- package/styles/runes/hero.css +189 -185
- package/styles/runes/hint.css +57 -58
- package/styles/runes/howto.css +62 -64
- package/styles/runes/itinerary.css +133 -134
- package/styles/runes/juxtapose.css +83 -82
- package/styles/runes/lore.css +32 -34
- package/styles/runes/map.css +106 -99
- package/styles/runes/mediatext.css +30 -27
- package/styles/runes/milestone.css +98 -97
- package/styles/runes/mockup.css +338 -335
- package/styles/runes/nav.css +465 -450
- package/styles/runes/organization.css +23 -20
- package/styles/runes/page-section.css +14 -15
- package/styles/runes/pagination.css +45 -44
- package/styles/runes/palette.css +78 -80
- package/styles/runes/placeholder.css +8 -9
- package/styles/runes/plan-history.css +160 -161
- package/styles/runes/plan-progress.css +15 -16
- package/styles/runes/plan-ref.css +32 -23
- package/styles/runes/playlist.css +106 -107
- package/styles/runes/plot.css +92 -91
- package/styles/runes/preview.css +152 -149
- package/styles/runes/pricing.css +133 -123
- package/styles/runes/progress.css +32 -27
- package/styles/runes/pullquote.css +89 -90
- package/styles/runes/realm.css +47 -48
- package/styles/runes/recipe.css +112 -114
- package/styles/runes/relationships.css +77 -76
- package/styles/runes/reveal.css +90 -79
- package/styles/runes/sandbox.css +59 -60
- package/styles/runes/section.css +57 -50
- package/styles/runes/showcase.css +35 -16
- package/styles/runes/sidenote.css +30 -27
- package/styles/runes/snippet.css +8 -9
- package/styles/runes/spacing.css +86 -88
- package/styles/runes/spec.css +24 -25
- package/styles/runes/steps.css +89 -80
- package/styles/runes/storyboard.css +46 -45
- package/styles/runes/swatch.css +22 -23
- package/styles/runes/symbol.css +117 -118
- package/styles/runes/tabs.css +88 -79
- package/styles/runes/testimonial.css +43 -44
- package/styles/runes/textblock.css +32 -28
- package/styles/runes/timeline.css +63 -64
- package/styles/runes/tint.css +214 -215
- package/styles/runes/toc.css +40 -41
- package/styles/runes/track.css +89 -90
- package/styles/runes/typography.css +89 -91
- package/styles/runes/work.css +47 -36
- package/styles/runes/xref.css +21 -22
package/styles/runes/nav.css
CHANGED
|
@@ -1,547 +1,562 @@
|
|
|
1
1
|
@layer skin {
|
|
2
|
-
/* Nav */
|
|
3
|
-
.rf-nav {
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
.rf-nav ul {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
.rf-nav li {
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
.rf-nav-group {
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
/* Top-level items — product switcher links above groups */
|
|
17
|
-
.rf-nav__top-level {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
.rf-nav__top-level .rf-nav-item__link {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
.rf-nav-group h2,
|
|
27
|
-
.rf-nav-group h3 {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
.rf-nav-item__link {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
62
|
-
}
|
|
63
|
-
.rf-nav-item {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
75
|
-
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
.rf-nav--collapsible .rf-nav-group h2:hover,
|
|
87
|
-
.rf-nav--collapsible .rf-nav-group h3:hover {
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
.rf-nav--collapsible .rf-nav-group h2:focus-visible,
|
|
91
|
-
.rf-nav--collapsible .rf-nav-group h3:focus-visible {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
95
|
-
.rf-nav--collapsible .rf-nav-group h2::after,
|
|
96
|
-
.rf-nav--collapsible .rf-nav-group h3::after {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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:
|
|
158
|
+
margin: 0;
|
|
226
159
|
}
|
|
227
160
|
.rf-nav--menubar .rf-nav-group h2,
|
|
228
161
|
.rf-nav--menubar .rf-nav-group h3 {
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
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
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
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:
|
|
243
|
-
color: var(--rf-color-
|
|
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
|
-
|
|
248
|
-
|
|
249
|
-
|
|
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
|
-
|
|
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
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
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
|
-
|
|
288
|
-
}
|
|
295
|
+
.rf-nav--columns .rf-nav-item__link[aria-current="page"] {
|
|
296
|
+
background: transparent;
|
|
297
|
+
}
|
|
289
298
|
|
|
290
|
-
@media (max-width: 600px) {
|
|
291
|
-
|
|
292
|
-
|
|
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
|
-
|
|
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
|
-
|
|
306
|
-
}
|
|
307
|
-
.rf-nav--cards > .rf-nav__top-level {
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
}
|
|
312
|
-
.rf-nav--cards > .rf-nav__top-level > ul,
|
|
313
|
-
.rf-nav--cards > ul {
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
}
|
|
318
|
-
.rf-nav--cards .rf-nav-group {
|
|
319
|
-
|
|
320
|
-
}
|
|
321
|
-
.rf-nav--cards .rf-nav-group h2,
|
|
322
|
-
.rf-nav--cards .rf-nav-group h3 {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
}
|
|
327
|
-
.rf-nav--cards .rf-nav-group > ul {
|
|
328
|
-
|
|
329
|
-
}
|
|
330
|
-
.rf-nav--cards .rf-nav-item {
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
}
|
|
335
|
-
.rf-nav--cards .rf-nav-item__link {
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
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
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
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
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
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
|
-
|
|
397
|
-
}
|
|
398
|
-
.rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link {
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
}
|
|
404
|
-
.rf-nav--menubar .rf-nav-group__panel .rf-nav--columns .rf-nav-item__link:hover {
|
|
405
|
-
|
|
406
|
-
|
|
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
|
-
|
|
415
|
-
}
|
|
416
|
-
.rf-nav--menubar
|
|
417
|
-
|
|
418
|
-
|
|
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
|
-
|
|
425
|
-
|
|
426
|
-
}
|
|
427
|
-
.rf-nav--menubar .rf-nav-group__panel > .rf-nav-group__footer {
|
|
428
|
-
|
|
429
|
-
|
|
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
|
-
|
|
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
|
-
|
|
440
|
-
|
|
441
|
-
|
|
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
|
-
|
|
446
|
-
}
|
|
447
|
-
.rf-nav-group__footer p {
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
}
|
|
452
|
-
.rf-nav-group__footer a {
|
|
453
|
-
|
|
454
|
-
|
|
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
|
-
|
|
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
|
-
|
|
474
|
-
|
|
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
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
}
|
|
487
|
-
.rf-nav--strip ul {
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
}
|
|
492
|
-
.rf-nav--strip li {
|
|
493
|
-
|
|
494
|
-
}
|
|
495
|
-
.rf-nav--strip .rf-nav-item__link {
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
}
|
|
502
|
-
.rf-nav--strip .rf-nav-item__link:hover {
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
}
|
|
506
|
-
.rf-nav--strip .rf-nav-item__link[aria-current="page"] {
|
|
507
|
-
|
|
508
|
-
|
|
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
|
-
|
|
515
|
-
|
|
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
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
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
|
-
|
|
538
|
-
|
|
539
|
-
|
|
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
|
}
|