@refrakt-md/lumina 0.24.3 → 0.24.5
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/package.json +5 -5
- package/styles/layouts/default.css +11 -0
- package/styles/runes/codegroup.css +30 -14
- package/styles/runes/diff.css +19 -6
- package/styles/runes/sandbox.css +19 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@refrakt-md/lumina",
|
|
3
3
|
"description": "Lumina theme for refrakt.md — design tokens, CSS, identity transform, and layout configs",
|
|
4
|
-
"version": "0.24.
|
|
4
|
+
"version": "0.24.5",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -84,10 +84,10 @@
|
|
|
84
84
|
"generate-tokens": "node scripts/generate-tokens.mjs"
|
|
85
85
|
},
|
|
86
86
|
"dependencies": {
|
|
87
|
-
"@refrakt-md/runes": "0.24.
|
|
88
|
-
"@refrakt-md/skeleton": "0.24.
|
|
89
|
-
"@refrakt-md/transform": "0.24.
|
|
90
|
-
"@refrakt-md/types": "0.24.
|
|
87
|
+
"@refrakt-md/runes": "0.24.5",
|
|
88
|
+
"@refrakt-md/skeleton": "0.24.5",
|
|
89
|
+
"@refrakt-md/transform": "0.24.5",
|
|
90
|
+
"@refrakt-md/types": "0.24.5"
|
|
91
91
|
},
|
|
92
92
|
"devDependencies": {
|
|
93
93
|
"postcss": "^8.4.0"
|
|
@@ -62,6 +62,17 @@
|
|
|
62
62
|
calc((100% - var(--rf-content-max, 80rem)) / 2)
|
|
63
63
|
);
|
|
64
64
|
}
|
|
65
|
+
/* Page sections (data-content-measure="anchored") keep their content at the
|
|
66
|
+
* text measure when bled to the wide track — only the surface/background
|
|
67
|
+
* widens, matching how `full` reads as a band. The absolutely-positioned bg
|
|
68
|
+
* fills the padded box, so the inner padding restores content without pulling
|
|
69
|
+
* the bleed in. Runes without the flag fill the wide track (card breakout). */
|
|
70
|
+
.rf-page-content > article > [data-content-measure="anchored"][data-width="wide"] {
|
|
71
|
+
padding-inline: max(
|
|
72
|
+
var(--rf-content-gutter, 1.5rem),
|
|
73
|
+
calc((100% - var(--rf-content-max, 80rem)) / 2)
|
|
74
|
+
);
|
|
75
|
+
}
|
|
65
76
|
/* Tinted sections also break out to full width */
|
|
66
77
|
.rf-page-content > article > :is([data-tint], [data-color-scheme]):not([data-width]) {
|
|
67
78
|
padding-inline: max(
|
|
@@ -1,26 +1,42 @@
|
|
|
1
1
|
@layer skin {
|
|
2
2
|
/* Code Group — skin.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* A codegroup is a *code container*: the topbar, tabs, and code body all
|
|
5
|
+
* belong to the code surface, not the page chrome. So the wrapper fill and
|
|
6
|
+
* its inner chrome derive from `--rf-color-code-bg` / `--rf-color-code-text`
|
|
7
|
+
* — the tokens a syntax preset (Nord, Dracula, …) owns. This keeps the whole
|
|
8
|
+
* component coherent with its code body even when the active preset gives the
|
|
9
|
+
* code surface a palette that diverges from the page (e.g. Nord's Polar Night
|
|
10
|
+
* code surface on an otherwise-neutral site). It also matches `diff`, whose
|
|
11
|
+
* body already fills from `--rf-color-code-bg`.
|
|
12
|
+
*
|
|
13
|
+
* Only the outer frame (border + shadow) stays in the page world so the
|
|
14
|
+
* component still reads as a card sitting on the page — same as diff's outer
|
|
15
|
+
* border. The chrome strip is a subtle elevation off the code surface, and
|
|
16
|
+
* the separators / text derive from the code tokens via color-mix so they
|
|
17
|
+
* stay legible against any code background in both light and dark modes.
|
|
7
18
|
*
|
|
8
19
|
* The wrapper clip, topbar flex, list reset, the scrollable tab strip, and the
|
|
9
20
|
* tab flex live in @refrakt-md/skeleton (styles/runes/codegroup.css). The pre/code
|
|
10
21
|
* rules stay here in skin: they deliberately override elements/code.css by source
|
|
11
22
|
* order (the `data-overflow="wrap"` reset especially). */
|
|
12
23
|
.rf-codegroup {
|
|
24
|
+
/* Code-surface-derived chrome — legible against any --rf-color-code-bg. */
|
|
25
|
+
--rf-codegroup-chrome: color-mix(in srgb, var(--rf-color-code-text) 5%, var(--rf-color-code-bg));
|
|
26
|
+
--rf-codegroup-line: color-mix(in srgb, var(--rf-color-code-text) 14%, var(--rf-color-code-bg));
|
|
27
|
+
--rf-codegroup-muted: color-mix(in srgb, var(--rf-color-code-text) 55%, var(--rf-color-code-bg));
|
|
28
|
+
|
|
13
29
|
border: 1px solid var(--rf-color-border);
|
|
14
|
-
background: var(--rf-color-
|
|
15
|
-
color: var(--rf-color-text);
|
|
30
|
+
background: var(--rf-color-code-bg);
|
|
31
|
+
color: var(--rf-color-code-text);
|
|
16
32
|
box-shadow: var(--rf-shadow-md);
|
|
17
33
|
padding: 0;
|
|
18
34
|
}
|
|
19
35
|
.rf-codegroup__topbar {
|
|
20
36
|
gap: 0.375rem;
|
|
21
37
|
padding: 0.75rem 1rem;
|
|
22
|
-
background:
|
|
23
|
-
border-bottom: 1px solid var(--rf-
|
|
38
|
+
background: var(--rf-codegroup-chrome);
|
|
39
|
+
border-bottom: 1px solid var(--rf-codegroup-line);
|
|
24
40
|
margin-bottom: 0;
|
|
25
41
|
}
|
|
26
42
|
/* Window chrome — three traffic-light dots painted as gradients on one
|
|
@@ -43,21 +59,21 @@
|
|
|
43
59
|
margin-left: 0.5rem;
|
|
44
60
|
font-size: var(--rf-text-xs);
|
|
45
61
|
font-weight: normal;
|
|
46
|
-
color: var(--rf-
|
|
62
|
+
color: var(--rf-codegroup-muted);
|
|
47
63
|
}
|
|
48
64
|
.rf-codegroup ul {
|
|
49
65
|
padding: 0;
|
|
50
66
|
margin: 0;
|
|
51
67
|
}
|
|
52
68
|
.rf-codegroup__tabs {
|
|
53
|
-
background:
|
|
54
|
-
border-bottom: 1px solid var(--rf-
|
|
69
|
+
background: var(--rf-codegroup-chrome);
|
|
70
|
+
border-bottom: 1px solid var(--rf-codegroup-line);
|
|
55
71
|
}
|
|
56
72
|
.rf-codegroup__tab {
|
|
57
73
|
padding: 0.5rem 1rem;
|
|
58
74
|
font-size: var(--rf-text-xs);
|
|
59
75
|
font-family: var(--rf-font-mono);
|
|
60
|
-
color: var(--rf-
|
|
76
|
+
color: var(--rf-codegroup-muted);
|
|
61
77
|
background: none;
|
|
62
78
|
border: none;
|
|
63
79
|
border-bottom: 2px solid transparent;
|
|
@@ -67,15 +83,15 @@
|
|
|
67
83
|
}
|
|
68
84
|
.rf-codegroup__tab:hover,
|
|
69
85
|
.rf-codegroup button[data-state="inactive"]:hover {
|
|
70
|
-
color: var(--rf-color-text);
|
|
86
|
+
color: var(--rf-color-code-text);
|
|
71
87
|
}
|
|
72
88
|
.rf-codegroup__tab--active,
|
|
73
89
|
.rf-codegroup button[data-state="active"] {
|
|
74
|
-
color: var(--rf-color-text);
|
|
90
|
+
color: var(--rf-color-code-text);
|
|
75
91
|
border-bottom-color: var(--rf-color-primary);
|
|
76
92
|
}
|
|
77
93
|
.rf-codegroup button[data-state="inactive"] {
|
|
78
|
-
color: var(--rf-
|
|
94
|
+
color: var(--rf-codegroup-muted);
|
|
79
95
|
}
|
|
80
96
|
.rf-codegroup .rf-codeblock {
|
|
81
97
|
margin: 0;
|
package/styles/runes/diff.css
CHANGED
|
@@ -1,7 +1,20 @@
|
|
|
1
1
|
@layer skin {
|
|
2
2
|
/* Diff — skin. The scroll container, sticky header, split grid, rows grid, line
|
|
3
|
-
* flex + gutter sizing live in @refrakt-md/skeleton (styles/runes/diff.css).
|
|
3
|
+
* flex + gutter sizing live in @refrakt-md/skeleton (styles/runes/diff.css).
|
|
4
|
+
*
|
|
5
|
+
* Like codegroup, a diff is a code container: the header, the panel divider,
|
|
6
|
+
* and the gutter belong to the code surface, so they derive from
|
|
7
|
+
* `--rf-color-code-bg` / `--rf-color-code-text` (the tokens a syntax preset
|
|
8
|
+
* owns) via color-mix. This keeps the chrome coherent with the code body even
|
|
9
|
+
* when the active preset gives the code surface a palette that diverges from
|
|
10
|
+
* the page (e.g. Nord on a neutral site). Only the outer frame (border) stays
|
|
11
|
+
* in the page world. */
|
|
4
12
|
.rf-diff {
|
|
13
|
+
/* Code-surface-derived chrome — legible against any --rf-color-code-bg. */
|
|
14
|
+
--rf-diff-chrome: color-mix(in srgb, var(--rf-color-code-text) 5%, var(--rf-color-code-bg));
|
|
15
|
+
--rf-diff-line: color-mix(in srgb, var(--rf-color-code-text) 14%, var(--rf-color-code-bg));
|
|
16
|
+
--rf-diff-muted: color-mix(in srgb, var(--rf-color-code-text) 55%, var(--rf-color-code-bg));
|
|
17
|
+
|
|
5
18
|
border: 1px solid var(--rf-color-border);
|
|
6
19
|
border-radius: var(--rf-radius-lg);
|
|
7
20
|
font-size: var(--rf-text-sm);
|
|
@@ -12,12 +25,12 @@
|
|
|
12
25
|
font-family: var(--rf-font-sans);
|
|
13
26
|
font-size: var(--rf-text-xs);
|
|
14
27
|
font-weight: var(--rf-weight-semibold);
|
|
15
|
-
color: var(--rf-
|
|
16
|
-
background: var(--rf-
|
|
17
|
-
border-bottom: 1px solid var(--rf-
|
|
28
|
+
color: var(--rf-diff-muted);
|
|
29
|
+
background: var(--rf-diff-chrome);
|
|
30
|
+
border-bottom: 1px solid var(--rf-diff-line);
|
|
18
31
|
}
|
|
19
32
|
.rf-diff__split-container .rf-diff__panel:first-child {
|
|
20
|
-
border-right: 1px solid var(--rf-
|
|
33
|
+
border-right: 1px solid var(--rf-diff-line);
|
|
21
34
|
}
|
|
22
35
|
.rf-diff__code {
|
|
23
36
|
margin: 0;
|
|
@@ -52,7 +65,7 @@
|
|
|
52
65
|
font-size: var(--rf-text-xs);
|
|
53
66
|
font-variant-numeric: tabular-nums;
|
|
54
67
|
user-select: none;
|
|
55
|
-
color: var(--rf-
|
|
68
|
+
color: var(--rf-diff-muted);
|
|
56
69
|
}
|
|
57
70
|
.rf-diff__line[data-line-status="remove"] .rf-diff__gutter-num[data-side="before"] {
|
|
58
71
|
color: var(--rf-color-danger);
|
package/styles/runes/sandbox.css
CHANGED
|
@@ -1,8 +1,27 @@
|
|
|
1
1
|
@layer skin {
|
|
2
2
|
/* Sandbox — skin. The iframe clip/fill + banner/poster/activate layout live in
|
|
3
3
|
* @refrakt-md/skeleton (styles/runes/sandbox.css). */
|
|
4
|
+
|
|
5
|
+
/* The iframe canvas is opaque (the behaviour writes `color-scheme` onto the
|
|
6
|
+
* srcdoc `<html>`, so the UA paints a solid backdrop — `background: transparent`
|
|
7
|
+
* can't make it see-through). A rounded shape therefore can't come from inside
|
|
8
|
+
* the sandbox; the embedding element has to clip it. The sandbox owns its
|
|
9
|
+
* radius and skeleton's `overflow: hidden` does the clip; the iframe inherits
|
|
10
|
+
* the radius so the clip holds across browsers (the rounded-iframe corner case).
|
|
11
|
+
*
|
|
12
|
+
* Radius mirrors codegroup: `radius-container` standalone — and in a bleed host
|
|
13
|
+
* (hero/feature) where the guest keeps its own chrome — while a clip-host well
|
|
14
|
+
* rounds it to the smaller media tier via the shared `[data-section="media"]
|
|
15
|
+
* > *` rule. A full-bleed cover/backdrop sandbox sits flush. */
|
|
16
|
+
.rf-sandbox {
|
|
17
|
+
border-radius: var(--rf-radius-container);
|
|
18
|
+
}
|
|
19
|
+
[data-media-position="cover"] .rf-sandbox {
|
|
20
|
+
border-radius: 0;
|
|
21
|
+
}
|
|
4
22
|
.rf-sandbox iframe {
|
|
5
23
|
border: none;
|
|
24
|
+
border-radius: inherit;
|
|
6
25
|
}
|
|
7
26
|
/* Static fallback (pre/code shown before hydration) */
|
|
8
27
|
.rf-sandbox pre {
|