@refrakt-md/lumina 0.22.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/base.css +2 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -0
- package/dist/config.js.map +1 -1
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +2 -0
- package/dist/tokens.js.map +1 -1
- package/index.css +10 -1
- package/package.json +5 -4
- package/styles/base/attributes.css +6 -7
- package/styles/dimensions/checklist.css +6 -35
- package/styles/dimensions/cover.css +13 -95
- package/styles/dimensions/density.css +3 -0
- package/styles/dimensions/frame.css +3 -0
- package/styles/dimensions/media.css +14 -61
- package/styles/dimensions/metadata.css +24 -74
- package/styles/dimensions/sections.css +10 -24
- package/styles/dimensions/sequence.css +14 -79
- package/styles/dimensions/state.css +39 -56
- package/styles/dimensions/substrate.css +3 -0
- package/styles/dimensions/surfaces.css +73 -113
- package/styles/elements/blockquote.css +3 -2
- package/styles/elements/code.css +3 -0
- package/styles/elements/table.css +3 -0
- package/styles/global.css +9 -48
- package/styles/layouts/blog.css +3 -64
- package/styles/layouts/default.css +3 -77
- package/styles/layouts/docs.css +3 -153
- package/styles/layouts/mobile.css +1 -50
- package/styles/layouts/on-this-page.css +3 -2
- package/styles/layouts/plan.css +3 -134
- package/styles/layouts/search.css +3 -68
- package/styles/layouts/split.css +24 -169
- package/styles/layouts/theme-toggle.css +3 -29
- package/styles/layouts/version-switcher.css +3 -4
- package/styles/runes/accordion.css +15 -58
- package/styles/runes/aggregate.css +3 -12
- package/styles/runes/annotate.css +6 -35
- package/styles/runes/api.css +3 -0
- package/styles/runes/audio.css +3 -41
- package/styles/runes/badge.css +3 -0
- package/styles/runes/bar.css +3 -0
- package/styles/runes/bento.css +16 -159
- package/styles/runes/bg.css +3 -37
- package/styles/runes/blog.css +3 -5
- package/styles/runes/bond.css +3 -23
- package/styles/runes/breadcrumb.css +5 -13
- package/styles/runes/budget.css +3 -25
- package/styles/runes/bug.css +3 -0
- package/styles/runes/card.css +24 -92
- package/styles/runes/cast.css +5 -22
- package/styles/runes/changelog.css +5 -9
- package/styles/runes/character.css +3 -17
- package/styles/runes/chart.css +10 -52
- package/styles/runes/codegroup.css +15 -23
- package/styles/runes/collection.css +5 -82
- package/styles/runes/compare.css +3 -14
- package/styles/runes/comparison.css +7 -34
- package/styles/runes/conversation.css +5 -27
- package/styles/runes/cta.css +3 -26
- package/styles/runes/datatable.css +25 -40
- package/styles/runes/decision.css +3 -0
- package/styles/runes/design-context.css +3 -2
- package/styles/runes/details.css +5 -13
- package/styles/runes/diagram.css +5 -13
- package/styles/runes/diff.css +5 -88
- package/styles/runes/drawer.css +1 -105
- package/styles/runes/embed.css +4 -12
- package/styles/runes/event.css +3 -1
- package/styles/runes/expand.css +5 -40
- package/styles/runes/faction.css +3 -9
- package/styles/runes/feature.css +4 -32
- package/styles/runes/figure.css +5 -24
- package/styles/runes/file-ref.css +3 -18
- package/styles/runes/form.css +3 -32
- package/styles/runes/gallery.css +3 -135
- package/styles/runes/grid.css +4 -56
- package/styles/runes/hero.css +13 -126
- package/styles/runes/hint.css +16 -41
- package/styles/runes/howto.css +3 -25
- package/styles/runes/itinerary.css +3 -32
- package/styles/runes/juxtapose.css +12 -87
- package/styles/runes/lore.css +3 -10
- package/styles/runes/map.css +3 -36
- package/styles/runes/mediatext.css +3 -44
- package/styles/runes/milestone.css +3 -16
- package/styles/runes/mockup.css +3 -108
- package/styles/runes/nav.css +3 -178
- package/styles/runes/organization.css +3 -2
- package/styles/runes/page-section.css +3 -4
- package/styles/runes/pagination.css +5 -37
- package/styles/runes/palette.css +3 -22
- package/styles/runes/placeholder.css +3 -3
- package/styles/runes/plan-history.css +3 -23
- package/styles/runes/plan-progress.css +3 -4
- package/styles/runes/plan-ref.css +3 -0
- package/styles/runes/playlist.css +2 -36
- package/styles/runes/plot.css +3 -19
- package/styles/runes/preview.css +3 -28
- package/styles/runes/pricing.css +7 -25
- package/styles/runes/progress.css +6 -25
- package/styles/runes/pullquote.css +3 -26
- package/styles/runes/realm.css +3 -9
- package/styles/runes/recipe.css +3 -27
- package/styles/runes/relationships.css +3 -34
- package/styles/runes/reveal.css +7 -12
- package/styles/runes/sandbox.css +6 -36
- package/styles/runes/section.css +4 -18
- package/styles/runes/showcase.css +3 -20
- package/styles/runes/sidenote.css +3 -2
- package/styles/runes/snippet.css +3 -0
- package/styles/runes/spacing.css +3 -22
- package/styles/runes/spec.css +3 -0
- package/styles/runes/steps.css +4 -36
- package/styles/runes/storyboard.css +2 -17
- package/styles/runes/swatch.css +3 -6
- package/styles/runes/symbol.css +6 -4
- package/styles/runes/tabs.css +6 -9
- package/styles/runes/testimonial.css +5 -6
- package/styles/runes/textblock.css +2 -20
- package/styles/runes/timeline.css +3 -21
- package/styles/runes/tint.css +3 -0
- package/styles/runes/toc.css +5 -3
- package/styles/runes/track.css +2 -31
- package/styles/runes/typography.css +3 -15
- package/styles/runes/work.css +3 -0
- package/styles/runes/xref.css +3 -1
- package/tokens/base.css +13 -0
- package/tokens/dark.css +3 -0
- package/styles/dimensions/guest-posture.css +0 -27
|
@@ -1,36 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
1
|
+
@layer skin {
|
|
2
|
+
/* ─── Section Anatomy Dimension — skin ──────────────────────────────────
|
|
3
|
+
* Zone rhythm (margins, gaps, padding), typography, and borders for the 6
|
|
4
|
+
* standard section roles. The flex zone *containers* (header / preamble /
|
|
5
|
+
* footer) live in @refrakt-md/skeleton (dimensions/sections.css). Rhythm stays
|
|
6
|
+
* here so rune zone overrides resolve against it by source order.
|
|
6
7
|
* ────────────────────────────────────────────────────────────────────── */
|
|
7
8
|
|
|
8
9
|
/* ─── Header: chrome metadata row (badges, status, icons) ────────── */
|
|
9
|
-
|
|
10
10
|
[data-section="header"] {
|
|
11
|
-
display: flex;
|
|
12
|
-
flex-wrap: wrap;
|
|
13
|
-
align-items: center;
|
|
14
11
|
gap: 0.5rem;
|
|
15
12
|
margin-bottom: 3rem;
|
|
16
13
|
}
|
|
17
14
|
|
|
18
15
|
/* ─── Preamble: intro section (eyebrow, headline, blurb) ─────────── */
|
|
19
|
-
|
|
20
16
|
[data-section="preamble"] {
|
|
21
|
-
display: flex;
|
|
22
|
-
flex-direction: column;
|
|
23
17
|
gap: 0.25rem;
|
|
24
18
|
}
|
|
25
19
|
|
|
26
20
|
/* ─── Title: primary heading ──────────────────────────────────────── */
|
|
27
|
-
|
|
28
21
|
/* The size rides --rf-title-size (set per density root in density.css) so a
|
|
29
|
-
* nested rune's own density re-declares it
|
|
30
|
-
*
|
|
31
|
-
* (e.g. .rf-hero__headline) outranks the bare attribute selector. The old
|
|
32
|
-
* `[data-density="compact"] [data-section="title"]` descendant rule leaked
|
|
33
|
-
* through nested densities AND beat per-rune title sizes. */
|
|
22
|
+
* nested rune's own density re-declares it, and a rune's own title CSS
|
|
23
|
+
* (e.g. .rf-hero__headline) outranks the bare attribute selector. */
|
|
34
24
|
[data-section="title"] {
|
|
35
25
|
font-family: var(--rf-font-sans);
|
|
36
26
|
font-size: var(--rf-title-size, var(--rf-text-2xl));
|
|
@@ -41,7 +31,6 @@
|
|
|
41
31
|
}
|
|
42
32
|
|
|
43
33
|
/* ─── Description: secondary text ─────────────────────────────────── */
|
|
44
|
-
|
|
45
34
|
[data-section="description"] {
|
|
46
35
|
font-size: var(--rf-text);
|
|
47
36
|
line-height: var(--rf-leading-normal);
|
|
@@ -50,17 +39,13 @@
|
|
|
50
39
|
}
|
|
51
40
|
|
|
52
41
|
/* ─── Body: main content ──────────────────────────────────────────── */
|
|
53
|
-
|
|
54
42
|
[data-section="body"] {
|
|
55
43
|
line-height: var(--rf-leading-relaxed);
|
|
56
44
|
color: var(--rf-color-text);
|
|
57
45
|
}
|
|
58
46
|
|
|
59
47
|
/* ─── Footer: actions and links ───────────────────────────────────── */
|
|
60
|
-
|
|
61
48
|
[data-section="footer"] {
|
|
62
|
-
display: flex;
|
|
63
|
-
flex-wrap: wrap;
|
|
64
49
|
gap: var(--rf-spacing-sm);
|
|
65
50
|
margin-top: var(--rf-spacing-md);
|
|
66
51
|
padding-top: var(--rf-spacing-sm);
|
|
@@ -68,10 +53,11 @@
|
|
|
68
53
|
}
|
|
69
54
|
|
|
70
55
|
/* ─── Media: visual content ───────────────────────────────────────── */
|
|
71
|
-
|
|
72
56
|
[data-section="media"] {
|
|
73
57
|
/* Media zones manage their own spacing via their layout (split gap, cell
|
|
74
58
|
* padding, flow margins); a blanket block margin here misaligns media in
|
|
75
59
|
* flex/beside layouts, so keep it neutral. */
|
|
76
60
|
margin: 0;
|
|
77
61
|
}
|
|
62
|
+
|
|
63
|
+
}
|
|
@@ -1,28 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
[data-sequence="numbered"] > li {
|
|
11
|
-
counter-increment: sequence;
|
|
12
|
-
position: relative;
|
|
13
|
-
padding-left: 2.25rem;
|
|
14
|
-
}
|
|
15
|
-
|
|
1
|
+
@layer skin {
|
|
2
|
+
/* === Sequential Items — skin ===
|
|
3
|
+
* The connector lines (borders), the marker chrome (fill, radius, shadow), the
|
|
4
|
+
* counter type, and the layout gaps. The counter mechanism, list resets, item
|
|
5
|
+
* geometry, and marker box placement live in @refrakt-md/skeleton
|
|
6
|
+
* (dimensions/sequence.css). */
|
|
7
|
+
|
|
8
|
+
/* Numbered — counter circle chrome + type. */
|
|
16
9
|
[data-sequence="numbered"] > li::before {
|
|
17
|
-
content: counter(sequence);
|
|
18
|
-
position: absolute;
|
|
19
|
-
left: 0;
|
|
20
|
-
top: 0.625rem;
|
|
21
|
-
width: 1.5rem;
|
|
22
|
-
height: 1.5rem;
|
|
23
|
-
display: flex;
|
|
24
|
-
align-items: center;
|
|
25
|
-
justify-content: center;
|
|
26
10
|
font-size: var(--rf-text-xs);
|
|
27
11
|
font-weight: var(--rf-weight-bold);
|
|
28
12
|
font-variant-numeric: tabular-nums;
|
|
@@ -35,95 +19,46 @@
|
|
|
35
19
|
border-top: 1px solid var(--rf-color-border);
|
|
36
20
|
}
|
|
37
21
|
|
|
38
|
-
/* Connected vertical — line
|
|
39
|
-
[data-sequence="connected"] {
|
|
40
|
-
list-style: none;
|
|
41
|
-
padding-left: 0;
|
|
42
|
-
}
|
|
43
|
-
|
|
22
|
+
/* Connected vertical — the line is a left border; the dot is the marker. */
|
|
44
23
|
[data-sequence="connected"] > li {
|
|
45
|
-
position: relative;
|
|
46
|
-
padding-left: 2rem;
|
|
47
|
-
padding-bottom: 2rem;
|
|
48
24
|
border-left: 2px solid var(--rf-color-border);
|
|
49
|
-
margin-left: 0.375rem;
|
|
50
25
|
}
|
|
51
26
|
|
|
52
27
|
[data-sequence="connected"] > li:last-child {
|
|
53
28
|
border-left-color: transparent;
|
|
54
|
-
padding-bottom: 0;
|
|
55
29
|
}
|
|
56
30
|
|
|
57
31
|
[data-sequence="connected"] > li::before {
|
|
58
|
-
content: '';
|
|
59
|
-
position: absolute;
|
|
60
|
-
left: -0.4375rem;
|
|
61
|
-
top: 0.25rem;
|
|
62
|
-
width: 0.75rem;
|
|
63
|
-
height: 0.75rem;
|
|
64
32
|
border-radius: 50%;
|
|
65
33
|
background: var(--rf-color-primary);
|
|
66
34
|
border: 2px solid var(--rf-color-bg);
|
|
67
35
|
box-shadow: 0 0 0 2px var(--rf-color-primary);
|
|
68
36
|
}
|
|
69
37
|
|
|
70
|
-
/* Connected horizontal — line
|
|
38
|
+
/* Connected horizontal — the line moves to the top border; gap spaces the items. */
|
|
71
39
|
[data-sequence="connected"][data-sequence-direction="horizontal"] {
|
|
72
|
-
display: flex;
|
|
73
40
|
gap: 2rem;
|
|
74
|
-
overflow-x: auto;
|
|
75
41
|
}
|
|
76
42
|
|
|
77
43
|
[data-sequence="connected"][data-sequence-direction="horizontal"] > li {
|
|
78
|
-
position: relative;
|
|
79
|
-
min-width: 12rem;
|
|
80
|
-
padding-top: 1.5rem;
|
|
81
|
-
padding-left: 0;
|
|
82
|
-
padding-bottom: 0;
|
|
83
44
|
border-left: none;
|
|
84
45
|
border-top: 2px solid var(--rf-color-border);
|
|
85
|
-
margin-left: 0;
|
|
86
46
|
}
|
|
87
47
|
|
|
88
48
|
[data-sequence="connected"][data-sequence-direction="horizontal"] > li:last-child {
|
|
89
49
|
border-top-color: var(--rf-color-border);
|
|
90
50
|
}
|
|
91
51
|
|
|
92
|
-
[data-sequence="connected"][data-sequence-direction="horizontal"] > li::before {
|
|
93
|
-
left: 0.5rem;
|
|
94
|
-
top: -0.4375rem;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/* Plain — no indicators, just ordered semantics */
|
|
98
|
-
[data-sequence="plain"] {
|
|
99
|
-
list-style: none;
|
|
100
|
-
padding-left: 0;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
52
|
/* === Density interaction === */
|
|
104
53
|
|
|
105
|
-
/* Compact: smaller
|
|
106
|
-
[data-density="compact"] [data-sequence="numbered"] > li {
|
|
107
|
-
padding-left: 1.75rem;
|
|
108
|
-
}
|
|
109
|
-
|
|
54
|
+
/* Compact: smaller circle keeps the same type scale. */
|
|
110
55
|
[data-density="compact"] [data-sequence="numbered"] > li::before {
|
|
111
|
-
width: 1.25rem;
|
|
112
|
-
height: 1.25rem;
|
|
113
56
|
font-size: var(--rf-text-xs);
|
|
114
57
|
}
|
|
115
58
|
|
|
116
|
-
|
|
117
|
-
padding-bottom: 1rem;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/* Minimal: no indicators, collapsed list */
|
|
121
|
-
[data-density="minimal"] [data-sequence] > li::before {
|
|
122
|
-
display: none;
|
|
123
|
-
}
|
|
124
|
-
|
|
59
|
+
/* Minimal: drop the connector line on the collapsed list. */
|
|
125
60
|
[data-density="minimal"] [data-sequence="connected"] > li {
|
|
126
61
|
border-left: none;
|
|
127
|
-
|
|
128
|
-
|
|
62
|
+
}
|
|
63
|
+
|
|
129
64
|
}
|
|
@@ -1,57 +1,40 @@
|
|
|
1
|
-
/* ─── Interactive State Dimension
|
|
2
|
-
*
|
|
3
|
-
*
|
|
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
|
-
|
|
36
|
-
/*
|
|
37
|
-
[
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
[role="tabpanel"][data-state="active"] {
|
|
42
|
-
display: block;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/* ─── Selected: user selection highlight ──────────────────────────── */
|
|
46
|
-
|
|
47
|
-
[data-state="selected"] {
|
|
48
|
-
background: var(--rf-color-primary-bg);
|
|
49
|
-
outline: 2px solid var(--rf-color-primary);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/* ─── Disabled: dimmed non-interactive ────────────────────────────── */
|
|
53
|
-
|
|
54
|
-
[data-state="disabled"] {
|
|
55
|
-
opacity: 0.4;
|
|
56
|
-
pointer-events: none;
|
|
1
|
+
/* ─── Interactive State Dimension — skin ────────────────────────────────
|
|
2
|
+
* Aesthetic state treatments. The visibility/interaction mechanisms (collapse,
|
|
3
|
+
* panel switching, disabled pointer suppression) are structure and live in
|
|
4
|
+
* `@refrakt-md/skeleton` (styles/dimensions/state.css). Skin sits in @layer skin,
|
|
5
|
+
* ordered after skeleton, so these low-specificity rules win where they overlap. */
|
|
6
|
+
|
|
7
|
+
@layer skin {
|
|
8
|
+
/* Expand animation for opening collapsibles (decorative — the rune works
|
|
9
|
+
* without it; the skeleton supplies the display:block). */
|
|
10
|
+
[data-state="open"] > [class*="__body"],
|
|
11
|
+
[data-state="open"] > [class*="__content"] {
|
|
12
|
+
animation: rf-expand 0.2s ease-out;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@keyframes rf-expand {
|
|
16
|
+
from { opacity: 0; transform: translateY(-0.5rem); }
|
|
17
|
+
to { opacity: 1; transform: translateY(0); }
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* Active/inactive selection indicators */
|
|
21
|
+
button[data-state="active"] {
|
|
22
|
+
border-bottom: 2px solid var(--rf-color-primary);
|
|
23
|
+
color: var(--rf-color-primary);
|
|
24
|
+
}
|
|
25
|
+
button[data-state="inactive"] {
|
|
26
|
+
border-bottom: 2px solid transparent;
|
|
27
|
+
color: var(--rf-color-muted);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* Selected highlight */
|
|
31
|
+
[data-state="selected"] {
|
|
32
|
+
background: var(--rf-color-primary-bg);
|
|
33
|
+
outline: 2px solid var(--rf-color-primary);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* Disabled dim (the pointer-events:none is structure) */
|
|
37
|
+
[data-state="disabled"] {
|
|
38
|
+
opacity: 0.4;
|
|
39
|
+
}
|
|
57
40
|
}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
*
|
|
1
|
+
@layer skin {
|
|
2
|
+
/* ─── Surface Assignments (SPEC-107) ───────────────────────────────────
|
|
3
|
+
* Surface chrome is selected by the `data-elevation` depth-ladder axis, not by
|
|
4
|
+
* rune name. Each rung maps to a chrome bundle (fill / border / radius /
|
|
5
|
+
* padding / resting shadow); `data-prominence` maps the page-section-header
|
|
6
|
+
* family to a title type register. Per-rune defaults (`defaultElevation` /
|
|
7
|
+
* `defaultProminence`) live in each rune's config, so today's appearance is
|
|
8
|
+
* preserved while a theme can re-point any rune to a different rung.
|
|
5
9
|
* ────────────────────────────────────────────────────────────────────── */
|
|
6
10
|
|
|
7
11
|
/* Semantic surface/media aliases over the raw token scale (these reference
|
|
@@ -22,136 +26,92 @@
|
|
|
22
26
|
so they sit flush with the surrounding header/footer container. */
|
|
23
27
|
|
|
24
28
|
[data-rune]:not([data-rune] [data-rune]):not(:where([data-layout="menubar"], [data-layout="columns"])) {
|
|
25
|
-
margin:
|
|
29
|
+
margin: var(--rf-spacing-md) 0;
|
|
26
30
|
}
|
|
27
31
|
|
|
28
|
-
/* ───
|
|
29
|
-
|
|
30
|
-
.
|
|
31
|
-
.
|
|
32
|
-
.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
.rf-budget,
|
|
42
|
-
.rf-organization,
|
|
43
|
-
.rf-timeline,
|
|
44
|
-
.rf-swatch,
|
|
45
|
-
.rf-palette,
|
|
46
|
-
.rf-typography,
|
|
47
|
-
.rf-spacing,
|
|
48
|
-
.rf-design-context,
|
|
49
|
-
.rf-itinerary,
|
|
50
|
-
.rf-symbol,
|
|
51
|
-
.rf-changelog,
|
|
52
|
-
.rf-api,
|
|
53
|
-
.rf-howto,
|
|
54
|
-
.rf-form {
|
|
32
|
+
/* ─── Elevation: depth-ladder chrome ──────────────────────────────────
|
|
33
|
+
* `flat` and the shadow rungs (`raised` / `floating` / `overlay`) carry a
|
|
34
|
+
* surface: fill, border, radius, and container padding. `sunken` adds the same
|
|
35
|
+
* chrome but recesses its fill below the page. `flush` has no surface boundary
|
|
36
|
+
* — it only reserves vertical rhythm. The shadow rungs layer a *resting*
|
|
37
|
+
* box-shadow on top of the flat chrome (kept distinct from `frame-shadow`'s
|
|
38
|
+
* per-guest drop-shadow, SPEC-107 §1). */
|
|
39
|
+
|
|
40
|
+
[data-elevation="flat"],
|
|
41
|
+
[data-elevation="sunken"],
|
|
42
|
+
[data-elevation="raised"],
|
|
43
|
+
[data-elevation="floating"],
|
|
44
|
+
[data-elevation="overlay"] {
|
|
55
45
|
background: var(--rf-color-surface);
|
|
56
46
|
border: 1px solid var(--rf-color-border);
|
|
57
47
|
border-radius: var(--rf-radius-container);
|
|
58
48
|
padding: var(--rune-padding, var(--rf-spacing-md));
|
|
59
49
|
}
|
|
60
50
|
|
|
61
|
-
/*
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
.
|
|
65
|
-
|
|
66
|
-
.rf-
|
|
67
|
-
.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
.rf-textblock,
|
|
71
|
-
.rf-nav,
|
|
72
|
-
.rf-breadcrumb,
|
|
73
|
-
.rf-toc,
|
|
74
|
-
.rf-datatable {
|
|
75
|
-
padding: var(--rune-padding, var(--rf-spacing-sm)) 0;
|
|
51
|
+
/* Sunken — the recessed "darker surface" (e.g. chart / diagram). Derived at
|
|
52
|
+
* use-site via relative-color (lower L, keep C+H) so it recomputes from a
|
|
53
|
+
* tinted `--rf-color-surface` automatically (a static inset-colour token would
|
|
54
|
+
* freeze to the untinted :root). Writes `background` only — never re-bases
|
|
55
|
+
* `--rf-color-surface` — so insets don't compound under nesting; depth is
|
|
56
|
+
* conveyed by border + the darker fill. `--rf-surface-inset-shift: 0` flushes
|
|
57
|
+
* it back to the surface colour. */
|
|
58
|
+
[data-elevation="sunken"] {
|
|
59
|
+
background: oklch(from var(--rf-color-surface) calc(l - var(--rf-surface-inset-shift)) c h);
|
|
76
60
|
}
|
|
77
61
|
|
|
78
|
-
/*
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
.rf-cta,
|
|
82
|
-
.rf-feature,
|
|
83
|
-
.rf-steps,
|
|
84
|
-
.rf-bento,
|
|
85
|
-
.rf-storyboard,
|
|
86
|
-
.rf-map {
|
|
87
|
-
padding: var(--rune-padding, var(--rf-spacing-xl)) 0;
|
|
62
|
+
/* Resting-shadow rungs — depth above the flat surface. */
|
|
63
|
+
[data-elevation="raised"] {
|
|
64
|
+
box-shadow: var(--rf-shadow-sm);
|
|
88
65
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
.rf-codegroup,
|
|
93
|
-
.rf-mockup,
|
|
94
|
-
.rf-diagram,
|
|
95
|
-
.rf-chart,
|
|
96
|
-
.rf-embed,
|
|
97
|
-
.rf-gallery,
|
|
98
|
-
.rf-figure,
|
|
99
|
-
.rf-reveal {
|
|
100
|
-
background: var(--rf-color-surface);
|
|
101
|
-
border: 1px solid var(--rf-color-border);
|
|
102
|
-
border-radius: var(--rf-radius-container);
|
|
103
|
-
padding: var(--rune-padding, var(--rf-spacing-md));
|
|
66
|
+
[data-elevation="floating"] {
|
|
67
|
+
box-shadow: var(--rf-shadow-md);
|
|
104
68
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
* When a surface-bearing rune wraps a `[data-section="media"]` slot, the slot
|
|
108
|
-
* shares the surface's 1px border so the framed media reads as part of the
|
|
109
|
-
* same surface rather than a separate inner box. Scoped via `:where()` for
|
|
110
|
-
* zero specificity — per-rune CSS can still override if a particular surface
|
|
111
|
-
* wants a different chrome (e.g. character's circular portrait avoids this
|
|
112
|
-
* because it's not a `[data-section="media"]` slot). */
|
|
113
|
-
:where(.rf-card, .rf-bento-cell, .rf-recipe, .rf-realm, .rf-faction, .rf-playlist) [data-section="media"] {
|
|
114
|
-
border: 1px solid var(--rf-color-border);
|
|
69
|
+
[data-elevation="overlay"] {
|
|
70
|
+
box-shadow: var(--rf-shadow-lg);
|
|
115
71
|
}
|
|
116
72
|
|
|
117
|
-
/*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
73
|
+
/* Flush — no surface boundary; only vertical rhythm (density-aware via
|
|
74
|
+
* --rune-padding). Replaces the old inline/banner padding buckets; banner runes
|
|
75
|
+
* that want a more generous band declare their own `padding-block`. */
|
|
76
|
+
[data-elevation="flush"] {
|
|
77
|
+
padding-block: var(--rune-padding, var(--rf-spacing-sm));
|
|
78
|
+
}
|
|
123
79
|
|
|
124
|
-
/*
|
|
125
|
-
|
|
126
|
-
.
|
|
127
|
-
|
|
80
|
+
/* ─── Prominence: page-section-header type register ───────────────────
|
|
81
|
+
* `data-prominence` re-points the section title size for page-section-header
|
|
82
|
+
* family runes (the engine only emits it where a header role exists). `normal`
|
|
83
|
+
* is the density default; the other steps layer on top, cascading down to
|
|
84
|
+
* [data-section="title"] via --rf-title-size — the same mechanism density uses,
|
|
85
|
+
* so a nested rune's own density/prominence re-declares it. */
|
|
86
|
+
[data-prominence="quiet"] {
|
|
87
|
+
--rf-title-size: var(--rf-text-xl);
|
|
88
|
+
}
|
|
89
|
+
[data-prominence="prominent"] {
|
|
90
|
+
--rf-title-size: var(--rf-text-3xl);
|
|
91
|
+
}
|
|
92
|
+
[data-prominence="display"] {
|
|
93
|
+
--rf-title-size: var(--rf-text-4xl);
|
|
128
94
|
}
|
|
129
95
|
|
|
130
|
-
/*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
[data-
|
|
135
|
-
|
|
136
|
-
|
|
96
|
+
/* ─── Media slot shares the surface chrome ───────────────────────────
|
|
97
|
+
* When a `flat` surface wraps a cover `[data-section="media"]` slot, the slot
|
|
98
|
+
* shares the surface's 1px border and a recessed well fill so the framed media
|
|
99
|
+
* reads as part of the same surface. Scoped via `:where()` for zero specificity
|
|
100
|
+
* so per-rune CSS can override. Floated-avatar portraits (`[data-media="portrait"]`,
|
|
101
|
+
* e.g. character / testimonial) opt out — they manage their own circular chrome.
|
|
102
|
+
* The hand-rolled `card` / `bento-cell` surfaces (which sit outside the
|
|
103
|
+
* elevation axis) carry the same media chrome from their own CSS files. */
|
|
104
|
+
:where([data-elevation="flat"]) [data-section="media"]:not([data-media="portrait"]) {
|
|
105
|
+
border: 1px solid var(--rf-color-border);
|
|
106
|
+
background: oklch(from var(--rf-color-surface) calc(l - var(--rf-surface-inset-shift)) c h);
|
|
137
107
|
}
|
|
138
108
|
|
|
139
|
-
/*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
|
|
143
|
-
* comparison reads as part of the card surface. The slot's overflow:visible
|
|
144
|
-
* and container-type:normal still come from `split.css` (juxtapose manages
|
|
145
|
-
* its own clip inside `__panels`). */
|
|
146
|
-
[data-section="media"] > .rf-juxtapose .rf-juxtapose__panels {
|
|
109
|
+
/* …but a sunken surface used as a media-zone guest already sits inside the
|
|
110
|
+
* slot's recessed well, so its own chrome would just double up. Drop it; keep
|
|
111
|
+
* padding so axis labels / SVG keep breathing room. */
|
|
112
|
+
[data-section="media"] > [data-elevation="sunken"] {
|
|
147
113
|
background: transparent;
|
|
148
114
|
border: 0;
|
|
149
|
-
border-radius: var(--rf-radius-media);
|
|
150
115
|
}
|
|
151
116
|
|
|
152
|
-
/* Media wells of media-bearing runes: a recessed sub-surface that tracks the
|
|
153
|
-
* (possibly tinted) container colour — invisible under a full-bleed guest,
|
|
154
|
-
* visible in the gaps (transparent, displaced, or absent guest). */
|
|
155
|
-
:is(.rf-card, .rf-bento-cell, .rf-recipe, .rf-realm, .rf-faction, .rf-playlist) [data-section="media"] {
|
|
156
|
-
background: oklch(from var(--rf-color-surface) calc(l - var(--rf-surface-inset-shift)) c h);
|
|
157
117
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
@layer skin {
|
|
1
2
|
/* Blockquote */
|
|
2
3
|
blockquote {
|
|
3
4
|
position: relative;
|
|
@@ -5,8 +6,6 @@ blockquote {
|
|
|
5
6
|
margin: 1.5rem 0;
|
|
6
7
|
padding: 1rem 1.25rem 1rem 3.25rem;
|
|
7
8
|
color: var(--rf-color-muted);
|
|
8
|
-
background: var(--rf-color-surface);
|
|
9
|
-
border-radius: 0 var(--rf-radius-md) var(--rf-radius-md) 0;
|
|
10
9
|
}
|
|
11
10
|
blockquote::before {
|
|
12
11
|
content: '';
|
|
@@ -24,3 +23,5 @@ blockquote::before {
|
|
|
24
23
|
blockquote p:last-child {
|
|
25
24
|
margin-bottom: 0;
|
|
26
25
|
}
|
|
26
|
+
|
|
27
|
+
}
|
package/styles/elements/code.css
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
@layer skin {
|
|
1
2
|
/* Code block wrapper — the rf-codeblock div comes from the Markdoc fence node
|
|
2
3
|
schema at build time. Inside codegroup the margin is removed by
|
|
3
4
|
.rf-codegroup .rf-codeblock. */
|
|
@@ -114,3 +115,5 @@
|
|
|
114
115
|
background: var(--rf-color-line-highlight);
|
|
115
116
|
border-left-color: var(--rf-color-line-highlight-rail);
|
|
116
117
|
}
|
|
118
|
+
|
|
119
|
+
}
|