@refrakt-md/lumina 0.32.0 → 0.34.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 (142) hide show
  1. package/base.css +29 -29
  2. package/contracts/structures.json +58 -60
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js.map +1 -1
  5. package/dist/icons.d.ts.map +1 -1
  6. package/dist/icons.js +57 -57
  7. package/dist/icons.js.map +1 -1
  8. package/dist/presets/catppuccin.js.map +1 -1
  9. package/dist/presets/dracula.js.map +1 -1
  10. package/dist/presets/gruvbox.js.map +1 -1
  11. package/dist/presets/niwaki.js.map +1 -1
  12. package/dist/presets/nord.js.map +1 -1
  13. package/dist/presets/one-dark.js.map +1 -1
  14. package/dist/presets/solarized.js.map +1 -1
  15. package/dist/presets/tideline.d.ts.map +1 -1
  16. package/dist/presets/tideline.js +20 -4
  17. package/dist/presets/tideline.js.map +1 -1
  18. package/dist/presets/tokyo-night.js.map +1 -1
  19. package/dist/tokens.js.map +1 -1
  20. package/index.css +124 -124
  21. package/package.json +5 -5
  22. package/presets.json +61 -13
  23. package/styles/base/attributes.css +32 -13
  24. package/styles/dimensions/checklist.css +45 -46
  25. package/styles/dimensions/cover.css +71 -51
  26. package/styles/dimensions/density.css +69 -65
  27. package/styles/dimensions/frame.css +116 -57
  28. package/styles/dimensions/metadata.css +110 -103
  29. package/styles/dimensions/motion.css +42 -13
  30. package/styles/dimensions/reading.css +27 -27
  31. package/styles/dimensions/sections.css +44 -45
  32. package/styles/dimensions/sequence.css +56 -57
  33. package/styles/dimensions/state.css +8 -2
  34. package/styles/dimensions/substrate.css +82 -58
  35. package/styles/dimensions/surfaces.css +65 -62
  36. package/styles/elements/blockquote.css +24 -25
  37. package/styles/elements/code.css +72 -71
  38. package/styles/elements/table.css +36 -37
  39. package/styles/global.css +163 -121
  40. package/styles/layouts/blog.css +219 -218
  41. package/styles/layouts/default.css +168 -167
  42. package/styles/layouts/docs.css +121 -122
  43. package/styles/layouts/mobile.css +54 -55
  44. package/styles/layouts/on-this-page.css +46 -47
  45. package/styles/layouts/plan.css +248 -247
  46. package/styles/layouts/search.css +142 -140
  47. package/styles/layouts/split.css +45 -45
  48. package/styles/layouts/theme-toggle.css +33 -31
  49. package/styles/layouts/version-switcher.css +38 -37
  50. package/styles/runes/accordion.css +90 -81
  51. package/styles/runes/aggregate.css +50 -39
  52. package/styles/runes/annotate.css +46 -45
  53. package/styles/runes/api.css +22 -23
  54. package/styles/runes/audio.css +140 -141
  55. package/styles/runes/badge.css +12 -13
  56. package/styles/runes/bar.css +4 -5
  57. package/styles/runes/bento.css +73 -62
  58. package/styles/runes/bg.css +62 -47
  59. package/styles/runes/blog.css +89 -90
  60. package/styles/runes/bond.css +49 -50
  61. package/styles/runes/breadcrumb.css +34 -35
  62. package/styles/runes/budget.css +126 -127
  63. package/styles/runes/bug.css +28 -27
  64. package/styles/runes/card.css +63 -60
  65. package/styles/runes/carousel.css +15 -15
  66. package/styles/runes/cast.css +50 -51
  67. package/styles/runes/changelog.css +45 -46
  68. package/styles/runes/character.css +31 -32
  69. package/styles/runes/chart.css +194 -106
  70. package/styles/runes/codegroup.css +109 -100
  71. package/styles/runes/collection.css +87 -86
  72. package/styles/runes/compare.css +38 -39
  73. package/styles/runes/comparison.css +205 -179
  74. package/styles/runes/conversation.css +36 -33
  75. package/styles/runes/cta.css +135 -132
  76. package/styles/runes/datatable.css +84 -83
  77. package/styles/runes/decision.css +25 -26
  78. package/styles/runes/design-context.css +21 -23
  79. package/styles/runes/details.css +26 -27
  80. package/styles/runes/diagram.css +28 -29
  81. package/styles/runes/diff.css +75 -72
  82. package/styles/runes/drawer.css +276 -198
  83. package/styles/runes/embed.css +20 -21
  84. package/styles/runes/event.css +35 -36
  85. package/styles/runes/expand.css +43 -34
  86. package/styles/runes/faction.css +47 -48
  87. package/styles/runes/feature.css +119 -112
  88. package/styles/runes/figure.css +11 -12
  89. package/styles/runes/file-ref.css +11 -13
  90. package/styles/runes/form.css +155 -154
  91. package/styles/runes/gallery.css +59 -60
  92. package/styles/runes/grid.css +10 -7
  93. package/styles/runes/hero.css +189 -185
  94. package/styles/runes/hint.css +57 -58
  95. package/styles/runes/howto.css +62 -64
  96. package/styles/runes/itinerary.css +133 -134
  97. package/styles/runes/juxtapose.css +83 -82
  98. package/styles/runes/lore.css +32 -34
  99. package/styles/runes/map.css +106 -99
  100. package/styles/runes/mediatext.css +30 -27
  101. package/styles/runes/milestone.css +98 -97
  102. package/styles/runes/mockup.css +338 -335
  103. package/styles/runes/nav.css +465 -450
  104. package/styles/runes/organization.css +23 -20
  105. package/styles/runes/page-section.css +14 -15
  106. package/styles/runes/pagination.css +45 -44
  107. package/styles/runes/palette.css +78 -80
  108. package/styles/runes/placeholder.css +8 -9
  109. package/styles/runes/plan-history.css +160 -161
  110. package/styles/runes/plan-progress.css +15 -16
  111. package/styles/runes/plan-ref.css +32 -23
  112. package/styles/runes/playlist.css +106 -107
  113. package/styles/runes/plot.css +92 -91
  114. package/styles/runes/preview.css +152 -149
  115. package/styles/runes/pricing.css +133 -123
  116. package/styles/runes/progress.css +32 -27
  117. package/styles/runes/pullquote.css +89 -90
  118. package/styles/runes/realm.css +47 -48
  119. package/styles/runes/recipe.css +112 -114
  120. package/styles/runes/relationships.css +77 -76
  121. package/styles/runes/reveal.css +90 -79
  122. package/styles/runes/sandbox.css +59 -60
  123. package/styles/runes/section.css +57 -50
  124. package/styles/runes/showcase.css +35 -16
  125. package/styles/runes/sidenote.css +30 -27
  126. package/styles/runes/snippet.css +8 -9
  127. package/styles/runes/spacing.css +86 -88
  128. package/styles/runes/spec.css +24 -25
  129. package/styles/runes/steps.css +89 -80
  130. package/styles/runes/storyboard.css +46 -45
  131. package/styles/runes/swatch.css +22 -23
  132. package/styles/runes/symbol.css +117 -118
  133. package/styles/runes/tabs.css +88 -79
  134. package/styles/runes/testimonial.css +43 -44
  135. package/styles/runes/textblock.css +32 -28
  136. package/styles/runes/timeline.css +63 -64
  137. package/styles/runes/tint.css +214 -215
  138. package/styles/runes/toc.css +40 -41
  139. package/styles/runes/track.css +89 -90
  140. package/styles/runes/typography.css +89 -91
  141. package/styles/runes/work.css +47 -36
  142. package/styles/runes/xref.css +21 -22
@@ -1,5 +1,5 @@
1
1
  @layer skin {
2
- /* Tint Rune — Colour Token Bridge
2
+ /* Tint Rune — Colour Token Bridge
3
3
  *
4
4
  * Maps --tint-* custom properties (set by the identity transform) to
5
5
  * Lumina's internal --rf-color-* tokens.
@@ -9,186 +9,186 @@
9
9
  * its inherited value instead of becoming guaranteed-invalid (which would
10
10
  * happen with a self-referencing var() fallback — a CSS cycle). */
11
11
 
12
- /* ── 0. Token registration ────────────────────────────────────────────────
12
+ /* ── 0. Token registration ────────────────────────────────────────────────
13
13
  * @property makes guaranteed-invalid fall back to the inherited value
14
14
  * (inherits: true) rather than propagating as invalid through children.
15
15
  * initial-value must match the light-mode defaults in tokens/base.css. */
16
16
 
17
- @property --rf-color-bg {
18
- syntax: '<color>';
19
- inherits: true;
20
- initial-value: #f5f4f1;
21
- }
22
- @property --rf-color-surface {
23
- syntax: '<color>';
24
- inherits: true;
25
- initial-value: #fbfaf7;
26
- }
27
- @property --rf-color-text {
28
- syntax: '<color>';
29
- inherits: true;
30
- initial-value: #1c1a17;
31
- }
32
- @property --rf-color-muted {
33
- syntax: '<color>';
34
- inherits: true;
35
- initial-value: #6b6661;
36
- }
37
- @property --rf-color-primary {
38
- syntax: '<color>';
39
- inherits: true;
40
- initial-value: #1c1a17;
41
- }
42
- @property --rf-color-border {
43
- syntax: '<color>';
44
- inherits: true;
45
- initial-value: #e2e0dd;
46
- }
47
-
48
- /* ── 1. Colour scheme override ──────────────────────────────────────────────
17
+ @property --rf-color-bg {
18
+ syntax: "<color>";
19
+ inherits: true;
20
+ initial-value: #f5f4f1;
21
+ }
22
+ @property --rf-color-surface {
23
+ syntax: "<color>";
24
+ inherits: true;
25
+ initial-value: #fbfaf7;
26
+ }
27
+ @property --rf-color-text {
28
+ syntax: "<color>";
29
+ inherits: true;
30
+ initial-value: #1c1a17;
31
+ }
32
+ @property --rf-color-muted {
33
+ syntax: "<color>";
34
+ inherits: true;
35
+ initial-value: #6b6661;
36
+ }
37
+ @property --rf-color-primary {
38
+ syntax: "<color>";
39
+ inherits: true;
40
+ initial-value: #1c1a17;
41
+ }
42
+ @property --rf-color-border {
43
+ syntax: "<color>";
44
+ inherits: true;
45
+ initial-value: #e2e0dd;
46
+ }
47
+
48
+ /* ── 1. Colour scheme override ──────────────────────────────────────────────
49
49
  * Forces dark or light mode tokens on a subtree. The six tint-bridgeable
50
50
  * tokens are also exposed as --cs-* intermediaries so compound selectors
51
51
  * in step 4 can fall back to them without a cycle. */
52
52
 
53
- /* Keep in sync with tokens/dark.css */
54
- [data-color-scheme="dark"] {
55
- color-scheme: dark;
56
- color: var(--rf-color-text);
57
- background-color: var(--rf-color-bg);
58
-
59
- --cs-bg: #1a1a17;
60
- --cs-surface: #1f1f1c;
61
- --cs-text: #f6f4ef;
62
- --cs-muted: #94908a;
63
- --cs-accent: #f6f4ef;
64
- --cs-border: #282825;
65
-
66
- --rf-color-bg: var(--cs-bg);
67
- --rf-color-surface: var(--cs-surface);
68
- --rf-color-text: var(--cs-text);
69
- --rf-color-muted: var(--cs-muted);
70
- --rf-color-primary: var(--cs-accent);
71
- --rf-color-border: var(--cs-border);
72
-
73
- --rf-color-primary-hover: #d4cfc5;
74
- --rf-color-surface-hover: #282825;
75
- --rf-color-surface-active: #333330;
76
- --rf-color-surface-raised: #272723;
77
-
78
- --rf-color-info: #9bb4c7;
79
- --rf-color-info-bg: #1f2530;
80
- --rf-color-info-border: #3d4655;
81
- --rf-color-warning: #d4a868;
82
- --rf-color-warning-bg: #2a2519;
83
- --rf-color-warning-border: #4a3f2a;
84
- --rf-color-danger: #d48888;
85
- --rf-color-danger-bg: #2a1818;
86
- --rf-color-danger-border: #4a2a2a;
87
- --rf-color-success: #7eb398;
88
- --rf-color-success-bg: #1a2a1f;
89
- --rf-color-success-border: #2a4a35;
90
-
91
- --rf-color-code-bg: #1c1c19;
92
- --rf-color-code-text: #f6f4ef;
93
- --rf-color-code-inline-bg: #2b2b29;
94
- --rf-color-inline-code-bg: #2b2b29;
95
-
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
-
104
- --rf-syntax-foreground: #f6f4ef;
105
- --rf-syntax-background: #1c1c19;
106
- --rf-syntax-token-keyword: #7eb6bc;
107
- --rf-syntax-token-string: #c79a9a;
108
- --rf-syntax-token-string-expression: #c79a9a;
109
- --rf-syntax-token-constant: #d4b07e;
110
- --rf-syntax-token-comment: #6b6661;
111
- --rf-syntax-token-function: #a89bc7;
112
- --rf-syntax-token-parameter: #f6f4ef;
113
- --rf-syntax-token-punctuation: #94908a;
114
- --rf-syntax-token-link: #a89bc7;
115
-
116
- --rf-shadow-xs: 0 1px 2px rgba(0,0,0,0.3);
117
- --rf-shadow-sm: 0 1px 3px rgba(0,0,0,0.4), 0 1px 2px rgba(0,0,0,0.3);
118
- --rf-shadow-md: 0 4px 12px rgba(0,0,0,0.4), 0 1px 3px rgba(0,0,0,0.3);
119
- --rf-shadow-lg: 0 8px 24px rgba(0,0,0,0.5), 0 2px 6px rgba(0,0,0,0.3);
120
- }
121
-
122
- /* Keep in sync with tokens/base.css */
123
- [data-color-scheme="light"] {
124
- color-scheme: light;
125
- color: var(--rf-color-text);
126
- background-color: var(--rf-color-bg);
127
-
128
- --cs-bg: #f5f4f1;
129
- --cs-surface: #fbfaf7;
130
- --cs-text: #1c1a17;
131
- --cs-muted: #6b6661;
132
- --cs-accent: #1c1a17;
133
- --cs-border: #e2e0dd;
134
-
135
- --rf-color-bg: var(--cs-bg);
136
- --rf-color-surface: var(--cs-surface);
137
- --rf-color-text: var(--cs-text);
138
- --rf-color-muted: var(--cs-muted);
139
- --rf-color-primary: var(--cs-accent);
140
- --rf-color-border: var(--cs-border);
141
-
142
- --rf-color-primary-hover: #3a342d;
143
- --rf-color-surface-hover: #ecebe8;
144
- --rf-color-surface-active: #e2e0dd;
145
- --rf-color-surface-raised: #ffffff;
146
-
147
- --rf-color-info: #34547a;
148
- --rf-color-info-bg: #e8edf4;
149
- --rf-color-info-border: #c5d2e0;
150
- --rf-color-warning: #9c5a18;
151
- --rf-color-warning-bg: #f5ebd9;
152
- --rf-color-warning-border: #e0c9a3;
153
- --rf-color-danger: #a83232;
154
- --rf-color-danger-bg: #f5e0e0;
155
- --rf-color-danger-border: #e0b8b8;
156
- --rf-color-success: #2d6a3e;
157
- --rf-color-success-bg: #e0eee4;
158
- --rf-color-success-border: #b8d4be;
159
-
160
- --rf-color-code-bg: #ebeae8;
161
- --rf-color-code-text: #1c1a17;
162
- --rf-color-code-inline-bg: #e6e5e3;
163
- --rf-color-inline-code-bg: #e6e5e3;
164
-
165
- --rf-syntax-keyword: #2a5c63;
166
- --rf-syntax-function: #4a3b6e;
167
- --rf-syntax-string: #8a3a3a;
168
- --rf-syntax-constant: #876327;
169
- --rf-syntax-comment: #8a857d;
170
- --rf-syntax-punctuation: #6b6661;
171
- --rf-syntax-variable: #1c1a17;
172
-
173
- --rf-syntax-foreground: #1c1a17;
174
- --rf-syntax-background: #ebeae8;
175
- --rf-syntax-token-keyword: #2a5c63;
176
- --rf-syntax-token-string: #8a3a3a;
177
- --rf-syntax-token-string-expression: #8a3a3a;
178
- --rf-syntax-token-constant: #876327;
179
- --rf-syntax-token-comment: #8a857d;
180
- --rf-syntax-token-function: #4a3b6e;
181
- --rf-syntax-token-parameter: #1c1a17;
182
- --rf-syntax-token-punctuation: #6b6661;
183
- --rf-syntax-token-link: #4a3b6e;
184
-
185
- --rf-shadow-xs: 0 1px 2px rgba(0,0,0,0.04);
186
- --rf-shadow-sm: 0 1px 3px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04);
187
- --rf-shadow-md: 0 4px 12px rgba(0,0,0,0.07), 0 1px 3px rgba(0,0,0,0.04);
188
- --rf-shadow-lg: 0 8px 24px rgba(0,0,0,0.08), 0 2px 6px rgba(0,0,0,0.04);
189
- }
190
-
191
- /* ── 2. Tint bridge — light mode (default) ────────────────────────────────
53
+ /* Keep in sync with tokens/dark.css */
54
+ [data-color-scheme="dark"] {
55
+ color-scheme: dark;
56
+ color: var(--rf-color-text);
57
+ background-color: var(--rf-color-bg);
58
+
59
+ --cs-bg: #1a1a17;
60
+ --cs-surface: #1f1f1c;
61
+ --cs-text: #f6f4ef;
62
+ --cs-muted: #94908a;
63
+ --cs-accent: #f6f4ef;
64
+ --cs-border: #282825;
65
+
66
+ --rf-color-bg: var(--cs-bg);
67
+ --rf-color-surface: var(--cs-surface);
68
+ --rf-color-text: var(--cs-text);
69
+ --rf-color-muted: var(--cs-muted);
70
+ --rf-color-primary: var(--cs-accent);
71
+ --rf-color-border: var(--cs-border);
72
+
73
+ --rf-color-primary-hover: #d4cfc5;
74
+ --rf-color-surface-hover: #282825;
75
+ --rf-color-surface-active: #333330;
76
+ --rf-color-surface-raised: #272723;
77
+
78
+ --rf-color-info: #9bb4c7;
79
+ --rf-color-info-bg: #1f2530;
80
+ --rf-color-info-border: #3d4655;
81
+ --rf-color-warning: #d4a868;
82
+ --rf-color-warning-bg: #2a2519;
83
+ --rf-color-warning-border: #4a3f2a;
84
+ --rf-color-danger: #d48888;
85
+ --rf-color-danger-bg: #2a1818;
86
+ --rf-color-danger-border: #4a2a2a;
87
+ --rf-color-success: #7eb398;
88
+ --rf-color-success-bg: #1a2a1f;
89
+ --rf-color-success-border: #2a4a35;
90
+
91
+ --rf-color-code-bg: #1c1c19;
92
+ --rf-color-code-text: #f6f4ef;
93
+ --rf-color-code-inline-bg: #2b2b29;
94
+ --rf-color-inline-code-bg: #2b2b29;
95
+
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
+
104
+ --rf-syntax-foreground: #f6f4ef;
105
+ --rf-syntax-background: #1c1c19;
106
+ --rf-syntax-token-keyword: #7eb6bc;
107
+ --rf-syntax-token-string: #c79a9a;
108
+ --rf-syntax-token-string-expression: #c79a9a;
109
+ --rf-syntax-token-constant: #d4b07e;
110
+ --rf-syntax-token-comment: #6b6661;
111
+ --rf-syntax-token-function: #a89bc7;
112
+ --rf-syntax-token-parameter: #f6f4ef;
113
+ --rf-syntax-token-punctuation: #94908a;
114
+ --rf-syntax-token-link: #a89bc7;
115
+
116
+ --rf-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.3);
117
+ --rf-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.4), 0 1px 2px rgba(0, 0, 0, 0.3);
118
+ --rf-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4), 0 1px 3px rgba(0, 0, 0, 0.3);
119
+ --rf-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5), 0 2px 6px rgba(0, 0, 0, 0.3);
120
+ }
121
+
122
+ /* Keep in sync with tokens/base.css */
123
+ [data-color-scheme="light"] {
124
+ color-scheme: light;
125
+ color: var(--rf-color-text);
126
+ background-color: var(--rf-color-bg);
127
+
128
+ --cs-bg: #f5f4f1;
129
+ --cs-surface: #fbfaf7;
130
+ --cs-text: #1c1a17;
131
+ --cs-muted: #6b6661;
132
+ --cs-accent: #1c1a17;
133
+ --cs-border: #e2e0dd;
134
+
135
+ --rf-color-bg: var(--cs-bg);
136
+ --rf-color-surface: var(--cs-surface);
137
+ --rf-color-text: var(--cs-text);
138
+ --rf-color-muted: var(--cs-muted);
139
+ --rf-color-primary: var(--cs-accent);
140
+ --rf-color-border: var(--cs-border);
141
+
142
+ --rf-color-primary-hover: #3a342d;
143
+ --rf-color-surface-hover: #ecebe8;
144
+ --rf-color-surface-active: #e2e0dd;
145
+ --rf-color-surface-raised: #ffffff;
146
+
147
+ --rf-color-info: #34547a;
148
+ --rf-color-info-bg: #e8edf4;
149
+ --rf-color-info-border: #c5d2e0;
150
+ --rf-color-warning: #9c5a18;
151
+ --rf-color-warning-bg: #f5ebd9;
152
+ --rf-color-warning-border: #e0c9a3;
153
+ --rf-color-danger: #a83232;
154
+ --rf-color-danger-bg: #f5e0e0;
155
+ --rf-color-danger-border: #e0b8b8;
156
+ --rf-color-success: #2d6a3e;
157
+ --rf-color-success-bg: #e0eee4;
158
+ --rf-color-success-border: #b8d4be;
159
+
160
+ --rf-color-code-bg: #ebeae8;
161
+ --rf-color-code-text: #1c1a17;
162
+ --rf-color-code-inline-bg: #e6e5e3;
163
+ --rf-color-inline-code-bg: #e6e5e3;
164
+
165
+ --rf-syntax-keyword: #2a5c63;
166
+ --rf-syntax-function: #4a3b6e;
167
+ --rf-syntax-string: #8a3a3a;
168
+ --rf-syntax-constant: #876327;
169
+ --rf-syntax-comment: #8a857d;
170
+ --rf-syntax-punctuation: #6b6661;
171
+ --rf-syntax-variable: #1c1a17;
172
+
173
+ --rf-syntax-foreground: #1c1a17;
174
+ --rf-syntax-background: #ebeae8;
175
+ --rf-syntax-token-keyword: #2a5c63;
176
+ --rf-syntax-token-string: #8a3a3a;
177
+ --rf-syntax-token-string-expression: #8a3a3a;
178
+ --rf-syntax-token-constant: #876327;
179
+ --rf-syntax-token-comment: #8a857d;
180
+ --rf-syntax-token-function: #4a3b6e;
181
+ --rf-syntax-token-parameter: #1c1a17;
182
+ --rf-syntax-token-punctuation: #6b6661;
183
+ --rf-syntax-token-link: #4a3b6e;
184
+
185
+ --rf-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.04);
186
+ --rf-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04);
187
+ --rf-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.07), 0 1px 3px rgba(0, 0, 0, 0.04);
188
+ --rf-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.08), 0 2px 6px rgba(0, 0, 0, 0.04);
189
+ }
190
+
191
+ /* ── 2. Tint bridge — light mode (default) ────────────────────────────────
192
192
  * Maps --tint-* → --rf-color-*. No fallback needed — when --tint-* is
193
193
  * unset, var() produces guaranteed-invalid, and @property makes the
194
194
  * token inherit from the parent element.
@@ -196,57 +196,56 @@
196
196
  * :where() background gives tinted elements a painted background at zero
197
197
  * specificity — runes with their own background naturally override it. */
198
198
 
199
- :where([data-tint]) {
200
- background-color: var(--rf-color-bg);
201
- }
202
-
203
- [data-tint] {
204
- color: var(--rf-color-text);
205
- --rf-color-bg: var(--tint-bg);
206
- --rf-color-surface: var(--tint-surface);
207
- --rf-color-text: var(--tint-text);
208
- --rf-color-muted: var(--tint-muted);
209
- --rf-color-primary: var(--tint-primary);
210
- --rf-color-border: var(--tint-border);
211
- }
212
-
213
- /* ── 3. Tint bridge — dark ancestor ───────────────────────────────────────
199
+ :where([data-tint]) {
200
+ background-color: var(--rf-color-bg);
201
+ }
202
+
203
+ [data-tint] {
204
+ color: var(--rf-color-text);
205
+ --rf-color-bg: var(--tint-bg);
206
+ --rf-color-surface: var(--tint-surface);
207
+ --rf-color-text: var(--tint-text);
208
+ --rf-color-muted: var(--tint-muted);
209
+ --rf-color-primary: var(--tint-primary);
210
+ --rf-color-border: var(--tint-border);
211
+ }
212
+
213
+ /* ── 3. Tint bridge — dark ancestor ───────────────────────────────────────
214
214
  * When a dark context is on an ancestor (data-theme on html, or
215
215
  * data-color-scheme on a parent), prefer dark tint values.
216
216
  * Uses descendant combinator — does NOT match same-element.
217
217
  * Unset tokens → guaranteed-invalid → @property inherits from parent
218
218
  * (which carries the dark theme value). */
219
219
 
220
- :is([data-theme="dark"], [data-color-scheme="dark"]) [data-tint] {
221
- --rf-color-bg: var(--tint-dark-bg, var(--tint-bg));
222
- --rf-color-surface: var(--tint-dark-surface, var(--tint-surface));
223
- --rf-color-text: var(--tint-dark-text, var(--tint-text));
224
- --rf-color-muted: var(--tint-dark-muted, var(--tint-muted));
225
- --rf-color-primary: var(--tint-dark-primary, var(--tint-primary));
226
- --rf-color-border: var(--tint-dark-border, var(--tint-border));
227
- }
220
+ :is([data-theme="dark"], [data-color-scheme="dark"]) [data-tint] {
221
+ --rf-color-bg: var(--tint-dark-bg, var(--tint-bg));
222
+ --rf-color-surface: var(--tint-dark-surface, var(--tint-surface));
223
+ --rf-color-text: var(--tint-dark-text, var(--tint-text));
224
+ --rf-color-muted: var(--tint-dark-muted, var(--tint-muted));
225
+ --rf-color-primary: var(--tint-dark-primary, var(--tint-primary));
226
+ --rf-color-border: var(--tint-dark-border, var(--tint-border));
227
+ }
228
228
 
229
- /* ── 4. Tint bridge — colour scheme + tint on SAME element ────────────────
229
+ /* ── 4. Tint bridge — colour scheme + tint on SAME element ────────────────
230
230
  * Compound selectors (no space) match when both attributes sit on the
231
231
  * same element. Falls back to --cs-* intermediaries so that unlisted
232
232
  * tint tokens use the colour-scheme value, not the page-level value. */
233
233
 
234
- [data-color-scheme="dark"][data-tint] {
235
- --rf-color-bg: var(--tint-dark-bg, var(--tint-bg, var(--cs-bg)));
236
- --rf-color-surface: var(--tint-dark-surface, var(--tint-surface, var(--cs-surface)));
237
- --rf-color-text: var(--tint-dark-text, var(--tint-text, var(--cs-text)));
238
- --rf-color-muted: var(--tint-dark-muted, var(--tint-muted, var(--cs-muted)));
239
- --rf-color-primary: var(--tint-dark-primary, var(--tint-primary, var(--cs-accent)));
240
- --rf-color-border: var(--tint-dark-border, var(--tint-border, var(--cs-border)));
241
- }
242
-
243
- [data-color-scheme="light"][data-tint] {
244
- --rf-color-bg: var(--tint-bg, var(--cs-bg));
245
- --rf-color-surface: var(--tint-surface, var(--cs-surface));
246
- --rf-color-text: var(--tint-text, var(--cs-text));
247
- --rf-color-muted: var(--tint-muted, var(--cs-muted));
248
- --rf-color-primary: var(--tint-primary, var(--cs-accent));
249
- --rf-color-border: var(--tint-border, var(--cs-border));
250
- }
251
-
234
+ [data-color-scheme="dark"][data-tint] {
235
+ --rf-color-bg: var(--tint-dark-bg, var(--tint-bg, var(--cs-bg)));
236
+ --rf-color-surface: var(--tint-dark-surface, var(--tint-surface, var(--cs-surface)));
237
+ --rf-color-text: var(--tint-dark-text, var(--tint-text, var(--cs-text)));
238
+ --rf-color-muted: var(--tint-dark-muted, var(--tint-muted, var(--cs-muted)));
239
+ --rf-color-primary: var(--tint-dark-primary, var(--tint-primary, var(--cs-accent)));
240
+ --rf-color-border: var(--tint-dark-border, var(--tint-border, var(--cs-border)));
241
+ }
242
+
243
+ [data-color-scheme="light"][data-tint] {
244
+ --rf-color-bg: var(--tint-bg, var(--cs-bg));
245
+ --rf-color-surface: var(--tint-surface, var(--cs-surface));
246
+ --rf-color-text: var(--tint-text, var(--cs-text));
247
+ --rf-color-muted: var(--tint-muted, var(--cs-muted));
248
+ --rf-color-primary: var(--tint-primary, var(--cs-accent));
249
+ --rf-color-border: var(--tint-border, var(--cs-border));
250
+ }
252
251
  }
@@ -1,44 +1,43 @@
1
1
  @layer skin {
2
- /* Table of Contents — skin. The list reset + the inline-block link live in
2
+ /* Table of Contents — skin. The list reset + the inline-block link live in
3
3
  * @refrakt-md/skeleton (styles/runes/toc.css). */
4
- .rf-toc {
5
- padding: 1.25rem 1.5rem;
6
- border-left: 3px solid var(--rf-color-primary);
7
- background: var(--rf-color-surface);
8
- border-radius: 0 var(--rf-radius-md) var(--rf-radius-md) 0;
9
- }
10
- .rf-toc__list {
11
- font-weight: var(--rf-weight-semibold);
12
- margin-bottom: 0.75rem;
13
- font-size: var(--rf-text-xs);
14
- text-transform: uppercase;
15
- letter-spacing: var(--rf-tracking-wider);
16
- color: var(--rf-color-muted);
17
- }
18
- .rf-toc ul,
19
- .rf-toc ol {
20
- padding-left: 0;
21
- margin: 0;
22
- }
23
- .rf-toc li {
24
- margin: 0.125rem 0;
25
- }
26
- .rf-toc li[data-level="3"] {
27
- padding-left: 1rem;
28
- }
29
- .rf-toc li[data-level="4"] {
30
- padding-left: 2rem;
31
- }
32
- .rf-toc a {
33
- color: var(--rf-color-text);
34
- text-decoration: none;
35
- font-size: var(--rf-text-sm);
36
- padding: 0.2rem 0;
37
- transition: color 150ms ease;
38
- }
39
- .rf-toc a:hover {
40
- color: var(--rf-color-primary);
41
- text-decoration: none;
42
- }
43
-
4
+ .rf-toc {
5
+ padding: 1.25rem 1.5rem;
6
+ border-left: 3px solid var(--rf-color-primary);
7
+ background: var(--rf-color-surface);
8
+ border-radius: 0 var(--rf-radius-md) var(--rf-radius-md) 0;
9
+ }
10
+ .rf-toc__list {
11
+ font-weight: var(--rf-weight-semibold);
12
+ margin-bottom: 0.75rem;
13
+ font-size: var(--rf-text-xs);
14
+ text-transform: uppercase;
15
+ letter-spacing: var(--rf-tracking-wider);
16
+ color: var(--rf-color-muted);
17
+ }
18
+ .rf-toc ul,
19
+ .rf-toc ol {
20
+ padding-left: 0;
21
+ margin: 0;
22
+ }
23
+ .rf-toc li {
24
+ margin: 0.125rem 0;
25
+ }
26
+ .rf-toc li[data-level="3"] {
27
+ padding-left: 1rem;
28
+ }
29
+ .rf-toc li[data-level="4"] {
30
+ padding-left: 2rem;
31
+ }
32
+ .rf-toc a {
33
+ color: var(--rf-color-text);
34
+ text-decoration: none;
35
+ font-size: var(--rf-text-sm);
36
+ padding: 0.2rem 0;
37
+ transition: color 150ms ease;
38
+ }
39
+ .rf-toc a:hover {
40
+ color: var(--rf-color-primary);
41
+ text-decoration: none;
42
+ }
44
43
  }