metanorma-document 0.2.12 → 0.2.13

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 (391) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +21 -0
  3. data/.github/workflows/release.yml +25 -0
  4. data/.github/workflows/roundtrip-samples.yml +132 -0
  5. data/.gitignore +19 -0
  6. data/.rspec +3 -0
  7. data/.rubocop.yml +22 -0
  8. data/.rubocop_todo.yml +66 -164
  9. data/CHANGELOG.md +1 -0
  10. data/Gemfile +32 -0
  11. data/README.adoc +0 -144
  12. data/Rakefile +2 -14
  13. data/bin/console +15 -0
  14. data/bin/setup +8 -0
  15. data/data/javascripts/components/mn-lightbox.js +2 -18
  16. data/data/javascripts/components/mn-shortcuts.js +0 -2
  17. data/data/javascripts/core/mn-navigation.js +0 -8
  18. data/data/javascripts/core/mn-theme.js +9 -9
  19. data/data/logos/pdfa-logo.svg +94 -31
  20. data/data/stylesheets/base/_layout.css +0 -3
  21. data/data/stylesheets/base/_reset.css +3 -3
  22. data/data/stylesheets/base/_typography.css +5 -0
  23. data/data/stylesheets/components/bibliography.css +3 -3
  24. data/data/stylesheets/components/cover.css +1 -3
  25. data/data/stylesheets/components/figure.css +1 -13
  26. data/data/stylesheets/components/footnote.css +5 -65
  27. data/data/stylesheets/components/formula.css +0 -44
  28. data/data/stylesheets/components/header.css +2 -17
  29. data/data/stylesheets/components/inline.css +1 -1
  30. data/data/stylesheets/components/table.css +2 -15
  31. data/data/stylesheets/components/term.css +1 -0
  32. data/lib/metanorma/bipm_document/metadata/bipm_bibliographic_item.rb +14 -0
  33. data/lib/metanorma/bipm_document/metadata.rb +1 -1
  34. data/lib/metanorma/document/components/ancillary_blocks/sourcecode_block.rb +65 -0
  35. data/lib/metanorma/document/components/ancillary_blocks.rb +0 -4
  36. data/lib/metanorma/document/components/bib_data/bib_data.rb +0 -7
  37. data/lib/metanorma/document/components/blocks/requirement_model.rb +131 -0
  38. data/lib/metanorma/document/components/blocks.rb +7 -8
  39. data/lib/metanorma/document/components/id_elements/image.rb +0 -2
  40. data/lib/metanorma/document/components/inline/asciimath_element.rb +0 -2
  41. data/lib/metanorma/document/components/inline/attribution_element.rb +0 -2
  42. data/lib/metanorma/document/components/inline/bcp14_element.rb +0 -2
  43. data/lib/metanorma/document/components/inline/biblio_tag_element.rb +0 -2
  44. data/lib/metanorma/document/components/inline/br_element.rb +0 -2
  45. data/lib/metanorma/document/components/inline/comma_element.rb +0 -2
  46. data/lib/metanorma/document/components/inline/concept_element.rb +0 -2
  47. data/lib/metanorma/document/components/inline/display_text_element.rb +0 -2
  48. data/lib/metanorma/document/components/inline/em_raw_element.rb +0 -2
  49. data/lib/metanorma/document/components/inline/enum_comma_element.rb +0 -2
  50. data/lib/metanorma/document/components/inline/eref_element.rb +0 -2
  51. data/lib/metanorma/document/components/inline/fmt_admitted_element.rb +0 -4
  52. data/lib/metanorma/document/components/inline/fmt_annotation_body_element.rb +0 -4
  53. data/lib/metanorma/document/components/inline/fmt_annotation_end_element.rb +0 -4
  54. data/lib/metanorma/document/components/inline/fmt_annotation_start_element.rb +0 -4
  55. data/lib/metanorma/document/components/inline/fmt_concept_element.rb +0 -4
  56. data/lib/metanorma/document/components/inline/fmt_definition_element.rb +0 -4
  57. data/lib/metanorma/document/components/inline/fmt_fn_body_element.rb +0 -4
  58. data/lib/metanorma/document/components/inline/fmt_fn_label_element.rb +0 -4
  59. data/lib/metanorma/document/components/inline/fmt_footnote_container_element.rb +0 -4
  60. data/lib/metanorma/document/components/inline/fmt_identifier_element.rb +0 -4
  61. data/lib/metanorma/document/components/inline/fmt_name_element.rb +0 -4
  62. data/lib/metanorma/document/components/inline/fmt_preferred_element.rb +0 -4
  63. data/lib/metanorma/document/components/inline/fmt_sourcecode_element.rb +0 -4
  64. data/lib/metanorma/document/components/inline/fmt_stem_element.rb +0 -10
  65. data/lib/metanorma/document/components/inline/fmt_termsource_element.rb +0 -4
  66. data/lib/metanorma/document/components/inline/fmt_title_element.rb +0 -4
  67. data/lib/metanorma/document/components/inline/fmt_xref_element.rb +0 -4
  68. data/lib/metanorma/document/components/inline/fmt_xref_label_element.rb +0 -4
  69. data/lib/metanorma/document/components/inline/fn_element.rb +0 -2
  70. data/lib/metanorma/document/components/inline/link_element.rb +0 -2
  71. data/lib/metanorma/document/components/inline/localized_string_element.rb +0 -2
  72. data/lib/metanorma/document/components/inline/localized_strings_element.rb +0 -2
  73. data/lib/metanorma/document/components/inline/math_element.rb +0 -2
  74. data/lib/metanorma/document/components/inline/name_with_id_element.rb +0 -4
  75. data/lib/metanorma/document/components/inline/semx_child_element.rb +0 -2
  76. data/lib/metanorma/document/components/inline/semx_element.rb +1 -13
  77. data/lib/metanorma/document/components/inline/small_cap_element.rb +0 -2
  78. data/lib/metanorma/document/components/inline/span_element.rb +15 -10
  79. data/lib/metanorma/document/components/inline/stem_inline_element.rb +1 -7
  80. data/lib/metanorma/document/components/inline/strong_raw_element.rb +0 -2
  81. data/lib/metanorma/document/components/inline/sub_element.rb +0 -2
  82. data/lib/metanorma/document/components/inline/sup_element.rb +0 -2
  83. data/lib/metanorma/document/components/inline/tab_element.rb +0 -2
  84. data/lib/metanorma/document/components/inline/title_with_annotation_element.rb +0 -4
  85. data/lib/metanorma/document/components/inline/tt_element.rb +0 -2
  86. data/lib/metanorma/document/components/inline/variant_title_element.rb +0 -2
  87. data/lib/metanorma/document/components/inline/xref_element.rb +0 -10
  88. data/lib/metanorma/document/components/inline.rb +0 -12
  89. data/lib/metanorma/document/components/multi_paragraph/quote_block.rb +29 -0
  90. data/lib/metanorma/document/components/multi_paragraph.rb +0 -2
  91. data/lib/metanorma/document/components/reference_elements/source_element.rb +31 -0
  92. data/lib/metanorma/document/components/reference_elements.rb +2 -2
  93. data/lib/metanorma/document/components/tables/table_block.rb +22 -0
  94. data/lib/metanorma/document/components/tables/table_section.rb +25 -0
  95. data/lib/metanorma/document/components/tables.rb +3 -5
  96. data/lib/metanorma/document/relaton/address.rb +27 -0
  97. data/lib/metanorma/document/relaton/bib_item_locality.rb +12 -3
  98. data/lib/metanorma/document/relaton/copyright_association.rb +10 -0
  99. data/lib/metanorma/document/relaton/edition.rb +7 -4
  100. data/lib/metanorma/document/relaton/organization.rb +14 -0
  101. data/lib/metanorma/document/relaton/phone.rb +9 -3
  102. data/lib/metanorma/document/relaton/place_type.rb +13 -0
  103. data/lib/metanorma/document/relaton/price_type.rb +9 -3
  104. data/lib/metanorma/document/relaton.rb +1 -6
  105. data/lib/metanorma/document/version.rb +1 -1
  106. data/lib/metanorma/document.rb +0 -2
  107. data/lib/metanorma/html/asset_pipeline.rb +0 -1
  108. data/lib/metanorma/html/base_renderer.rb +1008 -261
  109. data/lib/metanorma/html/bipm_renderer.rb +144 -15
  110. data/lib/metanorma/html/cc_renderer.rb +45 -1
  111. data/lib/metanorma/html/component/base.rb +7 -2
  112. data/lib/metanorma/html/component/index_section.rb +43 -41
  113. data/lib/metanorma/html/drops/admonition_drop.rb +4 -1
  114. data/lib/metanorma/html/drops/block_element_drop.rb +2 -7
  115. data/lib/metanorma/html/drops/example_drop.rb +4 -1
  116. data/lib/metanorma/html/drops/figure_drop.rb +22 -31
  117. data/lib/metanorma/html/drops/footnote_drop.rb +1 -1
  118. data/lib/metanorma/html/drops/formula_drop.rb +16 -45
  119. data/lib/metanorma/html/drops/note_drop.rb +7 -9
  120. data/lib/metanorma/html/drops/sourcecode_drop.rb +5 -12
  121. data/lib/metanorma/html/drops.rb +0 -2
  122. data/lib/metanorma/html/generator.rb +2 -2
  123. data/lib/metanorma/html/icc_renderer.rb +39 -0
  124. data/lib/metanorma/html/iec_renderer.rb +44 -1
  125. data/lib/metanorma/html/ieee_renderer.rb +45 -1
  126. data/lib/metanorma/html/ietf_renderer.rb +48 -1
  127. data/lib/metanorma/html/iho_renderer.rb +46 -1
  128. data/lib/metanorma/html/iso_renderer.rb +343 -290
  129. data/lib/metanorma/html/itu_renderer.rb +45 -1
  130. data/lib/metanorma/html/ogc_renderer.rb +76 -15
  131. data/lib/metanorma/html/oiml_renderer.rb +38 -18
  132. data/lib/metanorma/html/pdfa_renderer.rb +39 -0
  133. data/lib/metanorma/html/ribose_renderer.rb +45 -1
  134. data/lib/metanorma/html/standard_renderer.rb +229 -341
  135. data/lib/metanorma/html/templates/_footnotes.html.liquid +6 -6
  136. data/lib/metanorma/html/templates/_formula.html.liquid +1 -1
  137. data/lib/metanorma/html/templates/_header.html.liquid +1 -1
  138. data/lib/metanorma/html/templates/_iso_cover.html.liquid +1 -1
  139. data/lib/metanorma/html/templates/document.html.liquid +0 -4
  140. data/lib/metanorma/html/theme.rb +107 -180
  141. data/lib/metanorma/html.rb +3 -14
  142. data/lib/metanorma/ietf_document/metadata/ietf_bib_data_extension_type.rb +25 -0
  143. data/lib/metanorma/ietf_document/metadata.rb +0 -2
  144. data/lib/metanorma/iso_document/metadata/iso_bib_data_extension_type.rb +48 -0
  145. data/lib/metanorma/iso_document/metadata/iso_bibliographic_item.rb +72 -0
  146. data/lib/metanorma/iso_document/metadata/iso_document_status.rb +30 -0
  147. data/lib/metanorma/iso_document/metadata/iso_localized_title.rb +1 -4
  148. data/lib/metanorma/iso_document/metadata/structured_identifier.rb +17 -0
  149. data/lib/metanorma/iso_document/metadata/title_collection.rb +0 -1
  150. data/lib/metanorma/iso_document/metadata.rb +4 -9
  151. data/lib/metanorma/iso_document/terms/iso_term.rb +13 -0
  152. data/lib/metanorma/iso_document/terms.rb +0 -1
  153. data/lib/metanorma/itu_document/metadata/itu_bib_data_extension_type.rb +37 -0
  154. data/lib/metanorma/itu_document/metadata.rb +4 -3
  155. data/lib/metanorma/standard_document/block_attributes.rb +9 -5
  156. data/lib/metanorma/standard_document/blocks/block_source.rb +23 -0
  157. data/lib/metanorma/standard_document/blocks.rb +1 -1
  158. data/lib/metanorma/standard_document/terms/term_expression.rb +31 -0
  159. data/lib/metanorma/standard_document/terms.rb +0 -1
  160. data/metanorma-document.gemspec +35 -0
  161. metadata +13 -262
  162. data/CLAUDE.md +0 -26
  163. data/TODO.finalize/01-split-multi-class-files.md +0 -8
  164. data/TODO.finalize/02-remove-data-dist-iso-document-frontend.md +0 -6
  165. data/TODO.finalize/03-align-frontend-iife-and-gha-build.md +0 -11
  166. data/TODO.finalize/04-theme-per-flavor-config-driven.md +0 -9
  167. data/TODO.finalize/05-migrate-all-html-to-liquid.md +0 -16
  168. data/TODO.finalize/06-integrate-pubid-library.md +0 -16
  169. data/TODO.finalize/07-replace-relaton-models-with-relaton-bib.md +0 -39
  170. data/TODO.finalize/08-refactor-renderer-architecture.md +0 -25
  171. data/TODO.finalize/09-eliminate-code-smells.md +0 -14
  172. data/TODO.finalize/10-comprehensive-spec-coverage.md +0 -24
  173. data/TODO.finalize/11-config-driven-flavor-metadata.md +0 -20
  174. data/TODO.finalize/12-add-frozen-string-literal.md +0 -6
  175. data/TODO.finalize/13-extract-composition-from-god-class.md +0 -96
  176. data/TODO.finalize/14-config-driven-section-ordering.md +0 -31
  177. data/TODO.finalize/15-theme-directories-per-flavor.md +0 -46
  178. data/TODO.finalize/16-theme-lutaml-model-schema.md +0 -44
  179. data/data/javascripts/components/mn-footnotes.js +0 -68
  180. data/data/logos/oiml-logo-full-dark.svg +0 -1
  181. data/data/logos/oiml-logo-full-light.svg +0 -1
  182. data/data/logos/oiml-logo-icon-dark.svg +0 -1
  183. data/data/logos/oiml-logo-icon-light.svg +0 -1
  184. data/data/logos/oiml-logo.svg +0 -1
  185. data/data/themes/bipm.yaml +0 -60
  186. data/data/themes/cc.yaml +0 -43
  187. data/data/themes/icc.yaml +0 -39
  188. data/data/themes/iec.yaml +0 -44
  189. data/data/themes/ieee.yaml +0 -43
  190. data/data/themes/ietf.yaml +0 -45
  191. data/data/themes/iho.yaml +0 -46
  192. data/data/themes/iso.yaml +0 -40
  193. data/data/themes/itu.yaml +0 -45
  194. data/data/themes/ogc.yaml +0 -51
  195. data/data/themes/oiml.yaml +0 -56
  196. data/data/themes/pdfa.yaml +0 -44
  197. data/data/themes/ribose.yaml +0 -43
  198. data/exe/metanorma-document +0 -11
  199. data/frontend/e2e/sample-html.test.ts +0 -256
  200. data/frontend/index.html +0 -12
  201. data/frontend/package-lock.json +0 -4725
  202. data/frontend/package.json +0 -32
  203. data/frontend/postcss.config.js +0 -6
  204. data/frontend/src/App.vue +0 -79
  205. data/frontend/src/app.ts +0 -21
  206. data/frontend/src/components/AppSidebar.vue +0 -77
  207. data/frontend/src/components/DocumentReader.vue +0 -180
  208. data/frontend/src/components/MirrorRenderer.vue +0 -23
  209. data/frontend/src/components/ReadingProgressBar.vue +0 -29
  210. data/frontend/src/components/TextRenderer.vue +0 -131
  211. data/frontend/src/components/TocItem.vue +0 -57
  212. data/frontend/src/components/TopBar.vue +0 -49
  213. data/frontend/src/components/__tests__/MirrorRenderer.test.ts +0 -178
  214. data/frontend/src/components/blocks/AdmonitionBlock.vue +0 -74
  215. data/frontend/src/components/blocks/ClauseBlock.vue +0 -53
  216. data/frontend/src/components/blocks/ExampleBlock.vue +0 -21
  217. data/frontend/src/components/blocks/FallbackBlock.vue +0 -18
  218. data/frontend/src/components/blocks/FigureBlock.vue +0 -26
  219. data/frontend/src/components/blocks/FootnotesBlock.vue +0 -25
  220. data/frontend/src/components/blocks/ListBlocks.vue +0 -62
  221. data/frontend/src/components/blocks/NoteBlock.vue +0 -21
  222. data/frontend/src/components/blocks/ParagraphBlock.vue +0 -25
  223. data/frontend/src/components/blocks/QuoteBlock.vue +0 -25
  224. data/frontend/src/components/blocks/ReviewBlock.vue +0 -39
  225. data/frontend/src/components/blocks/SourcecodeBlock.vue +0 -52
  226. data/frontend/src/components/blocks/TableBlock.vue +0 -48
  227. data/frontend/src/components/blocks/index.ts +0 -36
  228. data/frontend/src/stores/__tests__/documentStore.fixture.test.ts +0 -272
  229. data/frontend/src/stores/__tests__/documentStore.test.ts +0 -143
  230. data/frontend/src/stores/__tests__/ebookStore.test.ts +0 -145
  231. data/frontend/src/stores/__tests__/uiStore.test.ts +0 -42
  232. data/frontend/src/stores/documentStore.ts +0 -153
  233. data/frontend/src/stores/ebookStore.ts +0 -179
  234. data/frontend/src/stores/uiStore.ts +0 -32
  235. data/frontend/src/styles.css +0 -156
  236. data/frontend/src/types/__tests__/rendering-contract.test.ts +0 -172
  237. data/frontend/src/types/rendering-contract.ts +0 -209
  238. data/frontend/src/utils/__tests__/typeMetadata.test.ts +0 -102
  239. data/frontend/src/utils/typeMetadata.ts +0 -121
  240. data/frontend/tailwind.config.js +0 -18
  241. data/frontend/test/fixtures/iso-document.json +0 -271
  242. data/frontend/tmp/debug_e2e.cjs +0 -46
  243. data/frontend/tsconfig.json +0 -25
  244. data/frontend/tsconfig.node.json +0 -11
  245. data/frontend/vite.config.ts +0 -37
  246. data/frontend/vitest.e2e.config.ts +0 -9
  247. data/lib/metanorma/bipm_document/metadata/depiction_element.rb +0 -18
  248. data/lib/metanorma/document/cli.rb +0 -116
  249. data/lib/metanorma/document/components/ancillary_blocks/callout_annotation.rb +0 -27
  250. data/lib/metanorma/document/components/ancillary_blocks/sourcecode_body.rb +0 -18
  251. data/lib/metanorma/document/components/blocks/classification_value.rb +0 -21
  252. data/lib/metanorma/document/components/blocks/permission_model.rb +0 -28
  253. data/lib/metanorma/document/components/blocks/recommendation_model.rb +0 -28
  254. data/lib/metanorma/document/components/blocks/requirement_base.rb +0 -30
  255. data/lib/metanorma/document/components/blocks/requirement_classification.rb +0 -20
  256. data/lib/metanorma/document/components/blocks/requirement_description.rb +0 -43
  257. data/lib/metanorma/document/components/blocks/requirement_inherit.rb +0 -24
  258. data/lib/metanorma/document/components/inline/location_element.rb +0 -24
  259. data/lib/metanorma/document/components/inline/rendered_display.rb +0 -23
  260. data/lib/metanorma/document/components/inline/rendered_math_element.rb +0 -21
  261. data/lib/metanorma/document/components/inline/semantic_content.rb +0 -51
  262. data/lib/metanorma/document/components/inline/semantic_math_element.rb +0 -20
  263. data/lib/metanorma/document/components/inline/vocabulary.rb +0 -184
  264. data/lib/metanorma/document/components/multi_paragraph/quote_author_element.rb +0 -20
  265. data/lib/metanorma/document/components/reference_elements/source_modification.rb +0 -21
  266. data/lib/metanorma/document/components/reference_elements/source_origin.rb +0 -28
  267. data/lib/metanorma/document/components/tables/col_element.rb +0 -18
  268. data/lib/metanorma/document/components/tables/col_group_element.rb +0 -18
  269. data/lib/metanorma/document/components/tables/table_body_section.rb +0 -16
  270. data/lib/metanorma/document/components/tables/table_foot_section.rb +0 -16
  271. data/lib/metanorma/document/components/tables/table_head_section.rb +0 -16
  272. data/lib/metanorma/document/relaton/copyright_owner.rb +0 -16
  273. data/lib/metanorma/document/relaton/formatted_address.rb +0 -29
  274. data/lib/metanorma/document/relaton/logo_element.rb +0 -18
  275. data/lib/metanorma/document/relaton/region_element.rb +0 -18
  276. data/lib/metanorma/html/drops/biblio_entry_drop.rb +0 -50
  277. data/lib/metanorma/html/renderers/block_renderer.rb +0 -372
  278. data/lib/metanorma/html/renderers/inline_renderer.rb +0 -655
  279. data/lib/metanorma/html/renderers/pubid_renderer.rb +0 -69
  280. data/lib/metanorma/html/renderers/section_renderer.rb +0 -193
  281. data/lib/metanorma/html/renderers.rb +0 -8
  282. data/lib/metanorma/html/templates/_audio.html.liquid +0 -1
  283. data/lib/metanorma/html/templates/_biblio_entry.html.liquid +0 -1
  284. data/lib/metanorma/html/templates/_bipm_cover.html.liquid +0 -27
  285. data/lib/metanorma/html/templates/_boilerplate.html.liquid +0 -1
  286. data/lib/metanorma/html/templates/_bookmark.html.liquid +0 -1
  287. data/lib/metanorma/html/templates/_br.html.liquid +0 -1
  288. data/lib/metanorma/html/templates/_definition_list.html.liquid +0 -6
  289. data/lib/metanorma/html/templates/_element.html.liquid +0 -1
  290. data/lib/metanorma/html/templates/_fn_marker.html.liquid +0 -1
  291. data/lib/metanorma/html/templates/_heading.html.liquid +0 -1
  292. data/lib/metanorma/html/templates/_image.html.liquid +0 -1
  293. data/lib/metanorma/html/templates/_inline_span.html.liquid +0 -1
  294. data/lib/metanorma/html/templates/_link.html.liquid +0 -1
  295. data/lib/metanorma/html/templates/_list.html.liquid +0 -3
  296. data/lib/metanorma/html/templates/_list_item.html.liquid +0 -1
  297. data/lib/metanorma/html/templates/_main_content.html.liquid +0 -1
  298. data/lib/metanorma/html/templates/_math_container.html.liquid +0 -1
  299. data/lib/metanorma/html/templates/_paragraph.html.liquid +0 -1
  300. data/lib/metanorma/html/templates/_prefatory_section.html.liquid +0 -1
  301. data/lib/metanorma/html/templates/_pubid_identifier.html.liquid +0 -1
  302. data/lib/metanorma/html/templates/_quote.html.liquid +0 -4
  303. data/lib/metanorma/html/templates/_ref_date.html.liquid +0 -1
  304. data/lib/metanorma/html/templates/_ref_title.html.liquid +0 -1
  305. data/lib/metanorma/html/templates/_section.html.liquid +0 -5
  306. data/lib/metanorma/html/templates/_standard_cover.html.liquid +0 -31
  307. data/lib/metanorma/html/templates/_standard_doc_title.html.liquid +0 -3
  308. data/lib/metanorma/html/templates/_stem_span.html.liquid +0 -1
  309. data/lib/metanorma/html/templates/_table.html.liquid +0 -9
  310. data/lib/metanorma/html/templates/_term_domain.html.liquid +0 -1
  311. data/lib/metanorma/html/templates/_term_example.html.liquid +0 -1
  312. data/lib/metanorma/html/templates/_term_note.html.liquid +0 -1
  313. data/lib/metanorma/html/templates/_term_number.html.liquid +0 -1
  314. data/lib/metanorma/html/templates/_term_source.html.liquid +0 -1
  315. data/lib/metanorma/html/templates/_term_text_note.html.liquid +0 -1
  316. data/lib/metanorma/html/templates/_video.html.liquid +0 -1
  317. data/lib/metanorma/html/templates/_wrapped_preface.html.liquid +0 -1
  318. data/lib/metanorma/ietf_document/metadata/pi_settings.rb +0 -32
  319. data/lib/metanorma/iso_document/metadata/doctype_element.rb +0 -20
  320. data/lib/metanorma/iso_document/metadata/language_element.rb +0 -18
  321. data/lib/metanorma/iso_document/metadata/project_number.rb +0 -22
  322. data/lib/metanorma/iso_document/metadata/script_element.rb +0 -18
  323. data/lib/metanorma/iso_document/metadata/stage_element.rb +0 -26
  324. data/lib/metanorma/iso_document/metadata/stagename_element.rb +0 -18
  325. data/lib/metanorma/iso_document/terms/term_domain_element.rb +0 -18
  326. data/lib/metanorma/itu_document/metadata/meeting_date.rb +0 -18
  327. data/lib/metanorma/itu_document/metadata/meeting_element.rb +0 -18
  328. data/lib/metanorma/itu_document/metadata/study_period.rb +0 -18
  329. data/lib/metanorma/mirror/default_registry.rb +0 -170
  330. data/lib/metanorma/mirror/handler_registry.rb +0 -60
  331. data/lib/metanorma/mirror/handler_result.rb +0 -37
  332. data/lib/metanorma/mirror/handlers/admonition.rb +0 -18
  333. data/lib/metanorma/mirror/handlers/example.rb +0 -21
  334. data/lib/metanorma/mirror/handlers/figure.rb +0 -53
  335. data/lib/metanorma/mirror/handlers/formula.rb +0 -35
  336. data/lib/metanorma/mirror/handlers/inline/rich_html_renderer.rb +0 -159
  337. data/lib/metanorma/mirror/handlers/inline/text_extractor.rb +0 -116
  338. data/lib/metanorma/mirror/handlers/inline.rb +0 -225
  339. data/lib/metanorma/mirror/handlers/list.rb +0 -110
  340. data/lib/metanorma/mirror/handlers/note.rb +0 -26
  341. data/lib/metanorma/mirror/handlers/paragraph.rb +0 -19
  342. data/lib/metanorma/mirror/handlers/quote.rb +0 -16
  343. data/lib/metanorma/mirror/handlers/review.rb +0 -19
  344. data/lib/metanorma/mirror/handlers/section.rb +0 -149
  345. data/lib/metanorma/mirror/handlers/sourcecode.rb +0 -27
  346. data/lib/metanorma/mirror/handlers/structural.rb +0 -68
  347. data/lib/metanorma/mirror/handlers/table.rb +0 -81
  348. data/lib/metanorma/mirror/handlers/term.rb +0 -100
  349. data/lib/metanorma/mirror/handlers.rb +0 -60
  350. data/lib/metanorma/mirror/id_strategy/positional.rb +0 -166
  351. data/lib/metanorma/mirror/id_strategy/preserve.rb +0 -12
  352. data/lib/metanorma/mirror/id_strategy.rb +0 -34
  353. data/lib/metanorma/mirror/math_util.rb +0 -53
  354. data/lib/metanorma/mirror/metadata.rb +0 -37
  355. data/lib/metanorma/mirror/metanorma_to_mirror.rb +0 -101
  356. data/lib/metanorma/mirror/model/container.rb +0 -47
  357. data/lib/metanorma/mirror/model/factory.rb +0 -52
  358. data/lib/metanorma/mirror/model/guide.rb +0 -25
  359. data/lib/metanorma/mirror/model/leaf.rb +0 -17
  360. data/lib/metanorma/mirror/model/mark.rb +0 -53
  361. data/lib/metanorma/mirror/model/node.rb +0 -47
  362. data/lib/metanorma/mirror/model/soft_break.rb +0 -33
  363. data/lib/metanorma/mirror/model/text.rb +0 -34
  364. data/lib/metanorma/mirror/model.rb +0 -16
  365. data/lib/metanorma/mirror/output/builder.rb +0 -39
  366. data/lib/metanorma/mirror/output/formats/base_format.rb +0 -90
  367. data/lib/metanorma/mirror/output/formats/inline_format.rb +0 -81
  368. data/lib/metanorma/mirror/output/formats.rb +0 -53
  369. data/lib/metanorma/mirror/output/html_renderer.rb +0 -95
  370. data/lib/metanorma/mirror/output/html_renderers/block_renderers.rb +0 -178
  371. data/lib/metanorma/mirror/output/html_renderers/inline_renderer.rb +0 -61
  372. data/lib/metanorma/mirror/output/html_renderers/list_renderers.rb +0 -96
  373. data/lib/metanorma/mirror/output/html_renderers/mark_renderers.rb +0 -64
  374. data/lib/metanorma/mirror/output/html_renderers/section_renderers.rb +0 -129
  375. data/lib/metanorma/mirror/output/html_renderers/structural_renderers.rb +0 -80
  376. data/lib/metanorma/mirror/output/html_renderers/table_renderers.rb +0 -87
  377. data/lib/metanorma/mirror/output/html_renderers.rb +0 -76
  378. data/lib/metanorma/mirror/output/pipeline.rb +0 -92
  379. data/lib/metanorma/mirror/output/pipeline_context.rb +0 -22
  380. data/lib/metanorma/mirror/output.rb +0 -14
  381. data/lib/metanorma/mirror/rewriter.rb +0 -121
  382. data/lib/metanorma/mirror/safe_attr.rb +0 -16
  383. data/lib/metanorma/mirror/serialization/json_serializer.rb +0 -25
  384. data/lib/metanorma/mirror/serialization/yaml_serializer.rb +0 -20
  385. data/lib/metanorma/mirror/serialization.rb +0 -10
  386. data/lib/metanorma/mirror/transformer.rb +0 -22
  387. data/lib/metanorma/mirror.rb +0 -32
  388. data/lib/metanorma/standard_document/annotation.rb +0 -37
  389. data/lib/metanorma/standard_document/blocks/source_origin_element.rb +0 -23
  390. data/lib/metanorma/standard_document/terms/term_name_element.rb +0 -29
  391. data/script/render_both.rb +0 -18
data/README.adoc CHANGED
@@ -210,150 +210,6 @@ This library targets the modern Metanorma XML format which uses `<metanorma>` as
210
210
 
211
211
  Legacy XML formats that use flavor-specific root elements (e.g. `<iso-standard>`, `<m3d-standard>`, `<csa-standard>`, `<un-standard>`) are *not supported*.
212
212
 
213
- == Mirror Format
214
-
215
- The `Metanorma::Mirror` module is a ProseMirror-style document model that captures the structural and inline content of a Metanorma document. It serves as an intermediate representation suitable for serialization, round-tripping, alternate rendering pipelines, and editor integrations.
216
-
217
- The mirror format is fully model-driven: every node, mark, and document is an instance of a `Model` class. There are no hashes at the API boundary.
218
-
219
- === Model Layer
220
-
221
- [horizontal]
222
- `Model::Container` :: A node with children (`#content`)
223
- `Model::Leaf` :: A node without children (e.g. `image`, `sourcecode`)
224
- `Model::Text` :: Inline text carrying a string and a list of `Mark`s
225
- `Model::SoftBreak` :: A soft line break inside a paragraph
226
- `Model::Mark` :: An inline decoration (`emphasis`, `strong`, `link`, `xref`, `eref`, `footnote`, `stem`, ...)
227
- `Model::Guide` :: Output wrapper with `content`, `meta`, and `title`
228
- `Model::Factory.from_h(hash)` :: Rebuilds a model graph from a serialized hash
229
-
230
- Each model class encapsulates its attributes via bounded accessors. `Mark` exposes `[]`, `[]=`, `set_attr`, and `fetch` for safe attribute mutation. `#to_h` is the canonical serialization method.
231
-
232
- === Forward Conversion (Metanorma → Mirror)
233
-
234
- [source,ruby]
235
- require "metanorma/document"
236
- require "metanorma/mirror"
237
-
238
- xml = File.read("spec/fixtures/iso/is/document-en.presentation.xml")
239
- doc = Metanorma::IsoDocument::Root.from_xml(xml)
240
-
241
- transformer = Metanorma::Mirror::Transformer.new
242
- document = transformer.from_metanorma(doc)
243
- document.class # => Metanorma::Mirror::Model::Container
244
-
245
- === Reverse Conversion (Mirror → Mirror, with Rewriting)
246
-
247
- The `Rewriter` walks a Model graph and produces a new Model graph, applying skip rules and optional per-type customization. (The historical name `MirrorToMetanorma` is no longer accurate: the output is a Model graph, not Metanorma XML. The class was renamed to `Rewriter` to reflect this.)
248
-
249
- [source,ruby]
250
- rewriter = Metanorma::Mirror::Rewriter.new
251
- rebuilt = rewriter.call(document)
252
-
253
- Each `Rewriter` instance seeds its skip set and builder map from class-level defaults at `new` time, so two instances never share state. Instance-level mutation does not leak back to the class, and class-level mutation does not retroactively affect existing instances.
254
-
255
- [source,ruby]
256
- # Instance API — only affects this instance
257
- rewriter.skip("my_type")
258
- rewriter.register("my_type") do |node, _rewriter|
259
- Metanorma::Mirror::Model::Leaf.new(type: "customized")
260
- end
261
-
262
- # Class API — seeds defaults copied into future instances
263
- Metanorma::Mirror::Rewriter.skip("always_skip")
264
- Metanorma::Mirror::Rewriter.register("always_customize") { |n, _r| ... }
265
-
266
- Model dispatch is polymorphic: each `Model::*` class implements `accept_rewriter(rewriter)`, which calls the matching `rewriter#rewrite_container` / `#rewrite_leaf` / `#rewrite_text` / `#rewrite_soft_break`. There is no `case/when` on node classes in the dispatch path.
267
-
268
- === Default Handler Registry
269
-
270
- `Metanorma::Mirror::DefaultRegistry.build` returns a fresh `HandlerRegistry` pre-populated with the standard Metanorma → Mirror mappings (paragraphs, blocks, lists, sections, terms, structural containers). It is the single source of truth for the default handler set — adding a new model-to-handler mapping is a single `register` call here, with no edits to `HandlerRegistry` itself.
271
-
272
- [source,ruby]
273
- Metanorma::Mirror.build_default_registry
274
- # => #<Metanorma::Mirror::HandlerRegistry> (fresh instance each call)
275
-
276
- === Metadata Service
277
-
278
- `Metanorma::Mirror::Metadata` is a standalone service that extracts document metadata (title, etc.) from a parsed bibdata object. It is consumed by both the forward pipeline (`Output::Pipeline::AttachMetadata`) and the forward transformer (`MetanormaToMirror#extract_root_title`), keeping title-extraction logic in one place rather than duplicated across the Handlers layer.
279
-
280
- [source,ruby]
281
- Metanorma::Mirror::Metadata.title_from_bibdata(doc.bibdata)
282
- # => "First title string"
283
-
284
- === Serialization
285
-
286
- Mirror documents round-trip cleanly through JSON and YAML:
287
-
288
- [source,ruby]
289
- json = Metanorma::Mirror::Serialization::JsonSerializer.serialize(document)
290
- restored = Metanorma::Mirror::Serialization::JsonSerializer.deserialize(json)
291
-
292
- === ID Strategies
293
-
294
- ID assignment is pluggable via `Metanorma::Mirror::IdStrategy`:
295
-
296
- [horizontal]
297
- `IdStrategy::Preserve` :: Default. Keeps element IDs as-is.
298
- `IdStrategy::Positional` :: Rewrites UUID-style IDs to positional IDs (`sec-X.Y.Z`, `anx-X`, `fig-N`, `table-N`) and translates cross-reference targets.
299
-
300
- The `Positional` strategy exposes `register_category(model_class, category)` so new flavors can declare their model classes without editing dispatch code.
301
-
302
- === HTML Rendering from Mirror
303
-
304
- `Metanorma::Mirror::Output::HtmlRenderer` produces SSR-ready HTML directly from a mirror Model graph. Renderer behavior is split into pluggable modules registered by node type (`clause`, `paragraph`, `bullet_list`, `table`, ...) and by mark type (`emphasis`, `link`, `xref`, ...). All dispatch is registry-driven (no `case/when` on types), so new node and mark types can be added without modifying core rendering code.
305
-
306
- All HTML construction goes through `Nokogiri::HTML4::Builder` (or `Nokogiri::HTML5::Builder` for full documents). String concatenation of HTML is not permitted anywhere in the renderer layer. The `HtmlRenderers` module exposes shared helpers (`build`, `build_fragment`, `embed`, `wrap`, `escape_text`) so each renderer stays declarative.
307
-
308
- Node handlers are stored as `UnboundMethod`s bound to the renderer instance at dispatch time. Register a new node handler by passing an instance method reference:
309
-
310
- [source,ruby]
311
- module MyRenderers
312
- def self.register(registry)
313
- registry.register_node_handler("callout",
314
- instance_method(:render_callout))
315
- end
316
-
317
- def render_callout(node, depth: 0)
318
- HtmlRenderers.build { |doc| doc.span(class: "callout") { doc.text node.attrs["text"] } }
319
- end
320
- end
321
- MyRenderers.register(Metanorma::Mirror::Output::HtmlRenderer)
322
-
323
- Mark handlers are stored as `Proc`s that receive the already-rendered inner HTML and the `Mark` instance:
324
-
325
- [source,ruby]
326
- Metanorma::Mirror::Output::HtmlRenderer.register_mark_handler("kbd",
327
- ->(inner_html, _mark) { HtmlRenderers.wrap(:kbd, inner_html) })
328
-
329
- === Output Pipeline
330
-
331
- `Metanorma::Mirror::Output::Pipeline` runs the full conversion: parse XML → forward transform → attach metadata. `Metanorma::Mirror::Output::Builder` orchestrates the pipeline and writes through a pluggable `Formats` registry (default: `InlineFormat`).
332
-
333
- [source,ruby]
334
- builder = Metanorma::Mirror::Output::Builder.new(
335
- xml_path: "document.presentation.xml",
336
- output_path: "output.html",
337
- format: :inline,
338
- flavor: "iso",
339
- id_strategy: Metanorma::Mirror::IdStrategy::Positional.new,
340
- )
341
- builder.build
342
-
343
- New formats register themselves without editing lookup code:
344
-
345
- [source,ruby]
346
- Metanorma::Mirror::Output::Formats.register(:pdf, MyPdfFormat)
347
-
348
- === CLI
349
-
350
- [source,bash]
351
- # Convert presentation XML to mirror JSON
352
- metanorma-document to-mirror document.presentation.xml \
353
- -o document.mirror.json \
354
- --id-strategy positional \
355
- --title "My Document"
356
-
357
213
  == Documentation
358
214
 
359
215
  Detailed architecture documentation is in the `docs/` directory:
data/Rakefile CHANGED
@@ -9,18 +9,6 @@ require "rubocop/rake_task"
9
9
 
10
10
  RuboCop::RakeTask.new
11
11
 
12
- # Load custom tasks
13
- Dir.glob("lib/tasks/*.rake").each { |task| load task }
14
-
15
- # Build the frontend SPA (frontend/dist/)
16
- desc "Build frontend SPA assets"
17
- task :build_frontend do
18
- frontend_dir = File.join(__dir__, "frontend")
19
- puts "Building frontend..."
20
- system("cd #{frontend_dir} && npm install && npm run build") || raise("Frontend build failed")
21
- end
22
-
23
- # Hook into bundler's release task to ensure frontend is built
24
- Rake::Task["release"].enhance(["build_frontend"]) if Rake::Task.task_defined?("release")
25
-
26
12
  task default: %i[spec rubocop]
13
+
14
+ Dir[File.join(__dir__, "tasks", "*.rake")].each { |f| import f }
data/bin/console ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require_relative "../lib/metanorma/document"
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ # (If you use this, don't forget to add pry to your Gemfile!)
11
+ # require "pry"
12
+ # Pry.start
13
+
14
+ require "irb"
15
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -1,4 +1,4 @@
1
- // Lightbox: click images to view full-size overlay with caption
1
+ // Lightbox: click images to view full-size overlay
2
2
  (function() {
3
3
  document.addEventListener('click', function(e) {
4
4
  var img = e.target.closest('figure img, .doc-content img:not(.brand-logo img):not(.footer-mn-logo img)');
@@ -7,27 +7,11 @@
7
7
  var overlay = document.createElement('div');
8
8
  overlay.className = 'lightbox-overlay';
9
9
 
10
- var inner = document.createElement('div');
11
- inner.className = 'lightbox-inner';
12
-
13
10
  var clone = document.createElement('img');
14
11
  clone.src = img.src;
15
12
  clone.alt = img.alt || '';
16
13
 
17
- inner.appendChild(clone);
18
-
19
- var figure = img.closest('figure');
20
- if (figure) {
21
- var caption = figure.querySelector('figcaption');
22
- if (caption) {
23
- var captionClone = document.createElement('div');
24
- captionClone.className = 'lightbox-caption';
25
- captionClone.innerHTML = caption.innerHTML;
26
- inner.appendChild(captionClone);
27
- }
28
- }
29
-
30
- overlay.appendChild(inner);
14
+ overlay.appendChild(clone);
31
15
  document.body.appendChild(overlay);
32
16
  overlay.addEventListener('click', function() { overlay.remove(); });
33
17
  });
@@ -7,8 +7,6 @@
7
7
  { key: '/', desc: 'Search' },
8
8
  { key: 'j / ]', desc: 'Next section' },
9
9
  { key: 'k / [', desc: 'Previous section' },
10
- { key: 'Home', desc: 'Scroll to top' },
11
- { key: 'End', desc: 'Scroll to bottom' },
12
10
  { key: 't', desc: 'Toggle table of contents (mobile)' },
13
11
  { key: 'g', desc: 'Glossary' },
14
12
  { key: 'r', desc: 'Reading mode' },
@@ -74,14 +74,6 @@
74
74
  e.preventDefault();
75
75
  toggleReadingMode();
76
76
  }
77
- if (e.key === 'Home') {
78
- e.preventDefault();
79
- window.scrollTo({ top: 0, behavior: 'smooth' });
80
- }
81
- if (e.key === 'End') {
82
- e.preventDefault();
83
- window.scrollTo({ top: document.documentElement.scrollHeight, behavior: 'smooth' });
84
- }
85
77
  if (e.key === 'd') {
86
78
  var btn = document.getElementById('theme-toggle');
87
79
  if (btn) btn.click();
@@ -75,21 +75,21 @@
75
75
  });
76
76
  applyFontSize(getCurrentFontIdx());
77
77
 
78
- // Serif toggle — switches between serif (default) and sans-serif
78
+ // Serif toggle
79
79
  var serifBtn = document.getElementById('serif-toggle');
80
- var SERIF_KEY = 'metanorma-sans';
80
+ var SERIF_KEY = 'metanorma-serif';
81
81
 
82
- function applySansMode(useSans) {
83
- document.documentElement.classList.toggle('reader-sans', useSans);
84
- if (serifBtn) serifBtn.classList.toggle('active', useSans);
82
+ function applySerifMode(useSerif) {
83
+ document.documentElement.classList.toggle('reader-serif', useSerif);
84
+ if (serifBtn) serifBtn.classList.toggle('active', useSerif);
85
85
  }
86
86
 
87
87
  if (serifBtn) serifBtn.addEventListener('click', function() {
88
- var isSans = document.documentElement.classList.contains('reader-sans');
89
- applySansMode(!isSans);
90
- R.setSetting(SERIF_KEY, (!isSans).toString());
88
+ var isSerif = document.documentElement.classList.contains('reader-serif');
89
+ applySerifMode(!isSerif);
90
+ R.setSetting(SERIF_KEY, (!isSerif).toString());
91
91
  });
92
- applySansMode(R.getSetting(SERIF_KEY) === 'true');
92
+ applySerifMode(R.getSetting(SERIF_KEY) === 'true');
93
93
 
94
94
  // Reading mode button
95
95
  var readingBtn = document.getElementById('reading-mode-btn');
@@ -1,32 +1,95 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <svg id="uuid-83dec88d-c5ba-4f4d-bfd8-f63a7292f259"
3
- xmlns="http://www.w3.org/2000/svg" width="282.22mm" height="176.39mm"
4
- xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 800 500">
5
- <title>PDF Association logo</title>
6
- <desc>PDF Association logo</desc>
7
- <defs>
8
- <clipPath id="uuid-873d8e9d-e16c-4c95-a7d0-77db2eb96663">
9
- <rect y="0" width="800" height="500" style="fill:none;"/>
10
- </clipPath>
11
- </defs>
12
- <g style="clip-path:url(#uuid-873d8e9d-e16c-4c95-a7d0-77db2eb96663);">
13
- <path d="M298.28,277.86V98.55h61.6c9.9,0,19.16.96,27.78,2.89,8.62,1.92,16.13,5.13,22.55,9.62,6.42,4.5,11.5,10.45,15.26,17.88,3.76,7.42,5.64,16.55,5.64,27.36s-1.88,19.52-5.64,27.23c-3.76,7.7-8.85,14.02-15.26,18.98-6.42,4.95-13.84,8.62-22.28,11-8.43,2.39-17.42,3.57-26.95,3.57h-22.28v60.78h-40.43.01ZM338.71,184.91h19.8c22,0,33-9.53,33-28.6,0-9.35-2.94-15.95-8.8-19.8-5.87-3.85-14.3-5.77-25.3-5.77h-18.7v54.18h0Z" style="fill:#231f20;"/>
14
- <path d="M451.19,277.86V98.55h50.6c13.75,0,26.13,1.74,37.13,5.23,11,3.48,20.44,8.85,28.33,16.09,7.88,7.25,13.93,16.46,18.15,27.64,4.22,11.19,6.33,24.48,6.33,39.88s-2.11,28.79-6.33,40.15c-4.22,11.37-10.17,20.76-17.88,28.19-7.7,7.43-16.91,12.97-27.64,16.64-10.73,3.67-22.69,5.5-35.89,5.5h-52.8ZM491.62,245.14h7.7c7.7,0,14.67-1,20.9-3.02,6.23-2.02,11.55-5.27,15.95-9.77,4.4-4.49,7.84-10.4,10.31-17.74,2.48-7.33,3.71-16.41,3.71-27.23s-1.24-19.57-3.71-26.81c-2.47-7.24-5.91-13.02-10.31-17.33s-9.72-7.38-15.95-9.21c-6.24-1.83-13.2-2.75-20.9-2.75h-7.7v113.86h0Z" style="fill:#231f20;"/>
15
- <polygon points="617.02 277.86 617.02 98.55 730.05 98.55 730.05 132.66 657.45 132.66 657.45 174.18 719.6 174.18 719.6 208.28 657.45 208.28 657.45 277.86 617.02 277.86" style="fill:#231f20;"/>
16
- <path d="M91.33,400.17c-6.05,0-10.93-1.84-14.65-5.51s-5.58-8.53-5.58-14.58c0-3.63.77-6.86,2.3-9.7,1.54-2.84,3.95-5.28,7.26-7.33,3.3-2.05,7.49-3.77,12.56-5.16,5.07-1.4,11.14-2.46,18.21-3.21-.09-1.77-.35-3.46-.77-5.09-.42-1.62-1.12-3.07-2.09-4.32-.98-1.26-2.26-2.24-3.84-2.93-1.58-.7-3.54-1.05-5.86-1.05-3.35,0-6.63.65-9.84,1.95-3.21,1.3-6.35,2.88-9.42,4.75l-5.86-10.75c3.81-2.42,8.09-4.51,12.84-6.28s9.86-2.65,15.35-2.65c8.56,0,14.95,2.54,19.19,7.61,4.23,5.07,6.35,12.4,6.35,21.98v40.61h-13.26l-1.12-7.54h-.56c-3.07,2.61-6.35,4.79-9.84,6.56s-7.28,2.65-11.37,2.65M96.49,387.61c2.79,0,5.33-.65,7.6-1.96,2.28-1.3,4.72-3.16,7.33-5.58v-15.35c-4.65.56-8.56,1.3-11.72,2.23-3.16.93-5.72,1.98-7.68,3.14-1.95,1.16-3.35,2.49-4.19,3.98-.84,1.49-1.26,3.07-1.26,4.75,0,3.07.93,5.3,2.79,6.7,1.86,1.4,4.24,2.09,7.12,2.09" style="fill:#231f20;"/>
17
- <path d="M164.46,400.17c-4.75,0-9.42-.91-14.03-2.72s-8.58-4.07-11.93-6.77l7.54-10.33c3.07,2.42,6.12,4.3,9.14,5.65s6.3,2.02,9.84,2.02c3.72,0,6.46-.77,8.23-2.3,1.77-1.53,2.65-3.51,2.65-5.93,0-1.4-.42-2.63-1.26-3.7s-1.96-2.02-3.35-2.86c-1.4-.84-2.98-1.61-4.74-2.3-1.77-.7-3.54-1.42-5.3-2.16-2.23-.84-4.52-1.81-6.84-2.93-2.33-1.12-4.4-2.46-6.21-4.05-1.82-1.58-3.3-3.42-4.47-5.51-1.16-2.09-1.74-4.58-1.74-7.46,0-6.05,2.23-10.98,6.7-14.79s10.56-5.72,18.28-5.72c4.74,0,9.02.84,12.84,2.51,3.81,1.67,7.12,3.58,9.91,5.72l-7.4,9.77c-2.42-1.77-4.86-3.19-7.33-4.26s-5.05-1.61-7.75-1.61c-3.44,0-5.98.72-7.6,2.16-1.63,1.45-2.44,3.24-2.44,5.37,0,1.39.39,2.58,1.19,3.56.79.98,1.84,1.84,3.14,2.58,1.3.75,2.81,1.44,4.54,2.09,1.72.65,3.51,1.31,5.37,1.96,2.32.84,4.65,1.79,6.98,2.86,2.32,1.07,4.44,2.4,6.35,3.98,1.91,1.58,3.44,3.51,4.61,5.79,1.16,2.28,1.75,5,1.75,8.16,0,2.98-.58,5.75-1.75,8.31-1.16,2.56-2.86,4.79-5.1,6.7-2.23,1.91-5.02,3.42-8.37,4.54-3.35,1.12-7.16,1.67-11.44,1.67" style="fill:#231f20;"/>
18
- <path d="M224.61,400.17c-4.75,0-9.42-.91-14.03-2.72s-8.58-4.07-11.93-6.77l7.54-10.33c3.07,2.42,6.12,4.3,9.14,5.65s6.3,2.02,9.84,2.02c3.72,0,6.46-.77,8.23-2.3,1.77-1.53,2.65-3.51,2.65-5.93,0-1.4-.42-2.63-1.26-3.7s-1.96-2.02-3.35-2.86c-1.4-.84-2.98-1.61-4.74-2.3-1.77-.7-3.54-1.42-5.3-2.16-2.23-.84-4.52-1.81-6.84-2.93-2.33-1.12-4.39-2.46-6.21-4.05-1.81-1.58-3.3-3.42-4.47-5.51s-1.74-4.58-1.74-7.46c0-6.05,2.23-10.98,6.7-14.79s10.56-5.72,18.28-5.72c4.74,0,9.02.84,12.84,2.51,3.81,1.67,7.12,3.58,9.91,5.72l-7.4,9.77c-2.42-1.77-4.86-3.19-7.33-4.26s-5.05-1.61-7.75-1.61c-3.44,0-5.98.72-7.6,2.16-1.63,1.45-2.44,3.24-2.44,5.37,0,1.39.39,2.58,1.19,3.56.79.98,1.83,1.84,3.14,2.58,1.3.75,2.81,1.44,4.54,2.09,1.72.65,3.51,1.31,5.37,1.96,2.32.84,4.65,1.79,6.98,2.86,2.32,1.07,4.44,2.4,6.35,3.98,1.91,1.58,3.44,3.51,4.61,5.79,1.16,2.28,1.75,5,1.75,8.16,0,2.98-.58,5.75-1.75,8.31-1.16,2.56-2.86,4.79-5.1,6.7-2.23,1.91-5.02,3.42-8.37,4.54-3.35,1.12-7.16,1.67-11.44,1.67" style="fill:#231f20;"/>
19
- <path d="M292.16,400.17c-4.28,0-8.37-.79-12.28-2.37s-7.38-3.91-10.4-6.98-5.42-6.84-7.19-11.31c-1.77-4.46-2.65-9.54-2.65-15.21s.88-10.75,2.65-15.21,4.16-8.23,7.19-11.3c3.02-3.07,6.49-5.42,10.4-7.05,3.91-1.63,8-2.44,12.28-2.44s8.39.81,12.35,2.44c3.95,1.63,7.42,3.98,10.4,7.05,2.98,3.07,5.37,6.84,7.19,11.3,1.81,4.47,2.72,9.54,2.72,15.21s-.91,10.75-2.72,15.21c-1.81,4.47-4.21,8.24-7.19,11.31s-6.44,5.39-10.4,6.98c-3.96,1.58-8.07,2.37-12.35,2.37M292.16,387.05c5.02,0,8.98-2.07,11.86-6.21,2.88-4.14,4.33-9.65,4.33-16.54s-1.44-12.54-4.33-16.68c-2.88-4.14-6.84-6.21-11.86-6.21s-8.96,2.07-11.79,6.21c-2.84,4.14-4.26,9.7-4.26,16.68s1.42,12.4,4.26,16.54,6.77,6.21,11.79,6.21" style="fill:#231f20;"/>
20
- <path d="M367.8,400.17c-4.65,0-9-.79-13.05-2.37s-7.56-3.91-10.54-6.98-5.3-6.84-6.98-11.31c-1.67-4.46-2.51-9.54-2.51-15.21s.93-10.75,2.79-15.21c1.86-4.46,4.37-8.23,7.54-11.3,3.16-3.07,6.81-5.42,10.96-7.05,4.14-1.63,8.49-2.44,13.05-2.44s8.3.75,11.51,2.23c3.21,1.49,6.07,3.3,8.58,5.44l-7.81,10.47c-1.86-1.58-3.7-2.81-5.52-3.7-1.81-.88-3.79-1.33-5.93-1.33-5.58,0-10.1,2.07-13.54,6.21-3.44,4.14-5.16,9.7-5.16,16.68s1.7,12.4,5.09,16.54c3.39,4.14,7.79,6.21,13.19,6.21,2.7,0,5.23-.58,7.61-1.75,2.37-1.16,4.53-2.53,6.49-4.12l6.56,10.61c-3.26,2.79-6.82,4.89-10.68,6.28-3.86,1.4-7.74,2.1-11.65,2.1" style="fill:#231f20;"/>
21
- <path d="M410.23,317.96c-2.89,0-5.26-.84-7.12-2.51s-2.79-3.86-2.79-6.56.93-4.91,2.79-6.63c1.86-1.72,4.23-2.58,7.12-2.58s5.26.86,7.12,2.58,2.79,3.93,2.79,6.63-.93,4.88-2.79,6.56c-1.86,1.68-4.23,2.51-7.12,2.51M402.13,329.96h16.05v68.53h-16.05v-68.53Z" style="fill:#231f20;"/>
22
- <path d="M453.91,400.17c-6.05,0-10.94-1.84-14.66-5.51s-5.58-8.53-5.58-14.58c0-3.63.77-6.86,2.3-9.7,1.54-2.84,3.95-5.28,7.26-7.33,3.3-2.05,7.49-3.77,12.56-5.16,5.07-1.4,11.14-2.46,18.21-3.21-.09-1.77-.35-3.46-.77-5.09-.42-1.62-1.12-3.07-2.09-4.32-.98-1.26-2.26-2.24-3.84-2.93-1.58-.7-3.54-1.05-5.86-1.05-3.35,0-6.63.65-9.84,1.95-3.21,1.3-6.35,2.88-9.42,4.75l-5.86-10.75c3.81-2.42,8.09-4.51,12.84-6.28s9.86-2.65,15.35-2.65c8.56,0,14.96,2.54,19.19,7.61,4.23,5.07,6.35,12.4,6.35,21.98v40.61h-13.26l-1.12-7.54h-.56c-3.07,2.61-6.35,4.79-9.84,6.56s-7.28,2.65-11.37,2.65M459.07,387.61c2.79,0,5.33-.65,7.61-1.96,2.28-1.3,4.72-3.16,7.33-5.58v-15.35c-4.65.56-8.56,1.3-11.72,2.23-3.16.93-5.72,1.98-7.68,3.14-1.95,1.16-3.35,2.49-4.19,3.98-.84,1.49-1.26,3.07-1.26,4.75,0,3.07.93,5.3,2.79,6.7,1.86,1.4,4.23,2.09,7.12,2.09" style="fill:#231f20;"/>
23
- <path d="M531.22,400.17c-4,0-7.37-.6-10.12-1.81s-4.98-2.91-6.7-5.1c-1.72-2.18-2.98-4.79-3.77-7.81-.79-3.03-1.19-6.4-1.19-10.12v-32.66h-9.77v-12l10.61-.7,1.96-18.7h13.4v18.7h17.45v12.7h-17.45v32.66c0,8,3.21,12,9.63,12,1.21,0,2.44-.14,3.7-.41,1.25-.28,2.39-.65,3.42-1.12l2.79,11.86c-1.86.65-3.98,1.23-6.35,1.75-2.37.51-4.91.77-7.61.77" style="fill:#231f20;"/>
24
- <path d="M565.56,317.96c-2.89,0-5.26-.84-7.12-2.51s-2.79-3.86-2.79-6.56.93-4.91,2.79-6.63,4.23-2.58,7.12-2.58,5.25.86,7.12,2.58c1.86,1.72,2.79,3.93,2.79,6.63s-.93,4.88-2.79,6.56-4.23,2.51-7.12,2.51M557.46,329.96h16.05v68.53h-16.05v-68.53Z" style="fill:#231f20;"/>
25
- <path d="M620.68,400.17c-4.28,0-8.37-.79-12.28-2.37-3.91-1.58-7.38-3.91-10.4-6.98s-5.42-6.84-7.19-11.31c-1.77-4.46-2.65-9.54-2.65-15.21s.88-10.75,2.65-15.21c1.76-4.46,4.16-8.23,7.19-11.3,3.02-3.07,6.49-5.42,10.4-7.05,3.91-1.63,8-2.44,12.28-2.44s8.4.81,12.35,2.44c3.96,1.63,7.42,3.98,10.4,7.05,2.98,3.07,5.37,6.84,7.19,11.3,1.81,4.47,2.72,9.54,2.72,15.21s-.91,10.75-2.72,15.21c-1.82,4.47-4.21,8.24-7.19,11.31s-6.44,5.39-10.4,6.98c-3.96,1.58-8.07,2.37-12.35,2.37M620.68,387.05c5.02,0,8.98-2.07,11.86-6.21,2.88-4.14,4.33-9.65,4.33-16.54s-1.44-12.54-4.33-16.68c-2.89-4.14-6.84-6.21-11.86-6.21s-8.96,2.07-11.79,6.21c-2.84,4.14-4.26,9.7-4.26,16.68s1.42,12.4,4.26,16.54,6.77,6.21,11.79,6.21" style="fill:#231f20;"/>
26
- <path d="M666.04,398.49v-68.53h13.26l1.12,9.21h.56c3.07-2.98,6.4-5.54,9.98-7.68,3.58-2.14,7.75-3.21,12.49-3.21,7.35,0,12.7,2.35,16.05,7.05,3.35,4.7,5.02,11.42,5.02,20.16v42.99h-16.05v-40.89c0-5.67-.84-9.68-2.51-12-1.68-2.32-4.42-3.49-8.23-3.49-2.98,0-5.61.72-7.88,2.16-2.28,1.44-4.86,3.56-7.75,6.35v47.87h-16.06Z" style="fill:#231f20;"/>
27
- <rect x="189.68" y="98.8" width="59.81" height="59.81" style="fill:#ca9831;"/><!-- PDF Association "logo yellow" -->
28
- <rect x="129.87" y="158.62" width="59.81" height="59.81" style="fill:#8b985b;"/><!-- PDF Association "logo green" -->
29
- <rect x="70.06" y="218.43" width="59.81" height="59.81" style="fill:#d03f4e;"/><!-- PDF Association "logo red" -->
30
- <rect x="189.68" y="218.43" width="59.81" height="59.81" style="fill:#4a91af;"/><!-- PDF Association "logo blue" -->
31
- </g>
32
- </svg>
2
+ <svg width="400pt" height="182.8pt" version="1.1" viewBox="0 0 400 182.8" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <defs>
4
+ <clipPath id="clip-0">
5
+ <path d="m270 52.055h36v47.945h-36z"/>
6
+ </clipPath>
7
+ <clipPath id="clip-1">
8
+ <path d="m311 52.055h37v47.945h-37z"/>
9
+ </clipPath>
10
+ <clipPath id="clip-2">
11
+ <path d="m354 52.055h30.109v47.945h-30.109z"/>
12
+ </clipPath>
13
+ <clipPath id="clip-3">
14
+ <path d="m211.16 112h15.836v19.09h-15.836z"/>
15
+ </clipPath>
16
+ <clipPath id="clip-4">
17
+ <path d="m229 112h14v19.09h-14z"/>
18
+ </clipPath>
19
+ <clipPath id="clip-5">
20
+ <path d="m244 112h15v19.09h-15z"/>
21
+ </clipPath>
22
+ <clipPath id="clip-6">
23
+ <path d="m260 112h18v19.09h-18z"/>
24
+ </clipPath>
25
+ <clipPath id="clip-7">
26
+ <path d="m280 112h16v19.09h-16z"/>
27
+ </clipPath>
28
+ <clipPath id="clip-8">
29
+ <path d="m306 112h16v19.09h-16z"/>
30
+ </clipPath>
31
+ <clipPath id="clip-9">
32
+ <path d="m323 107h13v24.09h-13z"/>
33
+ </clipPath>
34
+ <clipPath id="clip-10">
35
+ <path d="m346 112h19v19.09h-19z"/>
36
+ </clipPath>
37
+ <clipPath id="clip-11">
38
+ <path d="m242 52.055h17v15.945h-17z"/>
39
+ </clipPath>
40
+ <clipPath id="clip-12">
41
+ <path d="m211.16 83h15.836v17h-15.836z"/>
42
+ </clipPath>
43
+ <clipPath>
44
+ <path d="m0.066406 1h358.93v358.83h-358.93z"/>
45
+ </clipPath>
46
+ <clipPath id="clip-15">
47
+ <rect width="360" height="360"/>
48
+ </clipPath>
49
+ <g clip-path="url(#clip-15)"></g>
50
+ </defs>
51
+ <g transform="matrix(2.3129 0 0 2.3129 -488.39 -120.4)" clip-path="url(#clip-0)">
52
+ <path d="m281.56 74.684h5.1875c5.7656 0 8.6484-2.4961 8.6484-7.4961 0-2.4492-0.76563-4.1797-2.3047-5.1875s-3.7461-1.5156-6.6289-1.5156h-4.9023zm-10.594 24.359v-46.988h16.145c2.5938 0 5.0195 0.25391 7.2773 0.75781 2.2578 0.50391 4.2266 1.3438 5.9102 2.5195 1.6797 1.1797 3.0117 2.7383 4 4.6875 0.98438 1.9453 1.4766 4.3359 1.4766 7.168 0 2.7383-0.49218 5.1172-1.4766 7.1367-0.98828 2.0156-2.3203 3.6719-4 4.9727-1.6836 1.2969-3.6289 2.2578-5.8359 2.8828-2.2148 0.625-4.5664 0.93359-7.0664 0.93359h-5.8359v15.93z"/>
53
+ </g>
54
+ <g transform="matrix(2.3129 0 0 2.3129 -488.39 -120.4)" clip-path="url(#clip-1)">
55
+ <path d="m321.63 90.465h2.0195c2.0156 0 3.8438-0.26172 5.4766-0.79297 1.6328-0.52734 3.0273-1.3789 4.1797-2.5586 1.1523-1.1758 2.0547-2.7266 2.7031-4.6484 0.64844-1.918 0.97266-4.2969 0.97266-7.1328 0-2.7852-0.32422-5.1289-0.97266-7.0273-0.64844-1.8984-1.5508-3.4102-2.7031-4.5391-1.1524-1.1289-2.5469-1.9336-4.1797-2.4141-1.6328-0.48047-3.4609-0.71875-5.4766-0.71875h-2.0195zm-10.594 8.5742v-46.984h13.262c3.6055 0 6.8477 0.45703 9.7305 1.3711 2.8789 0.91016 5.3555 2.3164 7.4219 4.2148 2.0625 1.8984 3.6484 4.3125 4.7539 7.2422 1.1055 2.9297 1.6602 6.4141 1.6602 10.449 0 4.0352-0.55469 7.543-1.6602 10.52-1.1055 2.9805-2.6641 5.4414-4.6836 7.3867-2.0195 1.9492-4.4297 3.4023-7.2422 4.3594-2.8125 0.96484-5.9453 1.4414-9.4023 1.4414z"/>
56
+ </g>
57
+ <g transform="matrix(2.3129 0 0 2.3129 -488.39 -120.4)" clip-path="url(#clip-2)">
58
+ <path d="m354.49 99.039v-46.984h29.617v8.9375h-19.023v10.879h16.285v8.9375h-16.285v18.23z"/>
59
+ </g>
60
+ <g transform="matrix(2.3129 0 0 2.3129 -488.39 -120.4)" clip-path="url(#clip-3)">
61
+ <path d="m218.09 127.8c0.73047 0 1.3945-0.16797 1.9922-0.51172 0.59765-0.33985 1.2383-0.82813 1.9219-1.4648v-4.0195c-1.2226 0.14453-2.2461 0.33985-3.0742 0.58203-0.82812 0.2461-1.5 0.51953-2.0117 0.82422-0.51171 0.30469-0.875 0.65235-1.0976 1.043-0.21875 0.39063-0.32813 0.80469-0.32813 1.2422 0 0.80469 0.2461 1.3906 0.73047 1.7539 0.48828 0.36719 1.1094 0.55079 1.8672 0.55079m-1.3516 3.293c-1.5859 0-2.8672-0.48437-3.8398-1.4453-0.97656-0.96484-1.4648-2.2383-1.4648-3.8242 0-0.94922 0.19922-1.7969 0.60547-2.5391 0.40234-0.74609 1.0352-1.3867 1.8984-1.9219 0.86718-0.53516 1.9648-0.98829 3.293-1.3516 1.3281-0.36718 2.918-0.64453 4.7734-0.84375-0.0273-0.46093-0.0937-0.90625-0.20312-1.332-0.10938-0.42578-0.29297-0.80469-0.54688-1.1328-0.25781-0.33203-0.59375-0.58594-1.0078-0.76953-0.41406-0.1836-0.92578-0.27344-1.5352-0.27344-0.8789 0-1.7383 0.16797-2.5781 0.51172-0.83985 0.33984-1.6641 0.75391-2.4688 1.2422l-1.5352-2.8164c1-0.63281 2.1211-1.1836 3.3633-1.6445 1.2461-0.46484 2.5859-0.69531 4.0234-0.69531 2.2422 0 3.918 0.66797 5.0273 1.9922 1.1094 1.332 1.6641 3.25 1.6641 5.7617v10.641h-3.4727l-0.29297-1.9727h-0.14844c-0.80078 0.67969-1.6602 1.2539-2.5781 1.7188-0.91406 0.46094-1.9062 0.69531-2.9766 0.69531"/>
62
+ </g>
63
+ <g transform="matrix(2.3129 0 0 2.3129 -488.39 -120.4)" clip-path="url(#clip-4)">
64
+ <path d="m235.9 131.09c-1.2422 0-2.4688-0.23828-3.6758-0.71484s-2.2461-1.0664-3.125-1.7734l1.9727-2.707c0.80469 0.63672 1.6055 1.1289 2.3984 1.4805 0.78906 0.35547 1.6484 0.53125 2.5781 0.53125 0.97266 0 1.6914-0.19922 2.1562-0.60156 0.46094-0.40235 0.69531-0.92188 0.69531-1.5547 0-0.36719-0.10937-0.69141-0.32812-0.96875-0.22266-0.28125-0.51563-0.53125-0.87891-0.75-0.36719-0.22266-0.78125-0.42187-1.2422-0.60547-0.46484-0.18359-0.92968-0.37109-1.3906-0.5664-0.58594-0.21875-1.1836-0.47657-1.793-0.76563-0.60937-0.29297-1.1523-0.64844-1.625-1.0625-0.47656-0.41406-0.86719-0.89453-1.1719-1.4453-0.30469-0.54688-0.45704-1.1992-0.45704-1.957 0-1.582 0.58594-2.875 1.7539-3.875 1.1719-1 2.7695-1.5 4.793-1.5 1.2422 0 2.3633 0.21875 3.3633 0.66015 1 0.4375 1.8633 0.9375 2.5977 1.5l-1.9414 2.5586c-0.63281-0.46485-1.2734-0.83594-1.918-1.1172-0.64453-0.27734-1.3203-0.41797-2.0312-0.41797-0.90234 0-1.5664 0.1875-1.9922 0.56641-0.42578 0.3789-0.64062 0.84765-0.64062 1.4062 0 0.36718 0.10547 0.67578 0.3125 0.93359s0.48047 0.48047 0.82422 0.67578c0.33984 0.19531 0.73437 0.37891 1.1875 0.54688 0.44922 0.17187 0.91797 0.34375 1.4062 0.51562 0.60937 0.21875 1.2188 0.46875 1.8281 0.75 0.60938 0.27735 1.1641 0.625 1.6641 1.0391 0.5 0.41797 0.90234 0.92188 1.207 1.5195 0.30468 0.59765 0.45703 1.3125 0.45703 2.1406 0 0.77734-0.15235 1.5039-0.45703 2.1758-0.30469 0.66797-0.75 1.2539-1.332 1.7539-0.58594 0.5-1.3164 0.89453-2.1953 1.1875-0.8789 0.29297-1.8789 0.4414-3 0.4414"/>
65
+ </g>
66
+ <g transform="matrix(2.3129 0 0 2.3129 -488.39 -120.4)" clip-path="url(#clip-5)">
67
+ <path d="m251.66 131.09c-1.2422 0-2.4688-0.23828-3.6758-0.71484s-2.2461-1.0664-3.125-1.7734l1.9727-2.707c0.80468 0.63672 1.6055 1.1289 2.3984 1.4805 0.78907 0.35547 1.6484 0.53125 2.5781 0.53125 0.97266 0 1.6914-0.19922 2.1562-0.60156 0.46094-0.40235 0.69531-0.92188 0.69531-1.5547 0-0.36719-0.10937-0.69141-0.32812-0.96875-0.22266-0.28125-0.51563-0.53125-0.87891-0.75-0.36719-0.22266-0.78125-0.42187-1.2422-0.60547-0.46484-0.18359-0.92968-0.37109-1.3906-0.5664-0.58594-0.21875-1.1836-0.47657-1.793-0.76563-0.60938-0.29297-1.1523-0.64844-1.625-1.0625-0.47656-0.41406-0.86719-0.89453-1.1719-1.4453-0.30468-0.54688-0.45703-1.1992-0.45703-1.957 0-1.582 0.58594-2.875 1.7539-3.875 1.1719-1 2.7695-1.5 4.793-1.5 1.2422 0 2.3633 0.21875 3.3633 0.66015 1 0.4375 1.8633 0.9375 2.5977 1.5l-1.9414 2.5586c-0.63281-0.46485-1.2734-0.83594-1.918-1.1172-0.64453-0.27734-1.3242-0.41797-2.0312-0.41797-0.90234 0-1.5664 0.1875-1.9922 0.56641-0.42578 0.3789-0.64062 0.84765-0.64062 1.4062 0 0.36718 0.10547 0.67578 0.3125 0.93359s0.48047 0.48047 0.82422 0.67578c0.33984 0.19531 0.73437 0.37891 1.1875 0.54688 0.44922 0.17187 0.91797 0.34375 1.4062 0.51562 0.60937 0.21875 1.2188 0.46875 1.8281 0.75 0.60938 0.27735 1.1641 0.625 1.6641 1.0391 0.5 0.41797 0.90235 0.92188 1.207 1.5195 0.30468 0.59765 0.45703 1.3125 0.45703 2.1406 0 0.77734-0.15235 1.5039-0.45703 2.1758-0.30469 0.66797-0.75 1.2539-1.332 1.7539-0.58593 0.5-1.3164 0.89453-2.1953 1.1875-0.8789 0.29297-1.8789 0.4414-3 0.4414"/>
68
+ </g>
69
+ <g transform="matrix(2.3129 0 0 2.3129 -488.39 -120.4)" clip-path="url(#clip-6)">
70
+ <path d="m269.36 127.65c1.3164 0 2.3555-0.54296 3.1094-1.6289 0.75781-1.0859 1.1328-2.5312 1.1328-4.332 0-1.832-0.375-3.2852-1.1328-4.3711-0.75391-1.0859-1.793-1.6289-3.1094-1.6289s-2.3438 0.54297-3.0898 1.6289c-0.74219 1.0859-1.1133 2.5391-1.1133 4.3711 0 1.8008 0.37109 3.2461 1.1133 4.332 0.74609 1.0859 1.7734 1.6289 3.0898 1.6289m0 3.4375c-1.1211 0-2.1914-0.20703-3.2148-0.62109-1.0274-0.41797-1.9336-1.0273-2.7266-1.8281-0.79296-0.80859-1.418-1.793-1.8828-2.9648-0.46484-1.168-0.69531-2.5-0.69531-3.9844 0-1.4883 0.23047-2.8164 0.69531-3.9883 0.46485-1.168 1.0898-2.1562 1.8828-2.9609 0.79297-0.80469 1.6992-1.4219 2.7266-1.8477 1.0234-0.42578 2.0938-0.64062 3.2148-0.64062s2.2031 0.21484 3.2383 0.64062c1.0352 0.42578 1.9453 1.043 2.7227 1.8477 0.78125 0.80469 1.4102 1.793 1.8867 2.9609 0.47265 1.1719 0.71093 2.5 0.71093 3.9883 0 1.4844-0.23828 2.8164-0.71093 3.9844-0.47657 1.1719-1.1055 2.1562-1.8867 2.9648-0.77735 0.80079-1.6875 1.4102-2.7227 1.8281-1.0352 0.41406-2.1172 0.62109-3.2383 0.62109"/>
71
+ </g>
72
+ <g transform="matrix(2.3129 0 0 2.3129 -488.39 -120.4)" clip-path="url(#clip-7)">
73
+ <path d="m289.19 131.09c-1.2188 0-2.3594-0.21093-3.4219-0.625-1.0586-0.41406-1.9805-1.0234-2.7578-1.8281-0.78125-0.80078-1.3906-1.7891-1.832-2.9609-0.4375-1.1719-0.65625-2.5-0.65625-3.9844 0-1.4883 0.24219-2.8164 0.73047-3.9883 0.48828-1.168 1.1445-2.1562 1.9766-2.9609 0.82813-0.80469 1.7852-1.4219 2.8711-1.8477 1.082-0.42578 2.2226-0.64062 3.418-0.64062 1.1719 0 2.1758 0.19531 3.0156 0.58593 0.83984 0.39063 1.5898 0.86719 2.25 1.4258l-2.0469 2.7422c-0.48828-0.41406-0.96875-0.73828-1.4453-0.96875s-0.99219-0.34765-1.5547-0.34765c-1.4609 0-2.6445 0.54297-3.5469 1.6289-0.90234 1.0859-1.3516 2.5391-1.3516 4.3711 0 1.8047 0.4414 3.2461 1.332 4.332 0.89062 1.0859 2.043 1.6289 3.457 1.6289 0.70703 0 1.3711-0.15234 1.9922-0.46093 0.62109-0.30078 1.1875-0.66016 1.6992-1.0742l1.7188 2.7773c-0.85157 0.73047-1.7852 1.2812-2.7969 1.6445-1.0117 0.36719-2.0273 0.55078-3.0508 0.55078"/>
74
+ </g>
75
+ <path d="m201.26 140.24h9.7213v41.532h-9.7213zm4.9058-7.2729c-1.7527 0-3.1892-0.50594-4.3186-1.5178-1.1293-1.0209-1.6895-2.34-1.6895-3.9752s0.56014-2.9724 1.6895-4.0204c1.1293-1.039 2.5658-1.563 4.3186-1.563 1.7437 0 3.1802 0.52402 4.3095 1.563 1.1293 1.048 1.6895 2.3852 1.6895 4.0204s-0.56014 2.9543-1.6895 3.9752c-1.1293 1.0119-2.5658 1.5178-4.3095 1.5178" stroke-width="2.3129"/>
76
+ <g transform="matrix(2.3129 0 0 2.3129 -488.39 -120.4)" clip-path="url(#clip-8)">
77
+ <path d="m313.1 127.8c0.73438 0 1.3945-0.16797 1.9922-0.51172 0.59766-0.33985 1.2383-0.82813 1.9219-1.4648v-4.0195c-1.2188 0.14453-2.2461 0.33985-3.0703 0.58203-0.83203 0.2461-1.5 0.51953-2.0156 0.82422-0.50782 0.30469-0.875 0.65235-1.0938 1.043-0.21875 0.39063-0.33203 0.80469-0.33203 1.2422 0 0.80469 0.24609 1.3906 0.73437 1.7539 0.48438 0.36719 1.1094 0.55079 1.8633 0.55079m-1.3516 3.293c-1.5859 0-2.8672-0.48437-3.8398-1.4453-0.97657-0.96484-1.4648-2.2383-1.4648-3.8242 0-0.94922 0.20313-1.7969 0.60547-2.5391 0.40234-0.74609 1.0352-1.3867 1.9023-1.9219 0.86329-0.53516 1.9609-0.98829 3.2891-1.3516 1.3281-0.36718 2.9219-0.64453 4.7734-0.84375-0.0234-0.46093-0.0898-0.90625-0.20312-1.332-0.10938-0.42578-0.28906-0.80469-0.54688-1.1328-0.2539-0.33203-0.58984-0.58594-1.0039-0.76953-0.41797-0.1836-0.92969-0.27344-1.5391-0.27344-0.875 0-1.7344 0.16797-2.5781 0.51172-0.83984 0.33984-1.6641 0.75391-2.4688 1.2422l-1.5352-2.8164c1-0.63281 2.1211-1.1836 3.3633-1.6445 1.2461-0.46484 2.5859-0.69531 4.0234-0.69531 2.2422 0 3.9219 0.66797 5.0312 1.9922 1.1094 1.332 1.6602 3.25 1.6602 5.7617v10.641h-3.4727l-0.29297-1.9727h-0.14453c-0.80468 0.67969-1.6641 1.2539-2.5781 1.7188-0.91406 0.46094-1.9062 0.69531-2.9805 0.69531"/>
78
+ </g>
79
+ <g transform="matrix(2.3129 0 0 2.3129 -488.39 -120.4)" clip-path="url(#clip-9)">
80
+ <path d="m332.01 131.09c-1.0469 0-1.9297-0.16015-2.6484-0.47656s-1.3047-0.76172-1.7578-1.3359c-0.44922-0.57031-0.78125-1.2539-0.98828-2.0469s-0.30859-1.6758-0.30859-2.6523v-8.5586h-2.5586v-3.1445l2.7774-0.18359 0.51172-4.8984h3.5117v4.8984h4.5703v3.3281h-4.5703v8.5586c0 2.0976 0.83985 3.1445 2.5234 3.1445 0.31641 0 0.64063-0.0352 0.96875-0.10938 0.32813-0.0703 0.62891-0.16797 0.89453-0.29297l0.73047 3.1094c-0.48437 0.17187-1.0391 0.32422-1.6602 0.45703-0.625 0.13281-1.2891 0.20312-1.9961 0.20312"/>
81
+ </g>
82
+ <path d="m295.4 140.24h9.7303v41.532h-9.7303zm4.9148-7.2729c-1.7527 0-3.1892-0.50594-4.3186-1.5178-1.1293-1.0209-1.6895-2.34-1.6895-3.9752s0.56015-2.9724 1.6895-4.0204c1.1293-1.039 2.5658-1.563 4.3186-1.563 1.7437 0 3.1802 0.52402 4.3095 1.563 1.1293 1.048 1.6895 2.3852 1.6895 4.0204s-0.56014 2.9543-1.6895 3.9752c-1.1293 1.0119-2.5658 1.5178-4.3095 1.5178" stroke-width="2.3129"/>
83
+ <g transform="matrix(2.3129 0 0 2.3129 -488.39 -120.4)" clip-path="url(#clip-10)">
84
+ <path d="m355.45 127.65c1.3164 0 2.3516-0.54296 3.1094-1.6289 0.75391-1.0859 1.1328-2.5312 1.1328-4.332 0-1.832-0.37891-3.2852-1.1328-4.3711-0.75781-1.0859-1.793-1.6289-3.1094-1.6289-1.3164 0-2.3477 0.54297-3.0898 1.6289-0.74218 1.0859-1.1133 2.5391-1.1133 4.3711 0 1.8008 0.3711 3.2461 1.1133 4.332 0.74219 1.0859 1.7734 1.6289 3.0898 1.6289m0 3.4375c-1.1211 0-2.1953-0.20703-3.2148-0.62109-1.0273-0.41797-1.9336-1.0273-2.7266-1.8281-0.79297-0.80859-1.4219-1.793-1.8828-2.9648-0.46484-1.168-0.69531-2.5-0.69531-3.9844 0-1.4883 0.23047-2.8164 0.69531-3.9883 0.46094-1.168 1.0898-2.1562 1.8828-2.9609s1.6992-1.4219 2.7266-1.8477c1.0195-0.42578 2.0938-0.64062 3.2148-0.64062 1.1211 0 2.2031 0.21484 3.2383 0.64062s1.9453 1.043 2.7227 1.8477c0.78125 0.80469 1.4102 1.793 1.8828 2.9609 0.47656 1.1719 0.71484 2.5 0.71484 3.9883 0 1.4844-0.23828 2.8164-0.71484 3.9844-0.47266 1.1719-1.1016 2.1562-1.8828 2.9648-0.77735 0.80079-1.6875 1.4102-2.7227 1.8281-1.0352 0.41406-2.1172 0.62109-3.2383 0.62109"/>
85
+ </g>
86
+ <path d="m361.21 181.78v-41.523h8.0318l0.67759 5.5834h0.34332c1.8611-1.8069 3.8759-3.3609 6.0442-4.6619 2.1683-1.292 4.698-1.9424 7.571-1.9424 4.4541 0 7.6975 1.4275 9.7213 4.2734 2.0328 2.8459 3.0537 6.9205 3.0537 12.224v26.047h-9.7303v-24.782c0-3.4332-0.50594-5.8635-1.5268-7.2729-1.0119-1.4094-2.6743-2.1141-4.9871-2.1141-1.8069 0-3.397 0.4427-4.7793 1.31-1.3823 0.87636-2.9453 2.1593-4.689 3.8488v29.01z" stroke-width="2.3129"/>
87
+ <g transform="matrix(2.3129 0 0 2.3129 -488.39 -120.4)" clip-path="url(#clip-11)">
88
+ <path d="m258.19 67.793h-15.676v-15.672h15.676z" fill="#cf9c1d"/>
89
+ </g>
90
+ <path d="m72.503 72.657h-36.247v-36.256h36.247z" fill="#959b54" stroke-width="2.3129"/>
91
+ <g transform="matrix(2.3129 0 0 2.3129 -488.39 -120.4)" clip-path="url(#clip-12)">
92
+ <path d="m226.84 99.141h-15.676v-15.672h15.676z" fill="#d03544"/>
93
+ </g>
94
+ <path d="m108.76 108.9h-36.256v-36.247h36.256z" fill="#4992b2" stroke-width="2.3129"/>
95
+ </svg>
@@ -109,7 +109,4 @@
109
109
  .reading-mode .cover-stage {
110
110
  animation: none;
111
111
  }
112
- .reading-mode .doc-footer {
113
- grid-column: 1 !important;
114
- }
115
112
 
@@ -22,9 +22,9 @@ body {
22
22
  /* Font size scaling — applied to doc-content only, not header/sidebar */
23
23
  .doc-content { font-size: calc(1em * var(--reader-font-scale)); }
24
24
 
25
- /* Serif/sans toggle — swaps font-body between serif and sans */
26
- .reader-sans {
27
- --font-body: var(--font-sans);
25
+ /* Serif mode override — swaps font-body to a serif stack */
26
+ .reader-serif {
27
+ --font-body: "Source Serif 4", "Noto Serif", Georgia, "Times New Roman", serif;
28
28
  }
29
29
 
30
30
  /* Skip navigation link */
@@ -33,6 +33,11 @@ p {
33
33
  hanging-punctuation: first last;
34
34
  orphans: 3; widows: 3;
35
35
  }
36
+ .doc-content p + p { text-indent: 1.5em; margin-top: -0.3em; }
37
+ h1 + p, h2 + p, h3 + p, blockquote + p, figure + p, table + p,
38
+ .note-block p + p, .example p + p,
39
+ div[id^="term-"] p + p,
40
+ .norm-ref-entry, .biblio-entry { text-indent: 0; }
36
41
 
37
42
  a {
38
43
  color: var(--mn-primary);
@@ -12,7 +12,7 @@
12
12
  border-bottom: 1px solid var(--color-border);
13
13
  }
14
14
  .norm-ref-entry:last-child { border-bottom-color: transparent; }
15
- .biblio-ordinal { font-weight: 600; font-family: var(--font-sans); }
16
- .ref-pubid { font-weight: 500; color: var(--mn-primary); font-family: var(--font-sans); }
15
+ .ref-doc-number { font-weight: 500; color: var(--mn-primary); font-family: var(--font-sans); }
16
+ .ref-year { font-weight: 500; }
17
17
  .biblio-link { color: inherit; text-decoration: none; }
18
- .biblio-link:hover .ref-pubid { text-decoration: underline; }
18
+ .biblio-link:hover { color: var(--mn-primary); text-decoration: underline; }
@@ -59,11 +59,9 @@
59
59
  display: inline-flex;
60
60
  align-items: center;
61
61
  justify-content: center;
62
- background: rgba(255,255,255,0.92);
63
- border-radius: var(--radius-sm);
64
- padding: 0.2em 0.4em;
65
62
  }
66
63
  .cover-logo svg { height: 40px; width: auto; max-width: 120px; }
64
+ .cover-logo svg path { fill: #fff; }
67
65
  .cover-body {
68
66
  display: flex;
69
67
  flex-direction: column;
@@ -19,24 +19,12 @@ figcaption .caption-label { vertical-align: middle; }
19
19
  cursor: zoom-out;
20
20
  animation: lightboxIn 0.3s cubic-bezier(0.16, 1, 0.3, 1);
21
21
  }
22
- .lightbox-inner {
23
- display: flex; flex-direction: column;
24
- align-items: center; max-width: 90vw; max-height: 90vh;
25
- }
26
22
  .lightbox-overlay img {
27
- max-width: 90vw; max-height: 75vh;
23
+ max-width: 90vw; max-height: 82vh;
28
24
  object-fit: contain; border-radius: var(--radius-md);
29
25
  box-shadow: 0 12px 56px rgba(0,0,0,0.6);
30
26
  animation: lightboxImgIn 0.4s cubic-bezier(0.16, 1, 0.3, 1);
31
27
  }
32
- .lightbox-caption {
33
- margin-top: 1em;
34
- font-style: italic; font-size: 0.9em;
35
- color: rgba(255, 255, 255, 0.75);
36
- font-family: var(--font-sans);
37
- text-align: center;
38
- max-width: 600px;
39
- }
40
28
 
41
29
  .doc-content figure img { cursor: zoom-in; transition: transform var(--transition-fast), box-shadow var(--transition-fast); }
42
30
  .doc-content figure img:hover { transform: scale(1.01); box-shadow: var(--shadow-md); }
@@ -6,17 +6,6 @@ a.fn-link {
6
6
  a.fn-link:hover {
7
7
  color: var(--mn-primary);
8
8
  }
9
- .fn-marker {
10
- position: relative;
11
- cursor: pointer;
12
- }
13
- .fn-marker .fn-link {
14
- vertical-align: inherit;
15
- font-size: inherit;
16
- }
17
- .fn-marker .fn-popup {
18
- display: none;
19
- }
20
9
  .footnotes-section {
21
10
  margin-top: 3em;
22
11
  padding-top: 1.5em;
@@ -30,72 +19,23 @@ a.fn-link:hover {
30
19
  letter-spacing: 0.05em;
31
20
  text-transform: uppercase;
32
21
  }
33
- .footnotes {
22
+ ol.footnotes {
23
+ list-style: decimal;
24
+ padding-left: 2em;
34
25
  font-size: 0.88em;
35
26
  color: var(--color-text-light);
36
27
  }
37
- .footnotes .footnote {
28
+ ol.footnotes li {
38
29
  margin: 0.4em 0;
39
- }
40
- .footnote-label {
41
- font-weight: 600;
42
- color: var(--mn-primary);
43
- font-family: var(--font-sans);
44
- margin-right: 0.3em;
30
+ padding-left: 0.3em;
45
31
  }
46
32
  a.footnote-backref {
47
33
  text-decoration: none;
48
34
  color: var(--mn-primary);
49
35
  font-weight: 600;
50
- margin-right: 0.3em;
51
- }
52
- .footnote-arrival {
53
- background: var(--mn-primary-light);
54
- border-radius: var(--radius-sm);
55
- transition: background 0.3s;
56
36
  }
57
37
  .formula-where {
58
38
  font-style: italic;
59
39
  font-size: 0.95em;
60
40
  margin: 0.5em 0 0;
61
41
  }
62
-
63
- /* === Slide-up annotation pane === */
64
- .fn-annotation-pane {
65
- position: fixed;
66
- bottom: 0;
67
- left: 0;
68
- right: 0;
69
- z-index: 200;
70
- background: var(--color-bg);
71
- border-top: 2px solid var(--mn-primary);
72
- box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.15);
73
- max-height: 40vh;
74
- transform: translateY(100%);
75
- transition: transform 0.25s ease;
76
- pointer-events: none;
77
- font-family: var(--font-sans);
78
- font-size: 0.9em;
79
- line-height: 1.6;
80
- color: var(--color-text);
81
- }
82
- .fn-annotation-pane.visible {
83
- transform: translateY(0);
84
- pointer-events: auto;
85
- }
86
- .fn-annotation-header {
87
- padding: 0.5em 1em;
88
- border-bottom: 1px solid var(--color-border);
89
- display: flex;
90
- align-items: center;
91
- }
92
- .fn-annotation-label {
93
- font-weight: 600;
94
- color: var(--mn-primary);
95
- font-size: 0.85em;
96
- }
97
- .fn-annotation-body {
98
- padding: 0.6em 1em 1em;
99
- overflow-y: auto;
100
- max-height: calc(40vh - 2.5em);
101
- }