ghost 6.53.0 → 6.54.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 (596) hide show
  1. package/components/ghost-storage-base-3.0.0.tgz +0 -0
  2. package/components/tryghost-adapter-base-cache-0.2.0.tgz +0 -0
  3. package/components/tryghost-adapter-base-scheduling-0.1.1.tgz +0 -0
  4. package/components/tryghost-adapter-base-sso-0.1.1.tgz +0 -0
  5. package/components/tryghost-admin-api-schema-0.0.0.tgz +0 -0
  6. package/components/tryghost-custom-field-types-0.0.0.tgz +0 -0
  7. package/components/tryghost-i18n-0.0.0.tgz +0 -0
  8. package/components/tryghost-kg-converters-1.2.3.tgz +0 -0
  9. package/components/tryghost-kg-default-nodes-2.1.3.tgz +0 -0
  10. package/components/tryghost-kg-lexical-html-renderer-1.4.3.tgz +0 -0
  11. package/core/boot.js +9 -6
  12. package/core/built/admin/assets/Combination-CJG7Flp-.js +41 -0
  13. package/core/built/admin/assets/Growth-CSaHoSVD.js +3 -0
  14. package/core/built/admin/assets/Newsletters-C5cs6FGo.js +1 -0
  15. package/core/built/admin/assets/Overview-j4NaeUNm.js +1 -0
  16. package/core/built/admin/assets/{PolarAngleAxis-pciQ0MOy.js → PolarAngleAxis-BGjf7sBu.js} +1 -1
  17. package/core/built/admin/assets/{RadialBarChart-DWmw2PcX.js → RadialBarChart-zeFf9mBz.js} +1 -1
  18. package/core/built/admin/assets/Web-_fD935OX.js +2 -0
  19. package/core/built/admin/assets/account-migration-DLvVA5yq.js +1 -0
  20. package/core/built/admin/assets/activitypub/{account-migration-BPZG37DJ.js → account-migration-DHbZcxGM.js} +13 -13
  21. package/core/built/admin/assets/activitypub/activitypub.js +7 -7
  22. package/core/built/admin/assets/activitypub/{avatar-ZYco0ITb.js → avatar-B3DEDB1l.js} +10 -10
  23. package/core/built/admin/assets/activitypub/{avatar-flipboard-D541lc4F.js → avatar-flipboard-Cqrg0XMx.js} +3 -3
  24. package/core/built/admin/assets/activitypub/{bluesky-sharing-NOHUtHjl.js → bluesky-sharing-zfxUey_L.js} +38 -37
  25. package/core/built/admin/assets/activitypub/{chunk-KS7C4IRE-B-GOFDPZ.js → chunk-KS7C4IRE-D4HEcEwi.js} +716 -710
  26. package/core/built/admin/assets/activitypub/{content-formatters-bwrp4iEO.js → content-formatters-BpQARh28.js} +229 -181
  27. package/core/built/admin/assets/activitypub/{copy-C7m7ovHw.js → copy-D9UWIAan.js} +2 -2
  28. package/core/built/admin/assets/activitypub/{dist-B5ira32t.js → dist-Ba_QxHHl.js} +5 -5
  29. package/core/built/admin/assets/activitypub/{domain-iqE4YXwD.js → domain-CmwSZLHK.js} +33 -33
  30. package/core/built/admin/assets/activitypub/{edit-profile-B8MFYh28.js → edit-profile-CXdwNmVG.js} +46 -45
  31. package/core/built/admin/assets/activitypub/{explore-BbdKodp3.js → explore-DfbjzGM1.js} +20 -20
  32. package/core/built/admin/assets/activitypub/{feed-Cl3A5owG.js → feed-DSEBJOqf.js} +15 -15
  33. package/core/built/admin/assets/activitypub/{field-DL6WyR-c.js → field-CY7XVcx6.js} +13 -13
  34. package/core/built/admin/assets/activitypub/{hash-6G3DzwL9.js → hash-BC9Q0N4c.js} +2 -2
  35. package/core/built/admin/assets/activitypub/{inbox-YmhuBice.js → inbox-DQ4ZnC1m.js} +2 -2
  36. package/core/built/admin/assets/activitypub/inbox-DtQ0kytT.js +1221 -0
  37. package/core/built/admin/assets/activitypub/{label-DGbLjDvE.js → label-Dw96GQ7u.js} +6 -6
  38. package/core/built/admin/assets/activitypub/layout-IdVq3lRy.js +1 -0
  39. package/core/built/admin/assets/activitypub/{moderation-qnBtk1zS.js → moderation-Dg_-I-8C.js} +32 -31
  40. package/core/built/admin/assets/activitypub/{note-C7ZRoSJv.js → note-Cy1-uKMY.js} +21 -21
  41. package/core/built/admin/assets/activitypub/{notifications-DiEA4b1o.js → notifications-B_fvoLIM.js} +17 -17
  42. package/core/built/admin/assets/activitypub/{onboarding-_JVgEwgV.js → onboarding-BFDkzeR2.js} +2 -2
  43. package/core/built/admin/assets/activitypub/{onboarding-DG4zu3qM.js → onboarding-D6rcBdPe.js} +5 -5
  44. package/core/built/admin/assets/activitypub/{preferences-B3FtocnP.js → preferences-ByJseZp6.js} +1607 -1606
  45. package/core/built/admin/assets/activitypub/{profile-D8ZJfYXB.js → profile-BFtbnIjz.js} +264 -263
  46. package/core/built/admin/assets/activitypub/{reply-C1vggenw.js → reply-CpdMeAO5.js} +2 -2
  47. package/core/built/admin/assets/activitypub/{routes-BOii-V9n.js → routes-Dh3xXfce.js} +1311 -1295
  48. package/core/built/admin/assets/activitypub/{separator-1gNokN5S.js → separator-BI1FLsYM.js} +4 -4
  49. package/core/built/admin/assets/activitypub/{settings--9Sb0nbl.js → settings-DTgqJPxM.js} +14 -14
  50. package/core/built/admin/assets/activitypub/{site-fkMmqv0V.js → site-CdL9ZLqm.js} +10 -10
  51. package/core/built/admin/assets/activitypub/{step-1-QhivSMw2.js → step-1-DIDg4aHb.js} +15 -15
  52. package/core/built/admin/assets/activitypub/{step-2-pMk9YwqD.js → step-2-BfGe8BYt.js} +7 -7
  53. package/core/built/admin/assets/activitypub/{step-3-DvmVC1fo.js → step-3-mE9spAqw.js} +12 -12
  54. package/core/built/admin/assets/activitypub/{tabs-Dc0FEEYD.js → tabs-ogqwoBlb.js} +241 -237
  55. package/core/built/admin/assets/activitypub/{topic-filter-CuDyM5bD.js → topic-filter-DLHBZT93.js} +4 -4
  56. package/core/built/admin/assets/activitypub/use-activity-pub-queries-VzbN99u_.js +1957 -0
  57. package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-Drx1kdAK.js → use-navigate-with-base-path-CAwXTmqH.js} +165 -175
  58. package/core/built/admin/assets/activitypub/{use-reply-chain-data-BHkCHcW5.js → use-reply-chain-data-CxonteFD.js} +8 -8
  59. package/core/built/admin/assets/activitypub/users-BLeiOTHc.js +1464 -0
  60. package/core/built/admin/assets/activitypub/{x-BHCEe-c2.js → x-C8tAnXly.js} +2 -2
  61. package/core/built/admin/assets/{audience-adiFehTD.js → audience-BKRdsFmy.js} +1 -1
  62. package/core/built/admin/assets/{automated-emails-UWM02CMr.js → automated-emails-Cn87L5Md.js} +1 -1
  63. package/core/built/admin/assets/automations-B7-y3dXt.js +1 -0
  64. package/core/built/admin/assets/automations-BP_aHamJ.js +1 -0
  65. package/core/built/admin/assets/{avatar-flipboard-Lz3F9fNT.js → avatar-flipboard-C6Kj3Awu.js} +1 -1
  66. package/core/built/admin/assets/bluesky-sharing-Bh36XPh4.js +1 -0
  67. package/core/built/admin/assets/box-BWbhXh21.js +1 -0
  68. package/core/built/admin/assets/breadcrumb-D34YWnaw.js +1 -0
  69. package/core/built/admin/assets/card-DGoDJzrn.js +1 -0
  70. package/core/built/admin/assets/{chart-ChpW-NzQ.js → chart-BuRT2Y6p.js} +14 -14
  71. package/core/built/admin/assets/chart-helpers-DbklaJw9.js +1 -0
  72. package/core/built/admin/assets/checkbox-DA4-1UiI.js +1 -0
  73. package/core/built/admin/assets/chunk.524.45e0875f41b71e46e849.js +25 -0
  74. package/core/built/admin/assets/chunk.582.51defd4b009f0de8d4d5.js +27 -0
  75. package/core/built/admin/assets/{chunk.831.0703a12e49f51cec3f3a.js → chunk.589.096f4d0bb775e5229aa9.js} +78 -85
  76. package/core/built/admin/assets/{chunk.432.c2caa0b20f03e71d1a35.js → chunk.962.b73442b07be930bb5d85.js} +2216 -3188
  77. package/core/built/admin/assets/{chunk.432.c2caa0b20f03e71d1a35.js.LICENSE.txt → chunk.962.b73442b07be930bb5d85.js.LICENSE.txt} +0 -63
  78. package/core/built/admin/assets/code-editor-view-BKBrkffZ.js +1 -0
  79. package/core/built/admin/assets/comments-CzVNIT8b.js +1 -0
  80. package/core/built/admin/assets/container-BYz2Ed39.js +1 -0
  81. package/core/built/admin/assets/data-list-16rkJYYi.js +1 -0
  82. package/core/built/admin/assets/date-range-select-B5vSsrpx.js +1 -0
  83. package/core/built/admin/assets/disabled-sources-indicator-NkOIoMue.js +1 -0
  84. package/core/built/admin/assets/{dist-CsekE4FL.js → dist-CQJY6SVY.js} +1 -1
  85. package/core/built/admin/assets/dist-DGzPJ_bO.js +4 -0
  86. package/core/built/admin/assets/{dist-BbGrW05X.js → dist-DyViJwIy.js} +1 -1
  87. package/core/built/admin/assets/dist-Ndy-PuGN.js +1 -0
  88. package/core/built/admin/assets/dist-P_ohUlTi.js +1 -0
  89. package/core/built/admin/assets/domain-B7_n5nfx.js +1 -0
  90. package/core/built/admin/assets/dropzone-DcuJEEUf.js +5 -0
  91. package/core/built/admin/assets/edit-profile-rvDGrS8J.js +1 -0
  92. package/core/built/admin/assets/editor-BCiIyFjm.js +8 -0
  93. package/core/built/admin/assets/empty-indicator-oX1u1Pkn.js +1 -0
  94. package/core/built/admin/assets/esm-CFX93H5M.js +2 -0
  95. package/core/built/admin/assets/explore-BZAZOg5X.js +1 -0
  96. package/core/built/admin/assets/feed-CFV8xDw9.js +1 -0
  97. package/core/built/admin/assets/field-BW-M2Zwp.js +1 -0
  98. package/core/built/admin/assets/{filter-sources-v39ihhhV.js → filter-sources-Fx8wiYYw.js} +1 -1
  99. package/core/built/admin/assets/filters-CGX_pf2N.js +1 -0
  100. package/core/built/admin/assets/filters-DtcXMZDU.js +1 -0
  101. package/core/built/admin/assets/framework-provider-CmtnPXIT.js +4 -0
  102. package/core/built/admin/assets/{ghost-b57f077997b739a8ae9a70772dc016cb.js → ghost-b1dce91ad3232cc259ee5fbbf9526243.js} +294 -290
  103. package/core/built/admin/assets/ghost-dark-c8d0ab7f515b2010c173e23e9b32ea8a.css +1 -0
  104. package/core/built/admin/assets/gift-link-modal-Bk8qpnMw.js +1 -0
  105. package/core/built/admin/assets/{gift-links-CY3GwiVi.js → gift-links-nBxJjZiQ.js} +1 -1
  106. package/core/built/admin/assets/growth-Ck2s3JjR.js +1 -0
  107. package/core/built/admin/assets/hooks-BApwwBE0.js +2 -0
  108. package/core/built/admin/assets/{inbox-TEISAmth.js → inbox-BRp1_aaC.js} +35 -35
  109. package/core/built/admin/assets/index-BBf502Wg.js +69 -0
  110. package/core/built/admin/assets/index-BCCZKxP2.css +1 -0
  111. package/core/built/admin/assets/inline-EMAm3okk.js +1 -0
  112. package/core/built/admin/assets/input-group-DjuYnNCd.js +1 -0
  113. package/core/built/admin/assets/{react-dom-C6aoWSfl.js → jsx-runtime-DX3WBWVO.js} +1 -1
  114. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +5 -2
  115. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +2 -2
  116. package/core/built/admin/assets/{koenig-lexical-Di7b48ED.js → koenig-lexical-CM7UFNdL.js} +2 -2
  117. package/core/built/admin/assets/kpi-card-BrGH6FsT.js +1 -0
  118. package/core/built/admin/assets/kpi-card-CIGyijjx.js +1 -0
  119. package/core/built/admin/assets/kpi-helpers-_HRRsklE.js +1 -0
  120. package/core/built/admin/assets/kpi-tabs-BSvh9eoq.js +1 -0
  121. package/core/built/admin/assets/label-BOR9XdKl.js +1 -0
  122. package/core/built/admin/assets/label-picker-BdNAWuUX.js +1 -0
  123. package/core/built/admin/assets/{labels-GbxlXWtf.js → labels-Cyayfd-e.js} +1 -1
  124. package/core/built/admin/assets/layout-Bw4GnxXp.js +1 -0
  125. package/core/built/admin/assets/limit-service-9fwD33lU.js +20 -0
  126. package/core/built/admin/assets/link-helpers-tOlxmuH5.js +1 -0
  127. package/core/built/admin/assets/list-page-B6ANtzkd.js +1 -0
  128. package/core/built/admin/assets/mailchimp-Ds_NQ04w.svg +9 -0
  129. package/core/built/admin/assets/member-custom-fields-DvFyamLu.js +1 -0
  130. package/core/built/admin/assets/member-detail-Cg2vTqvJ.js +1 -0
  131. package/core/built/admin/assets/members-DsPxYAVm.js +10 -0
  132. package/core/built/admin/assets/modals-Bf_fyvHZ.js +31 -0
  133. package/core/built/admin/assets/moderation-Dlp7M5sa.js +1 -0
  134. package/core/built/admin/assets/multi-select-combobox-CH1o8XXQ.js +1 -0
  135. package/core/built/admin/assets/newsletter-CQ5CAYUI.js +1 -0
  136. package/core/built/admin/assets/{newsletters-DZm3yLj8.js → newsletters-D1jbtV-h.js} +1 -1
  137. package/core/built/admin/assets/note-BrAZ7Z0o.js +1 -0
  138. package/core/built/admin/assets/notifications-BnbHLOPC.js +1 -0
  139. package/core/built/admin/assets/nql-lang-B7faUf8D.js +19 -0
  140. package/core/built/admin/assets/{offers-D11QtPXX.js → offers-CrY6nSRR.js} +1 -1
  141. package/core/built/admin/assets/onboarding-route-eU146kuA.js +1 -0
  142. package/core/built/admin/assets/overview-BpbaK-xu.js +1 -0
  143. package/core/built/admin/assets/page-header-C0jVxtS8.js +1 -0
  144. package/core/built/admin/assets/{pages-BnObVRrf.js → pages-BbNWFcGj.js} +1 -1
  145. package/core/built/admin/assets/pintura-CXOmq-5H.svg +15 -0
  146. package/core/built/admin/assets/post-analytics-Iw7dk1mT.js +1 -0
  147. package/core/built/admin/assets/post-analytics-header-D9pJ4iNm.js +1 -0
  148. package/core/built/admin/assets/{post-analytics-provider-DSfBCtnj.js → post-analytics-provider-BDqcfBor.js} +1 -1
  149. package/core/built/admin/assets/post-share-modal-DBfKl2GZ.js +1 -0
  150. package/core/built/admin/assets/{posts-CwH8VJvB.js → posts-EWpZIjkr.js} +1 -1
  151. package/core/built/admin/assets/preferences-D4EANGoc.js +5 -0
  152. package/core/built/admin/assets/profile-dJ44Bn_W.js +1 -0
  153. package/core/built/admin/assets/{referrers-nxR52jPI.js → referrers-BCfFYSHc.js} +1 -1
  154. package/core/built/admin/assets/router-provider-C1R4AZ2o.js +1 -0
  155. package/core/built/admin/assets/select--2uVN9_-.js +1 -0
  156. package/core/built/admin/assets/settings-Bz3RZRmE.js +1 -0
  157. package/core/built/admin/assets/settings-SD9bxIpt.js +4 -0
  158. package/core/built/admin/assets/share-modal-CkdTTMJd.js +1 -0
  159. package/core/built/admin/assets/social-urls-BvFZwYcE.js +8 -0
  160. package/core/built/admin/assets/sort-button-DZp9Y2r1.js +1 -0
  161. package/core/built/admin/assets/source-icon-CHr9qJ2Y.js +1 -0
  162. package/core/built/admin/assets/stack-xiN0eQ6Z.js +1 -0
  163. package/core/built/admin/assets/stats-DGoXZxWE.js +1 -0
  164. package/core/built/admin/assets/stats-view-D2-1L0ms.js +1 -0
  165. package/core/built/admin/assets/step-1-RdahbwyG.js +1 -0
  166. package/core/built/admin/assets/step-2-D83PeRwd.js +1 -0
  167. package/core/built/admin/assets/step-3-p_Op4wv4.js +2 -0
  168. package/core/built/admin/assets/switch-qp518gFQ.js +1 -0
  169. package/core/built/admin/assets/table-B8LgTQJZ.js +1 -0
  170. package/core/built/admin/assets/tabs-D3ZOYkM7.js +1 -0
  171. package/core/built/admin/assets/tags-B4l891z2.js +1 -0
  172. package/core/built/admin/assets/text-DwtjwGkh.js +1 -0
  173. package/core/built/admin/assets/textarea-CTlb3Uu6.js +1 -0
  174. package/core/built/admin/assets/{tiers-EghDzCKc.js → tiers-BgYLWRJv.js} +1 -1
  175. package/core/built/admin/assets/toggle-group-DNXDkAwf.js +1 -0
  176. package/core/built/admin/assets/topic-filter-DZGjEcz3.js +1 -0
  177. package/core/built/admin/assets/{use-analytics-data-0l_OHtnR.js → use-analytics-data-CaT8RirX.js} +1 -1
  178. package/core/built/admin/assets/use-filter-params-DeQ8sX4N.js +1 -0
  179. package/core/built/admin/assets/use-growth-stats-9Db2CuJe.js +1 -0
  180. package/core/built/admin/assets/{use-post-referrers-DwI31Ril.js → use-post-referrers-BV54YcQS.js} +1 -1
  181. package/core/built/admin/assets/use-reply-chain-data-DuYZGDan.js +1 -0
  182. package/core/built/admin/assets/use-simple-pagination-8fTua9Nt.js +1 -0
  183. package/core/built/admin/assets/{use-tinybird-query-DvZBBMG7.js → use-tinybird-query-Dz156HvZ.js} +1 -1
  184. package/core/built/admin/assets/{use-tinybird-token-CQtebkvU.js → use-tinybird-token-C9RUdL_n.js} +1 -1
  185. package/core/built/admin/assets/{users-Pc8IRjk9.js → users-CcSCQFcQ.js} +1 -1
  186. package/core/built/admin/assets/virtual-list-BCvP0YF-.js +1 -0
  187. package/core/built/admin/assets/web-DTZnnUGr.js +1 -0
  188. package/core/built/admin/index.html +18 -22
  189. package/core/frontend/apps/private-blogging/index.js +1 -1
  190. package/core/frontend/apps/private-blogging/lib/middleware.js +1 -1
  191. package/core/frontend/helpers/split.js +2 -1
  192. package/core/frontend/meta/asset-url.js +1 -1
  193. package/core/frontend/meta/author-image.js +1 -1
  194. package/core/frontend/meta/blog-logo.js +1 -1
  195. package/core/frontend/meta/canonical-url.js +1 -1
  196. package/core/frontend/meta/cover-image.js +1 -1
  197. package/core/frontend/meta/get-meta.js +1 -1
  198. package/core/frontend/meta/og-image.js +1 -1
  199. package/core/frontend/meta/paginated-url.js +1 -1
  200. package/core/frontend/meta/twitter-image.js +1 -1
  201. package/core/frontend/meta/url.js +1 -1
  202. package/core/frontend/services/assets-minification/admin-auth-assets.js +1 -1
  203. package/core/frontend/services/llms/handler.js +1 -1
  204. package/core/frontend/services/proxy.js +31 -2
  205. package/core/frontend/services/routing/collection-router.js +1 -1
  206. package/core/frontend/services/routing/controllers/email-post.js +1 -1
  207. package/core/frontend/services/routing/controllers/entry/markdown.js +1 -1
  208. package/core/frontend/services/routing/controllers/entry/markdown.ts +1 -1
  209. package/core/frontend/services/routing/controllers/entry.js +1 -1
  210. package/core/frontend/services/routing/controllers/entry.ts +1 -1
  211. package/core/frontend/services/routing/controllers/previews.js +6 -7
  212. package/core/frontend/services/routing/controllers/unsubscribe.js +7 -3
  213. package/core/frontend/services/routing/email-router.js +1 -1
  214. package/core/frontend/services/routing/events.js +12 -0
  215. package/core/frontend/services/routing/middleware/page-param.js +1 -1
  216. package/core/frontend/services/routing/parent-router.js +1 -1
  217. package/core/frontend/services/routing/preview-router.js +1 -1
  218. package/core/frontend/services/routing/router-manager.js +4 -8
  219. package/core/frontend/services/routing/rss-router.js +1 -1
  220. package/core/frontend/services/routing/static-pages-router.js +1 -1
  221. package/core/frontend/services/routing/static-routes-router.js +1 -1
  222. package/core/frontend/services/routing/taxonomy-router.js +1 -1
  223. package/core/frontend/services/rss/generate-feed.js +1 -1
  224. package/core/frontend/services/sitemap/base-site-map-generator.js +23 -4
  225. package/core/frontend/services/sitemap/site-map-index-generator.js +1 -1
  226. package/core/frontend/services/sitemap/site-map-manager.js +14 -8
  227. package/core/frontend/services/sitemap/utils.js +1 -1
  228. package/core/frontend/services/theme-engine/middleware/update-global-template-options.js +1 -1
  229. package/core/frontend/services/theme-engine/middleware/update-local-template-options.js +1 -1
  230. package/core/frontend/utils/images.js +1 -1
  231. package/core/frontend/web/middleware/admin-toolbar.js +1 -1
  232. package/core/frontend/web/middleware/handle-image-sizes.js +2 -2
  233. package/core/frontend/web/middleware/redirect-ghost-to-admin.js +1 -1
  234. package/core/frontend/web/routers/serve-favicon.js +1 -1
  235. package/core/frontend/web/routers/serve-public-file.js +1 -1
  236. package/core/frontend/web/site.js +5 -5
  237. package/core/server/adapters/cache/AdapterCacheMemoryTTL.js +2 -2
  238. package/core/server/adapters/cache/MemoryCache.js +2 -2
  239. package/core/server/adapters/cache/Redis.js +1 -1
  240. package/core/server/adapters/cache/index.js +1 -1
  241. package/core/server/adapters/lib/redis/AdapterCacheRedis.js +2 -2
  242. package/core/server/adapters/route-settings/FileStore.js +2 -8
  243. package/core/server/adapters/route-settings/FileStore.ts +1 -6
  244. package/core/server/adapters/route-settings/S3RouteSettingsStore.js +206 -0
  245. package/core/server/adapters/route-settings/S3RouteSettingsStore.ts +199 -0
  246. package/core/server/adapters/route-settings/utils.js +13 -0
  247. package/core/server/adapters/route-settings/utils.ts +7 -0
  248. package/core/server/adapters/scheduling/deps.d.ts +0 -2
  249. package/core/server/adapters/scheduling/error-capture.js +76 -0
  250. package/core/server/adapters/scheduling/error-capture.ts +91 -0
  251. package/core/server/adapters/scheduling/utils.js +18 -34
  252. package/core/server/adapters/scheduling/utils.ts +36 -0
  253. package/core/server/adapters/storage/LocalFilesStorage.js +1 -1
  254. package/core/server/adapters/storage/LocalImagesStorage.js +1 -1
  255. package/core/server/adapters/storage/LocalMediaStorage.js +1 -1
  256. package/core/server/adapters/storage/LocalStorageBase.js +3 -3
  257. package/core/server/adapters/storage/S3Storage.js +2 -2
  258. package/core/server/adapters/storage/S3Storage.ts +1 -1
  259. package/core/server/adapters/storage/utils.js +1 -1
  260. package/core/server/api/endpoints/authentication.js +1 -1
  261. package/core/server/api/endpoints/featurebase.js +1 -1
  262. package/core/server/api/endpoints/files.js +2 -2
  263. package/core/server/api/endpoints/images.js +2 -2
  264. package/core/server/api/endpoints/libraries.d.ts +0 -1
  265. package/core/server/api/endpoints/media.js +8 -5
  266. package/core/server/api/endpoints/member-custom-fields.js +4 -1
  267. package/core/server/api/endpoints/member-custom-fields.ts +4 -1
  268. package/core/server/api/endpoints/posts.js +17 -1
  269. package/core/server/api/endpoints/search-index-public.js +4 -3
  270. package/core/server/api/endpoints/search-index.js +5 -4
  271. package/core/server/api/endpoints/settings-public.js +1 -1
  272. package/core/server/api/endpoints/settings.js +3 -1
  273. package/core/server/api/endpoints/utils/serializers/input/utils/url.js +9 -1
  274. package/core/server/api/endpoints/utils/serializers/output/default.js +7 -0
  275. package/core/server/api/endpoints/utils/serializers/output/files.js +1 -1
  276. package/core/server/api/endpoints/utils/serializers/output/media.js +1 -1
  277. package/core/server/api/endpoints/utils/serializers/output/member-custom-fields.js +7 -4
  278. package/core/server/api/endpoints/utils/serializers/output/member-custom-fields.ts +8 -4
  279. package/core/server/api/endpoints/utils/serializers/output/members.js +16 -26
  280. package/core/server/api/endpoints/utils/serializers/output/pages.js +7 -0
  281. package/core/server/api/endpoints/utils/serializers/output/posts.js +13 -0
  282. package/core/server/api/endpoints/utils/serializers/output/utils/url.js +1 -1
  283. package/core/server/api/endpoints/utils/validators/input/members.js +2 -52
  284. package/core/server/data/db/backup.js +1 -1
  285. package/core/server/data/importer/handlers/image.js +3 -3
  286. package/core/server/data/importer/import-manager.js +6 -4
  287. package/core/server/data/importer/importers/content-file-importer.js +2 -2
  288. package/core/server/data/migrations/utils/schema.js +4 -2
  289. package/core/server/data/migrations/versions/6.54/2026-07-19-16-59-00-add-content-import-permission.js +10 -0
  290. package/core/server/data/migrations/versions/6.54/2026-07-20-13-59-21-drop-email-tracked-sent-count-from-automation-action-revisions.js +7 -0
  291. package/core/server/data/migrations/versions/6.54/2026-07-21-01-58-20-add-automation-run-steps-poller-index.js +3 -0
  292. package/core/server/data/migrations/versions/6.54/2026-07-21-21-08-15-add-automated-email-recipients-mailgun-message-id-index.js +3 -0
  293. package/core/server/data/migrations/versions/6.54/2026-07-22-10-41-08-add-click-tracking-to-automated-email-recipients.js +13 -0
  294. package/core/server/data/migrations/versions/6.54/2026-07-22-15-10-30-add-email-clicked-count-to-automation-action-revisions.js +7 -0
  295. package/core/server/data/migrations/versions/6.54/2026-07-23-10-24-18-add-automation-action-revision-to-redirects.js +9 -0
  296. package/core/server/data/schema/commands.js +37 -3
  297. package/core/server/data/schema/fixtures/fixtures.json +7 -0
  298. package/core/server/data/schema/lib/default-index-name.js +20 -0
  299. package/core/server/data/schema/schema.js +40 -17
  300. package/core/server/data/seeders/data-generator.js +4 -2
  301. package/core/server/lib/image/image-size.js +5 -7
  302. package/core/server/lib/image/image-utils.js +2 -2
  303. package/core/server/lib/image/index.js +4 -4
  304. package/core/server/lib/lexical.js +3 -3
  305. package/core/server/lib/mobiledoc.js +2 -2
  306. package/core/server/lib/validate-password.js +1 -1
  307. package/core/server/models/action.js +9 -0
  308. package/core/server/models/base/plugins/generate-slug.js +1 -1
  309. package/core/server/models/collection.js +1 -1
  310. package/core/server/models/custom-theme-setting.js +1 -1
  311. package/core/server/models/member.js +73 -0
  312. package/core/server/models/newsletter.js +1 -1
  313. package/core/server/models/post.js +19 -5
  314. package/core/server/models/posts-meta.js +1 -1
  315. package/core/server/models/redirect.js +1 -1
  316. package/core/server/models/settings.js +1 -1
  317. package/core/server/models/snippet.js +1 -1
  318. package/core/server/models/tag.js +1 -1
  319. package/core/server/models/user.js +1 -1
  320. package/core/server/models/welcome-email-automated-email.js +1 -1
  321. package/core/server/services/activitypub/activity-pub-service-wrapper.js +1 -1
  322. package/core/server/services/adapter-manager/adapter-manager.js +5 -1
  323. package/core/server/services/adapter-manager/adapter-manager.ts +7 -2
  324. package/core/server/services/adapter-manager/index.js +18 -15
  325. package/core/server/services/adapter-manager/index.ts +23 -17
  326. package/core/server/services/adapter-manager/utils.js +124 -14
  327. package/core/server/services/adapter-manager/utils.ts +130 -14
  328. package/core/server/services/api-version-compatibility/mw-version-rewrites.js +1 -1
  329. package/core/server/services/audience-feedback/index.js +1 -1
  330. package/core/server/services/auth/passwordreset.js +1 -1
  331. package/core/server/services/auth/session/express-session.js +1 -1
  332. package/core/server/services/auth/session/index.js +2 -2
  333. package/core/server/services/auth/session/session-service.js +1 -1
  334. package/core/server/services/automations/automations-api.js +2 -19
  335. package/core/server/services/automations/automations-api.ts +2 -31
  336. package/core/server/services/automations/automations-repository.ts +15 -0
  337. package/core/server/services/automations/database-automations-repository.js +30 -2
  338. package/core/server/services/automations/database-automations-repository.ts +33 -2
  339. package/core/server/services/automations/poll.js +16 -12
  340. package/core/server/services/automations/poll.ts +17 -15
  341. package/core/server/services/automations/service.js +1 -1
  342. package/core/server/services/automations/service.ts +3 -13
  343. package/core/server/services/automations/welcome-email-automation-poll.js +2 -1
  344. package/core/server/services/comments/index.js +1 -1
  345. package/core/server/services/custom-redirects/index.js +2 -2
  346. package/core/server/services/email-analytics/email-analytics-service-wrapper.js +14 -13
  347. package/core/server/services/email-analytics/email-analytics-service.js +1 -1
  348. package/core/server/services/email-analytics/events/start-email-analytics-job-event.js +11 -15
  349. package/core/server/services/email-analytics/events/start-email-analytics-job-event.ts +15 -0
  350. package/core/server/services/email-analytics/index.js +2 -3
  351. package/core/server/services/email-analytics/index.ts +1 -2
  352. package/core/server/services/email-analytics/jobs/email-analytics-job-scheduler.js +1 -6
  353. package/core/server/services/email-analytics/jobs/email-analytics-job-scheduler.ts +0 -9
  354. package/core/server/services/email-analytics/jobs/fetch-latest/index.js +1 -1
  355. package/core/server/services/email-analytics/jobs/index.js +0 -2
  356. package/core/server/services/email-service/email-service-wrapper.js +1 -1
  357. package/core/server/services/email-service/email-service.js +20 -4
  358. package/core/server/services/explore-ping/explore-ping-service.js +24 -39
  359. package/core/server/services/explore-ping/explore-ping-service.ts +198 -0
  360. package/core/server/services/explore-ping/index.js +11 -11
  361. package/core/server/services/explore-ping/index.ts +42 -0
  362. package/core/server/services/gifts/gift-reminder-scheduler.js +1 -1
  363. package/core/server/services/gifts/gift-reminder-scheduler.ts +1 -1
  364. package/core/server/services/gifts/gift-service-wrapper.js +1 -1
  365. package/core/server/services/identity-tokens/identity-token-service-wrapper.js +1 -1
  366. package/core/server/services/indexnow-ping/constants.js +30 -0
  367. package/core/server/services/indexnow-ping/constants.ts +32 -0
  368. package/core/server/services/indexnow-ping/index.js +29 -253
  369. package/core/server/services/indexnow-ping/index.ts +37 -0
  370. package/core/server/services/indexnow-ping/indexnow-ping-service.js +229 -0
  371. package/core/server/services/indexnow-ping/indexnow-ping-service.ts +319 -0
  372. package/core/server/services/invites/index.js +1 -1
  373. package/core/server/services/lib/mailgun-client.js +3 -3
  374. package/core/server/services/link-redirection/index.js +2 -2
  375. package/core/server/services/link-redirection/link-redirect-repository.js +1 -1
  376. package/core/server/services/link-redirection/link-redirect.js +12 -13
  377. package/core/server/services/link-redirection/link-redirect.ts +22 -0
  378. package/core/server/services/link-redirection/link-redirects-service.js +1 -1
  379. package/core/server/services/link-tracking/full-post-link.js +2 -2
  380. package/core/server/services/link-tracking/index.js +1 -1
  381. package/core/server/services/mail/ghost-mailer.js +1 -1
  382. package/core/server/services/mail/index.js +1 -1
  383. package/core/server/services/media-inliner/external-media-inliner.js +2 -2
  384. package/core/server/services/media-inliner/service.js +4 -3
  385. package/core/server/services/member-attribution/index.js +1 -1
  386. package/core/server/services/member-welcome-emails/service.js +1 -1
  387. package/core/server/services/members/api.js +8 -2
  388. package/core/server/services/members/csv/index.js +10 -0
  389. package/core/server/services/members/csv/index.ts +3 -0
  390. package/core/server/services/members/csv/parse.js +94 -0
  391. package/core/server/services/members/csv/parse.ts +111 -0
  392. package/core/server/services/members/csv/types.js +2 -0
  393. package/core/server/services/members/csv/types.ts +39 -0
  394. package/core/server/services/members/csv/unparse.js +69 -0
  395. package/core/server/services/members/csv/unparse.ts +79 -0
  396. package/core/server/services/members/exporter/query.js +35 -8
  397. package/core/server/services/members/importer/config.js +35 -0
  398. package/core/server/services/members/importer/config.ts +39 -0
  399. package/core/server/services/members/importer/members-csv-importer.js +31 -13
  400. package/core/server/services/members/members-api/members-api.js +4 -2
  401. package/core/server/services/members/members-api/repositories/event-repository.js +13 -2
  402. package/core/server/services/members/members-api/services/member-bread-service.js +42 -19
  403. package/core/server/services/members/middleware.js +1 -1
  404. package/core/server/services/members/service.js +15 -2
  405. package/core/server/services/members/stripe-connect.js +1 -1
  406. package/core/server/services/members-custom-fields/actions.js +3 -0
  407. package/core/server/services/members-custom-fields/actions.ts +6 -2
  408. package/core/server/services/members-custom-fields/config.js +34 -0
  409. package/core/server/services/members-custom-fields/config.ts +38 -0
  410. package/core/server/services/members-custom-fields/definitions-service.js +156 -21
  411. package/core/server/services/members-custom-fields/definitions-service.ts +170 -25
  412. package/core/server/services/members-custom-fields/index.js +16 -3
  413. package/core/server/services/members-custom-fields/index.ts +17 -3
  414. package/core/server/services/members-custom-fields/values-service.js +56 -10
  415. package/core/server/services/members-custom-fields/values-service.ts +62 -10
  416. package/core/server/services/mentions/mention-sending-service.js +22 -2
  417. package/core/server/services/mentions/service.js +21 -5
  418. package/core/server/services/newsletters/index.js +1 -1
  419. package/core/server/services/oembed/oembed-service.js +122 -33
  420. package/core/server/services/oembed/service.js +4 -2
  421. package/core/server/services/offers/service.js +1 -1
  422. package/core/server/services/post-scheduling/index.js +4 -3
  423. package/core/server/services/post-scheduling/index.ts +4 -3
  424. package/core/server/services/post-scheduling/post-scheduling.js +1 -1
  425. package/core/server/services/post-scheduling/post-scheduling.ts +1 -1
  426. package/core/server/services/posts/post-email-handler.js +13 -6
  427. package/core/server/services/posts/post-scheduling.js +1 -1
  428. package/core/server/services/posts/posts-service-instance.js +1 -1
  429. package/core/server/services/posts/posts-service.js +2 -2
  430. package/core/server/services/posts-public/service.js +1 -1
  431. package/core/server/services/public-config/site.js +1 -1
  432. package/core/server/services/recommendations/recommendation-service-wrapper.js +1 -1
  433. package/core/server/services/recommendations/service/libraries.d.ts +0 -2
  434. package/core/server/services/route-settings/dynamic-routing-service.js +2 -3
  435. package/core/server/services/route-settings/index.js +1 -1
  436. package/core/server/services/route-settings/route-settings-parser.js +134 -124
  437. package/core/server/services/route-settings/route-settings-parser.ts +160 -125
  438. package/core/server/services/route-settings/validation-errors.js +178 -0
  439. package/core/server/services/route-settings/validation-errors.ts +196 -0
  440. package/core/server/services/settings/settings-service.js +2 -2
  441. package/core/server/services/settings-helpers/index.js +1 -1
  442. package/core/server/services/slack-notifications/service.js +1 -1
  443. package/core/server/services/slack-ping/constants.js +16 -0
  444. package/core/server/services/slack-ping/constants.ts +15 -0
  445. package/core/server/services/slack-ping/index.js +26 -204
  446. package/core/server/services/slack-ping/index.ts +35 -0
  447. package/core/server/services/slack-ping/slack-ping-service.js +214 -0
  448. package/core/server/services/slack-ping/slack-ping-service.ts +296 -0
  449. package/core/server/services/staff/index.js +1 -1
  450. package/core/server/services/stats/posts-stats-service.js +1 -1
  451. package/core/server/services/stats/service.js +1 -1
  452. package/core/server/services/stripe/service.js +1 -1
  453. package/core/server/services/tags-public/service.js +1 -1
  454. package/core/server/services/themes/validate.js +1 -1
  455. package/core/server/services/update-check/index.js +1 -1
  456. package/core/server/services/url/lazy-url-service.js +66 -6
  457. package/core/server/services/url/lazy-url-service.ts +73 -6
  458. package/core/server/services/url/url-generator.js +1 -1
  459. package/core/server/services/url/url-service-facade.js +68 -3
  460. package/core/server/services/url/url-service-facade.ts +79 -4
  461. package/core/server/services/url/url-service.js +1 -1
  462. package/core/server/services/url/urls.js +1 -1
  463. package/core/server/services/webhooks/index.js +19 -2
  464. package/core/server/services/webhooks/listen.js +6 -11
  465. package/core/server/services/webhooks/payload.js +1 -3
  466. package/core/server/services/webhooks/serialize.js +16 -1
  467. package/core/server/web/admin/app.js +1 -1
  468. package/core/server/web/admin/middleware/redirect-admin-urls.js +1 -1
  469. package/core/server/web/api/endpoints/admin/routes.js +1 -0
  470. package/core/server/web/api/middleware/cors.js +1 -1
  471. package/core/server/web/api/middleware/upload.js +4 -0
  472. package/core/server/web/gift-preview/controller.js +1 -1
  473. package/core/server/web/shared/middleware/redirect-amp-urls.js +1 -1
  474. package/core/server/web/shared/middleware/uncapitalise.js +2 -2
  475. package/core/server/web/shared/middleware/url-redirects.js +1 -1
  476. package/core/shared/config/defaults.json +8 -1
  477. package/core/shared/config/overrides.json +4 -0
  478. package/core/shared/url-utils.js +19 -15
  479. package/core/shared/url-utils.ts +20 -0
  480. package/ghost.js +0 -1
  481. package/package.json +26 -31
  482. package/pnpm-lock.yaml +681 -2789
  483. package/pnpm-workspace.yaml +31 -17
  484. package/components/tryghost-adapter-base-scheduling-0.0.0.tgz +0 -0
  485. package/components/tryghost-adapter-base-sso-0.0.0.tgz +0 -0
  486. package/core/built/admin/assets/Combination--5EZGaDs.js +0 -43
  487. package/core/built/admin/assets/Growth-C0NoKcHQ.js +0 -3
  488. package/core/built/admin/assets/Newsletters-Ed8kDjdy.js +0 -1
  489. package/core/built/admin/assets/Overview-CArPgRZt.js +0 -1
  490. package/core/built/admin/assets/Web-CjjYoVM3.js +0 -2
  491. package/core/built/admin/assets/account-migration-mfa5mNI9.js +0 -1
  492. package/core/built/admin/assets/activitypub/inbox-B3rjKMTv.js +0 -1221
  493. package/core/built/admin/assets/activitypub/layout-jcurg3rU.js +0 -1
  494. package/core/built/admin/assets/activitypub/use-activity-pub-queries-yqGRcnLn.js +0 -2569
  495. package/core/built/admin/assets/activitypub/users-CfyHIsTG.js +0 -1316
  496. package/core/built/admin/assets/automations-DkUnxNdv.js +0 -1
  497. package/core/built/admin/assets/automations-vjXofmV_.js +0 -1
  498. package/core/built/admin/assets/bluesky-sharing-T-pO3RcP.js +0 -1
  499. package/core/built/admin/assets/breadcrumb-CekPYTCn.js +0 -1
  500. package/core/built/admin/assets/button--i2uMDDn.js +0 -4
  501. package/core/built/admin/assets/card-CSWz_BXq.js +0 -1
  502. package/core/built/admin/assets/chart-helpers-C_4Ka_vT.js +0 -1
  503. package/core/built/admin/assets/chunk.524.8ce2c741473e2f0929dc.js +0 -25
  504. package/core/built/admin/assets/chunk.582.453459d6228d2955408b.js +0 -27
  505. package/core/built/admin/assets/code-editor-view-BfkwQto2.js +0 -1
  506. package/core/built/admin/assets/command-K75Jzs0G.js +0 -1
  507. package/core/built/admin/assets/comments-BEIi1DH-.js +0 -1
  508. package/core/built/admin/assets/container-BNXvlcjA.js +0 -1
  509. package/core/built/admin/assets/data-list-BmK5QMab.js +0 -1
  510. package/core/built/admin/assets/date-range-select-5sKzwbt7.js +0 -1
  511. package/core/built/admin/assets/disabled-sources-indicator-L_ssJTNr.js +0 -1
  512. package/core/built/admin/assets/dist-BBIJuyPg.js +0 -1
  513. package/core/built/admin/assets/dist-BHE0dp6o.js +0 -1
  514. package/core/built/admin/assets/dist-DJ6c4_De.js +0 -1
  515. package/core/built/admin/assets/dist-DW0QXQO3.js +0 -1
  516. package/core/built/admin/assets/dist-DxFLceO5.js +0 -1
  517. package/core/built/admin/assets/dist-QcACAOAD.js +0 -1
  518. package/core/built/admin/assets/dist-duxRDcQu.js +0 -177
  519. package/core/built/admin/assets/domain-CLaPZ9Rc.js +0 -1
  520. package/core/built/admin/assets/dropzone-E0bSX4_a.js +0 -5
  521. package/core/built/admin/assets/edit-profile-DqNPKaA4.js +0 -1
  522. package/core/built/admin/assets/editor-CkLXQDRp.js +0 -8
  523. package/core/built/admin/assets/empty-indicator-BTtOlgIo.js +0 -1
  524. package/core/built/admin/assets/esm-TSfGW7nz.js +0 -2
  525. package/core/built/admin/assets/explore-BEstLxKr.js +0 -1
  526. package/core/built/admin/assets/feed-C58p2voG.js +0 -1
  527. package/core/built/admin/assets/field-BSbDUHPv.js +0 -1
  528. package/core/built/admin/assets/filters-BgYv8Gt7.js +0 -1
  529. package/core/built/admin/assets/filters-DvenFkmK.js +0 -1
  530. package/core/built/admin/assets/framework-provider-jQktxm9P.js +0 -4
  531. package/core/built/admin/assets/ghost-dark-8590dea6cd695ff90f27d262c4464538.css +0 -1
  532. package/core/built/admin/assets/gift-link-modal-BPjXkEFt.js +0 -1
  533. package/core/built/admin/assets/growth-D4JNiVTe.js +0 -1
  534. package/core/built/admin/assets/hooks-Cjxexi_I.js +0 -2
  535. package/core/built/admin/assets/index-BacwlcOy.js +0 -67
  536. package/core/built/admin/assets/index-DxRNHH0o.css +0 -1
  537. package/core/built/admin/assets/inline-C22rnPro.js +0 -1
  538. package/core/built/admin/assets/input-group-CKfrILLP.js +0 -1
  539. package/core/built/admin/assets/jsx-runtime-CtMZ-PAS.js +0 -1
  540. package/core/built/admin/assets/kpi-card-DZxQKAIb.js +0 -1
  541. package/core/built/admin/assets/kpi-card-FidQ5zg3.js +0 -1
  542. package/core/built/admin/assets/kpi-helpers-C5T8Vaf1.js +0 -1
  543. package/core/built/admin/assets/kpi-tabs-_VRK6hGV.js +0 -1
  544. package/core/built/admin/assets/label-Cza7hPgn.js +0 -1
  545. package/core/built/admin/assets/label-picker-DgC_zLaw.js +0 -1
  546. package/core/built/admin/assets/layout-BxsXnKFX.js +0 -1
  547. package/core/built/admin/assets/limit-service-CTurluJQ.js +0 -20
  548. package/core/built/admin/assets/link-helpers-C3Gqy2cz.js +0 -1
  549. package/core/built/admin/assets/list-page-BtqCnow_.js +0 -1
  550. package/core/built/admin/assets/member-custom-fields-9uXFBqSt.js +0 -1
  551. package/core/built/admin/assets/member-detail-Dq6ZDIxo.js +0 -1
  552. package/core/built/admin/assets/members-CUWD9jal.js +0 -10
  553. package/core/built/admin/assets/modals-CIdwHVga.js +0 -31
  554. package/core/built/admin/assets/moderation-DTt04UDA.js +0 -1
  555. package/core/built/admin/assets/newsletter-cC8vcc9h.js +0 -1
  556. package/core/built/admin/assets/note-DZU0IY9e.js +0 -1
  557. package/core/built/admin/assets/notifications-NoHpBHJ4.js +0 -1
  558. package/core/built/admin/assets/nql-lang-CvCSOQG3.js +0 -19
  559. package/core/built/admin/assets/onboarding-route-Deg2hNm8.js +0 -1
  560. package/core/built/admin/assets/overview-BQPt_9w3.js +0 -1
  561. package/core/built/admin/assets/page-header-D6bEqPo2.js +0 -1
  562. package/core/built/admin/assets/post-analytics-header-BPw_B2_D.js +0 -1
  563. package/core/built/admin/assets/post-analytics-kp2_--XO.js +0 -1
  564. package/core/built/admin/assets/post-share-modal-Cave3Z4W.js +0 -1
  565. package/core/built/admin/assets/preferences-C7h3j_uy.js +0 -5
  566. package/core/built/admin/assets/profile-B2x4q2oB.js +0 -1
  567. package/core/built/admin/assets/router-provider-5fsX1CYn.js +0 -1
  568. package/core/built/admin/assets/select-PhPjIBBT.js +0 -1
  569. package/core/built/admin/assets/settings-D5P9Gwgo.js +0 -6
  570. package/core/built/admin/assets/settings-zUOzQV5I.js +0 -1
  571. package/core/built/admin/assets/share-modal-EfpfbuWF.js +0 -1
  572. package/core/built/admin/assets/social-urls-DgAF08Xc.js +0 -18
  573. package/core/built/admin/assets/sort-button-WOQYJm2H.js +0 -1
  574. package/core/built/admin/assets/source-icon-hm8Cj-Gx.js +0 -1
  575. package/core/built/admin/assets/stats-CnQDb62m.js +0 -1
  576. package/core/built/admin/assets/stats-view-CCfTJgSe.js +0 -1
  577. package/core/built/admin/assets/step-1-BGlhY4DS.js +0 -1
  578. package/core/built/admin/assets/step-2-D3sDEyFH.js +0 -1
  579. package/core/built/admin/assets/step-3-CvZoUdsc.js +0 -2
  580. package/core/built/admin/assets/switch-CNjkOmwz.js +0 -1
  581. package/core/built/admin/assets/table-C5nZYPnW.js +0 -1
  582. package/core/built/admin/assets/tabs-dtOcExye.js +0 -1
  583. package/core/built/admin/assets/tags-Dhm0FB_g.js +0 -1
  584. package/core/built/admin/assets/textarea-CeKw3wmV.js +0 -1
  585. package/core/built/admin/assets/toggle-group-DfhZIMTW.js +0 -1
  586. package/core/built/admin/assets/topic-filter-Cxe1Il41.js +0 -1
  587. package/core/built/admin/assets/typeof-Ca-duI-z.js +0 -1
  588. package/core/built/admin/assets/use-filter-params-Bub6BqNy.js +0 -1
  589. package/core/built/admin/assets/use-growth-stats-BJORomv0.js +0 -1
  590. package/core/built/admin/assets/use-reply-chain-data-B89YjVoo.js +0 -1
  591. package/core/built/admin/assets/use-simple-pagination-BL2SYXKi.js +0 -1
  592. package/core/built/admin/assets/virtual-list-DNJOSK9I.js +0 -1
  593. package/core/built/admin/assets/web-BHUE3YQc.js +0 -1
  594. package/core/server/adapters/scheduling/scheduling-base.js +0 -5
  595. package/core/server/adapters/sso/SSOBase.js +0 -5
  596. package/core/server/adapters/storage/index.js +0 -17
@@ -1,1221 +0,0 @@
1
- import { A as e, S as t, T as n, a as r, d as i, g as a, v as o, w as s } from "./_react-D4KM8XEu.js";
2
- import { d as c, y as l } from "./chunk-KS7C4IRE-B-GOFDPZ.js";
3
- import { G as u, H as d, J as f, K as p, S as m, St as h, T as g, U as _, V as v, Y as ee, _ as te, a as y, b, g as x, m as S, n as ne, o as C, v as re, x as w, y as T, z as E } from "./routes-BOii-V9n.js";
4
- import { O as ie, S as D, g as ae, r as O, t as oe } from "./use-navigate-with-base-path-Drx1kdAK.js";
5
- import { G as k, P as se, W as A, b as j, h as ce } from "./use-activity-pub-queries-yqGRcnLn.js";
6
- import { c as le, d as M, i as ue, l as N, n as P, r as F, s as de, t as I } from "./content-formatters-bwrp4iEO.js";
7
- import { t as L } from "./inbox-YmhuBice.js";
8
- import { i as fe, n as pe, r as me, t as he } from "./use-reply-chain-data-BHkCHcW5.js";
9
- import { t as ge } from "./separator-1gNokN5S.js";
10
- import "./layout-jcurg3rU.js";
11
- import { t as R } from "./topic-filter-CuDyM5bD.js";
12
- var z = ae("minus", [["path", {
13
- d: "M5 12h14",
14
- key: "1ays0h"
15
- }]]);
16
- //#endregion
17
- //#region ../shade/es/components/ui/empty-indicator.js
18
- i();
19
- var B = l(), V = r.forwardRef(({ children: e, className: t, ...n }, r) => /* @__PURE__ */ (0, B.jsx)("div", {
20
- ref: r,
21
- className: D("flex size-12 max-h-12 max-w-12 items-center justify-center rounded-full bg-muted [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground", t),
22
- ...n,
23
- children: e
24
- }));
25
- V.displayName = "EmptyBadge";
26
- var H = r.forwardRef(({ children: e, className: t, title: n, description: r, actions: i, ...a }, o) => /* @__PURE__ */ (0, B.jsxs)("div", {
27
- ref: o,
28
- className: D("flex flex-col items-center justify-center gap-3 text-center", t),
29
- ...a,
30
- children: [
31
- /* @__PURE__ */ (0, B.jsx)(V, { children: e }),
32
- /* @__PURE__ */ (0, B.jsxs)("div", {
33
- className: "flex max-w-[320px] flex-col gap-1.5",
34
- children: [/* @__PURE__ */ (0, B.jsx)("h3", {
35
- className: "text-md font-medium tracking-normal text-pretty text-foreground",
36
- children: n
37
- }), r && /* @__PURE__ */ (0, B.jsx)("p", {
38
- className: "text-sm leading-tight text-pretty text-muted-foreground",
39
- children: r
40
- })]
41
- }),
42
- i && /* @__PURE__ */ (0, B.jsx)("div", {
43
- className: "flex items-center gap-2",
44
- children: i
45
- })
46
- ]
47
- }));
48
- //#endregion
49
- //#region src/views/inbox/components/customizer.tsx
50
- H.displayName = "EmptyIndicator", i();
51
- var U = [
52
- "1.5rem",
53
- "1.6rem",
54
- "1.7rem",
55
- "1.8rem",
56
- "2rem"
57
- ], W = {
58
- BACKGROUND_COLOR: "ghost-ap-background-color",
59
- FONT_SIZE: "ghost-ap-font-size",
60
- FONT_FAMILY: "ghost-ap-font-family",
61
- FONT_STYLE: "ghost-ap-font-style"
62
- }, G = {
63
- SYSTEM: {
64
- id: "system",
65
- color: "#fff",
66
- background: "bg-white dark:bg-black",
67
- button: "bg-white dark:bg-black",
68
- border: "border-black/[8%] dark:border-gray-950"
69
- },
70
- SEPIA: {
71
- id: "sepia",
72
- color: "#FCF8F1",
73
- background: "bg-[#FCF8F1]",
74
- button: "bg-[#FCF8F1] hover:bg-black/[3%] text-black hover:text-black",
75
- border: "border-black/[8%]"
76
- },
77
- LIGHT: {
78
- id: "light",
79
- color: "#fff",
80
- background: "bg-white",
81
- button: "hover:bg-black/[3%] text-black hover:text-black",
82
- border: "border-black/[8%] dark:border-gray-950"
83
- },
84
- DARK: {
85
- id: "dark",
86
- color: "#15171a",
87
- background: "bg-black",
88
- button: "text-white dark:bg-black dark:hover:bg-gray-900",
89
- border: "border-black/[8%] dark:border-gray-950"
90
- }
91
- }, _e = () => {
92
- let [e, t] = n(() => localStorage.getItem(W.BACKGROUND_COLOR)?.toUpperCase() || "SYSTEM"), [r, i] = n(() => {
93
- let e = localStorage.getItem(W.FONT_SIZE);
94
- return e ? parseInt(e) : 2;
95
- }), [a, s] = n(() => localStorage.getItem(W.FONT_STYLE) || "sans");
96
- return o(() => {
97
- localStorage.setItem(W.FONT_SIZE, r.toString());
98
- }, [r]), o(() => {
99
- localStorage.setItem(W.FONT_STYLE, a);
100
- }, [a]), {
101
- backgroundColor: e,
102
- currentFontSizeIndex: r,
103
- fontStyle: a,
104
- handleColorChange: (e) => {
105
- t(e), localStorage.setItem(W.BACKGROUND_COLOR, G[e].id);
106
- },
107
- setFontStyle: s,
108
- increaseFontSize: () => {
109
- i((e) => Math.min(e + 1, U.length - 1));
110
- },
111
- decreaseFontSize: () => {
112
- i((e) => Math.max(e - 1, 0));
113
- },
114
- resetFontSize: () => i(2),
115
- fontSize: U[r]
116
- };
117
- }, ve = ({ backgroundColor: e, currentFontSizeIndex: t, fontStyle: n, onColorChange: r, onFontStyleChange: i, onDecreaseFontSize: a, onIncreaseFontSize: o, onResetFontSize: s, onOpenChange: c }) => /* @__PURE__ */ (0, B.jsx)(ye, {
118
- backgroundColor: e,
119
- currentFontSizeIndex: t,
120
- fontStyle: n,
121
- isActiveColor: (t) => e === t,
122
- isActiveFont: (e) => n === e,
123
- onColorChange: r,
124
- onDecreaseFontSize: a,
125
- onFontStyleChange: i,
126
- onIncreaseFontSize: o,
127
- onOpenChange: c,
128
- onResetFontSize: s
129
- }), ye = ({ backgroundColor: e, isActiveColor: t, isActiveFont: n, onColorChange: r, onFontStyleChange: i, currentFontSizeIndex: a, onDecreaseFontSize: o, onIncreaseFontSize: s, onResetFontSize: c, onOpenChange: l }) => /* @__PURE__ */ (0, B.jsxs)(E, {
130
- modal: !1,
131
- onOpenChange: l,
132
- children: [/* @__PURE__ */ (0, B.jsx)(d, {
133
- asChild: !0,
134
- children: /* @__PURE__ */ (0, B.jsx)(O, {
135
- className: `size-9 rounded-full ${G[e].button}`,
136
- variant: "ghost",
137
- children: /* @__PURE__ */ (0, B.jsx)(h.Typography, { className: "size-[18px]!" })
138
- })
139
- }), /* @__PURE__ */ (0, B.jsx)(v, {
140
- align: "end",
141
- className: "w-[224px]",
142
- onCloseAutoFocus: (e) => e.preventDefault(),
143
- onOpenAutoFocus: (e) => e.preventDefault(),
144
- children: /* @__PURE__ */ (0, B.jsxs)("div", {
145
- className: "flex flex-col gap-4",
146
- children: [
147
- /* @__PURE__ */ (0, B.jsxs)("div", {
148
- className: "flex items-center justify-between gap-[6px]",
149
- children: [
150
- /* @__PURE__ */ (0, B.jsx)(O, {
151
- className: `h-7 flex-1 rounded-[6px] bg-gray-200 p-0 text-[1.1rem] text-black hover:bg-gray-300 dark:bg-gray-950 dark:text-white dark:hover:bg-gray-900 [&_svg]:size-[14px] ${t("SYSTEM") ? "outline-2 outline-green" : ""}`,
152
- variant: "secondary",
153
- onClick: () => r("SYSTEM"),
154
- children: "Auto"
155
- }),
156
- /* @__PURE__ */ (0, B.jsx)(O, {
157
- className: `h-7 flex-1 rounded-[6px] bg-[#ece6d9] p-0 hover:bg-[#ece6d9] ${t("SEPIA") ? "outline-2 outline-green" : "border border-[#ece6d9]"}`,
158
- onClick: () => r("SEPIA")
159
- }),
160
- /* @__PURE__ */ (0, B.jsx)(O, {
161
- className: `h-7 flex-1 rounded-[6px] bg-white p-0 hover:bg-white ${t("LIGHT") ? "outline-2 outline-green" : "border border-gray-200"}`,
162
- onClick: () => r("LIGHT")
163
- }),
164
- /* @__PURE__ */ (0, B.jsx)(O, {
165
- className: `h-7 flex-1 rounded-[6px] bg-black p-0 hover:bg-black dark:border dark:border-gray-950 ${t("DARK") ? "outline-2 outline-green" : ""}`,
166
- onClick: () => r("DARK")
167
- })
168
- ]
169
- }),
170
- /* @__PURE__ */ (0, B.jsxs)("div", {
171
- className: "flex gap-2",
172
- children: [/* @__PURE__ */ (0, B.jsxs)(O, {
173
- className: `flex h-auto w-full flex-col gap-1 rounded-[6px] bg-gray-200 text-black hover:bg-gray-300 dark:bg-gray-950 dark:text-white dark:hover:bg-gray-900 ${n("sans") && "outline-2 outline-green"}`,
174
- variant: "secondary",
175
- onClick: () => i("sans"),
176
- children: [/* @__PURE__ */ (0, B.jsx)("span", {
177
- className: "text-[2rem] leading-none font-bold",
178
- children: "Aa"
179
- }), /* @__PURE__ */ (0, B.jsx)("span", {
180
- className: "text-[1.1rem]",
181
- children: "System"
182
- })]
183
- }), /* @__PURE__ */ (0, B.jsxs)(O, {
184
- className: `flex h-auto w-full flex-col gap-1 rounded-[6px] bg-gray-200 text-black hover:bg-gray-300 dark:bg-gray-950 dark:text-white dark:hover:bg-gray-900 ${n("serif") && "outline-2 outline-green"}`,
185
- variant: "secondary",
186
- onClick: () => i("serif"),
187
- children: [/* @__PURE__ */ (0, B.jsx)("span", {
188
- className: "pt-1 font-serif text-[2rem] leading-none font-bold",
189
- children: "Aa"
190
- }), /* @__PURE__ */ (0, B.jsx)("span", {
191
- className: "font-serif text-[1.2rem]",
192
- children: "Serif"
193
- })]
194
- })]
195
- }),
196
- /* @__PURE__ */ (0, B.jsxs)("div", {
197
- className: "flex gap-2",
198
- children: [
199
- /* @__PURE__ */ (0, B.jsx)(O, {
200
- className: "h-8 w-full rounded-[6px] bg-gray-200 text-black hover:bg-gray-300 dark:bg-gray-950 dark:text-white dark:hover:bg-gray-900 [&_svg]:size-[14px]",
201
- disabled: a === 0,
202
- variant: "secondary",
203
- onClick: o,
204
- children: /* @__PURE__ */ (0, B.jsx)(z, {})
205
- }),
206
- /* @__PURE__ */ (0, B.jsx)(O, {
207
- className: "h-8 w-full rounded-[6px] bg-gray-200 text-black hover:bg-gray-300 dark:bg-gray-950 dark:text-white dark:hover:bg-gray-900",
208
- variant: "secondary",
209
- onClick: c,
210
- children: /* @__PURE__ */ (0, B.jsx)("span", {
211
- className: "text-[1.6rem] font-bold",
212
- children: "Aa"
213
- })
214
- }),
215
- /* @__PURE__ */ (0, B.jsx)(O, {
216
- className: "h-8 w-full rounded-[6px] bg-gray-200 text-black hover:bg-gray-300 dark:bg-gray-950 dark:text-white dark:hover:bg-gray-900 [&_svg]:size-[14px]",
217
- disabled: a === U.length - 1,
218
- variant: "secondary",
219
- onClick: s,
220
- children: /* @__PURE__ */ (0, B.jsx)(M, {})
221
- })
222
- ]
223
- })
224
- ]
225
- })
226
- })]
227
- });
228
- //#endregion
229
- //#region src/components/feed/table-of-contents.tsx
230
- i();
231
- var be = ({ tocItems: e, iframeElement: t, modalRef: i, className: a = "visible! absolute inset-y-0 right-7 z-40 hidden lg:block!", onOpenChange: s }) => {
232
- let [c, l] = n(null), u = r.useRef(!1);
233
- return o(() => {
234
- if (!t?.contentDocument || e.length <= 1) return;
235
- let n = i.current;
236
- if (!n) return;
237
- let r = () => {
238
- if (u.current) return;
239
- let r = t.contentDocument;
240
- if (!r) return;
241
- let i = n.scrollTop, a = e.map((e) => r.getElementById(e.id)).filter((e) => e !== null).map((e) => ({
242
- id: e.id,
243
- top: e.offsetTop
244
- }));
245
- if (!a.length) return;
246
- let o = a.reduce((e, t) => t.top - 100 <= i ? t : e);
247
- l(o?.id || null);
248
- }, a = () => {
249
- requestAnimationFrame(r);
250
- };
251
- return n.addEventListener("scroll", a), r(), () => {
252
- n.removeEventListener("scroll", a);
253
- };
254
- }, [
255
- t,
256
- e,
257
- i
258
- ]), e.length <= 1 ? null : /* @__PURE__ */ (0, B.jsx)("div", {
259
- className: a,
260
- children: /* @__PURE__ */ (0, B.jsx)("div", {
261
- className: "sticky top-1/2 -translate-y-1/2",
262
- children: /* @__PURE__ */ (0, B.jsx)(Se, {
263
- activeHeading: c || "",
264
- items: e,
265
- onItemClick: (e) => {
266
- if (!t?.contentDocument) return;
267
- let n = t.contentDocument.getElementById(e);
268
- n && i.current && (u.current = !0, l(e), i.current.scrollTo({
269
- top: n.offsetTop - 20,
270
- behavior: "smooth"
271
- }), setTimeout(() => {
272
- u.current = !1;
273
- }, 1e3));
274
- },
275
- onOpenChange: s
276
- })
277
- })
278
- });
279
- }, K = {
280
- 1: "w-3",
281
- 2: "w-2",
282
- 3: "w-1"
283
- }, xe = {
284
- 1: "pl-2",
285
- 2: "pl-6",
286
- 3: "pl-10"
287
- }, Se = ({ items: e, activeHeading: t, onItemClick: i, onOpenChange: a }) => {
288
- let [o, s] = n(!1), c = r.useRef();
289
- if (r.useEffect(() => () => {
290
- c.current && clearTimeout(c.current);
291
- }, []), e.length === 0) return null;
292
- let l = (e) => Math.min(e, 3), u = (e) => K[l(e)], f = (e) => xe[l(e)], p = () => {
293
- c.current && clearTimeout(c.current), s(!0), a?.(!0);
294
- }, m = () => {
295
- c.current = setTimeout(() => {
296
- s(!1), a?.(!1);
297
- }, 100);
298
- };
299
- return /* @__PURE__ */ (0, B.jsxs)(E, {
300
- modal: !1,
301
- open: o,
302
- onOpenChange: s,
303
- children: [/* @__PURE__ */ (0, B.jsx)(d, {
304
- asChild: !0,
305
- children: /* @__PURE__ */ (0, B.jsx)("div", {
306
- className: "absolute top-1/2 right-2 flex -translate-y-1/2 flex-col items-end gap-2 rounded-md p-2 text-base dark:bg-black",
307
- onMouseEnter: p,
308
- onMouseLeave: m,
309
- children: e.map((e) => /* @__PURE__ */ (0, B.jsx)("div", { className: `h-[2px] rounded-sm ${t === e.id ? "bg-black dark:bg-white" : "bg-gray-400 dark:bg-gray-700"} pr-1 transition-all ${u(e.level)}` }, e.id))
310
- })
311
- }), /* @__PURE__ */ (0, B.jsx)(v, {
312
- align: "center",
313
- className: "w-[240px] p-2",
314
- side: "left",
315
- sideOffset: -28,
316
- onCloseAutoFocus: (e) => e.preventDefault(),
317
- onMouseEnter: p,
318
- onMouseLeave: m,
319
- onOpenAutoFocus: (e) => e.preventDefault(),
320
- children: /* @__PURE__ */ (0, B.jsx)("nav", {
321
- "aria-label": "Table of contents navigation",
322
- className: "max-h-[60vh] overflow-y-auto",
323
- role: "navigation",
324
- children: e.map((e) => /* @__PURE__ */ (0, B.jsx)("button", {
325
- className: `line-clamp-2 block w-full cursor-pointer rounded py-1 text-left text-sm leading-tight ${t === e.id ? "text-black dark:text-white" : "text-gray-700 dark:text-gray-600"} hover:bg-gray-100 hover:text-gray-900 dark:hover:bg-grey-950 dark:hover:text-white ${f(e.level)}`,
326
- type: "button",
327
- onClick: () => i(e.id),
328
- children: /* @__PURE__ */ (0, B.jsx)("span", {
329
- className: "line-clamp-2",
330
- children: e.text
331
- })
332
- }, e.id))
333
- })
334
- })]
335
- });
336
- }, Ce = () => "<style>\n\n/* Variables */\n\n:root {\n --color-white: #fff;\n --color-lighter-gray: rgb(0 0 0 / 0.05);\n --color-light-gray: #e6e6e6;\n --color-mid-gray: #ccc;\n --color-dark-gray: #444;\n --color-darker-gray: #15171a;\n --color-black: #000;\n --color-primary-text: var(--color-darker-gray);\n --color-secondary-text: rgb(124 139 154);\n --color-border: rgb(0 0 0 / 0.08);\n --color-dark-border: rgb(0 0 0 / 0.55);\n --background-color: #fff;\n --font-sans: Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n --font-serif: \"EB Garamond\", Georgia, Times, serif;\n --font-serif-alt: Georgia, Times, serif;\n --font-mono: \"JetBrains Mono\", Menlo, Consolas, Monaco, \"Liberation Mono\", \"Lucida Console\", monospace;\n --letter-spacing: 0;\n --container-width: 1320px;\n --container-gap: clamp(24px, 1.7032rem + 1.9355vw, 48px);\n --ghost-accent-color: #15171a;\n}\n\n:root.has-light-text,\n:is(.gh-navigation, .gh-footer).has-accent-color {\n --color-lighter-gray: rgb(255 255 255 / 0.1);\n --color-darker-gray: #fff;\n --color-secondary-text: rgb(255 255 255 / 0.64);\n --color-border: rgb(255 255 255 / 0.15);\n --color-dark-border: rgb(255 255 255 / 0.5);\n --background-color: #15171a;\n}\n\n/* Resets */\n\n*, *::before, *::after {\n box-sizing: border-box;\n}\n\n* {\n margin: 0;\n}\n\nhtml {\n font-size: 62.5%;\n}\n\nbody {\n font-family: var(--font-sans);\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\nimg, picture, video, canvas, svg {\n display: block;\n height: auto;\n max-width: 100%;\n}\n\niframe {\n display: block;\n}\n\ninput, button, textarea, select {\n font: inherit;\n}\n\np, h1, h2, h3, h4, h5, h6 {\n overflow-wrap: break-word;\n}\n\nh1, h2, h3, h4, h5, h6 {\n font-family: var(--font-sans);\n line-height: 1.2;\n}\n\n/* Globals */\n\nhtml {\n --container-width: 840px;\n --content-width: 640px;\n}\n\nbody {\n font-family: var(--font-sans);\n font-size: 1.6rem;\n background-color: var(--background-color);\n color: var(--color-primary-text);\n}\n\na {\n color: var(--color-darker-gray);\n text-decoration: none;\n}\n\na:not([class]):hover {\n opacity: 0.8;\n}\n\n.gh-canvas,\n.kg-width-full.kg-content-wide {\n --main: min(var(--content-width, 720px), 100% - var(--container-gap) * 2);\n --wide: minmax(0, calc((var(--container-width, 1200px) - var(--content-width, 720px)) / 2));\n --full: minmax(var(--container-gap), 1fr);\n\n display: grid;\n grid-template-columns:\n [full-start] var(--full)\n [wide-start] var(--wide)\n [main-start] var(--main) [main-end]\n var(--wide) [wide-end]\n var(--full) [full-end];\n}\n\n.gh-canvas > * {\n grid-column: main;\n}\n\n.kg-width-wide,\n.kg-content-wide > div {\n grid-column: full;\n}\n\n.kg-width-full {\n grid-column: full;\n}\n\n/* Article */\n\n.gh-article-header {\n margin: 24px 0 40px;\n}\n\n.gh-article-title {\n font-weight: 700;\n text-wrap: pretty;\n font-size: 3.6rem;\n letter-spacing: -0.015em;\n line-height: 1.1;\n}\n\n.gh-article-excerpt {\n margin-top: 12px;\n font-size: calc(var(--font-size) * 1.06 * var(--font-size-multiplier, 1));\n line-height: 1.4;\n text-wrap: pretty;\n}\n\n.has-serif-body .gh-article-excerpt {\n font-family: var(--font-serif-alt);\n}\n\n.gh-article-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 16px;\n}\n\n.gh-article-meta:hover {\n opacity: 1;\n}\n\n.gh-article-author-image {\n display: flex;\n margin-right: 8px;\n margin-left: 6px;\n}\n\n.gh-article-author-image span {\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n width: 46px;\n height: 46px;\n overflow: hidden;\n margin: 0 -8px;\n background-color: #F4F5F6;\n border-radius: 50%;\n border: 3px solid var(--background-color);\n}\n\nhtml.has-sepia-bg .gh-article-author-image span {\n background-color: #EFEDE6;\n}\n\nhtml.has-light-text .gh-article-author-image span {\n background-color: #394047;\n}\n\n.gh-article-author-image span:first-child {\n z-index: 10;\n}\n\n.gh-article-author-image span:nth-child(2) {\n z-index: 9;\n}\n\n.gh-article-author-image span:nth-child(3) {\n z-index: 8;\n}\n\n.gh-article-author-image img {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.gh-article-author-image svg {\n width: 18px;\n height: 18px;\n color: #95A1AD;\n}\n\n.gh-article-meta-wrapper {\n display: flex;\n flex-direction: column;\n gap: 1px;\n margin-top: -2px;\n}\n\n.gh-article-author-name {\n font-size: 1.5rem;\n font-weight: 600;\n letter-spacing: -0.008em;\n}\n\n.gh-article-source {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 1.5rem;\n line-height: 1.2;\n color: var(--color-secondary-text);\n width: fit-content;\n}\n\n.gh-article-source svg {\n width: 12px;\n height: 12px;\n margin-top: 1px;\n}\n\n.gh-article-meta:hover .gh-article-source {\n text-decoration: underline;\n}\n\n.gh-article-image {\n grid-column: full;\n margin-top: 40px;\n}\n\n.gh-article-image img {\n width: 100%;\n}\n\n/* Content */\n\n/* Content refers to styling all page and post content that is\ncreated within the Ghost editor. The main content handles\nheadings, text, images and lists. We deal with cards lower down. */\n\n.gh-content {\n font-size: calc(var(--font-size) * var(--font-size-multiplier, 1));\n overflow-x: hidden;\n letter-spacing: var(--letter-spacing);\n line-height: var(--line-height);\n}\n\n/* Default vertical spacing */\n.gh-content > * + * {\n margin-top: calc(28px * var(--content-spacing-factor, 1));\n margin-bottom: 0;\n}\n\n/* Remove space between full-width cards */\n.gh-content > .kg-width-full + .kg-width-full:not(.kg-width-full.kg-card-hascaption + .kg-width-full) {\n margin-top: 0;\n}\n\n/* Add back a top margin to all headings,\nunless a heading is the very first element in the post content */\n.gh-content > [id]:not(:first-child) {\n margin-top: calc(40px * var(--content-spacing-factor, 1));\n}\n\n/* Add a small margin between a heading and paragraph after it */\n.gh-content > [id] + p {\n margin-top: calc(12px * var(--content-spacing-factor, 1));\n}\n\n/* A larger margin before/after dividers, blockquotes and embeds */\n.gh-content > :is(hr, blockquote, iframe) {\n position: relative;\n margin-top: calc(48px * var(--content-spacing-factor, 1)) !important;\n}\n\n.gh-content > :is(hr, blockquote, iframe) + * {\n margin-top: calc(48px * var(--content-spacing-factor, 1)) !important;\n}\n\n/* Now the content typography styles */\n.gh-content [id] {\n letter-spacing: -0.005em;\n}\n\n.gh-content h1 {\n font-size: 1.9em;\n}\n\n.gh-content h2 {\n font-size: 1.6em;\n}\n\n.gh-content h3 {\n font-size: 1.3em;\n}\n\n.gh-content h4 {\n font-size: 1.2em;\n}\n\n.gh-content h5 {\n font-size: 1.1em;\n}\n\n.gh-content h6 {\n font-size: 1em;\n}\n\n.gh-content a:not([class]) {\n color: #14B8FF;\n text-decoration: underline;\n}\n\nhtml.has-light-text .gh-content a:not([class]) {\n color: #14B8FF;\n}\n\nhtml.has-sepia-bg .gh-content a:not([class]) {\n color: #DD6B02;\n}\n\n.gh-content .kg-callout-card .kg-callout-text,\n.gh-content .kg-toggle-card .kg-toggle-content > :is(ul, ol, p) {\n font-size: 0.95em;\n}\n\n.has-serif-body .gh-content > blockquote,\n.has-serif-body .gh-content > ol,\n.has-serif-body .gh-content > ul,\n.has-serif-body .gh-content > dl,\n.has-serif-body .gh-content > p,\n.has-serif-body .gh-content .kg-callout-text,\n.has-serif-body .gh-content .kg-toggle-content > ol,\n.has-serif-body .gh-content .kg-toggle-content > ul,\n.has-serif-body .gh-content .kg-toggle-content > p {\n font-family: var(--font-serif-alt);\n}\n\n.gh-content :is(ul, ol) {\n padding-left: 28px;\n}\n\n.gh-content :is(li + li, li :is(ul, ol)) {\n margin-top: 8px;\n}\n\n.gh-content ol ol li {\n list-style-type: lower-alpha;\n}\n\n.gh-content ol ol ol li {\n list-style-type: lower-roman;\n}\n\n.gh-content hr {\n width: 100%;\n height: 1px;\n background-color: var(--color-border);\n border: 0;\n}\n\n.gh-content .gh-table {\n overflow-x: scroll;\n -webkit-overflow-scrolling: touch;\n}\n\n.gh-content .gh-table table {\n width: 100%;\n font-family: var(--font-sans);\n font-size: 1.5rem;\n white-space: nowrap;\n vertical-align: top;\n border-spacing: 0;\n border-collapse: collapse;\n}\n\n.gh-content .gh-table table th {\n font-size: 1.2rem;\n font-weight: 700;\n color: var(--color-darkgrey);\n text-align: left;\n text-transform: uppercase;\n letter-spacing: 0.2px;\n}\n\n.gh-content .gh-table table :is(th, td),\n.gh-content .gh-table table td {\n padding: 6px 12px;\n border-bottom: 1px solid var(--color-border);\n}\n\n.gh-content .gh-table table :is(th, td):first-child {\n padding-left: 0;\n}\n\n.gh-content .gh-table table :is(th, td):last-child {\n padding-right: 0;\n}\n\n.gh-content pre {\n overflow: auto;\n padding: 16px;\n font-size: 1.5rem;\n line-height: 1.5em;\n background: var(--color-lighter-gray);\n border-radius: 6px;\n font-family: var(--font-mono);\n}\n\n.gh-content :not(pre) > code {\n vertical-align: baseline;\n padding: 0.15em 0.4em;\n font-weight: 400;\n font-size: 0.95em;\n line-height: 1em;\n background: var(--color-lighter-gray);\n border-radius: 0.25em;\n font-family: var(--font-mono);\n}\n\n.gh-content mark {\n color: inherit;\n background: rgb(255 225 54 / 25%);\n}\n\n/* Cards */\n\n/* Add extra margin before/after any cards, except for when immediately preceeded by a heading */\n\n.gh-content :not(.kg-card):not(table):not([id]) + :is(.kg-card, table) {\n margin-top: calc(48px * var(--content-spacing-factor, 1));\n}\n\n.gh-content :is(.kg-card, table) + :not(.kg-card):not(table):not([id]) {\n margin-top: calc(48px * var(--content-spacing-factor, 1));\n}\n\n.gh-content :not(.kg-card):not([id]) + .kg-card.kg-width-full {\n margin-top: calc(68px * var(--content-spacing-factor, 1));\n}\n\n.gh-content .kg-card.kg-width-full + :not(.kg-card):not([id]) {\n margin-top: calc(68px * var(--content-spacing-factor, 1));\n}\n\n.kg-image {\n margin-right: auto;\n margin-left: auto;\n}\n\n.kg-embed-card {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n}\n\n.kg-image-card a:hover,\n.kg-gallery-image a:hover {\n opacity: 1 !important;\n}\n\nblockquote:not([class]) {\n padding-left: 2rem;\n border-left: 4px solid var(--ghost-accent-color);\n}\n\nblockquote.kg-blockquote-alt {\n font-style: normal;\n font-weight: 400;\n color: var(--color-secondary-text);\n}\n\n.has-serif-body .kg-header-card h3.kg-header-card-subheader {\n font-family: var(--font-serif);\n}\n\n.has-serif-body .kg-product-card-description :is(p, ul, ol) {\n font-family: var(--font-serif-alt);\n}\n\n/* Caption */\n\nfigcaption {\n margin-top: 12px;\n font-size: 1.3rem;\n text-align: center;\n}\n\n.kg-card.kg-width-full figcaption {\n padding: 0 16px;\n}\n\nfigcaption a {\n color: rgb(29 78 216);\n text-decoration: underline;\n}\n\n/* Paid content styles */\n\n.gh-paid-content-notice {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 36px;\n background: rgba(0, 0, 0, 0.035);\n border-radius: 14px;\n font-size: 16px;\n}\n\nhtml.has-light-text .gh-paid-content-notice {\n background: rgba(255, 255, 255, 0.035);\n}\n\n.gh-paid-content-notice h3 {\n letter-spacing: -0.015em !important;\n}\n\n.gh-paid-content-notice p {\n max-width: 350px;\n text-align: center;\n line-height: 1.3em;\n}\n\n.gh-paid-content-cta {\n display: block;\n color: var(--background-color) !important;\n background: var(--color-primary-text);\n text-decoration: none !important;\n font-weight: 600;\n font-size: 0.9em;\n padding: 8px 16px;\n margin-top: 8px;\n border-radius: 6px;\n}\n\n/* Design settings /*\n\n.has-serif-body {\n --font-size-multiplier: 1.1;\n}\n\n.has-serif-body .gh-content > blockquote,\n.has-serif-body .gh-content > ol,\n.has-serif-body .gh-content > ul,\n.has-serif-body .gh-content > dl,\n.has-serif-body .gh-content > p,\n.has-serif-body .gh-content .kg-callout-card .kg-callout-text,\n.has-serif-body .gh-content .kg-toggle-card .kg-toggle-content > ol,\n.has-serif-body .gh-content .kg-toggle-card .kg-toggle-content > ul,\n.has-serif-body .gh-content .kg-toggle-card .kg-toggle-content > p {\n font-family: var(--font-serif-alt);\n}\n\n</style>", we = /* @__PURE__ */ e({ default: () => q }), q = "(function() {\n const handleAudioPlayer = function (audioElementContainer) {\n const audioPlayerContainer = audioElementContainer.querySelector('.kg-audio-player-container');\n const playIconContainer = audioElementContainer.querySelector('.kg-audio-play-icon');\n const pauseIconContainer = audioElementContainer.querySelector('.kg-audio-pause-icon');\n const seekSlider = audioElementContainer.querySelector('.kg-audio-seek-slider');\n const playbackRateContainer = audioElementContainer.querySelector('.kg-audio-playback-rate');\n const muteIconContainer = audioElementContainer.querySelector('.kg-audio-mute-icon');\n const unmuteIconContainer = audioElementContainer.querySelector('.kg-audio-unmute-icon');\n const volumeSlider = audioElementContainer.querySelector('.kg-audio-volume-slider');\n const audio = audioElementContainer.querySelector('audio');\n const durationContainer = audioElementContainer.querySelector('.kg-audio-duration');\n const currentTimeContainer = audioElementContainer.querySelector('.kg-audio-current-time');\n let playbackRates = [{\n rate: 0.75,\n label: '0.7×'\n }, {\n rate: 1.0,\n label: '1×'\n }, {\n rate: 1.25,\n label: '1.2×'\n }, {\n rate: 1.75,\n label: '1.7×'\n }, {\n rate: 2.0,\n label: '2×'\n }];\n\n let raf = null;\n let currentPlaybackRateIdx = 1;\n\n const whilePlaying = () => {\n seekSlider.value = Math.floor(audio.currentTime);\n currentTimeContainer.textContent = calculateTime(seekSlider.value);\n audioPlayerContainer.style.setProperty('--seek-before-width', `${seekSlider.value / seekSlider.max * 100}%`);\n raf = requestAnimationFrame(whilePlaying);\n }\n\n const showRangeProgress = (rangeInput) => {\n if (rangeInput === seekSlider) {\n audioPlayerContainer.style.setProperty('--seek-before-width', rangeInput.value / rangeInput.max * 100 + '%');\n }\n else {\n audioPlayerContainer.style.setProperty('--volume-before-width', rangeInput.value / rangeInput.max * 100 + '%');\n }\n }\n\n const calculateTime = (secs) => {\n const minutes = Math.floor(secs / 60);\n const seconds = Math.floor(secs % 60);\n const returnedSeconds = seconds < 10 ? `0${seconds}` : `${seconds}`;\n return `${minutes}:${returnedSeconds}`;\n }\n\n const displayDuration = () => {\n durationContainer.textContent = calculateTime(audio.duration);\n }\n\n const setSliderMax = () => {\n seekSlider.max = Math.floor(audio.duration);\n }\n\n const displayBufferedAmount = () => {\n if (audio.buffered.length > 0) {\n const bufferedAmount = Math.floor(audio.buffered.end(audio.buffered.length - 1));\n audioPlayerContainer.style.setProperty('--buffered-width', `${(bufferedAmount / seekSlider.max) * 100}%`);\n }\n }\n\n if (audio.readyState > 0) {\n displayDuration();\n setSliderMax();\n displayBufferedAmount();\n } else {\n audio.addEventListener('loadedmetadata', () => {\n displayDuration();\n setSliderMax();\n displayBufferedAmount();\n });\n }\n\n playIconContainer.addEventListener('click', () => {\n playIconContainer.classList.add(\"kg-audio-hide\");\n pauseIconContainer.classList.remove(\"kg-audio-hide\");\n audio.play();\n requestAnimationFrame(whilePlaying);\n });\n\n pauseIconContainer.addEventListener('click', () => {\n pauseIconContainer.classList.add(\"kg-audio-hide\");\n playIconContainer.classList.remove(\"kg-audio-hide\");\n audio.pause();\n cancelAnimationFrame(raf);\n });\n\n muteIconContainer.addEventListener('click', () => {\n muteIconContainer.classList.add(\"kg-audio-hide\");\n unmuteIconContainer.classList.remove(\"kg-audio-hide\");\n audio.muted = false;\n });\n\n unmuteIconContainer.addEventListener('click', () => {\n unmuteIconContainer.classList.add(\"kg-audio-hide\");\n muteIconContainer.classList.remove(\"kg-audio-hide\");\n audio.muted = true;\n });\n\n playbackRateContainer.addEventListener('click', () => {\n let nextPlaybackRate = playbackRates[(currentPlaybackRateIdx + 1) % 5];\n currentPlaybackRateIdx = currentPlaybackRateIdx + 1;\n audio.playbackRate = nextPlaybackRate.rate;\n playbackRateContainer.textContent = nextPlaybackRate.label;\n });\n\n audio.addEventListener('progress', displayBufferedAmount);\n\n seekSlider.addEventListener('input', (e) => {\n showRangeProgress(e.target);\n currentTimeContainer.textContent = calculateTime(seekSlider.value);\n if (!audio.paused) {\n cancelAnimationFrame(raf);\n }\n });\n\n seekSlider.addEventListener('change', () => {\n audio.currentTime = seekSlider.value;\n if (!audio.paused) {\n requestAnimationFrame(whilePlaying);\n }\n });\n\n volumeSlider.addEventListener('input', (e) => {\n const value = e.target.value;\n showRangeProgress(e.target);\n audio.volume = value / 100;\n });\n }\n\n const audioCardElements = document.querySelectorAll('.kg-audio-card');\n\n for (let i = 0; i < audioCardElements.length; i++) {\n handleAudioPlayer(audioCardElements[i]);\n }\n})();\n", Te = /* @__PURE__ */ e({ default: () => Ee }), Ee = "(function() {\n const images = document.querySelectorAll('.kg-gallery-image img');\n images.forEach(function (image) {\n const container = image.closest('.kg-gallery-image');\n const width = image.attributes.width.value;\n const height = image.attributes.height.value;\n const ratio = width / height;\n container.style.flex = ratio + ' 1 0%';\n })\n})();\n", J = /* @__PURE__ */ e({ default: () => De }), De = "(function() {\n const toggleHeadingElements = document.getElementsByClassName(\"kg-toggle-heading\");\n\n const toggleFn = function(event) {\n const targetElement = event.target;\n const parentElement = targetElement.closest('.kg-toggle-card');\n var toggleState = parentElement.getAttribute(\"data-kg-toggle-state\");\n if (toggleState === 'close') {\n parentElement.setAttribute('data-kg-toggle-state', 'open');\n } else {\n parentElement.setAttribute('data-kg-toggle-state', 'close');\n }\n };\n\n for (let i = 0; i < toggleHeadingElements.length; i++) {\n toggleHeadingElements[i].addEventListener('click', toggleFn, false);\n }\n})();\n", Y = /* @__PURE__ */ e({ default: () => X }), X = "(function() {\n const handleVideoPlayer = function (videoElementContainer) {\n const videoPlayer = videoElementContainer.querySelector('.kg-video-player');\n const videoPlayerContainer = videoElementContainer.querySelector('.kg-video-player-container');\n const playIconContainer = videoElementContainer.querySelector('.kg-video-play-icon');\n const pauseIconContainer = videoElementContainer.querySelector('.kg-video-pause-icon');\n const seekSlider = videoElementContainer.querySelector('.kg-video-seek-slider');\n const playbackRateContainer = videoElementContainer.querySelector('.kg-video-playback-rate');\n const muteIconContainer = videoElementContainer.querySelector('.kg-video-mute-icon');\n const unmuteIconContainer = videoElementContainer.querySelector('.kg-video-unmute-icon');\n const volumeSlider = videoElementContainer.querySelector('.kg-video-volume-slider');\n const videoEl = videoElementContainer.querySelector('video');\n const durationContainer = videoElementContainer.querySelector('.kg-video-duration');\n const currentTimeContainer = videoElementContainer.querySelector('.kg-video-current-time');\n const largePlayIcon = videoElementContainer.querySelector('.kg-video-large-play-icon');\n const videoOverlay = videoElementContainer.querySelector('.kg-video-overlay');\n let playbackRates = [{\n rate: 0.75,\n label: '0.7×'\n }, {\n rate: 1.0,\n label: '1×'\n }, {\n rate: 1.25,\n label: '1.2×'\n }, {\n rate: 1.75,\n label: '1.7×'\n }, {\n rate: 2.0,\n label: '2×'\n }];\n\n let raf = null;\n let currentPlaybackRateIdx = 1;\n if (!!videoEl.loop) {\n largePlayIcon.classList.add(\"kg-video-hide-animated\");\n videoOverlay.classList.add(\"kg-video-hide-animated\");\n }\n const whilePlaying = () => {\n seekSlider.value = Math.floor(videoEl.currentTime);\n currentTimeContainer.textContent = calculateTime(seekSlider.value);\n videoPlayer.style.setProperty('--seek-before-width', `${seekSlider.value / seekSlider.max * 100}%`);\n raf = requestAnimationFrame(whilePlaying);\n }\n\n const showRangeProgress = (rangeInput) => {\n if (rangeInput === seekSlider) {\n videoPlayer.style.setProperty('--seek-before-width', rangeInput.value / rangeInput.max * 100 + '%');\n }\n else {\n videoPlayer.style.setProperty('--volume-before-width', rangeInput.value / rangeInput.max * 100 + '%');\n }\n }\n\n const calculateTime = (secs) => {\n const minutes = Math.floor(secs / 60);\n const seconds = Math.floor(secs % 60);\n const returnedSeconds = seconds < 10 ? `0${seconds}` : `${seconds}`;\n return `${minutes}:${returnedSeconds}`;\n }\n\n const displayDuration = () => {\n durationContainer.textContent = calculateTime(videoEl.duration);\n }\n\n const setSliderMax = () => {\n seekSlider.max = Math.floor(videoEl.duration);\n }\n\n const displayBufferedAmount = () => {\n if (videoEl.buffered.length > 0) {\n const bufferedAmount = Math.floor(videoEl.buffered.end(videoEl.buffered.length - 1));\n videoPlayer.style.setProperty('--buffered-width', `${(bufferedAmount / seekSlider.max) * 100}%`);\n }\n }\n\n if (videoEl.readyState > 0) {\n displayDuration();\n setSliderMax();\n displayBufferedAmount();\n if (videoEl.autoplay) {\n raf = requestAnimationFrame(whilePlaying);\n playIconContainer.classList.add(\"kg-video-hide\");\n pauseIconContainer.classList.remove(\"kg-video-hide\");\n }\n if (videoEl.muted) {\n unmuteIconContainer.classList.add(\"kg-video-hide\");\n muteIconContainer.classList.remove(\"kg-video-hide\");\n }\n } else {\n videoEl.addEventListener('loadedmetadata', () => {\n displayDuration();\n setSliderMax();\n displayBufferedAmount();\n if (videoEl.autoplay) {\n raf = requestAnimationFrame(whilePlaying);\n playIconContainer.classList.add(\"kg-video-hide\");\n pauseIconContainer.classList.remove(\"kg-video-hide\");\n }\n if (videoEl.muted) {\n unmuteIconContainer.classList.add(\"kg-video-hide\");\n muteIconContainer.classList.remove(\"kg-video-hide\");\n }\n });\n }\n\n videoElementContainer.onmouseover = () => {\n if (!videoEl.loop) {\n videoPlayerContainer.classList.remove(\"kg-video-hide-animated\");\n }\n }\n\n videoElementContainer.onmouseleave = () => {\n const isPlaying = !!(videoEl.currentTime > 0 && !videoEl.paused && !videoEl.ended && videoEl.readyState > 2);\n if (isPlaying) {\n videoPlayerContainer.classList.add(\"kg-video-hide-animated\");\n }\n }\n\n videoElementContainer.addEventListener('click', () => {\n if (!videoEl.loop) {\n const isPlaying = !!(videoEl.currentTime > 0 && !videoEl.paused && !videoEl.ended && videoEl.readyState > 2);\n if (isPlaying) {\n handleOnPause();\n } else {\n handleOnPlay();\n }\n }\n });\n\n videoEl.onplay = () => {\n largePlayIcon.classList.add(\"kg-video-hide-animated\");\n videoOverlay.classList.add(\"kg-video-hide-animated\");\n playIconContainer.classList.add(\"kg-video-hide\");\n pauseIconContainer.classList.remove(\"kg-video-hide\");\n };\n\n const handleOnPlay = () => {\n largePlayIcon.classList.add(\"kg-video-hide-animated\");\n videoOverlay.classList.add(\"kg-video-hide-animated\");\n playIconContainer.classList.add(\"kg-video-hide\");\n pauseIconContainer.classList.remove(\"kg-video-hide\");\n videoEl.play();\n raf = requestAnimationFrame(whilePlaying);\n }\n\n const handleOnPause = () => {\n pauseIconContainer.classList.add(\"kg-video-hide\");\n playIconContainer.classList.remove(\"kg-video-hide\");\n videoEl.pause();\n cancelAnimationFrame(raf);\n }\n\n largePlayIcon.addEventListener('click', (event) => {\n event.stopPropagation();\n handleOnPlay();\n });\n\n playIconContainer.addEventListener('click', (event) => {\n event.stopPropagation();\n handleOnPlay();\n });\n\n pauseIconContainer.addEventListener('click', (event) => {\n event.stopPropagation();\n handleOnPause();\n });\n\n muteIconContainer.addEventListener('click', (event) => {\n event.stopPropagation();\n muteIconContainer.classList.add(\"kg-video-hide\");\n unmuteIconContainer.classList.remove(\"kg-video-hide\");\n videoEl.muted = false;\n });\n\n unmuteIconContainer.addEventListener('click', (event) => {\n event.stopPropagation();\n unmuteIconContainer.classList.add(\"kg-video-hide\");\n muteIconContainer.classList.remove(\"kg-video-hide\");\n videoEl.muted = true;\n });\n\n playbackRateContainer.addEventListener('click', (event) => {\n event.stopPropagation();\n let nextPlaybackRate = playbackRates[(currentPlaybackRateIdx + 1) % 5];\n currentPlaybackRateIdx = currentPlaybackRateIdx + 1;\n videoEl.playbackRate = nextPlaybackRate.rate;\n playbackRateContainer.textContent = nextPlaybackRate.label;\n });\n\n videoEl.addEventListener('progress', displayBufferedAmount);\n\n seekSlider.addEventListener('input', (e) => {\n e.stopPropagation();\n showRangeProgress(e.target);\n currentTimeContainer.textContent = calculateTime(seekSlider.value);\n if (!videoEl.paused) {\n cancelAnimationFrame(raf);\n }\n });\n\n seekSlider.addEventListener('change', (event) => {\n event.stopPropagation();\n videoEl.currentTime = seekSlider.value;\n if (!videoEl.paused) {\n requestAnimationFrame(whilePlaying);\n }\n });\n\n volumeSlider.addEventListener('click', (event) => {\n event.stopPropagation();\n });\n\n seekSlider.addEventListener('click', (event) => {\n event.stopPropagation();\n });\n\n volumeSlider.addEventListener('input', (e) => {\n e.stopPropagation();\n const value = e.target.value;\n showRangeProgress(e.target);\n videoEl.volume = value / 100;\n });\n }\n\n const setVideoContainerAspectRatio = function(videoCard) {\n const container = videoCard.querySelector('.kg-video-container');\n const video = container.querySelector('video');\n if (container && video.width && video.height) {\n const aspectRatio = (video.height / video.width * 100).toFixed(3);\n container.style.paddingBottom = `${aspectRatio}%`;\n }\n };\n\n const videoCardElements = document.querySelectorAll('.kg-video-card');\n\n for (let i = 0; i < videoCardElements.length; i++) {\n setVideoContainerAspectRatio(videoCardElements[i]);\n handleVideoPlayer(videoCardElements[i]);\n }\n})();\n", Oe = /* @__PURE__ */ e({ default: () => ke }), ke = ".kg-audio-card,\n.kg-audio-card * {\n box-sizing: border-box;\n}\n\n.kg-audio-card {\n display: flex;\n width: 100%;\n min-height: 96px;\n border-radius: 6px;\n padding: 4px;\n background: #fff;\n color: #222;\n box-shadow: inset 0 0 0 1px rgba(124, 139, 154, 0.25);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n}\n\n.kg-audio-card+.kg-audio-card {\n margin-top: 1em;\n}\n\n.kg-audio-thumbnail {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 80px;\n min-width: 80px;\n margin: 8px;\n background: transparent;\n object-fit: cover;\n aspect-ratio: 1/1;\n border-radius: 3px;\n}\n\n.kg-audio-thumbnail.placeholder {\n background: var(--ghost-accent-color);\n}\n\n.kg-audio-thumbnail.placeholder svg {\n width: 24px;\n height: 24px;\n fill: white;\n}\n\n.kg-audio-player-container {\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n width: 100%;\n --seek-before-width: 0%;\n --volume-before-width: 100%;\n --buffered-width: 0%;\n}\n\n.kg-audio-title {\n width: 100%;\n margin: 8px 0 0 0;\n padding: 8px 12px;\n border: none;\n font-family: inherit;\n font-size: 16px;\n font-weight: 600;\n line-height: 1.15em;\n background: transparent;\n}\n\n.kg-audio-player {\n display: flex;\n flex-grow: 1;\n align-items: center;\n padding: 8px 12px;\n}\n\n.kg-audio-current-time {\n min-width: 38px;\n padding: 0 4px;\n font-family: inherit;\n font-size: 12.5px;\n font-weight: 500;\n line-height: 1em;\n white-space: nowrap;\n}\n\n.kg-audio-time {\n width: 56px;\n color: #ababab;\n font-family: inherit;\n font-size: 12.5px;\n font-weight: 500;\n line-height: 1em;\n white-space: nowrap;\n}\n\n.kg-audio-duration {\n padding: 0 4px;\n}\n\n.kg-audio-play-icon,\n.kg-audio-pause-icon {\n position: relative;\n bottom: 1px;\n padding: 0px 4px 0 0;\n font-size: 0;\n background: transparent;\n}\n\n.kg-audio-hide {\n display: none !important;\n}\n\n.kg-audio-play-icon svg,\n.kg-audio-pause-icon svg {\n width: 14px;\n height: 14px;\n fill: currentColor;\n}\n\n.kg-audio-seek-slider {\n flex-grow: 1;\n margin: 0 4px;\n}\n\n@media (max-width: 640px) {\n .kg-audio-seek-slider {\n display: none;\n }\n}\n\n.kg-audio-playback-rate {\n min-width: 37px;\n padding: 0 4px;\n font-family: inherit;\n font-size: 12.5px;\n font-weight: 600;\n line-height: 1em;\n text-align: left;\n background: transparent;\n white-space: nowrap;\n}\n\n@media (max-width: 640px) {\n .kg-audio-playback-rate {\n padding-left: 8px;\n }\n}\n\n.kg-audio-mute-icon,\n.kg-audio-unmute-icon {\n position: relative;\n bottom: -1px;\n padding: 0 4px;\n font-size: 0;\n background: transparent;\n}\n\n@media (max-width: 640px) {\n .kg-audio-mute-icon,\n .kg-audio-unmute-icon {\n margin-left: auto;\n }\n}\n\n.kg-audio-mute-icon svg,\n.kg-audio-unmute-icon svg {\n width: 16px;\n height: 16px;\n fill: currentColor;\n}\n\n.kg-audio-volume-slider {\n width: 80px;\n}\n\n@media (max-width: 400px) {\n .kg-audio-volume-slider {\n display: none;\n }\n}\n\n.kg-audio-seek-slider::before {\n content: \"\";\n position: absolute;\n left: 0;\n width: var(--seek-before-width) !important;\n height: 4px;\n cursor: pointer;\n background-color: currentColor;\n border-radius: 2px;\n}\n\n.kg-audio-volume-slider::before {\n content: \"\";\n position: absolute;\n left: 0;\n width: var(--volume-before-width) !important;\n height: 4px;\n cursor: pointer;\n background-color: currentColor;\n border-radius: 2px;\n}\n\n/* Resetting browser styles\n/* --------------------------------------------------------------- */\n\n.kg-audio-player-container input[type=range] {\n position: relative;\n -webkit-appearance: none;\n background: transparent;\n}\n\n.kg-audio-player-container input[type=range]:focus {\n outline: none;\n}\n\n.kg-audio-player-container input[type=range]::-webkit-slider-thumb {\n -webkit-appearance: none;\n}\n\n.kg-audio-player-container input[type=range]::-ms-track {\n cursor: pointer;\n border-color: transparent;\n color: transparent;\n background: transparent;\n}\n\n.kg-audio-player-container button {\n display: flex;\n align-items: center;\n border: 0;\n cursor: pointer;\n}\n\n.kg-audio-player-container input[type=\"range\"] {\n height: auto;\n padding: 0;\n border: 0;\n}\n\n/* Chrome & Safari styles\n/* --------------------------------------------------------------- */\n\n.kg-audio-player-container input[type=\"range\"]::-webkit-slider-runnable-track {\n width: 100%;\n height: 4px;\n cursor: pointer;\n background: rgba(124, 139, 154, 0.25);\n border-radius: 2px;\n}\n\n.kg-audio-player-container input[type=\"range\"]::-webkit-slider-thumb {\n position: relative;\n box-sizing: content-box;\n width: 13px;\n height: 13px;\n margin: -5px 0 0 0;\n border: 0;\n cursor: pointer;\n background: #fff;\n border-radius: 50%;\n box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);\n}\n\n.kg-audio-player-container input[type=\"range\"]:active::-webkit-slider-thumb {\n transform: scale(1.2);\n}\n\n/* Firefox styles\n/* --------------------------------------------------------------- */\n\n.kg-audio-player-container input[type=\"range\"]::-moz-range-track {\n width: 100%;\n height: 4px;\n cursor: pointer;\n background: rgba(124, 139, 154, 0.25);\n border-radius: 2px;\n}\n\n.kg-audio-player-container input[type=\"range\"]::-moz-range-progress {\n background: currentColor;\n border-radius: 2px;\n}\n\n.kg-audio-player-container input[type=\"range\"]::-moz-range-thumb {\n box-sizing: content-box;\n width: 13px;\n height: 13px;\n border: 0;\n cursor: pointer;\n background: #fff;\n border-radius: 50%;\n box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);\n}\n\n.kg-audio-player-container input[type=\"range\"]:active::-moz-range-thumb {\n transform: scale(1.2);\n}\n\n/* Edge & IE styles\n/* --------------------------------------------------------------- */\n\n.kg-audio-player-container input[type=\"range\"]::-ms-track {\n width: 100%;\n height: 3px;\n border: solid transparent;\n color: transparent;\n cursor: pointer;\n background: transparent;\n}\n\n.kg-audio-player-container input[type=\"range\"]::-ms-fill-lower {\n background: #fff;\n}\n\n.kg-audio-player-container input[type=\"range\"]::-ms-fill-upper {\n background: currentColor;\n}\n\n.kg-audio-player-container input[type=\"range\"]::-ms-thumb {\n box-sizing: content-box;\n width: 13px;\n height: 13px;\n border: 0;\n cursor: pointer;\n background: #fff;\n border-radius: 50%;\n box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);\n}\n\n.kg-audio-player-container input[type=\"range\"]:active::-ms-thumb {\n transform: scale(1.2);\n}\n", Ae = /* @__PURE__ */ e({ default: () => Z }), Z = ".kg-blockquote-alt {\n font-size: 1.5em;\n font-style: italic;\n line-height: 1.7em;\n text-align: center;\n padding: 0 2.5em;\n}\n\n@media (max-width: 800px) {\n .kg-blockquote-alt {\n font-size: 1.4em;\n padding-left: 2em;\n padding-right: 2em;\n }\n}\n\n@media (max-width: 600px) {\n .kg-blockquote-alt {\n font-size: 1.2em;\n padding-left: 1.75em;\n padding-right: 1.75em;\n } \n}\n", je = /* @__PURE__ */ e({ default: () => Me }), Me = ".kg-bookmark-card,\n.kg-bookmark-card * {\n box-sizing: border-box;\n}\n\n.kg-bookmark-card,\n.kg-bookmark-publisher {\n position: relative;\n /* width: 100%; */\n}\n\n.kg-bookmark-card a.kg-bookmark-container,\n.kg-bookmark-card a.kg-bookmark-container:hover {\n display: flex;\n background: #fff;\n text-decoration: none;\n border-radius: 6px;\n border: 1px solid rgb(124 139 154 / 25%);\n overflow: hidden;\n color: #222;\n}\n\n.kg-bookmark-content {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n flex-basis: 100%;\n align-items: flex-start;\n justify-content: flex-start;\n padding: 20px;\n overflow: hidden;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n}\n\n.kg-bookmark-title {\n font-size: 15px;\n line-height: 1.4em;\n font-weight: 600;\n}\n\n.kg-bookmark-description {\n display: -webkit-box;\n font-size: 14px;\n line-height: 1.5em;\n margin-top: 3px;\n font-weight: 400;\n max-height: 44px;\n overflow-y: hidden;\n opacity: 0.7;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n.kg-bookmark-metadata {\n display: flex;\n align-items: center;\n margin-top: 22px;\n width: 100%;\n font-size: 14px;\n font-weight: 500;\n white-space: nowrap;\n}\n\n.kg-bookmark-metadata > *:not(img) {\n opacity: 0.7;\n}\n\n.kg-bookmark-icon {\n width: 20px;\n height: 20px;\n margin-right: 6px;\n}\n\n.kg-bookmark-author,\n.kg-bookmark-publisher {\n display: inline;\n}\n\n.kg-bookmark-publisher {\n text-overflow: ellipsis;\n overflow: hidden;\n max-width: 240px;\n white-space: nowrap;\n display: block;\n line-height: 1.65em;\n}\n\n.kg-bookmark-metadata > span:nth-of-type(2) {\n font-weight: 400;\n}\n\n.kg-bookmark-metadata > span:nth-of-type(2):before {\n content: \"•\";\n margin: 0 6px;\n}\n\n.kg-bookmark-metadata > span:last-of-type {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.kg-bookmark-thumbnail {\n position: relative;\n flex-grow: 1;\n min-width: 33%;\n}\n\n.kg-bookmark-thumbnail img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n position: absolute;\n top: 0;\n left: 0;\n border-radius: 0 2px 2px 0;\n}\n", Ne = /* @__PURE__ */ e({ default: () => Q }), Q = ".kg-button-card,\n.kg-button-card * {\n box-sizing: border-box;\n}\n\n.kg-button-card {\n display: flex;\n position: static;\n align-items: center;\n width: 100%;\n justify-content: center;\n}\n\n.kg-button-card.kg-align-left {\n justify-content: flex-start;\n}\n\n.kg-button-card a.kg-btn {\n display: flex;\n position: static;\n align-items: center;\n padding: 0 1.2em;\n height: 2.4em;\n line-height: 1em;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n font-size: 0.95em;\n font-weight: 600;\n text-decoration: none;\n border-radius: 5px;\n transition: opacity 0.2s ease-in-out;\n}\n\n.kg-button-card a.kg-btn:hover {\n opacity: 0.85;\n}\n\n.kg-button-card a.kg-btn-accent {\n background-color: var(--ghost-accent-color);\n color: #fff;\n}", Pe = /* @__PURE__ */ e({ default: () => Fe }), Fe = ".kg-callout-card,\n.kg-callout-card * {\n box-sizing: border-box;\n}\n\n.kg-callout-card {\n display: flex;\n padding: 1.2em 1.6em;\n border-radius: 8px;\n}\n\n.kg-callout-card-grey {\n background: rgba(124, 139, 154, 0.13);\n}\n\n.kg-callout-card-white {\n background: transparent;\n box-shadow: inset 0 0 0 1px rgba(124, 139, 154, 0.2);\n}\n\n.kg-callout-card-blue {\n background: rgba(33, 172, 232, 0.12);\n}\n\n.kg-callout-card-green {\n background: rgba(52, 183, 67, 0.12);\n}\n\n.kg-callout-card-yellow {\n background: rgba(240, 165, 15, 0.13);\n}\n\n.kg-callout-card-red {\n background: rgba(209, 46, 46, 0.11);\n}\n\n.kg-callout-card-pink {\n background: rgba(225, 71, 174, 0.11);\n}\n\n.kg-callout-card-purple {\n background: rgba(135, 85, 236, 0.12);\n}\n\n.kg-callout-card-accent {\n background: var(--ghost-accent-color);\n color: #fff;\n}\n\n.kg-callout-card.kg-callout-card-accent a {\n color: #fff;\n text-decoration: underline;\n}\n\n.kg-callout-card div.kg-callout-emoji {\n padding-right: .8em;\n line-height: 1.25em;\n font-size: 1.15em;\n}\n\n.kg-callout-card div.kg-callout-text {\n font-size: .95em;\n line-height: 1.5em;\n}\n\n.kg-callout-card + .kg-callout-card {\n margin-top: 1em;\n}", Ie = /* @__PURE__ */ e({ default: () => Le }), Le = ".kg-collection-card {\n width: 100%;\n margin-top: 6vmin;\n}\n\n.kg-collection-card + * { \n margin-top: 6vmin; \n}\n\n.kg-collection-card-title {\n margin: .8rem 0 1.6rem 0;\n font-size: 1.5rem;\n font-weight: 700;\n text-transform: uppercase;\n}\n\na.kg-collection-card-post-wrapper {\n text-decoration: none;\n color: var(--text-color);\n}\n\na.kg-collection-card-post-wrapper:hover {\n opacity: 1;\n}\n\n\n.kg-collection-card-post {\n display: flex;\n gap: 3.2rem;\n}\n\n.kg-collection-card-img {\n position: relative;\n aspect-ratio: 3/2;\n}\n\n.kg-collection-card-img img {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\na.kg-collection-card-post-wrapper:hover img {\n opacity: .92;\n transition: all .2s ease;\n}\n\n.kg-collection-card-content {\n display: flex;\n flex-direction: column;\n font-size: 1.6rem;\n}\n\nh2.kg-collection-card-post-title {\n margin: 0;\n font-size: 2.4rem;\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n}\n\np.kg-collection-card-post-excerpt {\n margin-top: 1.2rem;\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n line-height: 1.4;\n}\n\n.kg-collection-card-post-meta {\n display: flex;\n opacity: .5;\n margin-top: 1.2rem;\n font-size: 1.3rem;\n font-weight: 500;\n}\n\n/* List layout */\n\n.kg-collection-card-list {\n display: flex;\n flex-direction: column;\n gap: 3.2rem;\n}\n\n@media (max-width: 767px) {\n .kg-collection-card-list .kg-collection-card-post {\n flex-direction: column;\n }\n}\n\n.kg-collection-card-list .kg-collection-card-img {\n flex: 0 0 30%;\n}\n\n/* Grid layout */\n\n.kg-collection-card-grid {\n display: grid;\n grid-template-columns: repeat(1,minmax(0,1fr));\n gap: 2.4rem;\n}\n\n@media (min-width: 640px) {\n .kg-collection-card-grid:not(.columns-1) {\n grid-template-columns: repeat(2,minmax(0,1fr));\n }\n}\n\n@media (min-width: 1024px) {\n .kg-collection-card-grid:not(.columns-1):not(.columns-2) {\n grid-template-columns: repeat(3,minmax(0,1fr));\n gap: 3.2rem\n }\n\n .kg-collection-card-grid.columns-1 {\n gap: 4.8rem\n }\n\n .kg-collection-card-grid.columns-2 {\n gap: 4rem\n }\n}\n\n@media (min-width: 1280px) {\n .kg-collection-card-grid:not(.columns-1):not(.columns-2):not(.columns-3) {\n grid-template-columns: repeat(4,minmax(0,1fr));\n }\n}\n\n.kg-collection-card-grid .kg-collection-card-post {\n flex-direction: column;\n gap: 1.2rem;\n}\n\n@media (min-width: 1024px) {\n .kg-collection-card-grid.columns-1 .kg-collection-card-post {\n gap: 2rem\n }\n\n .kg-collection-card-grid.columns-2 .kg-collection-card-post {\n gap: 1.6rem\n }\n}\n\n.kg-collection-card-grid.columns-1 .kg-collection-card-img,\n.kg-collection-card-grid.columns-2 .kg-collection-card-img {\n aspect-ratio: 16/9;\n}\n\n.kg-collection-card-grid .kg-collection-card-content {\n font-size: 1.5rem;\n}\n\n@media (min-width: 640px) {\n .kg-collection-card-grid .kg-collection-card-content {\n font-size: 1.6rem;\n }\n}\n\n@media (min-width: 1024px) {\n .kg-collection-card-grid.columns-1 .kg-collection-card-content {\n font-size: 1.8rem;\n }\n\n .kg-collection-card-grid.columns-3 .kg-collection-card-content,\n .kg-collection-card-grid.columns-4 .kg-collection-card-content {\n font-size: 1.5rem;\n }\n}\n\n.kg-collection-card-grid h2.kg-collection-card-post-title {\n font-size: 1.7rem;\n}\n\n.kg-collection-card-grid .kg-collection-card-post-meta {\n font-size: 1.25rem;\n}\n\n@media (min-width: 640px) {\n .kg-collection-card-grid h2.kg-collection-card-post-title {\n font-size: 1.9rem;\n }\n\n .kg-collection-card-grid.columns-1 h2.kg-collection-card-post-title {\n font-size: 2.4rem;\n }\n\n .kg-collection-card-grid:not(.columns-3):not(.columns-4) .kg-collection-card-post-meta {\n font-size: 1.3rem;\n }\n}\n\n@media (min-width: 1024px) {\n .kg-collection-card-grid.columns-1 h2.kg-collection-card-post-title {\n font-size: 3.6rem;\n }\n\n .kg-collection-card-grid.columns-2 h2.kg-collection-card-post-title {\n font-size: 2.4rem;\n }\n\n .kg-collection-card-grid.columns-1 .kg-collection-card-post-meta {\n font-size: 1.4rem;\n }\n}\n\n@media (min-width: 1280px) {\n .kg-collection-card-grid.columns-4 h2.kg-collection-card-post-title {\n font-size: 1.7rem;\n }\n}", Re = /* @__PURE__ */ e({ default: () => ze }), ze = ".kg-cta-card,\n.kg-cta-card * {\n box-sizing: border-box;\n}\n\n.kg-cta-card {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n}\n\n.kg-cta-bg-grey {\n background: rgba(151, 163, 175, 0.14)\n}\n\n.kg-cta-bg-white {\n background: transparent;\n box-shadow: inset 0 0 0 1px rgba(124, 139, 154, 0.2);\n}\n\n.kg-cta-bg-blue {\n background: rgba(33, 172, 232, 0.12);\n}\n\n.kg-cta-bg-green {\n background: rgba(52, 183, 67, 0.12);\n}\n\n.kg-cta-bg-yellow {\n background: rgba(240, 165, 15, 0.13);\n}\n\n.kg-cta-bg-red {\n background: rgba(209, 46, 46, 0.11);\n}\n\n.kg-cta-bg-pink {\n background: rgba(225, 71, 174, 0.11);\n}\n\n.kg-cta-bg-purple {\n background: rgba(135, 85, 236, 0.12);\n}\n\n.kg-cta-sponsor-label-wrapper {\n margin: 0 1.5em;\n padding: .7em 0;\n border-bottom: 1px solid rgba(124, 139, 154, 0.2);\n}\n\n@media (max-width: 600px) {\n .kg-cta-sponsor-label-wrapper {\n margin: 0 1.25em;\n padding: .5em 0;\n }\n}\n\n.kg-cta-bg-none .kg-cta-sponsor-label-wrapper {\n margin: 0;\n padding-top: 0;\n}\n\n.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),\n.kg-cta-bg-none.kg-cta-no-dividers .kg-cta-sponsor-label-wrapper {\n border-bottom: 0;\n}\n\n.kg-cta-sponsor-label {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n text-wrap: pretty;\n}\n\n.kg-cta-sponsor-label span:not(a span) {\n color: color-mix(in srgb, currentColor 45%, transparent);\n}\n\n.kg-cta-sponsor-label a,\n.kg-cta-sponsor-label a span {\n color: currentColor;\n transition: opacity 0.15s ease-in-out;\n}\n\n.kg-cta-sponsor-label a:hover,\n.kg-cta-sponsor-label a:hover span {\n color: currentColor;\n opacity: 0.85;\n}\n\n.kg-cta-link-accent .kg-cta-sponsor-label a {\n color: var(--ghost-accent-color);\n}\n\n.kg-cta-content {\n display: flex;\n padding: 1.5em;\n gap: 1.5em;\n}\n\n@media (max-width: 600px) {\n .kg-cta-content {\n padding: 1.25em;\n gap: 1.25em;\n }\n}\n\n.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) {\n padding-top: 0;\n}\n\n.kg-cta-bg-none .kg-cta-content {\n padding: 1.5em 0;\n border-bottom: 1px solid rgba(124, 139, 154, 0.2);\n}\n\n.kg-cta-bg-none.kg-cta-no-dividers .kg-cta-content {\n padding: 0;\n border-bottom: none;\n}\n\n.kg-cta-bg-none:not(.kg-cta-no-dividers) .kg-cta-content:not(.kg-cta-sponsor-label-wrapper + .kg-cta-content) {\n border-top: 1px solid rgba(124, 139, 154, 0.2);\n}\n\n@media (max-width: 600px) {\n .kg-cta-bg-none .kg-cta-content {\n padding: 1.25em 0;\n }\n}\n\n.kg-cta-minimal .kg-cta-content {\n flex-direction: row;\n}\n\n@media (max-width: 600px) {\n .kg-cta-minimal .kg-cta-content {\n flex-direction: column;\n gap: 1.6rem;\n }\n}\n\n.kg-cta-immersive .kg-cta-content {\n flex-direction: column;\n}\n\n.kg-cta-content-inner {\n display: flex;\n flex-direction: column;\n gap: 1.5em;\n}\n\n@media (max-width: 600px) {\n .kg-cta-content-inner {\n gap: 1.25em;\n }\n}\n\n.kg-cta-immersive.kg-cta-centered .kg-cta-content-inner {\n align-items: center;\n}\n\n.kg-cta-image-container {\n flex-shrink: 0;\n}\n\n.kg-cta-image-container img {\n width: 100%;\n height: auto;\n margin: 0;\n object-fit: cover;\n border-radius: 6px;\n}\n\n\n.kg-cta-minimal .kg-cta-image-container img {\n width: 64px;\n height: 64px;\n}\n\n@media (max-width: 600px) {\n .kg-cta-minimal .kg-cta-image-container img {\n width: 52px;\n height: 52px;\n }\n}\n\n.kg-cta-text p {\n margin: 0;\n line-height: 1.5em;\n text-wrap: pretty;\n}\n\n.kg-cta-bg-none .kg-cta-text p {\n line-height: unset;\n}\n\n.kg-cta-immersive.kg-cta-centered .kg-cta-text {\n text-align: center;\n}\n\n.kg-cta-text p + p {\n margin-top: 1.25em;\n}\n\n.kg-cta-text a {\n color: currentColor;\n transition: opacity 0.15s ease-in-out;\n}\n\n.kg-cta-text a:hover {\n color: currentColor;\n opacity: 0.85;\n}\n\n.kg-cta-link-accent .kg-cta-text a {\n color: var(--ghost-accent-color);\n}\n\na.kg-cta-button {\n display: flex;\n position: static;\n align-items: center;\n justify-content: center;\n padding: 0 1em;\n height: 2.5em;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n font-size: 0.95em;\n font-weight: 500;\n line-height: 1.65;\n text-decoration: none;\n border-radius: 6px;\n transition: opacity 0.15s ease-in-out;\n}\n\na.kg-cta-button:hover {\n opacity: 0.85;\n}\n\na.kg-cta-button.kg-style-accent {\n background-color: var(--ghost-accent-color);\n}\n\na.kg-cta-button {\n width: max-content;\n}\n\n.kg-cta-immersive.kg-cta-has-img a.kg-cta-button {\n width: 100%;\n}\n\n", Be = /* @__PURE__ */ e({ default: () => Ve }), Ve = ".kg-file-card,\n.kg-file-card * {\n box-sizing: border-box;\n}\n\n.kg-file-card {\n display: flex;\n}\n\n.kg-file-card a.kg-file-card-container {\n display: flex;\n align-items: stretch;\n justify-content: space-between;\n color: inherit;\n padding: 12px;\n min-height: 92px;\n background: #fff;\n color: #222;\n border: 1px solid rgb(124 139 154 / 25%);\n border-radius: 5px;\n transition: all ease-in-out 0.35s;\n text-decoration: none;\n width: 100%;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n}\n\n.kg-file-card a.kg-file-card-container:hover {\n border: 1px solid rgb(124 139 154 / 35%);\n}\n\n.kg-file-card-contents {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n margin: 4px 8px;\n width: 100%\n}\n\n.kg-file-card-title {\n font-size: 16px;\n font-weight: 600;\n line-height: 1.3em;\n}\n\n.kg-file-card-caption {\n font-size: 14px;\n line-height: 1.3em;\n opacity: 0.7;\n}\n\n.kg-file-card-title + .kg-file-card-caption {\n flex-grow: 1;\n margin-top: 3px;\n}\n\n.kg-file-card-metadata {\n display: inline;\n font-size: 14px;\n line-height: 1.3em;\n margin-top: 5px;\n}\n\n.kg-file-card-filename {\n display: inline;\n font-weight: 500;\n}\n\n.kg-file-card-filesize {\n display: inline-block;\n font-size: 14px;\n opacity: 0.6;\n}\n\n.kg-file-card-filesize:before {\n display: inline-block;\n content: \"\\2022\";\n margin-left: 6px;\n margin-right: 6px;\n}\n\n.kg-file-card-icon {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 80px;\n min-width: 80px;\n height: 100%;\n min-height: 80px;\n}\n\n.kg-file-card-icon:before {\n position: absolute;\n display: block;\n content: \"\";\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: currentColor;\n opacity: 0.06;\n transition: opacity ease-in-out 0.35s;\n border-radius: 3px;\n}\n\n.kg-file-card a.kg-file-card-container:hover .kg-file-card-icon:before {\n opacity: 0.08;\n}\n\n.kg-file-card-icon svg {\n width: 24px;\n height: 24px;\n color: var(--ghost-accent-color);\n}\n\n/* Size variations */\n.kg-file-card-medium a.kg-file-card-container {\n min-height: 72px;\n}\n\n.kg-file-card-medium .kg-file-card-caption {\n opacity: 1.0;\n font-weight: 500;\n}\n\n.kg-file-card-small a.kg-file-card-container {\n align-items: center;\n min-height: 52px;\n}\n\n.kg-file-card-small .kg-file-card-metadata {\n font-size: 14px;\n margin-top: 0;\n}\n\n.kg-file-card-small .kg-file-card-icon svg {\n width: 20px;\n height: 20px;\n}\n\n.kg-file-card + .kg-file-card {\n margin-top: 1em;\n}\n", He = /* @__PURE__ */ e({ default: () => Ue }), Ue = ".kg-gallery-card,\n.kg-gallery-card * {\n box-sizing: border-box;\n}\n\n.kg-gallery-card,\n.kg-image-card {\n --gap: 1.2rem;\n}\n\n.kg-image-card:not(.kg-card-hascaption) + .kg-image-card,\n.kg-image-card:not(.kg-card-hascaption) + .kg-gallery-card,\n.kg-gallery-card:not(.kg-card-hascaption) + .kg-image-card,\n.kg-gallery-card:not(.kg-card-hascaption) + .kg-gallery-card {\n margin-top: var(--gap);\n}\n\n.kg-gallery-container {\n position: relative;\n}\n\n.kg-gallery-row {\n display: flex;\n flex-direction: row;\n justify-content: center;\n}\n\n.kg-gallery-image img {\n display: block;\n margin: 0;\n width: 100%;\n height: 100%;\n}\n\n.kg-gallery-row:not(:first-of-type) {\n margin: var(--gap) 0 0;\n}\n\n.kg-gallery-image:not(:first-of-type) {\n margin: 0 0 0 var(--gap);\n}\n\n@media (max-width: 600px) {\n .kg-gallery-card,\n .kg-image-card {\n --gap: 0.6rem;\n }\n}\n", We = /* @__PURE__ */ e({ default: () => Ge }), Ge = ".kg-header-card,\n.kg-header-card * {\n box-sizing: border-box;\n}\n\n.kg-header-card {\n padding: 12vmin 4em;\n min-height: 60vh;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n}\n\n.kg-header-card.kg-size-small {\n padding-top: 14vmin;\n padding-bottom: 14vmin;\n min-height: 40vh;\n}\n\n.kg-header-card.kg-size-large {\n padding-top: 18vmin;\n padding-bottom: 18vmin;\n min-height: 80vh;\n}\n\n.kg-header-card.kg-align-left {\n text-align: left;\n align-items: flex-start;\n}\n\n.kg-header-card.kg-style-dark {\n background: #151515;\n color: #ffffff;\n}\n\n.kg-header-card.kg-style-light {\n background-color: #fafafa;\n}\n\n.kg-header-card.kg-style-accent {\n background-color: var(--ghost-accent-color);\n}\n\n.kg-header-card.kg-style-image {\n position: relative;\n background-color: #e7e7e7;\n background-size: cover;\n background-position: center;\n}\n\n.kg-header-card.kg-style-image::before {\n position: absolute;\n display: block;\n content: \"\";\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: linear-gradient(0deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2));\n}\n\n.kg-header-card h2.kg-header-card-header {\n font-size: 5em;\n font-weight: 700;\n line-height: 1.1em;\n letter-spacing: -0.01em;\n margin: 0;\n}\n\n.kg-header-card h2.kg-header-card-header strong {\n font-weight: 800;\n}\n\n.kg-header-card.kg-size-small h2.kg-header-card-header {\n font-size: 4em;\n}\n\n.kg-header-card.kg-size-large h2.kg-header-card-header {\n font-size: 6em;\n}\n\n.kg-header-card h3.kg-header-card-subheader {\n font-size: 1.5em;\n font-weight: 500;\n line-height: 1.4em;\n margin: 0;\n max-width: 40em;\n}\n\n.kg-header-card h2 + h3.kg-header-card-subheader {\n margin: 0.35em 0 0;\n}\n\n.kg-header-card h3.kg-header-card-subheader strong {\n font-weight: 600;\n}\n\n.kg-header-card.kg-size-small h3.kg-header-card-subheader {\n font-size: 1.25em;\n}\n\n.kg-header-card.kg-size-large h3.kg-header-card-subheader {\n font-size: 1.75em;\n}\n\n.kg-header-card:not(.kg-style-light) h2.kg-header-card-header,\n.kg-header-card:not(.kg-style-light) h3.kg-header-card-subheader {\n color: #ffffff;\n}\n\n.kg-header-card.kg-style-accent h3.kg-header-card-subheader,\n.kg-header-card.kg-style-image h3.kg-header-card-subheader {\n opacity: 1.0;\n}\n\n.kg-header-card.kg-style-image h2.kg-header-card-header,\n.kg-header-card.kg-style-image h3.kg-header-card-subheader,\n.kg-header-card.kg-style-image a.kg-header-card-button {\n z-index: 999;\n}\n\n.kg-header-card h2.kg-header-card-header a,\n.kg-header-card h3.kg-header-card-subheader a {\n color: var(--ghost-accent-color);\n}\n\n.kg-header-card.kg-style-accent h2.kg-header-card-header a,\n.kg-header-card.kg-style-accent h3.kg-header-card-subheader a,\n.kg-header-card.kg-style-image h2.kg-header-card-header a,\n.kg-header-card.kg-style-image h3.kg-header-card-subheader a {\n color: #fff;\n}\n\n.kg-header-card a.kg-header-card-button {\n display: flex;\n position: static;\n align-items: center;\n fill: #fff;\n background: #fff;\n border-radius: 3px;\n outline: none;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n font-size: 1.05em;\n font-weight: 600;\n line-height: 1em;\n text-align: center;\n text-decoration: none;\n letter-spacing: .2px;\n white-space: nowrap;\n text-overflow: ellipsis;\n color: #151515;\n height: 2.7em;\n padding: 0 1.2em;\n transition: opacity .2s ease;\n}\n\n.kg-header-card h2 + a.kg-header-card-button,\n.kg-header-card h3 + a.kg-header-card-button {\n margin: 1.75em 0 0;\n}\n\n.kg-header-card a.kg-header-card-button:hover {\n opacity: 0.85;\n}\n\n.kg-header-card.kg-size-large a.kg-header-card-button {\n font-size: 1.1em;\n height: 2.9em;\n}\n\n.kg-header-card.kg-size-large h2 + a.kg-header-card-button,\n.kg-header-card.kg-size-large h3 + a.kg-header-card-button {\n margin-top: 2em;\n}\n\n.kg-header-card.kg-size-small a.kg-header-card-button {\n height: 2.4em;\n font-size: 1em;\n}\n\n.kg-header-card.kg-size-small h2 + a.kg-header-card-button,\n.kg-header-card.kg-size-small h3 + a.kg-header-card-button {\n margin-top: 1.5em;\n}\n\n.kg-header-card.kg-style-image a.kg-header-card-button,\n.kg-header-card.kg-style-dark a.kg-header-card-button {\n background: #fff;\n color: #151515;\n}\n\n.kg-header-card.kg-style-light a.kg-header-card-button {\n background: var(--ghost-accent-color);\n color: #fff;\n}\n\n.kg-header-card.kg-style-accent a.kg-header-card-button {\n background: #fff;\n color: #151515;\n}\n\n@media (max-width: 640px) {\n .kg-header-card {\n padding-left: 1em;\n padding-right: 1em;\n }\n\n .kg-header-card h2.kg-header-card-header {\n font-size: 3.5em;\n }\n\n .kg-header-card.kg-size-large h2.kg-header-card-header {\n font-size: 4em;\n }\n\n .kg-header-card.kg-size-small h2.kg-header-card-header {\n font-size: 3em;\n }\n\n .kg-header-card h3.kg-header-card-subheader {\n font-size: 1.25em;\n }\n\n .kg-header-card.kg-size-large h3.kg-header-card-subheader {\n font-size: 1.5em;\n }\n\n .kg-header-card.kg-size-small h3.kg-header-card-subheader {\n font-size: 1em;\n }\n}\n", Ke = /* @__PURE__ */ e({ default: () => qe }), qe = ".kg-header-card.kg-v2 {\n position: relative;\n padding: 0;\n min-height: initial;\n text-align: initial;\n}\n\n.kg-header-card.kg-v2,\n.kg-header-card.kg-v2 * {\n box-sizing: border-box;\n}\n\n.kg-header-card.kg-v2 a,\n.kg-header-card.kg-v2 a span {\n color: currentColor;\n}\n\n.kg-header-card.kg-style-accent.kg-v2 {\n background-color: var(--ghost-accent-color);\n}\n\n.kg-header-card-content {\n width: 100%;\n}\n\n.kg-layout-split .kg-header-card-content {\n display: grid;\n grid-template-columns: 1fr 1fr;\n}\n\n.kg-header-card-text {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n height: 100%;\n padding: min(6.4vmax, 120px) min(4vmax, 80px);\n background-size: cover;\n background-position: center;\n text-align: left;\n}\n\n.kg-width-wide .kg-header-card-text {\n padding: min(10vmax, 220px) min(6.4vmax, 140px);\n}\n\n.kg-width-full .kg-header-card-text {\n padding: min(12vmax, 260px) 0;\n}\n\n.kg-layout-split .kg-header-card-text {\n padding: min(12vmax, 260px) min(4vmax, 80px);\n}\n\n.kg-layout-split.kg-content-wide .kg-header-card-text {\n padding: min(10vmax, 220px) 0 min(10vmax, 220px) min(4vmax, 80px);\n}\n\n.kg-layout-split.kg-content-wide.kg-swapped .kg-header-card-text {\n padding: min(10vmax, 220px) min(4vmax, 80px) min(10vmax, 220px) 0;\n}\n\n.kg-swapped .kg-header-card-text {\n grid-row: 1;\n}\n\n.kg-header-card-text.kg-align-center {\n align-items: center;\n text-align: center;\n}\n\n.kg-header-card.kg-style-image h2.kg-header-card-heading,\n.kg-header-card.kg-style-image .kg-header-card-subheading,\n.kg-header-card.kg-style-image.kg-v2 .kg-header-card-button {\n z-index: 999;\n}\n\n/* Background image */\n\n.kg-header-card > picture > .kg-header-card-image {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n object-position: center;\n background-color: #FFFFFF;\n pointer-events: none;\n}\n\n/* Split layout image */\n\n.kg-header-card-content .kg-header-card-image {\n width: 100%;\n /* this will force the image to follow the signup card height */\n height: 0;\n min-height: 100%;\n /**/\n object-fit: cover;\n object-position: center;\n}\n\n.kg-content-wide .kg-header-card-content .kg-header-card-image {\n height: 100%;\n padding: 5.6em 0;\n object-fit: contain;\n}\n\n/* Heading */\n\n.kg-header-card h2.kg-header-card-heading {\n margin: 0;\n font-size: clamp(1.7em, 4vw, 2.5em);\n font-weight: 700;\n line-height: 1.05em;\n letter-spacing: -0.01em;\n}\n\n.kg-header-card.kg-width-wide h2.kg-header-card-heading {\n font-size: clamp(1.7em, 5vw, 3.3em);\n}\n\n.kg-header-card.kg-width-full h2.kg-header-card-heading {\n font-size: clamp(1.9em, 5.6vw, 4.2em);\n}\n\n.kg-header-card.kg-width-full.kg-layout-split h2.kg-header-card-heading {\n font-size: clamp(1.9em, 4vw, 3.3em);\n}\n\n/* Subheading */\n\n.kg-header-card-subheading {\n margin: 0 0 2em;\n}\n\n.kg-header-card .kg-header-card-subheading {\n max-width: 40em;\n margin: 0;\n font-size: clamp(1.05em, 2vw, 1.4em);\n font-weight: 500;\n line-height: 1.2em;\n}\n\n.kg-header-card h2 + .kg-header-card-subheading {\n margin: 0.6em 0 0;\n}\n\n.kg-header-card .kg-header-card-subheading strong {\n font-weight: 600;\n}\n\n.kg-header-card.kg-width-wide .kg-header-card-subheading {\n font-size: clamp(1.05em, 2vw, 1.55em);\n}\n\n.kg-header-card.kg-width-full .kg-header-card-subheading:not(.kg-layout-split .kg-header-card-subheading) {\n max-width: min(65vmax, 1200px);\n font-size: clamp(1.05em, 2vw, 1.7em);\n}\n\n.kg-header-card.kg-width-full.kg-layout-split .kg-header-card-subheading {\n font-size: clamp(1.05em, 2vw, 1.55em);\n}\n\n.kg-header-card.kg-v2 .kg-header-card-button {\n display: flex;\n position: relative;\n align-items: center;\n height: 2.9em;\n min-height: 46px;\n padding: 0 1.2em;\n outline: none;\n border: none;\n font-size: 1em;\n font-weight: 600;\n line-height: 1em;\n text-align: center;\n text-decoration: none;\n letter-spacing: .2px;\n white-space: nowrap;\n text-overflow: ellipsis;\n border-radius: 3px;\n transition: opacity .2s ease;\n}\n\n.kg-header-card.kg-v2 .kg-header-card-button.kg-style-accent {\n background-color: var(--ghost-accent-color);\n}\n\n.kg-header-card.kg-v2 h2 + .kg-header-card-button,\n.kg-header-card.kg-v2 p + .kg-header-card-button {\n margin: 1.5em 0 0;\n}\n\n.kg-header-card.kg-v2 .kg-header-card-button:hover {\n opacity: 0.85;\n}\n\n.kg-header-card.kg-v2.kg-width-wide .kg-header-card-button {\n font-size: 1.05em;\n}\n\n.kg-header-card.kg-v2.kg-width-wide h2 + .kg-header-card-button,\n.kg-header-card.kg-v2.kg-width-wide p + .kg-header-card-button {\n margin-top: 1.75em;\n}\n\n.kg-header-card.kg-v2.kg-width-full .kg-header-card-button {\n font-size: 1.1em;\n}\n\n.kg-header-card.kg-v2.kg-width-full h2 + .kg-header-card-button,\n.kg-header-card.kg-v2.kg-width-full p + .kg-header-card-button {\n margin-top: 2em;\n}\n\n/* Responsive styles */\n\n@media (max-width: 640px) {\n .kg-layout-split .kg-header-card-content {\n grid-template-columns: 1fr;\n }\n\n .kg-width-wide .kg-header-card-text {\n padding: min(6.4vmax, 120px) min(4vmax, 80px);\n }\n\n .kg-layout-split.kg-content-wide .kg-header-card-text,\n .kg-layout-split.kg-content-wide.kg-swapped .kg-header-card-text {\n padding: min(9.6vmax, 180px) 0;\n }\n\n .kg-header-card.kg-width-full .kg-header-card-subheading:not(.kg-layout-split .kg-header-card-subheading) {\n max-width: unset;\n }\n\n .kg-header-card-content .kg-header-card-image:not(.kg-content-wide .kg-header-card-content .kg-header-card-image) {\n height: auto;\n min-height: unset;\n aspect-ratio: 1 / 1;\n }\n\n .kg-content-wide .kg-header-card-content .kg-header-card-image {\n padding: 1.7em 0 0;\n }\n\n .kg-content-wide.kg-swapped .kg-header-card-content .kg-header-card-image {\n padding: 0 0 1.7em;\n }\n\n .kg-header-card.kg-v2 .kg-header-card-button {\n height: 2.9em;\n }\n\n .kg-header-card.kg-v2.kg-width-wide .kg-header-card-button,\n .kg-header-card.kg-v2.kg-width-full .kg-header-card-button {\n font-size: 1em;\n }\n}\n", Je = /* @__PURE__ */ e({ default: () => Ye }), Ye = ".kg-nft-card,\n.kg-nft-card * {\n box-sizing: border-box;\n}\n\n.kg-nft-card {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n}\n\n.kg-nft-card a.kg-nft-card-container {\n position: static;\n display: flex;\n flex: auto;\n flex-direction: column;\n text-decoration: none;\n font-family: -apple-system, BlinkMacSystemFont,\n 'avenir next', avenir,\n 'helvetica neue', helvetica,\n ubuntu,\n roboto, noto,\n 'segoe ui', arial,\n sans-serif;\n font-size: 14px;\n font-weight: 400;\n box-shadow: 0 2px 6px -2px rgb(0 0 0 / 10%), 0 0 1px rgb(0 0 0 / 40%);\n width: 100%;\n max-width: 512px;\n color: #222;\n background: #fff;\n border-radius: 5px;\n transition: none;\n}\n\n.kg-nft-card * {\n position: static;\n}\n\n.kg-nft-metadata {\n padding: 20px;\n width: 100%;\n}\n\n.kg-nft-image {\n border-radius: 5px 5px 0 0;\n width: 100%;\n}\n\n.kg-nft-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n}\n\n.kg-nft-header h4.kg-nft-title {\n font-family: inherit;\n font-size: 19px;\n font-weight: 700;\n line-height: 1.3em;\n min-width: unset;\n max-width: unset;\n margin: 0;\n color: #222;\n}\n\n.kg-nft-opensea-logo {\n margin-top: 2px;\n width: 100px;\n object-fit: scale-down;\n}\n\n.kg-nft-creator {\n font-family: inherit;\n line-height: 1.4em;\n margin: 4px 0 0;\n color: #ababab;\n}\n\n.kg-nft-creator span {\n font-weight: 500;\n color: #222;\n}\n\n.kg-nft-card p.kg-nft-description {\n font-family: inherit;\n font-size: 14px;\n line-height: 1.4em;\n margin: 20px 0 0;\n color: #222;\n}", Xe = /* @__PURE__ */ e({ default: () => Ze }), Ze = ".kg-product-card,\n.kg-product-card * {\n box-sizing: border-box;\n}\n\n.kg-product-card {\n display: flex;\n align-items: center;\n flex-direction: column;\n width: 100%;\n}\n\n.kg-product-card-container {\n display: grid;\n grid-template-columns: auto min-content;\n align-items: center;\n grid-row-gap: 16px;\n background: transparent;\n max-width: 550px;\n padding: 20px;\n width: 100%;\n background: #fff;\n color: #222;\n border-radius: 5px;\n box-shadow: inset 0 0 0 1px rgb(124 139 154 / 25%);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n}\n\n.kg-product-card-image {\n grid-column: 1 / 3;\n justify-self: center;\n height: auto;\n}\n\n.kg-product-card-title-container {\n grid-column: 1 / 2;\n}\n\n.kg-product-card h4.kg-product-card-title {\n text-decoration: none;\n font-weight: 600;\n font-size: 21px;\n margin-top: 0;\n margin-bottom: 0;\n line-height: 1.15em;\n}\n\n.kg-product-card-description {\n grid-column: 1 / 3;\n}\n\n.kg-product-card .kg-product-card-description p,\n.kg-product-card .kg-product-card-description ol,\n.kg-product-card .kg-product-card-description ul {\n font-size: 14px;\n line-height: 1.5em;\n opacity: .7;\n margin-bottom: 0;\n}\n\n.kg-product-card .kg-product-card-description p:first-of-type {\n margin-top: -4px;\n}\n\n.kg-product-card .kg-product-card-description p:not(:first-of-type),\n.kg-product-card .kg-product-card-description ul,\n.kg-product-card .kg-product-card-description ol {\n margin-top: 0.95em;\n}\n\n.kg-product-card .kg-product-card-description li+li {\n margin-top: 0.5em;\n}\n\n.kg-product-card-rating {\n display: flex;\n align-items: center;\n grid-column: 2 / 3;\n align-self: start;\n justify-self: end;\n padding-left: 16px;\n}\n\n@media (max-width: 400px) {\n .kg-product-card-title-container {\n grid-column: 1 / 3;\n }\n\n .kg-product-card-rating {\n grid-column: 1 / 3;\n justify-self: start;\n margin-top: -15px;\n padding-left: 0;\n }\n}\n\n.kg-product-card-rating-star {\n height: 20px;\n width: 20px;\n}\n\n.kg-product-card-rating-star svg {\n width: 16px;\n height: 16px;\n fill: currentColor;\n opacity: 0.15;\n}\n\n.kg-product-card-rating-active.kg-product-card-rating-star svg {\n opacity: 1;\n}\n\n.kg-product-card a.kg-product-card-button {\n justify-content: center;\n grid-column: 1 / 3;\n display: flex;\n position: static;\n align-items: center;\n font-size: 14px;\n font-weight: 600;\n line-height: 1em;\n text-decoration: none;\n width: 100%;\n height: 38px;\n border-radius: 6px;\n padding: 0 12px;\n transition: opacity 0.2s ease-in-out;\n}\n\n.kg-product-card a.kg-product-card-btn-accent {\n background-color: var(--ghost-accent-color);\n color: #fff;\n}\n", Qe = /* @__PURE__ */ e({ default: () => $e }), $e = ".kg-signup-card {\n position: relative;\n}\n\n.kg-signup-card,\n.kg-signup-card * {\n box-sizing: border-box;\n}\n\n.kg-signup-card a,\n.kg-signup-card a span {\n color: currentColor;\n}\n\n.kg-signup-card.kg-style-accent {\n background-color: var(--ghost-accent-color);\n}\n\n.kg-layout-split .kg-signup-card-content {\n display: grid;\n grid-template-columns: 1fr 1fr;\n}\n\n.kg-signup-card-text {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n height: 100%;\n padding: min(4vmax, 80px);\n background-size: cover;\n background-position: center;\n text-align: left;\n}\n\n.kg-width-wide .kg-signup-card-text {\n padding: min(6.4vmax, 120px);\n}\n\n.kg-width-full .kg-signup-card-text {\n padding: min(12vmax, 260px) 0;\n}\n\n.kg-layout-split .kg-signup-card-text {\n padding: min(12vmax, 260px) min(4vmax, 80px);\n}\n\n.kg-layout-split.kg-content-wide .kg-signup-card-text {\n padding: min(10vmax, 220px) 0 min(10vmax, 220px) min(4vmax, 80px);\n}\n\n.kg-layout-split.kg-content-wide.kg-swapped .kg-signup-card-text {\n padding: min(10vmax, 220px) min(4vmax, 80px) min(10vmax, 220px) 0;\n}\n\n.kg-swapped .kg-signup-card-text {\n grid-row: 1;\n}\n\n.kg-signup-card-text.kg-align-center {\n align-items: center;\n text-align: center;\n}\n\n.kg-signup-card.kg-style-image h2.kg-signup-card-heading,\n.kg-signup-card.kg-style-image .kg-signup-card-subheading,\n.kg-signup-card.kg-style-image .kg-signup-card-button {\n z-index: 999;\n}\n\n/* Background image */\n\n.kg-signup-card > picture > .kg-signup-card-image {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n object-position: center;\n background-color: #FFFFFF;\n pointer-events: none;\n}\n\n/* Split layout image */\n\n.kg-signup-card-content .kg-signup-card-image {\n width: 100%;\n /* this will force the image to follow the signup card height */\n height: 0;\n min-height: 100%;\n /**/\n object-fit: cover;\n object-position: center;\n}\n\n.kg-content-wide .kg-signup-card-content .kg-signup-card-image {\n height: 100%;\n padding: 5.6em 0;\n object-fit: contain;\n}\n\n/* Heading */\n\n.kg-signup-card h2.kg-signup-card-heading {\n margin: 0;\n font-size: clamp(1.7em, 4vw, 2.5em);\n font-weight: 700;\n line-height: 1.05em;\n letter-spacing: -0.01em;\n}\n\n.kg-signup-card.kg-width-wide h2.kg-signup-card-heading {\n font-size: clamp(1.7em, 5vw, 3.3em);\n}\n\n.kg-signup-card.kg-width-full h2.kg-signup-card-heading {\n font-size: clamp(1.9em, 5.6vw, 4.2em);\n}\n\n.kg-signup-card.kg-width-full.kg-layout-split h2.kg-signup-card-heading {\n font-size: clamp(1.9em, 4vw, 3.3em);\n}\n\n/* Subheading */\n\n.kg-signup-card-subheading {\n margin: 0 0 2em;\n}\n\n.kg-signup-card .kg-signup-card-subheading {\n max-width: 40em;\n margin: 0;\n font-size: clamp(1.05em, 2vw, 1.4em);\n font-weight: 500;\n line-height: 1.2em;\n}\n\n.kg-signup-card h2 + .kg-signup-card-subheading {\n margin: 0.6em 0 0;\n}\n\n.kg-signup-card .kg-signup-card-subheading strong {\n font-weight: 600;\n}\n\n.kg-signup-card.kg-width-wide .kg-signup-card-subheading {\n font-size: clamp(1.05em, 2vw, 1.55em);\n}\n\n.kg-signup-card.kg-width-full .kg-signup-card-subheading:not(.kg-layout-split .kg-signup-card-subheading) {\n max-width: min(65vmax, 1200px);\n font-size: clamp(1.05em, 2vw, 1.7em);\n}\n\n.kg-signup-card.kg-width-full.kg-layout-split .kg-signup-card-subheading {\n font-size: clamp(1.05em, 2vw, 1.55em);\n}\n\n/* Subscribe form */\n\n.kg-signup-card-form {\n position: relative;\n display: flex;\n flex-shrink: 0;\n width: 100%;\n}\n\n.kg-align-center .kg-signup-card-form {\n justify-content: center;\n}\n\n.kg-signup-card-heading + .kg-signup-card-form,\n.kg-signup-card-subheading + .kg-signup-card-form {\n margin: min(2.4vmax, 48px) 0 0;\n}\n\n.kg-width-wide .kg-signup-card-heading + .kg-signup-card-form,\n.kg-width-wide .kg-signup-card-subheading + .kg-signup-card-form {\n margin: min(3.2vmax, 64px) 0 0;\n}\n\n.kg-width-full .kg-signup-card-heading + .kg-signup-card-form,\n.kg-width-full .kg-signup-card-subheading + .kg-signup-card-form {\n margin: min(4vmax, 80px) 0 0;\n}\n\n.kg-signup-card-fields {\n display: flex;\n width: 100%;\n padding: 3px;\n background: #FFFFFF;\n border: 1px solid #E6E6E6;\n border-radius: 4px;\n}\n\n.kg-width-wide .kg-signup-card-fields,\n.kg-width-full .kg-signup-card-fields {\n width: 100%;\n max-width: 500px;\n}\n\n.kg-signup-card-input {\n width: 100%;\n height: 2.9em;\n min-height: 46px;\n margin: 0 3px 0 0;\n padding: 12px 16px;\n border: none;\n background: #FFFFFF;\n font-size: 1.1em;\n}\n\n.kg-signup-card-input:focus,\n.kg-signup-card-input:focus-visible {\n outline: none;\n}\n\n.kg-signup-card-button {\n display: flex;\n position: relative;\n align-items: center;\n height: 2.9em;\n min-height: 46px;\n height: 100%;\n padding: 0 1.2em;\n outline: none;\n border: none;\n font-size: 1em;\n font-weight: 600;\n line-height: 1em;\n text-align: center;\n text-decoration: none;\n letter-spacing: .2px;\n white-space: nowrap;\n text-overflow: ellipsis;\n border-radius: 3px;\n transition: opacity .2s ease;\n cursor: pointer;\n}\n\n.kg-signup-card-button.kg-style-accent {\n background-color: var(--ghost-accent-color);\n}\n\n.kg-signup-card h2 + .kg-signup-card-button,\n.kg-signup-card p + .kg-signup-card-button {\n margin: 1.5em 0 0;\n}\n\n.kg-signup-card .kg-signup-card-button:hover {\n opacity: 0.85;\n}\n\n.kg-signup-card.kg-width-wide .kg-signup-card-button {\n font-size: 1.05em;\n}\n\n.kg-signup-card.kg-width-wide h2 + .kg-signup-card-button,\n.kg-signup-card.kg-width-wide p + .kg-signup-card-button {\n margin-top: 1.75em;\n}\n\n.kg-signup-card.kg-width-full .kg-signup-card-button {\n font-size: 1.1em;\n}\n\n.kg-signup-card.kg-width-full h2 + .kg-signup-card-button,\n.kg-signup-card.kg-width-full p + .kg-signup-card-button {\n margin-top: 2em;\n}\n\n/* Subscribe form states */\n\n.kg-signup-card-success,\n.kg-signup-card-error {\n display: none;\n}\n\n.kg-signup-card-form.success .kg-signup-card-fields {\n display: none;\n}\n\n.kg-signup-card-form.success .kg-signup-card-success {\n display: flex;\n align-items: center;\n height: 3em;\n font-size: 1.25em;\n font-weight: 500;\n line-height: 1.4em;\n}\n\n.kg-signup-card-form.error .kg-signup-card-fields {\n border: 1px solid #FF0000;\n box-shadow: inset 0 0 0 1px rgba(255, 0, 0, 0.2);\n}\n\n.kg-signup-card-form.error .kg-signup-card-error {\n position: absolute;\n bottom: calc(-1rem - 1.6em);\n display: block;\n font-size: inherit;\n}\n\n.kg-signup-card-button-loading {\n position: absolute;\n inset: 0;\n align-items: center;\n justify-content: center;\n display: none;\n}\n\n.kg-signup-card-form.loading .kg-signup-card-button-default {\n color: transparent;\n}\n\n.kg-signup-card-form.loading .kg-signup-card-button-loading {\n display: flex;\n}\n\n/* Disclaimer */\n\n.kg-signup-card-disclaimer {\n margin: 1rem 0 0;\n}\n\n.kg-signup-card-form.success + .kg-signup-card-disclaimer,\n.kg-signup-card-form.error + .kg-signup-card-disclaimer {\n visibility: hidden;\n}\n\n\n/* Responsive styles */\n\n@media (max-width: 640px) {\n .kg-layout-split .kg-signup-card-content {\n grid-template-columns: 1fr;\n }\n\n .kg-width-wide .kg-signup-card-text {\n padding: min(6.4vmax, 120px) min(4vmax, 80px);\n }\n\n .kg-layout-split.kg-content-wide .kg-signup-card-text,\n .kg-layout-split.kg-content-wide.kg-swapped .kg-signup-card-text {\n padding: min(9.6vmax, 180px) 0;\n }\n\n .kg-signup-card.kg-width-full .kg-signup-card-subheading:not(.kg-layout-split .kg-signup-card-subheading) {\n max-width: unset;\n }\n\n .kg-signup-card-content .kg-signup-card-image:not(.kg-content-wide .kg-signup-card-content .kg-signup-card-image) {\n height: auto;\n min-height: unset;\n aspect-ratio: 1 / 1;\n }\n\n .kg-content-wide .kg-signup-card-content .kg-signup-card-image {\n padding: 1.7em 0 0;\n }\n\n .kg-content-wide.kg-swapped .kg-signup-card-content .kg-signup-card-image {\n padding: 0 0 1.7em;\n }\n\n .kg-signup-card-input {\n height: 2.9em;\n padding: 6px 12px;\n font-size: 1em;\n }\n\n .kg-signup-card-button {\n height: 2.9em;\n }\n\n .kg-signup-card.kg-width-wide .kg-signup-card-button,\n .kg-signup-card.kg-width-full .kg-signup-card-button {\n font-size: 1em;\n }\n}\n", et = /* @__PURE__ */ e({ default: () => tt }), tt = ".kg-toggle-card,\n.kg-toggle-card * {\n box-sizing: border-box;\n}\n\n.kg-toggle-card {\n background: transparent;\n box-shadow: inset 0 0 0 1px rgba(124, 139, 154, 0.25);\n border-radius: 4px;\n padding: 1.2em;\n}\n\n.kg-toggle-card[data-kg-toggle-state=\"close\"] .kg-toggle-content{\n height: 0;\n overflow: hidden;\n transition: opacity .5s ease, top .35s ease;\n opacity: 0;\n top: -0.5em;\n position: relative;\n}\n\n.kg-toggle-content {\n height: auto;\n opacity: 1;\n transition: opacity 1s ease, top .35s ease;\n top: 0;\n position: relative;\n}\n\n.kg-toggle-card[data-kg-toggle-state=\"close\"] svg {\n transform: unset;\n}\n\n.kg-toggle-heading {\n cursor: pointer;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n}\n\n.kg-toggle-card h4.kg-toggle-heading-text {\n font-size: 1.15em;\n font-weight: 700;\n line-height: 1.3em;\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.kg-toggle-content p:first-of-type {\n margin-top: 0.5em;\n}\n\n.kg-toggle-card .kg-toggle-content p,\n.kg-toggle-card .kg-toggle-content ol,\n.kg-toggle-card .kg-toggle-content ul {\n font-size: 0.95em;\n line-height: 1.5em;\n margin-top: 0.95em;\n margin-bottom: 0;\n}\n\n.kg-toggle-card li + li {\n margin-top: 0.5em;\n}\n\n.kg-toggle-card-icon {\n height: 24px;\n width: 24px;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-left: 1em;\n padding: 0;\n background: none;\n border: 0;\n cursor: pointer;\n}\n\n.kg-toggle-heading svg {\n width: 14px;\n color: rgba(124, 139, 154, 0.5);\n transition: all 0.3s;\n transform: rotate(-180deg);\n}\n\n.kg-toggle-heading path {\n fill: none;\n stroke: currentcolor;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-width: 1.5;\n fill-rule: evenodd;\n}\n\n.kg-toggle-card + .kg-toggle-card {\n margin-top: 1em;\n}\n", nt = /* @__PURE__ */ e({ default: () => rt }), rt = ".kg-transistor-card {\n display: flex;\n justify-content: center;\n}\n\n.kg-transistor-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 2.4rem;\n width: 100%;\n max-width: 100%;\n padding: 3rem 2.4rem;\n border: 1px solid rgba(255, 255, 255, 0.14);\n border: 1px solid color-mix(in srgb, currentColor 14%, transparent);\n border-radius: 12px;\n background: rgba(255, 255, 255, 0.04);\n background: color-mix(in srgb, currentColor 4%, transparent);\n color: inherit;\n text-align: center;\n box-sizing: border-box;\n}\n\n.kg-transistor-icon {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: 116px;\n height: 116px;\n border-radius: 14px;\n background: var(--ghost-accent-color, #b8a5ac);\n color: #fff;\n}\n\n.kg-transistor-icon svg {\n display: block;\n width: 56px;\n height: 56px;\n}\n\n.kg-transistor-content {\n min-width: 0;\n max-width: 640px;\n}\n\n.kg-transistor-title {\n margin: 0;\n color: inherit;\n font-size: 2.3rem;\n font-weight: 600;\n line-height: 1.2;\n}\n\n.kg-transistor-description {\n margin-top: 1.6rem;\n color: inherit;\n font-size: 1.6rem;\n line-height: 1.5;\n opacity: 0.65;\n}\n\n@media (max-width: 640px) {\n .kg-transistor-placeholder {\n gap: 1.6rem;\n padding: 2.4rem 1.8rem;\n }\n\n .kg-transistor-icon {\n width: 88px;\n height: 88px;\n border-radius: 12px;\n }\n\n .kg-transistor-icon svg {\n width: 44px;\n height: 44px;\n }\n\n .kg-transistor-title {\n font-size: 1.8rem;\n }\n\n .kg-transistor-description {\n margin-top: 1rem;\n font-size: 1.45rem;\n }\n}\n", it = /* @__PURE__ */ e({ default: () => at }), at = ".kg-video-card,\n.kg-video-card * {\n box-sizing: border-box;\n}\n\n.kg-video-card {\n position: relative;\n --seek-before-width: 0%;\n --volume-before-width: 100%;\n --buffered-width: 0%;\n}\n\n.kg-video-card video {\n display: block;\n max-width: 100%;\n height: auto;\n}\n\n.kg-video-container {\n position: relative;\n height: 0;\n width: 100%;\n overflow: hidden;\n}\n\n.kg-video-container video {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.kg-video-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n background-image: linear-gradient(180deg,rgba(0,0,0,0.3) 0,transparent 70%,transparent 100%);\n z-index: 999;\n transition: opacity .2s ease-in-out;\n}\n\n.kg-video-large-play-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 72px;\n height: 72px;\n padding: 0;\n background: rgba(0, 0, 0, 0.5);\n border-radius: 50%;\n transition: opacity .2s ease-in-out;\n}\n\n.kg-video-large-play-icon svg {\n width: 20px;\n height: auto;\n margin-left: 2px;\n fill: #fff;\n}\n\n.kg-video-player-container {\n position: absolute;\n bottom: -1px;\n left: 0;\n right: 0;\n width: 100%;\n height: 80px;\n background: linear-gradient(rgba(0,0,0,0), rgba(0,0,0,.5));\n z-index: 999;\n transition: opacity .2s ease-in-out;\n}\n\n.kg-video-player {\n position: absolute;\n bottom: 0;\n display: flex;\n align-items: center;\n width: 100%;\n z-index: 9999;\n padding: 12px 16px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n background: rgba(0,0,0,.5);\n}\n\n.kg-video-current-time {\n min-width: 38px;\n padding: 0 4px;\n color: #fff;\n font-family: inherit;\n font-size: 12.5px;\n font-weight: 500;\n line-height: 1.4em;\n white-space: nowrap;\n}\n\n.kg-video-time {\n color: rgba(255, 255, 255, 0.6);\n font-family: inherit;\n font-size: 12.5px;\n font-weight: 500;\n line-height: 1.4em;\n white-space: nowrap;\n}\n\n.kg-video-duration {\n padding: 0 4px;\n}\n\n.kg-video-play-icon,\n.kg-video-pause-icon {\n position: relative;\n padding: 0px 4px 0 0;\n font-size: 0;\n background: transparent;\n}\n\n.kg-video-hide {\n display: none !important;\n}\n\n.kg-video-hide-animated {\n opacity: 0 !important;\n transition: opacity .2s ease-in-out;\n cursor: initial;\n}\n\n.kg-video-play-icon svg,\n.kg-video-pause-icon svg {\n width: 14px;\n height: 14px;\n fill: #fff;\n}\n\n.kg-video-seek-slider {\n flex-grow: 1;\n margin: 0 4px;\n}\n\n@media (max-width: 520px) {\n .kg-video-seek-slider {\n display: none;\n }\n}\n\n.kg-video-playback-rate {\n min-width: 37px;\n padding: 0 4px;\n color: #fff;\n font-family: inherit;\n font-size: 12.5px;\n font-weight: 600;\n line-height: 1.4em;\n text-align: left;\n background: transparent;\n white-space: nowrap;\n}\n\n@media (max-width: 520px) {\n .kg-video-playback-rate {\n padding-left: 8px;\n }\n}\n\n.kg-video-mute-icon,\n.kg-video-unmute-icon {\n position: relative;\n bottom: -1px;\n padding: 0 4px;\n font-size: 0;\n background: transparent;\n}\n\n@media (max-width: 520px) {\n .kg-video-mute-icon,\n .kg-video-unmute-icon {\n margin-left: auto;\n }\n}\n\n.kg-video-mute-icon svg,\n.kg-video-unmute-icon svg {\n width: 16px;\n height: 16px;\n fill: #fff;\n}\n\n.kg-video-volume-slider {\n width: 80px;\n}\n\n@media (max-width: 300px) {\n .kg-video-volume-slider {\n display: none;\n }\n}\n\n.kg-video-seek-slider::before {\n content: \"\";\n position: absolute;\n left: 0;\n width: var(--seek-before-width) !important;\n height: 4px;\n cursor: pointer;\n background-color: #EBEEF0;\n border-radius: 2px;\n}\n\n.kg-video-volume-slider::before {\n content: \"\";\n position: absolute;\n left: 0;\n width: var(--volume-before-width) !important;\n height: 4px;\n cursor: pointer;\n background-color: #EBEEF0;\n border-radius: 2px;\n}\n\n/* Resetting browser styles\n/* --------------------------------------------------------------- */\n\n.kg-video-card input[type=range] {\n position: relative;\n -webkit-appearance: none;\n background: transparent;\n}\n\n.kg-video-card input[type=range]:focus {\n outline: none;\n}\n\n.kg-video-card input[type=range]::-webkit-slider-thumb {\n -webkit-appearance: none;\n}\n\n.kg-video-card input[type=range]::-ms-track {\n cursor: pointer;\n border-color: transparent;\n color: transparent;\n background: transparent;\n}\n\n.kg-video-card button {\n display: flex;\n align-items: center;\n border: 0;\n cursor: pointer;\n}\n\n.kg-video-card input[type=\"range\"] {\n height: auto;\n padding: 0;\n border: 0;\n}\n\n/* Chrome & Safari styles\n/* --------------------------------------------------------------- */\n\n.kg-video-card input[type=\"range\"]::-webkit-slider-runnable-track {\n width: 100%;\n height: 4px;\n cursor: pointer;\n background: rgba(255, 255, 255, 0.2);\n border-radius: 2px;\n}\n\n.kg-video-card input[type=\"range\"]::-webkit-slider-thumb {\n position: relative;\n box-sizing: content-box;\n width: 13px;\n height: 13px;\n margin: -5px 0 0 0;\n border: 0;\n cursor: pointer;\n background: #fff;\n border-radius: 50%;\n box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);\n}\n\n.kg-video-card input[type=\"range\"]:active::-webkit-slider-thumb {\n transform: scale(1.2);\n}\n\n/* Firefox styles\n/* --------------------------------------------------------------- */\n\n.kg-video-card input[type=\"range\"]::-moz-range-track {\n width: 100%;\n height: 4px;\n cursor: pointer;\n background: rgba(255, 255, 255, 0.2);\n border-radius: 2px;\n}\n\n.kg-video-card input[type=\"range\"]::-moz-range-progress {\n background: #EBEEF0;\n border-radius: 2px;\n}\n\n.kg-video-card input[type=\"range\"]::-moz-range-thumb {\n box-sizing: content-box;\n width: 13px;\n height: 13px;\n border: 0;\n cursor: pointer;\n background: #fff;\n border-radius: 50%;\n box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);\n}\n\n.kg-video-card input[type=\"range\"]:active::-moz-range-thumb {\n transform: scale(1.2);\n}\n\n/* Edge & IE styles\n/* --------------------------------------------------------------- */\n\n.kg-video-card input[type=\"range\"]::-ms-track {\n width: 100%;\n height: 3px;\n border: solid transparent;\n color: transparent;\n cursor: pointer;\n background: transparent;\n}\n\n.kg-video-card input[type=\"range\"]::-ms-fill-lower {\n background: #fff;\n}\n\n.kg-video-card input[type=\"range\"]::-ms-fill-upper {\n background: #EBEEF0;\n}\n\n.kg-video-card input[type=\"range\"]::-ms-thumb {\n box-sizing: content-box;\n width: 13px;\n height: 13px;\n border: 0;\n cursor: pointer;\n background: #fff;\n border-radius: 50%;\n box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);\n}\n\n.kg-video-card input[type=\"range\"]:active::-ms-thumb {\n transform: scale(1.2);\n}\n\n", ot = /* #__PURE__ */ Object.assign({
337
- "../../ghost/core/core/frontend/src/cards/js/audio.js": we,
338
- "../../ghost/core/core/frontend/src/cards/js/gallery.js": Te,
339
- "../../ghost/core/core/frontend/src/cards/js/toggle.js": J,
340
- "../../ghost/core/core/frontend/src/cards/js/video.js": Y
341
- }), st = /* #__PURE__ */ Object.assign({
342
- "../../ghost/core/core/frontend/src/cards/css/audio.css": Oe,
343
- "../../ghost/core/core/frontend/src/cards/css/blockquote.css": Ae,
344
- "../../ghost/core/core/frontend/src/cards/css/bookmark.css": je,
345
- "../../ghost/core/core/frontend/src/cards/css/button.css": Ne,
346
- "../../ghost/core/core/frontend/src/cards/css/callout.css": Pe,
347
- "../../ghost/core/core/frontend/src/cards/css/collection.css": Ie,
348
- "../../ghost/core/core/frontend/src/cards/css/cta.css": Re,
349
- "../../ghost/core/core/frontend/src/cards/css/file.css": Be,
350
- "../../ghost/core/core/frontend/src/cards/css/gallery.css": He,
351
- "../../ghost/core/core/frontend/src/cards/css/header.css": We,
352
- "../../ghost/core/core/frontend/src/cards/css/header_v2.css": Ke,
353
- "../../ghost/core/core/frontend/src/cards/css/nft.css": Je,
354
- "../../ghost/core/core/frontend/src/cards/css/product.css": Xe,
355
- "../../ghost/core/core/frontend/src/cards/css/signup.css": Qe,
356
- "../../ghost/core/core/frontend/src/cards/css/toggle.css": et,
357
- "../../ghost/core/core/frontend/src/cards/css/transistor.css": nt,
358
- "../../ghost/core/core/frontend/src/cards/css/video.css": it
359
- }), ct = Object.values(ot).map((e) => e.default).join("\n\n"), lt = Object.values(st).map((e) => e.default).join("\n\n");
360
- //#endregion
361
- //#region src/views/inbox/components/reader.tsx
362
- i();
363
- var ut = ({ postUrl: e, heading: r, image: i, excerpt: a, authors: c, html: l, backgroundColor: u, fontSize: d, fontStyle: f, onHeadingsExtracted: p, onIframeLoad: m, onLoadingChange: h, isPopoverOpen: g }) => {
364
- let _ = s(null), [v, ee] = n(!0), [te, y] = n("0px"), b = document.documentElement.classList.contains("dark") && u === "SYSTEM" || u === "DARK", x = Ce(), S = typeof window < "u" && typeof window.matchMedia == "function" && window.matchMedia("(hover: none) and (pointer: coarse)").matches, ne = t(() => ue(S ? I(l) : l), [l, S]), C = `
365
- <html class="has-${b ? "light" : "dark"}-text has-${f}-body ${u === "SEPIA" && "has-sepia-bg"}">
366
- <head>
367
- ${x}
368
- <style>
369
- :root {
370
- --font-size: ${d};
371
- }
372
- body {
373
- margin: 0;
374
- padding: 0;
375
- overflow-y: hidden;
376
- }
377
- .has-sepia-bg {
378
- --background-color: #FCF8F1;
379
- }
380
- </style>
381
- <style>
382
- ${lt}
383
- </style>
384
-
385
- <script>
386
- function resizeIframe() {
387
- const height = document.body.scrollHeight;
388
- window.parent.postMessage({
389
- type: 'resize',
390
- bodyHeight: height,
391
- isLoaded: true
392
- }, '*');
393
- }
394
-
395
- // Initialize resize observers
396
- function setupResizeObservers() {
397
- // ResizeObserver for overall size changes
398
- const resizeObserver = new ResizeObserver(() => {
399
- resizeIframe();
400
- });
401
- resizeObserver.observe(document.body);
402
-
403
- // MutationObserver for DOM changes
404
- const mutationObserver = new MutationObserver(() => {
405
- resizeIframe();
406
- });
407
- mutationObserver.observe(document.body, {
408
- childList: true,
409
- subtree: true,
410
- attributes: true
411
- });
412
-
413
- // Handle window resize
414
- window.addEventListener('resize', resizeIframe);
415
-
416
- // Initial resize
417
- resizeIframe();
418
-
419
- // Clean up function
420
- return () => {
421
- resizeObserver.disconnect();
422
- mutationObserver.disconnect();
423
- window.removeEventListener('resize', resizeIframe);
424
- };
425
- }
426
-
427
- // Wait for images to load
428
- function waitForImages() {
429
- const images = document.getElementsByTagName('img');
430
- Promise.all(Array.from(images).map(img => {
431
- if (img.complete) return Promise.resolve();
432
- return new Promise(resolve => {
433
- img.onload = resolve;
434
- img.onerror = resolve;
435
- });
436
- })).then(resizeIframe);
437
- }
438
-
439
- // Handle external resize triggers
440
- window.addEventListener('message', (event) => {
441
- if (event.data.type === 'triggerResize') {
442
- resizeIframe();
443
- }
444
- });
445
-
446
- // Initialize everything once DOM is ready
447
- document.addEventListener('DOMContentLoaded', () => {
448
- setupResizeObservers();
449
- waitForImages();
450
- });
451
- <\/script>
452
-
453
- <!-- Reframe.js — a plugin that makes iframes and videos responsive -->
454
- <script>!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).reframe=t()}(this,function(){"use strict";function t(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;for(var i=Array(e),o=0,t=0;t<n;t++)for(var r=arguments[t],f=0,d=r.length;f<d;f++,o++)i[o]=r[f];return i}return function(e,s){return void 0===s&&(s="js-reframe"),("string"==typeof e?t(document.querySelectorAll(e)):"length"in e?t(e):[e]).forEach(function(e){var t,n,i,o,r,f,d,l;-1!==e.className.split(" ").indexOf(s)||-1<e.style.width.indexOf("%")||(i=e.getAttribute("height")||e.offsetHeight,o=e.getAttribute("width")||e.offsetWidth,r=("string"==typeof i?parseInt(i):i)/("string"==typeof o?parseInt(o):o)*100,(f=document.createElement("div")).className=s,(d=f.style).position="relative",d.width="100%",d.paddingTop=r+"%",(l=e.style).position="absolute",l.width="100%",l.height="100%",l.left="0",l.top="0",null!==(t=e.parentNode)&&void 0!==t&&t.insertBefore(f,e),null!==(n=e.parentNode)&&void 0!==n&&n.removeChild(e),f.appendChild(e))})}});<\/script>
455
- </head>
456
- <body>
457
- <header class='gh-article-header gh-canvas'>
458
- <h1 class='gh-article-title is-title' data-test-article-heading>${P(r)}</h1>
459
- ${a ? `<p class='gh-article-excerpt'>${P(a)}</p>` : ""}
460
- <a href="${e && F(e) ? P(e) : "#"}" target="_blank" rel="noopener noreferrer" class="gh-article-meta">
461
- ${c && c.length > 0 ? `
462
- <div class="gh-article-author-image">
463
- ${c.map((e) => `
464
- <span>
465
- ${e.profile_image ? `<img src="${P(e.profile_image)}" alt="${P(e.name)}">` : "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\"><path d=\"M6.75 6a5.25 5.25 0 1 0 10.5 0 5.25 5.25 0 1 0 -10.5 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"M2.25 23.25a9.75 9.75 0 0 1 19.5 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path></svg>"}
466
- </span>
467
- `).join("")}
468
- </div>
469
- ` : ""}
470
- <div class="gh-article-meta-wrapper">
471
- ${c && c.length > 0 ? `
472
- <span class="gh-article-author-name">
473
- ${c.length > 1 ? `${P(c[0].name)} and ${c.length - 1} ${c.length - 1 == 1 ? "other" : "others"}` : P(c[0].name)}
474
- </span>
475
- ` : ""}
476
- <span class="gh-article-source">${e && F(e) ? P(new URL(e).hostname) : ""} <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link-icon lucide-external-link"><path d="M15 3h6v6"/><path d="M10 14 21 3"/><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg></span>
477
- </div>
478
- </a>
479
- ${i ? `
480
- <figure class='gh-article-image'>
481
- <img src='${P(i)}' alt='${P(r)}' />
482
- </figure>
483
- ` : ""}
484
- </header>
485
- <div class='gh-content gh-canvas is-body'>
486
- ${ne}
487
- </div>
488
- <script>
489
- (function () {
490
- const sources = [
491
- '.gh-content iframe[src*="youtube.com"]',
492
- '.gh-content iframe[src*="youtube-nocookie.com"]',
493
- '.gh-content iframe[src*="player.vimeo.com"]',
494
- '.gh-content iframe[src*="kickstarter.com"][src*="video.html"]',
495
- '.gh-content object',
496
- '.gh-content embed',
497
- ];
498
- reframe(document.querySelectorAll(sources.join(',')));
499
- })();
500
- <\/script>
501
- <script>
502
- ${ct}
503
- <\/script>
504
- </body>
505
- </html>
506
- `;
507
- return o(() => {
508
- let e = _.current;
509
- if (!e) return;
510
- e.srcdoc ||= C;
511
- let t = (t) => {
512
- if (t.data.type === "resize") {
513
- let n = `${t.data.bodyHeight + 24}px`;
514
- y(n), e.style.height = n, t.data.isLoaded && ee(!1);
515
- }
516
- }, n = (e) => {
517
- if (e.key === "Escape") {
518
- e.preventDefault(), e.stopPropagation();
519
- let t = new KeyboardEvent("keydown", {
520
- key: "Escape",
521
- code: "Escape",
522
- keyCode: 27,
523
- which: 27,
524
- bubbles: !0,
525
- cancelable: !0
526
- });
527
- document.dispatchEvent(t);
528
- }
529
- }, r = () => {
530
- let t = e.contentWindow;
531
- t && t.addEventListener("keydown", n);
532
- };
533
- return e.addEventListener("load", r), window.addEventListener("message", t), () => {
534
- window.removeEventListener("message", t), e.removeEventListener("load", r);
535
- let i = e.contentWindow;
536
- i && i.removeEventListener("keydown", n);
537
- };
538
- }, [C]), o(() => {
539
- let e = _.current;
540
- if (!e) return;
541
- let t = e.contentDocument || e.contentWindow?.document;
542
- if (!t) return;
543
- let n = t.documentElement;
544
- n.style.setProperty("--font-size", d), n.classList.remove("has-sans-body", "has-serif-body"), n.classList.add(`has-${f}-body`), n.classList.remove("has-dark-text", "has-light-text"), n.classList.add(`has-${b ? "light" : "dark"}-text`), u === "SEPIA" ? n.classList.add("has-sepia-bg") : n.classList.remove("has-sepia-bg");
545
- let r = e.contentWindow;
546
- if (r && typeof r.resizeIframe == "function") r.resizeIframe();
547
- else {
548
- let e = new Event("resize");
549
- t.dispatchEvent(e);
550
- }
551
- }, [
552
- d,
553
- f,
554
- u,
555
- b
556
- ]), o(() => {
557
- let e = _.current;
558
- if (!e) return;
559
- let t = () => {
560
- if (!e.contentDocument) return;
561
- let t = Array.from(e.contentDocument.querySelectorAll(".gh-content > :is(h2, h3, h4, h5, h6)[id]"));
562
- if (t.length === 0) return;
563
- let n = Math.min(...t.map((e) => parseInt(e.tagName[1]))), r = t.map((e, t) => {
564
- let r = `heading-${t}`;
565
- e.id = r;
566
- let i = parseInt(e.tagName[1]) - n + 1;
567
- return {
568
- id: r,
569
- text: e.textContent || "",
570
- level: i,
571
- element: e
572
- };
573
- });
574
- p?.(r), m?.(e);
575
- };
576
- return e.addEventListener("load", t), () => e.removeEventListener("load", t);
577
- }, [p, m]), o(() => {
578
- h?.(v);
579
- }, [v, h]), /* @__PURE__ */ (0, B.jsx)("div", {
580
- className: "w-full pb-6",
581
- children: /* @__PURE__ */ (0, B.jsxs)("div", {
582
- className: "relative -mx-6",
583
- children: [v && /* @__PURE__ */ (0, B.jsxs)("div", {
584
- className: "mx-auto mt-6 w-full max-w-[640px] max-lg:px-4",
585
- children: [
586
- /* @__PURE__ */ (0, B.jsxs)("div", {
587
- className: "mb-6 flex flex-col gap-2",
588
- children: [/* @__PURE__ */ (0, B.jsx)(N, { className: "h-8" }), /* @__PURE__ */ (0, B.jsx)(N, { className: "h-8 w-full max-w-md" })]
589
- }),
590
- /* @__PURE__ */ (0, B.jsx)(N, {
591
- className: "mt-2 h-4",
592
- count: 4,
593
- randomize: !0
594
- }),
595
- /* @__PURE__ */ (0, B.jsx)(N, { className: "mt-8 h-[400px]" }),
596
- /* @__PURE__ */ (0, B.jsx)(N, {
597
- className: "mt-2 h-4",
598
- containerClassName: "block mt-7 mb-4",
599
- count: 8,
600
- randomize: !0
601
- })
602
- ]
603
- }), /* @__PURE__ */ (0, B.jsx)("iframe", {
604
- ref: _,
605
- id: "gh-ap-article-iframe",
606
- style: {
607
- width: "100%",
608
- border: "none",
609
- height: te,
610
- overflow: "hidden",
611
- opacity: +!v,
612
- transition: "opacity 0.2s ease-in-out",
613
- pointerEvents: g ? "none" : "auto"
614
- },
615
- title: "Embedded Content"
616
- })]
617
- })
618
- });
619
- }, dt = () => /* @__PURE__ */ (0, B.jsx)("div", { className: "h-px bg-black/[8%] dark:bg-gray-950" }), $ = /* @__PURE__ */ new Map(), ft = ({ postId: e = null, onClose: t }) => {
620
- let { backgroundColor: i, currentFontSizeIndex: c, fontStyle: l, fontSize: u, handleColorChange: d, setFontStyle: f, increaseFontSize: p, decreaseFontSize: h, resetFontSize: _ } = _e(), v = s(null), [ee, y] = n(!1), [ne, E] = n(!1), [ie, D] = n(/* @__PURE__ */ new Set()), [ae, O] = n(/* @__PURE__ */ new Set()), [k, se] = n(/* @__PURE__ */ new Set()), [j, ce] = n(!1), M = s(null), ue = s(null), { post: P, processedReplies: F, isLoading: I, loadMoreChildren: L, loadMoreChildReplies: ge, hasMoreChildren: R, hasMoreChildReplies: z } = he(e ?? "", { includeAncestors: !1 }), V = P, H = V?.object, U = V?.actor, W = V?.object?.metadata?.ghostAuthors, ye = H?.replyCount ?? 0;
621
- o(() => {
622
- if (!R) return;
623
- M.current && M.current.disconnect();
624
- let e = v.current;
625
- if (e) return M.current = new IntersectionObserver(async (e) => {
626
- if (e[0].isIntersecting && R && !j) {
627
- ce(!0);
628
- try {
629
- await L();
630
- } catch (e) {
631
- console.error("Failed to load more top-level replies:", e);
632
- } finally {
633
- ce(!1);
634
- }
635
- }
636
- }, {
637
- root: e,
638
- rootMargin: "200px"
639
- }), ue.current && M.current.observe(ue.current), () => {
640
- M.current && M.current.disconnect();
641
- };
642
- }, [
643
- R,
644
- j,
645
- L
646
- ]);
647
- function K() {}
648
- function xe(e) {
649
- D((t) => {
650
- let n = new Set(t);
651
- return n.has(e) ? n.delete(e) : (n.add(e), O((t) => {
652
- let n = new Set(t);
653
- return n.add(e), n;
654
- })), n;
655
- });
656
- }
657
- async function Se(e, t) {
658
- if (!k.has(e)) {
659
- se((t) => new Set(t).add(e));
660
- try {
661
- ge && await ge(t);
662
- } catch (e) {
663
- console.error("Failed to load more replies for chain:", e);
664
- } finally {
665
- se((t) => {
666
- let n = new Set(t);
667
- return n.delete(e), n;
668
- });
669
- }
670
- }
671
- }
672
- let Ce = () => {}, we = s(null), q = "640px", [Te, Ee] = n(0), [J, De] = n(!0), [Y] = C(Ee, 100);
673
- o(() => {
674
- let e = v.current, t = document.getElementById("object-content"), n = () => {
675
- if (J || !e || !t) return;
676
- let n = t.getBoundingClientRect(), r = e.getBoundingClientRect();
677
- if (n.height <= r.height) {
678
- Y(100);
679
- return;
680
- }
681
- let i = Math.max(0, r.top - n.top), a = t.offsetHeight - e.offsetHeight, o = Math.min(Math.max(i / a * 100, 0), 100), s = Math.round(o / 1) * 1;
682
- Y(s);
683
- };
684
- if (J) return;
685
- let r = new MutationObserver(n);
686
- return t && r.observe(t, {
687
- childList: !0,
688
- subtree: !0,
689
- characterData: !0
690
- }), e?.addEventListener("scroll", n), n(), () => {
691
- e?.removeEventListener("scroll", n), r.disconnect();
692
- };
693
- }, [J, Y]);
694
- let [X, Oe] = n([]), [ke, Ae] = n(null), [Z, je] = n(null), Me = a((e) => {
695
- Oe(e);
696
- }, []), Ne = a((e) => {
697
- je(e);
698
- }, []);
699
- o(() => {
700
- if (!Z?.contentDocument || !X.length) return;
701
- let e = setTimeout(() => {
702
- let e = v.current;
703
- if (!e) return;
704
- let t = () => {
705
- let t = Z.contentDocument;
706
- if (!t || !t.documentElement) return;
707
- let n = e.scrollTop, r = X.map((e) => t.getElementById(e.id)).filter((e) => e !== null).map((e) => ({
708
- element: e,
709
- id: e.id,
710
- top: e.offsetTop
711
- }));
712
- if (!r.length) return;
713
- let i = null;
714
- for (let e of r) if (e.top - 100 <= n) i = e;
715
- else break;
716
- Ae(i?.id || null);
717
- };
718
- return e.addEventListener("scroll", t), t(), () => {
719
- e.removeEventListener("scroll", t);
720
- };
721
- }, 100);
722
- return () => clearTimeout(e);
723
- }, [
724
- Z,
725
- X,
726
- ke
727
- ]);
728
- let Q = oe();
729
- return o(() => {
730
- let t = v.current;
731
- return () => {
732
- t && e && $.set(e, t.scrollTop);
733
- };
734
- }, [e]), o(() => {
735
- if (!J && !I && e && v.current) {
736
- let t = $.get(e);
737
- t !== void 0 && t > 0 && setTimeout(() => {
738
- v.current && (v.current.scrollTop = t);
739
- }, 100);
740
- }
741
- }, [
742
- J,
743
- I,
744
- e
745
- ]), I ? /* @__PURE__ */ (0, B.jsx)("div", {
746
- className: `max-h-full overflow-auto rounded-md ${i === "DARK" && "dark"} ${(i === "LIGHT" || i === "SEPIA") && "light"} ${G[i].background}`,
747
- children: /* @__PURE__ */ (0, B.jsx)("div", {
748
- className: "flex h-full flex-col",
749
- children: /* @__PURE__ */ (0, B.jsxs)("div", {
750
- className: "relative flex-1",
751
- children: [/* @__PURE__ */ (0, B.jsx)("div", {
752
- className: `sticky top-0 z-50 flex h-[102px] items-center justify-center rounded-t-md border-b max-md:h-[68px] ${G[i].background} ${G[i].border}`,
753
- children: /* @__PURE__ */ (0, B.jsxs)("div", {
754
- className: "grid w-full px-8 max-lg:px-4",
755
- style: { gridTemplateColumns: `1fr minmax(0,${q}) 1fr` },
756
- children: [
757
- /* @__PURE__ */ (0, B.jsx)("div", {
758
- className: "flex items-center",
759
- children: /* @__PURE__ */ (0, B.jsx)(m, {
760
- className: G[i].button,
761
- onClick: t
762
- })
763
- }),
764
- /* @__PURE__ */ (0, B.jsxs)("div", {
765
- className: "col-[2/3] mx-auto flex w-full items-center gap-3 max-md:hidden",
766
- children: [/* @__PURE__ */ (0, B.jsx)(N, { className: "size-10 rounded-full" }), /* @__PURE__ */ (0, B.jsxs)("div", {
767
- className: "grow pt-1",
768
- children: [/* @__PURE__ */ (0, B.jsx)(N, { className: "w-full" }), /* @__PURE__ */ (0, B.jsx)(N, { className: "w-2/3" })]
769
- })]
770
- }),
771
- /* @__PURE__ */ (0, B.jsx)("div", {
772
- className: "col-[3/4] flex items-center justify-end gap-2",
773
- children: /* @__PURE__ */ (0, B.jsx)(ve, {
774
- backgroundColor: i,
775
- currentFontSizeIndex: c,
776
- fontStyle: l,
777
- onColorChange: d,
778
- onDecreaseFontSize: h,
779
- onFontStyleChange: f,
780
- onIncreaseFontSize: p,
781
- onOpenChange: y,
782
- onResetFontSize: _
783
- })
784
- })
785
- ]
786
- })
787
- }), /* @__PURE__ */ (0, B.jsx)("div", {
788
- className: "relative flex-1 max-lg:px-4",
789
- children: /* @__PURE__ */ (0, B.jsxs)("div", {
790
- className: "mx-auto mt-11 w-full max-w-[640px]",
791
- children: [
792
- /* @__PURE__ */ (0, B.jsxs)("div", {
793
- className: "mb-6 flex flex-col gap-2",
794
- children: [/* @__PURE__ */ (0, B.jsx)(N, { className: "h-8" }), /* @__PURE__ */ (0, B.jsx)(N, { className: "h-8 w-full max-w-md" })]
795
- }),
796
- /* @__PURE__ */ (0, B.jsx)(N, {
797
- className: "mt-2 h-4",
798
- count: 4,
799
- randomize: !0
800
- }),
801
- /* @__PURE__ */ (0, B.jsx)(N, { className: "mt-8 h-[400px]" }),
802
- /* @__PURE__ */ (0, B.jsx)(N, {
803
- className: "mt-2 h-4",
804
- containerClassName: "block mt-7 mb-4",
805
- count: 8,
806
- randomize: !0
807
- })
808
- ]
809
- })
810
- })]
811
- })
812
- })
813
- }) : P ? /* @__PURE__ */ (0, B.jsx)("div", {
814
- ref: v,
815
- className: `max-h-full overflow-auto rounded-md ${i === "DARK" && "dark"} ${(i === "LIGHT" || i === "SEPIA") && "light"} ${G[i].background}`,
816
- "data-scrollable-container": !0,
817
- children: /* @__PURE__ */ (0, B.jsx)(B.Fragment, { children: /* @__PURE__ */ (0, B.jsxs)("div", {
818
- className: "flex h-full flex-col",
819
- children: [/* @__PURE__ */ (0, B.jsxs)("div", {
820
- className: "relative flex-1",
821
- children: [/* @__PURE__ */ (0, B.jsx)("div", {
822
- className: `sticky top-0 z-50 flex h-[102px] items-center justify-center rounded-t-md border-b max-md:h-[68px] ${G[i].background} ${G[i].border}`,
823
- children: /* @__PURE__ */ (0, B.jsxs)("div", {
824
- className: "grid w-full px-8 max-lg:px-4",
825
- style: { gridTemplateColumns: `1fr minmax(0,${q}) 1fr` },
826
- children: [
827
- /* @__PURE__ */ (0, B.jsx)("div", {
828
- className: "flex items-center",
829
- children: /* @__PURE__ */ (0, B.jsx)(m, {
830
- className: G[i].button,
831
- onClick: t
832
- })
833
- }),
834
- /* @__PURE__ */ (0, B.jsxs)("div", {
835
- className: "col-[2/3] mx-auto flex w-full items-center justify-between gap-3 max-md:hidden",
836
- children: [/* @__PURE__ */ (0, B.jsx)(b, {
837
- actor: U,
838
- isCurrentUser: H.authored,
839
- children: /* @__PURE__ */ (0, B.jsxs)("div", {
840
- className: "flex cursor-pointer items-center gap-3",
841
- children: [/* @__PURE__ */ (0, B.jsx)("div", {
842
- className: "relative z-10 pt-0.5",
843
- children: /* @__PURE__ */ (0, B.jsx)(de, { author: U })
844
- }), /* @__PURE__ */ (0, B.jsxs)("div", {
845
- className: "relative z-10 mt-0.5 flex min-w-0 cursor-pointer flex-col overflow-visible text-[1.5rem]",
846
- onClick: (e) => te(U, Q, e),
847
- children: [/* @__PURE__ */ (0, B.jsx)("div", {
848
- className: "flex w-full",
849
- children: /* @__PURE__ */ (0, B.jsx)("span", {
850
- className: "min-w-0 truncate font-semibold whitespace-nowrap text-black hover:underline dark:text-white",
851
- children: I ? /* @__PURE__ */ (0, B.jsx)(N, { className: "w-20" }) : U.name
852
- })
853
- }), /* @__PURE__ */ (0, B.jsxs)("div", {
854
- className: "flex w-full",
855
- children: [!I && /* @__PURE__ */ (0, B.jsx)("span", {
856
- className: "truncate text-gray-700 after:mx-1 after:font-normal after:text-gray-700 after:content-[\"·\"]",
857
- children: le(U)
858
- }), /* @__PURE__ */ (0, B.jsx)("span", {
859
- className: "text-gray-700",
860
- children: I ? /* @__PURE__ */ (0, B.jsx)(N, { className: "w-[120px]" }) : x(H, !H.authored)
861
- })]
862
- })]
863
- })]
864
- })
865
- }), !H.authored && !I && /* @__PURE__ */ (0, B.jsx)(w, {
866
- following: U.followedByMe ?? !1,
867
- handle: le(U)
868
- })]
869
- }),
870
- /* @__PURE__ */ (0, B.jsx)("div", {
871
- className: "col-[3/4] flex items-center justify-end gap-2",
872
- children: /* @__PURE__ */ (0, B.jsx)(ve, {
873
- backgroundColor: i,
874
- currentFontSizeIndex: c,
875
- fontStyle: l,
876
- onColorChange: d,
877
- onDecreaseFontSize: h,
878
- onFontStyleChange: f,
879
- onIncreaseFontSize: p,
880
- onOpenChange: y,
881
- onResetFontSize: _
882
- })
883
- })
884
- ]
885
- })
886
- }), /* @__PURE__ */ (0, B.jsxs)("div", {
887
- className: "relative flex-1",
888
- children: [/* @__PURE__ */ (0, B.jsx)(be, {
889
- iframeElement: Z,
890
- modalRef: v,
891
- tocItems: X,
892
- onOpenChange: E
893
- }), !I && /* @__PURE__ */ (0, B.jsx)("div", {
894
- className: "grow overflow-y-auto",
895
- children: /* @__PURE__ */ (0, B.jsxs)("div", {
896
- className: "mx-auto px-6 pt-5 pb-10",
897
- style: { maxWidth: "904px" },
898
- children: [
899
- /* @__PURE__ */ (0, B.jsxs)("div", {
900
- className: "flex flex-col items-center pb-8",
901
- id: "object-content",
902
- children: [/* @__PURE__ */ (0, B.jsx)(ut, {
903
- authors: W,
904
- backgroundColor: i,
905
- excerpt: H.summary ?? "",
906
- fontSize: u,
907
- fontStyle: l,
908
- heading: H.name,
909
- html: H.content ?? "",
910
- image: typeof H.image == "string" ? H.image : H.image?.url,
911
- isPopoverOpen: ee || ne,
912
- postUrl: H?.url || "",
913
- onHeadingsExtracted: Me,
914
- onIframeLoad: Ne,
915
- onLoadingChange: De
916
- }), /* @__PURE__ */ (0, B.jsx)("div", {
917
- className: "-ml-3 w-full",
918
- style: { maxWidth: q },
919
- children: /* @__PURE__ */ (0, B.jsx)(T, {
920
- actor: U,
921
- commentCount: ye,
922
- layout: "modal",
923
- likeCount: H.likeCount ?? 0,
924
- object: H,
925
- repostCount: H.repostCount ?? 0,
926
- onLikeClick: Ce
927
- })
928
- })]
929
- }),
930
- H.type === "Tombstone" && /* @__PURE__ */ (0, B.jsx)(me, { last: !0 }),
931
- /* @__PURE__ */ (0, B.jsxs)("div", {
932
- className: "mx-auto w-full border-t border-black/[8%] dark:border-gray-950",
933
- style: { maxWidth: q },
934
- children: [/* @__PURE__ */ (0, B.jsx)(fe, { object: H }), /* @__PURE__ */ (0, B.jsx)(dt, {})]
935
- }),
936
- I && /* @__PURE__ */ (0, B.jsx)(g, { size: "lg" }),
937
- /* @__PURE__ */ (0, B.jsxs)("div", {
938
- ref: we,
939
- className: "mx-auto w-full",
940
- style: { maxWidth: q },
941
- children: [F.map((t, n) => {
942
- let i = n === F.length - 1, a = t.mainReply.id, o = ie.has(a), s = ae.has(a), c = k.has(a), l = t.chain.length > 0;
943
- return /* @__PURE__ */ (0, B.jsxs)(r.Fragment, { children: [
944
- /* @__PURE__ */ (0, B.jsx)(S, {
945
- actor: t.mainReply.actor,
946
- allowDelete: t.mainReply.object.authored,
947
- commentCount: t.mainReply.object.replyCount ?? 0,
948
- isChainParent: l,
949
- isPending: A(t.mainReply.id),
950
- last: !l,
951
- layout: "reply",
952
- likeCount: t.mainReply.object.likeCount ?? 0,
953
- object: t.mainReply.object,
954
- parentId: H.id,
955
- repostCount: t.mainReply.object.repostCount ?? 0,
956
- type: "Note",
957
- onClick: () => {
958
- let n = v.current;
959
- n && e && $.set(e, n.scrollTop), Q(`/notes/${encodeURIComponent(t.mainReply.id)}`);
960
- },
961
- onDelete: K
962
- }),
963
- l && t.chain[0] && /* @__PURE__ */ (0, B.jsx)(S, {
964
- actor: t.chain[0].actor,
965
- allowDelete: t.chain[0].object.authored,
966
- commentCount: t.chain[0].object.replyCount ?? 0,
967
- isChainContinuation: !0,
968
- isPending: A(t.chain[0].id),
969
- last: t.chain.length === 1,
970
- layout: "reply",
971
- likeCount: t.chain[0].object.likeCount ?? 0,
972
- object: t.chain[0].object,
973
- parentId: H.id,
974
- repostCount: t.chain[0].object.repostCount ?? 0,
975
- type: "Note",
976
- onClick: () => {
977
- let n = v.current;
978
- n && e && $.set(e, n.scrollTop), Q(`/notes/${encodeURIComponent(t.chain[0].id)}`);
979
- },
980
- onDelete: K
981
- }, t.chain[0].id),
982
- l && o && t.chain.slice(1).map((r, i) => {
983
- let a = i === t.chain.slice(1).length - 1, o = z && z(n), s = a && o;
984
- return /* @__PURE__ */ (0, B.jsx)(S, {
985
- actor: r.actor,
986
- allowDelete: r.object.authored,
987
- commentCount: r.object.replyCount ?? 0,
988
- isChainContinuation: !0,
989
- isPending: A(r.id),
990
- last: a && !s,
991
- layout: "reply",
992
- likeCount: r.object.likeCount ?? 0,
993
- object: r.object,
994
- parentId: H.id,
995
- repostCount: r.object.repostCount ?? 0,
996
- type: "Note",
997
- onClick: () => {
998
- let t = v.current;
999
- t && e && $.set(e, t.scrollTop), Q(`/notes/${encodeURIComponent(r.id)}`);
1000
- },
1001
- onDelete: K
1002
- }, r.id);
1003
- }),
1004
- l && t.chain.length > 1 && !o && /* @__PURE__ */ (0, B.jsx)(pe, {
1005
- variant: "expand",
1006
- onClick: () => xe(a)
1007
- }),
1008
- l && o && s && z && z(n) && /* @__PURE__ */ (0, B.jsx)(pe, {
1009
- loading: c,
1010
- variant: "loadMore",
1011
- onClick: () => Se(a, n)
1012
- }),
1013
- !i && /* @__PURE__ */ (0, B.jsx)(dt, {})
1014
- ] }, t.mainReply.id);
1015
- }), j && /* @__PURE__ */ (0, B.jsx)("div", {
1016
- className: "flex flex-col items-center justify-center text-center",
1017
- children: /* @__PURE__ */ (0, B.jsx)(g, { size: "md" })
1018
- })]
1019
- }),
1020
- R && /* @__PURE__ */ (0, B.jsx)("div", {
1021
- ref: ue,
1022
- className: "h-1"
1023
- })
1024
- ]
1025
- })
1026
- })]
1027
- })]
1028
- }), !I && /* @__PURE__ */ (0, B.jsxs)("div", {
1029
- className: "pointer-events-none visible! sticky bottom-0 hidden items-end justify-between px-10 pb-[42px] lg:flex!",
1030
- children: [/* @__PURE__ */ (0, B.jsx)("div", {
1031
- className: "pointer-events-auto text-gray-600",
1032
- children: re(H.content ?? "")
1033
- }), /* @__PURE__ */ (0, B.jsxs)("div", {
1034
- className: "pointer-events-auto min-w-10 text-right text-gray-600 transition-all duration-200 ease-out",
1035
- children: [Te, "%"]
1036
- }, Te)]
1037
- })]
1038
- }) })
1039
- }) : /* @__PURE__ */ (0, B.jsx)("div", {
1040
- className: `max-h-full overflow-auto rounded-md ${i === "DARK" && "dark"} ${(i === "LIGHT" || i === "SEPIA") && "light"} ${G[i].background}`,
1041
- children: /* @__PURE__ */ (0, B.jsx)("div", {
1042
- className: "flex h-full flex-col",
1043
- children: /* @__PURE__ */ (0, B.jsx)("div", {
1044
- className: "relative flex-1",
1045
- children: /* @__PURE__ */ (0, B.jsx)("div", {
1046
- className: `sticky top-0 z-50 flex h-[102px] items-center justify-center rounded-t-md border-b max-md:h-[68px] ${G[i].background} ${G[i].border}`,
1047
- children: /* @__PURE__ */ (0, B.jsxs)("div", {
1048
- className: "grid w-full px-8 max-lg:px-4",
1049
- style: { gridTemplateColumns: `1fr minmax(0,${q}) 1fr` },
1050
- children: [/* @__PURE__ */ (0, B.jsx)("div", {
1051
- className: "flex items-center",
1052
- children: /* @__PURE__ */ (0, B.jsx)(m, {
1053
- className: G[i].button,
1054
- onClick: t
1055
- })
1056
- }), /* @__PURE__ */ (0, B.jsx)("div", {
1057
- className: "col-[2/3] mx-auto flex w-full items-center gap-3 max-md:hidden",
1058
- children: /* @__PURE__ */ (0, B.jsx)("div", {
1059
- className: "grow text-center",
1060
- children: /* @__PURE__ */ (0, B.jsx)("span", { children: "Error loading article." })
1061
- })
1062
- })]
1063
- })
1064
- })
1065
- })
1066
- })
1067
- });
1068
- };
1069
- //#endregion
1070
- //#region src/views/inbox/components/inbox-list.tsx
1071
- i();
1072
- var pt = ({ isLoading: e, activities: t, currentTopic: r, fetchNextPage: i, hasNextPage: a, isFetchingNextPage: l, onTopicChange: d }) => {
1073
- let m = oe(), { canGoBack: h, goBack: v } = ie(), [te, b] = n(!1), x = c(), { topicsQuery: ne } = se(), { data: C } = ne, re = C && C.topics.length > 0;
1074
- o(() => {
1075
- b(!!x.postId);
1076
- }, [x.postId]);
1077
- let w = s(null), T = s(null), E = s(null);
1078
- o(() => (w.current && w.current.disconnect(), w.current = new IntersectionObserver((e) => {
1079
- e[0].isIntersecting && a && !l && i();
1080
- }), T.current && w.current.observe(T.current), E.current && w.current.observe(E.current), () => {
1081
- w.current && w.current.disconnect();
1082
- }), [
1083
- a,
1084
- l,
1085
- i
1086
- ]);
1087
- let D = Math.max(0, Math.floor(t.length * .75) - 1);
1088
- return /* @__PURE__ */ (0, B.jsxs)(y, { children: [
1089
- re && /* @__PURE__ */ (0, B.jsx)(R, {
1090
- currentTopic: r,
1091
- excludeTopics: ["top"],
1092
- onTopicChange: d
1093
- }),
1094
- /* @__PURE__ */ (0, B.jsx)("div", {
1095
- className: "flex w-full flex-col",
1096
- children: /* @__PURE__ */ (0, B.jsx)("div", {
1097
- className: "w-full",
1098
- children: t.length > 0 ? /* @__PURE__ */ (0, B.jsx)("div", {
1099
- className: "my-4",
1100
- children: /* @__PURE__ */ (0, B.jsx)("div", {
1101
- className: "mx-auto flex min-h-[calc(100dvh_-_117px)] items-start gap-11",
1102
- children: /* @__PURE__ */ (0, B.jsx)("div", {
1103
- className: "flex w-full min-w-0 flex-col items-center",
1104
- children: /* @__PURE__ */ (0, B.jsxs)("div", {
1105
- className: "flex w-full min-w-0 flex-col items-start",
1106
- children: [/* @__PURE__ */ (0, B.jsxs)("ul", {
1107
- className: "mx-auto flex w-full flex-col",
1108
- "data-testid": "inbox-list",
1109
- children: [t.map((n, r) => /* @__PURE__ */ (0, B.jsxs)("li", {
1110
- "data-testid": "inbox-item",
1111
- "data-test-view-article": !0,
1112
- children: [
1113
- /* @__PURE__ */ (0, B.jsx)(S, {
1114
- actor: n.actor,
1115
- allowDelete: n.object.authored,
1116
- commentCount: n.object.replyCount ?? 0,
1117
- isLoading: e,
1118
- isPending: A(n.id),
1119
- layout: "inbox",
1120
- likeCount: n.object.likeCount ?? 0,
1121
- object: n.object,
1122
- repostCount: n.object.repostCount ?? 0,
1123
- type: n.type,
1124
- onClick: () => {
1125
- m(`/reader/${encodeURIComponent(n.id)}`);
1126
- }
1127
- }),
1128
- r < t.length - 1 && /* @__PURE__ */ (0, B.jsx)(ge, {}),
1129
- r === D && /* @__PURE__ */ (0, B.jsx)("div", {
1130
- ref: T,
1131
- className: "h-1"
1132
- })
1133
- ]
1134
- }, `${n.id}-${n.type}-${r}`)), l && /* @__PURE__ */ (0, B.jsx)("li", {
1135
- className: "flex flex-col items-center justify-center gap-4 text-center",
1136
- children: /* @__PURE__ */ (0, B.jsx)(g, { size: "md" })
1137
- })]
1138
- }), /* @__PURE__ */ (0, B.jsx)("div", {
1139
- ref: E,
1140
- className: "h-1"
1141
- })]
1142
- })
1143
- })
1144
- })
1145
- }) : r === "following" ? /* @__PURE__ */ (0, B.jsx)("div", {
1146
- className: "mt-[24vh]",
1147
- children: /* @__PURE__ */ (0, B.jsx)(H, {
1148
- actions: re ? /* @__PURE__ */ (0, B.jsx)(O, {
1149
- onClick: () => m("/explore"),
1150
- children: "Find accounts to follow →"
1151
- }) : /* @__PURE__ */ (0, B.jsx)(O, {
1152
- asChild: !0,
1153
- children: /* @__PURE__ */ (0, B.jsx)("a", {
1154
- href: "https://explore.ghost.org/social-web",
1155
- rel: "noopener noreferrer",
1156
- target: "_blank",
1157
- children: "Find accounts to follow →"
1158
- })
1159
- }),
1160
- description: "Start following publishers to see their long-form posts here.",
1161
- title: "Your Reader is empty",
1162
- children: /* @__PURE__ */ (0, B.jsx)(L, {})
1163
- })
1164
- }) : /* @__PURE__ */ (0, B.jsx)("div", {
1165
- className: "mt-[24vh]",
1166
- children: /* @__PURE__ */ (0, B.jsx)(H, {
1167
- description: "Explore other topics for more content.",
1168
- title: "Nothing here yet",
1169
- children: /* @__PURE__ */ (0, B.jsx)(L, {})
1170
- })
1171
- })
1172
- })
1173
- }),
1174
- /* @__PURE__ */ (0, B.jsx)(_, {
1175
- open: te,
1176
- onOpenChange: (e) => {
1177
- e || (h ? v() : m("/reader")), b(e);
1178
- },
1179
- children: /* @__PURE__ */ (0, B.jsxs)(u, {
1180
- className: "inset-y-3 h-[calc(100vh-24px)] w-screen max-w-[calc(100vw-24px)] animate-none! p-0 focus:outline-hidden dark:bg-gray-950",
1181
- children: [/* @__PURE__ */ (0, B.jsxs)(f, {
1182
- className: "hidden",
1183
- children: [/* @__PURE__ */ (0, B.jsx)(ee, { children: "Reader" }), /* @__PURE__ */ (0, B.jsx)(p, { children: "Ghost reader for long form articles" })]
1184
- }), x.postId && /* @__PURE__ */ (0, B.jsx)(ft, {
1185
- postId: x.postId,
1186
- onClose: () => {
1187
- h ? v() : m("/reader");
1188
- }
1189
- })]
1190
- })
1191
- })
1192
- ] });
1193
- };
1194
- //#endregion
1195
- //#region src/views/inbox/inbox.tsx
1196
- i();
1197
- var mt = () => {
1198
- let [e, t] = n("following"), { inboxQuery: r } = j({ enabled: e === "following" }), { discoveryFeedQuery: i } = ce({
1199
- enabled: e !== "following",
1200
- topic: e
1201
- }), { data: a, error: o, fetchNextPage: s, hasNextPage: c, isFetchingNextPage: l, isLoading: u } = e === "following" ? r : i, d = o && k(o) && o.statusCode === 404 && e !== "following";
1202
- return o && k(o) && !d ? /* @__PURE__ */ (0, B.jsx)(ne, {
1203
- errorCode: o.code,
1204
- statusCode: o.statusCode
1205
- }) : /* @__PURE__ */ (0, B.jsx)(pt, {
1206
- activities: d ? [] : a?.pages.flatMap((e) => e.posts) ?? Array.from({ length: 5 }, (e, t) => ({
1207
- id: `placeholder-${t}`,
1208
- object: {}
1209
- })),
1210
- currentTopic: e,
1211
- fetchNextPage: s,
1212
- hasNextPage: c,
1213
- isFetchingNextPage: l,
1214
- isLoading: u,
1215
- onTopicChange: t
1216
- });
1217
- };
1218
- //#endregion
1219
- export { mt as default };
1220
-
1221
- //# sourceMappingURL=inbox-B3rjKMTv.js.map