@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
package/styles/runes/chart.css
CHANGED
|
@@ -1,50 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
@layer skin {
|
|
2
|
+
/* Chart — skin. The chart block, responsive SVG/container, legend flex, swatch box,
|
|
3
|
+
* and the sr-only rendered data table live in @refrakt-md/skeleton
|
|
4
|
+
* (styles/runes/chart.css). What remains is the --rf-chart-* theming contract, SVG
|
|
5
|
+
* paint, palette rotation, data-table chrome, and type. */
|
|
2
6
|
.rf-chart {
|
|
3
|
-
/* ─── Theming contract (SPEC-083 / WORK-353) ───
|
|
4
|
-
* Every paint + geometry value the renderer uses is one of these
|
|
5
|
-
* `--rf-chart-*` properties; a theme overrides any of them (here, on a tint
|
|
6
|
-
* scope, or inline) with no renderer or selector changes. A non-CSS provider
|
|
7
|
-
* (canvas) reads the same props via getComputedStyle. */
|
|
8
|
-
|
|
9
|
-
/* Series palette — a dedicated categorical palette, deliberately distinct
|
|
10
|
-
* from the semantic status tokens (those are reserved for sentiment mode). */
|
|
11
7
|
--rf-chart-series-1: #6366f1;
|
|
12
8
|
--rf-chart-series-2: #06b6d4;
|
|
13
9
|
--rf-chart-series-3: #22c55e;
|
|
14
10
|
--rf-chart-series-4: #f59e0b;
|
|
15
11
|
--rf-chart-series-5: #a855f7;
|
|
16
12
|
--rf-chart-series-6: #ec4899;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
--rf-chart-bar-
|
|
20
|
-
--rf-chart-bar-thickness: 48px; /* max bar width cap */
|
|
21
|
-
--rf-chart-bar-gap: 0.15; /* slot fraction reserved as inter-group gap */
|
|
13
|
+
--rf-chart-bar-ratio: 0.75;
|
|
14
|
+
--rf-chart-bar-thickness: 48px;
|
|
15
|
+
--rf-chart-bar-gap: 0.15;
|
|
22
16
|
--rf-chart-bar-radius: 2px;
|
|
23
17
|
--rf-chart-point-radius: 4px;
|
|
24
18
|
--rf-chart-line-width: 2px;
|
|
25
|
-
|
|
26
|
-
/* Typography / grid (paint values applied by CSS below). */
|
|
27
19
|
--rf-chart-label-size: 12px;
|
|
28
20
|
--rf-chart-label-color: var(--rf-color-muted);
|
|
29
21
|
--rf-chart-grid-color: var(--rf-color-border);
|
|
30
22
|
--rf-chart-grid-width: 1px;
|
|
31
|
-
|
|
32
|
-
display: block;
|
|
33
23
|
border-radius: var(--rf-radius-lg);
|
|
34
24
|
padding: 1.5rem;
|
|
35
25
|
margin: 0;
|
|
36
26
|
}
|
|
37
|
-
|
|
38
|
-
/* ─── SVG paint — driven entirely by the contract (the renderer sets no inline
|
|
39
|
-
* fill/stroke; it only tags elements with a class + data-series + optional
|
|
40
|
-
* data-meta-sentiment). ─── */
|
|
41
27
|
.rf-chart__axis { stroke: var(--rf-chart-grid-color); stroke-width: var(--rf-chart-grid-width); }
|
|
42
28
|
.rf-chart__label { fill: var(--rf-chart-label-color); font-size: var(--rf-chart-label-size); }
|
|
43
29
|
.rf-chart__bar { rx: var(--rf-chart-bar-radius); fill: var(--rf-chart-series-1); }
|
|
44
30
|
.rf-chart__point { fill: var(--rf-chart-series-1); }
|
|
45
31
|
.rf-chart__line { fill: none; stroke: var(--rf-chart-series-1); stroke-width: var(--rf-chart-line-width); }
|
|
46
|
-
|
|
47
|
-
/* Series palette rotation (data-series 0 is the default above). */
|
|
48
32
|
.rf-chart__bar[data-series="1"], .rf-chart__point[data-series="1"] { fill: var(--rf-chart-series-2); }
|
|
49
33
|
.rf-chart__bar[data-series="2"], .rf-chart__point[data-series="2"] { fill: var(--rf-chart-series-3); }
|
|
50
34
|
.rf-chart__bar[data-series="3"], .rf-chart__point[data-series="3"] { fill: var(--rf-chart-series-4); }
|
|
@@ -55,11 +39,6 @@
|
|
|
55
39
|
.rf-chart__line[data-series="3"] { stroke: var(--rf-chart-series-4); }
|
|
56
40
|
.rf-chart__line[data-series="4"] { stroke: var(--rf-chart-series-5); }
|
|
57
41
|
.rf-chart__line[data-series="5"] { stroke: var(--rf-chart-series-6); }
|
|
58
|
-
|
|
59
|
-
/* Sentiment colouring — a data cell carrying `data-meta-sentiment` overrides the
|
|
60
|
-
* rotating palette with the semantic token (the roadmap chart renders green-done
|
|
61
|
-
* / red-blocked with no per-chart config). After the palette so it wins at equal
|
|
62
|
-
* specificity. */
|
|
63
42
|
.rf-chart__bar[data-meta-sentiment="positive"], .rf-chart__point[data-meta-sentiment="positive"] { fill: var(--rf-color-success); }
|
|
64
43
|
.rf-chart__bar[data-meta-sentiment="negative"], .rf-chart__point[data-meta-sentiment="negative"] { fill: var(--rf-color-danger); }
|
|
65
44
|
.rf-chart__bar[data-meta-sentiment="caution"], .rf-chart__point[data-meta-sentiment="caution"] { fill: var(--rf-color-warning); }
|
|
@@ -68,17 +47,13 @@
|
|
|
68
47
|
.rf-chart__line[data-meta-sentiment="negative"] { stroke: var(--rf-color-danger); }
|
|
69
48
|
.rf-chart__line[data-meta-sentiment="caution"] { stroke: var(--rf-color-warning); }
|
|
70
49
|
.rf-chart__line[data-meta-sentiment="neutral"] { stroke: var(--rf-color-muted); }
|
|
71
|
-
|
|
72
|
-
/* Data table — the no-JS / screen-reader source of truth. Visible as the
|
|
73
|
-
* fallback; visually-hidden (but kept for assistive tech) once rf-chart has
|
|
74
|
-
* rendered the svg. */
|
|
75
50
|
.rf-chart__data {
|
|
76
51
|
width: 100%;
|
|
77
52
|
border-collapse: collapse;
|
|
78
|
-
font-size:
|
|
53
|
+
font-size: var(--rf-text-sm);
|
|
79
54
|
}
|
|
80
55
|
.rf-chart__data caption {
|
|
81
|
-
font-weight:
|
|
56
|
+
font-weight: var(--rf-weight-semibold);
|
|
82
57
|
margin-bottom: 0.75rem;
|
|
83
58
|
}
|
|
84
59
|
.rf-chart__data th,
|
|
@@ -87,41 +62,22 @@
|
|
|
87
62
|
padding: 0.375rem 0.625rem;
|
|
88
63
|
text-align: left;
|
|
89
64
|
}
|
|
90
|
-
.rf-chart[data-rendered] .rf-chart__data {
|
|
91
|
-
position: absolute;
|
|
92
|
-
width: 1px;
|
|
93
|
-
height: 1px;
|
|
94
|
-
padding: 0;
|
|
95
|
-
margin: -1px;
|
|
96
|
-
overflow: hidden;
|
|
97
|
-
clip: rect(0, 0, 0, 0);
|
|
98
|
-
white-space: nowrap;
|
|
99
|
-
border: 0;
|
|
100
|
-
}
|
|
101
65
|
.rf-chart__title {
|
|
102
|
-
font-weight:
|
|
103
|
-
font-size:
|
|
66
|
+
font-weight: var(--rf-weight-semibold);
|
|
67
|
+
font-size: var(--rf-text);
|
|
104
68
|
margin-bottom: 1rem;
|
|
105
69
|
text-align: center;
|
|
106
70
|
}
|
|
107
|
-
.rf-chart__container { width: 100%; }
|
|
108
|
-
.rf-chart__svg { width: 100%; height: auto; }
|
|
109
71
|
.rf-chart__legend {
|
|
110
|
-
display: flex;
|
|
111
|
-
justify-content: center;
|
|
112
72
|
gap: 1rem;
|
|
113
73
|
margin-top: 1rem;
|
|
114
74
|
}
|
|
115
75
|
.rf-chart__legend-item {
|
|
116
|
-
display: flex;
|
|
117
|
-
align-items: center;
|
|
118
76
|
gap: 0.375rem;
|
|
119
|
-
font-size:
|
|
77
|
+
font-size: var(--rf-text-sm);
|
|
120
78
|
color: var(--rf-color-muted);
|
|
121
79
|
}
|
|
122
80
|
.rf-chart__legend-color {
|
|
123
|
-
width: 12px;
|
|
124
|
-
height: 12px;
|
|
125
81
|
border-radius: 2px;
|
|
126
82
|
background: var(--rf-chart-series-1);
|
|
127
83
|
}
|
|
@@ -130,3 +86,5 @@
|
|
|
130
86
|
.rf-chart__legend-color[data-series="3"] { background: var(--rf-chart-series-4); }
|
|
131
87
|
.rf-chart__legend-color[data-series="4"] { background: var(--rf-chart-series-5); }
|
|
132
88
|
.rf-chart__legend-color[data-series="5"] { background: var(--rf-chart-series-6); }
|
|
89
|
+
|
|
90
|
+
}
|
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
@layer skin {
|
|
2
|
+
/* Code Group — skin.
|
|
2
3
|
*
|
|
3
4
|
* Chrome (the wrapper + topbar + tabs) uses `--rf-color-surface` so it
|
|
4
5
|
* reads against the page in both light and dark modes. The code areas
|
|
5
|
-
* themselves inherit `--rf-color-code-bg` from the global `pre` rule
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* themselves inherit `--rf-color-code-bg` from the global `pre` rule.
|
|
7
|
+
*
|
|
8
|
+
* The wrapper clip, topbar flex, list reset, the scrollable tab strip, and the
|
|
9
|
+
* tab flex live in @refrakt-md/skeleton (styles/runes/codegroup.css). The pre/code
|
|
10
|
+
* rules stay here in skin: they deliberately override elements/code.css by source
|
|
11
|
+
* order (the `data-overflow="wrap"` reset especially). */
|
|
8
12
|
.rf-codegroup {
|
|
9
13
|
border: 1px solid var(--rf-color-border);
|
|
10
|
-
overflow: hidden;
|
|
11
14
|
background: var(--rf-color-surface);
|
|
12
15
|
color: var(--rf-color-text);
|
|
13
16
|
box-shadow: var(--rf-shadow-md);
|
|
14
17
|
padding: 0;
|
|
15
18
|
}
|
|
16
19
|
.rf-codegroup__topbar {
|
|
17
|
-
display: flex;
|
|
18
|
-
align-items: center;
|
|
19
20
|
gap: 0.375rem;
|
|
20
21
|
padding: 0.75rem 1rem;
|
|
21
22
|
background: transparent;
|
|
@@ -24,9 +25,7 @@
|
|
|
24
25
|
}
|
|
25
26
|
/* Window chrome — three traffic-light dots painted as gradients on one
|
|
26
27
|
* pseudo-element. The element reserves real width (three 10px dots, 1rem
|
|
27
|
-
* apart) so the flex row spaces the title clear of the dots
|
|
28
|
-
* dots take no layout space and overlapped the title. Pure decoration, so
|
|
29
|
-
* it lives entirely in CSS (no markup). */
|
|
28
|
+
* apart) so the flex row spaces the title clear of the dots. Pure decoration. */
|
|
30
29
|
.rf-codegroup__topbar::before {
|
|
31
30
|
content: '';
|
|
32
31
|
flex: 0 0 auto;
|
|
@@ -42,26 +41,21 @@
|
|
|
42
41
|
/* Filename title — the topbar bar's lone `code` field. */
|
|
43
42
|
.rf-codegroup__topbar [data-meta-type="code"] {
|
|
44
43
|
margin-left: 0.5rem;
|
|
45
|
-
font-size:
|
|
44
|
+
font-size: var(--rf-text-xs);
|
|
46
45
|
font-weight: normal;
|
|
47
46
|
color: var(--rf-color-muted);
|
|
48
47
|
}
|
|
49
48
|
.rf-codegroup ul {
|
|
50
|
-
list-style: none;
|
|
51
49
|
padding: 0;
|
|
52
50
|
margin: 0;
|
|
53
51
|
}
|
|
54
52
|
.rf-codegroup__tabs {
|
|
55
|
-
display: flex;
|
|
56
53
|
background: transparent;
|
|
57
54
|
border-bottom: 1px solid var(--rf-color-border);
|
|
58
|
-
overflow-x: auto;
|
|
59
|
-
overflow-y: hidden;
|
|
60
55
|
}
|
|
61
56
|
.rf-codegroup__tab {
|
|
62
|
-
flex: 0 0 auto;
|
|
63
57
|
padding: 0.5rem 1rem;
|
|
64
|
-
font-size:
|
|
58
|
+
font-size: var(--rf-text-xs);
|
|
65
59
|
font-family: var(--rf-font-mono);
|
|
66
60
|
color: var(--rf-color-muted);
|
|
67
61
|
background: none;
|
|
@@ -95,7 +89,7 @@
|
|
|
95
89
|
}
|
|
96
90
|
.rf-codegroup code {
|
|
97
91
|
font-family: var(--rf-font-mono);
|
|
98
|
-
font-size:
|
|
92
|
+
font-size: var(--rf-text-sm);
|
|
99
93
|
}
|
|
100
94
|
/* Overflow modes */
|
|
101
95
|
.rf-codegroup[data-overflow="wrap"] pre {
|
|
@@ -104,14 +98,10 @@
|
|
|
104
98
|
overflow-x: hidden;
|
|
105
99
|
}
|
|
106
100
|
/* WORK-304 — the standalone codeblock CSS at `elements/code.css`
|
|
107
|
-
* sets `display: grid; min-width: max-content` on `pre code
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
* we WANT wrapping, so revert the code element back to a plain
|
|
112
|
-
* block with no min-width constraint. Lines stay block-flow so
|
|
113
|
-
* Shiki's `<span class="line">` children wrap with the pre's
|
|
114
|
-
* `white-space: pre-wrap`. */
|
|
101
|
+
* sets `display: grid; min-width: max-content` on `pre code`. Inside
|
|
102
|
+
* `overflow="wrap"` codegroups we WANT wrapping, so revert the code element
|
|
103
|
+
* back to a plain block with no min-width constraint. This must stay skin —
|
|
104
|
+
* it overrides elements/code.css (also skin) by source order + specificity. */
|
|
115
105
|
.rf-codegroup[data-overflow="wrap"] pre code {
|
|
116
106
|
display: block;
|
|
117
107
|
min-width: 0;
|
|
@@ -119,3 +109,5 @@
|
|
|
119
109
|
.rf-codegroup[data-overflow="hide"] pre {
|
|
120
110
|
overflow-x: hidden;
|
|
121
111
|
}
|
|
112
|
+
|
|
113
|
+
}
|
|
@@ -1,166 +1,89 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* selects the arrangement. Built-in items carry `.rf-collection__card` /
|
|
5
|
-
* `__item`; a body template emits its own markup inside `.rf-collection__item`.
|
|
6
|
-
*/
|
|
7
|
-
|
|
1
|
+
@layer skin {
|
|
2
|
+
/* Collection — skin. The list/grid arrangement, card flex column, and block-item
|
|
3
|
+
* display reset live in @refrakt-md/skeleton (styles/runes/collection.css). */
|
|
8
4
|
.rf-collection {
|
|
9
5
|
margin: var(--rf-spacing-md) 0;
|
|
10
6
|
}
|
|
11
|
-
|
|
12
|
-
/* Preamble — rendered above items only when the query is non-empty, so a
|
|
13
|
-
* heading/intro can live inside the rune and vanish with an empty section. */
|
|
14
7
|
.rf-collection__preamble > :first-child { margin-top: 0; }
|
|
15
|
-
|
|
16
|
-
/* Empty state — shown in place of items when the query yields nothing. */
|
|
17
8
|
.rf-collection__empty {
|
|
18
9
|
color: var(--rf-color-muted);
|
|
19
10
|
font-size: 0.9375em;
|
|
20
11
|
}
|
|
21
|
-
|
|
22
12
|
.rf-collection__items {
|
|
23
|
-
display: flex;
|
|
24
|
-
flex-direction: column;
|
|
25
13
|
gap: var(--rf-spacing-sm);
|
|
26
14
|
}
|
|
27
|
-
|
|
28
|
-
/* grid arranges items into responsive columns; list stays a stacked flow.
|
|
29
|
-
* Item chrome (a card box, bare row, …) comes from the item, not the layout. */
|
|
30
15
|
.rf-collection[data-layout='grid'] .rf-collection__items {
|
|
31
|
-
display: grid;
|
|
32
|
-
grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
|
|
33
16
|
gap: var(--rf-spacing-md);
|
|
34
|
-
align-items: stretch;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/* Uniform heights per row: grid stretches each item to the tallest in its row;
|
|
38
|
-
* a body-template item then lets its card fill that stretched height. */
|
|
39
|
-
.rf-collection[data-layout='grid'] .rf-collection__item {
|
|
40
|
-
display: flex;
|
|
41
17
|
}
|
|
42
|
-
.rf-collection[data-layout='grid'] .rf-collection__item > * {
|
|
43
|
-
flex: 1;
|
|
44
|
-
min-width: 0;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/* Grouped grid: the grid belongs to each group (its items are the cells), not
|
|
48
|
-
* to __items — whose children are the group blocks (heading groups) or the
|
|
49
|
-
* accordion wrapper. Left on __items, each group becomes a single cell, i.e. a
|
|
50
|
-
* column per group. So when __items holds groups it stacks them, and each
|
|
51
|
-
* group becomes the grid instead, with the group title spanning every column. */
|
|
52
18
|
.rf-collection[data-layout='grid'] .rf-collection__items:has(.rf-collection__group),
|
|
53
19
|
.rf-collection[data-layout='grid'] .rf-collection__items:has(.rf-accordion) {
|
|
54
|
-
display: flex;
|
|
55
|
-
flex-direction: column;
|
|
56
20
|
gap: var(--rf-spacing-md);
|
|
57
21
|
}
|
|
58
22
|
.rf-collection[data-layout='grid'] .rf-collection__group {
|
|
59
|
-
display: grid;
|
|
60
|
-
grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
|
|
61
23
|
gap: var(--rf-spacing-md);
|
|
62
|
-
align-items: stretch;
|
|
63
24
|
}
|
|
64
|
-
.rf-collection[data-layout='grid'] .rf-collection__group-title {
|
|
65
|
-
grid-column: 1 / -1;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
.rf-collection__item {
|
|
69
|
-
min-width: 0;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
25
|
.rf-collection__card {
|
|
73
|
-
display: flex;
|
|
74
|
-
flex-direction: column;
|
|
75
26
|
gap: var(--rf-spacing-xs);
|
|
76
27
|
padding: var(--rf-spacing-md);
|
|
77
28
|
border: 1px solid var(--rf-color-border);
|
|
78
29
|
border-radius: var(--rf-radius-md);
|
|
79
30
|
background: var(--rf-color-surface);
|
|
80
31
|
}
|
|
81
|
-
|
|
82
32
|
.rf-collection__card:hover {
|
|
83
33
|
background: var(--rf-color-surface-hover);
|
|
84
34
|
}
|
|
85
|
-
|
|
86
35
|
.rf-collection__title {
|
|
87
|
-
font-weight:
|
|
36
|
+
font-weight: var(--rf-weight-semibold);
|
|
88
37
|
color: var(--rf-color-text);
|
|
89
38
|
text-decoration: none;
|
|
90
39
|
}
|
|
91
|
-
|
|
92
40
|
.rf-collection__title:hover {
|
|
93
41
|
color: var(--rf-color-primary);
|
|
94
42
|
}
|
|
95
|
-
|
|
96
43
|
.rf-collection__field {
|
|
97
44
|
font-size: 0.875em;
|
|
98
45
|
color: var(--rf-color-muted);
|
|
99
46
|
}
|
|
100
|
-
|
|
101
|
-
/* grouping */
|
|
102
47
|
.rf-collection__group {
|
|
103
48
|
margin-top: var(--rf-spacing-md);
|
|
104
|
-
display: flex;
|
|
105
|
-
flex-direction: column;
|
|
106
49
|
/* Tight default for short item rows (the built-in title link, no body). */
|
|
107
50
|
gap: var(--rf-spacing-xs);
|
|
108
51
|
}
|
|
109
|
-
/* Modestly roomier when items carry a body template (block content — a card,
|
|
110
|
-
* callout, list, …), so they don't collide. Body-template items are marked
|
|
111
|
-
* `data-block` by the resolver; the built-in inline title rows are not.
|
|
112
|
-
* Mirrors the rf-relationships rule. */
|
|
113
52
|
.rf-collection__group:has(.rf-collection__item[data-block]) {
|
|
114
53
|
gap: var(--rf-spacing-sm);
|
|
115
54
|
}
|
|
116
|
-
|
|
117
|
-
/* Block-content item — let the body template (card / callout / etc.) fill the
|
|
118
|
-
* container instead of shrink-fitting. No-op in grid mode (items there are
|
|
119
|
-
* already `display: flex` with `flex: 1` on the child). Trim the outer margins
|
|
120
|
-
* of the template's first/last block so the group `gap` controls inter-item
|
|
121
|
-
* spacing — works for any block content, not a wrapper element. */
|
|
122
|
-
.rf-collection__item[data-block] {
|
|
123
|
-
display: block;
|
|
124
|
-
}
|
|
125
55
|
.rf-collection__item[data-block] > :first-child {
|
|
126
56
|
margin-top: 0;
|
|
127
57
|
}
|
|
128
58
|
.rf-collection__item[data-block] > :last-child {
|
|
129
59
|
margin-bottom: 0;
|
|
130
60
|
}
|
|
131
|
-
|
|
132
61
|
.rf-collection__group-title {
|
|
133
62
|
margin: 0 0 var(--rf-spacing-sm);
|
|
134
63
|
font-size: 0.875em;
|
|
135
64
|
text-transform: uppercase;
|
|
136
|
-
letter-spacing:
|
|
65
|
+
letter-spacing: var(--rf-tracking-wider);
|
|
137
66
|
color: var(--rf-color-muted);
|
|
138
67
|
}
|
|
139
|
-
|
|
140
68
|
/* table layout */
|
|
141
69
|
.rf-collection__table {
|
|
142
70
|
width: 100%;
|
|
143
71
|
border-collapse: collapse;
|
|
144
72
|
}
|
|
145
|
-
|
|
146
73
|
.rf-collection__table th,
|
|
147
74
|
.rf-collection__table td {
|
|
148
75
|
padding: var(--rf-spacing-sm);
|
|
149
76
|
text-align: left;
|
|
150
77
|
border-bottom: 1px solid var(--rf-color-border);
|
|
151
78
|
}
|
|
152
|
-
|
|
153
79
|
.rf-collection__table th {
|
|
154
80
|
font-size: 0.875em;
|
|
155
81
|
text-transform: uppercase;
|
|
156
|
-
letter-spacing:
|
|
82
|
+
letter-spacing: var(--rf-tracking-wider);
|
|
157
83
|
color: var(--rf-color-muted);
|
|
158
84
|
}
|
|
159
|
-
|
|
160
|
-
/* Heading-template cells (`layout="table"` body) wrap their content as
|
|
161
|
-
* markdown paragraphs, which pick up the global `p { margin-bottom: 1rem }`
|
|
162
|
-
* and leave dead space inside each row. Drop it inside the table — table
|
|
163
|
-
* cells don't want paragraph spacing. */
|
|
164
85
|
.rf-collection__table td p {
|
|
165
86
|
margin: 0;
|
|
166
87
|
}
|
|
88
|
+
|
|
89
|
+
}
|
package/styles/runes/compare.css
CHANGED
|
@@ -1,30 +1,18 @@
|
|
|
1
|
+
@layer skin {
|
|
1
2
|
/* Compare */
|
|
2
3
|
.rf-compare {
|
|
3
4
|
border: 1px solid var(--rf-color-border);
|
|
4
5
|
border-radius: var(--rf-radius-md);
|
|
5
|
-
overflow: hidden;
|
|
6
6
|
}
|
|
7
7
|
.rf-compare__header {
|
|
8
8
|
padding: 0.5rem 1rem;
|
|
9
9
|
font-family: var(--rf-font-sans);
|
|
10
|
-
font-size:
|
|
11
|
-
font-weight:
|
|
10
|
+
font-size: var(--rf-text-xs);
|
|
11
|
+
font-weight: var(--rf-weight-semibold);
|
|
12
12
|
color: var(--rf-color-muted);
|
|
13
13
|
background: var(--rf-color-surface);
|
|
14
14
|
border-bottom: 1px solid var(--rf-color-border);
|
|
15
15
|
}
|
|
16
|
-
.rf-compare--side-by-side .rf-compare__panels {
|
|
17
|
-
display: grid;
|
|
18
|
-
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
|
19
|
-
}
|
|
20
|
-
.rf-compare--stacked .rf-compare__panels {
|
|
21
|
-
display: flex;
|
|
22
|
-
flex-direction: column;
|
|
23
|
-
}
|
|
24
|
-
.rf-compare [data-panel] {
|
|
25
|
-
min-width: 0;
|
|
26
|
-
overflow: auto;
|
|
27
|
-
}
|
|
28
16
|
.rf-compare--side-by-side [data-panel] + [data-panel] {
|
|
29
17
|
border-left: 1px solid var(--rf-color-border);
|
|
30
18
|
}
|
|
@@ -32,12 +20,11 @@
|
|
|
32
20
|
border-top: 1px solid var(--rf-color-border);
|
|
33
21
|
}
|
|
34
22
|
.rf-compare [data-label] {
|
|
35
|
-
display: block;
|
|
36
23
|
padding: 0.5rem 1rem;
|
|
37
|
-
font-size:
|
|
38
|
-
font-weight:
|
|
24
|
+
font-size: var(--rf-text-xs);
|
|
25
|
+
font-weight: var(--rf-weight-semibold);
|
|
39
26
|
text-transform: uppercase;
|
|
40
|
-
letter-spacing:
|
|
27
|
+
letter-spacing: var(--rf-tracking-wider);
|
|
41
28
|
color: var(--rf-color-muted);
|
|
42
29
|
background: var(--rf-color-surface);
|
|
43
30
|
border-bottom: 1px solid var(--rf-color-border);
|
|
@@ -50,3 +37,5 @@
|
|
|
50
37
|
border: none;
|
|
51
38
|
border-radius: 0;
|
|
52
39
|
}
|
|
40
|
+
|
|
41
|
+
}
|
|
@@ -1,39 +1,26 @@
|
|
|
1
|
-
|
|
1
|
+
@layer skin {
|
|
2
|
+
/* Comparison — skin. The grid passthroughs, scroll/sticky geometry, cards grid,
|
|
3
|
+
* card flex + badge positioning, and metadata hiding live in @refrakt-md/skeleton
|
|
4
|
+
* (styles/runes/comparison.css). */
|
|
2
5
|
.rf-comparison {
|
|
3
6
|
margin: 2rem 0;
|
|
4
7
|
}
|
|
5
|
-
.rf-comparison__grid {
|
|
6
|
-
display: contents;
|
|
7
|
-
}
|
|
8
|
-
.rf-comparison-column__body,
|
|
9
|
-
.rf-comparison-row__body {
|
|
10
|
-
display: contents;
|
|
11
|
-
}
|
|
12
8
|
.rf-comparison__title {
|
|
13
9
|
text-align: center;
|
|
14
10
|
margin: 0 0 1.5rem;
|
|
15
|
-
font-size:
|
|
16
|
-
font-weight:
|
|
11
|
+
font-size: var(--rf-text-2xl);
|
|
12
|
+
font-weight: var(--rf-weight-bold);
|
|
17
13
|
color: var(--rf-color-text);
|
|
18
14
|
}
|
|
19
|
-
.rf-comparison > meta,
|
|
20
|
-
.rf-comparison > span[property] { display: none; }
|
|
21
15
|
/* Table layout */
|
|
22
16
|
.rf-comparison__table-wrapper {
|
|
23
|
-
overflow-x: auto;
|
|
24
|
-
-webkit-overflow-scrolling: touch;
|
|
25
17
|
margin: 0 -1rem;
|
|
26
18
|
padding: 0 1rem;
|
|
27
19
|
}
|
|
28
20
|
.rf-comparison__table {
|
|
29
21
|
width: 100%;
|
|
30
22
|
border-collapse: collapse;
|
|
31
|
-
font-size:
|
|
32
|
-
}
|
|
33
|
-
.rf-comparison__table thead {
|
|
34
|
-
position: sticky;
|
|
35
|
-
top: 0;
|
|
36
|
-
z-index: 1;
|
|
23
|
+
font-size: var(--rf-text);
|
|
37
24
|
}
|
|
38
25
|
.rf-comparison__table th,
|
|
39
26
|
.rf-comparison__table td {
|
|
@@ -43,8 +30,8 @@
|
|
|
43
30
|
}
|
|
44
31
|
.rf-comparison__table thead th {
|
|
45
32
|
background: var(--rf-color-bg);
|
|
46
|
-
font-weight:
|
|
47
|
-
font-size:
|
|
33
|
+
font-weight: var(--rf-weight-bold);
|
|
34
|
+
font-size: var(--rf-text);
|
|
48
35
|
color: var(--rf-color-text);
|
|
49
36
|
border-bottom: 2px solid var(--rf-color-border);
|
|
50
37
|
vertical-align: bottom;
|
|
@@ -54,20 +41,18 @@
|
|
|
54
41
|
border-bottom-color: var(--rf-color-primary);
|
|
55
42
|
}
|
|
56
43
|
.rf-comparison__recommended-badge {
|
|
57
|
-
|
|
58
|
-
font-
|
|
59
|
-
font-weight: 600;
|
|
44
|
+
font-size: var(--rf-text-xs);
|
|
45
|
+
font-weight: var(--rf-weight-semibold);
|
|
60
46
|
text-transform: uppercase;
|
|
61
|
-
letter-spacing:
|
|
47
|
+
letter-spacing: var(--rf-tracking-wider);
|
|
62
48
|
color: var(--rf-color-primary);
|
|
63
49
|
margin-top: 0.25rem;
|
|
64
50
|
}
|
|
65
51
|
.rf-comparison__label-col {
|
|
66
|
-
width: 1%;
|
|
67
52
|
white-space: nowrap;
|
|
68
53
|
}
|
|
69
54
|
.rf-comparison__row-label {
|
|
70
|
-
font-weight:
|
|
55
|
+
font-weight: var(--rf-weight-semibold);
|
|
71
56
|
color: var(--rf-color-text);
|
|
72
57
|
white-space: nowrap;
|
|
73
58
|
background: var(--rf-color-bg);
|
|
@@ -79,8 +64,7 @@
|
|
|
79
64
|
.rf-comparison__cell--highlighted {
|
|
80
65
|
background: color-mix(in srgb, var(--rf-color-primary) 3%, transparent);
|
|
81
66
|
}
|
|
82
|
-
.rf-comparison__cell p { margin: 0; font-size:
|
|
83
|
-
.rf-comparison__cell strong { display: none; }
|
|
67
|
+
.rf-comparison__cell p { margin: 0; font-size: var(--rf-text-sm); }
|
|
84
68
|
.rf-comparison__cell em {
|
|
85
69
|
font-style: italic;
|
|
86
70
|
color: var(--rf-color-muted);
|
|
@@ -90,8 +74,8 @@
|
|
|
90
74
|
}
|
|
91
75
|
/* Row icons */
|
|
92
76
|
.rf-comparison__row-icon {
|
|
93
|
-
font-weight:
|
|
94
|
-
font-size:
|
|
77
|
+
font-weight: var(--rf-weight-bold);
|
|
78
|
+
font-size: var(--rf-text-lg);
|
|
95
79
|
}
|
|
96
80
|
.rf-comparison__row-icon--check {
|
|
97
81
|
color: var(--rf-color-success);
|
|
@@ -110,28 +94,23 @@
|
|
|
110
94
|
}
|
|
111
95
|
/* Callout badge */
|
|
112
96
|
.rf-comparison__callout-badge {
|
|
113
|
-
display: inline-block;
|
|
114
97
|
background: color-mix(in srgb, var(--rf-color-primary) 10%, transparent);
|
|
115
98
|
color: var(--rf-color-primary);
|
|
116
|
-
font-size:
|
|
117
|
-
font-weight:
|
|
99
|
+
font-size: var(--rf-text-xs);
|
|
100
|
+
font-weight: var(--rf-weight-semibold);
|
|
118
101
|
padding: 0.125rem 0.5rem;
|
|
119
102
|
border-radius: 999px;
|
|
120
103
|
}
|
|
121
104
|
.rf-comparison__callout-badge p { margin: 0; font-size: inherit; }
|
|
122
105
|
/* Cards layout */
|
|
123
106
|
.rf-comparison__cards {
|
|
124
|
-
display: grid;
|
|
125
|
-
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
|
|
126
107
|
gap: 1.5rem;
|
|
127
|
-
align-items: start;
|
|
128
108
|
}
|
|
129
109
|
.rf-comparison-card {
|
|
130
110
|
border: 1px solid var(--rf-color-border);
|
|
131
111
|
border-radius: var(--rf-radius-md);
|
|
132
112
|
padding: 1.5rem;
|
|
133
113
|
background: var(--rf-color-bg);
|
|
134
|
-
position: relative;
|
|
135
114
|
transition: box-shadow 200ms ease, transform 200ms ease;
|
|
136
115
|
}
|
|
137
116
|
.rf-comparison-card:hover {
|
|
@@ -143,43 +122,36 @@
|
|
|
143
122
|
transform: scale(1.02);
|
|
144
123
|
}
|
|
145
124
|
.rf-comparison-card__badge {
|
|
146
|
-
position: absolute;
|
|
147
|
-
top: -0.625rem;
|
|
148
|
-
left: 50%;
|
|
149
|
-
transform: translateX(-50%);
|
|
150
125
|
background: var(--rf-color-primary);
|
|
151
126
|
color: white;
|
|
152
|
-
font-size:
|
|
153
|
-
font-weight:
|
|
127
|
+
font-size: var(--rf-text-xs);
|
|
128
|
+
font-weight: var(--rf-weight-bold);
|
|
154
129
|
text-transform: uppercase;
|
|
155
|
-
letter-spacing:
|
|
130
|
+
letter-spacing: var(--rf-tracking-wider);
|
|
156
131
|
padding: 0.125rem 0.75rem;
|
|
157
132
|
border-radius: 999px;
|
|
158
133
|
white-space: nowrap;
|
|
159
134
|
}
|
|
160
135
|
.rf-comparison-card__name {
|
|
161
136
|
margin: 0 0 1rem;
|
|
162
|
-
font-size:
|
|
163
|
-
font-weight:
|
|
137
|
+
font-size: var(--rf-text-lg);
|
|
138
|
+
font-weight: var(--rf-weight-bold);
|
|
164
139
|
color: var(--rf-color-text);
|
|
165
140
|
}
|
|
166
141
|
.rf-comparison-card__rows {
|
|
167
|
-
list-style: none;
|
|
168
142
|
padding: 0;
|
|
169
143
|
margin: 0;
|
|
170
144
|
}
|
|
171
145
|
.rf-comparison-card__row {
|
|
172
146
|
padding: 0.5rem 0;
|
|
173
|
-
font-size:
|
|
147
|
+
font-size: var(--rf-text-sm);
|
|
174
148
|
color: var(--rf-color-muted);
|
|
175
149
|
border-bottom: 1px solid var(--rf-color-border);
|
|
176
|
-
display: flex;
|
|
177
|
-
align-items: baseline;
|
|
178
150
|
gap: 0.5rem;
|
|
179
151
|
}
|
|
180
152
|
.rf-comparison-card__row:last-child { border-bottom: none; }
|
|
181
153
|
.rf-comparison-card__row strong { color: var(--rf-color-text); white-space: nowrap; }
|
|
182
|
-
.rf-comparison-card__row p { margin: 0;
|
|
154
|
+
.rf-comparison-card__row p { margin: 0; }
|
|
183
155
|
.rf-comparison-card__row--negative { opacity: 0.7; }
|
|
184
156
|
.rf-comparison-card__row--callout {
|
|
185
157
|
border-bottom: none;
|
|
@@ -188,7 +160,7 @@
|
|
|
188
160
|
/* Verdict */
|
|
189
161
|
.rf-comparison__verdict {
|
|
190
162
|
text-align: center;
|
|
191
|
-
font-size:
|
|
163
|
+
font-size: var(--rf-text);
|
|
192
164
|
color: var(--rf-color-muted);
|
|
193
165
|
font-style: italic;
|
|
194
166
|
margin: 1.5rem auto 0;
|
|
@@ -203,9 +175,10 @@
|
|
|
203
175
|
.rf-comparison-row { padding: 0.25rem 0; }
|
|
204
176
|
/* Responsive */
|
|
205
177
|
@media (max-width: 640px) {
|
|
206
|
-
.rf-comparison__cards { grid-template-columns: 1fr; }
|
|
207
178
|
.rf-comparison-card--highlighted { transform: none; }
|
|
208
|
-
.rf-comparison__table { font-size:
|
|
179
|
+
.rf-comparison__table { font-size: var(--rf-text-sm); }
|
|
209
180
|
.rf-comparison__table th,
|
|
210
181
|
.rf-comparison__table td { padding: 0.5rem 0.625rem; }
|
|
211
182
|
}
|
|
183
|
+
|
|
184
|
+
}
|