@geekity/cms 0.40.0 → 0.41.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 (206) hide show
  1. package/admin/pages/appearance/look.njk +135 -0
  2. package/admin/pages/dashboard/home.njk +9 -3
  3. package/admin/pages/documents/conflict.njk +35 -10
  4. package/admin/pages/documents/editor.njk +28 -0
  5. package/admin/pages/documents/list.njk +44 -1
  6. package/admin/pages/settings/general.njk +4 -0
  7. package/admin/pages/users/edit.njk +1 -1
  8. package/admin/src/admin.css +32 -0
  9. package/admin/static/admin.css +197 -3
  10. package/admin/static/dashboard.js +51 -23
  11. package/admin/static/editor.js +19 -19
  12. package/dist/admin/autosave-client.d.ts +85 -0
  13. package/dist/admin/autosave-client.d.ts.map +1 -0
  14. package/dist/admin/autosave-client.js +218 -0
  15. package/dist/admin/autosave-client.js.map +1 -0
  16. package/dist/admin/autosave.d.ts +11 -0
  17. package/dist/admin/autosave.d.ts.map +1 -0
  18. package/dist/admin/autosave.js +76 -0
  19. package/dist/admin/autosave.js.map +1 -0
  20. package/dist/admin/dashboard.d.ts +2 -2
  21. package/dist/admin/dashboard.d.ts.map +1 -1
  22. package/dist/admin/dashboard.js +23 -15
  23. package/dist/admin/dashboard.js.map +1 -1
  24. package/dist/admin/documents.d.ts.map +1 -1
  25. package/dist/admin/documents.js +205 -16
  26. package/dist/admin/documents.js.map +1 -1
  27. package/dist/admin/flash.d.ts +2 -0
  28. package/dist/admin/flash.d.ts.map +1 -1
  29. package/dist/admin/flash.js +12 -0
  30. package/dist/admin/flash.js.map +1 -1
  31. package/dist/admin/focus-mode.d.ts +39 -0
  32. package/dist/admin/focus-mode.d.ts.map +1 -0
  33. package/dist/admin/focus-mode.js +81 -0
  34. package/dist/admin/focus-mode.js.map +1 -0
  35. package/dist/admin/look.d.ts +12 -0
  36. package/dist/admin/look.d.ts.map +1 -0
  37. package/dist/admin/look.js +179 -0
  38. package/dist/admin/look.js.map +1 -0
  39. package/dist/admin/menu.d.ts.map +1 -1
  40. package/dist/admin/menu.js +5 -3
  41. package/dist/admin/menu.js.map +1 -1
  42. package/dist/admin/preview.d.ts.map +1 -1
  43. package/dist/admin/preview.js +1 -0
  44. package/dist/admin/preview.js.map +1 -1
  45. package/dist/admin/routes.d.ts.map +1 -1
  46. package/dist/admin/routes.js +6 -4
  47. package/dist/admin/routes.js.map +1 -1
  48. package/dist/admin/settings-fields.d.ts +1 -1
  49. package/dist/admin/settings-fields.d.ts.map +1 -1
  50. package/dist/admin/settings-fields.js +1 -0
  51. package/dist/admin/settings-fields.js.map +1 -1
  52. package/dist/admin/settings-general.d.ts.map +1 -1
  53. package/dist/admin/settings-general.js +1 -0
  54. package/dist/admin/settings-general.js.map +1 -1
  55. package/dist/admin/templates.d.ts +1 -0
  56. package/dist/admin/templates.d.ts.map +1 -1
  57. package/dist/admin/templates.js +1 -0
  58. package/dist/admin/templates.js.map +1 -1
  59. package/dist/admin/users.d.ts.map +1 -1
  60. package/dist/admin/users.js +2 -0
  61. package/dist/admin/users.js.map +1 -1
  62. package/dist/autosave/index.d.ts +5 -0
  63. package/dist/autosave/index.d.ts.map +1 -0
  64. package/dist/autosave/index.js +3 -0
  65. package/dist/autosave/index.js.map +1 -0
  66. package/dist/autosave/key.d.ts +13 -0
  67. package/dist/autosave/key.d.ts.map +1 -0
  68. package/dist/autosave/key.js +29 -0
  69. package/dist/autosave/key.js.map +1 -0
  70. package/dist/autosave/store.d.ts +23 -0
  71. package/dist/autosave/store.d.ts.map +1 -0
  72. package/dist/autosave/store.js +114 -0
  73. package/dist/autosave/store.js.map +1 -0
  74. package/dist/cli.js +1 -1
  75. package/dist/cli.js.map +1 -1
  76. package/dist/cms/app.d.ts.map +1 -1
  77. package/dist/cms/app.js +1 -0
  78. package/dist/cms/app.js.map +1 -1
  79. package/dist/cms/boot.d.ts.map +1 -1
  80. package/dist/cms/boot.js +2 -0
  81. package/dist/cms/boot.js.map +1 -1
  82. package/dist/cms/create.d.ts +6 -0
  83. package/dist/cms/create.d.ts.map +1 -1
  84. package/dist/cms/create.js +1 -0
  85. package/dist/cms/create.js.map +1 -1
  86. package/dist/cms/services.d.ts +2 -0
  87. package/dist/cms/services.d.ts.map +1 -1
  88. package/dist/cms/services.js +9 -0
  89. package/dist/cms/services.js.map +1 -1
  90. package/dist/content/post-type.d.ts +1 -0
  91. package/dist/content/post-type.d.ts.map +1 -1
  92. package/dist/content/post-type.js +1 -1
  93. package/dist/content/post-type.js.map +1 -1
  94. package/dist/content/write.d.ts +8 -0
  95. package/dist/content/write.d.ts.map +1 -1
  96. package/dist/content/write.js +1 -1
  97. package/dist/content/write.js.map +1 -1
  98. package/dist/files/data-files.d.ts +2 -0
  99. package/dist/files/data-files.d.ts.map +1 -1
  100. package/dist/files/data-files.js +12 -0
  101. package/dist/files/data-files.js.map +1 -1
  102. package/dist/fonts/css.d.ts +25 -0
  103. package/dist/fonts/css.d.ts.map +1 -0
  104. package/dist/fonts/css.js +88 -0
  105. package/dist/fonts/css.js.map +1 -0
  106. package/dist/fonts/family.d.ts +23 -0
  107. package/dist/fonts/family.d.ts.map +1 -0
  108. package/dist/fonts/family.js +41 -0
  109. package/dist/fonts/family.js.map +1 -0
  110. package/dist/fonts/index.d.ts +10 -0
  111. package/dist/fonts/index.d.ts.map +1 -0
  112. package/dist/fonts/index.js +6 -0
  113. package/dist/fonts/index.js.map +1 -0
  114. package/dist/fonts/job.d.ts +20 -0
  115. package/dist/fonts/job.d.ts.map +1 -0
  116. package/dist/fonts/job.js +49 -0
  117. package/dist/fonts/job.js.map +1 -0
  118. package/dist/fonts/roles.d.ts +53 -0
  119. package/dist/fonts/roles.d.ts.map +1 -0
  120. package/dist/fonts/roles.js +64 -0
  121. package/dist/fonts/roles.js.map +1 -0
  122. package/dist/fonts/store.d.ts +69 -0
  123. package/dist/fonts/store.d.ts.map +1 -0
  124. package/dist/fonts/store.js +237 -0
  125. package/dist/fonts/store.js.map +1 -0
  126. package/dist/plugin.d.ts +1 -1
  127. package/dist/plugin.d.ts.map +1 -1
  128. package/dist/settings/registry.d.ts.map +1 -1
  129. package/dist/settings/registry.js +5 -1
  130. package/dist/settings/registry.js.map +1 -1
  131. package/dist/settings/types.d.ts +1 -1
  132. package/dist/settings/types.d.ts.map +1 -1
  133. package/dist/site/dashboard-layout.d.ts +33 -26
  134. package/dist/site/dashboard-layout.d.ts.map +1 -1
  135. package/dist/site/dashboard-layout.js +94 -39
  136. package/dist/site/dashboard-layout.js.map +1 -1
  137. package/dist/site/namespace.d.ts +5 -0
  138. package/dist/site/namespace.d.ts.map +1 -1
  139. package/dist/site/namespace.js +40 -1
  140. package/dist/site/namespace.js.map +1 -1
  141. package/dist/store/schema.d.ts.map +1 -1
  142. package/dist/store/schema.js +4 -0
  143. package/dist/store/schema.js.map +1 -1
  144. package/dist/store/sessions.d.ts +2 -1
  145. package/dist/store/sessions.d.ts.map +1 -1
  146. package/dist/store/sessions.js +30 -12
  147. package/dist/store/sessions.js.map +1 -1
  148. package/dist/theme/font-family.d.ts +13 -0
  149. package/dist/theme/font-family.d.ts.map +1 -0
  150. package/dist/theme/font-family.js +21 -0
  151. package/dist/theme/font-family.js.map +1 -0
  152. package/dist/theme/scheme-tokens.d.ts +50 -0
  153. package/dist/theme/scheme-tokens.d.ts.map +1 -0
  154. package/dist/theme/scheme-tokens.js +240 -0
  155. package/dist/theme/scheme-tokens.js.map +1 -0
  156. package/dist/theme/site-data.d.ts +12 -0
  157. package/dist/theme/site-data.d.ts.map +1 -1
  158. package/dist/theme/site-data.js +15 -0
  159. package/dist/theme/site-data.js.map +1 -1
  160. package/dist/theme/themes.d.ts +74 -0
  161. package/dist/theme/themes.d.ts.map +1 -1
  162. package/dist/theme/themes.js +100 -9
  163. package/dist/theme/themes.js.map +1 -1
  164. package/dist/web/embed.d.ts.map +1 -1
  165. package/dist/web/embed.js +2 -1
  166. package/dist/web/embed.js.map +1 -1
  167. package/dist/web/env.d.ts +2 -0
  168. package/dist/web/env.d.ts.map +1 -1
  169. package/dist/web/feed-source.d.ts +1 -1
  170. package/dist/web/feed-source.d.ts.map +1 -1
  171. package/dist/web/feed-source.js +1 -1
  172. package/dist/web/feed-source.js.map +1 -1
  173. package/dist/web/font-routes.d.ts +13 -0
  174. package/dist/web/font-routes.d.ts.map +1 -0
  175. package/dist/web/font-routes.js +27 -0
  176. package/dist/web/font-routes.js.map +1 -0
  177. package/dist/web/maintenance.d.ts.map +1 -1
  178. package/dist/web/maintenance.js +5 -2
  179. package/dist/web/maintenance.js.map +1 -1
  180. package/dist/web/manifest.d.ts +8 -5
  181. package/dist/web/manifest.d.ts.map +1 -1
  182. package/dist/web/manifest.js +10 -7
  183. package/dist/web/manifest.js.map +1 -1
  184. package/dist/web/oembed.d.ts +17 -3
  185. package/dist/web/oembed.d.ts.map +1 -1
  186. package/dist/web/oembed.js +68 -26
  187. package/dist/web/oembed.js.map +1 -1
  188. package/dist/web/render.d.ts +19 -2
  189. package/dist/web/render.d.ts.map +1 -1
  190. package/dist/web/render.js +30 -3
  191. package/dist/web/render.js.map +1 -1
  192. package/dist/web/routes.d.ts.map +1 -1
  193. package/dist/web/routes.js +3 -0
  194. package/dist/web/routes.js.map +1 -1
  195. package/dist/webmention/fetch-public.d.ts +6 -0
  196. package/dist/webmention/fetch-public.d.ts.map +1 -1
  197. package/dist/webmention/fetch-public.js +6 -1
  198. package/dist/webmention/fetch-public.js.map +1 -1
  199. package/package.json +1 -1
  200. package/themes/default/layouts/base.njk +28 -16
  201. package/themes/default/layouts/page.njk +4 -8
  202. package/themes/default/partials/bio.njk +1 -1
  203. package/themes/default/partials/contact-form.njk +1 -1
  204. package/themes/default/src/style.css +326 -15
  205. package/themes/default/static/style.css +489 -3
  206. package/themes/default/theme.json +23 -1
@@ -4,11 +4,12 @@
4
4
  * The source. `pnpm build` compiles it with Tailwind v4 to `static/style.css`,
5
5
  * which is what a page loads and what the package ships; that file is a build
6
6
  * product and gitignored. Nothing about Tailwind reaches a reader: no script,
7
- * no CDN, no web font, one stylesheet.
7
+ * no CDN, one stylesheet. A site may choose Google Fonts for headings and
8
+ * body; the site serves their files itself, so nothing third-party loads.
8
9
  *
9
10
  * One warm column at 42rem, serif throughout, sans reserved for small labels.
10
11
  * Only an article has a headline; every other kind of post is its words under
11
- * a small-caps kicker that names the kind. Dark mode follows the system.
12
+ * a small-caps kicker that names the kind.
12
13
  *
13
14
  * The look lives here, on the theme's semantic class names, through `@apply`:
14
15
  * the templates carry no utility classes, so a site theme that has CSS for the
@@ -19,18 +20,39 @@
19
20
  * "Colours" in docs/theme/page-shell.md). `src/web/theme-colors.test.ts` reads
20
21
  * them out of the compiled file and computes the WCAG 2.2 ratio of every pair
21
22
  * the design puts on screen: every run of text at 7:1, every border a reader
22
- * relies on at 3:1, in both schemes. `--color-rule` is the one exception, a
23
- * decorative hairline nothing a reader needs is drawn with.
23
+ * relies on at 3:1, in every scheme and both modes. `--color-rule` is the one
24
+ * exception, a decorative hairline nothing a reader needs is drawn with.
24
25
  */
25
26
  @import 'tailwindcss' source(none);
26
27
  @source '../layouts';
27
28
  @source '../partials';
28
29
 
30
+ @custom-variant dark {
31
+ @media (prefers-color-scheme: dark) {
32
+ &:not([data-mode='light']) {
33
+ @slot;
34
+ }
35
+ }
36
+
37
+ &[data-mode='dark'] {
38
+ @slot;
39
+ }
40
+ }
41
+
29
42
  :root {
30
- /* Light and dark are both drawn below, so a browser may paint its own form
31
- controls, scrollbars and spellcheck marks to match. */
32
43
  color-scheme: light dark;
44
+ }
45
+
46
+ :root[data-mode='light'] {
47
+ color-scheme: light;
48
+ }
49
+
50
+ :root[data-mode='dark'] {
51
+ color-scheme: dark;
52
+ }
33
53
 
54
+ :root,
55
+ :root[data-scheme='paper'] {
34
56
  /* `body` is the paper and `text` the ink. `muted` is every small line of
35
57
  sans and every quote; `primary` is links, the kind a kicker names and the
36
58
  citation rule; `secondary` is tags and the focus outline. `rule` is a
@@ -72,10 +94,8 @@
72
94
  --color-code-meta: #6d453c; /* base0F, stock #a3685a */
73
95
  --color-code-added-background: #dcedd3;
74
96
  --color-code-removed-background: #f5d8d6;
75
- }
76
97
 
77
- @media (prefers-color-scheme: dark) {
78
- :root {
98
+ @variant dark {
79
99
  --color-body: #171412;
80
100
  --color-text: #ece6de;
81
101
  --color-muted: #b2aaa0;
@@ -108,6 +128,286 @@
108
128
  }
109
129
  }
110
130
 
131
+ :root[data-scheme='slate'] {
132
+ --color-body: #f4f7fb;
133
+ --color-text: #161b20;
134
+ --color-muted: #4b4f54;
135
+ --color-primary: #0f4e94;
136
+ --color-secondary: #59447b;
137
+ --color-rule: #dadee3;
138
+ --color-edge: #82868a;
139
+ --color-base: #edf1f6;
140
+ --color-base-2: #f3f2f5;
141
+ --color-base-3: #ffffff;
142
+ --color-code-background: #edf1f6;
143
+ --color-code-text: #161b20;
144
+ --color-error: #9d121d;
145
+ --color-code-comment: #4e4e4e;
146
+ --color-code-tag: #514e4f;
147
+ --color-code-name: #991c21;
148
+ --color-code-literal: #7c3e03;
149
+ --color-code-class: #614c02;
150
+ --color-code-string: #405603;
151
+ --color-code-support: #045858;
152
+ --color-code-function: #1f4f8a;
153
+ --color-code-keyword: #6b3a7f;
154
+ --color-code-meta: #6d443a;
155
+ --color-code-added-background: #d6f0d6;
156
+ --color-code-removed-background: #fedbda;
157
+
158
+ @variant dark {
159
+ --color-body: #12161c;
160
+ --color-text: #e3e8f0;
161
+ --color-muted: #a3adba;
162
+ --color-primary: #80b7fe;
163
+ --color-secondary: #b7a2e0;
164
+ --color-rule: #212831;
165
+ --color-edge: #676e77;
166
+ --color-base: #181f27;
167
+ --color-base-2: #1e1d22;
168
+ --color-base-3: #21272f;
169
+ --color-code-background: #181f27;
170
+ --color-code-text: #e3e8f0;
171
+ --color-error: #ff8a83;
172
+ --color-code-comment: #acacac;
173
+ --color-code-tag: #adabab;
174
+ --color-code-name: #ff8a83;
175
+ --color-code-literal: #f29551;
176
+ --color-code-class: #cca83c;
177
+ --color-code-string: #95b84d;
178
+ --color-code-support: #5bbaba;
179
+ --color-code-function: #7caff1;
180
+ --color-code-keyword: #cd98e4;
181
+ --color-code-meta: #d1a195;
182
+ --color-code-added-background: #213622;
183
+ --color-code-removed-background: #442727;
184
+ }
185
+ }
186
+
187
+ :root[data-scheme='forest'] {
188
+ --color-body: #f5f7ed;
189
+ --color-text: #1a1b15;
190
+ --color-muted: #4d4f42;
191
+ --color-primary: #035b27;
192
+ --color-secondary: #734301;
193
+ --color-rule: #dcdfd0;
194
+ --color-edge: #84867b;
195
+ --color-base: #eff1e4;
196
+ --color-base-2: #eef3ef;
197
+ --color-base-3: #ffffff;
198
+ --color-code-background: #eff1e4;
199
+ --color-code-text: #1a1b15;
200
+ --color-error: #9c111c;
201
+ --color-code-comment: #4e4e4e;
202
+ --color-code-tag: #504d4e;
203
+ --color-code-name: #991b21;
204
+ --color-code-literal: #7b3d02;
205
+ --color-code-class: #604b01;
206
+ --color-code-string: #3f5501;
207
+ --color-code-support: #025757;
208
+ --color-code-function: #1e4e89;
209
+ --color-code-keyword: #6a3a7f;
210
+ --color-code-meta: #6c4339;
211
+ --color-code-added-background: #d6f0d6;
212
+ --color-code-removed-background: #fedbda;
213
+
214
+ @variant dark {
215
+ --color-body: #0f1912;
216
+ --color-text: #e2eae4;
217
+ --color-muted: #9db1a3;
218
+ --color-primary: #75c687;
219
+ --color-secondary: #daa168;
220
+ --color-rule: #1c2c22;
221
+ --color-edge: #627166;
222
+ --color-base: #142219;
223
+ --color-base-2: #182020;
224
+ --color-base-3: #1c2a21;
225
+ --color-code-background: #142219;
226
+ --color-code-text: #e2eae4;
227
+ --color-error: #fe8c84;
228
+ --color-code-comment: #acacac;
229
+ --color-code-tag: #aeacac;
230
+ --color-code-name: #fe8c84;
231
+ --color-code-literal: #f39651;
232
+ --color-code-class: #cca83c;
233
+ --color-code-string: #95b84d;
234
+ --color-code-support: #5cbbba;
235
+ --color-code-function: #7caff1;
236
+ --color-code-keyword: #cd99e5;
237
+ --color-code-meta: #d1a195;
238
+ --color-code-added-background: #213622;
239
+ --color-code-removed-background: #442727;
240
+ }
241
+ }
242
+
243
+ :root[data-scheme='plum'] {
244
+ --color-body: #fbf3fa;
245
+ --color-text: #1e191d;
246
+ --color-muted: #544b53;
247
+ --color-primary: #822973;
248
+ --color-secondary: #3f488b;
249
+ --color-rule: #e4d9e2;
250
+ --color-edge: #8a8289;
251
+ --color-base: #f6ecf5;
252
+ --color-base-2: #f6f0f1;
253
+ --color-base-3: #ffffff;
254
+ --color-code-background: #f6ecf5;
255
+ --color-code-text: #1e191d;
256
+ --color-error: #9c111c;
257
+ --color-code-comment: #4d4d4d;
258
+ --color-code-tag: #504d4e;
259
+ --color-code-name: #981b20;
260
+ --color-code-literal: #7b3d02;
261
+ --color-code-class: #604b01;
262
+ --color-code-string: #3f5501;
263
+ --color-code-support: #025757;
264
+ --color-code-function: #1e4e89;
265
+ --color-code-keyword: #6a397e;
266
+ --color-code-meta: #6c4339;
267
+ --color-code-added-background: #d6f0d6;
268
+ --color-code-removed-background: #fedbda;
269
+
270
+ @variant dark {
271
+ --color-body: #1b121d;
272
+ --color-text: #ece5ed;
273
+ --color-muted: #b7a5bc;
274
+ --color-primary: #f493e0;
275
+ --color-secondary: #98a6f2;
276
+ --color-rule: #302233;
277
+ --color-edge: #766879;
278
+ --color-base: #251928;
279
+ --color-base-2: #251b1e;
280
+ --color-base-3: #2e2131;
281
+ --color-code-background: #251928;
282
+ --color-code-text: #ece5ed;
283
+ --color-error: #ff8880;
284
+ --color-code-comment: #ababab;
285
+ --color-code-tag: #acaaab;
286
+ --color-code-name: #ff8880;
287
+ --color-code-literal: #f1944f;
288
+ --color-code-class: #cba63a;
289
+ --color-code-string: #94b74c;
290
+ --color-code-support: #5ab9b8;
291
+ --color-code-function: #7aadef;
292
+ --color-code-keyword: #cb97e3;
293
+ --color-code-meta: #d0a093;
294
+ --color-code-added-background: #213622;
295
+ --color-code-removed-background: #442727;
296
+ }
297
+ }
298
+
299
+ :root[data-scheme='ocean'] {
300
+ --color-body: #eef9fb;
301
+ --color-text: #141c1d;
302
+ --color-muted: #435153;
303
+ --color-primary: #04585c;
304
+ --color-secondary: #184f90;
305
+ --color-rule: #d2e1e3;
306
+ --color-edge: #7c888a;
307
+ --color-base: #e5f4f6;
308
+ --color-base-2: #eff3f7;
309
+ --color-base-3: #ffffff;
310
+ --color-code-background: #e5f4f6;
311
+ --color-code-text: #141c1d;
312
+ --color-error: #9e131d;
313
+ --color-code-comment: #4f4f4f;
314
+ --color-code-tag: #514e4f;
315
+ --color-code-name: #991c21;
316
+ --color-code-literal: #7d3e00;
317
+ --color-code-class: #624c03;
318
+ --color-code-string: #405603;
319
+ --color-code-support: #045858;
320
+ --color-code-function: #1f4f8a;
321
+ --color-code-keyword: #6b3b80;
322
+ --color-code-meta: #6d443a;
323
+ --color-code-added-background: #d6f0d6;
324
+ --color-code-removed-background: #fedbda;
325
+
326
+ @variant dark {
327
+ --color-body: #08191f;
328
+ --color-text: #e0eaee;
329
+ --color-muted: #91b1be;
330
+ --color-primary: #57c5cb;
331
+ --color-secondary: #77aff7;
332
+ --color-rule: #122b35;
333
+ --color-edge: #59717a;
334
+ --color-base: #0a212a;
335
+ --color-base-2: #1a1e26;
336
+ --color-base-3: #122a33;
337
+ --color-code-background: #0a212a;
338
+ --color-code-text: #e0eaee;
339
+ --color-error: #ff8a83;
340
+ --color-code-comment: #acacac;
341
+ --color-code-tag: #adabab;
342
+ --color-code-name: #ff8a83;
343
+ --color-code-literal: #f29551;
344
+ --color-code-class: #cca83c;
345
+ --color-code-string: #95b84d;
346
+ --color-code-support: #5bbaba;
347
+ --color-code-function: #7caff1;
348
+ --color-code-keyword: #cd98e4;
349
+ --color-code-meta: #d1a195;
350
+ --color-code-added-background: #213622;
351
+ --color-code-removed-background: #442727;
352
+ }
353
+ }
354
+
355
+ :root[data-scheme='ink'] {
356
+ --color-body: #ffffff;
357
+ --color-text: #030303;
358
+ --color-muted: #3f3f3f;
359
+ --color-primary: #1b388a;
360
+ --color-secondary: #3f3f3f;
361
+ --color-rule: #e6e6e6;
362
+ --color-edge: #737373;
363
+ --color-base: #f9f9f9;
364
+ --color-base-2: #fbfbfb;
365
+ --color-base-3: #ffffff;
366
+ --color-code-background: #f9f9f9;
367
+ --color-code-text: #030303;
368
+ --color-error: #840111;
369
+ --color-code-comment: #3f3f3f;
370
+ --color-code-tag: #3f3e3f;
371
+ --color-code-name: #6c2927;
372
+ --color-code-literal: #61320b;
373
+ --color-code-class: #4e3d02;
374
+ --color-code-string: #334408;
375
+ --color-code-support: #114646;
376
+ --color-code-function: #264061;
377
+ --color-code-keyword: #4f345b;
378
+ --color-code-meta: #513933;
379
+ --color-code-added-background: #d6f0d6;
380
+ --color-code-removed-background: #fedbda;
381
+
382
+ @variant dark {
383
+ --color-body: #0d0d0d;
384
+ --color-text: #f5f5f5;
385
+ --color-muted: #c2c2c2;
386
+ --color-primary: #aec8fe;
387
+ --color-secondary: #c2c2c2;
388
+ --color-rule: #1e1e1e;
389
+ --color-edge: #7f7f7f;
390
+ --color-base: #151515;
391
+ --color-base-2: #151515;
392
+ --color-base-3: #1d1d1d;
393
+ --color-code-background: #151515;
394
+ --color-code-text: #f5f5f5;
395
+ --color-error: #ffaaa2;
396
+ --color-code-comment: #c2c2c2;
397
+ --color-code-tag: #c1c0c0;
398
+ --color-code-name: #fcaba4;
399
+ --color-code-literal: #edb48d;
400
+ --color-code-class: #d4bf86;
401
+ --color-code-string: #b1c88c;
402
+ --color-code-support: #96cac9;
403
+ --color-code-function: #a4c3eb;
404
+ --color-code-keyword: #d4b5e3;
405
+ --color-code-meta: #d8bab2;
406
+ --color-code-added-background: #213622;
407
+ --color-code-removed-background: #442727;
408
+ }
409
+ }
410
+
111
411
  /* Tailwind's utilities, drawn from the tokens above rather than its own
112
412
  palette, which is cleared so a utility can only name a colour of this
113
413
  design. `inline` puts the `var()` in the utility, so the scheme the custom
@@ -124,7 +424,8 @@
124
424
  --color-surface: var(--color-base);
125
425
  --color-code: var(--color-code-background);
126
426
  --color-error: var(--color-error);
127
- --font-serif: 'Iowan Old Style', 'Palatino Linotype', Palatino, 'Book Antiqua', Georgia, serif;
427
+ --font-heading: var(--font-heading);
428
+ --font-body: var(--font-body);
128
429
  --font-sans: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
129
430
  --font-mono: ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace;
130
431
  }
@@ -162,6 +463,12 @@
162
463
  }
163
464
 
164
465
  @layer base {
466
+ :root {
467
+ --font-heading:
468
+ 'Iowan Old Style', 'Palatino Linotype', Palatino, 'Book Antiqua', Georgia, serif;
469
+ --font-body: 'Iowan Old Style', 'Palatino Linotype', Palatino, 'Book Antiqua', Georgia, serif;
470
+ }
471
+
165
472
  /* `scrollbar-gutter` keeps the scrollbar's room whether or not the page is
166
473
  long enough to scroll, so moving between a short page and a long one does
167
474
  not shift the column sideways. */
@@ -173,7 +480,7 @@
173
480
  }
174
481
 
175
482
  body {
176
- @apply bg-paper font-serif leading-relaxed text-ink antialiased;
483
+ @apply bg-paper font-body leading-relaxed text-ink antialiased;
177
484
  }
178
485
 
179
486
  h1,
@@ -182,7 +489,7 @@
182
489
  h4,
183
490
  h5,
184
491
  h6 {
185
- @apply font-bold tracking-tight;
492
+ @apply font-heading font-bold tracking-tight;
186
493
  text-wrap: balance;
187
494
  }
188
495
 
@@ -285,7 +592,11 @@
285
592
  }
286
593
 
287
594
  .header-link-home {
288
- @apply target text-lg font-bold;
595
+ @apply target font-heading text-lg font-bold;
596
+ }
597
+
598
+ .site-icon {
599
+ @apply me-[0.3em] inline-block size-[1em] rounded-[0.18em] align-[-0.12em];
289
600
  }
290
601
 
291
602
  .site-tagline {
@@ -923,7 +1234,7 @@
923
1234
  }
924
1235
 
925
1236
  .backlinks-title {
926
- @apply mb-2 text-[0.72rem] font-normal tracking-[0.14em] text-muted uppercase;
1237
+ @apply mb-2 font-sans text-[0.72rem] font-normal tracking-[0.14em] text-muted uppercase;
927
1238
  }
928
1239
 
929
1240
  .backlinks ol {
@@ -1161,7 +1472,7 @@
1161
1472
  }
1162
1473
 
1163
1474
  :is(.comment-respond, .search-form) :is(input:not([type='checkbox'], [type='hidden']), textarea) {
1164
- @apply block w-full rounded-md border border-edge bg-surface px-3 py-2 font-serif text-base text-ink;
1475
+ @apply block w-full rounded-md border border-edge bg-surface px-3 py-2 font-body text-base text-ink;
1165
1476
  }
1166
1477
 
1167
1478
  /* A field the reader has left invalid, or one a refused submission marked,