vowel 0.6.3 → 0.7.0-beta.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 (165) hide show
  1. package/README.md +23 -17
  2. package/bin.js +87 -30
  3. package/cli.js +15 -0
  4. package/config.js +102 -16
  5. package/extractDate.js +70 -6
  6. package/index.js +14 -5
  7. package/package.json +42 -7
  8. package/plugins/assets/index.js +65 -0
  9. package/plugins/atproto/index.js +132 -0
  10. package/plugins/atproto/password.js +71 -0
  11. package/plugins/atproto/publish.js +406 -0
  12. package/plugins/atproto/record.js +144 -0
  13. package/plugins/atproto/rkey.js +54 -0
  14. package/plugins/deploy-cloudflare/index.js +92 -0
  15. package/plugins/fonts/index.js +18 -21
  16. package/plugins/html/assets/bundle-BeK1Hptv.css +21 -0
  17. package/plugins/html/bundle/assets/index-BeK1Hptv.css +21 -0
  18. package/plugins/html/bundle/index.js +21145 -0
  19. package/plugins/html/editor/EditButton.svelte +152 -0
  20. package/plugins/html/editor/Editor.svelte +51 -0
  21. package/plugins/html/editor/Overlays.svelte +6 -0
  22. package/plugins/html/editor/SettingsPanel.svelte +397 -0
  23. package/plugins/html/editor/Toolbar.svelte +644 -0
  24. package/plugins/html/editor/create-session.js +250 -0
  25. package/plugins/html/editor/directives.js +128 -0
  26. package/plugins/html/editor/frontmatter.js +97 -0
  27. package/plugins/html/editor/ingest.js +339 -0
  28. package/plugins/html/editor/main.js +94 -0
  29. package/plugins/html/editor/nodes/Alert.svelte +21 -0
  30. package/plugins/html/editor/nodes/Blockquote.svelte +9 -0
  31. package/plugins/html/editor/nodes/CodeBlock.svelte +19 -0
  32. package/plugins/html/editor/nodes/Embed.svelte +19 -0
  33. package/plugins/html/editor/nodes/Emphasis.svelte +11 -0
  34. package/plugins/html/editor/nodes/Heading.svelte +15 -0
  35. package/plugins/html/editor/nodes/Highlight.svelte +11 -0
  36. package/plugins/html/editor/nodes/Image.svelte +18 -0
  37. package/plugins/html/editor/nodes/InlineCode.svelte +11 -0
  38. package/plugins/html/editor/nodes/Link.svelte +17 -0
  39. package/plugins/html/editor/nodes/List.svelte +15 -0
  40. package/plugins/html/editor/nodes/ListItem.svelte +9 -0
  41. package/plugins/html/editor/nodes/Page.svelte +21 -0
  42. package/plugins/html/editor/nodes/Paragraph.svelte +9 -0
  43. package/plugins/html/editor/nodes/Strikethrough.svelte +11 -0
  44. package/plugins/html/editor/nodes/Strong.svelte +11 -0
  45. package/plugins/html/editor/nodes/ThematicBreak.svelte +9 -0
  46. package/plugins/html/editor/nodes/index.js +18 -0
  47. package/plugins/html/editor/rollup.config.js +35 -0
  48. package/plugins/html/editor/serialize.js +157 -0
  49. package/plugins/html/editor/settings-file.js +83 -0
  50. package/plugins/html/editor/socket.js +202 -0
  51. package/plugins/html/editor/source.js +43 -0
  52. package/plugins/html/image.js +104 -0
  53. package/plugins/html/index.js +760 -0
  54. package/plugins/html/partials.js +299 -0
  55. package/plugins/html/socialLinks.js +67 -0
  56. package/plugins/html/writeRules.js +377 -0
  57. package/plugins/icons/index.js +2 -6
  58. package/plugins/images/index.js +78 -55
  59. package/plugins/markdown/brandColors.js +10 -0
  60. package/plugins/markdown/colorScheme.js +64 -0
  61. package/plugins/markdown/emoji.js +30 -0
  62. package/plugins/markdown/frontmatter.js +253 -0
  63. package/plugins/markdown/index.js +287 -1274
  64. package/plugins/markdown/links.js +97 -0
  65. package/plugins/markdown/metadata.js +308 -0
  66. package/plugins/markdown/readRules.js +143 -0
  67. package/plugins/markdown/typography.js +109 -0
  68. package/plugins/markdown/visitor.js +143 -0
  69. package/plugins/publish/index.js +34 -0
  70. package/plugins/robots/agents.js +79 -0
  71. package/plugins/robots/index.js +30 -10
  72. package/plugins/robots/robots.js +48 -0
  73. package/plugins/styles/index.js +111 -26
  74. package/plugins/styles/theme.js +116 -0
  75. package/plugins/urls/index.js +78 -0
  76. package/plugins/urls/urlMetadata.js +246 -0
  77. package/plugins/vectors/index.js +5 -9
  78. package/plugins/xml/entryContent.js +103 -0
  79. package/plugins/xml/index.js +123 -50
  80. package/secretPaths.js +170 -0
  81. package/stylesheets/DefaultStyles.css +367 -437
  82. package/stylesheets/ResetStyles.css +2 -38
  83. package/stylesheets/SyntaxHighlightingStyles.css +269 -0
  84. package/stylesheets/TypographyStyles.css +386 -128
  85. package/systemPaths.js +48 -0
  86. package/utils.js +56 -5
  87. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -73
  88. package/.github/ISSUE_TEMPLATE/config.yml +0 -7
  89. package/docs-source/.cache.json +0 -9
  90. package/docs-source/.obsidian/app.json +0 -3
  91. package/docs-source/.obsidian/appearance.json +0 -3
  92. package/docs-source/.obsidian/core-plugins-migration.json +0 -30
  93. package/docs-source/.obsidian/core-plugins.json +0 -20
  94. package/docs-source/.obsidian/workspace.json +0 -168
  95. package/docs-source/.stackblitzrc +0 -3
  96. package/docs-source/.votive.db +0 -0
  97. package/docs-source/about.md +0 -3
  98. package/docs-source/blog/home.md +0 -5
  99. package/docs-source/blog/url-ui.md +0 -21
  100. package/docs-source/blog.md +0 -5
  101. package/docs-source/docs/.votive.db +0 -0
  102. package/docs-source/docs/deploy.md +0 -67
  103. package/docs-source/docs/file-structure.md +0 -31
  104. package/docs-source/docs/folder-settings.md +0 -23
  105. package/docs-source/docs/home.md +0 -55
  106. package/docs-source/docs/images.md +0 -10
  107. package/docs-source/docs/items.md +0 -13
  108. package/docs-source/docs/pages.md +0 -141
  109. package/docs-source/docs/settings.md +0 -4
  110. package/docs-source/docs/styling.md +0 -34
  111. package/docs-source/docs/taxonomies.md +0 -37
  112. package/docs-source/features/cards.md +0 -7
  113. package/docs-source/features/editing.md +0 -7
  114. package/docs-source/features/emoji.md +0 -7
  115. package/docs-source/features/frontmatter.md +0 -7
  116. package/docs-source/features/lists.md +0 -7
  117. package/docs-source/features/navigation.md +0 -7
  118. package/docs-source/features/rich-previews.md +0 -7
  119. package/docs-source/features/robots.md +0 -7
  120. package/docs-source/features/rss.md +0 -7
  121. package/docs-source/features/sitemap.md +0 -7
  122. package/docs-source/features/speed.md +0 -7
  123. package/docs-source/features/static.md +0 -7
  124. package/docs-source/features/taxonomies.md +0 -7
  125. package/docs-source/home.md +0 -42
  126. package/docs-source/output/about.html +0 -1
  127. package/docs-source/output/blog/url-ui.html +0 -8
  128. package/docs-source/output/blog.html +0 -1
  129. package/docs-source/output/default.css +0 -1
  130. package/docs-source/output/docs/deploy.html +0 -34
  131. package/docs-source/output/docs/file-structure.html +0 -24
  132. package/docs-source/output/docs/folder-settings.html +0 -20
  133. package/docs-source/output/docs/images.html +0 -2
  134. package/docs-source/output/docs/items.html +0 -6
  135. package/docs-source/output/docs/pages.html +0 -101
  136. package/docs-source/output/docs/styling.html +0 -18
  137. package/docs-source/output/docs/taxonomies.html +0 -20
  138. package/docs-source/output/docs.html +0 -28
  139. package/docs-source/output/features/cards.html +0 -1
  140. package/docs-source/output/features/editing.html +0 -1
  141. package/docs-source/output/features/emoji.html +0 -1
  142. package/docs-source/output/features/frontmatter.html +0 -1
  143. package/docs-source/output/features/lists.html +0 -1
  144. package/docs-source/output/features/navigation.html +0 -1
  145. package/docs-source/output/features/rich-previews.html +0 -1
  146. package/docs-source/output/features/robots.html +0 -1
  147. package/docs-source/output/features/rss.html +0 -1
  148. package/docs-source/output/features/sitemap.html +0 -1
  149. package/docs-source/output/features/speed.html +0 -1
  150. package/docs-source/output/features/static.html +0 -1
  151. package/docs-source/output/features/taxonomies.html +0 -1
  152. package/docs-source/output/features.html +0 -1
  153. package/docs-source/output/feed.xml +0 -1
  154. package/docs-source/output/index.html +0 -21
  155. package/docs-source/output/reset.css +0 -1
  156. package/docs-source/output/roadmap.html +0 -87
  157. package/docs-source/output/robots.txt +0 -14
  158. package/docs-source/output/sitemap.xml +0 -16
  159. package/docs-source/output/typography.css +0 -1
  160. package/docs-source/roadmap.md +0 -98
  161. package/docs-source/settings.md +0 -13
  162. package/getMetadata.js +0 -41
  163. package/jsconfig.json +0 -10
  164. package/regex.js +0 -36
  165. package/stylesheets/brand-colors.css +0 -119
@@ -1,8 +1,25 @@
1
1
  @layer reset, typography;
2
2
 
3
3
  @layer typography {
4
- html {
5
- font-family:
4
+
5
+
6
+ /*
7
+ FONT FAMILIES
8
+ */
9
+ :root {
10
+ /*
11
+ these variables declare a stack with system fallbacks
12
+ declare brand fonts with `--font-x-brand` to keep stack intact
13
+ */
14
+ --font-stack-serif: var(--font-serif-brand), var(--font-serif-system);
15
+ --font-stack-sans: var(--font-sans-brand), var(--font-sans-system);
16
+ --font-stack-monospace: var(--font-monospace-brand), var(--font-monospace-system);
17
+
18
+ --font-serif-brand: "Declare a brand serif font with this variable";
19
+ --font-sans-brand: "Declare a brand sans-serif font with this variable";
20
+ --font-monospace-brand: "Declare a brand monospace font with this variable";
21
+
22
+ --font-sans-system:
6
23
  -apple-system,
7
24
  BlinkMacSystemFont,
8
25
  avenir next,
@@ -16,199 +33,440 @@
16
33
  noto,
17
34
  arial,
18
35
  sans-serif;
36
+
37
+ --font-monospace-system:
38
+ Menlo,
39
+ Consolas,
40
+ Monaco,
41
+ Liberation Mono,
42
+ Lucida Console,
43
+ monospace;
44
+
45
+ --font-serif-system:
46
+ Iowan Old Style,
47
+ Apple Garamond,
48
+ Baskerville,
49
+ Times New Roman,
50
+ Droid Serif,
51
+ Times,
52
+ Source Serif Pro,
53
+ serif,
54
+ Apple Color Emoji,
55
+ Segoe UI Emoji,
56
+ Segoe UI Symbol;
57
+
58
+
59
+ /*
60
+ the recommended root font size on small screens (16px) and
61
+ large screens (18px)
62
+ */
63
+ --font-size-root: clamp(1rem, 0.875rem + 0.333vw, 1.125rem);
64
+
65
+ /*
66
+ the difference in size of h1 relative to the root
67
+ font size; increase or decrease this number for larger or
68
+ smaller headings
69
+ */
70
+ --font-size-delta: calc(1.5 * var(--font-size-root));
71
+
72
+ /*
73
+ the rate of decay from h1 to h6 font size, where h6 is
74
+ almost as small as the root font size; a higher number
75
+ makes subheadings smaller
76
+ */
77
+ --font-size-decay: 3;
78
+
79
+ /*
80
+ letter spacing of h1 and h6, with h2-h6 imputed
81
+ according to the decay variable
82
+ */
83
+ --letter-spacing-h1: -0.01ch;
84
+ --letter-spacing-h6: 0ch;
85
+ --letter-spacing-decay: 2;
86
+
87
+ /*
88
+ weight of h1 and h6, with h2-h6 imputed according
89
+ to the decay variable
90
+ */
91
+ --font-weight-h1: 800;
92
+ --font-weight-h6: 600;
93
+ --font-weight-decay: 2;
94
+
95
+ /*
96
+ *do not edit or overwrite*: calculations to impute
97
+ font sizes, weights, and spacing between h1 and h6
98
+ */
99
+ --font-size-h1: calc(var(--font-size-root) + var(--font-size-delta));
100
+ --font-size-h2: calc(var(--font-size-root) + calc(var(--font-size-delta) * pow(5 / 6, var(--font-size-decay))));
101
+ --font-size-h3: calc(var(--font-size-root) + calc(var(--font-size-delta) * pow(4 / 6, var(--font-size-decay))));
102
+ --font-size-h4: calc(var(--font-size-root) + calc(var(--font-size-delta) * pow(3 / 6, var(--font-size-decay))));
103
+ --font-size-h5: calc(var(--font-size-root) + calc(var(--font-size-delta) * pow(2 / 6, var(--font-size-decay))));
104
+ --font-size-h6: calc(var(--font-size-root) + calc(var(--font-size-delta) * pow(1 / 6, var(--font-size-decay))));
105
+ --letter-spacing-delta: calc(var(--letter-spacing-h1) - var(--letter-spacing-h6));
106
+ --letter-spacing-h2: calc(var(--letter-spacing-h6) + calc(var(--letter-spacing-delta) * pow(5 / 6, var(--letter-spacing-decay))));
107
+ --letter-spacing-h3: calc(var(--letter-spacing-h6) + calc(var(--letter-spacing-delta) * pow(4 / 6, var(--letter-spacing-decay))));
108
+ --letter-spacing-h4: calc(var(--letter-spacing-h6) + calc(var(--letter-spacing-delta) * pow(3 / 6, var(--letter-spacing-decay))));
109
+ --letter-spacing-h5: calc(var(--letter-spacing-h6) + calc(var(--letter-spacing-delta) * pow(2 / 6, var(--letter-spacing-decay))));
110
+ --font-weight-delta: calc(var(--font-weight-h1) - var(--font-weight-h6));
111
+ --font-weight-h2: calc(var(--font-weight-h6) + calc(var(--font-weight-delta) * pow(5 / 6, var(--font-weight-decay))));
112
+ --font-weight-h3: calc(var(--font-weight-h6) + calc(var(--font-weight-delta) * pow(4 / 6, var(--font-weight-decay))));
113
+ --font-weight-h4: calc(var(--font-weight-h6) + calc(var(--font-weight-delta) * pow(3 / 6, var(--font-weight-decay))));
114
+ --font-weight-h5: calc(var(--font-weight-h6) + calc(var(--font-weight-delta) * pow(2 / 6, var(--font-weight-decay))));
19
115
  }
20
116
 
117
+ html {
118
+ font-family: var(--font-stack-sans);
119
+ }
120
+
121
+ pre,
122
+ code,
123
+ kbd {
124
+ font-family: var(--font-stack-monospace);
125
+ }
126
+
127
+ /*
128
+ BOX SIZING
129
+ */
130
+
131
+ p,
21
132
  h1,
22
133
  h2,
23
134
  h3,
24
135
  h4,
25
136
  h5,
26
- h6 {
27
- margin-top: 0.5rem;
28
- margin-bottom: 1rem;
29
- text-rendering: optimizeLegibility;
30
- font-weight: 600;
31
- line-height: 1.1;
137
+ h6,
138
+ ul,
139
+ ol,
140
+ li,
141
+ dl,
142
+ dt,
143
+ dd,
144
+ table,
145
+ tbody,
146
+ th,
147
+ tr,
148
+ td,
149
+ blockquote,
150
+ a,
151
+ strong,
152
+ em,
153
+ i,
154
+ u,
155
+ q,
156
+ b,
157
+ s,
158
+ cite,
159
+ ins,
160
+ del,
161
+ dfn,
162
+ small,
163
+ address,
164
+ figcaption,
165
+ sub,
166
+ sup,
167
+ time,
168
+ kbd,
169
+ data,
170
+ samp,
171
+ var,
172
+ button {
173
+ text-box-trim: trim-both;
174
+ text-box-edge: cap alphabetic;
175
+ margin: 0;
32
176
  }
33
177
 
34
- h1 {
35
- font-size: 3rem;
36
- line-height: 1.2;
37
- font-weight: 800;
38
- }
178
+ /*
179
+ TEXT STYLES
180
+ */
39
181
 
40
- h2 {
41
- font-size: 2.6rem;
42
- margin-top: 3rem;
182
+ a {
183
+ text-decoration: none;
43
184
  }
44
185
 
45
- h3 {
46
- font-size: 2rem;
47
- margin-top: 3rem;
186
+ [rel=home] {
187
+ font-weight: bold;
48
188
  }
49
189
 
50
- h4 {
51
- font-size: 1.44rem;
190
+ table {
191
+ border-collapse: collapse;
52
192
  }
53
193
 
54
- h5 {
55
- font-size: 1.15rem;
194
+ time {
195
+ font-weight: bold;
56
196
  }
57
197
 
58
- h6 {
59
- font-size: 0.96rem;
198
+ figcaption {
199
+ font-style: italic;
60
200
  }
61
201
 
62
- article h1 {
63
- font-weight: 600;
64
- font-size: 2rem;
202
+ nav a:where([aria-current='page'], [aria-current='true']),
203
+ nav a:where([aria-current='page'], [aria-current='true']):hover {
204
+ cursor: default;
65
205
  }
66
206
 
67
- @media only screen and (max-width: 720px) {
68
- h1 {
69
- font-size: 2.5rem;
70
- }
71
-
72
- h2 {
73
- font-size: 2.1rem;
74
- }
207
+ b,
208
+ strong {
209
+ font-weight: bolder;
210
+ }
75
211
 
76
- h3 {
77
- font-size: 1.75rem;
78
- }
79
212
 
80
- h4 {
81
- font-size: 1.25rem;
82
- }
213
+ small {
214
+ font-size: 80%;
83
215
  }
84
216
 
85
- p {
86
- margin-top: 0;
217
+ sub,
218
+ sup {
219
+ font-size: 75%;
220
+ line-height: 0;
221
+ position: relative;
222
+ vertical-align: baseline;
87
223
  }
88
224
 
89
- ol,
90
- ul {
91
- /* padding-left: 0; */
92
- margin-top: 0;
225
+ sub {
226
+ bottom: -0.25em;
93
227
  }
94
228
 
95
- ul ul,
96
- ul ol,
97
- ol ol,
98
- ol ul {
99
- font-size: 100%;
100
- /* margin: 1rem 0 1rem 3rem; */
229
+ sup {
230
+ top: -0.5em;
101
231
  }
102
232
 
103
- /* Extra selector for specificity, see below */
104
- li>p:not(:last-child) {
105
- margin: 0;
106
- padding: 0;
107
- }
233
+ /*
234
+ CONTENT SPACING
235
+ */
108
236
 
109
- pre,
110
- code {
111
- font-family:
112
- Menlo,
113
- Consolas,
114
- Monaco,
115
- Liberation Mono,
116
- Lucida Console,
117
- monospace;
237
+ nav>a {
238
+ text-wrap: nowrap;
118
239
  }
119
240
 
120
- code {
121
- font-size: 0.9em;
122
- margin-inline: 0px;
123
- padding: 3px 4px;
124
- border-radius: 5px;
125
- }
241
+ /* main */
242
+ main {
126
243
 
127
- pre {
128
- padding: 1rem 1.5rem;
129
- border-radius: 5px;
130
- overflow-x: auto;
244
+ time {
245
+ display: block;
246
+ }
131
247
  }
132
248
 
133
- blockquote {
134
- margin: 1.5em 0;
135
- padding: 0 1.6em 0 1.6em;
249
+ main,
250
+ section {
251
+
252
+ row-gap: 2lh;
253
+ align-items: stretch;
254
+
255
+ /* flex layout blocks */
256
+ &,
257
+ blockquote,
258
+ aside,
259
+ article,
260
+ figure,
261
+ nav[aria-label=Contents],
262
+ ul,
263
+ ol {
264
+ display: flex;
265
+ flex-direction: column;
266
+ }
267
+
268
+
269
+ /* nav spacing */
270
+ nav[aria-label=Contents] {
271
+
272
+ ol,
273
+ ol,
274
+ li {
275
+ display: flex;
276
+ flex-direction: column;
277
+ justify-content: flex-start;
278
+ line-height: 1.2;
279
+ gap: 0.8lh;
280
+ }
281
+ }
136
282
  }
137
283
 
138
- a {
139
- text-decoration: none;
284
+ main {
285
+ row-gap: 1lh;
286
+
287
+ &>p {
288
+ margin-top: 1lh;
289
+ }
290
+
291
+ &>section {
292
+ margin-top: 1lh;
293
+ }
140
294
  }
141
295
 
142
- figcaption {
143
- margin-top: 0.5rem;
144
- font-style: italic;
296
+ /* content */
297
+ section {
298
+
299
+ /* image caption space */
300
+ figure {
301
+ gap: 1lh;
302
+ }
303
+
304
+ /* list spacing */
305
+ ul,
306
+ ol {
307
+ gap: 1lh;
308
+
309
+ /* nested list space */
310
+ ul,
311
+ ol {
312
+ padding-top: 1lh;
313
+ }
314
+ }
315
+
316
+ /* block spacing */
317
+ aside,
318
+ blockquote,
319
+ article {
320
+ gap: 1lh;
321
+ padding: clamp(1lh, 3vh, 1.5lh) clamp(2ch, 2vw, 3ch);
322
+ }
323
+
324
+ /* code spacing */
325
+ pre {
326
+ padding: 0.5lh 2ch;
327
+ overflow-x: auto;
328
+ }
329
+
330
+ /* table spacing */
331
+ td,
332
+ th {
333
+ padding: 0.5lh 2ch;
334
+ text-align: left;
335
+
336
+ &:first-child {
337
+ padding-left: 0;
338
+ }
339
+ }
145
340
  }
146
341
 
147
- article h2 {
148
- margin-top: 2rem;
342
+ body {
343
+ display: flex;
344
+ flex-direction: row;
345
+
346
+ &>* {
347
+ width: 100%;
348
+ }
149
349
  }
150
350
 
151
- th,
152
- td {
153
- padding: 12px 15px;
154
- text-align: left;
351
+ /* sidebar */
352
+ aside {
353
+ nav {
354
+
355
+ ul,
356
+ li {
357
+ display: flex;
358
+ flex-direction: column;
359
+ gap: 1.1em;
360
+ }
361
+ }
155
362
  }
156
363
 
157
- th:first-child,
158
- td:first-child {
159
- padding-left: 0;
364
+
365
+ /*
366
+ FONTS SIZING
367
+ */
368
+
369
+ body {
370
+ font-size: var(--font-size-root);
160
371
  }
161
372
 
162
- th:last-child,
163
- td:last-child {
164
- padding-right: 0;
373
+ h1 {
374
+ font-size: var(--font-size-h1);
375
+ letter-spacing: var(--letter-spacing-h1);
376
+ font-weight: var(--font-weight-h1);
377
+
378
+ main article &,
379
+ main aside &,
380
+ main blockquote & {
381
+ font-size: var(--font-size-h3);
382
+ }
165
383
  }
166
384
 
167
- hr {
168
- margin-top: 3rem;
169
- margin-bottom: 3.5rem;
170
- border-width: 0px;
385
+ h2 {
386
+ font-size: var(--font-size-h2);
387
+ letter-spacing: var(--letter-spacing-h2);
388
+ font-weight: var(--font-weight-h2);
389
+
390
+ main article &,
391
+ main aside &,
392
+ main blockquote & {
393
+ font-size: var(--font-size-h3);
394
+ }
171
395
  }
172
396
 
173
- time {
174
- display: block;
397
+ h3 {
398
+ font-size: var(--font-size-h3);
399
+ letter-spacing: var(--letter-spacing-h3);
400
+ font-weight: var(--font-weight-h3);
401
+
402
+ main article &,
403
+ main aside &,
404
+ main blockquote & {
405
+ font-size: var(--font-size-h4);
406
+ }
175
407
  }
176
408
 
177
- [aria-label=Breadcrumbs] a {
178
- font-size: 0.8em;
409
+ h4 {
410
+ font-size: var(--font-size-h4);
411
+ letter-spacing: var(--letter-spacing-h4);
412
+ font-weight: var(--font-weight-h4);
413
+
414
+ main article &,
415
+ main aside &,
416
+ main blockquote & {
417
+ font-size: var(--font-size-h5);
418
+ }
179
419
  }
180
420
 
181
- [aria-label=Breadcrumbs]>a:not(:last-child):after {
182
- margin-inline: 0.2em;
183
- content: '/';
421
+ h5 {
422
+ font-size: var(--font-size-h5);
423
+ letter-spacing: var(--letter-spacing-h5);
424
+ font-weight: var(--font-weight-h5);
425
+
426
+ main article &,
427
+ main aside &,
428
+ main blockquote & {
429
+ font-size: var(--font-size-h6);
430
+ }
184
431
  }
185
432
 
186
- nav>a {
187
- text-wrap: nowrap;
433
+ h6 {
434
+ font-size: var(--font-size-h6);
435
+ letter-spacing: var(--letter-spacing-h6);
436
+ font-weight: var(--font-weight-h6);
188
437
  }
189
438
 
190
- header a[rel=home] {
191
- font-weight: 900;
192
- font-size: 2.8em;
193
- text-box-trim: trim-both;
194
- text-box-edge: cap alphabetic;
439
+ [rel=home] {
440
+ font-size: var(--font-size-h3);
441
+ font-weight: var(--font-weight-h1);
442
+ letter-spacing: var(--letter-spacing-h1);
195
443
  }
196
444
 
197
- header #tagline {
198
- font-weight: 600;
199
- font-size: 2.5em;
200
- text-box-trim: trim-both;
201
- text-box-edge: cap alphabetic;
445
+
446
+ ul ul,
447
+ ul ol,
448
+ ol ol,
449
+ ol ul {
450
+ font-size: inherit;
202
451
  }
203
452
 
204
- nav a:where([aria-current='page'], [aria-current='true']),
205
- nav a:where([aria-current='page'], [aria-current='true']):hover {
206
- text-decoration: none;
207
- cursor: default;
453
+ /* main content */
454
+ main {
455
+ nav[aria-label=Breadcrumbs] {
456
+ font-size: 0.8em;
457
+ }
458
+
459
+ code,
460
+ kbd,
461
+ samp {
462
+ font-size: 0.9em;
463
+ }
208
464
  }
209
465
 
210
- aside h2 {
211
- margin: 0 0 0.5em 0;
212
- font-size: 1.1em;
466
+ /* header */
467
+ header {
468
+ a[rel=home] {
469
+ font-size: 2em;
470
+ }
213
471
  }
214
472
  }
package/systemPaths.js ADDED
@@ -0,0 +1,48 @@
1
+ import { createHash } from "node:crypto"
2
+ import os from "node:os"
3
+ import path from "node:path"
4
+
5
+ /**
6
+ * The OS-appropriate root for per-application data (not votive-specific
7
+ * yet - see systemDirectoryFor). Follows the XDG Base Directory spec on
8
+ * Linux/other POSIX systems, and each platform's own convention
9
+ * elsewhere - the same rough convention tools like npm/eslint follow
10
+ * for their own caches.
11
+ * @returns {string}
12
+ */
13
+ function systemDataRoot() {
14
+ if (process.platform === "darwin") {
15
+ return path.join(os.homedir(), "Library", "Application Support")
16
+ }
17
+ if (process.platform === "win32") {
18
+ return process.env.LOCALAPPDATA || path.join(os.homedir(), "AppData", "Local")
19
+ }
20
+ return process.env.XDG_DATA_HOME || path.join(os.homedir(), ".local", "share")
21
+ }
22
+
23
+ /**
24
+ * Computes a per-project system directory, so Vowel doesn't write
25
+ * `.votive.db`, a buffer cache, or its build output into a project
26
+ * folder a non-developer end user might be confused by. Keyed by a hash
27
+ * of the resolved `sourceFolder` path, so two projects never collide
28
+ * without a manually-assigned project name.
29
+ *
30
+ * Vowel's own concern, not votive's: votive takes whatever
31
+ * `databasePath`/`cacheDirectory`/`targetFolder` a config gives it and
32
+ * falls back to project-relative defaults otherwise. (It lived in votive
33
+ * and was exported from there once; nothing in votive ever called it.)
34
+ * The `sourceFolder` must already be resolved - `resolveProjectFolder`
35
+ * from votive, whose realpath step is what keeps the same folder reached
36
+ * through a symlink from hashing to a second directory; config.js does
37
+ * the two in that order. The `votive` path segment is kept as it was so
38
+ * existing system directories stay where they are.
39
+ * @param {string} sourceFolder
40
+ * @returns {string}
41
+ */
42
+ function systemDirectoryFor(sourceFolder) {
43
+ const key = createHash("sha1").update(path.resolve(sourceFolder)).digest("hex").slice(0, 16)
44
+ const root = systemDataRoot()
45
+ return path.join(root, "votive", key)
46
+ }
47
+
48
+ export { systemDirectoryFor }