explico 0.13.0 → 0.14.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 (239) hide show
  1. package/CHANGELOG.md +894 -1
  2. package/README.md +200 -30
  3. package/dist/compiler/astro.d.ts +15 -2
  4. package/dist/compiler/astro.js +40 -11
  5. package/dist/compiler/cli-main.d.ts +43 -0
  6. package/dist/compiler/cli-main.js +392 -0
  7. package/dist/compiler/cli.d.ts +424 -9
  8. package/dist/compiler/cli.js +1289 -8
  9. package/dist/compiler/collections.d.ts +88 -1
  10. package/dist/compiler/collections.js +170 -25
  11. package/dist/compiler/course-config.d.ts +1 -1
  12. package/dist/compiler/course-config.js +105 -1
  13. package/dist/compiler/decks.d.ts +161 -0
  14. package/dist/compiler/decks.js +235 -0
  15. package/dist/compiler/exports/combined-html.d.ts +5 -1
  16. package/dist/compiler/exports/deck-fit.d.ts +55 -0
  17. package/dist/compiler/exports/deck-fit.js +90 -0
  18. package/dist/compiler/exports/export-chapters.d.ts +37 -6
  19. package/dist/compiler/exports/export-chapters.js +64 -5
  20. package/dist/compiler/exports/export-pages.d.ts +30 -3
  21. package/dist/compiler/exports/export-pages.js +24 -1
  22. package/dist/compiler/exports/latex/beamerthemeexplico.sty +124 -0
  23. package/dist/compiler/exports/latex/cache.d.ts +78 -0
  24. package/dist/compiler/exports/latex/cache.js +129 -0
  25. package/dist/compiler/exports/latex/capture.d.ts +10 -1
  26. package/dist/compiler/exports/latex/capture.js +3 -1
  27. package/dist/compiler/exports/latex/compile.d.ts +13 -2
  28. package/dist/compiler/exports/latex/compile.js +12 -1
  29. package/dist/compiler/exports/latex/deck.d.ts +92 -0
  30. package/dist/compiler/exports/latex/deck.js +349 -0
  31. package/dist/compiler/exports/latex/document.d.ts +51 -6
  32. package/dist/compiler/exports/latex/document.js +71 -12
  33. package/dist/compiler/exports/latex/explico-common.sty +198 -0
  34. package/dist/compiler/exports/latex/explico.cls +13 -183
  35. package/dist/compiler/exports/latex/serialize.d.ts +60 -4
  36. package/dist/compiler/exports/latex/serialize.js +4 -2
  37. package/dist/compiler/exports/latex-export.d.ts +24 -2
  38. package/dist/compiler/exports/latex-export.js +107 -26
  39. package/dist/compiler/exports/markdown/serialize.d.ts +24 -4
  40. package/dist/compiler/exports/markdown/serialize.js +85 -8
  41. package/dist/compiler/exports/markdown-export.d.ts +6 -1
  42. package/dist/compiler/exports/markdown-export.js +50 -11
  43. package/dist/compiler/exports/standalone-html.d.ts +10 -5
  44. package/dist/compiler/exports/standalone-html.js +3 -3
  45. package/dist/compiler/exports/static-tree.d.ts +38 -1
  46. package/dist/compiler/exports/static-tree.js +120 -4
  47. package/dist/compiler/knowledge-version.d.ts +26 -2
  48. package/dist/compiler/knowledge-version.js +27 -17
  49. package/dist/compiler/lesson-derivation.d.ts +143 -6
  50. package/dist/compiler/lesson-derivation.js +145 -13
  51. package/dist/compiler/manifest.d.ts +133 -4
  52. package/dist/compiler/manifest.js +359 -58
  53. package/dist/compiler/page-versions.d.ts +160 -0
  54. package/dist/compiler/page-versions.js +198 -0
  55. package/dist/compiler/render-diagnostics.d.ts +5 -1
  56. package/dist/compiler/resolution-report.d.ts +24 -6
  57. package/dist/compiler/resolution-report.js +22 -4
  58. package/dist/compiler/validate-content.d.ts +7 -0
  59. package/dist/compiler/validate-content.js +160 -0
  60. package/dist/{course-config-rRtME5UV.d.ts → course-config-BLtIdkei.d.ts} +164 -1
  61. package/dist/curriculum/competency-graph.d.ts +54 -0
  62. package/dist/curriculum/competency-graph.js +41 -0
  63. package/dist/reference/base-library.d.mts +8 -0
  64. package/dist/reference/base-library.mjs +19 -0
  65. package/dist/reference/consistency.d.ts +8 -4
  66. package/dist/reference/consistency.js +76 -26
  67. package/dist/reference/deck-remark.d.mts +123 -0
  68. package/dist/reference/deck-remark.mjs +600 -0
  69. package/dist/reference/deck-source.d.ts +107 -0
  70. package/dist/reference/deck-source.js +140 -0
  71. package/dist/reference/decks-validate.d.ts +133 -0
  72. package/dist/reference/decks-validate.js +359 -0
  73. package/dist/reference/derived-entries.d.ts +5 -1
  74. package/dist/reference/diagram-fit.d.ts +1 -1
  75. package/dist/reference/figure-symbols.d.ts +23 -6
  76. package/dist/reference/figure-symbols.js +51 -15
  77. package/dist/reference/float-name.d.ts +43 -0
  78. package/dist/reference/float-name.js +58 -0
  79. package/dist/reference/folds-validate.d.ts +1 -1
  80. package/dist/reference/gate-abbreviations.d.ts +1 -1
  81. package/dist/reference/gate-indices.js +5 -4
  82. package/dist/reference/gate-math.d.ts +29 -2
  83. package/dist/reference/gate-math.js +99 -18
  84. package/dist/reference/gate-part-pages.d.ts +1 -1
  85. package/dist/reference/lab-katex-validate.d.ts +10 -6
  86. package/dist/reference/lab-katex-validate.js +17 -9
  87. package/dist/reference/lab-math-scope.js +29 -4
  88. package/dist/reference/math-glyphs.d.mts +25 -0
  89. package/dist/reference/math-glyphs.mjs +189 -25
  90. package/dist/reference/page-notation.d.ts +22 -3
  91. package/dist/reference/page-notation.js +32 -10
  92. package/dist/reference/references.d.ts +14 -1
  93. package/dist/reference/references.js +13 -0
  94. package/dist/reference/registry-scope.d.mts +33 -0
  95. package/dist/reference/registry-scope.mjs +34 -0
  96. package/dist/reference/registry.js +29 -10
  97. package/dist/reference/rehype-deck.d.mts +6 -0
  98. package/dist/reference/rehype-deck.mjs +286 -0
  99. package/dist/reference/rehype-heading-anchors.d.mts +20 -0
  100. package/dist/reference/rehype-heading-anchors.mjs +48 -6
  101. package/dist/reference/remark-notation.mjs +249 -40
  102. package/dist/reference/source-lines.d.mts +12 -0
  103. package/dist/reference/source-lines.mjs +65 -0
  104. package/dist/reference/types.d.ts +28 -0
  105. package/dist/rules/catalog.d.ts +21 -4
  106. package/dist/rules/catalog.js +221 -2
  107. package/dist/rules/course-rules.d.ts +5 -1
  108. package/dist/rules/course-rules.js +17 -3
  109. package/dist/rules/course-rules.schema.json +12 -0
  110. package/dist/rules/in-effect.d.ts +13 -3
  111. package/dist/rules/in-effect.js +30 -7
  112. package/dist/rules/rules.schema.json +259 -1
  113. package/dist/rules/settings.d.ts +1 -1
  114. package/dist/session/PreferenceStore.d.ts +6 -0
  115. package/dist/session/PreferenceStore.js +18 -1
  116. package/dist/session/deck-memory.d.ts +116 -0
  117. package/dist/session/deck-memory.js +143 -0
  118. package/dist/session/reading-memory.d.ts +96 -0
  119. package/dist/session/reading-memory.js +133 -0
  120. package/docs/VERSIONING.md +21 -18
  121. package/docs/authoring/README.md +29 -9
  122. package/docs/authoring/agents.md +63 -16
  123. package/docs/authoring/components.md +15 -0
  124. package/docs/authoring/deck.md +588 -0
  125. package/docs/authoring/migrating.md +1087 -14
  126. package/docs/authoring/notation.md +49 -6
  127. package/docs/authoring/structure.md +80 -1
  128. package/docs/authoring/versioning.md +54 -2
  129. package/docs/authoring/visualizations.md +7 -2
  130. package/docs/course-agent/AGENTS.md +37 -0
  131. package/docs/course-agent/agents/rules-reviewer.md +33 -0
  132. package/docs/course-agent/skills/draft-lesson/SKILL.md +37 -0
  133. package/docs/course-agent/skills/migrate-course/SKILL.md +31 -0
  134. package/docs/course-agent/skills/release-content/SKILL.md +24 -0
  135. package/docs/diagram-scaling.md +148 -0
  136. package/docs/privacy.md +59 -0
  137. package/package.json +8 -2
  138. package/src/compiler/astro.ts +60 -21
  139. package/src/compiler/cli-main.ts +469 -0
  140. package/src/compiler/cli.ts +1905 -16
  141. package/src/compiler/collections.ts +284 -25
  142. package/src/compiler/course-config.ts +267 -0
  143. package/src/compiler/decks.ts +455 -0
  144. package/src/compiler/exports/deck-fit.ts +127 -0
  145. package/src/compiler/exports/export-chapters.ts +105 -6
  146. package/src/compiler/exports/export-pages.ts +46 -2
  147. package/src/compiler/exports/latex/beamerthemeexplico.sty +124 -0
  148. package/src/compiler/exports/latex/cache.ts +183 -0
  149. package/src/compiler/exports/latex/capture.ts +5 -2
  150. package/src/compiler/exports/latex/compile.ts +18 -0
  151. package/src/compiler/exports/latex/deck.ts +419 -0
  152. package/src/compiler/exports/latex/document.ts +117 -21
  153. package/src/compiler/exports/latex/explico-common.sty +198 -0
  154. package/src/compiler/exports/latex/explico.cls +13 -183
  155. package/src/compiler/exports/latex/serialize.ts +25 -21
  156. package/src/compiler/exports/latex/texlive-packages.txt +6 -2
  157. package/src/compiler/exports/latex-export.ts +187 -45
  158. package/src/compiler/exports/markdown/serialize.ts +118 -9
  159. package/src/compiler/exports/markdown-export.ts +56 -11
  160. package/src/compiler/exports/standalone-html.ts +8 -7
  161. package/src/compiler/exports/static-tree.ts +175 -3
  162. package/src/compiler/knowledge-version.ts +56 -21
  163. package/src/compiler/lesson-derivation.ts +282 -16
  164. package/src/compiler/manifest.ts +558 -63
  165. package/src/compiler/page-versions.ts +359 -0
  166. package/src/compiler/resolution-report.ts +38 -7
  167. package/src/compiler/validate-content.ts +212 -0
  168. package/src/components/CourseContents.astro +124 -6
  169. package/src/components/CurriculumMap.astro +49 -1
  170. package/src/components/FloatIndex.astro +1 -1
  171. package/src/components/PartOverview.astro +51 -5
  172. package/src/components/assessments/AssessmentSet.astro +41 -15
  173. package/src/components/block-heading.ts +15 -6
  174. package/src/components/card-carry.ts +7 -4
  175. package/src/components/card-manager.ts +14 -2
  176. package/src/components/card-memory.ts +13 -9
  177. package/src/components/deck/DeckEnhancer.astro +13 -0
  178. package/src/components/deck/deck-context.ts +104 -0
  179. package/src/components/deck/deck-controller.ts +1287 -0
  180. package/src/components/deck/deck-map.ts +91 -0
  181. package/src/components/deck-lane.ts +163 -0
  182. package/src/components/diagram/Diagram.astro +131 -86
  183. package/src/components/disclosure/persisted-disclosure.ts +9 -1
  184. package/src/components/figure/Figure.astro +7 -2
  185. package/src/components/figure/FloatCaption.astro +5 -3
  186. package/src/components/fold/Fold.astro +2 -2
  187. package/src/components/notation/NotationFormula.astro +81 -11
  188. package/src/components/notation/NotationGlossary.astro +132 -1
  189. package/src/components/notation/NotationLayer.astro +29 -0
  190. package/src/components/starlight/AboutPanel.astro +186 -3
  191. package/src/components/starlight/CollapsibleSections.astro +24 -3
  192. package/src/components/starlight/DiagramEnhancer.astro +5 -1
  193. package/src/components/starlight/HeadingAnchorEnhancer.astro +1 -1
  194. package/src/components/starlight/LayoutHeader.astro +17 -0
  195. package/src/components/starlight/LayoutPageTitle.astro +110 -0
  196. package/src/components/starlight/LayoutSidebar.astro +807 -21
  197. package/src/components/starlight/LayoutSocialIcons.astro +62 -6
  198. package/src/components/starlight/LessonExportActions.astro +27 -9
  199. package/src/components/starlight/LessonFooter.astro +59 -0
  200. package/src/components/starlight/ReadingMemoryNotice.astro +114 -0
  201. package/src/components/starlight/TextSizeControl.astro +24 -13
  202. package/src/components/starlight/page-marks.ts +139 -0
  203. package/src/components/starlight/section-summary.ts +1 -1
  204. package/src/components/starlight/sidebar-editions.ts +245 -0
  205. package/src/components/table/Table.astro +15 -7
  206. package/src/content-config.ts +87 -1
  207. package/src/curriculum/competency-graph.ts +95 -0
  208. package/src/reference/base-library.mjs +19 -0
  209. package/src/reference/consistency.ts +126 -39
  210. package/src/reference/deck-remark.mjs +600 -0
  211. package/src/reference/deck-source.ts +273 -0
  212. package/src/reference/decks-validate.ts +604 -0
  213. package/src/reference/diagram-layout.ts +3 -1
  214. package/src/reference/figure-symbols.ts +108 -31
  215. package/src/reference/folds-validate.ts +1 -1
  216. package/src/reference/gate-indices.ts +5 -3
  217. package/src/reference/gate-math.ts +169 -25
  218. package/src/reference/lab-katex-validate.ts +30 -15
  219. package/src/reference/lab-math-scope.ts +34 -3
  220. package/src/reference/math-glyphs.mjs +189 -25
  221. package/src/reference/page-notation.ts +69 -15
  222. package/src/reference/references.ts +28 -0
  223. package/src/reference/registry-scope.mjs +34 -0
  224. package/src/reference/registry.ts +41 -11
  225. package/src/reference/rehype-deck.mjs +286 -0
  226. package/src/reference/rehype-heading-anchors.mjs +48 -6
  227. package/src/reference/remark-notation.mjs +249 -40
  228. package/src/reference/source-lines.mjs +65 -0
  229. package/src/reference/types.ts +28 -0
  230. package/src/rules/catalog.ts +257 -4
  231. package/src/rules/course-rules.ts +21 -1
  232. package/src/rules/in-effect.ts +54 -8
  233. package/src/session/PreferenceStore.ts +23 -0
  234. package/src/session/deck-memory.ts +263 -0
  235. package/src/session/reading-memory.ts +243 -0
  236. package/src/styles/deck.css +1150 -0
  237. package/src/styles/global.css +958 -27
  238. package/src/styles/zones.css +277 -0
  239. /package/src/{components → reference}/float-name.ts +0 -0
@@ -0,0 +1,277 @@
1
+ /* Zones (`appearance.zones` in the course settings, `course-config.ts`): how
2
+ the page tells its four parts apart — the header (the site's tools), the
3
+ course's sidebar, the page's contents sidebar and the reading column.
4
+
5
+ tonal both sidebars one step of the neutral grey (Starlight's
6
+ own hue), the header a step further, the reading column
7
+ as it was. The default.
8
+ accent-header the header a deep band of the course accent in both
9
+ themes, drawn on dark-theme colours; sidebars as tonal.
10
+ paper header and sidebars are a desk, the reading column a
11
+ sheet lying on it: its edge casts a soft shadow, and in
12
+ the dark theme it is a step lighter than the desk.
13
+ none Starlight's own colours.
14
+
15
+ `LayoutHeader.astro` writes the course's choice on `[data-explico-zones]`
16
+ and each style below is one set of tokens per theme, selected with
17
+ `:root:has(…)`, so the first painted frame has it. `tonal` needs no
18
+ attribute: a page without the header still gets it. Every style block
19
+ sets every token in both themes — a style's dark block outranks `tonal`'s
20
+ light one, and its own light block puts the light values back.
21
+
22
+ Whatever the style, a hovered row fills with its sidebar's colour mixed
23
+ with 10 % ink, and the part holding the open page is tinted with the
24
+ sidebar's own accent tint, a step darker than the course's: neither can
25
+ come out the colour of the surface under it. Colours apply on screen only;
26
+ print keeps Starlight's print palette. Dark is Starlight's base theme
27
+ (`:root`), light its override. */
28
+
29
+ :root {
30
+ /* tonal, dark */
31
+ --ex-zone-header: hsl(224 16% 20%);
32
+ --ex-zone-header-edge: hsl(224 12% 27%);
33
+ --ex-zone-rail: hsl(224 13% 14.5%);
34
+ --ex-zone-toc: hsl(224 13% 14.5%);
35
+ --ex-zone-rail-edge: hsl(224 10% 21%);
36
+ --ex-zone-toc-edge: hsl(224 10% 21%);
37
+
38
+ --ex-zone-rail-hover: color-mix(in srgb, var(--sl-color-white) 10%, var(--ex-zone-rail));
39
+ --ex-zone-toc-hover: color-mix(in srgb, var(--sl-color-white) 10%, var(--ex-zone-toc));
40
+ --ex-zone-rail-accent: color-mix(in srgb, var(--sl-color-accent-low) 88%, var(--sl-color-accent));
41
+ /* The course's title in the header: its accent, a step toward the ink, so
42
+ it keeps 4.5:1 on a tinted header as it had on Starlight's paler one. */
43
+ --ex-zone-title: color-mix(in oklab, var(--sl-color-text-accent) 80%, var(--sl-color-white));
44
+
45
+ /* The page's own colours, for what opens from an `accent-header` band
46
+ (its menus, the search dialog) to take back. */
47
+ --ex-page-white: var(--sl-color-white);
48
+ --ex-page-gray-1: var(--sl-color-gray-1);
49
+ --ex-page-gray-2: var(--sl-color-gray-2);
50
+ --ex-page-gray-3: var(--sl-color-gray-3);
51
+ --ex-page-gray-4: var(--sl-color-gray-4);
52
+ --ex-page-gray-5: var(--sl-color-gray-5);
53
+ --ex-page-gray-6: var(--sl-color-gray-6);
54
+ --ex-page-gray-7: var(--sl-color-gray-7);
55
+ --ex-page-black: var(--sl-color-black);
56
+ --ex-page-text: var(--sl-color-text);
57
+ --ex-page-text-accent: var(--sl-color-text-accent);
58
+ --ex-page-text-invert: var(--sl-color-text-invert);
59
+ --ex-page-accent: var(--sl-color-accent);
60
+ --ex-page-accent-low: var(--sl-color-accent-low);
61
+ --ex-page-accent-high: var(--sl-color-accent-high);
62
+ --ex-page-bg: var(--sl-color-bg);
63
+ --ex-page-bg-nav: var(--sl-color-bg-nav);
64
+ --ex-page-bg-inline-code: var(--sl-color-bg-inline-code);
65
+ --ex-page-hairline-light: var(--sl-color-hairline-light);
66
+ --ex-page-hairline: var(--sl-color-hairline);
67
+ --ex-page-hairline-shade: var(--sl-color-hairline-shade);
68
+ }
69
+
70
+ :root[data-theme='light'] {
71
+ /* tonal, light */
72
+ --ex-zone-header: hsl(222 26% 90%);
73
+ --ex-zone-header-edge: hsl(222 16% 81%);
74
+ --ex-zone-rail: hsl(222 30% 95.5%);
75
+ --ex-zone-toc: hsl(222 30% 95.5%);
76
+ --ex-zone-rail-edge: hsl(222 18% 87%);
77
+ --ex-zone-toc-edge: hsl(222 18% 87%);
78
+ }
79
+
80
+ /* accent-header: the band is the course accent taken deep, so a course
81
+ with its own accent gets its own band. */
82
+ :root:has([data-explico-zones='accent-header']) {
83
+ --ex-zone-header: color-mix(in oklab, var(--sl-color-accent) 24%, var(--sl-color-black));
84
+ --ex-zone-header-edge: color-mix(in oklab, var(--sl-color-accent) 34%, var(--sl-color-black));
85
+ --ex-zone-band-accent: var(--sl-color-accent-high);
86
+ --ex-zone-title: hsl(0 0% 100%);
87
+ --ex-zone-rail: hsl(224 13% 14.5%);
88
+ --ex-zone-toc: hsl(224 13% 14.5%);
89
+ --ex-zone-rail-edge: hsl(224 10% 21%);
90
+ --ex-zone-toc-edge: hsl(224 10% 21%);
91
+ }
92
+ :root[data-theme='light']:has([data-explico-zones='accent-header']) {
93
+ --ex-zone-header: color-mix(in oklab, var(--sl-color-accent) 72%, black);
94
+ --ex-zone-header-edge: color-mix(in oklab, var(--sl-color-accent) 58%, black);
95
+ --ex-zone-band-accent: var(--sl-color-accent-low);
96
+ --ex-zone-title: hsl(0 0% 100%);
97
+ --ex-zone-rail: hsl(222 30% 95.5%);
98
+ --ex-zone-toc: hsl(222 30% 95.5%);
99
+ --ex-zone-rail-edge: hsl(222 18% 87%);
100
+ --ex-zone-toc-edge: hsl(222 18% 87%);
101
+ }
102
+
103
+ /* paper: the desk is the header and the sidebars; the sheet is the page's
104
+ own background, lifted a step in the dark theme (below). */
105
+ :root:has([data-explico-zones='paper']) {
106
+ --ex-zone-header: hsl(224 12% 5.5%);
107
+ --ex-zone-header-edge: hsl(224 10% 3.5%);
108
+ --ex-zone-rail: hsl(224 11% 9.5%);
109
+ --ex-zone-toc: hsl(224 11% 9.5%);
110
+ --ex-zone-rail-edge: transparent;
111
+ --ex-zone-toc-edge: transparent;
112
+ --ex-zone-paper: hsl(224 10% 12.5%);
113
+ --ex-zone-paper-shadow: 0 0 0 1px hsl(224 10% 17%), 0 0 24px hsla(0 0% 0% / 0.55);
114
+ --ex-zone-paper-cast: hsla(0 0% 0% / 0.6);
115
+ }
116
+ :root[data-theme='light']:has([data-explico-zones='paper']) {
117
+ --ex-zone-header: hsl(224 20% 90%);
118
+ --ex-zone-header-edge: hsl(224 14% 82%);
119
+ --ex-zone-rail: hsl(224 22% 95%);
120
+ --ex-zone-toc: hsl(224 22% 95%);
121
+ --ex-zone-rail-edge: transparent;
122
+ --ex-zone-toc-edge: transparent;
123
+ --ex-zone-paper: hsl(0 0% 100%);
124
+ --ex-zone-paper-shadow: 0 0 0 1px hsl(224 16% 88%), 0 0 22px hsla(224 30% 20% / 0.1);
125
+ --ex-zone-paper-cast: hsla(224 30% 20% / 0.14);
126
+ }
127
+
128
+ /* none: Starlight's colours, and its hairlines where it draws them. */
129
+ :root:has([data-explico-zones='none']) {
130
+ --ex-zone-title: var(--sl-color-text-accent);
131
+ --ex-zone-header: var(--sl-color-gray-6);
132
+ --ex-zone-header-edge: var(--sl-color-black);
133
+ --ex-zone-rail: var(--sl-color-gray-6);
134
+ --ex-zone-toc: var(--sl-color-black);
135
+ --ex-zone-rail-edge: var(--sl-color-black);
136
+ --ex-zone-toc-edge: var(--sl-color-gray-6);
137
+ }
138
+ :root[data-theme='light']:has([data-explico-zones='none']) {
139
+ --ex-zone-header: var(--sl-color-gray-7);
140
+ --ex-zone-header-edge: var(--sl-color-gray-6);
141
+ --ex-zone-rail: var(--sl-color-black);
142
+ --ex-zone-toc: var(--sl-color-black);
143
+ --ex-zone-rail-edge: var(--sl-color-gray-6);
144
+ --ex-zone-toc-edge: var(--sl-color-gray-6);
145
+ }
146
+
147
+ /* Each sidebar's rows hover with its own fill (`global.css`). */
148
+ .layout-navigation-content {
149
+ --ex-row-hover: var(--ex-zone-rail-hover);
150
+ }
151
+ .layout-page-sidebar-content {
152
+ --ex-row-hover: var(--ex-zone-toc-hover);
153
+ }
154
+
155
+ @media screen {
156
+ :root {
157
+ --sl-color-bg-sidebar: var(--ex-zone-rail);
158
+ }
159
+
160
+ /* Starlight's `PageFrame` paints the outer header; its `Header` is the
161
+ inner `.header`. */
162
+ header.header {
163
+ background-color: var(--ex-zone-header);
164
+ border-bottom-color: var(--ex-zone-header-edge);
165
+ }
166
+ header.header .site-title {
167
+ color: var(--ex-zone-title);
168
+ }
169
+
170
+ .sidebar-pane {
171
+ --sl-color-accent-low: var(--ex-zone-rail-accent);
172
+ }
173
+
174
+ :root:has([data-explico-zones='paper']) {
175
+ --sl-color-bg: var(--ex-zone-paper);
176
+ }
177
+ }
178
+
179
+ @media screen and (min-width: 50rem) {
180
+ .sidebar-pane {
181
+ border-inline-end-color: var(--ex-zone-rail-edge);
182
+ }
183
+
184
+ :root:has([data-explico-zones='paper']) body {
185
+ background-color: var(--ex-zone-rail);
186
+ }
187
+ /* No position or z-index: the sheet stays in the page's flow, so nothing
188
+ inside it (a card, an expanded table, Present mode) is held under the
189
+ sidebars. Its outer shadow shows where the desk does; where a sidebar
190
+ covers it, the sidebar's inner edge takes the shadow. */
191
+ :root:has([data-explico-zones='paper']) .main-pane {
192
+ min-height: calc(100vh - var(--sl-nav-height));
193
+ background-color: var(--sl-color-bg);
194
+ box-shadow: var(--ex-zone-paper-shadow);
195
+ }
196
+ :root:has([data-explico-zones='paper']) .sidebar-pane {
197
+ box-shadow: inset -12px 0 12px -12px var(--ex-zone-paper-cast);
198
+ }
199
+ }
200
+
201
+ @media screen and (min-width: 72rem) {
202
+ .right-sidebar {
203
+ border-inline-start-color: var(--ex-zone-toc-edge);
204
+ }
205
+ }
206
+
207
+ /* accent-header: the band draws on dark-theme colours in both themes, so
208
+ its title, search field, buttons, hovers and focus rings follow without a
209
+ rule each; what opens from it takes the page's colours back. */
210
+ @media screen {
211
+ :root:has([data-explico-zones='accent-header']) header.header > .header {
212
+ --sl-color-white: hsl(0 0% 100%);
213
+ --sl-color-gray-1: color-mix(in oklab, white 92%, var(--ex-zone-header));
214
+ --sl-color-gray-2: color-mix(in oklab, white 84%, var(--ex-zone-header));
215
+ --sl-color-gray-3: color-mix(in oklab, white 66%, var(--ex-zone-header));
216
+ --sl-color-gray-4: color-mix(in oklab, white 46%, var(--ex-zone-header));
217
+ --sl-color-gray-5: color-mix(in oklab, white 22%, var(--ex-zone-header));
218
+ --sl-color-gray-6: color-mix(in oklab, white 12%, var(--ex-zone-header));
219
+ --sl-color-gray-7: color-mix(in oklab, white 6%, var(--ex-zone-header));
220
+ --sl-color-black: var(--ex-zone-header);
221
+ --sl-color-text: var(--sl-color-gray-2);
222
+ --sl-color-text-accent: var(--ex-zone-band-accent);
223
+ --sl-color-text-invert: var(--ex-zone-header);
224
+ --sl-color-accent: var(--ex-zone-band-accent);
225
+ --sl-color-accent-low: color-mix(in oklab, white 16%, var(--ex-zone-header));
226
+ --sl-color-accent-high: hsl(0 0% 100%);
227
+ --sl-color-bg: var(--ex-zone-header);
228
+ --sl-color-bg-nav: var(--ex-zone-header);
229
+ --sl-color-bg-inline-code: var(--sl-color-gray-5);
230
+ --sl-color-hairline-light: var(--sl-color-gray-5);
231
+ --sl-color-hairline: var(--sl-color-gray-6);
232
+ --sl-color-hairline-shade: var(--ex-zone-header-edge);
233
+ color: var(--sl-color-text);
234
+ color-scheme: dark;
235
+ }
236
+ :root:has([data-explico-zones='accent-header'])
237
+ header.header
238
+ > .header
239
+ :is(.about-body, .explico-downloads, dialog, option) {
240
+ --sl-color-white: var(--ex-page-white);
241
+ --sl-color-gray-1: var(--ex-page-gray-1);
242
+ --sl-color-gray-2: var(--ex-page-gray-2);
243
+ --sl-color-gray-3: var(--ex-page-gray-3);
244
+ --sl-color-gray-4: var(--ex-page-gray-4);
245
+ --sl-color-gray-5: var(--ex-page-gray-5);
246
+ --sl-color-gray-6: var(--ex-page-gray-6);
247
+ --sl-color-gray-7: var(--ex-page-gray-7);
248
+ --sl-color-black: var(--ex-page-black);
249
+ --sl-color-text: var(--ex-page-text);
250
+ --sl-color-text-accent: var(--ex-page-text-accent);
251
+ --sl-color-text-invert: var(--ex-page-text-invert);
252
+ --sl-color-accent: var(--ex-page-accent);
253
+ --sl-color-accent-low: var(--ex-page-accent-low);
254
+ --sl-color-accent-high: var(--ex-page-accent-high);
255
+ --sl-color-bg: var(--ex-page-bg);
256
+ --sl-color-bg-nav: var(--ex-page-bg-nav);
257
+ --sl-color-bg-inline-code: var(--ex-page-bg-inline-code);
258
+ --sl-color-hairline-light: var(--ex-page-hairline-light);
259
+ --sl-color-hairline: var(--ex-page-hairline);
260
+ --sl-color-hairline-shade: var(--ex-page-hairline-shade);
261
+ color: var(--sl-color-text);
262
+ }
263
+ :root[data-theme='light']:has([data-explico-zones='accent-header'])
264
+ header.header
265
+ > .header
266
+ :is(.about-body, .explico-downloads, dialog, option) {
267
+ color-scheme: light;
268
+ }
269
+ /* A course with a mark for each theme shows its dark-theme mark on the
270
+ band in both; a single mark has to read on a dark ground. */
271
+ :root[data-theme='light']:has([data-explico-zones='accent-header']) .site-title img.light\:sl-hidden {
272
+ display: block;
273
+ }
274
+ :root[data-theme='light']:has([data-explico-zones='accent-header']) .site-title img.dark\:sl-hidden {
275
+ display: none;
276
+ }
277
+ }
File without changes