explico 0.8.0 → 0.11.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 (230) hide show
  1. package/CHANGELOG.md +1239 -1
  2. package/README.md +60 -15
  3. package/dist/compiler/astro.d.ts +6 -1
  4. package/dist/compiler/cli.d.ts +46 -2
  5. package/dist/compiler/cli.js +70 -4
  6. package/dist/compiler/collections.d.ts +35 -2
  7. package/dist/compiler/collections.js +68 -5
  8. package/dist/compiler/course-config.d.ts +3 -194
  9. package/dist/compiler/course-config.js +78 -5
  10. package/dist/compiler/exports/standalone-html.d.ts +6 -1
  11. package/dist/compiler/knowledge-version.js +1 -1
  12. package/dist/compiler/lesson-derivation.d.ts +27 -10
  13. package/dist/compiler/lesson-derivation.js +23 -8
  14. package/dist/compiler/logging.d.ts +4 -1
  15. package/dist/compiler/logging.js +4 -1
  16. package/dist/compiler/manifest.d.ts +204 -31
  17. package/dist/compiler/manifest.js +270 -55
  18. package/dist/compiler/resolution-report.d.ts +6 -1
  19. package/dist/course-config-Dsnri9Tk.d.ts +464 -0
  20. package/dist/reference/base-accents.d.mts +26 -0
  21. package/dist/reference/base-accents.mjs +31 -0
  22. package/dist/reference/base-roman-labels.d.mts +2 -2
  23. package/dist/reference/base-roman-labels.mjs +2 -2
  24. package/dist/reference/consistency.d.ts +14 -2
  25. package/dist/reference/consistency.js +108 -4
  26. package/dist/reference/delimiter-size.d.ts +3 -2
  27. package/dist/reference/diagrams-validate.d.ts +7 -2
  28. package/dist/reference/diagrams-validate.js +9 -1
  29. package/dist/reference/equations-validate.d.ts +8 -5
  30. package/dist/reference/equations-validate.js +1 -0
  31. package/dist/reference/equations.d.mts +60 -31
  32. package/dist/reference/equations.mjs +83 -43
  33. package/dist/reference/examples-validate.d.ts +31 -0
  34. package/dist/reference/examples-validate.js +48 -0
  35. package/dist/reference/figures-validate.d.ts +1 -1
  36. package/dist/reference/figures-validate.js +4 -1
  37. package/dist/reference/folds-validate.d.ts +33 -0
  38. package/dist/reference/folds-validate.js +32 -0
  39. package/dist/reference/gate-abbreviations.d.ts +3 -1
  40. package/dist/reference/gate-abbreviations.js +1 -0
  41. package/dist/reference/gate-course-rules.d.ts +32 -0
  42. package/dist/reference/gate-course-rules.js +85 -0
  43. package/dist/reference/gate-heading-length.d.ts +5 -2
  44. package/dist/reference/gate-heading-length.js +45 -21
  45. package/dist/reference/gate-heading-structure.d.ts +41 -0
  46. package/dist/reference/gate-heading-structure.js +113 -0
  47. package/dist/reference/gate-math-punctuation.d.ts +71 -0
  48. package/dist/reference/gate-math-punctuation.js +251 -0
  49. package/dist/reference/gate-math.d.ts +22 -6
  50. package/dist/reference/gate-math.js +42 -8
  51. package/dist/reference/gate-part-pages.d.ts +50 -0
  52. package/dist/reference/gate-part-pages.js +118 -0
  53. package/dist/reference/gate-prose-notation.d.ts +21 -11
  54. package/dist/reference/gate-prose-notation.js +25 -7
  55. package/dist/reference/katex-delimiters.mjs +20 -7
  56. package/dist/reference/keyed-float-validate.d.ts +27 -10
  57. package/dist/reference/keyed-float-validate.js +15 -1
  58. package/dist/reference/keyed-jsx-floats.d.mts +11 -5
  59. package/dist/reference/keyed-jsx-floats.mjs +73 -20
  60. package/dist/reference/knowledge-checks-validate.d.ts +1 -1
  61. package/dist/reference/knowledge-checks.d.mts +3 -1
  62. package/dist/reference/knowledge-checks.mjs +9 -4
  63. package/dist/reference/lab-math-scope.d.ts +1 -0
  64. package/dist/reference/lab-math-slot.d.ts +34 -0
  65. package/dist/reference/lab-math-slot.js +6 -0
  66. package/dist/reference/math-glyphs.d.mts +80 -4
  67. package/dist/reference/math-glyphs.mjs +572 -37
  68. package/dist/reference/page-notation.d.ts +6 -1
  69. package/dist/reference/raw-floats-validate.js +1 -1
  70. package/dist/reference/raw-floats.mjs +1 -1
  71. package/dist/reference/rehype-heading-anchors.d.mts +14 -0
  72. package/dist/reference/rehype-heading-anchors.mjs +116 -17
  73. package/dist/reference/rehype-table-header-labels.d.mts +6 -1
  74. package/dist/reference/rehype-table-header-labels.mjs +21 -3
  75. package/dist/reference/remark-asides.d.mts +3 -0
  76. package/dist/reference/remark-asides.mjs +180 -0
  77. package/dist/reference/remark-memo.d.mts +3 -1
  78. package/dist/reference/remark-memo.mjs +42 -11
  79. package/dist/reference/remark-notation.d.mts +60 -10
  80. package/dist/reference/remark-notation.mjs +387 -36
  81. package/dist/reference/render-lab-math.d.ts +4 -26
  82. package/dist/reference/render-lab-math.js +4 -4
  83. package/dist/reference/sections-validate.d.ts +27 -0
  84. package/dist/reference/sections-validate.js +41 -0
  85. package/dist/reference/sections.d.mts +97 -0
  86. package/dist/reference/sections.mjs +306 -0
  87. package/dist/reference/tables-validate.d.ts +1 -1
  88. package/dist/reference/types.d.ts +17 -1
  89. package/dist/reference/unit-words.d.ts +37 -0
  90. package/dist/reference/unit-words.js +170 -0
  91. package/dist/rules/catalog.d.ts +176 -0
  92. package/dist/rules/catalog.js +983 -0
  93. package/dist/rules/course-rules.d.ts +115 -0
  94. package/dist/rules/course-rules.js +292 -0
  95. package/dist/rules/course-rules.schema.json +138 -0
  96. package/dist/rules/in-effect.d.ts +53 -0
  97. package/dist/rules/in-effect.js +142 -0
  98. package/dist/rules/rules.schema.json +1072 -0
  99. package/dist/rules/settings.d.ts +3 -0
  100. package/dist/rules/settings.js +290 -0
  101. package/dist/rules/waivers.d.ts +53 -0
  102. package/dist/rules/waivers.js +132 -0
  103. package/dist/session/PreferenceStore.d.ts +5 -0
  104. package/dist/session/PreferenceStore.js +9 -0
  105. package/docs/VERSIONING.md +2 -2
  106. package/docs/authoring/README.md +232 -40
  107. package/docs/authoring/agents.md +55 -9
  108. package/docs/authoring/components.md +178 -22
  109. package/docs/authoring/migrating.md +1096 -2
  110. package/docs/authoring/notation.md +576 -322
  111. package/docs/authoring/prose.md +551 -0
  112. package/docs/authoring/retired.md +35 -0
  113. package/docs/authoring/structure-rules.md +422 -40
  114. package/docs/authoring/structure.md +445 -62
  115. package/docs/authoring/versioning.md +20 -28
  116. package/docs/authoring/visualizations.md +142 -20
  117. package/package.json +2 -2
  118. package/src/compiler/cli.ts +116 -6
  119. package/src/compiler/collections.ts +111 -7
  120. package/src/compiler/course-config.ts +273 -34
  121. package/src/compiler/knowledge-version.ts +1 -1
  122. package/src/compiler/lesson-derivation.ts +54 -15
  123. package/src/compiler/logging.ts +8 -2
  124. package/src/compiler/manifest.ts +573 -104
  125. package/src/components/BlockHeading.astro +113 -0
  126. package/src/components/CourseContents.astro +221 -0
  127. package/src/components/CurriculumMap.astro +5 -6
  128. package/src/components/FloatIndex.astro +200 -0
  129. package/src/components/HoverPanel.astro +431 -79
  130. package/src/components/PartBridge.astro +27 -0
  131. package/src/components/PartOverview.astro +401 -0
  132. package/src/components/PartScope.astro +27 -0
  133. package/src/components/abbreviation/AbbreviationLayer.astro +49 -51
  134. package/src/components/assessments/AssessmentRunner.tsx +8 -5
  135. package/src/components/assessments/AssessmentSet.astro +23 -26
  136. package/src/components/block-heading.ts +146 -0
  137. package/src/components/card-arrow.ts +243 -0
  138. package/src/components/card-drag.ts +631 -0
  139. package/src/components/card-jump.ts +45 -0
  140. package/src/components/card-manager.ts +1589 -0
  141. package/src/components/card-memory.ts +177 -0
  142. package/src/components/card-placement.ts +504 -0
  143. package/src/components/card-side.ts +336 -0
  144. package/src/components/card-travel.ts +197 -0
  145. package/src/components/citation/CitationLayer.astro +77 -76
  146. package/src/components/diagram/Diagram.astro +161 -316
  147. package/src/components/disclosure/course-disclosure.ts +24 -0
  148. package/src/components/disclosure/hover-preview.ts +122 -42
  149. package/src/components/disclosure/persisted-disclosure.ts +3 -3
  150. package/src/components/disclosure/print-as-shown.ts +252 -0
  151. package/src/components/examples/CompactExample.astro +3 -1
  152. package/src/components/examples/CompactExamples.astro +101 -94
  153. package/src/components/figure/Figure.astro +174 -274
  154. package/src/components/figure/FloatCaption.astro +87 -0
  155. package/src/components/figure/figure-state.ts +58 -0
  156. package/src/components/figure/figure-tools.ts +87 -0
  157. package/src/components/float-name.ts +101 -0
  158. package/src/components/fold/Fold.astro +125 -0
  159. package/src/components/fold/fold-id.ts +40 -0
  160. package/src/components/memo/Memo.astro +162 -231
  161. package/src/components/memo/ShortNote.astro +6 -6
  162. package/src/components/notation/NotationFormula.astro +5 -1
  163. package/src/components/notation/NotationGlossary.astro +3 -4
  164. package/src/components/notation/NotationLayer.astro +169 -162
  165. package/src/components/notation/NotationMath.astro +10 -1
  166. package/src/components/reference/FloatRefLayer.astro +485 -423
  167. package/src/components/starlight/AboutPanel.astro +5 -4
  168. package/src/components/starlight/CollapsibleSections.astro +207 -93
  169. package/src/components/starlight/DiagramEnhancer.astro +15 -138
  170. package/src/components/starlight/HeadingAnchorEnhancer.astro +193 -1
  171. package/src/components/starlight/KeyedFloatEnhancer.astro +100 -9
  172. package/src/components/starlight/LayoutHeader.astro +298 -19
  173. package/src/components/starlight/LayoutPageSidebar.astro +99 -12
  174. package/src/components/starlight/LayoutPageTitle.astro +120 -0
  175. package/src/components/starlight/LayoutSidebar.astro +229 -11
  176. package/src/components/starlight/LessonExportActions.astro +53 -72
  177. package/src/components/starlight/LessonFooter.astro +26 -4
  178. package/src/components/starlight/section-parts.ts +15 -2
  179. package/src/components/starlight/section-summary.ts +181 -0
  180. package/src/components/table/Table.astro +95 -76
  181. package/src/components/table/TableOverflowExpander.astro +65 -28
  182. package/src/content-config.ts +40 -4
  183. package/src/reference/base-accents.mjs +31 -0
  184. package/src/reference/base-roman-labels.mjs +2 -2
  185. package/src/reference/consistency.ts +176 -5
  186. package/src/reference/delimiter-size.ts +3 -2
  187. package/src/reference/diagrams-validate.ts +17 -1
  188. package/src/reference/equations-validate.ts +10 -5
  189. package/src/reference/equations.mjs +83 -43
  190. package/src/reference/examples-validate.ts +97 -0
  191. package/src/reference/figures-validate.ts +6 -1
  192. package/src/reference/folds-validate.ts +65 -0
  193. package/src/reference/gate-abbreviations.ts +1 -0
  194. package/src/reference/gate-course-rules.ts +134 -0
  195. package/src/reference/gate-heading-length.ts +66 -35
  196. package/src/reference/gate-heading-structure.ts +193 -0
  197. package/src/reference/gate-math-punctuation.ts +381 -0
  198. package/src/reference/gate-math.ts +69 -10
  199. package/src/reference/gate-part-pages.ts +217 -0
  200. package/src/reference/gate-prose-notation.ts +59 -12
  201. package/src/reference/katex-delimiters.mjs +20 -7
  202. package/src/reference/keyed-float-validate.ts +45 -11
  203. package/src/reference/keyed-jsx-floats.mjs +73 -20
  204. package/src/reference/knowledge-checks-validate.ts +1 -1
  205. package/src/reference/knowledge-checks.mjs +9 -4
  206. package/src/reference/lab-math-slot.ts +36 -0
  207. package/src/reference/math-glyphs.mjs +572 -37
  208. package/src/reference/raw-floats-validate.ts +1 -1
  209. package/src/reference/raw-floats.mjs +1 -1
  210. package/src/reference/rehype-heading-anchors.mjs +116 -17
  211. package/src/reference/rehype-table-header-labels.mjs +21 -3
  212. package/src/reference/remark-asides.mjs +180 -0
  213. package/src/reference/remark-memo.mjs +42 -11
  214. package/src/reference/remark-notation.mjs +387 -36
  215. package/src/reference/render-lab-math.ts +16 -31
  216. package/src/reference/sections-validate.ts +81 -0
  217. package/src/reference/sections.mjs +306 -0
  218. package/src/reference/tables-validate.ts +2 -1
  219. package/src/reference/types.ts +17 -0
  220. package/src/reference/unit-words.ts +233 -0
  221. package/src/rules/catalog.ts +1298 -0
  222. package/src/rules/course-rules.ts +456 -0
  223. package/src/rules/in-effect.ts +235 -0
  224. package/src/rules/settings.ts +448 -0
  225. package/src/rules/waivers.ts +249 -0
  226. package/src/session/PreferenceStore.ts +15 -0
  227. package/src/styles/global.css +1471 -163
  228. package/src/styles/surfaces.css +182 -0
  229. package/src/components/hover-panel.ts +0 -339
  230. package/src/components/popup-stack.ts +0 -345
@@ -1,40 +1,41 @@
1
1
  ---
2
2
  /**
3
- * Optional hover/pin panel for the inline `[n]` citation markers that the
4
- * `remarkCitation` adapter emits. The markers are real anchor links to the
5
- * on-page "References" list and work with no JavaScript; this island only
6
- * adds a quick look at the source without leaving the reader's place.
3
+ * Cards for the inline `[n]` citation markers that the `remarkCitation`
4
+ * adapter emits. The markers are real anchor links to the on-page
5
+ * "References" list and work with no JavaScript; this island only adds a
6
+ * quick look at the source without leaving the reader's place.
7
7
  *
8
8
  * It reads everything it shows from the page's own static markup — the
9
9
  * marker's `data-*` and the matching `#cite-n` reference-list item — so no
10
- * page serializes a second copy of the source database. Positioning, pin,
11
- * Escape, and outside-close come from the shared `HoverPanel` primitive.
10
+ * page serializes a second copy of the source database. Opening, pinning,
11
+ * Escape and placement come from the card manager (`../card-manager.ts`); a
12
+ * card per source, several at once.
12
13
  */
13
14
  import HoverPanel from '../HoverPanel.astro';
14
15
  ---
15
16
 
16
17
  <HoverPanel id="citation-panel" label="Source citation" data-citation-panel>
18
+ <p class="citation-panel-heading" slot="heading">
19
+ <span class="citation-panel-marker" data-panel-marker></span>
20
+ <span class="citation-panel-label" data-panel-label></span>
21
+ </p>
17
22
  <div class="citation-panel-body">
18
- <p class="citation-panel-label" data-panel-label></p>
19
23
  <p class="citation-panel-locator" data-panel-locator hidden></p>
20
24
  <p class="citation-panel-status" data-panel-status hidden></p>
21
- <a class="citation-panel-link" data-panel-link hidden>Open source link</a>
22
- <a class="citation-panel-jump" data-panel-jump
23
- >See it in the reference list</a
24
- >
25
- <button
26
- class="citation-panel-pin"
27
- type="button"
28
- data-panel-pin
29
- aria-pressed="false"
30
- >
31
- Pin
32
- </button>
25
+ <p class="citation-panel-links">
26
+ <a class="citation-panel-link" data-panel-link hidden
27
+ >Go to the source<span aria-hidden="true" data-jump-arrow> ↗</span></a
28
+ >
29
+ <a class="citation-panel-jump" data-panel-jump
30
+ >Go to the reference list<span aria-hidden="true" data-jump-arrow> ↓</span></a
31
+ >
32
+ </p>
33
33
  </div>
34
34
  </HoverPanel>
35
35
 
36
36
  <script>
37
- import { createHoverPanel, closestElement } from '../hover-panel';
37
+ import { cloneCardShell, registerCardSource } from '../card-manager';
38
+ import { wireJumpArrow } from '../card-jump';
38
39
  import { referenceLabelFromText } from '../../reference/citation-format.mjs';
39
40
 
40
41
  function setText(element: HTMLElement, value: string) {
@@ -42,38 +43,43 @@ import HoverPanel from '../HoverPanel.astro';
42
43
  element.hidden = value.length === 0;
43
44
  }
44
45
 
46
+ function closestElement(node: EventTarget | null, selector: string) {
47
+ return node instanceof Element ? node.closest<HTMLElement>(selector) : null;
48
+ }
49
+
45
50
  function setup() {
46
- const panel = document.querySelector<HTMLElement>('[data-citation-panel]');
47
- if (!panel || panel.dataset.hoverPanelReady === 'true') return;
48
-
49
- const markers = Array.from(
50
- document.querySelectorAll<HTMLAnchorElement>(
51
- '.sl-markdown-content a.citation-ref[data-citation-id]',
52
- ),
53
- );
54
- if (markers.length === 0) return;
55
- const markerSet = new Set<HTMLElement>(markers);
56
-
57
- const label = panel.querySelector<HTMLElement>('[data-panel-label]')!;
58
- const locator = panel.querySelector<HTMLElement>('[data-panel-locator]')!;
59
- const status = panel.querySelector<HTMLElement>('[data-panel-status]')!;
60
- const link = panel.querySelector<HTMLAnchorElement>('[data-panel-link]')!;
61
- const jump = panel.querySelector<HTMLAnchorElement>('[data-panel-jump]')!;
62
- const pin = panel.querySelector<HTMLButtonElement>('[data-panel-pin]')!;
51
+ const template = document.getElementById('citation-panel');
52
+ if (
53
+ !(template instanceof HTMLTemplateElement) ||
54
+ template.dataset.cardSourceReady === 'true' ||
55
+ !document.querySelector('a.citation-ref[data-citation-id]')
56
+ ) {
57
+ return;
58
+ }
59
+ template.dataset.cardSourceReady = 'true';
63
60
 
61
+ // A marker anywhere this page's reference list explains it: the article,
62
+ // or a card previewing part of it. A card cloned from another page
63
+ // (`data-card-foreign`) numbers its sources by that page's list.
64
64
  const markerFrom = (node: EventTarget | null) => {
65
- const candidate = closestElement(
66
- node,
67
- 'a.citation-ref[data-citation-id]',
68
- );
69
- return candidate && markerSet.has(candidate) ? candidate : null;
65
+ const candidate = closestElement(node, 'a.citation-ref[data-citation-id]');
66
+ return candidate && !candidate.closest('[data-card-foreign]') ? candidate : null;
70
67
  };
71
68
 
72
- // Fill the panel from the marker plus its `#cite-n` reference-list item —
69
+ // Fill a card from the marker plus its `#cite-n` reference-list item —
73
70
  // never from a serialized source table.
74
- const render = (marker: HTMLElement, number: string) => {
71
+ const render = (number: string, marker: HTMLElement) => {
75
72
  const item = document.getElementById(`cite-${number}`);
76
- if (!item) return false;
73
+ const el = cloneCardShell(template);
74
+ if (!item || !el) return null;
75
+ const field = (name: string) => el.querySelector<HTMLElement>(`[data-panel-${name}]`);
76
+ const markerEl = field('marker');
77
+ const label = field('label');
78
+ const locator = field('locator');
79
+ const status = field('status');
80
+ const link = el.querySelector<HTMLAnchorElement>('[data-panel-link]');
81
+ const jump = el.querySelector<HTMLAnchorElement>('[data-panel-jump]');
82
+ if (!markerEl || !label || !locator || !status || !link || !jump) return null;
77
83
 
78
84
  // The reference list is a tight list, so the `<li>` has no `<p>`
79
85
  // wrapper: clone it and drop the trailing link/status chrome.
@@ -86,8 +92,10 @@ import HoverPanel from '../HoverPanel.astro';
86
92
  const referenceText = line.textContent ?? '';
87
93
  const loc = marker.dataset.citationLocator ?? '';
88
94
 
95
+ markerEl.textContent = `[${number}]`;
89
96
  label.textContent = referenceLabelFromText(referenceText, loc);
90
97
  setText(locator, loc);
98
+ el.setAttribute('aria-label', `Source citation ${number}`);
91
99
 
92
100
  const sourceStatus = item
93
101
  .querySelector('.citation-status')
@@ -97,27 +105,23 @@ import HoverPanel from '../HoverPanel.astro';
97
105
  const sourceUrl = item.querySelector<HTMLAnchorElement>('a.citation-url');
98
106
  if (sourceUrl) {
99
107
  link.href = sourceUrl.href;
108
+ wireJumpArrow(link);
100
109
  link.hidden = false;
101
- } else {
102
- link.hidden = true;
103
110
  }
104
111
 
105
112
  jump.href = marker.getAttribute('href') ?? '#references';
106
- return true;
113
+ wireJumpArrow(jump);
114
+ return el;
107
115
  };
108
116
 
109
- createHoverPanel({
110
- panel,
111
- groupId: 'citation',
117
+ registerCardSource({
118
+ layer: 'citation',
112
119
  triggerFrom: markerFrom,
113
- keyFor: (element) => element.dataset.citationNumber ?? null,
114
- render,
115
- pinControlFrom: (node) => closestElement(node, '[data-panel-pin]'),
116
- onSync: ({ pinnedKey }) => {
117
- const isPinned = pinnedKey !== null;
118
- pin.setAttribute('aria-pressed', String(isPinned));
119
- pin.textContent = isPinned ? 'Unpin' : 'Pin';
120
+ itemFor: (marker) => {
121
+ const number = marker.dataset.citationNumber;
122
+ return number && document.getElementById(`cite-${number}`) ? number : null;
120
123
  },
124
+ render,
121
125
  });
122
126
  }
123
127
 
@@ -127,11 +131,22 @@ import HoverPanel from '../HoverPanel.astro';
127
131
 
128
132
  <style>
129
133
  @layer starlight.components {
134
+ .citation-panel-heading,
130
135
  .citation-panel-body p {
131
136
  margin: 0 0 0.5rem;
132
137
  line-height: 1.5;
133
138
  }
134
139
 
140
+ .citation-panel-heading {
141
+ margin: 0;
142
+ }
143
+
144
+ .citation-panel-marker {
145
+ margin-inline-end: 0.4rem;
146
+ color: var(--sl-color-text-accent);
147
+ font-variant-numeric: tabular-nums;
148
+ }
149
+
135
150
  .citation-panel-label {
136
151
  font-weight: 600;
137
152
  }
@@ -146,29 +161,15 @@ import HoverPanel from '../HoverPanel.astro';
146
161
  text-transform: lowercase;
147
162
  }
148
163
 
164
+ .citation-panel-body .citation-panel-links {
165
+ margin: 0;
166
+ }
167
+
149
168
  .citation-panel-link,
150
169
  .citation-panel-jump {
151
170
  display: inline-block;
152
171
  margin-inline-end: 0.9rem;
153
172
  font-size: var(--sl-text-xs);
154
173
  }
155
-
156
- .citation-panel-pin {
157
- display: block;
158
- margin-top: 0.6rem;
159
- padding: 0.2rem 0.6rem;
160
- border: 1px solid var(--sl-color-gray-5);
161
- border-radius: 0.35rem;
162
- background: var(--sl-color-bg);
163
- color: var(--sl-color-text-accent);
164
- font: inherit;
165
- font-size: var(--sl-text-xs);
166
- cursor: pointer;
167
- }
168
-
169
- .citation-panel-pin[aria-pressed='true'] {
170
- border-color: var(--sl-color-accent);
171
- background: var(--sl-color-accent-low);
172
- }
173
174
  }
174
175
  </style>