ghost 6.58.0 → 6.59.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.
- package/components/tryghost-adapter-base-scheduling-0.2.2.tgz +0 -0
- package/components/tryghost-adapter-base-sso-0.1.2.tgz +0 -0
- package/components/tryghost-i18n-0.0.0.tgz +0 -0
- package/components/tryghost-kg-default-nodes-2.2.0.tgz +0 -0
- package/components/tryghost-kg-html-to-lexical-1.4.0.tgz +0 -0
- package/components/tryghost-kg-lexical-html-renderer-1.5.0.tgz +0 -0
- package/content/themes/casper/.github/workflows/test.yml +11 -1
- package/content/themes/casper/AGENTS.md +25 -0
- package/content/themes/casper/assets/built/screen.css +1 -1
- package/content/themes/casper/assets/css/screen.css +15 -1
- package/content/themes/casper/gulpfile.js +3 -0
- package/content/themes/casper/package.json +8 -8
- package/content/themes/source/.gitattributes +5 -0
- package/content/themes/source/.github/workflows/test.yml +39 -0
- package/content/themes/source/AGENTS.md +25 -0
- package/content/themes/source/README.md +33 -4
- package/content/themes/source/assets/built/screen.css +1 -1
- package/content/themes/source/assets/css/screen.css +15 -0
- package/content/themes/source/gulpfile.js +6 -3
- package/content/themes/source/package.json +13 -10
- package/content/themes/source/pnpm-workspace.yaml +3 -0
- package/core/boot.js +11 -4
- package/core/built/admin/assets/Combination-BCm9FL4o.js +41 -0
- package/core/built/admin/assets/about-BdSCpjXG.js +1 -0
- package/core/built/admin/assets/account-migration-BpKAqo8k.js +1 -0
- package/core/built/admin/assets/activitypub/{account-migration-BpDeIF3G.js → account-migration-DVnYS1XG.js} +8 -8
- package/core/built/admin/assets/activitypub/activitypub.js +2 -2
- package/core/built/admin/assets/activitypub/{bluesky-sharing-aPMtrS3L.js → bluesky-sharing-DLVeE9ii.js} +31 -31
- package/core/built/admin/assets/activitypub/{content-formatters-BORfuA9G.js → content-formatters-DCsVic-t.js} +2 -2
- package/core/built/admin/assets/activitypub/{dist-ByFmDSNP2.js → dist-ByFmDSNP.js} +1 -1
- package/core/built/admin/assets/activitypub/{domain-CPdiB27_.js → domain-rrvDLfnK.js} +8 -8
- package/core/built/admin/assets/activitypub/{edit-profile-BY2PawIe.js → edit-profile-VT-piVxq.js} +23 -23
- package/core/built/admin/assets/activitypub/{explore-Sp9bgAwq.js → explore-DZg3m48P.js} +14 -14
- package/core/built/admin/assets/activitypub/{feed-BjtF4ohL.js → feed-BJqQvDMI.js} +41 -41
- package/core/built/admin/assets/activitypub/{field-BDOYVTg6.js → field-BezS4-1J.js} +2 -2
- package/core/built/admin/assets/activitypub/inbox-Uf0GVrI_.js +1284 -0
- package/core/built/admin/assets/activitypub/{label-1jhN-qhD.js → label-CZ6if4zK.js} +2 -2
- package/core/built/admin/assets/activitypub/layout-DNuYT4Gu.js +1 -0
- package/core/built/admin/assets/activitypub/moderation-CP6mDVky.js +340 -0
- package/core/built/admin/assets/activitypub/{note-nr_m_5yb.js → note-BlFkye2g.js} +16 -16
- package/core/built/admin/assets/activitypub/{notifications-BdcyivbT.js → notifications-GGTrGEdu.js} +163 -126
- package/core/built/admin/assets/activitypub/{preferences-CNqy1x9C.js → preferences-CjZXrZqr.js} +1550 -1551
- package/core/built/admin/assets/activitypub/{profile-DlY4rhbO.js → profile-CcXYxydm.js} +248 -248
- package/core/built/admin/assets/activitypub/{routes-CEHdEZzS.js → routes-nHCKlZl-.js} +1971 -1747
- package/core/built/admin/assets/activitypub/settings-pDzybcb3.js +315 -0
- package/core/built/admin/assets/activitypub/{site-CtBUCPBz.js → site-BZF0F8LN.js} +101 -101
- package/core/built/admin/assets/activitypub/{step-1-D9jGWyAy.js → step-1-C-Ns1Tfg.js} +3 -3
- package/core/built/admin/assets/activitypub/{step-3-KpUqpGWi.js → step-3-rDMNGmLg.js} +8 -8
- package/core/built/admin/assets/activitypub/{tabs-DvlsxTCI.js → tabs-CDjh3_Jp.js} +198 -198
- package/core/built/admin/assets/activitypub/{topic-filter-CIN1E2jg.js → topic-filter-CmTc8hpN.js} +2 -2
- package/core/built/admin/assets/activitypub/{use-activity-pub-queries-CATFd6YV.js → use-activity-pub-queries-DUDEdSdR.js} +286 -243
- package/core/built/admin/assets/activitypub/{use-reply-chain-data-DJ0vhA8V.js → use-reply-chain-data-TunGtmJl.js} +14 -14
- package/core/built/admin/assets/add-integration-modal-CXRQi1x0.js +1 -0
- package/core/built/admin/assets/add-newsletter-modal-t447KRYz.js +1 -0
- package/core/built/admin/assets/add-recommendation-modal-D882MdnR.js +1 -0
- package/core/built/admin/assets/{analytics-BC2oR8ay.js → analytics-Dj-WlzPf.js} +1 -1
- package/core/built/admin/assets/announcement-bar-modal-CwHKKw-a.js +1 -0
- package/core/built/admin/assets/api-keys-Boy5pLbD.js +1 -0
- package/core/built/admin/assets/audience-Cc40y7zQ.js +1 -0
- package/core/built/admin/assets/automations-DNLK5Udr.js +1 -0
- package/core/built/admin/assets/bluesky-sharing-Cm4aFaOl.js +1 -0
- package/core/built/admin/assets/breadcrumb-CcFr_ltt.js +1 -0
- package/core/built/admin/assets/button-BshWPHvn.js +1 -0
- package/core/built/admin/assets/chart-helpers-BsbzoWhK.js +1 -0
- package/core/built/admin/assets/{checkbox-LmClhqcS.js → checkbox-1G6KfK2q.js} +1 -1
- package/core/built/admin/assets/chunk-KS7C4IRE-DCsL4i4D.js +4 -0
- package/core/built/admin/assets/{chunk.408.1a258af360eb8d905508.js → chunk.301.5673a0caf7c49bb00212.js} +3 -3
- package/core/built/admin/assets/{chunk.524.4c693c3a00ac91df34fa.js → chunk.524.86db0d945468c852374b.js} +4 -4
- package/core/built/admin/assets/{chunk.582.20b600e329e58d12d7c2.js → chunk.582.c2f6216d3c4af303e236.js} +6 -6
- package/core/built/admin/assets/{code-editor-view-DqTOUnbM.js → code-editor-view-BVjtWyst.js} +1 -1
- package/core/built/admin/assets/{code-editor-view-bA0lfxUL.js → code-editor-view-y_zVfmCa.js} +1 -1
- package/core/built/admin/assets/color-picker-XEMPgNJE.js +3 -0
- package/core/built/admin/assets/{color-picker-field-Cv9GOJQZ.js → color-picker-field-BhplXcy5.js} +1 -1
- package/core/built/admin/assets/combobox-CRMJrvcQ.js +1 -0
- package/core/built/admin/assets/command-151T2eRx.js +1 -0
- package/core/built/admin/assets/comments-Bjbl9toF.js +1 -0
- package/core/built/admin/assets/confirmation-context-QmFxSjWy.js +1 -0
- package/core/built/admin/assets/{content-api-modal-BOFWRUkC.js → content-api-modal-CpeABXne.js} +1 -1
- package/core/built/admin/assets/{copy-field-8biQvNMD.js → copy-field-CglgRZyG.js} +1 -1
- package/core/built/admin/assets/custom-field-type-option-DSyJw4T4.js +1 -0
- package/core/built/admin/assets/custom-integration-modal-DWB9bRVp.js +1 -0
- package/core/built/admin/assets/date-range-select-kaKtab5O.js +1 -0
- package/core/built/admin/assets/design-and-theme-modal-86s2AaZ-.js +23 -0
- package/core/built/admin/assets/dirty-confirm-dialog-CTFdXXy7.js +1 -0
- package/core/built/admin/assets/disabled-sources-indicator-BFyCxUOx.js +1 -0
- package/core/built/admin/assets/dist-C1-Oy3Db.js +1 -0
- package/core/built/admin/assets/dist-CJJqYPep.js +1 -0
- package/core/built/admin/assets/dist-CNlMj7ML.js +1 -0
- package/core/built/admin/assets/dist-Kll2twSG.js +1 -0
- package/core/built/admin/assets/domain-BOoMvBG3.js +1 -0
- package/core/built/admin/assets/{dropzone-B21Entqz.js → dropzone-B6KWzsrb.js} +2 -2
- package/core/built/admin/assets/edit-profile-BagrYOrN.js +1 -0
- package/core/built/admin/assets/editor-AaJjqbpk.js +8 -0
- package/core/built/admin/assets/embed-signup-form-modal-B8L95KwR.js +8 -0
- package/core/built/admin/assets/explore-xbykZTlO.js +1 -0
- package/core/built/admin/assets/feed-BAHSipWv.js +1 -0
- package/core/built/admin/assets/{field-BQqLTgHM.js → field-kJYZ2T3C.js} +1 -1
- package/core/built/admin/assets/{filter-sources-FgqoUIL7.js → filter-sources-QeqFGNRB.js} +1 -1
- package/core/built/admin/assets/{filters-D0uIMD8n.js → filters-By5KQeV6.js} +1 -1
- package/core/built/admin/assets/filters-DtYpAkDd.js +1 -0
- package/core/built/admin/assets/first-promoter-modal-8A02oyjA.js +1 -0
- package/core/built/admin/assets/{ghost-ba408063a5922b458b4a8f216cf23251.js → ghost-f110822e67868c9fdf9a6c23754b2559.js} +9 -8
- package/core/built/admin/assets/gift-link-modal-DbYCyuhF.js +1 -0
- package/core/built/admin/assets/global-data-context-gAMDH9u1.js +1 -0
- package/core/built/admin/assets/growth-BSOxJGey.js +3 -0
- package/core/built/admin/assets/growth-BZTjURq5.js +1 -0
- package/core/built/admin/assets/history-modal-CCgWtlZE.js +1 -0
- package/core/built/admin/assets/html-field-BQC7XyLA.js +1 -0
- package/core/built/admin/assets/iframe-buffering-DnOlWTD4.js +1 -0
- package/core/built/admin/assets/{images-3cQgwfTD.js → images-D5UKr2SG.js} +1 -1
- package/core/built/admin/assets/{inbox-Dz_JblyJ.js → inbox-DvN15_YH.js} +45 -39
- package/core/built/admin/assets/index-BJz9Zlsc.js +67 -0
- package/core/built/admin/assets/index-Dg8cdR8E.css +1 -0
- package/core/built/admin/assets/{input-group-DpogNUIt.js → input-group-BPAxETpQ.js} +1 -1
- package/core/built/admin/assets/invite-user-modal-jcUaaNkW.js +1 -0
- package/core/built/admin/assets/{koenig-lexical-2KuqRwZI.js → koenig-lexical-CfXTYeli.js} +1 -1
- package/core/built/admin/assets/koenig-loader-DktFM3Uh.js +1 -0
- package/core/built/admin/assets/{kpi-card-Ck3tT2Wg.js → kpi-card-fUHZlzBX.js} +1 -1
- package/core/built/admin/assets/{kpi-card-DDIxptaS.js → kpi-card-o0urVtNL.js} +1 -1
- package/core/built/admin/assets/kpi-helpers-2FTF4a3-.js +1 -0
- package/core/built/admin/assets/kpi-tabs-B8-_k2dQ.js +1 -0
- package/core/built/admin/assets/{label-DodDsMzn.js → label-CiRS3i_f.js} +1 -1
- package/core/built/admin/assets/label-picker-ao7tuPaK.js +1 -0
- package/core/built/admin/assets/layout-DC6QGDaw.js +1 -0
- package/core/built/admin/assets/member-custom-fields-BW756-EV.js +1 -0
- package/core/built/admin/assets/member-detail-CGGgUTSl.js +1 -0
- package/core/built/admin/assets/members-ZcPthwG0.js +11 -0
- package/core/built/admin/assets/moderation-24bElWs3.js +1 -0
- package/core/built/admin/assets/multi-select-combobox-CZPrgz-Z.js +1 -0
- package/core/built/admin/assets/navigation-modal-BiTP4U_J.js +1 -0
- package/core/built/admin/assets/newsletter-B3Ihwizp.js +1 -0
- package/core/built/admin/assets/newsletter-detail-modal-CYsu4qhl.js +1 -0
- package/core/built/admin/assets/newsletter-emails-CDPR4-SP.js +1 -0
- package/core/built/admin/assets/newsletters-bJiYLJWl.js +1 -0
- package/core/built/admin/assets/note-7f6urVVA.js +1 -0
- package/core/built/admin/assets/notifications-rosQCyXH.js +1 -0
- package/core/built/admin/assets/offers-container-modal-J2j6NpDL.js +1 -0
- package/core/built/admin/assets/onboarding-route-DTjcThKl.js +1 -0
- package/core/built/admin/assets/overview-BxvWzGaf.js +1 -0
- package/core/built/admin/assets/overview-D6JG0hkZ.js +1 -0
- package/core/built/admin/assets/{page-header-VLPJfj_d.js → page-header-l7vXmLIw.js} +1 -1
- package/core/built/admin/assets/pintura-modal-BGHmudVB.js +1 -0
- package/core/built/admin/assets/portal-frame-DVc4VHX_.js +1 -0
- package/core/built/admin/assets/portal-modal-BCOcdiRi.js +1 -0
- package/core/built/admin/assets/{post-analytics-Gv81eN_g.js → post-analytics-CTSZMK6I.js} +1 -1
- package/core/built/admin/assets/post-analytics-header-Dt4RQGq0.js +1 -0
- package/core/built/admin/assets/{post-analytics-provider-O2YjZMhN.js → post-analytics-provider-C4ydiboO.js} +1 -1
- package/core/built/admin/assets/post-share-modal-DjH_a_1L.js +1 -0
- package/core/built/admin/assets/preferences-BLo6VJUS.js +5 -0
- package/core/built/admin/assets/preview-modal-BOgjgsJL.js +1 -0
- package/core/built/admin/assets/profile-DG6iCdRH.js +1 -0
- package/core/built/admin/assets/radio-group-ChHD4EQJ.js +1 -0
- package/core/built/admin/assets/router-provider-Bexg1t-V.js +1 -0
- package/core/built/admin/assets/select-ChxknEcT.js +1 -0
- package/core/built/admin/assets/settings-B0VDAhgV.js +1 -0
- package/core/built/admin/assets/settings-Dwo3CeAD.js +4 -0
- package/core/built/admin/assets/settings-breadcrumbs-sLDNedBW.js +1 -0
- package/core/built/admin/assets/share-modal-BDb2nacg.js +1 -0
- package/core/built/admin/assets/skeleton-D7hwjdry.js +1 -0
- package/core/built/admin/assets/slack-modal-CwNAD69x.js +1 -0
- package/core/built/admin/assets/sort-button-DhqpxkrO.js +1 -0
- package/core/built/admin/assets/source-icon-BPsD5ees.js +1 -0
- package/core/built/admin/assets/stats-WdDJ8c_1.js +1 -0
- package/core/built/admin/assets/stats-view-J3PI2eT_.js +1 -0
- package/core/built/admin/assets/step-1-2q1SjerQ.js +1 -0
- package/core/built/admin/assets/step-2-D5mJB3Uu.js +1 -0
- package/core/built/admin/assets/step-3-BpAuYTGZ.js +2 -0
- package/core/built/admin/assets/{stripe-button-Bh4p6Wud.js → stripe-button-DDoUKN5a.js} +1 -1
- package/core/built/admin/assets/stripe-connect-modal-pMdF3t4S.js +1 -0
- package/core/built/admin/assets/switch-B_1yU3Aw.js +1 -0
- package/core/built/admin/assets/{table-DghJxZMH.js → table-CrqQtkR2.js} +1 -1
- package/core/built/admin/assets/tabs-BhzVdh5p.js +1 -0
- package/core/built/admin/assets/tag-detail-CwJhI4qg.js +2 -0
- package/core/built/admin/assets/tags-CvJ0PgrB.js +1 -0
- package/core/built/admin/assets/testimonials-modal-CV82IAnI.js +1 -0
- package/core/built/admin/assets/tier-detail-modal-pLzCOfeg.js +1 -0
- package/core/built/admin/assets/toggle-group-BW_T4yn6.js +1 -0
- package/core/built/admin/assets/topic-filter-DkXjDejV.js +1 -0
- package/core/built/admin/assets/transistor-modal-TMRvHZ6B.js +1 -0
- package/core/built/admin/assets/unsplash-modal-CV92RdPw.js +1 -0
- package/core/built/admin/assets/{use-analytics-data-IxJcSjc9.js → use-analytics-data-BM_uV9SU.js} +1 -1
- package/core/built/admin/assets/use-check-theme-limit-error-DkBnXMSY.js +1 -0
- package/core/built/admin/assets/use-confirm-unload-SzlkOIpm.js +1 -0
- package/core/built/admin/assets/use-feature-flag-cahOlMva.js +1 -0
- package/core/built/admin/assets/use-filter-params-BX5qf0Cg.js +1 -0
- package/core/built/admin/assets/{use-growth-stats-1NW-8eEZ.js → use-growth-stats-D0LlWBe6.js} +1 -1
- package/core/built/admin/assets/{use-hash-link-navigation-guard-B9j6HIrV.js → use-hash-link-navigation-guard-B_Y3FhYH.js} +1 -1
- package/core/built/admin/assets/use-limiter-D3DHSoAj.js +2 -0
- package/core/built/admin/assets/{use-pintura-config-BjFChXV1.js → use-pintura-config-D63Xu0SG.js} +1 -1
- package/core/built/admin/assets/use-pintura-editor-Z51aFnC8.js +1 -0
- package/core/built/admin/assets/{use-post-referrers-Dp1BnTAK.js → use-post-referrers-Cvymr3gt.js} +1 -1
- package/core/built/admin/assets/use-query-params-BfzuqbcD.js +1 -0
- package/core/built/admin/assets/use-reply-chain-data-Dc18Ujqo.js +1 -0
- package/core/built/admin/assets/use-setting-group-DYRIzqC0.js +1 -0
- package/core/built/admin/assets/use-settings-navigation-aDSLtmEl.js +1 -0
- package/core/built/admin/assets/{use-simple-pagination-DsEGSJhe.js → use-simple-pagination-B2TdNX67.js} +1 -1
- package/core/built/admin/assets/{use-tinybird-query-Ci_DiPkX.js → use-tinybird-query-BvQIVuRc.js} +1 -1
- package/core/built/admin/assets/{use-tinybird-token-CsUwc722.js → use-tinybird-token-COQTPIwL.js} +1 -1
- package/core/built/admin/assets/use-upgrade-route-BZf1g59m.js +1 -0
- package/core/built/admin/assets/{use-url-input-BEZJpVgN.js → use-url-input-PcqZadXa.js} +1 -1
- package/core/built/admin/assets/user-detail-modal-DeO3SAZq.js +1 -0
- package/core/built/admin/assets/{virtual-list-D5ugXyZY.js → virtual-list-D3MfPNOh.js} +1 -1
- package/core/built/admin/assets/web-CDdyG7z1.js +2 -0
- package/core/built/admin/assets/web-CwQ8_QUc.js +1 -0
- package/core/built/admin/assets/zapier-modal-a7t75iNI.js +1 -0
- package/core/built/admin/index.html +15 -12
- package/core/frontend/apps/private-blogging/lib/helpers/input_password.js +2 -1
- package/core/frontend/helpers/body_class.js +2 -1
- package/core/frontend/helpers/cancel_link.js +2 -1
- package/core/frontend/helpers/color_to_rgba.js +2 -1
- package/core/frontend/helpers/content_api_key.js +2 -1
- package/core/frontend/helpers/content_api_url.js +2 -1
- package/core/frontend/helpers/contrast_text_color.js +2 -1
- package/core/frontend/helpers/facebook_url.js +2 -1
- package/core/frontend/helpers/ghost_foot.js +2 -1
- package/core/frontend/helpers/ghost_head.js +2 -1
- package/core/frontend/helpers/has.js +4 -2
- package/core/frontend/helpers/link_class.js +2 -1
- package/core/frontend/helpers/meta_description.js +2 -1
- package/core/frontend/helpers/meta_title.js +2 -1
- package/core/frontend/helpers/navigation.js +113 -22
- package/core/frontend/helpers/page_url.js +2 -1
- package/core/frontend/helpers/post_class.js +2 -1
- package/core/frontend/helpers/reading_time.js +2 -1
- package/core/frontend/helpers/social_accounts.js +2 -1
- package/core/frontend/helpers/social_url.js +2 -1
- package/core/frontend/helpers/total_members.js +2 -1
- package/core/frontend/helpers/total_paid_members.js +2 -1
- package/core/frontend/helpers/tpl/navigation.hbs +1 -1
- package/core/frontend/helpers/twitter_url.js +2 -1
- package/core/frontend/public/cards.manifest.json +1 -1
- package/core/server/api/endpoints/posts.js +7 -4
- package/core/server/api/endpoints/utils/permissions.js +2 -1
- package/core/server/api/endpoints/utils/validators/input/settings.js +83 -1
- package/core/server/data/exporter/table-lists.js +1 -0
- package/core/server/data/importer/handlers/json.js +2 -1
- package/core/server/data/migrations/versions/5.19/2022-09-02-20-52-backfill-new-product-columns.js +2 -1
- package/core/server/data/migrations/versions/5.21/2022-10-26-04-50-member-subscription-created-batch-id.js +4 -2
- package/core/server/data/migrations/versions/5.22/2022-10-31-12-03-backfill-new-product-columns.js +2 -1
- package/core/server/data/migrations/versions/6.58/2026-08-11-21-22-48-rename-email-batches-provider-id.js +1 -1
- package/core/server/data/migrations/versions/6.59/2026-08-18-17-06-46-add-gift-delivery-fields-to-gifts.js +26 -0
- package/core/server/data/migrations/versions/6.59/2026-08-18-17-07-01-add-gift-deliveries.js +20 -0
- package/core/server/data/schema/commands.js +48 -24
- package/core/server/data/schema/schema.js +28 -7
- package/core/server/data/seeders/importers/automation-action-revisions-importer.js +3 -36
- package/core/server/data/seeders/importers/automation-actions-importer.js +5 -41
- package/core/server/data/seeders/importers/automation-run-steps-importer.js +3 -36
- package/core/server/data/seeders/importers/automation-runs-importer.js +7 -42
- package/core/server/data/seeders/importers/automations-importer.js +3 -36
- package/core/server/data/seeders/importers/comment-reports-importer.js +5 -5
- package/core/server/data/seeders/importers/comments-importer.js +5 -5
- package/core/server/data/seeders/importers/email-batches-importer.js +5 -4
- package/core/server/data/seeders/importers/email-recipients-importer.js +12 -20
- package/core/server/data/seeders/importers/emails-importer.js +6 -6
- package/core/server/data/seeders/importers/labels-importer.js +3 -3
- package/core/server/data/seeders/importers/members-click-events-importer.js +5 -5
- package/core/server/data/seeders/importers/members-created-events-importer.js +13 -12
- package/core/server/data/seeders/importers/members-feedback-importer.js +7 -7
- package/core/server/data/seeders/importers/members-importer.js +4 -4
- package/core/server/data/seeders/importers/members-login-events-importer.js +3 -3
- package/core/server/data/seeders/importers/members-products-importer.js +2 -2
- package/core/server/data/seeders/importers/members-status-events-importer.js +4 -3
- package/core/server/data/seeders/importers/members-stripe-customers-importer.js +2 -2
- package/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js +7 -7
- package/core/server/data/seeders/importers/members-subscribe-events-importer.js +3 -3
- package/core/server/data/seeders/importers/members-subscription-created-events-importer.js +3 -3
- package/core/server/data/seeders/importers/offer-redemptions-importer.js +7 -7
- package/core/server/data/seeders/importers/offers-importer.js +3 -3
- package/core/server/data/seeders/importers/posts-importer.js +4 -4
- package/core/server/data/seeders/importers/table-importer.js +2 -35
- package/core/server/data/seeders/importers/tags-importer.js +2 -2
- package/core/server/data/seeders/importers/users-importer.js +2 -2
- package/core/server/data/seeders/importers/web-mentions-importer.js +2 -2
- package/core/server/data/seeders/utils/random.js +7 -0
- package/core/server/ghost-server.js +19 -5
- package/core/server/lib/db-date.js +72 -3
- package/core/server/models/gift-delivery.js +23 -0
- package/core/server/models/gift.js +9 -0
- package/core/server/models/index.js +3 -2
- package/core/server/models/settings.js +43 -4
- package/core/server/services/automations/database-automations-repository.js +38 -31
- package/core/server/services/automations/poll.js +1 -1
- package/core/server/services/content-import/csv/index.js +8 -0
- package/core/server/services/content-import/csv/parse.js +60 -0
- package/core/server/services/content-import/import/importer.js +222 -0
- package/core/server/services/content-import/import/post-data.js +52 -0
- package/core/server/services/content-import/import/reader.js +15 -0
- package/core/server/services/content-import/import/row.js +50 -0
- package/core/server/services/content-import/import/store.js +71 -0
- package/core/server/services/content-import/index.js +67 -0
- package/core/server/services/email-analytics/automation-email-analytics-batch-processor.js +1 -1
- package/core/server/services/email-analytics/index.js +3 -1
- package/core/server/services/email-analytics/jobs/index.js +2 -2
- package/core/server/services/email-service/email-service-wrapper.js +1 -1
- package/core/server/services/email-suppression-list/email-suppression-list.js +4 -2
- package/core/server/services/gifts/CONTEXT.md +27 -3
- package/core/server/services/gifts/README.md +8 -4
- package/core/server/services/gifts/constants.js +2 -1
- package/core/server/services/gifts/email-templates/gift-delivery.hbs +20 -0
- package/core/server/services/gifts/email-templates/gift-delivery.js +39 -0
- package/core/server/services/gifts/email-templates/gift-purchase-confirmation.hbs +2 -2
- package/core/server/services/gifts/email-templates/gift-purchase-confirmation.js +19 -4
- package/core/server/services/gifts/events/send-gift-delivery-event.js +15 -0
- package/core/server/services/gifts/gift-bookshelf-repository.js +23 -3
- package/core/server/services/gifts/gift-checkout-adapter.js +5 -3
- package/core/server/services/gifts/gift-codec.js +8 -0
- package/core/server/services/gifts/gift-delivery-bookshelf-repository.js +107 -0
- package/core/server/services/gifts/gift-delivery-codec.js +12 -0
- package/core/server/services/gifts/gift-delivery-schema.js +15 -0
- package/core/server/services/gifts/gift-delivery-service.js +209 -0
- package/core/server/services/gifts/gift-email-renderer.js +13 -1
- package/core/server/services/gifts/gift-email-service.js +97 -17
- package/core/server/services/gifts/gift-schema.js +10 -6
- package/core/server/services/gifts/gift-service.js +259 -34
- package/core/server/services/gifts/gift.js +59 -5
- package/core/server/services/gifts/index.js +69 -3
- package/core/server/services/lib/mailgun-client.js +5 -2
- package/core/server/services/mail/ghost-mailer.js +9 -1
- package/core/server/services/member-welcome-emails/service.js +6 -1
- package/core/server/services/members/members-api/controllers/router-controller.js +26 -8
- package/core/server/services/stripe/services/webhook/checkout-session-event-service.js +100 -12
- package/core/server/services/stripe/stripe-api.js +3 -2
- package/core/server/services/stripe/webhook-controller.js +6 -3
- package/core/server/services/stripe/webhook-manager.js +2 -0
- package/core/shared/labs.js +1 -0
- package/package.json +9 -8
- package/pnpm-lock.yaml +26 -11
- package/pnpm-workspace.yaml +5 -6
- package/content/themes/source/yarn.lock +0 -6232
- package/core/built/admin/assets/Combination-BDvCdg1t.js +0 -41
- package/core/built/admin/assets/about-B_BvSyLF.js +0 -1
- package/core/built/admin/assets/account-migration-oJUGxnzT.js +0 -1
- package/core/built/admin/assets/activitypub/dist-Dqggkccr.js +0 -215
- package/core/built/admin/assets/activitypub/inbox-z1o2j1Tb.js +0 -1221
- package/core/built/admin/assets/activitypub/layout-BRMezuty.js +0 -1
- package/core/built/admin/assets/activitypub/moderation-CZudJi8N.js +0 -160
- package/core/built/admin/assets/activitypub/settings-CrSV1cux.js +0 -107
- package/core/built/admin/assets/add-integration-modal-BW23PDYs.js +0 -1
- package/core/built/admin/assets/add-newsletter-modal-M0ls8BKO.js +0 -1
- package/core/built/admin/assets/add-recommendation-modal-B0NeBMzl.js +0 -1
- package/core/built/admin/assets/announcement-bar-modal-pXBqjQE_.js +0 -1
- package/core/built/admin/assets/api-keys-Df6uv1dT.js +0 -1
- package/core/built/admin/assets/audience-BY8od8If.js +0 -1
- package/core/built/admin/assets/automations-DCs6Wady.js +0 -1
- package/core/built/admin/assets/bluesky-sharing-D0P42Cws.js +0 -1
- package/core/built/admin/assets/breadcrumb-MTj_cKLb.js +0 -1
- package/core/built/admin/assets/chart-helpers-DcO3k_vA.js +0 -1
- package/core/built/admin/assets/chunk-KS7C4IRE-DG9HTHQ3.js +0 -4
- package/core/built/admin/assets/color-picker-CBlJMv3y.js +0 -3
- package/core/built/admin/assets/combobox-BbPJzjCp.js +0 -1
- package/core/built/admin/assets/command-BrhXIlDr.js +0 -1
- package/core/built/admin/assets/comments-Cu4rD1aJ.js +0 -1
- package/core/built/admin/assets/confirmation-provider-BEdrnHns.js +0 -1
- package/core/built/admin/assets/custom-field-type-option-CNhAgHbJ.js +0 -1
- package/core/built/admin/assets/custom-integration-modal-CrGOI8IB.js +0 -1
- package/core/built/admin/assets/date-range-select-Bsh4gIek.js +0 -1
- package/core/built/admin/assets/design-and-theme-modal-DWZguwWX.js +0 -23
- package/core/built/admin/assets/dirty-confirm-dialog-DmdMpgyN.js +0 -1
- package/core/built/admin/assets/disabled-sources-indicator-BLnmyWgt.js +0 -1
- package/core/built/admin/assets/dist-DMFGvqqU.js +0 -1
- package/core/built/admin/assets/dist-DlCyLrOC.js +0 -1
- package/core/built/admin/assets/dist-j1xxxnY8.js +0 -1
- package/core/built/admin/assets/domain-Dp9TRrFp.js +0 -1
- package/core/built/admin/assets/edit-profile-DG6lpMsr.js +0 -1
- package/core/built/admin/assets/editor-CPQOrhrn.js +0 -8
- package/core/built/admin/assets/embed-signup-form-modal-CgWniDha.js +0 -9
- package/core/built/admin/assets/explore-C3rzONJv.js +0 -1
- package/core/built/admin/assets/feed-DpUwS1cU.js +0 -1
- package/core/built/admin/assets/filters-DZJT29GW.js +0 -1
- package/core/built/admin/assets/first-promoter-modal-DJhQQheG.js +0 -1
- package/core/built/admin/assets/gift-link-modal-sdFLjND9.js +0 -1
- package/core/built/admin/assets/global-data-provider-CixmTX00.js +0 -1
- package/core/built/admin/assets/growth-0YYkBEeS.js +0 -1
- package/core/built/admin/assets/growth-DpjAPeQT.js +0 -3
- package/core/built/admin/assets/history-modal-BWJ4-cJ0.js +0 -1
- package/core/built/admin/assets/html-field-C-oa5DEl.js +0 -1
- package/core/built/admin/assets/iframe-buffering-Ba9sDpi2.js +0 -1
- package/core/built/admin/assets/index-BOJzlYiz.js +0 -67
- package/core/built/admin/assets/index-Bid6LAyc.css +0 -1
- package/core/built/admin/assets/invite-user-modal-DCiQSiuD.js +0 -1
- package/core/built/admin/assets/koenig-editor-base-BApy8Q7C.js +0 -1
- package/core/built/admin/assets/kpi-helpers-ssbuy-hD.js +0 -1
- package/core/built/admin/assets/kpi-tabs-BqoIM6bI.js +0 -1
- package/core/built/admin/assets/label-picker-Cvvbmzb5.js +0 -1
- package/core/built/admin/assets/layout-DkkGyev2.js +0 -1
- package/core/built/admin/assets/member-custom-fields-CvGcpaiW.js +0 -1
- package/core/built/admin/assets/member-detail-CMCMZ47_.js +0 -1
- package/core/built/admin/assets/members-sRl6fNfq.js +0 -11
- package/core/built/admin/assets/moderation-KhKwGqI1.js +0 -1
- package/core/built/admin/assets/multi-select-combobox-nhCff0_K.js +0 -1
- package/core/built/admin/assets/navigation-modal-MDJExWDJ.js +0 -1
- package/core/built/admin/assets/newsletter-BIBHumfV.js +0 -1
- package/core/built/admin/assets/newsletter-detail-modal-CfjBMH3v.js +0 -1
- package/core/built/admin/assets/newsletter-emails-ClDL-7dA.js +0 -1
- package/core/built/admin/assets/newsletters-CBe-IPzK.js +0 -1
- package/core/built/admin/assets/note-HnNUOt4d.js +0 -1
- package/core/built/admin/assets/notifications-Cj5e-258.js +0 -1
- package/core/built/admin/assets/offers-container-modal-BHwHtixC.js +0 -1
- package/core/built/admin/assets/onboarding-route-D_4jp7Nq.js +0 -1
- package/core/built/admin/assets/overview-CezDdg-F.js +0 -1
- package/core/built/admin/assets/overview-D5mM51Lj.js +0 -1
- package/core/built/admin/assets/pintura-modal-BXXJ8Iaa.js +0 -1
- package/core/built/admin/assets/portal-frame-BLCvF8f-.js +0 -1
- package/core/built/admin/assets/portal-modal-DN80tAcy.js +0 -1
- package/core/built/admin/assets/post-analytics-header-_ydSY8qO.js +0 -1
- package/core/built/admin/assets/post-share-modal-CzYak_a5.js +0 -1
- package/core/built/admin/assets/preferences-gneLb6LV.js +0 -5
- package/core/built/admin/assets/preview-modal-Bkq-tgVm.js +0 -1
- package/core/built/admin/assets/profile-CzXmCNTC.js +0 -1
- package/core/built/admin/assets/radio-group-Dsq5ZEbV.js +0 -1
- package/core/built/admin/assets/router-provider-CkB_ArLF.js +0 -1
- package/core/built/admin/assets/select-xuZAuDyS.js +0 -1
- package/core/built/admin/assets/settings-Ct8pabhr.js +0 -1
- package/core/built/admin/assets/settings-KSWWQanQ.js +0 -4
- package/core/built/admin/assets/settings-breadcrumbs-DbPGu-Tu.js +0 -1
- package/core/built/admin/assets/share-modal-CdiUx9WM.js +0 -1
- package/core/built/admin/assets/slack-modal-BP--Z3jE.js +0 -1
- package/core/built/admin/assets/sort-button-CjfKdlsL.js +0 -1
- package/core/built/admin/assets/source-icon-DHj1h6Ts.js +0 -1
- package/core/built/admin/assets/stats-C615kulJ.js +0 -1
- package/core/built/admin/assets/stats-view-BSMRdYiN.js +0 -1
- package/core/built/admin/assets/step-1-pSdGYtIF.js +0 -1
- package/core/built/admin/assets/step-2-T9Uy4eBD.js +0 -1
- package/core/built/admin/assets/step-3-D4uXe_XG.js +0 -2
- package/core/built/admin/assets/stripe-connect-modal-C2vTvepi.js +0 -1
- package/core/built/admin/assets/switch-CE2NuMn-.js +0 -1
- package/core/built/admin/assets/tabs-l9c7FjzI.js +0 -1
- package/core/built/admin/assets/tag-detail-DBw_M2-p.js +0 -2
- package/core/built/admin/assets/tags-DoWsAG6l.js +0 -1
- package/core/built/admin/assets/testimonials-modal-BZKePE2T.js +0 -1
- package/core/built/admin/assets/tier-detail-modal-D65pVWsN.js +0 -1
- package/core/built/admin/assets/toggle-group-uJnl42w3.js +0 -1
- package/core/built/admin/assets/topic-filter-BM7hz0kW.js +0 -1
- package/core/built/admin/assets/transistor-modal-VZOGN3od.js +0 -1
- package/core/built/admin/assets/unsplash-modal-CKGfACxF.js +0 -1
- package/core/built/admin/assets/use-check-theme-limit-error-CGp3CGT5.js +0 -1
- package/core/built/admin/assets/use-feature-flag-CSq2Lwzt.js +0 -1
- package/core/built/admin/assets/use-filter-params-0hcJJuEJ.js +0 -1
- package/core/built/admin/assets/use-limiter-ffwpsZPp.js +0 -2
- package/core/built/admin/assets/use-pintura-editor-Cb41oJyL.js +0 -1
- package/core/built/admin/assets/use-query-params-DHhhu8wi.js +0 -1
- package/core/built/admin/assets/use-reply-chain-data-C0ZUTkfk.js +0 -1
- package/core/built/admin/assets/use-setting-group-Bx8M6FL2.js +0 -1
- package/core/built/admin/assets/use-settings-navigation-BOZcat_V.js +0 -1
- package/core/built/admin/assets/use-upgrade-route-B3_DUiuT.js +0 -1
- package/core/built/admin/assets/user-detail-modal-595z1N5r.js +0 -1
- package/core/built/admin/assets/web-CAta3lRE.js +0 -1
- package/core/built/admin/assets/web-Ds9_wWJK.js +0 -2
- package/core/built/admin/assets/zapier-modal-CcfDZY53.js +0 -1
- package/core/server/data/seeders/utils/database-date.js +0 -28
- package/core/server/services/automations/database-date.js +0 -59
- /package/core/built/admin/assets/{dist-CqO2lWS02.js → dist-CqO2lWS0.js} +0 -0
- /package/core/server/services/{automations → lib}/mailgun-message-id.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"css":{"audio":".kg-audio-card,.kg-audio-card *{box-sizing:border-box}.kg-audio-card{display:flex;width:100%;min-height:96px;border-radius:6px;padding:4px;background:#fff;color:#222;box-shadow:inset 0 0 0 1px #7c8b9a40;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.kg-audio-card+.kg-audio-card{margin-top:1em}.kg-audio-thumbnail{display:flex;justify-content:center;align-items:center;width:80px;min-width:80px;margin:8px;background:transparent;object-fit:cover;aspect-ratio:1/1;border-radius:3px}.kg-audio-thumbnail.placeholder{background:var(--ghost-accent-color)}.kg-audio-thumbnail.placeholder svg{width:24px;height:24px;fill:#fff}.kg-audio-player-container{position:relative;display:flex;flex-direction:column;justify-content:space-between;width:100%;--seek-before-width: 0%;--volume-before-width: 100%;--buffered-width: 0%}.kg-audio-title{width:100%;margin:8px 0 0;padding:8px 12px;border:none;font-family:inherit;font-size:16px;font-weight:600;line-height:1.15em;background:transparent}.kg-audio-player{display:flex;flex-grow:1;align-items:center;padding:8px 12px}.kg-audio-current-time{min-width:38px;padding:0 4px;font-family:inherit;font-size:12.5px;font-weight:500;line-height:1em;white-space:nowrap}.kg-audio-time{width:56px;color:#ababab;font-family:inherit;font-size:12.5px;font-weight:500;line-height:1em;white-space:nowrap}.kg-audio-duration{padding:0 4px}.kg-audio-play-icon,.kg-audio-pause-icon{position:relative;bottom:1px;padding:0 4px 0 0;font-size:0;background:transparent}.kg-audio-hide{display:none!important}.kg-audio-play-icon svg,.kg-audio-pause-icon svg{width:14px;height:14px;fill:currentColor}.kg-audio-seek-slider{flex-grow:1;margin:0 4px}@media(max-width:640px){.kg-audio-seek-slider{display:none}}.kg-audio-playback-rate{min-width:37px;padding:0 4px;font-family:inherit;font-size:12.5px;font-weight:600;line-height:1em;text-align:left;background:transparent;white-space:nowrap}@media(max-width:640px){.kg-audio-playback-rate{padding-left:8px}}.kg-audio-mute-icon,.kg-audio-unmute-icon{position:relative;bottom:-1px;padding:0 4px;font-size:0;background:transparent}@media(max-width:640px){.kg-audio-mute-icon,.kg-audio-unmute-icon{margin-left:auto}}.kg-audio-mute-icon svg,.kg-audio-unmute-icon svg{width:16px;height:16px;fill:currentColor}.kg-audio-volume-slider{width:80px}@media(max-width:400px){.kg-audio-volume-slider{display:none}}.kg-audio-seek-slider:before{content:\"\";position:absolute;left:0;width:var(--seek-before-width)!important;height:4px;cursor:pointer;background-color:currentColor;border-radius:2px}.kg-audio-volume-slider:before{content:\"\";position:absolute;left:0;width:var(--volume-before-width)!important;height:4px;cursor:pointer;background-color:currentColor;border-radius:2px}.kg-audio-player-container input[type=range]{position:relative;-webkit-appearance:none;background:transparent}.kg-audio-player-container input[type=range]:focus{outline:none}.kg-audio-player-container input[type=range]::-webkit-slider-thumb{-webkit-appearance:none}.kg-audio-player-container input[type=range]::-ms-track{cursor:pointer;border-color:transparent;color:transparent;background:transparent}.kg-audio-player-container button{display:flex;align-items:center;border:0;cursor:pointer}.kg-audio-player-container input[type=range]{height:auto;padding:0;border:0}.kg-audio-player-container input[type=range]::-webkit-slider-runnable-track{width:100%;height:4px;cursor:pointer;background:#7c8b9a40;border-radius:2px}.kg-audio-player-container input[type=range]::-webkit-slider-thumb{position:relative;box-sizing:content-box;width:13px;height:13px;margin:-5px 0 0;border:0;cursor:pointer;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #00000014,0 1px 4px #0000003d}.kg-audio-player-container input[type=range]:active::-webkit-slider-thumb{transform:scale(1.2)}.kg-audio-player-container input[type=range]::-moz-range-track{width:100%;height:4px;cursor:pointer;background:#7c8b9a40;border-radius:2px}.kg-audio-player-container input[type=range]::-moz-range-progress{background:currentColor;border-radius:2px}.kg-audio-player-container input[type=range]::-moz-range-thumb{box-sizing:content-box;width:13px;height:13px;border:0;cursor:pointer;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #00000014,0 1px 4px #0000003d}.kg-audio-player-container input[type=range]:active::-moz-range-thumb{transform:scale(1.2)}.kg-audio-player-container input[type=range]::-ms-track{width:100%;height:3px;border:solid transparent;color:transparent;cursor:pointer;background:transparent}.kg-audio-player-container input[type=range]::-ms-fill-lower{background:#fff}.kg-audio-player-container input[type=range]::-ms-fill-upper{background:currentColor}.kg-audio-player-container input[type=range]::-ms-thumb{box-sizing:content-box;width:13px;height:13px;border:0;cursor:pointer;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #00000014,0 1px 4px #0000003d}.kg-audio-player-container input[type=range]:active::-ms-thumb{transform:scale(1.2)}\n","blockquote":".kg-blockquote-alt{font-size:1.5em;font-style:italic;line-height:1.7em;text-align:center;padding:0 2.5em}@media(max-width:800px){.kg-blockquote-alt{font-size:1.4em;padding-left:2em;padding-right:2em}}@media(max-width:600px){.kg-blockquote-alt{font-size:1.2em;padding-left:1.75em;padding-right:1.75em}}\n","bookmark":".kg-bookmark-card,.kg-bookmark-card *{box-sizing:border-box}.kg-bookmark-card,.kg-bookmark-publisher{position:relative}.kg-bookmark-card a.kg-bookmark-container,.kg-bookmark-card a.kg-bookmark-container:hover{display:flex;background:#fff;text-decoration:none;border-radius:6px;border:1px solid rgb(124 139 154 / 25%);overflow:hidden;color:#222}.kg-bookmark-content{display:flex;flex-direction:column;flex-grow:1;flex-basis:100%;align-items:flex-start;justify-content:flex-start;padding:20px;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.kg-bookmark-title{font-size:15px;line-height:1.4em;font-weight:600}.kg-bookmark-description{display:-webkit-box;font-size:14px;line-height:1.5em;margin-top:3px;font-weight:400;max-height:44px;overflow-y:hidden;opacity:.7;-webkit-line-clamp:2;-webkit-box-orient:vertical}.kg-bookmark-metadata{display:flex;align-items:center;margin-top:22px;width:100%;font-size:14px;font-weight:500;white-space:nowrap}.kg-bookmark-metadata>*:not(img){opacity:.7}.kg-bookmark-icon{width:20px;height:20px;margin-right:6px}.kg-bookmark-author,.kg-bookmark-publisher{display:inline}.kg-bookmark-publisher{text-overflow:ellipsis;overflow:hidden;max-width:240px;white-space:nowrap;display:block;line-height:1.65em}.kg-bookmark-metadata>span:nth-of-type(2){font-weight:400}.kg-bookmark-metadata>span:nth-of-type(2):before{content:\"\\2022\";margin:0 6px}.kg-bookmark-metadata>span:last-of-type{overflow:hidden;text-overflow:ellipsis}.kg-bookmark-thumbnail{position:relative;flex-grow:1;min-width:33%}.kg-bookmark-thumbnail img{width:100%;height:100%;object-fit:cover;position:absolute;top:0;left:0;border-radius:0 2px 2px 0}\n","button":".kg-button-card,.kg-button-card *{box-sizing:border-box}.kg-button-card{display:flex;position:static;align-items:center;width:100%;justify-content:center}.kg-button-card.kg-align-left{justify-content:flex-start}.kg-button-card a.kg-btn{display:flex;position:static;align-items:center;padding:0 1.2em;height:2.4em;line-height:1em;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:.95em;font-weight:600;text-decoration:none;border-radius:5px;transition:opacity .2s ease-in-out}.kg-button-card a.kg-btn:hover{opacity:.85}.kg-button-card a.kg-btn-accent{background-color:var(--ghost-accent-color);color:#fff}\n","callout":".kg-callout-card,.kg-callout-card *{box-sizing:border-box}.kg-callout-card{display:flex;padding:1.2em 1.6em;border-radius:8px}.kg-callout-card-grey{background:#7c8b9a21}.kg-callout-card-white{background:transparent;box-shadow:inset 0 0 0 1px #7c8b9a33}.kg-callout-card-blue{background:#21ace81f}.kg-callout-card-green{background:#34b7431f}.kg-callout-card-yellow{background:#f0a50f21}.kg-callout-card-red{background:#d12e2e1c}.kg-callout-card-pink{background:#e147ae1c}.kg-callout-card-purple{background:#8755ec1f}.kg-callout-card-accent{background:var(--ghost-accent-color);color:#fff}.kg-callout-card.kg-callout-card-accent a{color:#fff;text-decoration:underline}.kg-callout-card div.kg-callout-emoji{padding-right:.8em;line-height:1.25em;font-size:1.15em}.kg-callout-card div.kg-callout-text{font-size:.95em;line-height:1.5em}.kg-callout-card+.kg-callout-card{margin-top:1em}\n","collection":".kg-collection-card{width:100%;margin-top:6vmin}.kg-collection-card+*{margin-top:6vmin}.kg-collection-card-title{margin:.8rem 0 1.6rem;font-size:1.5rem;font-weight:700;text-transform:uppercase}a.kg-collection-card-post-wrapper{text-decoration:none;color:var(--text-color)}a.kg-collection-card-post-wrapper:hover{opacity:1}.kg-collection-card-post{display:flex;gap:3.2rem}.kg-collection-card-img{position:relative;aspect-ratio:3/2}.kg-collection-card-img img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}a.kg-collection-card-post-wrapper:hover img{opacity:.92;transition:all .2s ease}.kg-collection-card-content{display:flex;flex-direction:column;font-size:1.6rem}h2.kg-collection-card-post-title{margin:0;font-size:2.4rem;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}p.kg-collection-card-post-excerpt{margin-top:1.2rem;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-height:1.4}.kg-collection-card-post-meta{display:flex;opacity:.5;margin-top:1.2rem;font-size:1.3rem;font-weight:500}.kg-collection-card-list{display:flex;flex-direction:column;gap:3.2rem}@media(max-width:767px){.kg-collection-card-list .kg-collection-card-post{flex-direction:column}}.kg-collection-card-list .kg-collection-card-img{flex:0 0 30%}.kg-collection-card-grid{display:grid;grid-template-columns:repeat(1,minmax(0,1fr));gap:2.4rem}@media(min-width:640px){.kg-collection-card-grid:not(.columns-1){grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:1024px){.kg-collection-card-grid:not(.columns-1):not(.columns-2){grid-template-columns:repeat(3,minmax(0,1fr));gap:3.2rem}.kg-collection-card-grid.columns-1{gap:4.8rem}.kg-collection-card-grid.columns-2{gap:4rem}}@media(min-width:1280px){.kg-collection-card-grid:not(.columns-1):not(.columns-2):not(.columns-3){grid-template-columns:repeat(4,minmax(0,1fr))}}.kg-collection-card-grid .kg-collection-card-post{flex-direction:column;gap:1.2rem}@media(min-width:1024px){.kg-collection-card-grid.columns-1 .kg-collection-card-post{gap:2rem}.kg-collection-card-grid.columns-2 .kg-collection-card-post{gap:1.6rem}}.kg-collection-card-grid.columns-1 .kg-collection-card-img,.kg-collection-card-grid.columns-2 .kg-collection-card-img{aspect-ratio:16/9}.kg-collection-card-grid .kg-collection-card-content{font-size:1.5rem}@media(min-width:640px){.kg-collection-card-grid .kg-collection-card-content{font-size:1.6rem}}@media(min-width:1024px){.kg-collection-card-grid.columns-1 .kg-collection-card-content{font-size:1.8rem}.kg-collection-card-grid.columns-3 .kg-collection-card-content,.kg-collection-card-grid.columns-4 .kg-collection-card-content{font-size:1.5rem}}.kg-collection-card-grid h2.kg-collection-card-post-title{font-size:1.7rem}.kg-collection-card-grid .kg-collection-card-post-meta{font-size:1.25rem}@media(min-width:640px){.kg-collection-card-grid h2.kg-collection-card-post-title{font-size:1.9rem}.kg-collection-card-grid.columns-1 h2.kg-collection-card-post-title{font-size:2.4rem}.kg-collection-card-grid:not(.columns-3):not(.columns-4) .kg-collection-card-post-meta{font-size:1.3rem}}@media(min-width:1024px){.kg-collection-card-grid.columns-1 h2.kg-collection-card-post-title{font-size:3.6rem}.kg-collection-card-grid.columns-2 h2.kg-collection-card-post-title{font-size:2.4rem}.kg-collection-card-grid.columns-1 .kg-collection-card-post-meta{font-size:1.4rem}}@media(min-width:1280px){.kg-collection-card-grid.columns-4 h2.kg-collection-card-post-title{font-size:1.7rem}}\n","cta":".kg-cta-card,.kg-cta-card *{box-sizing:border-box}.kg-cta-card{display:flex;flex-direction:column;border-radius:8px}.kg-cta-bg-grey{background:#97a3af24}.kg-cta-bg-white{background:transparent;box-shadow:inset 0 0 0 1px #7c8b9a33}.kg-cta-bg-blue{background:#21ace81f}.kg-cta-bg-green{background:#34b7431f}.kg-cta-bg-yellow{background:#f0a50f21}.kg-cta-bg-red{background:#d12e2e1c}.kg-cta-bg-pink{background:#e147ae1c}.kg-cta-bg-purple{background:#8755ec1f}.kg-cta-sponsor-label-wrapper{margin:0 1.5em;padding:.7em 0;border-bottom:1px solid rgba(124,139,154,.2)}@media(max-width:600px){.kg-cta-sponsor-label-wrapper{margin:0 1.25em;padding:.5em 0}}.kg-cta-bg-none .kg-cta-sponsor-label-wrapper{margin:0;padding-top:0}.kg-cta-has-img .kg-cta-sponsor-label-wrapper:not(.kg-cta-bg-none .kg-cta-sponsor-label-wrapper):not(.kg-cta-minimal .kg-cta-sponsor-label-wrapper),.kg-cta-bg-none.kg-cta-no-dividers .kg-cta-sponsor-label-wrapper{border-bottom:0}.kg-cta-sponsor-label{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:12px;font-weight:600;text-transform:uppercase;text-wrap:pretty}.kg-cta-sponsor-label span:not(a span){color:color-mix(in srgb,currentColor 45%,transparent)}.kg-cta-sponsor-label a,.kg-cta-sponsor-label a span{color:currentColor;transition:opacity .15s ease-in-out}.kg-cta-sponsor-label a:hover,.kg-cta-sponsor-label a:hover span{color:currentColor;opacity:.85}.kg-cta-link-accent .kg-cta-sponsor-label a{color:var(--ghost-accent-color)}.kg-cta-content{display:flex;padding:1.5em;gap:1.5em}@media(max-width:600px){.kg-cta-content{padding:1.25em;gap:1.25em}}.kg-cta-has-img .kg-cta-sponsor-label-wrapper+.kg-cta-content:not(.kg-cta-bg-none .kg-cta-content):not(.kg-cta-minimal .kg-cta-content){padding-top:0}.kg-cta-bg-none .kg-cta-content{padding:1.5em 0;border-bottom:1px solid rgba(124,139,154,.2)}.kg-cta-bg-none.kg-cta-no-dividers .kg-cta-content{padding:0;border-bottom:none}.kg-cta-bg-none:not(.kg-cta-no-dividers) .kg-cta-content:not(.kg-cta-sponsor-label-wrapper+.kg-cta-content){border-top:1px solid rgba(124,139,154,.2)}@media(max-width:600px){.kg-cta-bg-none .kg-cta-content{padding:1.25em 0}}.kg-cta-minimal .kg-cta-content{flex-direction:row}@media(max-width:600px){.kg-cta-minimal .kg-cta-content{flex-direction:column;gap:1.6rem}}.kg-cta-immersive .kg-cta-content{flex-direction:column}.kg-cta-content-inner{display:flex;flex-direction:column;gap:1.5em}@media(max-width:600px){.kg-cta-content-inner{gap:1.25em}}.kg-cta-immersive.kg-cta-centered .kg-cta-content-inner{align-items:center}.kg-cta-image-container{flex-shrink:0}.kg-cta-image-container img{width:100%;height:auto;margin:0;object-fit:cover;border-radius:6px}.kg-cta-minimal .kg-cta-image-container img{width:64px;height:64px}@media(max-width:600px){.kg-cta-minimal .kg-cta-image-container img{width:52px;height:52px}}.kg-cta-text p{margin:0;line-height:1.5em;text-wrap:pretty}.kg-cta-bg-none .kg-cta-text p{line-height:unset}.kg-cta-immersive.kg-cta-centered .kg-cta-text{text-align:center}.kg-cta-text p+p{margin-top:1.25em}.kg-cta-text a{color:currentColor;transition:opacity .15s ease-in-out}.kg-cta-text a:hover{color:currentColor;opacity:.85}.kg-cta-link-accent .kg-cta-text a{color:var(--ghost-accent-color)}a.kg-cta-button{display:flex;position:static;align-items:center;justify-content:center;padding:0 1em;height:2.5em;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:.95em;font-weight:500;line-height:1.65;text-decoration:none;border-radius:6px;transition:opacity .15s ease-in-out}a.kg-cta-button:hover{opacity:.85}a.kg-cta-button.kg-style-accent{background-color:var(--ghost-accent-color)}a.kg-cta-button{width:max-content}.kg-cta-immersive.kg-cta-has-img a.kg-cta-button{width:100%}\n","file":".kg-file-card,.kg-file-card *{box-sizing:border-box}.kg-file-card{display:flex}.kg-file-card a.kg-file-card-container{display:flex;align-items:stretch;justify-content:space-between;color:inherit;padding:12px;min-height:92px;background:#fff;color:#222;border:1px solid rgb(124 139 154 / 25%);border-radius:5px;transition:all ease-in-out .35s;text-decoration:none;width:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.kg-file-card a.kg-file-card-container:hover{border:1px solid rgb(124 139 154 / 35%)}.kg-file-card-contents{display:flex;flex-direction:column;justify-content:space-between;margin:4px 8px;width:100%}.kg-file-card-title{font-size:16px;font-weight:600;line-height:1.3em}.kg-file-card-caption{font-size:14px;line-height:1.3em;opacity:.7}.kg-file-card-title+.kg-file-card-caption{flex-grow:1;margin-top:3px}.kg-file-card-metadata{display:inline;font-size:14px;line-height:1.3em;margin-top:5px}.kg-file-card-filename{display:inline;font-weight:500}.kg-file-card-filesize{display:inline-block;font-size:14px;opacity:.6}.kg-file-card-filesize:before{display:inline-block;content:\"\\2022\";margin-left:6px;margin-right:6px}.kg-file-card-icon{position:relative;display:flex;align-items:center;justify-content:center;width:80px;min-width:80px;height:100%;min-height:80px}.kg-file-card-icon:before{position:absolute;display:block;content:\"\";inset:0;background:currentColor;opacity:.06;transition:opacity ease-in-out .35s;border-radius:3px}.kg-file-card a.kg-file-card-container:hover .kg-file-card-icon:before{opacity:.08}.kg-file-card-icon svg{width:24px;height:24px;color:var(--ghost-accent-color)}.kg-file-card-medium a.kg-file-card-container{min-height:72px}.kg-file-card-medium .kg-file-card-caption{opacity:1;font-weight:500}.kg-file-card-small a.kg-file-card-container{align-items:center;min-height:52px}.kg-file-card-small .kg-file-card-metadata{font-size:14px;margin-top:0}.kg-file-card-small .kg-file-card-icon svg{width:20px;height:20px}.kg-file-card+.kg-file-card{margin-top:1em}\n","gallery":".kg-gallery-card,.kg-gallery-card *{box-sizing:border-box}.kg-gallery-card,.kg-image-card{--gap: 1.2rem}.kg-image-card:not(.kg-card-hascaption)+.kg-image-card,.kg-image-card:not(.kg-card-hascaption)+.kg-gallery-card,.kg-gallery-card:not(.kg-card-hascaption)+.kg-image-card,.kg-gallery-card:not(.kg-card-hascaption)+.kg-gallery-card{margin-top:var(--gap)}.kg-gallery-container{position:relative}.kg-gallery-row{display:flex;flex-direction:row;justify-content:center}.kg-gallery-image img{display:block;margin:0;width:100%;height:100%}.kg-gallery-row:not(:first-of-type){margin:var(--gap) 0 0}.kg-gallery-image:not(:first-of-type){margin:0 0 0 var(--gap)}@media(max-width:600px){.kg-gallery-card,.kg-image-card{--gap: .6rem}}\n","header":".kg-header-card,.kg-header-card *{box-sizing:border-box}.kg-header-card{padding:12vmin 4em;min-height:60vh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}.kg-header-card.kg-size-small{padding-top:14vmin;padding-bottom:14vmin;min-height:40vh}.kg-header-card.kg-size-large{padding-top:18vmin;padding-bottom:18vmin;min-height:80vh}.kg-header-card.kg-align-left{text-align:left;align-items:flex-start}.kg-header-card.kg-style-dark{background:#151515;color:#fff}.kg-header-card.kg-style-light{background-color:#fafafa}.kg-header-card.kg-style-accent{background-color:var(--ghost-accent-color)}.kg-header-card.kg-style-image{position:relative;background-color:#e7e7e7;background-size:cover;background-position:center}.kg-header-card.kg-style-image:before{position:absolute;display:block;content:\"\";inset:0;background:linear-gradient(0deg,#0000,#0003)}.kg-header-card h2.kg-header-card-header{font-size:5em;font-weight:700;line-height:1.1em;letter-spacing:-.01em;margin:0}.kg-header-card h2.kg-header-card-header strong{font-weight:800}.kg-header-card.kg-size-small h2.kg-header-card-header{font-size:4em}.kg-header-card.kg-size-large h2.kg-header-card-header{font-size:6em}.kg-header-card h3.kg-header-card-subheader{font-size:1.5em;font-weight:500;line-height:1.4em;margin:0;max-width:40em}.kg-header-card h2+h3.kg-header-card-subheader{margin:.35em 0 0}.kg-header-card h3.kg-header-card-subheader strong{font-weight:600}.kg-header-card.kg-size-small h3.kg-header-card-subheader{font-size:1.25em}.kg-header-card.kg-size-large h3.kg-header-card-subheader{font-size:1.75em}.kg-header-card:not(.kg-style-light) h2.kg-header-card-header,.kg-header-card:not(.kg-style-light) h3.kg-header-card-subheader{color:#fff}.kg-header-card.kg-style-accent h3.kg-header-card-subheader,.kg-header-card.kg-style-image h3.kg-header-card-subheader{opacity:1}.kg-header-card.kg-style-image h2.kg-header-card-header,.kg-header-card.kg-style-image h3.kg-header-card-subheader,.kg-header-card.kg-style-image a.kg-header-card-button{z-index:999}.kg-header-card h2.kg-header-card-header a,.kg-header-card h3.kg-header-card-subheader a{color:var(--ghost-accent-color)}.kg-header-card.kg-style-accent h2.kg-header-card-header a,.kg-header-card.kg-style-accent h3.kg-header-card-subheader a,.kg-header-card.kg-style-image h2.kg-header-card-header a,.kg-header-card.kg-style-image h3.kg-header-card-subheader a{color:#fff}.kg-header-card a.kg-header-card-button{display:flex;position:static;align-items:center;fill:#fff;background:#fff;border-radius:3px;outline:none;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:1.05em;font-weight:600;line-height:1em;text-align:center;text-decoration:none;letter-spacing:.2px;white-space:nowrap;text-overflow:ellipsis;color:#151515;height:2.7em;padding:0 1.2em;transition:opacity .2s ease}.kg-header-card h2+a.kg-header-card-button,.kg-header-card h3+a.kg-header-card-button{margin:1.75em 0 0}.kg-header-card a.kg-header-card-button:hover{opacity:.85}.kg-header-card.kg-size-large a.kg-header-card-button{font-size:1.1em;height:2.9em}.kg-header-card.kg-size-large h2+a.kg-header-card-button,.kg-header-card.kg-size-large h3+a.kg-header-card-button{margin-top:2em}.kg-header-card.kg-size-small a.kg-header-card-button{height:2.4em;font-size:1em}.kg-header-card.kg-size-small h2+a.kg-header-card-button,.kg-header-card.kg-size-small h3+a.kg-header-card-button{margin-top:1.5em}.kg-header-card.kg-style-image a.kg-header-card-button,.kg-header-card.kg-style-dark a.kg-header-card-button{background:#fff;color:#151515}.kg-header-card.kg-style-light a.kg-header-card-button{background:var(--ghost-accent-color);color:#fff}.kg-header-card.kg-style-accent a.kg-header-card-button{background:#fff;color:#151515}@media(max-width:640px){.kg-header-card{padding-left:1em;padding-right:1em}.kg-header-card h2.kg-header-card-header{font-size:3.5em}.kg-header-card.kg-size-large h2.kg-header-card-header{font-size:4em}.kg-header-card.kg-size-small h2.kg-header-card-header{font-size:3em}.kg-header-card h3.kg-header-card-subheader{font-size:1.25em}.kg-header-card.kg-size-large h3.kg-header-card-subheader{font-size:1.5em}.kg-header-card.kg-size-small h3.kg-header-card-subheader{font-size:1em}}\n","header_v2":".kg-header-card.kg-v2{position:relative;padding:0;min-height:initial;text-align:initial}.kg-header-card.kg-v2,.kg-header-card.kg-v2 *{box-sizing:border-box}.kg-header-card.kg-v2 a,.kg-header-card.kg-v2 a span{color:currentColor}.kg-header-card.kg-style-accent.kg-v2{background-color:var(--ghost-accent-color)}.kg-header-card-content{width:100%}.kg-layout-split .kg-header-card-content{display:grid;grid-template-columns:1fr 1fr}.kg-header-card-text{position:relative;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;height:100%;padding:min(6.4vmax,120px) min(4vmax,80px);background-size:cover;background-position:center;text-align:left}.kg-width-wide .kg-header-card-text{padding:min(10vmax,220px) min(6.4vmax,140px)}.kg-width-full .kg-header-card-text{padding:min(12vmax,260px) 0}.kg-layout-split .kg-header-card-text{padding:min(12vmax,260px) min(4vmax,80px)}.kg-layout-split.kg-content-wide .kg-header-card-text{padding:min(10vmax,220px) 0 min(10vmax,220px) min(4vmax,80px)}.kg-layout-split.kg-content-wide.kg-swapped .kg-header-card-text{padding:min(10vmax,220px) min(4vmax,80px) min(10vmax,220px) 0}.kg-swapped .kg-header-card-text{grid-row:1}.kg-header-card-text.kg-align-center{align-items:center;text-align:center}.kg-header-card.kg-style-image h2.kg-header-card-heading,.kg-header-card.kg-style-image .kg-header-card-subheading,.kg-header-card.kg-style-image.kg-v2 .kg-header-card-button{z-index:999}.kg-header-card>picture>.kg-header-card-image{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;background-color:#fff;pointer-events:none}.kg-header-card-content .kg-header-card-image{width:100%;height:0;min-height:100%;object-fit:cover;object-position:center}.kg-content-wide .kg-header-card-content .kg-header-card-image{height:100%;padding:5.6em 0;object-fit:contain}.kg-header-card h2.kg-header-card-heading{margin:0;font-size:clamp(1.7em,4vw,2.5em);font-weight:700;line-height:1.05em;letter-spacing:-.01em}.kg-header-card.kg-width-wide h2.kg-header-card-heading{font-size:clamp(1.7em,5vw,3.3em)}.kg-header-card.kg-width-full h2.kg-header-card-heading{font-size:clamp(1.9em,5.6vw,4.2em)}.kg-header-card.kg-width-full.kg-layout-split h2.kg-header-card-heading{font-size:clamp(1.9em,4vw,3.3em)}.kg-header-card-subheading{margin:0 0 2em}.kg-header-card .kg-header-card-subheading{max-width:40em;margin:0;font-size:clamp(1.05em,2vw,1.4em);font-weight:500;line-height:1.2em}.kg-header-card h2+.kg-header-card-subheading{margin:.6em 0 0}.kg-header-card .kg-header-card-subheading strong{font-weight:600}.kg-header-card.kg-width-wide .kg-header-card-subheading{font-size:clamp(1.05em,2vw,1.55em)}.kg-header-card.kg-width-full .kg-header-card-subheading:not(.kg-layout-split .kg-header-card-subheading){max-width:min(65vmax,1200px);font-size:clamp(1.05em,2vw,1.7em)}.kg-header-card.kg-width-full.kg-layout-split .kg-header-card-subheading{font-size:clamp(1.05em,2vw,1.55em)}.kg-header-card.kg-v2 .kg-header-card-button{display:flex;position:relative;align-items:center;height:2.9em;min-height:46px;padding:0 1.2em;outline:none;border:none;font-size:1em;font-weight:600;line-height:1em;text-align:center;text-decoration:none;letter-spacing:.2px;white-space:nowrap;text-overflow:ellipsis;border-radius:3px;transition:opacity .2s ease}.kg-header-card.kg-v2 .kg-header-card-button.kg-style-accent{background-color:var(--ghost-accent-color)}.kg-header-card.kg-v2 h2+.kg-header-card-button,.kg-header-card.kg-v2 p+.kg-header-card-button{margin:1.5em 0 0}.kg-header-card.kg-v2 .kg-header-card-button:hover{opacity:.85}.kg-header-card.kg-v2.kg-width-wide .kg-header-card-button{font-size:1.05em}.kg-header-card.kg-v2.kg-width-wide h2+.kg-header-card-button,.kg-header-card.kg-v2.kg-width-wide p+.kg-header-card-button{margin-top:1.75em}.kg-header-card.kg-v2.kg-width-full .kg-header-card-button{font-size:1.1em}.kg-header-card.kg-v2.kg-width-full h2+.kg-header-card-button,.kg-header-card.kg-v2.kg-width-full p+.kg-header-card-button{margin-top:2em}@media(max-width:640px){.kg-layout-split .kg-header-card-content{grid-template-columns:1fr}.kg-width-wide .kg-header-card-text{padding:min(6.4vmax,120px) min(4vmax,80px)}.kg-layout-split.kg-content-wide .kg-header-card-text,.kg-layout-split.kg-content-wide.kg-swapped .kg-header-card-text{padding:min(9.6vmax,180px) 0}.kg-header-card.kg-width-full .kg-header-card-subheading:not(.kg-layout-split .kg-header-card-subheading){max-width:unset}.kg-header-card-content .kg-header-card-image:not(.kg-content-wide .kg-header-card-content .kg-header-card-image){height:auto;min-height:unset;aspect-ratio:1 / 1}.kg-content-wide .kg-header-card-content .kg-header-card-image{padding:1.7em 0 0}.kg-content-wide.kg-swapped .kg-header-card-content .kg-header-card-image{padding:0 0 1.7em}.kg-header-card.kg-v2 .kg-header-card-button{height:2.9em}.kg-header-card.kg-v2.kg-width-wide .kg-header-card-button,.kg-header-card.kg-v2.kg-width-full .kg-header-card-button{font-size:1em}}\n","nft":".kg-nft-card,.kg-nft-card *{box-sizing:border-box}.kg-nft-card{display:flex;flex-direction:column;align-items:center;width:100%;margin-left:auto;margin-right:auto}.kg-nft-card a.kg-nft-card-container{position:static;display:flex;flex:auto;flex-direction:column;text-decoration:none;font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif;font-size:14px;font-weight:400;box-shadow:0 2px 6px -2px #0000001a,0 0 1px #0006;width:100%;max-width:512px;color:#222;background:#fff;border-radius:5px;transition:none}.kg-nft-card *{position:static}.kg-nft-metadata{padding:20px;width:100%}.kg-nft-image{border-radius:5px 5px 0 0;width:100%}.kg-nft-header{display:flex;justify-content:space-between;align-items:flex-start;gap:20px}.kg-nft-header h4.kg-nft-title{font-family:inherit;font-size:19px;font-weight:700;line-height:1.3em;min-width:unset;max-width:unset;margin:0;color:#222}.kg-nft-opensea-logo{margin-top:2px;width:100px;object-fit:scale-down}.kg-nft-creator{font-family:inherit;line-height:1.4em;margin:4px 0 0;color:#ababab}.kg-nft-creator span{font-weight:500;color:#222}.kg-nft-card p.kg-nft-description{font-family:inherit;font-size:14px;line-height:1.4em;margin:20px 0 0;color:#222}\n","product":".kg-product-card,.kg-product-card *{box-sizing:border-box}.kg-product-card{display:flex;align-items:center;flex-direction:column;width:100%}.kg-product-card-container{display:grid;grid-template-columns:auto min-content;align-items:center;grid-row-gap:16px;background:transparent;max-width:550px;padding:20px;width:100%;background:#fff;color:#222;border-radius:5px;box-shadow:inset 0 0 0 1px #7c8b9a40;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.kg-product-card-image{grid-column:1 / 3;justify-self:center;height:auto}.kg-product-card-title-container{grid-column:1 / 2}.kg-product-card h4.kg-product-card-title{text-decoration:none;font-weight:600;font-size:21px;margin-top:0;margin-bottom:0;line-height:1.15em}.kg-product-card-description{grid-column:1 / 3}.kg-product-card .kg-product-card-description p,.kg-product-card .kg-product-card-description ol,.kg-product-card .kg-product-card-description ul{font-size:14px;line-height:1.5em;opacity:.7;margin-bottom:0}.kg-product-card .kg-product-card-description p:first-of-type{margin-top:-4px}.kg-product-card .kg-product-card-description p:not(:first-of-type),.kg-product-card .kg-product-card-description ul,.kg-product-card .kg-product-card-description ol{margin-top:.95em}.kg-product-card .kg-product-card-description li+li{margin-top:.5em}.kg-product-card-rating{display:flex;align-items:center;grid-column:2 / 3;align-self:start;justify-self:end;padding-left:16px}@media(max-width:400px){.kg-product-card-title-container{grid-column:1 / 3}.kg-product-card-rating{grid-column:1 / 3;justify-self:start;margin-top:-15px;padding-left:0}}.kg-product-card-rating-star{height:20px;width:20px}.kg-product-card-rating-star svg{width:16px;height:16px;fill:currentColor;opacity:.15}.kg-product-card-rating-active.kg-product-card-rating-star svg{opacity:1}.kg-product-card a.kg-product-card-button{justify-content:center;grid-column:1 / 3;display:flex;position:static;align-items:center;font-size:14px;font-weight:600;line-height:1em;text-decoration:none;width:100%;height:38px;border-radius:6px;padding:0 12px;transition:opacity .2s ease-in-out}.kg-product-card a.kg-product-card-btn-accent{background-color:var(--ghost-accent-color);color:#fff}\n","signup":".kg-signup-card{position:relative}.kg-signup-card,.kg-signup-card *{box-sizing:border-box}.kg-signup-card a,.kg-signup-card a span{color:currentColor}.kg-signup-card.kg-style-accent{background-color:var(--ghost-accent-color)}.kg-layout-split .kg-signup-card-content{display:grid;grid-template-columns:1fr 1fr}.kg-signup-card-text{position:relative;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;height:100%;padding:min(4vmax,80px);background-size:cover;background-position:center;text-align:left}.kg-width-wide .kg-signup-card-text{padding:min(6.4vmax,120px)}.kg-width-full .kg-signup-card-text{padding:min(12vmax,260px) 0}.kg-layout-split .kg-signup-card-text{padding:min(12vmax,260px) min(4vmax,80px)}.kg-layout-split.kg-content-wide .kg-signup-card-text{padding:min(10vmax,220px) 0 min(10vmax,220px) min(4vmax,80px)}.kg-layout-split.kg-content-wide.kg-swapped .kg-signup-card-text{padding:min(10vmax,220px) min(4vmax,80px) min(10vmax,220px) 0}.kg-swapped .kg-signup-card-text{grid-row:1}.kg-signup-card-text.kg-align-center{align-items:center;text-align:center}.kg-signup-card.kg-style-image h2.kg-signup-card-heading,.kg-signup-card.kg-style-image .kg-signup-card-subheading,.kg-signup-card.kg-style-image .kg-signup-card-button{z-index:999}.kg-signup-card>picture>.kg-signup-card-image{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;background-color:#fff;pointer-events:none}.kg-signup-card-content .kg-signup-card-image{width:100%;height:0;min-height:100%;object-fit:cover;object-position:center}.kg-content-wide .kg-signup-card-content .kg-signup-card-image{height:100%;padding:5.6em 0;object-fit:contain}.kg-signup-card h2.kg-signup-card-heading{margin:0;font-size:clamp(1.7em,4vw,2.5em);font-weight:700;line-height:1.05em;letter-spacing:-.01em}.kg-signup-card.kg-width-wide h2.kg-signup-card-heading{font-size:clamp(1.7em,5vw,3.3em)}.kg-signup-card.kg-width-full h2.kg-signup-card-heading{font-size:clamp(1.9em,5.6vw,4.2em)}.kg-signup-card.kg-width-full.kg-layout-split h2.kg-signup-card-heading{font-size:clamp(1.9em,4vw,3.3em)}.kg-signup-card-subheading{margin:0 0 2em}.kg-signup-card .kg-signup-card-subheading{max-width:40em;margin:0;font-size:clamp(1.05em,2vw,1.4em);font-weight:500;line-height:1.2em}.kg-signup-card h2+.kg-signup-card-subheading{margin:.6em 0 0}.kg-signup-card .kg-signup-card-subheading strong{font-weight:600}.kg-signup-card.kg-width-wide .kg-signup-card-subheading{font-size:clamp(1.05em,2vw,1.55em)}.kg-signup-card.kg-width-full .kg-signup-card-subheading:not(.kg-layout-split .kg-signup-card-subheading){max-width:min(65vmax,1200px);font-size:clamp(1.05em,2vw,1.7em)}.kg-signup-card.kg-width-full.kg-layout-split .kg-signup-card-subheading{font-size:clamp(1.05em,2vw,1.55em)}.kg-signup-card-form{position:relative;display:flex;flex-shrink:0;width:100%}.kg-align-center .kg-signup-card-form{justify-content:center}.kg-signup-card-heading+.kg-signup-card-form,.kg-signup-card-subheading+.kg-signup-card-form{margin:min(2.4vmax,48px) 0 0}.kg-width-wide .kg-signup-card-heading+.kg-signup-card-form,.kg-width-wide .kg-signup-card-subheading+.kg-signup-card-form{margin:min(3.2vmax,64px) 0 0}.kg-width-full .kg-signup-card-heading+.kg-signup-card-form,.kg-width-full .kg-signup-card-subheading+.kg-signup-card-form{margin:min(4vmax,80px) 0 0}.kg-signup-card-fields{display:flex;width:100%;padding:3px;background:#fff;border:1px solid #E6E6E6;border-radius:4px}.kg-width-wide .kg-signup-card-fields,.kg-width-full .kg-signup-card-fields{width:100%;max-width:500px}.kg-signup-card-input{width:100%;height:2.9em;min-height:46px;margin:0 3px 0 0;padding:12px 16px;border:none;background:#fff;font-size:1.1em}.kg-signup-card-input:focus,.kg-signup-card-input:focus-visible{outline:none}.kg-signup-card-button{display:flex;position:relative;align-items:center;height:2.9em;min-height:46px;height:100%;padding:0 1.2em;outline:none;border:none;font-size:1em;font-weight:600;line-height:1em;text-align:center;text-decoration:none;letter-spacing:.2px;white-space:nowrap;text-overflow:ellipsis;border-radius:3px;transition:opacity .2s ease;cursor:pointer}.kg-signup-card-button.kg-style-accent{background-color:var(--ghost-accent-color)}.kg-signup-card h2+.kg-signup-card-button,.kg-signup-card p+.kg-signup-card-button{margin:1.5em 0 0}.kg-signup-card .kg-signup-card-button:hover{opacity:.85}.kg-signup-card.kg-width-wide .kg-signup-card-button{font-size:1.05em}.kg-signup-card.kg-width-wide h2+.kg-signup-card-button,.kg-signup-card.kg-width-wide p+.kg-signup-card-button{margin-top:1.75em}.kg-signup-card.kg-width-full .kg-signup-card-button{font-size:1.1em}.kg-signup-card.kg-width-full h2+.kg-signup-card-button,.kg-signup-card.kg-width-full p+.kg-signup-card-button{margin-top:2em}.kg-signup-card-success,.kg-signup-card-error,.kg-signup-card-form.success .kg-signup-card-fields{display:none}.kg-signup-card-form.success .kg-signup-card-success{display:flex;align-items:center;height:3em;font-size:1.25em;font-weight:500;line-height:1.4em}.kg-signup-card-form.error .kg-signup-card-fields{border:1px solid #FF0000;box-shadow:inset 0 0 0 1px #f003}.kg-signup-card-form.error .kg-signup-card-error{position:absolute;bottom:calc(-1rem - 1.6em);display:block;font-size:inherit}.kg-signup-card-button-loading{position:absolute;inset:0;align-items:center;justify-content:center;display:none}.kg-signup-card-form.loading .kg-signup-card-button-default{color:transparent}.kg-signup-card-form.loading .kg-signup-card-button-loading{display:flex}.kg-signup-card-disclaimer{margin:1rem 0 0}.kg-signup-card-form.success+.kg-signup-card-disclaimer,.kg-signup-card-form.error+.kg-signup-card-disclaimer{visibility:hidden}@media(max-width:640px){.kg-layout-split .kg-signup-card-content{grid-template-columns:1fr}.kg-width-wide .kg-signup-card-text{padding:min(6.4vmax,120px) min(4vmax,80px)}.kg-layout-split.kg-content-wide .kg-signup-card-text,.kg-layout-split.kg-content-wide.kg-swapped .kg-signup-card-text{padding:min(9.6vmax,180px) 0}.kg-signup-card.kg-width-full .kg-signup-card-subheading:not(.kg-layout-split .kg-signup-card-subheading){max-width:unset}.kg-signup-card-content .kg-signup-card-image:not(.kg-content-wide .kg-signup-card-content .kg-signup-card-image){height:auto;min-height:unset;aspect-ratio:1 / 1}.kg-content-wide .kg-signup-card-content .kg-signup-card-image{padding:1.7em 0 0}.kg-content-wide.kg-swapped .kg-signup-card-content .kg-signup-card-image{padding:0 0 1.7em}.kg-signup-card-input{height:2.9em;padding:6px 12px;font-size:1em}.kg-signup-card-button{height:2.9em}.kg-signup-card.kg-width-wide .kg-signup-card-button,.kg-signup-card.kg-width-full .kg-signup-card-button{font-size:1em}}\n","toggle":".kg-toggle-card,.kg-toggle-card *{box-sizing:border-box}.kg-toggle-card{background:transparent;box-shadow:inset 0 0 0 1px #7c8b9a40;border-radius:4px;padding:1.2em}.kg-toggle-card[data-kg-toggle-state=close] .kg-toggle-content{height:0;overflow:hidden;transition:opacity .5s ease,top .35s ease;opacity:0;top:-.5em;position:relative}.kg-toggle-content{height:auto;opacity:1;transition:opacity 1s ease,top .35s ease;top:0;position:relative}.kg-toggle-card[data-kg-toggle-state=close] svg{transform:unset}.kg-toggle-heading{cursor:pointer;display:flex;justify-content:space-between;align-items:flex-start}.kg-toggle-card h4.kg-toggle-heading-text{font-size:1.15em;font-weight:700;line-height:1.3em;margin-top:0;margin-bottom:0}.kg-toggle-content p:first-of-type{margin-top:.5em}.kg-toggle-card .kg-toggle-content p,.kg-toggle-card .kg-toggle-content ol,.kg-toggle-card .kg-toggle-content ul{font-size:.95em;line-height:1.5em;margin-top:.95em;margin-bottom:0}.kg-toggle-card li+li{margin-top:.5em}.kg-toggle-card-icon{height:24px;width:24px;display:flex;justify-content:center;align-items:center;margin-left:1em;padding:0;background:none;border:0;cursor:pointer}.kg-toggle-heading svg{width:14px;color:#7c8b9a80;transition:all .3s;transform:rotate(-180deg)}.kg-toggle-heading path{fill:none;stroke:currentcolor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5;fill-rule:evenodd}.kg-toggle-card+.kg-toggle-card{margin-top:1em}\n","transistor":".kg-transistor-card{display:flex;justify-content:center}.kg-transistor-placeholder{display:flex;flex-direction:column;align-items:center;gap:2.4rem;width:100%;max-width:100%;padding:3rem 2.4rem;border:1px solid rgba(255,255,255,.14);border:1px solid color-mix(in srgb,currentColor 14%,transparent);border-radius:12px;background:#ffffff0a;background:color-mix(in srgb,currentColor 4%,transparent);color:inherit;text-align:center;box-sizing:border-box}.kg-transistor-icon{display:flex;flex-shrink:0;align-items:center;justify-content:center;width:116px;height:116px;border-radius:14px;background:var(--ghost-accent-color, #b8a5ac);color:#fff}.kg-transistor-icon svg{display:block;width:56px;height:56px}.kg-transistor-content{min-width:0;max-width:640px}.kg-transistor-title{margin:0;color:inherit;font-size:2.3rem;font-weight:600;line-height:1.2}.kg-transistor-description{margin-top:1.6rem;color:inherit;font-size:1.6rem;line-height:1.5;opacity:.65}@media(max-width:640px){.kg-transistor-placeholder{gap:1.6rem;padding:2.4rem 1.8rem}.kg-transistor-icon{width:88px;height:88px;border-radius:12px}.kg-transistor-icon svg{width:44px;height:44px}.kg-transistor-title{font-size:1.8rem}.kg-transistor-description{margin-top:1rem;font-size:1.45rem}}\n","video":".kg-video-card,.kg-video-card *{box-sizing:border-box}.kg-video-card{position:relative;--seek-before-width: 0%;--volume-before-width: 100%;--buffered-width: 0%}.kg-video-card video{display:block;max-width:100%;height:auto}.kg-video-container{position:relative;height:0;width:100%;overflow:hidden}.kg-video-container video{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover}.kg-video-overlay{position:absolute;inset:0;display:flex;justify-content:center;align-items:center;background-image:linear-gradient(180deg,rgba(0,0,0,.3) 0,transparent 70%,transparent 100%);z-index:999;transition:opacity .2s ease-in-out}.kg-video-large-play-icon{display:flex;justify-content:center;align-items:center;width:72px;height:72px;padding:0;background:#00000080;border-radius:50%;transition:opacity .2s ease-in-out}.kg-video-large-play-icon svg{width:20px;height:auto;margin-left:2px;fill:#fff}.kg-video-player-container{position:absolute;bottom:-1px;left:0;right:0;width:100%;height:80px;background:linear-gradient(#0000,#00000080);z-index:999;transition:opacity .2s ease-in-out}.kg-video-player{position:absolute;bottom:0;display:flex;align-items:center;width:100%;z-index:9999;padding:12px 16px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;background:#00000080}.kg-video-current-time{min-width:38px;padding:0 4px;color:#fff;font-family:inherit;font-size:12.5px;font-weight:500;line-height:1.4em;white-space:nowrap}.kg-video-time{color:#fff9;font-family:inherit;font-size:12.5px;font-weight:500;line-height:1.4em;white-space:nowrap}.kg-video-duration{padding:0 4px}.kg-video-play-icon,.kg-video-pause-icon{position:relative;padding:0 4px 0 0;font-size:0;background:transparent}.kg-video-hide{display:none!important}.kg-video-hide-animated{opacity:0!important;transition:opacity .2s ease-in-out;cursor:initial}.kg-video-play-icon svg,.kg-video-pause-icon svg{width:14px;height:14px;fill:#fff}.kg-video-seek-slider{flex-grow:1;margin:0 4px}@media(max-width:520px){.kg-video-seek-slider{display:none}}.kg-video-playback-rate{min-width:37px;padding:0 4px;color:#fff;font-family:inherit;font-size:12.5px;font-weight:600;line-height:1.4em;text-align:left;background:transparent;white-space:nowrap}@media(max-width:520px){.kg-video-playback-rate{padding-left:8px}}.kg-video-mute-icon,.kg-video-unmute-icon{position:relative;bottom:-1px;padding:0 4px;font-size:0;background:transparent}@media(max-width:520px){.kg-video-mute-icon,.kg-video-unmute-icon{margin-left:auto}}.kg-video-mute-icon svg,.kg-video-unmute-icon svg{width:16px;height:16px;fill:#fff}.kg-video-volume-slider{width:80px}@media(max-width:300px){.kg-video-volume-slider{display:none}}.kg-video-seek-slider:before{content:\"\";position:absolute;left:0;width:var(--seek-before-width)!important;height:4px;cursor:pointer;background-color:#ebeef0;border-radius:2px}.kg-video-volume-slider:before{content:\"\";position:absolute;left:0;width:var(--volume-before-width)!important;height:4px;cursor:pointer;background-color:#ebeef0;border-radius:2px}.kg-video-card input[type=range]{position:relative;-webkit-appearance:none;background:transparent}.kg-video-card input[type=range]:focus{outline:none}.kg-video-card input[type=range]::-webkit-slider-thumb{-webkit-appearance:none}.kg-video-card input[type=range]::-ms-track{cursor:pointer;border-color:transparent;color:transparent;background:transparent}.kg-video-card button{display:flex;align-items:center;border:0;cursor:pointer}.kg-video-card input[type=range]{height:auto;padding:0;border:0}.kg-video-card input[type=range]::-webkit-slider-runnable-track{width:100%;height:4px;cursor:pointer;background:#fff3;border-radius:2px}.kg-video-card input[type=range]::-webkit-slider-thumb{position:relative;box-sizing:content-box;width:13px;height:13px;margin:-5px 0 0;border:0;cursor:pointer;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #00000014,0 1px 4px #0000003d}.kg-video-card input[type=range]:active::-webkit-slider-thumb{transform:scale(1.2)}.kg-video-card input[type=range]::-moz-range-track{width:100%;height:4px;cursor:pointer;background:#fff3;border-radius:2px}.kg-video-card input[type=range]::-moz-range-progress{background:#ebeef0;border-radius:2px}.kg-video-card input[type=range]::-moz-range-thumb{box-sizing:content-box;width:13px;height:13px;border:0;cursor:pointer;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #00000014,0 1px 4px #0000003d}.kg-video-card input[type=range]:active::-moz-range-thumb{transform:scale(1.2)}.kg-video-card input[type=range]::-ms-track{width:100%;height:3px;border:solid transparent;color:transparent;cursor:pointer;background:transparent}.kg-video-card input[type=range]::-ms-fill-lower{background:#fff}.kg-video-card input[type=range]::-ms-fill-upper{background:#ebeef0}.kg-video-card input[type=range]::-ms-thumb{box-sizing:content-box;width:13px;height:13px;border:0;cursor:pointer;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #00000014,0 1px 4px #0000003d}.kg-video-card input[type=range]:active::-ms-thumb{transform:scale(1.2)}\n"},"js":{"audio":"(function(){const S=function(a){const o=a.querySelector(\".kg-audio-player-container\"),s=a.querySelector(\".kg-audio-play-icon\"),i=a.querySelector(\".kg-audio-pause-icon\"),r=a.querySelector(\".kg-audio-seek-slider\"),g=a.querySelector(\".kg-audio-playback-rate\"),l=a.querySelector(\".kg-audio-mute-icon\"),n=a.querySelector(\".kg-audio-unmute-icon\"),q=a.querySelector(\".kg-audio-volume-slider\"),e=a.querySelector(\"audio\"),x=a.querySelector(\".kg-audio-duration\"),h=a.querySelector(\".kg-audio-current-time\");let P=[{rate:.75,label:\"0.7\\xD7\"},{rate:1,label:\"1\\xD7\"},{rate:1.25,label:\"1.2\\xD7\"},{rate:1.75,label:\"1.7\\xD7\"},{rate:2,label:\"2\\xD7\"}],d=null,c=1;const u=()=>{r.value=Math.floor(e.currentTime),h.textContent=y(r.value),o.style.setProperty(\"--seek-before-width\",`${r.value/r.max*100}%`),d=requestAnimationFrame(u)},b=t=>{t===r?o.style.setProperty(\"--seek-before-width\",t.value/t.max*100+\"%\"):o.style.setProperty(\"--volume-before-width\",t.value/t.max*100+\"%\")},y=t=>{const f=Math.floor(t/60),m=Math.floor(t%60),A=m<10?`0${m}`:`${m}`;return`${f}:${A}`},p=()=>{x.textContent=y(e.duration)},L=()=>{r.max=Math.floor(e.duration)},k=()=>{if(e.buffered.length>0){const t=Math.floor(e.buffered.end(e.buffered.length-1));o.style.setProperty(\"--buffered-width\",`${t/r.max*100}%`)}};e.readyState>0?(p(),L(),k()):e.addEventListener(\"loadedmetadata\",()=>{p(),L(),k()}),s.addEventListener(\"click\",()=>{s.classList.add(\"kg-audio-hide\"),i.classList.remove(\"kg-audio-hide\"),e.play(),requestAnimationFrame(u)}),i.addEventListener(\"click\",()=>{i.classList.add(\"kg-audio-hide\"),s.classList.remove(\"kg-audio-hide\"),e.pause(),cancelAnimationFrame(d)}),l.addEventListener(\"click\",()=>{l.classList.add(\"kg-audio-hide\"),n.classList.remove(\"kg-audio-hide\"),e.muted=!1}),n.addEventListener(\"click\",()=>{n.classList.add(\"kg-audio-hide\"),l.classList.remove(\"kg-audio-hide\"),e.muted=!0}),g.addEventListener(\"click\",()=>{let t=P[(c+1)%5];c=c+1,e.playbackRate=t.rate,g.textContent=t.label}),e.addEventListener(\"progress\",k),r.addEventListener(\"input\",t=>{b(t.target),h.textContent=y(r.value),e.paused||cancelAnimationFrame(d)}),r.addEventListener(\"change\",()=>{e.currentTime=r.value,e.paused||requestAnimationFrame(u)}),q.addEventListener(\"input\",t=>{const f=t.target.value;b(t.target),e.volume=f/100})},v=document.querySelectorAll(\".kg-audio-card\");for(let a=0;a<v.length;a++)S(v[a])})();\n","gallery":"(function(){document.querySelectorAll(\".kg-gallery-image img\").forEach(function(t){const e=t.closest(\".kg-gallery-image\"),i=t.attributes.width.value,o=t.attributes.height.value,c=i/o;e.style.flex=c+\" 1 0%\"})})();\n","toggle":"(function(){const g=document.getElementsByClassName(\"kg-toggle-heading\"),a=function(t){const e=t.target.closest(\".kg-toggle-card\");var l=e.getAttribute(\"data-kg-toggle-state\");l===\"close\"?e.setAttribute(\"data-kg-toggle-state\",\"open\"):e.setAttribute(\"data-kg-toggle-state\",\"close\")};for(let t=0;t<g.length;t++)g[t].addEventListener(\"click\",a,!1)})();\n","video":"(function(){const F=function(a){const o=a.querySelector(\".kg-video-player\"),d=a.querySelector(\".kg-video-player-container\"),s=a.querySelector(\".kg-video-play-icon\"),r=a.querySelector(\".kg-video-pause-icon\"),i=a.querySelector(\".kg-video-seek-slider\"),P=a.querySelector(\".kg-video-playback-rate\"),c=a.querySelector(\".kg-video-mute-icon\"),u=a.querySelector(\".kg-video-unmute-icon\"),S=a.querySelector(\".kg-video-volume-slider\"),t=a.querySelector(\"video\"),$=a.querySelector(\".kg-video-duration\"),q=a.querySelector(\".kg-video-current-time\"),g=a.querySelector(\".kg-video-large-play-icon\"),y=a.querySelector(\".kg-video-overlay\");let M=[{rate:.75,label:\"0.7\\xD7\"},{rate:1,label:\"1\\xD7\"},{rate:1.25,label:\"1.2\\xD7\"},{rate:1.75,label:\"1.7\\xD7\"},{rate:2,label:\"2\\xD7\"}],n=null,p=1;t.loop&&(g.classList.add(\"kg-video-hide-animated\"),y.classList.add(\"kg-video-hide-animated\"));const v=()=>{i.value=Math.floor(t.currentTime),q.textContent=h(i.value),o.style.setProperty(\"--seek-before-width\",`${i.value/i.max*100}%`),n=requestAnimationFrame(v)},b=e=>{e===i?o.style.setProperty(\"--seek-before-width\",e.value/e.max*100+\"%\"):o.style.setProperty(\"--volume-before-width\",e.value/e.max*100+\"%\")},h=e=>{const l=Math.floor(e/60),L=Math.floor(e%60),T=L<10?`0${L}`:`${L}`;return`${l}:${T}`},x=()=>{$.textContent=h(t.duration)},A=()=>{i.max=Math.floor(t.duration)},m=()=>{if(t.buffered.length>0){const e=Math.floor(t.buffered.end(t.buffered.length-1));o.style.setProperty(\"--buffered-width\",`${e/i.max*100}%`)}};t.readyState>0?(x(),A(),m(),t.autoplay&&(n=requestAnimationFrame(v),s.classList.add(\"kg-video-hide\"),r.classList.remove(\"kg-video-hide\")),t.muted&&(u.classList.add(\"kg-video-hide\"),c.classList.remove(\"kg-video-hide\"))):t.addEventListener(\"loadedmetadata\",()=>{x(),A(),m(),t.autoplay&&(n=requestAnimationFrame(v),s.classList.add(\"kg-video-hide\"),r.classList.remove(\"kg-video-hide\")),t.muted&&(u.classList.add(\"kg-video-hide\"),c.classList.remove(\"kg-video-hide\"))}),a.onmouseover=()=>{t.loop||d.classList.remove(\"kg-video-hide-animated\")},a.onmouseleave=()=>{t.currentTime>0&&!t.paused&&!t.ended&&t.readyState>2&&d.classList.add(\"kg-video-hide-animated\")},a.addEventListener(\"click\",()=>{t.loop||(t.currentTime>0&&!t.paused&&!t.ended&&t.readyState>2?w():f())}),t.onplay=()=>{g.classList.add(\"kg-video-hide-animated\"),y.classList.add(\"kg-video-hide-animated\"),s.classList.add(\"kg-video-hide\"),r.classList.remove(\"kg-video-hide\")};const f=()=>{g.classList.add(\"kg-video-hide-animated\"),y.classList.add(\"kg-video-hide-animated\"),s.classList.add(\"kg-video-hide\"),r.classList.remove(\"kg-video-hide\"),t.play(),n=requestAnimationFrame(v)},w=()=>{r.classList.add(\"kg-video-hide\"),s.classList.remove(\"kg-video-hide\"),t.pause(),cancelAnimationFrame(n)};g.addEventListener(\"click\",e=>{e.stopPropagation(),f()}),s.addEventListener(\"click\",e=>{e.stopPropagation(),f()}),r.addEventListener(\"click\",e=>{e.stopPropagation(),w()}),c.addEventListener(\"click\",e=>{e.stopPropagation(),c.classList.add(\"kg-video-hide\"),u.classList.remove(\"kg-video-hide\"),t.muted=!1}),u.addEventListener(\"click\",e=>{e.stopPropagation(),u.classList.add(\"kg-video-hide\"),c.classList.remove(\"kg-video-hide\"),t.muted=!0}),P.addEventListener(\"click\",e=>{e.stopPropagation();let l=M[(p+1)%5];p=p+1,t.playbackRate=l.rate,P.textContent=l.label}),t.addEventListener(\"progress\",m),i.addEventListener(\"input\",e=>{e.stopPropagation(),b(e.target),q.textContent=h(i.value),t.paused||cancelAnimationFrame(n)}),i.addEventListener(\"change\",e=>{e.stopPropagation(),t.currentTime=i.value,t.paused||requestAnimationFrame(v)}),S.addEventListener(\"click\",e=>{e.stopPropagation()}),i.addEventListener(\"click\",e=>{e.stopPropagation()}),S.addEventListener(\"input\",e=>{e.stopPropagation();const l=e.target.value;b(e.target),t.volume=l/100})},R=function(a){const o=a.querySelector(\".kg-video-container\"),d=o.querySelector(\"video\");if(o&&d.width&&d.height){const s=(d.height/d.width*100).toFixed(3);o.style.paddingBottom=`${s}%`}},k=document.querySelectorAll(\".kg-video-card\");for(let a=0;a<k.length;a++)R(k[a]),F(k[a])})();\n"}}
|
|
1
|
+
{"css":{"audio":".kg-audio-card,.kg-audio-card *{box-sizing:border-box}.kg-audio-card{display:flex;width:100%;min-height:96px;border-radius:6px;padding:4px;background:#fff;color:#222;box-shadow:inset 0 0 0 1px #7c8b9a40;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.kg-audio-card+.kg-audio-card{margin-top:1em}.kg-audio-thumbnail{display:flex;justify-content:center;align-items:center;width:80px;min-width:80px;margin:8px;background:transparent;object-fit:cover;aspect-ratio:1/1;border-radius:3px}.kg-audio-thumbnail.placeholder{background:var(--ghost-accent-color)}.kg-audio-thumbnail.placeholder svg{width:24px;height:24px;fill:#fff}.kg-audio-player-container{position:relative;display:flex;flex-direction:column;justify-content:space-between;width:100%;--seek-before-width: 0%;--volume-before-width: 100%;--buffered-width: 0%}.kg-audio-title{width:100%;margin:8px 0 0;padding:8px 12px;border:none;font-family:inherit;font-size:16px;font-weight:600;line-height:1.15em;background:transparent}.kg-audio-player{display:flex;flex-grow:1;align-items:center;padding:8px 12px}.kg-audio-current-time{min-width:38px;padding:0 4px;font-family:inherit;font-size:12.5px;font-weight:500;line-height:1em;white-space:nowrap}.kg-audio-time{width:56px;color:#ababab;font-family:inherit;font-size:12.5px;font-weight:500;line-height:1em;white-space:nowrap}.kg-audio-duration{padding:0 4px}.kg-audio-play-icon,.kg-audio-pause-icon{position:relative;bottom:1px;padding:0 4px 0 0;font-size:0;background:transparent}.kg-audio-hide{display:none!important}.kg-audio-play-icon svg,.kg-audio-pause-icon svg{width:14px;height:14px;fill:currentColor}.kg-audio-seek-slider{flex-grow:1;margin:0 4px}@media(max-width:640px){.kg-audio-seek-slider{display:none}}.kg-audio-playback-rate{min-width:37px;padding:0 4px;font-family:inherit;font-size:12.5px;font-weight:600;line-height:1em;text-align:left;background:transparent;white-space:nowrap}@media(max-width:640px){.kg-audio-playback-rate{padding-left:8px}}.kg-audio-mute-icon,.kg-audio-unmute-icon{position:relative;bottom:-1px;padding:0 4px;font-size:0;background:transparent}@media(max-width:640px){.kg-audio-mute-icon,.kg-audio-unmute-icon{margin-left:auto}}.kg-audio-mute-icon svg,.kg-audio-unmute-icon svg{width:16px;height:16px;fill:currentColor}.kg-audio-volume-slider{width:80px}@media(max-width:400px){.kg-audio-volume-slider{display:none}}.kg-audio-seek-slider:before{content:\"\";position:absolute;left:0;width:var(--seek-before-width)!important;height:4px;cursor:pointer;background-color:currentColor;border-radius:2px}.kg-audio-volume-slider:before{content:\"\";position:absolute;left:0;width:var(--volume-before-width)!important;height:4px;cursor:pointer;background-color:currentColor;border-radius:2px}.kg-audio-player-container input[type=range]{position:relative;-webkit-appearance:none;background:transparent}.kg-audio-player-container input[type=range]:focus{outline:none}.kg-audio-player-container input[type=range]::-webkit-slider-thumb{-webkit-appearance:none}.kg-audio-player-container input[type=range]::-ms-track{cursor:pointer;border-color:transparent;color:transparent;background:transparent}.kg-audio-player-container button{display:flex;align-items:center;border:0;cursor:pointer}.kg-audio-player-container input[type=range]{height:auto;padding:0;border:0}.kg-audio-player-container input[type=range]::-webkit-slider-runnable-track{width:100%;height:4px;cursor:pointer;background:#7c8b9a40;border-radius:2px}.kg-audio-player-container input[type=range]::-webkit-slider-thumb{position:relative;box-sizing:content-box;width:13px;height:13px;margin:-5px 0 0;border:0;cursor:pointer;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #00000014,0 1px 4px #0000003d}.kg-audio-player-container input[type=range]:active::-webkit-slider-thumb{transform:scale(1.2)}.kg-audio-player-container input[type=range]::-moz-range-track{width:100%;height:4px;cursor:pointer;background:#7c8b9a40;border-radius:2px}.kg-audio-player-container input[type=range]::-moz-range-progress{background:currentColor;border-radius:2px}.kg-audio-player-container input[type=range]::-moz-range-thumb{box-sizing:content-box;width:13px;height:13px;border:0;cursor:pointer;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #00000014,0 1px 4px #0000003d}.kg-audio-player-container input[type=range]:active::-moz-range-thumb{transform:scale(1.2)}.kg-audio-player-container input[type=range]::-ms-track{width:100%;height:3px;border:solid transparent;color:transparent;cursor:pointer;background:transparent}.kg-audio-player-container input[type=range]::-ms-fill-lower{background:#fff}.kg-audio-player-container input[type=range]::-ms-fill-upper{background:currentColor}.kg-audio-player-container input[type=range]::-ms-thumb{box-sizing:content-box;width:13px;height:13px;border:0;cursor:pointer;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #00000014,0 1px 4px #0000003d}.kg-audio-player-container input[type=range]:active::-ms-thumb{transform:scale(1.2)}\n","blockquote":".kg-blockquote-alt{font-size:1.5em;font-style:italic;line-height:1.7em;text-align:center;padding:0 2.5em}@media(max-width:800px){.kg-blockquote-alt{font-size:1.4em;padding-left:2em;padding-right:2em}}@media(max-width:600px){.kg-blockquote-alt{font-size:1.2em;padding-left:1.75em;padding-right:1.75em}}\n","bookmark":".kg-bookmark-card,.kg-bookmark-card *{box-sizing:border-box}.kg-bookmark-card,.kg-bookmark-publisher{position:relative}.kg-bookmark-card a.kg-bookmark-container,.kg-bookmark-card a.kg-bookmark-container:hover{display:flex;background:#fff;text-decoration:none;border-radius:6px;border:1px solid rgb(124 139 154 / 25%);overflow:hidden;color:#222}.kg-bookmark-content{display:flex;flex-direction:column;flex-grow:1;flex-basis:100%;align-items:flex-start;justify-content:flex-start;padding:20px;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.kg-bookmark-title{font-size:15px;line-height:1.4em;font-weight:600}.kg-bookmark-description{display:-webkit-box;font-size:14px;line-height:1.5em;margin-top:3px;font-weight:400;max-height:44px;overflow-y:hidden;opacity:.7;-webkit-line-clamp:2;-webkit-box-orient:vertical}.kg-bookmark-metadata{display:flex;align-items:center;margin-top:22px;width:100%;font-size:14px;font-weight:500;white-space:nowrap}.kg-bookmark-metadata>*:not(img){opacity:.7}.kg-bookmark-icon{width:20px;height:20px;margin-right:6px}.kg-bookmark-author,.kg-bookmark-publisher{display:inline}.kg-bookmark-publisher{text-overflow:ellipsis;overflow:hidden;max-width:240px;white-space:nowrap;display:block;line-height:1.65em}.kg-bookmark-metadata>span:nth-of-type(2){font-weight:400}.kg-bookmark-metadata>span:nth-of-type(2):before{content:\"\\2022\";margin:0 6px}.kg-bookmark-metadata>span:last-of-type{overflow:hidden;text-overflow:ellipsis}.kg-bookmark-thumbnail{position:relative;flex-grow:1;min-width:33%}.kg-bookmark-thumbnail img{width:100%;height:100%;object-fit:cover;position:absolute;top:0;left:0;border-radius:0 2px 2px 0}\n","button":".kg-button-card,.kg-button-card *{box-sizing:border-box}.kg-button-card{display:flex;position:static;align-items:center;width:100%;justify-content:center}.kg-button-card.kg-align-left{justify-content:flex-start}.kg-button-card a.kg-btn{display:flex;position:static;align-items:center;padding:0 1.2em;height:2.4em;line-height:1em;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:.95em;font-weight:600;text-decoration:none;border-radius:5px;transition:opacity .2s ease-in-out}.kg-button-card a.kg-btn:hover{opacity:.85}.kg-button-card a.kg-btn-accent{background-color:var(--ghost-accent-color);color:#fff}\n","callout":".kg-callout-card,.kg-callout-card *{box-sizing:border-box}.kg-callout-card{display:flex;padding:1.2em 1.6em;border-radius:8px}.kg-callout-card-grey{background:#7c8b9a21}.kg-callout-card-white{background:transparent;box-shadow:inset 0 0 0 1px #7c8b9a33}.kg-callout-card-blue{background:#21ace81f}.kg-callout-card-green{background:#34b7431f}.kg-callout-card-yellow{background:#f0a50f21}.kg-callout-card-red{background:#d12e2e1c}.kg-callout-card-pink{background:#e147ae1c}.kg-callout-card-purple{background:#8755ec1f}.kg-callout-card-accent{background:var(--ghost-accent-color);color:#fff}.kg-callout-card.kg-callout-card-accent a{color:#fff;text-decoration:underline}.kg-callout-card div.kg-callout-emoji{padding-right:.8em;line-height:1.25em;font-size:1.15em}.kg-callout-card div.kg-callout-text{font-size:.95em;line-height:1.5em}.kg-callout-card+.kg-callout-card{margin-top:1em}\n","collection":".kg-collection-card{width:100%;margin-top:6vmin}.kg-collection-card+*{margin-top:6vmin}.kg-collection-card-title{margin:.8rem 0 1.6rem;font-size:1.5rem;font-weight:700;text-transform:uppercase}a.kg-collection-card-post-wrapper{text-decoration:none;color:var(--text-color)}a.kg-collection-card-post-wrapper:hover{opacity:1}.kg-collection-card-post{display:flex;gap:3.2rem}.kg-collection-card-img{position:relative;aspect-ratio:3/2}.kg-collection-card-img img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}a.kg-collection-card-post-wrapper:hover img{opacity:.92;transition:all .2s ease}.kg-collection-card-content{display:flex;flex-direction:column;font-size:1.6rem}h2.kg-collection-card-post-title{margin:0;font-size:2.4rem;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}p.kg-collection-card-post-excerpt{margin-top:1.2rem;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-height:1.4}.kg-collection-card-post-meta{display:flex;opacity:.5;margin-top:1.2rem;font-size:1.3rem;font-weight:500}.kg-collection-card-list{display:flex;flex-direction:column;gap:3.2rem}@media(max-width:767px){.kg-collection-card-list .kg-collection-card-post{flex-direction:column}}.kg-collection-card-list .kg-collection-card-img{flex:0 0 30%}.kg-collection-card-grid{display:grid;grid-template-columns:repeat(1,minmax(0,1fr));gap:2.4rem}@media(min-width:640px){.kg-collection-card-grid:not(.columns-1){grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:1024px){.kg-collection-card-grid:not(.columns-1):not(.columns-2){grid-template-columns:repeat(3,minmax(0,1fr));gap:3.2rem}.kg-collection-card-grid.columns-1{gap:4.8rem}.kg-collection-card-grid.columns-2{gap:4rem}}@media(min-width:1280px){.kg-collection-card-grid:not(.columns-1):not(.columns-2):not(.columns-3){grid-template-columns:repeat(4,minmax(0,1fr))}}.kg-collection-card-grid .kg-collection-card-post{flex-direction:column;gap:1.2rem}@media(min-width:1024px){.kg-collection-card-grid.columns-1 .kg-collection-card-post{gap:2rem}.kg-collection-card-grid.columns-2 .kg-collection-card-post{gap:1.6rem}}.kg-collection-card-grid.columns-1 .kg-collection-card-img,.kg-collection-card-grid.columns-2 .kg-collection-card-img{aspect-ratio:16/9}.kg-collection-card-grid .kg-collection-card-content{font-size:1.5rem}@media(min-width:640px){.kg-collection-card-grid .kg-collection-card-content{font-size:1.6rem}}@media(min-width:1024px){.kg-collection-card-grid.columns-1 .kg-collection-card-content{font-size:1.8rem}.kg-collection-card-grid.columns-3 .kg-collection-card-content,.kg-collection-card-grid.columns-4 .kg-collection-card-content{font-size:1.5rem}}.kg-collection-card-grid h2.kg-collection-card-post-title{font-size:1.7rem}.kg-collection-card-grid .kg-collection-card-post-meta{font-size:1.25rem}@media(min-width:640px){.kg-collection-card-grid h2.kg-collection-card-post-title{font-size:1.9rem}.kg-collection-card-grid.columns-1 h2.kg-collection-card-post-title{font-size:2.4rem}.kg-collection-card-grid:not(.columns-3):not(.columns-4) .kg-collection-card-post-meta{font-size:1.3rem}}@media(min-width:1024px){.kg-collection-card-grid.columns-1 h2.kg-collection-card-post-title{font-size:3.6rem}.kg-collection-card-grid.columns-2 h2.kg-collection-card-post-title{font-size:2.4rem}.kg-collection-card-grid.columns-1 .kg-collection-card-post-meta{font-size:1.4rem}}@media(min-width:1280px){.kg-collection-card-grid.columns-4 h2.kg-collection-card-post-title{font-size:1.7rem}}\n","cta":".kg-cta-card,.kg-cta-card *{box-sizing:border-box}.kg-cta-card{display:flex;flex-direction:column;border-radius:8px}.kg-cta-bg-grey{background:#97a3af24}.kg-cta-bg-white{background:transparent;box-shadow:inset 0 0 0 1px #7c8b9a33}.kg-cta-bg-blue{background:#21ace81f}.kg-cta-bg-green{background:#34b7431f}.kg-cta-bg-yellow{background:#f0a50f21}.kg-cta-bg-red{background:#d12e2e1c}.kg-cta-bg-pink{background:#e147ae1c}.kg-cta-bg-purple{background:#8755ec1f}.kg-cta-sponsor-label-wrapper{margin:0 1.5em;padding:.7em 0;border-bottom:1px solid rgba(124,139,154,.2)}@media(max-width:600px){.kg-cta-sponsor-label-wrapper{margin:0 1.25em;padding:.5em 0}}.kg-cta-bg-none .kg-cta-sponsor-label-wrapper{margin:0;padding-top:0}.kg-cta-has-img .kg-cta-sponsor-label-wrapper:not(.kg-cta-bg-none .kg-cta-sponsor-label-wrapper):not(.kg-cta-minimal .kg-cta-sponsor-label-wrapper),.kg-cta-bg-none.kg-cta-no-dividers .kg-cta-sponsor-label-wrapper{border-bottom:0}.kg-cta-sponsor-label{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:12px;font-weight:600;text-transform:uppercase;text-wrap:pretty}.kg-cta-sponsor-label span:not(a span){color:color-mix(in srgb,currentColor 45%,transparent)}.kg-cta-sponsor-label a,.kg-cta-sponsor-label a span{color:currentColor;transition:opacity .15s ease-in-out}.kg-cta-sponsor-label a:hover,.kg-cta-sponsor-label a:hover span{color:currentColor;opacity:.85}.kg-cta-link-accent .kg-cta-sponsor-label a{color:var(--ghost-accent-color)}.kg-cta-content{display:flex;padding:1.5em;gap:1.5em}@media(max-width:600px){.kg-cta-content{padding:1.25em;gap:1.25em}}.kg-cta-has-img .kg-cta-sponsor-label-wrapper+.kg-cta-content:not(.kg-cta-bg-none .kg-cta-content):not(.kg-cta-minimal .kg-cta-content){padding-top:0}.kg-cta-bg-none .kg-cta-content{padding:1.5em 0;border-bottom:1px solid rgba(124,139,154,.2)}.kg-cta-bg-none.kg-cta-no-dividers .kg-cta-content{padding:0;border-bottom:none}.kg-cta-bg-none:not(.kg-cta-no-dividers) .kg-cta-content:not(.kg-cta-sponsor-label-wrapper+.kg-cta-content){border-top:1px solid rgba(124,139,154,.2)}@media(max-width:600px){.kg-cta-bg-none .kg-cta-content{padding:1.25em 0}}.kg-cta-minimal .kg-cta-content{flex-direction:row}@media(max-width:600px){.kg-cta-minimal .kg-cta-content{flex-direction:column;gap:1.6rem}}.kg-cta-immersive .kg-cta-content{flex-direction:column}.kg-cta-content-inner{display:flex;flex-direction:column;gap:1.5em}@media(max-width:600px){.kg-cta-content-inner{gap:1.25em}}.kg-cta-immersive.kg-cta-centered .kg-cta-content-inner{align-items:center}.kg-cta-image-container{flex-shrink:0}.kg-cta-image-container img{width:100%;height:auto;margin:0;object-fit:cover;border-radius:6px}.kg-cta-minimal .kg-cta-image-container img{width:64px;height:64px}@media(max-width:600px){.kg-cta-minimal .kg-cta-image-container img{width:52px;height:52px}}.kg-cta-text p{margin:0;line-height:1.5em;text-wrap:pretty}.kg-cta-bg-none .kg-cta-text p{line-height:unset}.kg-cta-immersive.kg-cta-centered .kg-cta-text{text-align:center}.kg-cta-text p+p{margin-top:1.25em}.kg-cta-text a{color:currentColor;transition:opacity .15s ease-in-out}.kg-cta-text a:hover{color:currentColor;opacity:.85}.kg-cta-link-accent .kg-cta-text a{color:var(--ghost-accent-color)}a.kg-cta-button{display:flex;position:static;align-items:center;justify-content:center;padding:0 1em;height:2.5em;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:.95em;font-weight:500;line-height:1.65;text-decoration:none;border-radius:6px;transition:opacity .15s ease-in-out}a.kg-cta-button:hover{opacity:.85}a.kg-cta-button.kg-style-accent{background-color:var(--ghost-accent-color)}a.kg-cta-button{width:max-content}.kg-cta-immersive.kg-cta-has-img a.kg-cta-button{width:100%}\n","file":".kg-file-card,.kg-file-card *{box-sizing:border-box}.kg-file-card{display:flex}.kg-file-card a.kg-file-card-container{display:flex;align-items:stretch;justify-content:space-between;color:inherit;padding:12px;min-height:92px;background:#fff;color:#222;border:1px solid rgb(124 139 154 / 25%);border-radius:5px;transition:all ease-in-out .35s;text-decoration:none;width:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.kg-file-card a.kg-file-card-container:hover{border:1px solid rgb(124 139 154 / 35%)}.kg-file-card-contents{display:flex;flex-direction:column;justify-content:space-between;margin:4px 8px;width:100%}.kg-file-card-title{font-size:16px;font-weight:600;line-height:1.3em}.kg-file-card-caption{font-size:14px;line-height:1.3em;opacity:.7}.kg-file-card-title+.kg-file-card-caption{flex-grow:1;margin-top:3px}.kg-file-card-metadata{display:inline;font-size:14px;line-height:1.3em;margin-top:5px}.kg-file-card-filename{display:inline;font-weight:500}.kg-file-card-filesize{display:inline-block;font-size:14px;opacity:.6}.kg-file-card-filesize:before{display:inline-block;content:\"\\2022\";margin-left:6px;margin-right:6px}.kg-file-card-icon{position:relative;display:flex;align-items:center;justify-content:center;width:80px;min-width:80px;height:100%;min-height:80px}.kg-file-card-icon:before{position:absolute;display:block;content:\"\";inset:0;background:currentColor;opacity:.06;transition:opacity ease-in-out .35s;border-radius:3px}.kg-file-card a.kg-file-card-container:hover .kg-file-card-icon:before{opacity:.08}.kg-file-card-icon svg{width:24px;height:24px;color:var(--ghost-accent-color)}.kg-file-card-medium a.kg-file-card-container{min-height:72px}.kg-file-card-medium .kg-file-card-caption{opacity:1;font-weight:500}.kg-file-card-small a.kg-file-card-container{align-items:center;min-height:52px}.kg-file-card-small .kg-file-card-metadata{font-size:14px;margin-top:0}.kg-file-card-small .kg-file-card-icon svg{width:20px;height:20px}.kg-file-card+.kg-file-card{margin-top:1em}\n","gallery":".kg-gallery-card,.kg-gallery-card *{box-sizing:border-box}.kg-gallery-card,.kg-image-card{--gap: 1.2rem}.kg-image-card:not(.kg-card-hascaption)+.kg-image-card,.kg-image-card:not(.kg-card-hascaption)+.kg-gallery-card,.kg-gallery-card:not(.kg-card-hascaption)+.kg-image-card,.kg-gallery-card:not(.kg-card-hascaption)+.kg-gallery-card{margin-top:var(--gap)}.kg-gallery-container{position:relative}.kg-gallery-row{display:flex;flex-direction:row;justify-content:center}.kg-gallery-image img{display:block;margin:0;width:100%;height:100%}.kg-gallery-row:not(:first-of-type){margin:var(--gap) 0 0}.kg-gallery-image:not(:first-of-type){margin:0 0 0 var(--gap)}@media(max-width:600px){.kg-gallery-card,.kg-image-card{--gap: .6rem}}\n","header":".kg-header-card,.kg-header-card *{box-sizing:border-box}.kg-header-card{padding:12vmin 4em;min-height:60vh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}.kg-header-card.kg-size-small{padding-top:14vmin;padding-bottom:14vmin;min-height:40vh}.kg-header-card.kg-size-large{padding-top:18vmin;padding-bottom:18vmin;min-height:80vh}.kg-header-card.kg-align-left{text-align:left;align-items:flex-start}.kg-header-card.kg-style-dark{background:#151515;color:#fff}.kg-header-card.kg-style-light{background-color:#fafafa}.kg-header-card.kg-style-accent{background-color:var(--ghost-accent-color)}.kg-header-card.kg-style-image{position:relative;background-color:#e7e7e7;background-size:cover;background-position:center}.kg-header-card.kg-style-image:before{position:absolute;display:block;content:\"\";inset:0;background:linear-gradient(0deg,#0000,#0003)}.kg-header-card h2.kg-header-card-header{font-size:5em;font-weight:700;line-height:1.1em;letter-spacing:-.01em;margin:0}.kg-header-card h2.kg-header-card-header strong{font-weight:800}.kg-header-card.kg-size-small h2.kg-header-card-header{font-size:4em}.kg-header-card.kg-size-large h2.kg-header-card-header{font-size:6em}.kg-header-card h3.kg-header-card-subheader{font-size:1.5em;font-weight:500;line-height:1.4em;margin:0;max-width:40em}.kg-header-card h2+h3.kg-header-card-subheader{margin:.35em 0 0}.kg-header-card h3.kg-header-card-subheader strong{font-weight:600}.kg-header-card.kg-size-small h3.kg-header-card-subheader{font-size:1.25em}.kg-header-card.kg-size-large h3.kg-header-card-subheader{font-size:1.75em}.kg-header-card:not(.kg-style-light) h2.kg-header-card-header,.kg-header-card:not(.kg-style-light) h3.kg-header-card-subheader{color:#fff}.kg-header-card.kg-style-accent h3.kg-header-card-subheader,.kg-header-card.kg-style-image h3.kg-header-card-subheader{opacity:1}.kg-header-card.kg-style-image h2.kg-header-card-header,.kg-header-card.kg-style-image h3.kg-header-card-subheader,.kg-header-card.kg-style-image a.kg-header-card-button{z-index:999}.kg-header-card h2.kg-header-card-header a,.kg-header-card h3.kg-header-card-subheader a{color:var(--ghost-accent-color)}.kg-header-card.kg-style-accent h2.kg-header-card-header a,.kg-header-card.kg-style-accent h3.kg-header-card-subheader a,.kg-header-card.kg-style-image h2.kg-header-card-header a,.kg-header-card.kg-style-image h3.kg-header-card-subheader a{color:#fff}.kg-header-card a.kg-header-card-button{display:flex;position:static;align-items:center;fill:#fff;background:#fff;border-radius:3px;outline:none;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:1.05em;font-weight:600;line-height:1em;text-align:center;text-decoration:none;letter-spacing:.2px;white-space:nowrap;text-overflow:ellipsis;color:#151515;height:2.7em;padding:0 1.2em;transition:opacity .2s ease}.kg-header-card h2+a.kg-header-card-button,.kg-header-card h3+a.kg-header-card-button{margin:1.75em 0 0}.kg-header-card a.kg-header-card-button:hover{opacity:.85}.kg-header-card.kg-size-large a.kg-header-card-button{font-size:1.1em;height:2.9em}.kg-header-card.kg-size-large h2+a.kg-header-card-button,.kg-header-card.kg-size-large h3+a.kg-header-card-button{margin-top:2em}.kg-header-card.kg-size-small a.kg-header-card-button{height:2.4em;font-size:1em}.kg-header-card.kg-size-small h2+a.kg-header-card-button,.kg-header-card.kg-size-small h3+a.kg-header-card-button{margin-top:1.5em}.kg-header-card.kg-style-image a.kg-header-card-button,.kg-header-card.kg-style-dark a.kg-header-card-button{background:#fff;color:#151515}.kg-header-card.kg-style-light a.kg-header-card-button{background:var(--ghost-accent-color);color:#fff}.kg-header-card.kg-style-accent a.kg-header-card-button{background:#fff;color:#151515}@media(max-width:640px){.kg-header-card{padding-left:1em;padding-right:1em}.kg-header-card h2.kg-header-card-header{font-size:3.5em}.kg-header-card.kg-size-large h2.kg-header-card-header{font-size:4em}.kg-header-card.kg-size-small h2.kg-header-card-header{font-size:3em}.kg-header-card h3.kg-header-card-subheader{font-size:1.25em}.kg-header-card.kg-size-large h3.kg-header-card-subheader{font-size:1.5em}.kg-header-card.kg-size-small h3.kg-header-card-subheader{font-size:1em}}\n\n.kg-header-card.kg-v2{position:relative;padding:0;min-height:initial;text-align:initial}.kg-header-card.kg-v2,.kg-header-card.kg-v2 *{box-sizing:border-box}.kg-header-card.kg-v2 a,.kg-header-card.kg-v2 a span{color:currentColor}.kg-header-card.kg-style-accent.kg-v2{background-color:var(--ghost-accent-color)}.kg-header-card-content{width:100%}.kg-layout-split .kg-header-card-content{display:grid;grid-template-columns:1fr 1fr}.kg-header-card-text{position:relative;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;height:100%;padding:min(6.4vmax,120px) min(4vmax,80px);background-size:cover;background-position:center;text-align:left}.kg-width-wide .kg-header-card-text{padding:min(10vmax,220px) min(6.4vmax,140px)}.kg-width-full .kg-header-card-text{padding:min(12vmax,260px) 0}.kg-layout-split .kg-header-card-text{padding:min(12vmax,260px) min(4vmax,80px)}.kg-layout-split.kg-content-wide .kg-header-card-text{padding:min(10vmax,220px) 0 min(10vmax,220px) min(4vmax,80px)}.kg-layout-split.kg-content-wide.kg-swapped .kg-header-card-text{padding:min(10vmax,220px) min(4vmax,80px) min(10vmax,220px) 0}.kg-swapped .kg-header-card-text{grid-row:1}.kg-header-card-text.kg-align-center{align-items:center;text-align:center}.kg-header-card.kg-style-image h2.kg-header-card-heading,.kg-header-card.kg-style-image .kg-header-card-subheading,.kg-header-card.kg-style-image.kg-v2 .kg-header-card-button{z-index:999}.kg-header-card>picture>.kg-header-card-image{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;background-color:#fff;pointer-events:none}.kg-header-card-content .kg-header-card-image{width:100%;height:0;min-height:100%;object-fit:cover;object-position:center}.kg-content-wide .kg-header-card-content .kg-header-card-image{height:100%;padding:5.6em 0;object-fit:contain}.kg-header-card h2.kg-header-card-heading{margin:0;font-size:clamp(1.7em,4vw,2.5em);font-weight:700;line-height:1.05em;letter-spacing:-.01em}.kg-header-card.kg-width-wide h2.kg-header-card-heading{font-size:clamp(1.7em,5vw,3.3em)}.kg-header-card.kg-width-full h2.kg-header-card-heading{font-size:clamp(1.9em,5.6vw,4.2em)}.kg-header-card.kg-width-full.kg-layout-split h2.kg-header-card-heading{font-size:clamp(1.9em,4vw,3.3em)}.kg-header-card-subheading{margin:0 0 2em}.kg-header-card .kg-header-card-subheading{max-width:40em;margin:0;font-size:clamp(1.05em,2vw,1.4em);font-weight:500;line-height:1.2em}.kg-header-card h2+.kg-header-card-subheading{margin:.6em 0 0}.kg-header-card .kg-header-card-subheading strong{font-weight:600}.kg-header-card.kg-width-wide .kg-header-card-subheading{font-size:clamp(1.05em,2vw,1.55em)}.kg-header-card.kg-width-full .kg-header-card-subheading:not(.kg-layout-split .kg-header-card-subheading){max-width:min(65vmax,1200px);font-size:clamp(1.05em,2vw,1.7em)}.kg-header-card.kg-width-full.kg-layout-split .kg-header-card-subheading{font-size:clamp(1.05em,2vw,1.55em)}.kg-header-card.kg-v2 .kg-header-card-button{display:flex;position:relative;align-items:center;height:2.9em;min-height:46px;padding:0 1.2em;outline:none;border:none;font-size:1em;font-weight:600;line-height:1em;text-align:center;text-decoration:none;letter-spacing:.2px;white-space:nowrap;text-overflow:ellipsis;border-radius:3px;transition:opacity .2s ease}.kg-header-card.kg-v2 .kg-header-card-button.kg-style-accent{background-color:var(--ghost-accent-color)}.kg-header-card.kg-v2 h2+.kg-header-card-button,.kg-header-card.kg-v2 p+.kg-header-card-button{margin:1.5em 0 0}.kg-header-card.kg-v2 .kg-header-card-button:hover{opacity:.85}.kg-header-card.kg-v2.kg-width-wide .kg-header-card-button{font-size:1.05em}.kg-header-card.kg-v2.kg-width-wide h2+.kg-header-card-button,.kg-header-card.kg-v2.kg-width-wide p+.kg-header-card-button{margin-top:1.75em}.kg-header-card.kg-v2.kg-width-full .kg-header-card-button{font-size:1.1em}.kg-header-card.kg-v2.kg-width-full h2+.kg-header-card-button,.kg-header-card.kg-v2.kg-width-full p+.kg-header-card-button{margin-top:2em}@media(max-width:640px){.kg-layout-split .kg-header-card-content{grid-template-columns:1fr}.kg-width-wide .kg-header-card-text{padding:min(6.4vmax,120px) min(4vmax,80px)}.kg-layout-split.kg-content-wide .kg-header-card-text,.kg-layout-split.kg-content-wide.kg-swapped .kg-header-card-text{padding:min(9.6vmax,180px) 0}.kg-header-card.kg-width-full .kg-header-card-subheading:not(.kg-layout-split .kg-header-card-subheading){max-width:unset}.kg-header-card-content .kg-header-card-image:not(.kg-content-wide .kg-header-card-content .kg-header-card-image){height:auto;min-height:unset;aspect-ratio:1 / 1}.kg-content-wide .kg-header-card-content .kg-header-card-image{padding:1.7em 0 0}.kg-content-wide.kg-swapped .kg-header-card-content .kg-header-card-image{padding:0 0 1.7em}.kg-header-card.kg-v2 .kg-header-card-button{height:2.9em}.kg-header-card.kg-v2.kg-width-wide .kg-header-card-button,.kg-header-card.kg-v2.kg-width-full .kg-header-card-button{font-size:1em}}\n","nft":".kg-nft-card,.kg-nft-card *{box-sizing:border-box}.kg-nft-card{display:flex;flex-direction:column;align-items:center;width:100%;margin-left:auto;margin-right:auto}.kg-nft-card a.kg-nft-card-container{position:static;display:flex;flex:auto;flex-direction:column;text-decoration:none;font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif;font-size:14px;font-weight:400;box-shadow:0 2px 6px -2px #0000001a,0 0 1px #0006;width:100%;max-width:512px;color:#222;background:#fff;border-radius:5px;transition:none}.kg-nft-card *{position:static}.kg-nft-metadata{padding:20px;width:100%}.kg-nft-image{border-radius:5px 5px 0 0;width:100%}.kg-nft-header{display:flex;justify-content:space-between;align-items:flex-start;gap:20px}.kg-nft-header h4.kg-nft-title{font-family:inherit;font-size:19px;font-weight:700;line-height:1.3em;min-width:unset;max-width:unset;margin:0;color:#222}.kg-nft-opensea-logo{margin-top:2px;width:100px;object-fit:scale-down}.kg-nft-creator{font-family:inherit;line-height:1.4em;margin:4px 0 0;color:#ababab}.kg-nft-creator span{font-weight:500;color:#222}.kg-nft-card p.kg-nft-description{font-family:inherit;font-size:14px;line-height:1.4em;margin:20px 0 0;color:#222}\n","product":".kg-product-card,.kg-product-card *{box-sizing:border-box}.kg-product-card{display:flex;align-items:center;flex-direction:column;width:100%}.kg-product-card-container{display:grid;grid-template-columns:auto min-content;align-items:center;grid-row-gap:16px;background:transparent;max-width:550px;padding:20px;width:100%;background:#fff;color:#222;border-radius:5px;box-shadow:inset 0 0 0 1px #7c8b9a40;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.kg-product-card-image{grid-column:1 / 3;justify-self:center;height:auto}.kg-product-card-title-container{grid-column:1 / 2}.kg-product-card h4.kg-product-card-title{text-decoration:none;font-weight:600;font-size:21px;margin-top:0;margin-bottom:0;line-height:1.15em}.kg-product-card-description{grid-column:1 / 3}.kg-product-card .kg-product-card-description p,.kg-product-card .kg-product-card-description ol,.kg-product-card .kg-product-card-description ul{font-size:14px;line-height:1.5em;opacity:.7;margin-bottom:0}.kg-product-card .kg-product-card-description p:first-of-type{margin-top:-4px}.kg-product-card .kg-product-card-description p:not(:first-of-type),.kg-product-card .kg-product-card-description ul,.kg-product-card .kg-product-card-description ol{margin-top:.95em}.kg-product-card .kg-product-card-description li+li{margin-top:.5em}.kg-product-card-rating{display:flex;align-items:center;grid-column:2 / 3;align-self:start;justify-self:end;padding-left:16px}@media(max-width:400px){.kg-product-card-title-container{grid-column:1 / 3}.kg-product-card-rating{grid-column:1 / 3;justify-self:start;margin-top:-15px;padding-left:0}}.kg-product-card-rating-star{height:20px;width:20px}.kg-product-card-rating-star svg{width:16px;height:16px;fill:currentColor;opacity:.15}.kg-product-card-rating-active.kg-product-card-rating-star svg{opacity:1}.kg-product-card a.kg-product-card-button{justify-content:center;grid-column:1 / 3;display:flex;position:static;align-items:center;font-size:14px;font-weight:600;line-height:1em;text-decoration:none;width:100%;height:38px;border-radius:6px;padding:0 12px;transition:opacity .2s ease-in-out}.kg-product-card a.kg-product-card-btn-accent{background-color:var(--ghost-accent-color);color:#fff}\n","signup":".kg-signup-card{position:relative}.kg-signup-card,.kg-signup-card *{box-sizing:border-box}.kg-signup-card a,.kg-signup-card a span{color:currentColor}.kg-signup-card.kg-style-accent{background-color:var(--ghost-accent-color)}.kg-layout-split .kg-signup-card-content{display:grid;grid-template-columns:1fr 1fr}.kg-signup-card-text{position:relative;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;height:100%;padding:min(4vmax,80px);background-size:cover;background-position:center;text-align:left}.kg-width-wide .kg-signup-card-text{padding:min(6.4vmax,120px)}.kg-width-full .kg-signup-card-text{padding:min(12vmax,260px) 0}.kg-layout-split .kg-signup-card-text{padding:min(12vmax,260px) min(4vmax,80px)}.kg-layout-split.kg-content-wide .kg-signup-card-text{padding:min(10vmax,220px) 0 min(10vmax,220px) min(4vmax,80px)}.kg-layout-split.kg-content-wide.kg-swapped .kg-signup-card-text{padding:min(10vmax,220px) min(4vmax,80px) min(10vmax,220px) 0}.kg-swapped .kg-signup-card-text{grid-row:1}.kg-signup-card-text.kg-align-center{align-items:center;text-align:center}.kg-signup-card.kg-style-image h2.kg-signup-card-heading,.kg-signup-card.kg-style-image .kg-signup-card-subheading,.kg-signup-card.kg-style-image .kg-signup-card-button{z-index:999}.kg-signup-card>picture>.kg-signup-card-image{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;background-color:#fff;pointer-events:none}.kg-signup-card-content .kg-signup-card-image{width:100%;height:0;min-height:100%;object-fit:cover;object-position:center}.kg-content-wide .kg-signup-card-content .kg-signup-card-image{height:100%;padding:5.6em 0;object-fit:contain}.kg-signup-card h2.kg-signup-card-heading{margin:0;font-size:clamp(1.7em,4vw,2.5em);font-weight:700;line-height:1.05em;letter-spacing:-.01em}.kg-signup-card.kg-width-wide h2.kg-signup-card-heading{font-size:clamp(1.7em,5vw,3.3em)}.kg-signup-card.kg-width-full h2.kg-signup-card-heading{font-size:clamp(1.9em,5.6vw,4.2em)}.kg-signup-card.kg-width-full.kg-layout-split h2.kg-signup-card-heading{font-size:clamp(1.9em,4vw,3.3em)}.kg-signup-card-subheading{margin:0 0 2em}.kg-signup-card .kg-signup-card-subheading{max-width:40em;margin:0;font-size:clamp(1.05em,2vw,1.4em);font-weight:500;line-height:1.2em}.kg-signup-card h2+.kg-signup-card-subheading{margin:.6em 0 0}.kg-signup-card .kg-signup-card-subheading strong{font-weight:600}.kg-signup-card.kg-width-wide .kg-signup-card-subheading{font-size:clamp(1.05em,2vw,1.55em)}.kg-signup-card.kg-width-full .kg-signup-card-subheading:not(.kg-layout-split .kg-signup-card-subheading){max-width:min(65vmax,1200px);font-size:clamp(1.05em,2vw,1.7em)}.kg-signup-card.kg-width-full.kg-layout-split .kg-signup-card-subheading{font-size:clamp(1.05em,2vw,1.55em)}.kg-signup-card-form{position:relative;display:flex;flex-shrink:0;width:100%}.kg-align-center .kg-signup-card-form{justify-content:center}.kg-signup-card-heading+.kg-signup-card-form,.kg-signup-card-subheading+.kg-signup-card-form{margin:min(2.4vmax,48px) 0 0}.kg-width-wide .kg-signup-card-heading+.kg-signup-card-form,.kg-width-wide .kg-signup-card-subheading+.kg-signup-card-form{margin:min(3.2vmax,64px) 0 0}.kg-width-full .kg-signup-card-heading+.kg-signup-card-form,.kg-width-full .kg-signup-card-subheading+.kg-signup-card-form{margin:min(4vmax,80px) 0 0}.kg-signup-card-fields{display:flex;width:100%;padding:3px;background:#fff;border:1px solid #E6E6E6;border-radius:4px}.kg-width-wide .kg-signup-card-fields,.kg-width-full .kg-signup-card-fields{width:100%;max-width:500px}.kg-signup-card-input{width:100%;height:2.9em;min-height:46px;margin:0 3px 0 0;padding:12px 16px;border:none;background:#fff;font-size:1.1em}.kg-signup-card-input:focus,.kg-signup-card-input:focus-visible{outline:none}.kg-signup-card-button{display:flex;position:relative;align-items:center;height:2.9em;min-height:46px;height:100%;padding:0 1.2em;outline:none;border:none;font-size:1em;font-weight:600;line-height:1em;text-align:center;text-decoration:none;letter-spacing:.2px;white-space:nowrap;text-overflow:ellipsis;border-radius:3px;transition:opacity .2s ease;cursor:pointer}.kg-signup-card-button.kg-style-accent{background-color:var(--ghost-accent-color)}.kg-signup-card h2+.kg-signup-card-button,.kg-signup-card p+.kg-signup-card-button{margin:1.5em 0 0}.kg-signup-card .kg-signup-card-button:hover{opacity:.85}.kg-signup-card.kg-width-wide .kg-signup-card-button{font-size:1.05em}.kg-signup-card.kg-width-wide h2+.kg-signup-card-button,.kg-signup-card.kg-width-wide p+.kg-signup-card-button{margin-top:1.75em}.kg-signup-card.kg-width-full .kg-signup-card-button{font-size:1.1em}.kg-signup-card.kg-width-full h2+.kg-signup-card-button,.kg-signup-card.kg-width-full p+.kg-signup-card-button{margin-top:2em}.kg-signup-card-success,.kg-signup-card-error,.kg-signup-card-form.success .kg-signup-card-fields{display:none}.kg-signup-card-form.success .kg-signup-card-success{display:flex;align-items:center;height:3em;font-size:1.25em;font-weight:500;line-height:1.4em}.kg-signup-card-form.error .kg-signup-card-fields{border:1px solid #FF0000;box-shadow:inset 0 0 0 1px #f003}.kg-signup-card-form.error .kg-signup-card-error{position:absolute;bottom:calc(-1rem - 1.6em);display:block;font-size:inherit}.kg-signup-card-button-loading{position:absolute;inset:0;align-items:center;justify-content:center;display:none}.kg-signup-card-form.loading .kg-signup-card-button-default{color:transparent}.kg-signup-card-form.loading .kg-signup-card-button-loading{display:flex}.kg-signup-card-disclaimer{margin:1rem 0 0}.kg-signup-card-form.success+.kg-signup-card-disclaimer,.kg-signup-card-form.error+.kg-signup-card-disclaimer{visibility:hidden}@media(max-width:640px){.kg-layout-split .kg-signup-card-content{grid-template-columns:1fr}.kg-width-wide .kg-signup-card-text{padding:min(6.4vmax,120px) min(4vmax,80px)}.kg-layout-split.kg-content-wide .kg-signup-card-text,.kg-layout-split.kg-content-wide.kg-swapped .kg-signup-card-text{padding:min(9.6vmax,180px) 0}.kg-signup-card.kg-width-full .kg-signup-card-subheading:not(.kg-layout-split .kg-signup-card-subheading){max-width:unset}.kg-signup-card-content .kg-signup-card-image:not(.kg-content-wide .kg-signup-card-content .kg-signup-card-image){height:auto;min-height:unset;aspect-ratio:1 / 1}.kg-content-wide .kg-signup-card-content .kg-signup-card-image{padding:1.7em 0 0}.kg-content-wide.kg-swapped .kg-signup-card-content .kg-signup-card-image{padding:0 0 1.7em}.kg-signup-card-input{height:2.9em;padding:6px 12px;font-size:1em}.kg-signup-card-button{height:2.9em}.kg-signup-card.kg-width-wide .kg-signup-card-button,.kg-signup-card.kg-width-full .kg-signup-card-button{font-size:1em}}\n","toggle":".kg-toggle-card,.kg-toggle-card *{box-sizing:border-box}.kg-toggle-card{background:transparent;box-shadow:inset 0 0 0 1px #7c8b9a40;border-radius:4px;padding:1.2em}.kg-toggle-card[data-kg-toggle-state=close] .kg-toggle-content{height:0;overflow:hidden;transition:opacity .5s ease,top .35s ease;opacity:0;top:-.5em;position:relative}.kg-toggle-content{height:auto;opacity:1;transition:opacity 1s ease,top .35s ease;top:0;position:relative}.kg-toggle-card[data-kg-toggle-state=close] svg{transform:unset}.kg-toggle-heading{cursor:pointer;display:flex;justify-content:space-between;align-items:flex-start}.kg-toggle-card h4.kg-toggle-heading-text{font-size:1.15em;font-weight:700;line-height:1.3em;margin-top:0;margin-bottom:0}.kg-toggle-content p:first-of-type{margin-top:.5em}.kg-toggle-card .kg-toggle-content p,.kg-toggle-card .kg-toggle-content ol,.kg-toggle-card .kg-toggle-content ul{font-size:.95em;line-height:1.5em;margin-top:.95em;margin-bottom:0}.kg-toggle-card li+li{margin-top:.5em}.kg-toggle-card-icon{height:24px;width:24px;display:flex;justify-content:center;align-items:center;margin-left:1em;padding:0;background:none;border:0;cursor:pointer}.kg-toggle-heading svg{width:14px;color:#7c8b9a80;transition:all .3s;transform:rotate(-180deg)}.kg-toggle-heading path{fill:none;stroke:currentcolor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5;fill-rule:evenodd}.kg-toggle-card+.kg-toggle-card{margin-top:1em}\n","transistor":".kg-transistor-card{display:flex;justify-content:center}.kg-transistor-placeholder{display:flex;flex-direction:column;align-items:center;gap:2.4rem;width:100%;max-width:100%;padding:3rem 2.4rem;border:1px solid rgba(255,255,255,.14);border:1px solid color-mix(in srgb,currentColor 14%,transparent);border-radius:12px;background:#ffffff0a;background:color-mix(in srgb,currentColor 4%,transparent);color:inherit;text-align:center;box-sizing:border-box}.kg-transistor-icon{display:flex;flex-shrink:0;align-items:center;justify-content:center;width:116px;height:116px;border-radius:14px;background:var(--ghost-accent-color, #b8a5ac);color:#fff}.kg-transistor-icon svg{display:block;width:56px;height:56px}.kg-transistor-content{min-width:0;max-width:640px}.kg-transistor-title{margin:0;color:inherit;font-size:2.3rem;font-weight:600;line-height:1.2}.kg-transistor-description{margin-top:1.6rem;color:inherit;font-size:1.6rem;line-height:1.5;opacity:.65}@media(max-width:640px){.kg-transistor-placeholder{gap:1.6rem;padding:2.4rem 1.8rem}.kg-transistor-icon{width:88px;height:88px;border-radius:12px}.kg-transistor-icon svg{width:44px;height:44px}.kg-transistor-title{font-size:1.8rem}.kg-transistor-description{margin-top:1rem;font-size:1.45rem}}\n","video":".kg-video-card,.kg-video-card *{box-sizing:border-box}.kg-video-card{position:relative;--seek-before-width: 0%;--volume-before-width: 100%;--buffered-width: 0%}.kg-video-card video{display:block;max-width:100%;height:auto}.kg-video-container{position:relative;height:0;width:100%;overflow:hidden}.kg-video-container video{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover}.kg-video-overlay{position:absolute;inset:0;display:flex;justify-content:center;align-items:center;background-image:linear-gradient(180deg,rgba(0,0,0,.3) 0,transparent 70%,transparent 100%);z-index:999;transition:opacity .2s ease-in-out}.kg-video-large-play-icon{display:flex;justify-content:center;align-items:center;width:72px;height:72px;padding:0;background:#00000080;border-radius:50%;transition:opacity .2s ease-in-out}.kg-video-large-play-icon svg{width:20px;height:auto;margin-left:2px;fill:#fff}.kg-video-player-container{position:absolute;bottom:-1px;left:0;right:0;width:100%;height:80px;background:linear-gradient(#0000,#00000080);z-index:999;transition:opacity .2s ease-in-out}.kg-video-player{position:absolute;bottom:0;display:flex;align-items:center;width:100%;z-index:9999;padding:12px 16px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;background:#00000080}.kg-video-current-time{min-width:38px;padding:0 4px;color:#fff;font-family:inherit;font-size:12.5px;font-weight:500;line-height:1.4em;white-space:nowrap}.kg-video-time{color:#fff9;font-family:inherit;font-size:12.5px;font-weight:500;line-height:1.4em;white-space:nowrap}.kg-video-duration{padding:0 4px}.kg-video-play-icon,.kg-video-pause-icon{position:relative;padding:0 4px 0 0;font-size:0;background:transparent}.kg-video-hide{display:none!important}.kg-video-hide-animated{opacity:0!important;transition:opacity .2s ease-in-out;cursor:initial}.kg-video-play-icon svg,.kg-video-pause-icon svg{width:14px;height:14px;fill:#fff}.kg-video-seek-slider{flex-grow:1;margin:0 4px}@media(max-width:520px){.kg-video-seek-slider{display:none}}.kg-video-playback-rate{min-width:37px;padding:0 4px;color:#fff;font-family:inherit;font-size:12.5px;font-weight:600;line-height:1.4em;text-align:left;background:transparent;white-space:nowrap}@media(max-width:520px){.kg-video-playback-rate{padding-left:8px}}.kg-video-mute-icon,.kg-video-unmute-icon{position:relative;bottom:-1px;padding:0 4px;font-size:0;background:transparent}@media(max-width:520px){.kg-video-mute-icon,.kg-video-unmute-icon{margin-left:auto}}.kg-video-mute-icon svg,.kg-video-unmute-icon svg{width:16px;height:16px;fill:#fff}.kg-video-volume-slider{width:80px}@media(max-width:300px){.kg-video-volume-slider{display:none}}.kg-video-seek-slider:before{content:\"\";position:absolute;left:0;width:var(--seek-before-width)!important;height:4px;cursor:pointer;background-color:#ebeef0;border-radius:2px}.kg-video-volume-slider:before{content:\"\";position:absolute;left:0;width:var(--volume-before-width)!important;height:4px;cursor:pointer;background-color:#ebeef0;border-radius:2px}.kg-video-card input[type=range]{position:relative;-webkit-appearance:none;background:transparent}.kg-video-card input[type=range]:focus{outline:none}.kg-video-card input[type=range]::-webkit-slider-thumb{-webkit-appearance:none}.kg-video-card input[type=range]::-ms-track{cursor:pointer;border-color:transparent;color:transparent;background:transparent}.kg-video-card button{display:flex;align-items:center;border:0;cursor:pointer}.kg-video-card input[type=range]{height:auto;padding:0;border:0}.kg-video-card input[type=range]::-webkit-slider-runnable-track{width:100%;height:4px;cursor:pointer;background:#fff3;border-radius:2px}.kg-video-card input[type=range]::-webkit-slider-thumb{position:relative;box-sizing:content-box;width:13px;height:13px;margin:-5px 0 0;border:0;cursor:pointer;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #00000014,0 1px 4px #0000003d}.kg-video-card input[type=range]:active::-webkit-slider-thumb{transform:scale(1.2)}.kg-video-card input[type=range]::-moz-range-track{width:100%;height:4px;cursor:pointer;background:#fff3;border-radius:2px}.kg-video-card input[type=range]::-moz-range-progress{background:#ebeef0;border-radius:2px}.kg-video-card input[type=range]::-moz-range-thumb{box-sizing:content-box;width:13px;height:13px;border:0;cursor:pointer;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #00000014,0 1px 4px #0000003d}.kg-video-card input[type=range]:active::-moz-range-thumb{transform:scale(1.2)}.kg-video-card input[type=range]::-ms-track{width:100%;height:3px;border:solid transparent;color:transparent;cursor:pointer;background:transparent}.kg-video-card input[type=range]::-ms-fill-lower{background:#fff}.kg-video-card input[type=range]::-ms-fill-upper{background:#ebeef0}.kg-video-card input[type=range]::-ms-thumb{box-sizing:content-box;width:13px;height:13px;border:0;cursor:pointer;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #00000014,0 1px 4px #0000003d}.kg-video-card input[type=range]:active::-ms-thumb{transform:scale(1.2)}\n"},"js":{"audio":"(function(){const S=function(a){const o=a.querySelector(\".kg-audio-player-container\"),s=a.querySelector(\".kg-audio-play-icon\"),i=a.querySelector(\".kg-audio-pause-icon\"),r=a.querySelector(\".kg-audio-seek-slider\"),g=a.querySelector(\".kg-audio-playback-rate\"),l=a.querySelector(\".kg-audio-mute-icon\"),n=a.querySelector(\".kg-audio-unmute-icon\"),q=a.querySelector(\".kg-audio-volume-slider\"),e=a.querySelector(\"audio\"),x=a.querySelector(\".kg-audio-duration\"),h=a.querySelector(\".kg-audio-current-time\");let P=[{rate:.75,label:\"0.7\\xD7\"},{rate:1,label:\"1\\xD7\"},{rate:1.25,label:\"1.2\\xD7\"},{rate:1.75,label:\"1.7\\xD7\"},{rate:2,label:\"2\\xD7\"}],d=null,c=1;const u=()=>{r.value=Math.floor(e.currentTime),h.textContent=y(r.value),o.style.setProperty(\"--seek-before-width\",`${r.value/r.max*100}%`),d=requestAnimationFrame(u)},b=t=>{t===r?o.style.setProperty(\"--seek-before-width\",t.value/t.max*100+\"%\"):o.style.setProperty(\"--volume-before-width\",t.value/t.max*100+\"%\")},y=t=>{const f=Math.floor(t/60),m=Math.floor(t%60),A=m<10?`0${m}`:`${m}`;return`${f}:${A}`},p=()=>{x.textContent=y(e.duration)},L=()=>{r.max=Math.floor(e.duration)},k=()=>{if(e.buffered.length>0){const t=Math.floor(e.buffered.end(e.buffered.length-1));o.style.setProperty(\"--buffered-width\",`${t/r.max*100}%`)}};e.readyState>0?(p(),L(),k()):e.addEventListener(\"loadedmetadata\",()=>{p(),L(),k()}),s.addEventListener(\"click\",()=>{s.classList.add(\"kg-audio-hide\"),i.classList.remove(\"kg-audio-hide\"),e.play(),requestAnimationFrame(u)}),i.addEventListener(\"click\",()=>{i.classList.add(\"kg-audio-hide\"),s.classList.remove(\"kg-audio-hide\"),e.pause(),cancelAnimationFrame(d)}),l.addEventListener(\"click\",()=>{l.classList.add(\"kg-audio-hide\"),n.classList.remove(\"kg-audio-hide\"),e.muted=!1}),n.addEventListener(\"click\",()=>{n.classList.add(\"kg-audio-hide\"),l.classList.remove(\"kg-audio-hide\"),e.muted=!0}),g.addEventListener(\"click\",()=>{let t=P[(c+1)%5];c=c+1,e.playbackRate=t.rate,g.textContent=t.label}),e.addEventListener(\"progress\",k),r.addEventListener(\"input\",t=>{b(t.target),h.textContent=y(r.value),e.paused||cancelAnimationFrame(d)}),r.addEventListener(\"change\",()=>{e.currentTime=r.value,e.paused||requestAnimationFrame(u)}),q.addEventListener(\"input\",t=>{const f=t.target.value;b(t.target),e.volume=f/100})},v=document.querySelectorAll(\".kg-audio-card\");for(let a=0;a<v.length;a++)S(v[a])})();\n","gallery":"(function(){document.querySelectorAll(\".kg-gallery-image img\").forEach(function(t){const e=t.closest(\".kg-gallery-image\"),i=t.attributes.width.value,o=t.attributes.height.value,c=i/o;e.style.flex=c+\" 1 0%\"})})();\n","toggle":"(function(){const g=document.getElementsByClassName(\"kg-toggle-heading\"),a=function(t){const e=t.target.closest(\".kg-toggle-card\");var l=e.getAttribute(\"data-kg-toggle-state\");l===\"close\"?e.setAttribute(\"data-kg-toggle-state\",\"open\"):e.setAttribute(\"data-kg-toggle-state\",\"close\")};for(let t=0;t<g.length;t++)g[t].addEventListener(\"click\",a,!1)})();\n","video":"(function(){const F=function(a){const o=a.querySelector(\".kg-video-player\"),d=a.querySelector(\".kg-video-player-container\"),s=a.querySelector(\".kg-video-play-icon\"),r=a.querySelector(\".kg-video-pause-icon\"),i=a.querySelector(\".kg-video-seek-slider\"),P=a.querySelector(\".kg-video-playback-rate\"),c=a.querySelector(\".kg-video-mute-icon\"),u=a.querySelector(\".kg-video-unmute-icon\"),S=a.querySelector(\".kg-video-volume-slider\"),t=a.querySelector(\"video\"),$=a.querySelector(\".kg-video-duration\"),q=a.querySelector(\".kg-video-current-time\"),g=a.querySelector(\".kg-video-large-play-icon\"),y=a.querySelector(\".kg-video-overlay\");let M=[{rate:.75,label:\"0.7\\xD7\"},{rate:1,label:\"1\\xD7\"},{rate:1.25,label:\"1.2\\xD7\"},{rate:1.75,label:\"1.7\\xD7\"},{rate:2,label:\"2\\xD7\"}],n=null,p=1;t.loop&&(g.classList.add(\"kg-video-hide-animated\"),y.classList.add(\"kg-video-hide-animated\"));const v=()=>{i.value=Math.floor(t.currentTime),q.textContent=h(i.value),o.style.setProperty(\"--seek-before-width\",`${i.value/i.max*100}%`),n=requestAnimationFrame(v)},b=e=>{e===i?o.style.setProperty(\"--seek-before-width\",e.value/e.max*100+\"%\"):o.style.setProperty(\"--volume-before-width\",e.value/e.max*100+\"%\")},h=e=>{const l=Math.floor(e/60),L=Math.floor(e%60),T=L<10?`0${L}`:`${L}`;return`${l}:${T}`},x=()=>{$.textContent=h(t.duration)},A=()=>{i.max=Math.floor(t.duration)},m=()=>{if(t.buffered.length>0){const e=Math.floor(t.buffered.end(t.buffered.length-1));o.style.setProperty(\"--buffered-width\",`${e/i.max*100}%`)}};t.readyState>0?(x(),A(),m(),t.autoplay&&(n=requestAnimationFrame(v),s.classList.add(\"kg-video-hide\"),r.classList.remove(\"kg-video-hide\")),t.muted&&(u.classList.add(\"kg-video-hide\"),c.classList.remove(\"kg-video-hide\"))):t.addEventListener(\"loadedmetadata\",()=>{x(),A(),m(),t.autoplay&&(n=requestAnimationFrame(v),s.classList.add(\"kg-video-hide\"),r.classList.remove(\"kg-video-hide\")),t.muted&&(u.classList.add(\"kg-video-hide\"),c.classList.remove(\"kg-video-hide\"))}),a.onmouseover=()=>{t.loop||d.classList.remove(\"kg-video-hide-animated\")},a.onmouseleave=()=>{t.currentTime>0&&!t.paused&&!t.ended&&t.readyState>2&&d.classList.add(\"kg-video-hide-animated\")},a.addEventListener(\"click\",()=>{t.loop||(t.currentTime>0&&!t.paused&&!t.ended&&t.readyState>2?w():f())}),t.onplay=()=>{g.classList.add(\"kg-video-hide-animated\"),y.classList.add(\"kg-video-hide-animated\"),s.classList.add(\"kg-video-hide\"),r.classList.remove(\"kg-video-hide\")};const f=()=>{g.classList.add(\"kg-video-hide-animated\"),y.classList.add(\"kg-video-hide-animated\"),s.classList.add(\"kg-video-hide\"),r.classList.remove(\"kg-video-hide\"),t.play(),n=requestAnimationFrame(v)},w=()=>{r.classList.add(\"kg-video-hide\"),s.classList.remove(\"kg-video-hide\"),t.pause(),cancelAnimationFrame(n)};g.addEventListener(\"click\",e=>{e.stopPropagation(),f()}),s.addEventListener(\"click\",e=>{e.stopPropagation(),f()}),r.addEventListener(\"click\",e=>{e.stopPropagation(),w()}),c.addEventListener(\"click\",e=>{e.stopPropagation(),c.classList.add(\"kg-video-hide\"),u.classList.remove(\"kg-video-hide\"),t.muted=!1}),u.addEventListener(\"click\",e=>{e.stopPropagation(),u.classList.add(\"kg-video-hide\"),c.classList.remove(\"kg-video-hide\"),t.muted=!0}),P.addEventListener(\"click\",e=>{e.stopPropagation();let l=M[(p+1)%5];p=p+1,t.playbackRate=l.rate,P.textContent=l.label}),t.addEventListener(\"progress\",m),i.addEventListener(\"input\",e=>{e.stopPropagation(),b(e.target),q.textContent=h(i.value),t.paused||cancelAnimationFrame(n)}),i.addEventListener(\"change\",e=>{e.stopPropagation(),t.currentTime=i.value,t.paused||requestAnimationFrame(v)}),S.addEventListener(\"click\",e=>{e.stopPropagation()}),i.addEventListener(\"click\",e=>{e.stopPropagation()}),S.addEventListener(\"input\",e=>{e.stopPropagation();const l=e.target.value;b(e.target),t.volume=l/100})},R=function(a){const o=a.querySelector(\".kg-video-container\"),d=o.querySelector(\"video\");if(o&&d.width&&d.height){const s=(d.height/d.width*100).toFixed(3);o.style.paddingBottom=`${s}%`}},k=document.querySelectorAll(\".kg-video-card\");for(let a=0;a<k.length;a++)R(k[a]),F(k[a])})();\n"}}
|
|
@@ -2,6 +2,7 @@ const urlUtils = require('../../../shared/url-utils').default;
|
|
|
2
2
|
const models = require('../../models');
|
|
3
3
|
const {getCSVExportFileName} = require('./utils/csv-export-filename');
|
|
4
4
|
const getPostServiceInstance = require('../../services/posts/posts-service-instance');
|
|
5
|
+
const contentImportService = require('../../services/content-import');
|
|
5
6
|
const {rejectAdminApiRestrictedFieldsTransformer} = require('./utils/api-filter-utils');
|
|
6
7
|
const allowedIncludes = [
|
|
7
8
|
'tags',
|
|
@@ -131,10 +132,12 @@ const controller = {
|
|
|
131
132
|
docName: 'content_imports',
|
|
132
133
|
method: 'importContent'
|
|
133
134
|
},
|
|
134
|
-
async query() {
|
|
135
|
-
// CSV
|
|
136
|
-
//
|
|
137
|
-
|
|
135
|
+
async query(frame) {
|
|
136
|
+
// The CSV must be parsed before the response goes out: the uploaded temp file is
|
|
137
|
+
// deleted as soon as it is sent. The posts are written by a background job behind
|
|
138
|
+
// the 202.
|
|
139
|
+
const {importId, total} = await contentImportService.importCSV({filePath: frame.file.path});
|
|
140
|
+
return {meta: {import_id: importId, total}};
|
|
138
141
|
}
|
|
139
142
|
},
|
|
140
143
|
|
|
@@ -41,7 +41,8 @@ const nonePublicAuth = async (apiConfig, frame) => {
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
try {
|
|
44
|
-
const
|
|
44
|
+
const permissionCheck = permissions.canThis(frame.options.context)[apiConfig.method][singular];
|
|
45
|
+
const result = await permissionCheck(permissionIdentifier, unsafeAttrObject);
|
|
45
46
|
|
|
46
47
|
/*
|
|
47
48
|
* Allow the permissions function to return a list of excluded attributes.
|
|
@@ -9,9 +9,83 @@ const messages = {
|
|
|
9
9
|
invalidEmailValueReceived: 'Please enter a valid email address.',
|
|
10
10
|
invalidEmailTypeReceived: 'Invalid email type received',
|
|
11
11
|
invalidAnnouncementVisibilityValueReceived: 'Please enter a valid announcement visibility value',
|
|
12
|
-
invalidAnnouncementBackgroundValueReceived: 'Please enter a valid announcement background value'
|
|
12
|
+
invalidAnnouncementBackgroundValueReceived: 'Please enter a valid announcement background value',
|
|
13
|
+
invalidNavigationItemValueReceived: 'Please enter a valid navigation item'
|
|
13
14
|
};
|
|
14
15
|
|
|
16
|
+
const navigationItemVisibilityValues = ['public', 'members', 'paid', 'public_free', 'public_paid', 'public_only', 'free_members', 'none'];
|
|
17
|
+
const navUrlRegex = new RegExp(/^(\/|#|[a-zA-Z0-9-]+:)/);
|
|
18
|
+
const iconUrlRegex = new RegExp(/^(\/|__GHOST_URL__\/)/);
|
|
19
|
+
const iconUrlOptions = {require_protocol: true, protocols: ['http', 'https']};
|
|
20
|
+
|
|
21
|
+
function parseArraySettingValue(value) {
|
|
22
|
+
if (_.isArray(value)) {
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return JSON.parse(value);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function isValidNavigationUrl(value) {
|
|
30
|
+
return _.isString(value) && !value.match(/\s/) && (validator.isURL(value, {require_protocol: true}) || value.match(navUrlRegex));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function isValidNavigationIcon(value) {
|
|
34
|
+
return _.isString(value) && !value.match(/\s/) && (validator.isURL(value, iconUrlOptions) || value.match(iconUrlRegex));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function validateNavigationItems(setting, errors) {
|
|
38
|
+
const navigationItems = parseArraySettingValue(setting.value);
|
|
39
|
+
|
|
40
|
+
navigationItems.forEach((item) => {
|
|
41
|
+
if (!_.isObject(item) || _.isFunction(item)) {
|
|
42
|
+
errors.push(new ValidationError({
|
|
43
|
+
message: tpl(messages.invalidNavigationItemValueReceived),
|
|
44
|
+
property: setting.key
|
|
45
|
+
}));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (_.isUndefined(item.url) || !isValidNavigationUrl(item.url)) {
|
|
50
|
+
errors.push(new ValidationError({
|
|
51
|
+
message: tpl(messages.invalidNavigationItemValueReceived),
|
|
52
|
+
property: setting.key
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const hasLabel = _.isString(item.label) && !item.label.match(/^\s*$/);
|
|
57
|
+
const hasIcon = _.isString(item.icon) && !item.icon.match(/^\s*$/);
|
|
58
|
+
|
|
59
|
+
if (!_.isUndefined(item.label) && !_.isString(item.label)) {
|
|
60
|
+
errors.push(new ValidationError({
|
|
61
|
+
message: tpl(messages.invalidNavigationItemValueReceived),
|
|
62
|
+
property: setting.key
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (!_.isUndefined(item.icon) && item.icon !== null && item.icon !== '' && !isValidNavigationIcon(item.icon)) {
|
|
67
|
+
errors.push(new ValidationError({
|
|
68
|
+
message: tpl(messages.invalidNavigationItemValueReceived),
|
|
69
|
+
property: setting.key
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (!hasLabel && !hasIcon) {
|
|
74
|
+
errors.push(new ValidationError({
|
|
75
|
+
message: tpl(messages.invalidNavigationItemValueReceived),
|
|
76
|
+
property: setting.key
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (!_.isUndefined(item.visibility) && !navigationItemVisibilityValues.includes(item.visibility)) {
|
|
81
|
+
errors.push(new ValidationError({
|
|
82
|
+
message: tpl(messages.invalidNavigationItemValueReceived),
|
|
83
|
+
property: setting.key
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
15
89
|
module.exports = {
|
|
16
90
|
edit(apiConfig, frame) {
|
|
17
91
|
const errors = [];
|
|
@@ -52,6 +126,14 @@ module.exports = {
|
|
|
52
126
|
}
|
|
53
127
|
}
|
|
54
128
|
|
|
129
|
+
if (['navigation', 'secondary_navigation'].includes(setting.key)) {
|
|
130
|
+
try {
|
|
131
|
+
validateNavigationItems(setting, errors);
|
|
132
|
+
} catch (err) {
|
|
133
|
+
// Array type validation above will return the specific array error.
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
55
137
|
if (emailTypeSettings.includes(setting.key)) {
|
|
56
138
|
const email = setting.value;
|
|
57
139
|
|
|
@@ -17,7 +17,8 @@ JSONHandler = {
|
|
|
17
17
|
contentTypes: ['application/octet-stream', 'application/json'],
|
|
18
18
|
directories: [],
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
// eslint-disable-next-line no-unused-vars
|
|
21
|
+
loadFile: async function (files, startDir) {
|
|
21
22
|
debug('loadFile', files);
|
|
22
23
|
// @TODO: Handle multiple JSON files
|
|
23
24
|
const filePath = files[0].path;
|
package/core/server/data/migrations/versions/5.19/2022-09-02-20-52-backfill-new-product-columns.js
CHANGED
|
@@ -22,7 +22,8 @@ module.exports = createTransactionalMigration(
|
|
|
22
22
|
logging.info(`Updating ${rows.length} Tiers with price and currency information`);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
26
|
+
for (const row of rows) {
|
|
26
27
|
await knex('products').update(row).where('id', row.id);
|
|
27
28
|
}
|
|
28
29
|
},
|
|
@@ -26,14 +26,16 @@ module.exports = createTransactionalMigration(
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
// Attach a unique id to each row
|
|
29
|
-
|
|
29
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
30
|
+
for (const row of rows) {
|
|
30
31
|
row.batch_id = ObjectId().toHexString();
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
// Create batches (insertBatch doesn't support the onConflict option)
|
|
34
35
|
const batches = _.chunk(rows, 1000);
|
|
35
36
|
|
|
36
|
-
|
|
37
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
38
|
+
for (const batch of batches) {
|
|
37
39
|
// Update the members_created_events table using INSERT ON DUPLICATE KEY UPDATE trick
|
|
38
40
|
const response1 = await knex('members_created_events').insert(batch.map((r) => {
|
|
39
41
|
return {
|
package/core/server/data/migrations/versions/5.22/2022-10-31-12-03-backfill-new-product-columns.js
CHANGED
|
@@ -25,7 +25,8 @@ module.exports = createTransactionalMigration(
|
|
|
25
25
|
logging.info(`Updating ${rows.length} Tiers with price and currency information`);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
29
|
+
for (const row of rows) {
|
|
29
30
|
await knex('products').update(row).where('id', row.id);
|
|
30
31
|
}
|
|
31
32
|
},
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const {
|
|
2
|
+
combineNonTransactionalMigrations,
|
|
3
|
+
createAddColumnMigration,
|
|
4
|
+
createAddIndexMigration,
|
|
5
|
+
createSetNullableMigration
|
|
6
|
+
} = require('../../utils');
|
|
7
|
+
|
|
8
|
+
const addGiftColumn = (name, definition) => createAddColumnMigration(
|
|
9
|
+
'gifts',
|
|
10
|
+
name,
|
|
11
|
+
definition,
|
|
12
|
+
{algorithm: 'auto'}
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
module.exports = combineNonTransactionalMigrations(
|
|
16
|
+
addGiftColumn('buyer_name', {type: 'string', maxlength: 191, nullable: true}),
|
|
17
|
+
addGiftColumn('recipient_name', {type: 'string', maxlength: 191, nullable: true}),
|
|
18
|
+
addGiftColumn('personal_message', {type: 'text', maxlength: 500, nullable: true}),
|
|
19
|
+
createSetNullableMigration('gifts', 'buyer_email'),
|
|
20
|
+
createSetNullableMigration('gifts', 'stripe_checkout_session_id'),
|
|
21
|
+
createSetNullableMigration('gifts', 'stripe_payment_intent_id'),
|
|
22
|
+
createSetNullableMigration('gifts', 'expires_at'),
|
|
23
|
+
createSetNullableMigration('gifts', 'purchased_at'),
|
|
24
|
+
addGiftColumn('checkout_started_at', {type: 'dateTime', nullable: true}),
|
|
25
|
+
createAddIndexMigration('gifts', ['status', 'checkout_started_at'])
|
|
26
|
+
);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const {addTable} = require('../../utils');
|
|
2
|
+
|
|
3
|
+
const giftDeliveries = {
|
|
4
|
+
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
5
|
+
gift_id: {type: 'string', maxlength: 24, nullable: false, unique: true, references: 'gifts.id', cascadeDelete: true},
|
|
6
|
+
recipient_email: {type: 'string', maxlength: 191, nullable: false, validations: {isEmail: true}},
|
|
7
|
+
status: {
|
|
8
|
+
type: 'string', maxlength: 50, nullable: false, defaultTo: 'pending', validations: {
|
|
9
|
+
isIn: [['pending', 'sending', 'sent', 'failed', 'cancelled']]
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
started_at: {type: 'dateTime', nullable: true},
|
|
13
|
+
email_sent_at: {type: 'dateTime', nullable: true},
|
|
14
|
+
email_provider_message_id: {type: 'string', maxlength: 1000, nullable: true},
|
|
15
|
+
'@@INDEXES@@': [
|
|
16
|
+
['status', 'started_at']
|
|
17
|
+
]
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
module.exports = addTable('gift_deliveries', giftDeliveries);
|
|
@@ -99,6 +99,38 @@ function dropNullable(tableName, column, transaction = db.knex) {
|
|
|
99
99
|
});
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
+
// MySQL raises these when an explicit ALGORITHM isn't supported for the operation,
|
|
103
|
+
// which varies by server version (RENAME COLUMN only accepts INSTANT from 8.0.28).
|
|
104
|
+
const UNSUPPORTED_ALGORITHM_ERRORS = new Set([
|
|
105
|
+
'ER_ALTER_OPERATION_NOT_SUPPORTED',
|
|
106
|
+
'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON'
|
|
107
|
+
]);
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Runs an ALTER TABLE with an explicit MySQL algorithm, retrying without it if the
|
|
111
|
+
* server doesn't support that algorithm for the operation.
|
|
112
|
+
*
|
|
113
|
+
* @param {import('knex').Knex} transaction
|
|
114
|
+
* @param {string} sql - ALTER statement without a trailing semicolon or algorithm clause
|
|
115
|
+
* @param {'instant'|'inplace'|'copy'|'auto'} [algorithm]
|
|
116
|
+
*/
|
|
117
|
+
async function rawWithAlgorithm(transaction, sql, algorithm) {
|
|
118
|
+
if (!algorithm || algorithm === 'auto') {
|
|
119
|
+
return await transaction.raw(sql);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
try {
|
|
123
|
+
return await transaction.raw(`${sql}, algorithm=${algorithm}`);
|
|
124
|
+
} catch (err) {
|
|
125
|
+
if (!UNSUPPORTED_ALGORITHM_ERRORS.has(err.code)) {
|
|
126
|
+
throw err;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
logging.warn(`ALGORITHM=${algorithm} is not supported by this server for: ${sql} - retrying without it`);
|
|
130
|
+
return await transaction.raw(sql);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
102
134
|
/**
|
|
103
135
|
* @param {string} tableName
|
|
104
136
|
* @param {string} column
|
|
@@ -120,19 +152,15 @@ async function addColumn(tableName, column, transaction = db.knex, columnSpec, o
|
|
|
120
152
|
}
|
|
121
153
|
|
|
122
154
|
for (const sqlQuery of addColumnBuilder.toSQL()) {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
// Guard against an ending semicolon
|
|
127
|
-
sql = sql.replace(/;\s*$/, '');
|
|
128
|
-
if (options?.algorithm !== 'auto') {
|
|
129
|
-
// default to copy if not specified
|
|
130
|
-
const algorithm = options?.algorithm || 'copy';
|
|
131
|
-
sql += `, algorithm=${algorithm}`;
|
|
132
|
-
}
|
|
155
|
+
if (!DatabaseInfo.isMySQL(transaction)) {
|
|
156
|
+
await transaction.raw(sqlQuery.sql);
|
|
157
|
+
continue;
|
|
133
158
|
}
|
|
134
159
|
|
|
135
|
-
|
|
160
|
+
// Guard against an ending semicolon
|
|
161
|
+
const sql = sqlQuery.sql.replace(/;\s*$/, '');
|
|
162
|
+
// default to copy if not specified
|
|
163
|
+
await rawWithAlgorithm(transaction, sql, options?.algorithm || 'copy');
|
|
136
164
|
}
|
|
137
165
|
}
|
|
138
166
|
|
|
@@ -162,19 +190,15 @@ async function dropColumn(tableName, column, transaction = db.knex, columnSpec =
|
|
|
162
190
|
}
|
|
163
191
|
|
|
164
192
|
for (const sqlQuery of dropColumnBuilder.toSQL()) {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
// Guard against an ending semicolon
|
|
169
|
-
sql = sql.replace(/;\s*$/, '');
|
|
170
|
-
if (options?.algorithm !== 'auto') {
|
|
171
|
-
// default to copy if not specified
|
|
172
|
-
const algorithm = options?.algorithm || 'copy';
|
|
173
|
-
sql += `, algorithm=${algorithm}`;
|
|
174
|
-
}
|
|
193
|
+
if (!DatabaseInfo.isMySQL(transaction)) {
|
|
194
|
+
await transaction.raw(sqlQuery.sql);
|
|
195
|
+
continue;
|
|
175
196
|
}
|
|
176
197
|
|
|
177
|
-
|
|
198
|
+
// Guard against an ending semicolon
|
|
199
|
+
const sql = sqlQuery.sql.replace(/;\s*$/, '');
|
|
200
|
+
// default to copy if not specified
|
|
201
|
+
await rawWithAlgorithm(transaction, sql, options?.algorithm || 'copy');
|
|
178
202
|
}
|
|
179
203
|
}
|
|
180
204
|
|
|
@@ -191,8 +215,8 @@ async function renameColumn(tableName, from, to, transaction = db.knex, options
|
|
|
191
215
|
|
|
192
216
|
if (DatabaseInfo.isMySQL(transaction)) {
|
|
193
217
|
// The knex helper does a lot of interesting things with foreign keys that are slow on bigger MySQL clusters
|
|
194
|
-
const
|
|
195
|
-
return await transaction
|
|
218
|
+
const sql = `ALTER TABLE \`${tableName}\` RENAME COLUMN \`${from}\` TO \`${to}\``;
|
|
219
|
+
return await rawWithAlgorithm(transaction, sql, options.algorithm);
|
|
196
220
|
}
|
|
197
221
|
|
|
198
222
|
return await transaction.schema.table(tableName, function (table) {
|