@refrakt-md/lumina 0.33.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/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,5 +1,5 @@
|
|
|
1
1
|
@layer skin {
|
|
2
|
-
/* ─── Metadata Dimensions — skin ───────────────────────────────────────
|
|
2
|
+
/* ─── Metadata Dimensions — skin ───────────────────────────────────────
|
|
3
3
|
* SPEC-080 typography / geometry split. The zone-layout *structure* (bar +
|
|
4
4
|
* definition-list display/grid, the rating flex row, the sr-only label
|
|
5
5
|
* mechanism) lives in @refrakt-md/skeleton (dimensions/metadata.css). What
|
|
@@ -9,136 +9,143 @@
|
|
|
9
9
|
* - Sentiment rules drive `--meta-color`, inherited by chips + tinted text.
|
|
10
10
|
* ────────────────────────────────────────────────────────────────────── */
|
|
11
11
|
|
|
12
|
-
/* ─── Sentiment ────────────────────────────────────────────────────── */
|
|
12
|
+
/* ─── Sentiment ────────────────────────────────────────────────────── */
|
|
13
13
|
|
|
14
|
-
[data-meta-sentiment="positive"] {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
[data-meta-sentiment="
|
|
14
|
+
[data-meta-sentiment="positive"] {
|
|
15
|
+
--meta-color: var(--rf-color-success, #10b981);
|
|
16
|
+
}
|
|
17
|
+
[data-meta-sentiment="negative"] {
|
|
18
|
+
--meta-color: var(--rf-color-danger, #ef4444);
|
|
19
|
+
}
|
|
20
|
+
[data-meta-sentiment="caution"] {
|
|
21
|
+
--meta-color: var(--rf-color-warning, #f59e0b);
|
|
22
|
+
}
|
|
23
|
+
[data-meta-sentiment="neutral"] {
|
|
24
|
+
--meta-color: var(--rf-color-muted, #64748b);
|
|
25
|
+
}
|
|
18
26
|
|
|
19
|
-
/* ─── Meta Types — typography only ─────────────────────────────────── */
|
|
27
|
+
/* ─── Meta Types — typography only ─────────────────────────────────── */
|
|
20
28
|
|
|
21
|
-
[data-meta-type="id"],
|
|
22
|
-
[data-meta-type="code"] {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
29
|
+
[data-meta-type="id"],
|
|
30
|
+
[data-meta-type="code"] {
|
|
31
|
+
font-family: var(--rf-font-mono, monospace);
|
|
32
|
+
font-size: var(--meta-font-size, var(--rf-text-sm));
|
|
33
|
+
}
|
|
26
34
|
|
|
27
|
-
/* IDs read as primary-coloured references wherever they appear (eyebrow
|
|
35
|
+
/* IDs read as primary-coloured references wherever they appear (eyebrow
|
|
28
36
|
* bars, metadata def-lists, etc.) — a semantic treatment of the `id` type,
|
|
29
37
|
* not a per-layout one. `code` (e.g. API paths) stays neutral monospace. */
|
|
30
|
-
[data-meta-type="id"] {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
38
|
+
[data-meta-type="id"] {
|
|
39
|
+
color: var(--rf-color-primary);
|
|
40
|
+
font-weight: var(--rf-weight-medium);
|
|
41
|
+
}
|
|
34
42
|
|
|
35
|
-
[data-meta-type="quantity"] {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
43
|
+
[data-meta-type="quantity"] {
|
|
44
|
+
font-variant-numeric: tabular-nums;
|
|
45
|
+
font-size: var(--meta-font-size, 0.8125rem);
|
|
46
|
+
}
|
|
39
47
|
|
|
40
|
-
[data-meta-type="temporal"] {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
48
|
+
[data-meta-type="temporal"] {
|
|
49
|
+
font-variant-numeric: tabular-nums;
|
|
50
|
+
font-size: var(--meta-font-size, 0.8125rem);
|
|
51
|
+
}
|
|
44
52
|
|
|
45
|
-
/* Rating — `value` filled marks out of `total`; each mark carries
|
|
53
|
+
/* Rating — `value` filled marks out of `total`; each mark carries
|
|
46
54
|
* `data-filled`. Stars via colour (filled = primary, empty = border). The
|
|
47
55
|
* inline-flex row is structure (skeleton); the glyph + spacing + colours are
|
|
48
56
|
* skin. */
|
|
49
|
-
[data-meta-type="rating"] {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
[data-meta-type="rating"] span::before {
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
[data-meta-type="rating"] span[data-filled="true"] {
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
[data-meta-type="rating"] span[data-filled="false"] {
|
|
60
|
-
|
|
61
|
-
}
|
|
57
|
+
[data-meta-type="rating"] {
|
|
58
|
+
gap: 0.0625rem;
|
|
59
|
+
line-height: 1;
|
|
60
|
+
}
|
|
61
|
+
[data-meta-type="rating"] span::before {
|
|
62
|
+
content: "★";
|
|
63
|
+
}
|
|
64
|
+
[data-meta-type="rating"] span[data-filled="true"] {
|
|
65
|
+
color: var(--rf-color-primary);
|
|
66
|
+
}
|
|
67
|
+
[data-meta-type="rating"] span[data-filled="false"] {
|
|
68
|
+
color: var(--rf-color-border);
|
|
69
|
+
}
|
|
62
70
|
|
|
63
|
-
[data-meta-type="status"],
|
|
64
|
-
[data-meta-type="category"],
|
|
65
|
-
[data-meta-type="tag"] {
|
|
66
|
-
|
|
67
|
-
}
|
|
71
|
+
[data-meta-type="status"],
|
|
72
|
+
[data-meta-type="category"],
|
|
73
|
+
[data-meta-type="tag"] {
|
|
74
|
+
font-size: var(--meta-font-size, 0.8125rem);
|
|
75
|
+
}
|
|
68
76
|
|
|
69
|
-
/* Linked eyebrow content (matches today's hero behaviour). */
|
|
70
|
-
[data-zone="eyebrow"] a {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
77
|
+
/* Linked eyebrow content (matches today's hero behaviour). */
|
|
78
|
+
[data-zone="eyebrow"] a {
|
|
79
|
+
color: var(--rf-color-primary);
|
|
80
|
+
text-decoration: underline;
|
|
81
|
+
text-underline-offset: 0.15em;
|
|
82
|
+
}
|
|
75
83
|
|
|
76
|
-
/* ─── Layout: bar — spacing ────────────────────────────────────────── */
|
|
77
|
-
/* The flex row + end-push are structure (skeleton); the gap is skin. */
|
|
78
|
-
[data-zone-layout="bar"] {
|
|
79
|
-
|
|
80
|
-
}
|
|
84
|
+
/* ─── Layout: bar — spacing ────────────────────────────────────────── */
|
|
85
|
+
/* The flex row + end-push are structure (skeleton); the gap is skin. */
|
|
86
|
+
[data-zone-layout="bar"] {
|
|
87
|
+
gap: 0.5rem;
|
|
88
|
+
}
|
|
81
89
|
|
|
82
|
-
/* ─── Layout: definition-list — spacing + chrome ───────────────────── */
|
|
83
|
-
/* The grid + row stacking are structure (skeleton); the gaps, the per-row
|
|
90
|
+
/* ─── Layout: definition-list — spacing + chrome ───────────────────── */
|
|
91
|
+
/* The grid + row stacking are structure (skeleton); the gaps, the per-row
|
|
84
92
|
* border/padding/radius card chrome, and the dt/dd type are skin. */
|
|
85
|
-
[data-zone-layout="definition-list"] {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
93
|
+
[data-zone-layout="definition-list"] {
|
|
94
|
+
gap: 0.75rem;
|
|
95
|
+
margin: 1.25rem 0;
|
|
96
|
+
}
|
|
89
97
|
|
|
90
|
-
[data-zone-layout="definition-list"] > [data-name="row"] {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
98
|
+
[data-zone-layout="definition-list"] > [data-name="row"] {
|
|
99
|
+
gap: 0.125rem;
|
|
100
|
+
padding: 0.625rem 0.75rem;
|
|
101
|
+
border: 1px solid var(--rf-color-border);
|
|
102
|
+
border-radius: var(--rf-radius-sm);
|
|
103
|
+
}
|
|
96
104
|
|
|
97
|
-
[data-zone-layout="definition-list"] dt {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
105
|
+
[data-zone-layout="definition-list"] dt {
|
|
106
|
+
font-size: var(--rf-text-xs);
|
|
107
|
+
font-weight: var(--rf-weight-medium);
|
|
108
|
+
color: var(--rf-color-muted);
|
|
109
|
+
}
|
|
102
110
|
|
|
103
|
-
[data-zone-layout="definition-list"] dd {
|
|
104
|
-
|
|
105
|
-
}
|
|
111
|
+
[data-zone-layout="definition-list"] dd {
|
|
112
|
+
font-size: var(--rf-text-sm);
|
|
113
|
+
}
|
|
106
114
|
|
|
107
|
-
[data-zone-layout="definition-list"] dd[data-multi-value] {
|
|
108
|
-
|
|
109
|
-
}
|
|
115
|
+
[data-zone-layout="definition-list"] dd[data-multi-value] {
|
|
116
|
+
gap: 0.25rem;
|
|
117
|
+
}
|
|
110
118
|
|
|
111
|
-
/* ─── Labels ──────────────────────────────────────────────────────── */
|
|
119
|
+
/* ─── Labels ──────────────────────────────────────────────────────── */
|
|
112
120
|
|
|
113
|
-
/* Label element within a chip — thin, muted; pairs visually with the value */
|
|
114
|
-
[data-meta-label] {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
121
|
+
/* Label element within a chip — thin, muted; pairs visually with the value */
|
|
122
|
+
[data-meta-label] {
|
|
123
|
+
font-weight: var(--rf-weight-normal);
|
|
124
|
+
opacity: 0.65;
|
|
125
|
+
}
|
|
118
126
|
|
|
119
|
-
/* ─── Mobile: compact ──────────────────────────────────────────────── */
|
|
127
|
+
/* ─── Mobile: compact ──────────────────────────────────────────────── */
|
|
120
128
|
|
|
121
|
-
@media (max-width: 48rem) {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
129
|
+
@media (max-width: 48rem) {
|
|
130
|
+
[data-zone-layout="bar"] {
|
|
131
|
+
gap: 0.375rem;
|
|
132
|
+
}
|
|
125
133
|
|
|
126
|
-
|
|
134
|
+
/* The border + padding move to the list itself so the whole group reads as
|
|
127
135
|
* one bordered card (the per-row box is dropped by the skeleton's
|
|
128
136
|
* `display: contents`). */
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
+
[data-zone-layout="definition-list"] {
|
|
138
|
+
gap: 0.25rem 1rem;
|
|
139
|
+
padding: 0.75rem 1rem;
|
|
140
|
+
border: 1px solid var(--rf-color-border);
|
|
141
|
+
border-radius: var(--rf-radius-sm);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* Header rhythm stays skin with sections.css (deferred until the split layout
|
|
137
145
|
* + sections promote together). */
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
146
|
+
[data-section="header"] {
|
|
147
|
+
gap: 0.375rem;
|
|
148
|
+
margin-bottom: 1.5rem;
|
|
149
|
+
}
|
|
141
150
|
}
|
|
142
151
|
}
|
|
143
|
-
|
|
144
|
-
}
|
|
@@ -26,12 +26,32 @@
|
|
|
26
26
|
/* Per-character offsets — set on the `[data-reveal]` container and inherited by
|
|
27
27
|
* staggered children, so the single hidden-state block below covers every
|
|
28
28
|
* character. `none` carries no offsets (it never animates). */
|
|
29
|
-
[data-reveal="fade"]
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
[data-reveal="fade"] {
|
|
30
|
+
--reveal-x: 0;
|
|
31
|
+
--reveal-y: 0;
|
|
32
|
+
--reveal-scale: 1;
|
|
33
|
+
--reveal-blur: 0;
|
|
34
|
+
}
|
|
35
|
+
[data-reveal="slide"] {
|
|
36
|
+
--reveal-x: 0;
|
|
37
|
+
--reveal-y: var(--rf-reveal-distance, 1.5rem);
|
|
38
|
+
--reveal-scale: 1;
|
|
39
|
+
--reveal-blur: 0;
|
|
40
|
+
}
|
|
41
|
+
[data-reveal="scale"] {
|
|
42
|
+
--reveal-x: 0;
|
|
43
|
+
--reveal-y: 0;
|
|
44
|
+
--reveal-scale: var(--rf-reveal-scale-start, 0.95);
|
|
45
|
+
--reveal-blur: 0;
|
|
46
|
+
}
|
|
32
47
|
/* `blur` is focus-led; it animates `filter` (not compositor-cheap), so a theme
|
|
33
48
|
* or low-power path may downgrade it to `fade` by zeroing the blur token. */
|
|
34
|
-
[data-reveal="blur"]
|
|
49
|
+
[data-reveal="blur"] {
|
|
50
|
+
--reveal-x: 0;
|
|
51
|
+
--reveal-y: 0;
|
|
52
|
+
--reveal-scale: 1;
|
|
53
|
+
--reveal-blur: var(--rf-reveal-blur, 8px);
|
|
54
|
+
}
|
|
35
55
|
|
|
36
56
|
/* The animated unit:
|
|
37
57
|
* • non-staggered → the `[data-reveal]` element itself,
|
|
@@ -43,19 +63,21 @@
|
|
|
43
63
|
* the `transform` shorthand, so it composes with the rune transforms Lumina
|
|
44
64
|
* already uses (hover-lifts on card/cta/feature, frame displacement, drawer/nav
|
|
45
65
|
* slides) instead of clobbering them. */
|
|
46
|
-
[data-animate]
|
|
66
|
+
[data-animate]
|
|
67
|
+
:where(
|
|
47
68
|
[data-reveal]:not([data-reveal="none"]):not([data-stagger]),
|
|
48
69
|
[data-stagger]:not([data-reveal="none"]) [style*="--rf-reveal-index"]
|
|
49
70
|
) {
|
|
50
71
|
transition:
|
|
51
|
-
opacity
|
|
72
|
+
opacity var(--rf-reveal-duration, 0.9s) var(--rf-reveal-easing, ease-out),
|
|
52
73
|
translate var(--rf-reveal-duration, 0.9s) var(--rf-reveal-easing, ease-out),
|
|
53
|
-
scale
|
|
54
|
-
filter
|
|
74
|
+
scale var(--rf-reveal-duration, 0.9s) var(--rf-reveal-easing, ease-out),
|
|
75
|
+
filter var(--rf-reveal-duration, 0.9s) var(--rf-reveal-easing, ease-out);
|
|
55
76
|
}
|
|
56
77
|
|
|
57
78
|
/* Pre-entrance (hidden) — until the unit's trigger fires. */
|
|
58
|
-
[data-animate]
|
|
79
|
+
[data-animate]
|
|
80
|
+
:where(
|
|
59
81
|
[data-reveal]:not([data-reveal="none"]):not([data-stagger]):not([data-in-view]),
|
|
60
82
|
[data-stagger]:not([data-reveal="none"]):not([data-in-view]) [style*="--rf-reveal-index"]
|
|
61
83
|
) {
|
|
@@ -70,7 +92,8 @@
|
|
|
70
92
|
* transition `translate`/`scale`/`filter` to-or-from `none`, so reverting to
|
|
71
93
|
* the default would snap (no motion on iOS) — only opacity would animate.
|
|
72
94
|
* Transitioning between two explicit values animates everywhere. */
|
|
73
|
-
[data-animate]
|
|
95
|
+
[data-animate]
|
|
96
|
+
:where(
|
|
74
97
|
[data-reveal]:not([data-reveal="none"]):not([data-stagger])[data-in-view],
|
|
75
98
|
[data-stagger][data-in-view] [style*="--rf-reveal-index"]
|
|
76
99
|
) {
|
|
@@ -90,11 +113,17 @@
|
|
|
90
113
|
* sliding section, let the media arrive a beat behind the content for a subtle
|
|
91
114
|
* two-part entrance. Demonstrated on the named anatomy the theme already styles;
|
|
92
115
|
* a theme adds or drops this freely. */
|
|
93
|
-
[data-animate]
|
|
116
|
+
[data-animate]
|
|
117
|
+
[data-reveal="slide"]:not([data-stagger]):not([data-in-view])
|
|
118
|
+
> *
|
|
119
|
+
> [data-section="media"] {
|
|
94
120
|
translate: 0 calc(var(--rf-reveal-distance, 1.5rem) * 1.5);
|
|
95
121
|
}
|
|
96
|
-
[data-animate]
|
|
97
|
-
|
|
122
|
+
[data-animate]
|
|
123
|
+
[data-reveal="slide"]:not([data-stagger])[data-in-view]
|
|
124
|
+
> *
|
|
125
|
+
> [data-section="media"] {
|
|
126
|
+
translate: 0 0; /* explicit identity end-state — see the WebKit note above */
|
|
98
127
|
}
|
|
99
128
|
[data-animate] [data-reveal="slide"]:not([data-stagger]) > * > [data-section="media"] {
|
|
100
129
|
transition: translate var(--rf-reveal-duration, 0.9s) var(--rf-reveal-easing, ease-out);
|
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
@layer skin {
|
|
2
|
-
/* Reading register (SPEC-108) — Lumina's editorial treatment of `[data-reading]`.
|
|
2
|
+
/* Reading register (SPEC-108) — Lumina's editorial treatment of `[data-reading]`.
|
|
3
3
|
* The measure cap + niceties are structural (skeleton); this is the type, rhythm,
|
|
4
4
|
* and drop-cap glyph. `ui` (the default) is left to the base body styling. */
|
|
5
5
|
|
|
6
|
-
/* Prose — long-form reading. */
|
|
7
|
-
[data-reading="prose"] {
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
[data-reading="prose"] > p {
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
[data-reading="prose"] a {
|
|
14
|
-
|
|
15
|
-
}
|
|
6
|
+
/* Prose — long-form reading. */
|
|
7
|
+
[data-reading="prose"] {
|
|
8
|
+
line-height: var(--rf-leading-relaxed);
|
|
9
|
+
}
|
|
10
|
+
[data-reading="prose"] > p {
|
|
11
|
+
margin-bottom: 1em;
|
|
12
|
+
}
|
|
13
|
+
[data-reading="prose"] a {
|
|
14
|
+
text-underline-offset: 0.15em;
|
|
15
|
+
}
|
|
16
16
|
|
|
17
|
-
/* Drop-cap glyph — the theme owns the treatment; the author owns where (the
|
|
17
|
+
/* Drop-cap glyph — the theme owns the treatment; the author owns where (the
|
|
18
18
|
* `dropcap` opt-in, honoured only on a prose body). */
|
|
19
|
-
[data-reading="prose"][data-dropcap] > p:first-child::first-letter {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
19
|
+
[data-reading="prose"][data-dropcap] > p:first-child::first-letter {
|
|
20
|
+
font-size: 3.5em;
|
|
21
|
+
font-weight: var(--rf-weight-bold);
|
|
22
|
+
line-height: 0.8;
|
|
23
|
+
padding-right: 0.1em;
|
|
24
|
+
margin-top: 0.05em;
|
|
25
|
+
color: var(--rf-color-primary);
|
|
26
|
+
font-family: Georgia, "Times New Roman", serif;
|
|
27
|
+
}
|
|
28
28
|
|
|
29
|
-
/* Fine print — captions, footnotes, asides: smaller and quieter. */
|
|
30
|
-
[data-reading="fine"] {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
29
|
+
/* Fine print — captions, footnotes, asides: smaller and quieter. */
|
|
30
|
+
[data-reading="fine"] {
|
|
31
|
+
font-size: var(--rf-text-sm);
|
|
32
|
+
line-height: var(--rf-leading-normal);
|
|
33
|
+
color: var(--rf-color-muted);
|
|
34
|
+
}
|
|
35
35
|
}
|
|
@@ -1,67 +1,66 @@
|
|
|
1
1
|
@layer skin {
|
|
2
|
-
/* ─── Section Anatomy Dimension — skin ──────────────────────────────────
|
|
2
|
+
/* ─── Section Anatomy Dimension — skin ──────────────────────────────────
|
|
3
3
|
* Zone rhythm (margins, gaps, padding), typography, and borders for the 6
|
|
4
4
|
* standard section roles. The flex zone *containers* (header / preamble /
|
|
5
5
|
* footer) live in @refrakt-md/skeleton (dimensions/sections.css). Rhythm stays
|
|
6
6
|
* here so rune zone overrides resolve against it by source order.
|
|
7
7
|
* ────────────────────────────────────────────────────────────────────── */
|
|
8
8
|
|
|
9
|
-
/* ─── Header: chrome metadata row (badges, status, icons) ────────── */
|
|
10
|
-
[data-section="header"] {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
9
|
+
/* ─── Header: chrome metadata row (badges, status, icons) ────────── */
|
|
10
|
+
[data-section="header"] {
|
|
11
|
+
gap: 0.5rem;
|
|
12
|
+
margin-bottom: 3rem;
|
|
13
|
+
}
|
|
14
14
|
|
|
15
|
-
/* ─── Preamble: intro section (eyebrow, headline, blurb) ─────────── */
|
|
16
|
-
[data-section="preamble"] {
|
|
17
|
-
|
|
18
|
-
}
|
|
15
|
+
/* ─── Preamble: intro section (eyebrow, headline, blurb) ─────────── */
|
|
16
|
+
[data-section="preamble"] {
|
|
17
|
+
gap: 0.25rem;
|
|
18
|
+
}
|
|
19
19
|
|
|
20
|
-
/* ─── Title: primary heading ──────────────────────────────────────── */
|
|
21
|
-
/* Two inputs, in priority order:
|
|
20
|
+
/* ─── Title: primary heading ──────────────────────────────────────── */
|
|
21
|
+
/* Two inputs, in priority order:
|
|
22
22
|
* --rf-prominence-size an explicit author `prominence=` (surfaces.css)
|
|
23
23
|
* --rf-title-size the resting size for this density (density.css)
|
|
24
24
|
* They were one variable until v0.32.0, which meant a rune could not state its
|
|
25
25
|
* own resting size without also clobbering the author's override — the reason
|
|
26
26
|
* `prominence` was inert on eight runes (WORK-538). Splitting them lets a rune
|
|
27
27
|
* pin its default while `prominence` still wins. */
|
|
28
|
-
[data-section="title"] {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
28
|
+
[data-section="title"] {
|
|
29
|
+
font-family: var(--rf-font-sans);
|
|
30
|
+
font-size: var(--rf-prominence-size, var(--rf-title-size, var(--rf-text-2xl)));
|
|
31
|
+
font-weight: var(--rf-weight-bold);
|
|
32
|
+
line-height: var(--rf-leading-tight);
|
|
33
|
+
color: var(--rf-color-text);
|
|
34
|
+
margin: 0;
|
|
35
|
+
}
|
|
36
36
|
|
|
37
|
-
/* ─── Description: secondary text ─────────────────────────────────── */
|
|
38
|
-
[data-section="description"] {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
37
|
+
/* ─── Description: secondary text ─────────────────────────────────── */
|
|
38
|
+
[data-section="description"] {
|
|
39
|
+
font-size: var(--rf-text);
|
|
40
|
+
line-height: var(--rf-leading-normal);
|
|
41
|
+
color: var(--rf-color-muted);
|
|
42
|
+
margin: var(--rf-spacing-xs) 0 var(--rf-spacing-md);
|
|
43
|
+
}
|
|
44
44
|
|
|
45
|
-
/* ─── Body: main content ──────────────────────────────────────────── */
|
|
46
|
-
[data-section="body"] {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
45
|
+
/* ─── Body: main content ──────────────────────────────────────────── */
|
|
46
|
+
[data-section="body"] {
|
|
47
|
+
line-height: var(--rf-leading-relaxed);
|
|
48
|
+
color: var(--rf-color-text);
|
|
49
|
+
}
|
|
50
50
|
|
|
51
|
-
/* ─── Footer: actions and links ───────────────────────────────────── */
|
|
52
|
-
[data-section="footer"] {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
51
|
+
/* ─── Footer: actions and links ───────────────────────────────────── */
|
|
52
|
+
[data-section="footer"] {
|
|
53
|
+
gap: var(--rf-spacing-sm);
|
|
54
|
+
margin-top: var(--rf-spacing-md);
|
|
55
|
+
padding-top: var(--rf-spacing-sm);
|
|
56
|
+
border-top: 1px solid var(--rf-color-border);
|
|
57
|
+
}
|
|
58
58
|
|
|
59
|
-
/* ─── Media: visual content ───────────────────────────────────────── */
|
|
60
|
-
[data-section="media"] {
|
|
61
|
-
|
|
59
|
+
/* ─── Media: visual content ───────────────────────────────────────── */
|
|
60
|
+
[data-section="media"] {
|
|
61
|
+
/* Media zones manage their own spacing via their layout (split gap, cell
|
|
62
62
|
* padding, flow margins); a blanket block margin here misaligns media in
|
|
63
63
|
* flex/beside layouts, so keep it neutral. */
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
64
|
+
margin: 0;
|
|
65
|
+
}
|
|
67
66
|
}
|
|
@@ -1,64 +1,63 @@
|
|
|
1
1
|
@layer skin {
|
|
2
|
-
/* === Sequential Items — skin ===
|
|
2
|
+
/* === Sequential Items — skin ===
|
|
3
3
|
* The connector lines (borders), the marker chrome (fill, radius, shadow), the
|
|
4
4
|
* counter type, and the layout gaps. The counter mechanism, list resets, item
|
|
5
5
|
* geometry, and marker box placement live in @refrakt-md/skeleton
|
|
6
6
|
* (dimensions/sequence.css). */
|
|
7
7
|
|
|
8
|
-
/* Numbered — counter circle chrome + type. */
|
|
9
|
-
[data-sequence="numbered"] > li::before {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
[data-sequence="numbered"] > li + li {
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/* Connected vertical — the line is a left border; the dot is the marker. */
|
|
23
|
-
[data-sequence="connected"] > li {
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
[data-sequence="connected"] > li:last-child {
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
[data-sequence="connected"] > li::before {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/* Connected horizontal — the line moves to the top border; gap spaces the items. */
|
|
39
|
-
[data-sequence="connected"][data-sequence-direction="horizontal"] {
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
[data-sequence="connected"][data-sequence-direction="horizontal"] > li {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
[data-sequence="connected"][data-sequence-direction="horizontal"] > li:last-child {
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/* === Density interaction === */
|
|
53
|
-
|
|
54
|
-
/* Compact: smaller circle keeps the same type scale. */
|
|
55
|
-
[data-density="compact"] [data-sequence="numbered"] > li::before {
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/* Minimal: drop the connector line on the collapsed list. */
|
|
60
|
-
[data-density="minimal"] [data-sequence="connected"] > li {
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
|
|
8
|
+
/* Numbered — counter circle chrome + type. */
|
|
9
|
+
[data-sequence="numbered"] > li::before {
|
|
10
|
+
font-size: var(--rf-text-xs);
|
|
11
|
+
font-weight: var(--rf-weight-bold);
|
|
12
|
+
font-variant-numeric: tabular-nums;
|
|
13
|
+
color: var(--rf-color-primary);
|
|
14
|
+
background: var(--rf-color-surface-active);
|
|
15
|
+
border-radius: 50%;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
[data-sequence="numbered"] > li + li {
|
|
19
|
+
border-top: 1px solid var(--rf-color-border);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* Connected vertical — the line is a left border; the dot is the marker. */
|
|
23
|
+
[data-sequence="connected"] > li {
|
|
24
|
+
border-left: 2px solid var(--rf-color-border);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
[data-sequence="connected"] > li:last-child {
|
|
28
|
+
border-left-color: transparent;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
[data-sequence="connected"] > li::before {
|
|
32
|
+
border-radius: 50%;
|
|
33
|
+
background: var(--rf-color-primary);
|
|
34
|
+
border: 2px solid var(--rf-color-bg);
|
|
35
|
+
box-shadow: 0 0 0 2px var(--rf-color-primary);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* Connected horizontal — the line moves to the top border; gap spaces the items. */
|
|
39
|
+
[data-sequence="connected"][data-sequence-direction="horizontal"] {
|
|
40
|
+
gap: 2rem;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
[data-sequence="connected"][data-sequence-direction="horizontal"] > li {
|
|
44
|
+
border-left: none;
|
|
45
|
+
border-top: 2px solid var(--rf-color-border);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
[data-sequence="connected"][data-sequence-direction="horizontal"] > li:last-child {
|
|
49
|
+
border-top-color: var(--rf-color-border);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* === Density interaction === */
|
|
53
|
+
|
|
54
|
+
/* Compact: smaller circle keeps the same type scale. */
|
|
55
|
+
[data-density="compact"] [data-sequence="numbered"] > li::before {
|
|
56
|
+
font-size: var(--rf-text-xs);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/* Minimal: drop the connector line on the collapsed list. */
|
|
60
|
+
[data-density="minimal"] [data-sequence="connected"] > li {
|
|
61
|
+
border-left: none;
|
|
62
|
+
}
|
|
64
63
|
}
|