@heroiclands/package-build 23.13.0 → 24.0.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 (233) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +2 -1
  3. package/assets/preview/gitea.ini +12 -7
  4. package/assets/styles/content-base.css +150 -1
  5. package/bin/content-commands.mjs +356 -210
  6. package/bin/package-build.mjs +3 -2
  7. package/ci/check-banners.mjs +7 -7
  8. package/config.mjs +21 -6
  9. package/content-config.mjs +199 -80
  10. package/docs/api.md +93 -72
  11. package/docs/authoring/links-and-markup.md +316 -78
  12. package/docs/commands.md +244 -78
  13. package/docs/configuration.md +210 -102
  14. package/docs/content-format.md +2 -2
  15. package/docs/diagnostics.md +2 -2
  16. package/docs/getting-started.md +1 -1
  17. package/docs/guides/icons.md +1 -1
  18. package/docs/guides/module-project.md +5 -8
  19. package/docs/guides/release-and-deploy.md +2 -2
  20. package/docs/guides/site.md +112 -23
  21. package/docs/guides/system-project.md +1 -1
  22. package/docs/guides/writing-in-invented-scripts.md +1247 -0
  23. package/docs/index.md +1 -0
  24. package/docs/project-setup.md +28 -30
  25. package/docs/reference/format-details.md +589 -308
  26. package/docs/reference/note-types.md +40 -10
  27. package/docs/reference/theme-pages.md +127 -108
  28. package/docs/source-preview.md +15 -1
  29. package/engine/asset-shipping.mjs +22 -10
  30. package/engine/base-compiler.mjs +62 -104
  31. package/engine/changelog-lint.mjs +1 -1
  32. package/engine/content-address.mjs +1 -1
  33. package/engine/content-alerts.mjs +8 -4
  34. package/engine/content-blocks.mjs +26 -11
  35. package/engine/content-embeds.mjs +1 -1
  36. package/engine/content-expand.mjs +376 -0
  37. package/engine/content-figures.mjs +13 -6
  38. package/engine/content-format.yaml +8 -0
  39. package/engine/content-glyphs.mjs +213 -0
  40. package/engine/content-images.mjs +6 -7
  41. package/engine/content-links.mjs +3 -3
  42. package/engine/content-lint.mjs +1 -1
  43. package/engine/content-render.mjs +453 -0
  44. package/engine/content-scripts.mjs +326 -27
  45. package/engine/content-spans.mjs +4 -1
  46. package/engine/content-styles.mjs +91 -0
  47. package/engine/content-symbols.mjs +186 -0
  48. package/engine/content-verse.mjs +6 -18
  49. package/engine/core-report.mjs +169 -0
  50. package/engine/core-vocabulary.mjs +208 -0
  51. package/engine/dictionary-html.mjs +119 -0
  52. package/engine/field-reference.mjs +1 -1
  53. package/engine/frontmatter-lint.mjs +1 -1
  54. package/engine/heading-attributes.mjs +89 -0
  55. package/engine/helpers.mjs +61 -101
  56. package/engine/homepage.mjs +17 -29
  57. package/engine/html-minify.mjs +70 -0
  58. package/engine/index.mjs +8 -5
  59. package/engine/language-rows.mjs +8 -2
  60. package/engine/language-terms.mjs +115 -14
  61. package/engine/language-words.mjs +12 -0
  62. package/engine/logographic.mjs +255 -0
  63. package/engine/map-lexicon.mjs +221 -25
  64. package/engine/map-places.mjs +5 -4
  65. package/engine/markdown-expressions.mjs +0 -2
  66. package/engine/markdownlint-run.mjs +9 -3
  67. package/engine/markup-validation.mjs +21 -0
  68. package/engine/metre-declaration.mjs +134 -0
  69. package/engine/note-matter.mjs +2 -2
  70. package/engine/note-vocabulary.mjs +187 -3
  71. package/engine/pdf-build.mjs +68 -133
  72. package/engine/pdf-render.mjs +102 -44
  73. package/engine/post-fields.mjs +157 -0
  74. package/engine/preview-index.mjs +130 -0
  75. package/engine/preview-source.mjs +450 -0
  76. package/engine/project-init.mjs +5 -12
  77. package/engine/prose-config.mjs +3 -3
  78. package/engine/run-words.mjs +3 -2
  79. package/engine/script-emphasis-terms.mjs +38 -0
  80. package/engine/script-emphasis.mjs +295 -0
  81. package/engine/script-font-delivery.mjs +4 -4
  82. package/engine/site-build.mjs +259 -314
  83. package/engine/site-config.mjs +26 -238
  84. package/engine/site-files.mjs +175 -0
  85. package/engine/site-index.mjs +9 -4
  86. package/engine/site-preview.mjs +50 -523
  87. package/engine/site-render.mjs +593 -0
  88. package/engine/site-root.mjs +22 -13
  89. package/engine/site-search.mjs +161 -0
  90. package/engine/site-serve.mjs +273 -0
  91. package/engine/site-theme-banner.mjs +154 -0
  92. package/engine/site-theme-urls.mjs +125 -0
  93. package/engine/site-theme.mjs +926 -0
  94. package/engine/text-maps.mjs +57 -10
  95. package/engine/typographer.mjs +248 -0
  96. package/engine/verse-metre.mjs +357 -0
  97. package/engine/wikilink-syntax.mjs +29 -47
  98. package/engine/wikilinks.mjs +758 -279
  99. package/engine/word-forms.mjs +39 -24
  100. package/engine/word-rows.mjs +12 -2
  101. package/engine/word-terms.mjs +29 -4
  102. package/manifest.mjs +3 -4
  103. package/package.json +10 -7
  104. package/{hugo-theme → site-theme}/data/banners.yaml +6 -10
  105. package/site-theme/layouts/base.hbs +31 -0
  106. package/site-theme/layouts/blog-list.hbs +30 -0
  107. package/site-theme/layouts/blog-post.hbs +40 -0
  108. package/site-theme/layouts/home.hbs +35 -0
  109. package/site-theme/layouts/list.hbs +20 -0
  110. package/site-theme/layouts/not-found.hbs +31 -0
  111. package/site-theme/layouts/page.hbs +7 -0
  112. package/site-theme/partials/copy-buttons.hbs +37 -0
  113. package/site-theme/partials/draft-notice.hbs +5 -0
  114. package/site-theme/partials/exturl.hbs +2 -0
  115. package/{hugo-theme/layouts/partials/footer.html → site-theme/partials/footer.hbs} +10 -7
  116. package/site-theme/partials/header.hbs +44 -0
  117. package/site-theme/partials/hero-banner.hbs +11 -0
  118. package/site-theme/partials/infobox-entry.hbs +2 -0
  119. package/site-theme/partials/infobox-section.hbs +31 -0
  120. package/site-theme/partials/infobox-value.hbs +2 -0
  121. package/site-theme/partials/infobox.hbs +18 -0
  122. package/site-theme/partials/list-members.hbs +9 -0
  123. package/site-theme/partials/nav-links.hbs +5 -0
  124. package/site-theme/partials/page-body.hbs +48 -0
  125. package/site-theme/partials/page-list.hbs +14 -0
  126. package/site-theme/partials/related.hbs +24 -0
  127. package/site-theme/partials/search-meta.hbs +6 -0
  128. package/site-theme/partials/search-names.hbs +2 -0
  129. package/site-theme/partials/search.hbs +52 -0
  130. package/site-theme/partials/tags.hbs +4 -0
  131. package/site-theme/partials/toc.hbs +7 -0
  132. package/{hugo-theme → site-theme}/static/css/style.css +14 -0
  133. package/stage.mjs +1 -2
  134. package/types/config.d.mts +8 -4
  135. package/types/content-config.d.mts +15 -15
  136. package/types/engine/asset-shipping.d.mts +5 -2
  137. package/types/engine/base-compiler.d.mts +20 -2
  138. package/types/engine/content-address.d.mts +1 -1
  139. package/types/engine/content-alerts.d.mts +8 -2
  140. package/types/engine/content-blocks.d.mts +11 -4
  141. package/types/engine/content-expand.d.mts +288 -0
  142. package/types/engine/content-figures.d.mts +11 -3
  143. package/types/engine/content-glyphs.d.mts +85 -0
  144. package/types/engine/content-images.d.mts +6 -7
  145. package/types/engine/content-links.d.mts +1 -1
  146. package/types/engine/content-render.d.mts +199 -0
  147. package/types/engine/content-scripts.d.mts +62 -0
  148. package/types/engine/content-spans.d.mts +1 -1
  149. package/types/engine/content-styles.d.mts +33 -0
  150. package/types/engine/content-symbols.d.mts +35 -0
  151. package/types/engine/core-report.d.mts +45 -0
  152. package/types/engine/core-vocabulary.d.mts +53 -0
  153. package/types/engine/dictionary-html.d.mts +8 -0
  154. package/types/engine/field-reference.d.mts +1 -1
  155. package/types/engine/heading-attributes.d.mts +20 -0
  156. package/types/engine/helpers.d.mts +3 -10
  157. package/types/engine/homepage.d.mts +11 -24
  158. package/types/engine/html-minify.d.mts +9 -0
  159. package/types/engine/index.d.mts +2 -1
  160. package/types/engine/language-terms.d.mts +24 -2
  161. package/types/engine/logographic.d.mts +45 -0
  162. package/types/engine/map-lexicon.d.mts +48 -8
  163. package/types/engine/map-places.d.mts +8 -0
  164. package/types/engine/markdown-expressions.d.mts +0 -2
  165. package/types/engine/metre-declaration.d.mts +39 -0
  166. package/types/engine/pdf-render.d.mts +6 -2
  167. package/types/engine/post-fields.d.mts +44 -0
  168. package/types/engine/preview-index.d.mts +72 -0
  169. package/types/engine/preview-source.d.mts +51 -0
  170. package/types/engine/script-emphasis-terms.d.mts +21 -0
  171. package/types/engine/script-emphasis.d.mts +84 -0
  172. package/types/engine/script-font-delivery.d.mts +4 -4
  173. package/types/engine/site-build.d.mts +71 -113
  174. package/types/engine/site-config.d.mts +14 -134
  175. package/types/engine/site-files.d.mts +73 -0
  176. package/types/engine/site-index.d.mts +11 -3
  177. package/types/engine/site-preview.d.mts +15 -19
  178. package/types/engine/site-render.d.mts +171 -0
  179. package/types/engine/site-root.d.mts +12 -4
  180. package/types/engine/site-search.d.mts +54 -0
  181. package/types/engine/site-serve.d.mts +44 -0
  182. package/types/engine/site-theme-banner.d.mts +51 -0
  183. package/types/engine/site-theme-urls.d.mts +60 -0
  184. package/types/engine/site-theme.d.mts +127 -0
  185. package/types/engine/text-maps.d.mts +17 -3
  186. package/types/engine/typographer.d.mts +11 -0
  187. package/types/engine/verse-metre.d.mts +131 -0
  188. package/types/engine/wikilink-syntax.d.mts +30 -48
  189. package/types/engine/wikilinks.d.mts +330 -14
  190. package/types/engine/word-forms.d.mts +3 -2
  191. package/types/manifest.d.mts +3 -4
  192. package/types/stage.d.mts +1 -2
  193. package/types/vendor/markdownlint.d.mts +8 -0
  194. package/vendor/markdownlint.mjs +20388 -0
  195. package/engine/web-wikilinks.mjs +0 -594
  196. package/hugo-theme/layouts/404.html +0 -85
  197. package/hugo-theme/layouts/_default/baseof.html +0 -67
  198. package/hugo-theme/layouts/_default/list.html +0 -139
  199. package/hugo-theme/layouts/_default/single.html +0 -4
  200. package/hugo-theme/layouts/blog/list.html +0 -54
  201. package/hugo-theme/layouts/blog-post/single.html +0 -36
  202. package/hugo-theme/layouts/index.html +0 -75
  203. package/hugo-theme/layouts/partials/banner-url.html +0 -141
  204. package/hugo-theme/layouts/partials/cdn-url.html +0 -36
  205. package/hugo-theme/layouts/partials/dictionary-lists.html +0 -58
  206. package/hugo-theme/layouts/partials/draft-notice.html +0 -41
  207. package/hugo-theme/layouts/partials/draft-state.html +0 -26
  208. package/hugo-theme/layouts/partials/header.html +0 -35
  209. package/hugo-theme/layouts/partials/hero-banner.html +0 -85
  210. package/hugo-theme/layouts/partials/infobox/entry.html +0 -18
  211. package/hugo-theme/layouts/partials/infobox/items.html +0 -26
  212. package/hugo-theme/layouts/partials/infobox/section.html +0 -56
  213. package/hugo-theme/layouts/partials/infobox/value.html +0 -43
  214. package/hugo-theme/layouts/partials/infobox.html +0 -57
  215. package/hugo-theme/layouts/partials/page-body.html +0 -152
  216. package/hugo-theme/layouts/partials/related.html +0 -138
  217. package/hugo-theme/layouts/partials/search.html +0 -84
  218. package/hugo-theme/layouts/partials/site-url.html +0 -32
  219. package/hugo-theme/layouts/partials/tags.html +0 -30
  220. package/hugo-theme/layouts/partials/toc.html +0 -28
  221. package/hugo-theme/layouts/partials/warn-missing-banner.html +0 -3
  222. package/hugo-theme/layouts/shortcodes/cartouche.html +0 -64
  223. package/hugo-theme/layouts/shortcodes/exturl.html +0 -12
  224. package/hugo-theme/layouts/shortcodes/glyph.html +0 -43
  225. package/hugo-theme/layouts/shortcodes/pagelist.html +0 -63
  226. package/hugo-theme/theme.toml +0 -11
  227. package/types/engine/web-wikilinks.d.mts +0 -107
  228. /package/{hugo-theme → site-theme}/data/banner-kinds.yaml +0 -0
  229. /package/{hugo-theme → site-theme}/static/css/sohl-icons.css +0 -0
  230. /package/{hugo-theme → site-theme}/static/fonts/game-icons-kb.woff2 +0 -0
  231. /package/{hugo-theme → site-theme}/static/img/banners/takheperu-hieroglyphs.svg +0 -0
  232. /package/{hugo-theme → site-theme}/static/img/cartouches/takheperu.svg +0 -0
  233. /package/{hugo-theme → site-theme}/static/js/inline-spoilers.js +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,41 @@
1
1
  # @heroiclands/package-build
2
2
 
3
+ ## 24.0.0
4
+
5
+ ### Major Changes
6
+
7
+ **Upgrading**
8
+
9
+ - Build and preview sites with `package-build site build` and `package-build site serve`; Hugo is no longer used, so update your scripts and workflows and drop its install step.
10
+ - Remove `site.hugo` from `package-build.config.yaml`, and write `[x]{.glyph}` or `[signs]{.cartouche}` where a note used a Hugo shortcode.
11
+ - Describe a verse's metre, rhyme or syllable pattern in prose, since `meter=`, `rhyme=` and `syllables=` are errors; write a language's `stress` as a map, `{ two: first, longer: penultimate, mark: acute }`.
12
+ - Use `engine.wikilinks` in place of `engine.webWikilinks`, and copy the new `assets/preview/gitea.ini` into the Gitea renderer's `app.ini`.
13
+
14
+ ### Patch Changes
15
+
16
+ **Every surface**
17
+
18
+ - Foundry journals, the editor preview and the book render alerts, verse, captions, footnotes, pictures and secret blocks alike; an editor passes its content index to `renderPreview` as `previewIndex`.
19
+ - Fenced code that names a language is highlighted, a captioned map reads **Map N**, and `[label]{.glyph}` and `[label]{.cartouche}` set a sign or framed seal from `icons/<slug>.svg` or `images/cartouches/<slug>.svg`.
20
+
21
+ **Fixes**
22
+
23
+ - Errors on a note's first body line are reported at their own column, `extends` in a `.markdownlint-cli2` options file applies, building pictures twice reports no collisions, and `npm audit` reports no KaTeX advisory.
24
+
25
+ **Languages and scripts**
26
+
27
+ - A `doc` note lists a setting's core concepts in `data.concepts`, a language with `core: true` must cover them, words name theirs in `concept`, and `package-build core` lists the gaps.
28
+ - Emphasis in a script reads as its own mark, a red rubric or an overline, stated in `data.script` or a language's `data.emphasis`; `_…_` and `__…__` work as `*…*` and `**…**` do.
29
+ - A mapping with `logographic: true` writes each word from the lexicon by its own writing or its parts', and a word with neither is an error.
30
+ - A verse fence's `scan=` names a metre declared in `data.metres`, and a line that cannot have its beats is a warning; a word's `variants` take the language's endings.
31
+
32
+ **Sites**
33
+
34
+ - `package-build site build` renders every page, `404.html`, `sitemap.xml` and the search index, minified; `site serve` rebuilds a page when its note or the theme changes and reloads the browser.
35
+ - Blog posts are `doc` notes of `subType: post` with `data.date` and `data.author`, listed newest first and fed as Atom by `site.feed`; `site.sections` and `site.tags` add section and tag pages.
36
+ - `site.base: /` serves a site at its domain's root, where `site.sitemaps` and `site.mergeIndexes` extend its sitemap index, `robots.txt` and search across package sites.
37
+ - Search filters by package, type, subtype, culture, continent, region, author and tag, ranks a note's name first, shows its icon, and leaves out `.secret` sections.
38
+
3
39
  ## 23.13.0
4
40
 
5
41
  ### Minor Changes
package/README.md CHANGED
@@ -47,7 +47,7 @@ pre-push hook. Run `npm test` and the other checks directly, or use
47
47
 
48
48
  ## Documentation
49
49
 
50
- The documentation lives in the Markdown files in this repository. Start with [the documentation home](docs/index.md). This toolchain does not build its own site or book. A Hugo theme dependency would form a cycle because the theme uses package-build for releases.
50
+ The documentation lives in the Markdown files in this repository. Start with [the documentation home](docs/index.md). This toolchain does not build its own site or book.
51
51
 
52
52
  | Topic | Guide |
53
53
  | ------------------------------------------------- | ------------------------------------------------------------------------- |
@@ -69,6 +69,7 @@ The documentation lives in the Markdown files in this repository. Start with [th
69
69
  | Localization and templates | [Localization](docs/guides/localization.md) |
70
70
  | Foundry integration testing | [End-to-end testing](docs/guides/e2e.md), including an optional S3 server |
71
71
  | Release and deployment | [Release and deploy](docs/guides/release-and-deploy.md) |
72
+ | Invented languages and scripts | [Write in invented scripts](docs/guides/writing-in-invented-scripts.md) |
72
73
  | Buffer-only preview and Gitea rendering | [Source preview](docs/source-preview.md) |
73
74
  | Every CLI command | [Commands](docs/commands.md) |
74
75
  | Every build setting | [Configuration](docs/configuration.md) |
@@ -9,12 +9,12 @@ RENDER_CONTENT_MODE = sanitized
9
9
  [markup.sanitizer.markdown.previewDiv]
10
10
  ELEMENT = div
11
11
  ALLOW_ATTR = class
12
- REGEXP = ^(hl-preview(?:-[a-z-]+)?|alert(?:-(?:note|tip|important|warning))?|content-figure(?:-[a-z-]+)?|verse)( (hl-preview(?:-[a-z-]+)?|alert(?:-(?:note|tip|important|warning))?|content-figure(?:-[a-z-]+)?|verse))*$
12
+ REGEXP = ^(hl-preview(?:-[a-z-]+)?|content-figure(?:-[a-z-]+)?|verse(?:-[a-z-]+)?|border)( (hl-preview(?:-[a-z-]+)?|content-figure(?:-[a-z-]+)?|verse(?:-[a-z-]+)?|border))*$
13
13
 
14
14
  [markup.sanitizer.markdown.previewSpan]
15
15
  ELEMENT = span
16
16
  ALLOW_ATTR = class
17
- REGEXP = ^(hl-preview-[a-z-]+|alert-(?:title|icon)|verse-[a-z-]+|i[0-8])( (hl-preview-[a-z-]+|alert-(?:title|icon)|verse-[a-z-]+|i[0-8]))*$
17
+ REGEXP = ^(hl-preview-[a-z-]+|alert-(?:title|icon)|verse-[a-z-]+|i[0-8]|hljs-[a-z_-]+|[a-z]+_{1,2})( (hl-preview-[a-z-]+|alert-(?:title|icon)|verse-[a-z-]+|i[0-8]|hljs-[a-z_-]+|[a-z]+_{1,2}))*$
18
18
 
19
19
  [markup.sanitizer.markdown.previewPre]
20
20
  ELEMENT = pre
@@ -29,7 +29,7 @@ REGEXP = ^(hl-preview-fence|language-[A-Za-z0-9_-]+)$
29
29
  [markup.sanitizer.markdown.previewAside]
30
30
  ELEMENT = aside
31
31
  ALLOW_ATTR = class
32
- REGEXP = ^hl-preview-infobox$
32
+ REGEXP = ^(hl-preview-infobox|alert alert-(?:note|tip|important|warning)(?: [a-z][a-z0-9-]*)*)$
33
33
 
34
34
  [markup.sanitizer.markdown.alertSvgFill]
35
35
  ELEMENT = svg
@@ -56,15 +56,20 @@ ELEMENT = main
56
56
  ALLOW_ATTR = class
57
57
  REGEXP = ^hl-preview-main$
58
58
 
59
- [markup.sanitizer.markdown.alertBox]
60
- ELEMENT = blockquote
59
+ [markup.sanitizer.markdown.alertTitle]
60
+ ELEMENT = header
61
61
  ALLOW_ATTR = class
62
- REGEXP = ^alert alert-(note|tip|important|warning)$
62
+ REGEXP = ^alert-title$
63
+
64
+ [markup.sanitizer.markdown.noteImage]
65
+ ELEMENT = figure
66
+ ALLOW_ATTR = class
67
+ REGEXP = ^note-image( note-image-[a-z-]+)*$
63
68
 
64
69
  [markup.sanitizer.markdown.previewParagraph]
65
70
  ELEMENT = p
66
71
  ALLOW_ATTR = class
67
- REGEXP = ^(alert-title|content-figure-label)$
72
+ REGEXP = ^content-figure-label$
68
73
 
69
74
  [markup.sanitizer.markdown.alertSvgClass]
70
75
  ELEMENT = svg
@@ -17,7 +17,8 @@
17
17
  *
18
18
  * It carries what every package's compiled content needs to read in Foundry as
19
19
  * it does in the preview and on the site: definition lists, verse, alerts,
20
- * inline spoilers, marked names, unresolved links and captioned blocks. Every
20
+ * inline spoilers, marked names, unresolved links, captioned blocks and
21
+ * highlighted code. Every
21
22
  * class the Foundry renderer emits is styled here or exempted by name in
22
23
  * `tests/base-styles.test.ts`. A package keeps its own stylesheet for its own
23
24
  * needs and overrides anything here from it.
@@ -119,6 +120,10 @@
119
120
  }
120
121
  }
121
122
 
123
+ /* preview:shared — verse, marked text and generic families. The rules between
124
+ * the two markers are also the editor preview's stylesheet, with the content
125
+ * roots replaced by the preview's own. */
126
+
122
127
  /* Each verse line breaks in the markup; each paragraph is a stanza. */
123
128
  :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .verse {
124
129
  margin: 1.5rem 0;
@@ -280,6 +285,33 @@
280
285
  text-align: start;
281
286
  }
282
287
 
288
+ /*
289
+ * Emphasis in a script follows the script's convention, never a weight or a
290
+ * slant the face does not have: the element keeps the face's Regular, and its
291
+ * class sets the convention. The rubric is carried by colour alone, so each
292
+ * half holds 4.5:1 on Foundry's journal page in its theme and stays apart from
293
+ * the body text in lightness; a package that overrides it re-checks both.
294
+ */
295
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) {
296
+ --pb-rubric: #9c281b;
297
+ --pb-rubric: light-dark(#9c281b, #e0705f);
298
+ }
299
+
300
+ .script :is(em, strong) {
301
+ font-style: normal;
302
+ font-weight: inherit;
303
+ font-synthesis: none;
304
+ }
305
+
306
+ .emph-rubric {
307
+ color: var(--pb-rubric);
308
+ }
309
+
310
+ .emph-overline {
311
+ text-decoration-line: overline;
312
+ text-decoration-skip-ink: none;
313
+ }
314
+
283
315
  /* Text set in the reader's generic families, `font=serif`, `sans` and `mono`. */
284
316
  .font-serif {
285
317
  font-family: serif;
@@ -293,6 +325,8 @@
293
325
  font-family: monospace;
294
326
  }
295
327
 
328
+ /* /preview:shared */
329
+
296
330
  /*
297
331
  * Historical info/warn section classes remain available for styled prose.
298
332
  * New alerts use the separate alert classes below.
@@ -469,6 +503,9 @@
469
503
  }
470
504
  }
471
505
 
506
+ /* preview:shared — inline spoilers, names, unresolved links, captioned blocks,
507
+ * pictures and highlighted code, to the end of the file. */
508
+
472
509
  /* Inline spoilers reveal on pointer hover or keyboard focus. Native secret
473
510
  * sections retain Foundry's separate GM reveal control. */
474
511
  :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror)
@@ -578,3 +615,115 @@
578
615
  border: 1px solid var(--pb-figure-border, currentcolor);
579
616
  border-radius: 4px;
580
617
  }
618
+
619
+ /*
620
+ * Code a fence names a language for is highlighted when the page is built, and
621
+ * its token classes are coloured here. Each colour defers to a custom property
622
+ * so a package or a theme can replace it, and `light-dark()` follows the colour
623
+ * scheme Foundry sets.
624
+ */
625
+
626
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-keyword,
627
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror)
628
+ .hljs-variable.language_,
629
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-doctag,
630
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-selector-tag,
631
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-template-tag,
632
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-type {
633
+ color: var(--pb-code-keyword, light-dark(#cf222e, #ff7b72));
634
+ }
635
+
636
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-title,
637
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-title.class_,
638
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror)
639
+ .hljs-title.class_.inherited__,
640
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror)
641
+ .hljs-title.function_,
642
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror)
643
+ .hljs-title.function_.invoke__,
644
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-selector-id {
645
+ color: var(--pb-code-title, light-dark(#8250df, #d2a8ff));
646
+ }
647
+
648
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-attr,
649
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-attribute,
650
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-literal,
651
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-meta,
652
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-number,
653
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-operator,
654
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-variable,
655
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-selector-attr,
656
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror)
657
+ .hljs-selector-class,
658
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-property,
659
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror)
660
+ .hljs-variable.constant_,
661
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror)
662
+ .hljs-template-variable {
663
+ color: var(--pb-code-constant, light-dark(#0550ae, #79c0ff));
664
+ }
665
+
666
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-regexp,
667
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-string,
668
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror)
669
+ .hljs-meta.hljs-string,
670
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-char.escape_ {
671
+ color: var(--pb-code-string, light-dark(#0a3069, #a5d6ff));
672
+ }
673
+
674
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-built_in,
675
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-symbol,
676
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-meta.prompt_,
677
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-bullet {
678
+ color: var(--pb-code-builtin, light-dark(#953800, #ffa657));
679
+ }
680
+
681
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-comment,
682
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-code,
683
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-formula {
684
+ color: var(--pb-code-comment, light-dark(#59636e, #9198a1));
685
+ }
686
+
687
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-name,
688
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-quote,
689
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror)
690
+ .hljs-selector-pseudo,
691
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-tag {
692
+ color: var(--pb-code-name, light-dark(#116329, #7ee787));
693
+ }
694
+
695
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-subst,
696
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-params,
697
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-punctuation {
698
+ color: var(--pb-code-plain, inherit);
699
+ }
700
+
701
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-section {
702
+ color: var(--pb-code-constant, light-dark(#0550ae, #79c0ff));
703
+ font-weight: 700;
704
+ }
705
+
706
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-emphasis {
707
+ font-style: italic;
708
+ }
709
+
710
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-strong {
711
+ font-weight: 700;
712
+ }
713
+
714
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-link {
715
+ color: var(--pb-code-constant, light-dark(#0550ae, #79c0ff));
716
+ text-decoration: underline;
717
+ }
718
+
719
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-addition {
720
+ color: var(--pb-code-addition, light-dark(#116329, #aff5b4));
721
+ background-color: var(--pb-code-addition-fill, light-dark(#dafbe1, #033a16));
722
+ }
723
+
724
+ :is(.journal-entry-page, .journal-entry-content, .editor-content, .prosemirror) .hljs-deletion {
725
+ color: var(--pb-code-deletion, light-dark(#82071e, #ffdcd7));
726
+ background-color: var(--pb-code-deletion-fill, light-dark(#ffebe9, #67060c));
727
+ }
728
+
729
+ /* /preview:shared */