@refrakt-md/lumina 0.20.2 → 0.22.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/contracts/structures.json +154 -5
- package/dist/tokens.d.ts +5 -3
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +42 -3
- package/dist/tokens.js.map +1 -1
- package/index.css +2 -0
- package/package.json +6 -5
- package/styles/dimensions/checklist.css +1 -1
- package/styles/dimensions/cover.css +18 -0
- package/styles/dimensions/density.css +3 -0
- package/styles/dimensions/frame.css +4 -4
- package/styles/dimensions/metadata.css +6 -6
- package/styles/dimensions/sections.css +12 -15
- package/styles/dimensions/sequence.css +3 -3
- package/styles/global.css +15 -15
- package/styles/layouts/blog.css +31 -31
- package/styles/layouts/default.css +9 -9
- package/styles/layouts/docs.css +6 -6
- package/styles/layouts/mobile.css +2 -2
- package/styles/layouts/on-this-page.css +5 -5
- package/styles/layouts/plan.css +24 -24
- package/styles/layouts/search.css +14 -14
- package/styles/layouts/version-switcher.css +6 -6
- package/styles/runes/accordion.css +10 -10
- package/styles/runes/aggregate.css +1 -1
- package/styles/runes/annotate.css +5 -5
- package/styles/runes/api.css +1 -1
- package/styles/runes/audio.css +9 -9
- package/styles/runes/badge.css +2 -2
- package/styles/runes/bento.css +2 -2
- package/styles/runes/blog.css +15 -15
- package/styles/runes/bond.css +3 -3
- package/styles/runes/breadcrumb.css +2 -2
- package/styles/runes/budget.css +20 -20
- package/styles/runes/bug.css +2 -2
- package/styles/runes/card.css +3 -3
- package/styles/runes/cast.css +5 -5
- package/styles/runes/changelog.css +8 -8
- package/styles/runes/character.css +3 -3
- package/styles/runes/chart.css +5 -5
- package/styles/runes/codegroup.css +3 -3
- package/styles/runes/collection.css +3 -3
- package/styles/runes/compare.css +5 -5
- package/styles/runes/comparison.css +22 -22
- package/styles/runes/conversation.css +4 -4
- package/styles/runes/cta.css +14 -14
- package/styles/runes/datatable.css +8 -8
- package/styles/runes/decision.css +2 -2
- package/styles/runes/design-context.css +2 -2
- package/styles/runes/details.css +4 -4
- package/styles/runes/diagram.css +3 -3
- package/styles/runes/diff.css +6 -6
- package/styles/runes/drawer.css +8 -8
- package/styles/runes/embed.css +1 -1
- package/styles/runes/event.css +2 -2
- package/styles/runes/expand.css +5 -5
- package/styles/runes/faction.css +3 -3
- package/styles/runes/feature.css +23 -11
- package/styles/runes/figure.css +3 -3
- package/styles/runes/form.css +16 -16
- package/styles/runes/gallery.css +7 -7
- package/styles/runes/hero.css +116 -14
- package/styles/runes/hint.css +7 -7
- package/styles/runes/howto.css +6 -6
- package/styles/runes/itinerary.css +12 -12
- package/styles/runes/juxtapose.css +6 -6
- package/styles/runes/lore.css +4 -4
- package/styles/runes/map.css +6 -6
- package/styles/runes/mediatext.css +1 -1
- package/styles/runes/milestone.css +12 -12
- package/styles/runes/mockup.css +7 -7
- package/styles/runes/nav.css +34 -34
- package/styles/runes/organization.css +3 -3
- package/styles/runes/pagination.css +5 -5
- package/styles/runes/palette.css +13 -13
- package/styles/runes/placeholder.css +16 -0
- package/styles/runes/plan-history.css +20 -20
- package/styles/runes/plan-progress.css +3 -3
- package/styles/runes/plan-ref.css +1 -1
- package/styles/runes/playlist.css +8 -8
- package/styles/runes/plot.css +6 -6
- package/styles/runes/preview.css +6 -6
- package/styles/runes/pricing.css +16 -16
- package/styles/runes/progress.css +2 -2
- package/styles/runes/pullquote.css +6 -5
- package/styles/runes/realm.css +3 -3
- package/styles/runes/recipe.css +9 -9
- package/styles/runes/relationships.css +2 -2
- package/styles/runes/reveal.css +10 -10
- package/styles/runes/sandbox.css +52 -2
- package/styles/runes/section.css +70 -0
- package/styles/runes/sidenote.css +2 -2
- package/styles/runes/spacing.css +11 -11
- package/styles/runes/spec.css +2 -2
- package/styles/runes/steps.css +22 -10
- package/styles/runes/storyboard.css +2 -2
- package/styles/runes/swatch.css +1 -1
- package/styles/runes/symbol.css +10 -10
- package/styles/runes/tabs.css +9 -9
- package/styles/runes/testimonial.css +7 -7
- package/styles/runes/textblock.css +4 -4
- package/styles/runes/timeline.css +7 -7
- package/styles/runes/toc.css +4 -4
- package/styles/runes/track.css +10 -10
- package/styles/runes/typography.css +12 -12
- package/styles/runes/work.css +2 -2
- package/tokens/base.css +43 -66
- package/tokens/dark.css +76 -80
|
@@ -15,22 +15,22 @@
|
|
|
15
15
|
}
|
|
16
16
|
.rf-timeline-entry > time {
|
|
17
17
|
display: block;
|
|
18
|
-
font-size:
|
|
19
|
-
font-weight:
|
|
18
|
+
font-size: var(--rf-text-xs);
|
|
19
|
+
font-weight: var(--rf-weight-semibold);
|
|
20
20
|
color: var(--rf-color-primary);
|
|
21
|
-
letter-spacing:
|
|
21
|
+
letter-spacing: var(--rf-tracking-wide);
|
|
22
22
|
margin-bottom: 0.25rem;
|
|
23
23
|
}
|
|
24
24
|
.rf-timeline-entry > span {
|
|
25
25
|
display: block;
|
|
26
|
-
font-size:
|
|
27
|
-
font-weight:
|
|
26
|
+
font-size: var(--rf-text);
|
|
27
|
+
font-weight: var(--rf-weight-bold);
|
|
28
28
|
color: var(--rf-color-text);
|
|
29
29
|
margin-bottom: 0.5rem;
|
|
30
30
|
}
|
|
31
31
|
.rf-timeline-entry__body {
|
|
32
|
-
font-size:
|
|
33
|
-
line-height:
|
|
32
|
+
font-size: var(--rf-text-sm);
|
|
33
|
+
line-height: var(--rf-leading-relaxed);
|
|
34
34
|
color: var(--rf-color-muted);
|
|
35
35
|
}
|
|
36
36
|
.rf-timeline-entry__body p:last-child {
|
package/styles/runes/toc.css
CHANGED
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
border-radius: 0 var(--rf-radius-md) var(--rf-radius-md) 0;
|
|
7
7
|
}
|
|
8
8
|
.rf-toc__list {
|
|
9
|
-
font-weight:
|
|
9
|
+
font-weight: var(--rf-weight-semibold);
|
|
10
10
|
margin-bottom: 0.75rem;
|
|
11
|
-
font-size:
|
|
11
|
+
font-size: var(--rf-text-xs);
|
|
12
12
|
text-transform: uppercase;
|
|
13
|
-
letter-spacing:
|
|
13
|
+
letter-spacing: var(--rf-tracking-wider);
|
|
14
14
|
color: var(--rf-color-muted);
|
|
15
15
|
}
|
|
16
16
|
.rf-toc ul,
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
.rf-toc a {
|
|
32
32
|
color: var(--rf-color-text);
|
|
33
33
|
text-decoration: none;
|
|
34
|
-
font-size:
|
|
34
|
+
font-size: var(--rf-text-sm);
|
|
35
35
|
display: inline-block;
|
|
36
36
|
padding: 0.2rem 0;
|
|
37
37
|
transition: color 150ms ease;
|
package/styles/runes/track.css
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
.rf-track::before {
|
|
17
17
|
content: counter(track);
|
|
18
18
|
min-width: 1.5rem;
|
|
19
|
-
font-size:
|
|
19
|
+
font-size: var(--rf-text-xs);
|
|
20
20
|
color: var(--rf-color-primary);
|
|
21
21
|
text-align: right;
|
|
22
22
|
flex-shrink: 0;
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
/* Track name — primary text, takes remaining space */
|
|
26
26
|
.rf-track__track-name {
|
|
27
27
|
flex: 1;
|
|
28
|
-
font-size:
|
|
29
|
-
font-weight:
|
|
28
|
+
font-size: var(--rf-text);
|
|
29
|
+
font-weight: var(--rf-weight-medium);
|
|
30
30
|
color: var(--rf-color-text);
|
|
31
31
|
min-width: 0;
|
|
32
32
|
overflow: hidden;
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
|
|
37
37
|
/* Artist — secondary text with dot separator */
|
|
38
38
|
.rf-track__track-artist {
|
|
39
|
-
font-size:
|
|
39
|
+
font-size: var(--rf-text-sm);
|
|
40
40
|
color: var(--rf-color-muted);
|
|
41
41
|
flex-shrink: 0;
|
|
42
42
|
}
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
|
|
49
49
|
/* Duration — pushed right, tabular nums */
|
|
50
50
|
.rf-track__track-duration {
|
|
51
|
-
font-size:
|
|
51
|
+
font-size: var(--rf-text-sm);
|
|
52
52
|
color: var(--rf-color-muted);
|
|
53
53
|
font-variant-numeric: tabular-nums;
|
|
54
54
|
flex-shrink: 0;
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
|
|
60
60
|
/* Meta (date etc.) — dot separator */
|
|
61
61
|
.rf-track__track-meta {
|
|
62
|
-
font-size:
|
|
62
|
+
font-size: var(--rf-text-xs);
|
|
63
63
|
color: var(--rf-color-muted);
|
|
64
64
|
flex-shrink: 0;
|
|
65
65
|
}
|
|
@@ -72,9 +72,9 @@
|
|
|
72
72
|
/* Description — full width below the row */
|
|
73
73
|
.rf-track__track-description {
|
|
74
74
|
flex-basis: 100%;
|
|
75
|
-
font-size:
|
|
75
|
+
font-size: var(--rf-text-sm);
|
|
76
76
|
color: var(--rf-color-muted);
|
|
77
|
-
line-height:
|
|
77
|
+
line-height: var(--rf-leading-normal);
|
|
78
78
|
padding-top: 0.5rem;
|
|
79
79
|
}
|
|
80
80
|
.rf-track__track-description p {
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
list-style: none;
|
|
94
94
|
padding: 0.5rem 0 0;
|
|
95
95
|
margin: 0;
|
|
96
|
-
font-size:
|
|
96
|
+
font-size: var(--rf-text-sm);
|
|
97
97
|
}
|
|
98
98
|
.rf-track [data-name="lyrics"] li {
|
|
99
99
|
padding: 0.125rem 0;
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
}
|
|
110
110
|
.rf-track [data-name="chapter-name"] {
|
|
111
111
|
color: var(--rf-color-text);
|
|
112
|
-
font-weight:
|
|
112
|
+
font-weight: var(--rf-weight-medium);
|
|
113
113
|
}
|
|
114
114
|
.rf-track [data-name="chapter-time"] {
|
|
115
115
|
color: var(--rf-color-muted);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* Typography — font specimen display */
|
|
2
2
|
.rf-typography__title {
|
|
3
|
-
font-size:
|
|
4
|
-
font-weight:
|
|
3
|
+
font-size: var(--rf-text-lg);
|
|
4
|
+
font-weight: var(--rf-weight-semibold);
|
|
5
5
|
margin-bottom: 1rem;
|
|
6
6
|
}
|
|
7
7
|
.rf-typography__specimens {
|
|
@@ -22,17 +22,17 @@
|
|
|
22
22
|
border-bottom: 1px solid var(--rf-color-border, #e5e7eb);
|
|
23
23
|
}
|
|
24
24
|
.rf-typography__specimen-role {
|
|
25
|
-
font-size:
|
|
26
|
-
font-weight:
|
|
25
|
+
font-size: var(--rf-text-xs);
|
|
26
|
+
font-weight: var(--rf-weight-semibold);
|
|
27
27
|
text-transform: uppercase;
|
|
28
|
-
letter-spacing:
|
|
28
|
+
letter-spacing: var(--rf-tracking-wider);
|
|
29
29
|
color: var(--rf-color-muted);
|
|
30
30
|
background: var(--rf-color-surface-raised);
|
|
31
31
|
padding: 0.125rem 0.5rem;
|
|
32
32
|
border-radius: var(--rf-radius-sm, 4px);
|
|
33
33
|
}
|
|
34
34
|
.rf-typography__specimen-family {
|
|
35
|
-
font-size:
|
|
35
|
+
font-size: var(--rf-text-sm);
|
|
36
36
|
color: var(--rf-color-muted);
|
|
37
37
|
}
|
|
38
38
|
.rf-typography__sizes {
|
|
@@ -45,14 +45,14 @@
|
|
|
45
45
|
display: flex;
|
|
46
46
|
align-items: baseline;
|
|
47
47
|
gap: 1rem;
|
|
48
|
-
line-height:
|
|
48
|
+
line-height: var(--rf-leading-snug);
|
|
49
49
|
overflow: hidden;
|
|
50
50
|
text-overflow: ellipsis;
|
|
51
51
|
white-space: nowrap;
|
|
52
52
|
}
|
|
53
53
|
.rf-typography__size-label {
|
|
54
54
|
flex-shrink: 0;
|
|
55
|
-
font-size:
|
|
55
|
+
font-size: var(--rf-text-xs);
|
|
56
56
|
font-family: var(--rf-font-mono, monospace);
|
|
57
57
|
color: var(--rf-color-muted);
|
|
58
58
|
min-width: 3rem;
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
gap: 0.25rem;
|
|
72
72
|
}
|
|
73
73
|
.rf-typography__weight-label {
|
|
74
|
-
font-size:
|
|
74
|
+
font-size: var(--rf-text-xs);
|
|
75
75
|
font-family: var(--rf-font-mono, monospace);
|
|
76
76
|
color: var(--rf-color-muted);
|
|
77
77
|
}
|
|
@@ -79,9 +79,9 @@
|
|
|
79
79
|
margin-top: 1rem;
|
|
80
80
|
padding-top: 1rem;
|
|
81
81
|
border-top: 1px solid var(--rf-color-border, #e5e7eb);
|
|
82
|
-
font-size:
|
|
83
|
-
line-height:
|
|
84
|
-
letter-spacing:
|
|
82
|
+
font-size: var(--rf-text-sm);
|
|
83
|
+
line-height: var(--rf-leading-relaxed);
|
|
84
|
+
letter-spacing: var(--rf-tracking-wider);
|
|
85
85
|
word-break: break-all;
|
|
86
86
|
color: var(--rf-color-muted);
|
|
87
87
|
}
|
package/styles/runes/work.css
CHANGED
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
.rf-work__metadata [data-field="assignee"] dd .rf-badge::before { content: '@'; }
|
|
25
25
|
|
|
26
26
|
.rf-work__body {
|
|
27
|
-
font-size:
|
|
28
|
-
line-height:
|
|
27
|
+
font-size: var(--rf-text-sm);
|
|
28
|
+
line-height: var(--rf-leading-relaxed);
|
|
29
29
|
}
|
|
30
30
|
.rf-work__body > section {
|
|
31
31
|
margin-top: 1rem;
|
package/tokens/base.css
CHANGED
|
@@ -1,37 +1,44 @@
|
|
|
1
|
-
/*
|
|
2
|
-
*
|
|
3
|
-
* Source of truth: packages/lumina/src/tokens.ts (`luminaTokens` export).
|
|
4
|
-
* This file mirrors that export verbatim — a coverage test in
|
|
5
|
-
* `packages/lumina/test/token-config-coverage.test.ts` keeps them in
|
|
6
|
-
* lockstep; drift fails CI. Edit `tokens.ts` and update both, or run
|
|
7
|
-
* a future build script that regenerates this file. */
|
|
1
|
+
/* GENERATED from src/tokens.ts by scripts/generate-tokens.mjs — do not edit by hand.
|
|
2
|
+
* Edit the `luminaTokens` source and rebuild; a drift test guards this file. */
|
|
8
3
|
|
|
9
|
-
:root {
|
|
10
|
-
/* Typography */
|
|
4
|
+
:root, [data-color-scheme="light"] {
|
|
11
5
|
--rf-font-sans: 'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
|
|
12
6
|
--rf-font-mono: 'JetBrains Mono', 'Fira Code', ui-monospace, 'Cascadia Code', monospace;
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
--rf-font-display: 'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
|
|
8
|
+
--rf-text-xs: 0.75rem;
|
|
9
|
+
--rf-text-sm: 0.875rem;
|
|
10
|
+
--rf-text: 1rem;
|
|
11
|
+
--rf-text-lg: 1.125rem;
|
|
12
|
+
--rf-text-xl: 1.25rem;
|
|
13
|
+
--rf-text-2xl: 1.5rem;
|
|
14
|
+
--rf-text-3xl: 1.875rem;
|
|
15
|
+
--rf-text-4xl: 2.5rem;
|
|
16
|
+
--rf-weight-light: 300;
|
|
17
|
+
--rf-weight-normal: 400;
|
|
18
|
+
--rf-weight-medium: 500;
|
|
19
|
+
--rf-weight-semibold: 600;
|
|
20
|
+
--rf-weight-bold: 700;
|
|
21
|
+
--rf-leading-tight: 1.2;
|
|
22
|
+
--rf-leading-snug: 1.35;
|
|
23
|
+
--rf-leading-normal: 1.5;
|
|
24
|
+
--rf-leading-relaxed: 1.65;
|
|
25
|
+
--rf-leading-loose: 2;
|
|
26
|
+
--rf-tracking-tight: -0.01em;
|
|
27
|
+
--rf-tracking-normal: 0;
|
|
28
|
+
--rf-tracking-wide: 0.03em;
|
|
29
|
+
--rf-tracking-wider: 0.06em;
|
|
15
30
|
--rf-color-text: #1c1a17;
|
|
16
31
|
--rf-color-muted: #6b6661;
|
|
17
32
|
--rf-color-border: #e2e0dd;
|
|
18
33
|
--rf-color-bg: #f5f4f1;
|
|
19
34
|
--rf-color-primary: #1c1a17;
|
|
20
35
|
--rf-color-primary-hover: #3a342d;
|
|
21
|
-
/* Derived subtle primary wash — tracks `primary` in both modes. */
|
|
22
36
|
--rf-color-primary-bg: color-mix(in oklch, var(--rf-color-primary) 10%, transparent);
|
|
23
37
|
--rf-color-on-primary: #ffffff;
|
|
24
|
-
|
|
25
|
-
/* Surfaces */
|
|
26
38
|
--rf-color-surface: #fbfaf7;
|
|
27
39
|
--rf-color-surface-hover: #ecebe8;
|
|
28
40
|
--rf-color-surface-active: #e2e0dd;
|
|
29
41
|
--rf-color-surface-raised: #ffffff;
|
|
30
|
-
/* SPEC-087 — lightness delta for the derived inset surface (applied at use-site
|
|
31
|
-
* via relative-color — lower L, keep C+H — so it tracks a tinted --rf-color-surface). */
|
|
32
|
-
--rf-surface-inset-shift: 0.04;
|
|
33
|
-
|
|
34
|
-
/* Semantic — muted earthy band per SPEC-051 */
|
|
35
42
|
--rf-color-info: #34547a;
|
|
36
43
|
--rf-color-info-bg: #e8edf4;
|
|
37
44
|
--rf-color-info-border: #c5d2e0;
|
|
@@ -44,70 +51,35 @@
|
|
|
44
51
|
--rf-color-success: #2d6a3e;
|
|
45
52
|
--rf-color-success-bg: #e0eee4;
|
|
46
53
|
--rf-color-success-border: #b8d4be;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
* Subtle surface tint so highlighted rows read as emphasized but not
|
|
51
|
-
* status-coloured (which would compete with diff's add/remove channel
|
|
52
|
-
* and the semantic palette above). `*-rail` is the optional left-edge
|
|
53
|
-
* border colour; falls back to the primary accent via the consuming
|
|
54
|
-
* CSS for themes that don't override it.
|
|
55
|
-
*
|
|
56
|
-
* WORK-341 — these three (and `--rf-color-primary-bg` above) are
|
|
57
|
-
* **intentionally shared**: each derives from a mode-aware token
|
|
58
|
-
* (`text` / `primary` / `muted`), so they track dark mode automatically
|
|
59
|
-
* and deliberately have no dark.css override (a fixed dark value would
|
|
60
|
-
* break the derivation). */
|
|
54
|
+
--rf-color-code-bg: #ebeae8;
|
|
55
|
+
--rf-color-code-text: #1c1a17;
|
|
56
|
+
--rf-color-code-inline-bg: #e6e5e3;
|
|
61
57
|
--rf-color-line-highlight: color-mix(in srgb, var(--rf-color-text) 6%, transparent);
|
|
62
58
|
--rf-color-line-highlight-rail: var(--rf-color-primary, var(--rf-color-text));
|
|
63
|
-
/* Gutter colour for `pre[data-linenumbers]` line counter. Defers to
|
|
64
|
-
* the existing muted text token by default; themes can pin a
|
|
65
|
-
* dedicated hue without overriding muted. */
|
|
66
59
|
--rf-color-line-number: var(--rf-color-muted);
|
|
67
|
-
|
|
68
|
-
/* Radii */
|
|
69
60
|
--rf-radius-sm: 6px;
|
|
70
61
|
--rf-radius-md: 10px;
|
|
71
62
|
--rf-radius-lg: 16px;
|
|
72
63
|
--rf-radius-full: 9999px;
|
|
73
|
-
|
|
74
|
-
/* Spacing */
|
|
75
64
|
--rf-spacing-xs: 0.25rem;
|
|
76
65
|
--rf-spacing-sm: 0.5rem;
|
|
77
66
|
--rf-spacing-md: 1.5rem;
|
|
78
67
|
--rf-spacing-lg: 2rem;
|
|
79
68
|
--rf-spacing-xl: 3rem;
|
|
80
69
|
--rf-spacing-2xl: 4rem;
|
|
81
|
-
|
|
82
|
-
/* Section spacing */
|
|
83
70
|
--rf-spacing-section: 4rem;
|
|
84
71
|
--rf-spacing-section-tight: 1.5rem;
|
|
85
72
|
--rf-spacing-section-loose: 6rem;
|
|
86
73
|
--rf-spacing-section-breathe: 8rem;
|
|
87
|
-
|
|
88
|
-
/* Inset (horizontal padding) */
|
|
89
74
|
--rf-inset-flush: 0;
|
|
90
75
|
--rf-inset-tight: 1rem;
|
|
91
76
|
--rf-inset-loose: 4rem;
|
|
92
77
|
--rf-inset-breathe: 8rem;
|
|
93
|
-
|
|
94
|
-
/* Shadows */
|
|
95
78
|
--rf-shadow-none: none;
|
|
96
79
|
--rf-shadow-xs: 0 1px 2px rgba(0,0,0,0.04);
|
|
97
80
|
--rf-shadow-sm: 0 1px 3px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04);
|
|
98
81
|
--rf-shadow-md: 0 4px 12px rgba(0,0,0,0.07), 0 1px 3px rgba(0,0,0,0.04);
|
|
99
82
|
--rf-shadow-lg: 0 8px 24px rgba(0,0,0,0.08), 0 2px 6px rgba(0,0,0,0.04);
|
|
100
|
-
|
|
101
|
-
/* Code block */
|
|
102
|
-
--rf-color-code-bg: #ebeae8;
|
|
103
|
-
--rf-color-code-text: #1c1a17;
|
|
104
|
-
--rf-color-code-inline-bg: #e6e5e3;
|
|
105
|
-
/* Legacy alias — same value, kept for downstream CSS that reads the
|
|
106
|
-
* older variable name. Will be removed once the rename is documented
|
|
107
|
-
* widely enough that it's safe to drop. */
|
|
108
|
-
--rf-color-inline-code-bg: #e6e5e3;
|
|
109
|
-
|
|
110
|
-
/* Syntax — the quiet spectrum walk */
|
|
111
83
|
--rf-syntax-keyword: #2a5c63;
|
|
112
84
|
--rf-syntax-function: #4a3b6e;
|
|
113
85
|
--rf-syntax-string: #8a3a3a;
|
|
@@ -115,19 +87,24 @@
|
|
|
115
87
|
--rf-syntax-comment: #8a857d;
|
|
116
88
|
--rf-syntax-punctuation: #6b6661;
|
|
117
89
|
--rf-syntax-variable: #1c1a17;
|
|
118
|
-
|
|
119
|
-
/* Shiki aliases — Shiki's CSS-variables theme emits `--rf-syntax-token-*`
|
|
120
|
-
* with `token-` hardcoded inside its theme builder. We bridge by emitting
|
|
121
|
-
* literal hex values matching the contract surface above. */
|
|
122
|
-
--rf-syntax-foreground: #1c1a17;
|
|
123
|
-
--rf-syntax-background: #ebeae8;
|
|
124
90
|
--rf-syntax-token-keyword: #2a5c63;
|
|
91
|
+
--rf-syntax-token-tag: #2a5c63;
|
|
92
|
+
--rf-syntax-token-function: #4a3b6e;
|
|
93
|
+
--rf-syntax-token-link: #4a3b6e;
|
|
94
|
+
--rf-syntax-token-type: #4a3b6e;
|
|
95
|
+
--rf-syntax-token-attribute: #4a3b6e;
|
|
125
96
|
--rf-syntax-token-string: #8a3a3a;
|
|
126
97
|
--rf-syntax-token-string-expression: #8a3a3a;
|
|
98
|
+
--rf-syntax-token-regex: #8a3a3a;
|
|
127
99
|
--rf-syntax-token-constant: #876327;
|
|
100
|
+
--rf-syntax-token-number: #876327;
|
|
128
101
|
--rf-syntax-token-comment: #8a857d;
|
|
129
|
-
--rf-syntax-token-function: #4a3b6e;
|
|
130
|
-
--rf-syntax-token-parameter: #1c1a17;
|
|
131
102
|
--rf-syntax-token-punctuation: #6b6661;
|
|
132
|
-
--rf-syntax-token-
|
|
103
|
+
--rf-syntax-token-operator: #6b6661;
|
|
104
|
+
--rf-syntax-token-parameter: #1c1a17;
|
|
105
|
+
--rf-syntax-token-property: #1c1a17;
|
|
106
|
+
--rf-syntax-foreground: #1c1a17;
|
|
107
|
+
--rf-syntax-background: #ebeae8;
|
|
108
|
+
--rf-color-inline-code-bg: #e6e5e3;
|
|
109
|
+
--rf-surface-inset-shift: 0.04;
|
|
133
110
|
}
|
package/tokens/dark.css
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
/*
|
|
2
|
-
*
|
|
3
|
-
* Source of truth: packages/lumina/src/tokens.ts (`luminaTokens.modes.dark`).
|
|
4
|
-
* This file mirrors that overlay verbatim under both selectors
|
|
5
|
-
* (`[data-theme="dark"]` for user toggles and the `prefers-color-scheme`
|
|
6
|
-
* media query for system preference). A coverage test keeps the two in
|
|
7
|
-
* lockstep; drift fails CI. */
|
|
1
|
+
/* GENERATED from src/tokens.ts by scripts/generate-tokens.mjs — do not edit by hand.
|
|
2
|
+
* Edit the `luminaTokens` source and rebuild; a drift test guards this file. */
|
|
8
3
|
|
|
9
|
-
[data-theme="dark"] {
|
|
4
|
+
[data-theme="dark"], [data-color-scheme="dark"] {
|
|
10
5
|
--rf-color-text: #f6f4ef;
|
|
11
6
|
--rf-color-muted: #94908a;
|
|
12
7
|
--rf-color-border: #282825;
|
|
@@ -14,13 +9,10 @@
|
|
|
14
9
|
--rf-color-primary: #f6f4ef;
|
|
15
10
|
--rf-color-primary-hover: #d4cfc5;
|
|
16
11
|
--rf-color-on-primary: #1a1a17;
|
|
17
|
-
|
|
18
12
|
--rf-color-surface: #1f1f1c;
|
|
19
13
|
--rf-color-surface-hover: #282825;
|
|
20
14
|
--rf-color-surface-active: #333330;
|
|
21
15
|
--rf-color-surface-raised: #272723;
|
|
22
|
-
--rf-surface-inset-shift: 0.06;
|
|
23
|
-
|
|
24
16
|
--rf-color-info: #9bb4c7;
|
|
25
17
|
--rf-color-info-bg: #1f2530;
|
|
26
18
|
--rf-color-info-border: #3d4655;
|
|
@@ -33,12 +25,13 @@
|
|
|
33
25
|
--rf-color-success: #7eb398;
|
|
34
26
|
--rf-color-success-bg: #1a2a1f;
|
|
35
27
|
--rf-color-success-border: #2a4a35;
|
|
36
|
-
|
|
37
28
|
--rf-color-code-bg: #1c1c19;
|
|
38
29
|
--rf-color-code-text: #f6f4ef;
|
|
39
30
|
--rf-color-code-inline-bg: #2b2b29;
|
|
40
|
-
--rf-
|
|
41
|
-
|
|
31
|
+
--rf-shadow-xs: 0 1px 2px rgba(0,0,0,0.3);
|
|
32
|
+
--rf-shadow-sm: 0 1px 3px rgba(0,0,0,0.4), 0 1px 2px rgba(0,0,0,0.3);
|
|
33
|
+
--rf-shadow-md: 0 4px 12px rgba(0,0,0,0.4), 0 1px 3px rgba(0,0,0,0.3);
|
|
34
|
+
--rf-shadow-lg: 0 8px 24px rgba(0,0,0,0.5), 0 2px 6px rgba(0,0,0,0.3);
|
|
42
35
|
--rf-syntax-keyword: #7eb6bc;
|
|
43
36
|
--rf-syntax-function: #a89bc7;
|
|
44
37
|
--rf-syntax-string: #c79a9a;
|
|
@@ -46,83 +39,86 @@
|
|
|
46
39
|
--rf-syntax-comment: #6b6661;
|
|
47
40
|
--rf-syntax-punctuation: #94908a;
|
|
48
41
|
--rf-syntax-variable: #f6f4ef;
|
|
49
|
-
|
|
50
|
-
--rf-syntax-foreground: #f6f4ef;
|
|
51
|
-
--rf-syntax-background: #1c1c19;
|
|
52
42
|
--rf-syntax-token-keyword: #7eb6bc;
|
|
43
|
+
--rf-syntax-token-tag: #7eb6bc;
|
|
44
|
+
--rf-syntax-token-function: #a89bc7;
|
|
45
|
+
--rf-syntax-token-link: #a89bc7;
|
|
46
|
+
--rf-syntax-token-type: #a89bc7;
|
|
47
|
+
--rf-syntax-token-attribute: #a89bc7;
|
|
53
48
|
--rf-syntax-token-string: #c79a9a;
|
|
54
49
|
--rf-syntax-token-string-expression: #c79a9a;
|
|
50
|
+
--rf-syntax-token-regex: #c79a9a;
|
|
55
51
|
--rf-syntax-token-constant: #d4b07e;
|
|
52
|
+
--rf-syntax-token-number: #d4b07e;
|
|
56
53
|
--rf-syntax-token-comment: #6b6661;
|
|
57
|
-
--rf-syntax-token-function: #a89bc7;
|
|
58
|
-
--rf-syntax-token-parameter: #f6f4ef;
|
|
59
54
|
--rf-syntax-token-punctuation: #94908a;
|
|
60
|
-
--rf-syntax-token-
|
|
61
|
-
|
|
62
|
-
--rf-
|
|
63
|
-
--rf-
|
|
64
|
-
--rf-
|
|
65
|
-
--rf-
|
|
55
|
+
--rf-syntax-token-operator: #94908a;
|
|
56
|
+
--rf-syntax-token-parameter: #f6f4ef;
|
|
57
|
+
--rf-syntax-token-property: #f6f4ef;
|
|
58
|
+
--rf-syntax-foreground: #f6f4ef;
|
|
59
|
+
--rf-syntax-background: #1c1c19;
|
|
60
|
+
--rf-color-inline-code-bg: #2b2b29;
|
|
61
|
+
--rf-surface-inset-shift: 0.06;
|
|
66
62
|
}
|
|
67
63
|
|
|
68
|
-
/* Auto dark mode via system preference */
|
|
69
64
|
@media (prefers-color-scheme: dark) {
|
|
70
65
|
:root:not([data-theme="light"]) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
66
|
+
--rf-color-text: #f6f4ef;
|
|
67
|
+
--rf-color-muted: #94908a;
|
|
68
|
+
--rf-color-border: #282825;
|
|
69
|
+
--rf-color-bg: #1a1a17;
|
|
70
|
+
--rf-color-primary: #f6f4ef;
|
|
71
|
+
--rf-color-primary-hover: #d4cfc5;
|
|
77
72
|
--rf-color-on-primary: #1a1a17;
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
73
|
+
--rf-color-surface: #1f1f1c;
|
|
74
|
+
--rf-color-surface-hover: #282825;
|
|
75
|
+
--rf-color-surface-active: #333330;
|
|
76
|
+
--rf-color-surface-raised: #272723;
|
|
77
|
+
--rf-color-info: #9bb4c7;
|
|
78
|
+
--rf-color-info-bg: #1f2530;
|
|
79
|
+
--rf-color-info-border: #3d4655;
|
|
80
|
+
--rf-color-warning: #d4a868;
|
|
81
|
+
--rf-color-warning-bg: #2a2519;
|
|
82
|
+
--rf-color-warning-border: #4a3f2a;
|
|
83
|
+
--rf-color-danger: #d48888;
|
|
84
|
+
--rf-color-danger-bg: #2a1818;
|
|
85
|
+
--rf-color-danger-border: #4a2a2a;
|
|
86
|
+
--rf-color-success: #7eb398;
|
|
87
|
+
--rf-color-success-bg: #1a2a1f;
|
|
88
|
+
--rf-color-success-border: #2a4a35;
|
|
89
|
+
--rf-color-code-bg: #1c1c19;
|
|
90
|
+
--rf-color-code-text: #f6f4ef;
|
|
91
|
+
--rf-color-code-inline-bg: #2b2b29;
|
|
92
|
+
--rf-shadow-xs: 0 1px 2px rgba(0,0,0,0.3);
|
|
93
|
+
--rf-shadow-sm: 0 1px 3px rgba(0,0,0,0.4), 0 1px 2px rgba(0,0,0,0.3);
|
|
94
|
+
--rf-shadow-md: 0 4px 12px rgba(0,0,0,0.4), 0 1px 3px rgba(0,0,0,0.3);
|
|
95
|
+
--rf-shadow-lg: 0 8px 24px rgba(0,0,0,0.5), 0 2px 6px rgba(0,0,0,0.3);
|
|
96
|
+
--rf-syntax-keyword: #7eb6bc;
|
|
97
|
+
--rf-syntax-function: #a89bc7;
|
|
98
|
+
--rf-syntax-string: #c79a9a;
|
|
99
|
+
--rf-syntax-constant: #d4b07e;
|
|
100
|
+
--rf-syntax-comment: #6b6661;
|
|
101
|
+
--rf-syntax-punctuation: #94908a;
|
|
102
|
+
--rf-syntax-variable: #f6f4ef;
|
|
103
|
+
--rf-syntax-token-keyword: #7eb6bc;
|
|
104
|
+
--rf-syntax-token-tag: #7eb6bc;
|
|
105
|
+
--rf-syntax-token-function: #a89bc7;
|
|
106
|
+
--rf-syntax-token-link: #a89bc7;
|
|
107
|
+
--rf-syntax-token-type: #a89bc7;
|
|
108
|
+
--rf-syntax-token-attribute: #a89bc7;
|
|
109
|
+
--rf-syntax-token-string: #c79a9a;
|
|
110
|
+
--rf-syntax-token-string-expression: #c79a9a;
|
|
111
|
+
--rf-syntax-token-regex: #c79a9a;
|
|
112
|
+
--rf-syntax-token-constant: #d4b07e;
|
|
113
|
+
--rf-syntax-token-number: #d4b07e;
|
|
114
|
+
--rf-syntax-token-comment: #6b6661;
|
|
115
|
+
--rf-syntax-token-punctuation: #94908a;
|
|
116
|
+
--rf-syntax-token-operator: #94908a;
|
|
117
|
+
--rf-syntax-token-parameter: #f6f4ef;
|
|
118
|
+
--rf-syntax-token-property: #f6f4ef;
|
|
119
|
+
--rf-syntax-foreground: #f6f4ef;
|
|
120
|
+
--rf-syntax-background: #1c1c19;
|
|
121
|
+
--rf-color-inline-code-bg: #2b2b29;
|
|
83
122
|
--rf-surface-inset-shift: 0.06;
|
|
84
|
-
|
|
85
|
-
--rf-color-info: #9bb4c7;
|
|
86
|
-
--rf-color-info-bg: #1f2530;
|
|
87
|
-
--rf-color-info-border: #3d4655;
|
|
88
|
-
--rf-color-warning: #d4a868;
|
|
89
|
-
--rf-color-warning-bg: #2a2519;
|
|
90
|
-
--rf-color-warning-border: #4a3f2a;
|
|
91
|
-
--rf-color-danger: #d48888;
|
|
92
|
-
--rf-color-danger-bg: #2a1818;
|
|
93
|
-
--rf-color-danger-border: #4a2a2a;
|
|
94
|
-
--rf-color-success: #7eb398;
|
|
95
|
-
--rf-color-success-bg: #1a2a1f;
|
|
96
|
-
--rf-color-success-border: #2a4a35;
|
|
97
|
-
|
|
98
|
-
--rf-color-code-bg: #1c1c19;
|
|
99
|
-
--rf-color-code-text: #f6f4ef;
|
|
100
|
-
--rf-color-code-inline-bg: #2b2b29;
|
|
101
|
-
--rf-color-inline-code-bg: #2b2b29;
|
|
102
|
-
|
|
103
|
-
--rf-syntax-keyword: #7eb6bc;
|
|
104
|
-
--rf-syntax-function: #a89bc7;
|
|
105
|
-
--rf-syntax-string: #c79a9a;
|
|
106
|
-
--rf-syntax-constant: #d4b07e;
|
|
107
|
-
--rf-syntax-comment: #6b6661;
|
|
108
|
-
--rf-syntax-punctuation: #94908a;
|
|
109
|
-
--rf-syntax-variable: #f6f4ef;
|
|
110
|
-
|
|
111
|
-
--rf-syntax-foreground: #f6f4ef;
|
|
112
|
-
--rf-syntax-background: #1c1c19;
|
|
113
|
-
--rf-syntax-token-keyword: #7eb6bc;
|
|
114
|
-
--rf-syntax-token-string: #c79a9a;
|
|
115
|
-
--rf-syntax-token-string-expression: #c79a9a;
|
|
116
|
-
--rf-syntax-token-constant: #d4b07e;
|
|
117
|
-
--rf-syntax-token-comment: #6b6661;
|
|
118
|
-
--rf-syntax-token-function: #a89bc7;
|
|
119
|
-
--rf-syntax-token-parameter: #f6f4ef;
|
|
120
|
-
--rf-syntax-token-punctuation: #94908a;
|
|
121
|
-
--rf-syntax-token-link: #a89bc7;
|
|
122
|
-
|
|
123
|
-
--rf-shadow-xs: 0 1px 2px rgba(0,0,0,0.3);
|
|
124
|
-
--rf-shadow-sm: 0 1px 3px rgba(0,0,0,0.4), 0 1px 2px rgba(0,0,0,0.3);
|
|
125
|
-
--rf-shadow-md: 0 4px 12px rgba(0,0,0,0.4), 0 1px 3px rgba(0,0,0,0.3);
|
|
126
|
-
--rf-shadow-lg: 0 8px 24px rgba(0,0,0,0.5), 0 2px 6px rgba(0,0,0,0.3);
|
|
127
123
|
}
|
|
128
124
|
}
|