@refrakt-md/lumina 0.21.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 +5 -3
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +44 -3
- package/dist/tokens.js.map +1 -1
- package/index.css +11 -1
- package/package.json +7 -5
- package/styles/base/attributes.css +6 -7
- package/styles/dimensions/checklist.css +7 -36
- package/styles/dimensions/cover.css +13 -95
- package/styles/dimensions/density.css +6 -3
- package/styles/dimensions/frame.css +7 -4
- package/styles/dimensions/media.css +14 -61
- package/styles/dimensions/metadata.css +30 -80
- package/styles/dimensions/sections.css +16 -30
- package/styles/dimensions/sequence.css +17 -82
- 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 +24 -63
- package/styles/layouts/blog.css +34 -95
- package/styles/layouts/default.css +12 -86
- package/styles/layouts/docs.css +9 -159
- package/styles/layouts/mobile.css +3 -52
- package/styles/layouts/on-this-page.css +8 -7
- package/styles/layouts/plan.css +27 -158
- package/styles/layouts/search.css +17 -82
- package/styles/layouts/split.css +24 -169
- package/styles/layouts/theme-toggle.css +3 -29
- package/styles/layouts/version-switcher.css +9 -10
- package/styles/runes/accordion.css +25 -68
- package/styles/runes/aggregate.css +4 -13
- package/styles/runes/annotate.css +11 -40
- package/styles/runes/api.css +4 -1
- package/styles/runes/audio.css +12 -50
- package/styles/runes/badge.css +5 -2
- package/styles/runes/bar.css +3 -0
- package/styles/runes/bento.css +18 -161
- package/styles/runes/bg.css +3 -37
- package/styles/runes/blog.css +18 -20
- package/styles/runes/bond.css +6 -26
- package/styles/runes/breadcrumb.css +7 -15
- package/styles/runes/budget.css +23 -45
- package/styles/runes/bug.css +5 -2
- package/styles/runes/card.css +27 -95
- package/styles/runes/cast.css +10 -27
- package/styles/runes/changelog.css +13 -17
- package/styles/runes/character.css +6 -20
- package/styles/runes/chart.css +15 -57
- package/styles/runes/codegroup.css +18 -26
- package/styles/runes/collection.css +8 -85
- package/styles/runes/compare.css +8 -19
- package/styles/runes/comparison.css +29 -56
- package/styles/runes/conversation.css +9 -31
- package/styles/runes/cta.css +17 -40
- package/styles/runes/datatable.css +33 -48
- package/styles/runes/decision.css +5 -2
- package/styles/runes/design-context.css +5 -4
- package/styles/runes/details.css +9 -17
- package/styles/runes/diagram.css +8 -16
- package/styles/runes/diff.css +11 -94
- package/styles/runes/drawer.css +9 -113
- package/styles/runes/embed.css +5 -13
- package/styles/runes/event.css +5 -3
- package/styles/runes/expand.css +10 -45
- package/styles/runes/faction.css +6 -12
- package/styles/runes/feature.css +15 -43
- package/styles/runes/figure.css +7 -26
- package/styles/runes/file-ref.css +3 -18
- package/styles/runes/form.css +19 -48
- package/styles/runes/gallery.css +8 -140
- package/styles/runes/grid.css +4 -56
- package/styles/runes/hero.css +28 -140
- package/styles/runes/hint.css +23 -48
- package/styles/runes/howto.css +9 -31
- package/styles/runes/itinerary.css +15 -44
- package/styles/runes/juxtapose.css +17 -92
- package/styles/runes/lore.css +7 -14
- package/styles/runes/map.css +9 -42
- package/styles/runes/mediatext.css +4 -45
- package/styles/runes/milestone.css +15 -28
- package/styles/runes/mockup.css +10 -115
- package/styles/runes/nav.css +37 -212
- package/styles/runes/organization.css +6 -5
- package/styles/runes/page-section.css +3 -4
- package/styles/runes/pagination.css +10 -42
- package/styles/runes/palette.css +16 -35
- package/styles/runes/placeholder.css +16 -0
- package/styles/runes/plan-history.css +23 -43
- package/styles/runes/plan-progress.css +6 -7
- package/styles/runes/plan-ref.css +4 -1
- package/styles/runes/playlist.css +10 -44
- package/styles/runes/plot.css +9 -25
- package/styles/runes/preview.css +9 -34
- package/styles/runes/pricing.css +23 -41
- package/styles/runes/progress.css +8 -27
- package/styles/runes/pullquote.css +9 -31
- package/styles/runes/realm.css +6 -12
- package/styles/runes/recipe.css +12 -36
- package/styles/runes/relationships.css +5 -36
- package/styles/runes/reveal.css +17 -22
- package/styles/runes/sandbox.css +9 -39
- package/styles/runes/section.css +10 -24
- package/styles/runes/showcase.css +3 -20
- package/styles/runes/sidenote.css +5 -4
- package/styles/runes/snippet.css +3 -0
- package/styles/runes/spacing.css +14 -33
- package/styles/runes/spec.css +5 -2
- package/styles/runes/steps.css +14 -46
- package/styles/runes/storyboard.css +4 -19
- package/styles/runes/swatch.css +4 -7
- package/styles/runes/symbol.css +16 -14
- package/styles/runes/tabs.css +15 -18
- package/styles/runes/testimonial.css +12 -13
- package/styles/runes/textblock.css +6 -24
- package/styles/runes/timeline.css +10 -28
- package/styles/runes/tint.css +3 -0
- package/styles/runes/toc.css +9 -7
- package/styles/runes/track.css +12 -41
- package/styles/runes/typography.css +15 -27
- package/styles/runes/work.css +5 -2
- package/styles/runes/xref.css +3 -1
- package/tokens/base.css +56 -66
- package/tokens/dark.css +79 -80
- package/styles/dimensions/guest-posture.css +0 -27
|
@@ -1,26 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
@layer skin {
|
|
2
|
+
/* Breadcrumb — skin. The contents passthroughs + the flex trail live in
|
|
3
|
+
* @refrakt-md/skeleton (styles/runes/breadcrumb.css). */
|
|
2
4
|
.rf-breadcrumb {
|
|
3
|
-
font-size:
|
|
5
|
+
font-size: var(--rf-text-sm);
|
|
4
6
|
margin: 0 0 1.5rem;
|
|
5
7
|
}
|
|
6
|
-
.rf-breadcrumb__items {
|
|
7
|
-
display: contents;
|
|
8
|
-
}
|
|
9
|
-
.rf-breadcrumb-item {
|
|
10
|
-
display: contents;
|
|
11
|
-
}
|
|
12
8
|
.rf-breadcrumb ol {
|
|
13
|
-
display: flex;
|
|
14
|
-
align-items: center;
|
|
15
|
-
flex-wrap: wrap;
|
|
16
9
|
gap: 0.25rem;
|
|
17
|
-
list-style: none;
|
|
18
10
|
padding: 0;
|
|
19
11
|
margin: 0;
|
|
20
12
|
}
|
|
21
13
|
.rf-breadcrumb li {
|
|
22
|
-
display: flex;
|
|
23
|
-
align-items: center;
|
|
24
14
|
gap: 0.25rem;
|
|
25
15
|
padding: 0;
|
|
26
16
|
margin: 0;
|
|
@@ -42,5 +32,7 @@
|
|
|
42
32
|
}
|
|
43
33
|
.rf-breadcrumb li:last-child span {
|
|
44
34
|
color: var(--rf-color-text);
|
|
45
|
-
font-weight:
|
|
35
|
+
font-weight: var(--rf-weight-medium);
|
|
36
|
+
}
|
|
37
|
+
|
|
46
38
|
}
|
package/styles/runes/budget.css
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
@layer skin {
|
|
1
2
|
/* Budget */
|
|
2
3
|
|
|
3
4
|
/* Duration + currency meta row — flex/gap from the shared
|
|
@@ -9,9 +10,9 @@
|
|
|
9
10
|
margin-bottom: 1.5rem;
|
|
10
11
|
}
|
|
11
12
|
.rf-budget .rf-budget__eyebrow {
|
|
12
|
-
font-size:
|
|
13
|
-
font-weight:
|
|
14
|
-
letter-spacing:
|
|
13
|
+
font-size: var(--rf-text-xs);
|
|
14
|
+
font-weight: var(--rf-weight-semibold);
|
|
15
|
+
letter-spacing: var(--rf-tracking-wider);
|
|
15
16
|
text-transform: uppercase;
|
|
16
17
|
color: var(--rf-color-primary);
|
|
17
18
|
margin: 0 0 0.375rem;
|
|
@@ -28,8 +29,6 @@
|
|
|
28
29
|
|
|
29
30
|
/* Categories */
|
|
30
31
|
.rf-budget__categories {
|
|
31
|
-
display: flex;
|
|
32
|
-
flex-direction: column;
|
|
33
32
|
gap: 1.5rem;
|
|
34
33
|
}
|
|
35
34
|
|
|
@@ -42,17 +41,14 @@
|
|
|
42
41
|
padding-left: 1rem;
|
|
43
42
|
}
|
|
44
43
|
.rf-budget-category__header {
|
|
45
|
-
display: flex;
|
|
46
|
-
justify-content: space-between;
|
|
47
|
-
align-items: center;
|
|
48
44
|
margin-bottom: 0.5rem;
|
|
49
45
|
}
|
|
50
46
|
.rf-budget-category--estimate .rf-budget-category__subtotal::before {
|
|
51
47
|
content: 'est.';
|
|
52
|
-
font-size:
|
|
53
|
-
font-weight:
|
|
48
|
+
font-size: var(--rf-text-xs);
|
|
49
|
+
font-weight: var(--rf-weight-semibold);
|
|
54
50
|
text-transform: uppercase;
|
|
55
|
-
letter-spacing:
|
|
51
|
+
letter-spacing: var(--rf-tracking-wider);
|
|
56
52
|
color: var(--rf-color-warning);
|
|
57
53
|
background: var(--rf-color-warning-bg);
|
|
58
54
|
padding: 0.0625rem 0.375rem;
|
|
@@ -61,27 +57,23 @@
|
|
|
61
57
|
vertical-align: middle;
|
|
62
58
|
}
|
|
63
59
|
.rf-budget-category__label {
|
|
64
|
-
font-size:
|
|
65
|
-
font-weight:
|
|
60
|
+
font-size: var(--rf-text);
|
|
61
|
+
font-weight: var(--rf-weight-semibold);
|
|
66
62
|
color: var(--rf-color-text);
|
|
67
63
|
}
|
|
68
64
|
.rf-budget-category__subtotal {
|
|
69
|
-
font-size:
|
|
70
|
-
font-weight:
|
|
65
|
+
font-size: var(--rf-text);
|
|
66
|
+
font-weight: var(--rf-weight-semibold);
|
|
71
67
|
color: var(--rf-color-text);
|
|
72
68
|
white-space: nowrap;
|
|
73
69
|
}
|
|
74
70
|
.rf-budget-category__line-items {
|
|
75
|
-
list-style: none;
|
|
76
71
|
padding: 0;
|
|
77
72
|
margin: 0;
|
|
78
73
|
}
|
|
79
74
|
|
|
80
75
|
/* Budget Line Item */
|
|
81
76
|
.rf-budget-line-item {
|
|
82
|
-
display: flex;
|
|
83
|
-
justify-content: space-between;
|
|
84
|
-
align-items: baseline;
|
|
85
77
|
padding: 0.3125rem 0;
|
|
86
78
|
gap: 1rem;
|
|
87
79
|
}
|
|
@@ -89,14 +81,12 @@
|
|
|
89
81
|
border-top: 1px solid var(--rf-color-border);
|
|
90
82
|
}
|
|
91
83
|
.rf-budget-line-item__description {
|
|
92
|
-
font-size:
|
|
84
|
+
font-size: var(--rf-text-sm);
|
|
93
85
|
color: var(--rf-color-muted);
|
|
94
|
-
flex: 1;
|
|
95
|
-
min-width: 0;
|
|
96
86
|
}
|
|
97
87
|
.rf-budget-line-item__amount {
|
|
98
|
-
font-size:
|
|
99
|
-
font-weight:
|
|
88
|
+
font-size: var(--rf-text-sm);
|
|
89
|
+
font-weight: var(--rf-weight-medium);
|
|
100
90
|
color: var(--rf-color-text);
|
|
101
91
|
white-space: nowrap;
|
|
102
92
|
font-variant-numeric: tabular-nums;
|
|
@@ -107,51 +97,39 @@
|
|
|
107
97
|
margin-top: 1.5rem;
|
|
108
98
|
padding-top: 1rem;
|
|
109
99
|
border-top: 2px solid var(--rf-color-text);
|
|
110
|
-
display: flex;
|
|
111
|
-
flex-direction: column;
|
|
112
100
|
gap: 0.5rem;
|
|
113
101
|
}
|
|
114
102
|
.rf-budget__total {
|
|
115
|
-
display: flex;
|
|
116
|
-
justify-content: space-between;
|
|
117
|
-
align-items: baseline;
|
|
118
103
|
gap: 1rem;
|
|
119
104
|
}
|
|
120
105
|
.rf-budget__total-label {
|
|
121
|
-
font-size:
|
|
122
|
-
font-weight:
|
|
106
|
+
font-size: var(--rf-text);
|
|
107
|
+
font-weight: var(--rf-weight-bold);
|
|
123
108
|
color: var(--rf-color-text);
|
|
124
109
|
}
|
|
125
110
|
.rf-budget__total-amount {
|
|
126
|
-
font-size:
|
|
127
|
-
font-weight:
|
|
111
|
+
font-size: var(--rf-text-xl);
|
|
112
|
+
font-weight: var(--rf-weight-bold);
|
|
128
113
|
color: var(--rf-color-text);
|
|
129
114
|
white-space: nowrap;
|
|
130
115
|
font-variant-numeric: tabular-nums;
|
|
131
116
|
}
|
|
132
117
|
.rf-budget__per-day {
|
|
133
|
-
display: flex;
|
|
134
|
-
justify-content: space-between;
|
|
135
|
-
align-items: baseline;
|
|
136
118
|
gap: 1rem;
|
|
137
119
|
}
|
|
138
120
|
.rf-budget__per-day-label {
|
|
139
|
-
font-size:
|
|
121
|
+
font-size: var(--rf-text-sm);
|
|
140
122
|
color: var(--rf-color-muted);
|
|
141
|
-
min-width: 0;
|
|
142
123
|
}
|
|
143
124
|
.rf-budget__per-day-amount {
|
|
144
|
-
font-size:
|
|
145
|
-
font-weight:
|
|
125
|
+
font-size: var(--rf-text);
|
|
126
|
+
font-weight: var(--rf-weight-medium);
|
|
146
127
|
color: var(--rf-color-muted);
|
|
147
128
|
white-space: nowrap;
|
|
148
129
|
font-variant-numeric: tabular-nums;
|
|
149
130
|
}
|
|
150
|
-
|
|
151
|
-
/* Summary style — hide line items, show only category headers */
|
|
152
|
-
[data-variant="summary"] .rf-budget-category__line-items {
|
|
153
|
-
display: none;
|
|
154
|
-
}
|
|
155
131
|
[data-variant="summary"] .rf-budget-category__header {
|
|
156
132
|
margin-bottom: 0;
|
|
157
133
|
}
|
|
134
|
+
|
|
135
|
+
}
|
package/styles/runes/bug.css
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
@layer skin {
|
|
1
2
|
/* Bug */
|
|
2
3
|
|
|
3
4
|
/* SPEC-079: eyebrow + metadata zone names replace header-primary /
|
|
@@ -20,8 +21,8 @@
|
|
|
20
21
|
.rf-bug__metadata [data-field="assignee"] dd .rf-badge::before { content: '@'; }
|
|
21
22
|
|
|
22
23
|
.rf-bug__body {
|
|
23
|
-
font-size:
|
|
24
|
-
line-height:
|
|
24
|
+
font-size: var(--rf-text-sm);
|
|
25
|
+
line-height: var(--rf-leading-relaxed);
|
|
25
26
|
}
|
|
26
27
|
.rf-bug__body > section {
|
|
27
28
|
margin-top: 1rem;
|
|
@@ -31,3 +32,5 @@
|
|
|
31
32
|
.rf-bug__body > section:first-child {
|
|
32
33
|
margin-top: 0.75rem;
|
|
33
34
|
}
|
|
35
|
+
|
|
36
|
+
}
|
package/styles/runes/card.css
CHANGED
|
@@ -1,73 +1,52 @@
|
|
|
1
|
-
|
|
1
|
+
@layer skin {
|
|
2
|
+
/* card — generic content card (SPEC-070) — skin.
|
|
2
3
|
*
|
|
3
4
|
* A soft surface fill plus a subtle border; the surface + border + structure
|
|
4
|
-
* (media split, footer separator) carry the card.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* data-name="content" / data-media-position).
|
|
5
|
+
* (media split, footer separator) carry the card. Pure layout (the stretched
|
|
6
|
+
* link, clip, split align, collection-grid height filling, height scale) lives in
|
|
7
|
+
* @refrakt-md/skeleton (styles/runes/card.css). All spacing stays here in skin.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
.rf-card {
|
|
11
|
-
position: relative; /* anchor for the stretched link */
|
|
12
11
|
/* Thin-edge inset model (matches `bento-cell`): the card hugs its media with
|
|
13
12
|
* only a small edge margin, and the content zone adds the remaining inset
|
|
14
|
-
* back below
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
|
|
18
|
-
* content (stacked layout, or split collapsed
|
|
19
|
-
* to one column on mobile).
|
|
20
|
-
* • `--rf-card-split-gap` — tight gap when media sits beside content,
|
|
21
|
-
* so the card reads as a unified surface
|
|
22
|
-
* rather than two loosely-related panels. */
|
|
23
|
-
--rf-card-edge: 0.5rem;
|
|
13
|
+
* back below. The root `padding` lives in skin so it overrides the
|
|
14
|
+
* surface-elevation padding (dimensions/surfaces.css, also skin) by source
|
|
15
|
+
* order — in skeleton it would lose and an elevated card would double-pad. */
|
|
16
|
+
--rf-card-edge: var(--rf-spacing-sm);
|
|
24
17
|
--rf-card-media-gap: var(--rf-spacing-lg);
|
|
25
18
|
--rf-card-split-gap: var(--rf-spacing-sm);
|
|
26
19
|
padding: var(--rf-card-edge);
|
|
27
20
|
border-radius: var(--rf-radius-container);
|
|
28
21
|
border: 1px solid var(--rf-color-border);
|
|
29
22
|
background: var(--rf-color-surface);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* Media slot shares the card surface chrome (1px border + recessed well) so the
|
|
26
|
+
* framed media reads as part of the card. `:where()` keeps it overridable
|
|
27
|
+
* per-instance, matching the elevation rule. */
|
|
28
|
+
:where(.rf-card) [data-section="media"] {
|
|
29
|
+
border: 1px solid var(--rf-color-border);
|
|
30
|
+
background: oklch(from var(--rf-color-surface) calc(l - var(--rf-surface-inset-shift)) c h);
|
|
37
31
|
}
|
|
38
32
|
|
|
39
33
|
/* Content zone fills the remaining inset so total text padding still equals
|
|
40
|
-
* `--rune-padding`. `max(0, …)` keeps dense+ (rune-padding < edge) safe
|
|
41
|
-
* tighter densities the edge becomes the floor. */
|
|
34
|
+
* `--rune-padding`. `max(0, …)` keeps dense+ (rune-padding < edge) safe. */
|
|
42
35
|
.rf-card__content {
|
|
43
36
|
padding: max(0px, calc(var(--rune-padding, var(--rf-spacing-md)) - var(--rf-card-edge)));
|
|
44
37
|
}
|
|
45
38
|
|
|
46
|
-
/* Split layout: tight column-gap
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
* inheriting the tight beside-gap. (2-section cards have only one grid row in
|
|
50
|
-
* the uncollapsed state, so row-gap is dormant until collapse.) `stretch`
|
|
51
|
-
* lets the media zone match the content's height — the image inside uses
|
|
52
|
-
* `object-fit: cover` so it re-crops rather than letterboxing when content
|
|
53
|
-
* is taller than the media's natural aspect ratio.
|
|
54
|
-
*
|
|
55
|
-
* We set `column-gap` / `row-gap` / `align-items` directly rather than override
|
|
56
|
-
* `--split-gap` / `--split-valign`: the shared split layout transform emits
|
|
57
|
-
* those vars as inline styles even when the author doesn't set the matching
|
|
58
|
-
* attributes, so a CSS-variable override loses to inline-style specificity.
|
|
59
|
-
* Direct grid properties win via selector specificity and stay in our control. */
|
|
39
|
+
/* Split layout: tight column-gap beside content; row-gap stays at the larger
|
|
40
|
+
* media-gap so the collapse step picks up the generous stacked spacing. (The
|
|
41
|
+
* vertical-align is structure; these gaps are skin.) */
|
|
60
42
|
.rf-card[data-media-position="start"],
|
|
61
43
|
.rf-card[data-media-position="end"] {
|
|
62
44
|
column-gap: var(--rf-card-split-gap);
|
|
63
45
|
row-gap: var(--rf-card-media-gap);
|
|
64
|
-
align-items: stretch;
|
|
65
46
|
}
|
|
66
47
|
|
|
67
|
-
/* Stacked layouts (top / bottom): explicit gap between the media banner and
|
|
68
|
-
*
|
|
69
|
-
* model). For `bottom`, column-reverse already flips the visual order, so the
|
|
70
|
-
* gap still reads as the space between the two zones. */
|
|
48
|
+
/* Stacked layouts (top / bottom): explicit gap between the media banner and the
|
|
49
|
+
* content zone. */
|
|
71
50
|
.rf-card[data-media-position="top"] > [data-section="media"] {
|
|
72
51
|
margin-bottom: var(--rf-card-media-gap);
|
|
73
52
|
}
|
|
@@ -86,12 +65,12 @@
|
|
|
86
65
|
/* Eyebrow — a leading paragraph immediately before a heading, the same kicker
|
|
87
66
|
* treatment as page-section / recipe. */
|
|
88
67
|
.rf-card__eyebrow {
|
|
89
|
-
font-size:
|
|
90
|
-
font-weight:
|
|
91
|
-
letter-spacing:
|
|
68
|
+
font-size: var(--rf-text-xs);
|
|
69
|
+
font-weight: var(--rf-weight-semibold);
|
|
70
|
+
letter-spacing: var(--rf-tracking-wider);
|
|
92
71
|
text-transform: uppercase;
|
|
93
72
|
color: var(--rf-color-primary);
|
|
94
|
-
margin: 0 0
|
|
73
|
+
margin: 0 0 var(--rf-spacing-xs);
|
|
95
74
|
}
|
|
96
75
|
|
|
97
76
|
/* The body's leading heading is the card title; drop its prose top margin so it
|
|
@@ -108,51 +87,4 @@
|
|
|
108
87
|
color: var(--rf-color-muted);
|
|
109
88
|
}
|
|
110
89
|
|
|
111
|
-
/* In a collection grid, each row stretches its items to the tallest (see
|
|
112
|
-
* collection.css); these rules make a stacked card spend that height usefully:
|
|
113
|
-
* the card becomes a column, its content fills the leftover height, and the
|
|
114
|
-
* body grows so footers drop to a common baseline across the row. Scoped to
|
|
115
|
-
* stacked cards so a split card's grid (layouts/split.css) is left intact. */
|
|
116
|
-
.rf-collection[data-layout='grid'] .rf-card[data-layout='stacked'] {
|
|
117
|
-
display: flex;
|
|
118
|
-
flex-direction: column;
|
|
119
|
-
/* The grid/flex wrapper stretches the card, but a nested flex container
|
|
120
|
-
* doesn't always pass that height to its own flex children; pin it so the
|
|
121
|
-
* content/body flex:1 reliably fills. */
|
|
122
|
-
height: 100%;
|
|
123
|
-
}
|
|
124
|
-
.rf-collection[data-layout='grid'] .rf-card[data-layout='stacked'] > .rf-card__content {
|
|
125
|
-
flex: 1;
|
|
126
|
-
}
|
|
127
|
-
.rf-collection[data-layout='grid'] .rf-card[data-layout='stacked'] .rf-card__content {
|
|
128
|
-
display: flex;
|
|
129
|
-
flex-direction: column;
|
|
130
|
-
}
|
|
131
|
-
.rf-collection[data-layout='grid'] .rf-card[data-layout='stacked'] .rf-card__body {
|
|
132
|
-
flex: 1;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/* Height knob (SPEC-089) — a named intrinsic-height scale for cover / bg-only
|
|
136
|
-
* cards that have no natural content height to fill. `aspect` (→ aspect-ratio,
|
|
137
|
-
* emitted inline by the engine) is the proportional alternative; `height` is the
|
|
138
|
-
* absolute one. Both are authority overrides: they win over the cover variant's
|
|
139
|
-
* default media aspect because they sit on the card root with a real value, and
|
|
140
|
-
* over an external grid track only when the card isn't being stretched by one.
|
|
141
|
-
* For cover cards the grid stack (cover.css) fills this box; for bg-only cards
|
|
142
|
-
* the min-height simply gives the surface a poster shape. */
|
|
143
|
-
.rf-card[data-height="sm"] { min-height: 12rem; }
|
|
144
|
-
.rf-card[data-height="md"] { min-height: 18rem; }
|
|
145
|
-
.rf-card[data-height="lg"] { min-height: 26rem; }
|
|
146
|
-
.rf-card[data-height="xl"] { min-height: 34rem; }
|
|
147
|
-
|
|
148
|
-
/* Whole-card stretched link — covers the card; real links in body/footer
|
|
149
|
-
* sit above it via position:relative. */
|
|
150
|
-
.rf-card__link {
|
|
151
|
-
position: absolute;
|
|
152
|
-
inset: 0;
|
|
153
|
-
z-index: 0;
|
|
154
|
-
}
|
|
155
|
-
.rf-card a:not(.rf-card__link) {
|
|
156
|
-
position: relative;
|
|
157
|
-
z-index: 1;
|
|
158
90
|
}
|
package/styles/runes/cast.css
CHANGED
|
@@ -1,76 +1,59 @@
|
|
|
1
|
+
@layer skin {
|
|
1
2
|
/* Cast */
|
|
2
3
|
|
|
3
4
|
/* Members list — base */
|
|
4
5
|
.rf-cast__members {
|
|
5
|
-
list-style: none;
|
|
6
6
|
padding: 0;
|
|
7
7
|
margin: 0;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
/* Grid layout (default) */
|
|
11
11
|
.rf-cast--grid .rf-cast__members {
|
|
12
|
-
display: grid;
|
|
13
|
-
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
|
14
12
|
gap: 1rem;
|
|
15
13
|
}
|
|
16
14
|
|
|
17
15
|
/* List layout */
|
|
18
16
|
.rf-cast--list .rf-cast__members {
|
|
19
|
-
display: flex;
|
|
20
|
-
flex-direction: column;
|
|
21
17
|
gap: 0.75rem;
|
|
22
18
|
}
|
|
23
19
|
|
|
24
|
-
/* Member card — surface
|
|
20
|
+
/* Member card — surface chrome (fill, border, radius, padding) comes from
|
|
21
|
+
* dimensions/surfaces.css via defaultElevation: 'flat'. */
|
|
25
22
|
.rf-cast-member {
|
|
26
|
-
background: var(--rf-color-surface);
|
|
27
|
-
border-radius: var(--rf-radius-md);
|
|
28
|
-
padding: 1.25rem;
|
|
29
23
|
text-align: center;
|
|
30
24
|
}
|
|
31
25
|
.rf-cast-member__name {
|
|
32
|
-
|
|
33
|
-
font-
|
|
34
|
-
font-size: 1rem;
|
|
26
|
+
font-weight: var(--rf-weight-semibold);
|
|
27
|
+
font-size: var(--rf-text);
|
|
35
28
|
color: var(--rf-color-text);
|
|
36
29
|
}
|
|
37
30
|
.rf-cast-member__role {
|
|
38
|
-
|
|
39
|
-
font-size: 0.875rem;
|
|
31
|
+
font-size: var(--rf-text-sm);
|
|
40
32
|
color: var(--rf-color-muted);
|
|
41
33
|
margin-top: 0.125rem;
|
|
42
34
|
}
|
|
43
35
|
.rf-cast-member__body {
|
|
44
36
|
margin-top: 0.75rem;
|
|
45
|
-
font-size:
|
|
37
|
+
font-size: var(--rf-text-sm);
|
|
46
38
|
color: var(--rf-color-muted);
|
|
47
|
-
line-height:
|
|
39
|
+
line-height: var(--rf-leading-normal);
|
|
48
40
|
}
|
|
49
|
-
.rf-cast-member__body:empty { display: none; }
|
|
50
41
|
.rf-cast-member img {
|
|
51
|
-
width: 80px;
|
|
52
|
-
height: 80px;
|
|
53
42
|
border-radius: var(--rf-radius-full);
|
|
54
|
-
object-fit: cover;
|
|
55
43
|
margin: 0 auto 0.75rem;
|
|
56
|
-
display: block;
|
|
57
44
|
}
|
|
58
45
|
|
|
59
46
|
/* List layout — horizontal member cards */
|
|
60
47
|
.rf-cast--list .rf-cast-member {
|
|
61
|
-
display: flex;
|
|
62
|
-
align-items: center;
|
|
63
48
|
gap: 1rem;
|
|
64
49
|
text-align: left;
|
|
65
50
|
padding: 0.75rem 1rem;
|
|
66
51
|
}
|
|
67
52
|
.rf-cast--list .rf-cast-member img {
|
|
68
|
-
width: 48px;
|
|
69
|
-
height: 48px;
|
|
70
53
|
margin: 0;
|
|
71
|
-
flex-shrink: 0;
|
|
72
54
|
}
|
|
73
55
|
.rf-cast--list .rf-cast-member__body {
|
|
74
56
|
margin-top: 0;
|
|
75
|
-
|
|
57
|
+
}
|
|
58
|
+
|
|
76
59
|
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
@layer skin {
|
|
2
|
+
/* Changelog — skin. The display:contents passthroughs + the date/badge displays
|
|
3
|
+
* live in @refrakt-md/skeleton (styles/runes/changelog.css). */
|
|
2
4
|
.rf-changelog {
|
|
3
5
|
margin: 2rem 0;
|
|
4
6
|
}
|
|
5
|
-
.rf-changelog__releases {
|
|
6
|
-
display: contents;
|
|
7
|
-
}
|
|
8
7
|
.rf-changelog-release {
|
|
9
8
|
padding: 1.5rem 0;
|
|
10
9
|
border-bottom: 1px solid var(--rf-color-border);
|
|
@@ -12,18 +11,14 @@
|
|
|
12
11
|
.rf-changelog-release:last-child {
|
|
13
12
|
border-bottom: none;
|
|
14
13
|
}
|
|
15
|
-
.rf-changelog-release__body {
|
|
16
|
-
display: contents;
|
|
17
|
-
}
|
|
18
14
|
.rf-changelog-release h3 {
|
|
19
|
-
font-size:
|
|
20
|
-
font-weight:
|
|
15
|
+
font-size: var(--rf-text-xl);
|
|
16
|
+
font-weight: var(--rf-weight-bold);
|
|
21
17
|
margin: 0 0 0.25rem;
|
|
22
18
|
color: var(--rf-color-text);
|
|
23
19
|
}
|
|
24
20
|
.rf-changelog-release time {
|
|
25
|
-
|
|
26
|
-
font-size: 0.8rem;
|
|
21
|
+
font-size: var(--rf-text-xs);
|
|
27
22
|
color: var(--rf-color-muted);
|
|
28
23
|
margin-bottom: 0.75rem;
|
|
29
24
|
}
|
|
@@ -32,16 +27,15 @@
|
|
|
32
27
|
margin: 0;
|
|
33
28
|
}
|
|
34
29
|
.rf-changelog-release li {
|
|
35
|
-
font-size:
|
|
36
|
-
line-height:
|
|
30
|
+
font-size: var(--rf-text-sm);
|
|
31
|
+
line-height: var(--rf-leading-relaxed);
|
|
37
32
|
margin-bottom: 0.25rem;
|
|
38
33
|
}
|
|
39
34
|
.rf-changelog-release strong {
|
|
40
|
-
|
|
41
|
-
font-
|
|
42
|
-
font-weight: 700;
|
|
35
|
+
font-size: var(--rf-text-xs);
|
|
36
|
+
font-weight: var(--rf-weight-bold);
|
|
43
37
|
text-transform: uppercase;
|
|
44
|
-
letter-spacing:
|
|
38
|
+
letter-spacing: var(--rf-tracking-wider);
|
|
45
39
|
padding: 0.1rem 0.4rem;
|
|
46
40
|
border-radius: var(--rf-radius-sm);
|
|
47
41
|
margin-right: 0.375rem;
|
|
@@ -51,3 +45,5 @@
|
|
|
51
45
|
background: var(--rf-color-success-bg);
|
|
52
46
|
color: var(--rf-color-success);
|
|
53
47
|
}
|
|
48
|
+
|
|
49
|
+
}
|
|
@@ -1,33 +1,18 @@
|
|
|
1
|
+
@layer skin {
|
|
1
2
|
/* Character — the title and the role/status def-list come from the shared
|
|
2
3
|
* dimensions (sections + metadata); only the floated portrait avatar is
|
|
3
4
|
* character-specific chrome. Unlike faction/realm, character is not a split
|
|
4
5
|
* rune: the portrait floats and the content column wraps around it. */
|
|
5
6
|
|
|
6
|
-
/* Contain the floated portrait within the article */
|
|
7
|
-
.rf-character {
|
|
8
|
-
display: flow-root;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
7
|
/* Portrait — floated circular avatar */
|
|
12
8
|
.rf-character__portrait {
|
|
13
|
-
float: right;
|
|
14
9
|
margin-left: 1.5rem;
|
|
15
10
|
margin-bottom: 1rem;
|
|
16
|
-
width: 120px;
|
|
17
|
-
height: 120px;
|
|
18
11
|
border-radius: var(--rf-radius-full);
|
|
19
|
-
overflow: hidden;
|
|
20
|
-
}
|
|
21
|
-
.rf-character__portrait img {
|
|
22
|
-
width: 100%;
|
|
23
|
-
height: 100%;
|
|
24
|
-
object-fit: cover;
|
|
25
12
|
}
|
|
26
13
|
|
|
27
14
|
/* Content */
|
|
28
15
|
.rf-character__sections {
|
|
29
|
-
display: flex;
|
|
30
|
-
flex-direction: column;
|
|
31
16
|
gap: 1rem;
|
|
32
17
|
}
|
|
33
18
|
.rf-character__content ul,
|
|
@@ -41,10 +26,9 @@
|
|
|
41
26
|
border-top: 1px solid var(--rf-color-border);
|
|
42
27
|
}
|
|
43
28
|
.rf-character-section__name {
|
|
44
|
-
|
|
45
|
-
font-
|
|
46
|
-
|
|
47
|
-
line-height: 1.3;
|
|
29
|
+
font-size: var(--rf-text-xl);
|
|
30
|
+
font-weight: var(--rf-weight-bold);
|
|
31
|
+
line-height: var(--rf-leading-snug);
|
|
48
32
|
margin-bottom: 0.5rem;
|
|
49
33
|
color: var(--rf-color-text);
|
|
50
34
|
}
|
|
@@ -52,3 +36,5 @@
|
|
|
52
36
|
.rf-character-section__body ol {
|
|
53
37
|
padding-left: 1.5rem;
|
|
54
38
|
}
|
|
39
|
+
|
|
40
|
+
}
|