@jant/core 0.3.38 → 0.3.39

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 (1177) hide show
  1. package/LICENSE +189 -189
  2. package/README.md +5 -4
  3. package/bin/commands/assets/prepare.js +55 -0
  4. package/bin/commands/db/execute-file.js +113 -0
  5. package/bin/commands/db/export.js +5 -0
  6. package/bin/commands/db/rehearse.js +65 -0
  7. package/bin/commands/deploy.js +162 -0
  8. package/bin/commands/export.js +73 -75
  9. package/bin/commands/import-site.js +1531 -267
  10. package/bin/commands/migrate.js +79 -0
  11. package/bin/commands/reset-password.js +80 -7
  12. package/bin/commands/site/export.js +415 -0
  13. package/bin/commands/site/import.js +5 -0
  14. package/bin/commands/site/localize-media.js +118 -0
  15. package/bin/commands/site/snapshot/export.js +357 -0
  16. package/bin/commands/site/snapshot/import.js +363 -0
  17. package/bin/commands/start.js +46 -0
  18. package/bin/commands/uploads/cleanup.js +119 -0
  19. package/bin/jant.js +55 -15
  20. package/bin/lib/cli-api-token.js +6 -0
  21. package/bin/lib/d1-query.js +194 -0
  22. package/bin/lib/load-node-runtime.js +10 -0
  23. package/bin/lib/migration-artifacts.js +99 -0
  24. package/bin/lib/migration-rehearsal.js +438 -0
  25. package/bin/lib/migration-runner.js +311 -0
  26. package/bin/lib/node-database.js +48 -0
  27. package/bin/lib/node-sqlite.js +158 -0
  28. package/bin/lib/public-assets.js +66 -0
  29. package/bin/lib/r2-query.js +170 -0
  30. package/bin/lib/runtime-target.js +33 -0
  31. package/bin/lib/site-localize-media.js +427 -0
  32. package/bin/lib/site-media-parser.js +1150 -0
  33. package/bin/lib/site-selection.js +222 -0
  34. package/bin/lib/site-snapshot.js +484 -0
  35. package/bin/lib/site-url.js +84 -0
  36. package/bin/lib/sql-export.js +194 -0
  37. package/bin/lib/wrangler-cli.js +41 -0
  38. package/bin/lib/wrangler-config.js +86 -0
  39. package/dist/app-BfoG98VD.js +30410 -0
  40. package/dist/client/_assets/chunks/0041f681602cc834bb5c55ced0155b8e-BNpHLJgt.woff2 +0 -0
  41. package/dist/client/_assets/chunks/008ea9091e332c639ceb18874eacd60c-CygB704Q.woff2 +0 -0
  42. package/dist/client/_assets/chunks/00c9ac960d866ffaf8a866e5939024e2-CqRrlxSi.woff2 +0 -0
  43. package/dist/client/_assets/chunks/02629e5d0a9860b7fe32ec1f0563213a-YvgSIv_V.woff2 +0 -0
  44. package/dist/client/_assets/chunks/02e48e353415a00e0f556608cab33a43-YFgu4zi3.woff2 +0 -0
  45. package/dist/client/_assets/chunks/02faf6bb0ab4d56ada037c0bbaf9b9f7-DUuUM2eo.woff2 +0 -0
  46. package/dist/client/_assets/chunks/031089da45fbfb7dc18ac827bef4c56e-D4ahCOTO.woff2 +0 -0
  47. package/dist/client/_assets/chunks/03ac785139320b7b13bac9c150bf72bf-BG7zubxs.woff2 +0 -0
  48. package/dist/client/_assets/chunks/053bd3d7aec0040d0cc50c261a1f4e3e-BdG4yI0n.woff2 +0 -0
  49. package/dist/client/_assets/chunks/057a3d44d7fc606f113d863376d0ecf0-BsEMbuKV.woff2 +0 -0
  50. package/dist/client/_assets/chunks/0713613227cc4c686c45a279f8bdc166-BzLoJcLo.woff2 +0 -0
  51. package/dist/client/_assets/chunks/0b1f83a3c7e715560a55ad9eb0fb1c94-asGrAhxW.woff2 +0 -0
  52. package/dist/client/_assets/chunks/0c055db157e7a13f3103cc2a6b67fec3-1T6huY_I.woff2 +0 -0
  53. package/dist/client/_assets/chunks/0d3f5cc265cb6c439c517f2c4cebbddf-CmkfpVHX.woff2 +0 -0
  54. package/dist/client/_assets/chunks/0e97f44ebc65384c346fe19bcc52fa20-BJTzmZzt.woff2 +0 -0
  55. package/dist/client/_assets/chunks/10f2b44b3711d3f5bdcc30d373b543d1-BRTxD_6-.woff2 +0 -0
  56. package/dist/client/_assets/chunks/1139d32ae2bdeb26c0c8f31330aa9a9f-B7k4Da0E.woff2 +0 -0
  57. package/dist/client/_assets/chunks/1259e5825b314fe2b8bb96d6e8069ee5-Ba8VoZCg.woff2 +0 -0
  58. package/dist/client/_assets/chunks/12c518ebfe62818af550c08947e359e7-B7eDp07N.woff2 +0 -0
  59. package/dist/client/_assets/chunks/145831a59caa06d894022fe60212ed21-B3xSIk4b.woff2 +0 -0
  60. package/dist/client/_assets/chunks/14b040a2dda256936bc7b3470e548394-CF7zgNWs.woff2 +0 -0
  61. package/dist/client/_assets/chunks/14c1506106d92621bafb11016735194e-cbk_paoP.woff2 +0 -0
  62. package/dist/client/_assets/chunks/154a2c266902003bd8b7449386b10776-CYgd0apt.woff2 +0 -0
  63. package/dist/client/_assets/chunks/15f8c0df47fd639d1b0d9bd5cf507c9b-B11bYwtn.woff2 +0 -0
  64. package/dist/client/_assets/chunks/1668bd859ffe15bed7d5563117d8d5fb-DJotYU-j.woff2 +0 -0
  65. package/dist/client/_assets/chunks/169a096e61d38a773216f51d1ec2cc06-CzS4CZjy.woff2 +0 -0
  66. package/dist/client/_assets/chunks/1884a2b22d314c7d57707f03aec348e0-BdBJ4_JO.woff2 +0 -0
  67. package/dist/client/_assets/chunks/189f272ea2600c74d576b7b15c014922-CylwUmhO.woff2 +0 -0
  68. package/dist/client/_assets/chunks/190e3f8632494e7c095117f26b1c811e-DT09KhZe.woff2 +0 -0
  69. package/dist/client/_assets/chunks/19ad151c22ce1befe0a9ea643fbee570-BOjbPzxL.woff2 +0 -0
  70. package/dist/client/_assets/chunks/19e39850472250bfdbce654d30859879-Db8MVQ-5.woff2 +0 -0
  71. package/dist/client/_assets/chunks/1b5d0d740450fb996749464c9b882025-BG0yepI2.woff2 +0 -0
  72. package/dist/client/_assets/chunks/1bca0a2a8840ad0ee9414940593db144-CfiRZ0Fs.woff2 +0 -0
  73. package/dist/client/_assets/chunks/1c820b5295868008ca7c78afa5b7655d-rGkaVY0Z.woff2 +0 -0
  74. package/dist/client/_assets/chunks/1cda27dcaab977ae4ef5d5ab2a10ae03-3n1CbajX.woff2 +0 -0
  75. package/dist/client/_assets/chunks/1e2640116bbba817f43c43cc69371cf1-BLnekPNy.woff2 +0 -0
  76. package/dist/client/_assets/chunks/1f4bc38a1c50f55f335f5411cae47696-3J1JFXeu.woff2 +0 -0
  77. package/dist/client/_assets/chunks/1fbccc182322b513f57cd156a9a491b0-bRVH28a5.woff2 +0 -0
  78. package/dist/client/_assets/chunks/1fbe225742c69f4ba9ea5f74922f0ca1-BHRIiKDB.woff2 +0 -0
  79. package/dist/client/_assets/chunks/2022cf097cb952d9fe75b53b4587d2c3-Btdq5ZEB.woff2 +0 -0
  80. package/dist/client/_assets/chunks/21e0a71d86be7b8a9e812e7af09dd061-SSZaQU5Z.woff2 +0 -0
  81. package/dist/client/_assets/chunks/2240a3c43ca5ef59ae3c348c7884792f-DQgT8QLe.woff2 +0 -0
  82. package/dist/client/_assets/chunks/2573703213da30d3ba18925b100b2c2b-D61uHyrJ.woff2 +0 -0
  83. package/dist/client/_assets/chunks/265e048cc9f2f8a711ba585a534d5351-geHDzSNf.woff2 +0 -0
  84. package/dist/client/_assets/chunks/26839c0e47c73514b8d8f660d24d6b19-D2gmzZl-.woff2 +0 -0
  85. package/dist/client/_assets/chunks/280e3d2b58e9ad3501816072e01b0c13-Dx5yDwjz.woff2 +0 -0
  86. package/dist/client/_assets/chunks/2874d07e228da9583b0e73646dacd498-26mUURU-.woff2 +0 -0
  87. package/dist/client/_assets/chunks/29d49891713a2785a3a383001cf58c59-DVb6JpZh.woff2 +0 -0
  88. package/dist/client/_assets/chunks/2a22e14a9ad53f2abb3c7e85017b7d12-CU_4APNf.woff2 +0 -0
  89. package/dist/client/_assets/chunks/2a7cedfcd6e4c7cec36f4fd7b0f329c2-BUp7BYdq.woff2 +0 -0
  90. package/dist/client/_assets/chunks/2acea04a920f6af31e7db97052f563c6-KdL2n7-Y.woff2 +0 -0
  91. package/dist/client/_assets/chunks/2ae2ca951489c9d50cde5b36a2a5515b-CWV12jwD.woff2 +0 -0
  92. package/dist/client/_assets/chunks/2b3e8c5703b91f39f6027f43f0da6f4b-FHYDvFqX.woff2 +0 -0
  93. package/dist/client/_assets/chunks/2ba802b14f21a58fc61606c88fa93373-BmrW6szo.woff2 +0 -0
  94. package/dist/client/_assets/chunks/2d81eb6ab0ebbc0cabfb3a3341ba8800-Ds2YcMj0.woff2 +0 -0
  95. package/dist/client/_assets/chunks/2deb444546774c3a3ab38c75eb69cdfb-Dm9USQXk.woff2 +0 -0
  96. package/dist/client/_assets/chunks/2e98b666924b8e0a09d1aeeefd24bdd2-Cmh3DrKG.woff2 +0 -0
  97. package/dist/client/_assets/chunks/2f27ee4fb2cf6a280e110e09c18ef73e-D_yYWYMZ.woff2 +0 -0
  98. package/dist/client/_assets/chunks/2fbccf9a3853eb59db1a825e044515fd-CiShE3Wo.woff2 +0 -0
  99. package/dist/client/_assets/chunks/2fd3fceb6faed5e3db768e88d7614dca-D74stxc-.woff2 +0 -0
  100. package/dist/client/_assets/chunks/2ff009fa8701505d7f3dc6c83763f019-nkOuUfA-.woff2 +0 -0
  101. package/dist/client/_assets/chunks/31342cebfa5ea7fac06b4ea372d96bc5-DdIH_TkU.woff2 +0 -0
  102. package/dist/client/_assets/chunks/31424fe5d54692e7c8b38021ccb8597c-CfNu45zJ.woff2 +0 -0
  103. package/dist/client/_assets/chunks/3179006d1c7ebfa50d27482a2859d9a0-e7PNUH9y.woff2 +0 -0
  104. package/dist/client/_assets/chunks/34c2edb3c37f71258f5c4a31091f0c6c-Cyr8VjPf.woff2 +0 -0
  105. package/dist/client/_assets/chunks/35cf5dd04315e0b906e1a413d7905a2f-A-QPUrVX.woff2 +0 -0
  106. package/dist/client/_assets/chunks/360c190344c26278bbc50e2f4d6a2b3f-B7OhzvgR.woff2 +0 -0
  107. package/dist/client/_assets/chunks/375329ba0b50b94b35006498e555867c-CDc5XB7_.woff2 +0 -0
  108. package/dist/client/_assets/chunks/387c811226f303af62f1e21aae6f5c83-BmPYUAdb.woff2 +0 -0
  109. package/dist/client/_assets/chunks/389a950f2a1211946d294716e679e381-Diuxk8JN.woff2 +0 -0
  110. package/dist/client/_assets/chunks/39b0bbc910af9d2d6dcd8bd4abd6387d-NhvZf71d.woff2 +0 -0
  111. package/dist/client/_assets/chunks/3adc8f6350cf5067bcb6dc5e44c45d41-DIO3oy0b.woff2 +0 -0
  112. package/dist/client/_assets/chunks/3b41385fc27419c19822060daa0b5cb3-Dh5JVnsu.woff2 +0 -0
  113. package/dist/client/_assets/chunks/3bed5bd57de8f738e53cddaea88983d9-BAGVbLtM.woff2 +0 -0
  114. package/dist/client/_assets/chunks/3c201fd8d1bb20abe7d06b940e83a4d9-Bz0dCLvM.woff2 +0 -0
  115. package/dist/client/_assets/chunks/3cbe4a697fd595ef42c899de7d3e5445-zWwFRRI_.woff2 +0 -0
  116. package/dist/client/_assets/chunks/3d385ea0880df7204258e290648ec012-BQqoFH8R.woff2 +0 -0
  117. package/dist/client/_assets/chunks/3d83dacbbec3d8532ae9afede21f3aab-BH06SEJj.woff2 +0 -0
  118. package/dist/client/_assets/chunks/3dc1a4f0d7af59e16b5162a2b077a442-CkXZW3CY.woff2 +0 -0
  119. package/dist/client/_assets/chunks/3dc68e473fe23bd076dd46785cd23583-Cv6HZ0Dr.woff2 +0 -0
  120. package/dist/client/_assets/chunks/427577dcb707d1d35eebd155b4222aa7-D7-mHA6o.woff2 +0 -0
  121. package/dist/client/_assets/chunks/42a74b6a625bbf0a9616ed4db3152c88-CQ58KTMS.woff2 +0 -0
  122. package/dist/client/_assets/chunks/435b7dca567809813fcb395a27ed83a0-C6E3YXBr.woff2 +0 -0
  123. package/dist/client/_assets/chunks/43693195e775d515689fa035394067fd-DLMrklI6.woff2 +0 -0
  124. package/dist/client/_assets/chunks/43fb49e5b79ee7e553869d84e6e08b1e-BgOVrd59.woff2 +0 -0
  125. package/dist/client/_assets/chunks/44dcbbc3cc8f22e613b342d691511ab6-dRyYwGGi.woff2 +0 -0
  126. package/dist/client/_assets/chunks/450a5b53be0a8a778bb0b623e86b652f-qwII2gXW.woff2 +0 -0
  127. package/dist/client/_assets/chunks/457485e72835364662dfead6281638c1-Mv279UyL.woff2 +0 -0
  128. package/dist/client/_assets/chunks/47479c470fae70f10b7c964a7ecbf274-D9VNBclD.woff2 +0 -0
  129. package/dist/client/_assets/chunks/474fac21b12b7efd71f7c321578878b0-BJRz_Yd3.woff2 +0 -0
  130. package/dist/client/_assets/chunks/477866c8396474a17317dcac3e7a014f-e90LWIFy.woff2 +0 -0
  131. package/dist/client/_assets/chunks/478ebdaadda7775c391c5dcab4e697df-RfXJJ1gl.woff2 +0 -0
  132. package/dist/client/_assets/chunks/488846410760fe128dae939836ca5423-D0YbXQOX.woff2 +0 -0
  133. package/dist/client/_assets/chunks/48d6a97a185c799be4fe67aaf7edf213-CqLkiJik.woff2 +0 -0
  134. package/dist/client/_assets/chunks/48eb0a91e50c7f026e248c64145e72af-D8LB2Dye.woff2 +0 -0
  135. package/dist/client/_assets/chunks/490edb9fc8a4356aea556eed32287464-Bxk-XtyT.woff2 +0 -0
  136. package/dist/client/_assets/chunks/4a23fe6e82fd496b5eb20401b6164efe-CfhsfLd6.woff2 +0 -0
  137. package/dist/client/_assets/chunks/4b0e79ba18b2ce424fa93e84996d7cba-B0dS4UvF.woff2 +0 -0
  138. package/dist/client/_assets/chunks/4bc743968cf1c3ce5711de67ef1ccc4d-Dmn20LlT.woff2 +0 -0
  139. package/dist/client/_assets/chunks/4c4bdd0b3f3a52e28f3b643c1c5d43be-BLqyuzyK.woff2 +0 -0
  140. package/dist/client/_assets/chunks/4c96411f3693a9a8657a9c1190f82bce-BhP7AS2j.woff2 +0 -0
  141. package/dist/client/_assets/chunks/4c9aa12aba2a6a57410eacaff7427916-CLDZgzM7.woff2 +0 -0
  142. package/dist/client/_assets/chunks/4cca7233bf8ce5dec2e5d146b993d626-Bf7OgJe6.woff2 +0 -0
  143. package/dist/client/_assets/chunks/4cf0f292f3358bd2f73b1cf4ec1476f3-CIfjw85D.woff2 +0 -0
  144. package/dist/client/_assets/chunks/4d0a9128d06ea857f203bf5d007b1ab9-BZ-BuqS9.woff2 +0 -0
  145. package/dist/client/_assets/chunks/4dc0728df0f2ba70796f45f05654c7ba-DGd3NDaT.woff2 +0 -0
  146. package/dist/client/_assets/chunks/4dc2bc2c55b47f57d13b63aa6b1c8bd4-g3WbclK2.woff2 +0 -0
  147. package/dist/client/_assets/chunks/4e1cc6aafb411b572c8d3511e925ecf1-BUf15jYj.woff2 +0 -0
  148. package/dist/client/_assets/chunks/4e5384920bbb155d9d8d74887b09ea5b-2KLteQXT.woff2 +0 -0
  149. package/dist/client/_assets/chunks/501f66f24bce8234441954de1b568403-CIe4N6pO.woff2 +0 -0
  150. package/dist/client/_assets/chunks/50cfd672bfa62512ba090420acf35c87-CibXrwCT.woff2 +0 -0
  151. package/dist/client/_assets/chunks/5227dbe9933760a48baff21ebd13fc98-v8CBITMX.woff2 +0 -0
  152. package/dist/client/_assets/chunks/526b263e72c189f4b065738aaa6d423a-Dj5Ns6Ev.woff2 +0 -0
  153. package/dist/client/_assets/chunks/53a88404451448cd2e620a0ca0e45a20-CI0P5NCv.woff2 +0 -0
  154. package/dist/client/_assets/chunks/54da934819a917f561b439bfd10f88b6-CpoNRhz7.woff2 +0 -0
  155. package/dist/client/_assets/chunks/54e301f412730f391225db59dae1c8d5-CxTAz9F1.woff2 +0 -0
  156. package/dist/client/_assets/chunks/551b1d7a0b80c8d42af09863cdca7f01-BIGKH8GS.woff2 +0 -0
  157. package/dist/client/_assets/chunks/555d990ab3fd7d3d66c6d1fa9a82fec5-BndAe6f2.woff2 +0 -0
  158. package/dist/client/_assets/chunks/557cd00c5d6827e13d72a0c71b23587b-C6gpr-g-.woff2 +0 -0
  159. package/dist/client/_assets/chunks/563fa31542d553f25abab65cf7f81e1d-Cl_1me5X.woff2 +0 -0
  160. package/dist/client/_assets/chunks/56e1c4734bbbb38af2fbc262bf6e98f2-DZ32amUx.woff2 +0 -0
  161. package/dist/client/_assets/chunks/5947f5da5da9a352a2b534ee64bfc29a-DT0Fj-SL.woff2 +0 -0
  162. package/dist/client/_assets/chunks/5979c33a7eb5963bf8e83e46931b5fb5--4f9yv1z.woff2 +0 -0
  163. package/dist/client/_assets/chunks/597d69d0710e0178b162afb0a0c20401-CpThXFdo.woff2 +0 -0
  164. package/dist/client/_assets/chunks/59966ee0b069b577510fe68c350da0ee-Bs_HDvyP.woff2 +0 -0
  165. package/dist/client/_assets/chunks/5a10741e41259e235841440394c0763d-uCZGOg0A.woff2 +0 -0
  166. package/dist/client/_assets/chunks/5bfc7a121c35ae42623ef804fb525e0e-mS7vyFFz.woff2 +0 -0
  167. package/dist/client/_assets/chunks/5cc23a76e122d0ad2f7cede41bc35b27-4T1ZVQJu.woff2 +0 -0
  168. package/dist/client/_assets/chunks/5d48855bed5f3554eff91b573d7376ac-CPzsdNDF.woff2 +0 -0
  169. package/dist/client/_assets/chunks/5ddcbe564b29ef08632e1aeb33455435-CQzDKa-z.woff2 +0 -0
  170. package/dist/client/_assets/chunks/5f90024544c2907c6c0203c6210c50be-C_1uxIky.woff2 +0 -0
  171. package/dist/client/_assets/chunks/605667a998e91e2b6a4a3cd7c31fe5a9-Co2lOjER.woff2 +0 -0
  172. package/dist/client/_assets/chunks/60a14064ed334f0155795d795e926abe-C2HuVyw5.woff2 +0 -0
  173. package/dist/client/_assets/chunks/60d8b0805a0a8c54a6cca216004beff5-CV1GX5br.woff2 +0 -0
  174. package/dist/client/_assets/chunks/611b62d5fd9698d9b5ce495ba6f14c93-CPi2xRKF.woff2 +0 -0
  175. package/dist/client/_assets/chunks/61bf4287453da4025d03fa6b2dba66ca-CMh4XzzB.woff2 +0 -0
  176. package/dist/client/_assets/chunks/638369541268ed5a10af97ad77498c73-DrpvGu-L.woff2 +0 -0
  177. package/dist/client/_assets/chunks/649b12d7cee7bb981842946e4547e6ca-EACt8KkC.woff2 +0 -0
  178. package/dist/client/_assets/chunks/653bef2ed891ae48d8ed712283080649-C3d1ZTAc.woff2 +0 -0
  179. package/dist/client/_assets/chunks/67d2a81f06ba352f17fbdc3a5e6ea59e-DC8Iostn.woff2 +0 -0
  180. package/dist/client/_assets/chunks/67f32ceea9e78e5109f87724ad886010-C_3-9sSn.woff2 +0 -0
  181. package/dist/client/_assets/chunks/68304f3229cf763465f044fccb5892c0-CTvPlN8c.woff2 +0 -0
  182. package/dist/client/_assets/chunks/687d0f0f90a9b23e40102e16ad8e9836-Bzlx1W-7.woff2 +0 -0
  183. package/dist/client/_assets/chunks/688a88911e4da17b609196a959b8b930-BgwP4zIQ.woff2 +0 -0
  184. package/dist/client/_assets/chunks/68f2fab82ec8e9291f08c3145111549c-CXqagiiH.woff2 +0 -0
  185. package/dist/client/_assets/chunks/69519ada3f3f74ca20aacb8af48ab6b4-DncDOElk.woff2 +0 -0
  186. package/dist/client/_assets/chunks/6a6e884fb2b65ec5b4a3d5ecd0d01a6a-DBNJo4jq.woff2 +0 -0
  187. package/dist/client/_assets/chunks/6db6ddf72c38a78ce44c1327701152e1-CFUWMaQQ.woff2 +0 -0
  188. package/dist/client/_assets/chunks/6e1a8b45b01939088c3a8cfcf8c10681-BemqZSaI.woff2 +0 -0
  189. package/dist/client/_assets/chunks/6e2164fad867d166de2e5b274f04a563-_YD_QMym.woff2 +0 -0
  190. package/dist/client/_assets/chunks/6e83fe0b6e708eaf1c3003d6dee11488-CRqY8z2g.woff2 +0 -0
  191. package/dist/client/_assets/chunks/6eefc9d430171c1e1e4034ecadee31c8-d3VCnQ01.woff2 +0 -0
  192. package/dist/client/_assets/chunks/70861376e5d4f92f8aa7aa1b2749b617-BqwxmSo2.woff2 +0 -0
  193. package/dist/client/_assets/chunks/70adaf50c56d5ff859c64d35e0f1e34e-BCmTRExx.woff2 +0 -0
  194. package/dist/client/_assets/chunks/7124d150570d39ced8d45507dc11ca1e-Co_mUkqP.woff2 +0 -0
  195. package/dist/client/_assets/chunks/71eafb8fbe3a734283517e230ad8b6db-CFmZ-qAS.woff2 +0 -0
  196. package/dist/client/_assets/chunks/72ee453ac0e19bd2c631c8921c44e3de-CEidyyfI.woff2 +0 -0
  197. package/dist/client/_assets/chunks/751f54dbb115140d5b645a6ba4aff5d3-DY-S96zI.woff2 +0 -0
  198. package/dist/client/_assets/chunks/753b5f6fb254bacb6618ace25af3df60-uBG6c32o.woff2 +0 -0
  199. package/dist/client/_assets/chunks/7609e7e74dd4d916a7abc7ecc7d95f7e-CzrNhght.woff2 +0 -0
  200. package/dist/client/_assets/chunks/76b9d6fe838ae4151d95ce7200aa2bf6-BfQWDykU.woff2 +0 -0
  201. package/dist/client/_assets/chunks/76d4244186d118eea245d1385a4de2ec-CEoql1pw.woff2 +0 -0
  202. package/dist/client/_assets/chunks/77a7533bd21ccd33192d142a93555aa8-BzSb8ker.woff2 +0 -0
  203. package/dist/client/_assets/chunks/78ce29fed872e44fc9014d94875d2aac-D1BDuJXp.woff2 +0 -0
  204. package/dist/client/_assets/chunks/79a7fdf7d9c722b5723ae25e6ff8e203-5rPAnIr7.woff2 +0 -0
  205. package/dist/client/_assets/chunks/79a85a253e9b3f12d2e2cb15e16b3003-DTjWGv2X.woff2 +0 -0
  206. package/dist/client/_assets/chunks/7a86b155111ba20f3e87306ff6beac77-DchSNxJ1.woff2 +0 -0
  207. package/dist/client/_assets/chunks/7b1e76975b0984e6f83e3f9f8069e784-OB_rGzsR.woff2 +0 -0
  208. package/dist/client/_assets/chunks/7b6c60131822a0e4d36d980d52509d4e-8dQVuUiW.woff2 +0 -0
  209. package/dist/client/_assets/chunks/7caa14a095a6bc313aab780fe4ff7999-BJ-80Ois.woff2 +0 -0
  210. package/dist/client/_assets/chunks/7cbda564cb2dd4799ab9e89d51286aa7-MlT7YRSz.woff2 +0 -0
  211. package/dist/client/_assets/chunks/7d138084cf03c14116b11297fce0e3e3-CdWCcyam.woff2 +0 -0
  212. package/dist/client/_assets/chunks/7d65a3d6a65050eb5e6eca43398aeba4-CYB359u-.woff2 +0 -0
  213. package/dist/client/_assets/chunks/7dfc711962c8771f97e7c8898a6bcb65-Yv69yrg4.woff2 +0 -0
  214. package/dist/client/_assets/chunks/7ef123b62d530fcba73974fa265e0aae-CD7IMlBc.woff2 +0 -0
  215. package/dist/client/_assets/chunks/7f60eefa15956d6f06dd92404887d58c-LqioDjlc.woff2 +0 -0
  216. package/dist/client/_assets/chunks/7f8c15e0ecb102738981d9fa4cb6b921-8qiw7Fmn.woff2 +0 -0
  217. package/dist/client/_assets/chunks/80466082a896fd328f30a78593c7c568-BMAVDyAy.woff2 +0 -0
  218. package/dist/client/_assets/chunks/812b5a4b87f3a7b4afc1cfebc864f413-B4_mWnLK.woff2 +0 -0
  219. package/dist/client/_assets/chunks/812dfb7f8144d01b3cc9d5ce0b472f40-DxhfKDhh.woff2 +0 -0
  220. package/dist/client/_assets/chunks/84742b1ede4f0bb6d27131298eba21b4-4_QYQ-wj.woff2 +0 -0
  221. package/dist/client/_assets/chunks/8555f0285e3d28e95e2fc0ccccd9caff-CEnfoaRy.woff2 +0 -0
  222. package/dist/client/_assets/chunks/880162ae92cd9e120eb4e4e11fae459d-Cj61LKOn.woff2 +0 -0
  223. package/dist/client/_assets/chunks/8a3c84b0df36f851f5fea75ee8757951-CfHrA-x8.woff2 +0 -0
  224. package/dist/client/_assets/chunks/8b0c8c9f8cfa9fa090d97c5a5efb1f4c-DZc3EGF4.woff2 +0 -0
  225. package/dist/client/_assets/chunks/8c8393bc875f1ee36697a2113f4421ea-CnBugeCf.woff2 +0 -0
  226. package/dist/client/_assets/chunks/8dc035a34c76e6515ca203e2df182588-B1reQPCB.woff2 +0 -0
  227. package/dist/client/_assets/chunks/8e04e64c8f68d292a18d4160fbde8671-DkT7v-sd.woff2 +0 -0
  228. package/dist/client/_assets/chunks/8e6c9bb43afb8cbbff7cf1055e67c9bd-c7wzPI7v.woff2 +0 -0
  229. package/dist/client/_assets/chunks/8eb06109812cb80be44f47b8179c2709-DOaU0xD8.woff2 +0 -0
  230. package/dist/client/_assets/chunks/8f2b960c2823670e94f5b08aa65657e6-CHT-Gunr.woff2 +0 -0
  231. package/dist/client/_assets/chunks/8f89f57230d184f92a36e241874229d7-D6P0FMCn.woff2 +0 -0
  232. package/dist/client/_assets/chunks/904324af375d5fd370af1054355a050e-CHiXmgO7.woff2 +0 -0
  233. package/dist/client/_assets/chunks/90ac4f9d2aa02afdace2843b49fc18bb-CWArmWzF.woff2 +0 -0
  234. package/dist/client/_assets/chunks/90b6f57d77847f512fd11db74fa912f1-DzYbq8hW.woff2 +0 -0
  235. package/dist/client/_assets/chunks/911a2092d64d6d6494b254d819af2b91-C0xmZ-Cu.woff2 +0 -0
  236. package/dist/client/_assets/chunks/913759e6690f9fc0746a20b96f4bdcb4-B0k9hqx0.woff2 +0 -0
  237. package/dist/client/_assets/chunks/9154e26efe532a85a27d80902f5a2d6c-DJQmzPmB.woff2 +0 -0
  238. package/dist/client/_assets/chunks/9180de34b48b325200a97e267befff32-ClJx20hD.woff2 +0 -0
  239. package/dist/client/_assets/chunks/94e7ed67f1557b76fead6b6e456a0415-CjAhhvRn.woff2 +0 -0
  240. package/dist/client/_assets/chunks/95127a92346c04fec1fa81d6295b0a28-DNbeXPGm.woff2 +0 -0
  241. package/dist/client/_assets/chunks/958efb9b2fa2ea0008ffef009885f9f8-CNOwBDS1.woff2 +0 -0
  242. package/dist/client/_assets/chunks/95df3b9f681d9df411c30aea5b24f2e0-Dv7GHFVj.woff2 +0 -0
  243. package/dist/client/_assets/chunks/975af5a496e8d87d821910aa9fe4d598-CG5KDMOI.woff2 +0 -0
  244. package/dist/client/_assets/chunks/97a874bbf55ce89a4ab7cd27c7e938b1-fhost-bL.woff2 +0 -0
  245. package/dist/client/_assets/chunks/9ca9b71010a5faeee7047ef97aeee13b-K6NP7P3o.woff2 +0 -0
  246. package/dist/client/_assets/chunks/9cd0b77920b9d6c64eb686493123fc76-Db6wX5BE.woff2 +0 -0
  247. package/dist/client/_assets/chunks/9de02d745b8e25c6411fb152fb067748-CGxZtq8G.woff2 +0 -0
  248. package/dist/client/_assets/chunks/9eb33a430058d839ebbe2af4b2e0daa9-Cjd-WSds.woff2 +0 -0
  249. package/dist/client/_assets/chunks/9ebd27835ffcbd794e67151ab046ce68-DmxtZVr5.woff2 +0 -0
  250. package/dist/client/_assets/chunks/9f5a73aa8ba417688019d628f334db07-P03uxox_.woff2 +0 -0
  251. package/dist/client/_assets/chunks/9fbc06b2e3ff16b9d705c76db563ef17-XDHSv5Te.woff2 +0 -0
  252. package/dist/client/_assets/chunks/9fd53607094e329fa8e5c785b3ff0f1a-B-9qgOdM.woff2 +0 -0
  253. package/dist/client/_assets/chunks/a077f51cfb5cffb4ff4d8e229c0e9e79-BaPgyZ5H.woff2 +0 -0
  254. package/dist/client/_assets/chunks/a0f0c06d5c7a3ffa97706178cce212a8-DN_NE4Ic.woff2 +0 -0
  255. package/dist/client/_assets/chunks/a38c1830367f784181b6f544b0b11bbd-BmPGDXn1.woff2 +0 -0
  256. package/dist/client/_assets/chunks/a397997b579d3945c9c70a979c17a8ad-DXa54wGz.woff2 +0 -0
  257. package/dist/client/_assets/chunks/a3b929542e6c5a0644b73a7c8a8b6c03-B5i2p-Hj.woff2 +0 -0
  258. package/dist/client/_assets/chunks/a578742770fcd2226e3c45b5b6efdcb0-C1QhQdHg.woff2 +0 -0
  259. package/dist/client/_assets/chunks/a68d9d5027803832bb28e78cdcd04949-D_bwWhwg.woff2 +0 -0
  260. package/dist/client/_assets/chunks/a8857f5d478f101c053ba02d2f223e90-CHOaRPpq.woff2 +0 -0
  261. package/dist/client/_assets/chunks/a904b05966368bcf90b632c7c2e5f76b-BbTXYQVh.woff2 +0 -0
  262. package/dist/client/_assets/chunks/a9cf85e27428c14351d30eac8cbc8d91-DMaVc3-8.woff2 +0 -0
  263. package/dist/client/_assets/chunks/aa0ce6740f301351761a0615cc8b2e99-4RL3pitV.woff2 +0 -0
  264. package/dist/client/_assets/chunks/aa218a2c45f3749537ce876201e5152b-DndHqA-p.woff2 +0 -0
  265. package/dist/client/_assets/chunks/aa28db16818f9eaa8c817f289e1c3270-Drm1Jwhe.woff2 +0 -0
  266. package/dist/client/_assets/chunks/aa64c9953af43ca65832f413895bb433-CR32RteD.woff2 +0 -0
  267. package/dist/client/_assets/chunks/aa96d698491c2540e2dcf7009c65c456-BXlPVR0v.woff2 +0 -0
  268. package/dist/client/_assets/chunks/ada8f0241244c60ec8d3d59ad37f20a5-BFQsznEm.woff2 +0 -0
  269. package/dist/client/_assets/chunks/ae25c41034ddc1a9e0b41f5034c9aa4b-COQJkHOc.woff2 +0 -0
  270. package/dist/client/_assets/chunks/ae289ae3f8cdb54a3a6c07174517afec-DFGIoTY6.woff2 +0 -0
  271. package/dist/client/_assets/chunks/ae401fb4db80d5ff5cd3f8d9bc811070-Byt9AwoT.woff2 +0 -0
  272. package/dist/client/_assets/chunks/b02dfa2aa52cbdb1b2f11a9f44335469-DVWsuPSL.woff2 +0 -0
  273. package/dist/client/_assets/chunks/b0ab3a7f319ce6dd3c9a4de2674e7c72-CksmA6Hr.woff2 +0 -0
  274. package/dist/client/_assets/chunks/b159deb135e9946eea0572d52778170b-BZrtOTn0.woff2 +0 -0
  275. package/dist/client/_assets/chunks/b2e326f7f9b807451bf9c745df747efe-BvlONCPB.woff2 +0 -0
  276. package/dist/client/_assets/chunks/b341de0bc0bfe194a6c28dcfb566029e-DJAj3r6U.woff2 +0 -0
  277. package/dist/client/_assets/chunks/b846c293981ca5429eabaa967f222f26-GS-TAaO6.woff2 +0 -0
  278. package/dist/client/_assets/chunks/b91450304d9ac44f5c6e0da0792e055d-vS0S7kl0.woff2 +0 -0
  279. package/dist/client/_assets/chunks/baa325551b381c5e035ef143e56d4abe-DJg3GhKJ.woff2 +0 -0
  280. package/dist/client/_assets/chunks/bc3f0cb8b55ee11d32b94ca488976f8d-Dp5KZMSD.woff2 +0 -0
  281. package/dist/client/_assets/chunks/bcb3307527d6d0033bf0f17660b91e71-BMgRW_eW.woff2 +0 -0
  282. package/dist/client/_assets/chunks/be64f9379412876e00fd3a0bfa6b6fe9-BJ3FMWFM.woff2 +0 -0
  283. package/dist/client/_assets/chunks/befed8a4fa817773fa7109db6fe07f56-3sAmDsOO.woff2 +0 -0
  284. package/dist/client/_assets/chunks/bf1acc86e17b4229c548828a9d6f455d-JNuPCGDM.woff2 +0 -0
  285. package/dist/client/_assets/chunks/c09ee2b219982f8d46ad9968b7e6e0ba-qVb8yJHb.woff2 +0 -0
  286. package/dist/client/_assets/chunks/c0c7836749e585cee24ab2f8457c5b01-Ds0003oT.woff2 +0 -0
  287. package/dist/client/_assets/chunks/c2ac4ef1860812036ca2b8c4e4089bdc-DsziO8Du.woff2 +0 -0
  288. package/dist/client/_assets/chunks/c31019c08bd22464f7a88f090281404c-CUC0jMW1.woff2 +0 -0
  289. package/dist/client/_assets/chunks/c33c59feccf391f0c5f1f5d24e36d1fe-BXTVggad.woff2 +0 -0
  290. package/dist/client/_assets/chunks/c39ec937c6a8d124e8b68cf829ea5ad4-CarrkdmQ.woff2 +0 -0
  291. package/dist/client/_assets/chunks/c3fbc1f2557c343863a10698f8c966a2-BiOC1yo2.woff2 +0 -0
  292. package/dist/client/_assets/chunks/c3fd21315345ae541f6e98067059fa19-rHtO7vK5.woff2 +0 -0
  293. package/dist/client/_assets/chunks/c568a16e3168ceb1f191b70022c492ea-BpAiyU80.woff2 +0 -0
  294. package/dist/client/_assets/chunks/c57ee3b49b7e45b995539a6b2c51f138-IHDXeVRU.woff2 +0 -0
  295. package/dist/client/_assets/chunks/c5c1c0be944ea39a3f50a02d32f5b759-DAwbrvTL.woff2 +0 -0
  296. package/dist/client/_assets/chunks/c5e66d60be3375835bbd8d6b797f6eac-DWp4tpvN.woff2 +0 -0
  297. package/dist/client/_assets/chunks/c5f1075caf6d1344ee720de85114a521-DTTbeLhd.woff2 +0 -0
  298. package/dist/client/_assets/chunks/c82fd9456d7465b5e5bd3659e9b14c55-Cs6h6hE6.woff2 +0 -0
  299. package/dist/client/_assets/chunks/c90b7b65d2b9696fbf3a506738f94d68-DsvgiuQQ.woff2 +0 -0
  300. package/dist/client/_assets/chunks/cae29b3f8951eaf20d2f61c2206e28d9-CoHXmhmG.woff2 +0 -0
  301. package/dist/client/_assets/chunks/cba6ad3981cb7861428d4be169ee8124-CBdFsPAF.woff2 +0 -0
  302. package/dist/client/_assets/chunks/cc26525aa2af1f0b929af32ce50a7fba-D55LVtW9.woff2 +0 -0
  303. package/dist/client/_assets/chunks/cd0e7b51eddb22a77a09b025c0281434-ByI_TSTq.woff2 +0 -0
  304. package/dist/client/_assets/chunks/cd10a3af2133805d8c92104d1ee6ff18-Dtr5mBXe.woff2 +0 -0
  305. package/dist/client/_assets/chunks/cd6d074f3957d58bac58437fc97e5e33-CrVZuSbw.woff2 +0 -0
  306. package/dist/client/_assets/chunks/cd75ca47da9ae4c0899e37d4c543319b-DXU1s4Ja.woff2 +0 -0
  307. package/dist/client/_assets/chunks/cef249b6d013fb0cc0d574176bc23811-BL7WfNHA.woff2 +0 -0
  308. package/dist/client/_assets/chunks/d043b8d7a48bb0ac59ee1f1477d88eee-d5CwY2I8.woff2 +0 -0
  309. package/dist/client/_assets/chunks/d0bd387fda28e58d3c9b3efa2468dd8a-CjDFowFS.woff2 +0 -0
  310. package/dist/client/_assets/chunks/d12ce1d8445213317f9163283e58a05d-4RtGQnak.woff2 +0 -0
  311. package/dist/client/_assets/chunks/d15a3317942b7d31978a759fbf2222c8-DQ9QFQdS.woff2 +0 -0
  312. package/dist/client/_assets/chunks/d28fb13acf9ced9f0657fd4012c81cd2-D8Bgk6sd.woff2 +0 -0
  313. package/dist/client/_assets/chunks/d320b000b5978c7251148a6a154741b8-CcGZjeFx.woff2 +0 -0
  314. package/dist/client/_assets/chunks/d3714e6b90de8e2085dfb2514464dd6a-8LsVAcmb.woff2 +0 -0
  315. package/dist/client/_assets/chunks/d3beff96216c8af1aa79246476b6a323-hQysoMK3.woff2 +0 -0
  316. package/dist/client/_assets/chunks/d3e311f30c811dc339c262a79a51877e-CkUTbS74.woff2 +0 -0
  317. package/dist/client/_assets/chunks/d51f4cdc83711e510f5d25f03235597e-BY3VAGvr.woff2 +0 -0
  318. package/dist/client/_assets/chunks/d5df4a8dfd4328c67d933b3912c6ad0f-A2fccswC.woff2 +0 -0
  319. package/dist/client/_assets/chunks/d740dc2e854aaa7b3dcdd3ed25455eeb-Cw8LrB06.woff2 +0 -0
  320. package/dist/client/_assets/chunks/d8325ba7ae651bc30440905bd67b95f1-Dg8M_ijr.woff2 +0 -0
  321. package/dist/client/_assets/chunks/da13b136efb1d1e4c76575af8f79a698-BbfzLGVB.woff2 +0 -0
  322. package/dist/client/_assets/chunks/da2cf0ec56bf69374ee37764c7e3ea3d-fyVBKE2g.woff2 +0 -0
  323. package/dist/client/_assets/chunks/da93ae099ff3b7aae27b3f674d3fc721-BDG5ywtd.woff2 +0 -0
  324. package/dist/client/_assets/chunks/daf62255dd60679946f28c442ca62533-BnIjYSn3.woff2 +0 -0
  325. package/dist/client/_assets/chunks/dccda6a2e2db3b530788bdfa2acd1979-ByL7eZcn.woff2 +0 -0
  326. package/dist/client/_assets/chunks/dd01a1035345f6921a48525b8ce08f06-vkP6t4fC.woff2 +0 -0
  327. package/dist/client/_assets/chunks/e2204cf85edcb96c5de5c3dcf240da9d-Ch3zKjD-.woff2 +0 -0
  328. package/dist/client/_assets/chunks/e264213b9e102dabc603adb6e4fda5e6-CyxmQBHB.woff2 +0 -0
  329. package/dist/client/_assets/chunks/e3e913e145ddcd9323b2a0972967feb6-3sjEdzck.woff2 +0 -0
  330. package/dist/client/_assets/chunks/e4fb59479cedc87ba79785590bf861ca-sx7RZ8Vu.woff2 +0 -0
  331. package/dist/client/_assets/chunks/e5d00355f73293d40b61299459d17ca5-D8Vt3D-z.woff2 +0 -0
  332. package/dist/client/_assets/chunks/e647b8d2efc501c0cc0e407249cc7135-BrSW9DU4.woff2 +0 -0
  333. package/dist/client/_assets/chunks/e6e60ffb2ebd1828628764b507060aea-Dqyf48QC.woff2 +0 -0
  334. package/dist/client/_assets/chunks/e7c7ef3669ae48c0a736f06ca471e1d7-DNCebEB-.woff2 +0 -0
  335. package/dist/client/_assets/chunks/e81a742cacef744130c40de1b90837d8-DtAIFBk_.woff2 +0 -0
  336. package/dist/client/_assets/chunks/e8b755172122d1d0a5dd453e96b0ff24-BNTSyPYU.woff2 +0 -0
  337. package/dist/client/_assets/chunks/e99280299c305402eaa5271a3e36c49b-BpqXwl7U.woff2 +0 -0
  338. package/dist/client/_assets/chunks/e9c66b085052ece66bfadf45f711d3e1-DVza3Uob.woff2 +0 -0
  339. package/dist/client/_assets/chunks/ed7c6dafaa6d8bcf015ef0ca574837df-C7bcndJl.woff2 +0 -0
  340. package/dist/client/_assets/chunks/f00eb499abb94fa7b799d6d8c9b050e9-D_XvVTI9.woff2 +0 -0
  341. package/dist/client/_assets/chunks/f2900a1d30c3a33129f4e2225669bd0e-in84LilX.woff2 +0 -0
  342. package/dist/client/_assets/chunks/f2fb1f1fbf7e44afb53c672ec286a22e-tFk0sTQc.woff2 +0 -0
  343. package/dist/client/_assets/chunks/f372129c60aaece937cf7b91ee75c9b8-DiP_JYOt.woff2 +0 -0
  344. package/dist/client/_assets/chunks/f5237486197aeff59341a1ff38b8eff8-D_uuqrNZ.woff2 +0 -0
  345. package/dist/client/_assets/chunks/f553d54ef931066712d8f3f0ce018e1b-D8K983U5.woff2 +0 -0
  346. package/dist/client/_assets/chunks/f5d7487963d43c89da63aaf10f2e6fb7-B7GIrfPU.woff2 +0 -0
  347. package/dist/client/_assets/chunks/f649cba8e14c33d6bf2265483b14b895-Nm5wSov8.woff2 +0 -0
  348. package/dist/client/_assets/chunks/f6839df1bf7cb4dc8d27e5ea55bbe633-BIjWKN84.woff2 +0 -0
  349. package/dist/client/_assets/chunks/f6b7304e028980f77a7f7007bb540abd-CIlBt6sf.woff2 +0 -0
  350. package/dist/client/_assets/chunks/f75496953a40ff241178240209f56990-MOSKd67d.woff2 +0 -0
  351. package/dist/client/_assets/chunks/f7d36ffff7a75c9c6216d576a57dd00d-CaXQA5A8.woff2 +0 -0
  352. package/dist/client/_assets/chunks/f7f3f63e7a149cd89eccab3b52171d05-oNOOSdDV.woff2 +0 -0
  353. package/dist/client/_assets/chunks/f8db8bef0a6e1178835d350ae0d384a1-ZAiKM369.woff2 +0 -0
  354. package/dist/client/_assets/chunks/f92d74d1d217d21b39075ff23f79f7fd-BlTe0_IX.woff2 +0 -0
  355. package/dist/client/_assets/chunks/f9d6d981d8b87b3e469027277f585741-DQqIv77a.woff2 +0 -0
  356. package/dist/client/_assets/chunks/fa7d3b99744d7f2dc9e00864a97a62d6-Pfww07DK.woff2 +0 -0
  357. package/dist/client/_assets/chunks/fa8ed469ef290bfeb571418fe0abb628-D5v-Z7kY.woff2 +0 -0
  358. package/dist/client/_assets/chunks/fb0e90665980954719c2eb685b130bc0-CiWRvo58.woff2 +0 -0
  359. package/dist/client/_assets/chunks/fb4649a82c50620773d79820e2e5ff13-dw14czgx.woff2 +0 -0
  360. package/dist/client/_assets/chunks/fb61b690208eff56e6d8432951270901-CUAnVvWa.woff2 +0 -0
  361. package/dist/client/_assets/chunks/fb9402d6c6357a825affc402f14d5a7e-CIp4G53L.woff2 +0 -0
  362. package/dist/client/_assets/chunks/fcc41f6a067ddd658bba5c9dff234a32-BtZTNo2r.woff2 +0 -0
  363. package/dist/client/_assets/chunks/fd6ad889fcf3583bd9b0b6db53aad434-DqiKyYmz.woff2 +0 -0
  364. package/dist/client/_assets/chunks/ff0937ad63cda71ff420945ead55ab4d-CXGPdnOz.woff2 +0 -0
  365. package/dist/client/_assets/chunks/heic-to-XcUDQvtx.js +1 -0
  366. package/dist/client/_assets/chunks/literata-cyrillic-ext-wght-normal-CGKlZYBf.woff2 +0 -0
  367. package/dist/client/_assets/chunks/literata-cyrillic-wght-normal-DLqwHbi6.woff2 +0 -0
  368. package/dist/client/_assets/chunks/literata-greek-ext-wght-normal-e3e57Shi.woff2 +0 -0
  369. package/dist/client/_assets/chunks/literata-greek-wght-normal-CO1l-giJ.woff2 +0 -0
  370. package/dist/client/_assets/chunks/literata-latin-ext-wght-normal-BnEbWgdZ.woff2 +0 -0
  371. package/dist/client/_assets/chunks/literata-latin-wght-normal-DLxlUchJ.woff2 +0 -0
  372. package/dist/client/_assets/chunks/literata-vietnamese-wght-normal-LcSrhZ7T.woff2 +0 -0
  373. package/dist/client/_assets/chunks/module-ChVQstFd.js +716 -0
  374. package/dist/client/_assets/chunks/native-CR5HLOyf.js +1 -0
  375. package/dist/client/_assets/chunks/news-cycle-cyrillic-400-normal-9BSXki1I.woff +0 -0
  376. package/dist/client/_assets/chunks/news-cycle-cyrillic-400-normal-CUYmhJri.woff2 +0 -0
  377. package/dist/client/_assets/chunks/news-cycle-cyrillic-ext-400-normal-CKyb9yaQ.woff2 +0 -0
  378. package/dist/client/_assets/chunks/news-cycle-cyrillic-ext-400-normal-Llxpm7uO.woff +0 -0
  379. package/dist/client/_assets/chunks/news-cycle-greek-400-normal-BiAZ91Zl.woff2 +0 -0
  380. package/dist/client/_assets/chunks/news-cycle-greek-400-normal-D88oNngQ.woff +0 -0
  381. package/dist/client/_assets/chunks/news-cycle-greek-ext-400-normal-Ckclqjrc.woff2 +0 -0
  382. package/dist/client/_assets/chunks/news-cycle-greek-ext-400-normal-oz-bBDWj.woff +0 -0
  383. package/dist/client/_assets/chunks/news-cycle-latin-400-normal-BLgpQ3uo.woff +0 -0
  384. package/dist/client/_assets/chunks/news-cycle-latin-400-normal-BgW97ttO.woff2 +0 -0
  385. package/dist/client/_assets/chunks/news-cycle-latin-ext-400-normal-DmDltzLi.woff2 +0 -0
  386. package/dist/client/_assets/chunks/news-cycle-latin-ext-400-normal-lewDoXxP.woff +0 -0
  387. package/dist/client/_assets/chunks/news-cycle-vietnamese-400-normal-QPSuG-pc.woff +0 -0
  388. package/dist/client/_assets/chunks/news-cycle-vietnamese-400-normal-t2mxI9x9.woff2 +0 -0
  389. package/dist/client/_assets/chunks/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
  390. package/dist/client/_assets/chunks/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
  391. package/dist/client/_assets/chunks/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
  392. package/dist/client/_assets/chunks/source-sans-3-cyrillic-ext-wght-normal-DzyfIafT.woff2 +0 -0
  393. package/dist/client/_assets/chunks/source-sans-3-cyrillic-wght-normal-BMDVbyM7.woff2 +0 -0
  394. package/dist/client/_assets/chunks/source-sans-3-greek-ext-wght-normal-BWSLJLk6.woff2 +0 -0
  395. package/dist/client/_assets/chunks/source-sans-3-greek-wght-normal-C9H9m1vD.woff2 +0 -0
  396. package/dist/client/_assets/chunks/source-sans-3-latin-ext-wght-normal-C8iNium2.woff2 +0 -0
  397. package/dist/client/_assets/chunks/source-sans-3-latin-wght-normal-BqRLTx4X.woff2 +0 -0
  398. package/dist/client/_assets/chunks/source-sans-3-vietnamese-wght-normal-C1uRvKPU.woff2 +0 -0
  399. package/dist/client/_assets/chunks/url-CG0eolsk.js +1 -0
  400. package/dist/client/_assets/client-auth.js +3251 -0
  401. package/dist/client/_assets/client-cjk-tc.css +1 -0
  402. package/dist/client/_assets/client-cjk.css +1 -0
  403. package/dist/client/_assets/client.css +2 -0
  404. package/dist/client/_assets/client.js +380 -0
  405. package/dist/index.js +2 -20359
  406. package/dist/node.js +479 -0
  407. package/package.json +67 -40
  408. package/src/__tests__/bin/uploads-cleanup.test.ts +77 -0
  409. package/src/__tests__/export-service.test.ts +550 -0
  410. package/src/__tests__/helpers/app.ts +60 -27
  411. package/src/__tests__/helpers/db.ts +14 -24
  412. package/src/__tests__/helpers/lingui-core-macro-mock.ts +15 -2
  413. package/src/__tests__/import-site-command.test.ts +406 -0
  414. package/src/__tests__/site-localize-media.test.ts +150 -0
  415. package/src/__tests__/site-media-parser.test.ts +216 -0
  416. package/src/app.tsx +272 -175
  417. package/src/assets/branding/generated/README.txt +15 -0
  418. package/src/assets/branding/generated/jant-apple-touch-icon.png +0 -0
  419. package/src/assets/branding/generated/jant-brand-assets.zip +0 -0
  420. package/src/assets/branding/generated/jant-brand-tile-512.png +0 -0
  421. package/src/assets/branding/generated/jant-brand-tile.svg +1 -0
  422. package/src/assets/branding/generated/jant-circle-tile-512.png +0 -0
  423. package/src/assets/branding/generated/jant-circle-tile.svg +1 -0
  424. package/src/assets/branding/generated/jant-favicon.ico +0 -0
  425. package/src/assets/branding/generated/jant-logo-negative.svg +1 -0
  426. package/src/assets/branding/generated/jant-logo-positive-512.png +0 -0
  427. package/src/assets/branding/generated/jant-logo-positive.svg +1 -0
  428. package/src/assets/branding/generated/jant-social-preview.png +0 -0
  429. package/src/assets/branding/generated/jant-square-tile-512.png +0 -0
  430. package/src/assets/branding/generated/jant-square-tile.svg +1 -0
  431. package/src/assets/branding/jant-logo-positive.svg +3 -0
  432. package/src/auth.ts +47 -6
  433. package/src/client/__tests__/avatar-upload.test.ts +186 -0
  434. package/src/client/__tests__/collection-form-bridge.test.ts +127 -0
  435. package/src/client/__tests__/collection-page-actions.test.ts +112 -0
  436. package/src/client/__tests__/collection-sort-menu.test.ts +78 -0
  437. package/src/client/__tests__/compose-bridge.test.ts +260 -0
  438. package/src/client/__tests__/compose-discovery.test.ts +155 -0
  439. package/src/client/__tests__/compose-shortcuts.test.ts +133 -0
  440. package/src/client/__tests__/confirm.test.ts +98 -0
  441. package/src/client/__tests__/custom-url-menu.test.ts +104 -0
  442. package/src/client/__tests__/form-enter-submit.test.ts +110 -0
  443. package/src/client/__tests__/post-form-bridge.test.ts +82 -0
  444. package/src/client/__tests__/sortable-list.test.ts +91 -0
  445. package/src/client/__tests__/toast.test.ts +46 -0
  446. package/src/client/archive-nav.js +1 -3
  447. package/src/client/avatar-upload.ts +66 -25
  448. package/src/client/collection-form-bridge.ts +32 -15
  449. package/src/client/collection-page-actions.ts +160 -0
  450. package/src/client/collection-sort-menu.ts +105 -0
  451. package/src/client/components/__tests__/jant-collection-form.test.ts +199 -51
  452. package/src/client/components/__tests__/jant-collection-sidebar.test.ts +250 -0
  453. package/src/client/components/__tests__/jant-compose-dialog.test.ts +2507 -342
  454. package/src/client/components/__tests__/jant-compose-editor.test.ts +484 -20
  455. package/src/client/components/__tests__/jant-compose-fullscreen.test.ts +298 -0
  456. package/src/client/components/__tests__/jant-post-form.test.ts +9 -8
  457. package/src/client/components/__tests__/jant-post-menu.test.ts +325 -0
  458. package/src/client/components/__tests__/jant-settings-avatar.test.ts +27 -3
  459. package/src/client/components/__tests__/jant-settings-general.test.ts +312 -84
  460. package/src/client/components/collection-manager-types.ts +51 -0
  461. package/src/client/components/collection-types.ts +12 -10
  462. package/src/client/components/compose-types.ts +80 -13
  463. package/src/client/components/jant-collection-form.ts +338 -509
  464. package/src/client/components/jant-collection-sidebar.ts +461 -463
  465. package/src/client/components/jant-compose-dialog.ts +1566 -479
  466. package/src/client/components/jant-compose-editor.ts +531 -276
  467. package/src/client/components/jant-compose-fullscreen.ts +184 -112
  468. package/src/client/components/jant-confirm-dialog.ts +249 -0
  469. package/src/client/components/jant-nav-manager.ts +79 -103
  470. package/src/client/components/jant-post-form.ts +4 -1
  471. package/src/client/components/jant-post-menu.ts +583 -306
  472. package/src/client/components/jant-settings-avatar.ts +15 -9
  473. package/src/client/components/jant-settings-general.ts +444 -137
  474. package/src/client/components/nav-manager-types.ts +6 -3
  475. package/src/client/components/post-form-template.ts +2 -9
  476. package/src/client/components/post-form-types.ts +2 -4
  477. package/src/client/components/settings-types.ts +34 -2
  478. package/src/client/compose-bridge.ts +297 -171
  479. package/src/client/compose-discovery-bridge.ts +9 -0
  480. package/src/client/compose-discovery.ts +254 -0
  481. package/src/client/compose-launch.ts +98 -0
  482. package/src/client/compose-shortcuts.ts +61 -0
  483. package/src/client/confirm.ts +40 -0
  484. package/src/client/custom-url-menu.ts +128 -0
  485. package/src/client/form-enter-submit.ts +87 -0
  486. package/src/client/json.ts +37 -0
  487. package/src/client/multipart-upload.ts +51 -18
  488. package/src/client/post-form-bridge.ts +20 -14
  489. package/src/client/runtime-paths.ts +72 -0
  490. package/src/client/settings-bridge.ts +54 -10
  491. package/src/client/site-header-nav.js +84 -0
  492. package/src/client/sortable-list.ts +152 -0
  493. package/src/client/thread-context.ts +11 -5
  494. package/src/client/tiptap/__tests__/floating-position.test.ts +74 -0
  495. package/src/client/tiptap/__tests__/link-toolbar.test.ts +94 -0
  496. package/src/client/tiptap/__tests__/paste-media.test.ts +39 -0
  497. package/src/client/tiptap/bubble-menu.ts +98 -13
  498. package/src/client/tiptap/create-editor.ts +6 -0
  499. package/src/client/tiptap/extensions.ts +15 -4
  500. package/src/client/tiptap/floating-position.ts +167 -0
  501. package/src/client/tiptap/inline-image-upload.ts +73 -0
  502. package/src/client/tiptap/link-input-rules.ts +56 -0
  503. package/src/client/tiptap/link-toolbar.ts +60 -14
  504. package/src/client/tiptap/paste-media.ts +120 -0
  505. package/src/client/tiptap/slash-commands.ts +205 -52
  506. package/src/client/tiptap/toolbar-mode.ts +31 -0
  507. package/src/client/toast.ts +136 -16
  508. package/src/client/types/sortablejs.d.ts +4 -4
  509. package/src/client/upload-session.ts +270 -0
  510. package/src/client/upload-with-metadata.ts +10 -17
  511. package/src/client-auth.ts +38 -0
  512. package/src/client.ts +10 -29
  513. package/src/db/__tests__/d1-query.test.ts +84 -0
  514. package/src/db/__tests__/demo-canonical-snapshot.test.ts +78 -0
  515. package/src/db/__tests__/demo-env-loader.test.ts +114 -0
  516. package/src/db/__tests__/dialect.test.ts +42 -0
  517. package/src/db/__tests__/migration-artifacts.test.ts +82 -0
  518. package/src/db/__tests__/migration-rehearsal.test.ts +73 -0
  519. package/src/db/__tests__/migration-runner.test.ts +72 -0
  520. package/src/db/__tests__/migrations.test.ts +293 -8
  521. package/src/db/__tests__/r2-query.test.ts +102 -0
  522. package/src/db/__tests__/wrangler-config.test.ts +86 -0
  523. package/src/db/backfills/0000_normalize_legacy_time_zone_values.sql +38 -0
  524. package/src/db/backfills/README.md +11 -0
  525. package/src/db/dialect.ts +71 -0
  526. package/src/db/index.ts +84 -2
  527. package/src/db/migrations/0000_baseline.sql +35 -57
  528. package/src/db/migrations/0002_site_aware_core.sql +354 -0
  529. package/src/db/migrations/0003_fts_site_aware.sql +38 -0
  530. package/src/db/migrations/0004_perpetual_eternity.sql +29 -0
  531. package/src/db/migrations/meta/0000_snapshot.json +134 -138
  532. package/src/db/migrations/meta/0001_snapshot.json +135 -139
  533. package/src/db/migrations/meta/0002_snapshot.json +1717 -0
  534. package/src/db/migrations/meta/0003_snapshot.json +1717 -0
  535. package/src/db/migrations/meta/0004_snapshot.json +1897 -0
  536. package/src/db/migrations/meta/_journal.json +23 -2
  537. package/src/db/migrations/pg/0000_pg_site_aware_baseline.sql +306 -0
  538. package/src/db/migrations/pg/0001_pg_search_support.sql +8 -0
  539. package/src/db/migrations/pg/0002_breezy_lockjaw.sql +29 -0
  540. package/src/db/migrations/pg/README.md +8 -0
  541. package/src/db/migrations/pg/meta/0000_snapshot.json +2195 -0
  542. package/src/db/migrations/pg/meta/0001_snapshot.json +2248 -0
  543. package/src/db/migrations/pg/meta/0002_snapshot.json +2476 -0
  544. package/src/db/migrations/pg/meta/_journal.json +27 -0
  545. package/src/db/pg/__tests__/node.test.ts +58 -0
  546. package/src/db/pg/node.ts +151 -0
  547. package/src/db/pg/schema.ts +739 -0
  548. package/src/db/raw-query.ts +15 -0
  549. package/src/db/rehearsal-fixtures/demo-current.json +25 -0
  550. package/src/db/rehearsal-fixtures/demo-current.sql +142 -0
  551. package/src/db/schema-bundle.ts +12 -0
  552. package/src/db/schema.ts +309 -128
  553. package/src/db/sqlite/schema.ts +1 -0
  554. package/src/i18n/__tests__/context.test.tsx +35 -0
  555. package/src/i18n/context.tsx +10 -2
  556. package/src/i18n/locales/en.po +1778 -231
  557. package/src/i18n/locales/en.ts +1 -1
  558. package/src/i18n/locales/glossary.zh-Hans.yml +116 -0
  559. package/src/i18n/locales/glossary.zh-Hant.yml +116 -0
  560. package/src/i18n/locales/zh-Hans.po +1819 -272
  561. package/src/i18n/locales/zh-Hans.ts +1 -1
  562. package/src/i18n/locales/zh-Hant.po +1823 -276
  563. package/src/i18n/locales/zh-Hant.ts +1 -1
  564. package/src/index.ts +4 -0
  565. package/src/lib/__tests__/asset-path.test.ts +54 -0
  566. package/src/lib/__tests__/blurhash-placeholder.test.ts +25 -1
  567. package/src/lib/__tests__/collection-sort.test.ts +45 -0
  568. package/src/lib/__tests__/constants.test.ts +1 -0
  569. package/src/lib/__tests__/favicon.test.ts +1 -1
  570. package/src/lib/__tests__/feed.test.ts +147 -0
  571. package/src/lib/__tests__/hosted-control-plane.test.ts +106 -0
  572. package/src/lib/__tests__/hosted-domain.test.ts +78 -0
  573. package/src/lib/__tests__/hosted-signin.test.ts +103 -0
  574. package/src/lib/__tests__/icons.test.ts +14 -172
  575. package/src/lib/__tests__/image.test.ts +23 -4
  576. package/src/lib/__tests__/jant-branding.test.ts +160 -0
  577. package/src/lib/__tests__/markdown-to-tiptap.test.ts +27 -0
  578. package/src/lib/__tests__/page-title.test.ts +20 -0
  579. package/src/lib/__tests__/password.test.ts +60 -0
  580. package/src/lib/__tests__/post-display.test.ts +99 -0
  581. package/src/lib/__tests__/post-meta.test.ts +126 -0
  582. package/src/lib/__tests__/public-storage.test.ts +75 -0
  583. package/src/lib/__tests__/resolve-config.test.ts +156 -28
  584. package/src/lib/__tests__/schemas.test.ts +268 -22
  585. package/src/lib/__tests__/search-snippet.test.ts +43 -0
  586. package/src/lib/__tests__/site-resolution.test.ts +39 -0
  587. package/src/lib/__tests__/slug-format.test.ts +46 -0
  588. package/src/lib/__tests__/startup-config.test.ts +87 -0
  589. package/src/lib/__tests__/storage.test.ts +218 -1
  590. package/src/lib/__tests__/theme.test.ts +50 -13
  591. package/src/lib/__tests__/time.test.ts +44 -0
  592. package/src/lib/__tests__/timeline.test.ts +410 -4
  593. package/src/lib/__tests__/timezones.test.ts +51 -18
  594. package/src/lib/__tests__/tiptap-to-markdown.test.ts +23 -0
  595. package/src/lib/__tests__/url.test.ts +79 -1
  596. package/src/lib/__tests__/view.test.ts +74 -13
  597. package/src/lib/asset-path.ts +87 -0
  598. package/src/lib/blurhash-placeholder.ts +56 -1
  599. package/src/lib/collection-sort.ts +61 -0
  600. package/src/lib/confirm.ts +37 -0
  601. package/src/lib/constants.ts +3 -6
  602. package/src/lib/crypto.ts +47 -0
  603. package/src/lib/env.ts +245 -0
  604. package/src/lib/errors.ts +25 -9
  605. package/src/lib/favicon.ts +2 -1
  606. package/src/lib/featured-icons.ts +33 -0
  607. package/src/lib/feed.ts +73 -24
  608. package/src/lib/hosted-control-plane-sync.ts +27 -0
  609. package/src/lib/hosted-control-plane.ts +99 -0
  610. package/src/lib/hosted-domain-check.ts +98 -0
  611. package/src/lib/hosted-domain.ts +61 -0
  612. package/src/lib/hosted-signin.ts +115 -0
  613. package/src/lib/hosted-sso.ts +110 -0
  614. package/src/lib/icons.ts +10 -175
  615. package/src/lib/ids.ts +54 -0
  616. package/src/lib/image.ts +18 -7
  617. package/src/lib/jant-branding-generated.ts +947 -0
  618. package/src/lib/jant-branding.ts +520 -0
  619. package/src/lib/markdown-to-tiptap.ts +57 -0
  620. package/src/lib/media-helpers.ts +6 -2
  621. package/src/lib/navigation.ts +9 -2
  622. package/src/lib/page-title.ts +23 -0
  623. package/src/lib/pagination.ts +34 -0
  624. package/src/lib/password.ts +164 -0
  625. package/src/lib/post-display.ts +162 -0
  626. package/src/lib/post-meta.ts +95 -0
  627. package/src/lib/public-storage.ts +57 -0
  628. package/src/lib/render.tsx +22 -0
  629. package/src/lib/resolve-config.ts +78 -27
  630. package/src/lib/schemas.ts +264 -73
  631. package/src/lib/search-snippet.ts +110 -8
  632. package/src/lib/site-resolution.ts +28 -0
  633. package/src/lib/slug-format.ts +84 -0
  634. package/src/lib/slug.ts +1 -1
  635. package/src/lib/startup-config.ts +244 -0
  636. package/src/lib/storage.ts +722 -28
  637. package/src/lib/theme.ts +13 -6
  638. package/src/lib/time.ts +59 -15
  639. package/src/lib/timeline.ts +386 -62
  640. package/src/lib/timezones.ts +120 -50
  641. package/src/lib/tiptap-render.ts +1 -3
  642. package/src/lib/tiptap-to-markdown.ts +49 -0
  643. package/src/lib/upload.ts +216 -11
  644. package/src/lib/url.ts +210 -0
  645. package/src/lib/view.ts +87 -31
  646. package/src/middleware/__tests__/auth.test.ts +216 -14
  647. package/src/middleware/__tests__/error-handler.test.ts +37 -0
  648. package/src/middleware/__tests__/onboarding.test.ts +9 -0
  649. package/src/middleware/__tests__/secure-headers.test.ts +111 -0
  650. package/src/middleware/auth.ts +156 -28
  651. package/src/middleware/config.ts +29 -9
  652. package/src/middleware/error-handler.ts +16 -1
  653. package/src/middleware/onboarding.ts +15 -6
  654. package/src/middleware/secure-headers.ts +136 -25
  655. package/src/node/__tests__/cli-db-execute-file.test.ts +109 -0
  656. package/src/node/__tests__/cli-deploy.test.ts +124 -0
  657. package/src/node/__tests__/cli-export.test.ts +66 -0
  658. package/src/node/__tests__/cli-reset-password.test.ts +91 -0
  659. package/src/node/__tests__/cli-runtime-target.test.ts +37 -0
  660. package/src/node/__tests__/cli-site-selection.test.ts +133 -0
  661. package/src/node/__tests__/cli-site-snapshot.test.ts +636 -0
  662. package/src/node/__tests__/cli-site-token-env.test.ts +137 -0
  663. package/src/node/__tests__/runtime.test.ts +346 -0
  664. package/src/node/index.ts +18 -0
  665. package/src/node/request-handler.ts +668 -0
  666. package/src/node/runtime.ts +88 -0
  667. package/src/preset.css +73 -16
  668. package/src/routes/__tests__/compose.test.ts +77 -4
  669. package/src/routes/api/__tests__/attachments.test.ts +92 -0
  670. package/src/routes/api/__tests__/collections.test.ts +138 -24
  671. package/src/routes/api/__tests__/nav-items.test.ts +81 -20
  672. package/src/routes/api/__tests__/posts.test.ts +315 -57
  673. package/src/routes/api/__tests__/search.test.ts +25 -1
  674. package/src/routes/api/__tests__/settings.test.ts +380 -2
  675. package/src/routes/api/__tests__/upload-multipart.test.ts +216 -26
  676. package/src/routes/api/__tests__/uploads.test.ts +420 -0
  677. package/src/routes/api/attachments.ts +24 -0
  678. package/src/routes/api/collections.ts +59 -28
  679. package/src/routes/api/custom-urls.ts +6 -5
  680. package/src/routes/api/export.ts +37 -7
  681. package/src/routes/api/internal/__tests__/api-tokens.test.ts +55 -0
  682. package/src/routes/api/internal/__tests__/sites.test.ts +472 -0
  683. package/src/routes/api/internal/__tests__/uploads.test.ts +131 -0
  684. package/src/routes/api/internal/api-tokens.ts +17 -0
  685. package/src/routes/api/internal/sites.ts +241 -0
  686. package/src/routes/api/internal/uploads.ts +37 -0
  687. package/src/routes/api/nav-items.ts +24 -15
  688. package/src/routes/api/posts.ts +222 -74
  689. package/src/routes/api/search.ts +50 -9
  690. package/src/routes/api/settings.ts +141 -7
  691. package/src/routes/api/upload-multipart.ts +105 -16
  692. package/src/routes/api/upload.ts +90 -21
  693. package/src/routes/api/uploads.ts +247 -0
  694. package/src/routes/auth/__tests__/dev.test.ts +135 -0
  695. package/src/routes/auth/__tests__/hosted-sso.test.ts +136 -0
  696. package/src/routes/auth/__tests__/setup.test.ts +73 -49
  697. package/src/routes/auth/dev.ts +72 -0
  698. package/src/routes/auth/hosted-sso.ts +64 -0
  699. package/src/routes/auth/reset.tsx +41 -7
  700. package/src/routes/auth/setup.tsx +37 -38
  701. package/src/routes/auth/signin.tsx +36 -6
  702. package/src/routes/compose.tsx +25 -38
  703. package/src/routes/dash/__tests__/font-theme.test.ts +45 -34
  704. package/src/routes/dash/__tests__/settings-avatar.test.ts +24 -11
  705. package/src/routes/dash/custom-urls.tsx +245 -67
  706. package/src/routes/dash/settings.tsx +530 -139
  707. package/src/routes/feed/__tests__/rss.test.ts +200 -51
  708. package/src/routes/feed/__tests__/sitemap.test.ts +64 -0
  709. package/src/routes/feed/rss.ts +112 -48
  710. package/src/routes/feed/sitemap.ts +16 -6
  711. package/src/routes/hosted/__tests__/domain-check.test.ts +94 -0
  712. package/src/routes/hosted/domain-check.ts +39 -0
  713. package/src/routes/pages/__tests__/collections.test.ts +27 -21
  714. package/src/routes/pages/__tests__/featured.test.ts +9 -2
  715. package/src/routes/pages/archive.tsx +79 -33
  716. package/src/routes/pages/brand.tsx +119 -0
  717. package/src/routes/pages/collection.tsx +143 -59
  718. package/src/routes/pages/collections.tsx +46 -20
  719. package/src/routes/pages/featured.tsx +31 -39
  720. package/src/routes/pages/home.tsx +50 -25
  721. package/src/routes/pages/latest.tsx +20 -4
  722. package/src/routes/pages/new.tsx +10 -6
  723. package/src/routes/pages/page.tsx +27 -53
  724. package/src/routes/pages/partials.tsx +83 -0
  725. package/src/routes/pages/search.tsx +11 -9
  726. package/src/routes/pages/theme-sample.tsx +98 -0
  727. package/src/runtime/__tests__/node.test.ts +258 -0
  728. package/src/runtime/cloudflare.ts +102 -0
  729. package/src/runtime/index.ts +14 -0
  730. package/src/runtime/node.ts +187 -0
  731. package/src/runtime/site.ts +169 -0
  732. package/src/services/__tests__/api-token.test.ts +5 -2
  733. package/src/services/__tests__/auth.test.ts +348 -0
  734. package/src/services/__tests__/collection.test.ts +154 -16
  735. package/src/services/__tests__/custom-url.test.ts +10 -3
  736. package/src/services/__tests__/hosted-handoff.test.ts +123 -0
  737. package/src/services/__tests__/media.test.ts +256 -33
  738. package/src/services/__tests__/navigation.test.ts +89 -4
  739. package/src/services/__tests__/post-timeline.test.ts +111 -2
  740. package/src/services/__tests__/post.test.ts +463 -38
  741. package/src/services/__tests__/search.test.ts +145 -14
  742. package/src/services/__tests__/settings.test.ts +162 -2
  743. package/src/services/__tests__/site-admin.test.ts +48 -0
  744. package/src/services/__tests__/site-profile.test.ts +175 -0
  745. package/src/services/api-token.ts +44 -11
  746. package/src/services/auth.ts +211 -9
  747. package/src/services/bootstrap.ts +68 -0
  748. package/src/services/collection.ts +501 -100
  749. package/src/services/custom-url.ts +42 -12
  750. package/src/services/export.ts +2269 -320
  751. package/src/services/hosted-handoff.ts +184 -0
  752. package/src/services/index.ts +110 -12
  753. package/src/services/media.ts +309 -39
  754. package/src/services/navigation.ts +141 -20
  755. package/src/services/path.ts +45 -9
  756. package/src/services/post.ts +1529 -246
  757. package/src/services/search.ts +222 -29
  758. package/src/services/settings.ts +202 -48
  759. package/src/services/site-admin.ts +825 -0
  760. package/src/services/site-member.ts +74 -0
  761. package/src/services/site-profile.ts +52 -0
  762. package/src/services/site.ts +250 -0
  763. package/src/services/upload-session.ts +707 -0
  764. package/src/style-cjk-tc.css +3 -0
  765. package/src/style-cjk.css +3 -0
  766. package/src/styles/components.css +647 -16
  767. package/src/styles/fonts/latin.css +4 -0
  768. package/src/styles/fonts/noto-serif-sc/400/02629e5d0a9860b7fe32ec1f0563213a.woff2 +0 -0
  769. package/src/styles/fonts/noto-serif-sc/400/031089da45fbfb7dc18ac827bef4c56e.woff2 +0 -0
  770. package/src/styles/fonts/noto-serif-sc/400/03ac785139320b7b13bac9c150bf72bf.woff2 +0 -0
  771. package/src/styles/fonts/noto-serif-sc/400/0b1f83a3c7e715560a55ad9eb0fb1c94.woff2 +0 -0
  772. package/src/styles/fonts/noto-serif-sc/400/14b040a2dda256936bc7b3470e548394.woff2 +0 -0
  773. package/src/styles/fonts/noto-serif-sc/400/189f272ea2600c74d576b7b15c014922.woff2 +0 -0
  774. package/src/styles/fonts/noto-serif-sc/400/1fbccc182322b513f57cd156a9a491b0.woff2 +0 -0
  775. package/src/styles/fonts/noto-serif-sc/400/21e0a71d86be7b8a9e812e7af09dd061.woff2 +0 -0
  776. package/src/styles/fonts/noto-serif-sc/400/265e048cc9f2f8a711ba585a534d5351.woff2 +0 -0
  777. package/src/styles/fonts/noto-serif-sc/400/2ae2ca951489c9d50cde5b36a2a5515b.woff2 +0 -0
  778. package/src/styles/fonts/noto-serif-sc/400/2ba802b14f21a58fc61606c88fa93373.woff2 +0 -0
  779. package/src/styles/fonts/noto-serif-sc/400/2deb444546774c3a3ab38c75eb69cdfb.woff2 +0 -0
  780. package/src/styles/fonts/noto-serif-sc/400/2fbccf9a3853eb59db1a825e044515fd.woff2 +0 -0
  781. package/src/styles/fonts/noto-serif-sc/400/2ff009fa8701505d7f3dc6c83763f019.woff2 +0 -0
  782. package/src/styles/fonts/noto-serif-sc/400/31424fe5d54692e7c8b38021ccb8597c.woff2 +0 -0
  783. package/src/styles/fonts/noto-serif-sc/400/360c190344c26278bbc50e2f4d6a2b3f.woff2 +0 -0
  784. package/src/styles/fonts/noto-serif-sc/400/39b0bbc910af9d2d6dcd8bd4abd6387d.woff2 +0 -0
  785. package/src/styles/fonts/noto-serif-sc/400/3adc8f6350cf5067bcb6dc5e44c45d41.woff2 +0 -0
  786. package/src/styles/fonts/noto-serif-sc/400/3bed5bd57de8f738e53cddaea88983d9.woff2 +0 -0
  787. package/src/styles/fonts/noto-serif-sc/400/3c201fd8d1bb20abe7d06b940e83a4d9.woff2 +0 -0
  788. package/src/styles/fonts/noto-serif-sc/400/3d385ea0880df7204258e290648ec012.woff2 +0 -0
  789. package/src/styles/fonts/noto-serif-sc/400/3dc1a4f0d7af59e16b5162a2b077a442.woff2 +0 -0
  790. package/src/styles/fonts/noto-serif-sc/400/3dc68e473fe23bd076dd46785cd23583.woff2 +0 -0
  791. package/src/styles/fonts/noto-serif-sc/400/435b7dca567809813fcb395a27ed83a0.woff2 +0 -0
  792. package/src/styles/fonts/noto-serif-sc/400/43693195e775d515689fa035394067fd.woff2 +0 -0
  793. package/src/styles/fonts/noto-serif-sc/400/43fb49e5b79ee7e553869d84e6e08b1e.woff2 +0 -0
  794. package/src/styles/fonts/noto-serif-sc/400/44dcbbc3cc8f22e613b342d691511ab6.woff2 +0 -0
  795. package/src/styles/fonts/noto-serif-sc/400/474fac21b12b7efd71f7c321578878b0.woff2 +0 -0
  796. package/src/styles/fonts/noto-serif-sc/400/4a23fe6e82fd496b5eb20401b6164efe.woff2 +0 -0
  797. package/src/styles/fonts/noto-serif-sc/400/4bc743968cf1c3ce5711de67ef1ccc4d.woff2 +0 -0
  798. package/src/styles/fonts/noto-serif-sc/400/4cf0f292f3358bd2f73b1cf4ec1476f3.woff2 +0 -0
  799. package/src/styles/fonts/noto-serif-sc/400/501f66f24bce8234441954de1b568403.woff2 +0 -0
  800. package/src/styles/fonts/noto-serif-sc/400/53a88404451448cd2e620a0ca0e45a20.woff2 +0 -0
  801. package/src/styles/fonts/noto-serif-sc/400/557cd00c5d6827e13d72a0c71b23587b.woff2 +0 -0
  802. package/src/styles/fonts/noto-serif-sc/400/563fa31542d553f25abab65cf7f81e1d.woff2 +0 -0
  803. package/src/styles/fonts/noto-serif-sc/400/56e1c4734bbbb38af2fbc262bf6e98f2.woff2 +0 -0
  804. package/src/styles/fonts/noto-serif-sc/400/5947f5da5da9a352a2b534ee64bfc29a.woff2 +0 -0
  805. package/src/styles/fonts/noto-serif-sc/400/5a10741e41259e235841440394c0763d.woff2 +0 -0
  806. package/src/styles/fonts/noto-serif-sc/400/60d8b0805a0a8c54a6cca216004beff5.woff2 +0 -0
  807. package/src/styles/fonts/noto-serif-sc/400/61bf4287453da4025d03fa6b2dba66ca.woff2 +0 -0
  808. package/src/styles/fonts/noto-serif-sc/400/638369541268ed5a10af97ad77498c73.woff2 +0 -0
  809. package/src/styles/fonts/noto-serif-sc/400/687d0f0f90a9b23e40102e16ad8e9836.woff2 +0 -0
  810. package/src/styles/fonts/noto-serif-sc/400/6e2164fad867d166de2e5b274f04a563.woff2 +0 -0
  811. package/src/styles/fonts/noto-serif-sc/400/6eefc9d430171c1e1e4034ecadee31c8.woff2 +0 -0
  812. package/src/styles/fonts/noto-serif-sc/400/71eafb8fbe3a734283517e230ad8b6db.woff2 +0 -0
  813. package/src/styles/fonts/noto-serif-sc/400/751f54dbb115140d5b645a6ba4aff5d3.woff2 +0 -0
  814. package/src/styles/fonts/noto-serif-sc/400/7609e7e74dd4d916a7abc7ecc7d95f7e.woff2 +0 -0
  815. package/src/styles/fonts/noto-serif-sc/400/76b9d6fe838ae4151d95ce7200aa2bf6.woff2 +0 -0
  816. package/src/styles/fonts/noto-serif-sc/400/78ce29fed872e44fc9014d94875d2aac.woff2 +0 -0
  817. package/src/styles/fonts/noto-serif-sc/400/79a85a253e9b3f12d2e2cb15e16b3003.woff2 +0 -0
  818. package/src/styles/fonts/noto-serif-sc/400/7caa14a095a6bc313aab780fe4ff7999.woff2 +0 -0
  819. package/src/styles/fonts/noto-serif-sc/400/7d138084cf03c14116b11297fce0e3e3.woff2 +0 -0
  820. package/src/styles/fonts/noto-serif-sc/400/880162ae92cd9e120eb4e4e11fae459d.woff2 +0 -0
  821. package/src/styles/fonts/noto-serif-sc/400/8f2b960c2823670e94f5b08aa65657e6.woff2 +0 -0
  822. package/src/styles/fonts/noto-serif-sc/400/8f89f57230d184f92a36e241874229d7.woff2 +0 -0
  823. package/src/styles/fonts/noto-serif-sc/400/9180de34b48b325200a97e267befff32.woff2 +0 -0
  824. package/src/styles/fonts/noto-serif-sc/400/95df3b9f681d9df411c30aea5b24f2e0.woff2 +0 -0
  825. package/src/styles/fonts/noto-serif-sc/400/975af5a496e8d87d821910aa9fe4d598.woff2 +0 -0
  826. package/src/styles/fonts/noto-serif-sc/400/97a874bbf55ce89a4ab7cd27c7e938b1.woff2 +0 -0
  827. package/src/styles/fonts/noto-serif-sc/400/9fd53607094e329fa8e5c785b3ff0f1a.woff2 +0 -0
  828. package/src/styles/fonts/noto-serif-sc/400/a578742770fcd2226e3c45b5b6efdcb0.woff2 +0 -0
  829. package/src/styles/fonts/noto-serif-sc/400/ae401fb4db80d5ff5cd3f8d9bc811070.woff2 +0 -0
  830. package/src/styles/fonts/noto-serif-sc/400/b0ab3a7f319ce6dd3c9a4de2674e7c72.woff2 +0 -0
  831. package/src/styles/fonts/noto-serif-sc/400/b159deb135e9946eea0572d52778170b.woff2 +0 -0
  832. package/src/styles/fonts/noto-serif-sc/400/b91450304d9ac44f5c6e0da0792e055d.woff2 +0 -0
  833. package/src/styles/fonts/noto-serif-sc/400/baa325551b381c5e035ef143e56d4abe.woff2 +0 -0
  834. package/src/styles/fonts/noto-serif-sc/400/c0c7836749e585cee24ab2f8457c5b01.woff2 +0 -0
  835. package/src/styles/fonts/noto-serif-sc/400/c2ac4ef1860812036ca2b8c4e4089bdc.woff2 +0 -0
  836. package/src/styles/fonts/noto-serif-sc/400/c31019c08bd22464f7a88f090281404c.woff2 +0 -0
  837. package/src/styles/fonts/noto-serif-sc/400/c57ee3b49b7e45b995539a6b2c51f138.woff2 +0 -0
  838. package/src/styles/fonts/noto-serif-sc/400/cd75ca47da9ae4c0899e37d4c543319b.woff2 +0 -0
  839. package/src/styles/fonts/noto-serif-sc/400/d12ce1d8445213317f9163283e58a05d.woff2 +0 -0
  840. package/src/styles/fonts/noto-serif-sc/400/d28fb13acf9ced9f0657fd4012c81cd2.woff2 +0 -0
  841. package/src/styles/fonts/noto-serif-sc/400/d3714e6b90de8e2085dfb2514464dd6a.woff2 +0 -0
  842. package/src/styles/fonts/noto-serif-sc/400/d3beff96216c8af1aa79246476b6a323.woff2 +0 -0
  843. package/src/styles/fonts/noto-serif-sc/400/d3e311f30c811dc339c262a79a51877e.woff2 +0 -0
  844. package/src/styles/fonts/noto-serif-sc/400/d51f4cdc83711e510f5d25f03235597e.woff2 +0 -0
  845. package/src/styles/fonts/noto-serif-sc/400/d5df4a8dfd4328c67d933b3912c6ad0f.woff2 +0 -0
  846. package/src/styles/fonts/noto-serif-sc/400/dccda6a2e2db3b530788bdfa2acd1979.woff2 +0 -0
  847. package/src/styles/fonts/noto-serif-sc/400/f5237486197aeff59341a1ff38b8eff8.woff2 +0 -0
  848. package/src/styles/fonts/noto-serif-sc/400/f553d54ef931066712d8f3f0ce018e1b.woff2 +0 -0
  849. package/src/styles/fonts/noto-serif-sc/400/f649cba8e14c33d6bf2265483b14b895.woff2 +0 -0
  850. package/src/styles/fonts/noto-serif-sc/400/f6839df1bf7cb4dc8d27e5ea55bbe633.woff2 +0 -0
  851. package/src/styles/fonts/noto-serif-sc/400/f6b7304e028980f77a7f7007bb540abd.woff2 +0 -0
  852. package/src/styles/fonts/noto-serif-sc/400/f8db8bef0a6e1178835d350ae0d384a1.woff2 +0 -0
  853. package/src/styles/fonts/noto-serif-sc/400/fb4649a82c50620773d79820e2e5ff13.woff2 +0 -0
  854. package/src/styles/fonts/noto-serif-sc/400/fb9402d6c6357a825affc402f14d5a7e.woff2 +0 -0
  855. package/src/styles/fonts/noto-serif-sc/700/0041f681602cc834bb5c55ced0155b8e.woff2 +0 -0
  856. package/src/styles/fonts/noto-serif-sc/700/00c9ac960d866ffaf8a866e5939024e2.woff2 +0 -0
  857. package/src/styles/fonts/noto-serif-sc/700/02e48e353415a00e0f556608cab33a43.woff2 +0 -0
  858. package/src/styles/fonts/noto-serif-sc/700/02faf6bb0ab4d56ada037c0bbaf9b9f7.woff2 +0 -0
  859. package/src/styles/fonts/noto-serif-sc/700/057a3d44d7fc606f113d863376d0ecf0.woff2 +0 -0
  860. package/src/styles/fonts/noto-serif-sc/700/10f2b44b3711d3f5bdcc30d373b543d1.woff2 +0 -0
  861. package/src/styles/fonts/noto-serif-sc/700/14c1506106d92621bafb11016735194e.woff2 +0 -0
  862. package/src/styles/fonts/noto-serif-sc/700/154a2c266902003bd8b7449386b10776.woff2 +0 -0
  863. package/src/styles/fonts/noto-serif-sc/700/19e39850472250bfdbce654d30859879.woff2 +0 -0
  864. package/src/styles/fonts/noto-serif-sc/700/1b5d0d740450fb996749464c9b882025.woff2 +0 -0
  865. package/src/styles/fonts/noto-serif-sc/700/1bca0a2a8840ad0ee9414940593db144.woff2 +0 -0
  866. package/src/styles/fonts/noto-serif-sc/700/1cda27dcaab977ae4ef5d5ab2a10ae03.woff2 +0 -0
  867. package/src/styles/fonts/noto-serif-sc/700/1f4bc38a1c50f55f335f5411cae47696.woff2 +0 -0
  868. package/src/styles/fonts/noto-serif-sc/700/2022cf097cb952d9fe75b53b4587d2c3.woff2 +0 -0
  869. package/src/styles/fonts/noto-serif-sc/700/2240a3c43ca5ef59ae3c348c7884792f.woff2 +0 -0
  870. package/src/styles/fonts/noto-serif-sc/700/280e3d2b58e9ad3501816072e01b0c13.woff2 +0 -0
  871. package/src/styles/fonts/noto-serif-sc/700/2874d07e228da9583b0e73646dacd498.woff2 +0 -0
  872. package/src/styles/fonts/noto-serif-sc/700/29d49891713a2785a3a383001cf58c59.woff2 +0 -0
  873. package/src/styles/fonts/noto-serif-sc/700/2d81eb6ab0ebbc0cabfb3a3341ba8800.woff2 +0 -0
  874. package/src/styles/fonts/noto-serif-sc/700/3179006d1c7ebfa50d27482a2859d9a0.woff2 +0 -0
  875. package/src/styles/fonts/noto-serif-sc/700/34c2edb3c37f71258f5c4a31091f0c6c.woff2 +0 -0
  876. package/src/styles/fonts/noto-serif-sc/700/389a950f2a1211946d294716e679e381.woff2 +0 -0
  877. package/src/styles/fonts/noto-serif-sc/700/42a74b6a625bbf0a9616ed4db3152c88.woff2 +0 -0
  878. package/src/styles/fonts/noto-serif-sc/700/457485e72835364662dfead6281638c1.woff2 +0 -0
  879. package/src/styles/fonts/noto-serif-sc/700/488846410760fe128dae939836ca5423.woff2 +0 -0
  880. package/src/styles/fonts/noto-serif-sc/700/48eb0a91e50c7f026e248c64145e72af.woff2 +0 -0
  881. package/src/styles/fonts/noto-serif-sc/700/4b0e79ba18b2ce424fa93e84996d7cba.woff2 +0 -0
  882. package/src/styles/fonts/noto-serif-sc/700/54e301f412730f391225db59dae1c8d5.woff2 +0 -0
  883. package/src/styles/fonts/noto-serif-sc/700/597d69d0710e0178b162afb0a0c20401.woff2 +0 -0
  884. package/src/styles/fonts/noto-serif-sc/700/5cc23a76e122d0ad2f7cede41bc35b27.woff2 +0 -0
  885. package/src/styles/fonts/noto-serif-sc/700/5d48855bed5f3554eff91b573d7376ac.woff2 +0 -0
  886. package/src/styles/fonts/noto-serif-sc/700/5ddcbe564b29ef08632e1aeb33455435.woff2 +0 -0
  887. package/src/styles/fonts/noto-serif-sc/700/605667a998e91e2b6a4a3cd7c31fe5a9.woff2 +0 -0
  888. package/src/styles/fonts/noto-serif-sc/700/67f32ceea9e78e5109f87724ad886010.woff2 +0 -0
  889. package/src/styles/fonts/noto-serif-sc/700/68f2fab82ec8e9291f08c3145111549c.woff2 +0 -0
  890. package/src/styles/fonts/noto-serif-sc/700/69519ada3f3f74ca20aacb8af48ab6b4.woff2 +0 -0
  891. package/src/styles/fonts/noto-serif-sc/700/6a6e884fb2b65ec5b4a3d5ecd0d01a6a.woff2 +0 -0
  892. package/src/styles/fonts/noto-serif-sc/700/6e1a8b45b01939088c3a8cfcf8c10681.woff2 +0 -0
  893. package/src/styles/fonts/noto-serif-sc/700/70adaf50c56d5ff859c64d35e0f1e34e.woff2 +0 -0
  894. package/src/styles/fonts/noto-serif-sc/700/72ee453ac0e19bd2c631c8921c44e3de.woff2 +0 -0
  895. package/src/styles/fonts/noto-serif-sc/700/753b5f6fb254bacb6618ace25af3df60.woff2 +0 -0
  896. package/src/styles/fonts/noto-serif-sc/700/76d4244186d118eea245d1385a4de2ec.woff2 +0 -0
  897. package/src/styles/fonts/noto-serif-sc/700/7a86b155111ba20f3e87306ff6beac77.woff2 +0 -0
  898. package/src/styles/fonts/noto-serif-sc/700/7b1e76975b0984e6f83e3f9f8069e784.woff2 +0 -0
  899. package/src/styles/fonts/noto-serif-sc/700/7b6c60131822a0e4d36d980d52509d4e.woff2 +0 -0
  900. package/src/styles/fonts/noto-serif-sc/700/7cbda564cb2dd4799ab9e89d51286aa7.woff2 +0 -0
  901. package/src/styles/fonts/noto-serif-sc/700/7f60eefa15956d6f06dd92404887d58c.woff2 +0 -0
  902. package/src/styles/fonts/noto-serif-sc/700/7f8c15e0ecb102738981d9fa4cb6b921.woff2 +0 -0
  903. package/src/styles/fonts/noto-serif-sc/700/812b5a4b87f3a7b4afc1cfebc864f413.woff2 +0 -0
  904. package/src/styles/fonts/noto-serif-sc/700/812dfb7f8144d01b3cc9d5ce0b472f40.woff2 +0 -0
  905. package/src/styles/fonts/noto-serif-sc/700/84742b1ede4f0bb6d27131298eba21b4.woff2 +0 -0
  906. package/src/styles/fonts/noto-serif-sc/700/8555f0285e3d28e95e2fc0ccccd9caff.woff2 +0 -0
  907. package/src/styles/fonts/noto-serif-sc/700/8e04e64c8f68d292a18d4160fbde8671.woff2 +0 -0
  908. package/src/styles/fonts/noto-serif-sc/700/958efb9b2fa2ea0008ffef009885f9f8.woff2 +0 -0
  909. package/src/styles/fonts/noto-serif-sc/700/9ca9b71010a5faeee7047ef97aeee13b.woff2 +0 -0
  910. package/src/styles/fonts/noto-serif-sc/700/9cd0b77920b9d6c64eb686493123fc76.woff2 +0 -0
  911. package/src/styles/fonts/noto-serif-sc/700/9ebd27835ffcbd794e67151ab046ce68.woff2 +0 -0
  912. package/src/styles/fonts/noto-serif-sc/700/a077f51cfb5cffb4ff4d8e229c0e9e79.woff2 +0 -0
  913. package/src/styles/fonts/noto-serif-sc/700/a397997b579d3945c9c70a979c17a8ad.woff2 +0 -0
  914. package/src/styles/fonts/noto-serif-sc/700/a68d9d5027803832bb28e78cdcd04949.woff2 +0 -0
  915. package/src/styles/fonts/noto-serif-sc/700/a904b05966368bcf90b632c7c2e5f76b.woff2 +0 -0
  916. package/src/styles/fonts/noto-serif-sc/700/aa218a2c45f3749537ce876201e5152b.woff2 +0 -0
  917. package/src/styles/fonts/noto-serif-sc/700/aa28db16818f9eaa8c817f289e1c3270.woff2 +0 -0
  918. package/src/styles/fonts/noto-serif-sc/700/aa96d698491c2540e2dcf7009c65c456.woff2 +0 -0
  919. package/src/styles/fonts/noto-serif-sc/700/ae25c41034ddc1a9e0b41f5034c9aa4b.woff2 +0 -0
  920. package/src/styles/fonts/noto-serif-sc/700/ae289ae3f8cdb54a3a6c07174517afec.woff2 +0 -0
  921. package/src/styles/fonts/noto-serif-sc/700/b02dfa2aa52cbdb1b2f11a9f44335469.woff2 +0 -0
  922. package/src/styles/fonts/noto-serif-sc/700/b2e326f7f9b807451bf9c745df747efe.woff2 +0 -0
  923. package/src/styles/fonts/noto-serif-sc/700/c33c59feccf391f0c5f1f5d24e36d1fe.woff2 +0 -0
  924. package/src/styles/fonts/noto-serif-sc/700/c82fd9456d7465b5e5bd3659e9b14c55.woff2 +0 -0
  925. package/src/styles/fonts/noto-serif-sc/700/c90b7b65d2b9696fbf3a506738f94d68.woff2 +0 -0
  926. package/src/styles/fonts/noto-serif-sc/700/cba6ad3981cb7861428d4be169ee8124.woff2 +0 -0
  927. package/src/styles/fonts/noto-serif-sc/700/cc26525aa2af1f0b929af32ce50a7fba.woff2 +0 -0
  928. package/src/styles/fonts/noto-serif-sc/700/cd0e7b51eddb22a77a09b025c0281434.woff2 +0 -0
  929. package/src/styles/fonts/noto-serif-sc/700/cd6d074f3957d58bac58437fc97e5e33.woff2 +0 -0
  930. package/src/styles/fonts/noto-serif-sc/700/cef249b6d013fb0cc0d574176bc23811.woff2 +0 -0
  931. package/src/styles/fonts/noto-serif-sc/700/d0bd387fda28e58d3c9b3efa2468dd8a.woff2 +0 -0
  932. package/src/styles/fonts/noto-serif-sc/700/da93ae099ff3b7aae27b3f674d3fc721.woff2 +0 -0
  933. package/src/styles/fonts/noto-serif-sc/700/e264213b9e102dabc603adb6e4fda5e6.woff2 +0 -0
  934. package/src/styles/fonts/noto-serif-sc/700/e7c7ef3669ae48c0a736f06ca471e1d7.woff2 +0 -0
  935. package/src/styles/fonts/noto-serif-sc/700/e81a742cacef744130c40de1b90837d8.woff2 +0 -0
  936. package/src/styles/fonts/noto-serif-sc/700/e8b755172122d1d0a5dd453e96b0ff24.woff2 +0 -0
  937. package/src/styles/fonts/noto-serif-sc/700/e99280299c305402eaa5271a3e36c49b.woff2 +0 -0
  938. package/src/styles/fonts/noto-serif-sc/700/e9c66b085052ece66bfadf45f711d3e1.woff2 +0 -0
  939. package/src/styles/fonts/noto-serif-sc/700/ed7c6dafaa6d8bcf015ef0ca574837df.woff2 +0 -0
  940. package/src/styles/fonts/noto-serif-sc/700/f2900a1d30c3a33129f4e2225669bd0e.woff2 +0 -0
  941. package/src/styles/fonts/noto-serif-sc/700/fa7d3b99744d7f2dc9e00864a97a62d6.woff2 +0 -0
  942. package/src/styles/fonts/noto-serif-sc/700/fb0e90665980954719c2eb685b130bc0.woff2 +0 -0
  943. package/src/styles/fonts/noto-serif-sc/noto-serif-sc.css +3615 -0
  944. package/src/styles/fonts/noto-serif-tc/400/008ea9091e332c639ceb18874eacd60c.woff2 +0 -0
  945. package/src/styles/fonts/noto-serif-tc/400/053bd3d7aec0040d0cc50c261a1f4e3e.woff2 +0 -0
  946. package/src/styles/fonts/noto-serif-tc/400/0713613227cc4c686c45a279f8bdc166.woff2 +0 -0
  947. package/src/styles/fonts/noto-serif-tc/400/0e97f44ebc65384c346fe19bcc52fa20.woff2 +0 -0
  948. package/src/styles/fonts/noto-serif-tc/400/1139d32ae2bdeb26c0c8f31330aa9a9f.woff2 +0 -0
  949. package/src/styles/fonts/noto-serif-tc/400/15f8c0df47fd639d1b0d9bd5cf507c9b.woff2 +0 -0
  950. package/src/styles/fonts/noto-serif-tc/400/1668bd859ffe15bed7d5563117d8d5fb.woff2 +0 -0
  951. package/src/styles/fonts/noto-serif-tc/400/190e3f8632494e7c095117f26b1c811e.woff2 +0 -0
  952. package/src/styles/fonts/noto-serif-tc/400/19ad151c22ce1befe0a9ea643fbee570.woff2 +0 -0
  953. package/src/styles/fonts/noto-serif-tc/400/1c820b5295868008ca7c78afa5b7655d.woff2 +0 -0
  954. package/src/styles/fonts/noto-serif-tc/400/1fbe225742c69f4ba9ea5f74922f0ca1.woff2 +0 -0
  955. package/src/styles/fonts/noto-serif-tc/400/2a7cedfcd6e4c7cec36f4fd7b0f329c2.woff2 +0 -0
  956. package/src/styles/fonts/noto-serif-tc/400/2acea04a920f6af31e7db97052f563c6.woff2 +0 -0
  957. package/src/styles/fonts/noto-serif-tc/400/2e98b666924b8e0a09d1aeeefd24bdd2.woff2 +0 -0
  958. package/src/styles/fonts/noto-serif-tc/400/2fd3fceb6faed5e3db768e88d7614dca.woff2 +0 -0
  959. package/src/styles/fonts/noto-serif-tc/400/35cf5dd04315e0b906e1a413d7905a2f.woff2 +0 -0
  960. package/src/styles/fonts/noto-serif-tc/400/387c811226f303af62f1e21aae6f5c83.woff2 +0 -0
  961. package/src/styles/fonts/noto-serif-tc/400/3b41385fc27419c19822060daa0b5cb3.woff2 +0 -0
  962. package/src/styles/fonts/noto-serif-tc/400/3cbe4a697fd595ef42c899de7d3e5445.woff2 +0 -0
  963. package/src/styles/fonts/noto-serif-tc/400/3d83dacbbec3d8532ae9afede21f3aab.woff2 +0 -0
  964. package/src/styles/fonts/noto-serif-tc/400/47479c470fae70f10b7c964a7ecbf274.woff2 +0 -0
  965. package/src/styles/fonts/noto-serif-tc/400/4dc0728df0f2ba70796f45f05654c7ba.woff2 +0 -0
  966. package/src/styles/fonts/noto-serif-tc/400/4dc2bc2c55b47f57d13b63aa6b1c8bd4.woff2 +0 -0
  967. package/src/styles/fonts/noto-serif-tc/400/4e1cc6aafb411b572c8d3511e925ecf1.woff2 +0 -0
  968. package/src/styles/fonts/noto-serif-tc/400/5227dbe9933760a48baff21ebd13fc98.woff2 +0 -0
  969. package/src/styles/fonts/noto-serif-tc/400/526b263e72c189f4b065738aaa6d423a.woff2 +0 -0
  970. package/src/styles/fonts/noto-serif-tc/400/54da934819a917f561b439bfd10f88b6.woff2 +0 -0
  971. package/src/styles/fonts/noto-serif-tc/400/5bfc7a121c35ae42623ef804fb525e0e.woff2 +0 -0
  972. package/src/styles/fonts/noto-serif-tc/400/5f90024544c2907c6c0203c6210c50be.woff2 +0 -0
  973. package/src/styles/fonts/noto-serif-tc/400/649b12d7cee7bb981842946e4547e6ca.woff2 +0 -0
  974. package/src/styles/fonts/noto-serif-tc/400/653bef2ed891ae48d8ed712283080649.woff2 +0 -0
  975. package/src/styles/fonts/noto-serif-tc/400/67d2a81f06ba352f17fbdc3a5e6ea59e.woff2 +0 -0
  976. package/src/styles/fonts/noto-serif-tc/400/68304f3229cf763465f044fccb5892c0.woff2 +0 -0
  977. package/src/styles/fonts/noto-serif-tc/400/688a88911e4da17b609196a959b8b930.woff2 +0 -0
  978. package/src/styles/fonts/noto-serif-tc/400/6db6ddf72c38a78ce44c1327701152e1.woff2 +0 -0
  979. package/src/styles/fonts/noto-serif-tc/400/77a7533bd21ccd33192d142a93555aa8.woff2 +0 -0
  980. package/src/styles/fonts/noto-serif-tc/400/7d65a3d6a65050eb5e6eca43398aeba4.woff2 +0 -0
  981. package/src/styles/fonts/noto-serif-tc/400/7dfc711962c8771f97e7c8898a6bcb65.woff2 +0 -0
  982. package/src/styles/fonts/noto-serif-tc/400/7ef123b62d530fcba73974fa265e0aae.woff2 +0 -0
  983. package/src/styles/fonts/noto-serif-tc/400/80466082a896fd328f30a78593c7c568.woff2 +0 -0
  984. package/src/styles/fonts/noto-serif-tc/400/8a3c84b0df36f851f5fea75ee8757951.woff2 +0 -0
  985. package/src/styles/fonts/noto-serif-tc/400/8b0c8c9f8cfa9fa090d97c5a5efb1f4c.woff2 +0 -0
  986. package/src/styles/fonts/noto-serif-tc/400/8dc035a34c76e6515ca203e2df182588.woff2 +0 -0
  987. package/src/styles/fonts/noto-serif-tc/400/8eb06109812cb80be44f47b8179c2709.woff2 +0 -0
  988. package/src/styles/fonts/noto-serif-tc/400/904324af375d5fd370af1054355a050e.woff2 +0 -0
  989. package/src/styles/fonts/noto-serif-tc/400/911a2092d64d6d6494b254d819af2b91.woff2 +0 -0
  990. package/src/styles/fonts/noto-serif-tc/400/9de02d745b8e25c6411fb152fb067748.woff2 +0 -0
  991. package/src/styles/fonts/noto-serif-tc/400/9eb33a430058d839ebbe2af4b2e0daa9.woff2 +0 -0
  992. package/src/styles/fonts/noto-serif-tc/400/9f5a73aa8ba417688019d628f334db07.woff2 +0 -0
  993. package/src/styles/fonts/noto-serif-tc/400/a0f0c06d5c7a3ffa97706178cce212a8.woff2 +0 -0
  994. package/src/styles/fonts/noto-serif-tc/400/a38c1830367f784181b6f544b0b11bbd.woff2 +0 -0
  995. package/src/styles/fonts/noto-serif-tc/400/a9cf85e27428c14351d30eac8cbc8d91.woff2 +0 -0
  996. package/src/styles/fonts/noto-serif-tc/400/aa0ce6740f301351761a0615cc8b2e99.woff2 +0 -0
  997. package/src/styles/fonts/noto-serif-tc/400/bc3f0cb8b55ee11d32b94ca488976f8d.woff2 +0 -0
  998. package/src/styles/fonts/noto-serif-tc/400/bcb3307527d6d0033bf0f17660b91e71.woff2 +0 -0
  999. package/src/styles/fonts/noto-serif-tc/400/bf1acc86e17b4229c548828a9d6f455d.woff2 +0 -0
  1000. package/src/styles/fonts/noto-serif-tc/400/c3fbc1f2557c343863a10698f8c966a2.woff2 +0 -0
  1001. package/src/styles/fonts/noto-serif-tc/400/c5c1c0be944ea39a3f50a02d32f5b759.woff2 +0 -0
  1002. package/src/styles/fonts/noto-serif-tc/400/c5f1075caf6d1344ee720de85114a521.woff2 +0 -0
  1003. package/src/styles/fonts/noto-serif-tc/400/cae29b3f8951eaf20d2f61c2206e28d9.woff2 +0 -0
  1004. package/src/styles/fonts/noto-serif-tc/400/d043b8d7a48bb0ac59ee1f1477d88eee.woff2 +0 -0
  1005. package/src/styles/fonts/noto-serif-tc/400/d320b000b5978c7251148a6a154741b8.woff2 +0 -0
  1006. package/src/styles/fonts/noto-serif-tc/400/da13b136efb1d1e4c76575af8f79a698.woff2 +0 -0
  1007. package/src/styles/fonts/noto-serif-tc/400/da2cf0ec56bf69374ee37764c7e3ea3d.woff2 +0 -0
  1008. package/src/styles/fonts/noto-serif-tc/400/daf62255dd60679946f28c442ca62533.woff2 +0 -0
  1009. package/src/styles/fonts/noto-serif-tc/400/dd01a1035345f6921a48525b8ce08f06.woff2 +0 -0
  1010. package/src/styles/fonts/noto-serif-tc/400/e4fb59479cedc87ba79785590bf861ca.woff2 +0 -0
  1011. package/src/styles/fonts/noto-serif-tc/400/e5d00355f73293d40b61299459d17ca5.woff2 +0 -0
  1012. package/src/styles/fonts/noto-serif-tc/400/e647b8d2efc501c0cc0e407249cc7135.woff2 +0 -0
  1013. package/src/styles/fonts/noto-serif-tc/400/e6e60ffb2ebd1828628764b507060aea.woff2 +0 -0
  1014. package/src/styles/fonts/noto-serif-tc/400/f00eb499abb94fa7b799d6d8c9b050e9.woff2 +0 -0
  1015. package/src/styles/fonts/noto-serif-tc/400/f7d36ffff7a75c9c6216d576a57dd00d.woff2 +0 -0
  1016. package/src/styles/fonts/noto-serif-tc/400/f7f3f63e7a149cd89eccab3b52171d05.woff2 +0 -0
  1017. package/src/styles/fonts/noto-serif-tc/400/fcc41f6a067ddd658bba5c9dff234a32.woff2 +0 -0
  1018. package/src/styles/fonts/noto-serif-tc/400/fd6ad889fcf3583bd9b0b6db53aad434.woff2 +0 -0
  1019. package/src/styles/fonts/noto-serif-tc/700/0c055db157e7a13f3103cc2a6b67fec3.woff2 +0 -0
  1020. package/src/styles/fonts/noto-serif-tc/700/0d3f5cc265cb6c439c517f2c4cebbddf.woff2 +0 -0
  1021. package/src/styles/fonts/noto-serif-tc/700/1259e5825b314fe2b8bb96d6e8069ee5.woff2 +0 -0
  1022. package/src/styles/fonts/noto-serif-tc/700/12c518ebfe62818af550c08947e359e7.woff2 +0 -0
  1023. package/src/styles/fonts/noto-serif-tc/700/145831a59caa06d894022fe60212ed21.woff2 +0 -0
  1024. package/src/styles/fonts/noto-serif-tc/700/169a096e61d38a773216f51d1ec2cc06.woff2 +0 -0
  1025. package/src/styles/fonts/noto-serif-tc/700/1884a2b22d314c7d57707f03aec348e0.woff2 +0 -0
  1026. package/src/styles/fonts/noto-serif-tc/700/1e2640116bbba817f43c43cc69371cf1.woff2 +0 -0
  1027. package/src/styles/fonts/noto-serif-tc/700/2573703213da30d3ba18925b100b2c2b.woff2 +0 -0
  1028. package/src/styles/fonts/noto-serif-tc/700/26839c0e47c73514b8d8f660d24d6b19.woff2 +0 -0
  1029. package/src/styles/fonts/noto-serif-tc/700/2a22e14a9ad53f2abb3c7e85017b7d12.woff2 +0 -0
  1030. package/src/styles/fonts/noto-serif-tc/700/2b3e8c5703b91f39f6027f43f0da6f4b.woff2 +0 -0
  1031. package/src/styles/fonts/noto-serif-tc/700/2f27ee4fb2cf6a280e110e09c18ef73e.woff2 +0 -0
  1032. package/src/styles/fonts/noto-serif-tc/700/31342cebfa5ea7fac06b4ea372d96bc5.woff2 +0 -0
  1033. package/src/styles/fonts/noto-serif-tc/700/375329ba0b50b94b35006498e555867c.woff2 +0 -0
  1034. package/src/styles/fonts/noto-serif-tc/700/427577dcb707d1d35eebd155b4222aa7.woff2 +0 -0
  1035. package/src/styles/fonts/noto-serif-tc/700/450a5b53be0a8a778bb0b623e86b652f.woff2 +0 -0
  1036. package/src/styles/fonts/noto-serif-tc/700/477866c8396474a17317dcac3e7a014f.woff2 +0 -0
  1037. package/src/styles/fonts/noto-serif-tc/700/478ebdaadda7775c391c5dcab4e697df.woff2 +0 -0
  1038. package/src/styles/fonts/noto-serif-tc/700/48d6a97a185c799be4fe67aaf7edf213.woff2 +0 -0
  1039. package/src/styles/fonts/noto-serif-tc/700/490edb9fc8a4356aea556eed32287464.woff2 +0 -0
  1040. package/src/styles/fonts/noto-serif-tc/700/4c4bdd0b3f3a52e28f3b643c1c5d43be.woff2 +0 -0
  1041. package/src/styles/fonts/noto-serif-tc/700/4c96411f3693a9a8657a9c1190f82bce.woff2 +0 -0
  1042. package/src/styles/fonts/noto-serif-tc/700/4c9aa12aba2a6a57410eacaff7427916.woff2 +0 -0
  1043. package/src/styles/fonts/noto-serif-tc/700/4cca7233bf8ce5dec2e5d146b993d626.woff2 +0 -0
  1044. package/src/styles/fonts/noto-serif-tc/700/4d0a9128d06ea857f203bf5d007b1ab9.woff2 +0 -0
  1045. package/src/styles/fonts/noto-serif-tc/700/4e5384920bbb155d9d8d74887b09ea5b.woff2 +0 -0
  1046. package/src/styles/fonts/noto-serif-tc/700/50cfd672bfa62512ba090420acf35c87.woff2 +0 -0
  1047. package/src/styles/fonts/noto-serif-tc/700/551b1d7a0b80c8d42af09863cdca7f01.woff2 +0 -0
  1048. package/src/styles/fonts/noto-serif-tc/700/555d990ab3fd7d3d66c6d1fa9a82fec5.woff2 +0 -0
  1049. package/src/styles/fonts/noto-serif-tc/700/5979c33a7eb5963bf8e83e46931b5fb5.woff2 +0 -0
  1050. package/src/styles/fonts/noto-serif-tc/700/59966ee0b069b577510fe68c350da0ee.woff2 +0 -0
  1051. package/src/styles/fonts/noto-serif-tc/700/60a14064ed334f0155795d795e926abe.woff2 +0 -0
  1052. package/src/styles/fonts/noto-serif-tc/700/611b62d5fd9698d9b5ce495ba6f14c93.woff2 +0 -0
  1053. package/src/styles/fonts/noto-serif-tc/700/6e83fe0b6e708eaf1c3003d6dee11488.woff2 +0 -0
  1054. package/src/styles/fonts/noto-serif-tc/700/70861376e5d4f92f8aa7aa1b2749b617.woff2 +0 -0
  1055. package/src/styles/fonts/noto-serif-tc/700/7124d150570d39ced8d45507dc11ca1e.woff2 +0 -0
  1056. package/src/styles/fonts/noto-serif-tc/700/79a7fdf7d9c722b5723ae25e6ff8e203.woff2 +0 -0
  1057. package/src/styles/fonts/noto-serif-tc/700/8c8393bc875f1ee36697a2113f4421ea.woff2 +0 -0
  1058. package/src/styles/fonts/noto-serif-tc/700/8e6c9bb43afb8cbbff7cf1055e67c9bd.woff2 +0 -0
  1059. package/src/styles/fonts/noto-serif-tc/700/90ac4f9d2aa02afdace2843b49fc18bb.woff2 +0 -0
  1060. package/src/styles/fonts/noto-serif-tc/700/90b6f57d77847f512fd11db74fa912f1.woff2 +0 -0
  1061. package/src/styles/fonts/noto-serif-tc/700/913759e6690f9fc0746a20b96f4bdcb4.woff2 +0 -0
  1062. package/src/styles/fonts/noto-serif-tc/700/9154e26efe532a85a27d80902f5a2d6c.woff2 +0 -0
  1063. package/src/styles/fonts/noto-serif-tc/700/94e7ed67f1557b76fead6b6e456a0415.woff2 +0 -0
  1064. package/src/styles/fonts/noto-serif-tc/700/95127a92346c04fec1fa81d6295b0a28.woff2 +0 -0
  1065. package/src/styles/fonts/noto-serif-tc/700/9fbc06b2e3ff16b9d705c76db563ef17.woff2 +0 -0
  1066. package/src/styles/fonts/noto-serif-tc/700/a3b929542e6c5a0644b73a7c8a8b6c03.woff2 +0 -0
  1067. package/src/styles/fonts/noto-serif-tc/700/a8857f5d478f101c053ba02d2f223e90.woff2 +0 -0
  1068. package/src/styles/fonts/noto-serif-tc/700/aa64c9953af43ca65832f413895bb433.woff2 +0 -0
  1069. package/src/styles/fonts/noto-serif-tc/700/ada8f0241244c60ec8d3d59ad37f20a5.woff2 +0 -0
  1070. package/src/styles/fonts/noto-serif-tc/700/b341de0bc0bfe194a6c28dcfb566029e.woff2 +0 -0
  1071. package/src/styles/fonts/noto-serif-tc/700/b846c293981ca5429eabaa967f222f26.woff2 +0 -0
  1072. package/src/styles/fonts/noto-serif-tc/700/be64f9379412876e00fd3a0bfa6b6fe9.woff2 +0 -0
  1073. package/src/styles/fonts/noto-serif-tc/700/befed8a4fa817773fa7109db6fe07f56.woff2 +0 -0
  1074. package/src/styles/fonts/noto-serif-tc/700/c09ee2b219982f8d46ad9968b7e6e0ba.woff2 +0 -0
  1075. package/src/styles/fonts/noto-serif-tc/700/c39ec937c6a8d124e8b68cf829ea5ad4.woff2 +0 -0
  1076. package/src/styles/fonts/noto-serif-tc/700/c3fd21315345ae541f6e98067059fa19.woff2 +0 -0
  1077. package/src/styles/fonts/noto-serif-tc/700/c568a16e3168ceb1f191b70022c492ea.woff2 +0 -0
  1078. package/src/styles/fonts/noto-serif-tc/700/c5e66d60be3375835bbd8d6b797f6eac.woff2 +0 -0
  1079. package/src/styles/fonts/noto-serif-tc/700/cd10a3af2133805d8c92104d1ee6ff18.woff2 +0 -0
  1080. package/src/styles/fonts/noto-serif-tc/700/d15a3317942b7d31978a759fbf2222c8.woff2 +0 -0
  1081. package/src/styles/fonts/noto-serif-tc/700/d740dc2e854aaa7b3dcdd3ed25455eeb.woff2 +0 -0
  1082. package/src/styles/fonts/noto-serif-tc/700/d8325ba7ae651bc30440905bd67b95f1.woff2 +0 -0
  1083. package/src/styles/fonts/noto-serif-tc/700/e2204cf85edcb96c5de5c3dcf240da9d.woff2 +0 -0
  1084. package/src/styles/fonts/noto-serif-tc/700/e3e913e145ddcd9323b2a0972967feb6.woff2 +0 -0
  1085. package/src/styles/fonts/noto-serif-tc/700/f2fb1f1fbf7e44afb53c672ec286a22e.woff2 +0 -0
  1086. package/src/styles/fonts/noto-serif-tc/700/f372129c60aaece937cf7b91ee75c9b8.woff2 +0 -0
  1087. package/src/styles/fonts/noto-serif-tc/700/f5d7487963d43c89da63aaf10f2e6fb7.woff2 +0 -0
  1088. package/src/styles/fonts/noto-serif-tc/700/f75496953a40ff241178240209f56990.woff2 +0 -0
  1089. package/src/styles/fonts/noto-serif-tc/700/f92d74d1d217d21b39075ff23f79f7fd.woff2 +0 -0
  1090. package/src/styles/fonts/noto-serif-tc/700/f9d6d981d8b87b3e469027277f585741.woff2 +0 -0
  1091. package/src/styles/fonts/noto-serif-tc/700/fa8ed469ef290bfeb571418fe0abb628.woff2 +0 -0
  1092. package/src/styles/fonts/noto-serif-tc/700/fb61b690208eff56e6d8432951270901.woff2 +0 -0
  1093. package/src/styles/fonts/noto-serif-tc/700/ff0937ad63cda71ff420945ead55ab4d.woff2 +0 -0
  1094. package/src/styles/fonts/noto-serif-tc/noto-serif-tc.css +3104 -0
  1095. package/src/styles/tokens.css +42 -7
  1096. package/src/styles/ui.css +7586 -3401
  1097. package/src/types/app-context.ts +7 -0
  1098. package/src/types/bindings.ts +77 -27
  1099. package/src/types/config.ts +104 -4
  1100. package/src/types/constants.ts +43 -4
  1101. package/src/types/entities.ts +63 -4
  1102. package/src/types/operations.ts +45 -15
  1103. package/src/types/props.ts +46 -9
  1104. package/src/types/views.ts +51 -8
  1105. package/src/ui/__tests__/color-themes.test.ts +81 -0
  1106. package/src/ui/__tests__/font-themes.test.ts +76 -7
  1107. package/src/ui/color-themes.ts +424 -238
  1108. package/src/ui/compose/ComposeDialog.tsx +149 -91
  1109. package/src/ui/compose/ComposePrompt.tsx +20 -3
  1110. package/src/ui/dash/ActionButtons.tsx +16 -2
  1111. package/src/ui/dash/DangerZone.tsx +10 -1
  1112. package/src/ui/dash/StatusBadge.tsx +3 -3
  1113. package/src/ui/dash/appearance/AdvancedContent.tsx +9 -2
  1114. package/src/ui/dash/appearance/ColorThemeContent.tsx +326 -63
  1115. package/src/ui/dash/appearance/FontThemeContent.tsx +75 -17
  1116. package/src/ui/dash/appearance/NavigationContent.tsx +48 -21
  1117. package/src/ui/dash/settings/AccountContent.tsx +7 -2
  1118. package/src/ui/dash/settings/AccountMenuContent.tsx +242 -111
  1119. package/src/ui/dash/settings/ApiTokensContent.tsx +38 -8
  1120. package/src/ui/dash/settings/AvatarContent.tsx +1 -1
  1121. package/src/ui/dash/settings/DeleteAccountContent.tsx +300 -0
  1122. package/src/ui/dash/settings/GeneralContent.tsx +120 -6
  1123. package/src/ui/dash/settings/SessionsContent.tsx +23 -5
  1124. package/src/ui/dash/settings/SettingsDirectory.tsx +99 -0
  1125. package/src/ui/dash/settings/SettingsRootContent.tsx +176 -221
  1126. package/src/ui/feed/CuratedThreadPreview.tsx +73 -0
  1127. package/src/ui/feed/LinkCard.tsx +52 -36
  1128. package/src/ui/feed/NoteCard.tsx +10 -4
  1129. package/src/ui/feed/PostStatusBadges.tsx +4 -21
  1130. package/src/ui/feed/QuoteCard.tsx +11 -3
  1131. package/src/ui/feed/ThreadPreview.tsx +11 -5
  1132. package/src/ui/feed/TimelineFeed.tsx +53 -15
  1133. package/src/ui/feed/__tests__/timeline-cards.test.ts +172 -0
  1134. package/src/ui/feed/thread-preview-state.ts +2 -4
  1135. package/src/ui/font-themes.ts +211 -43
  1136. package/src/ui/layouts/BaseLayout.tsx +161 -30
  1137. package/src/ui/layouts/SiteLayout.tsx +51 -18
  1138. package/src/ui/layouts/__tests__/BaseLayout.test.tsx +169 -0
  1139. package/src/ui/pages/ArchivePage.tsx +320 -120
  1140. package/src/ui/pages/BrandPage.tsx +927 -0
  1141. package/src/ui/pages/CollectionEditorPage.tsx +155 -0
  1142. package/src/ui/pages/CollectionPage.tsx +410 -18
  1143. package/src/ui/pages/CollectionsPage.tsx +57 -57
  1144. package/src/ui/pages/FeaturedPage.tsx +24 -3
  1145. package/src/ui/pages/HomePage.tsx +13 -0
  1146. package/src/ui/pages/PostPage.tsx +13 -4
  1147. package/src/ui/pages/SearchPage.tsx +12 -2
  1148. package/src/ui/pages/ThemeSamplePage.tsx +1160 -0
  1149. package/src/ui/shared/AdminBreadcrumb.tsx +22 -6
  1150. package/src/ui/shared/CollectionDirectory.tsx +117 -0
  1151. package/src/ui/shared/CollectionsManager.tsx +277 -0
  1152. package/src/ui/shared/DecorativeQuoteMark.tsx +32 -0
  1153. package/src/ui/shared/HomePageBranding.tsx +22 -0
  1154. package/src/ui/shared/JantBrandMark.tsx +35 -0
  1155. package/src/ui/shared/MediaGallery.tsx +106 -36
  1156. package/src/ui/shared/PaginatedPageHeader.tsx +49 -0
  1157. package/src/ui/shared/Pagination.tsx +2 -6
  1158. package/src/ui/shared/PostFooter.tsx +130 -67
  1159. package/src/ui/shared/__tests__/home-page-branding.test.tsx +14 -0
  1160. package/src/ui/shared/__tests__/media-gallery.test.ts +82 -0
  1161. package/src/ui/shared/__tests__/navigation-labels.test.ts +103 -0
  1162. package/src/ui/shared/__tests__/pagination.test.ts +18 -1
  1163. package/src/ui/shared/__tests__/post-footer.test.ts +122 -0
  1164. package/src/ui/shared/collection-management-labels.ts +161 -0
  1165. package/src/ui/shared/navigation-labels.ts +126 -0
  1166. package/src/vendor/datastar.js +1955 -7
  1167. package/dist/client/assets/heic-to-DIRPI3VF.js +0 -1
  1168. package/dist/client/assets/module-RjUF93sV.js +0 -716
  1169. package/dist/client/assets/native-48B9X9Wg.js +0 -1
  1170. package/dist/client/assets/url-FWFqPJPb.js +0 -1
  1171. package/dist/client/client.css +0 -1
  1172. package/dist/client/client.js +0 -33565
  1173. package/src/client/components/collection-sidebar-types.ts +0 -43
  1174. package/src/client/tiptap/paste-image.ts +0 -129
  1175. package/src/lib/emoji-catalog.ts +0 -963
  1176. package/src/lib/icon-catalog.ts +0 -5213
  1177. package/src/ui/shared/CollectionsSidebar.tsx +0 -294
@@ -13,6 +13,13 @@ msgstr ""
13
13
  "Language-Team: \n"
14
14
  "Plural-Forms: \n"
15
15
 
16
+ #. @context: Link showing count of hidden thread posts between curated posts
17
+ #. placeholder {0}: segment.hiddenBeforeCount
18
+ #. placeholder {1}: segment.hiddenBeforeCount === 1 ? "post" : "posts"
19
+ #: src/ui/feed/CuratedThreadPreview.tsx
20
+ msgid "{0} hidden {1}"
21
+ msgstr "隐藏了 {0} 条"
22
+
16
23
  #. @context: Link showing count of hidden thread posts between root and latest
17
24
  #. placeholder {0}: hiddenCount === 1 ? "post" : "posts"
18
25
  #: src/ui/feed/ThreadPreview.tsx
@@ -27,7 +34,7 @@ msgstr "/* 在此添加自定义 CSS */"
27
34
  #. @context: Compose collection trigger label when multiple collections selected. %name% is the first collection name, %count% is how many more
28
35
  #: src/ui/compose/ComposeDialog.tsx
29
36
  msgid "%name% + %count% more"
30
- msgstr ""
37
+ msgstr "%name% + 另有 %count% 个"
31
38
 
32
39
  #. @context: Add alt text label under attachment thumbnail
33
40
  #: src/ui/compose/ComposeDialog.tsx
@@ -44,27 +51,104 @@ msgstr "301 (永久)"
44
51
  msgid "302 (Temporary)"
45
52
  msgstr "302 (临时)"
46
53
 
54
+ #. @context: Search snippet prefix on sample page
55
+ #: src/ui/pages/ThemeSamplePage.tsx
56
+ msgid "A calmer accent makes"
57
+ msgstr "更柔和的强调色会让"
58
+
59
+ #. @context: Excerpt for the sample note post
60
+ #. @context: Plain-text summary for the sample note post
61
+ #: src/ui/pages/ThemeSamplePage.tsx
62
+ #: src/ui/pages/ThemeSamplePage.tsx
63
+ msgid "A calmer, warmer accent makes the default theme feel quieter and more intentional."
64
+ msgstr "更平静、更温暖的强调色,让默认主题更安静,也更有分寸。"
65
+
66
+ #. @context: Section title for the usage guidance section on the brand asset page
67
+ #: src/ui/pages/BrandPage.tsx
68
+ msgid "A few simple rules."
69
+ msgstr "几条简单规则."
70
+
71
+ #. @context: Second paragraph on the sample detail article
72
+ #: src/ui/pages/ThemeSamplePage.tsx
73
+ msgid "A good default accent in Jant should feel like editorial structure, not product branding. That means links, emphasis, and thread cues can be visible without turning the page into UI chrome."
74
+ msgstr "Jant 中合适的默认强调应该更像编辑结构,而不是产品品牌化。这意味着链接、强调和帖子串提示可以可见,同时不会把页面变成界面装饰"
75
+
76
+ #. @context: Excerpt for the sample detail article
77
+ #. @context: Plain-text body fallback for the sample detail article
78
+ #. @context: Plain-text summary for the sample detail article
79
+ #: src/ui/pages/ThemeSamplePage.tsx
80
+ #: src/ui/pages/ThemeSamplePage.tsx
81
+ #: src/ui/pages/ThemeSamplePage.tsx
82
+ msgid "A long-form article sample for checking the default palette in a true reading context."
83
+ msgstr "用于在真实阅读环境中检查默认调色板的长篇文章示例。"
84
+
85
+ #. @context: Subheading in the sample detail article
86
+ #: src/ui/pages/ThemeSamplePage.tsx
87
+ msgid "A practical checklist"
88
+ msgstr "实用清单"
89
+
90
+ #. @context: Excerpt for the sample quote post
91
+ #. @context: Plain-text summary for the sample quote post
92
+ #: src/ui/pages/ThemeSamplePage.tsx
93
+ #: src/ui/pages/ThemeSamplePage.tsx
94
+ msgid "A quote card for judging accent color against softer, citation-heavy content."
95
+ msgstr "用于在更柔和、引用密集的内容上评估强调色的引用卡片。"
96
+
97
+ #. @context: Description for the square logo PNG asset card
98
+ #: src/ui/pages/BrandPage.tsx
99
+ msgid "A ready-made 1:1 PNG for decks, mockups, directories, and other square placements."
100
+ msgstr "现成的 1:1 PNG,适用于演示文稿、样机、名录及其他方形展示场景。"
101
+
102
+ #. @context: Excerpt for the sample link post
103
+ #. @context: Plain-text summary for the sample link post
104
+ #: src/ui/pages/ThemeSamplePage.tsx
105
+ #: src/ui/pages/ThemeSamplePage.tsx
106
+ msgid "A reference link for checking whether the accent feels editorial instead of promotional."
107
+ msgstr "用于检查语气是否偏向编辑性而非宣传性的参考链接"
108
+
47
109
  #. @context: Help text for site description field
48
110
  #: src/ui/dash/settings/GeneralContent.tsx
49
111
  msgid "A short intro for search engines and feed readers. Plain text only."
50
112
  msgstr "供搜索引擎和订阅源阅读器使用的简短简介。仅限纯文本。"
51
113
 
114
+ #. @context: Description for the brand pack card
115
+ #: src/ui/pages/BrandPage.tsx
116
+ msgid "A single ZIP with the main logo, reverse logo, square PNG, rounded, square, and circle tiles, plus favicon, Apple touch icon, and social preview image."
117
+ msgstr "一个 ZIP 文件,包含主标志、反向标志、方形 PNG、圆角方形和圆形图块,以及 favicon、Apple Touch 图标和社交预览图片。"
118
+
119
+ #. @context: Main sample article title
120
+ #: src/ui/pages/ThemeSamplePage.tsx
121
+ msgid "A softer blue feels more like ink than product chrome."
122
+ msgstr "较柔和的蓝色感觉更像墨水,而不是产品镀铬的光泽。"
123
+
52
124
  #. @context: Settings form field for site description
53
125
  #: src/ui/dash/settings/GeneralContent.tsx
54
126
  msgid "About this blog"
55
127
  msgstr "关于此博客"
56
128
 
129
+ #. @context: Thread helper text on sample page
130
+ #: src/ui/pages/ThemeSamplePage.tsx
131
+ msgid "Accent should feel present, not loud."
132
+ msgstr "强调色应当有存在感,但不要太刺眼。"
133
+
134
+ #. @context: Page title for the account settings menu
57
135
  #. @context: Settings group label for account settings
58
136
  #. @context: Settings item — account settings
137
+ #: src/ui/dash/settings/AccountMenuContent.tsx
59
138
  #: src/ui/dash/settings/SettingsRootContent.tsx
60
139
  #: src/ui/dash/settings/SettingsRootContent.tsx
61
140
  msgid "Account"
62
141
  msgstr "账户"
63
142
 
143
+ #. @context: Error shown when account deletion is blocked in demo mode
144
+ #: src/routes/dash/settings.tsx
145
+ msgid "Account deletion is off in demo mode. The shared demo resets separately."
146
+ msgstr "演示模式下不提供删除账户。共享演示会单独重置。"
147
+
64
148
  #. @context: Settings section heading for active sessions
65
149
  #: src/ui/dash/settings/SessionsContent.tsx
66
150
  msgid "Active Sessions"
67
- msgstr ""
151
+ msgstr "活动会话"
68
152
 
69
153
  #. @context: Heading for list of active API tokens
70
154
  #: src/ui/dash/settings/ApiTokensContent.tsx
@@ -81,6 +165,21 @@ msgstr "添加"
81
165
  msgid "Add a custom link to any URL"
82
166
  msgstr "添加指向任意 URL 的自定义链接"
83
167
 
168
+ #. @context: Description for the RSS system navigation toggle
169
+ #: src/ui/shared/navigation-labels.ts
170
+ msgid "Add a link to your main RSS feed. Change what /feed returns in General."
171
+ msgstr "添加指向主 RSS feed 的链接。可在通用设置中修改 /feed 的输出内容。"
172
+
173
+ #. @context: Compose link title required error
174
+ #: src/ui/compose/ComposeDialog.tsx
175
+ msgid "Add a title before posting this link."
176
+ msgstr "先补上标题,再发布这条链接。"
177
+
178
+ #. @context: Compose link URL required error
179
+ #: src/ui/compose/ComposeDialog.tsx
180
+ msgid "Add a URL before posting this link."
181
+ msgstr "先补上 URL,再发布这条链接。"
182
+
84
183
  #. @context: Alt text panel title
85
184
  #: src/ui/compose/ComposeDialog.tsx
86
185
  msgid "Add alt text"
@@ -89,7 +188,7 @@ msgstr "添加替代文本"
89
188
  #. @context: Action to create a new collection from compose
90
189
  #: src/ui/compose/ComposeDialog.tsx
91
190
  msgid "Add Collection"
92
- msgstr "添加集合"
191
+ msgstr "添加合集"
93
192
 
94
193
  #. @context: Custom CSS settings description
95
194
  #: src/ui/dash/appearance/AdvancedContent.tsx
@@ -101,11 +200,6 @@ msgstr "添加自定义 CSS 来覆盖任何样式。使用诸如 [data-page], [d
101
200
  msgid "Add custom link to navigation"
102
201
  msgstr "向导航添加自定义链接"
103
202
 
104
- #. @context: Menu action to add a divider
105
- #: src/ui/shared/CollectionsSidebar.tsx
106
- msgid "Add Divider"
107
- msgstr "添加分隔线"
108
-
109
203
  #. @context: Button and heading for adding custom link
110
204
  #: src/ui/dash/appearance/NavigationContent.tsx
111
205
  msgid "Add Link"
@@ -124,7 +218,7 @@ msgstr "所有可用的端点和请求格式。"
124
218
  #. @context: Archive filter - collection dropdown default
125
219
  #: src/ui/pages/ArchivePage.tsx
126
220
  msgid "All collections"
127
- msgstr "所有集合"
221
+ msgstr "所有合集"
128
222
 
129
223
  #. @context: Archive filter - all formats select option
130
224
  #: src/ui/pages/ArchivePage.tsx
@@ -134,13 +228,43 @@ msgstr "所有格式"
134
228
  #. @context: Archive filter - all visibility select option
135
229
  #: src/ui/pages/ArchivePage.tsx
136
230
  msgid "All visibility"
137
- msgstr ""
231
+ msgstr "所有可见性"
138
232
 
139
233
  #. @context: Archive filter - year dropdown default
140
234
  #: src/ui/pages/ArchivePage.tsx
141
235
  msgid "All years"
142
236
  msgstr "所有年份"
143
237
 
238
+ #. @context: Checkbox for allowing search engine indexing
239
+ #: src/ui/dash/settings/GeneralContent.tsx
240
+ msgid "Allow search engines to index my site"
241
+ msgstr "允许搜索引擎收录我的网站"
242
+
243
+ #. @context: Theme mode option description
244
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
245
+ msgid "Always show the dark version of the theme."
246
+ msgstr "始终显示主题的深色版本。"
247
+
248
+ #. @context: Theme mode option description
249
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
250
+ msgid "Always show the light version of the theme."
251
+ msgstr "始终显示主题的浅色版本。"
252
+
253
+ #. @context: Alt text for the sample detail article image
254
+ #: src/ui/pages/ThemeSamplePage.tsx
255
+ msgid "An abstract editorial layout in warm paper colors"
256
+ msgstr "以温暖纸色调呈现的抽象社论布局"
257
+
258
+ #. @context: Button label for opening the hidden collection list in the post footer
259
+ #: src/ui/shared/PostFooter.tsx
260
+ msgid "and {count} more"
261
+ msgstr "以及另外 {count} 个"
262
+
263
+ #. @context: Sample link post body suffix on the theme sample page
264
+ #: src/ui/pages/ThemeSamplePage.tsx
265
+ msgid "and checking whether the accent is guiding attention or pulling too hard."
266
+ msgstr "并检查强调色是在引导注意力还是过于抢眼。"
267
+
144
268
  #. @context: Link to API documentation
145
269
  #: src/ui/dash/settings/ApiTokensContent.tsx
146
270
  msgid "API reference"
@@ -153,16 +277,40 @@ msgstr "API 文档"
153
277
  msgid "API Tokens"
154
278
  msgstr "API 令牌"
155
279
 
280
+ #. @context: Settings group label for design settings
281
+ #: src/ui/dash/settings/SettingsRootContent.tsx
282
+ msgid "Appearance"
283
+ msgstr "外观"
284
+
285
+ #. @context: Compose publish settings help text for public visibility
286
+ #: src/ui/compose/ComposeDialog.tsx
287
+ msgid "Appears in Latest."
288
+ msgstr "会出现在 Latest 中。"
289
+
290
+ #. @context: Title for the apple touch icon asset card
291
+ #: src/ui/pages/BrandPage.tsx
292
+ msgid "Apple touch icon"
293
+ msgstr "Apple Touch 图标"
294
+
156
295
  #. @context: Appearance settings description
157
296
  #: src/ui/dash/appearance/ColorThemeContent.tsx
158
- msgid "Applies to your entire site, including admin pages. All themes support dark mode."
159
- msgstr "应用于整个站点,包括管理页面。所有主题都支持深色模式。"
297
+ msgid "Applies to your entire site, including admin pages. Pick a palette, then choose whether it follows the system or stays fixed."
298
+ msgstr "应用到整个站点,包括管理页面。先选择配色,再决定是跟随系统还是固定模式。"
160
299
 
161
300
  #. @context: Archive page title
301
+ #. @context: Built-in navigation label for the archive page
302
+ #. @context: Inactive nav link label on sample page
162
303
  #: src/ui/pages/ArchivePage.tsx
304
+ #: src/ui/pages/ThemeSamplePage.tsx
305
+ #: src/ui/shared/navigation-labels.ts
163
306
  msgid "Archive"
164
307
  msgstr "归档"
165
308
 
309
+ #. @context: Section heading for the detail article sample on the theme sample page
310
+ #: src/ui/pages/ThemeSamplePage.tsx
311
+ msgid "Article detail page"
312
+ msgstr "文章详情页"
313
+
166
314
  #. @context: Archive media filter - audio
167
315
  #: src/ui/pages/ArchivePage.tsx
168
316
  msgid "Audio"
@@ -183,10 +331,17 @@ msgstr "未设置身份验证。请检查您的服务器配置。"
183
331
  msgid "Author (optional)"
184
332
  msgstr "作者(可选)"
185
333
 
334
+ #. @context: Theme mode option label
335
+ #. @context: Theme mode option on sample page
336
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
337
+ #: src/ui/pages/ThemeSamplePage.tsx
338
+ msgid "Auto"
339
+ msgstr "自动"
340
+
186
341
  #. @context: Description after theming guide link on Custom CSS page
187
342
  #: src/ui/dash/appearance/AdvancedContent.tsx
188
343
  msgid "available CSS variables, data attributes, and examples."
189
- msgstr ""
344
+ msgstr "可用的 CSS 变量、数据属性和示例."
190
345
 
191
346
  #. @context: Settings item — avatar settings
192
347
  #: src/ui/dash/settings/SettingsRootContent.tsx
@@ -200,22 +355,94 @@ msgstr "头像"
200
355
  msgid "Avatar display updated."
201
356
  msgstr "头像显示已更新。"
202
357
 
358
+ #. @context: Usage label for the circle tile asset card
359
+ #: src/ui/pages/BrandPage.tsx
360
+ msgid "Avatar-ready"
361
+ msgstr "头像可用"
362
+
203
363
  #. @context: Link back from the new post page
204
364
  #: src/ui/pages/ComposePage.tsx
205
365
  msgid "Back"
206
- msgstr ""
366
+ msgstr "返回"
367
+
368
+ #. @context: Link to backup and restore documentation from account settings
369
+ #: src/ui/dash/settings/AccountMenuContent.tsx
370
+ msgid "Backup & Restore Guide"
371
+ msgstr "备份与恢复指南"
207
372
 
208
373
  #. @context: Settings item description for API tokens
209
374
  #: src/ui/dash/settings/SettingsRootContent.tsx
210
375
  msgid "Bearer tokens for scripts and automation"
211
376
  msgstr "用于脚本和自动化的 Bearer 令牌"
212
377
 
378
+ #. @context: Sample note post body suffix on the theme sample page
379
+ #: src/ui/pages/ThemeSamplePage.tsx
380
+ msgid "before deciding whether the accent is carrying too much product energy."
381
+ msgstr "再判断这个强调色是否带上了过多产品化的气息。"
382
+
383
+ #. @context: Step 1 description for site export before account deletion
384
+ #: src/ui/dash/settings/DeleteAccountContent.tsx
385
+ msgid "Before deleting, download a site export. You won't be able to recover this account after deletion."
386
+ msgstr "删除之前先下载站点导出。删除后将无法恢复这个账户。"
387
+
213
388
  #. @context: Settings section heading for avatar
214
389
  #: src/ui/dash/settings/AvatarContent.tsx
215
390
  msgid "Blog Avatar"
216
391
  msgstr "博客头像"
217
392
 
218
- #. @context: Button to cancel form
393
+ #. @context: Browser page title for the public brand asset page
394
+ #. @context: Eyebrow on the public brand asset page
395
+ #: src/routes/pages/brand.tsx
396
+ #: src/ui/pages/BrandPage.tsx
397
+ msgid "Brand assets"
398
+ msgstr "品牌素材"
399
+
400
+ #. @context: Title for the brand pack card
401
+ #. @context: Title for the brand pack card
402
+ #: src/ui/pages/BrandPage.tsx
403
+ #: src/ui/pages/BrandPage.tsx
404
+ msgid "Brand pack"
405
+ msgstr "品牌包"
406
+
407
+ #. @context: Asset keyword on the public brand asset page
408
+ #. @context: Title for the brand tile asset card
409
+ #: src/ui/pages/BrandPage.tsx
410
+ #: src/ui/pages/BrandPage.tsx
411
+ msgid "Brand tile"
412
+ msgstr "品牌卡片"
413
+
414
+ #. @context: Breadcrumb label on collection detail page
415
+ #. @context: Breadcrumb label on collection editor page
416
+ #: src/ui/pages/CollectionEditorPage.tsx
417
+ #: src/ui/pages/CollectionPage.tsx
418
+ msgid "Breadcrumb"
419
+ msgstr "面包屑导航"
420
+
421
+ #. @context: Secondary hero button label to jump to the file list
422
+ #: src/ui/pages/BrandPage.tsx
423
+ msgid "Browse files"
424
+ msgstr "浏览文件"
425
+
426
+ #. @context: Usage label for the favicon asset card
427
+ #: src/ui/pages/BrandPage.tsx
428
+ msgid "Browser tab"
429
+ msgstr "浏览器标签页"
430
+
431
+ #. @context: Usage label for the brand tile asset card
432
+ #: src/ui/pages/BrandPage.tsx
433
+ msgid "Built-in background"
434
+ msgstr "内置背景"
435
+
436
+ #. @context: Sample note post second paragraph on the theme sample page
437
+ #: src/ui/pages/ThemeSamplePage.tsx
438
+ msgid "Buttons can stay steady, but links, thread markers, and subtle emphasis should feel closer to ink on paper than dashboard chrome."
439
+ msgstr "按钮可以保持稳重,但链接、帖子串标记和细微的强调应该更像纸上的墨迹,而不是仪表盘的装饰"
440
+
441
+ #. @context: Button label to dismiss a dialog or action
442
+ #. @context: Button label to dismiss a dialog or action
443
+ #. @context: Button label to dismiss a dialog or action
444
+ #. @context: Button label to dismiss a dialog or action
445
+ #. @context: Button label to dismiss a dialog or action
219
446
  #. @context: Button to cancel form
220
447
  #. @context: Button to cancel form
221
448
  #. @context: Button to cancel settings changes
@@ -225,10 +452,14 @@ msgstr "博客头像"
225
452
  #: src/routes/dash/custom-urls.tsx
226
453
  #: src/ui/compose/ComposeDialog.tsx
227
454
  #: src/ui/compose/ComposeDialog.tsx
228
- #: src/ui/compose/ComposeDialog.tsx
455
+ #: src/ui/dash/ActionButtons.tsx
456
+ #: src/ui/dash/DangerZone.tsx
457
+ #: src/ui/dash/settings/ApiTokensContent.tsx
229
458
  #: src/ui/dash/settings/AvatarContent.tsx
459
+ #: src/ui/dash/settings/DeleteAccountContent.tsx
230
460
  #: src/ui/dash/settings/GeneralContent.tsx
231
- #: src/ui/shared/CollectionsSidebar.tsx
461
+ #: src/ui/shared/collection-management-labels.ts
462
+ #: src/ui/shared/collection-management-labels.ts
232
463
  msgid "Cancel"
233
464
  msgstr "取消"
234
465
 
@@ -239,41 +470,124 @@ msgstr "取消"
239
470
  msgid "Change Password"
240
471
  msgstr "修改密码"
241
472
 
242
- #. @context: Settings item description for password change
243
- #: src/ui/dash/settings/AccountMenuContent.tsx
244
- msgid "Change your sign-in password"
245
- msgstr "更改您的登录密码"
473
+ #. @context: Warning shown when changing the canonical RSS feed selection
474
+ #: src/ui/dash/settings/GeneralContent.tsx
475
+ msgid "Changing this updates what subscribers get from /feed."
476
+ msgstr "修改后,订阅 /feed 的用户会收到不同内容。"
246
477
 
247
- #. @context: Font theme settings description
248
- #: src/ui/dash/appearance/FontThemeContent.tsx
249
- msgid "Choose a font pairing for your site. All options use system fonts for fast loading."
250
- msgstr "为您的站点选择一种字体搭配。所有选项均使用系统字体以实现快速加载。"
478
+ #. @context: Compose custom slug helper while checking whether a manual slug is available
479
+ #: src/ui/compose/ComposeDialog.tsx
480
+ msgid "Checking link..."
481
+ msgstr "正在检查链接..."
251
482
 
252
483
  #. @context: Password reset page description
253
484
  #: src/routes/auth/reset.tsx
254
485
  msgid "Choose a new password."
255
486
  msgstr "设置新密码."
256
487
 
488
+ #. @context: Font theme settings description
489
+ #: src/ui/dash/appearance/FontThemeContent.tsx
490
+ msgid "Choose a typographic direction for your site. Each theme changes both the font pairing and the reading rhythm."
491
+ msgstr "为你的站点选择一种排版方向。每个主题都会同时改变字体搭配和阅读节奏。"
492
+
493
+ #. @context: Body copy for the logo downloads section
494
+ #: src/ui/pages/BrandPage.tsx
495
+ msgid "Choose the standard logo for most placements and the reverse logo when you need more contrast."
496
+ msgstr "在大多数场景选择标准徽标,需要更高对比度时选择反色徽标。"
497
+
498
+ #. @context: Guidance body on the brand asset page
499
+ #: src/ui/pages/BrandPage.tsx
500
+ msgid "Choose the standard logo for websites, docs, directories, and editorial layouts."
501
+ msgstr "为网站、文档、名录和编辑版面选择标准徽标."
502
+
503
+ #. @context: Asset keyword on the public brand asset page
504
+ #. @context: Title for the circle tile asset card
505
+ #: src/ui/pages/BrandPage.tsx
506
+ #: src/ui/pages/BrandPage.tsx
507
+ msgid "Circle tile"
508
+ msgstr "圆形图块"
509
+
510
+ #. @context: Archive filter button label to clear the active filter
511
+ #. @context: Archive filter button label to clear the active filter
512
+ #: src/ui/pages/ArchivePage.tsx
513
+ #: src/ui/pages/ArchivePage.tsx
514
+ msgid "Clear filter"
515
+ msgstr "清除筛选"
516
+
517
+ #. @context: Singular collection count label
518
+ #. @context: Singular collection count label
519
+ #. @context: Singular collection count label
520
+ #: src/ui/pages/CollectionsPage.tsx
521
+ #: src/ui/shared/CollectionsManager.tsx
522
+ #: src/ui/shared/CollectionsManager.tsx
523
+ msgid "collection"
524
+ msgstr "个合集"
525
+
257
526
  #. @context: Compose collection selector trigger label
527
+ #. @context: Custom URL target type badge for a collection
258
528
  #. @context: Custom URL type option
259
529
  #: src/routes/dash/custom-urls.tsx
530
+ #: src/routes/dash/custom-urls.tsx
260
531
  #: src/ui/compose/ComposeDialog.tsx
261
532
  msgid "Collection"
262
- msgstr "集合"
533
+ msgstr "合集"
263
534
 
535
+ #. @context: Toast shown after creating a collection
536
+ #: src/ui/shared/collection-management-labels.ts
537
+ msgid "Collection created."
538
+ msgstr "合集已创建。"
539
+
540
+ #. @context: Toast after deleting a collection
541
+ #: src/ui/shared/collection-management-labels.ts
542
+ msgid "Collection deleted."
543
+ msgstr "合集已删除。"
544
+
545
+ #. @context: Collection form field
546
+ #: src/ui/shared/collection-management-labels.ts
547
+ msgid "Collection link"
548
+ msgstr "合集链接"
549
+
550
+ #. @context: Toast after reordering collections
551
+ #: src/ui/shared/CollectionsManager.tsx
552
+ msgid "Collection order updated."
553
+ msgstr "合集排序已更新。"
554
+
555
+ #. @context: Toast after saving a collection
556
+ #: src/ui/shared/collection-management-labels.ts
557
+ msgid "Collection saved."
558
+ msgstr "合集已保存。"
559
+
560
+ #. @context: Plural collection count label
561
+ #. @context: Plural collection count label
562
+ #. @context: Plural collection count label
563
+ #: src/ui/pages/CollectionsPage.tsx
564
+ #: src/ui/shared/CollectionsManager.tsx
565
+ #: src/ui/shared/CollectionsManager.tsx
566
+ msgid "collections"
567
+ msgstr "个合集"
568
+
569
+ #. @context: Breadcrumb link to collections page
570
+ #. @context: Breadcrumb link to collections page
571
+ #. @context: Built-in navigation label for the collections page
264
572
  #. @context: Collections page heading
265
- #. @context: Sidebar heading for collections nav
266
- #. @context: Sidebar heading for collections nav
573
+ #. @context: Collections page heading
574
+ #. @context: Inactive nav link label on sample page
575
+ #: src/ui/pages/CollectionEditorPage.tsx
576
+ #: src/ui/pages/CollectionPage.tsx
267
577
  #: src/ui/pages/CollectionsPage.tsx
268
- #: src/ui/shared/CollectionsSidebar.tsx
269
- #: src/ui/shared/CollectionsSidebar.tsx
578
+ #: src/ui/pages/ThemeSamplePage.tsx
579
+ #: src/ui/shared/CollectionsManager.tsx
580
+ #: src/ui/shared/navigation-labels.ts
270
581
  msgid "Collections"
271
- msgstr "集合"
582
+ msgstr "合集"
583
+
584
+ #. @context: Alert title on theme sample page
585
+ #: src/ui/pages/ThemeSamplePage.tsx
586
+ msgid "Color check"
587
+ msgstr "颜色检查"
272
588
 
273
589
  #. @context: Appearance settings heading
274
- #. @context: Settings item description for color theme
275
590
  #: src/ui/dash/appearance/ColorThemeContent.tsx
276
- #: src/ui/dash/settings/SettingsRootContent.tsx
277
591
  msgid "Color theme"
278
592
  msgstr "颜色主题"
279
593
 
@@ -282,11 +596,21 @@ msgstr "颜色主题"
282
596
  msgid "Color Theme"
283
597
  msgstr "颜色主题"
284
598
 
599
+ #. @context: Inline link label in the sample detail article
600
+ #: src/ui/pages/ThemeSamplePage.tsx
601
+ msgid "Compare it against the theme controls"
602
+ msgstr "与主题控件比较"
603
+
285
604
  #. @context: Setup form submit button
286
605
  #: src/routes/auth/setup.tsx
287
606
  msgid "Complete Setup"
288
607
  msgstr "完成设置"
289
608
 
609
+ #. @context: Step 2 heading — user must type confirmation phrase
610
+ #: src/ui/dash/settings/DeleteAccountContent.tsx
611
+ msgid "Confirm account deletion"
612
+ msgstr "确认删除账号"
613
+
290
614
  #. @context: Password form field
291
615
  #: src/ui/dash/settings/AccountContent.tsx
292
616
  msgid "Confirm New Password"
@@ -297,11 +621,21 @@ msgstr "确认新密码"
297
621
  msgid "Confirm Password"
298
622
  msgstr "确认密码"
299
623
 
624
+ #. @context: Controls section heading on sample page
625
+ #: src/ui/pages/ThemeSamplePage.tsx
626
+ msgid "Controls"
627
+ msgstr "控件"
628
+
300
629
  #. @context: Feedback after copying API token
301
630
  #: src/ui/dash/settings/ApiTokensContent.tsx
302
631
  msgid "Copied"
303
632
  msgstr "已复制"
304
633
 
634
+ #. @context: Button to copy a URL to the clipboard
635
+ #: src/ui/dash/settings/GeneralContent.tsx
636
+ msgid "Copy"
637
+ msgstr "复制"
638
+
305
639
  #. @context: Button to copy API token to clipboard
306
640
  #. @context: Button to copy API token to clipboard
307
641
  #: src/ui/dash/settings/ApiTokensContent.tsx
@@ -314,8 +648,15 @@ msgstr "复制令牌"
314
648
  msgid "Copy your token now — it won't be shown again."
315
649
  msgstr "现在复制你的令牌 — 它将不再显示。"
316
650
 
651
+ #. @context: Error toast when copying text to the clipboard fails
652
+ #: src/ui/dash/settings/GeneralContent.tsx
653
+ msgid "Could not copy. Try again."
654
+ msgstr "无法复制,请重试。"
655
+
317
656
  #. @context: Error toast when account creation fails
318
657
  #. @context: Error toast when account creation fails
658
+ #. @context: Error toast when account creation fails
659
+ #: src/routes/auth/setup.tsx
319
660
  #: src/routes/auth/setup.tsx
320
661
  #: src/routes/auth/setup.tsx
321
662
  msgid "Couldn't create your account. Check the details and try again."
@@ -334,14 +675,14 @@ msgstr "无法发布. 已保存为草稿."
334
675
  #. @context: Error toast when nav save fails
335
676
  #. @context: Toast when save fails
336
677
  #: src/ui/dash/appearance/NavigationContent.tsx
337
- #: src/ui/shared/CollectionsSidebar.tsx
678
+ #: src/ui/shared/collection-management-labels.ts
338
679
  msgid "Couldn't save. Try again in a moment."
339
680
  msgstr "保存失败。请稍后再试。"
340
681
 
341
682
  #. @context: Compose collection combobox empty state when no collections exist
342
683
  #: src/ui/compose/ComposeDialog.tsx
343
684
  msgid "Create a collection to get started."
344
- msgstr "创建集合以开始。"
685
+ msgstr "创建一个合集即可开始。"
345
686
 
346
687
  #. @context: Label for curl example
347
688
  #: src/ui/dash/settings/ApiTokensContent.tsx
@@ -367,7 +708,7 @@ msgstr "创建于 {0}"
367
708
  #. @context: Badge indicating the current active session
368
709
  #: src/ui/dash/settings/SessionsContent.tsx
369
710
  msgid "Current"
370
- msgstr ""
711
+ msgstr "当前"
371
712
 
372
713
  #. @context: Password form field
373
714
  #: src/ui/dash/settings/AccountContent.tsx
@@ -379,6 +720,11 @@ msgstr "当前密码"
379
720
  msgid "Current password doesn't match. Try again."
380
721
  msgstr "当前密码不匹配。请重试。"
381
722
 
723
+ #. @context: Thread item label on sample page
724
+ #: src/ui/pages/ThemeSamplePage.tsx
725
+ msgid "Current post"
726
+ msgstr "当前帖子"
727
+
382
728
  #. @context: Appearance settings heading for custom CSS
383
729
  #. @context: Link to Custom CSS settings from color theme page
384
730
  #. @context: Settings item — custom CSS settings
@@ -391,12 +737,12 @@ msgstr "自定义 CSS"
391
737
  #. @context: Toast after saving custom CSS
392
738
  #: src/routes/dash/settings.tsx
393
739
  msgid "Custom CSS updated."
394
- msgstr "自定义 CSS 已更新."
740
+ msgstr "自定义 CSS 已更新。"
395
741
 
396
- #. @context: Settings item description for custom CSS
397
- #: src/ui/dash/settings/SettingsRootContent.tsx
398
- msgid "Custom styling"
399
- msgstr "自定义样式"
742
+ #. @context: Compose publish settings slug section label
743
+ #: src/ui/compose/ComposeDialog.tsx
744
+ msgid "Custom link"
745
+ msgstr "自定义链接"
400
746
 
401
747
  #. @context: Settings item — custom URL settings
402
748
  #. @context: Settings section heading
@@ -405,15 +751,60 @@ msgstr "自定义样式"
405
751
  msgid "Custom URLs"
406
752
  msgstr "自定义 URL"
407
753
 
754
+ #. @context: Destructive badge label on sample page
755
+ #: src/ui/pages/ThemeSamplePage.tsx
756
+ msgid "Danger"
757
+ msgstr "危险"
758
+
408
759
  #. @context: Section heading for dangerous/destructive actions
760
+ #. @context: Settings group label for destructive account actions
761
+ #. @context: Settings group label for destructive account actions
409
762
  #: src/ui/dash/DangerZone.tsx
763
+ #: src/ui/dash/settings/AccountMenuContent.tsx
764
+ #: src/ui/dash/settings/AccountMenuContent.tsx
410
765
  msgid "Danger Zone"
411
766
  msgstr "危险区"
412
767
 
768
+ #. @context: Theme mode option label
769
+ #. @context: Theme mode option on sample page
770
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
771
+ #: src/ui/pages/ThemeSamplePage.tsx
772
+ msgid "Dark"
773
+ msgstr "深色"
774
+
775
+ #. @context: Usage label for the reverse logo asset card
776
+ #. @context: Usage label for the reverse logo card
777
+ #: src/ui/pages/BrandPage.tsx
778
+ #: src/ui/pages/BrandPage.tsx
779
+ msgid "Dark backgrounds"
780
+ msgstr "深色背景"
781
+
413
782
  #. @context: Settings group label for data export/import
414
783
  #: src/ui/dash/settings/AccountMenuContent.tsx
415
784
  msgid "Data"
416
- msgstr ""
785
+ msgstr "数据"
786
+
787
+ #. @context: Badge label on sample page
788
+ #. @context: Usage label for the default logo asset card
789
+ #: src/ui/pages/BrandPage.tsx
790
+ #: src/ui/pages/ThemeSamplePage.tsx
791
+ msgid "Default"
792
+ msgstr "默认"
793
+
794
+ #. @context: Usage label for the default logo card
795
+ #: src/ui/pages/BrandPage.tsx
796
+ msgid "Default logo"
797
+ msgstr "默认徽标"
798
+
799
+ #. @context: Inline link label in the sample link post body
800
+ #: src/ui/pages/ThemeSamplePage.tsx
801
+ msgid "default note sample"
802
+ msgstr "默认笔记示例"
803
+
804
+ #. @context: Description for the social preview image asset card
805
+ #: src/ui/pages/BrandPage.tsx
806
+ msgid "Default preview image for social shares and link unfurls."
807
+ msgstr "用于社交分享和链接展开的默认预览图片。"
417
808
 
418
809
  #. @context: Button to delete custom URL
419
810
  #. @context: Button to delete item
@@ -422,47 +813,83 @@ msgstr ""
422
813
  #: src/routes/dash/custom-urls.tsx
423
814
  #: src/ui/dash/ActionButtons.tsx
424
815
  #: src/ui/dash/appearance/NavigationContent.tsx
425
- #: src/ui/shared/CollectionsSidebar.tsx
816
+ #: src/ui/shared/collection-management-labels.ts
426
817
  msgid "Delete"
427
818
  msgstr "删除"
428
819
 
820
+ #. @context: Page title for account deletion
821
+ #. @context: Settings item — delete account and all data
822
+ #: src/ui/dash/settings/AccountMenuContent.tsx
823
+ #: src/ui/dash/settings/DeleteAccountContent.tsx
824
+ msgid "Delete Account"
825
+ msgstr "删除账户"
826
+
827
+ #. @context: Final destructive button to delete account and all data
828
+ #: src/ui/dash/settings/DeleteAccountContent.tsx
829
+ msgid "Delete Account Permanently"
830
+ msgstr "永久删除账号"
831
+
429
832
  #. @context: Draft item action
430
833
  #: src/ui/compose/ComposeDialog.tsx
431
834
  msgid "Delete Draft"
432
835
  msgstr "删除草稿"
433
836
 
837
+ #. @context: Settings item — open the hosted site danger zone in the control plane
838
+ #: src/ui/dash/settings/AccountMenuContent.tsx
839
+ msgid "Delete Hosted Site"
840
+ msgstr "删除托管站点"
841
+
842
+ #. @context: Final browser confirm dialog before account deletion
843
+ #: src/ui/dash/settings/DeleteAccountContent.tsx
844
+ msgid "Delete this blog permanently? This cannot be undone."
845
+ msgstr "永久删除此博客?此操作不可恢复。"
846
+
434
847
  #. @context: Confirm dialog for deleting a collection
435
- #: src/ui/shared/CollectionsSidebar.tsx
848
+ #: src/ui/shared/collection-management-labels.ts
436
849
  msgid "Delete this collection permanently? Posts inside won't be removed."
437
- msgstr "永久删除此收藏集?其中的帖子不会被删除。"
438
-
439
- #. @context: Toast after deleting a collection
440
- #: src/ui/shared/CollectionsSidebar.tsx
441
- msgid "Deleted"
442
- msgstr "已删除"
850
+ msgstr "永久删除这个合集?里面的帖子不会被删除。"
443
851
 
444
852
  #. @context: Hint shown on signin page when demo credentials are pre-filled
445
853
  #: src/routes/auth/signin.tsx
446
854
  msgid "Demo credentials are pre-filled — hit Sign In to continue."
447
855
  msgstr "演示凭证已预填 — 点击 登录 继续."
448
856
 
857
+ #. @context: Notice shown on the account page when demo restrictions are enabled
858
+ #: src/ui/dash/settings/AccountMenuContent.tsx
859
+ msgid "Demo mode hides sessions, password changes, and account deletion. Export still works."
860
+ msgstr "演示模式下会隐藏会话、密码修改和删除账户。导出仍可使用。"
861
+
862
+ #. @context: Help text explaining that SEO indexing is locked in demo mode
863
+ #: src/ui/dash/settings/GeneralContent.tsx
864
+ msgid "Demo sites always stay hidden from search engines."
865
+ msgstr "演示站点会始终对搜索引擎隐藏。"
866
+
449
867
  #. @context: Alt text textarea placeholder
450
868
  #: src/ui/compose/ComposeDialog.tsx
451
869
  msgid "Describe this for people with visual impairments..."
452
870
  msgstr "为视力受限的人描述此图像..."
453
871
 
454
872
  #. @context: Collection form field
455
- #. @context: Collection form field
456
- #: src/ui/compose/ComposeDialog.tsx
457
- #: src/ui/shared/CollectionsSidebar.tsx
873
+ #: src/ui/shared/collection-management-labels.ts
458
874
  msgid "Description (optional)"
459
875
  msgstr "描述(可选)"
460
876
 
461
- #. @context: Settings group label for design settings
462
- #: src/ui/dash/settings/SettingsRootContent.tsx
877
+ #. @context: Collection label on theme sample content card
878
+ #. @context: Collection tag on sample note post
879
+ #. @context: Collection tag on the sample detail article
880
+ #. @context: Color theme preview collection label
881
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
882
+ #: src/ui/pages/ThemeSamplePage.tsx
883
+ #: src/ui/pages/ThemeSamplePage.tsx
884
+ #: src/ui/pages/ThemeSamplePage.tsx
463
885
  msgid "Design"
464
886
  msgstr "设计"
465
887
 
888
+ #. @context: Title for the sample detail article on the theme sample page
889
+ #: src/ui/pages/ThemeSamplePage.tsx
890
+ msgid "Designing a calmer default accent for Jant"
891
+ msgstr "为 Jant 设计更平静的默认强调色"
892
+
466
893
  #. @context: Redirect destination field
467
894
  #: src/routes/dash/custom-urls.tsx
468
895
  msgid "Destination"
@@ -475,6 +902,11 @@ msgstr "目标地址"
475
902
  msgid "Discard"
476
903
  msgstr "放弃"
477
904
 
905
+ #. @context: Confirm dialog shown before discarding attached text edits
906
+ #: src/ui/compose/ComposeDialog.tsx
907
+ msgid "Discard changes?"
908
+ msgstr "要放弃更改吗?"
909
+
478
910
  #. @context: Checkbox to show avatar in the site header
479
911
  #: src/ui/dash/settings/AvatarContent.tsx
480
912
  msgid "Display avatar in my site header"
@@ -485,29 +917,98 @@ msgstr "在我的站点页眉显示头像"
485
917
  msgid "Displayed at the bottom of all posts and pages. Markdown supported."
486
918
  msgstr "显示在所有文章和页面的底部。支持 Markdown。"
487
919
 
920
+ #. @context: Theme group heading on color theme settings page
921
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
922
+ msgid "Distinctive Mood"
923
+ msgstr "鲜明氛围"
924
+
925
+ #. @context: Label for a divider item while organizing collections
926
+ #: src/ui/shared/CollectionsManager.tsx
927
+ msgid "Divider"
928
+ msgstr "分隔线"
929
+
930
+ #. @context: Guidance body on the brand asset page
931
+ #: src/ui/pages/BrandPage.tsx
932
+ msgid "Do not recolor, stretch, rotate, outline, or add effects to the logo."
933
+ msgstr "请勿为标志重新着色、拉伸、旋转、描边或添加效果."
934
+
488
935
  #. @context: Confirm close action sheet subtitle when editing a published post
489
936
  #: src/ui/compose/ComposeDialog.tsx
490
937
  msgid "Do you want to publish your changes or discard them?"
491
- msgstr ""
938
+ msgstr "要发布您的更改,还是放弃它们?"
939
+
940
+ #. @context: Compose publish settings help text for posts hidden from Latest
941
+ #: src/ui/compose/ComposeDialog.tsx
942
+ msgid "Doesn't appear in Latest. Still appears in collections you add it to."
943
+ msgstr "不会出现在 Latest 中,但仍会出现在你添加到的 Collection 里。"
492
944
 
945
+ #. @context: Confirm action sheet - discard text attachment changes button
493
946
  #. @context: Confirm close action sheet - discard button
494
947
  #: src/ui/compose/ComposeDialog.tsx
948
+ #: src/ui/compose/ComposeDialog.tsx
495
949
  msgid "Don't save"
496
950
  msgstr "不保存"
497
951
 
498
- #. @context: Button to exit reorder mode
952
+ #. @context: Button to exit collection organize mode
499
953
  #. @context: Close attached text panel
500
954
  #. @context: Compose button - update existing post
955
+ #. @context: Primary button in the quick-create collection dialog
501
956
  #: src/ui/compose/ComposeDialog.tsx
502
957
  #: src/ui/compose/ComposeDialog.tsx
503
- #: src/ui/shared/CollectionsSidebar.tsx
958
+ #: src/ui/shared/collection-management-labels.ts
959
+ #: src/ui/shared/CollectionsManager.tsx
504
960
  msgid "Done"
505
961
  msgstr "完成"
506
962
 
507
- #. @context: Settings item description for site export
963
+ #. @context: Step 1 heading user must download a site export before deleting
964
+ #: src/ui/dash/settings/DeleteAccountContent.tsx
965
+ msgid "Download a site export"
966
+ msgstr "下载站点导出"
967
+
968
+ #. @context: Settings item description for static site export
508
969
  #: src/ui/dash/settings/AccountMenuContent.tsx
509
- msgid "Download as a Zola static site (.zip)"
510
- msgstr ""
970
+ msgid "Download a Zola site ZIP for static publishing or import into another Jant."
971
+ msgstr "下载一个 Zola 站点 ZIP,可用于静态发布或导入另一套 Jant。"
972
+
973
+ #. @context: Primary hero button label for the brand pack ZIP
974
+ #: src/ui/pages/BrandPage.tsx
975
+ msgid "Download Brand Pack"
976
+ msgstr "下载品牌包"
977
+
978
+ #. @context: Button to download the site export ZIP before deletion
979
+ #: src/ui/dash/settings/DeleteAccountContent.tsx
980
+ msgid "Download Export ZIP"
981
+ msgstr "下载导出 ZIP"
982
+
983
+ #. @context: Alert when site export download fails during account deletion
984
+ #: src/ui/dash/settings/DeleteAccountContent.tsx
985
+ msgid "Download failed. Please try again."
986
+ msgstr "下载失败。请重试。"
987
+
988
+ #. @context: Download button label for a non-SVG brand asset
989
+ #: src/ui/pages/BrandPage.tsx
990
+ msgid "Download file"
991
+ msgstr "下载文件"
992
+
993
+ #. @context: Meta description for the public brand asset page
994
+ #: src/routes/pages/brand.tsx
995
+ msgid "Download official Jant logos, icons, and preview assets."
996
+ msgstr "下载官方 Jant 徽标、图标和预览素材。"
997
+
998
+ #. @context: Download button label for a PNG logo asset
999
+ #: src/ui/pages/BrandPage.tsx
1000
+ msgid "Download PNG"
1001
+ msgstr "下载 PNG"
1002
+
1003
+ #. @context: Download button label for a logo asset
1004
+ #: src/ui/pages/BrandPage.tsx
1005
+ msgid "Download SVG"
1006
+ msgstr "下载 SVG"
1007
+
1008
+ #. @context: Hero title on the public brand asset page
1009
+ #: src/ui/pages/BrandPage.tsx
1010
+ msgid "Download the official Jant logo, icons, and preview files."
1011
+ msgstr "下载官方 Jant 徽标、图标和预览文件。"
511
1012
 
512
1013
  #. @context: Post status badge - draft
513
1014
  #: src/ui/dash/StatusBadge.tsx
@@ -536,6 +1037,11 @@ msgstr "草稿已保存."
536
1037
  msgid "Drafts"
537
1038
  msgstr "草稿"
538
1039
 
1040
+ #. @context: Helper text shown while organizing collections
1041
+ #: src/ui/shared/CollectionsManager.tsx
1042
+ msgid "Drag collections and dividers into the order you want."
1043
+ msgstr "拖动合集和分隔线,调整为你想要的顺序。"
1044
+
539
1045
  #. @context: Placeholder for API token name input
540
1046
  #: src/ui/dash/settings/ApiTokensContent.tsx
541
1047
  msgid "e.g. iOS Shortcuts"
@@ -543,16 +1049,30 @@ msgstr "例如 iOS Shortcuts"
543
1049
 
544
1050
  #. @context: Button to edit item
545
1051
  #. @context: Per-collection edit action
1052
+ #. @context: Per-collection edit action
1053
+ #. @context: Per-collection edit action
546
1054
  #: src/ui/dash/ActionButtons.tsx
547
- #: src/ui/shared/CollectionsSidebar.tsx
1055
+ #: src/ui/pages/CollectionEditorPage.tsx
1056
+ #: src/ui/pages/CollectionEditorPage.tsx
1057
+ #: src/ui/shared/collection-management-labels.ts
548
1058
  msgid "Edit"
549
1059
  msgstr "编辑"
550
1060
 
1061
+ #. @context: Button to manually edit the collection link
1062
+ #: src/ui/shared/collection-management-labels.ts
1063
+ msgid "Edit link"
1064
+ msgstr "编辑链接"
1065
+
551
1066
  #. @context: Compose dialog header title in edit mode
552
1067
  #: src/ui/compose/ComposeDialog.tsx
553
1068
  msgid "Edit post"
554
1069
  msgstr "编辑帖子"
555
1070
 
1071
+ #. @context: Sample link post title on the theme sample page
1072
+ #: src/ui/pages/ThemeSamplePage.tsx
1073
+ msgid "Editorial interfaces worth borrowing from"
1074
+ msgstr "值得借鉴的编辑界面"
1075
+
556
1076
  #. @context: Setup/signin form field - email
557
1077
  #. @context: Setup/signin form field - email
558
1078
  #: src/routes/auth/setup.tsx
@@ -565,48 +1085,146 @@ msgstr "电子邮箱"
565
1085
  msgid "Emoji"
566
1086
  msgstr "表情"
567
1087
 
568
- #. @context: Emoji picker tab label
569
- #. @context: Emoji picker tab label
1088
+ #. @context: Compose URL field error message
570
1089
  #: src/ui/compose/ComposeDialog.tsx
571
- #: src/ui/shared/CollectionsSidebar.tsx
572
- msgid "Emojis"
573
- msgstr "表情"
1090
+ msgid "Enter a valid URL starting with http://, https://, or mailto:."
1091
+ msgstr "请输入以 http://、https:// 或 mailto: 开头的有效 URL。"
574
1092
 
575
1093
  #. @context: Plural entry count label
576
- #: src/ui/pages/CollectionsPage.tsx
1094
+ #. @context: Plural entry count label
1095
+ #: src/ui/shared/CollectionDirectory.tsx
1096
+ #: src/ui/shared/CollectionsManager.tsx
577
1097
  msgid "entries"
578
1098
  msgstr "条目"
579
1099
 
580
1100
  #. @context: Singular entry count label
581
- #: src/ui/pages/CollectionsPage.tsx
1101
+ #. @context: Singular entry count label
1102
+ #: src/ui/shared/CollectionDirectory.tsx
1103
+ #: src/ui/shared/CollectionsManager.tsx
582
1104
  msgid "entry"
583
1105
  msgstr "条目"
584
1106
 
585
- #. @context: Settings item export site as Zola ZIP
1107
+ #. @context: Usage label for the brand pack card
1108
+ #: src/ui/pages/BrandPage.tsx
1109
+ msgid "Everything in one download"
1110
+ msgstr "一次性全部下载"
1111
+
1112
+ #. @context: Section title for the quick-start panel on the brand asset page
1113
+ #: src/ui/pages/BrandPage.tsx
1114
+ msgid "Everything most people need is in one ZIP."
1115
+ msgstr "大多数人需要的所有内容都在一个 ZIP 文件中。"
1116
+
1117
+ #. @context: Intro paragraph on the public brand asset page
1118
+ #: src/ui/pages/BrandPage.tsx
1119
+ msgid "Everything on this page is ready to use for articles, launch posts, directories, and product coverage."
1120
+ msgstr "本页的所有内容均可直接用于文章、发布帖、目录和产品报道。"
1121
+
1122
+ #. @context: Settings item description for account settings on the settings home page when demo restrictions are enabled
1123
+ #: src/ui/dash/settings/SettingsRootContent.tsx
1124
+ msgid "Export and demo limits"
1125
+ msgstr "导出与演示限制"
1126
+
1127
+ #. @context: Confirmation text after downloading the site export in delete flow
1128
+ #: src/ui/dash/settings/DeleteAccountContent.tsx
1129
+ msgid "Export downloaded."
1130
+ msgstr "导出已下载。"
1131
+
1132
+ #. @context: Settings item — export a Zola static site ZIP
586
1133
  #: src/ui/dash/settings/AccountMenuContent.tsx
587
- msgid "Export Site"
588
- msgstr ""
1134
+ msgid "Export Static Site"
1135
+ msgstr "导出静态站点"
1136
+
1137
+ #. @context: Title for the favicon asset card
1138
+ #: src/ui/pages/BrandPage.tsx
1139
+ msgid "Favicon"
1140
+ msgstr "网站图标"
589
1141
 
590
1142
  #. @context: Settings item description for avatar
591
1143
  #: src/ui/dash/settings/SettingsRootContent.tsx
592
- msgid "Favicon and header icon"
593
- msgstr "Favicon 和页眉图标"
1144
+ msgid "Favicon and the profile mark in your header"
1145
+ msgstr "网站图标及页眉中的个人头像"
594
1146
 
595
1147
  #. @context: Archive visibility filter - featured posts
596
1148
  #. @context: Browse filter for featured posts
597
1149
  #. @context: Browse filter label
598
1150
  #. @context: Browse filter label
599
1151
  #. @context: Browse filter label for featured posts
1152
+ #. @context: Browser page title for the featured feed
1153
+ #. @context: Browser page title for the featured feed
1154
+ #. @context: Inactive browse tab label on sample page
1155
+ #. @context: Page heading for the featured posts feed
600
1156
  #. @context: Post badge - featured
1157
+ #. @context: Select option for using featured posts as the main RSS feed
1158
+ #. @context: Tooltip and screen reader label for the featured-post icon in the post footer when no featured date is available
1159
+ #: src/routes/pages/featured.tsx
1160
+ #: src/routes/pages/home.tsx
601
1161
  #: src/ui/dash/appearance/NavigationContent.tsx
602
1162
  #: src/ui/dash/appearance/NavigationContent.tsx
603
1163
  #: src/ui/dash/appearance/NavigationContent.tsx
1164
+ #: src/ui/dash/settings/GeneralContent.tsx
604
1165
  #: src/ui/dash/StatusBadge.tsx
605
1166
  #: src/ui/layouts/SiteLayout.tsx
606
1167
  #: src/ui/pages/ArchivePage.tsx
1168
+ #: src/ui/pages/FeaturedPage.tsx
1169
+ #: src/ui/pages/ThemeSamplePage.tsx
1170
+ #: src/ui/shared/PostFooter.tsx
607
1171
  msgid "Featured"
608
1172
  msgstr "精选"
609
1173
 
1174
+ #. @context: Label for the explicit featured RSS feed URL
1175
+ #: src/ui/dash/settings/GeneralContent.tsx
1176
+ msgid "Featured feed"
1177
+ msgstr "Featured feed"
1178
+
1179
+ #. @context: Tooltip and screen reader label for the featured-post icon in the post footer
1180
+ #: src/ui/shared/PostFooter.tsx
1181
+ msgid "Featured on {date} at {time}"
1182
+ msgstr "精选于 {date} {time}"
1183
+
1184
+ #. @context: RSS and Atom feed title suffix for the featured posts feed
1185
+ #. @context: RSS autodiscovery title for the featured posts feed
1186
+ #: src/routes/feed/rss.ts
1187
+ #: src/ui/layouts/BaseLayout.tsx
1188
+ msgid "Featured posts"
1189
+ msgstr "精选帖子"
1190
+
1191
+ #. @context: Toast after saving feed settings
1192
+ #: src/routes/dash/settings.tsx
1193
+ msgid "Feed settings updated."
1194
+ msgstr "订阅源设置已更新。"
1195
+
1196
+ #. @context: Toast after copying a feed URL to the clipboard
1197
+ #: src/ui/dash/settings/GeneralContent.tsx
1198
+ msgid "Feed URL copied."
1199
+ msgstr "订阅源 URL 已复制。"
1200
+
1201
+ #. @context: Settings section heading for RSS feed configuration
1202
+ #: src/ui/dash/settings/GeneralContent.tsx
1203
+ msgid "Feeds"
1204
+ msgstr "订阅源"
1205
+
1206
+ #. @context: Search snippet suffix on sample page
1207
+ #: src/ui/pages/ThemeSamplePage.tsx
1208
+ msgid "feel deliberate instead of washed out."
1209
+ msgstr "显得更有目的性,而不是暗淡无光。"
1210
+
1211
+ #. @context: Table cell in the sample detail article
1212
+ #: src/ui/pages/ThemeSamplePage.tsx
1213
+ msgid "Feel editorial and slightly quieter."
1214
+ msgstr "具有编辑风格,略显低调。"
1215
+
1216
+ #. @context: Sample quote attribution title on the theme sample page
1217
+ #: src/ui/pages/ThemeSamplePage.tsx
1218
+ msgid "Field Notes on Interface Tone"
1219
+ msgstr "关于界面语气的现场笔记"
1220
+
1221
+ #. @context: Color theme preview card title
1222
+ #. @context: Input value on sample page
1223
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
1224
+ #: src/ui/pages/ThemeSamplePage.tsx
1225
+ msgid "Field notes on quiet design"
1226
+ msgstr "克制设计手记"
1227
+
610
1228
  #. @context: Error toast when file storage is not set up
611
1229
  #. @context: Error when file storage is not set up
612
1230
  #: src/routes/api/upload.ts
@@ -624,6 +1242,21 @@ msgstr "文件已上传."
624
1242
  msgid "Files"
625
1243
  msgstr "文件"
626
1244
 
1245
+ #. @context: Settings item description for custom CSS
1246
+ #: src/ui/dash/settings/SettingsRootContent.tsx
1247
+ msgid "Fine-grained styling overrides"
1248
+ msgstr "细粒度样式覆盖"
1249
+
1250
+ #. @context: Label for the list of stable RSS feed URLs
1251
+ #: src/ui/dash/settings/GeneralContent.tsx
1252
+ msgid "Fixed feed URLs"
1253
+ msgstr "固定 feed 链接"
1254
+
1255
+ #. @context: Theme mode option description
1256
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
1257
+ msgid "Follow each visitor's system preference."
1258
+ msgstr "跟随每位访问者的系统偏好。"
1259
+
627
1260
  #. @context: Appearance settings heading for font theme
628
1261
  #: src/ui/dash/appearance/FontThemeContent.tsx
629
1262
  msgid "Font theme"
@@ -634,6 +1267,11 @@ msgstr "字体主题"
634
1267
  msgid "Font Theme"
635
1268
  msgstr "字体主题"
636
1269
 
1270
+ #. @context: Paragraph mentioning code on the sample detail article
1271
+ #: src/ui/pages/ThemeSamplePage.tsx
1272
+ msgid "For the same reason, inline code should stay neutral. Something like theme.siteAccent = soften(green, 12%) should not suddenly become the loudest thing on the page."
1273
+ msgstr "也因为这个原因,行内代码应该保持中性。像 theme.siteAccent = soften(green, 12%) 这样的内容,不该突然变成页面里最吵的一部分。"
1274
+
637
1275
  #. @context: Search results count - multiple
638
1276
  #. placeholder {0}: String(results.length)
639
1277
  #: src/ui/pages/SearchPage.tsx
@@ -645,6 +1283,11 @@ msgstr "找到 {0} 条结果"
645
1283
  msgid "Found 1 result"
646
1284
  msgstr "找到 1 条结果"
647
1285
 
1286
+ #. @context: Compose dialog - open fullscreen editor
1287
+ #: src/ui/compose/ComposeDialog.tsx
1288
+ msgid "Fullscreen"
1289
+ msgstr "全屏"
1290
+
648
1291
  #. @context: Settings item — general settings
649
1292
  #. @context: Settings section heading
650
1293
  #: src/ui/dash/settings/GeneralContent.tsx
@@ -652,60 +1295,207 @@ msgstr "找到 1 条结果"
652
1295
  msgid "General"
653
1296
  msgstr "通用"
654
1297
 
1298
+ #. @context: Compose publish settings slug summary when no custom slug is set
1299
+ #: src/ui/compose/ComposeDialog.tsx
1300
+ msgid "Generate automatically"
1301
+ msgstr "自动生成"
1302
+
655
1303
  #. @context: Button to create new API token
656
1304
  #: src/ui/dash/settings/ApiTokensContent.tsx
657
1305
  msgid "Generate Token"
658
1306
  msgstr "生成 API 令牌"
659
1307
 
1308
+ #. @context: Compose custom slug helper while generating a suggested slug
1309
+ #: src/ui/compose/ComposeDialog.tsx
1310
+ msgid "Generating a link..."
1311
+ msgstr "正在生成链接..."
1312
+
660
1313
  #. @context: Compose link title placeholder
661
1314
  #: src/ui/compose/ComposeDialog.tsx
662
1315
  msgid "Give it a title..."
663
1316
  msgstr "给它起个标题..."
664
1317
 
1318
+ #. @context: Table cell in the sample detail article
1319
+ #: src/ui/pages/ThemeSamplePage.tsx
1320
+ msgid "Guide the eye without taking over the layout."
1321
+ msgstr "引导视线而不主导布局."
1322
+
1323
+ #. @context: Section kicker for the usage guidance section on the brand asset page
1324
+ #: src/ui/pages/BrandPage.tsx
1325
+ msgid "Guidelines"
1326
+ msgstr "使用指南"
1327
+
1328
+ #. @context: Usage label for the square tile asset card
1329
+ #: src/ui/pages/BrandPage.tsx
1330
+ msgid "Hard edge"
1331
+ msgstr "硬边"
1332
+
1333
+ #. @context: Toast after saving max visible nav links setting
1334
+ #: src/ui/dash/appearance/NavigationContent.tsx
1335
+ msgid "Header link limit updated."
1336
+ msgstr "页首链接数量限制已更新。"
1337
+
665
1338
  #. @context: Settings item description for navigation
666
1339
  #: src/ui/dash/settings/SettingsRootContent.tsx
667
- msgid "Header links, featured"
668
- msgstr "页眉链接,精选"
1340
+ msgid "Header links, home feed, and overflow menu"
1341
+ msgstr "页首链接、首页视图和溢出菜单"
1342
+
1343
+ #. @context: Description for the RSS system navigation toggle. %feed% is either Latest or Featured.
1344
+ #: src/ui/dash/appearance/NavigationContent.tsx
1345
+ msgid "Header RSS points to your %feed% feed (/feed). Change what /feed returns in General."
1346
+ msgstr "页首 RSS 指向你的 %feed% feed(/feed)。可在通用设置中修改 /feed 的输出内容。"
1347
+
1348
+ #. @context: Bullet item in the sample detail article
1349
+ #: src/ui/pages/ThemeSamplePage.tsx
1350
+ msgid "Headings should keep their hierarchy even when the accent gets softer."
1351
+ msgstr "即使强调变弱,标题也应保持其层次结构。"
669
1352
 
670
1353
  #. @context: Hint text in alt text panel
671
1354
  #: src/ui/compose/ComposeDialog.tsx
672
1355
  msgid "Helps screen readers describe the image"
673
1356
  msgstr "帮助屏幕阅读器描述图片"
674
1357
 
1358
+ #. @context: Archive visibility filter for posts hidden from Latest
1359
+ #. @context: Compose publish settings visibility option
1360
+ #. @context: Post badge for posts hidden from Latest
1361
+ #: src/ui/compose/ComposeDialog.tsx
1362
+ #: src/ui/dash/StatusBadge.tsx
1363
+ #: src/ui/pages/ArchivePage.tsx
1364
+ msgid "Hidden from Latest"
1365
+ msgstr "从 Latest 隐藏"
1366
+
1367
+ #. @context: Compose dropdown option for hiding a post from the Latest view
1368
+ #: src/ui/compose/ComposeDialog.tsx
1369
+ msgid "Hide from Latest"
1370
+ msgstr "从 Latest 隐藏"
1371
+
675
1372
  #. @context: Collection sort order option
676
1373
  #. @context: Collection sort order option
677
- #: src/ui/compose/ComposeDialog.tsx
678
- #: src/ui/shared/CollectionsSidebar.tsx
1374
+ #: src/ui/pages/CollectionPage.tsx
1375
+ #: src/ui/shared/collection-management-labels.ts
679
1376
  msgid "Highest rated"
680
1377
  msgstr "评分最高"
681
1378
 
1379
+ #. @context: Settings subsection heading for home page settings
1380
+ #: src/ui/dash/settings/GeneralContent.tsx
1381
+ msgid "Home"
1382
+ msgstr "首页"
1383
+
682
1384
  #. @context: Toast after saving home default view setting
683
1385
  #: src/ui/dash/appearance/NavigationContent.tsx
684
- msgid "Home view saved"
685
- msgstr "主页视图已保存"
1386
+ msgid "Home feed updated."
1387
+ msgstr "首页视图已更新。"
686
1388
 
687
- #. @context: Icon picker tab label
688
- #. @context: Icon picker tab label
689
- #: src/ui/compose/ComposeDialog.tsx
690
- #: src/ui/shared/CollectionsSidebar.tsx
691
- msgid "Icons"
692
- msgstr "图标"
1389
+ #. @context: Description for the apple touch icon asset card
1390
+ #: src/ui/pages/BrandPage.tsx
1391
+ msgid "Home screen icon for iPhone and iPad shortcuts."
1392
+ msgstr "用于 iPhone 和 iPad 快捷方式的主屏幕图标。"
1393
+
1394
+ #. @context: Toast after auto-saving home settings
1395
+ #: src/routes/dash/settings.tsx
1396
+ msgid "Home settings updated."
1397
+ msgstr "首页设置已更新。"
1398
+
1399
+ #. @context: Generic hosted auth provider label when no explicit provider name is configured
1400
+ #: src/ui/dash/settings/AccountMenuContent.tsx
1401
+ msgid "Hosted account"
1402
+ msgstr "托管账号"
1403
+
1404
+ #. @context: Confirmation phrase the user must type to delete their account. {siteName} is the blog name.
1405
+ #: src/ui/dash/settings/DeleteAccountContent.tsx
1406
+ msgid "I want to delete {siteName}"
1407
+ msgstr "我想删除 {siteName}"
1408
+
1409
+ #. @context: Section kicker for the icon and preview downloads section
1410
+ #: src/ui/pages/BrandPage.tsx
1411
+ msgid "Icons and previews"
1412
+ msgstr "图标与预览"
1413
+
1414
+ #. @context: Closing paragraph on the sample detail article
1415
+ #: src/ui/pages/ThemeSamplePage.tsx
1416
+ msgid "If this article still feels like a page you want to keep reading, the palette is probably close."
1417
+ msgstr "如果这篇文章仍然让你想继续阅读,那么配色可能已经很接近了。"
1418
+
1419
+ #. @context: Alert body on theme sample page
1420
+ #: src/ui/pages/ThemeSamplePage.tsx
1421
+ msgid "If this page feels too branded, the first place to soften is the default theme’s site accent, not the border or body text."
1422
+ msgstr "如果这一页显得太有品牌姿态,最先该收一收的是默认主题的站点强调色,而不是边框或正文颜色。"
693
1423
 
694
1424
  #. @context: Archive media filter - images
695
1425
  #: src/ui/pages/ArchivePage.tsx
696
1426
  msgid "Images"
697
1427
  msgstr "图片"
698
1428
 
699
- #. @context: Checkbox for allowing search engine indexing
700
- #: src/ui/dash/settings/GeneralContent.tsx
701
- msgid "It's OK for search engines to index my site"
702
- msgstr "允许搜索引擎索引我的网站"
1429
+ #. @context: Link to the thread root from a post footer
1430
+ #: src/ui/shared/PostFooter.tsx
1431
+ msgid "In thread "
1432
+ msgstr "在线程中 →"
1433
+
1434
+ #. @context: Accessible label for the asset keyword list on the public brand page
1435
+ #: src/ui/pages/BrandPage.tsx
1436
+ msgid "Included assets"
1437
+ msgstr "包含资源"
1438
+
1439
+ #. @context: Site accent sample badge
1440
+ #: src/ui/pages/ThemeSamplePage.tsx
1441
+ msgid "Inline emphasis"
1442
+ msgstr "行内强调"
1443
+
1444
+ #. @context: Table cell in the sample detail article
1445
+ #: src/ui/pages/ThemeSamplePage.tsx
1446
+ msgid "Inline link"
1447
+ msgstr "内联链接"
1448
+
1449
+ #. @context: Sample note summary suffix on the theme sample page
1450
+ #: src/ui/pages/ThemeSamplePage.tsx
1451
+ msgid "instead of judging it as an isolated swatch."
1452
+ msgstr "而不是把它当作孤立的色样来判断。"
1453
+
1454
+ #. @context: Sample quote text on the theme sample page
1455
+ #: src/ui/pages/ThemeSamplePage.tsx
1456
+ msgid "Interfaces for reading should guide the eye, not keep asking for attention."
1457
+ msgstr "供阅读的界面应该引导视线,而不是不断争取注意力。"
1458
+
1459
+ #. @context: Usage label for the apple touch icon asset card
1460
+ #: src/ui/pages/BrandPage.tsx
1461
+ msgid "iOS home screen"
1462
+ msgstr "iOS 主屏幕"
1463
+
1464
+ #. @context: Accessible label for the Jant logo mark
1465
+ #: src/ui/pages/BrandPage.tsx
1466
+ msgid "Jant logo"
1467
+ msgstr "Jant 徽标"
1468
+
1469
+ #. @context: Body paragraph on the theme sample page
1470
+ #: src/ui/pages/ThemeSamplePage.tsx
1471
+ msgid "Jant looks best when the accent feels editorial. Buttons can stay sturdy, but inline emphasis should feel like a pen mark, not a dashboard highlight."
1472
+ msgstr "Jant 在强调采用编辑式风格时效果最好。按钮可以保持稳重,但行内强调应该像笔迹,而不是仪表盘式的高亮。"
1473
+
1474
+ #. @context: Active nav link label on sample page
1475
+ #: src/ui/pages/ThemeSamplePage.tsx
1476
+ msgid "Journal"
1477
+ msgstr "日志"
1478
+
1479
+ #. @context: Guidance title on the brand asset page
1480
+ #: src/ui/pages/BrandPage.tsx
1481
+ msgid "Keep the artwork unchanged."
1482
+ msgstr "保持图稿不变。"
1483
+
1484
+ #. @context: Collection slug validation error for links that are too long
1485
+ #: src/ui/shared/collection-management-labels.ts
1486
+ msgid "Keep this link under 200 characters."
1487
+ msgstr "把这个链接控制在 200 个字符以内。"
703
1488
 
704
1489
  #. @context: Nav item label field
705
1490
  #: src/ui/dash/appearance/NavigationContent.tsx
706
1491
  msgid "Label"
707
1492
  msgstr "标签"
708
1493
 
1494
+ #. @context: Placeholder for an optional divider label in collections organize mode
1495
+ #: src/ui/shared/CollectionsManager.tsx
1496
+ msgid "Label (optional)"
1497
+ msgstr "标签(可选)"
1498
+
709
1499
  #. @context: Error toast when nav link fields are empty
710
1500
  #: src/ui/dash/appearance/NavigationContent.tsx
711
1501
  msgid "Label and URL are required"
@@ -721,27 +1511,71 @@ msgstr "标签为必填项"
721
1511
  msgid "Language"
722
1512
  msgstr "语言"
723
1513
 
1514
+ #. @context: Settings subsection heading for language and time zone fields
1515
+ #: src/ui/dash/settings/GeneralContent.tsx
1516
+ msgid "Language & Time"
1517
+ msgstr "语言与时间"
1518
+
1519
+ #. @context: Toast after saving language and time settings
1520
+ #: src/routes/dash/settings.tsx
1521
+ msgid "Language and time updated."
1522
+ msgstr "语言和时间已更新。"
1523
+
724
1524
  #. @context: Token last used date
725
1525
  #. placeholder {0}: formatDate(token.lastUsedAt)
726
1526
  #: src/ui/dash/settings/ApiTokensContent.tsx
727
1527
  msgid "Last used {0}"
728
1528
  msgstr "上次使用 {0}"
729
1529
 
1530
+ #. @context: Active browse tab label on sample page
730
1531
  #. @context: Browse filter for latest posts
731
1532
  #. @context: Browse filter label
732
1533
  #. @context: Browse filter label
733
1534
  #. @context: Browse filter label for latest posts
1535
+ #. @context: Browser page title for the latest feed
1536
+ #. @context: Browser page title for the latest feed
1537
+ #. @context: Page heading for the latest posts feed
1538
+ #. @context: Select option for using latest posts as the main RSS feed
1539
+ #: src/routes/pages/home.tsx
1540
+ #: src/routes/pages/latest.tsx
734
1541
  #: src/ui/dash/appearance/NavigationContent.tsx
735
1542
  #: src/ui/dash/appearance/NavigationContent.tsx
736
1543
  #: src/ui/dash/appearance/NavigationContent.tsx
1544
+ #: src/ui/dash/settings/GeneralContent.tsx
737
1545
  #: src/ui/layouts/SiteLayout.tsx
1546
+ #: src/ui/pages/HomePage.tsx
1547
+ #: src/ui/pages/ThemeSamplePage.tsx
738
1548
  msgid "Latest"
739
1549
  msgstr "最新"
740
1550
 
1551
+ #. @context: Label for the explicit latest RSS feed URL
1552
+ #: src/ui/dash/settings/GeneralContent.tsx
1553
+ msgid "Latest feed"
1554
+ msgstr "Latest feed"
1555
+
1556
+ #. @context: RSS and Atom feed title suffix for the latest public posts feed
1557
+ #. @context: RSS autodiscovery title for the latest public posts feed
1558
+ #: src/routes/feed/rss.ts
1559
+ #: src/ui/layouts/BaseLayout.tsx
1560
+ msgid "Latest posts"
1561
+ msgstr "最新帖子"
1562
+
1563
+ #. @context: Compose publish settings slug help text
1564
+ #: src/ui/compose/ComposeDialog.tsx
1565
+ msgid "Leave blank to generate one automatically."
1566
+ msgstr "留空则自动生成。"
1567
+
741
1568
  #. @context: Suffix after Custom CSS link on color theme page
742
1569
  #: src/ui/dash/appearance/ColorThemeContent.tsx
743
1570
  msgid "lets you override any theme variable."
744
- msgstr ""
1571
+ msgstr "可让你覆盖任意主题变量。"
1572
+
1573
+ #. @context: Theme mode option label
1574
+ #. @context: Theme mode option on sample page
1575
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
1576
+ #: src/ui/pages/ThemeSamplePage.tsx
1577
+ msgid "Light"
1578
+ msgstr "浅色"
745
1579
 
746
1580
  #. @context: Nav item type badge
747
1581
  #: src/ui/dash/appearance/NavigationContent.tsx
@@ -757,11 +1591,26 @@ msgstr "链接"
757
1591
  msgid "Link"
758
1592
  msgstr "链接"
759
1593
 
1594
+ #. @context: Description for the archive system navigation toggle
1595
+ #: src/ui/shared/navigation-labels.ts
1596
+ msgid "Link to the post archive"
1597
+ msgstr "链接到文章归档页"
1598
+
1599
+ #. @context: Description for the collections system navigation toggle
1600
+ #: src/ui/shared/navigation-labels.ts
1601
+ msgid "Link to your collections page"
1602
+ msgstr "链接到你的合集页"
1603
+
760
1604
  #. @context: Post format label plural - links
761
1605
  #: src/ui/pages/ArchivePage.tsx
762
1606
  msgid "Links"
763
1607
  msgstr "链接"
764
1608
 
1609
+ #. @context: Bullet item in the sample detail article
1610
+ #: src/ui/pages/ThemeSamplePage.tsx
1611
+ msgid "Links should read clearly without glowing against the page."
1612
+ msgstr "链接应清晰可读,不应在页面上发光。"
1613
+
765
1614
  #. @context: Label for max visible nav links number input
766
1615
  #: src/ui/dash/appearance/NavigationContent.tsx
767
1616
  msgid "Links shown in header"
@@ -772,70 +1621,157 @@ msgstr "页眉显示的链接数"
772
1621
  msgid "List posts:"
773
1622
  msgstr "列出帖子:"
774
1623
 
1624
+ #. @context: Inline link label in the sample note post body
1625
+ #. @context: Inline link label in the sample note summary
1626
+ #: src/ui/pages/ThemeSamplePage.tsx
1627
+ #: src/ui/pages/ThemeSamplePage.tsx
1628
+ msgid "live theme controls"
1629
+ msgstr "实时主题控制"
1630
+
775
1631
  #. @context: Pagination button - load more items
776
1632
  #: src/ui/shared/Pagination.tsx
777
1633
  msgid "Load more"
778
1634
  msgstr "加载更多"
779
1635
 
780
- #. @context: Collection sort order option
781
- #. @context: Collection sort order option
782
- #: src/ui/compose/ComposeDialog.tsx
783
- #: src/ui/shared/CollectionsSidebar.tsx
784
- msgid "Lowest rated"
785
- msgstr "评分最低"
1636
+ #. @context: Asset keyword on the public brand asset page
1637
+ #. @context: Asset keyword on the public brand asset page
1638
+ #. @context: Title for the default logo asset card
1639
+ #. @context: Title for the default logo card
1640
+ #: src/ui/pages/BrandPage.tsx
1641
+ #: src/ui/pages/BrandPage.tsx
1642
+ #: src/ui/pages/BrandPage.tsx
1643
+ #: src/ui/pages/BrandPage.tsx
1644
+ msgid "Logo"
1645
+ msgstr "徽标"
1646
+
1647
+ #. @context: Section kicker for the logo downloads section
1648
+ #: src/ui/pages/BrandPage.tsx
1649
+ msgid "Logos"
1650
+ msgstr "品牌标志"
1651
+
1652
+ #. @context: Ordered list item in the sample detail article
1653
+ #: src/ui/pages/ThemeSamplePage.tsx
1654
+ msgid "Look at the footer metadata last, to make sure the accent is not fighting the typography."
1655
+ msgstr "最后查看页脚的元数据,确保强调色不会与排版产生冲突."
1656
+
1657
+ #. @context: Theme group description on color theme settings page
1658
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
1659
+ msgid "Low-distraction palettes for a cleaner, calmer reading rhythm."
1660
+ msgstr "低干扰配色,带来更干净、更平静的阅读节奏。"
786
1661
 
787
- #. @context: Settings item description for sessions
1662
+ #. @context: Label for the canonical /feed URL
1663
+ #. @context: RSS autodiscovery title for the site's main feed
1664
+ #: src/ui/dash/settings/GeneralContent.tsx
1665
+ #: src/ui/layouts/BaseLayout.tsx
1666
+ msgid "Main feed"
1667
+ msgstr "主 feed"
1668
+
1669
+ #. @context: Settings field label for the canonical /feed output
1670
+ #: src/ui/dash/settings/GeneralContent.tsx
1671
+ msgid "Main RSS feed"
1672
+ msgstr "主 RSS feed"
1673
+
1674
+ #. @context: Settings item description for hosted account management in the connected provider
788
1675
  #: src/ui/dash/settings/AccountMenuContent.tsx
789
- msgid "Manage active sign-in sessions"
790
- msgstr ""
1676
+ msgid "Manage password and hosted access in {providerLabel}"
1677
+ msgstr "在 {providerLabel} 中管理密码和托管站点访问权限"
1678
+
1679
+ #. @context: Intro text on the account settings menu page below the title
1680
+ #: src/ui/dash/settings/AccountMenuContent.tsx
1681
+ msgid "Manage sign-in security, exports, and irreversible actions."
1682
+ msgstr "管理登录安全、导出和不可逆操作."
1683
+
1684
+ #. @context: Intro text on the hosted account settings menu page below the title
1685
+ #: src/ui/dash/settings/AccountMenuContent.tsx
1686
+ msgid "Manage this site's active sessions here. Password and hosted access are managed through {providerLabel}."
1687
+ msgstr "在这里管理这个站点的当前会话。密码和托管站点访问权限通过 {providerLabel} 管理。"
1688
+
1689
+ #. @context: Color theme preview date label
1690
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
1691
+ msgid "March 14"
1692
+ msgstr "3 月 14 日"
1693
+
1694
+ #. @context: Date label on theme sample content card
1695
+ #: src/ui/pages/ThemeSamplePage.tsx
1696
+ msgid "March 15"
1697
+ msgstr "3月15日"
791
1698
 
792
1699
  #. @context: Placeholder hint for markdown-enabled textareas
793
1700
  #: src/ui/dash/settings/GeneralContent.tsx
794
1701
  msgid "Markdown supported"
795
1702
  msgstr "支持 Markdown"
796
1703
 
797
- #. @context: Toast after saving max visible nav links setting
798
- #: src/ui/dash/appearance/NavigationContent.tsx
799
- msgid "Max visible links saved"
800
- msgstr "已保存最大可见链接数"
801
-
802
1704
  #. @context: Compose toolbar - media tooltip
803
1705
  #: src/ui/compose/ComposeDialog.tsx
804
1706
  msgid "Media"
805
1707
  msgstr "媒体"
806
1708
 
807
- #. @context: Aria-label for more button
808
- #: src/ui/shared/CollectionsSidebar.tsx
1709
+ #. @context: Aria-label for collections page more button
1710
+ #. @context: Button label for a menu with more actions
1711
+ #. @context: Post menu trigger label in the post footer
1712
+ #: src/routes/dash/custom-urls.tsx
1713
+ #: src/ui/shared/collection-management-labels.ts
1714
+ #: src/ui/shared/PostFooter.tsx
809
1715
  msgid "More actions"
810
1716
  msgstr "更多操作"
811
1717
 
1718
+ #. @context: Theme group description on color theme settings page
1719
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
1720
+ msgid "More atmospheric palettes with a stronger sense of time, place, or tone."
1721
+ msgstr "氛围感更强的配色,时间、地点和情绪感更鲜明。"
1722
+
812
1723
  #. @context: Button to show overflow nav links
813
1724
  #: src/ui/layouts/SiteLayout.tsx
814
1725
  msgid "More links"
815
1726
  msgstr "更多链接"
816
1727
 
817
- #. @context: Collection title placeholder
818
- #. @context: Collection title placeholder
819
- #: src/ui/compose/ComposeDialog.tsx
820
- #: src/ui/shared/CollectionsSidebar.tsx
821
- msgid "My Collection"
822
- msgstr "我的收藏"
1728
+ #. @context: Helper text in the quick-create collection dialog
1729
+ #: src/ui/shared/collection-management-labels.ts
1730
+ msgid "More options are available after you create it."
1731
+ msgstr "创建后还可设置更多选项。"
823
1732
 
824
- #. @context: Settings item description for general
1733
+ #. @context: Fallback theme group heading on color theme page
1734
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
1735
+ msgid "More Palettes"
1736
+ msgstr "更多配色"
1737
+
1738
+ #. @context: Secondary badge label on sample page
1739
+ #. @context: Token label on sample page
1740
+ #: src/ui/pages/ThemeSamplePage.tsx
1741
+ #: src/ui/pages/ThemeSamplePage.tsx
1742
+ msgid "Muted"
1743
+ msgstr "柔和"
1744
+
1745
+ #. @context: Collection title placeholder
1746
+ #: src/ui/shared/collection-management-labels.ts
1747
+ msgid "My Collection"
1748
+ msgstr "我的合集"
1749
+
1750
+ #. @context: Settings item description for general
825
1751
  #: src/ui/dash/settings/SettingsRootContent.tsx
826
- msgid "Name, description, language"
827
- msgstr "名称、描述、语言"
1752
+ msgid "Name, metadata, language, and search defaults"
1753
+ msgstr "名称、元数据、语言和搜索默认设置"
828
1754
 
829
1755
  #. @context: Settings item — navigation settings
830
1756
  #: src/ui/dash/settings/SettingsRootContent.tsx
831
1757
  msgid "Navigation"
832
1758
  msgstr "导航"
833
1759
 
1760
+ #. @context: Navigation section heading on sample page
1761
+ #: src/ui/pages/ThemeSamplePage.tsx
1762
+ msgid "Navigation and reading states"
1763
+ msgstr "导航和阅读状态"
1764
+
834
1765
  #. @context: Section heading for nav items
835
1766
  #: src/ui/dash/appearance/NavigationContent.tsx
836
1767
  msgid "Navigation items"
837
1768
  msgstr "导航项"
838
1769
 
1770
+ #. @context: Toast after saving navigation item order
1771
+ #: src/ui/dash/appearance/NavigationContent.tsx
1772
+ msgid "Navigation order updated."
1773
+ msgstr "导航排序已更新。"
1774
+
839
1775
  #. @context: Label for nav preview section
840
1776
  #. @context: Label for nav preview section
841
1777
  #: src/ui/dash/appearance/NavigationContent.tsx
@@ -843,10 +1779,14 @@ msgstr "导航项"
843
1779
  msgid "Navigation Preview"
844
1780
  msgstr "导航预览"
845
1781
 
846
- #. @context: Tooltip/aria for add collection button
847
- #: src/ui/shared/CollectionsSidebar.tsx
1782
+ #. @context: Button to create a collection from collections page
1783
+ #. @context: Page title for new collection
1784
+ #. @context: Page title for new collection
1785
+ #: src/ui/pages/CollectionEditorPage.tsx
1786
+ #: src/ui/pages/CollectionEditorPage.tsx
1787
+ #: src/ui/shared/CollectionsManager.tsx
848
1788
  msgid "New Collection"
849
- msgstr "新建收藏夹"
1789
+ msgstr "新建合集"
850
1790
 
851
1791
  #. @context: Button to create new custom URL
852
1792
  #. @context: Button to create new custom URL
@@ -857,6 +1797,11 @@ msgstr "新建收藏夹"
857
1797
  msgid "New Custom URL"
858
1798
  msgstr "新建自定义 URL"
859
1799
 
1800
+ #. @context: Menu action to create a divider on collections page
1801
+ #: src/ui/shared/CollectionsManager.tsx
1802
+ msgid "New Divider"
1803
+ msgstr "新建分隔线"
1804
+
860
1805
  #. @context: Password form field
861
1806
  #. @context: Password reset form field
862
1807
  #: src/routes/auth/reset.tsx
@@ -865,21 +1810,25 @@ msgid "New Password"
865
1810
  msgstr "新密码"
866
1811
 
867
1812
  #. @context: Browser page title for the new post page
1813
+ #. @context: Collection page quick compose button aria label
868
1814
  #. @context: Page title for the new post page
869
1815
  #: src/routes/pages/new.tsx
1816
+ #: src/ui/pages/CollectionPage.tsx
870
1817
  #: src/ui/pages/ComposePage.tsx
871
1818
  msgid "New post"
872
- msgstr ""
1819
+ msgstr "新建帖子"
873
1820
 
874
1821
  #. @context: Collection sort order option
875
1822
  #. @context: Collection sort order option
876
- #: src/ui/compose/ComposeDialog.tsx
877
- #: src/ui/shared/CollectionsSidebar.tsx
1823
+ #: src/ui/pages/CollectionPage.tsx
1824
+ #: src/ui/shared/collection-management-labels.ts
878
1825
  msgid "Newest first"
879
1826
  msgstr "最新在前"
880
1827
 
881
1828
  #. @context: Pagination button - next page
882
1829
  #. @context: Pagination button - next page
1830
+ #. @context: Pagination next label on sample page
1831
+ #: src/ui/pages/ThemeSamplePage.tsx
883
1832
  #: src/ui/shared/Pagination.tsx
884
1833
  #: src/ui/shared/Pagination.tsx
885
1834
  msgid "Next"
@@ -887,13 +1836,22 @@ msgstr "下一页"
887
1836
 
888
1837
  #. @context: Empty state when no sessions exist (shouldn't normally appear)
889
1838
  #: src/ui/dash/settings/SessionsContent.tsx
890
- msgid "No active sessions found."
891
- msgstr ""
1839
+ msgid "No active sessions right now. Signed-in devices show up here."
1840
+ msgstr "目前没有活动会话。已登录的设备会显示在这里。"
892
1841
 
1842
+ #. @context: Compose collection combobox empty state when search has no results
1843
+ #: src/ui/compose/ComposeDialog.tsx
1844
+ msgid "No collections match that search. Try a different name."
1845
+ msgstr "没有合集匹配这次搜索。试试别的名称。"
1846
+
1847
+ #. @context: Empty state message on collections page
1848
+ #. @context: Empty state message on collections page
893
1849
  #. @context: Empty state message on collections page
894
1850
  #: src/ui/pages/CollectionsPage.tsx
1851
+ #: src/ui/shared/CollectionDirectory.tsx
1852
+ #: src/ui/shared/CollectionsManager.tsx
895
1853
  msgid "No collections yet. Start one to organize posts by topic."
896
- msgstr "还没有集合。创建一个集合以按主题整理帖子。"
1854
+ msgstr "还没有合集。创建一个合集,按主题整理帖子。"
897
1855
 
898
1856
  #. @context: Empty state message
899
1857
  #: src/routes/dash/custom-urls.tsx
@@ -905,11 +1863,6 @@ msgstr "还没有自定义 URL。创建一个以便为文章添加重定向或
905
1863
  msgid "No drafts yet. Save a draft to find it here."
906
1864
  msgstr "还没有草稿。保存草稿后会在此找到它。"
907
1865
 
908
- #. @context: Empty state message on featured page
909
- #: src/ui/pages/FeaturedPage.tsx
910
- msgid "No featured posts. Mark a post as featured to highlight it here."
911
- msgstr "没有精选帖子。将帖子标记为精选即可在此突出显示。"
912
-
913
1866
  #. @context: Error toast when no file was selected for upload
914
1867
  #. @context: Error when no file was selected for upload
915
1868
  #: src/routes/api/upload.ts
@@ -917,35 +1870,39 @@ msgstr "没有精选帖子。将帖子标记为精选即可在此突出显示。
917
1870
  msgid "No file selected. Choose a file to upload."
918
1871
  msgstr "未选择文件。请选择要上传的文件。"
919
1872
 
920
- #. @context: Compose collection combobox empty state when search has no results
921
- #: src/ui/compose/ComposeDialog.tsx
922
- msgid "No matching collections."
923
- msgstr "没有匹配的集合."
924
-
925
1873
  #. @context: Empty state for navigation items
926
1874
  #: src/ui/dash/appearance/NavigationContent.tsx
927
1875
  msgid "No navigation items yet. Add links or enable system items below."
928
1876
  msgstr "还没有导航项目。添加链接或在下方启用系统项目。"
929
1877
 
930
- #. @context: Archive empty state with filters
931
- #: src/ui/pages/ArchivePage.tsx
932
- msgid "No posts match these filters. Try adjusting your selection or clear all filters."
933
- msgstr "没有帖子符合这些筛选条件。尝试调整选择或清除所有筛选。"
934
-
935
1878
  #. @context: Search empty results
936
1879
  #: src/ui/pages/SearchPage.tsx
937
1880
  msgid "No results. Try different keywords."
938
1881
  msgstr "没有结果。尝试不同的关键词。"
939
1882
 
1883
+ #. @context: Archive empty state with filters applied
1884
+ #: src/ui/pages/ArchivePage.tsx
1885
+ msgid "No threads match these filters. Try adjusting your selection or clear all filters."
1886
+ msgstr "没有符合这些筛选条件的帖子串。调整筛选条件,或清除所有筛选。"
1887
+
1888
+ #. @context: Color theme preview format label
940
1889
  #. @context: Compose format tab
941
1890
  #. @context: Post format badge - note
942
1891
  #. @context: Post format label - note
1892
+ #. @context: Post format label on theme sample content card
943
1893
  #: src/ui/compose/ComposeDialog.tsx
1894
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
944
1895
  #: src/ui/dash/FormatBadge.tsx
945
1896
  #: src/ui/pages/ArchivePage.tsx
1897
+ #: src/ui/pages/ThemeSamplePage.tsx
946
1898
  msgid "Note"
947
1899
  msgstr "笔记"
948
1900
 
1901
+ #. @context: Inline link label in the sample quote commentary
1902
+ #: src/ui/pages/ThemeSamplePage.tsx
1903
+ msgid "note treatment"
1904
+ msgstr "笔记样式"
1905
+
949
1906
  #. @context: Post format label plural - notes
950
1907
  #: src/ui/pages/ArchivePage.tsx
951
1908
  msgid "Notes"
@@ -954,31 +1911,74 @@ msgstr "笔记"
954
1911
  #. @context: Empty state message on home page
955
1912
  #: src/ui/pages/HomePage.tsx
956
1913
  msgid "Nothing here yet."
957
- msgstr "这里还没有内容."
1914
+ msgstr "这里还没有内容。"
1915
+
1916
+ #. @context: Empty state message on featured page
1917
+ #: src/ui/pages/FeaturedPage.tsx
1918
+ msgid "Nothing in Featured yet. Mark a post as featured to show it here."
1919
+ msgstr "精选里还没有内容。把一篇文章标记为精选后,它就会显示在这里。"
958
1920
 
959
1921
  #. @context: Collection sort order option
960
1922
  #. @context: Collection sort order option
961
- #: src/ui/compose/ComposeDialog.tsx
962
- #: src/ui/shared/CollectionsSidebar.tsx
1923
+ #: src/ui/pages/CollectionPage.tsx
1924
+ #: src/ui/shared/collection-management-labels.ts
963
1925
  msgid "Oldest first"
964
1926
  msgstr "最旧优先"
965
1927
 
966
- #. @context: Switch label for setting featured posts as default homepage
967
- #: src/ui/dash/appearance/NavigationContent.tsx
968
- msgid "Open with Featured posts"
969
- msgstr "以精选文章打开"
1928
+ #. @context: Compose publish settings help text for private visibility
1929
+ #: src/ui/compose/ComposeDialog.tsx
1930
+ msgid "Only visible when signed in."
1931
+ msgstr "仅登录后可见。"
970
1932
 
971
- #. @context: Toast after reordering collections
972
- #. @context: Toast after saving navigation item order
973
- #: src/ui/dash/appearance/NavigationContent.tsx
974
- #: src/ui/shared/CollectionsSidebar.tsx
975
- msgid "Order saved"
976
- msgstr "排序已保存"
1933
+ #. @context: Ordered list item in the sample detail article
1934
+ #: src/ui/pages/ThemeSamplePage.tsx
1935
+ msgid "Open a few links and check whether they still feel native to the page."
1936
+ msgstr "打开几个链接,检查它们是否仍然像页面原生的一部分"
977
1937
 
978
- #. @context: Pagination - current page indicator
979
- #: src/ui/shared/Pagination.tsx
980
- msgid "Page {page}"
981
- msgstr "第 {page} 页"
1938
+ #. @context: Accessible label for the external-link icon in the post footer
1939
+ #: src/ui/shared/PostFooter.tsx
1940
+ msgid "Open external link"
1941
+ msgstr "打开外部链接"
1942
+
1943
+ #. @context: Button label to open a raw brand asset in the browser
1944
+ #: src/ui/pages/BrandPage.tsx
1945
+ msgid "Open raw asset"
1946
+ msgstr "打开原始资源"
1947
+
1948
+ #. @context: Button label to open the raw PNG asset in the browser
1949
+ #: src/ui/pages/BrandPage.tsx
1950
+ msgid "Open raw PNG"
1951
+ msgstr "打开原始 PNG"
1952
+
1953
+ #. @context: Button label to open the raw SVG asset in the browser
1954
+ #: src/ui/pages/BrandPage.tsx
1955
+ msgid "Open raw SVG"
1956
+ msgstr "打开原始 SVG"
1957
+
1958
+ #. @context: Settings item description for the hosted delete-site entry in the account menu
1959
+ #: src/ui/dash/settings/AccountMenuContent.tsx
1960
+ msgid "Open the hosted site controls in {providerLabel} to cancel billing or permanently delete this site."
1961
+ msgstr ""
1962
+
1963
+ #. @context: Menu action to organize collections
1964
+ #: src/ui/shared/CollectionsManager.tsx
1965
+ msgid "Organize"
1966
+ msgstr "整理"
1967
+
1968
+ #. @context: Outline badge label on sample page
1969
+ #: src/ui/pages/ThemeSamplePage.tsx
1970
+ msgid "Outline"
1971
+ msgstr "线框"
1972
+
1973
+ #. @context: Settings item description for color theme
1974
+ #: src/ui/dash/settings/SettingsRootContent.tsx
1975
+ msgid "Palette, surface tone, and overall mood"
1976
+ msgstr "调色板、表面色调与整体氛围"
1977
+
1978
+ #. @context: Theme group description on color theme settings page
1979
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
1980
+ msgid "Paper-first palettes with warmer surfaces and a softer, handwritten feel."
1981
+ msgstr "以纸感为先的配色,界面更温暖,也更有手写感。"
982
1982
 
983
1983
  #. @context: Settings item — password settings
984
1984
  #. @context: Setup/signin form field - password
@@ -994,6 +1994,13 @@ msgstr "密码"
994
1994
  msgid "Password changed."
995
1995
  msgstr "密码已更改."
996
1996
 
1997
+ #. @context: Error shown when password changes are blocked in demo mode
1998
+ #. @context: Error shown when password reset is blocked in demo mode
1999
+ #: src/routes/auth/reset.tsx
2000
+ #: src/routes/dash/settings.tsx
2001
+ msgid "Password changes are off in demo mode. Sign in with the shared demo credentials."
2002
+ msgstr "演示模式下不提供密码修改。请使用共享的演示凭据登录。"
2003
+
997
2004
  #. @context: Error toast when new password and confirmation differ
998
2005
  #: src/routes/dash/settings.tsx
999
2006
  msgid "Passwords don't match. Make sure both fields are identical."
@@ -1020,10 +2027,10 @@ msgstr "粘贴链接..."
1020
2027
  msgid "Path"
1021
2028
  msgstr "路径"
1022
2029
 
1023
- #. @context: Link to permanent URL of post
1024
- #: src/ui/shared/PostFooter.tsx
1025
- msgid "Permalink"
1026
- msgstr "永久链接"
2030
+ #. @context: Settings item description for account deletion
2031
+ #: src/ui/dash/settings/AccountMenuContent.tsx
2032
+ msgid "Permanently delete all data and reset the blog"
2033
+ msgstr "永久删除所有数据并重置博客"
1027
2034
 
1028
2035
  #. @context: Post badge - pinned
1029
2036
  #: src/ui/dash/StatusBadge.tsx
@@ -1031,38 +2038,74 @@ msgid "Pinned"
1031
2038
  msgstr "已置顶"
1032
2039
 
1033
2040
  #. @context: Compose button - publish post
2041
+ #. @context: Custom URL target type badge for a post
1034
2042
  #. @context: Custom URL type option
1035
2043
  #: src/routes/dash/custom-urls.tsx
2044
+ #: src/routes/dash/custom-urls.tsx
1036
2045
  #: src/ui/compose/ComposeDialog.tsx
1037
2046
  msgid "Post"
1038
2047
  msgstr "发布"
1039
2048
 
1040
- #. @context: Compose dropdown option - publish post and mark it as featured
1041
- #: src/ui/compose/ComposeDialog.tsx
1042
- msgid "Post as Featured"
1043
- msgstr ""
1044
-
1045
2049
  #. @context: Compose dropdown option - publish post visible only when logged in
1046
2050
  #: src/ui/compose/ComposeDialog.tsx
1047
2051
  msgid "Post as Private"
1048
- msgstr ""
2052
+ msgstr "以私密方式发布"
1049
2053
 
1050
- #. @context: Compose dropdown option - publish post with unlisted visibility, hidden from main feed
2054
+ #. @context: Compose publish button for posts hidden from Latest
1051
2055
  #: src/ui/compose/ComposeDialog.tsx
1052
- msgid "Post Unlisted"
2056
+ msgid "Post hidden"
1053
2057
  msgstr ""
1054
2058
 
2059
+ #. @context: Compose publish button for private visibility
2060
+ #: src/ui/compose/ComposeDialog.tsx
2061
+ msgid "Post privately"
2062
+ msgstr "私密发布"
2063
+
2064
+ #. @context: Hover hint for the homepage compose shortcut
2065
+ #: src/ui/compose/ComposePrompt.tsx
2066
+ msgid "Press N to write"
2067
+ msgstr "按 N 开始写作"
2068
+
2069
+ #. @context: Ghost button label on sample page
2070
+ #: src/ui/pages/ThemeSamplePage.tsx
2071
+ msgid "Preview"
2072
+ msgstr "预览"
2073
+
1055
2074
  #. @context: Pagination button - previous page
1056
2075
  #. @context: Pagination button - previous page
2076
+ #. @context: Pagination previous label on sample page
2077
+ #: src/ui/pages/ThemeSamplePage.tsx
1057
2078
  #: src/ui/shared/Pagination.tsx
1058
2079
  #: src/ui/shared/Pagination.tsx
1059
2080
  msgid "Previous"
1060
2081
  msgstr "上一页"
1061
2082
 
2083
+ #. @context: Token label on sample page
2084
+ #: src/ui/pages/ThemeSamplePage.tsx
2085
+ msgid "Primary"
2086
+ msgstr "主色"
2087
+
2088
+ #. @context: Table cell in the sample detail article
2089
+ #: src/ui/pages/ThemeSamplePage.tsx
2090
+ msgid "Primary button"
2091
+ msgstr "主按钮"
2092
+
2093
+ #. @context: Description for the default logo asset card
2094
+ #: src/ui/pages/BrandPage.tsx
2095
+ msgid "Primary Jant logo for websites, docs, press coverage, and editorial layouts."
2096
+ msgstr "用于网站、文档、媒体报道和编辑版式的主要 Jant 标志."
2097
+
2098
+ #. @context: Section title for the logo downloads section
2099
+ #: src/ui/pages/BrandPage.tsx
2100
+ msgid "Primary logo files"
2101
+ msgstr "主要徽标文件"
2102
+
1062
2103
  #. @context: Archive visibility filter - private posts
2104
+ #. @context: Compose publish settings visibility option
2105
+ #: src/ui/compose/ComposeDialog.tsx
1063
2106
  #: src/ui/pages/ArchivePage.tsx
1064
2107
  msgid "Private"
1065
- msgstr ""
2108
+ msgstr "私密"
1066
2109
 
1067
2110
  #. @context: Avatar upload button text while generating favicon variants
1068
2111
  #: src/ui/dash/settings/AvatarContent.tsx
@@ -1070,25 +2113,61 @@ msgid "Processing..."
1070
2113
  msgstr "处理中..."
1071
2114
 
1072
2115
  #. @context: Archive visibility filter - public posts
2116
+ #. @context: Compose publish settings visibility option
2117
+ #: src/ui/compose/ComposeDialog.tsx
1073
2118
  #: src/ui/pages/ArchivePage.tsx
1074
2119
  msgid "Public"
1075
- msgstr ""
2120
+ msgstr "公开"
1076
2121
 
1077
2122
  #. @context: Confirm close action sheet - publish update button for editing published post
2123
+ #. @context: Primary button label on sample page
1078
2124
  #: src/ui/compose/ComposeDialog.tsx
2125
+ #: src/ui/pages/ThemeSamplePage.tsx
1079
2126
  msgid "Publish"
1080
- msgstr ""
2127
+ msgstr "发布"
2128
+
2129
+ #. @context: Compose publish settings panel title
2130
+ #: src/ui/compose/ComposeDialog.tsx
2131
+ msgid "Publish settings"
2132
+ msgstr "发布设置"
1081
2133
 
1082
2134
  #. @context: Post status badge - published
1083
2135
  #: src/ui/dash/StatusBadge.tsx
1084
2136
  msgid "Published"
1085
2137
  msgstr "已发布"
1086
2138
 
2139
+ #. @context: Tooltip text for the archive tile published timestamp
2140
+ #. @context: Tooltip text for the published timestamp in the post footer
2141
+ #: src/ui/pages/ArchivePage.tsx
2142
+ #: src/ui/shared/PostFooter.tsx
2143
+ msgid "Published on {date} at {time}"
2144
+ msgstr "发布于 {date} {time}"
2145
+
1087
2146
  #. @context: Toast shown after successful deferred publish
1088
2147
  #: src/ui/compose/ComposeDialog.tsx
1089
2148
  msgid "Published!"
1090
2149
  msgstr "已发布!"
1091
2150
 
2151
+ #. @context: Search highlight text on sample page
2152
+ #: src/ui/pages/ThemeSamplePage.tsx
2153
+ msgid "quiet design"
2154
+ msgstr "低调设计"
2155
+
2156
+ #. @context: Muted sample label
2157
+ #: src/ui/pages/ThemeSamplePage.tsx
2158
+ msgid "Quiet metadata"
2159
+ msgstr "低调元数据"
2160
+
2161
+ #. @context: Theme group heading on color theme settings page
2162
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
2163
+ msgid "Quiet Neutral"
2164
+ msgstr "克制中性色"
2165
+
2166
+ #. @context: Color theme preview card secondary sentence
2167
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
2168
+ msgid "Quiet surfaces let writing lead."
2169
+ msgstr "安静的界面应让文字先说话。"
2170
+
1092
2171
  #. @context: Compose format tab
1093
2172
  #. @context: Post format badge - quote
1094
2173
  #. @context: Post format label - quote
@@ -1098,6 +2177,11 @@ msgstr "已发布!"
1098
2177
  msgid "Quote"
1099
2178
  msgstr "引用"
1100
2179
 
2180
+ #. @context: Bullet item in the sample detail article
2181
+ #: src/ui/pages/ThemeSamplePage.tsx
2182
+ msgid "Quoted or highlighted passages should feel like annotations, not warnings."
2183
+ msgstr "引用或突出显示的段落应该像注释,而不是警告."
2184
+
1101
2185
  #. @context: Post format label plural - quotes
1102
2186
  #: src/ui/pages/ArchivePage.tsx
1103
2187
  msgid "Quotes"
@@ -1108,8 +2192,35 @@ msgstr "引用"
1108
2192
  msgid "Rate"
1109
2193
  msgstr "评分"
1110
2194
 
2195
+ #. @context: Ordered list item in the sample detail article
2196
+ #: src/ui/pages/ThemeSamplePage.tsx
2197
+ msgid "Read the page from top to bottom without looking at the swatches."
2198
+ msgstr "从上到下阅读页面,不要查看色板。"
2199
+
2200
+ #. @context: Inline link label on sample page
2201
+ #: src/ui/pages/ThemeSamplePage.tsx
2202
+ msgid "Read the palette as content first"
2203
+ msgstr "先将调色板作为内容读取"
2204
+
2205
+ #. @context: Color theme preview inline link label
2206
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
2207
+ msgid "Read why"
2208
+ msgstr "了解原因"
2209
+
2210
+ #. @context: Collection tag on sample quote post
2211
+ #: src/ui/pages/ThemeSamplePage.tsx
2212
+ msgid "Reading"
2213
+ msgstr "阅读"
2214
+
2215
+ #. @context: Section heading for real post component samples on the theme sample page
2216
+ #: src/ui/pages/ThemeSamplePage.tsx
2217
+ msgid "Real post components"
2218
+ msgstr "真实文章组件"
2219
+
2220
+ #. @context: Custom URL target type badge for a redirect
1111
2221
  #. @context: Custom URL type option
1112
2222
  #: src/routes/dash/custom-urls.tsx
2223
+ #: src/routes/dash/custom-urls.tsx
1113
2224
  msgid "Redirect"
1114
2225
  msgstr "重定向"
1115
2226
 
@@ -1120,35 +2231,52 @@ msgstr "重定向类型"
1120
2231
 
1121
2232
  #. @context: Settings item description for custom URLs
1122
2233
  #: src/ui/dash/settings/SettingsRootContent.tsx
1123
- msgid "Redirects and custom paths"
1124
- msgstr "重定向和自定义路径"
2234
+ msgid "Redirects, vanity paths, and URL control"
2235
+ msgstr "重定向、自定义路径与 URL 控制"
2236
+
2237
+ #. @context: Collection tag on sample link post
2238
+ #: src/ui/pages/ThemeSamplePage.tsx
2239
+ msgid "References"
2240
+ msgstr "参考"
1125
2241
 
1126
- #. @context: Button to remove icon
1127
- #. @context: Button to remove icon
1128
2242
  #. @context: Button to remove the blog avatar
1129
2243
  #. @context: Remove system item from navigation
1130
- #: src/ui/compose/ComposeDialog.tsx
1131
2244
  #: src/ui/dash/appearance/NavigationContent.tsx
1132
2245
  #: src/ui/dash/settings/AvatarContent.tsx
1133
- #: src/ui/shared/CollectionsSidebar.tsx
1134
2246
  msgid "Remove"
1135
2247
  msgstr "移除"
1136
2248
 
2249
+ #. @context: Button to remove an uploaded attachment in compose
2250
+ #: src/ui/compose/ComposeDialog.tsx
2251
+ msgid "Remove attachment"
2252
+ msgstr ""
2253
+
1137
2254
  #. @context: Tooltip for divider delete button
1138
- #: src/ui/shared/CollectionsSidebar.tsx
2255
+ #: src/ui/shared/CollectionsManager.tsx
1139
2256
  msgid "Remove Divider"
1140
2257
  msgstr "删除分隔线"
1141
2258
 
1142
- #. @context: Menu action to reorder collections
1143
- #: src/ui/shared/CollectionsSidebar.tsx
1144
- msgid "Reorder"
1145
- msgstr "重新排序"
2259
+ #. @context: Archive tile label for multiple thread replies
2260
+ #: src/ui/pages/ArchivePage.tsx
2261
+ msgid "Replies"
2262
+ msgstr "条回复"
1146
2263
 
2264
+ #. @context: Archive tile label for a single thread reply
1147
2265
  #. @context: Compose button - reply to post
2266
+ #. @context: Reply button label in the post footer
1148
2267
  #: src/ui/compose/ComposeDialog.tsx
2268
+ #: src/ui/pages/ArchivePage.tsx
2269
+ #: src/ui/shared/PostFooter.tsx
1149
2270
  msgid "Reply"
1150
2271
  msgstr "回复"
1151
2272
 
2273
+ #. @context: Button to restore the automatically generated collection link from the title
2274
+ #. @context: Compose custom slug action that clears the manual slug and falls back to automatic generation
2275
+ #: src/ui/compose/ComposeDialog.tsx
2276
+ #: src/ui/shared/collection-management-labels.ts
2277
+ msgid "Reset link"
2278
+ msgstr "重置链接"
2279
+
1152
2280
  #. @context: Password reset form submit button
1153
2281
  #. @context: Password reset page heading
1154
2282
  #: src/routes/auth/reset.tsx
@@ -1156,6 +2284,17 @@ msgstr "回复"
1156
2284
  msgid "Reset Password"
1157
2285
  msgstr "重置密码"
1158
2286
 
2287
+ #. @context: Asset keyword on the public brand asset page
2288
+ #. @context: Title for the reverse logo asset card
2289
+ #. @context: Title for the reverse logo card
2290
+ #. @context: Title for the reverse logo card
2291
+ #: src/ui/pages/BrandPage.tsx
2292
+ #: src/ui/pages/BrandPage.tsx
2293
+ #: src/ui/pages/BrandPage.tsx
2294
+ #: src/ui/pages/BrandPage.tsx
2295
+ msgid "Reverse logo"
2296
+ msgstr "反白标志"
2297
+
1159
2298
  #. @context: Button to revoke API token
1160
2299
  #. @context: Button to revoke a session
1161
2300
  #: src/ui/dash/settings/ApiTokensContent.tsx
@@ -1166,12 +2305,12 @@ msgstr "撤销"
1166
2305
  #. @context: Confirm dialog for revoking API token
1167
2306
  #: src/ui/dash/settings/ApiTokensContent.tsx
1168
2307
  msgid "Revoke this token? Any scripts using it will stop working."
1169
- msgstr "撤销此令牌吗? 任何使用它的脚本将停止工作。"
2308
+ msgstr "撤销此令牌吗?任何使用它的脚本都将停止工作。"
1170
2309
 
1171
- #. @context: Button to save collection
1172
2310
  #. @context: Button to save collection
1173
2311
  #. @context: Button to save settings
1174
2312
  #. @context: Button to save settings changes
2313
+ #. @context: Confirm action sheet - save text attachment changes button
1175
2314
  #. @context: Confirm close action sheet - save draft button
1176
2315
  #. @context: Save nav item changes
1177
2316
  #: src/ui/compose/ComposeDialog.tsx
@@ -1179,7 +2318,7 @@ msgstr "撤销此令牌吗? 任何使用它的脚本将停止工作。"
1179
2318
  #: src/ui/dash/appearance/NavigationContent.tsx
1180
2319
  #: src/ui/dash/settings/AvatarContent.tsx
1181
2320
  #: src/ui/dash/settings/GeneralContent.tsx
1182
- #: src/ui/shared/CollectionsSidebar.tsx
2321
+ #: src/ui/shared/collection-management-labels.ts
1183
2322
  msgid "Save"
1184
2323
  msgstr "保存"
1185
2324
 
@@ -1198,6 +2337,26 @@ msgstr "保存为草稿"
1198
2337
  msgid "Save CSS"
1199
2338
  msgstr "保存 CSS"
1200
2339
 
2340
+ #. @context: Secondary button label on sample page
2341
+ #: src/ui/pages/ThemeSamplePage.tsx
2342
+ msgid "Save draft"
2343
+ msgstr "保存草稿"
2344
+
2345
+ #. @context: Confirm action sheet title when closing text attachment editor
2346
+ #: src/ui/compose/ComposeDialog.tsx
2347
+ msgid "Save text attachment?"
2348
+ msgstr "保存文本附件?"
2349
+
2350
+ #. @context: Filled primary button label
2351
+ #: src/ui/pages/ThemeSamplePage.tsx
2352
+ msgid "Save theme"
2353
+ msgstr "保存主题"
2354
+
2355
+ #. @context: Confirm action sheet subtitle when closing text attachment editor
2356
+ #: src/ui/compose/ComposeDialog.tsx
2357
+ msgid "Save these changes to the text attachment, discard them, or keep editing."
2358
+ msgstr "保存对文本附件的更改、不保存,或继续编辑。"
2359
+
1201
2360
  #. @context: Confirm close action sheet subtitle
1202
2361
  #: src/ui/compose/ComposeDialog.tsx
1203
2362
  msgid "Save to drafts to edit and post at a later time."
@@ -1208,70 +2367,90 @@ msgstr "保存到草稿,以便稍后编辑并发布。"
1208
2367
  msgid "Save to drafts?"
1209
2368
  msgstr "保存为草稿?"
1210
2369
 
1211
- #. @context: Toast after saving a collection
1212
- #: src/ui/shared/CollectionsSidebar.tsx
1213
- msgid "Saved"
1214
- msgstr "已保存"
1215
-
1216
2370
  #. @context: Search icon link in browse nav
1217
2371
  #. @context: Search page title
1218
2372
  #. @context: Search submit button
2373
+ #. @context: Settings section heading for search engine indexing settings
2374
+ #: src/ui/dash/settings/GeneralContent.tsx
1219
2375
  #: src/ui/layouts/SiteLayout.tsx
1220
2376
  #: src/ui/pages/SearchPage.tsx
1221
2377
  #: src/ui/pages/SearchPage.tsx
1222
2378
  msgid "Search"
1223
2379
  msgstr "搜索"
1224
2380
 
1225
- #. @context: Emoji picker search placeholder
1226
- #. @context: Emoji picker search placeholder
1227
- #: src/ui/compose/ComposeDialog.tsx
1228
- #: src/ui/shared/CollectionsSidebar.tsx
1229
- msgid "Search emojis..."
1230
- msgstr "搜索表情..."
1231
-
1232
- #. @context: Icon picker search placeholder
1233
- #. @context: Icon picker search placeholder
1234
- #: src/ui/compose/ComposeDialog.tsx
1235
- #: src/ui/shared/CollectionsSidebar.tsx
1236
- msgid "Search icons..."
1237
- msgstr "搜索图标..."
1238
-
1239
2381
  #. @context: Search input placeholder
1240
2382
  #: src/ui/pages/SearchPage.tsx
1241
2383
  msgid "Search posts..."
1242
2384
  msgstr "搜索帖子..."
1243
2385
 
2386
+ #. @context: Toast after saving search settings
2387
+ #. @context: Toast after saving search settings
2388
+ #: src/routes/dash/settings.tsx
2389
+ #: src/routes/dash/settings.tsx
2390
+ msgid "Search settings updated."
2391
+ msgstr "搜索设置已更新。"
2392
+
2393
+ #. @context: Search snippet label on sample page
2394
+ #: src/ui/pages/ThemeSamplePage.tsx
2395
+ msgid "Search snippet"
2396
+ msgstr "搜索片段"
2397
+
1244
2398
  #. @context: Compose collection combobox search placeholder
1245
2399
  #: src/ui/compose/ComposeDialog.tsx
1246
2400
  msgid "Search..."
1247
2401
  msgstr "搜索..."
1248
2402
 
1249
- #. @context: Settings section heading for SEO
1250
- #: src/ui/dash/settings/GeneralContent.tsx
1251
- msgid "SEO"
1252
- msgstr "SEO"
2403
+ #. @context: Settings group label for account security settings
2404
+ #: src/ui/dash/settings/AccountMenuContent.tsx
2405
+ msgid "Security"
2406
+ msgstr "安全"
2407
+
2408
+ #. @context: Error toast when CSRF token is invalid or expired
2409
+ #: src/routes/dash/settings.tsx
2410
+ msgid "Security token expired. Refresh the page and try again."
2411
+ msgstr "安全令牌已过期。请刷新页面后重试。"
1253
2412
 
1254
- #. @context: Toast after saving SEO settings
1255
- #. @context: Toast after saving SEO settings
2413
+ #. @context: Error toast when CSRF token is missing from delete request
1256
2414
  #: src/routes/dash/settings.tsx
2415
+ msgid "Security token missing. Refresh the page and try again."
2416
+ msgstr "安全令牌缺失。请刷新页面后重试。"
2417
+
2418
+ #. @context: Settings item description for sessions
2419
+ #: src/ui/dash/settings/AccountMenuContent.tsx
2420
+ msgid "See where you're signed in and revoke old sessions"
2421
+ msgstr "查看您在哪些设备登录并撤销旧会话"
2422
+
2423
+ #. @context: Error shown when session management is blocked in demo mode
1257
2424
  #: src/routes/dash/settings.tsx
1258
- msgid "SEO settings updated."
1259
- msgstr "SEO 设置已更新."
2425
+ msgid "Session management is off in demo mode. Use the shared demo session instead."
2426
+ msgstr "演示模式下不提供会话管理。请直接使用共享演示会话。"
1260
2427
 
1261
2428
  #. @context: Settings item — session management
1262
2429
  #: src/ui/dash/settings/AccountMenuContent.tsx
1263
2430
  msgid "Sessions"
1264
- msgstr ""
2431
+ msgstr "会话"
1265
2432
 
1266
- #. @context: Settings item description for account
2433
+ #. @context: Settings item description for account settings on the settings home page
1267
2434
  #: src/ui/dash/settings/SettingsRootContent.tsx
1268
2435
  msgid "Sessions, password, export"
1269
- msgstr ""
2436
+ msgstr "会话、密码、导出"
1270
2437
 
1271
- #. @context: Toast after saving general settings
1272
- #: src/routes/dash/settings.tsx
1273
- msgid "Settings updated."
1274
- msgstr "设置已更新。"
2438
+ #. @context: Built-in navigation label for settings
2439
+ #. @context: Page title for the settings home page
2440
+ #: src/ui/dash/settings/SettingsRootContent.tsx
2441
+ #: src/ui/shared/navigation-labels.ts
2442
+ msgid "Settings"
2443
+ msgstr "设置"
2444
+
2445
+ #. @context: Usage label for the social preview image asset card
2446
+ #: src/ui/pages/BrandPage.tsx
2447
+ msgid "Shared links"
2448
+ msgstr "共享链接"
2449
+
2450
+ #. @context: Checkbox for showing the optional Jant credit link on the home page
2451
+ #: src/ui/dash/settings/GeneralContent.tsx
2452
+ msgid "Show \"Build with Jant\" at the bottom of the home page"
2453
+ msgstr "在首页底部显示 \"Build with Jant\""
1275
2454
 
1276
2455
  #. @context: Button to collapse expanded thread context
1277
2456
  #. @context: Collapse reply context
@@ -1287,8 +2466,20 @@ msgstr "收起"
1287
2466
  msgid "Show more"
1288
2467
  msgstr "展开更多"
1289
2468
 
2469
+ #. @context: Description for the settings system navigation toggle
2470
+ #: src/ui/shared/navigation-labels.ts
2471
+ msgid "Shows 'Settings' when logged in, 'Sign in' when logged out"
2472
+ msgstr "登录时显示“设置”,未登录时显示“登录”"
2473
+
2474
+ #. @context: Built-in navigation label shown when auth is required
2475
+ #: src/ui/shared/navigation-labels.ts
2476
+ msgid "Sign in"
2477
+ msgstr "登录"
2478
+
1290
2479
  #. @context: Sign in form submit button
1291
2480
  #. @context: Sign in page heading
2481
+ #. @context: Sign in page heading
2482
+ #: src/routes/auth/signin.tsx
1292
2483
  #: src/routes/auth/signin.tsx
1293
2484
  #: src/routes/auth/signin.tsx
1294
2485
  msgid "Sign In"
@@ -1303,13 +2494,20 @@ msgstr "退出登录"
1303
2494
  #. placeholder {0}: formatDate(session.createdAt)
1304
2495
  #: src/ui/dash/settings/SessionsContent.tsx
1305
2496
  msgid "Signed in {0}"
1306
- msgstr ""
2497
+ msgstr "已于 {0} 登录"
1307
2498
 
1308
2499
  #. @context: Settings group label for site settings
2500
+ #. @context: Settings subsection heading for basic site fields
2501
+ #: src/ui/dash/settings/GeneralContent.tsx
1309
2502
  #: src/ui/dash/settings/SettingsRootContent.tsx
1310
2503
  msgid "Site"
1311
2504
  msgstr "站点"
1312
2505
 
2506
+ #. @context: Token label on sample page
2507
+ #: src/ui/pages/ThemeSamplePage.tsx
2508
+ msgid "Site accent"
2509
+ msgstr "网站强调色"
2510
+
1313
2511
  #. @context: Settings section heading for site footer
1314
2512
  #: src/ui/dash/settings/GeneralContent.tsx
1315
2513
  msgid "Site Footer"
@@ -1322,12 +2520,30 @@ msgstr "网站页脚"
1322
2520
  msgid "Site Name"
1323
2521
  msgstr "站点名称"
1324
2522
 
1325
- #. @context: Collection form field
1326
- #. @context: Collection form field
1327
- #: src/ui/compose/ComposeDialog.tsx
1328
- #: src/ui/shared/CollectionsSidebar.tsx
1329
- msgid "Slug"
1330
- msgstr "URL 别名"
2523
+ #. @context: Toast after saving site settings
2524
+ #: src/routes/dash/settings.tsx
2525
+ msgid "Site settings updated."
2526
+ msgstr "站点设置已更新。"
2527
+
2528
+ #. @context: Description for the favicon asset card
2529
+ #: src/ui/pages/BrandPage.tsx
2530
+ msgid "Small browser icon used in tabs and bookmarks."
2531
+ msgstr "用于标签页和书签的小型浏览器图标。"
2532
+
2533
+ #. @context: Asset keyword on the public brand asset page
2534
+ #: src/ui/pages/BrandPage.tsx
2535
+ msgid "Social preview"
2536
+ msgstr "社交预览"
2537
+
2538
+ #. @context: Title for the social preview image asset card
2539
+ #: src/ui/pages/BrandPage.tsx
2540
+ msgid "Social preview image"
2541
+ msgstr "社交预览图"
2542
+
2543
+ #. @context: Color theme preview card body sentence
2544
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
2545
+ msgid "Soft color should still carry a clear reading rhythm."
2546
+ msgstr "柔和的颜色也该保有清晰的阅读节奏。"
1331
2547
 
1332
2548
  #. @context: Toast when uploads fail and post is auto-saved as draft
1333
2549
  #: src/ui/compose/ComposeDialog.tsx
@@ -1345,23 +2561,81 @@ msgstr "部分上传失败。已保存为草稿。"
1345
2561
  msgid "Something doesn't look right. Check the form and try again."
1346
2562
  msgstr "有些内容看起来不对。请检查表单并重试。"
1347
2563
 
2564
+ #. @context: Sort menu label on collection detail page
2565
+ #: src/ui/pages/CollectionPage.tsx
2566
+ msgid "Sort"
2567
+ msgstr "排序"
2568
+
1348
2569
  #. @context: Collection form field
1349
- #. @context: Collection form field
1350
- #: src/ui/compose/ComposeDialog.tsx
1351
- #: src/ui/shared/CollectionsSidebar.tsx
2570
+ #: src/ui/shared/collection-management-labels.ts
1352
2571
  msgid "Sort Order"
1353
- msgstr "排序顺序"
2572
+ msgstr "排序方式"
1354
2573
 
1355
2574
  #. @context: Compose quote source link placeholder
1356
2575
  #: src/ui/compose/ComposeDialog.tsx
1357
2576
  msgid "Source link (optional)"
1358
2577
  msgstr "来源链接 (可选)"
1359
2578
 
2579
+ #. @context: Section title for the icon and preview downloads section
2580
+ #: src/ui/pages/BrandPage.tsx
2581
+ msgid "Square assets for avatars, apps, browsers, and shared links"
2582
+ msgstr "用于头像、应用、浏览器和共享链接的方形资源"
2583
+
2584
+ #. @context: Asset keyword on the public brand asset page
2585
+ #: src/ui/pages/BrandPage.tsx
2586
+ msgid "Square logo"
2587
+ msgstr "方形徽标"
2588
+
2589
+ #. @context: Title for the square logo PNG asset card
2590
+ #: src/ui/pages/BrandPage.tsx
2591
+ msgid "Square logo PNG"
2592
+ msgstr "方形徽标 PNG"
2593
+
2594
+ #. @context: Title for the square tile asset card
2595
+ #: src/ui/pages/BrandPage.tsx
2596
+ msgid "Square tile"
2597
+ msgstr "方形图块"
2598
+
2599
+ #. @context: Heading for the quick-start panel on the brand asset page
2600
+ #: src/ui/pages/BrandPage.tsx
2601
+ msgid "Start here"
2602
+ msgstr "从这里开始"
2603
+
2604
+ #. @context: Table cell in the sample detail article
2605
+ #: src/ui/pages/ThemeSamplePage.tsx
2606
+ msgid "Stay sturdy and readable."
2607
+ msgstr "保持稳重且易读。"
2608
+
2609
+ #. @context: Compose custom slug helper label for the suggested slug
2610
+ #: src/ui/compose/ComposeDialog.tsx
2611
+ msgid "Suggested link"
2612
+ msgstr "建议链接"
2613
+
2614
+ #. @context: Textarea label on sample page
2615
+ #: src/ui/pages/ThemeSamplePage.tsx
2616
+ msgid "Summary"
2617
+ msgstr "摘要"
2618
+
1360
2619
  #. @context: Attached text panel hint
1361
2620
  #: src/ui/compose/ComposeDialog.tsx
1362
2621
  msgid "Supplementary content attached to your post"
1363
2622
  msgstr "附加到您的帖子的补充内容"
1364
2623
 
2624
+ #. @context: Table header in the sample detail article
2625
+ #: src/ui/pages/ThemeSamplePage.tsx
2626
+ msgid "Surface"
2627
+ msgstr "表面"
2628
+
2629
+ #. @context: Helper text for theme picker pills on the sample page
2630
+ #: src/ui/pages/ThemeSamplePage.tsx
2631
+ msgid "Switch the palette and mode without opening settings or changing the active site theme."
2632
+ msgstr "在不打开设置或更改当前站点主题的情况下切换调色板和模式。"
2633
+
2634
+ #. @context: Guidance body on the brand asset page
2635
+ #: src/ui/pages/BrandPage.tsx
2636
+ msgid "Switch to the white logo when the standard green version would lose contrast."
2637
+ msgstr "当标准绿色徽标对比度不足时,切换至白色徽标。"
2638
+
1365
2639
  #. @context: Nav item type badge
1366
2640
  #: src/ui/dash/appearance/NavigationContent.tsx
1367
2641
  msgid "system"
@@ -1387,7 +2661,7 @@ msgstr "目标别名"
1387
2661
  #: src/ui/pages/ArchivePage.tsx
1388
2662
  #: src/ui/pages/ArchivePage.tsx
1389
2663
  msgid "Text"
1390
- msgstr ""
2664
+ msgstr "仅文本"
1391
2665
 
1392
2666
  #. @context: Archive media filter - text file attachments
1393
2667
  #. @context: Attached text panel title
@@ -1406,71 +2680,208 @@ msgstr "该字体主题不可用。请选择另一个。"
1406
2680
  msgid "That theme isn't available. Pick another one."
1407
2681
  msgstr "该主题不可用。请选择另一个。"
1408
2682
 
2683
+ #. @context: Blockquote in the sample detail article
2684
+ #: src/ui/pages/ThemeSamplePage.tsx
2685
+ msgid "The best default color is the one you notice only after reading for a while."
2686
+ msgstr "最合适的默认颜色,是那种只有在阅读一段时间后才会注意到的颜色。"
2687
+
2688
+ #. @context: Intro copy for the quick-start panel on the brand asset page
2689
+ #: src/ui/pages/BrandPage.tsx
2690
+ msgid "The brand pack includes SVG logos, a transparent square PNG, rounded, square, and circle tiles, plus favicon, Apple touch icon, and the default social preview image."
2691
+ msgstr "品牌包包含 SVG 徽标、透明方形 PNG、圆角、方形和圆形图块,以及网站图标(favicon)、Apple Touch 图标和默认社交预览图片。"
2692
+
1409
2693
  #. @context: Custom URL path help text
1410
2694
  #: src/routes/dash/custom-urls.tsx
1411
2695
  msgid "The custom URL path (without leading slash)"
1412
2696
  msgstr "自定义 URL 路径(不含前导斜杠)"
1413
2697
 
1414
- #. @context: Font theme preview sentence for body text
1415
- #. @context: Font theme preview sentence for headings
1416
- #: src/ui/dash/appearance/FontThemeContent.tsx
1417
- #: src/ui/dash/appearance/FontThemeContent.tsx
1418
- msgid "The quick brown fox jumps over the lazy dog."
1419
- msgstr "敏捷的棕色狐狸跳过了懒惰的狗。"
2698
+ #. @context: Plain-text body fallback for the sample note post
2699
+ #: src/ui/pages/ThemeSamplePage.tsx
2700
+ msgid "The default accent should feel written, not branded."
2701
+ msgstr "默认的强调应给人手写感,而非品牌化。"
2702
+
2703
+ #. @context: Sample note summary prefix on the theme sample page
2704
+ #: src/ui/pages/ThemeSamplePage.tsx
2705
+ msgid "The default accent should support reading first. Start by comparing it against the"
2706
+ msgstr "默认强调色应以可读性为先。先将其与"
2707
+
2708
+ #. @context: Sample note post body prefix on the theme sample page
2709
+ #: src/ui/pages/ThemeSamplePage.tsx
2710
+ msgid "The default accent works best when it reads like a fountain-pen underline. Compare it against the"
2711
+ msgstr "默认强调色在像钢笔下划线那样呈现时效果最佳。将其与"
2712
+
2713
+ #. @context: Caption for the sample detail article image
2714
+ #: src/ui/pages/ThemeSamplePage.tsx
2715
+ msgid "The image should sit quietly inside the article instead of feeling like a card preview."
2716
+ msgstr "图片应安静地置于文章中,而不是像卡片预览那样突出。"
1420
2717
 
1421
2718
  #. @context: Description for max visible nav links, explains overflow behavior
1422
2719
  #: src/ui/dash/appearance/NavigationContent.tsx
1423
2720
  msgid "The rest will be tucked into a ··· menu"
1424
2721
  msgstr "其余项目将被收进 ··· 菜单"
1425
2722
 
2723
+ #. @context: Blockquote on the theme sample page
2724
+ #: src/ui/pages/ThemeSamplePage.tsx
2725
+ msgid "The right accent should disappear into the writing until you need it."
2726
+ msgstr "恰到好处的点缀应该融入文字,直到你需要它时才显现"
2727
+
1426
2728
  #. @context: Custom URL target slug help text
1427
2729
  #: src/routes/dash/custom-urls.tsx
1428
2730
  msgid "The slug of the target post or collection"
1429
- msgstr "目标文章或集合的 slug"
2731
+ msgstr "目标文章或合集的 slug"
2732
+
2733
+ #. @context: Section heading for theme picker pills
2734
+ #: src/ui/pages/ThemeSamplePage.tsx
2735
+ msgid "Theme"
2736
+ msgstr "主题"
2737
+
2738
+ #. @context: Browser page title for the public theme sample page
2739
+ #. @context: Eyebrow on the public theme sample page
2740
+ #: src/routes/pages/theme-sample.tsx
2741
+ #: src/ui/pages/ThemeSamplePage.tsx
2742
+ msgid "Theme sample"
2743
+ msgstr "主题示例"
2744
+
2745
+ #. @context: Fallback theme group description on color theme page
2746
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
2747
+ msgid "Themes that have not been assigned to a named group yet."
2748
+ msgstr "尚未归入已命名分组的主题。"
1430
2749
 
1431
2750
  #. @context: Link to theming documentation on Custom CSS page
1432
2751
  #: src/ui/dash/appearance/AdvancedContent.tsx
1433
2752
  msgid "Theming guide"
1434
- msgstr ""
2753
+ msgstr "主题指南"
2754
+
2755
+ #. @context: Helper text for the real post component section on the theme sample page
2756
+ #: src/ui/pages/ThemeSamplePage.tsx
2757
+ msgid "These are actual feed components with real footers, summaries, and inline links. Use this section to judge whether the theme still feels calm once it is applied to realistic content."
2758
+ msgstr "这些是真实的信息流组件,带有真实的页脚、摘要和内联链接。使用此部分来判断当主题应用到真实内容后是否仍然显得平静。"
1435
2759
 
1436
2760
  #. @context: Description for session management
1437
2761
  #: src/ui/dash/settings/SessionsContent.tsx
1438
2762
  msgid "These devices are currently signed in to your account. Revoke any session you don't recognize."
1439
- msgstr ""
2763
+ msgstr "这些设备当前已登录到您的账户。撤销任何您不认识的会话。"
2764
+
2765
+ #. @context: Opening paragraph on the sample detail article
2766
+ #: src/ui/pages/ThemeSamplePage.tsx
2767
+ msgid "This article is here to answer a specific question: does the default accent still feel calm once it has to carry a full reading experience?"
2768
+ msgstr "这篇文章想回答一个具体问题:当默认强调色要撑起一整段阅读体验时,它是否依然足够平静?"
1440
2769
 
1441
2770
  #. @context: Empty state message
1442
2771
  #: src/ui/pages/CollectionPage.tsx
1443
2772
  msgid "This collection is empty. Add posts from the editor."
1444
- msgstr "该集合为空。从编辑器添加文章。"
2773
+ msgstr "该合集为空。从编辑器添加文章。"
2774
+
2775
+ #. @context: Help text for choosing whether /feed points to latest or featured posts
2776
+ #: src/ui/dash/settings/GeneralContent.tsx
2777
+ msgid "This controls what /feed returns."
2778
+ msgstr "这会控制 /feed 返回哪一种 feed。"
2779
+
2780
+ #. @context: Notice shown on hosted account settings explaining that password and hosted account controls live in the connected hosted auth provider
2781
+ #: src/ui/dash/settings/AccountMenuContent.tsx
2782
+ msgid "This hosted site signs in through {providerLabel}. Manage password and hosted access there."
2783
+ msgstr "这个托管站点通过 {providerLabel} 登录。在那里管理密码和托管站点访问权限。"
2784
+
2785
+ #. @context: Collection link help text
2786
+ #: src/ui/shared/collection-management-labels.ts
2787
+ msgid "This is the last part of the collection link."
2788
+ msgstr "这是合集链接的最后一段。"
1445
2789
 
1446
2790
  #. @context: Help text for avatar upload
1447
2791
  #: src/ui/dash/settings/AvatarContent.tsx
1448
- msgid "This is used for your favicon and apple-touch-icon. For best results, upload a square image at least 180x180 pixels."
1449
- msgstr "此图用于您的 favicon 和 apple-touch-icon。为获得最佳效果,请上传至少 180×180 像素的方形图像。"
2792
+ msgid "This is used for your favicon and apple-touch-icon. For best results, upload a square PNG with a solid background at least 512x512 pixels."
2793
+ msgstr "此图用于您的 favicon 和 apple-touch-icon。为获得最佳效果,请上传至少 512×512 像素、带纯色背景的方形 PNG 图像。"
2794
+
2795
+ #. @context: Sample quote commentary prefix on the theme sample page
2796
+ #: src/ui/pages/ThemeSamplePage.tsx
2797
+ msgid "This is useful as a color check because it puts the accent next to quotation styling, metadata, and a quieter explanatory paragraph. Compare it back to the"
2798
+ msgstr "这对于颜色检查很有用,因为它将强调色放在引用样式、元数据和较为低调的说明段落旁。 将其与"
1450
2799
 
1451
2800
  #. @context: Password reset error heading
1452
2801
  #: src/routes/auth/reset.tsx
1453
2802
  msgid "This Link Has Expired"
1454
2803
  msgstr "此链接已过期"
1455
2804
 
2805
+ #. @context: Compose custom slug validation error when the entered slug is already taken
2806
+ #: src/ui/compose/ComposeDialog.tsx
2807
+ msgid "This link is already in use. Choose something else."
2808
+ msgstr "这个链接已被占用。换一个试试。"
2809
+
2810
+ #. @context: Collection slug validation error for reserved paths
2811
+ #. @context: Compose custom slug validation error for reserved paths
2812
+ #: src/ui/compose/ComposeDialog.tsx
2813
+ #: src/ui/shared/collection-management-labels.ts
2814
+ msgid "This link is reserved. Choose something else."
2815
+ msgstr "这个链接是保留地址,请换一个。"
2816
+
2817
+ #. @context: Sample link post body prefix on the theme sample page
2818
+ #: src/ui/pages/ThemeSamplePage.tsx
2819
+ msgid "This reference is useful because it treats links and citations as part of the reading rhythm. Keep that in mind while tuning the"
2820
+ msgstr "此参考资料很有用,因为它将链接和引文视为阅读节奏的一部分。在调整时请记住这一点 the"
2821
+
1456
2822
  #. @context: Password reset error description
1457
2823
  #: src/routes/auth/reset.tsx
1458
2824
  msgid "This reset link is no longer valid. Request a new one to continue."
1459
2825
  msgstr "该重置链接已失效。请求一个新的以继续。"
1460
2826
 
2827
+ #. @context: Error shown when a hosted upload would exceed the shared account media limit
2828
+ #. @context: Error shown when a hosted upload would exceed the shared account media limit
2829
+ #: src/routes/api/upload-multipart.ts
2830
+ #: src/routes/api/upload.ts
2831
+ msgid "This upload would exceed your shared hosted media limit. Remove files or upgrade storage to continue."
2832
+ msgstr ""
2833
+
2834
+ #. @context: Helper text for the detail article sample on the theme sample page
2835
+ #: src/ui/pages/ThemeSamplePage.tsx
2836
+ msgid "This uses the real single-post detail rendering with a longer article, inline image, tables, lists, quotes, and code. The content column stays at the same width as the live site."
2837
+ msgstr "此处使用真实的单篇文章详情渲染,示例包含较长文章、内嵌图片、表格、列表、引用和代码。内容栏的宽度与线上站点保持一致。"
2838
+
2839
+ #. @context: Warning text on account deletion page
2840
+ #: src/ui/dash/settings/DeleteAccountContent.tsx
2841
+ msgid "This will permanently delete all your data — posts, media, collections, settings, and your account. Your blog will be reset to its initial setup state. This cannot be undone."
2842
+ msgstr "这将永久删除您所有的数据 — 文章、媒体、合集、设置和您的账户。您的博客将被重置为初始设置状态。此操作不可撤销。"
2843
+
2844
+ #. @context: Archive month header count unit for a single thread
2845
+ #. @context: Archive page summary unit for a single matching thread
2846
+ #. @context: Singular thread count label on collection detail page
2847
+ #: src/ui/pages/ArchivePage.tsx
2848
+ #: src/ui/pages/ArchivePage.tsx
2849
+ #: src/ui/pages/CollectionPage.tsx
2850
+ msgid "thread"
2851
+ msgstr "个帖子串"
2852
+
2853
+ #. @context: Table cell in the sample detail article
2854
+ #: src/ui/pages/ThemeSamplePage.tsx
2855
+ msgid "Thread accent"
2856
+ msgstr "帖子串强调色"
2857
+
2858
+ #. @context: Thread accents section heading on sample page
2859
+ #: src/ui/pages/ThemeSamplePage.tsx
2860
+ msgid "Thread accents"
2861
+ msgstr "帖子串 强调色"
2862
+
2863
+ #. @context: Archive month header count unit for multiple threads
2864
+ #. @context: Archive page summary unit for multiple matching threads
2865
+ #. @context: Plural thread count label on collection detail page
2866
+ #: src/ui/pages/ArchivePage.tsx
2867
+ #: src/ui/pages/ArchivePage.tsx
2868
+ #: src/ui/pages/CollectionPage.tsx
2869
+ msgid "threads"
2870
+ msgstr "个帖子串"
2871
+
1461
2872
  #. @context: Settings form field
1462
2873
  #: src/ui/dash/settings/GeneralContent.tsx
1463
2874
  msgid "Time Zone"
1464
2875
  msgstr "时区"
1465
2876
 
1466
- #. @context: Collection form field
1467
2877
  #. @context: Collection form field
1468
2878
  #. @context: Compose note title placeholder
1469
2879
  #. @context: Compose toolbar - title tooltip
2880
+ #. @context: Input label on sample page
1470
2881
  #: src/ui/compose/ComposeDialog.tsx
1471
2882
  #: src/ui/compose/ComposeDialog.tsx
1472
- #: src/ui/compose/ComposeDialog.tsx
1473
- #: src/ui/shared/CollectionsSidebar.tsx
2883
+ #: src/ui/pages/ThemeSamplePage.tsx
2884
+ #: src/ui/shared/collection-management-labels.ts
1474
2885
  msgid "Title"
1475
2886
  msgstr "标题"
1476
2887
 
@@ -1481,6 +2892,11 @@ msgstr "标题"
1481
2892
  msgid "Titled"
1482
2893
  msgstr "有标题"
1483
2894
 
2895
+ #. @context: Sample quote commentary suffix on the theme sample page
2896
+ #: src/ui/pages/ThemeSamplePage.tsx
2897
+ msgid "to make sure both still feel like they belong to the same product."
2898
+ msgstr "以确保两者仍然感觉属于同一产品。"
2899
+
1484
2900
  #. @context: Description for system nav toggles
1485
2901
  #: src/ui/dash/appearance/NavigationContent.tsx
1486
2902
  msgid "Toggle built-in navigation items. Enabled items appear in your navigation alongside links."
@@ -1501,11 +2917,31 @@ msgstr "令牌名称"
1501
2917
  msgid "Tokens let you access the API from scripts, shortcuts, and other tools without signing in."
1502
2918
  msgstr "令牌可让您在不登录的情况下从脚本、快捷方式和其他工具访问 API。"
1503
2919
 
2920
+ #. @context: Usage label for the square logo PNG asset card
2921
+ #: src/ui/pages/BrandPage.tsx
2922
+ msgid "Transparent square"
2923
+ msgstr "透明正方形"
2924
+
2925
+ #. @context: Title on the public theme sample page
2926
+ #: src/ui/pages/ThemeSamplePage.tsx
2927
+ msgid "Tune color in a real reading context"
2928
+ msgstr "在真实阅读场景中调整颜色"
2929
+
2930
+ #. @context: Intro text on the settings home page below the title
2931
+ #: src/ui/dash/settings/SettingsRootContent.tsx
2932
+ msgid "Tune how your site looks, reads, and runs."
2933
+ msgstr "调整网站的外观、可读性和运行方式。"
2934
+
1504
2935
  #. @context: Custom URL form field
1505
2936
  #: src/routes/dash/custom-urls.tsx
1506
2937
  msgid "Type"
1507
2938
  msgstr "类型"
1508
2939
 
2940
+ #. @context: Instruction to type confirmation phrase before deletion
2941
+ #: src/ui/dash/settings/DeleteAccountContent.tsx
2942
+ msgid "Type the following phrase to confirm:"
2943
+ msgstr "请输入以下短语以确认:"
2944
+
1509
2945
  #. @context: Compose quote text placeholder
1510
2946
  #: src/ui/compose/ComposeDialog.tsx
1511
2947
  msgid "Type the quote..."
@@ -1513,20 +2949,13 @@ msgstr "输入引用..."
1513
2949
 
1514
2950
  #. @context: Settings item description for font theme
1515
2951
  #: src/ui/dash/settings/SettingsRootContent.tsx
1516
- msgid "Typography"
1517
- msgstr "排版"
2952
+ msgid "Typography choices and reading texture"
2953
+ msgstr "排版选项与阅读体验"
1518
2954
 
1519
2955
  #. @context: Fallback label when session device can't be identified
1520
2956
  #: src/ui/dash/settings/SessionsContent.tsx
1521
2957
  msgid "Unknown device"
1522
- msgstr ""
1523
-
1524
- #. @context: Archive visibility filter - unlisted posts
1525
- #. @context: Post badge - unlisted
1526
- #: src/ui/dash/StatusBadge.tsx
1527
- #: src/ui/pages/ArchivePage.tsx
1528
- msgid "Unlisted"
1529
- msgstr "未列出"
2958
+ msgstr "未知设备"
1530
2959
 
1531
2960
  #. @context: Archive filter - notes without a title
1532
2961
  #. @context: Archive filter - notes without a title
@@ -1535,6 +2964,11 @@ msgstr "未列出"
1535
2964
  msgid "Untitled"
1536
2965
  msgstr "无标题"
1537
2966
 
2967
+ #. @context: Settings item description for password change
2968
+ #: src/ui/dash/settings/AccountMenuContent.tsx
2969
+ msgid "Update the password you use to sign in"
2970
+ msgstr "更新您用于登录的密码"
2971
+
1538
2972
  #. @context: Button to upload avatar image
1539
2973
  #: src/ui/dash/settings/AvatarContent.tsx
1540
2974
  msgid "Upload Avatar"
@@ -1564,18 +2998,68 @@ msgstr "上传中..."
1564
2998
  msgid "URL"
1565
2999
  msgstr "URL"
1566
3000
 
1567
- #. @context: Collection path help text
1568
- #. @context: Collection path help text
1569
- #: src/ui/compose/ComposeDialog.tsx
1570
- #: src/ui/shared/CollectionsSidebar.tsx
1571
- msgid "URL-safe identifier (lowercase, numbers, hyphens). For CJK titles, slug will be auto-generated on the server."
1572
- msgstr "URL 安全的标识(小写、数字、连字符)。对于 CJK 标题,slug 将在服务器端自动生成。"
1573
-
1574
3001
  #. @context: Heading for API token usage examples
1575
3002
  #: src/ui/dash/settings/ApiTokensContent.tsx
1576
3003
  msgid "Usage"
1577
3004
  msgstr "用法"
1578
3005
 
3006
+ #. @context: Switch label for setting featured posts as default homepage
3007
+ #: src/ui/dash/appearance/NavigationContent.tsx
3008
+ msgid "Use Featured as the home feed"
3009
+ msgstr "将精选设为首页视图"
3010
+
3011
+ #. @context: Collection slug validation error for invalid characters
3012
+ #. @context: Compose custom slug validation error for invalid characters
3013
+ #: src/ui/compose/ComposeDialog.tsx
3014
+ #: src/ui/shared/collection-management-labels.ts
3015
+ msgid "Use lowercase letters, numbers, and hyphens only."
3016
+ msgstr "只能使用小写字母、数字和连字符。"
3017
+
3018
+ #. @context: Guidance title on the brand asset page
3019
+ #: src/ui/pages/BrandPage.tsx
3020
+ msgid "Use the logo on light backgrounds."
3021
+ msgstr "在浅色背景上使用徽标。"
3022
+
3023
+ #. @context: Guidance title on the brand asset page
3024
+ #: src/ui/pages/BrandPage.tsx
3025
+ msgid "Use the reverse logo on dark backgrounds."
3026
+ msgstr "在深色背景上使用反白徽标。"
3027
+
3028
+ #. @context: Body copy for the icon and preview downloads section
3029
+ #: src/ui/pages/BrandPage.tsx
3030
+ msgid "Use these when you need a transparent square logo, a shaped tile with a built-in background, a browser icon, or a default preview image."
3031
+ msgstr "当您需要透明的方形徽标、有内置背景的带形状图块、浏览器图标或默认预览图像时,请使用这些。"
3032
+
3033
+ #. @context: Help text for the explicit latest and featured feed URLs
3034
+ #: src/ui/dash/settings/GeneralContent.tsx
3035
+ msgid "Use these when you want a feed URL that never changes."
3036
+ msgstr "当你需要一个不会变化的 feed 链接时,使用这些地址。"
3037
+
3038
+ #. @context: Description for the default logo card
3039
+ #: src/ui/pages/BrandPage.tsx
3040
+ msgid "Use this for websites, docs, articles, and other light or neutral surfaces."
3041
+ msgstr "用于网站、文档、文章和其他浅色或中性色背景."
3042
+
3043
+ #. @context: Description for the reverse logo card
3044
+ #: src/ui/pages/BrandPage.tsx
3045
+ msgid "Use this on dark backgrounds, image-backed surfaces, and any placement where the green logo would lose contrast."
3046
+ msgstr "在深色背景、有图像背景的表面,以及任何会让绿色标志失去对比度的位置使用此标志。"
3047
+
3048
+ #. @context: Introductory description on the public theme sample page
3049
+ #: src/ui/pages/ThemeSamplePage.tsx
3050
+ msgid "Use this page to judge buttons, links, cards, forms, thread accents, and quiet surfaces before changing a theme globally."
3051
+ msgstr "在全局更改主题之前,使用此页面来评估按钮、链接、卡片、表单、帖子串强调和低调表面。"
3052
+
3053
+ #. @context: Description for choosing featured posts as the main RSS feed
3054
+ #: src/ui/dash/settings/GeneralContent.tsx
3055
+ msgid "Uses featured posts for /feed."
3056
+ msgstr "将精选帖子用作 /feed 的内容。"
3057
+
3058
+ #. @context: Description for choosing the latest posts as the main RSS feed
3059
+ #: src/ui/dash/settings/GeneralContent.tsx
3060
+ msgid "Uses the latest public posts for /feed."
3061
+ msgstr "将最新公开帖子用作 /feed 的内容。"
3062
+
1579
3063
  #. @context: Archive media filter - video
1580
3064
  #: src/ui/pages/ArchivePage.tsx
1581
3065
  msgid "Video"
@@ -1588,16 +3072,41 @@ msgstr "视频"
1588
3072
  msgid "View"
1589
3073
  msgstr "查看"
1590
3074
 
3075
+ #. @context: Thread link label on sample page
3076
+ #: src/ui/pages/ThemeSamplePage.tsx
3077
+ msgid "View earlier notes in this thread"
3078
+ msgstr "查看这个帖子串里更早的笔记"
3079
+
3080
+ #. @context: Compose publish settings section label
3081
+ #: src/ui/compose/ComposeDialog.tsx
3082
+ msgid "Visibility"
3083
+ msgstr "可见性"
3084
+
1591
3085
  #. @context: Prefix before Custom CSS link on color theme page
1592
3086
  #: src/ui/dash/appearance/ColorThemeContent.tsx
1593
3087
  msgid "Want more control?"
1594
- msgstr ""
3088
+ msgstr "想调得更细?"
3089
+
3090
+ #. @context: Theme group heading on color theme settings page
3091
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
3092
+ msgid "Warm Editorial"
3093
+ msgstr "暖调编辑风"
1595
3094
 
1596
3095
  #. @context: Setup page welcome heading
1597
3096
  #: src/routes/auth/setup.tsx
1598
3097
  msgid "Welcome to Jant"
1599
3098
  msgstr "欢迎使用 Jant"
1600
3099
 
3100
+ #. @context: Table header in the sample detail article
3101
+ #: src/ui/pages/ThemeSamplePage.tsx
3102
+ msgid "What the accent should do"
3103
+ msgstr "强调色该承担什么"
3104
+
3105
+ #. @context: Section heading in the sample detail article
3106
+ #: src/ui/pages/ThemeSamplePage.tsx
3107
+ msgid "What to look for while tuning it"
3108
+ msgstr "调整时要注意什么"
3109
+
1601
3110
  #. @context: Compose prompt placeholder text
1602
3111
  #: src/ui/compose/ComposePrompt.tsx
1603
3112
  msgid "What's on your mind?"
@@ -1609,16 +3118,49 @@ msgid "What's on your mind..."
1609
3118
  msgstr "在想些什么..."
1610
3119
 
1611
3120
  #. @context: Collection description placeholder
1612
- #. @context: Collection description placeholder
1613
- #: src/ui/compose/ComposeDialog.tsx
1614
- #: src/ui/shared/CollectionsSidebar.tsx
3121
+ #: src/ui/shared/collection-management-labels.ts
1615
3122
  msgid "What's this collection about?"
1616
- msgstr "这个集合是关于什么?"
3123
+ msgstr "这个合集是关于什么的?"
1617
3124
 
1618
3125
  #. @context: Description for featured default toggle, explains what happens when off
1619
3126
  #: src/ui/dash/appearance/NavigationContent.tsx
1620
- msgid "When off, visitors see your latest posts first"
1621
- msgstr "关闭时,访客会先看到你的最新文章"
3127
+ msgid "When off, the homepage opens with your latest posts."
3128
+ msgstr "关闭后,首页会先显示你的最新文章。"
3129
+
3130
+ #. @context: Textarea value on sample page
3131
+ #: src/ui/pages/ThemeSamplePage.tsx
3132
+ msgid "When primary is too rigid, the whole page starts reading like product UI instead of writing space."
3133
+ msgstr "当 primary 过于僵硬时,整个页面开始像产品界面,而不是写作空间。"
3134
+
3135
+ #. @context: Sample note summary second paragraph on the theme sample page
3136
+ #: src/ui/pages/ThemeSamplePage.tsx
3137
+ msgid "When the accent is slightly warmer and less literal, the whole page feels more like a writing space and less like product UI."
3138
+ msgstr "当强调色更温暖一点、也没那么直白时,整页会更像写作空间,而不是产品界面。"
3139
+
3140
+ #. @context: Description for backup and restore documentation link in account settings
3141
+ #: src/ui/dash/settings/AccountMenuContent.tsx
3142
+ msgid "When to use site export, database backups, and recovery drills."
3143
+ msgstr "何时该用站点导出、数据库备份和恢复演练。"
3144
+
3145
+ #. @context: Description for the circle tile asset card
3146
+ #: src/ui/pages/BrandPage.tsx
3147
+ msgid "White logo on the Jant green circle for profile images, badges, and other round placements where you want a ready-made asset."
3148
+ msgstr "白色标志置于 Jant 绿色圆形中,用于个人资料图片、徽章及其他需要现成素材的圆形场景。"
3149
+
3150
+ #. @context: Description for the brand tile asset card
3151
+ #: src/ui/pages/BrandPage.tsx
3152
+ msgid "White logo on the Jant green rounded tile for app icon mockups, touch icons, directory listings, and other square placements that should feel softer."
3153
+ msgstr "白色徽标置于 Jant 绿色圆角方块上,适用于应用图标原型、触控图标、目录列表以及其他需呈现更柔和感觉的方形位置。"
3154
+
3155
+ #. @context: Description for the square tile asset card
3156
+ #: src/ui/pages/BrandPage.tsx
3157
+ msgid "White logo on the Jant green square tile for platforms and layouts that expect a true edge-to-edge square."
3158
+ msgstr "白色标志位于 Jant 绿色方形图块上,适用于需要真正边到边正方形的平台和布局。"
3159
+
3160
+ #. @context: Sample note post title on the theme sample page
3161
+ #: src/ui/pages/ThemeSamplePage.tsx
3162
+ msgid "Why the default accent should feel written, not branded"
3163
+ msgstr "为什么默认强调色应该像书写,而不是品牌标识"
1622
3164
 
1623
3165
  #. @context: Error toast when sign-in credentials are wrong
1624
3166
  #: src/routes/auth/signin.tsx
@@ -1628,9 +3170,14 @@ msgstr "邮箱或密码错误。请检查您的凭证并重试。"
1628
3170
  #. @context: Confirm close action sheet title when editing a published post
1629
3171
  #: src/ui/compose/ComposeDialog.tsx
1630
3172
  msgid "You have unsaved changes"
1631
- msgstr ""
3173
+ msgstr "你有未保存的更改"
1632
3174
 
1633
3175
  #. @context: Compose thoughts placeholder
1634
3176
  #: src/ui/compose/ComposeDialog.tsx
1635
3177
  msgid "Your thoughts (optional)"
1636
3178
  msgstr "你的想法 (可选)"
3179
+
3180
+ #. @context: Compose publish settings slug input placeholder
3181
+ #: src/ui/compose/ComposeDialog.tsx
3182
+ msgid "your-post-link"
3183
+ msgstr "my-post-link"