mnfst 0.5.80 → 0.5.82

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 (42) hide show
  1. package/LICENSE +1 -1
  2. package/lib/manifest.accordion.css +4 -4
  3. package/lib/manifest.appwrite.auth.js +66 -33
  4. package/lib/manifest.avatar.css +8 -8
  5. package/lib/manifest.button.css +7 -7
  6. package/lib/manifest.checkbox.css +5 -5
  7. package/lib/manifest.code.css +152 -193
  8. package/lib/manifest.code.js +841 -881
  9. package/lib/manifest.code.min.css +1 -1
  10. package/lib/manifest.colorpicker.css +11 -11
  11. package/lib/manifest.components.js +25 -155
  12. package/lib/manifest.css +278 -230
  13. package/lib/manifest.data.js +46 -2
  14. package/lib/manifest.dialog.css +2 -2
  15. package/lib/manifest.divider.css +2 -2
  16. package/lib/manifest.dropdown.css +9 -9
  17. package/lib/manifest.form.css +10 -10
  18. package/lib/manifest.input.css +9 -9
  19. package/lib/manifest.integrity.json +26 -0
  20. package/lib/manifest.js +60 -5
  21. package/lib/manifest.markdown.js +192 -79
  22. package/lib/manifest.min.css +1 -1
  23. package/lib/manifest.radio.css +1 -1
  24. package/lib/manifest.range.css +7 -7
  25. package/lib/manifest.resize.css +1 -1
  26. package/lib/manifest.router.js +49 -76
  27. package/lib/manifest.schema.json +1 -1
  28. package/lib/manifest.sidebar.css +5 -6
  29. package/lib/manifest.slides.css +5 -5
  30. package/lib/manifest.svg.js +75 -5
  31. package/lib/manifest.switch.css +4 -4
  32. package/lib/manifest.table.css +4 -4
  33. package/lib/manifest.theme.css +46 -41
  34. package/lib/manifest.toast.css +7 -7
  35. package/lib/manifest.tooltip.css +3 -3
  36. package/lib/manifest.tooltips.js +41 -0
  37. package/lib/manifest.typography.css +124 -69
  38. package/lib/manifest.utilities.css +48 -54
  39. package/lib/manifest.utilities.js +9 -29
  40. package/package.json +4 -7
  41. package/lib/manifest.export.js +0 -535
  42. package/lib/manifest.virtual.js +0 -319
@@ -13,8 +13,9 @@
13
13
  .paragraph,
14
14
  .small,
15
15
  .caption,
16
- .label {
17
- color: var(--color-content-stark);
16
+ .label,
17
+ .link {
18
+ color: var(--color-content-stark, darkslategray);
18
19
 
19
20
  /* Support inline icons */
20
21
  &:where(:has([x-icon])) {
@@ -41,18 +42,10 @@
41
42
  .h4,
42
43
  .h5,
43
44
  .h6 {
44
- font-weight: bolder;
45
+ font-weight: 550;
45
46
  word-wrap: break-word
46
47
  }
47
48
 
48
- :where(h1, h2, h3, h4):not(.unstyle),
49
- .h1,
50
- .h2,
51
- .h3,
52
- .h4 {
53
- font-weight: 700;
54
- }
55
-
56
49
  :where(h1, h2, h3):not(.unstyle),
57
50
  .h1,
58
51
  .h2,
@@ -62,18 +55,18 @@
62
55
 
63
56
  :where(h1):not(.unstyle),
64
57
  .h1 {
65
- font-size: 2.25rem;
58
+ font-size: 3rem;
66
59
  line-height: 1.25
67
60
  }
68
61
 
69
62
  :where(h2):not(.unstyle),
70
63
  .h2 {
71
- font-size: 1.5rem
64
+ font-size: 2.25rem
72
65
  }
73
66
 
74
67
  :where(h3):not(.unstyle),
75
68
  .h3 {
76
- font-size: 1.25rem;
69
+ font-size: 1.75rem;
77
70
  line-height: 1.4
78
71
  }
79
72
 
@@ -84,18 +77,20 @@
84
77
 
85
78
  :where(h5):not(.unstyle),
86
79
  .h5 {
87
- font-weight: 600;
88
- font-size: .875rem;
80
+ font-size: 1rem;
89
81
  line-height: 1rem;
90
- color: var(--color-content-neutral, oklch(48.26% 0.0365 255.09))
82
+ color: var(--color-content-neutral, gray);
83
+
84
+ & a:hover {
85
+ color: var(--color-content-stark, darkslategray)
86
+ }
91
87
  }
92
88
 
93
89
  :where(h6):not(.unstyle),
94
90
  .h6 {
95
- font-weight: 600;
96
91
  font-size: 0.8125rem;
97
92
  line-height: 1.4;
98
- text-transform: uppercase;
93
+ color: var(--color-brand-content, goldenrod)
99
94
  }
100
95
 
101
96
  /* Paragraphs */
@@ -105,18 +100,48 @@
105
100
  }
106
101
 
107
102
  /* Links */
108
- :where(a:not([role=button]), button.link):not(.unstyle) {
109
- text-decoration: underline;
110
- text-underline-offset: 2px;
103
+ :where(a:not([role=button]), .link):not(.unstyle) {
104
+ text-align: unset;
105
+ text-decoration: none;
111
106
  cursor: pointer;
112
107
  transition: var(--transition, all .05s ease-in-out);
113
108
 
114
109
  &:hover {
115
- color: var(--color-content-neutral, oklch(48.26% 0.0365 255.09))
110
+ color: var(--color-content-neutral, gray)
116
111
  }
112
+ }
113
+
114
+ :where(abbr, address, blockquote, code, del, figcaption, h1, h2, h3, h4, h5, h6, ins, legend, p, small, cite, q, .h1, .h2, .h3, .h4, .h5, .h6, .paragraph, .small, .caption, .label):not(.unstyle)>a {
115
+ text-decoration: underline;
116
+ text-underline-offset: 2px
117
+ }
118
+
119
+ /* Asides */
120
+ :where(aside):not(.unstyle) {
121
+ padding: calc(var(--spacing, 0.25rem) * 4);
122
+ border: 1px solid var(--color-line, color-mix(darkslategray 10%, transparent));
123
+ border-radius: var(--radius, 0.5rem)
124
+ }
117
125
 
118
- &:active {
119
- color: var(--color-content-neutral, oklch(48.26% 0.0365 255.09))
126
+ /* Badges */
127
+ :where(.badge) {
128
+ display: inline-flex;
129
+ justify-content: center;
130
+ align-items: center;
131
+ gap: 0.25rem;
132
+ width: fit-content;
133
+ height: fit-content;
134
+ padding: 0.35ch 0.65ch;
135
+ font-weight: 500;
136
+ font-size: 0.75rem;
137
+ line-height: 1;
138
+ color: var(--color-field-inverse, darkslategray);
139
+ background-color: var(--color-surface-2, gainsboro);
140
+ border-radius: 100px;
141
+
142
+ /* Solo icons */
143
+ &:has(svg:only-child) {
144
+ padding: 0.35ch
120
145
  }
121
146
  }
122
147
 
@@ -127,8 +152,8 @@
127
152
  max-width: 100%;
128
153
  margin: calc(var(--spacing, 0.25rem) * 4) 0;
129
154
  padding: 0 calc(var(--spacing, 0.25rem) * 4);
130
- color: var(--color-content-stark, oklch(16.6% 0.026 267));
131
- border-inline-start: 0.25rem solid color-mix(in oklch, var(--color-content-stark, oklch(16.6% 0.026 267)) 25%, transparent);
155
+ color: var(--color-content-stark, darkslategray);
156
+ border-inline-start: 0.25rem solid color-mix(in oklch, var(--color-content-stark, darkslategray) 25%, transparent);
132
157
  border-inline-end: none;
133
158
 
134
159
  & * {
@@ -136,29 +161,33 @@
136
161
  }
137
162
  }
138
163
 
139
- /* Inline code */
164
+ /* Code */
140
165
  :where(code):not(.unstyle) {
141
166
  display: inline-block;
142
167
  width: fit-content;
143
168
  height: fit-content;
144
- padding: 0.1ch 0.5ch;
169
+ padding: 0 0.7ch;
145
170
  font-size: 82.5%;
171
+ line-height: 1.4;
146
172
  word-wrap: break-word;
147
- color: var(--color-content-neutral, oklch(48.26% 0.0365 255.09));
148
- background-color: color-mix(in oklch, var(--color-content-neutral, oklch(48.26% 0.0365 255.09)) 10%, transparent);
149
- border: 1px solid color-mix(in oklch, var(--color-content-subtle, oklch(67.4% 0.0318 251.27)) 10%, transparent);
150
- border-radius: var(--radius, 0.5rem)
173
+ color: var(--color-content-neutral, gray);
174
+ background-color: color-mix(in oklch, var(--color-content-neutral, gray) 10%, transparent);
175
+ border: 1px solid color-mix(in oklch, var(--color-content-subtle, darkgray) 10%, transparent);
176
+ border-radius: var(--radius, 0.5rem);
177
+
178
+ &[role="button"] {
179
+ cursor: pointer
180
+ }
151
181
  }
152
182
 
153
183
  /* Captions */
154
184
  :where(figcaption):not(.unstyle),
155
185
  .caption {
156
186
  font-size: 0.8125rem;
157
- color: var(--color-content-neutral, oklch(48.26% 0.0365 255.09));
187
+ color: var(--color-content-neutral, gray);
158
188
 
159
- & a {
160
- font-weight: inherit;
161
- color: inherit
189
+ & a:hover {
190
+ color: var(--color-content-stark, darkslategray)
162
191
  }
163
192
  }
164
193
 
@@ -171,7 +200,11 @@
171
200
  :where(small):not(.unstyle),
172
201
  .small {
173
202
  font-size: 0.875rem;
174
- color: var(--color-content-neutral, oklch(48.26% 0.0365 255.09))
203
+ color: var(--color-content-neutral, gray);
204
+
205
+ & a:hover {
206
+ color: var(--color-content-stark, darkslategray)
207
+ }
175
208
  }
176
209
 
177
210
  /* Icons */
@@ -198,8 +231,8 @@
198
231
  font-weight: 600;
199
232
  line-height: 1;
200
233
  text-align: center;
201
- color: var(--color-content-neutral, oklch(48.26% 0.0365 255.09));
202
- background-color: color-mix(in oklch, var(--color-content-neutral, oklch(48.26% 0.0365 255.09)) 10%, transparent);
234
+ color: var(--color-content-neutral, gray);
235
+ background-color: color-mix(in oklch, var(--color-content-neutral, gray) 10%, transparent);
203
236
  border-radius: calc(var(--radius, 0.5rem) / 1.5);
204
237
 
205
238
  &:not(:last-of-type) {
@@ -229,43 +262,21 @@
229
262
  white-space: normal
230
263
  }
231
264
 
232
- /* Badges */
233
- :where(mark):not(.unstyle),
234
- .badge {
235
- display: inline-flex;
236
- justify-content: center;
237
- align-items: center;
238
- gap: 0.25rem;
239
- width: fit-content;
240
- height: fit-content;
241
- padding: var(--spacing, 0.25rem) calc(var(--spacing, 0.25rem) * 1.5);
242
- font-weight: 500;
243
- font-size: 0.75rem;
244
- line-height: 1;
245
- color: var(--color-field-inverse, oklch(16.6% 0.026 267));
246
- background-color: var(--color-field-surface, oklch(91.79% 0.0029 264.26));
247
- border-radius: 100px;
248
-
249
- /* Solo icons */
250
- &:has(svg:only-child) {
251
- padding: var(--spacing, 0.25rem) calc(var(--spacing, 0.25rem) * 1);
252
- }
253
- }
254
-
255
265
  /* Lists */
256
- :where(ol):not(nav ol):not(menu ol):not(.unstyle) {
266
+ :where(ol):not(.unstyle) {
257
267
  list-style-type: decimal;
258
268
  }
259
269
 
260
- :where(ul):not(nav ul):not(menu ul):not(.unstyle) {
270
+ :where(ul):not(.unstyle) {
261
271
  list-style-type: disc;
262
272
  }
263
273
 
264
- :where(ol):not(nav ol):not(menu ol):not(.unstyle),
265
- :where(ul):not(nav ul):not(menu ul):not(.unstyle) {
274
+ :where(ol):not(.unstyle),
275
+ :where(ul):not(.unstyle) {
276
+ padding-inline-start: 1.75ch;
266
277
 
267
- &:not(:has(input[type=checkbox])) {
268
- padding-inline-start: 1.75ch;
278
+ &:has(input[type=checkbox]) {
279
+ padding-inline-start: 0
269
280
  }
270
281
 
271
282
  /* Offset items so markers align inside the element frame */
@@ -305,6 +316,18 @@
305
316
  }
306
317
  }
307
318
 
319
+ :where(nav, menu):not(.unstyle) ul,
320
+ :where(nav, menu):not(.unstyle) ol {
321
+ list-style: none;
322
+ padding: 0;
323
+
324
+ & li,
325
+ li:not(:last-of-type) {
326
+ margin: 0;
327
+ padding: 0
328
+ }
329
+ }
330
+
308
331
  /* RTL list overrides */
309
332
  [dir=rtl] :where(ol):not(nav ol):not(menu ol):not(.unstyle),
310
333
  [dir=rtl] :where(ul):not(nav ul):not(menu ul):not(.unstyle) {
@@ -334,6 +357,38 @@
334
357
  }
335
358
  }
336
359
 
360
+ /* Pre code blocks */
361
+ :where(pre):not(.unstyle) {
362
+ display: flex;
363
+ flex-flow: row wrap;
364
+ font-size: 0.8125rem;
365
+ line-height: 1.7;
366
+ background-color: var(--color-page, white);
367
+ border: 1px solid var(--color-line, color-mix(darkslategray 10%, transparent));
368
+ border-radius: var(--radius, 0.5rem);
369
+ overflow: hidden;
370
+ tab-size: 4;
371
+ white-space: pre;
372
+ white-space-collapse: preserve;
373
+ overflow-x: auto;
374
+
375
+ & code {
376
+ flex-grow: 1;
377
+ display: inline-flex;
378
+ height: auto;
379
+ padding: calc(var(--spacing, 0.25rem) * 4);
380
+ font-size: inherit;
381
+ line-height: inherit;
382
+ background-color: transparent;
383
+ border: 0 none;
384
+ box-shadow: none
385
+ }
386
+
387
+ &:not(:has(code)) {
388
+ padding: calc(var(--spacing, 0.25rem) * 4)
389
+ }
390
+ }
391
+
337
392
  /* Spans */
338
393
  :where(span):not(.unstyle) {
339
394
  vertical-align: middle
@@ -35,7 +35,7 @@
35
35
 
36
36
  /* Content width & horizontal centering */
37
37
  :where(.content) {
38
- width: var(--spacing-content-width, 68.75rem);
38
+ width: var(--spacing-content-width, 74rem);
39
39
  max-width: 100%;
40
40
  margin-inline-start: auto;
41
41
  margin-inline-end: auto
@@ -46,20 +46,8 @@
46
46
  background-color: transparent;
47
47
 
48
48
  &:hover {
49
- background-color: var(--color-field-surface, oklch(91.79% 0.0029 264.26))
49
+ background-color: var(--color-field-surface, color-mix(darkslategray 10%, transparent))
50
50
  }
51
-
52
- /* &.brand:hover {
53
- color: var(--color-brand-inverse, #763518)
54
- }
55
-
56
- &.accent:hover {
57
- color: var(--color-accent-inverse, oklch(100% 0 0))
58
- }
59
-
60
- &.negative:hover {
61
- color: var(--color-negative-inverse, white)
62
- } */
63
51
  }
64
52
 
65
53
  /* Hug */
@@ -74,21 +62,21 @@
74
62
  :where(.outlined) {
75
63
  border-width: 1px;
76
64
  border-style: solid;
77
- border-color: color-mix(in oklch, var(--color-field-surface, oklch(91.79% 0.0029 264.26)) 90%, var(--color-field-inverse, oklch(16.6% 0.026 267)))
65
+ border-color: color-mix(in oklch, var(--color-field-surface, color-mix(darkslategray 10%, transparent)) 90%, var(--color-field-inverse, darkslategray))
78
66
  }
79
67
 
80
68
  /* Dark theme override */
81
69
  .dark :where(.outlined) {
82
- border-color: color-mix(in oklch, var(--color-field-surface, oklch(91.79% 0.0029 264.26)) 80%, var(--color-field-inverse, oklch(16.6% 0.026 267)))
70
+ border-color: color-mix(in oklch, var(--color-field-surface, color-mix(darkslategray 10%, transparent)) 80%, var(--color-field-inverse, darkslategray))
83
71
  }
84
72
 
85
73
  /* Transparent */
86
74
  :where(.transparent) {
87
- color: var(--color-content-neutral, oklch(48.26% 0.0365 255.09));
75
+ color: var(--color-content-neutral, gray);
88
76
  background-color: transparent !important;
89
77
 
90
78
  &:hover {
91
- color: var(--color-content-stark, oklch(16.6% 0.026 267))
79
+ color: var(--color-content-stark, darkslategray)
92
80
  }
93
81
  }
94
82
 
@@ -135,10 +123,10 @@
135
123
  }
136
124
 
137
125
  /* Width and horizontal centering for content wrappers */
138
- &>header nav,
139
- &>footer nav,
126
+ &>header nav:not([popover]),
127
+ &>footer nav:not([popover]),
140
128
  &>main>section:not(.banner, .overlay-dark, .overlay-light) {
141
- width: var(--spacing-content-width, 68.75rem);
129
+ width: var(--spacing-content-width, 74rem);
142
130
  max-width: 100%;
143
131
  margin-inline-start: auto;
144
132
  margin-inline-end: auto
@@ -221,7 +209,7 @@
221
209
 
222
210
  /* Prose styles for long-form content */
223
211
  :where(.prose, .prose details) {
224
- width: 65ch;
212
+ width: 42rem;
225
213
  max-width: 100%;
226
214
 
227
215
  /* Asides inside a prose element are used as callouts */
@@ -229,9 +217,9 @@
229
217
  margin-top: calc(1rem * 1.4);
230
218
  padding: 1rem;
231
219
  border-radius: calc(var(--radius, 0.5rem) * 2);
232
- color: var(--color-content-stark, oklch(16.6% 0.026 267));
233
- background-color: color-mix(in oklch, var(--color-field-surface, oklch(91.79% 0.0029 264.26)) 20%, transparent);
234
- border: 1px solid color-mix(in oklch, var(--color-field-surface, oklch(91.79% 0.0029 264.26)) 30%, transparent);
220
+ color: var(--color-content-stark, darkslategray);
221
+ background-color: color-mix(in oklch, var(--color-field-surface, color-mix(darkslategray 10%, transparent)) 20%, transparent);
222
+ border: 1px solid color-mix(in oklch, var(--color-field-surface, color-mix(darkslategray 10%, transparent)) 30%, transparent);
235
223
 
236
224
  &:not(.frame) * {
237
225
  color: inherit
@@ -292,18 +280,24 @@
292
280
  }
293
281
  }
294
282
 
283
+ &>h1 {
284
+ font-size: 2.25rem
285
+ }
286
+
295
287
  &>h1+p {
296
288
  margin-top: 0.625rem;
297
289
  font-size: 1.125rem;
298
- color: var(--color-content-neutral, oklch(48.26% 0.0365 255.09))
290
+ color: var(--color-content-neutral, gray)
299
291
  }
300
292
 
301
293
  &>h2 {
294
+ font-size: 1.75rem;
302
295
  margin-top: 1rem;
303
296
  margin-bottom: calc(1rem * 0.6667)
304
297
  }
305
298
 
306
299
  &>h3 {
300
+ font-size: 1.25rem;
307
301
  margin-top: calc(1rem * 2.4)
308
302
  }
309
303
 
@@ -373,59 +367,59 @@
373
367
  :where(.trailing) {
374
368
  display: inline-block;
375
369
  margin-inline-start: auto;
376
- color: var(--color-content-neutral, oklch(48.26% 0.0365 255.09))
370
+ color: var(--color-content-neutral, gray)
377
371
  }
378
372
 
379
373
  /* Brand colors */
380
374
  :where(.brand) {
381
- --color-field-surface: var(--color-brand-surface, #f6c07b);
382
- --color-field-surface-hover: var(--color-brand-surface-hover, #f19b46);
383
- --color-field-inverse: var(--color-brand-inverse, #763518);
384
- --color-content-stark: var(--color-brand-content, #de6618);
385
- --color-content-neutral: color-mix(in oklch, var(--color-brand-content, #de6618) 85%, transparent);
386
- --color-content-subtle: color-mix(in oklch, var(--color-brand-content, #de6618) 70%, transparent)
375
+ --color-field-surface: var(--color-brand-surface, goldenrod);
376
+ --color-field-surface-hover: var(--color-brand-surface-hover, darkgoldenrod);
377
+ --color-field-inverse: var(--color-brand-inverse, white);
378
+ --color-content-stark: var(--color-brand-content, goldenrod);
379
+ --color-content-neutral: color-mix(in oklch, var(--color-brand-content, goldenrod) 85%, transparent);
380
+ --color-content-subtle: color-mix(in oklch, var(--color-brand-content, goldenrod) 70%, transparent)
387
381
  }
388
382
 
389
383
  /* Accent colors */
390
384
  :where(.accent) {
391
- --color-field-surface: var(--color-accent-surface, oklch(16.6% 0.026 267));
392
- --color-field-surface-hover: var(--color-accent-surface-hover, oklch(28.7% 0.030787 270.1));
393
- --color-field-inverse: var(--color-accent-inverse, oklch(100% 0 0));
394
- --color-content-stark: var(--color-accent-content, oklch(16.6% 0.026 267));
395
- --color-content-neutral: color-mix(in oklch, var(--color-accent-content, oklch(16.6% 0.026 267)) 85%, transparent);
396
- --color-content-subtle: color-mix(in oklch, var(--color-accent-content, oklch(16.6% 0.026 267)) 70%, transparent)
385
+ --color-field-surface: var(--color-accent-surface, darkslategray);
386
+ --color-field-surface-hover: var(--color-accent-surface-hover, color-mix(darkslategray 90%, white));
387
+ --color-field-inverse: var(--color-accent-inverse, white);
388
+ --color-content-stark: var(--color-accent-content, darkslategray);
389
+ --color-content-neutral: color-mix(in oklch, var(--color-accent-content, darkslategray) 85%, transparent);
390
+ --color-content-subtle: color-mix(in oklch, var(--color-accent-content, darkslategray) 70%, transparent)
397
391
  }
398
392
 
399
393
  /* Negative colors */
400
394
  :where(.negative) {
401
- --color-field-surface: var(--color-negative-surface, #ef4444);
402
- --color-field-surface-hover: var(--color-negative-surface-hover, #dc2626);
403
- --color-field-inverse: var(--color-negative-inverse, white);
404
- --color-content-stark: var(--color-negative-content, #ef4444);
405
- --color-content-neutral: color-mix(in oklch, var(--color-negative-content, #ef4444) 85%, transparent);
406
- --color-content-subtle: color-mix(in oklch, var(--color-negative-content, #ef4444) 70%, transparent)
395
+ --color-field-surface: var(--color-negative-surface, salmon);
396
+ --color-field-surface-hover: var(--color-negative-surface-hover, lightcoral);
397
+ --color-field-inverse: var(--color-negative-inverse, maroon);
398
+ --color-content-stark: var(--color-negative-content, crimson);
399
+ --color-content-neutral: color-mix(in oklch, var(--color-negative-content, crimson) 85%, transparent);
400
+ --color-content-subtle: color-mix(in oklch, var(--color-negative-content, crimson) 70%, transparent)
407
401
  }
408
402
 
409
403
  /* Positive colors */
410
404
  :where(.positive) {
411
- --color-field-surface: var(--color-positive-surface, #16a34a);
412
- --color-field-surface-hover: var(--color-positive-surface-hover, #166534);
413
- --color-field-inverse: var(--color-positive-inverse, white);
414
- --color-content-stark: var(--color-positive-content, #16a34a);
415
- --color-content-neutral: color-mix(in oklch, var(--color-positive-content, #16a34a) 85%, transparent);
416
- --color-content-subtle: color-mix(in oklch, var(--color-positive-content, #16a34a) 70%, transparent)
405
+ --color-field-surface: var(--color-positive-surface, palegreen);
406
+ --color-field-surface-hover: var(--color-positive-surface-hover, lightgreen);
407
+ --color-field-inverse: var(--color-positive-inverse, darkgreen);
408
+ --color-content-stark: var(--color-positive-content, limegreen);
409
+ --color-content-neutral: color-mix(in oklch, var(--color-positive-content, limegreen) 85%, transparent);
410
+ --color-content-subtle: color-mix(in oklch, var(--color-positive-content, limegreen) 70%, transparent)
417
411
  }
418
412
 
419
413
  /* Text colors */
420
414
  :where(.stark) {
421
- color: var(--color-content-stark, oklch(16.6% 0.026 267))
415
+ color: var(--color-content-stark, darkslategray)
422
416
  }
423
417
 
424
418
  :where(.neutral) {
425
- color: var(--color-content-neutral, oklch(48.26% 0.0365 255.09))
419
+ color: var(--color-content-neutral, gray)
426
420
  }
427
421
 
428
422
  :where(.subtle) {
429
- color: var(--color-content-subtle, oklch(67.4% 0.0318 251.27))
423
+ color: var(--color-content-subtle, darkgray)
430
424
  }
431
425
  }
@@ -2399,7 +2399,6 @@ TailwindCompiler.prototype.generateUtilitiesFromVars = function (cssText, usedDa
2399
2399
  let selector = `.${escapeClassName(variantClass)}`;
2400
2400
  let hasMediaQuery = false;
2401
2401
  let mediaQueryRule = '';
2402
- let nestedSelector = null; // For variants that end with & (CSS nesting)
2403
2402
 
2404
2403
  for (const variant of parsed.variants) {
2405
2404
  if (variant.isArbitrary) {
@@ -2417,18 +2416,10 @@ TailwindCompiler.prototype.generateUtilitiesFromVars = function (cssText, usedDa
2417
2416
  selector = { baseClass: selector, arbitrarySelector };
2418
2417
  }
2419
2418
  } else if (variant.selector.includes('&')) {
2420
- // Check if selector ends with & (indicates CSS nesting)
2421
- if (variant.selector.trim().endsWith('&')) {
2422
- // This is a nested selector - move & to the beginning for CSS nesting
2423
- const selectorWithoutAmpersand = variant.selector.trim().slice(0, -1).trim();
2424
- const nestedSelectorText = `&${selectorWithoutAmpersand}`;
2425
- nestedSelector = nestedSelector ? `${nestedSelector} ${nestedSelectorText}` : nestedSelectorText;
2426
- } else {
2427
- // Handle variants like .dark &, .light &, .group &, etc.
2428
- // Replace & with the actual selector
2429
- const replacedSelector = variant.selector.replace(/&/g, selector);
2430
- selector = replacedSelector;
2431
- }
2419
+ // Substitute & with the current selector. This produces flat CSS that
2420
+ // works for both ancestor patterns (`.dark &` → `.dark .X`) and
2421
+ // self-extending patterns (`& > p` `.X > p`).
2422
+ selector = variant.selector.replace(/&/g, selector);
2432
2423
  } else if (variant.selector.startsWith(':')) {
2433
2424
  // For pseudo-classes, append to selector
2434
2425
  selector = `${selector}${variant.selector}`;
@@ -2444,9 +2435,6 @@ TailwindCompiler.prototype.generateUtilitiesFromVars = function (cssText, usedDa
2444
2435
  if (typeof selector === 'object' && selector.arbitrarySelector) {
2445
2436
  // Handle arbitrary selectors with nested CSS (for non-& selectors)
2446
2437
  rule = `${selector.baseClass} {\n ${selector.arbitrarySelector} {\n ${cssContent}\n }\n}`;
2447
- } else if (nestedSelector) {
2448
- // Handle nested selectors (variants ending with &)
2449
- rule = `${selector} {\n ${nestedSelector} {\n ${cssContent}\n }\n}`;
2450
2438
  } else {
2451
2439
  // Regular selector
2452
2440
  rule = `${selector} { ${cssContent} }`;
@@ -2719,7 +2707,7 @@ TailwindCompiler.prototype.generateCustomUtilities = function (usedData) {
2719
2707
  let selector = `.${escapeClassName(variantClass)}`;
2720
2708
  let hasMediaQuery = false;
2721
2709
  let mediaQueryRule = '';
2722
- let nestedSelector = null; // For variants that end with & (CSS nesting)
2710
+ let nestedSelector = null;
2723
2711
 
2724
2712
  for (const variant of parsed.variants) {
2725
2713
  if (variant.isArbitrary) {
@@ -2737,18 +2725,10 @@ TailwindCompiler.prototype.generateCustomUtilities = function (usedData) {
2737
2725
  selector = { baseClass: selector, arbitrarySelector };
2738
2726
  }
2739
2727
  } else if (variant.selector.includes('&')) {
2740
- // Check if selector ends with & (indicates CSS nesting)
2741
- if (variant.selector.trim().endsWith('&')) {
2742
- // This is a nested selector - move & to the beginning for CSS nesting
2743
- const selectorWithoutAmpersand = variant.selector.trim().slice(0, -1).trim();
2744
- const nestedSelectorText = `&${selectorWithoutAmpersand}`;
2745
- nestedSelector = nestedSelector ? `${nestedSelector} ${nestedSelectorText}` : nestedSelectorText;
2746
- } else {
2747
- // Handle variants like .dark &, .light &, .group &, etc.
2748
- // Replace & with the actual selector
2749
- const replacedSelector = variant.selector.replace(/&/g, selector);
2750
- selector = replacedSelector;
2751
- }
2728
+ // Substitute & with the current selector. This produces flat CSS that
2729
+ // works for both ancestor patterns (`.dark &` → `.dark .X`) and
2730
+ // self-extending patterns (`& > p` `.X > p`).
2731
+ selector = variant.selector.replace(/&/g, selector);
2752
2732
  } else if (variant.selector.startsWith(':')) {
2753
2733
  // For pseudo-classes, append to selector
2754
2734
  selector = `${selector}${variant.selector}`;
package/package.json CHANGED
@@ -1,13 +1,12 @@
1
1
  {
2
2
  "name": "mnfst",
3
- "version": "0.5.80",
3
+ "version": "0.5.82",
4
4
  "private": false,
5
5
  "workspaces": [
6
6
  "templates/starter",
7
7
  "packages/render",
8
8
  "packages/types",
9
- "packages/test",
10
- "packages/export"
9
+ "packages/test"
11
10
  ],
12
11
  "main": "lib/manifest.js",
13
12
  "style": "lib/manifest.css",
@@ -24,18 +23,16 @@
24
23
  "start:docs": "node packages/run/serve.mjs docs",
25
24
  "start:starter": "node packages/run/serve.mjs templates/starter --port 3001",
26
25
  "start:dist": "node packages/run/serve.mjs src/test-prerender --port 5003",
27
- "prerender": "node src/scripts/manifest.render.mjs --root src",
26
+ "render": "node src/scripts/manifest.render.mjs --root src",
28
27
  "prerender:docs": "node src/scripts/manifest.render.mjs --root docs",
29
28
  "prerender:starter": "node src/scripts/manifest.render.mjs --root templates/starter",
30
- "render": "node src/scripts/manifest.render.mjs --root src",
31
29
  "release": "npm version patch --no-git-tag-version && npm publish",
32
30
  "release:run": "cd packages/run && npm version patch --no-git-tag-version && npm publish --auth-type=web",
33
31
  "release:render": "cd packages/render && npm version patch --no-git-tag-version && npm publish --auth-type=web",
34
32
  "release:types": "cd packages/types && npm version patch --no-git-tag-version && npm publish --auth-type=web",
35
33
  "release:test": "cd packages/test && npm version patch --no-git-tag-version && npm publish --auth-type=web",
36
- "release:export": "cd packages/export && npm version patch --no-git-tag-version && npm publish --auth-type=web",
37
34
  "release:starter": "cd packages/create-starter && npm version patch --no-git-tag-version && npm publish --auth-type=web",
38
- "release:all": "npm run release:run && npm run release:render && npm run release:types && npm run release:test && npm run release:export && npm run release:starter && npm run release",
35
+ "release:all": "npm run release:run && npm run release:render && npm run release:types && npm run release:test && npm run release:starter && npm run release",
39
36
  "prepublishOnly": "npm run build",
40
37
  "test": "vitest run",
41
38
  "lint": "echo 'No linting configured'"