ghost 6.57.1 → 6.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (747) hide show
  1. package/LICENSE +22 -0
  2. package/bin/validate-adapters.js +1 -5
  3. package/components/ghost-storage-base-3.0.0.tgz +0 -0
  4. package/components/tryghost-adapter-base-cache-0.2.0.tgz +0 -0
  5. package/components/tryghost-adapter-base-jobs-0.0.0.tgz +0 -0
  6. package/components/tryghost-adapter-base-redirects-0.0.0.tgz +0 -0
  7. package/components/tryghost-adapter-base-route-settings-0.0.0.tgz +0 -0
  8. package/components/tryghost-adapter-base-scheduling-0.2.2.tgz +0 -0
  9. package/components/tryghost-adapter-base-sso-0.1.2.tgz +0 -0
  10. package/components/tryghost-admin-api-schema-0.0.0.tgz +0 -0
  11. package/components/tryghost-custom-field-types-0.0.0.tgz +0 -0
  12. package/components/tryghost-i18n-0.0.0.tgz +0 -0
  13. package/components/tryghost-kg-card-factory-5.2.4.tgz +0 -0
  14. package/components/tryghost-kg-clean-basic-html-4.3.4.tgz +0 -0
  15. package/components/tryghost-kg-converters-1.2.5.tgz +0 -0
  16. package/components/tryghost-kg-default-cards-10.3.5.tgz +0 -0
  17. package/components/tryghost-kg-default-nodes-2.2.0.tgz +0 -0
  18. package/components/tryghost-kg-default-transforms-1.3.4.tgz +0 -0
  19. package/components/tryghost-kg-html-to-lexical-1.4.0.tgz +0 -0
  20. package/components/tryghost-kg-lexical-html-renderer-1.5.0.tgz +0 -0
  21. package/components/tryghost-kg-markdown-html-renderer-7.2.4.tgz +0 -0
  22. package/components/tryghost-kg-utils-1.1.4.tgz +0 -0
  23. package/components/tryghost-nql-string-0.0.0.tgz +0 -0
  24. package/components/tryghost-parse-email-address-0.0.0.tgz +0 -0
  25. package/core/boot.js +35 -3
  26. package/core/built/admin/assets/{about-BNojRaxf.js → about-B_BvSyLF.js} +1 -1
  27. package/core/built/admin/assets/{account-migration-DMS8JsM-.js → account-migration-oJUGxnzT.js} +1 -1
  28. package/core/built/admin/assets/activitypub/{account-migration-DHFbePl6.js → account-migration-BpDeIF3G.js} +8 -8
  29. package/core/built/admin/assets/activitypub/activitypub.js +4 -4
  30. package/core/built/admin/assets/activitypub/{avatar-CT4tS2_S.js → avatar-B0SpBPVL.js} +3 -3
  31. package/core/built/admin/assets/activitypub/{avatar-flipboard-ByYWKipo.js → avatar-flipboard-DKt1LGcE.js} +3 -3
  32. package/core/built/admin/assets/activitypub/{bluesky-sharing-srVnSHDz.js → bluesky-sharing-aPMtrS3L.js} +10 -10
  33. package/core/built/admin/assets/activitypub/{chunk-KS7C4IRE-D4HEcEwi.js → chunk-KS7C4IRE-CnTrsgmM.js} +26 -15
  34. package/core/built/admin/assets/activitypub/{content-formatters-C2sos5Ht.js → content-formatters-BORfuA9G.js} +318 -284
  35. package/core/built/admin/assets/activitypub/{copy-B1UBTOoZ.js → copy-D-YvNi2E.js} +2 -2
  36. package/core/built/admin/assets/activitypub/{dist-MPsb2WZ1.js → dist-Dqggkccr.js} +5 -5
  37. package/core/built/admin/assets/activitypub/{domain-DzcM9Dzo.js → domain-CPdiB27_.js} +10 -10
  38. package/core/built/admin/assets/activitypub/{edit-profile-CsQ_4xAk.js → edit-profile-BY2PawIe.js} +7 -7
  39. package/core/built/admin/assets/activitypub/{explore-CJe0DZBK.js → explore-Sp9bgAwq.js} +11 -11
  40. package/core/built/admin/assets/activitypub/{feed-CKV3qWON.js → feed-BjtF4ohL.js} +10 -10
  41. package/core/built/admin/assets/activitypub/{field-DckHfDJf.js → field-BDOYVTg6.js} +4 -4
  42. package/core/built/admin/assets/activitypub/{hash-Dlp8RM55.js → hash-DqXYHgzG.js} +2 -2
  43. package/core/built/admin/assets/activitypub/{inbox-CsPy4R0M.js → inbox-CZ7IOAMn.js} +2 -2
  44. package/core/built/admin/assets/activitypub/{inbox-DAsjzUUe.js → inbox-z1o2j1Tb.js} +11 -11
  45. package/core/built/admin/assets/activitypub/{label-DWyo9E5T.js → label-1jhN-qhD.js} +4 -4
  46. package/core/built/admin/assets/activitypub/layout-BRMezuty.js +1 -0
  47. package/core/built/admin/assets/activitypub/{moderation-B0Inc03M.js → moderation-CZudJi8N.js} +9 -9
  48. package/core/built/admin/assets/activitypub/{note-CSE54lER.js → note-nr_m_5yb.js} +8 -8
  49. package/core/built/admin/assets/activitypub/{notifications-RSwbKqdh.js → notifications-BdcyivbT.js} +10 -10
  50. package/core/built/admin/assets/activitypub/{onboarding-BFDkzeR2.js → onboarding-B4kwav9u.js} +2 -2
  51. package/core/built/admin/assets/activitypub/{onboarding-D6rcBdPe.js → onboarding-DZNElJYP.js} +3 -3
  52. package/core/built/admin/assets/activitypub/{preferences-CE231n2_.js → preferences-CNqy1x9C.js} +13 -13
  53. package/core/built/admin/assets/activitypub/{profile-aaQ1j1Eo.js → profile-DlY4rhbO.js} +15 -15
  54. package/core/built/admin/assets/activitypub/{reply-Cjb0Vs3m.js → reply-DASIN0Ec.js} +2 -2
  55. package/core/built/admin/assets/activitypub/{routes-Djb0mc9k.js → routes-CEHdEZzS.js} +31 -31
  56. package/core/built/admin/assets/activitypub/{separator-D8pROI5n.js → separator-B3k35sUV.js} +4 -4
  57. package/core/built/admin/assets/activitypub/{settings-DMc32IQl.js → settings-CrSV1cux.js} +6 -6
  58. package/core/built/admin/assets/activitypub/{site-DVIcsohX.js → site-CtBUCPBz.js} +6 -6
  59. package/core/built/admin/assets/activitypub/{step-1-9Yey9usF.js → step-1-D9jGWyAy.js} +7 -7
  60. package/core/built/admin/assets/activitypub/{step-2-DdYmKRXV.js → step-2-Jz_enuo9.js} +7 -7
  61. package/core/built/admin/assets/activitypub/{step-3-hdSkcjZU.js → step-3-KpUqpGWi.js} +12 -12
  62. package/core/built/admin/assets/activitypub/{tabs-CUqseYzQ.js → tabs-DvlsxTCI.js} +7 -7
  63. package/core/built/admin/assets/activitypub/{topic-filter-Coni6OXM.js → topic-filter-CIN1E2jg.js} +4 -4
  64. package/core/built/admin/assets/activitypub/{use-activity-pub-queries-MeHTPMQv.js → use-activity-pub-queries-CATFd6YV.js} +4 -4
  65. package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-B046AM38.js → use-navigate-with-base-path-iCkcbMGk.js} +2 -2
  66. package/core/built/admin/assets/activitypub/{use-reply-chain-data-1AO-Xob6.js → use-reply-chain-data-DJ0vhA8V.js} +6 -6
  67. package/core/built/admin/assets/activitypub/{users-BLeiOTHc.js → users-sgJ6GNZX.js} +12 -11
  68. package/core/built/admin/assets/activitypub/{x-BRfRYd16.js → x-Cy2jUiYM.js} +2 -2
  69. package/core/built/admin/assets/add-integration-modal-BW23PDYs.js +1 -0
  70. package/core/built/admin/assets/add-newsletter-modal-M0ls8BKO.js +1 -0
  71. package/core/built/admin/assets/{add-recommendation-modal-D-3LOrdd.js → add-recommendation-modal-B0NeBMzl.js} +1 -1
  72. package/core/built/admin/assets/{analytics-DTIMRhWw.js → analytics-BC2oR8ay.js} +1 -1
  73. package/core/built/admin/assets/announcement-bar-modal-pXBqjQE_.js +1 -0
  74. package/core/built/admin/assets/{api-keys-_iCT4dxr.js → api-keys-BgKr003d.js} +1 -1
  75. package/core/built/admin/assets/{api-keys-Dx4NeNpK.js → api-keys-Df6uv1dT.js} +1 -1
  76. package/core/built/admin/assets/{audience-DkknNqhZ.js → audience-BY8od8If.js} +1 -1
  77. package/core/built/admin/assets/{automated-emails-PayPCT8L.js → automated-emails-28c2Lbb3.js} +1 -1
  78. package/core/built/admin/assets/{automations-DvSU7QhW.js → automations-DCs6Wady.js} +1 -1
  79. package/core/built/admin/assets/{automations-162q5HjL.js → automations-Dzp_QnON.js} +1 -1
  80. package/core/built/admin/assets/{bluesky-sharing-yZ9A_jL8.js → bluesky-sharing-D0P42Cws.js} +1 -1
  81. package/core/built/admin/assets/{breadcrumb-CjOH7LCU.js → breadcrumb-MTj_cKLb.js} +1 -1
  82. package/core/built/admin/assets/card-CiiE7QfM.js +1 -0
  83. package/core/built/admin/assets/{chart-helpers-DGxvWnBT.js → chart-helpers-DcO3k_vA.js} +1 -1
  84. package/core/built/admin/assets/{checkbox-BSUcnNq_.js → checkbox-LmClhqcS.js} +1 -1
  85. package/core/built/admin/assets/{chunk.424.4a27628efdade15c2dab.js → chunk.408.1a258af360eb8d905508.js} +40 -37
  86. package/core/built/admin/assets/{chunk.571.40f093ed6d883993714e.js → chunk.492.a9da46ca956b10116774.js} +1342 -1342
  87. package/core/built/admin/assets/{chunk.571.40f093ed6d883993714e.js.LICENSE.txt → chunk.492.a9da46ca956b10116774.js.LICENSE.txt} +1 -1
  88. package/core/built/admin/assets/chunk.524.4c693c3a00ac91df34fa.js +25 -0
  89. package/core/built/admin/assets/chunk.582.20b600e329e58d12d7c2.js +27 -0
  90. package/core/built/admin/assets/code-editor-view-DqTOUnbM.js +1 -0
  91. package/core/built/admin/assets/code-editor-view-bA0lfxUL.js +1 -0
  92. package/core/built/admin/assets/{debounce-Cx5B_9OI.js → color-picker-CBlJMv3y.js} +2 -2
  93. package/core/built/admin/assets/color-picker-field-Cv9GOJQZ.js +1 -0
  94. package/core/built/admin/assets/{combobox-5rdgDrDV.js → combobox-BbPJzjCp.js} +1 -1
  95. package/core/built/admin/assets/command-BrhXIlDr.js +1 -0
  96. package/core/built/admin/assets/comments-Cu4rD1aJ.js +1 -0
  97. package/core/built/admin/assets/confirmation-provider-BEdrnHns.js +1 -0
  98. package/core/built/admin/assets/{content-api-modal-BtW4Z1-1.js → content-api-modal-BOFWRUkC.js} +1 -1
  99. package/core/built/admin/assets/{copy-field-CEp_XieW.js → copy-field-8biQvNMD.js} +1 -1
  100. package/core/built/admin/assets/custom-field-type-option-CNhAgHbJ.js +1 -0
  101. package/core/built/admin/assets/custom-integration-modal-CrGOI8IB.js +1 -0
  102. package/core/built/admin/assets/{date-range-select-B3Ij1Rqg.js → date-range-select-Bsh4gIek.js} +1 -1
  103. package/core/built/admin/assets/debounce-pscB46sW.js +1 -0
  104. package/core/built/admin/assets/design-and-theme-modal-DWZguwWX.js +23 -0
  105. package/core/built/admin/assets/{dirty-confirm-dialog-YE9L21gY.js → dirty-confirm-dialog-DmdMpgyN.js} +1 -1
  106. package/core/built/admin/assets/{disabled-sources-indicator-uIzbWL7K.js → disabled-sources-indicator-BLnmyWgt.js} +1 -1
  107. package/core/built/admin/assets/dist-4m6pHdc0.js +23 -0
  108. package/core/built/admin/assets/{dist-DCk0UkGx.js → dist-B6bJuxL3.js} +1 -1
  109. package/core/built/admin/assets/{dist-CbHbGtQ-.js → dist-BtaTA7Ii.js} +1 -1
  110. package/core/built/admin/assets/{dist-Q1p9iXwH.js → dist-CZgIBXQN.js} +1 -1
  111. package/core/built/admin/assets/dist-CiHx7vA5.js +6 -0
  112. package/core/built/admin/assets/{dist-ARN6XTcR.js → dist-ECAUrdGc.js} +1 -1
  113. package/core/built/admin/assets/dist-Z97pCNqS.js +11 -0
  114. package/core/built/admin/assets/{dist-t6AXpf_4.js → dist-zwwGt8Yf.js} +1 -1
  115. package/core/built/admin/assets/{domain-DzrOAPY8.js → domain-Dp9TRrFp.js} +1 -1
  116. package/core/built/admin/assets/{dropzone-CzhP33wa.js → dropzone-B21Entqz.js} +1 -1
  117. package/core/built/admin/assets/{edit-profile-oufs4R4n.js → edit-profile-DG6lpMsr.js} +1 -1
  118. package/core/built/admin/assets/editor-CPQOrhrn.js +8 -0
  119. package/core/built/admin/assets/{editor-DtxX27Jz.css → editor-DLioOiRN.css} +1 -1
  120. package/core/built/admin/assets/{embed-signup-form-modal-Ch3s6lqA.js → embed-signup-form-modal-CgWniDha.js} +2 -2
  121. package/core/built/admin/assets/esm-CXo5SEPy.js +2 -0
  122. package/core/built/admin/assets/{explore-CA-R01Br.js → explore-C3rzONJv.js} +1 -1
  123. package/core/built/admin/assets/{feed-ClC8_Gld.js → feed-DpUwS1cU.js} +1 -1
  124. package/core/built/admin/assets/{field-B3OPenbP.js → field-BQqLTgHM.js} +1 -1
  125. package/core/built/admin/assets/{filter-sources-CiPLnG9A.js → filter-sources-FgqoUIL7.js} +1 -1
  126. package/core/built/admin/assets/{filters-yFvybRMe.js → filters-D0uIMD8n.js} +1 -1
  127. package/core/built/admin/assets/filters-DZJT29GW.js +1 -0
  128. package/core/built/admin/assets/{first-promoter-modal-BC0UpYCD.js → first-promoter-modal-DJhQQheG.js} +1 -1
  129. package/core/built/admin/assets/framework-provider-CFLwK5uS.js +4 -0
  130. package/core/built/admin/assets/{ghost-d38c30b866e59f2e06a357b5eb844fe5.css → ghost-68f447a1796b93a1f128b649bac8506d.css} +1 -1
  131. package/core/built/admin/assets/{ghost-d683fbeb945b13155ea669caa5d8db41.js → ghost-ba408063a5922b458b4a8f216cf23251.js} +124 -342
  132. package/core/built/admin/assets/{ghost-dark-1bffd5099ba7a749303133efacf8480b.css → ghost-dark-28ae4899c92022857f3584694bcb50ef.css} +1 -1
  133. package/core/built/admin/assets/{gift-link-modal-BKRuqo-k.js → gift-link-modal-sdFLjND9.js} +1 -1
  134. package/core/built/admin/assets/{gift-links-CVuqLhsZ.js → gift-links-D7BJ9qfe.js} +1 -1
  135. package/core/built/admin/assets/{global-data-provider-RzW6Bnlf.js → global-data-provider-CixmTX00.js} +1 -1
  136. package/core/built/admin/assets/{growth-ClNAldfL.js → growth-0YYkBEeS.js} +1 -1
  137. package/core/built/admin/assets/{growth-Dz8OSG06.js → growth-DpjAPeQT.js} +2 -2
  138. package/core/built/admin/assets/{history-modal-DIVuQ5Ct.js → history-modal-BWJ4-cJ0.js} +1 -1
  139. package/core/built/admin/assets/{hooks-D6EE7BIt.js → hooks-CJepWnbB.js} +1 -1
  140. package/core/built/admin/assets/{html-field-CVZ2sMxw.js → html-field-C-oa5DEl.js} +1 -1
  141. package/core/built/admin/assets/{iframe-buffering-e8vH4-Qn.js → iframe-buffering-Ba9sDpi2.js} +1 -1
  142. package/core/built/admin/assets/{images-Ok8FFJ3A.js → images-3cQgwfTD.js} +1 -1
  143. package/core/built/admin/assets/{inbox-CMUVI6qb.js → inbox-Dz_JblyJ.js} +6 -6
  144. package/core/built/admin/assets/index-BOJzlYiz.js +67 -0
  145. package/core/built/admin/assets/index-Bid6LAyc.css +1 -0
  146. package/core/built/admin/assets/{input-group-2XU-iuh_.js → input-group-DpogNUIt.js} +1 -1
  147. package/core/built/admin/assets/{integrations-BT6_iJvu.js → integrations-B9yYgci5.js} +1 -1
  148. package/core/built/admin/assets/{invite-user-modal-DrZ7xxrZ.js → invite-user-modal-DCiQSiuD.js} +1 -1
  149. package/core/built/admin/assets/{koenig-editor-base-BPj4S760.js → koenig-editor-base-BApy8Q7C.js} +1 -1
  150. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +8328 -8294
  151. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +84 -84
  152. package/core/built/admin/assets/{koenig-lexical-Cdjv-m3_.js → koenig-lexical-2KuqRwZI.js} +33 -33
  153. package/core/built/admin/assets/{kpi-card-J8Mj1sDX.js → kpi-card-Ck3tT2Wg.js} +1 -1
  154. package/core/built/admin/assets/{kpi-card-awos0BMH.js → kpi-card-DDIxptaS.js} +1 -1
  155. package/core/built/admin/assets/{kpi-helpers-SEhvH-8E.js → kpi-helpers-ssbuy-hD.js} +1 -1
  156. package/core/built/admin/assets/{kpi-tabs-R6BjsKhd.js → kpi-tabs-BqoIM6bI.js} +1 -1
  157. package/core/built/admin/assets/{label-BMC3dzLI.js → label-DodDsMzn.js} +1 -1
  158. package/core/built/admin/assets/label-picker-Cvvbmzb5.js +1 -0
  159. package/core/built/admin/assets/{labels-DAPjKPy2.js → labels-DqvSR6JF.js} +1 -1
  160. package/core/built/admin/assets/layout-DkkGyev2.js +1 -0
  161. package/core/built/admin/assets/limit-service-BhiEvqcP.js +20 -0
  162. package/core/built/admin/assets/{link-helpers-Bzkk68GD.js → link-helpers-kpbU8TWh.js} +1 -1
  163. package/core/built/admin/assets/luxon-D1RVjjpq.js +1 -0
  164. package/core/built/admin/assets/member-custom-fields-CvGcpaiW.js +1 -0
  165. package/core/built/admin/assets/member-detail-CMCMZ47_.js +1 -0
  166. package/core/built/admin/assets/members-sRl6fNfq.js +11 -0
  167. package/core/built/admin/assets/{moderation-mPjYHgZW.js → moderation-KhKwGqI1.js} +1 -1
  168. package/core/built/admin/assets/{multi-select-combobox-CsoyHAiX.js → multi-select-combobox-nhCff0_K.js} +1 -1
  169. package/core/built/admin/assets/{navigation-modal-D_c0badj.js → navigation-modal-MDJExWDJ.js} +1 -1
  170. package/core/built/admin/assets/newsletter-BIBHumfV.js +1 -0
  171. package/core/built/admin/assets/newsletter-detail-modal-CfjBMH3v.js +1 -0
  172. package/core/built/admin/assets/{newsletter-emails-B-OLfrvr.js → newsletter-emails-ClDL-7dA.js} +1 -1
  173. package/core/built/admin/assets/newsletters-CBe-IPzK.js +1 -0
  174. package/core/built/admin/assets/{newsletters-Du0lzskS.js → newsletters-ILsexy-5.js} +1 -1
  175. package/core/built/admin/assets/{note-CSVsUKBm.js → note-HnNUOt4d.js} +1 -1
  176. package/core/built/admin/assets/{notifications-DV9FRtDw.js → notifications-Cj5e-258.js} +1 -1
  177. package/core/built/admin/assets/nql-lang-CaWrLesS.js +19 -0
  178. package/core/built/admin/assets/{offers-Um6ab71O.js → offers-DMxebaoK.js} +1 -1
  179. package/core/built/admin/assets/offers-container-modal-BHwHtixC.js +1 -0
  180. package/core/built/admin/assets/{onboarding-route--jL5KLPD.js → onboarding-route-D_4jp7Nq.js} +1 -1
  181. package/core/built/admin/assets/overview-CezDdg-F.js +1 -0
  182. package/core/built/admin/assets/overview-D5mM51Lj.js +1 -0
  183. package/core/built/admin/assets/{page-header-DAvDYKO9.js → page-header-VLPJfj_d.js} +1 -1
  184. package/core/built/admin/assets/{pages-BVMnpI2O.js → pages-Gchxp5c7.js} +1 -1
  185. package/core/built/admin/assets/{pintura-modal-jiUCxX0Q.js → pintura-modal-BXXJ8Iaa.js} +1 -1
  186. package/core/built/admin/assets/{portal-frame-D4D4nEO6.js → portal-frame-BLCvF8f-.js} +1 -1
  187. package/core/built/admin/assets/portal-modal-DN80tAcy.js +1 -0
  188. package/core/built/admin/assets/{post-analytics-BhAtiFJp.js → post-analytics-Gv81eN_g.js} +1 -1
  189. package/core/built/admin/assets/post-analytics-header-_ydSY8qO.js +1 -0
  190. package/core/built/admin/assets/{post-analytics-provider-DGg0FUqs.js → post-analytics-provider-O2YjZMhN.js} +1 -1
  191. package/core/built/admin/assets/{post-share-modal-DtFAC132.js → post-share-modal-CzYak_a5.js} +1 -1
  192. package/core/built/admin/assets/{posts-CxG7v0-M.js → posts-DgcUi2rc.js} +1 -1
  193. package/core/built/admin/assets/preferences-gneLb6LV.js +5 -0
  194. package/core/built/admin/assets/{preview-modal-DctYx20m.js → preview-modal-Bkq-tgVm.js} +1 -1
  195. package/core/built/admin/assets/profile-CzXmCNTC.js +1 -0
  196. package/core/built/admin/assets/{radio-group-CI5_Kf_d.js → radio-group-Dsq5ZEbV.js} +1 -1
  197. package/core/built/admin/assets/{referrers-B9QDAfYm.js → referrers-C3a2K8qB.js} +1 -1
  198. package/core/built/admin/assets/{router-provider-DSQfprxH.js → router-provider-CkB_ArLF.js} +1 -1
  199. package/core/built/admin/assets/{select-CkXqNJDJ.js → select-xuZAuDyS.js} +1 -1
  200. package/core/built/admin/assets/{settings-ZCj-W56o.js → settings-Ct8pabhr.js} +1 -1
  201. package/core/built/admin/assets/settings-KSWWQanQ.js +4 -0
  202. package/core/built/admin/assets/{settings-breadcrumbs-DIq31FwA.js → settings-breadcrumbs-DbPGu-Tu.js} +1 -1
  203. package/core/built/admin/assets/{share-modal-BNj14g79.js → share-modal-CdiUx9WM.js} +1 -1
  204. package/core/built/admin/assets/{slack-modal-C6SpMQ-q.js → slack-modal-BP--Z3jE.js} +1 -1
  205. package/core/built/admin/assets/{sort-button-B-k54ow2.js → sort-button-CjfKdlsL.js} +1 -1
  206. package/core/built/admin/assets/{source-icon-Cej3sZM6.js → source-icon-DHj1h6Ts.js} +1 -1
  207. package/core/built/admin/assets/{stats-B2KW8E2y.js → stats-C615kulJ.js} +1 -1
  208. package/core/built/admin/assets/{stats-view-CVzU2-p5.js → stats-view-BSMRdYiN.js} +1 -1
  209. package/core/built/admin/assets/{step-1-Dbn1iIMU.js → step-1-pSdGYtIF.js} +1 -1
  210. package/core/built/admin/assets/{step-2-BahnSuN6.js → step-2-T9Uy4eBD.js} +1 -1
  211. package/core/built/admin/assets/{step-3-CW04e2ZJ.js → step-3-D4uXe_XG.js} +2 -2
  212. package/core/built/admin/assets/{stripe-button-BkBZqaGG.js → stripe-button-Bh4p6Wud.js} +1 -1
  213. package/core/built/admin/assets/stripe-connect-modal-C2vTvepi.js +1 -0
  214. package/core/built/admin/assets/{table-BtLcEi1M.js → table-DghJxZMH.js} +1 -1
  215. package/core/built/admin/assets/{tabs-BaWRfg8j.js → tabs-l9c7FjzI.js} +1 -1
  216. package/core/built/admin/assets/tag-detail-DBw_M2-p.js +2 -0
  217. package/core/built/admin/assets/{tags-BbygUvNB.js → tags-DoWsAG6l.js} +1 -1
  218. package/core/built/admin/assets/{tags-BwCgmr5v.js → tags-EmEvJN75.js} +1 -1
  219. package/core/built/admin/assets/{testimonials-modal--bdzppyh.js → testimonials-modal-BZKePE2T.js} +1 -1
  220. package/core/built/admin/assets/tier-detail-modal-D65pVWsN.js +1 -0
  221. package/core/built/admin/assets/{tiers-Da6kxHQP.js → tiers-8iTFjJWg.js} +1 -1
  222. package/core/built/admin/assets/{toggle-group-CVl-Xigr.js → toggle-group-uJnl42w3.js} +1 -1
  223. package/core/built/admin/assets/{topic-filter-BoRHRbL1.js → topic-filter-BM7hz0kW.js} +1 -1
  224. package/core/built/admin/assets/transistor-modal-VZOGN3od.js +1 -0
  225. package/core/built/admin/assets/{unsplash-modal-CixoRAO2.js → unsplash-modal-CKGfACxF.js} +1 -1
  226. package/core/built/admin/assets/{use-analytics-data-BiWvcf1u.js → use-analytics-data-IxJcSjc9.js} +1 -1
  227. package/core/built/admin/assets/use-check-theme-limit-error-CGp3CGT5.js +1 -0
  228. package/core/built/admin/assets/use-feature-flag-CSq2Lwzt.js +1 -0
  229. package/core/built/admin/assets/use-filter-params-0hcJJuEJ.js +1 -0
  230. package/core/built/admin/assets/{use-filterable-api-iMpDZBxD.js → use-filterable-api-CQBtVG-l.js} +1 -1
  231. package/core/built/admin/assets/{use-growth-stats-Dom8xVzo.js → use-growth-stats-1NW-8eEZ.js} +1 -1
  232. package/core/built/admin/assets/use-limiter-ffwpsZPp.js +2 -0
  233. package/core/built/admin/assets/{use-pintura-config-Bj4QmiVk.js → use-pintura-config-BjFChXV1.js} +1 -1
  234. package/core/built/admin/assets/{use-pintura-editor-DvrslmPE.js → use-pintura-editor-Cb41oJyL.js} +1 -1
  235. package/core/built/admin/assets/{use-post-referrers-pxIHTXFs.js → use-post-referrers-Dp1BnTAK.js} +1 -1
  236. package/core/built/admin/assets/{use-reply-chain-data-CmFe0N6F.js → use-reply-chain-data-C0ZUTkfk.js} +1 -1
  237. package/core/built/admin/assets/{use-setting-group-Cmp_sy-d.js → use-setting-group-Bx8M6FL2.js} +1 -1
  238. package/core/built/admin/assets/{use-settings-navigation-BmROPrls.js → use-settings-navigation-BOZcat_V.js} +1 -1
  239. package/core/built/admin/assets/{use-simple-pagination-D5rL3YwO.js → use-simple-pagination-DsEGSJhe.js} +1 -1
  240. package/core/built/admin/assets/{use-tinybird-query-DP2dMaq7.js → use-tinybird-query-Ci_DiPkX.js} +1 -1
  241. package/core/built/admin/assets/{use-tinybird-token-DrK_skPQ.js → use-tinybird-token-CsUwc722.js} +1 -1
  242. package/core/built/admin/assets/use-upgrade-route-B3_DUiuT.js +1 -0
  243. package/core/built/admin/assets/{use-url-input-ChrUZBFf.js → use-url-input-BEZJpVgN.js} +2 -2
  244. package/core/built/admin/assets/user-detail-modal-595z1N5r.js +1 -0
  245. package/core/built/admin/assets/{users-B6hIds6n.js → users-DmGMPfw7.js} +1 -1
  246. package/core/built/admin/assets/virtual-list-D5ugXyZY.js +1 -0
  247. package/core/built/admin/assets/{web-D71mjB2r.js → web-CAta3lRE.js} +1 -1
  248. package/core/built/admin/assets/web-Ds9_wWJK.js +2 -0
  249. package/core/built/admin/assets/zapier-modal-CcfDZY53.js +1 -0
  250. package/core/built/admin/index.html +12 -12
  251. package/core/frontend/apps/private-blogging/lib/middleware.js +5 -58
  252. package/core/frontend/helpers/ghost_head.js +52 -0
  253. package/core/frontend/meta/asset-url.js +20 -9
  254. package/core/frontend/public/cards.manifest.json +1 -0
  255. package/core/frontend/public/ghost-stats.min.js +1 -1
  256. package/core/frontend/services/assets-minification/card-assets.js +121 -46
  257. package/core/frontend/services/assets-minification/index.js +13 -4
  258. package/core/frontend/services/data/fetch-data.js +7 -14
  259. package/core/frontend/services/llms/service.js +27 -6
  260. package/core/frontend/services/proxy.js +1 -0
  261. package/core/frontend/services/routing/api-adapter.js +11 -5
  262. package/core/frontend/services/routing/collection-router.js +1 -2
  263. package/core/frontend/services/routing/controllers/entry/markdown.js +63 -5
  264. package/core/frontend/services/routing/controllers/entry.js +1 -1
  265. package/core/frontend/services/routing/controllers/previews.js +0 -3
  266. package/core/frontend/services/routing/events.js +2 -1
  267. package/core/frontend/services/routing/parent-router.js +0 -22
  268. package/core/frontend/services/routing/router-manager.js +2 -2
  269. package/core/frontend/services/routing/static-pages-router.js +0 -1
  270. package/core/frontend/services/sitemap/handler.js +3 -4
  271. package/core/frontend/services/sitemap/site-map-manager.js +1 -2
  272. package/core/frontend/services/theme-engine/i18n/i18n.js +0 -33
  273. package/core/frontend/web/middleware/llms-discovery.js +2 -2
  274. package/core/frontend/web/routers/serve-public-file.js +33 -3
  275. package/core/frontend/web/site.js +5 -4
  276. package/core/server/adapters/jobs/InMemoryJobsBackend.js +113 -0
  277. package/core/server/adapters/redirects/S3RedirectsStore.js +33 -13
  278. package/core/server/adapters/route-settings/S3RouteSettingsStore.js +33 -13
  279. package/core/server/adapters/scheduling/scheduling-default.js +6 -7
  280. package/core/server/adapters/storage/LocalStorageBase.js +1 -3
  281. package/core/server/api/endpoints/index.js +0 -4
  282. package/core/server/api/endpoints/member-custom-fields.js +15 -4
  283. package/core/server/api/endpoints/pages.js +3 -11
  284. package/core/server/api/endpoints/posts.js +3 -11
  285. package/core/server/api/endpoints/utils/api-filter-utils.js +15 -1
  286. package/core/server/api/endpoints/utils/serializers/input/settings.js +4 -0
  287. package/core/server/api/endpoints/utils/serializers/output/index.js +0 -4
  288. package/core/server/api/endpoints/utils/serializers/output/mappers/email-batches.js +1 -1
  289. package/core/server/api/endpoints/utils/serializers/output/mappers/snippets.js +0 -1
  290. package/core/server/api/endpoints/utils/serializers/output/member-custom-fields.js +1 -0
  291. package/core/server/data/exporter/table-lists.js +4 -1
  292. package/core/server/data/migrations/utils/schema.js +5 -3
  293. package/core/server/data/migrations/versions/6.57/2026-08-04-18-00-00-store-custom-field-values-as-leaf-rows.js +19 -7
  294. package/core/server/data/migrations/versions/6.58/2026-08-10-08-20-50-add-machine-payments-settings.js +41 -0
  295. package/core/server/data/migrations/versions/6.58/2026-08-10-08-21-00-add-machine-payment-events-table.js +18 -0
  296. package/core/server/data/migrations/versions/6.58/2026-08-10-15-24-09-reset-custom-field-definitions-for-underscored-keys.js +66 -0
  297. package/core/server/data/migrations/versions/6.58/2026-08-11-10-00-00-swap-custom-field-values-to-key-fk.js +65 -0
  298. package/core/server/data/migrations/versions/6.58/2026-08-11-10-34-25-remove-legacy-explore-integration.js +131 -0
  299. package/core/server/data/migrations/versions/6.58/2026-08-11-16-00-00-add-sort-order-to-members-custom-fields.js +13 -0
  300. package/core/server/data/migrations/versions/6.58/2026-08-11-21-22-48-rename-email-batches-provider-id.js +8 -0
  301. package/core/server/data/migrations/versions/6.58/2026-08-13-16-07-33-add-automation-runs-automation-id-created-at-index.js +28 -0
  302. package/core/server/data/schema/README.md +87 -0
  303. package/core/server/data/schema/commands.js +5 -2
  304. package/core/server/data/schema/default-settings/default-settings.json +27 -0
  305. package/core/server/data/schema/fixtures/fixtures.json +0 -21
  306. package/core/server/data/schema/schema.js +37 -9
  307. package/core/server/data/seeders/data-generator.js +3 -1
  308. package/core/server/data/seeders/importers/automation-action-edges-importer.js +38 -0
  309. package/core/server/data/seeders/importers/automation-action-revisions-importer.js +139 -0
  310. package/core/server/data/seeders/importers/automation-actions-importer.js +84 -0
  311. package/core/server/data/seeders/importers/automation-run-steps-importer.js +134 -0
  312. package/core/server/data/seeders/importers/automation-runs-importer.js +97 -0
  313. package/core/server/data/seeders/importers/automations-importer.js +78 -0
  314. package/core/server/data/seeders/importers/benefits-importer.js +1 -1
  315. package/core/server/data/seeders/importers/comment-reports-importer.js +5 -5
  316. package/core/server/data/seeders/importers/comments-importer.js +6 -6
  317. package/core/server/data/seeders/importers/email-batches-importer.js +9 -8
  318. package/core/server/data/seeders/importers/email-recipient-failures-importer.js +1 -1
  319. package/core/server/data/seeders/importers/email-recipients-importer.js +12 -12
  320. package/core/server/data/seeders/importers/emails-importer.js +7 -7
  321. package/core/server/data/seeders/importers/index.js +6 -0
  322. package/core/server/data/seeders/importers/labels-importer.js +4 -4
  323. package/core/server/data/seeders/importers/members-click-events-importer.js +4 -4
  324. package/core/server/data/seeders/importers/members-created-events-importer.js +5 -5
  325. package/core/server/data/seeders/importers/members-feedback-importer.js +7 -7
  326. package/core/server/data/seeders/importers/members-importer.js +5 -5
  327. package/core/server/data/seeders/importers/members-labels-importer.js +1 -1
  328. package/core/server/data/seeders/importers/members-login-events-importer.js +4 -4
  329. package/core/server/data/seeders/importers/members-newsletters-importer.js +1 -1
  330. package/core/server/data/seeders/importers/members-paid-subscription-events-importer.js +1 -1
  331. package/core/server/data/seeders/importers/members-products-importer.js +3 -3
  332. package/core/server/data/seeders/importers/members-status-events-importer.js +4 -4
  333. package/core/server/data/seeders/importers/members-stripe-customers-importer.js +3 -3
  334. package/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js +8 -8
  335. package/core/server/data/seeders/importers/members-subscribe-events-importer.js +3 -3
  336. package/core/server/data/seeders/importers/members-subscription-created-events-importer.js +4 -4
  337. package/core/server/data/seeders/importers/newsletters-importer.js +1 -1
  338. package/core/server/data/seeders/importers/offer-redemptions-importer.js +6 -6
  339. package/core/server/data/seeders/importers/offers-importer.js +4 -4
  340. package/core/server/data/seeders/importers/posts-authors-importer.js +1 -1
  341. package/core/server/data/seeders/importers/posts-importer.js +5 -5
  342. package/core/server/data/seeders/importers/posts-products-importer.js +1 -1
  343. package/core/server/data/seeders/importers/posts-tags-importer.js +1 -1
  344. package/core/server/data/seeders/importers/products-benefits-importer.js +1 -1
  345. package/core/server/data/seeders/importers/products-importer.js +1 -1
  346. package/core/server/data/seeders/importers/recommendation-click-events-importer.js +1 -1
  347. package/core/server/data/seeders/importers/recommendation-subscribe-events-importer.js +1 -1
  348. package/core/server/data/seeders/importers/recommendations-importer.js +1 -1
  349. package/core/server/data/seeders/importers/redirects-importer.js +1 -1
  350. package/core/server/data/seeders/importers/roles-users-importer.js +1 -1
  351. package/core/server/data/seeders/importers/stripe-prices-importer.js +1 -1
  352. package/core/server/data/seeders/importers/stripe-products-importer.js +1 -1
  353. package/core/server/data/seeders/importers/table-importer.js +92 -91
  354. package/core/server/data/seeders/importers/tags-importer.js +3 -3
  355. package/core/server/data/seeders/importers/users-importer.js +3 -3
  356. package/core/server/data/seeders/importers/web-mentions-importer.js +3 -3
  357. package/core/server/data/seeders/utils/database-date.js +14 -18
  358. package/core/server/data/seeders/utils/json-importer.js +1 -1
  359. package/core/server/data/seeders/utils/random.js +8 -7
  360. package/core/server/data/seeders/utils/topological-sort.js +5 -3
  361. package/core/server/data/tinybird/ARCHITECTURE.md +1 -2
  362. package/core/server/models/base/plugins/crud.js +0 -5
  363. package/core/server/models/index.js +2 -0
  364. package/core/server/models/machine-payment-event.js +18 -0
  365. package/core/server/models/member.js +24 -0
  366. package/core/server/models/settings.js +32 -3
  367. package/core/server/models/user.js +1 -1
  368. package/core/server/services/README.md +30 -0
  369. package/core/server/services/activitypub/activity-pub-service.js +2 -3
  370. package/core/server/services/adapter-manager/base-classes.js +3 -1
  371. package/core/server/services/auth/passwordreset.js +47 -51
  372. package/core/server/services/automations/database-automations-repository.js +19 -3
  373. package/core/server/services/automations/poll.js +2 -8
  374. package/core/server/services/comments/comments-service.js +4 -16
  375. package/core/server/services/comments/index.js +1 -3
  376. package/core/server/services/email-analytics/email-analytics-service-wrapper.js +68 -119
  377. package/core/server/services/email-analytics/email-analytics-service.js +73 -229
  378. package/core/server/services/email-analytics/event-processing-result.js +0 -10
  379. package/core/server/services/email-analytics/fetch-mailgun-events.js +25 -0
  380. package/core/server/services/email-analytics/index.js +35 -67
  381. package/core/server/services/email-analytics/lib/queries.js +88 -51
  382. package/core/server/services/email-analytics/newsletter-email-analytics-batch-processor.js +4 -1
  383. package/core/server/services/email-service/batch-sending-service.js +1 -1
  384. package/core/server/services/email-service/email-event-processor.js +12 -12
  385. package/core/server/services/email-service/events/email-bounced-event.js +8 -46
  386. package/core/server/services/email-service/events/email-delivered-event.js +8 -36
  387. package/core/server/services/email-service/events/email-opened-event.js +8 -36
  388. package/core/server/services/email-service/events/email-temporary-bounced-event.js +8 -46
  389. package/core/server/services/email-service/events/email-unsubscribed-event.js +8 -31
  390. package/core/server/services/email-service/events/spam-complaint-event.js +8 -31
  391. package/core/server/services/email-service/newsletter-email-event-storage.js +8 -7
  392. package/core/server/services/email-service/sending-service.js +1 -1
  393. package/core/server/services/email-suppression-list/mailgun-email-suppression-list.js +2 -2
  394. package/core/server/services/email-suppression-list/service.js +1 -3
  395. package/core/server/services/explore-ping/explore-ping-service.js +1 -6
  396. package/core/server/services/explore-ping/index.js +0 -2
  397. package/core/server/services/gifts/index.js +109 -3
  398. package/core/server/services/gifts/jobs/clean-gifts-job.js +1 -1
  399. package/core/server/services/gifts/jobs/send-gift-reminders-job.js +1 -1
  400. package/core/server/services/jobs-service/index.js +36 -0
  401. package/core/server/services/jobs-service/job.js +6 -0
  402. package/core/server/services/jobs-service/jobs-service.js +91 -0
  403. package/core/server/services/jobs-service/register-job-handlers.js +6 -0
  404. package/core/server/services/lib/mailgun-client.js +1 -1
  405. package/core/server/services/machine-payments/README.md +23 -0
  406. package/core/server/services/machine-payments/adapters/mpp-adapter.js +195 -0
  407. package/core/server/services/machine-payments/content-loader.js +89 -0
  408. package/core/server/services/machine-payments/eligibility.js +6 -0
  409. package/core/server/services/machine-payments/events/machine-payment-event-repository.js +58 -0
  410. package/core/server/services/machine-payments/events/machine-payment-event.js +46 -0
  411. package/core/server/services/machine-payments/index.js +87 -0
  412. package/core/server/services/machine-payments/pricing.js +54 -0
  413. package/core/server/services/machine-payments/service.js +275 -0
  414. package/core/server/services/machine-payments/stripe/deposit-address-store.js +157 -0
  415. package/core/server/services/machine-payments/stripe/payment-recorder.js +85 -0
  416. package/core/server/services/machine-payments/stripe/stripe-client-options.js +25 -0
  417. package/core/server/services/machine-payments/types.js +2 -0
  418. package/core/server/services/members/import-export/csv/parse.js +9 -1
  419. package/core/server/services/members/import-export/import/completion-email.js +61 -27
  420. package/core/server/services/members/import-export/import/email-template.js +28 -15
  421. package/core/server/services/members/import-export/import/importer.js +99 -51
  422. package/core/server/services/members/import-export/import/spool.js +1 -1
  423. package/core/server/services/members/import-export/index.js +24 -1
  424. package/core/server/services/members/members-api/services/member-bread-service.js +2 -2
  425. package/core/server/services/members/members-config-provider.js +12 -2
  426. package/core/server/services/members-custom-fields/actions.js +2 -1
  427. package/core/server/services/members-custom-fields/definitions-service.js +109 -27
  428. package/core/server/services/members-custom-fields/filter.js +199 -0
  429. package/core/server/services/members-custom-fields/key.js +37 -0
  430. package/core/server/services/members-custom-fields/queries.js +15 -0
  431. package/core/server/services/members-custom-fields/schema.js +1 -1
  432. package/core/server/services/members-custom-fields/values-service.js +18 -14
  433. package/core/server/services/members-events/last-seen-at-updater.js +1 -1
  434. package/core/server/services/oembed/oembed-service.js +8 -2
  435. package/core/server/services/permissions/can-this.js +4 -1
  436. package/core/server/services/posts/posts-service.js +18 -16
  437. package/core/server/services/public-config/config.js +1 -1
  438. package/core/server/services/route-settings/dynamic-routing-service.js +2 -0
  439. package/core/server/services/settings-helpers/settings-helpers.js +0 -1
  440. package/core/server/services/stats/posts-stats-service.js +0 -2
  441. package/core/server/services/stripe/stripe-api.js +2 -9
  442. package/core/server/web/api/endpoints/admin/middleware.js +0 -1
  443. package/core/server/web/api/endpoints/admin/routes.js +2 -3
  444. package/core/server/web/comments/routes.js +31 -8
  445. package/core/shared/config/defaults.json +17 -2
  446. package/core/shared/config/loader.js +11 -2
  447. package/core/shared/config/overrides.json +2 -0
  448. package/core/shared/config/secrets.js +71 -0
  449. package/core/shared/labs.js +4 -13
  450. package/core/shared/machine-payments.js +30 -0
  451. package/core/shared/private-site-access/index.js +68 -0
  452. package/package.json +48 -43
  453. package/pnpm-lock.yaml +1412 -1583
  454. package/pnpm-workspace.yaml +85 -48
  455. package/bin/validate-adapters.ts +0 -87
  456. package/components/tryghost-adapter-base-scheduling-0.2.1.tgz +0 -0
  457. package/components/tryghost-adapter-base-sso-0.1.1.tgz +0 -0
  458. package/components/tryghost-kg-card-factory-5.2.3.tgz +0 -0
  459. package/components/tryghost-kg-clean-basic-html-4.3.3.tgz +0 -0
  460. package/components/tryghost-kg-converters-1.2.4.tgz +0 -0
  461. package/components/tryghost-kg-default-cards-10.3.4.tgz +0 -0
  462. package/components/tryghost-kg-default-nodes-2.1.5.tgz +0 -0
  463. package/components/tryghost-kg-default-transforms-1.3.3.tgz +0 -0
  464. package/components/tryghost-kg-html-to-lexical-1.3.3.tgz +0 -0
  465. package/components/tryghost-kg-lexical-html-renderer-1.4.3.tgz +0 -0
  466. package/components/tryghost-kg-markdown-html-renderer-7.2.3.tgz +0 -0
  467. package/components/tryghost-kg-utils-1.1.3.tgz +0 -0
  468. package/content/themes/casper/assets/built/casper.js.map +0 -1
  469. package/content/themes/casper/assets/built/global.css.map +0 -1
  470. package/content/themes/casper/assets/built/screen.css.map +0 -1
  471. package/content/themes/source/assets/built/screen.css.map +0 -1
  472. package/content/themes/source/assets/built/source.js.map +0 -1
  473. package/core/built/admin/assets/activitypub/layout-DM_3pqsU.js +0 -1
  474. package/core/built/admin/assets/add-integration-modal-DU9ghGLS.js +0 -1
  475. package/core/built/admin/assets/add-newsletter-modal-DFxuQrYu.js +0 -1
  476. package/core/built/admin/assets/announcement-bar-modal-DGCcezB6.js +0 -1
  477. package/core/built/admin/assets/card-aUHX0hyR.js +0 -1
  478. package/core/built/admin/assets/chunk.524.dce1c51e0bc30fb2718e.js +0 -25
  479. package/core/built/admin/assets/chunk.582.3a430d5c6a744fd475b6.js +0 -27
  480. package/core/built/admin/assets/code-editor-view-BcyKABrG.js +0 -1
  481. package/core/built/admin/assets/color-picker-field-8NoSnhNI.js +0 -1
  482. package/core/built/admin/assets/command-BOYMbZa_.js +0 -1
  483. package/core/built/admin/assets/comments-BhNM5CYl.js +0 -1
  484. package/core/built/admin/assets/confirmation-modal-CYD7x3UQ.js +0 -1
  485. package/core/built/admin/assets/custom-integration-modal-bk3lNEuQ.js +0 -1
  486. package/core/built/admin/assets/design-and-theme-modal-B2xYKS1I.js +0 -23
  487. package/core/built/admin/assets/dist-Bg8bSvLA.js +0 -6
  488. package/core/built/admin/assets/dist-BnFdlebk.js +0 -11
  489. package/core/built/admin/assets/dist-CsvXCJSe.js +0 -23
  490. package/core/built/admin/assets/editor-BBKrunMK.js +0 -8
  491. package/core/built/admin/assets/filters-Bz0HsRie.js +0 -1
  492. package/core/built/admin/assets/framework-provider-CmtnPXIT.js +0 -4
  493. package/core/built/admin/assets/index-DUXM0NlS.js +0 -67
  494. package/core/built/admin/assets/index-Ds2iUoF6.css +0 -1
  495. package/core/built/admin/assets/label-picker-Bnlru5tO.js +0 -1
  496. package/core/built/admin/assets/layout-yR9rlvEw.js +0 -1
  497. package/core/built/admin/assets/limit-modal-COmLevuY.js +0 -1
  498. package/core/built/admin/assets/limit-service-9fwD33lU.js +0 -20
  499. package/core/built/admin/assets/member-custom-fields-BvFKEpxJ.js +0 -1
  500. package/core/built/admin/assets/member-detail-CWdPAe3p.js +0 -1
  501. package/core/built/admin/assets/members-Bnt0ih2R.js +0 -11
  502. package/core/built/admin/assets/newsletter-DR49NyGS.js +0 -1
  503. package/core/built/admin/assets/newsletter-detail-modal-B45pL1pb.js +0 -1
  504. package/core/built/admin/assets/newsletters-DGs5BaKH.js +0 -1
  505. package/core/built/admin/assets/nql-lang-B7faUf8D.js +0 -19
  506. package/core/built/admin/assets/offers-container-modal-B0hFS8nk.js +0 -1
  507. package/core/built/admin/assets/overview-B-ZPNqMo.js +0 -1
  508. package/core/built/admin/assets/overview-D96iwoJi.js +0 -1
  509. package/core/built/admin/assets/portal-modal-BLFdYeDH.js +0 -1
  510. package/core/built/admin/assets/post-analytics-header-DK27VjJm.js +0 -1
  511. package/core/built/admin/assets/preferences-CuWLISHa.js +0 -5
  512. package/core/built/admin/assets/profile-BsKYYtuL.js +0 -1
  513. package/core/built/admin/assets/settings-B4vM-rgV.js +0 -4
  514. package/core/built/admin/assets/stripe-connect-modal-CYDDrSJm.js +0 -1
  515. package/core/built/admin/assets/tag-detail-CmqiC32L.js +0 -1
  516. package/core/built/admin/assets/tier-detail-modal-BZmAsIy4.js +0 -1
  517. package/core/built/admin/assets/transistor-modal-CBPDqEGy.js +0 -1
  518. package/core/built/admin/assets/use-check-theme-limit-error-B14lZukR.js +0 -2
  519. package/core/built/admin/assets/use-feature-flag-BmJoc5WN.js +0 -1
  520. package/core/built/admin/assets/use-filter-params-ChoV72Hw.js +0 -1
  521. package/core/built/admin/assets/use-limiter-Dwg8ivgQ.js +0 -2
  522. package/core/built/admin/assets/user-detail-modal-XODpOqNC.js +0 -1
  523. package/core/built/admin/assets/virtual-list-Dnoafqbk.js +0 -1
  524. package/core/built/admin/assets/web-z71lA1Y3.js +0 -2
  525. package/core/built/admin/assets/zapier-modal-Bp507Um7.js +0 -1
  526. package/core/frontend/meta/og-type.ts +0 -13
  527. package/core/frontend/services/routing/api-adapter.ts +0 -157
  528. package/core/frontend/services/routing/config.ts +0 -59
  529. package/core/frontend/services/routing/controllers/entry/canonical-url.ts +0 -14
  530. package/core/frontend/services/routing/controllers/entry/gift-links.ts +0 -56
  531. package/core/frontend/services/routing/controllers/entry/markdown.ts +0 -72
  532. package/core/frontend/services/routing/controllers/entry.ts +0 -120
  533. package/core/frontend/services/routing/controllers/rss.ts +0 -66
  534. package/core/frontend/services/routing/permalink-adapter.ts +0 -10
  535. package/core/frontend/src/utils/privacy.ts +0 -66
  536. package/core/server/adapters/redirects/FileStore.ts +0 -113
  537. package/core/server/adapters/redirects/S3RedirectsStore.ts +0 -185
  538. package/core/server/adapters/route-settings/FileStore.ts +0 -144
  539. package/core/server/adapters/route-settings/S3RouteSettingsStore.ts +0 -199
  540. package/core/server/adapters/route-settings/utils.ts +0 -17
  541. package/core/server/adapters/scheduling/deps.d.ts +0 -1
  542. package/core/server/adapters/scheduling/error-capture.ts +0 -91
  543. package/core/server/adapters/scheduling/scheduling-default.ts +0 -248
  544. package/core/server/adapters/scheduling/utils.ts +0 -36
  545. package/core/server/adapters/sso/DefaultSSOAdapter.ts +0 -15
  546. package/core/server/adapters/storage/LocalFilesStorage.ts +0 -24
  547. package/core/server/adapters/storage/LocalImagesStorage.ts +0 -24
  548. package/core/server/adapters/storage/LocalMediaStorage.ts +0 -24
  549. package/core/server/adapters/storage/LocalStorageBase.ts +0 -342
  550. package/core/server/adapters/storage/S3Storage.ts +0 -506
  551. package/core/server/adapters/storage/utils.ts +0 -60
  552. package/core/server/api/endpoints/automation-action-links.ts +0 -46
  553. package/core/server/api/endpoints/explore.js +0 -18
  554. package/core/server/api/endpoints/gift-links.ts +0 -87
  555. package/core/server/api/endpoints/libraries.d.ts +0 -2
  556. package/core/server/api/endpoints/member-commenting.ts +0 -92
  557. package/core/server/api/endpoints/member-custom-fields.ts +0 -106
  558. package/core/server/api/endpoints/utils/api-filter-utils.ts +0 -22
  559. package/core/server/api/endpoints/utils/gift-link-access.ts +0 -82
  560. package/core/server/api/endpoints/utils/public-cache-keys.ts +0 -47
  561. package/core/server/api/endpoints/utils/serializers/input/member-commenting.ts +0 -29
  562. package/core/server/api/endpoints/utils/serializers/output/explore.js +0 -11
  563. package/core/server/api/endpoints/utils/serializers/output/gift-links.ts +0 -21
  564. package/core/server/api/endpoints/utils/serializers/output/member-commenting.ts +0 -8
  565. package/core/server/api/endpoints/utils/serializers/output/member-custom-fields.ts +0 -25
  566. package/core/server/api/endpoints/utils/serializers/output/members.d.ts +0 -20
  567. package/core/server/api/endpoints/utils/serializers/output/posts-csv-transform.ts +0 -46
  568. package/core/server/api/endpoints/utils/serializers/output/stream-csv-response.ts +0 -47
  569. package/core/server/api/endpoints/utils/validate-email-sender-fields.ts +0 -42
  570. package/core/server/data/importer/email-template.ts +0 -213
  571. package/core/server/data/seeders/utils/topological-sort.ts +0 -48
  572. package/core/server/lib/auto-filling-map.ts +0 -23
  573. package/core/server/lib/bootstrap-socket.ts +0 -114
  574. package/core/server/lib/case-keys.ts +0 -30
  575. package/core/server/lib/common/to-plain.ts +0 -25
  576. package/core/server/lib/db-date.ts +0 -8
  577. package/core/server/lib/get-inbox-links.ts +0 -276
  578. package/core/server/lib/post-revisions.ts +0 -152
  579. package/core/server/lib/soonest-timer.ts +0 -57
  580. package/core/server/models/base/plugins/bulk-filters.ts +0 -35
  581. package/core/server/models/role-utils.ts +0 -56
  582. package/core/server/services/activitypub/activity-pub-service.ts +0 -216
  583. package/core/server/services/adapter-manager/adapter-manager.ts +0 -253
  584. package/core/server/services/adapter-manager/adapter-paths.ts +0 -26
  585. package/core/server/services/adapter-manager/base-classes.ts +0 -22
  586. package/core/server/services/adapter-manager/index.ts +0 -16
  587. package/core/server/services/adapter-manager/types.ts +0 -45
  588. package/core/server/services/adapter-manager/utils.ts +0 -308
  589. package/core/server/services/auth/reset-authentication.ts +0 -72
  590. package/core/server/services/automations/automations-api.ts +0 -396
  591. package/core/server/services/automations/automations-repository.ts +0 -218
  592. package/core/server/services/automations/constants.ts +0 -4
  593. package/core/server/services/automations/database-automations-repository.ts +0 -1513
  594. package/core/server/services/automations/database-date.ts +0 -26
  595. package/core/server/services/automations/fake-wait-hours-multiplier.ts +0 -12
  596. package/core/server/services/automations/get-scheduler-idempotency-key.ts +0 -8
  597. package/core/server/services/automations/mailgun-message-id.ts +0 -27
  598. package/core/server/services/automations/poll.ts +0 -325
  599. package/core/server/services/automations/scheduler-poll-time.ts +0 -38
  600. package/core/server/services/automations/service.ts +0 -131
  601. package/core/server/services/automations/stale-lock-cutoff.ts +0 -5
  602. package/core/server/services/comments/email-templates/new-comment-reply.txt.ts +0 -25
  603. package/core/server/services/comments/email-templates/new-comment.txt.ts +0 -25
  604. package/core/server/services/comments/email-templates/report.txt.ts +0 -34
  605. package/core/server/services/custom-redirects/redirect-config-parser.ts +0 -148
  606. package/core/server/services/custom-redirects/redirects-service.ts +0 -181
  607. package/core/server/services/custom-redirects/utils.ts +0 -7
  608. package/core/server/services/donations/donation-bookshelf-repository.ts +0 -63
  609. package/core/server/services/donations/donation-payment-event.ts +0 -51
  610. package/core/server/services/email-address/email-address-parser.d.ts +0 -12
  611. package/core/server/services/email-address/email-address-service.ts +0 -241
  612. package/core/server/services/email-analytics/automation-email-analytics-batch-processor.ts +0 -130
  613. package/core/server/services/email-analytics/batch-event-processor.ts +0 -18
  614. package/core/server/services/email-analytics/email-analytics-provider-mailgun.js +0 -57
  615. package/core/server/services/email-analytics/event-processing-result.ts +0 -66
  616. package/core/server/services/email-analytics/events/start-automation-email-analytics-job-event.ts +0 -14
  617. package/core/server/services/email-analytics/events/start-email-analytics-job-event.ts +0 -15
  618. package/core/server/services/email-analytics/index.ts +0 -109
  619. package/core/server/services/email-analytics/jobs/email-analytics-job-scheduler.ts +0 -126
  620. package/core/server/services/email-analytics/lib/queries.ts +0 -341
  621. package/core/server/services/email-service/domain-warming-service.ts +0 -91
  622. package/core/server/services/explore/explore-service.js +0 -59
  623. package/core/server/services/explore/index.js +0 -18
  624. package/core/server/services/explore-ping/explore-ping-service.ts +0 -198
  625. package/core/server/services/explore-ping/index.ts +0 -42
  626. package/core/server/services/files/file-type-utils.ts +0 -56
  627. package/core/server/services/gift-links/actions.ts +0 -51
  628. package/core/server/services/gift-links/codec.ts +0 -16
  629. package/core/server/services/gift-links/index.ts +0 -20
  630. package/core/server/services/gift-links/models.ts +0 -22
  631. package/core/server/services/gift-links/schema.ts +0 -33
  632. package/core/server/services/gift-links/serializers.ts +0 -20
  633. package/core/server/services/gift-links/service.ts +0 -95
  634. package/core/server/services/gifts/constants.ts +0 -3
  635. package/core/server/services/gifts/email-templates/gift-purchase-confirmation.ts +0 -43
  636. package/core/server/services/gifts/email-templates/gift-reminder.ts +0 -50
  637. package/core/server/services/gifts/gift-bookshelf-repository.ts +0 -366
  638. package/core/server/services/gifts/gift-checkout-offer.ts +0 -127
  639. package/core/server/services/gifts/gift-codec.ts +0 -62
  640. package/core/server/services/gifts/gift-controller.ts +0 -51
  641. package/core/server/services/gifts/gift-email-renderer.ts +0 -97
  642. package/core/server/services/gifts/gift-email-service.ts +0 -158
  643. package/core/server/services/gifts/gift-reminder-scheduler.ts +0 -107
  644. package/core/server/services/gifts/gift-schema.ts +0 -39
  645. package/core/server/services/gifts/gift-service-wrapper.js +0 -142
  646. package/core/server/services/gifts/gift-service.ts +0 -1034
  647. package/core/server/services/gifts/gift.ts +0 -234
  648. package/core/server/services/identity-tokens/identity-token-service.ts +0 -36
  649. package/core/server/services/indexnow-ping/constants.ts +0 -32
  650. package/core/server/services/indexnow-ping/index.ts +0 -35
  651. package/core/server/services/indexnow-ping/indexnow-ping-service.ts +0 -311
  652. package/core/server/services/internal-keys/index.ts +0 -53
  653. package/core/server/services/lib/dynamic-redirect-manager.d.ts +0 -20
  654. package/core/server/services/lib/in-memory-repository.ts +0 -78
  655. package/core/server/services/lib/member-signup-contexts.ts +0 -22
  656. package/core/server/services/link-redirection/link-redirect.ts +0 -24
  657. package/core/server/services/member-welcome-emails/constants.ts +0 -35
  658. package/core/server/services/members/commenting/index.ts +0 -2
  659. package/core/server/services/members/commenting/member-commenting-codec.ts +0 -73
  660. package/core/server/services/members/commenting/member-commenting.ts +0 -69
  661. package/core/server/services/members/create-paid-member-shim.ts +0 -40
  662. package/core/server/services/members/import-export/config.ts +0 -34
  663. package/core/server/services/members/import-export/csv/formula.ts +0 -14
  664. package/core/server/services/members/import-export/csv/index.ts +0 -3
  665. package/core/server/services/members/import-export/csv/parse.ts +0 -69
  666. package/core/server/services/members/import-export/csv/serialize.ts +0 -18
  667. package/core/server/services/members/import-export/export/exporter.ts +0 -325
  668. package/core/server/services/members/import-export/import/completion-email.ts +0 -146
  669. package/core/server/services/members/import-export/import/importer.ts +0 -489
  670. package/core/server/services/members/import-export/import/reader.ts +0 -33
  671. package/core/server/services/members/import-export/import/row.ts +0 -56
  672. package/core/server/services/members/import-export/import/spool.ts +0 -38
  673. package/core/server/services/members/import-export/index.ts +0 -143
  674. package/core/server/services/members/index.d.ts +0 -32
  675. package/core/server/services/members-custom-fields/actions.ts +0 -62
  676. package/core/server/services/members-custom-fields/codec.ts +0 -13
  677. package/core/server/services/members-custom-fields/config.ts +0 -38
  678. package/core/server/services/members-custom-fields/definitions-service.ts +0 -413
  679. package/core/server/services/members-custom-fields/index.ts +0 -50
  680. package/core/server/services/members-custom-fields/models.ts +0 -15
  681. package/core/server/services/members-custom-fields/queries.ts +0 -13
  682. package/core/server/services/members-custom-fields/schema.ts +0 -71
  683. package/core/server/services/members-custom-fields/serializers.ts +0 -22
  684. package/core/server/services/members-custom-fields/storage.ts +0 -122
  685. package/core/server/services/members-custom-fields/values-service.ts +0 -269
  686. package/core/server/services/notifications/notification-email.ts +0 -66
  687. package/core/server/services/notifications/sanitize-email-html.ts +0 -35
  688. package/core/server/services/post-scheduling/index.ts +0 -13
  689. package/core/server/services/post-scheduling/post-scheduling.ts +0 -133
  690. package/core/server/services/recommendations/service/bookshelf-click-event-repository.ts +0 -49
  691. package/core/server/services/recommendations/service/bookshelf-recommendation-repository.ts +0 -117
  692. package/core/server/services/recommendations/service/bookshelf-repository.ts +0 -192
  693. package/core/server/services/recommendations/service/bookshelf-subscribe-event-repository.ts +0 -49
  694. package/core/server/services/recommendations/service/click-event.ts +0 -32
  695. package/core/server/services/recommendations/service/in-memory-recommendation-repository.ts +0 -20
  696. package/core/server/services/recommendations/service/incoming-recommendation-controller.ts +0 -51
  697. package/core/server/services/recommendations/service/incoming-recommendation-email-renderer.ts +0 -37
  698. package/core/server/services/recommendations/service/incoming-recommendation-service.ts +0 -159
  699. package/core/server/services/recommendations/service/index.ts +0 -15
  700. package/core/server/services/recommendations/service/libraries.d.ts +0 -2
  701. package/core/server/services/recommendations/service/recommendation-controller.ts +0 -257
  702. package/core/server/services/recommendations/service/recommendation-metadata-service.ts +0 -132
  703. package/core/server/services/recommendations/service/recommendation-repository.ts +0 -13
  704. package/core/server/services/recommendations/service/recommendation-service.ts +0 -285
  705. package/core/server/services/recommendations/service/recommendation.ts +0 -200
  706. package/core/server/services/recommendations/service/subscribe-event.ts +0 -32
  707. package/core/server/services/recommendations/service/unsafe-data.ts +0 -217
  708. package/core/server/services/recommendations/service/well-known-service.ts +0 -47
  709. package/core/server/services/remote-flags/index.ts +0 -101
  710. package/core/server/services/remote-flags/remote-flags-service.ts +0 -236
  711. package/core/server/services/remote-flags/resolve.ts +0 -108
  712. package/core/server/services/route-settings/route-settings-parser.ts +0 -455
  713. package/core/server/services/route-settings/validation-errors.ts +0 -271
  714. package/core/server/services/route-settings/yaml-parser.d.ts +0 -4
  715. package/core/server/services/slack-ping/constants.ts +0 -15
  716. package/core/server/services/slack-ping/index.ts +0 -35
  717. package/core/server/services/slack-ping/slack-ping-service.ts +0 -295
  718. package/core/server/services/staff/email-templates/donation.txt.ts +0 -26
  719. package/core/server/services/staff/email-templates/gift.txt.ts +0 -27
  720. package/core/server/services/staff/email-templates/new-free-signup.txt.ts +0 -15
  721. package/core/server/services/staff/email-templates/new-gift-subscription.txt.ts +0 -26
  722. package/core/server/services/staff/email-templates/new-milestone-received.txt.ts +0 -20
  723. package/core/server/services/staff/email-templates/new-paid-cancellation.txt.ts +0 -15
  724. package/core/server/services/staff/email-templates/new-paid-started.txt.ts +0 -15
  725. package/core/server/services/staff/email-templates/recommendation-received.txt.ts +0 -23
  726. package/core/server/services/staff/email-templates/types.ts +0 -13
  727. package/core/server/services/url/lazy-find-resource.ts +0 -104
  728. package/core/server/services/url/lazy-url-service.ts +0 -647
  729. package/core/server/services/url/permalink-matcher.ts +0 -119
  730. package/core/server/services/url/router-filter.ts +0 -80
  731. package/core/server/services/verification/verification-webhook-service.ts +0 -137
  732. package/core/shared/config/helpers.ts +0 -133
  733. package/core/shared/config/index.ts +0 -12
  734. package/core/shared/config/loader.ts +0 -87
  735. package/core/shared/config/utils.ts +0 -104
  736. package/core/shared/errify.ts +0 -31
  737. package/core/shared/events-ts/index.ts +0 -8
  738. package/core/shared/events-ts/post-deleted-event.ts +0 -15
  739. package/core/shared/events-ts/posts-bulk-add-tags-event.ts +0 -13
  740. package/core/shared/events-ts/posts-bulk-destroyed-event.ts +0 -13
  741. package/core/shared/events-ts/posts-bulk-featured-event.ts +0 -13
  742. package/core/shared/events-ts/posts-bulk-unfeatured-event.ts +0 -13
  743. package/core/shared/events-ts/posts-bulk-unpublished-event.ts +0 -13
  744. package/core/shared/events-ts/posts-bulk-unscheduled-event.ts +0 -13
  745. package/core/shared/labs-flag-overrides.ts +0 -35
  746. package/core/shared/one-at-a-time.ts +0 -47
  747. package/core/shared/url-utils.ts +0 -20
@@ -0,0 +1 @@
1
+ import{o as e,r as t}from"./rolldown-runtime-DAXXjFlN.js";import{t as n}from"./react-Bb3IsNbi.js";import{t as r}from"./jsx-runtime-DX3WBWVO.js";import{m as i,p as a}from"./hooks-CJepWnbB.js";import{n as o,o as s,t as c}from"./use-settings-navigation-BOZcat_V.js";import{i as l,n as u,r as d,t as f}from"./action-list-lGzZLHc8.js";import{Ds as p,Pr as m}from"./index-BOJzlYiz.js";import{n as h,t as g}from"./global-data-provider-CixmTX00.js";import{n as ee}from"./confirmation-provider-BEdrnHns.js";import{n as te}from"./integrations-B9yYgci5.js";import{t as ne}from"./api-keys-Df6uv1dT.js";import{t as re}from"./integration-header-B4DyXV06.js";import{t as ie}from"./api-keys-BgKr003d.js";import{t as ae}from"./brand-icon-09YqFZjV.js";var _=``+new URL(`zapier-logo-D8a11oW_.svg`,import.meta.url).href,v=e(n(),1),y=r(),b=(e,t)=>`${e}-${t}`,x=()=>{let[e,t]=(0,v.useState)(``),[n,r]=(0,v.useState)(!1),i=(0,v.useRef)(new Map),[a,o]=(0,v.useState)(new Set),s=t=>t.length?t.some(t=>t.toLowerCase().includes(e.toLowerCase())):!0,c=(0,v.useCallback)((t,n)=>{i.current.set(t,n),(!e||n.some(t=>t.toLowerCase().includes(e.toLowerCase())))&&o(e=>new Set(e).add(t))},[e]),l=(0,v.useCallback)(e=>{i.current.delete(e),o(t=>{let n=new Set(t);return n.delete(e),n})},[]);(0,v.useEffect)(()=>{let t=new Set;i.current.forEach((n,r)=>{(!e||n.some(t=>t.toLowerCase().includes(e.toLowerCase())))&&t.add(r)}),o(t)},[e]);let u=(0,v.useCallback)(e=>a.size===1&&a.has(e),[a]),d=(0,v.useCallback)(()=>a,[a]),f=t=>{if(!e)return t;if(typeof t==`string`){let n=e.split(/\s+/).map(e=>e.toLowerCase()),r=n.map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)).join(`|`),i=t.split(RegExp(`(${r})`,`gi`)),a=new Map;return i.map(e=>{if(!n.includes(e.toLowerCase()))return e;let t=(a.get(e)??0)+1;return a.set(e,t),(0,y.jsx)(`span`,{className:`bg-yellow-500/40`,children:e},`${e}-${t}`)})}else if(Array.isArray(t))return t.map(e=>f(e));else if(t&&typeof t==`object`&&t)return v.Children.map(t,e=>e&&typeof e==`object`&&`props`in e?f(e.props.children):e);else return t};return{filter:e,setFilter:t,checkVisible:s,highlightKeywords:f,noResult:n,setNoResult:r,registerComponent:c,unregisterComponent:l,getVisibleComponents:d,isOnlyVisibleComponent:u}},S=``+new URL(`Alto-DoS3yH_j.png`,import.meta.url).href,C=``+new URL(`Bulletin-BUpcurG5.png`,import.meta.url).href,w=``+new URL(`Casper-ASA9Ix4v.png`,import.meta.url).href,T=``+new URL(`Dawn-aeEVEPie.png`,import.meta.url).href,E=``+new URL(`Digest-DJl0U_FG.png`,import.meta.url).href,D=``+new URL(`Dope-D_CgP0p0.png`,import.meta.url).href,O=``+new URL(`Ease-B4NuA7sj.png`,import.meta.url).href,k=``+new URL(`Edge-BPZxvKka.png`,import.meta.url).href,A=``+new URL(`Edition-cIDLjlhj.png`,import.meta.url).href,j=``+new URL(`Episode-D7bgV2bY.png`,import.meta.url).href,M=``+new URL(`Headline-BFXOunIb.png`,import.meta.url).href,N=``+new URL(`Journal-D3UW9T2b.png`,import.meta.url).href,P=``+new URL(`London-CSCVHwS0.png`,import.meta.url).href,F=``+new URL(`Ruby-DVEXVMTx.png`,import.meta.url).href,I=``+new URL(`Solo-c-yPo0gw.png`,import.meta.url).href,L=``+new URL(`Source-V-WXZXnS.png`,import.meta.url).href,R=``+new URL(`Source-Magazine-Czq1p0a_.png`,import.meta.url).href,z=``+new URL(`Source-Newsletter-CwTcfhJ-.png`,import.meta.url).href,B=``+new URL(`Taste-U2cRR2yO.png`,import.meta.url).href,V=``+new URL(`Wave-DE2aI-FM.png`,import.meta.url).href,H=[{name:`Source`,category:`News`,previewUrl:`https://source.ghost.io/`,ref:`default`,image:L,variants:[{category:`Magazine`,previewUrl:`https://source-magazine.ghost.io/`,image:R},{category:`Newsletter`,previewUrl:`https://source-newsletter.ghost.io/`,image:z}]},{name:`Casper`,category:`Blog`,previewUrl:`https://demo.ghost.io/`,ref:`TryGhost/Casper`,image:w},{name:`Edition`,category:`Newsletter`,url:`https://github.com/TryGhost/Edition`,previewUrl:`https://edition.ghost.io/`,ref:`TryGhost/Edition`,image:A},{name:`Solo`,category:`Blog`,url:`https://github.com/TryGhost/Solo`,previewUrl:`https://solo.ghost.io`,ref:`TryGhost/Solo`,image:I},{name:`Taste`,category:`Blog`,url:`https://github.com/TryGhost/Taste`,previewUrl:`https://taste.ghost.io`,ref:`TryGhost/Taste`,image:B},{name:`Episode`,category:`Podcast`,url:`https://github.com/TryGhost/Episode`,previewUrl:`https://episode.ghost.io`,ref:`TryGhost/Episode`,image:j},{name:`Digest`,category:`Newsletter`,url:`https://github.com/TryGhost/Digest`,previewUrl:`https://digest.ghost.io/`,ref:`TryGhost/Digest`,image:E},{name:`Bulletin`,category:`Newsletter`,url:`https://github.com/TryGhost/Bulletin`,previewUrl:`https://bulletin.ghost.io/`,ref:`TryGhost/Bulletin`,image:C},{name:`Alto`,category:`Blog`,url:`https://github.com/TryGhost/Alto`,previewUrl:`https://alto.ghost.io`,ref:`TryGhost/Alto`,image:S},{name:`Dope`,category:`Magazine`,url:`https://github.com/TryGhost/Dope`,previewUrl:`https://dope.ghost.io`,ref:`TryGhost/Dope`,image:D},{name:`Wave`,category:`Podcast`,url:`https://github.com/TryGhost/Wave`,previewUrl:`https://wave.ghost.io`,ref:`TryGhost/Wave`,image:V},{name:`Edge`,category:`Photography`,url:`https://github.com/TryGhost/Edge`,previewUrl:`https://edge.ghost.io`,ref:`TryGhost/Edge`,image:k},{name:`Dawn`,category:`Newsletter`,url:`https://github.com/TryGhost/Dawn`,previewUrl:`https://dawn.ghost.io/`,ref:`TryGhost/Dawn`,image:T},{name:`Ease`,category:`Documentation`,url:`https://github.com/TryGhost/Ease`,previewUrl:`https://ease.ghost.io`,ref:`TryGhost/Ease`,image:O},{name:`Headline`,category:`News`,url:`https://github.com/TryGhost/Headline`,previewUrl:`https://headline.ghost.io`,ref:`TryGhost/Headline`,image:M},{name:`Ruby`,category:`Magazine`,url:`https://github.com/TryGhost/Ruby`,previewUrl:`https://ruby.ghost.io`,ref:`TryGhost/Ruby`,image:F},{name:`London`,category:`Photography`,url:`https://github.com/TryGhost/London`,previewUrl:`https://london.ghost.io`,ref:`TryGhost/London`,image:P},{name:`Journal`,category:`Newsletter`,url:`https://github.com/TryGhost/Journal`,previewUrl:`https://journal.ghost.io/`,ref:`TryGhost/Journal`,image:N}],U=``+new URL(`orb-black-1-bYPPSSAp.png`,import.meta.url).href,W=``+new URL(`orb-black-2-C-rcujeh.png`,import.meta.url).href,G=``+new URL(`orb-black-3-DTkwRv_1.png`,import.meta.url).href,K=``+new URL(`orb-black-4-BXF3fMuE.png`,import.meta.url).href,q=``+new URL(`orb-black-5-94Eda1ek.png`,import.meta.url).href,J=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201818.2%202500'%20style='enable-background:new%200%200%201818.2%202500'%20xml:space='preserve'%3e%3ctitle%3egoogle-docs%3c/title%3e%3cpath%20d='M1136.4%200h-966C79.6%200%200%2079.5%200%20170.5v2159.1c0%2090.9%2079.5%20170.5%20170.5%20170.5h1477.3c90.9%200%20170.5-79.5%20170.5-170.5V681.8l-397.7-284.1L1136.4%200z'%20style='fill:%234285f4'/%3e%3cpath%20d='M454.5%201818.2h909.1v-113.6h-909l-.1%20113.6zm0%20227.3h681.8v-113.6H454.5v113.6zm0-795.5v113.6h909.1V1250H454.5zm0%20340.9h909.1v-113.6h-909l-.1%20113.6z'%20style='fill:%23f1f1f1'/%3e%3cpath%20d='M1136.4%200v511.4c0%2090.9%2079.5%20170.4%20170.4%20170.4h511.4L1136.4%200z'%20style='fill:%23a1c2fa'/%3e%3c/svg%3e`,oe=``+new URL(`mailchimp-DwTEN-tS.svg`,import.meta.url).href,se=`data:image/svg+xml,%3csvg%20height='546'%20viewBox='0%200%20569%20546'%20width='569'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3epatreon%3c/title%3e%3cg%20fill='%23FF424D'%3e%3ccircle%20cx='362.59'%20cy='204.59'%20data-fill='1'%20r='204.59'/%3e%3cpath%20data-fill='1'%20d='M0%200h100v545.8H0z'/%3e%3c/g%3e%3c/svg%3e`,Y=`data:image/svg+xml,%3csvg%20width='152'%20height='179'%20viewBox='0%200%20152%20179'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3epaypal%3c/title%3e%3cg%20fill='none'%20fill-rule='evenodd'%3e%3cpath%20d='M136.492%2045.453c2.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27l-2.365%2015a4.168%204.168%200%200%200%204.118%204.818H69.76a6.948%206.948%200%200%200%206.863-5.865l.283-1.468%205.442-34.507.351-1.907a6.947%206.947%200%200%201%206.862-5.865h4.322c27.984%200%2049.896-11.37%2056.299-44.25%202.675-13.74%201.292-25.208-5.783-33.27-2.14-2.439-4.802-4.455-7.907-6.1'%20fill='%23238EC2'/%3e%3cpath%20d='M136.492%2045.453c2.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27l8.609-54.588-.267%201.711c.609-3.86%203.909-6.704%207.817-6.704h16.288c31.989%200%2057.037-12.996%2064.356-50.582.217-1.113.402-2.191.568-3.251'%20fill='%2320274F'/%3e%3cpath%20d='M56.978%2045.638a6.945%206.945%200%200%201%206.863-5.866h43.514c5.155%200%209.961.337%2014.356%201.045%201.256.202%202.478.435%203.665.698a53.92%2053.92%200%200%201%203.455.885c.558.162%201.106.333%201.646.512%202.157.717%204.166%201.562%206.015%202.541%202.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27L56.978%2045.638'%20fill='%23253667'/%3e%3c/g%3e%3c/svg%3e`,ce=``+new URL(`slackicon-37ETtpm7.png`,import.meta.url).href,le=`data:image/svg+xml,%3csvg%20width='86'%20height='89'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3etypeform%3c/title%3e%3cg%20fill='none'%20fill-rule='evenodd'%3e%3cpath%20d='M40.28%2087.561c12.464.154%2021.16-3.994%2030.135-12.175%208.975-8.18%2014.306-16.867%2014.741-28.73.436-11.862-3.412-21.43-12.564-30.581C63.441%206.923%2051.64.9%2039.4.899%2027.158.898%2018.967%206.252%2011.385%2016.07c-7.581%209.818-9.237%2022.212-9.894%2033.921-.657%2011.71-1.15%2017.111%206.608%2024.625%207.758%207.514%2019.718%2012.791%2032.182%2012.945z'%20stroke='%23262627'/%3e%3cpath%20d='M29.136%2037.976v-4.885h25.918v4.885H44.679v27.998H39.51V37.976z'%20fill='%23262627'%20fill-rule='nonzero'/%3e%3c/g%3e%3c/svg%3e`,ue=``+new URL(`zero-bounce-lzY95s9E.png`,import.meta.url).href,X=[{ghostImage:W,appImage:ce,title:`Share scheduled posts with your team in Slack`,url:`https://zapier.com/webintent/create-zap?template=359499`},{ghostImage:G,appImage:se,title:`Connect Patreon to your Ghost membership site`,url:`https://zapier.com/webintent/create-zap?template=75801`},{ghostImage:K,appImage:ue,title:`Protect email delivery with email verification`,url:`https://zapier.com/webintent/create-zap?template=359415`},{ghostImage:q,appImage:Y,title:`Add members for successful sales in PayPal`,url:`https://zapier.com/webintent/create-zap?template=184423`},{ghostImage:G,appImage:Y,title:`Unsubscribe members who cancel a subscription in PayPal`,url:`https://zapier.com/webintent/create-zap?template=359348`},{ghostImage:U,appImage:J,title:`Send new post drafts from Google Docs to Ghost`,url:`https://zapier.com/webintent/create-zap?template=50924`},{ghostImage:K,appImage:le,title:`Survey new members using Typeform`,url:`https://zapier.com/webintent/create-zap?template=359407`},{ghostImage:U,appImage:oe,title:`Sync email subscribers in Ghost + Mailchimp`,url:`https://zapier.com/webintent/create-zap?template=359342`}],Z=(0,v.createContext)({officialThemes:H,zapierTemplates:X,search:{filter:``,setFilter:()=>{},checkVisible:()=>!0,highlightKeywords:()=>``,noResult:!1,setNoResult:()=>{},registerComponent:()=>{},unregisterComponent:()=>{},getVisibleComponents:()=>new Set,isOnlyVisibleComponent:()=>!1},sortingState:[],offersShowArchived:!1,setOffersShowArchived:()=>{}}),de=({children:e,...t})=>{let n=x(),[r,i]=(0,v.useState)([{type:`offers`,option:`date-added`,direction:`desc`}]),[a,s]=(0,v.useState)(!1);return(0,y.jsx)(Z.Provider,{value:{officialThemes:H,zapierTemplates:X,...t,search:n,sortingState:r,setSortingState:i,offersShowArchived:a,setOffersShowArchived:s},children:(0,y.jsx)(g,{children:(0,y.jsx)(o,{children:e})})})},Q=()=>(0,v.useContext)(Z),fe=()=>Q().officialThemes,pe=()=>Q().search,$=()=>Q().upgradeStatus,me=()=>{let{sortingState:e,setSortingState:t}=Q();return{sortingState:e,setSortingState:t}},he=()=>{let{offersShowArchived:e,setOffersShowArchived:t}=Q();return{offersShowArchived:e,setOffersShowArchived:t}},ge=t({default:()=>_e});function _e(){let{updateRoute:e}=c(),{zapierTemplates:t}=Q(),{data:{integrations:n}={integrations:[]}}=te(),{config:r}=h(),{mutateAsync:o}=ie(),g=i(),{confirm:b}=ee(),[x,S]=(0,v.useState)(!1),C=r.hostSettings?.limits?.customIntegrations?.disabled,w=n.find(({slug:e})=>e===`zapier`),T=w?.api_keys?.find(e=>e.type===`admin`);return(0,v.useEffect)(()=>{C&&e(`integrations`)},[C,e]),(0,y.jsxs)(s,{cancelLabel:``,footer:(0,y.jsxs)(`div`,{className:`mx-8 flex w-full items-center justify-between`,children:[(0,y.jsxs)(`a`,{className:`mt-1 self-baseline font-bold`,href:`https://zapier.com/apps/ghost/integrations?utm_medium=partner_api&utm_source=widget&utm_campaign=Widget`,rel:`noopener noreferrer`,target:`_blank`,children:[`View more Ghost integrations powered by `,(0,y.jsx)(`span`,{children:(0,y.jsx)(`img`,{alt:`Zapier`,className:`relative top-[-2px] inline-block`,src:_})})]}),(0,y.jsx)(m,{type:`button`,onClick:()=>{e(`integrations`)},children:`Close`})]}),okLabel:`Close`,okVariant:`default`,testId:`zapier-modal`,title:``,stickyFooter:!0,onClose:()=>{e(`integrations`)},onOk:()=>{e(`integrations`)},children:[(0,y.jsx)(re,{detail:`Automation for your favorite apps`,extra:(0,y.jsx)(`div`,{className:`mt-1 -mb-4`,children:(0,y.jsx)(ne,{keys:[{id:`admin-api-key`,label:`Admin API key`,text:T?.secret,hint:x?(0,y.jsx)(`div`,{className:`text-green`,children:`Admin API Key was successfully regenerated`}):void 0,onRegenerate:()=>{!w||!T||(S(!1),b({title:`Regenerate Admin API Key`,prompt:`You will need to locate the Ghost App within your Zapier account and click on "Reconnect" to enter the new Admin API Key.`,okLabel:`Regenerate Admin API Key`,onOk:async e=>{try{await o({integrationId:w.id,apiKeyId:T.id}),S(!0),e?.remove()}catch(e){g(e)}}}))}},{id:`api-url`,label:`API URL`,text:window.location.origin+a().subdir}]})}),icon:(0,y.jsx)(ae,{name:`zapier`,size:56}),title:`Zapier`}),(0,y.jsx)(f,{children:t.map(e=>(0,y.jsxs)(u,{hover:!1,children:[(0,y.jsx)(l,{className:`flex items-center gap-3 py-2 pl-3`,children:(0,y.jsxs)(`div`,{className:`flex flex-col gap-4 md:flex-row md:items-center`,children:[(0,y.jsxs)(`div`,{className:`flex shrink-0 flex-nowrap items-center gap-2`,children:[(0,y.jsx)(`img`,{className:`size-8 object-contain dark:invert`,role:`presentation`,src:e.ghostImage}),(0,y.jsx)(p,{className:`size-3`}),(0,y.jsx)(`img`,{className:`size-8 object-contain`,role:`presentation`,src:e.appImage})]}),(0,y.jsx)(`span`,{children:e.title})]})}),(0,y.jsx)(d,{visibility:`hover`,children:(0,y.jsx)(m,{className:`h-auto p-0 font-semibold whitespace-nowrap text-[#FF4A00] hover:text-[#FF4A00]`,variant:`link`,asChild:!0,children:(0,y.jsx)(`a`,{href:e.url,rel:`noopener noreferrer`,target:`_blank`,children:`Use this Zap`})})})]},e.url))})]})}export{pe as a,b as c,fe as i,de as n,me as o,he as r,$ as s,ge as t};
@@ -2,8 +2,8 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <link rel="stylesheet" href="./assets/vendor-3bf602dfa6463c3400ffd81697767274.css">
5
- <link rel="stylesheet" href="./assets/ghost-d38c30b866e59f2e06a357b5eb844fe5.css">
6
- <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%226.57%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%224b6e329268%22%2C%22activitypubFilename%22%3A%22activitypub.js%22%2C%22activitypubHash%22%3A%223ebde9a6a0%22%2C%22activitypubRemoteConfigUrl%22%3A%22%2F.ghost%2Factivitypub%2Fstable%2Fclient-config%22%7D">
5
+ <link rel="stylesheet" href="./assets/ghost-68f447a1796b93a1f128b649bac8506d.css">
6
+ <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%226.58%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%22206c3000ea%22%2C%22activitypubFilename%22%3A%22activitypub.js%22%2C%22activitypubHash%22%3A%223f75a13bc5%22%2C%22activitypubRemoteConfigUrl%22%3A%22%2F.ghost%2Factivitypub%2Fstable%2Fclient-config%22%7D">
7
7
 
8
8
  <meta charset="UTF-8" />
9
9
 
@@ -20,20 +20,20 @@
20
20
 
21
21
  <link rel="shortcut icon" href="./assets/favicon-C_q1KHzv.ico" />
22
22
  <link rel="apple-touch-icon" href="./assets/apple-touch-icon-DhO18_4B.png" />
23
- <script type="module" crossorigin src="./assets/index-DUXM0NlS.js"></script>
23
+ <script type="module" crossorigin src="./assets/index-BOJzlYiz.js"></script>
24
24
  <link rel="modulepreload" crossorigin href="./assets/rolldown-runtime-DAXXjFlN.js">
25
25
  <link rel="modulepreload" crossorigin href="./assets/react-Bb3IsNbi.js">
26
26
  <link rel="modulepreload" crossorigin href="./assets/jsx-runtime-DX3WBWVO.js">
27
- <link rel="modulepreload" crossorigin href="./assets/framework-provider-CmtnPXIT.js">
27
+ <link rel="modulepreload" crossorigin href="./assets/framework-provider-CFLwK5uS.js">
28
28
  <link rel="modulepreload" crossorigin href="./assets/dist-Ndy-PuGN.js">
29
- <link rel="modulepreload" crossorigin href="./assets/hooks-D6EE7BIt.js">
29
+ <link rel="modulepreload" crossorigin href="./assets/hooks-CJepWnbB.js">
30
30
  <link rel="modulepreload" crossorigin href="./assets/dist-Cb5RSHSg.js">
31
31
  <link rel="modulepreload" crossorigin href="./assets/dist-CQJY6SVY.js">
32
32
  <link rel="modulepreload" crossorigin href="./assets/dist-CqO2lWS02.js">
33
33
  <link rel="modulepreload" crossorigin href="./assets/Combination-BDvCdg1t.js">
34
34
  <link rel="modulepreload" crossorigin href="./assets/preload-helper-DYl5dUZ5.js">
35
35
  <link rel="modulepreload" crossorigin href="./assets/chunk-KS7C4IRE-DG9HTHQ3.js">
36
- <link rel="modulepreload" crossorigin href="./assets/router-provider-DSQfprxH.js">
36
+ <link rel="modulepreload" crossorigin href="./assets/router-provider-CkB_ArLF.js">
37
37
  <link rel="modulepreload" crossorigin href="./assets/text-DU9Hv33_.js">
38
38
  <link rel="modulepreload" crossorigin href="./assets/shade-app-B3heOAfz-BhQXxNkT.js">
39
39
  <link rel="modulepreload" crossorigin href="./assets/dist-myQaY0ka.js">
@@ -42,8 +42,8 @@
42
42
  <link rel="modulepreload" crossorigin href="./assets/dist-DlCyLrOC.js">
43
43
  <link rel="modulepreload" crossorigin href="./assets/input-surface-BdOe4KzO.js">
44
44
  <link rel="modulepreload" crossorigin href="./assets/update-queries-C4CnvJaW.js">
45
- <link rel="modulepreload" crossorigin href="./assets/users-B6hIds6n.js">
46
- <link rel="stylesheet" crossorigin href="./assets/index-Ds2iUoF6.css">
45
+ <link rel="modulepreload" crossorigin href="./assets/users-DmGMPfw7.js">
46
+ <link rel="stylesheet" crossorigin href="./assets/index-Bid6LAyc.css">
47
47
  </head>
48
48
  <body class="react-admin">
49
49
  <div id="ember-alerts-wormhole"></div>
@@ -63,9 +63,9 @@
63
63
  <div id="ember-liquid-wormhole"></div>
64
64
  <div id="ember-notifications-wormhole"></div>
65
65
  <script src="./assets/vendor-25f0bb2b2de85265afdf33da79f14a44.js"></script>
66
- <script src="./assets/chunk.571.40f093ed6d883993714e.js"></script>
67
- <script src="./assets/chunk.424.4a27628efdade15c2dab.js"></script>
68
- <script src="./assets/chunk.524.dce1c51e0bc30fb2718e.js"></script>
69
- <script src="./assets/ghost-d683fbeb945b13155ea669caa5d8db41.js"></script>
66
+ <script src="./assets/chunk.492.a9da46ca956b10116774.js"></script>
67
+ <script src="./assets/chunk.408.1a258af360eb8d905508.js"></script>
68
+ <script src="./assets/chunk.524.4c693c3a00ac91df34fa.js"></script>
69
+ <script src="./assets/ghost-ba408063a5922b458b4a8f216cf23251.js"></script>
70
70
  </body>
71
71
  </html>
@@ -1,12 +1,11 @@
1
1
  const fs = require('fs-extra');
2
- const session = require('cookie-session');
3
- const crypto = require('crypto');
4
2
  const path = require('path');
5
3
  const config = require('../../../../shared/config');
6
4
  const urlUtils = require('../../../../shared/url-utils').default;
7
5
  const tpl = require('@tryghost/tpl');
8
6
  const errors = require('@tryghost/errors');
9
7
  const settingsCache = require('../../../../shared/settings-cache');
8
+ const privateSiteAccess = require('../../../../shared/private-site-access');
10
9
  // routeKeywords.private: 'private'
11
10
  const privateRoute = '/private/';
12
11
 
@@ -15,27 +14,6 @@ const messages = {
15
14
  wrongAccessCode: 'Incorrect access code.'
16
15
  };
17
16
 
18
- function getAccessCode() {
19
- const accessCode = settingsCache.get('password');
20
- return typeof accessCode === 'string' ? accessCode : '';
21
- }
22
-
23
- function hasAccessCode(accessCode) {
24
- return typeof accessCode === 'string' && accessCode.trim().length > 0;
25
- }
26
-
27
- function verifySessionHash(salt, hash) {
28
- const accessCode = getAccessCode();
29
-
30
- if (!salt || !hash || !hasAccessCode(accessCode)) {
31
- return false;
32
- }
33
-
34
- let hasher = crypto.createHash('sha256');
35
- hasher.update(accessCode + salt, 'utf8');
36
- return hasher.digest('hex') === hash;
37
- }
38
-
39
17
  function getRedirectUrl(query) {
40
18
  try {
41
19
  const redirect = decodeURIComponent(query.r || '/');
@@ -57,11 +35,7 @@ function getRedirectUrl(query) {
57
35
  }
58
36
 
59
37
  function authenticatePrivateSession(req, res, next) {
60
- const hash = req.session.token || '';
61
- const salt = req.session.salt || '';
62
- const isVerified = verifySessionHash(salt, hash);
63
-
64
- if (isVerified) {
38
+ if (privateSiteAccess.hasAccess(req)) {
65
39
  return next();
66
40
  } else {
67
41
  let redirectUrl = urlUtils.urlFor({relativeUrl: privateRoute});
@@ -72,23 +46,7 @@ function authenticatePrivateSession(req, res, next) {
72
46
  }
73
47
 
74
48
  const privateBlogging = {
75
- checkIsPrivate: function checkIsPrivate(req, res, next) {
76
- let isPrivateBlog = settingsCache.get('is_private');
77
-
78
- if (!isPrivateBlog) {
79
- res.isPrivateBlog = false;
80
- return next();
81
- }
82
-
83
- res.isPrivateBlog = true;
84
-
85
- return session({
86
- name: 'ghost-private',
87
- maxAge: (30 * 24 * 60 * 60 * 1000), // 30 days in ms
88
- signed: false,
89
- sameSite: 'none'
90
- })(req, res, next);
91
- },
49
+ checkIsPrivate: privateSiteAccess.loadSession,
92
50
 
93
51
  filterPrivateRoutes: function filterPrivateRoutes(req, res, next) {
94
52
  // If this site is not in private mode, skip
@@ -145,11 +103,7 @@ const privateBlogging = {
145
103
  return res.redirect(urlUtils.urlFor('home', true));
146
104
  }
147
105
 
148
- const hash = req.session.token || '';
149
- const salt = req.session.salt || '';
150
- const isVerified = verifySessionHash(salt, hash);
151
-
152
- if (isVerified) {
106
+ if (privateSiteAccess.hasAccess(req)) {
153
107
  // redirect to home if user is already authenticated
154
108
  return res.redirect(urlUtils.urlFor('home', true));
155
109
  } else {
@@ -164,16 +118,9 @@ const privateBlogging = {
164
118
  }
165
119
 
166
120
  const submittedAccessCode = req.body && req.body.password;
167
- const accessCode = getAccessCode();
168
- const hasher = crypto.createHash('sha256');
169
- const salt = Date.now().toString();
170
121
  const forward = getRedirectUrl(req.query);
171
122
 
172
- if (hasAccessCode(accessCode) && hasAccessCode(submittedAccessCode) && accessCode === submittedAccessCode) {
173
- hasher.update(submittedAccessCode + salt, 'utf8');
174
- req.session.token = hasher.digest('hex');
175
- req.session.salt = salt;
176
-
123
+ if (privateSiteAccess.grantAccess(req, submittedAccessCode)) {
177
124
  return res.redirect(urlUtils.urlFor({relativeUrl: forward}));
178
125
  } else {
179
126
  res.error = {
@@ -15,6 +15,9 @@ const _ = require('lodash');
15
15
  const debug = require('@tryghost/debug')('ghost_head');
16
16
  const templateStyles = require('./tpl/styles');
17
17
  const {getFrontendAppConfig, getDataAttributes} = require('../utils/frontend-apps');
18
+ const labs = require('../../shared/labs');
19
+ const {getMarkdownUrl} = require('../services/llms/markdown');
20
+ const {isPurchasableEntry, isMachinePaymentsEnabled} = require('../../shared/machine-payments');
18
21
 
19
22
  /**
20
23
  * @typedef {import('@tryghost/custom-fonts').FontSelection} FontSelection
@@ -22,6 +25,45 @@ const {getFrontendAppConfig, getDataAttributes} = require('../utils/frontend-app
22
25
 
23
26
  const {get: getMetaData, getAssetUrl} = metaData;
24
27
 
28
+ function isMachinePaymentsFeatureEnabled() {
29
+ return isMachinePaymentsEnabled({
30
+ labs,
31
+ settingsCache,
32
+ isStripeConnected: () => settingsHelpers.isStripeConnected()
33
+ });
34
+ }
35
+
36
+ function shouldOutputMarkdownAlternate({context, post}) {
37
+ if (
38
+ !context
39
+ || !_.includes(context, 'post')
40
+ || !post
41
+ || settingsCache.get('is_private')
42
+ || settingsCache.get('llms_enabled') === false
43
+ ) {
44
+ return false;
45
+ }
46
+
47
+ if (post.visibility === 'public') {
48
+ return true;
49
+ }
50
+
51
+ return isPurchasableEntry(post) && isMachinePaymentsFeatureEnabled();
52
+ }
53
+
54
+ function getMarkdownAlternateLink({context, post, canonicalUrl}) {
55
+ if (!shouldOutputMarkdownAlternate({context, post})) {
56
+ return '';
57
+ }
58
+
59
+ try {
60
+ return '<link rel="alternate" type="text/markdown" href="' + escapeExpression(getMarkdownUrl(canonicalUrl)) + '">';
61
+ } catch (err) {
62
+ logging.warn(err);
63
+ return '';
64
+ }
65
+ }
66
+
25
67
  /**
26
68
  * Escape a serialized JSON string for safe inclusion inside an inline
27
69
  * `<script type="application/ld+json">` block.
@@ -328,6 +370,16 @@ module.exports = async function ghost_head(options) { // eslint-disable-line cam
328
370
 
329
371
  head.push('<link rel="canonical" href="' + escapeExpression(meta.canonicalUrl) + '">');
330
372
 
373
+ const markdownAlternateLink = getMarkdownAlternateLink({
374
+ context,
375
+ post: dataRoot.post,
376
+ canonicalUrl: meta.canonicalUrl
377
+ });
378
+
379
+ if (markdownAlternateLink) {
380
+ head.push(markdownAlternateLink);
381
+ }
382
+
331
383
  if (_.includes(context, 'preview')) {
332
384
  head.push(writeMetaTag('robots', 'noindex,nofollow', 'name'));
333
385
  head.push(writeMetaTag('referrer', 'same-origin', 'name'));
@@ -6,6 +6,7 @@ const urlUtils = require('../../shared/url-utils').default;
6
6
  const {SafeString} = require('../services/handlebars');
7
7
  const assetHash = require('../services/asset-hash');
8
8
  const themeEngine = require('../services/theme-engine');
9
+ const {cardAssets} = require('../services/assets-minification');
9
10
 
10
11
  /**
11
12
  * Serve either uploaded favicon or default
@@ -121,9 +122,12 @@ function getAssetUrl(assetPath, hasMinFile) {
121
122
  return getFaviconUrl();
122
123
  }
123
124
 
124
- // Determine asset type
125
- const isPublicAsset = assetPath.match(/^public\//);
126
- const isThemeAsset = !isPublicAsset && !assetPath.match(/^asset/);
125
+ // Determine asset type. Anything that isn't a public asset is served out of the
126
+ // active theme's assets/ directory — but a caller may already have spelled that
127
+ // prefix themselves, in which case we must not add it a second time.
128
+ const isPublicAsset = !!assetPath.match(/^public\//);
129
+ const isThemeAsset = !isPublicAsset;
130
+ const hasAssetsPrefix = isThemeAsset && !!assetPath.match(/^asset/);
127
131
 
128
132
  // CASE: Build the output URL
129
133
  // If assetCdnUrl is configured, use it as the base (produces an absolute URL).
@@ -134,7 +138,7 @@ function getAssetUrl(assetPath, hasMinFile) {
134
138
  : urlUtils.urlJoin(urlUtils.getSubdir(), '/');
135
139
 
136
140
  // Optionally add /assets/
137
- if (isThemeAsset) {
141
+ if (isThemeAsset && !hasAssetsPrefix) {
138
142
  output = urlUtils.urlJoin(output, 'assets/');
139
143
  }
140
144
 
@@ -149,12 +153,19 @@ function getAssetUrl(assetPath, hasMinFile) {
149
153
  // Get the appropriate hash for this asset (ignore URL anchor)
150
154
  const hashPath = assetPath.includes('#') ? assetPath.slice(0, assetPath.indexOf('#')) : assetPath;
151
155
  let hash;
152
- // Use file-based SHA256 hash if enabled via config (defaults to false for backwards compatibility)
153
- if (config.get('caching:assets:contentBasedHash:enabled')) {
156
+
157
+ // Card assets are assembled in memory, so their content hash is always
158
+ // available and always matches the bytes we serve — there's no file to miss
159
+ // and therefore no reason to gate this on contentBasedHash
160
+ const cardType = cardAssets.getCardType(hashPath);
161
+ if (cardType !== null) {
162
+ hash = cardAssets.getHash(cardType);
163
+ } else if (config.get('caching:assets:contentBasedHash:enabled')) {
154
164
  if (isThemeAsset) {
155
- // For theme assets, use file-based SHA256 hash
156
- hash = getThemeAssetHash(hashPath);
157
- } else if (isPublicAsset) {
165
+ // Theme assets resolve relative to the theme's assets/ directory, so an
166
+ // explicitly-spelled prefix has to come back off before we look the file up
167
+ hash = getThemeAssetHash(hashPath.replace(/^assets\//, ''));
168
+ } else {
158
169
  // For public assets, use file-based SHA256 hash
159
170
  hash = getPublicAssetHash(hashPath);
160
171
  }
@@ -0,0 +1 @@
1
+ {"css":{"audio":".kg-audio-card,.kg-audio-card *{box-sizing:border-box}.kg-audio-card{display:flex;width:100%;min-height:96px;border-radius:6px;padding:4px;background:#fff;color:#222;box-shadow:inset 0 0 0 1px #7c8b9a40;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.kg-audio-card+.kg-audio-card{margin-top:1em}.kg-audio-thumbnail{display:flex;justify-content:center;align-items:center;width:80px;min-width:80px;margin:8px;background:transparent;object-fit:cover;aspect-ratio:1/1;border-radius:3px}.kg-audio-thumbnail.placeholder{background:var(--ghost-accent-color)}.kg-audio-thumbnail.placeholder svg{width:24px;height:24px;fill:#fff}.kg-audio-player-container{position:relative;display:flex;flex-direction:column;justify-content:space-between;width:100%;--seek-before-width: 0%;--volume-before-width: 100%;--buffered-width: 0%}.kg-audio-title{width:100%;margin:8px 0 0;padding:8px 12px;border:none;font-family:inherit;font-size:16px;font-weight:600;line-height:1.15em;background:transparent}.kg-audio-player{display:flex;flex-grow:1;align-items:center;padding:8px 12px}.kg-audio-current-time{min-width:38px;padding:0 4px;font-family:inherit;font-size:12.5px;font-weight:500;line-height:1em;white-space:nowrap}.kg-audio-time{width:56px;color:#ababab;font-family:inherit;font-size:12.5px;font-weight:500;line-height:1em;white-space:nowrap}.kg-audio-duration{padding:0 4px}.kg-audio-play-icon,.kg-audio-pause-icon{position:relative;bottom:1px;padding:0 4px 0 0;font-size:0;background:transparent}.kg-audio-hide{display:none!important}.kg-audio-play-icon svg,.kg-audio-pause-icon svg{width:14px;height:14px;fill:currentColor}.kg-audio-seek-slider{flex-grow:1;margin:0 4px}@media(max-width:640px){.kg-audio-seek-slider{display:none}}.kg-audio-playback-rate{min-width:37px;padding:0 4px;font-family:inherit;font-size:12.5px;font-weight:600;line-height:1em;text-align:left;background:transparent;white-space:nowrap}@media(max-width:640px){.kg-audio-playback-rate{padding-left:8px}}.kg-audio-mute-icon,.kg-audio-unmute-icon{position:relative;bottom:-1px;padding:0 4px;font-size:0;background:transparent}@media(max-width:640px){.kg-audio-mute-icon,.kg-audio-unmute-icon{margin-left:auto}}.kg-audio-mute-icon svg,.kg-audio-unmute-icon svg{width:16px;height:16px;fill:currentColor}.kg-audio-volume-slider{width:80px}@media(max-width:400px){.kg-audio-volume-slider{display:none}}.kg-audio-seek-slider:before{content:\"\";position:absolute;left:0;width:var(--seek-before-width)!important;height:4px;cursor:pointer;background-color:currentColor;border-radius:2px}.kg-audio-volume-slider:before{content:\"\";position:absolute;left:0;width:var(--volume-before-width)!important;height:4px;cursor:pointer;background-color:currentColor;border-radius:2px}.kg-audio-player-container input[type=range]{position:relative;-webkit-appearance:none;background:transparent}.kg-audio-player-container input[type=range]:focus{outline:none}.kg-audio-player-container input[type=range]::-webkit-slider-thumb{-webkit-appearance:none}.kg-audio-player-container input[type=range]::-ms-track{cursor:pointer;border-color:transparent;color:transparent;background:transparent}.kg-audio-player-container button{display:flex;align-items:center;border:0;cursor:pointer}.kg-audio-player-container input[type=range]{height:auto;padding:0;border:0}.kg-audio-player-container input[type=range]::-webkit-slider-runnable-track{width:100%;height:4px;cursor:pointer;background:#7c8b9a40;border-radius:2px}.kg-audio-player-container input[type=range]::-webkit-slider-thumb{position:relative;box-sizing:content-box;width:13px;height:13px;margin:-5px 0 0;border:0;cursor:pointer;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #00000014,0 1px 4px #0000003d}.kg-audio-player-container input[type=range]:active::-webkit-slider-thumb{transform:scale(1.2)}.kg-audio-player-container input[type=range]::-moz-range-track{width:100%;height:4px;cursor:pointer;background:#7c8b9a40;border-radius:2px}.kg-audio-player-container input[type=range]::-moz-range-progress{background:currentColor;border-radius:2px}.kg-audio-player-container input[type=range]::-moz-range-thumb{box-sizing:content-box;width:13px;height:13px;border:0;cursor:pointer;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #00000014,0 1px 4px #0000003d}.kg-audio-player-container input[type=range]:active::-moz-range-thumb{transform:scale(1.2)}.kg-audio-player-container input[type=range]::-ms-track{width:100%;height:3px;border:solid transparent;color:transparent;cursor:pointer;background:transparent}.kg-audio-player-container input[type=range]::-ms-fill-lower{background:#fff}.kg-audio-player-container input[type=range]::-ms-fill-upper{background:currentColor}.kg-audio-player-container input[type=range]::-ms-thumb{box-sizing:content-box;width:13px;height:13px;border:0;cursor:pointer;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #00000014,0 1px 4px #0000003d}.kg-audio-player-container input[type=range]:active::-ms-thumb{transform:scale(1.2)}\n","blockquote":".kg-blockquote-alt{font-size:1.5em;font-style:italic;line-height:1.7em;text-align:center;padding:0 2.5em}@media(max-width:800px){.kg-blockquote-alt{font-size:1.4em;padding-left:2em;padding-right:2em}}@media(max-width:600px){.kg-blockquote-alt{font-size:1.2em;padding-left:1.75em;padding-right:1.75em}}\n","bookmark":".kg-bookmark-card,.kg-bookmark-card *{box-sizing:border-box}.kg-bookmark-card,.kg-bookmark-publisher{position:relative}.kg-bookmark-card a.kg-bookmark-container,.kg-bookmark-card a.kg-bookmark-container:hover{display:flex;background:#fff;text-decoration:none;border-radius:6px;border:1px solid rgb(124 139 154 / 25%);overflow:hidden;color:#222}.kg-bookmark-content{display:flex;flex-direction:column;flex-grow:1;flex-basis:100%;align-items:flex-start;justify-content:flex-start;padding:20px;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.kg-bookmark-title{font-size:15px;line-height:1.4em;font-weight:600}.kg-bookmark-description{display:-webkit-box;font-size:14px;line-height:1.5em;margin-top:3px;font-weight:400;max-height:44px;overflow-y:hidden;opacity:.7;-webkit-line-clamp:2;-webkit-box-orient:vertical}.kg-bookmark-metadata{display:flex;align-items:center;margin-top:22px;width:100%;font-size:14px;font-weight:500;white-space:nowrap}.kg-bookmark-metadata>*:not(img){opacity:.7}.kg-bookmark-icon{width:20px;height:20px;margin-right:6px}.kg-bookmark-author,.kg-bookmark-publisher{display:inline}.kg-bookmark-publisher{text-overflow:ellipsis;overflow:hidden;max-width:240px;white-space:nowrap;display:block;line-height:1.65em}.kg-bookmark-metadata>span:nth-of-type(2){font-weight:400}.kg-bookmark-metadata>span:nth-of-type(2):before{content:\"\\2022\";margin:0 6px}.kg-bookmark-metadata>span:last-of-type{overflow:hidden;text-overflow:ellipsis}.kg-bookmark-thumbnail{position:relative;flex-grow:1;min-width:33%}.kg-bookmark-thumbnail img{width:100%;height:100%;object-fit:cover;position:absolute;top:0;left:0;border-radius:0 2px 2px 0}\n","button":".kg-button-card,.kg-button-card *{box-sizing:border-box}.kg-button-card{display:flex;position:static;align-items:center;width:100%;justify-content:center}.kg-button-card.kg-align-left{justify-content:flex-start}.kg-button-card a.kg-btn{display:flex;position:static;align-items:center;padding:0 1.2em;height:2.4em;line-height:1em;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:.95em;font-weight:600;text-decoration:none;border-radius:5px;transition:opacity .2s ease-in-out}.kg-button-card a.kg-btn:hover{opacity:.85}.kg-button-card a.kg-btn-accent{background-color:var(--ghost-accent-color);color:#fff}\n","callout":".kg-callout-card,.kg-callout-card *{box-sizing:border-box}.kg-callout-card{display:flex;padding:1.2em 1.6em;border-radius:8px}.kg-callout-card-grey{background:#7c8b9a21}.kg-callout-card-white{background:transparent;box-shadow:inset 0 0 0 1px #7c8b9a33}.kg-callout-card-blue{background:#21ace81f}.kg-callout-card-green{background:#34b7431f}.kg-callout-card-yellow{background:#f0a50f21}.kg-callout-card-red{background:#d12e2e1c}.kg-callout-card-pink{background:#e147ae1c}.kg-callout-card-purple{background:#8755ec1f}.kg-callout-card-accent{background:var(--ghost-accent-color);color:#fff}.kg-callout-card.kg-callout-card-accent a{color:#fff;text-decoration:underline}.kg-callout-card div.kg-callout-emoji{padding-right:.8em;line-height:1.25em;font-size:1.15em}.kg-callout-card div.kg-callout-text{font-size:.95em;line-height:1.5em}.kg-callout-card+.kg-callout-card{margin-top:1em}\n","collection":".kg-collection-card{width:100%;margin-top:6vmin}.kg-collection-card+*{margin-top:6vmin}.kg-collection-card-title{margin:.8rem 0 1.6rem;font-size:1.5rem;font-weight:700;text-transform:uppercase}a.kg-collection-card-post-wrapper{text-decoration:none;color:var(--text-color)}a.kg-collection-card-post-wrapper:hover{opacity:1}.kg-collection-card-post{display:flex;gap:3.2rem}.kg-collection-card-img{position:relative;aspect-ratio:3/2}.kg-collection-card-img img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}a.kg-collection-card-post-wrapper:hover img{opacity:.92;transition:all .2s ease}.kg-collection-card-content{display:flex;flex-direction:column;font-size:1.6rem}h2.kg-collection-card-post-title{margin:0;font-size:2.4rem;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}p.kg-collection-card-post-excerpt{margin-top:1.2rem;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-height:1.4}.kg-collection-card-post-meta{display:flex;opacity:.5;margin-top:1.2rem;font-size:1.3rem;font-weight:500}.kg-collection-card-list{display:flex;flex-direction:column;gap:3.2rem}@media(max-width:767px){.kg-collection-card-list .kg-collection-card-post{flex-direction:column}}.kg-collection-card-list .kg-collection-card-img{flex:0 0 30%}.kg-collection-card-grid{display:grid;grid-template-columns:repeat(1,minmax(0,1fr));gap:2.4rem}@media(min-width:640px){.kg-collection-card-grid:not(.columns-1){grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:1024px){.kg-collection-card-grid:not(.columns-1):not(.columns-2){grid-template-columns:repeat(3,minmax(0,1fr));gap:3.2rem}.kg-collection-card-grid.columns-1{gap:4.8rem}.kg-collection-card-grid.columns-2{gap:4rem}}@media(min-width:1280px){.kg-collection-card-grid:not(.columns-1):not(.columns-2):not(.columns-3){grid-template-columns:repeat(4,minmax(0,1fr))}}.kg-collection-card-grid .kg-collection-card-post{flex-direction:column;gap:1.2rem}@media(min-width:1024px){.kg-collection-card-grid.columns-1 .kg-collection-card-post{gap:2rem}.kg-collection-card-grid.columns-2 .kg-collection-card-post{gap:1.6rem}}.kg-collection-card-grid.columns-1 .kg-collection-card-img,.kg-collection-card-grid.columns-2 .kg-collection-card-img{aspect-ratio:16/9}.kg-collection-card-grid .kg-collection-card-content{font-size:1.5rem}@media(min-width:640px){.kg-collection-card-grid .kg-collection-card-content{font-size:1.6rem}}@media(min-width:1024px){.kg-collection-card-grid.columns-1 .kg-collection-card-content{font-size:1.8rem}.kg-collection-card-grid.columns-3 .kg-collection-card-content,.kg-collection-card-grid.columns-4 .kg-collection-card-content{font-size:1.5rem}}.kg-collection-card-grid h2.kg-collection-card-post-title{font-size:1.7rem}.kg-collection-card-grid .kg-collection-card-post-meta{font-size:1.25rem}@media(min-width:640px){.kg-collection-card-grid h2.kg-collection-card-post-title{font-size:1.9rem}.kg-collection-card-grid.columns-1 h2.kg-collection-card-post-title{font-size:2.4rem}.kg-collection-card-grid:not(.columns-3):not(.columns-4) .kg-collection-card-post-meta{font-size:1.3rem}}@media(min-width:1024px){.kg-collection-card-grid.columns-1 h2.kg-collection-card-post-title{font-size:3.6rem}.kg-collection-card-grid.columns-2 h2.kg-collection-card-post-title{font-size:2.4rem}.kg-collection-card-grid.columns-1 .kg-collection-card-post-meta{font-size:1.4rem}}@media(min-width:1280px){.kg-collection-card-grid.columns-4 h2.kg-collection-card-post-title{font-size:1.7rem}}\n","cta":".kg-cta-card,.kg-cta-card *{box-sizing:border-box}.kg-cta-card{display:flex;flex-direction:column;border-radius:8px}.kg-cta-bg-grey{background:#97a3af24}.kg-cta-bg-white{background:transparent;box-shadow:inset 0 0 0 1px #7c8b9a33}.kg-cta-bg-blue{background:#21ace81f}.kg-cta-bg-green{background:#34b7431f}.kg-cta-bg-yellow{background:#f0a50f21}.kg-cta-bg-red{background:#d12e2e1c}.kg-cta-bg-pink{background:#e147ae1c}.kg-cta-bg-purple{background:#8755ec1f}.kg-cta-sponsor-label-wrapper{margin:0 1.5em;padding:.7em 0;border-bottom:1px solid rgba(124,139,154,.2)}@media(max-width:600px){.kg-cta-sponsor-label-wrapper{margin:0 1.25em;padding:.5em 0}}.kg-cta-bg-none .kg-cta-sponsor-label-wrapper{margin:0;padding-top:0}.kg-cta-has-img .kg-cta-sponsor-label-wrapper:not(.kg-cta-bg-none .kg-cta-sponsor-label-wrapper):not(.kg-cta-minimal .kg-cta-sponsor-label-wrapper),.kg-cta-bg-none.kg-cta-no-dividers .kg-cta-sponsor-label-wrapper{border-bottom:0}.kg-cta-sponsor-label{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:12px;font-weight:600;text-transform:uppercase;text-wrap:pretty}.kg-cta-sponsor-label span:not(a span){color:color-mix(in srgb,currentColor 45%,transparent)}.kg-cta-sponsor-label a,.kg-cta-sponsor-label a span{color:currentColor;transition:opacity .15s ease-in-out}.kg-cta-sponsor-label a:hover,.kg-cta-sponsor-label a:hover span{color:currentColor;opacity:.85}.kg-cta-link-accent .kg-cta-sponsor-label a{color:var(--ghost-accent-color)}.kg-cta-content{display:flex;padding:1.5em;gap:1.5em}@media(max-width:600px){.kg-cta-content{padding:1.25em;gap:1.25em}}.kg-cta-has-img .kg-cta-sponsor-label-wrapper+.kg-cta-content:not(.kg-cta-bg-none .kg-cta-content):not(.kg-cta-minimal .kg-cta-content){padding-top:0}.kg-cta-bg-none .kg-cta-content{padding:1.5em 0;border-bottom:1px solid rgba(124,139,154,.2)}.kg-cta-bg-none.kg-cta-no-dividers .kg-cta-content{padding:0;border-bottom:none}.kg-cta-bg-none:not(.kg-cta-no-dividers) .kg-cta-content:not(.kg-cta-sponsor-label-wrapper+.kg-cta-content){border-top:1px solid rgba(124,139,154,.2)}@media(max-width:600px){.kg-cta-bg-none .kg-cta-content{padding:1.25em 0}}.kg-cta-minimal .kg-cta-content{flex-direction:row}@media(max-width:600px){.kg-cta-minimal .kg-cta-content{flex-direction:column;gap:1.6rem}}.kg-cta-immersive .kg-cta-content{flex-direction:column}.kg-cta-content-inner{display:flex;flex-direction:column;gap:1.5em}@media(max-width:600px){.kg-cta-content-inner{gap:1.25em}}.kg-cta-immersive.kg-cta-centered .kg-cta-content-inner{align-items:center}.kg-cta-image-container{flex-shrink:0}.kg-cta-image-container img{width:100%;height:auto;margin:0;object-fit:cover;border-radius:6px}.kg-cta-minimal .kg-cta-image-container img{width:64px;height:64px}@media(max-width:600px){.kg-cta-minimal .kg-cta-image-container img{width:52px;height:52px}}.kg-cta-text p{margin:0;line-height:1.5em;text-wrap:pretty}.kg-cta-bg-none .kg-cta-text p{line-height:unset}.kg-cta-immersive.kg-cta-centered .kg-cta-text{text-align:center}.kg-cta-text p+p{margin-top:1.25em}.kg-cta-text a{color:currentColor;transition:opacity .15s ease-in-out}.kg-cta-text a:hover{color:currentColor;opacity:.85}.kg-cta-link-accent .kg-cta-text a{color:var(--ghost-accent-color)}a.kg-cta-button{display:flex;position:static;align-items:center;justify-content:center;padding:0 1em;height:2.5em;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:.95em;font-weight:500;line-height:1.65;text-decoration:none;border-radius:6px;transition:opacity .15s ease-in-out}a.kg-cta-button:hover{opacity:.85}a.kg-cta-button.kg-style-accent{background-color:var(--ghost-accent-color)}a.kg-cta-button{width:max-content}.kg-cta-immersive.kg-cta-has-img a.kg-cta-button{width:100%}\n","file":".kg-file-card,.kg-file-card *{box-sizing:border-box}.kg-file-card{display:flex}.kg-file-card a.kg-file-card-container{display:flex;align-items:stretch;justify-content:space-between;color:inherit;padding:12px;min-height:92px;background:#fff;color:#222;border:1px solid rgb(124 139 154 / 25%);border-radius:5px;transition:all ease-in-out .35s;text-decoration:none;width:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.kg-file-card a.kg-file-card-container:hover{border:1px solid rgb(124 139 154 / 35%)}.kg-file-card-contents{display:flex;flex-direction:column;justify-content:space-between;margin:4px 8px;width:100%}.kg-file-card-title{font-size:16px;font-weight:600;line-height:1.3em}.kg-file-card-caption{font-size:14px;line-height:1.3em;opacity:.7}.kg-file-card-title+.kg-file-card-caption{flex-grow:1;margin-top:3px}.kg-file-card-metadata{display:inline;font-size:14px;line-height:1.3em;margin-top:5px}.kg-file-card-filename{display:inline;font-weight:500}.kg-file-card-filesize{display:inline-block;font-size:14px;opacity:.6}.kg-file-card-filesize:before{display:inline-block;content:\"\\2022\";margin-left:6px;margin-right:6px}.kg-file-card-icon{position:relative;display:flex;align-items:center;justify-content:center;width:80px;min-width:80px;height:100%;min-height:80px}.kg-file-card-icon:before{position:absolute;display:block;content:\"\";inset:0;background:currentColor;opacity:.06;transition:opacity ease-in-out .35s;border-radius:3px}.kg-file-card a.kg-file-card-container:hover .kg-file-card-icon:before{opacity:.08}.kg-file-card-icon svg{width:24px;height:24px;color:var(--ghost-accent-color)}.kg-file-card-medium a.kg-file-card-container{min-height:72px}.kg-file-card-medium .kg-file-card-caption{opacity:1;font-weight:500}.kg-file-card-small a.kg-file-card-container{align-items:center;min-height:52px}.kg-file-card-small .kg-file-card-metadata{font-size:14px;margin-top:0}.kg-file-card-small .kg-file-card-icon svg{width:20px;height:20px}.kg-file-card+.kg-file-card{margin-top:1em}\n","gallery":".kg-gallery-card,.kg-gallery-card *{box-sizing:border-box}.kg-gallery-card,.kg-image-card{--gap: 1.2rem}.kg-image-card:not(.kg-card-hascaption)+.kg-image-card,.kg-image-card:not(.kg-card-hascaption)+.kg-gallery-card,.kg-gallery-card:not(.kg-card-hascaption)+.kg-image-card,.kg-gallery-card:not(.kg-card-hascaption)+.kg-gallery-card{margin-top:var(--gap)}.kg-gallery-container{position:relative}.kg-gallery-row{display:flex;flex-direction:row;justify-content:center}.kg-gallery-image img{display:block;margin:0;width:100%;height:100%}.kg-gallery-row:not(:first-of-type){margin:var(--gap) 0 0}.kg-gallery-image:not(:first-of-type){margin:0 0 0 var(--gap)}@media(max-width:600px){.kg-gallery-card,.kg-image-card{--gap: .6rem}}\n","header":".kg-header-card,.kg-header-card *{box-sizing:border-box}.kg-header-card{padding:12vmin 4em;min-height:60vh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}.kg-header-card.kg-size-small{padding-top:14vmin;padding-bottom:14vmin;min-height:40vh}.kg-header-card.kg-size-large{padding-top:18vmin;padding-bottom:18vmin;min-height:80vh}.kg-header-card.kg-align-left{text-align:left;align-items:flex-start}.kg-header-card.kg-style-dark{background:#151515;color:#fff}.kg-header-card.kg-style-light{background-color:#fafafa}.kg-header-card.kg-style-accent{background-color:var(--ghost-accent-color)}.kg-header-card.kg-style-image{position:relative;background-color:#e7e7e7;background-size:cover;background-position:center}.kg-header-card.kg-style-image:before{position:absolute;display:block;content:\"\";inset:0;background:linear-gradient(0deg,#0000,#0003)}.kg-header-card h2.kg-header-card-header{font-size:5em;font-weight:700;line-height:1.1em;letter-spacing:-.01em;margin:0}.kg-header-card h2.kg-header-card-header strong{font-weight:800}.kg-header-card.kg-size-small h2.kg-header-card-header{font-size:4em}.kg-header-card.kg-size-large h2.kg-header-card-header{font-size:6em}.kg-header-card h3.kg-header-card-subheader{font-size:1.5em;font-weight:500;line-height:1.4em;margin:0;max-width:40em}.kg-header-card h2+h3.kg-header-card-subheader{margin:.35em 0 0}.kg-header-card h3.kg-header-card-subheader strong{font-weight:600}.kg-header-card.kg-size-small h3.kg-header-card-subheader{font-size:1.25em}.kg-header-card.kg-size-large h3.kg-header-card-subheader{font-size:1.75em}.kg-header-card:not(.kg-style-light) h2.kg-header-card-header,.kg-header-card:not(.kg-style-light) h3.kg-header-card-subheader{color:#fff}.kg-header-card.kg-style-accent h3.kg-header-card-subheader,.kg-header-card.kg-style-image h3.kg-header-card-subheader{opacity:1}.kg-header-card.kg-style-image h2.kg-header-card-header,.kg-header-card.kg-style-image h3.kg-header-card-subheader,.kg-header-card.kg-style-image a.kg-header-card-button{z-index:999}.kg-header-card h2.kg-header-card-header a,.kg-header-card h3.kg-header-card-subheader a{color:var(--ghost-accent-color)}.kg-header-card.kg-style-accent h2.kg-header-card-header a,.kg-header-card.kg-style-accent h3.kg-header-card-subheader a,.kg-header-card.kg-style-image h2.kg-header-card-header a,.kg-header-card.kg-style-image h3.kg-header-card-subheader a{color:#fff}.kg-header-card a.kg-header-card-button{display:flex;position:static;align-items:center;fill:#fff;background:#fff;border-radius:3px;outline:none;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:1.05em;font-weight:600;line-height:1em;text-align:center;text-decoration:none;letter-spacing:.2px;white-space:nowrap;text-overflow:ellipsis;color:#151515;height:2.7em;padding:0 1.2em;transition:opacity .2s ease}.kg-header-card h2+a.kg-header-card-button,.kg-header-card h3+a.kg-header-card-button{margin:1.75em 0 0}.kg-header-card a.kg-header-card-button:hover{opacity:.85}.kg-header-card.kg-size-large a.kg-header-card-button{font-size:1.1em;height:2.9em}.kg-header-card.kg-size-large h2+a.kg-header-card-button,.kg-header-card.kg-size-large h3+a.kg-header-card-button{margin-top:2em}.kg-header-card.kg-size-small a.kg-header-card-button{height:2.4em;font-size:1em}.kg-header-card.kg-size-small h2+a.kg-header-card-button,.kg-header-card.kg-size-small h3+a.kg-header-card-button{margin-top:1.5em}.kg-header-card.kg-style-image a.kg-header-card-button,.kg-header-card.kg-style-dark a.kg-header-card-button{background:#fff;color:#151515}.kg-header-card.kg-style-light a.kg-header-card-button{background:var(--ghost-accent-color);color:#fff}.kg-header-card.kg-style-accent a.kg-header-card-button{background:#fff;color:#151515}@media(max-width:640px){.kg-header-card{padding-left:1em;padding-right:1em}.kg-header-card h2.kg-header-card-header{font-size:3.5em}.kg-header-card.kg-size-large h2.kg-header-card-header{font-size:4em}.kg-header-card.kg-size-small h2.kg-header-card-header{font-size:3em}.kg-header-card h3.kg-header-card-subheader{font-size:1.25em}.kg-header-card.kg-size-large h3.kg-header-card-subheader{font-size:1.5em}.kg-header-card.kg-size-small h3.kg-header-card-subheader{font-size:1em}}\n","header_v2":".kg-header-card.kg-v2{position:relative;padding:0;min-height:initial;text-align:initial}.kg-header-card.kg-v2,.kg-header-card.kg-v2 *{box-sizing:border-box}.kg-header-card.kg-v2 a,.kg-header-card.kg-v2 a span{color:currentColor}.kg-header-card.kg-style-accent.kg-v2{background-color:var(--ghost-accent-color)}.kg-header-card-content{width:100%}.kg-layout-split .kg-header-card-content{display:grid;grid-template-columns:1fr 1fr}.kg-header-card-text{position:relative;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;height:100%;padding:min(6.4vmax,120px) min(4vmax,80px);background-size:cover;background-position:center;text-align:left}.kg-width-wide .kg-header-card-text{padding:min(10vmax,220px) min(6.4vmax,140px)}.kg-width-full .kg-header-card-text{padding:min(12vmax,260px) 0}.kg-layout-split .kg-header-card-text{padding:min(12vmax,260px) min(4vmax,80px)}.kg-layout-split.kg-content-wide .kg-header-card-text{padding:min(10vmax,220px) 0 min(10vmax,220px) min(4vmax,80px)}.kg-layout-split.kg-content-wide.kg-swapped .kg-header-card-text{padding:min(10vmax,220px) min(4vmax,80px) min(10vmax,220px) 0}.kg-swapped .kg-header-card-text{grid-row:1}.kg-header-card-text.kg-align-center{align-items:center;text-align:center}.kg-header-card.kg-style-image h2.kg-header-card-heading,.kg-header-card.kg-style-image .kg-header-card-subheading,.kg-header-card.kg-style-image.kg-v2 .kg-header-card-button{z-index:999}.kg-header-card>picture>.kg-header-card-image{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;background-color:#fff;pointer-events:none}.kg-header-card-content .kg-header-card-image{width:100%;height:0;min-height:100%;object-fit:cover;object-position:center}.kg-content-wide .kg-header-card-content .kg-header-card-image{height:100%;padding:5.6em 0;object-fit:contain}.kg-header-card h2.kg-header-card-heading{margin:0;font-size:clamp(1.7em,4vw,2.5em);font-weight:700;line-height:1.05em;letter-spacing:-.01em}.kg-header-card.kg-width-wide h2.kg-header-card-heading{font-size:clamp(1.7em,5vw,3.3em)}.kg-header-card.kg-width-full h2.kg-header-card-heading{font-size:clamp(1.9em,5.6vw,4.2em)}.kg-header-card.kg-width-full.kg-layout-split h2.kg-header-card-heading{font-size:clamp(1.9em,4vw,3.3em)}.kg-header-card-subheading{margin:0 0 2em}.kg-header-card .kg-header-card-subheading{max-width:40em;margin:0;font-size:clamp(1.05em,2vw,1.4em);font-weight:500;line-height:1.2em}.kg-header-card h2+.kg-header-card-subheading{margin:.6em 0 0}.kg-header-card .kg-header-card-subheading strong{font-weight:600}.kg-header-card.kg-width-wide .kg-header-card-subheading{font-size:clamp(1.05em,2vw,1.55em)}.kg-header-card.kg-width-full .kg-header-card-subheading:not(.kg-layout-split .kg-header-card-subheading){max-width:min(65vmax,1200px);font-size:clamp(1.05em,2vw,1.7em)}.kg-header-card.kg-width-full.kg-layout-split .kg-header-card-subheading{font-size:clamp(1.05em,2vw,1.55em)}.kg-header-card.kg-v2 .kg-header-card-button{display:flex;position:relative;align-items:center;height:2.9em;min-height:46px;padding:0 1.2em;outline:none;border:none;font-size:1em;font-weight:600;line-height:1em;text-align:center;text-decoration:none;letter-spacing:.2px;white-space:nowrap;text-overflow:ellipsis;border-radius:3px;transition:opacity .2s ease}.kg-header-card.kg-v2 .kg-header-card-button.kg-style-accent{background-color:var(--ghost-accent-color)}.kg-header-card.kg-v2 h2+.kg-header-card-button,.kg-header-card.kg-v2 p+.kg-header-card-button{margin:1.5em 0 0}.kg-header-card.kg-v2 .kg-header-card-button:hover{opacity:.85}.kg-header-card.kg-v2.kg-width-wide .kg-header-card-button{font-size:1.05em}.kg-header-card.kg-v2.kg-width-wide h2+.kg-header-card-button,.kg-header-card.kg-v2.kg-width-wide p+.kg-header-card-button{margin-top:1.75em}.kg-header-card.kg-v2.kg-width-full .kg-header-card-button{font-size:1.1em}.kg-header-card.kg-v2.kg-width-full h2+.kg-header-card-button,.kg-header-card.kg-v2.kg-width-full p+.kg-header-card-button{margin-top:2em}@media(max-width:640px){.kg-layout-split .kg-header-card-content{grid-template-columns:1fr}.kg-width-wide .kg-header-card-text{padding:min(6.4vmax,120px) min(4vmax,80px)}.kg-layout-split.kg-content-wide .kg-header-card-text,.kg-layout-split.kg-content-wide.kg-swapped .kg-header-card-text{padding:min(9.6vmax,180px) 0}.kg-header-card.kg-width-full .kg-header-card-subheading:not(.kg-layout-split .kg-header-card-subheading){max-width:unset}.kg-header-card-content .kg-header-card-image:not(.kg-content-wide .kg-header-card-content .kg-header-card-image){height:auto;min-height:unset;aspect-ratio:1 / 1}.kg-content-wide .kg-header-card-content .kg-header-card-image{padding:1.7em 0 0}.kg-content-wide.kg-swapped .kg-header-card-content .kg-header-card-image{padding:0 0 1.7em}.kg-header-card.kg-v2 .kg-header-card-button{height:2.9em}.kg-header-card.kg-v2.kg-width-wide .kg-header-card-button,.kg-header-card.kg-v2.kg-width-full .kg-header-card-button{font-size:1em}}\n","nft":".kg-nft-card,.kg-nft-card *{box-sizing:border-box}.kg-nft-card{display:flex;flex-direction:column;align-items:center;width:100%;margin-left:auto;margin-right:auto}.kg-nft-card a.kg-nft-card-container{position:static;display:flex;flex:auto;flex-direction:column;text-decoration:none;font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif;font-size:14px;font-weight:400;box-shadow:0 2px 6px -2px #0000001a,0 0 1px #0006;width:100%;max-width:512px;color:#222;background:#fff;border-radius:5px;transition:none}.kg-nft-card *{position:static}.kg-nft-metadata{padding:20px;width:100%}.kg-nft-image{border-radius:5px 5px 0 0;width:100%}.kg-nft-header{display:flex;justify-content:space-between;align-items:flex-start;gap:20px}.kg-nft-header h4.kg-nft-title{font-family:inherit;font-size:19px;font-weight:700;line-height:1.3em;min-width:unset;max-width:unset;margin:0;color:#222}.kg-nft-opensea-logo{margin-top:2px;width:100px;object-fit:scale-down}.kg-nft-creator{font-family:inherit;line-height:1.4em;margin:4px 0 0;color:#ababab}.kg-nft-creator span{font-weight:500;color:#222}.kg-nft-card p.kg-nft-description{font-family:inherit;font-size:14px;line-height:1.4em;margin:20px 0 0;color:#222}\n","product":".kg-product-card,.kg-product-card *{box-sizing:border-box}.kg-product-card{display:flex;align-items:center;flex-direction:column;width:100%}.kg-product-card-container{display:grid;grid-template-columns:auto min-content;align-items:center;grid-row-gap:16px;background:transparent;max-width:550px;padding:20px;width:100%;background:#fff;color:#222;border-radius:5px;box-shadow:inset 0 0 0 1px #7c8b9a40;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.kg-product-card-image{grid-column:1 / 3;justify-self:center;height:auto}.kg-product-card-title-container{grid-column:1 / 2}.kg-product-card h4.kg-product-card-title{text-decoration:none;font-weight:600;font-size:21px;margin-top:0;margin-bottom:0;line-height:1.15em}.kg-product-card-description{grid-column:1 / 3}.kg-product-card .kg-product-card-description p,.kg-product-card .kg-product-card-description ol,.kg-product-card .kg-product-card-description ul{font-size:14px;line-height:1.5em;opacity:.7;margin-bottom:0}.kg-product-card .kg-product-card-description p:first-of-type{margin-top:-4px}.kg-product-card .kg-product-card-description p:not(:first-of-type),.kg-product-card .kg-product-card-description ul,.kg-product-card .kg-product-card-description ol{margin-top:.95em}.kg-product-card .kg-product-card-description li+li{margin-top:.5em}.kg-product-card-rating{display:flex;align-items:center;grid-column:2 / 3;align-self:start;justify-self:end;padding-left:16px}@media(max-width:400px){.kg-product-card-title-container{grid-column:1 / 3}.kg-product-card-rating{grid-column:1 / 3;justify-self:start;margin-top:-15px;padding-left:0}}.kg-product-card-rating-star{height:20px;width:20px}.kg-product-card-rating-star svg{width:16px;height:16px;fill:currentColor;opacity:.15}.kg-product-card-rating-active.kg-product-card-rating-star svg{opacity:1}.kg-product-card a.kg-product-card-button{justify-content:center;grid-column:1 / 3;display:flex;position:static;align-items:center;font-size:14px;font-weight:600;line-height:1em;text-decoration:none;width:100%;height:38px;border-radius:6px;padding:0 12px;transition:opacity .2s ease-in-out}.kg-product-card a.kg-product-card-btn-accent{background-color:var(--ghost-accent-color);color:#fff}\n","signup":".kg-signup-card{position:relative}.kg-signup-card,.kg-signup-card *{box-sizing:border-box}.kg-signup-card a,.kg-signup-card a span{color:currentColor}.kg-signup-card.kg-style-accent{background-color:var(--ghost-accent-color)}.kg-layout-split .kg-signup-card-content{display:grid;grid-template-columns:1fr 1fr}.kg-signup-card-text{position:relative;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;height:100%;padding:min(4vmax,80px);background-size:cover;background-position:center;text-align:left}.kg-width-wide .kg-signup-card-text{padding:min(6.4vmax,120px)}.kg-width-full .kg-signup-card-text{padding:min(12vmax,260px) 0}.kg-layout-split .kg-signup-card-text{padding:min(12vmax,260px) min(4vmax,80px)}.kg-layout-split.kg-content-wide .kg-signup-card-text{padding:min(10vmax,220px) 0 min(10vmax,220px) min(4vmax,80px)}.kg-layout-split.kg-content-wide.kg-swapped .kg-signup-card-text{padding:min(10vmax,220px) min(4vmax,80px) min(10vmax,220px) 0}.kg-swapped .kg-signup-card-text{grid-row:1}.kg-signup-card-text.kg-align-center{align-items:center;text-align:center}.kg-signup-card.kg-style-image h2.kg-signup-card-heading,.kg-signup-card.kg-style-image .kg-signup-card-subheading,.kg-signup-card.kg-style-image .kg-signup-card-button{z-index:999}.kg-signup-card>picture>.kg-signup-card-image{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;background-color:#fff;pointer-events:none}.kg-signup-card-content .kg-signup-card-image{width:100%;height:0;min-height:100%;object-fit:cover;object-position:center}.kg-content-wide .kg-signup-card-content .kg-signup-card-image{height:100%;padding:5.6em 0;object-fit:contain}.kg-signup-card h2.kg-signup-card-heading{margin:0;font-size:clamp(1.7em,4vw,2.5em);font-weight:700;line-height:1.05em;letter-spacing:-.01em}.kg-signup-card.kg-width-wide h2.kg-signup-card-heading{font-size:clamp(1.7em,5vw,3.3em)}.kg-signup-card.kg-width-full h2.kg-signup-card-heading{font-size:clamp(1.9em,5.6vw,4.2em)}.kg-signup-card.kg-width-full.kg-layout-split h2.kg-signup-card-heading{font-size:clamp(1.9em,4vw,3.3em)}.kg-signup-card-subheading{margin:0 0 2em}.kg-signup-card .kg-signup-card-subheading{max-width:40em;margin:0;font-size:clamp(1.05em,2vw,1.4em);font-weight:500;line-height:1.2em}.kg-signup-card h2+.kg-signup-card-subheading{margin:.6em 0 0}.kg-signup-card .kg-signup-card-subheading strong{font-weight:600}.kg-signup-card.kg-width-wide .kg-signup-card-subheading{font-size:clamp(1.05em,2vw,1.55em)}.kg-signup-card.kg-width-full .kg-signup-card-subheading:not(.kg-layout-split .kg-signup-card-subheading){max-width:min(65vmax,1200px);font-size:clamp(1.05em,2vw,1.7em)}.kg-signup-card.kg-width-full.kg-layout-split .kg-signup-card-subheading{font-size:clamp(1.05em,2vw,1.55em)}.kg-signup-card-form{position:relative;display:flex;flex-shrink:0;width:100%}.kg-align-center .kg-signup-card-form{justify-content:center}.kg-signup-card-heading+.kg-signup-card-form,.kg-signup-card-subheading+.kg-signup-card-form{margin:min(2.4vmax,48px) 0 0}.kg-width-wide .kg-signup-card-heading+.kg-signup-card-form,.kg-width-wide .kg-signup-card-subheading+.kg-signup-card-form{margin:min(3.2vmax,64px) 0 0}.kg-width-full .kg-signup-card-heading+.kg-signup-card-form,.kg-width-full .kg-signup-card-subheading+.kg-signup-card-form{margin:min(4vmax,80px) 0 0}.kg-signup-card-fields{display:flex;width:100%;padding:3px;background:#fff;border:1px solid #E6E6E6;border-radius:4px}.kg-width-wide .kg-signup-card-fields,.kg-width-full .kg-signup-card-fields{width:100%;max-width:500px}.kg-signup-card-input{width:100%;height:2.9em;min-height:46px;margin:0 3px 0 0;padding:12px 16px;border:none;background:#fff;font-size:1.1em}.kg-signup-card-input:focus,.kg-signup-card-input:focus-visible{outline:none}.kg-signup-card-button{display:flex;position:relative;align-items:center;height:2.9em;min-height:46px;height:100%;padding:0 1.2em;outline:none;border:none;font-size:1em;font-weight:600;line-height:1em;text-align:center;text-decoration:none;letter-spacing:.2px;white-space:nowrap;text-overflow:ellipsis;border-radius:3px;transition:opacity .2s ease;cursor:pointer}.kg-signup-card-button.kg-style-accent{background-color:var(--ghost-accent-color)}.kg-signup-card h2+.kg-signup-card-button,.kg-signup-card p+.kg-signup-card-button{margin:1.5em 0 0}.kg-signup-card .kg-signup-card-button:hover{opacity:.85}.kg-signup-card.kg-width-wide .kg-signup-card-button{font-size:1.05em}.kg-signup-card.kg-width-wide h2+.kg-signup-card-button,.kg-signup-card.kg-width-wide p+.kg-signup-card-button{margin-top:1.75em}.kg-signup-card.kg-width-full .kg-signup-card-button{font-size:1.1em}.kg-signup-card.kg-width-full h2+.kg-signup-card-button,.kg-signup-card.kg-width-full p+.kg-signup-card-button{margin-top:2em}.kg-signup-card-success,.kg-signup-card-error,.kg-signup-card-form.success .kg-signup-card-fields{display:none}.kg-signup-card-form.success .kg-signup-card-success{display:flex;align-items:center;height:3em;font-size:1.25em;font-weight:500;line-height:1.4em}.kg-signup-card-form.error .kg-signup-card-fields{border:1px solid #FF0000;box-shadow:inset 0 0 0 1px #f003}.kg-signup-card-form.error .kg-signup-card-error{position:absolute;bottom:calc(-1rem - 1.6em);display:block;font-size:inherit}.kg-signup-card-button-loading{position:absolute;inset:0;align-items:center;justify-content:center;display:none}.kg-signup-card-form.loading .kg-signup-card-button-default{color:transparent}.kg-signup-card-form.loading .kg-signup-card-button-loading{display:flex}.kg-signup-card-disclaimer{margin:1rem 0 0}.kg-signup-card-form.success+.kg-signup-card-disclaimer,.kg-signup-card-form.error+.kg-signup-card-disclaimer{visibility:hidden}@media(max-width:640px){.kg-layout-split .kg-signup-card-content{grid-template-columns:1fr}.kg-width-wide .kg-signup-card-text{padding:min(6.4vmax,120px) min(4vmax,80px)}.kg-layout-split.kg-content-wide .kg-signup-card-text,.kg-layout-split.kg-content-wide.kg-swapped .kg-signup-card-text{padding:min(9.6vmax,180px) 0}.kg-signup-card.kg-width-full .kg-signup-card-subheading:not(.kg-layout-split .kg-signup-card-subheading){max-width:unset}.kg-signup-card-content .kg-signup-card-image:not(.kg-content-wide .kg-signup-card-content .kg-signup-card-image){height:auto;min-height:unset;aspect-ratio:1 / 1}.kg-content-wide .kg-signup-card-content .kg-signup-card-image{padding:1.7em 0 0}.kg-content-wide.kg-swapped .kg-signup-card-content .kg-signup-card-image{padding:0 0 1.7em}.kg-signup-card-input{height:2.9em;padding:6px 12px;font-size:1em}.kg-signup-card-button{height:2.9em}.kg-signup-card.kg-width-wide .kg-signup-card-button,.kg-signup-card.kg-width-full .kg-signup-card-button{font-size:1em}}\n","toggle":".kg-toggle-card,.kg-toggle-card *{box-sizing:border-box}.kg-toggle-card{background:transparent;box-shadow:inset 0 0 0 1px #7c8b9a40;border-radius:4px;padding:1.2em}.kg-toggle-card[data-kg-toggle-state=close] .kg-toggle-content{height:0;overflow:hidden;transition:opacity .5s ease,top .35s ease;opacity:0;top:-.5em;position:relative}.kg-toggle-content{height:auto;opacity:1;transition:opacity 1s ease,top .35s ease;top:0;position:relative}.kg-toggle-card[data-kg-toggle-state=close] svg{transform:unset}.kg-toggle-heading{cursor:pointer;display:flex;justify-content:space-between;align-items:flex-start}.kg-toggle-card h4.kg-toggle-heading-text{font-size:1.15em;font-weight:700;line-height:1.3em;margin-top:0;margin-bottom:0}.kg-toggle-content p:first-of-type{margin-top:.5em}.kg-toggle-card .kg-toggle-content p,.kg-toggle-card .kg-toggle-content ol,.kg-toggle-card .kg-toggle-content ul{font-size:.95em;line-height:1.5em;margin-top:.95em;margin-bottom:0}.kg-toggle-card li+li{margin-top:.5em}.kg-toggle-card-icon{height:24px;width:24px;display:flex;justify-content:center;align-items:center;margin-left:1em;padding:0;background:none;border:0;cursor:pointer}.kg-toggle-heading svg{width:14px;color:#7c8b9a80;transition:all .3s;transform:rotate(-180deg)}.kg-toggle-heading path{fill:none;stroke:currentcolor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5;fill-rule:evenodd}.kg-toggle-card+.kg-toggle-card{margin-top:1em}\n","transistor":".kg-transistor-card{display:flex;justify-content:center}.kg-transistor-placeholder{display:flex;flex-direction:column;align-items:center;gap:2.4rem;width:100%;max-width:100%;padding:3rem 2.4rem;border:1px solid rgba(255,255,255,.14);border:1px solid color-mix(in srgb,currentColor 14%,transparent);border-radius:12px;background:#ffffff0a;background:color-mix(in srgb,currentColor 4%,transparent);color:inherit;text-align:center;box-sizing:border-box}.kg-transistor-icon{display:flex;flex-shrink:0;align-items:center;justify-content:center;width:116px;height:116px;border-radius:14px;background:var(--ghost-accent-color, #b8a5ac);color:#fff}.kg-transistor-icon svg{display:block;width:56px;height:56px}.kg-transistor-content{min-width:0;max-width:640px}.kg-transistor-title{margin:0;color:inherit;font-size:2.3rem;font-weight:600;line-height:1.2}.kg-transistor-description{margin-top:1.6rem;color:inherit;font-size:1.6rem;line-height:1.5;opacity:.65}@media(max-width:640px){.kg-transistor-placeholder{gap:1.6rem;padding:2.4rem 1.8rem}.kg-transistor-icon{width:88px;height:88px;border-radius:12px}.kg-transistor-icon svg{width:44px;height:44px}.kg-transistor-title{font-size:1.8rem}.kg-transistor-description{margin-top:1rem;font-size:1.45rem}}\n","video":".kg-video-card,.kg-video-card *{box-sizing:border-box}.kg-video-card{position:relative;--seek-before-width: 0%;--volume-before-width: 100%;--buffered-width: 0%}.kg-video-card video{display:block;max-width:100%;height:auto}.kg-video-container{position:relative;height:0;width:100%;overflow:hidden}.kg-video-container video{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover}.kg-video-overlay{position:absolute;inset:0;display:flex;justify-content:center;align-items:center;background-image:linear-gradient(180deg,rgba(0,0,0,.3) 0,transparent 70%,transparent 100%);z-index:999;transition:opacity .2s ease-in-out}.kg-video-large-play-icon{display:flex;justify-content:center;align-items:center;width:72px;height:72px;padding:0;background:#00000080;border-radius:50%;transition:opacity .2s ease-in-out}.kg-video-large-play-icon svg{width:20px;height:auto;margin-left:2px;fill:#fff}.kg-video-player-container{position:absolute;bottom:-1px;left:0;right:0;width:100%;height:80px;background:linear-gradient(#0000,#00000080);z-index:999;transition:opacity .2s ease-in-out}.kg-video-player{position:absolute;bottom:0;display:flex;align-items:center;width:100%;z-index:9999;padding:12px 16px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;background:#00000080}.kg-video-current-time{min-width:38px;padding:0 4px;color:#fff;font-family:inherit;font-size:12.5px;font-weight:500;line-height:1.4em;white-space:nowrap}.kg-video-time{color:#fff9;font-family:inherit;font-size:12.5px;font-weight:500;line-height:1.4em;white-space:nowrap}.kg-video-duration{padding:0 4px}.kg-video-play-icon,.kg-video-pause-icon{position:relative;padding:0 4px 0 0;font-size:0;background:transparent}.kg-video-hide{display:none!important}.kg-video-hide-animated{opacity:0!important;transition:opacity .2s ease-in-out;cursor:initial}.kg-video-play-icon svg,.kg-video-pause-icon svg{width:14px;height:14px;fill:#fff}.kg-video-seek-slider{flex-grow:1;margin:0 4px}@media(max-width:520px){.kg-video-seek-slider{display:none}}.kg-video-playback-rate{min-width:37px;padding:0 4px;color:#fff;font-family:inherit;font-size:12.5px;font-weight:600;line-height:1.4em;text-align:left;background:transparent;white-space:nowrap}@media(max-width:520px){.kg-video-playback-rate{padding-left:8px}}.kg-video-mute-icon,.kg-video-unmute-icon{position:relative;bottom:-1px;padding:0 4px;font-size:0;background:transparent}@media(max-width:520px){.kg-video-mute-icon,.kg-video-unmute-icon{margin-left:auto}}.kg-video-mute-icon svg,.kg-video-unmute-icon svg{width:16px;height:16px;fill:#fff}.kg-video-volume-slider{width:80px}@media(max-width:300px){.kg-video-volume-slider{display:none}}.kg-video-seek-slider:before{content:\"\";position:absolute;left:0;width:var(--seek-before-width)!important;height:4px;cursor:pointer;background-color:#ebeef0;border-radius:2px}.kg-video-volume-slider:before{content:\"\";position:absolute;left:0;width:var(--volume-before-width)!important;height:4px;cursor:pointer;background-color:#ebeef0;border-radius:2px}.kg-video-card input[type=range]{position:relative;-webkit-appearance:none;background:transparent}.kg-video-card input[type=range]:focus{outline:none}.kg-video-card input[type=range]::-webkit-slider-thumb{-webkit-appearance:none}.kg-video-card input[type=range]::-ms-track{cursor:pointer;border-color:transparent;color:transparent;background:transparent}.kg-video-card button{display:flex;align-items:center;border:0;cursor:pointer}.kg-video-card input[type=range]{height:auto;padding:0;border:0}.kg-video-card input[type=range]::-webkit-slider-runnable-track{width:100%;height:4px;cursor:pointer;background:#fff3;border-radius:2px}.kg-video-card input[type=range]::-webkit-slider-thumb{position:relative;box-sizing:content-box;width:13px;height:13px;margin:-5px 0 0;border:0;cursor:pointer;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #00000014,0 1px 4px #0000003d}.kg-video-card input[type=range]:active::-webkit-slider-thumb{transform:scale(1.2)}.kg-video-card input[type=range]::-moz-range-track{width:100%;height:4px;cursor:pointer;background:#fff3;border-radius:2px}.kg-video-card input[type=range]::-moz-range-progress{background:#ebeef0;border-radius:2px}.kg-video-card input[type=range]::-moz-range-thumb{box-sizing:content-box;width:13px;height:13px;border:0;cursor:pointer;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #00000014,0 1px 4px #0000003d}.kg-video-card input[type=range]:active::-moz-range-thumb{transform:scale(1.2)}.kg-video-card input[type=range]::-ms-track{width:100%;height:3px;border:solid transparent;color:transparent;cursor:pointer;background:transparent}.kg-video-card input[type=range]::-ms-fill-lower{background:#fff}.kg-video-card input[type=range]::-ms-fill-upper{background:#ebeef0}.kg-video-card input[type=range]::-ms-thumb{box-sizing:content-box;width:13px;height:13px;border:0;cursor:pointer;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #00000014,0 1px 4px #0000003d}.kg-video-card input[type=range]:active::-ms-thumb{transform:scale(1.2)}\n"},"js":{"audio":"(function(){const S=function(a){const o=a.querySelector(\".kg-audio-player-container\"),s=a.querySelector(\".kg-audio-play-icon\"),i=a.querySelector(\".kg-audio-pause-icon\"),r=a.querySelector(\".kg-audio-seek-slider\"),g=a.querySelector(\".kg-audio-playback-rate\"),l=a.querySelector(\".kg-audio-mute-icon\"),n=a.querySelector(\".kg-audio-unmute-icon\"),q=a.querySelector(\".kg-audio-volume-slider\"),e=a.querySelector(\"audio\"),x=a.querySelector(\".kg-audio-duration\"),h=a.querySelector(\".kg-audio-current-time\");let P=[{rate:.75,label:\"0.7\\xD7\"},{rate:1,label:\"1\\xD7\"},{rate:1.25,label:\"1.2\\xD7\"},{rate:1.75,label:\"1.7\\xD7\"},{rate:2,label:\"2\\xD7\"}],d=null,c=1;const u=()=>{r.value=Math.floor(e.currentTime),h.textContent=y(r.value),o.style.setProperty(\"--seek-before-width\",`${r.value/r.max*100}%`),d=requestAnimationFrame(u)},b=t=>{t===r?o.style.setProperty(\"--seek-before-width\",t.value/t.max*100+\"%\"):o.style.setProperty(\"--volume-before-width\",t.value/t.max*100+\"%\")},y=t=>{const f=Math.floor(t/60),m=Math.floor(t%60),A=m<10?`0${m}`:`${m}`;return`${f}:${A}`},p=()=>{x.textContent=y(e.duration)},L=()=>{r.max=Math.floor(e.duration)},k=()=>{if(e.buffered.length>0){const t=Math.floor(e.buffered.end(e.buffered.length-1));o.style.setProperty(\"--buffered-width\",`${t/r.max*100}%`)}};e.readyState>0?(p(),L(),k()):e.addEventListener(\"loadedmetadata\",()=>{p(),L(),k()}),s.addEventListener(\"click\",()=>{s.classList.add(\"kg-audio-hide\"),i.classList.remove(\"kg-audio-hide\"),e.play(),requestAnimationFrame(u)}),i.addEventListener(\"click\",()=>{i.classList.add(\"kg-audio-hide\"),s.classList.remove(\"kg-audio-hide\"),e.pause(),cancelAnimationFrame(d)}),l.addEventListener(\"click\",()=>{l.classList.add(\"kg-audio-hide\"),n.classList.remove(\"kg-audio-hide\"),e.muted=!1}),n.addEventListener(\"click\",()=>{n.classList.add(\"kg-audio-hide\"),l.classList.remove(\"kg-audio-hide\"),e.muted=!0}),g.addEventListener(\"click\",()=>{let t=P[(c+1)%5];c=c+1,e.playbackRate=t.rate,g.textContent=t.label}),e.addEventListener(\"progress\",k),r.addEventListener(\"input\",t=>{b(t.target),h.textContent=y(r.value),e.paused||cancelAnimationFrame(d)}),r.addEventListener(\"change\",()=>{e.currentTime=r.value,e.paused||requestAnimationFrame(u)}),q.addEventListener(\"input\",t=>{const f=t.target.value;b(t.target),e.volume=f/100})},v=document.querySelectorAll(\".kg-audio-card\");for(let a=0;a<v.length;a++)S(v[a])})();\n","gallery":"(function(){document.querySelectorAll(\".kg-gallery-image img\").forEach(function(t){const e=t.closest(\".kg-gallery-image\"),i=t.attributes.width.value,o=t.attributes.height.value,c=i/o;e.style.flex=c+\" 1 0%\"})})();\n","toggle":"(function(){const g=document.getElementsByClassName(\"kg-toggle-heading\"),a=function(t){const e=t.target.closest(\".kg-toggle-card\");var l=e.getAttribute(\"data-kg-toggle-state\");l===\"close\"?e.setAttribute(\"data-kg-toggle-state\",\"open\"):e.setAttribute(\"data-kg-toggle-state\",\"close\")};for(let t=0;t<g.length;t++)g[t].addEventListener(\"click\",a,!1)})();\n","video":"(function(){const F=function(a){const o=a.querySelector(\".kg-video-player\"),d=a.querySelector(\".kg-video-player-container\"),s=a.querySelector(\".kg-video-play-icon\"),r=a.querySelector(\".kg-video-pause-icon\"),i=a.querySelector(\".kg-video-seek-slider\"),P=a.querySelector(\".kg-video-playback-rate\"),c=a.querySelector(\".kg-video-mute-icon\"),u=a.querySelector(\".kg-video-unmute-icon\"),S=a.querySelector(\".kg-video-volume-slider\"),t=a.querySelector(\"video\"),$=a.querySelector(\".kg-video-duration\"),q=a.querySelector(\".kg-video-current-time\"),g=a.querySelector(\".kg-video-large-play-icon\"),y=a.querySelector(\".kg-video-overlay\");let M=[{rate:.75,label:\"0.7\\xD7\"},{rate:1,label:\"1\\xD7\"},{rate:1.25,label:\"1.2\\xD7\"},{rate:1.75,label:\"1.7\\xD7\"},{rate:2,label:\"2\\xD7\"}],n=null,p=1;t.loop&&(g.classList.add(\"kg-video-hide-animated\"),y.classList.add(\"kg-video-hide-animated\"));const v=()=>{i.value=Math.floor(t.currentTime),q.textContent=h(i.value),o.style.setProperty(\"--seek-before-width\",`${i.value/i.max*100}%`),n=requestAnimationFrame(v)},b=e=>{e===i?o.style.setProperty(\"--seek-before-width\",e.value/e.max*100+\"%\"):o.style.setProperty(\"--volume-before-width\",e.value/e.max*100+\"%\")},h=e=>{const l=Math.floor(e/60),L=Math.floor(e%60),T=L<10?`0${L}`:`${L}`;return`${l}:${T}`},x=()=>{$.textContent=h(t.duration)},A=()=>{i.max=Math.floor(t.duration)},m=()=>{if(t.buffered.length>0){const e=Math.floor(t.buffered.end(t.buffered.length-1));o.style.setProperty(\"--buffered-width\",`${e/i.max*100}%`)}};t.readyState>0?(x(),A(),m(),t.autoplay&&(n=requestAnimationFrame(v),s.classList.add(\"kg-video-hide\"),r.classList.remove(\"kg-video-hide\")),t.muted&&(u.classList.add(\"kg-video-hide\"),c.classList.remove(\"kg-video-hide\"))):t.addEventListener(\"loadedmetadata\",()=>{x(),A(),m(),t.autoplay&&(n=requestAnimationFrame(v),s.classList.add(\"kg-video-hide\"),r.classList.remove(\"kg-video-hide\")),t.muted&&(u.classList.add(\"kg-video-hide\"),c.classList.remove(\"kg-video-hide\"))}),a.onmouseover=()=>{t.loop||d.classList.remove(\"kg-video-hide-animated\")},a.onmouseleave=()=>{t.currentTime>0&&!t.paused&&!t.ended&&t.readyState>2&&d.classList.add(\"kg-video-hide-animated\")},a.addEventListener(\"click\",()=>{t.loop||(t.currentTime>0&&!t.paused&&!t.ended&&t.readyState>2?w():f())}),t.onplay=()=>{g.classList.add(\"kg-video-hide-animated\"),y.classList.add(\"kg-video-hide-animated\"),s.classList.add(\"kg-video-hide\"),r.classList.remove(\"kg-video-hide\")};const f=()=>{g.classList.add(\"kg-video-hide-animated\"),y.classList.add(\"kg-video-hide-animated\"),s.classList.add(\"kg-video-hide\"),r.classList.remove(\"kg-video-hide\"),t.play(),n=requestAnimationFrame(v)},w=()=>{r.classList.add(\"kg-video-hide\"),s.classList.remove(\"kg-video-hide\"),t.pause(),cancelAnimationFrame(n)};g.addEventListener(\"click\",e=>{e.stopPropagation(),f()}),s.addEventListener(\"click\",e=>{e.stopPropagation(),f()}),r.addEventListener(\"click\",e=>{e.stopPropagation(),w()}),c.addEventListener(\"click\",e=>{e.stopPropagation(),c.classList.add(\"kg-video-hide\"),u.classList.remove(\"kg-video-hide\"),t.muted=!1}),u.addEventListener(\"click\",e=>{e.stopPropagation(),u.classList.add(\"kg-video-hide\"),c.classList.remove(\"kg-video-hide\"),t.muted=!0}),P.addEventListener(\"click\",e=>{e.stopPropagation();let l=M[(p+1)%5];p=p+1,t.playbackRate=l.rate,P.textContent=l.label}),t.addEventListener(\"progress\",m),i.addEventListener(\"input\",e=>{e.stopPropagation(),b(e.target),q.textContent=h(i.value),t.paused||cancelAnimationFrame(n)}),i.addEventListener(\"change\",e=>{e.stopPropagation(),t.currentTime=i.value,t.paused||requestAnimationFrame(v)}),S.addEventListener(\"click\",e=>{e.stopPropagation()}),i.addEventListener(\"click\",e=>{e.stopPropagation()}),S.addEventListener(\"input\",e=>{e.stopPropagation();const l=e.target.value;b(e.target),t.volume=l/100})},R=function(a){const o=a.querySelector(\".kg-video-container\"),d=o.querySelector(\"video\");if(o&&d.width&&d.height){const s=(d.height/d.width*100).toFixed(3);o.style.paddingBottom=`${s}%`}},k=document.querySelectorAll(\".kg-video-card\");for(let a=0;a<k.length;a++)R(k[a]),F(k[a])})();\n"}}