@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,114 +1,202 @@
1
1
  @layer skin {
2
- /* Chart — skin. The chart block, responsive SVG/container, legend flex, swatch box,
2
+ /* Chart — skin. The chart block, responsive SVG/container, legend flex, swatch box,
3
3
  * and the sr-only rendered data table live in @refrakt-md/skeleton
4
4
  * (styles/runes/chart.css). What remains is the --rf-chart-* theming contract, SVG
5
5
  * paint, palette rotation, data-table chrome, and type. */
6
- .rf-chart {
7
- --rf-chart-series-1: #6366f1;
8
- --rf-chart-series-2: #06b6d4;
9
- --rf-chart-series-3: #22c55e;
10
- --rf-chart-series-4: #f59e0b;
11
- --rf-chart-series-5: #a855f7;
12
- --rf-chart-series-6: #ec4899;
13
- --rf-chart-bar-ratio: 0.75;
14
- --rf-chart-bar-thickness: 12px;
15
- --rf-chart-bar-gap: 0.15;
16
- --rf-chart-bar-cluster-gap: 4px;
17
- --rf-chart-bar-radius: var(--rf-radius-sm);
18
- --rf-chart-area-opacity: 0.3;
19
- --rf-chart-point-radius: 4px;
20
- --rf-chart-line-width: 2px;
21
- --rf-chart-label-size: 12px;
22
- --rf-chart-label-color: var(--rf-color-muted);
23
- --rf-chart-grid-color: var(--rf-color-border);
24
- --rf-chart-grid-dash-color: var(--rf-color-muted);
25
- --rf-chart-grid-width: 1px;
26
- --rf-chart-grid-dash: 3 3;
27
- border-radius: var(--rf-radius-lg);
28
- padding: 1.5rem;
29
- margin: 0;
30
- }
31
- .rf-chart__axis { stroke: var(--rf-chart-grid-color); stroke-width: var(--rf-chart-grid-width); }
32
- /* Dotted horizontal grid lines behind the data — text-tier muted colour so the
6
+ .rf-chart {
7
+ --rf-chart-series-1: #6366f1;
8
+ --rf-chart-series-2: #06b6d4;
9
+ --rf-chart-series-3: #22c55e;
10
+ --rf-chart-series-4: #f59e0b;
11
+ --rf-chart-series-5: #a855f7;
12
+ --rf-chart-series-6: #ec4899;
13
+ --rf-chart-bar-ratio: 0.75;
14
+ --rf-chart-bar-thickness: 12px;
15
+ --rf-chart-bar-gap: 0.15;
16
+ --rf-chart-bar-cluster-gap: 4px;
17
+ --rf-chart-bar-radius: var(--rf-radius-sm);
18
+ --rf-chart-area-opacity: 0.3;
19
+ --rf-chart-point-radius: 4px;
20
+ --rf-chart-line-width: 2px;
21
+ --rf-chart-label-size: 12px;
22
+ --rf-chart-label-color: var(--rf-color-muted);
23
+ --rf-chart-grid-color: var(--rf-color-border);
24
+ --rf-chart-grid-dash-color: var(--rf-color-muted);
25
+ --rf-chart-grid-width: 1px;
26
+ --rf-chart-grid-dash: 3 3;
27
+ border-radius: var(--rf-radius-lg);
28
+ padding: 1.5rem;
29
+ margin: 0;
30
+ }
31
+ .rf-chart__axis {
32
+ stroke: var(--rf-chart-grid-color);
33
+ stroke-width: var(--rf-chart-grid-width);
34
+ }
35
+ /* Dotted horizontal grid lines behind the data — text-tier muted colour so the
33
36
  * scale is legible at a glance. Opacity still keeps them quieter than the data,
34
37
  * which stays the figure-ground emphasis. */
35
- .rf-chart__grid {
36
- stroke: var(--rf-chart-grid-dash-color);
37
- stroke-width: var(--rf-chart-grid-width);
38
- stroke-dasharray: var(--rf-chart-grid-dash);
39
- opacity: 0.2;
40
- }
41
- .rf-chart__label { fill: var(--rf-chart-label-color); font-size: var(--rf-chart-label-size); }
42
- .rf-chart__tick-label { fill: var(--rf-chart-label-color); font-size: var(--rf-chart-label-size); }
43
- .rf-chart__bar { rx: var(--rf-chart-bar-radius); fill: var(--rf-chart-series-1); }
44
- .rf-chart__point { fill: var(--rf-chart-series-1); }
45
- .rf-chart__line { fill: none; stroke: var(--rf-chart-series-1); stroke-width: var(--rf-chart-line-width); }
46
- /* Area-under-line gradient stops. The `--rf-chart-area-opacity` knob drives the
38
+ .rf-chart__grid {
39
+ stroke: var(--rf-chart-grid-dash-color);
40
+ stroke-width: var(--rf-chart-grid-width);
41
+ stroke-dasharray: var(--rf-chart-grid-dash);
42
+ opacity: 0.2;
43
+ }
44
+ .rf-chart__label {
45
+ fill: var(--rf-chart-label-color);
46
+ font-size: var(--rf-chart-label-size);
47
+ }
48
+ .rf-chart__tick-label {
49
+ fill: var(--rf-chart-label-color);
50
+ font-size: var(--rf-chart-label-size);
51
+ }
52
+ .rf-chart__bar {
53
+ rx: var(--rf-chart-bar-radius);
54
+ fill: var(--rf-chart-series-1);
55
+ }
56
+ .rf-chart__point {
57
+ fill: var(--rf-chart-series-1);
58
+ }
59
+ .rf-chart__line {
60
+ fill: none;
61
+ stroke: var(--rf-chart-series-1);
62
+ stroke-width: var(--rf-chart-line-width);
63
+ }
64
+ /* Area-under-line gradient stops. The `--rf-chart-area-opacity` knob drives the
47
65
  * top alpha; the bottom is always 0 so the gradient fades into the chart floor. */
48
- .rf-chart__area-stop { stop-color: var(--rf-chart-series-1); }
49
- .rf-chart__area-stop[data-series="1"] { stop-color: var(--rf-chart-series-2); }
50
- .rf-chart__area-stop[data-series="2"] { stop-color: var(--rf-chart-series-3); }
51
- .rf-chart__area-stop[data-series="3"] { stop-color: var(--rf-chart-series-4); }
52
- .rf-chart__area-stop[data-series="4"] { stop-color: var(--rf-chart-series-5); }
53
- .rf-chart__area-stop[data-series="5"] { stop-color: var(--rf-chart-series-6); }
54
- .rf-chart__area-stop[data-position="top"] { stop-opacity: var(--rf-chart-area-opacity); }
55
- .rf-chart__area-stop[data-position="bottom"] { stop-opacity: 0; }
56
- .rf-chart__bar[data-series="1"], .rf-chart__point[data-series="1"] { fill: var(--rf-chart-series-2); }
57
- .rf-chart__bar[data-series="2"], .rf-chart__point[data-series="2"] { fill: var(--rf-chart-series-3); }
58
- .rf-chart__bar[data-series="3"], .rf-chart__point[data-series="3"] { fill: var(--rf-chart-series-4); }
59
- .rf-chart__bar[data-series="4"], .rf-chart__point[data-series="4"] { fill: var(--rf-chart-series-5); }
60
- .rf-chart__bar[data-series="5"], .rf-chart__point[data-series="5"] { fill: var(--rf-chart-series-6); }
61
- .rf-chart__line[data-series="1"] { stroke: var(--rf-chart-series-2); }
62
- .rf-chart__line[data-series="2"] { stroke: var(--rf-chart-series-3); }
63
- .rf-chart__line[data-series="3"] { stroke: var(--rf-chart-series-4); }
64
- .rf-chart__line[data-series="4"] { stroke: var(--rf-chart-series-5); }
65
- .rf-chart__line[data-series="5"] { stroke: var(--rf-chart-series-6); }
66
- .rf-chart__bar[data-meta-sentiment="positive"], .rf-chart__point[data-meta-sentiment="positive"] { fill: var(--rf-color-success); }
67
- .rf-chart__bar[data-meta-sentiment="negative"], .rf-chart__point[data-meta-sentiment="negative"] { fill: var(--rf-color-danger); }
68
- .rf-chart__bar[data-meta-sentiment="caution"], .rf-chart__point[data-meta-sentiment="caution"] { fill: var(--rf-color-warning); }
69
- .rf-chart__bar[data-meta-sentiment="neutral"], .rf-chart__point[data-meta-sentiment="neutral"] { fill: var(--rf-color-muted); }
70
- .rf-chart__line[data-meta-sentiment="positive"] { stroke: var(--rf-color-success); }
71
- .rf-chart__line[data-meta-sentiment="negative"] { stroke: var(--rf-color-danger); }
72
- .rf-chart__line[data-meta-sentiment="caution"] { stroke: var(--rf-color-warning); }
73
- .rf-chart__line[data-meta-sentiment="neutral"] { stroke: var(--rf-color-muted); }
74
- .rf-chart__data {
75
- width: 100%;
76
- border-collapse: collapse;
77
- font-size: var(--rf-text-sm);
78
- }
79
- .rf-chart__data caption {
80
- font-weight: var(--rf-weight-semibold);
81
- margin-bottom: 0.75rem;
82
- }
83
- .rf-chart__data th,
84
- .rf-chart__data td {
85
- border: 1px solid var(--rf-color-border);
86
- padding: 0.375rem 0.625rem;
87
- text-align: left;
88
- }
89
- .rf-chart__title {
90
- font-weight: var(--rf-weight-semibold);
91
- font-size: var(--rf-text);
92
- margin-bottom: 1rem;
93
- text-align: center;
94
- }
95
- .rf-chart__legend {
96
- gap: 1rem;
97
- margin-top: 1rem;
98
- }
99
- .rf-chart__legend-item {
100
- gap: 0.375rem;
101
- font-size: var(--rf-text-sm);
102
- color: var(--rf-color-muted);
103
- }
104
- .rf-chart__legend-color {
105
- border-radius: 2px;
106
- background: var(--rf-chart-series-1);
107
- }
108
- .rf-chart__legend-color[data-series="1"] { background: var(--rf-chart-series-2); }
109
- .rf-chart__legend-color[data-series="2"] { background: var(--rf-chart-series-3); }
110
- .rf-chart__legend-color[data-series="3"] { background: var(--rf-chart-series-4); }
111
- .rf-chart__legend-color[data-series="4"] { background: var(--rf-chart-series-5); }
112
- .rf-chart__legend-color[data-series="5"] { background: var(--rf-chart-series-6); }
113
-
66
+ .rf-chart__area-stop {
67
+ stop-color: var(--rf-chart-series-1);
68
+ }
69
+ .rf-chart__area-stop[data-series="1"] {
70
+ stop-color: var(--rf-chart-series-2);
71
+ }
72
+ .rf-chart__area-stop[data-series="2"] {
73
+ stop-color: var(--rf-chart-series-3);
74
+ }
75
+ .rf-chart__area-stop[data-series="3"] {
76
+ stop-color: var(--rf-chart-series-4);
77
+ }
78
+ .rf-chart__area-stop[data-series="4"] {
79
+ stop-color: var(--rf-chart-series-5);
80
+ }
81
+ .rf-chart__area-stop[data-series="5"] {
82
+ stop-color: var(--rf-chart-series-6);
83
+ }
84
+ .rf-chart__area-stop[data-position="top"] {
85
+ stop-opacity: var(--rf-chart-area-opacity);
86
+ }
87
+ .rf-chart__area-stop[data-position="bottom"] {
88
+ stop-opacity: 0;
89
+ }
90
+ .rf-chart__bar[data-series="1"],
91
+ .rf-chart__point[data-series="1"] {
92
+ fill: var(--rf-chart-series-2);
93
+ }
94
+ .rf-chart__bar[data-series="2"],
95
+ .rf-chart__point[data-series="2"] {
96
+ fill: var(--rf-chart-series-3);
97
+ }
98
+ .rf-chart__bar[data-series="3"],
99
+ .rf-chart__point[data-series="3"] {
100
+ fill: var(--rf-chart-series-4);
101
+ }
102
+ .rf-chart__bar[data-series="4"],
103
+ .rf-chart__point[data-series="4"] {
104
+ fill: var(--rf-chart-series-5);
105
+ }
106
+ .rf-chart__bar[data-series="5"],
107
+ .rf-chart__point[data-series="5"] {
108
+ fill: var(--rf-chart-series-6);
109
+ }
110
+ .rf-chart__line[data-series="1"] {
111
+ stroke: var(--rf-chart-series-2);
112
+ }
113
+ .rf-chart__line[data-series="2"] {
114
+ stroke: var(--rf-chart-series-3);
115
+ }
116
+ .rf-chart__line[data-series="3"] {
117
+ stroke: var(--rf-chart-series-4);
118
+ }
119
+ .rf-chart__line[data-series="4"] {
120
+ stroke: var(--rf-chart-series-5);
121
+ }
122
+ .rf-chart__line[data-series="5"] {
123
+ stroke: var(--rf-chart-series-6);
124
+ }
125
+ .rf-chart__bar[data-meta-sentiment="positive"],
126
+ .rf-chart__point[data-meta-sentiment="positive"] {
127
+ fill: var(--rf-color-success);
128
+ }
129
+ .rf-chart__bar[data-meta-sentiment="negative"],
130
+ .rf-chart__point[data-meta-sentiment="negative"] {
131
+ fill: var(--rf-color-danger);
132
+ }
133
+ .rf-chart__bar[data-meta-sentiment="caution"],
134
+ .rf-chart__point[data-meta-sentiment="caution"] {
135
+ fill: var(--rf-color-warning);
136
+ }
137
+ .rf-chart__bar[data-meta-sentiment="neutral"],
138
+ .rf-chart__point[data-meta-sentiment="neutral"] {
139
+ fill: var(--rf-color-muted);
140
+ }
141
+ .rf-chart__line[data-meta-sentiment="positive"] {
142
+ stroke: var(--rf-color-success);
143
+ }
144
+ .rf-chart__line[data-meta-sentiment="negative"] {
145
+ stroke: var(--rf-color-danger);
146
+ }
147
+ .rf-chart__line[data-meta-sentiment="caution"] {
148
+ stroke: var(--rf-color-warning);
149
+ }
150
+ .rf-chart__line[data-meta-sentiment="neutral"] {
151
+ stroke: var(--rf-color-muted);
152
+ }
153
+ .rf-chart__data {
154
+ width: 100%;
155
+ border-collapse: collapse;
156
+ font-size: var(--rf-text-sm);
157
+ }
158
+ .rf-chart__data caption {
159
+ font-weight: var(--rf-weight-semibold);
160
+ margin-bottom: 0.75rem;
161
+ }
162
+ .rf-chart__data th,
163
+ .rf-chart__data td {
164
+ border: 1px solid var(--rf-color-border);
165
+ padding: 0.375rem 0.625rem;
166
+ text-align: left;
167
+ }
168
+ .rf-chart__title {
169
+ font-weight: var(--rf-weight-semibold);
170
+ font-size: var(--rf-text);
171
+ margin-bottom: 1rem;
172
+ text-align: center;
173
+ }
174
+ .rf-chart__legend {
175
+ gap: 1rem;
176
+ margin-top: 1rem;
177
+ }
178
+ .rf-chart__legend-item {
179
+ gap: 0.375rem;
180
+ font-size: var(--rf-text-sm);
181
+ color: var(--rf-color-muted);
182
+ }
183
+ .rf-chart__legend-color {
184
+ border-radius: 2px;
185
+ background: var(--rf-chart-series-1);
186
+ }
187
+ .rf-chart__legend-color[data-series="1"] {
188
+ background: var(--rf-chart-series-2);
189
+ }
190
+ .rf-chart__legend-color[data-series="2"] {
191
+ background: var(--rf-chart-series-3);
192
+ }
193
+ .rf-chart__legend-color[data-series="3"] {
194
+ background: var(--rf-chart-series-4);
195
+ }
196
+ .rf-chart__legend-color[data-series="4"] {
197
+ background: var(--rf-chart-series-5);
198
+ }
199
+ .rf-chart__legend-color[data-series="5"] {
200
+ background: var(--rf-chart-series-6);
201
+ }
114
202
  }
@@ -1,5 +1,5 @@
1
1
  @layer skin {
2
- /* Code Group — skin.
2
+ /* Code Group — skin.
3
3
  *
4
4
  * A codegroup is a *code container*: the topbar, tabs, and code body all
5
5
  * belong to the code surface, not the page chrome. So the wrapper fill and
@@ -20,110 +20,119 @@
20
20
  * tab flex live in @refrakt-md/skeleton (styles/runes/codegroup.css). The pre/code
21
21
  * rules stay here in skin: they deliberately override elements/code.css by source
22
22
  * order (the `data-overflow="wrap"` reset especially). */
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));
23
+ .rf-codegroup {
24
+ /* Code-surface-derived chrome — legible against any --rf-color-code-bg. */
25
+ --rf-codegroup-chrome: color-mix(
26
+ in srgb,
27
+ var(--rf-color-code-text) 5%,
28
+ var(--rf-color-code-bg)
29
+ );
30
+ --rf-codegroup-line: color-mix(in srgb, var(--rf-color-code-text) 14%, var(--rf-color-code-bg));
31
+ --rf-codegroup-muted: color-mix(
32
+ in srgb,
33
+ var(--rf-color-code-text) 55%,
34
+ var(--rf-color-code-bg)
35
+ );
28
36
 
29
- border: 1px solid var(--rf-color-border);
30
- background: var(--rf-color-code-bg);
31
- color: var(--rf-color-code-text);
32
- box-shadow: var(--rf-shadow-md);
33
- padding: 0;
34
- }
35
- .rf-codegroup__topbar {
36
- gap: 0.375rem;
37
- padding: 0.75rem 1rem;
38
- background: var(--rf-codegroup-chrome);
39
- border-bottom: 1px solid var(--rf-codegroup-line);
40
- margin-bottom: 0;
41
- }
42
- /* Window chrome — three traffic-light dots painted as gradients on one
37
+ border: 1px solid var(--rf-color-border);
38
+ background: var(--rf-color-code-bg);
39
+ color: var(--rf-color-code-text);
40
+ box-shadow: var(--rf-shadow-md);
41
+ padding: 0;
42
+ }
43
+ .rf-codegroup__topbar {
44
+ gap: 0.375rem;
45
+ padding: 0.75rem 1rem;
46
+ background: var(--rf-codegroup-chrome);
47
+ border-bottom: 1px solid var(--rf-codegroup-line);
48
+ margin-bottom: 0;
49
+ }
50
+ /* Window chrome — three traffic-light dots painted as gradients on one
43
51
  * pseudo-element. The element reserves real width (three 10px dots, 1rem
44
52
  * apart) so the flex row spaces the title clear of the dots. Pure decoration. */
45
- .rf-codegroup__topbar::before {
46
- content: '';
47
- flex: 0 0 auto;
48
- width: 2.625rem;
49
- height: 10px;
50
- opacity: 0.8;
51
- background-repeat: no-repeat;
52
- background-image:
53
- radial-gradient(circle at 5px 50%, #ef4444 5px, transparent 5px),
54
- radial-gradient(circle at calc(5px + 1rem) 50%, #f59e0b 5px, transparent 5px),
55
- radial-gradient(circle at calc(5px + 2rem) 50%, #22c55e 5px, transparent 5px);
56
- }
57
- /* Filename title — the topbar bar's lone `code` field. */
58
- .rf-codegroup__topbar [data-meta-type="code"] {
59
- margin-left: 0.5rem;
60
- font-size: var(--rf-text-xs);
61
- font-weight: normal;
62
- color: var(--rf-codegroup-muted);
63
- }
64
- .rf-codegroup ul {
65
- padding: 0;
66
- margin: 0;
67
- }
68
- .rf-codegroup__tabs {
69
- background: var(--rf-codegroup-chrome);
70
- border-bottom: 1px solid var(--rf-codegroup-line);
71
- }
72
- .rf-codegroup__tab {
73
- padding: 0.5rem 1rem;
74
- font-size: var(--rf-text-xs);
75
- font-family: var(--rf-font-mono);
76
- color: var(--rf-codegroup-muted);
77
- background: none;
78
- border: none;
79
- border-bottom: 2px solid transparent;
80
- cursor: pointer;
81
- transition: color 200ms ease, border-color 200ms ease;
82
- white-space: nowrap;
83
- }
84
- .rf-codegroup__tab:hover,
85
- .rf-codegroup button[data-state="inactive"]:hover {
86
- color: var(--rf-color-code-text);
87
- }
88
- .rf-codegroup__tab--active,
89
- .rf-codegroup button[data-state="active"] {
90
- color: var(--rf-color-code-text);
91
- border-bottom-color: var(--rf-color-primary);
92
- }
93
- .rf-codegroup button[data-state="inactive"] {
94
- color: var(--rf-codegroup-muted);
95
- }
96
- .rf-codegroup .rf-codeblock {
97
- margin: 0;
98
- }
99
- .rf-codegroup pre {
100
- margin: 0;
101
- padding: 1rem 1.25rem;
102
- overflow-x: auto;
103
- border: none;
104
- border-radius: 0;
105
- }
106
- .rf-codegroup code {
107
- font-family: var(--rf-font-mono);
108
- font-size: var(--rf-text-sm);
109
- }
110
- /* Overflow modes */
111
- .rf-codegroup[data-overflow="wrap"] pre {
112
- white-space: pre-wrap;
113
- word-break: break-word;
114
- overflow-x: hidden;
115
- }
116
- /* WORK-304 — the standalone codeblock CSS at `elements/code.css`
53
+ .rf-codegroup__topbar::before {
54
+ content: "";
55
+ flex: 0 0 auto;
56
+ width: 2.625rem;
57
+ height: 10px;
58
+ opacity: 0.8;
59
+ background-repeat: no-repeat;
60
+ background-image:
61
+ radial-gradient(circle at 5px 50%, #ef4444 5px, transparent 5px),
62
+ radial-gradient(circle at calc(5px + 1rem) 50%, #f59e0b 5px, transparent 5px),
63
+ radial-gradient(circle at calc(5px + 2rem) 50%, #22c55e 5px, transparent 5px);
64
+ }
65
+ /* Filename title — the topbar bar's lone `code` field. */
66
+ .rf-codegroup__topbar [data-meta-type="code"] {
67
+ margin-left: 0.5rem;
68
+ font-size: var(--rf-text-xs);
69
+ font-weight: normal;
70
+ color: var(--rf-codegroup-muted);
71
+ }
72
+ .rf-codegroup ul {
73
+ padding: 0;
74
+ margin: 0;
75
+ }
76
+ .rf-codegroup__tabs {
77
+ background: var(--rf-codegroup-chrome);
78
+ border-bottom: 1px solid var(--rf-codegroup-line);
79
+ }
80
+ .rf-codegroup__tab {
81
+ padding: 0.5rem 1rem;
82
+ font-size: var(--rf-text-xs);
83
+ font-family: var(--rf-font-mono);
84
+ color: var(--rf-codegroup-muted);
85
+ background: none;
86
+ border: none;
87
+ border-bottom: 2px solid transparent;
88
+ cursor: pointer;
89
+ transition:
90
+ color 200ms ease,
91
+ border-color 200ms ease;
92
+ white-space: nowrap;
93
+ }
94
+ .rf-codegroup__tab:hover,
95
+ .rf-codegroup button[data-state="inactive"]:hover {
96
+ color: var(--rf-color-code-text);
97
+ }
98
+ .rf-codegroup__tab--active,
99
+ .rf-codegroup button[data-state="active"] {
100
+ color: var(--rf-color-code-text);
101
+ border-bottom-color: var(--rf-color-primary);
102
+ }
103
+ .rf-codegroup button[data-state="inactive"] {
104
+ color: var(--rf-codegroup-muted);
105
+ }
106
+ .rf-codegroup .rf-codeblock {
107
+ margin: 0;
108
+ }
109
+ .rf-codegroup pre {
110
+ margin: 0;
111
+ padding: 1rem 1.25rem;
112
+ overflow-x: auto;
113
+ border: none;
114
+ border-radius: 0;
115
+ }
116
+ .rf-codegroup code {
117
+ font-family: var(--rf-font-mono);
118
+ font-size: var(--rf-text-sm);
119
+ }
120
+ /* Overflow modes */
121
+ .rf-codegroup[data-overflow="wrap"] pre {
122
+ white-space: pre-wrap;
123
+ word-break: break-word;
124
+ overflow-x: hidden;
125
+ }
126
+ /* WORK-304 — the standalone codeblock CSS at `elements/code.css`
117
127
  * sets `display: grid; min-width: max-content` on `pre code`. Inside
118
128
  * `overflow="wrap"` codegroups we WANT wrapping, so revert the code element
119
129
  * back to a plain block with no min-width constraint. This must stay skin —
120
130
  * it overrides elements/code.css (also skin) by source order + specificity. */
121
- .rf-codegroup[data-overflow="wrap"] pre code {
122
- display: block;
123
- min-width: 0;
124
- }
125
- .rf-codegroup[data-overflow="hide"] pre {
126
- overflow-x: hidden;
127
- }
128
-
131
+ .rf-codegroup[data-overflow="wrap"] pre code {
132
+ display: block;
133
+ min-width: 0;
134
+ }
135
+ .rf-codegroup[data-overflow="hide"] pre {
136
+ overflow-x: hidden;
137
+ }
129
138
  }