edgepress 2026.10.1 → 2026.10.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 (485) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +216 -16
  3. package/config.yml +99 -127
  4. package/content/assets/edgepress/brand/avatar.png +0 -0
  5. package/content/assets/edgepress/brand/deploy-esa.svg +1 -0
  6. package/content/assets/edgepress/brand/home-hero-768.webp +0 -0
  7. package/content/assets/edgepress/brand/home-hero.png +0 -0
  8. package/content/assets/edgepress/brand/home-hero.webp +0 -0
  9. package/content/assets/edgepress/brand/mascot.png +0 -0
  10. package/content/assets/edgepress/brand/mascot.webp +0 -0
  11. package/content/assets/edgepress/brand/og-image.png +0 -0
  12. package/content/assets/edgepress/brand/og-image.webp +0 -0
  13. package/content/assets/edgepress/brand/sources/edgepress-avatar-master.png +0 -0
  14. package/content/assets/edgepress/brand/sources/export-manifest.json +181 -0
  15. package/content/assets/edgepress/brand/sources/prompts.json +12 -0
  16. package/content/assets/edgepress/favicon/apple-touch-icon.png +0 -0
  17. package/content/assets/edgepress/favicon/favicon-16.png +0 -0
  18. package/content/assets/edgepress/favicon/favicon-32.png +0 -0
  19. package/content/assets/edgepress/favicon/favicon-48.png +0 -0
  20. package/content/assets/edgepress/favicon/favicon-64.png +0 -0
  21. package/content/assets/edgepress/favicon/favicon.ico +0 -0
  22. package/content/assets/edgepress/icons/LICENSE.txt +43 -0
  23. package/content/assets/edgepress/icons/arrow-right.svg +16 -0
  24. package/content/assets/edgepress/icons/arrow-up-right.svg +16 -0
  25. package/content/assets/edgepress/icons/book-open.svg +16 -0
  26. package/content/assets/edgepress/icons/check-circle.svg +16 -0
  27. package/content/assets/edgepress/icons/check.svg +15 -0
  28. package/content/assets/edgepress/icons/cloud.svg +15 -0
  29. package/content/assets/edgepress/icons/code.svg +16 -0
  30. package/content/assets/edgepress/icons/cpu.svg +28 -0
  31. package/content/assets/edgepress/icons/file-text.svg +19 -0
  32. package/content/assets/edgepress/icons/github.svg +17 -0
  33. package/content/assets/edgepress/icons/globe.svg +17 -0
  34. package/content/assets/edgepress/icons/help-circle.svg +17 -0
  35. package/content/assets/edgepress/icons/home.svg +16 -0
  36. package/content/assets/edgepress/icons/layers.svg +17 -0
  37. package/content/assets/edgepress/icons/layout-grid.svg +18 -0
  38. package/content/assets/edgepress/icons/mail.svg +16 -0
  39. package/content/assets/edgepress/icons/newspaper.svg +18 -0
  40. package/content/assets/edgepress/icons/palette.svg +19 -0
  41. package/content/assets/edgepress/icons/plug.svg +18 -0
  42. package/content/assets/edgepress/icons/provenance.json +8 -0
  43. package/content/assets/edgepress/icons/puzzle.svg +15 -0
  44. package/content/assets/edgepress/icons/rocket.svg +18 -0
  45. package/content/assets/edgepress/icons/rss.svg +17 -0
  46. package/content/assets/edgepress/icons/search.svg +16 -0
  47. package/content/assets/edgepress/icons/settings.svg +16 -0
  48. package/content/assets/edgepress/icons/shield-check.svg +16 -0
  49. package/content/assets/edgepress/icons/sparkles.svg +18 -0
  50. package/content/assets/edgepress/icons/terminal.svg +16 -0
  51. package/content/assets/edgepress/icons/x.svg +16 -0
  52. package/{static → content/assets}/edgepress-markdown-guide.svg +1 -1
  53. package/content/assets/images/previews/edgepress-en.webp +0 -0
  54. package/content/assets/images/previews/edgepress-revisions-en.png +0 -0
  55. package/content/assets/images/previews/edgepress-workflow-en.90f4650b21013786.gif +0 -0
  56. package/content/assets/images/previews/edgepress-workflow-zh.41f1e0a685f47267.gif +0 -0
  57. package/content/assets/images/previews/edgepress-zh.webp +0 -0
  58. package/content/assets/images/previews/provenance.json +49 -0
  59. package/content/guides/markdown-media.md +38 -0
  60. package/content/guides/platforms.md +15 -0
  61. package/content/guides/product-demos.md +37 -0
  62. package/content/guides/zh-cn.md +62 -0
  63. package/content/pages/deployment/en.json +74 -0
  64. package/content/pages/deployment/zh-cn.json +74 -0
  65. package/content/pages/home/en.json +248 -0
  66. package/content/pages/home/zh-cn.json +248 -0
  67. package/content/pages/local-tools/en.json +14 -0
  68. package/content/pages/local-tools/zh-cn.json +14 -0
  69. package/content/pages/page-authoring/en.json +107 -0
  70. package/content/pages/page-authoring/zh-cn.json +107 -0
  71. package/content/pages/plugin-development/en.json +202 -0
  72. package/content/pages/plugin-development/zh-cn.json +202 -0
  73. package/content/pages/privacy-policy/en.json +171 -0
  74. package/content/pages/privacy-policy/zh-cn.json +171 -0
  75. package/content/pages/project-introduction/en.json +158 -0
  76. package/content/pages/project-introduction/zh-cn.json +158 -0
  77. package/content/pages/quick-start/en.json +325 -0
  78. package/content/pages/quick-start/zh-cn.json +325 -0
  79. package/content/pages/theme-development/en.json +353 -0
  80. package/content/pages/theme-development/zh-cn.json +349 -0
  81. package/content/posts/2026-09-24-edgepress-release-2026-9-1/en.md +1 -1
  82. package/content/posts/2026-09-24-edgepress-release-2026-9-1/zh-cn.md +1 -1
  83. package/content/posts/2026-10-03-edgepress-release-2026-10-3/en.md +16 -0
  84. package/content/posts/2026-10-03-edgepress-release-2026-10-3/zh-cn.md +16 -0
  85. package/content/posts/2026-10-03-edgepress-release-202610-4/en.md +22 -0
  86. package/content/posts/2026-10-03-edgepress-release-202610-4/zh-cn.md +20 -0
  87. package/content/posts/2026-10-03-edgepress-release-202610-5/en.md +15 -0
  88. package/content/posts/2026-10-03-edgepress-release-202610-5/zh-cn.md +15 -0
  89. package/edgeone.json +43 -0
  90. package/esa.jsonc +9 -0
  91. package/languages/base/en.json +75 -10
  92. package/languages/packs/zh-CN.json +74 -9
  93. package/netlify.toml +6 -0
  94. package/package.json +37 -6
  95. package/plugins/consent/index.js +10 -17
  96. package/project-compatibility.json +142 -25
  97. package/schemas/pages.schema.json +74 -0
  98. package/src/assets.js +146 -18
  99. package/src/browser-audit.js +158 -0
  100. package/src/build.js +34 -9
  101. package/src/cli.js +46 -41
  102. package/src/config.js +114 -63
  103. package/src/consent-csp.js +137 -0
  104. package/src/content.js +55 -30
  105. package/src/data-saver.js +194 -0
  106. package/src/deploy.js +28 -0
  107. package/src/document.js +44 -0
  108. package/src/embed.js +60 -0
  109. package/src/generators.js +101 -59
  110. package/src/i18n.js +19 -3
  111. package/src/icons.js +5 -4
  112. package/src/image-dimensions.js +17 -0
  113. package/src/local-tool.js +29 -0
  114. package/src/maintenance.js +25 -8
  115. package/src/markdown-fixture.js +20 -0
  116. package/src/markdown.js +80 -16
  117. package/src/media-assets.js +19 -0
  118. package/src/media-viewer.js +47 -0
  119. package/src/oembed.js +53 -0
  120. package/src/page-blocks.js +124 -54
  121. package/src/page-check.js +29 -39
  122. package/src/plugin-api.js +7 -1
  123. package/src/post-details.js +60 -0
  124. package/src/post-template.js +5 -0
  125. package/src/publication-time.js +47 -0
  126. package/src/report-path.js +19 -0
  127. package/src/report-visuals.js +91 -18
  128. package/src/revision-cards.js +30 -0
  129. package/src/revision-images.js +44 -0
  130. package/src/revisions.js +77 -0
  131. package/src/rss.js +100 -0
  132. package/src/service-block.js +18 -0
  133. package/src/theme.js +59 -9
  134. package/src/video-metadata.js +36 -0
  135. package/static/edgepress/data-saver.css +12 -0
  136. package/static/edgepress/data-saver.js +333 -0
  137. package/static/edgepress/document-viewer.js +35 -0
  138. package/static/edgepress/external-links-policy.js +14 -0
  139. package/static/edgepress/external-links.css +13 -0
  140. package/static/edgepress/external-links.js +120 -0
  141. package/static/edgepress/fonts/faces.css +2217 -0
  142. package/static/edgepress/fonts/noto-sans-OFL.txt +93 -0
  143. package/static/edgepress/fonts/noto-sans-cyrillic-ext-wght-normal.82ff72b28e6610f2.woff2 +0 -0
  144. package/static/edgepress/fonts/noto-sans-cyrillic-wght-normal.6ab64433de6077ca.woff2 +0 -0
  145. package/static/edgepress/fonts/noto-sans-devanagari-wght-normal.ea6a530b75d93de7.woff2 +0 -0
  146. package/static/edgepress/fonts/noto-sans-greek-ext-wght-normal.790b255c10c32e0b.woff2 +0 -0
  147. package/static/edgepress/fonts/noto-sans-greek-wght-normal.7f655207c2f6c140.woff2 +0 -0
  148. package/static/edgepress/fonts/noto-sans-latin-ext-wght-normal.6d5a79315528df19.woff2 +0 -0
  149. package/static/edgepress/fonts/noto-sans-latin-wght-normal.51ca196f49a33e79.woff2 +0 -0
  150. package/static/edgepress/fonts/noto-sans-sc-100-wght-normal.ad5f29028d5699a5.woff2 +0 -0
  151. package/static/edgepress/fonts/noto-sans-sc-101-wght-normal.e189b81fc22ca6af.woff2 +0 -0
  152. package/static/edgepress/fonts/noto-sans-sc-102-wght-normal.941c0c2971fc1d6d.woff2 +0 -0
  153. package/static/edgepress/fonts/noto-sans-sc-103-wght-normal.bafbd591af6493ff.woff2 +0 -0
  154. package/static/edgepress/fonts/noto-sans-sc-104-wght-normal.b0bf80ced89dd61b.woff2 +0 -0
  155. package/static/edgepress/fonts/noto-sans-sc-105-wght-normal.8d8b4e6f4a00621d.woff2 +0 -0
  156. package/static/edgepress/fonts/noto-sans-sc-106-wght-normal.bae74acc629d2e74.woff2 +0 -0
  157. package/static/edgepress/fonts/noto-sans-sc-107-wght-normal.a42eff5010de7b0d.woff2 +0 -0
  158. package/static/edgepress/fonts/noto-sans-sc-108-wght-normal.91882203459867be.woff2 +0 -0
  159. package/static/edgepress/fonts/noto-sans-sc-109-wght-normal.a91f8b038e5ce108.woff2 +0 -0
  160. package/static/edgepress/fonts/noto-sans-sc-110-wght-normal.bbca9081655c4523.woff2 +0 -0
  161. package/static/edgepress/fonts/noto-sans-sc-111-wght-normal.372be010ac0e87cb.woff2 +0 -0
  162. package/static/edgepress/fonts/noto-sans-sc-112-wght-normal.34a4580239eae8dc.woff2 +0 -0
  163. package/static/edgepress/fonts/noto-sans-sc-113-wght-normal.614ab8f616352583.woff2 +0 -0
  164. package/static/edgepress/fonts/noto-sans-sc-114-wght-normal.cf7b8344807a316e.woff2 +0 -0
  165. package/static/edgepress/fonts/noto-sans-sc-115-wght-normal.fb29957c7adccb9a.woff2 +0 -0
  166. package/static/edgepress/fonts/noto-sans-sc-116-wght-normal.a98dc5a726f82141.woff2 +0 -0
  167. package/static/edgepress/fonts/noto-sans-sc-117-wght-normal.d94b5af0c14838af.woff2 +0 -0
  168. package/static/edgepress/fonts/noto-sans-sc-118-wght-normal.76c9ddb85ae4578c.woff2 +0 -0
  169. package/static/edgepress/fonts/noto-sans-sc-119-wght-normal.b3b2374881f4cd93.woff2 +0 -0
  170. package/static/edgepress/fonts/noto-sans-sc-21-wght-normal.c1409c43e55ecff2.woff2 +0 -0
  171. package/static/edgepress/fonts/noto-sans-sc-22-wght-normal.77037ed42ff4e7b0.woff2 +0 -0
  172. package/static/edgepress/fonts/noto-sans-sc-23-wght-normal.38d0df21ac374e93.woff2 +0 -0
  173. package/static/edgepress/fonts/noto-sans-sc-24-wght-normal.8fa21e7e457acf3e.woff2 +0 -0
  174. package/static/edgepress/fonts/noto-sans-sc-25-wght-normal.f760b7a3871d214d.woff2 +0 -0
  175. package/static/edgepress/fonts/noto-sans-sc-26-wght-normal.be8386e7bd7facfe.woff2 +0 -0
  176. package/static/edgepress/fonts/noto-sans-sc-27-wght-normal.4895abcaddbd162e.woff2 +0 -0
  177. package/static/edgepress/fonts/noto-sans-sc-28-wght-normal.82540b6201a9b9ad.woff2 +0 -0
  178. package/static/edgepress/fonts/noto-sans-sc-29-wght-normal.ff21d8fcc60ce391.woff2 +0 -0
  179. package/static/edgepress/fonts/noto-sans-sc-30-wght-normal.1f76f6ffded00b9e.woff2 +0 -0
  180. package/static/edgepress/fonts/noto-sans-sc-31-wght-normal.e6c25be1bb08a63a.woff2 +0 -0
  181. package/static/edgepress/fonts/noto-sans-sc-32-wght-normal.0cda750d7d04a4e1.woff2 +0 -0
  182. package/static/edgepress/fonts/noto-sans-sc-33-wght-normal.b9732b5606bd87c5.woff2 +0 -0
  183. package/static/edgepress/fonts/noto-sans-sc-34-wght-normal.38aa326b4c84902a.woff2 +0 -0
  184. package/static/edgepress/fonts/noto-sans-sc-35-wght-normal.bd98226c8e0aa808.woff2 +0 -0
  185. package/static/edgepress/fonts/noto-sans-sc-36-wght-normal.0db1ca695a491d37.woff2 +0 -0
  186. package/static/edgepress/fonts/noto-sans-sc-37-wght-normal.8df409a4e0a237c2.woff2 +0 -0
  187. package/static/edgepress/fonts/noto-sans-sc-38-wght-normal.672d2d994994a3c3.woff2 +0 -0
  188. package/static/edgepress/fonts/noto-sans-sc-39-wght-normal.272d6d0e153f56e8.woff2 +0 -0
  189. package/static/edgepress/fonts/noto-sans-sc-4-wght-normal.9fafd93ac77b81ff.woff2 +0 -0
  190. package/static/edgepress/fonts/noto-sans-sc-40-wght-normal.5b9ef1ed48420aa7.woff2 +0 -0
  191. package/static/edgepress/fonts/noto-sans-sc-41-wght-normal.30aee47f660fd88a.woff2 +0 -0
  192. package/static/edgepress/fonts/noto-sans-sc-42-wght-normal.ec0014830db682b6.woff2 +0 -0
  193. package/static/edgepress/fonts/noto-sans-sc-43-wght-normal.43df2b5dad9bb835.woff2 +0 -0
  194. package/static/edgepress/fonts/noto-sans-sc-44-wght-normal.acaa6195041b1a92.woff2 +0 -0
  195. package/static/edgepress/fonts/noto-sans-sc-45-wght-normal.8cdb9903f770db21.woff2 +0 -0
  196. package/static/edgepress/fonts/noto-sans-sc-46-wght-normal.6590d0a6fe94571c.woff2 +0 -0
  197. package/static/edgepress/fonts/noto-sans-sc-47-wght-normal.b05afdd32b3bf722.woff2 +0 -0
  198. package/static/edgepress/fonts/noto-sans-sc-48-wght-normal.c9585f7d070700be.woff2 +0 -0
  199. package/static/edgepress/fonts/noto-sans-sc-49-wght-normal.4943895a4dfa5dcf.woff2 +0 -0
  200. package/static/edgepress/fonts/noto-sans-sc-5-wght-normal.e64f57937e3ae4fe.woff2 +0 -0
  201. package/static/edgepress/fonts/noto-sans-sc-50-wght-normal.13e51063d7743cfe.woff2 +0 -0
  202. package/static/edgepress/fonts/noto-sans-sc-51-wght-normal.fd4df1f02c2cb4d7.woff2 +0 -0
  203. package/static/edgepress/fonts/noto-sans-sc-52-wght-normal.06999a39c4c3a7ea.woff2 +0 -0
  204. package/static/edgepress/fonts/noto-sans-sc-53-wght-normal.767b7b9864658d91.woff2 +0 -0
  205. package/static/edgepress/fonts/noto-sans-sc-54-wght-normal.4cd00537a46f6f1a.woff2 +0 -0
  206. package/static/edgepress/fonts/noto-sans-sc-55-wght-normal.0118ec5d8c30b197.woff2 +0 -0
  207. package/static/edgepress/fonts/noto-sans-sc-56-wght-normal.a3e4a78929826930.woff2 +0 -0
  208. package/static/edgepress/fonts/noto-sans-sc-57-wght-normal.7623501009e4a6db.woff2 +0 -0
  209. package/static/edgepress/fonts/noto-sans-sc-58-wght-normal.56ae1a59a32e4a25.woff2 +0 -0
  210. package/static/edgepress/fonts/noto-sans-sc-59-wght-normal.7a377a40e99fd9bc.woff2 +0 -0
  211. package/static/edgepress/fonts/noto-sans-sc-6-wght-normal.17e15c4f0a5bfd92.woff2 +0 -0
  212. package/static/edgepress/fonts/noto-sans-sc-60-wght-normal.3657f66babdf6aff.woff2 +0 -0
  213. package/static/edgepress/fonts/noto-sans-sc-61-wght-normal.23919a2eb11d25dd.woff2 +0 -0
  214. package/static/edgepress/fonts/noto-sans-sc-62-wght-normal.a901edf25bc1cfae.woff2 +0 -0
  215. package/static/edgepress/fonts/noto-sans-sc-63-wght-normal.92f56f713cc0b62f.woff2 +0 -0
  216. package/static/edgepress/fonts/noto-sans-sc-64-wght-normal.4929c9f39a5a4bd9.woff2 +0 -0
  217. package/static/edgepress/fonts/noto-sans-sc-65-wght-normal.8daa61282fb62a11.woff2 +0 -0
  218. package/static/edgepress/fonts/noto-sans-sc-66-wght-normal.6479166925eb462b.woff2 +0 -0
  219. package/static/edgepress/fonts/noto-sans-sc-67-wght-normal.a6b0e11c4c761ffd.woff2 +0 -0
  220. package/static/edgepress/fonts/noto-sans-sc-68-wght-normal.65b77f1fe9d68dae.woff2 +0 -0
  221. package/static/edgepress/fonts/noto-sans-sc-69-wght-normal.b34f765cbbf4d02e.woff2 +0 -0
  222. package/static/edgepress/fonts/noto-sans-sc-70-wght-normal.a99d55c00e4f95b7.woff2 +0 -0
  223. package/static/edgepress/fonts/noto-sans-sc-71-wght-normal.3298bed30dc8d233.woff2 +0 -0
  224. package/static/edgepress/fonts/noto-sans-sc-72-wght-normal.6597209ca9707726.woff2 +0 -0
  225. package/static/edgepress/fonts/noto-sans-sc-73-wght-normal.e7ac1d4930eabd78.woff2 +0 -0
  226. package/static/edgepress/fonts/noto-sans-sc-74-wght-normal.1f0287be83a28e7a.woff2 +0 -0
  227. package/static/edgepress/fonts/noto-sans-sc-75-wght-normal.d9a4bb7bcc2be578.woff2 +0 -0
  228. package/static/edgepress/fonts/noto-sans-sc-76-wght-normal.5a019946bcadcec6.woff2 +0 -0
  229. package/static/edgepress/fonts/noto-sans-sc-77-wght-normal.7c445e85d04f5319.woff2 +0 -0
  230. package/static/edgepress/fonts/noto-sans-sc-78-wght-normal.7d4afb70f641781c.woff2 +0 -0
  231. package/static/edgepress/fonts/noto-sans-sc-79-wght-normal.5798753a721bb4ec.woff2 +0 -0
  232. package/static/edgepress/fonts/noto-sans-sc-80-wght-normal.db887159ca6e46f3.woff2 +0 -0
  233. package/static/edgepress/fonts/noto-sans-sc-81-wght-normal.71e5743bbd225b3d.woff2 +0 -0
  234. package/static/edgepress/fonts/noto-sans-sc-82-wght-normal.8c5094c3785fd04f.woff2 +0 -0
  235. package/static/edgepress/fonts/noto-sans-sc-83-wght-normal.4a60a1ccba905284.woff2 +0 -0
  236. package/static/edgepress/fonts/noto-sans-sc-84-wght-normal.3ed54e59ef4758e3.woff2 +0 -0
  237. package/static/edgepress/fonts/noto-sans-sc-85-wght-normal.e87e0a1342e1778c.woff2 +0 -0
  238. package/static/edgepress/fonts/noto-sans-sc-86-wght-normal.6d3ac3e20959dbcb.woff2 +0 -0
  239. package/static/edgepress/fonts/noto-sans-sc-87-wght-normal.0eeffd5daad5c17b.woff2 +0 -0
  240. package/static/edgepress/fonts/noto-sans-sc-88-wght-normal.b1d9582dfa268463.woff2 +0 -0
  241. package/static/edgepress/fonts/noto-sans-sc-89-wght-normal.8b437aeb9e9fcb5a.woff2 +0 -0
  242. package/static/edgepress/fonts/noto-sans-sc-90-wght-normal.83b0a59e0a5e045a.woff2 +0 -0
  243. package/static/edgepress/fonts/noto-sans-sc-91-wght-normal.382f72b98d4bb9d7.woff2 +0 -0
  244. package/static/edgepress/fonts/noto-sans-sc-97-wght-normal.5e52856457c5cdab.woff2 +0 -0
  245. package/static/edgepress/fonts/noto-sans-sc-98-wght-normal.ffded4e7fd560d93.woff2 +0 -0
  246. package/static/edgepress/fonts/noto-sans-sc-99-wght-normal.54e302c23f11a8fd.woff2 +0 -0
  247. package/static/edgepress/fonts/noto-sans-sc-OFL.txt +93 -0
  248. package/static/edgepress/fonts/noto-sans-sc-cyrillic-wght-normal.5932d441e7126669.woff2 +0 -0
  249. package/static/edgepress/fonts/noto-sans-sc-latin-ext-wght-normal.e316201f3fc493d1.woff2 +0 -0
  250. package/static/edgepress/fonts/noto-sans-sc-latin-wght-normal.c1d919c8701a86ed.woff2 +0 -0
  251. package/static/edgepress/fonts/noto-sans-sc-vietnamese-wght-normal.cba3d00c8db989f0.woff2 +0 -0
  252. package/static/edgepress/fonts/noto-sans-tc-0-wght-normal.63c21eda5d20203f.woff2 +0 -0
  253. package/static/edgepress/fonts/noto-sans-tc-100-wght-normal.87a7c76301c24a28.woff2 +0 -0
  254. package/static/edgepress/fonts/noto-sans-tc-101-wght-normal.c9e83fc4ffd53746.woff2 +0 -0
  255. package/static/edgepress/fonts/noto-sans-tc-102-wght-normal.9a00ae0e5735852b.woff2 +0 -0
  256. package/static/edgepress/fonts/noto-sans-tc-103-wght-normal.7cfe93b3221f4def.woff2 +0 -0
  257. package/static/edgepress/fonts/noto-sans-tc-104-wght-normal.2d5ac7497d84cb99.woff2 +0 -0
  258. package/static/edgepress/fonts/noto-sans-tc-105-wght-normal.0989885bb16bcd9b.woff2 +0 -0
  259. package/static/edgepress/fonts/noto-sans-tc-106-wght-normal.1faa921b035064e7.woff2 +0 -0
  260. package/static/edgepress/fonts/noto-sans-tc-107-wght-normal.2f6006745ae16d69.woff2 +0 -0
  261. package/static/edgepress/fonts/noto-sans-tc-108-wght-normal.a61e48c10a2cf4b9.woff2 +0 -0
  262. package/static/edgepress/fonts/noto-sans-tc-109-wght-normal.f28c767724736d2d.woff2 +0 -0
  263. package/static/edgepress/fonts/noto-sans-tc-110-wght-normal.4b04bd88c3dc7c5d.woff2 +0 -0
  264. package/static/edgepress/fonts/noto-sans-tc-111-wght-normal.b6251e1967932a52.woff2 +0 -0
  265. package/static/edgepress/fonts/noto-sans-tc-112-wght-normal.e264513b32f90660.woff2 +0 -0
  266. package/static/edgepress/fonts/noto-sans-tc-113-wght-normal.46cb347d88f3338e.woff2 +0 -0
  267. package/static/edgepress/fonts/noto-sans-tc-114-wght-normal.9f9e1e0d0ab2aeb4.woff2 +0 -0
  268. package/static/edgepress/fonts/noto-sans-tc-115-wght-normal.653dd2ab7d551b40.woff2 +0 -0
  269. package/static/edgepress/fonts/noto-sans-tc-116-wght-normal.4718bf3627191297.woff2 +0 -0
  270. package/static/edgepress/fonts/noto-sans-tc-117-wght-normal.b241a9409682af5f.woff2 +0 -0
  271. package/static/edgepress/fonts/noto-sans-tc-118-wght-normal.fda2800dc1c06852.woff2 +0 -0
  272. package/static/edgepress/fonts/noto-sans-tc-119-wght-normal.948af36bd63a72c7.woff2 +0 -0
  273. package/static/edgepress/fonts/noto-sans-tc-19-wght-normal.62191cdc3a10e60a.woff2 +0 -0
  274. package/static/edgepress/fonts/noto-sans-tc-20-wght-normal.65c90892c2e01657.woff2 +0 -0
  275. package/static/edgepress/fonts/noto-sans-tc-21-wght-normal.d3f59b094c334866.woff2 +0 -0
  276. package/static/edgepress/fonts/noto-sans-tc-22-wght-normal.b1983a041d7e4e1f.woff2 +0 -0
  277. package/static/edgepress/fonts/noto-sans-tc-23-wght-normal.16e2163b66c7732a.woff2 +0 -0
  278. package/static/edgepress/fonts/noto-sans-tc-24-wght-normal.72c8561976116537.woff2 +0 -0
  279. package/static/edgepress/fonts/noto-sans-tc-25-wght-normal.b2948d928ce4dd54.woff2 +0 -0
  280. package/static/edgepress/fonts/noto-sans-tc-26-wght-normal.d583236b90abedc9.woff2 +0 -0
  281. package/static/edgepress/fonts/noto-sans-tc-27-wght-normal.7d6073ba07597c9b.woff2 +0 -0
  282. package/static/edgepress/fonts/noto-sans-tc-28-wght-normal.517204d716b089cd.woff2 +0 -0
  283. package/static/edgepress/fonts/noto-sans-tc-29-wght-normal.10189a8f8ca38099.woff2 +0 -0
  284. package/static/edgepress/fonts/noto-sans-tc-30-wght-normal.695a71d72dfab3f7.woff2 +0 -0
  285. package/static/edgepress/fonts/noto-sans-tc-31-wght-normal.868d59473ef0e73c.woff2 +0 -0
  286. package/static/edgepress/fonts/noto-sans-tc-32-wght-normal.92efa2d4b3702ec0.woff2 +0 -0
  287. package/static/edgepress/fonts/noto-sans-tc-33-wght-normal.d2274bcd5636197d.woff2 +0 -0
  288. package/static/edgepress/fonts/noto-sans-tc-34-wght-normal.1ac8c3718ee2eed2.woff2 +0 -0
  289. package/static/edgepress/fonts/noto-sans-tc-35-wght-normal.00b3df730d5a4c73.woff2 +0 -0
  290. package/static/edgepress/fonts/noto-sans-tc-36-wght-normal.6963feb6c628b81f.woff2 +0 -0
  291. package/static/edgepress/fonts/noto-sans-tc-37-wght-normal.a1b4bd294af24cd1.woff2 +0 -0
  292. package/static/edgepress/fonts/noto-sans-tc-38-wght-normal.8edb2f7f2955921b.woff2 +0 -0
  293. package/static/edgepress/fonts/noto-sans-tc-39-wght-normal.37bf7394eb3148c6.woff2 +0 -0
  294. package/static/edgepress/fonts/noto-sans-tc-40-wght-normal.3efa655bc48f9133.woff2 +0 -0
  295. package/static/edgepress/fonts/noto-sans-tc-41-wght-normal.48d47014544ebd5d.woff2 +0 -0
  296. package/static/edgepress/fonts/noto-sans-tc-42-wght-normal.214c733a59d423e7.woff2 +0 -0
  297. package/static/edgepress/fonts/noto-sans-tc-43-wght-normal.c2c9876f138bb20f.woff2 +0 -0
  298. package/static/edgepress/fonts/noto-sans-tc-44-wght-normal.28928bfea29db06a.woff2 +0 -0
  299. package/static/edgepress/fonts/noto-sans-tc-45-wght-normal.bf3743f8155fa9d2.woff2 +0 -0
  300. package/static/edgepress/fonts/noto-sans-tc-46-wght-normal.06970903593781c3.woff2 +0 -0
  301. package/static/edgepress/fonts/noto-sans-tc-47-wght-normal.8932ed83a91794d4.woff2 +0 -0
  302. package/static/edgepress/fonts/noto-sans-tc-48-wght-normal.dfd9225628bcf234.woff2 +0 -0
  303. package/static/edgepress/fonts/noto-sans-tc-49-wght-normal.c27d341ad39d44eb.woff2 +0 -0
  304. package/static/edgepress/fonts/noto-sans-tc-50-wght-normal.01a0f4e7dfba0a56.woff2 +0 -0
  305. package/static/edgepress/fonts/noto-sans-tc-51-wght-normal.5a30022af3d30e0f.woff2 +0 -0
  306. package/static/edgepress/fonts/noto-sans-tc-52-wght-normal.4884f032342a3274.woff2 +0 -0
  307. package/static/edgepress/fonts/noto-sans-tc-53-wght-normal.537adcae44511270.woff2 +0 -0
  308. package/static/edgepress/fonts/noto-sans-tc-54-wght-normal.6bc8c7d3e47c6fde.woff2 +0 -0
  309. package/static/edgepress/fonts/noto-sans-tc-55-wght-normal.725a48711f1e1997.woff2 +0 -0
  310. package/static/edgepress/fonts/noto-sans-tc-56-wght-normal.f43ecaa73e0cd8fc.woff2 +0 -0
  311. package/static/edgepress/fonts/noto-sans-tc-57-wght-normal.15b24e9d42a3270f.woff2 +0 -0
  312. package/static/edgepress/fonts/noto-sans-tc-58-wght-normal.9b2d8a71667d3da6.woff2 +0 -0
  313. package/static/edgepress/fonts/noto-sans-tc-59-wght-normal.a68535a6b3289d89.woff2 +0 -0
  314. package/static/edgepress/fonts/noto-sans-tc-6-wght-normal.32cece1ae80c4f2b.woff2 +0 -0
  315. package/static/edgepress/fonts/noto-sans-tc-60-wght-normal.3b2c56a921d1cad4.woff2 +0 -0
  316. package/static/edgepress/fonts/noto-sans-tc-61-wght-normal.54f51f80a0740878.woff2 +0 -0
  317. package/static/edgepress/fonts/noto-sans-tc-62-wght-normal.ba029c5bb6c07bf1.woff2 +0 -0
  318. package/static/edgepress/fonts/noto-sans-tc-63-wght-normal.380919beec4c7f3d.woff2 +0 -0
  319. package/static/edgepress/fonts/noto-sans-tc-64-wght-normal.f96fe0be479d201f.woff2 +0 -0
  320. package/static/edgepress/fonts/noto-sans-tc-65-wght-normal.7d544b80701fe678.woff2 +0 -0
  321. package/static/edgepress/fonts/noto-sans-tc-66-wght-normal.fab669c07a1e3bee.woff2 +0 -0
  322. package/static/edgepress/fonts/noto-sans-tc-67-wght-normal.0001bb744743fdfa.woff2 +0 -0
  323. package/static/edgepress/fonts/noto-sans-tc-68-wght-normal.1a57eda03886b43c.woff2 +0 -0
  324. package/static/edgepress/fonts/noto-sans-tc-69-wght-normal.017fecc749bcd6d5.woff2 +0 -0
  325. package/static/edgepress/fonts/noto-sans-tc-7-wght-normal.cd0f0cac743dbbfe.woff2 +0 -0
  326. package/static/edgepress/fonts/noto-sans-tc-70-wght-normal.79fb9d70b9534ec7.woff2 +0 -0
  327. package/static/edgepress/fonts/noto-sans-tc-71-wght-normal.04a6ea581b5f1195.woff2 +0 -0
  328. package/static/edgepress/fonts/noto-sans-tc-72-wght-normal.d3a4eb35499157b7.woff2 +0 -0
  329. package/static/edgepress/fonts/noto-sans-tc-73-wght-normal.d81f8484404ee465.woff2 +0 -0
  330. package/static/edgepress/fonts/noto-sans-tc-74-wght-normal.4a5da9e0c2702f7d.woff2 +0 -0
  331. package/static/edgepress/fonts/noto-sans-tc-75-wght-normal.8b87f9c6c164513a.woff2 +0 -0
  332. package/static/edgepress/fonts/noto-sans-tc-76-wght-normal.a71463dbfd9fa7b5.woff2 +0 -0
  333. package/static/edgepress/fonts/noto-sans-tc-77-wght-normal.d094414ea752cd52.woff2 +0 -0
  334. package/static/edgepress/fonts/noto-sans-tc-78-wght-normal.04f7c97bd9cbc73b.woff2 +0 -0
  335. package/static/edgepress/fonts/noto-sans-tc-79-wght-normal.1ed089d037a02049.woff2 +0 -0
  336. package/static/edgepress/fonts/noto-sans-tc-8-wght-normal.d052677dfb5db5bd.woff2 +0 -0
  337. package/static/edgepress/fonts/noto-sans-tc-80-wght-normal.6d41ca59cfd50442.woff2 +0 -0
  338. package/static/edgepress/fonts/noto-sans-tc-81-wght-normal.f09bd0afa8a58114.woff2 +0 -0
  339. package/static/edgepress/fonts/noto-sans-tc-82-wght-normal.7920841c526b1b02.woff2 +0 -0
  340. package/static/edgepress/fonts/noto-sans-tc-83-wght-normal.0c6f7f82db8da0d8.woff2 +0 -0
  341. package/static/edgepress/fonts/noto-sans-tc-84-wght-normal.f37c0a853b31265e.woff2 +0 -0
  342. package/static/edgepress/fonts/noto-sans-tc-85-wght-normal.4173bff087653b82.woff2 +0 -0
  343. package/static/edgepress/fonts/noto-sans-tc-86-wght-normal.dac35605ebec15c4.woff2 +0 -0
  344. package/static/edgepress/fonts/noto-sans-tc-87-wght-normal.8ac85fdd0b15a6bd.woff2 +0 -0
  345. package/static/edgepress/fonts/noto-sans-tc-88-wght-normal.61625b0b21e8407f.woff2 +0 -0
  346. package/static/edgepress/fonts/noto-sans-tc-89-wght-normal.a1da3dccbf00698e.woff2 +0 -0
  347. package/static/edgepress/fonts/noto-sans-tc-90-wght-normal.bf08f0355222a782.woff2 +0 -0
  348. package/static/edgepress/fonts/noto-sans-tc-91-wght-normal.2ecf295bba2bfaa3.woff2 +0 -0
  349. package/static/edgepress/fonts/noto-sans-tc-92-wght-normal.36508326bb68115f.woff2 +0 -0
  350. package/static/edgepress/fonts/noto-sans-tc-97-wght-normal.c712899e0fc9e947.woff2 +0 -0
  351. package/static/edgepress/fonts/noto-sans-tc-98-wght-normal.13a648e521d18d7f.woff2 +0 -0
  352. package/static/edgepress/fonts/noto-sans-tc-99-wght-normal.7f8c9a777e64159a.woff2 +0 -0
  353. package/static/edgepress/fonts/noto-sans-tc-OFL.txt +93 -0
  354. package/static/edgepress/fonts/noto-sans-tc-cyrillic-wght-normal.dd0980ced8e46cb3.woff2 +0 -0
  355. package/static/edgepress/fonts/noto-sans-tc-latin-ext-wght-normal.817d96335dc52ce6.woff2 +0 -0
  356. package/static/edgepress/fonts/noto-sans-tc-latin-wght-normal.50cb5fb0a522cfaf.woff2 +0 -0
  357. package/static/edgepress/fonts/noto-sans-tc-vietnamese-wght-normal.2a77fb7b70fa304d.woff2 +0 -0
  358. package/static/edgepress/fonts/noto-sans-vietnamese-wght-normal.791e3f213c155a5b.woff2 +0 -0
  359. package/static/edgepress/fonts/noto-serif-OFL.txt +93 -0
  360. package/static/edgepress/fonts/noto-serif-cyrillic-ext-wght-normal.7c7afb20d33e30ec.woff2 +0 -0
  361. package/static/edgepress/fonts/noto-serif-cyrillic-wght-normal.54e3bd0c4a002b0f.woff2 +0 -0
  362. package/static/edgepress/fonts/noto-serif-greek-ext-wght-normal.9b3f4c4ff3adefd2.woff2 +0 -0
  363. package/static/edgepress/fonts/noto-serif-greek-wght-normal.1252037b6f1d6e86.woff2 +0 -0
  364. package/static/edgepress/fonts/noto-serif-latin-ext-wght-normal.2654f8d1261a420f.woff2 +0 -0
  365. package/static/edgepress/fonts/noto-serif-latin-wght-normal.46281456234014ce.woff2 +0 -0
  366. package/static/edgepress/fonts/noto-serif-math-wght-normal.d4a6aba2cb4636b3.woff2 +0 -0
  367. package/static/edgepress/fonts/noto-serif-vietnamese-wght-normal.fb6a5ed734c2fbe3.woff2 +0 -0
  368. package/static/edgepress/fonts/provenance.json +1356 -0
  369. package/static/edgepress/fonts.css +14 -0
  370. package/static/edgepress/image-viewer.js +23 -0
  371. package/static/edgepress/images.css +4 -0
  372. package/static/edgepress/link-directory.css +14 -0
  373. package/static/edgepress/local-time.js +12 -0
  374. package/static/edgepress/media-viewer.css +1 -0
  375. package/static/edgepress/media-viewer.js +111 -0
  376. package/static/edgepress/navigation-select.js +14 -0
  377. package/static/edgepress/oembed.js +129 -0
  378. package/static/edgepress/plugins/backend/external-api.js +4 -0
  379. package/static/edgepress/plugins/backend/external-widget.js +13 -0
  380. package/static/edgepress/plugins/consent/choices.js +47 -0
  381. package/static/edgepress/plugins/consent/manager.js +56 -74
  382. package/static/edgepress/project-demo.js +93 -0
  383. package/static/edgepress/search.js +2 -2
  384. package/static/edgepress/services-consent.js +3 -0
  385. package/static/edgepress/services.js +15 -0
  386. package/static/edgepress/webmcp.js +86 -0
  387. package/tests/assets-runtime.test.mjs +91 -0
  388. package/tests/audit.test.mjs +142 -0
  389. package/tests/brand-regression.test.mjs +110 -0
  390. package/tests/consent-browser.test.mjs +132 -0
  391. package/tests/consent-config.test.mjs +85 -0
  392. package/tests/consent-csp.test.mjs +90 -0
  393. package/tests/data-saver-loading.test.mjs +158 -0
  394. package/tests/data-saver-network.test.mjs +99 -0
  395. package/tests/data-saver.test.mjs +294 -0
  396. package/tests/document-package.test.mjs +28 -0
  397. package/tests/document-viewer.test.mjs +152 -0
  398. package/tests/edge-issues.test.mjs +65 -0
  399. package/tests/embed-syntax.test.mjs +68 -0
  400. package/tests/external-links.test.mjs +198 -0
  401. package/tests/fixtures/recording.mp4 +0 -0
  402. package/tests/fonts.test.mjs +99 -0
  403. package/tests/image-dimensions.test.mjs +15 -0
  404. package/tests/image-viewer.test.mjs +36 -0
  405. package/tests/json-pages.test.mjs +66 -0
  406. package/tests/link-directory.test.mjs +51 -0
  407. package/tests/local-tool.test.mjs +34 -0
  408. package/tests/markdown-media.test.mjs +119 -0
  409. package/tests/media-block.test.mjs +102 -0
  410. package/tests/navigation.test.mjs +87 -0
  411. package/tests/oembed-layout.test.mjs +98 -0
  412. package/tests/oembed.test.mjs +96 -0
  413. package/tests/page-authoring.test.mjs +27 -0
  414. package/tests/page-formatting.test.mjs +37 -0
  415. package/tests/post-list.test.mjs +96 -0
  416. package/tests/project-demo.test.mjs +73 -0
  417. package/tests/publication-time.test.mjs +43 -0
  418. package/tests/release-version.test.mjs +28 -0
  419. package/tests/revisions.test.mjs +93 -0
  420. package/tests/rss.test.mjs +54 -0
  421. package/tests/services.test.mjs +35 -0
  422. package/tests/theme-layout.test.mjs +95 -0
  423. package/tests/video-metadata.test.mjs +28 -0
  424. package/tests/webmcp.test.mjs +121 -0
  425. package/tests/writing.test.mjs +101 -0
  426. package/themes/atelier/assets/style.css +144 -22
  427. package/themes/atelier/layouts/partials/head.html +8 -1
  428. package/themes/atelier/layouts/partials/header.html +3 -1
  429. package/themes/default/assets/data-saver-theme.css +2 -0
  430. package/themes/default/assets/style.css +139 -23
  431. package/themes/default/layouts/partials/head.html +9 -2
  432. package/themes/default/layouts/partials/header.html +3 -1
  433. package/themes/default/theme.json +1 -0
  434. package/themes/folio/README.md +7 -0
  435. package/themes/folio/assets/data-saver-theme.css +3 -0
  436. package/themes/folio/assets/folio/navigation.js +10 -0
  437. package/themes/folio/assets/style.css +516 -0
  438. package/themes/folio/layouts/layout.html +15 -0
  439. package/themes/folio/layouts/partials/footer.html +6 -0
  440. package/themes/folio/layouts/partials/head.html +30 -0
  441. package/themes/folio/layouts/partials/header.html +8 -0
  442. package/themes/folio/theme.json +7 -0
  443. package/themes/signal/assets/style.css +143 -21
  444. package/themes/signal/layouts/partials/head.html +8 -1
  445. package/themes/signal/layouts/partials/header.html +3 -1
  446. package/tools/README.md +14 -0
  447. package/tools/assets/format-pages.mjs +56 -0
  448. package/tools/assets/generate-brand-assets.py +160 -0
  449. package/tools/assets/sync-fonts.mjs +71 -0
  450. package/tools/assets/sync-icons.mjs +17 -0
  451. package/tools/assets/video-preview.mjs +15 -0
  452. package/tools/recordings/capture-document-demo.mjs +147 -0
  453. package/tools/recordings/demo-workbench.mjs +57 -0
  454. package/tools/recordings/desktop-recording.mjs +92 -0
  455. package/tools/recordings/provision-vm.sh +18 -0
  456. package/tools/recordings/start-vm-desktop.sh +28 -0
  457. package/tools/recordings/vm-desktop.mjs +124 -0
  458. package/tools/verification/README.md +44 -0
  459. package/tools/verification/data-saver-site.mjs +405 -0
  460. package/tools/verification/page-performance.mjs +76 -0
  461. package/tools/verification/verify-brand-assets.py +52 -0
  462. package/tools/verification/verify-brand.mjs +180 -0
  463. package/vercel.json +36 -0
  464. package/wrangler.jsonc +5 -7
  465. package/content/pages/home/en.md +0 -99
  466. package/content/pages/home/zh-cn.md +0 -99
  467. package/content/pages/plugin-development/en.md +0 -109
  468. package/content/pages/plugin-development/zh-cn.md +0 -109
  469. package/content/pages/privacy-policy/en.md +0 -93
  470. package/content/pages/privacy-policy/zh-cn.md +0 -93
  471. package/content/pages/project-introduction/en.md +0 -88
  472. package/content/pages/project-introduction/zh-cn.md +0 -88
  473. package/content/pages/quick-start/en.md +0 -153
  474. package/content/pages/quick-start/zh-cn.md +0 -153
  475. package/content/pages/theme-development/en.md +0 -132
  476. package/content/pages/theme-development/zh-cn.md +0 -132
  477. package/src/worker.js +0 -139
  478. package/static/edgepress/brand/edgepress-mark.svg +0 -7
  479. package/static/edgepress/brand/mascot-209.webp +0 -0
  480. package/static/edgepress/brand/mascot-418.png +0 -0
  481. package/static/edgepress/brand/mascot-418.webp +0 -0
  482. package/static/edgepress/brand/mascot.png +0 -0
  483. package/static/edgepress/brand/og-image.png +0 -0
  484. package/static/edgepress/brand/og-image.svg +0 -46
  485. package/static/edgepress/icons.svg +0 -24
@@ -0,0 +1,171 @@
1
+ {
2
+ "$schema": "../../../schemas/pages.schema.json",
3
+ "title": "Privacy policy",
4
+ "lang": "en",
5
+ "slug": "privacy-policy",
6
+ "description": "How this site handles request data, consent choices, optional analytics, data rights, and supplier disclosures.",
7
+ "blocks": [
8
+ {
9
+ "columns": 1,
10
+ "cells": [
11
+ [
12
+ {
13
+ "type": "section",
14
+ "title": "Controller and contact",
15
+ "tone": "soft",
16
+ "blocks": [
17
+ {
18
+ "type": "privacy-controller",
19
+ "nameLabel": "Controller",
20
+ "contactLabel": "Privacy contact",
21
+ "missingTitle": "Publication setup required",
22
+ "missingText": "Add the responsible person's or organization's real name and a working privacy contact in config.yml before publishing."
23
+ },
24
+ {
25
+ "type": "text",
26
+ "text": "Confirm that the configured name identifies the responsible person or legal entity. Add a postal address, EU representative, or data protection officer contact here when applicable to the operator."
27
+ }
28
+ ]
29
+ }
30
+ ]
31
+ ]
32
+ },
33
+ {
34
+ "columns": 2,
35
+ "cells": [
36
+ [
37
+ {
38
+ "type": "section",
39
+ "title": "Site requests and legal bases",
40
+ "blocks": [
41
+ {
42
+ "type": "text",
43
+ "paragraphs": [
44
+ "This site publishes pages and posts and provides client-side search. It has no visitor accounts, comments, or contact form in this build.",
45
+ "To deliver and protect the site, the hosting and network providers receive request data such as IP address, requested path, request time, and browser or device headers. Where GDPR applies, the operator relies on legitimate interests in serving a secure and reliable site (Article 6(1)(f)); the operator must document the balancing assessment and confirm actual hosting logs and retention in the deployment account.",
46
+ "Optional browser services listed below load only after an affirmative choice. Where their processing includes personal data and consent is the chosen legal basis, it is based on consent (Article 6(1)(a)). Refusing optional services does not prevent access to the site's basic pages."
47
+ ]
48
+ }
49
+ ]
50
+ }
51
+ ],
52
+ [
53
+ {
54
+ "type": "section",
55
+ "title": "Optional browser services",
56
+ "blocks": [
57
+ {
58
+ "type": "text",
59
+ "text": "This list is generated from enabled services in config.yml. It identifies each purpose, data category, recipient, retention period, and the supplier's own privacy information."
60
+ },
61
+ {
62
+ "type": "privacy-services",
63
+ "emptyText": "No optional third-party browser services are configured."
64
+ }
65
+ ]
66
+ }
67
+ ]
68
+ ]
69
+ },
70
+ {
71
+ "columns": 1,
72
+ "cells": [
73
+ [
74
+ {
75
+ "type": "section",
76
+ "title": "Cloudflare Web Analytics",
77
+ "blocks": [
78
+ {
79
+ "type": "text",
80
+ "paragraphs": [
81
+ "When accepted, the Cloudflare beacon reports page-view and browser performance metrics. Its published dimensions include page path, referrer, device, browser, operating system, and country. Cloudflare says its beacon receives the source IP as part of the HTTP request, discards it at the nearest data center, and does not store it in its core databases or logs; Cloudflare also says the beacon does not use browser storage.",
82
+ "Cloudflare states that unsampled beacon data is retained for 7 days and then aggregated to about 10% for longer-term storage; dashboard history is available for 6 months. The beacon may be processed in a different country or region from the visitor. The operator must check the actual Cloudflare account, plan, and applicable data processing terms before publication."
83
+ ]
84
+ }
85
+ ]
86
+ }
87
+ ]
88
+ ]
89
+ },
90
+ {
91
+ "columns": 2,
92
+ "cells": [
93
+ [
94
+ {
95
+ "type": "section",
96
+ "title": "Consent, retention, and transfers",
97
+ "tone": "accent",
98
+ "blocks": [
99
+ {
100
+ "type": "text",
101
+ "paragraphs": [
102
+ "The privacy choice is saved in the visitor's browser on that device for the configured period. This site does not send the choice to the operator or keep a server-side receipt. A visitor can reopen Privacy settings to change or withdraw it; withdrawal stops an active integration after the page reloads. If the operator relies on consent to process personal data, the operator must ensure it can demonstrate consent as required by GDPR Article 7.",
103
+ "Hosting and security log retention depends on the deployed provider account and is not set by this source configuration. Cloudflare's data processing addendum describes transfer safeguards, including standard contractual clauses for restricted transfers; the operator must confirm the applicable agreement and safeguards for this deployment."
104
+ ]
105
+ },
106
+ {
107
+ "type": "privacy-consent",
108
+ "storageLabel": "Saved on",
109
+ "expiryLabel": "Preference expiry",
110
+ "proposedDateLabel": "Notice proposed",
111
+ "effectiveDateLabel": "Notice effective",
112
+ "expiryText": "{days} days after saving"
113
+ }
114
+ ]
115
+ }
116
+ ],
117
+ [
118
+ {
119
+ "type": "section",
120
+ "title": "Your rights",
121
+ "blocks": [
122
+ {
123
+ "type": "text",
124
+ "paragraphs": [
125
+ "Where GDPR applies, you may request access, rectification, erasure, restriction, or object to processing. You may request data portability where the legal conditions apply, and withdraw consent at any time without affecting processing that was lawful before withdrawal.",
126
+ "Contact the controller using the details above to exercise a right or ask a question. You may also complain to the competent data protection supervisory authority, including in the EU country where you live, work, or believe an infringement occurred.",
127
+ "This site does not configure solely automated decisions that produce legal or similarly significant effects. The operator should update this notice if that changes or if the site adds accounts, forms, or other data uses."
128
+ ]
129
+ }
130
+ ]
131
+ }
132
+ ]
133
+ ]
134
+ },
135
+ {
136
+ "columns": 1,
137
+ "cells": [
138
+ [
139
+ {
140
+ "type": "section",
141
+ "title": "Legal reference",
142
+ "blocks": [
143
+ {
144
+ "type": "link-list",
145
+ "title": "Official documents",
146
+ "items": [
147
+ {
148
+ "label": "General Data Protection Regulation (EUR-Lex)",
149
+ "url": "https://eur-lex.europa.eu/eli/reg/2016/679/oj/eng"
150
+ },
151
+ {
152
+ "label": "Cloudflare RUM beacon privacy details",
153
+ "url": "https://developers.cloudflare.com/speed/observatory/rum-beacon/"
154
+ },
155
+ {
156
+ "label": "Cloudflare Web Analytics retention and FAQ",
157
+ "url": "https://developers.cloudflare.com/web-analytics/faq/"
158
+ },
159
+ {
160
+ "label": "Cloudflare Data Processing Addendum",
161
+ "url": "https://www.cloudflare.com/cloudflare-customer-dpa/"
162
+ }
163
+ ]
164
+ }
165
+ ]
166
+ }
167
+ ]
168
+ ]
169
+ }
170
+ ]
171
+ }
@@ -0,0 +1,171 @@
1
+ {
2
+ "$schema": "../../../schemas/pages.schema.json",
3
+ "title": "隐私政策",
4
+ "lang": "zh-CN",
5
+ "slug": "privacy-policy",
6
+ "description": "说明本网站如何处理请求数据、同意偏好、可选统计服务、个人权利和供应商信息。",
7
+ "blocks": [
8
+ {
9
+ "columns": 1,
10
+ "cells": [
11
+ [
12
+ {
13
+ "type": "section",
14
+ "title": "个人信息处理者与联系",
15
+ "tone": "soft",
16
+ "blocks": [
17
+ {
18
+ "type": "privacy-controller",
19
+ "nameLabel": "处理者",
20
+ "contactLabel": "隐私联系",
21
+ "missingTitle": "发布前需要补充信息",
22
+ "missingText": "正式发布前,请在 config.yml 中填写负责个人或组织的真实名称和有效隐私联系方式。"
23
+ },
24
+ {
25
+ "type": "text",
26
+ "text": "请确认上方名称能识别负责的个人或法律实体。若运营者情形适用,还应在本政策中补充邮寄地址、欧盟代表或数据保护官的联系方式。"
27
+ }
28
+ ]
29
+ }
30
+ ]
31
+ ]
32
+ },
33
+ {
34
+ "columns": 2,
35
+ "cells": [
36
+ [
37
+ {
38
+ "type": "section",
39
+ "title": "网站请求与处理依据",
40
+ "blocks": [
41
+ {
42
+ "type": "text",
43
+ "paragraphs": [
44
+ "本网站发布页面和文章,并提供在访客浏览器中运行的站内搜索。本构建版本没有访客账户、评论或联系表单。",
45
+ "为传送和保护网站,托管及网络服务商会收到请求数据,例如 IP 地址、请求路径、请求时间以及浏览器或设备请求头。在 GDPR 适用时,运营者以提供安全、可靠网站服务的合法利益为依据(第 6 条第 1 款 (f) 项);运营者应记录利益衡量,并在部署账户中确认实际日志内容与保留期限。",
46
+ "下方列出的可选浏览器服务只有在访客主动选择后才加载。若相关处理涉及个人数据且以同意为法律依据,则依据第 6 条第 1 款 (a) 项处理。拒绝可选服务不会阻止访问网站基本页面。"
47
+ ]
48
+ }
49
+ ]
50
+ }
51
+ ],
52
+ [
53
+ {
54
+ "type": "section",
55
+ "title": "可选浏览器服务",
56
+ "blocks": [
57
+ {
58
+ "type": "text",
59
+ "text": "此列表根据 config.yml 中启用的服务生成,列明处理目的、数据类别、接收方、保留期限及供应商自己的隐私说明。"
60
+ },
61
+ {
62
+ "type": "privacy-services",
63
+ "emptyText": "当前没有配置可选的第三方浏览器服务。"
64
+ }
65
+ ]
66
+ }
67
+ ]
68
+ ]
69
+ },
70
+ {
71
+ "columns": 1,
72
+ "cells": [
73
+ [
74
+ {
75
+ "type": "section",
76
+ "title": "Cloudflare 网站分析",
77
+ "blocks": [
78
+ {
79
+ "type": "text",
80
+ "paragraphs": [
81
+ "访客接受后,Cloudflare 信标会报告页面浏览和浏览器性能指标。Cloudflare 公布的报告维度包括页面路径、来源页、设备、浏览器、操作系统和国家或地区。Cloudflare 表示,信标会在正常 HTTP 请求中接收来源 IP,在最近的数据中心丢弃该 IP,且不会将其保存到核心数据库或日志中;Cloudflare 也表示该信标不会使用浏览器存储。",
82
+ "Cloudflare 表示未采样信标数据保留 7 天,之后汇总为约 10% 的长期数据;仪表板可查看最近 6 个月的数据。信标可能在访客所在国家或地区以外处理。发布前,运营者应核实实际 Cloudflare 账户、套餐和适用的数据处理条款。"
83
+ ]
84
+ }
85
+ ]
86
+ }
87
+ ]
88
+ ]
89
+ },
90
+ {
91
+ "columns": 2,
92
+ "cells": [
93
+ [
94
+ {
95
+ "type": "section",
96
+ "title": "同意、保留期限与跨境传输",
97
+ "tone": "accent",
98
+ "blocks": [
99
+ {
100
+ "type": "text",
101
+ "paragraphs": [
102
+ "隐私选择保存在访客当前设备的浏览器中,并遵循所配置的期限。本网站不会将这项选择发送给运营者,也不会在服务器保存回执。访客可重新打开“隐私设置”修改或撤回选择;撤回后,页面重新载入以停止已启用的集成。若运营者依赖同意处理个人数据,必须确保能够按照 GDPR 第 7 条证明已取得同意。",
103
+ "托管和安全日志的保留期取决于部署服务商账户,本源配置没有设置该期限。Cloudflare 数据处理附录说明了受限传输的保障机制,包括标准合同条款;运营者应核实本部署适用的协议和保障措施。"
104
+ ]
105
+ },
106
+ {
107
+ "type": "privacy-consent",
108
+ "storageLabel": "保存位置",
109
+ "expiryLabel": "偏好有效期",
110
+ "proposedDateLabel": "告知拟定日期",
111
+ "effectiveDateLabel": "告知生效日期",
112
+ "expiryText": "保存后 {days} 天"
113
+ }
114
+ ]
115
+ }
116
+ ],
117
+ [
118
+ {
119
+ "type": "section",
120
+ "title": "你的权利",
121
+ "blocks": [
122
+ {
123
+ "type": "text",
124
+ "paragraphs": [
125
+ "GDPR 适用时,你可以请求访问、更正、删除或限制处理,也可以在适用条件下反对处理。满足法律条件时,你可以请求数据可携;你也可以随时撤回同意,撤回不影响撤回前基于同意进行的合法处理。",
126
+ "如需行使权利或提出问题,请使用上方的处理者联系方式。你也可以向有管辖权的数据保护监管机构投诉,包括你居住或工作的欧盟国家,或你认为发生违规的国家。",
127
+ "本网站当前未配置会产生法律影响或类似重大影响的纯自动化决策。如果此情况改变,或网站新增账户、表单等数据用途,运营者应更新本告知。"
128
+ ]
129
+ }
130
+ ]
131
+ }
132
+ ]
133
+ ]
134
+ },
135
+ {
136
+ "columns": 1,
137
+ "cells": [
138
+ [
139
+ {
140
+ "type": "section",
141
+ "title": "法律与供应商资料",
142
+ "blocks": [
143
+ {
144
+ "type": "link-list",
145
+ "title": "官方资料",
146
+ "items": [
147
+ {
148
+ "label": "欧盟《通用数据保护条例》(EUR-Lex)",
149
+ "url": "https://eur-lex.europa.eu/eli/reg/2016/679/oj/eng"
150
+ },
151
+ {
152
+ "label": "Cloudflare RUM 信标隐私说明",
153
+ "url": "https://developers.cloudflare.com/speed/observatory/rum-beacon/"
154
+ },
155
+ {
156
+ "label": "Cloudflare 网站分析保留期限与常见问题",
157
+ "url": "https://developers.cloudflare.com/web-analytics/faq/"
158
+ },
159
+ {
160
+ "label": "Cloudflare 数据处理附录",
161
+ "url": "https://www.cloudflare.com/cloudflare-customer-dpa/"
162
+ }
163
+ ]
164
+ }
165
+ ]
166
+ }
167
+ ]
168
+ ]
169
+ }
170
+ ]
171
+ }
@@ -0,0 +1,158 @@
1
+ {
2
+ "$schema": "../../../schemas/pages.schema.json",
3
+ "title": "Project introduction",
4
+ "lang": "en",
5
+ "slug": "project-introduction",
6
+ "description": "EdgePress architecture, release policy, feature maturity, and supported runtime baseline.",
7
+ "blocks": [
8
+ {
9
+ "columns": 1,
10
+ "cells": [
11
+ [
12
+ {
13
+ "type": "hero",
14
+ "eyebrow": "Project overview",
15
+ "title": "A static site builder with editable pages and Markdown articles.",
16
+ "text": "EdgePress separates content, presentation, trusted build-time plugins, and Worker request handling so each part has a clear place to change."
17
+ }
18
+ ]
19
+ ]
20
+ },
21
+ {
22
+ "columns": 1,
23
+ "cells": [
24
+ [
25
+ {
26
+ "type": "feature-grid",
27
+ "title": "Project boundaries",
28
+ "items": [
29
+ {
30
+ "title": "Pages",
31
+ "text": "Each localized page stores its metadata, ordered rows, column counts and elements in one JSON object."
32
+ },
33
+ {
34
+ "title": "Posts",
35
+ "text": "Each article is a Markdown document rendered with the built-in sanitizing pipeline."
36
+ },
37
+ {
38
+ "title": "Themes",
39
+ "text": "HTML layouts, shared partials, and hard-coded CSS palettes control site presentation."
40
+ }
41
+ ]
42
+ }
43
+ ]
44
+ ]
45
+ },
46
+ {
47
+ "columns": 1,
48
+ "cells": [
49
+ [
50
+ {
51
+ "type": "section",
52
+ "title": "Supported baseline",
53
+ "tone": "soft",
54
+ "blocks": [
55
+ {
56
+ "type": "data-table",
57
+ "title": "Runtime and capability status for this release",
58
+ "headers": [
59
+ "Area",
60
+ "Baseline",
61
+ "Status"
62
+ ],
63
+ "rows": [
64
+ [
65
+ "Build CLI",
66
+ "Node.js 22.12 or newer",
67
+ "Stable"
68
+ ],
69
+ [
70
+ "Website runtime",
71
+ "Static HTML and local browser JavaScript",
72
+ "Stable"
73
+ ],
74
+ [
75
+ "Static publishing",
76
+ "Cloudflare, Vercel, EdgeOne Pages and ESA Pages",
77
+ "Stable"
78
+ ],
79
+ [
80
+ "Website backend",
81
+ "Not required for static publishing",
82
+ "Stable"
83
+ ],
84
+ [
85
+ "Plugin API",
86
+ "Major version 1",
87
+ "Experimental"
88
+ ],
89
+ [
90
+ "Page block builder",
91
+ "Ordered rows, 1 to 4 columns, validated elements",
92
+ "Experimental"
93
+ ],
94
+ [
95
+ "Optional external services",
96
+ "config.yml consent registry and independent HTTPS endpoints",
97
+ "Experimental"
98
+ ]
99
+ ]
100
+ },
101
+ {
102
+ "type": "text",
103
+ "text": "The compatibility manifest is project-compatibility.json. The Worker compatibility date is pinned in wrangler.jsonc. Static page delivery does not require nodejs_compat."
104
+ }
105
+ ]
106
+ }
107
+ ]
108
+ ]
109
+ },
110
+ {
111
+ "columns": 1,
112
+ "cells": [
113
+ [
114
+ {
115
+ "type": "section",
116
+ "title": "Release and feature lifecycle",
117
+ "blocks": [
118
+ {
119
+ "type": "data-table",
120
+ "title": "Feature stages",
121
+ "headers": [
122
+ "Stage",
123
+ "Meaning"
124
+ ],
125
+ "rows": [
126
+ [
127
+ "Experimental",
128
+ "Usable, with configuration or behavior that may change in a minor release."
129
+ ],
130
+ [
131
+ "Stable",
132
+ "Follows semantic versioning; breaking changes require a major release."
133
+ ],
134
+ [
135
+ "Deprecated",
136
+ "Remains available for at least two minor releases and is removed in a major release, except for urgent security issues."
137
+ ],
138
+ [
139
+ "Removed",
140
+ "No longer shipped; the compatibility manifest records the removal release."
141
+ ]
142
+ ]
143
+ },
144
+ {
145
+ "type": "text",
146
+ "paragraphs": [
147
+ "Monthly releases use the year.month.request format. This release is 2026.9.10: the tenth requested release update for September 2026.",
148
+ "Ship a minor release when the monthly review is ready, and use patch releases for defects, security fixes, and dependency updates. Support the previous major release with security fixes for 12 months after a new major line begins.",
149
+ "Before a release, update project-compatibility.json and this feature matrix together. Run edgepress doctor to review the local Node.js version, Worker entry, and configured compatibility date."
150
+ ]
151
+ }
152
+ ]
153
+ }
154
+ ]
155
+ ]
156
+ }
157
+ ]
158
+ }
@@ -0,0 +1,158 @@
1
+ {
2
+ "$schema": "../../../schemas/pages.schema.json",
3
+ "title": "项目介绍",
4
+ "lang": "zh-CN",
5
+ "slug": "project-introduction",
6
+ "description": "EdgePress 的架构、发布政策、功能成熟度和支持的运行环境基线。",
7
+ "blocks": [
8
+ {
9
+ "columns": 1,
10
+ "cells": [
11
+ [
12
+ {
13
+ "type": "hero",
14
+ "eyebrow": "项目概览",
15
+ "title": "页面可编辑、文章用 Markdown 的静态网站构建器。",
16
+ "text": "EdgePress 将内容、展示、可信构建插件和 Worker 请求处理分开放置,让每个部分都有清晰的修改位置。"
17
+ }
18
+ ]
19
+ ]
20
+ },
21
+ {
22
+ "columns": 1,
23
+ "cells": [
24
+ [
25
+ {
26
+ "type": "feature-grid",
27
+ "title": "项目边界",
28
+ "items": [
29
+ {
30
+ "title": "Pages 页面",
31
+ "text": "每个本地化页面使用一个 JSON 对象保存元数据、有序行布局、栏数和元素内容。"
32
+ },
33
+ {
34
+ "title": "Posts 文章",
35
+ "text": "每篇文章都是 Markdown 文档,并由内置安全渲染流程输出。"
36
+ },
37
+ {
38
+ "title": "Themes 主题",
39
+ "text": "HTML 布局、共享局部模板和主题内硬编码的 CSS 配色负责网站展示。"
40
+ }
41
+ ]
42
+ }
43
+ ]
44
+ ]
45
+ },
46
+ {
47
+ "columns": 1,
48
+ "cells": [
49
+ [
50
+ {
51
+ "type": "section",
52
+ "title": "支持基线",
53
+ "tone": "soft",
54
+ "blocks": [
55
+ {
56
+ "type": "data-table",
57
+ "title": "本版本的运行环境与功能状态",
58
+ "headers": [
59
+ "范围",
60
+ "基线",
61
+ "状态"
62
+ ],
63
+ "rows": [
64
+ [
65
+ "构建命令行",
66
+ "Node.js 22.12 或更新版本",
67
+ "稳定"
68
+ ],
69
+ [
70
+ "网站运行环境",
71
+ "静态 HTML 与本地浏览器 JavaScript",
72
+ "稳定"
73
+ ],
74
+ [
75
+ "静态发布",
76
+ "Cloudflare、Vercel、EdgeOne Pages 和 ESA Pages",
77
+ "稳定"
78
+ ],
79
+ [
80
+ "网站后端",
81
+ "静态发布无需网站后端",
82
+ "稳定"
83
+ ],
84
+ [
85
+ "插件 API",
86
+ "主版本 1",
87
+ "实验性"
88
+ ],
89
+ [
90
+ "页面元素构建器",
91
+ "有序行、1 至 4 栏、经过验证的元素",
92
+ "实验性"
93
+ ],
94
+ [
95
+ "可选外部服务",
96
+ "config.yml consent 注册与独立 HTTPS 服务",
97
+ "实验性"
98
+ ]
99
+ ]
100
+ },
101
+ {
102
+ "type": "text",
103
+ "text": "兼容性清单位于 project-compatibility.json。Worker 兼容日期固定在 wrangler.jsonc 中。静态页面服务不需要 nodejs_compat。"
104
+ }
105
+ ]
106
+ }
107
+ ]
108
+ ]
109
+ },
110
+ {
111
+ "columns": 1,
112
+ "cells": [
113
+ [
114
+ {
115
+ "type": "section",
116
+ "title": "发布与功能生命周期",
117
+ "blocks": [
118
+ {
119
+ "type": "data-table",
120
+ "title": "功能阶段",
121
+ "headers": [
122
+ "阶段",
123
+ "含义"
124
+ ],
125
+ "rows": [
126
+ [
127
+ "实验性",
128
+ "可以使用,但配置或行为可能在次版本发布时调整。"
129
+ ],
130
+ [
131
+ "稳定",
132
+ "遵循语义化版本;破坏性变更需要主版本更新。"
133
+ ],
134
+ [
135
+ "弃用",
136
+ "通常至少保留两个次版本后再于主版本移除,紧急安全问题除外。"
137
+ ],
138
+ [
139
+ "移除",
140
+ "不再随项目发布;兼容性清单记录移除版本。"
141
+ ]
142
+ ]
143
+ },
144
+ {
145
+ "type": "text",
146
+ "paragraphs": [
147
+ "月度版本使用“年.月.请求序号”格式。本次版本为 2026.9.10,即 2026 年 9 月针对本次需求的第十次更新。",
148
+ "月度审核就绪后发布次版本;缺陷、安全修复和依赖更新使用修订版本。新主版本发布后,前一主版本继续获得 12 个月的安全修复支持。",
149
+ "发布前应同步更新 project-compatibility.json 和此功能清单。运行 edgepress doctor 可检查本机 Node.js 版本、Worker 入口和兼容日期。"
150
+ ]
151
+ }
152
+ ]
153
+ }
154
+ ]
155
+ ]
156
+ }
157
+ ]
158
+ }