@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
|
@@ -1,150 +1,152 @@
|
|
|
1
1
|
@layer skin {
|
|
2
|
-
/* Search trigger button */
|
|
3
|
-
.rf-search-trigger {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
margin: 0;
|
|
36
|
-
padding: 0;
|
|
37
|
-
border: 1px solid var(--rf-color-border);
|
|
38
|
-
border-radius: var(--rf-radius-lg);
|
|
39
|
-
background: var(--rf-color-bg);
|
|
40
|
-
box-shadow: var(--rf-shadow-lg);
|
|
41
|
-
font-family: var(--rf-font-sans);
|
|
42
|
-
}
|
|
43
|
-
.rf-search-dialog::backdrop {
|
|
44
|
-
background: rgba(0, 0, 0, 0.4);
|
|
45
|
-
}
|
|
2
|
+
/* Search trigger button */
|
|
3
|
+
.rf-search-trigger {
|
|
4
|
+
gap: 0.5rem;
|
|
5
|
+
padding: 0.375rem 0.625rem 0.375rem 0.5rem;
|
|
6
|
+
border: 1px solid var(--rf-color-border);
|
|
7
|
+
border-radius: var(--rf-radius-full);
|
|
8
|
+
background: var(--rf-color-surface);
|
|
9
|
+
color: var(--rf-color-muted);
|
|
10
|
+
font-size: var(--rf-text-xs);
|
|
11
|
+
font-family: var(--rf-font-sans);
|
|
12
|
+
cursor: pointer;
|
|
13
|
+
transition:
|
|
14
|
+
border-color 0.15s,
|
|
15
|
+
color 0.15s,
|
|
16
|
+
background 0.15s;
|
|
17
|
+
line-height: 1;
|
|
18
|
+
white-space: nowrap;
|
|
19
|
+
}
|
|
20
|
+
.rf-search-trigger:hover {
|
|
21
|
+
border-color: var(--rf-color-primary);
|
|
22
|
+
color: var(--rf-color-text);
|
|
23
|
+
background: var(--rf-color-surface-hover);
|
|
24
|
+
}
|
|
25
|
+
.rf-search-trigger__kbd {
|
|
26
|
+
padding: 0.125rem 0.375rem;
|
|
27
|
+
border: 1px solid var(--rf-color-border);
|
|
28
|
+
border-radius: var(--rf-radius-sm);
|
|
29
|
+
background: var(--rf-color-bg);
|
|
30
|
+
font-family: var(--rf-font-sans);
|
|
31
|
+
font-size: var(--rf-text-xs);
|
|
32
|
+
line-height: var(--rf-leading-tight);
|
|
33
|
+
color: var(--rf-color-muted);
|
|
34
|
+
}
|
|
46
35
|
|
|
47
|
-
/*
|
|
48
|
-
.rf-search-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
font-size: var(--rf-text);
|
|
61
|
-
font-family: var(--rf-font-sans);
|
|
62
|
-
color: var(--rf-color-text);
|
|
63
|
-
}
|
|
64
|
-
.rf-search-dialog__input::placeholder {
|
|
65
|
-
color: var(--rf-color-muted);
|
|
66
|
-
}
|
|
67
|
-
.rf-search-dialog__esc {
|
|
68
|
-
padding: 0.125rem 0.375rem;
|
|
69
|
-
border: 1px solid var(--rf-color-border);
|
|
70
|
-
border-radius: var(--rf-radius-sm);
|
|
71
|
-
background: var(--rf-color-surface);
|
|
72
|
-
font-family: var(--rf-font-sans);
|
|
73
|
-
font-size: var(--rf-text-xs);
|
|
74
|
-
color: var(--rf-color-muted);
|
|
75
|
-
}
|
|
36
|
+
/* Search dialog */
|
|
37
|
+
.rf-search-dialog {
|
|
38
|
+
margin: 0;
|
|
39
|
+
padding: 0;
|
|
40
|
+
border: 1px solid var(--rf-color-border);
|
|
41
|
+
border-radius: var(--rf-radius-lg);
|
|
42
|
+
background: var(--rf-color-bg);
|
|
43
|
+
box-shadow: var(--rf-shadow-lg);
|
|
44
|
+
font-family: var(--rf-font-sans);
|
|
45
|
+
}
|
|
46
|
+
.rf-search-dialog::backdrop {
|
|
47
|
+
background: rgba(0, 0, 0, 0.4);
|
|
48
|
+
}
|
|
76
49
|
|
|
77
|
-
/*
|
|
78
|
-
.rf-search-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
.
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
border-radius: 2px;
|
|
107
|
-
padding: 0 1px;
|
|
108
|
-
}
|
|
50
|
+
/* Dialog header */
|
|
51
|
+
.rf-search-dialog__header {
|
|
52
|
+
gap: 0.75rem;
|
|
53
|
+
padding: 0.875rem 1rem;
|
|
54
|
+
border-bottom: 1px solid var(--rf-color-border);
|
|
55
|
+
}
|
|
56
|
+
.rf-search-dialog__icon {
|
|
57
|
+
color: var(--rf-color-muted);
|
|
58
|
+
}
|
|
59
|
+
.rf-search-dialog__input {
|
|
60
|
+
border: none;
|
|
61
|
+
outline: none;
|
|
62
|
+
background: transparent;
|
|
63
|
+
font-size: var(--rf-text);
|
|
64
|
+
font-family: var(--rf-font-sans);
|
|
65
|
+
color: var(--rf-color-text);
|
|
66
|
+
}
|
|
67
|
+
.rf-search-dialog__input::placeholder {
|
|
68
|
+
color: var(--rf-color-muted);
|
|
69
|
+
}
|
|
70
|
+
.rf-search-dialog__esc {
|
|
71
|
+
padding: 0.125rem 0.375rem;
|
|
72
|
+
border: 1px solid var(--rf-color-border);
|
|
73
|
+
border-radius: var(--rf-radius-sm);
|
|
74
|
+
background: var(--rf-color-surface);
|
|
75
|
+
font-family: var(--rf-font-sans);
|
|
76
|
+
font-size: var(--rf-text-xs);
|
|
77
|
+
color: var(--rf-color-muted);
|
|
78
|
+
}
|
|
109
79
|
|
|
110
|
-
/*
|
|
111
|
-
.rf-search-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
80
|
+
/* Results */
|
|
81
|
+
.rf-search-dialog__results {
|
|
82
|
+
padding: 0.5rem;
|
|
83
|
+
}
|
|
84
|
+
.rf-search-result {
|
|
85
|
+
padding: 0.625rem 0.75rem;
|
|
86
|
+
border-radius: var(--rf-radius-md);
|
|
87
|
+
text-decoration: none;
|
|
88
|
+
color: var(--rf-color-text);
|
|
89
|
+
cursor: pointer;
|
|
90
|
+
}
|
|
91
|
+
.rf-search-result:hover,
|
|
92
|
+
.rf-search-result[data-active] {
|
|
93
|
+
background: var(--rf-color-surface-hover);
|
|
94
|
+
}
|
|
95
|
+
.rf-search-result__title {
|
|
96
|
+
font-weight: var(--rf-weight-medium);
|
|
97
|
+
font-size: var(--rf-text-sm);
|
|
98
|
+
line-height: var(--rf-leading-snug);
|
|
99
|
+
margin-bottom: 0.125rem;
|
|
100
|
+
}
|
|
101
|
+
.rf-search-result__excerpt {
|
|
102
|
+
font-size: var(--rf-text-xs);
|
|
103
|
+
line-height: var(--rf-leading-normal);
|
|
104
|
+
color: var(--rf-color-muted);
|
|
105
|
+
}
|
|
106
|
+
.rf-search-result__excerpt mark {
|
|
107
|
+
background: var(--rf-color-primary-bg);
|
|
108
|
+
color: var(--rf-color-text);
|
|
109
|
+
border-radius: 2px;
|
|
110
|
+
padding: 0 1px;
|
|
111
|
+
}
|
|
117
112
|
|
|
118
|
-
/*
|
|
119
|
-
.rf-search-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
.rf-search-dialog__footer kbd {
|
|
127
|
-
padding: 0 0.25rem;
|
|
128
|
-
border: 1px solid var(--rf-color-border);
|
|
129
|
-
border-radius: 3px;
|
|
130
|
-
background: var(--rf-color-surface);
|
|
131
|
-
font-family: var(--rf-font-sans);
|
|
132
|
-
font-size: var(--rf-text-xs);
|
|
133
|
-
line-height: var(--rf-leading-snug);
|
|
134
|
-
}
|
|
113
|
+
/* Empty / unavailable state */
|
|
114
|
+
.rf-search-dialog__empty {
|
|
115
|
+
text-align: center;
|
|
116
|
+
padding: 2rem 1rem;
|
|
117
|
+
font-size: var(--rf-text-sm);
|
|
118
|
+
color: var(--rf-color-muted);
|
|
119
|
+
}
|
|
135
120
|
|
|
136
|
-
/*
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
padding: 0.
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
121
|
+
/* Footer */
|
|
122
|
+
.rf-search-dialog__footer {
|
|
123
|
+
gap: 1rem;
|
|
124
|
+
padding: 0.5rem 1rem;
|
|
125
|
+
border-top: 1px solid var(--rf-color-border);
|
|
126
|
+
font-size: var(--rf-text-xs);
|
|
127
|
+
color: var(--rf-color-muted);
|
|
143
128
|
}
|
|
144
|
-
.rf-search-
|
|
145
|
-
|
|
146
|
-
border:
|
|
129
|
+
.rf-search-dialog__footer kbd {
|
|
130
|
+
padding: 0 0.25rem;
|
|
131
|
+
border: 1px solid var(--rf-color-border);
|
|
132
|
+
border-radius: 3px;
|
|
133
|
+
background: var(--rf-color-surface);
|
|
134
|
+
font-family: var(--rf-font-sans);
|
|
135
|
+
font-size: var(--rf-text-xs);
|
|
136
|
+
line-height: var(--rf-leading-snug);
|
|
147
137
|
}
|
|
148
|
-
}
|
|
149
138
|
|
|
139
|
+
/* Mobile */
|
|
140
|
+
@media (max-width: 768px) {
|
|
141
|
+
.rf-search-trigger {
|
|
142
|
+
padding: 0.375rem;
|
|
143
|
+
/* Collapsed to an icon-only button — keep it fully rounded so it reads
|
|
144
|
+
* as a circle matching the adjacent theme toggle, not a small square. */
|
|
145
|
+
border-radius: var(--rf-radius-full);
|
|
146
|
+
}
|
|
147
|
+
.rf-search-dialog[open] {
|
|
148
|
+
border-radius: 0;
|
|
149
|
+
border: none;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
150
152
|
}
|
package/styles/layouts/split.css
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
@layer skin {
|
|
2
|
-
/* Shared media + content layout — skin.
|
|
2
|
+
/* Shared media + content layout — skin.
|
|
3
3
|
*
|
|
4
4
|
* The layout *structure* (start/end grid, top/bottom stack, 3-section placement,
|
|
5
5
|
* the media-zone fill/clip mechanism, responsive collapse) lives in
|
|
@@ -7,24 +7,24 @@
|
|
|
7
7
|
* radius tier, the beside-image depth shadow, the codegroup radius alignment,
|
|
8
8
|
* and the default side-by-side spacing rhythm. */
|
|
9
9
|
|
|
10
|
-
/* Default side-by-side spacing — applies to every rune using the split layout
|
|
10
|
+
/* Default side-by-side spacing — applies to every rune using the split layout
|
|
11
11
|
* (hero, feature, step, realm, faction, etc.). Contained-chrome runes
|
|
12
12
|
* (card, recipe, bento-cell, playlist) override `column-gap` / `row-gap` with
|
|
13
13
|
* higher-specificity selectors to hug their internal media well; everything
|
|
14
14
|
* else inherits this comfortable default so columns don't sit flush. */
|
|
15
|
-
[data-media-position="start"],
|
|
16
|
-
[data-media-position="end"] {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
15
|
+
[data-media-position="start"],
|
|
16
|
+
[data-media-position="end"] {
|
|
17
|
+
column-gap: var(--rf-spacing-lg);
|
|
18
|
+
row-gap: var(--rf-spacing-lg);
|
|
19
|
+
}
|
|
20
20
|
|
|
21
|
-
/* Media guests use the smaller media radius tier so they never read as more
|
|
21
|
+
/* Media guests use the smaller media radius tier so they never read as more
|
|
22
22
|
* rounded than the (larger-radius) container they sit in. */
|
|
23
|
-
[data-section="media"] {
|
|
24
|
-
|
|
25
|
-
}
|
|
23
|
+
[data-section="media"] {
|
|
24
|
+
border-radius: var(--rf-radius-media);
|
|
25
|
+
}
|
|
26
26
|
|
|
27
|
-
/* `data-guest-fit` (emitted from rune config) is the chrome/containment axis:
|
|
27
|
+
/* `data-guest-fit` (emitted from rune config) is the chrome/containment axis:
|
|
28
28
|
*
|
|
29
29
|
* clip — a framed well (card, bento-cell, recipe, playlist). Every guest
|
|
30
30
|
* adopts the slot radius so it reads as one surface with the well.
|
|
@@ -35,44 +35,44 @@
|
|
|
35
35
|
* chrome of its own, so a bare hero image stays rounded).
|
|
36
36
|
*
|
|
37
37
|
* Absence of the attribute reads as `clip` (the historical default). */
|
|
38
|
-
[data-section="media"]:not([data-guest-fit="bleed"]) > * {
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
[data-section="media"]:not([data-guest-fit="bleed"]) .rf-codegroup {
|
|
42
|
-
|
|
43
|
-
}
|
|
38
|
+
[data-section="media"]:not([data-guest-fit="bleed"]) > * {
|
|
39
|
+
border-radius: inherit;
|
|
40
|
+
}
|
|
41
|
+
[data-section="media"]:not([data-guest-fit="bleed"]) .rf-codegroup {
|
|
42
|
+
border-radius: var(--rf-radius-media);
|
|
43
|
+
}
|
|
44
44
|
|
|
45
|
-
/* Bleed host: leaf media adopts the slot radius; a rune guest does not, and the
|
|
45
|
+
/* Bleed host: leaf media adopts the slot radius; a rune guest does not, and the
|
|
46
46
|
* slot drops its own radius so its clip never rounds the guest's corners. */
|
|
47
|
-
[data-section="media"][data-guest-fit="bleed"] > :is(img, video, svg, .rf-placeholder) {
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
[data-section="media"][data-guest-fit="bleed"]:has(> [data-rune]) {
|
|
51
|
-
|
|
52
|
-
}
|
|
47
|
+
[data-section="media"][data-guest-fit="bleed"] > :is(img, video, svg, .rf-placeholder) {
|
|
48
|
+
border-radius: inherit;
|
|
49
|
+
}
|
|
50
|
+
[data-section="media"][data-guest-fit="bleed"]:has(> [data-rune]) {
|
|
51
|
+
border-radius: 0;
|
|
52
|
+
}
|
|
53
53
|
|
|
54
|
-
/* `preview` (negative-margin breakout) and a displaced `showcase` (peek spill)
|
|
54
|
+
/* `preview` (negative-margin breakout) and a displaced `showcase` (peek spill)
|
|
55
55
|
* want the slot fully de-chromed so the bleed reads as edge-to-edge. Juxtapose
|
|
56
56
|
* keeps the slot's rounded corners (it still reads as part of the card surface). */
|
|
57
|
-
[data-section="media"]:is(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
) {
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
[data-section="media"]:is(
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
|
|
57
|
+
[data-section="media"]:is(
|
|
58
|
+
:has(> [data-rune="preview"]),
|
|
59
|
+
:has(> .rf-showcase[data-displace]:not(.rf-showcase--in-bento-cell))
|
|
60
|
+
) {
|
|
61
|
+
border-radius: 0;
|
|
62
|
+
}
|
|
63
|
+
[data-section="media"]:is(
|
|
64
|
+
:has(> [data-rune="preview"]),
|
|
65
|
+
:has(> [data-rune="juxtapose"]),
|
|
66
|
+
:has(> .rf-showcase[data-displace]:not(.rf-showcase--in-bento-cell))
|
|
67
|
+
)
|
|
68
|
+
> * {
|
|
69
|
+
border-radius: 0;
|
|
70
|
+
}
|
|
70
71
|
|
|
71
|
-
/* Beside-layout images get subtle depth. Block runes carry their own visual
|
|
72
|
+
/* Beside-layout images get subtle depth. Block runes carry their own visual
|
|
72
73
|
* weight (topbars, frames) so the shadow is image-only. */
|
|
73
|
-
[data-media-position="start"] > [data-section="media"] > img,
|
|
74
|
-
[data-media-position="end"] > [data-section="media"] > img {
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
|
|
74
|
+
[data-media-position="start"] > [data-section="media"] > img,
|
|
75
|
+
[data-media-position="end"] > [data-section="media"] > img {
|
|
76
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
|
|
77
|
+
}
|
|
78
78
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
@layer skin {
|
|
2
|
-
/* Theme-mode toggle button (SPEC-073).
|
|
2
|
+
/* Theme-mode toggle button (SPEC-073).
|
|
3
3
|
*
|
|
4
4
|
* Layout chrome — a peer of the search trigger, placed in the header/toolbar.
|
|
5
5
|
* The `theme-toggle` behavior cycles auto → light → dark and reflects the
|
|
@@ -8,37 +8,39 @@
|
|
|
8
8
|
* attribute. Chrome (surface fill, full radius, muted colour, primary hover
|
|
9
9
|
* accent) is kept in sync with the search trigger so the two header buttons
|
|
10
10
|
* read as a matched set. */
|
|
11
|
-
.rf-theme-toggle {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
11
|
+
.rf-theme-toggle {
|
|
12
|
+
padding: 0;
|
|
13
|
+
border: 1px solid var(--rf-color-border);
|
|
14
|
+
border-radius: var(--rf-radius-full);
|
|
15
|
+
background: var(--rf-color-surface);
|
|
16
|
+
color: var(--rf-color-muted);
|
|
17
|
+
cursor: pointer;
|
|
18
|
+
transition:
|
|
19
|
+
border-color 0.15s,
|
|
20
|
+
color 0.15s,
|
|
21
|
+
background 0.15s;
|
|
22
|
+
}
|
|
23
|
+
.rf-theme-toggle:hover {
|
|
24
|
+
border-color: var(--rf-color-primary);
|
|
25
|
+
color: var(--rf-color-text);
|
|
26
|
+
background: var(--rf-color-surface-hover);
|
|
27
|
+
}
|
|
28
|
+
.rf-theme-toggle:focus-visible {
|
|
29
|
+
outline: 2px solid var(--rf-color-primary);
|
|
30
|
+
outline-offset: 2px;
|
|
31
|
+
}
|
|
29
32
|
|
|
30
|
-
/* Icon — a currentColor-tinted mask. Defaults to the auto glyph so the SSR'd
|
|
33
|
+
/* Icon — a currentColor-tinted mask. Defaults to the auto glyph so the SSR'd
|
|
31
34
|
* button shows an icon before the behavior sets data-theme-pref; the light and
|
|
32
35
|
* dark glyphs swap in by state. */
|
|
33
|
-
.rf-theme-toggle__icon {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
.rf-theme-toggle[data-theme-pref="light"] .rf-theme-toggle__icon {
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
.rf-theme-toggle[data-theme-pref="dark"] .rf-theme-toggle__icon {
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
|
|
36
|
+
.rf-theme-toggle__icon {
|
|
37
|
+
background: currentColor;
|
|
38
|
+
mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><circle cx='12' cy='12' r='10'/><path d='M12 2a10 10 0 0 0 0 20Z' fill='currentColor'/></svg>");
|
|
39
|
+
}
|
|
40
|
+
.rf-theme-toggle[data-theme-pref="light"] .rf-theme-toggle__icon {
|
|
41
|
+
mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><circle cx='12' cy='12' r='4'/><path d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41'/></svg>");
|
|
42
|
+
}
|
|
43
|
+
.rf-theme-toggle[data-theme-pref="dark"] .rf-theme-toggle__icon {
|
|
44
|
+
mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z'/></svg>");
|
|
45
|
+
}
|
|
44
46
|
}
|
|
@@ -1,44 +1,45 @@
|
|
|
1
1
|
@layer skin {
|
|
2
|
-
/* Version Switcher — page-level version dropdown */
|
|
2
|
+
/* Version Switcher — page-level version dropdown */
|
|
3
3
|
|
|
4
|
-
.rf-version-switcher {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
.rf-version-switcher__label {
|
|
11
|
-
color: var(--rf-color-muted);
|
|
12
|
-
font-weight: var(--rf-weight-medium);
|
|
13
|
-
font-size: var(--rf-text-xs);
|
|
14
|
-
text-transform: uppercase;
|
|
15
|
-
letter-spacing: var(--rf-tracking-wide);
|
|
16
|
-
}
|
|
4
|
+
.rf-version-switcher {
|
|
5
|
+
gap: 0.5rem;
|
|
6
|
+
margin-bottom: 1.5rem;
|
|
7
|
+
font-size: var(--rf-text-sm);
|
|
8
|
+
}
|
|
17
9
|
|
|
18
|
-
.rf-version-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
padding: 0.3rem 2rem 0.3rem 0.6rem;
|
|
26
|
-
cursor: pointer;
|
|
27
|
-
line-height: var(--rf-leading-snug);
|
|
28
|
-
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
|
|
29
|
-
background-repeat: no-repeat;
|
|
30
|
-
background-position: right 0.5rem center;
|
|
31
|
-
transition: border-color 150ms ease, box-shadow 150ms ease;
|
|
32
|
-
}
|
|
10
|
+
.rf-version-switcher__label {
|
|
11
|
+
color: var(--rf-color-muted);
|
|
12
|
+
font-weight: var(--rf-weight-medium);
|
|
13
|
+
font-size: var(--rf-text-xs);
|
|
14
|
+
text-transform: uppercase;
|
|
15
|
+
letter-spacing: var(--rf-tracking-wide);
|
|
16
|
+
}
|
|
33
17
|
|
|
34
|
-
.rf-version-switcher__select
|
|
35
|
-
|
|
36
|
-
|
|
18
|
+
.rf-version-switcher__select {
|
|
19
|
+
background: var(--rf-color-surface);
|
|
20
|
+
border: 1px solid var(--rf-color-border);
|
|
21
|
+
border-radius: var(--rf-radius-sm, 0.25rem);
|
|
22
|
+
color: var(--rf-color-text);
|
|
23
|
+
font-size: var(--rf-text-sm);
|
|
24
|
+
font-family: inherit;
|
|
25
|
+
padding: 0.3rem 2rem 0.3rem 0.6rem;
|
|
26
|
+
cursor: pointer;
|
|
27
|
+
line-height: var(--rf-leading-snug);
|
|
28
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
|
|
29
|
+
background-repeat: no-repeat;
|
|
30
|
+
background-position: right 0.5rem center;
|
|
31
|
+
transition:
|
|
32
|
+
border-color 150ms ease,
|
|
33
|
+
box-shadow 150ms ease;
|
|
34
|
+
}
|
|
37
35
|
|
|
38
|
-
.rf-version-switcher__select:
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
box-shadow: 0 0 0 2px var(--rf-color-primary-bg);
|
|
42
|
-
}
|
|
36
|
+
.rf-version-switcher__select:hover {
|
|
37
|
+
border-color: var(--rf-color-primary);
|
|
38
|
+
}
|
|
43
39
|
|
|
40
|
+
.rf-version-switcher__select:focus-visible {
|
|
41
|
+
outline: none;
|
|
42
|
+
border-color: var(--rf-color-primary);
|
|
43
|
+
box-shadow: 0 0 0 2px var(--rf-color-primary-bg);
|
|
44
|
+
}
|
|
44
45
|
}
|