@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.
Files changed (108) hide show
  1. package/contracts/structures.json +154 -5
  2. package/dist/tokens.d.ts +5 -3
  3. package/dist/tokens.d.ts.map +1 -1
  4. package/dist/tokens.js +42 -3
  5. package/dist/tokens.js.map +1 -1
  6. package/index.css +2 -0
  7. package/package.json +6 -5
  8. package/styles/dimensions/checklist.css +1 -1
  9. package/styles/dimensions/cover.css +18 -0
  10. package/styles/dimensions/density.css +3 -0
  11. package/styles/dimensions/frame.css +4 -4
  12. package/styles/dimensions/metadata.css +6 -6
  13. package/styles/dimensions/sections.css +12 -15
  14. package/styles/dimensions/sequence.css +3 -3
  15. package/styles/global.css +15 -15
  16. package/styles/layouts/blog.css +31 -31
  17. package/styles/layouts/default.css +9 -9
  18. package/styles/layouts/docs.css +6 -6
  19. package/styles/layouts/mobile.css +2 -2
  20. package/styles/layouts/on-this-page.css +5 -5
  21. package/styles/layouts/plan.css +24 -24
  22. package/styles/layouts/search.css +14 -14
  23. package/styles/layouts/version-switcher.css +6 -6
  24. package/styles/runes/accordion.css +10 -10
  25. package/styles/runes/aggregate.css +1 -1
  26. package/styles/runes/annotate.css +5 -5
  27. package/styles/runes/api.css +1 -1
  28. package/styles/runes/audio.css +9 -9
  29. package/styles/runes/badge.css +2 -2
  30. package/styles/runes/bento.css +2 -2
  31. package/styles/runes/blog.css +15 -15
  32. package/styles/runes/bond.css +3 -3
  33. package/styles/runes/breadcrumb.css +2 -2
  34. package/styles/runes/budget.css +20 -20
  35. package/styles/runes/bug.css +2 -2
  36. package/styles/runes/card.css +3 -3
  37. package/styles/runes/cast.css +5 -5
  38. package/styles/runes/changelog.css +8 -8
  39. package/styles/runes/character.css +3 -3
  40. package/styles/runes/chart.css +5 -5
  41. package/styles/runes/codegroup.css +3 -3
  42. package/styles/runes/collection.css +3 -3
  43. package/styles/runes/compare.css +5 -5
  44. package/styles/runes/comparison.css +22 -22
  45. package/styles/runes/conversation.css +4 -4
  46. package/styles/runes/cta.css +14 -14
  47. package/styles/runes/datatable.css +8 -8
  48. package/styles/runes/decision.css +2 -2
  49. package/styles/runes/design-context.css +2 -2
  50. package/styles/runes/details.css +4 -4
  51. package/styles/runes/diagram.css +3 -3
  52. package/styles/runes/diff.css +6 -6
  53. package/styles/runes/drawer.css +8 -8
  54. package/styles/runes/embed.css +1 -1
  55. package/styles/runes/event.css +2 -2
  56. package/styles/runes/expand.css +5 -5
  57. package/styles/runes/faction.css +3 -3
  58. package/styles/runes/feature.css +23 -11
  59. package/styles/runes/figure.css +3 -3
  60. package/styles/runes/form.css +16 -16
  61. package/styles/runes/gallery.css +7 -7
  62. package/styles/runes/hero.css +116 -14
  63. package/styles/runes/hint.css +7 -7
  64. package/styles/runes/howto.css +6 -6
  65. package/styles/runes/itinerary.css +12 -12
  66. package/styles/runes/juxtapose.css +6 -6
  67. package/styles/runes/lore.css +4 -4
  68. package/styles/runes/map.css +6 -6
  69. package/styles/runes/mediatext.css +1 -1
  70. package/styles/runes/milestone.css +12 -12
  71. package/styles/runes/mockup.css +7 -7
  72. package/styles/runes/nav.css +34 -34
  73. package/styles/runes/organization.css +3 -3
  74. package/styles/runes/pagination.css +5 -5
  75. package/styles/runes/palette.css +13 -13
  76. package/styles/runes/placeholder.css +16 -0
  77. package/styles/runes/plan-history.css +20 -20
  78. package/styles/runes/plan-progress.css +3 -3
  79. package/styles/runes/plan-ref.css +1 -1
  80. package/styles/runes/playlist.css +8 -8
  81. package/styles/runes/plot.css +6 -6
  82. package/styles/runes/preview.css +6 -6
  83. package/styles/runes/pricing.css +16 -16
  84. package/styles/runes/progress.css +2 -2
  85. package/styles/runes/pullquote.css +6 -5
  86. package/styles/runes/realm.css +3 -3
  87. package/styles/runes/recipe.css +9 -9
  88. package/styles/runes/relationships.css +2 -2
  89. package/styles/runes/reveal.css +10 -10
  90. package/styles/runes/sandbox.css +52 -2
  91. package/styles/runes/section.css +70 -0
  92. package/styles/runes/sidenote.css +2 -2
  93. package/styles/runes/spacing.css +11 -11
  94. package/styles/runes/spec.css +2 -2
  95. package/styles/runes/steps.css +22 -10
  96. package/styles/runes/storyboard.css +2 -2
  97. package/styles/runes/swatch.css +1 -1
  98. package/styles/runes/symbol.css +10 -10
  99. package/styles/runes/tabs.css +9 -9
  100. package/styles/runes/testimonial.css +7 -7
  101. package/styles/runes/textblock.css +4 -4
  102. package/styles/runes/timeline.css +7 -7
  103. package/styles/runes/toc.css +4 -4
  104. package/styles/runes/track.css +10 -10
  105. package/styles/runes/typography.css +12 -12
  106. package/styles/runes/work.css +2 -2
  107. package/tokens/base.css +43 -66
  108. 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: 0.8rem;
19
- font-weight: 600;
18
+ font-size: var(--rf-text-xs);
19
+ font-weight: var(--rf-weight-semibold);
20
20
  color: var(--rf-color-primary);
21
- letter-spacing: 0.02em;
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: 1.05rem;
27
- font-weight: 700;
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: 0.925rem;
33
- line-height: 1.65;
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 {
@@ -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: 650;
9
+ font-weight: var(--rf-weight-semibold);
10
10
  margin-bottom: 0.75rem;
11
- font-size: 0.7rem;
11
+ font-size: var(--rf-text-xs);
12
12
  text-transform: uppercase;
13
- letter-spacing: 0.06em;
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: 0.85rem;
34
+ font-size: var(--rf-text-sm);
35
35
  display: inline-block;
36
36
  padding: 0.2rem 0;
37
37
  transition: color 150ms ease;
@@ -16,7 +16,7 @@
16
16
  .rf-track::before {
17
17
  content: counter(track);
18
18
  min-width: 1.5rem;
19
- font-size: 0.8rem;
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: 0.9375rem;
29
- font-weight: 500;
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: 0.8125rem;
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: 0.8125rem;
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: 0.75rem;
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: 0.8125rem;
75
+ font-size: var(--rf-text-sm);
76
76
  color: var(--rf-color-muted);
77
- line-height: 1.5;
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: 0.8125rem;
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: 500;
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: 1.125rem;
4
- font-weight: 600;
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: 0.75rem;
26
- font-weight: 600;
25
+ font-size: var(--rf-text-xs);
26
+ font-weight: var(--rf-weight-semibold);
27
27
  text-transform: uppercase;
28
- letter-spacing: 0.05em;
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: 0.9rem;
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: 1.3;
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: 0.7rem;
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: 0.7rem;
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: 0.875rem;
83
- line-height: 1.8;
84
- letter-spacing: 0.05em;
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
  }
@@ -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: 0.925rem;
28
- line-height: 1.65;
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
- /* Lumina ThemeDesign Tokens (Light Mode)
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
- /* Core palette */
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
- /* WORK-304 — neutral tint for line highlight (the third
49
- * `[data-line-status]` value that snippet / codegroup / diff share).
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-link: #4a3b6e;
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
- /* Lumina ThemeDark Mode Token Overrides
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-color-inline-code-bg: #2b2b29;
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-link: #a89bc7;
61
-
62
- --rf-shadow-xs: 0 1px 2px rgba(0,0,0,0.3);
63
- --rf-shadow-sm: 0 1px 3px rgba(0,0,0,0.4), 0 1px 2px rgba(0,0,0,0.3);
64
- --rf-shadow-md: 0 4px 12px rgba(0,0,0,0.4), 0 1px 3px rgba(0,0,0,0.3);
65
- --rf-shadow-lg: 0 8px 24px rgba(0,0,0,0.5), 0 2px 6px rgba(0,0,0,0.3);
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
- --rf-color-text: #f6f4ef;
72
- --rf-color-muted: #94908a;
73
- --rf-color-border: #282825;
74
- --rf-color-bg: #1a1a17;
75
- --rf-color-primary: #f6f4ef;
76
- --rf-color-primary-hover: #d4cfc5;
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
- --rf-color-surface: #1f1f1c;
80
- --rf-color-surface-hover: #282825;
81
- --rf-color-surface-active: #333330;
82
- --rf-color-surface-raised: #272723;
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
  }