ghost 6.63.0 → 6.64.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/bin/lib/duplicate-deps.js +204 -0
- package/bin/validate-adapters.js +50 -6
- package/components/tryghost-adapter-base-scheduling-0.2.3.tgz +0 -0
- package/components/tryghost-adapter-base-sso-0.1.3.tgz +0 -0
- package/components/tryghost-admin-api-schema-0.0.0.tgz +0 -0
- package/components/tryghost-api-framework-0.0.0.tgz +0 -0
- package/components/tryghost-i18n-0.0.0.tgz +0 -0
- package/components/{tryghost-kg-default-cards-10.3.5.tgz → tryghost-kg-default-cards-10.3.6.tgz} +0 -0
- package/components/tryghost-kg-default-nodes-2.2.1.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.1.tgz +0 -0
- package/components/tryghost-limit-service-0.0.0.tgz +0 -0
- package/components/tryghost-metafield-types-0.0.0.tgz +0 -0
- package/content/themes/source/assets/built/screen.css +1 -1
- package/content/themes/source/assets/css/screen.css +1 -1
- package/content/themes/source/package.json +7 -7
- package/core/boot.js +10 -4
- package/core/built/admin/assets/Combination-DWfJPcz9.js +41 -0
- package/core/built/admin/assets/{PolarAngleAxis-pkMyqz8g.js → PolarAngleAxis-a81ieQUO.js} +2 -2
- package/core/built/admin/assets/RadialBarChart-CHRBhiBN.js +1 -0
- package/core/built/admin/assets/_baseAssignValue-DcPokYW8.js +1 -0
- package/core/built/admin/assets/about-39CAfroa.js +1 -0
- package/core/built/admin/assets/accordion-CJmRaqK7.js +1 -0
- package/core/built/admin/assets/account-migration-DYf7skbb.js +1 -0
- package/core/built/admin/assets/action-list-Crnh-_UI.js +1 -0
- package/core/built/admin/assets/add-integration-modal-B12oRifD.js +1 -0
- package/core/built/admin/assets/add-newsletter-modal-CTvXiIqY.js +1 -0
- package/core/built/admin/assets/add-recommendation-modal-CJf92edY.js +1 -0
- package/core/built/admin/assets/analytics-PHR1Fggi.js +1 -0
- package/core/built/admin/assets/announcement-bar-modal-Bql0CXdp.js +1 -0
- package/core/built/admin/assets/api-keys-CubH-7_H.js +1 -0
- package/core/built/admin/assets/{api-keys-BGPzLHzA.js → api-keys-omLA6iYn.js} +1 -1
- package/core/built/admin/assets/{audience-ceV3XVHq.js → audience-6GXevic-.js} +1 -1
- package/core/built/admin/assets/automated-emails-DJQ4uNZo.js +1 -0
- package/core/built/admin/assets/automations-DcZSLFDU.js +1 -0
- package/core/built/admin/assets/automations-hDVcRPjh.js +1 -0
- package/core/built/admin/assets/avatar-flipboard-DiAGgshK.js +1 -0
- package/core/built/admin/assets/badge-qP06OT7C.js +1 -0
- package/core/built/admin/assets/bluesky-sharing-CJw4d4Mf.js +1 -0
- package/core/built/admin/assets/box-CZ_LSVSy.js +1 -0
- package/core/built/admin/assets/brand-icon-D3ffDYaC.js +1 -0
- package/core/built/admin/assets/breadcrumb-Chn1Ip_q.js +1 -0
- package/core/built/admin/assets/button-DvIh2Bq-.js +1 -0
- package/core/built/admin/assets/calendar-1QGoStFM.js +1 -0
- package/core/built/admin/assets/card-FHQ4D10L.js +1 -0
- package/core/built/admin/assets/chart-helpers-CNpA7re_.js +1 -0
- package/core/built/admin/assets/{chart-BrhA41Zi.js → chart-jVz9Nf9t.js} +9 -9
- package/core/built/admin/assets/checkbox-DKht9xMl.js +1 -0
- package/core/built/admin/assets/{chunk-KS7C4IRE-DCsL4i4D.js → chunk-KS7C4IRE-DhOcHQOU.js} +1 -1
- package/core/built/admin/assets/{chunk.254.035b85ec456ebbd7336b.js → chunk.368.22ce1b732c0b40abd3f1.js} +159 -120
- package/core/built/admin/assets/chunk.524.cc9be98e44890cedc8c8.js +25 -0
- package/core/built/admin/assets/{chunk.582.98b485f9b2802f540897.js → chunk.582.e6fe742b3217207b11a6.js} +23 -30
- package/core/built/admin/assets/{chunk.901.4ccc639821020230bcca.js → chunk.972.4b8c97f93d66db15e751.js} +10625 -10088
- package/core/built/admin/assets/clean-tracked-url-dkN05vOf.js +1 -0
- package/core/built/admin/assets/code-editor-view-BLQIV85-.js +1 -0
- package/core/built/admin/assets/code-editor-view-Cg5eJxcr.js +1 -0
- package/core/built/admin/assets/color-picker-DQoghc0t.js +3 -0
- package/core/built/admin/assets/color-picker-field-BbeK5RRs.js +1 -0
- package/core/built/admin/assets/combobox-weO4FBbv.js +1 -0
- package/core/built/admin/assets/command-DlLrCm9V.js +1 -0
- package/core/built/admin/assets/comments-BjTitLmP.js +1 -0
- package/core/built/admin/assets/components-CwL6a6As-CCRaoCeP.js +1 -0
- package/core/built/admin/assets/{config-kSHvwdTG.js → config-BPljH6wF.js} +1 -1
- package/core/built/admin/assets/confirmation-context-IyqoXVk-.js +1 -0
- package/core/built/admin/assets/container-DAimjOF_.js +1 -0
- package/core/built/admin/assets/content-api-modal-0ZjuLcQ8.js +1 -0
- package/core/built/admin/assets/context-menu-BtioYFrg.js +1 -0
- package/core/built/admin/assets/copy-field-C6ujqJlP.js +1 -0
- package/core/built/admin/assets/create-ghost-browse-value-source-DAZMWZNq.js +1 -0
- package/core/built/admin/assets/custom-integration-modal-Dm8QI_J4.js +1 -0
- package/core/built/admin/assets/data-list-C0CKkeWW.js +1 -0
- package/core/built/admin/assets/date-range-select-DrjHQdgz.js +1 -0
- package/core/built/admin/assets/design-and-theme-modal-CXVOzBWu.js +2 -0
- package/core/built/admin/assets/detail-page-QpLIL-EO.js +1 -0
- package/core/built/admin/assets/dirty-confirm-dialog-DWwxREGh.js +1 -0
- package/core/built/admin/assets/disabled-sources-indicator-CLZhMv8J.js +1 -0
- package/core/built/admin/assets/dist-BRQkNYN1.js +11 -0
- package/core/built/admin/assets/{dist-B3keLvjj.js → dist-BXHrDV19.js} +2 -2
- package/core/built/admin/assets/dist-Bf-HQtVL.js +1 -0
- package/core/built/admin/assets/dist-Bm-PB47a.js +6 -0
- package/core/built/admin/assets/{dist-B6bJuxL3.js → dist-C2lYC76d.js} +1 -1
- package/core/built/admin/assets/dist-CUwte9v_.js +1 -0
- package/core/built/admin/assets/dist-Cm2qbZKL.js +1 -0
- package/core/built/admin/assets/{dist-BtaTA7Ii.js → dist-D7yMk931.js} +1 -1
- package/core/built/admin/assets/{dist-zwwGt8Yf.js → dist-DNAdeRyr.js} +1 -1
- package/core/built/admin/assets/dist-DS6zpxid.js +1 -0
- package/core/built/admin/assets/dist-DVVKsyPh.js +23 -0
- package/core/built/admin/assets/dist-DxfQlAmn.js +1 -0
- package/core/built/admin/assets/dist-DziNzWI2.js +1 -0
- package/core/built/admin/assets/dist-FEQQAwTe.js +1 -0
- package/core/built/admin/assets/dist-nmRzULcD.js +1 -0
- package/core/built/admin/assets/domain-DBrBic6q.js +1 -0
- package/core/built/admin/assets/dropzone-D61QVcEY.js +5 -0
- package/core/built/admin/assets/edit-profile-jCqJBxqw.js +1 -0
- package/core/built/admin/assets/editor-8Fm4UBEd.js +8 -0
- package/core/built/admin/assets/editor-screen-BSX_uC2B.js +27 -0
- package/core/built/admin/assets/email-previews-Bs-JDhIw.js +1 -0
- package/core/built/admin/assets/email-sending-status-context-C76KYL1V.js +1 -0
- package/core/built/admin/assets/email-sending-status-provider-DnNhlIvt.js +1 -0
- package/core/built/admin/assets/{emails-vFMk4yYl.js → emails-CgvIIz3q.js} +1 -1
- package/core/built/admin/assets/{embed-signup-form-modal-DGqsORxS.js → embed-signup-form-modal-DqtBs1WE.js} +1 -1
- package/core/built/admin/assets/empty-indicator-L4Ql5Db7.js +1 -0
- package/core/built/admin/assets/en-Cx75dJv5.js +1 -0
- package/core/built/admin/assets/esm--rhhUGIG.js +2 -0
- package/core/built/admin/assets/explore-DXhDCtKw.js +1 -0
- package/core/built/admin/assets/feature-flag-overrides-context-CrcQKm9Z.js +1 -0
- package/core/built/admin/assets/feature-image-placeholder-e2q6TcH6.js +1 -0
- package/core/built/admin/assets/feed-mmt4noNL.js +1 -0
- package/core/built/admin/assets/feedback-BTPBQLT5.js +1 -0
- package/core/built/admin/assets/field-p7KnP98B.js +1 -0
- package/core/built/admin/assets/filter-bar-CiIKBg3D.js +1 -0
- package/core/built/admin/assets/filter-sources-I-dRaQxl.js +1 -0
- package/core/built/admin/assets/filters-1injvyxJ.js +1 -0
- package/core/built/admin/assets/filters-DnpO6GWX.js +1 -0
- package/core/built/admin/assets/first-promoter-modal-wr73Dldc.js +1 -0
- package/core/built/admin/assets/focus-koenig-editor-on-bottom-click-CkFA8EkI.js +1 -0
- package/core/built/admin/assets/framework-provider-DB-svAju.js +4 -0
- package/core/built/admin/assets/{ghost-b4e8a403baba61905cd7560e30b9732d.js → ghost-a1e6e172c6917e8ef8fa6b0007756d9b.js} +39 -30
- package/core/built/admin/assets/gift-link-modal-C3H7YFXO.js +1 -0
- package/core/built/admin/assets/{gift-links-CfLSnst2.js → gift-links-D8gl_yJS.js} +1 -1
- package/core/built/admin/assets/global-data-context-3MItMry2.js +1 -0
- package/core/built/admin/assets/grid-5vplBYri.js +1 -0
- package/core/built/admin/assets/growth-B1og1kQp.js +1 -0
- package/core/built/admin/assets/growth-Bf6OHZlK.js +3 -0
- package/core/built/admin/assets/heading-BB21QAbb.js +1 -0
- package/core/built/admin/assets/history-modal-t_qEnxPx.js +1 -0
- package/core/built/admin/assets/hooks-DYfTEQLk.js +2 -0
- package/core/built/admin/assets/html-field-COLQbV4r.js +1 -0
- package/core/built/admin/assets/iframe-buffering-Bq1el-gw.js +1 -0
- package/core/built/admin/assets/images-4mvoc3lB.js +1 -0
- package/core/built/admin/assets/{inbox-gJHG7_xd.js → inbox-DgSZ6w2p.js} +34 -34
- package/core/built/admin/assets/index-B3HZU2i8.css +2 -0
- package/core/built/admin/assets/index-DDd-zhNL.js +4 -0
- package/core/built/admin/assets/index.es-Ct5XQNSj.js +1 -0
- package/core/built/admin/assets/inline-B8H6NzIw.js +1 -0
- package/core/built/admin/assets/input-group-CLIN2ykI.js +1 -0
- package/core/built/admin/assets/{input-surface-BsrIZeSF.js → input-surface-wSO5CRy5.js} +1 -1
- package/core/built/admin/assets/integration-header-CKGrXNVP.js +1 -0
- package/core/built/admin/assets/{integrations-B4kuRBFY.js → integrations-DnJrZnHv.js} +1 -1
- package/core/built/admin/assets/invite-user-modal-BaN2mdhI.js +1 -0
- package/core/built/admin/assets/jsx-runtime-BlNNh7jY.js +1 -0
- package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +3 -3
- package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +1 -1
- package/core/built/admin/assets/{koenig-lexical-CGXb0F8o.js → koenig-lexical-CXVgQFUk.js} +1 -1
- package/core/built/admin/assets/koenig-loader-B1XPPY5C.js +2 -0
- package/core/built/admin/assets/kpi-card-CRLPVlFW.js +1 -0
- package/core/built/admin/assets/kpi-card-CRPbW8NZ.js +1 -0
- package/core/built/admin/assets/kpi-helpers-D7zT96bp.js +1 -0
- package/core/built/admin/assets/kpi-tabs-DE_yh9Go.js +1 -0
- package/core/built/admin/assets/label-CgeBxy4o.js +1 -0
- package/core/built/admin/assets/label-picker-DGDp4Vwr.js +1 -0
- package/core/built/admin/assets/labels-KMkFoRG6.js +1 -0
- package/core/built/admin/assets/layout-DWnOMly4.js +1 -0
- package/core/built/admin/assets/lib-_QYaUU89.js +2 -0
- package/core/built/admin/assets/link-helpers-8J7ixADV.js +1 -0
- package/core/built/admin/assets/links-FwNCVyVe.js +1 -0
- package/core/built/admin/assets/list-page-DLMP0PxC.js +1 -0
- package/core/built/admin/assets/luxon-BXCsmep3.js +1 -0
- package/core/built/admin/assets/member-activity-ClMWFyvN.js +1 -0
- package/core/built/admin/assets/member-activity-feed-BQY5Rwaj.js +1 -0
- package/core/built/admin/assets/member-custom-fields-Dd_ie1zG.js +1 -0
- package/core/built/admin/assets/member-detail-DjwkGVne.js +1 -0
- package/core/built/admin/assets/members--N9lhk1N.js +4 -0
- package/core/built/admin/assets/modal-page-Dz-9TP4E.js +1 -0
- package/core/built/admin/assets/moderation-DfYBKq9s.js +1 -0
- package/core/built/admin/assets/multi-select-combobox-BcBEzUW_.js +1 -0
- package/core/built/admin/assets/navigation-modal-Cd-scywg.js +1 -0
- package/core/built/admin/assets/newsletter-detail-modal-CFRY6vg_.js +1 -0
- package/core/built/admin/assets/newsletter-emails-4ntck1AC.js +1 -0
- package/core/built/admin/assets/newsletter-o6eCJtab.js +1 -0
- package/core/built/admin/assets/newsletters-Bmlv0edG.js +1 -0
- package/core/built/admin/assets/{newsletters-Rq1M3GD-.js → newsletters-Dz77m__5.js} +1 -1
- package/core/built/admin/assets/note-CWs3LF-0.js +1 -0
- package/core/built/admin/assets/notifications-BjSvTJqh.js +1 -0
- package/core/built/admin/assets/{nql-BLpCn7qX.js → nql-DnDc7UuU.js} +1 -1
- package/core/built/admin/assets/nql-lang-CeTB_Bhv.js +19 -0
- package/core/built/admin/assets/{offers--e2nGvkW.js → offers-ByWSK0rR.js} +1 -1
- package/core/built/admin/assets/offers-container-modal-Bc9A196w.js +1 -0
- package/core/built/admin/assets/onboarding-B4hfBi9a.js +1 -0
- package/core/built/admin/assets/onboarding-DV_XbHts.js +1 -0
- package/core/built/admin/assets/onboarding-route-Di1LJYEE.js +1 -0
- package/core/built/admin/assets/overview-DE7NHZQN.js +1 -0
- package/core/built/admin/assets/overview-DEF-ZY6x.js +1 -0
- package/core/built/admin/assets/page-header-B-G_g42C.js +1 -0
- package/core/built/admin/assets/pagemenu-CnkTDO71.js +1 -0
- package/core/built/admin/assets/{pages-CjDY2CBI.js → pages-DZ_YGB1D.js} +1 -1
- package/core/built/admin/assets/pages-route-VT7r7YhG.js +1 -0
- package/core/built/admin/assets/papaparse.min-BlhnCUXn.js +10 -0
- package/core/built/admin/assets/pintura-modal-BljM7hf8.js +1 -0
- package/core/built/admin/assets/portal-frame-D9V8iq5x.js +1 -0
- package/core/built/admin/assets/portal-modal-B5OOR9ZD.js +1 -0
- package/core/built/admin/assets/post-analytics-context-bt2YTBAC.js +1 -0
- package/core/built/admin/assets/post-analytics-header-J0WciLx6.js +1 -0
- package/core/built/admin/assets/post-analytics-provider-CgreZDjS.js +1 -0
- package/core/built/admin/assets/post-analytics-rGb-PgD-.js +1 -0
- package/core/built/admin/assets/post-share-modal-D0BbTo4W.js +1 -0
- package/core/built/admin/assets/posts-list-screen-CO5jAWoU.js +2 -0
- package/core/built/admin/assets/posts-route-DV-CXWK9.js +1 -0
- package/core/built/admin/assets/{posts-pCPrhQeR.js → posts-tcoO3iRG.js} +1 -1
- package/core/built/admin/assets/preferences-Tac29oG6.js +5 -0
- package/core/built/admin/assets/preview-chrome-C2lQgZBZ.js +1 -0
- package/core/built/admin/assets/preview-modal-CjRbBr8U.js +1 -0
- package/core/built/admin/assets/profile-yiM1f_Og.js +1 -0
- package/core/built/admin/assets/prop-types-6lTeqvom.js +1 -0
- package/core/built/admin/assets/radio-group-CKROWsw4.js +1 -0
- package/core/built/admin/assets/react-BXwhMTuc.js +1 -0
- package/core/built/admin/assets/{jsx-runtime-DX3WBWVO.js → react-dom-CMOtJ5MH.js} +2 -2
- package/core/built/admin/assets/{referrers-D8oHPmDB.js → referrers-1R8bPpoV.js} +1 -1
- package/core/built/admin/assets/router-provider-CU87qxXw.js +1 -0
- package/core/built/admin/assets/select-CKaC4ggu.js +1 -0
- package/core/built/admin/assets/settings-81kxUa28.js +1 -0
- package/core/built/admin/assets/settings-BVXFqBVK.js +4 -0
- package/core/built/admin/assets/settings-breadcrumbs-czGRx-iu.js +1 -0
- package/core/built/admin/assets/{shade-app-CcS3f8MZ-vwURazk8.js → shade-app-CcS3f8MZ-D5BnfHck.js} +1 -1
- package/core/built/admin/assets/share-modal-BL-16PiB.js +1 -0
- package/core/built/admin/assets/skeleton-DwCva0-b.js +1 -0
- package/core/built/admin/assets/slack-modal-D7W_fNON.js +1 -0
- package/core/built/admin/assets/sort-button-Dquc83jY.js +1 -0
- package/core/built/admin/assets/source-icon-CQboPZQ3.js +1 -0
- package/core/built/admin/assets/stack-BURz77VS.js +1 -0
- package/core/built/admin/assets/{stats-D9PDLS3x.js → stats-Cvp8Ep5m.js} +1 -1
- package/core/built/admin/assets/stats-view-NDja_g96.js +1 -0
- package/core/built/admin/assets/step-1-BKhjy0PV.js +1 -0
- package/core/built/admin/assets/step-2-PxA1OM7R.js +1 -0
- package/core/built/admin/assets/step-3-BJbAiq16.js +2 -0
- package/core/built/admin/assets/stripe-button-C3cfCAou.js +1 -0
- package/core/built/admin/assets/stripe-connect-modal-FyE3Ey2c.js +1 -0
- package/core/built/admin/assets/switch-zfUUy9Jh.js +1 -0
- package/core/built/admin/assets/table-dE4GTIRT.js +1 -0
- package/core/built/admin/assets/tabs-B3XK93sR.js +1 -0
- package/core/built/admin/assets/tag-detail-D4P-tZdM.js +2 -0
- package/core/built/admin/assets/tag-picker-BNSZ6Qxw.js +1 -0
- package/core/built/admin/assets/tags-BsZcaJ6h.js +1 -0
- package/core/built/admin/assets/{tags-ChfdwJyS.js → tags-NwZ7BPK6.js} +1 -1
- package/core/built/admin/assets/testimonials-modal-Dkt6ODLW.js +1 -0
- package/core/built/admin/assets/text-DC-ot6u2.js +1 -0
- package/core/built/admin/assets/textarea-B4FffFmE.js +1 -0
- package/core/built/admin/assets/themes-DtcEFQWm.js +1 -0
- package/core/built/admin/assets/tier-detail-modal-a77Z2VMH.js +1 -0
- package/core/built/admin/assets/{tiers-BCpIOGQr.js → tiers-6mPzCXlM.js} +1 -1
- package/core/built/admin/assets/toggle-group-D2p4okmJ.js +1 -0
- package/core/built/admin/assets/topic-filter-DVOe3D-b.js +1 -0
- package/core/built/admin/assets/transistor-modal-C8RMkhOD.js +1 -0
- package/core/built/admin/assets/trend-badge-B9v7kMF8.js +1 -0
- package/core/built/admin/assets/unsplash-modal-DXt7Brum.js +1 -0
- package/core/built/admin/assets/use-analytics-data-ChHqiZXv.js +1 -0
- package/core/built/admin/assets/use-availability-hPdeG76y.js +1 -0
- package/core/built/admin/assets/{use-check-theme-limit-error-DRUjK4YM.js → use-check-theme-limit-error-JD-J5aaZ.js} +2 -2
- package/core/built/admin/assets/use-email-sending-status-DNMtL5B9.js +1 -0
- package/core/built/admin/assets/use-filter-params-BSFigDIn.js +1 -0
- package/core/built/admin/assets/use-filterable-api-CEMSAYPg.js +1 -0
- package/core/built/admin/assets/use-form-DJKZJhQh.js +1 -0
- package/core/built/admin/assets/use-growth-stats-CqqdnESN.js +1 -0
- package/core/built/admin/assets/use-host-limits-mpTkZIq8.js +1 -0
- package/core/built/admin/assets/use-limiter-DBGjYqu7.js +19 -0
- package/core/built/admin/assets/use-navigate-with-base-path-88EQpw2k.js +1 -0
- package/core/built/admin/assets/use-pintura-config-BmU45Ruy.js +1 -0
- package/core/built/admin/assets/use-pintura-editor-Bz2bZ4iT.js +1 -0
- package/core/built/admin/assets/use-post-referrers-DyPjyBSN.js +1 -0
- package/core/built/admin/assets/use-query-params-DlOHCo-R.js +1 -0
- package/core/built/admin/assets/use-reply-chain-data-DmD2yX5D.js +1 -0
- package/core/built/admin/assets/use-router-history-entry-CKx9LhqD.js +1 -0
- package/core/built/admin/assets/use-sending-eta-CQeG6OP_.js +1 -0
- package/core/built/admin/assets/use-setting-group-Dza6bQ7W.js +1 -0
- package/core/built/admin/assets/use-settings-navigation-BIjI5mL3.js +1 -0
- package/core/built/admin/assets/use-simple-pagination-DwVxe-Lo.js +1 -0
- package/core/built/admin/assets/use-staff-users-i_Mq9OGR.js +1 -0
- package/core/built/admin/assets/{use-tinybird-query-CmdbCS9X.js → use-tinybird-query-DXoF74NM.js} +1 -1
- package/core/built/admin/assets/use-tinybird-token-Lk1RSn0t.js +1 -0
- package/core/built/admin/assets/use-unsaved-changes-guard-CKVPWz_F.js +1 -0
- package/core/built/admin/assets/use-upgrade-route-CVjDlNSs.js +1 -0
- package/core/built/admin/assets/{use-url-input-fvp-TpPx.js → use-url-input-DpmbDppC.js} +1 -1
- package/core/built/admin/assets/user-detail-modal-BU4QCHE7.js +1 -0
- package/core/built/admin/assets/{users-DVNWrqg9.js → users-C60_hpn6.js} +1 -1
- package/core/built/admin/assets/{validator-Cr0sMKuW.js → validator-DlFQP70j.js} +1 -1
- package/core/built/admin/assets/virtual-list-DScLNuU8.js +1 -0
- package/core/built/admin/assets/web-BZS-t4H0.js +1 -0
- package/core/built/admin/assets/web-DxAUxnK3.js +2 -0
- package/core/built/admin/assets/zapier-modal-BafLUO4R.js +1 -0
- package/core/built/admin/index.html +35 -32
- package/core/cli/command.js +17 -2
- package/core/frontend/meta/asset-url.js +1 -16
- package/core/frontend/services/asset-hash/index.js +32 -2
- package/core/frontend/services/routing/controllers/unsubscribe.js +2 -1
- package/core/frontend/services/rss/generate-feed.js +1 -1
- package/core/frontend/services/theme-engine/active.js +2 -4
- package/core/frontend/services/theme-engine/i18n/i18n.js +11 -1
- package/core/frontend/services/theme-engine/i18next/theme-i18n.js +1 -1
- package/core/frontend/web/middleware/llms-discovery.js +34 -43
- package/core/server/adapters/route-settings/S3RouteSettingsStore.js +1 -1
- package/core/server/adapters/storage/LocalFilesStorage.js +12 -2
- package/core/server/adapters/storage/LocalStorageBase.js +13 -0
- package/core/server/api/endpoints/actions.js +2 -1
- package/core/server/api/endpoints/automated-emails.js +3 -2
- package/core/server/api/endpoints/automations.js +77 -49
- package/core/server/api/endpoints/emails.js +8 -3
- package/core/server/api/endpoints/index.js +1 -1
- package/core/server/api/endpoints/invites.js +2 -1
- package/core/server/api/endpoints/labels.js +6 -2
- package/core/server/api/endpoints/member-metafields.js +2 -2
- package/core/server/api/endpoints/members.js +22 -6
- package/core/server/api/endpoints/pages.js +2 -6
- package/core/server/api/endpoints/posts.js +3 -11
- package/core/server/api/endpoints/snippets.js +2 -1
- package/core/server/api/endpoints/tags.js +6 -2
- package/core/server/api/endpoints/users.js +2 -6
- package/core/server/api/endpoints/utils/api-filter-utils.js +62 -3
- package/core/server/api/endpoints/utils/serializers/output/utils/clean.js +2 -0
- package/core/server/api/endpoints/utils/serializers/output/utils/extra-attrs.js +3 -0
- package/core/server/api/endpoints/utils/validators/input/settings.js +15 -1
- package/core/server/data/exporter/exporter.js +2 -1
- package/core/server/data/exporter/table-lists.js +3 -5
- package/core/server/data/importer/importers/data/settings-importer.js +8 -2
- package/core/server/data/migrations/versions/6.64/2026-09-03-15-40-25-add-member-access-to-members-metafields.js +12 -0
- package/core/server/data/migrations/versions/6.64/2026-09-08-11-01-12-add-posts-auto-excerpt-and-reading-time-columns.js +17 -0
- package/core/server/data/migrations/versions/6.64/2026-09-09-13-56-18-add-automation-run-updated-at-indexes.js +6 -0
- package/core/server/data/migrations/versions/6.64/2026-09-09-13-56-18-add-tinybird-syncs-table.js +10 -0
- package/core/server/data/schema/schema.js +28 -2
- package/core/server/data/seeders/importers/automations-importer.js +0 -1
- package/core/server/data/seeders/importers/comments-importer.js +1 -1
- package/core/server/data/seeders/importers/email-recipients-importer.js +1 -1
- package/core/server/data/seeders/importers/emails-importer.js +1 -1
- package/core/server/data/seeders/importers/members-importer.js +1 -1
- package/core/server/data/seeders/importers/members-login-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js +1 -1
- package/core/server/data/seeders/utils/blog-info.js +4 -3
- package/core/server/data/seeders/utils/event-generator.js +72 -46
- package/core/server/data/tinybird/datasources/_mv_automation_run_steps.datasource +10 -0
- package/core/server/data/tinybird/datasources/_mv_automation_runs.datasource +10 -0
- package/core/server/data/tinybird/datasources/_mv_pending_automation_runs.datasource +10 -0
- package/core/server/data/tinybird/datasources/automation_run_events.datasource +12 -0
- package/core/server/data/tinybird/datasources/automation_run_step_events.datasource +12 -0
- package/core/server/data/tinybird/endpoints/api_automation_browse_stats.pipe +43 -0
- package/core/server/data/tinybird/fixtures/automation_run_events.ndjson +7 -0
- package/core/server/data/tinybird/fixtures/automation_run_step_events.ndjson +8 -0
- package/core/server/data/tinybird/pipes/mv_automation_run_steps.pipe +13 -0
- package/core/server/data/tinybird/pipes/mv_automation_runs.pipe +15 -0
- package/core/server/data/tinybird/pipes/mv_pending_automation_runs.pipe +7 -0
- package/core/server/data/tinybird/tests/api_automation_browse_stats.yaml +18 -0
- package/core/server/ghost-server.js +3 -3
- package/core/server/lib/generate-password.js +54 -0
- package/core/server/lib/public-jwk.js +77 -0
- package/core/server/models/user.js +11 -9
- package/core/server/services/adapter-manager/base-classes.js +21 -3
- package/core/server/services/automations/automations-api.js +46 -1
- package/core/server/services/automations/tinybird-automation-stats.js +56 -0
- package/core/server/services/content-import/import/media.js +1 -1
- package/core/server/services/email-analytics/email-analytics-service-wrapper.js +15 -29
- package/core/server/services/email-analytics/email-analytics-service.js +19 -3
- package/core/server/services/email-analytics/index.js +9 -4
- package/core/server/services/email-rendering/finalize.js +7 -2
- package/core/server/services/email-service/README.md +3 -0
- package/core/server/services/email-service/email-renderer.js +7 -2
- package/core/server/services/email-service/email-service-wrapper.js +1 -1
- package/core/server/services/email-service/email-service.js +43 -34
- package/core/server/services/email-service/sending-status.js +10 -4
- package/core/server/services/gifts/gift-email-service.js +10 -3
- package/core/server/services/gifts/index.js +1 -0
- package/core/server/services/i18n.js +1 -1
- package/core/server/services/identity-tokens/identity-token-service-wrapper.js +3 -4
- package/core/server/services/limits.js +17 -1
- package/core/server/services/member-welcome-emails/service.js +1 -1
- package/core/server/services/members/import-export/index.js +5 -4
- package/core/server/services/members/members-api/controllers/router-controller.js +7 -2
- package/core/server/services/members/members-api/controllers/well-known-controller.js +2 -1
- package/core/server/services/members/members-api/repositories/event-repository.js +4 -0
- package/core/server/services/members/members-api/services/member-bread-service.js +15 -12
- package/core/server/services/members/members-api/services/token-service.js +11 -12
- package/core/server/services/members/middleware.js +9 -2
- package/core/server/services/members/request-integrity-token-provider.js +2 -1
- package/core/server/services/members-metafields/access.js +31 -20
- package/core/server/services/members-metafields/actions.js +1 -0
- package/core/server/services/members-metafields/codec.js +9 -2
- package/core/server/services/members-metafields/definitions-service.js +56 -46
- package/core/server/services/members-metafields/index.js +2 -2
- package/core/server/services/members-metafields/models.js +2 -0
- package/core/server/services/members-metafields/queries.js +39 -11
- package/core/server/services/members-metafields/schema.js +2 -0
- package/core/server/services/members-metafields/serializers.js +1 -0
- package/core/server/services/members-metafields/values-service.js +20 -11
- package/core/server/services/mentions/mention-discovery-service.js +1 -1
- package/core/server/services/mentions/mention-sending-service.js +1 -1
- package/core/server/services/mentions/mention.js +1 -1
- package/core/server/services/oembed/oembed-service.js +36 -11
- package/core/server/services/posts/post-scheduling.js +20 -0
- package/core/server/services/staff/staff-service-emails.js +5 -1
- package/core/server/services/stats/stats-service.js +12 -3
- package/core/server/services/tier-checkout-config/service.js +17 -1
- package/core/server/services/tinybird/tinybird-service.js +1 -0
- package/core/server/services/tinybird-sync/get-ingest-config.js +39 -0
- package/core/server/services/tinybird-sync/index.js +28 -0
- package/core/server/services/tinybird-sync/sync-table-to-tinybird.js +149 -0
- package/core/server/services/tinybird-sync/tinybird-sync-service.js +62 -0
- package/core/server/web/api/endpoints/admin/routes.js +33 -34
- package/core/server/web/well-known.js +12 -16
- package/core/shared/config/defaults.json +1 -2
- package/core/shared/{flush-logs.js → flush.js} +7 -3
- package/core/shared/labs.js +2 -0
- package/core/shared/timing-safe-string-equal.js +26 -0
- package/package.json +42 -42
- package/patches/@elastic__elasticsearch@8.19.2.patch +67 -0
- package/patches/juice@11.1.1.patch +46 -0
- package/pnpm-lock.yaml +457 -1391
- package/pnpm-workspace.yaml +34 -21
- package/scripts/prune.mts +70 -3
- package/components/tryghost-kg-lexical-html-renderer-1.5.0.tgz +0 -0
- package/core/built/admin/assets/Combination-B0l4MKVh.js +0 -41
- package/core/built/admin/assets/RadialBarChart-JAKoS4KT.js +0 -1
- package/core/built/admin/assets/_baseAssignValue-C_vooEQc.js +0 -1
- package/core/built/admin/assets/about-C1C3s5-g.js +0 -1
- package/core/built/admin/assets/accordion-CxGsDKwa.js +0 -1
- package/core/built/admin/assets/account-migration-CbUhW6gk.js +0 -1
- package/core/built/admin/assets/action-list-C4v0-du8.js +0 -1
- package/core/built/admin/assets/add-integration-modal-BT_onDJy.js +0 -1
- package/core/built/admin/assets/add-newsletter-modal-Cx1kQpiY.js +0 -1
- package/core/built/admin/assets/add-recommendation-modal-B5nvAhvr.js +0 -1
- package/core/built/admin/assets/analytics-DjoJWPI7.js +0 -1
- package/core/built/admin/assets/announcement-bar-modal-Dwd0EGFP.js +0 -1
- package/core/built/admin/assets/api-keys-BoeacM-s.js +0 -1
- package/core/built/admin/assets/automated-emails-BLesE41L.js +0 -1
- package/core/built/admin/assets/automations-BN4u3GR8.js +0 -1
- package/core/built/admin/assets/automations-C-ZTUwW3.js +0 -1
- package/core/built/admin/assets/avatar-flipboard-C6Kj3Awu.js +0 -1
- package/core/built/admin/assets/bluesky-sharing-vzh-oPXL.js +0 -1
- package/core/built/admin/assets/box-CdfQAP_F.js +0 -1
- package/core/built/admin/assets/brand-icon-CrIGOA3Z.js +0 -1
- package/core/built/admin/assets/breadcrumb-CaLk2b7D.js +0 -1
- package/core/built/admin/assets/build-CsiH26uS.js +0 -1
- package/core/built/admin/assets/button-Dvcv1QSR.js +0 -1
- package/core/built/admin/assets/calendar-Bl9RLcZX.js +0 -1
- package/core/built/admin/assets/card--VNbfgo3.js +0 -1
- package/core/built/admin/assets/chart-helpers-FHywU0pj.js +0 -1
- package/core/built/admin/assets/checkbox-BtayFtjg.js +0 -1
- package/core/built/admin/assets/chunk.524.e6975095fccdf22d90f8.js +0 -32
- package/core/built/admin/assets/code-editor-view-C3ZfoF1X.js +0 -1
- package/core/built/admin/assets/code-editor-view-CAyRWy1s.js +0 -1
- package/core/built/admin/assets/color-picker-G4kGR7rp.js +0 -3
- package/core/built/admin/assets/color-picker-field-DQFVTNnT.js +0 -1
- package/core/built/admin/assets/combobox-BnYzgEB4.js +0 -1
- package/core/built/admin/assets/command-C_vyTikI.js +0 -1
- package/core/built/admin/assets/comments-aBrxfnZf.js +0 -1
- package/core/built/admin/assets/components-CwL6a6As-B0E0-NBJ.js +0 -1
- package/core/built/admin/assets/confirmation-context-DwXX_Y5h.js +0 -1
- package/core/built/admin/assets/container-BuQG1wuP.js +0 -1
- package/core/built/admin/assets/content-api-modal-D2G0nJP6.js +0 -1
- package/core/built/admin/assets/context-menu-DOVB6yaz.js +0 -1
- package/core/built/admin/assets/copy-field-DCJwh9qf.js +0 -1
- package/core/built/admin/assets/create-ghost-browse-value-source-5C53jJaX.js +0 -1
- package/core/built/admin/assets/custom-field-type-option-BAuW0F-E.js +0 -1
- package/core/built/admin/assets/custom-integration-modal-AbJGVyKc.js +0 -1
- package/core/built/admin/assets/data-list-CA2jYGPq.js +0 -1
- package/core/built/admin/assets/date-range-select-BY3K-ukj.js +0 -1
- package/core/built/admin/assets/design-and-theme-modal-BvEy4_pC.js +0 -2
- package/core/built/admin/assets/detail-page-Dnv-CdR1.js +0 -1
- package/core/built/admin/assets/dirty-confirm-dialog-DVPuGz3U.js +0 -1
- package/core/built/admin/assets/disabled-sources-indicator-Cy7Zp4c8.js +0 -1
- package/core/built/admin/assets/dist-4m6pHdc0.js +0 -23
- package/core/built/admin/assets/dist-8YJUlf3B.js +0 -1
- package/core/built/admin/assets/dist-CZgIBXQN.js +0 -1
- package/core/built/admin/assets/dist-CiHx7vA5.js +0 -6
- package/core/built/admin/assets/dist-DIC8yz5C.js +0 -1
- package/core/built/admin/assets/dist-Dcsslyo72.js +0 -1
- package/core/built/admin/assets/dist-Dgt2cr6a.js +0 -1
- package/core/built/admin/assets/dist-ECAUrdGc.js +0 -1
- package/core/built/admin/assets/dist-JLOy8o0Q.js +0 -1
- package/core/built/admin/assets/dist-Ndy-PuGN.js +0 -1
- package/core/built/admin/assets/dist-Z97pCNqS.js +0 -11
- package/core/built/admin/assets/domain-Dl61QGuk.js +0 -1
- package/core/built/admin/assets/dropzone-Dtz5Rmjt.js +0 -5
- package/core/built/admin/assets/edit-profile-DNJSMDwm.js +0 -1
- package/core/built/admin/assets/editor-DbAen9zf.js +0 -8
- package/core/built/admin/assets/editor-screen-BFWThIai.js +0 -26
- package/core/built/admin/assets/email-sending-status-context-CWDOD1FN.js +0 -1
- package/core/built/admin/assets/email-sending-status-provider-DCPkDICt.js +0 -1
- package/core/built/admin/assets/empty-indicator-D9QdpuNX.js +0 -1
- package/core/built/admin/assets/en-B1jX3WMs.js +0 -1
- package/core/built/admin/assets/esm-CXo5SEPy.js +0 -2
- package/core/built/admin/assets/explore-nnRr1Fja.js +0 -1
- package/core/built/admin/assets/feature-flag-overrides-context-DQjdJFAk.js +0 -1
- package/core/built/admin/assets/feature-image-placeholder-BrIHmPs8.js +0 -1
- package/core/built/admin/assets/feed-BNUcNu-W.js +0 -1
- package/core/built/admin/assets/feedback-DJ4Zb9rZ.js +0 -1
- package/core/built/admin/assets/field-C93_Mg6j.js +0 -1
- package/core/built/admin/assets/filter-bar-Da1qxybu.js +0 -1
- package/core/built/admin/assets/filter-sources-CGJb4C5r.js +0 -1
- package/core/built/admin/assets/filters--kKP-EC8.js +0 -1
- package/core/built/admin/assets/filters-DxA_a4FP.js +0 -1
- package/core/built/admin/assets/first-promoter-modal-BYDtrz2S.js +0 -1
- package/core/built/admin/assets/focus-koenig-editor-on-bottom-click-BbSnGOtK.js +0 -1
- package/core/built/admin/assets/framework-provider-DqI25epG.js +0 -4
- package/core/built/admin/assets/gift-link-modal-B7u5bD4e.js +0 -1
- package/core/built/admin/assets/global-data-context-gAMDH9u1.js +0 -1
- package/core/built/admin/assets/grid-Dj29PY05.js +0 -1
- package/core/built/admin/assets/growth-Cd1uO9d2.js +0 -1
- package/core/built/admin/assets/growth-aG32xfdE.js +0 -3
- package/core/built/admin/assets/heading-Dh5SFVjL.js +0 -1
- package/core/built/admin/assets/history-modal-Df8lW8h-.js +0 -1
- package/core/built/admin/assets/hooks-Cy_-oZ4o.js +0 -2
- package/core/built/admin/assets/html-field-DA4eU7eq.js +0 -1
- package/core/built/admin/assets/iframe-buffering-B2OKJzbz.js +0 -1
- package/core/built/admin/assets/images-KXmyO3Ss.js +0 -1
- package/core/built/admin/assets/index-BHHXtR5C.css +0 -2
- package/core/built/admin/assets/index-CgMCwsxN.js +0 -4
- package/core/built/admin/assets/index.es-CY6-yuw9.js +0 -1
- package/core/built/admin/assets/inline-BWSs_VzR.js +0 -1
- package/core/built/admin/assets/input-group-BE8rM2y1.js +0 -1
- package/core/built/admin/assets/integration-header-Bm6IDb1A.js +0 -1
- package/core/built/admin/assets/invite-user-modal-B4CuNcx4.js +0 -1
- package/core/built/admin/assets/koenig-loader-BeM5rFPX.js +0 -2
- package/core/built/admin/assets/kpi-card-B21aToe8.js +0 -1
- package/core/built/admin/assets/kpi-card-pz6Wv4Ae.js +0 -1
- package/core/built/admin/assets/kpi-helpers-Dq5jelmP.js +0 -1
- package/core/built/admin/assets/kpi-tabs-DEZHpKUt.js +0 -1
- package/core/built/admin/assets/label-OLCzze8N.js +0 -1
- package/core/built/admin/assets/label-picker-BigOvMPV.js +0 -1
- package/core/built/admin/assets/labels-Dr0SgUQD.js +0 -1
- package/core/built/admin/assets/layout-DUTL8SH5.js +0 -1
- package/core/built/admin/assets/lib-7QPTI0FS.js +0 -1
- package/core/built/admin/assets/limit-service-BhiEvqcP.js +0 -20
- package/core/built/admin/assets/link-helpers-BRAg9SCj.js +0 -1
- package/core/built/admin/assets/links-BDHPTlyj.js +0 -1
- package/core/built/admin/assets/list-page-BucXJ0hi.js +0 -1
- package/core/built/admin/assets/luxon-D1RVjjpq.js +0 -1
- package/core/built/admin/assets/member-custom-fields-TRTHCAz9.js +0 -1
- package/core/built/admin/assets/member-detail-b6dRwc3C.js +0 -1
- package/core/built/admin/assets/members-Czt5lJSc.js +0 -4
- package/core/built/admin/assets/modal-page-xCivTMvI.js +0 -1
- package/core/built/admin/assets/moderation-ZWefD9uH.js +0 -1
- package/core/built/admin/assets/multi-select-combobox-CT13MTo-.js +0 -1
- package/core/built/admin/assets/navigation-modal-C8FEhBK5.js +0 -1
- package/core/built/admin/assets/newsletter-5VYW4RyJ.js +0 -1
- package/core/built/admin/assets/newsletter-detail-modal-ChjC0ZqH.js +0 -1
- package/core/built/admin/assets/newsletter-emails-DZH6I-PY.js +0 -1
- package/core/built/admin/assets/newsletters-DOC9KBcX.js +0 -1
- package/core/built/admin/assets/note-DIV-Pojr.js +0 -1
- package/core/built/admin/assets/notifications-s20-H49V.js +0 -1
- package/core/built/admin/assets/nql-lang-CaWrLesS.js +0 -19
- package/core/built/admin/assets/offers-container-modal-BmG5M5Tv.js +0 -1
- package/core/built/admin/assets/onboarding-CUuy9unR.js +0 -1
- package/core/built/admin/assets/onboarding-pXyct0Jm.js +0 -1
- package/core/built/admin/assets/onboarding-route-CK4pcXoR.js +0 -1
- package/core/built/admin/assets/overview-CaPsciMs.js +0 -1
- package/core/built/admin/assets/overview-a8GfcsKX.js +0 -1
- package/core/built/admin/assets/page-header-DM_KyoFI.js +0 -1
- package/core/built/admin/assets/pagemenu-vgZVUVKR.js +0 -1
- package/core/built/admin/assets/pages-route-BzKZYdV5.js +0 -1
- package/core/built/admin/assets/papaparse.min-cQwnxGCG.js +0 -10
- package/core/built/admin/assets/pintura-modal-DExCF1ii.js +0 -1
- package/core/built/admin/assets/portal-frame-Cqanidq4.js +0 -1
- package/core/built/admin/assets/portal-modal-oinBgA27.js +0 -1
- package/core/built/admin/assets/post-analytics-C5oJ1dWV.js +0 -1
- package/core/built/admin/assets/post-analytics-context-D0Mw-Pmv.js +0 -1
- package/core/built/admin/assets/post-analytics-header-OATo3X_r.js +0 -1
- package/core/built/admin/assets/post-analytics-provider-tOpIVGT5.js +0 -1
- package/core/built/admin/assets/post-share-modal-DvhC1XgV.js +0 -1
- package/core/built/admin/assets/posts-list-screen-o4ZjbgS3.js +0 -2
- package/core/built/admin/assets/posts-route-9F--xdIb.js +0 -1
- package/core/built/admin/assets/preferences--vNubsqD.js +0 -5
- package/core/built/admin/assets/preview-chrome-BljUBlOk.js +0 -1
- package/core/built/admin/assets/preview-modal-YYbzlYdO.js +0 -1
- package/core/built/admin/assets/profile-BllKV3dR.js +0 -1
- package/core/built/admin/assets/prop-types-DeUPn3oD.js +0 -1
- package/core/built/admin/assets/radio-group-DL8GI8rt.js +0 -1
- package/core/built/admin/assets/react-Bb3IsNbi.js +0 -1
- package/core/built/admin/assets/rolldown-runtime-DAXXjFlN.js +0 -1
- package/core/built/admin/assets/router-provider-BSvTXgZY.js +0 -1
- package/core/built/admin/assets/select-v5YbA3Mw.js +0 -1
- package/core/built/admin/assets/settings-PEsZupw1.js +0 -4
- package/core/built/admin/assets/settings-breadcrumbs-NwPnCTC7.js +0 -1
- package/core/built/admin/assets/settings-u_s1CRkr.js +0 -1
- package/core/built/admin/assets/share-modal-SskCmVGL.js +0 -1
- package/core/built/admin/assets/skeleton-Ce9GgUpf.js +0 -1
- package/core/built/admin/assets/slack-modal-XxSJiYgo.js +0 -1
- package/core/built/admin/assets/sort-button-Cx1KtINE.js +0 -1
- package/core/built/admin/assets/source-icon-Bdp9Im_5.js +0 -1
- package/core/built/admin/assets/stack-B2eszIiq.js +0 -1
- package/core/built/admin/assets/stats-view-W2g6Jsd-.js +0 -1
- package/core/built/admin/assets/step-1-BQYzvBzr.js +0 -1
- package/core/built/admin/assets/step-2-xES32xJV.js +0 -1
- package/core/built/admin/assets/step-3-DA_XK5kW.js +0 -2
- package/core/built/admin/assets/stripe-button-CVsLHelt.js +0 -1
- package/core/built/admin/assets/stripe-connect-modal-ClmLOMGS.js +0 -1
- package/core/built/admin/assets/switch-CI4gLWqb.js +0 -1
- package/core/built/admin/assets/table-BenqVupI.js +0 -1
- package/core/built/admin/assets/tabs-eBBlxPp8.js +0 -1
- package/core/built/admin/assets/tag-detail-Ce8Se2qd.js +0 -2
- package/core/built/admin/assets/tag-picker-C3UR-uJ-.js +0 -1
- package/core/built/admin/assets/tags-B-kJxCs7.js +0 -1
- package/core/built/admin/assets/testimonials-modal-9Q6fT06V.js +0 -1
- package/core/built/admin/assets/text-BQDSDsKs.js +0 -1
- package/core/built/admin/assets/textarea-DJ1Q5V39.js +0 -1
- package/core/built/admin/assets/tier-detail-modal-CDyYdqK7.js +0 -1
- package/core/built/admin/assets/toggle-group-CviIkyok.js +0 -1
- package/core/built/admin/assets/topic-filter-I2jCBGxm.js +0 -1
- package/core/built/admin/assets/transistor-modal-p53u3W8y.js +0 -1
- package/core/built/admin/assets/trend-badge-CideVzQd.js +0 -1
- package/core/built/admin/assets/unsplash-modal-DY8UcKcE.js +0 -1
- package/core/built/admin/assets/use-analytics-data-DAIGcr2f.js +0 -1
- package/core/built/admin/assets/use-filter-params-JkZhIS8L.js +0 -1
- package/core/built/admin/assets/use-filterable-api-BVEVMrhZ.js +0 -1
- package/core/built/admin/assets/use-form-vRjI0Kwk.js +0 -1
- package/core/built/admin/assets/use-growth-stats-937CUj6j.js +0 -1
- package/core/built/admin/assets/use-host-limits-D0Dv3tKA.js +0 -1
- package/core/built/admin/assets/use-limiter-CohWfzvK.js +0 -2
- package/core/built/admin/assets/use-navigate-with-base-path-BkxcPj5l.js +0 -1
- package/core/built/admin/assets/use-pintura-config-xgytjU35.js +0 -1
- package/core/built/admin/assets/use-pintura-editor-CaV1mbfO.js +0 -1
- package/core/built/admin/assets/use-post-referrers-BCQI7fDg.js +0 -1
- package/core/built/admin/assets/use-query-params-BfzuqbcD.js +0 -1
- package/core/built/admin/assets/use-reply-chain-data-CYRhoaxY.js +0 -1
- package/core/built/admin/assets/use-router-history-entry-NOKcd--l.js +0 -1
- package/core/built/admin/assets/use-setting-group-bLKMwoBT.js +0 -1
- package/core/built/admin/assets/use-settings-navigation-B-qrriKD.js +0 -1
- package/core/built/admin/assets/use-simple-pagination-CNPd6Rf6.js +0 -1
- package/core/built/admin/assets/use-staff-users-pRIMIyiW.js +0 -1
- package/core/built/admin/assets/use-tinybird-token-KLne235s.js +0 -1
- package/core/built/admin/assets/use-unsaved-changes-guard-7-ug0JdH.js +0 -1
- package/core/built/admin/assets/use-upgrade-route-Dm_qqKr0.js +0 -1
- package/core/built/admin/assets/user-detail-modal-D3KlGYv-.js +0 -1
- package/core/built/admin/assets/virtual-list-CZ3RK2Yf.js +0 -1
- package/core/built/admin/assets/web-ClEJsCAj.js +0 -2
- package/core/built/admin/assets/web-X9rdnrtq.js +0 -1
- package/core/built/admin/assets/zapier-modal-DfVhV17j.js +0 -1
- /package/core/built/admin/assets/{chunk.901.4ccc639821020230bcca.js.LICENSE.txt → chunk.972.4b8c97f93d66db15e751.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Finds packages loaded twice in one process: once from a custom adapter's own
|
|
3
|
+
// `node_modules` and once from Ghost's.
|
|
4
|
+
//
|
|
5
|
+
// An adapter is installed as a self-contained directory with its own dependency
|
|
6
|
+
// tree (Ghost Pro deploys them to `/home/ghost/adapters/<type>/<Name>`). Whatever
|
|
7
|
+
// it doesn't install itself resolves by walking up to Ghost's `node_modules`, so
|
|
8
|
+
// a package it *does* install becomes a second module instance - which breaks
|
|
9
|
+
// `instanceof` against a base class (hence the name-based fallbacks in
|
|
10
|
+
// `adapter-manager.ts` and `bin/validate-adapters.ts`) and splits module-level
|
|
11
|
+
// state, as `@tryghost/metrics` would with no `globalThis` guard to save it.
|
|
12
|
+
//
|
|
13
|
+
// @NOTE: `collectLoadedFiles` unions two sources because neither contains the
|
|
14
|
+
// other. `require.cache` holds no ESM file, neither an ESM adapter's entry point
|
|
15
|
+
// nor anything it `import`s - though a CommonJS dependency of one does still go
|
|
16
|
+
// through the cache, so the gap is ESM files specifically. The inspector reports
|
|
17
|
+
// every script V8 parsed, ESM included, but `.json` and native `.node` modules
|
|
18
|
+
// aren't scripts and only the cache lists them. The cache is also the fallback
|
|
19
|
+
// when the inspector is unavailable.
|
|
20
|
+
//
|
|
21
|
+
// @NOTE: this is for the installed tree built into an image, not a local
|
|
22
|
+
// checkout. Ghost's copy of a `workspace:*` dependency - every adapter base class
|
|
23
|
+
// among them - resolves through a symlink to `packages/<name>`, outside any
|
|
24
|
+
// `node_modules`, leaving an adapter's copy with nothing to be compared against.
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.collectLoadedFiles = collectLoadedFiles;
|
|
30
|
+
exports.parsePackageFromPath = parsePackageFromPath;
|
|
31
|
+
exports.checkDuplicateDependencies = checkDuplicateDependencies;
|
|
32
|
+
exports.formatDuplicateReport = formatDuplicateReport;
|
|
33
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
34
|
+
const node_inspector_1 = __importDefault(require("node:inspector"));
|
|
35
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
36
|
+
const node_url_1 = require("node:url");
|
|
37
|
+
const NODE_MODULES = 'node_modules';
|
|
38
|
+
/**
|
|
39
|
+
* The files V8 has parsed in this process, whatever their module format.
|
|
40
|
+
*
|
|
41
|
+
* Enabling the `Debugger` domain replays a `scriptParsed` event for every script
|
|
42
|
+
* already parsed, synchronously, so this can run after the adapters have and
|
|
43
|
+
* there is nothing to await. Empty when the inspector is unavailable, e.g. a Node
|
|
44
|
+
* built `--without-inspector`.
|
|
45
|
+
*/
|
|
46
|
+
function parsedScriptFiles() {
|
|
47
|
+
let session;
|
|
48
|
+
try {
|
|
49
|
+
session = new node_inspector_1.default.Session();
|
|
50
|
+
session.connect();
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
const files = [];
|
|
56
|
+
session.on('Debugger.scriptParsed', ({ params }) => {
|
|
57
|
+
// Nothing with no file behind it - `node:` internals, `eval`, `data:` URLs -
|
|
58
|
+
// can belong to a package.
|
|
59
|
+
if (!params.url.startsWith('file://')) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
files.push((0, node_url_1.fileURLToPath)(params.url));
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Nor anything Node won't convert back to a path.
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
session.post('Debugger.enable');
|
|
70
|
+
session.post('Debugger.disable');
|
|
71
|
+
session.disconnect();
|
|
72
|
+
return files;
|
|
73
|
+
}
|
|
74
|
+
/** Every file this process has loaded, from both of the sources above. */
|
|
75
|
+
function collectLoadedFiles(cjsCachedFiles) {
|
|
76
|
+
return [...new Set([...cjsCachedFiles, ...parsedScriptFiles()])];
|
|
77
|
+
}
|
|
78
|
+
function realpathOrNull(target) {
|
|
79
|
+
try {
|
|
80
|
+
return node_fs_1.default.realpathSync(target);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/** Whether `filePath` sits inside `directory`. Both are expected to be realpaths. */
|
|
87
|
+
function isInside(filePath, directory) {
|
|
88
|
+
const relative = node_path_1.default.relative(directory, filePath);
|
|
89
|
+
// Match the first segment exactly, so a name that merely begins with dots
|
|
90
|
+
// isn't taken for traversal the way startsWith('..') would take it.
|
|
91
|
+
const [firstSegment] = relative.split(node_path_1.default.sep);
|
|
92
|
+
return relative !== '' && firstSegment !== '..' && !node_path_1.default.isAbsolute(relative);
|
|
93
|
+
}
|
|
94
|
+
/** The version a package declares, or `unknown` - better reported than dropped. */
|
|
95
|
+
function readVersion(packagePath) {
|
|
96
|
+
try {
|
|
97
|
+
const { version } = JSON.parse(node_fs_1.default.readFileSync(node_path_1.default.join(packagePath, 'package.json'), 'utf8'));
|
|
98
|
+
return typeof version === 'string' ? version : 'unknown';
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return 'unknown';
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Attribute a loaded file to the package that physically contains it: whatever
|
|
106
|
+
* the *last* `node_modules` segment of its path names. That holds for any
|
|
107
|
+
* installer's layout, npm's flat `node_modules/<name>` and pnpm's
|
|
108
|
+
* `.pnpm/<name>@<version>/node_modules/<name>` alike. `null` when the file is in
|
|
109
|
+
* no package: Ghost's own source, or an adapter's own `index.js`.
|
|
110
|
+
*/
|
|
111
|
+
function parsePackageFromPath(filePath) {
|
|
112
|
+
const segments = filePath.split(node_path_1.default.sep);
|
|
113
|
+
const start = segments.lastIndexOf(NODE_MODULES) + 1;
|
|
114
|
+
const first = segments[start];
|
|
115
|
+
// A dot-prefixed entry is an installer's own directory - pnpm's store, `.bin`,
|
|
116
|
+
// a cache - and npm forbids a package name from looking like one.
|
|
117
|
+
if (start === 0 || !first || first.startsWith('.')) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
// Scoped packages take two segments: `@tryghost/logging`.
|
|
121
|
+
const end = start + (first.startsWith('@') ? 2 : 1);
|
|
122
|
+
if (!segments[end - 1]) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
name: segments.slice(start, end).join('/'),
|
|
127
|
+
path: segments.slice(0, end).join(node_path_1.default.sep),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Find packages loaded from both an adapter's dependency tree and Ghost's own.
|
|
132
|
+
*
|
|
133
|
+
* Adapters are checked first: `content/adapters` lives inside the Ghost
|
|
134
|
+
* installation, so the two sides are not mutually exclusive.
|
|
135
|
+
*/
|
|
136
|
+
function checkDuplicateDependencies({ cachedFiles, adapterRoots, ghostNodeModulesRoots, mustBeSingleCopy, }) {
|
|
137
|
+
// Compare resolved paths on both sides, never specifiers: `require.cache`
|
|
138
|
+
// reports realpaths, and pnpm reaches these roots through symlinks.
|
|
139
|
+
const realAdapterRoots = adapterRoots.map(realpathOrNull).filter((root) => root !== null);
|
|
140
|
+
const realGhostRoots = ghostNodeModulesRoots.map(realpathOrNull).filter((root) => root !== null);
|
|
141
|
+
const adapterPackages = new Map();
|
|
142
|
+
const ghostPackages = new Map();
|
|
143
|
+
for (const cachedFile of cachedFiles) {
|
|
144
|
+
const realFile = realpathOrNull(cachedFile) ?? cachedFile;
|
|
145
|
+
const inAdapter = realAdapterRoots.some((root) => isInside(realFile, root));
|
|
146
|
+
if (!inAdapter && !realGhostRoots.some((root) => isInside(realFile, root))) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const location = parsePackageFromPath(realFile);
|
|
150
|
+
if (!location) {
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (!inAdapter) {
|
|
154
|
+
// Ghost's tree can hold more than one copy of a name, and any of them is
|
|
155
|
+
// the other half of the comparison, so the first one seen will do.
|
|
156
|
+
if (!ghostPackages.has(location.name)) {
|
|
157
|
+
ghostPackages.set(location.name, location.path);
|
|
158
|
+
}
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
// Two adapters can each bundle their own copy, so keep every location.
|
|
162
|
+
const packagePaths = adapterPackages.get(location.name) ?? new Set();
|
|
163
|
+
adapterPackages.set(location.name, packagePaths.add(location.path));
|
|
164
|
+
}
|
|
165
|
+
// Reading versions only once both sides are known costs one manifest read per
|
|
166
|
+
// reported copy, rather than one per cached file.
|
|
167
|
+
const duplicates = [];
|
|
168
|
+
for (const [name, packagePaths] of [...adapterPackages].sort(([a], [b]) => a.localeCompare(b))) {
|
|
169
|
+
const ghostPath = ghostPackages.get(name);
|
|
170
|
+
if (!ghostPath) {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
const ghost = { version: readVersion(ghostPath), path: ghostPath };
|
|
174
|
+
for (const packagePath of packagePaths) {
|
|
175
|
+
duplicates.push({
|
|
176
|
+
name,
|
|
177
|
+
adapter: { version: readVersion(packagePath), path: packagePath },
|
|
178
|
+
ghost,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
const singleCopy = new Set(mustBeSingleCopy);
|
|
183
|
+
return { duplicates, blocking: duplicates.filter(({ name }) => singleCopy.has(name)) };
|
|
184
|
+
}
|
|
185
|
+
/** Render a report in the same indented style as the adapter results. */
|
|
186
|
+
function formatDuplicateReport({ duplicates, blocking }) {
|
|
187
|
+
if (!duplicates.length) {
|
|
188
|
+
return ' ok no duplicate dependencies\n';
|
|
189
|
+
}
|
|
190
|
+
return [
|
|
191
|
+
`\n${duplicates.length} package(s) loaded from both an adapter and Ghost:\n`,
|
|
192
|
+
...duplicates.map(({ name, adapter, ghost }) => `- ${name}\n` +
|
|
193
|
+
` adapter ${adapter.version} ${adapter.path}\n` +
|
|
194
|
+
` ghost ${ghost.version} ${ghost.path}\n`),
|
|
195
|
+
'\nEach duplicate is loaded into memory twice. Have the adapter declare the\n' +
|
|
196
|
+
'package as a peer dependency of Ghost, or match the version Ghost ships,\n' +
|
|
197
|
+
'so the install can be deduplicated.\n\n',
|
|
198
|
+
blocking.length
|
|
199
|
+
? ` FAIL duplicate dependencies: ${blocking.map(({ name }) => name).join(', ')}\n` +
|
|
200
|
+
' A second copy of these breaks `instanceof` against the base class\n' +
|
|
201
|
+
' Ghost checks adapters with - they must resolve to a single copy.\n'
|
|
202
|
+
: ' ok duplicate dependencies (none of them must be a single copy)\n',
|
|
203
|
+
].join('');
|
|
204
|
+
}
|
package/bin/validate-adapters.js
CHANGED
|
@@ -2,15 +2,17 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
// Checks that custom adapters load and implement everything their base class
|
|
4
4
|
// requires. Ghost only verifies an adapter fully on first use (`getAdapter`), so a
|
|
5
|
-
// missing method on a storage adapter otherwise surfaces at first upload
|
|
6
|
-
// at image build time to fail the build instead.
|
|
5
|
+
// missing method on a storage adapter otherwise surfaces at first upload - run
|
|
6
|
+
// this at image build time to fail the build instead.
|
|
7
7
|
//
|
|
8
|
-
// Usage: bin/validate-adapters.js <type>:<AdapterClassName> ...
|
|
8
|
+
// Usage: bin/validate-adapters.js [--check-duplicate-deps] <type>:<AdapterClassName> ...
|
|
9
9
|
// e.g. bin/validate-adapters.js cache:Redis sso:ProSSO storage:S3Storage
|
|
10
10
|
//
|
|
11
11
|
// Adapters are named explicitly rather than read from config, which may not be
|
|
12
12
|
// present at build time
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
const node_util_1 = require("node:util");
|
|
15
|
+
const duplicate_deps_1 = require("./lib/duplicate-deps");
|
|
14
16
|
const adapter_paths_1 = require("../core/server/services/adapter-manager/adapter-paths");
|
|
15
17
|
const base_classes_1 = require("../core/server/services/adapter-manager/base-classes");
|
|
16
18
|
const utils_1 = require("../core/server/services/adapter-manager/utils");
|
|
@@ -43,11 +45,47 @@ function validate(spec) {
|
|
|
43
45
|
throw new Error(`missing method(s): ${missing.join(', ')}`);
|
|
44
46
|
}
|
|
45
47
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
/**
|
|
49
|
+
* Report the packages the loaded adapters brought a second copy of. Reads what the
|
|
50
|
+
* process has already loaded, so it has to run after the adapters have. In a Ghost
|
|
51
|
+
* Pro image `module.paths` reaches the `/home/ghost/node_modules` that an adapter's
|
|
52
|
+
* unbundled dependencies fall back to, which is the other side of the comparison.
|
|
53
|
+
*/
|
|
54
|
+
function reportDuplicateDeps() {
|
|
55
|
+
const report = (0, duplicate_deps_1.checkDuplicateDependencies)({
|
|
56
|
+
cachedFiles: (0, duplicate_deps_1.collectLoadedFiles)(Object.keys(require.cache)),
|
|
57
|
+
// The blank entry means "Ghost's own node_modules", which is the other side
|
|
58
|
+
// of the comparison rather than an adapter tree.
|
|
59
|
+
adapterRoots: adapter_paths_1.adapterPaths.filter((adapterPath) => adapterPath !== ''),
|
|
60
|
+
ghostNodeModulesRoots: module.paths,
|
|
61
|
+
mustBeSingleCopy: Object.values(base_classes_1.baseClassPackages),
|
|
62
|
+
});
|
|
63
|
+
process.stdout.write((0, duplicate_deps_1.formatDuplicateReport)(report));
|
|
64
|
+
return report.blocking.length > 0;
|
|
65
|
+
}
|
|
66
|
+
/** `parseArgs` is strict, so a bad option throws instead of passing for a name. */
|
|
67
|
+
function parseCliArgs(argv) {
|
|
68
|
+
try {
|
|
69
|
+
return (0, node_util_1.parseArgs)({
|
|
70
|
+
args: argv,
|
|
71
|
+
allowPositionals: true,
|
|
72
|
+
options: {
|
|
73
|
+
'check-duplicate-deps': { type: 'boolean', default: false },
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
process.stderr.write(`${err.message}\n`);
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function main(argv) {
|
|
83
|
+
const parsed = parseCliArgs(argv);
|
|
84
|
+
if (!parsed?.positionals.length) {
|
|
85
|
+
process.stderr.write('Usage: bin/validate-adapters.js [--check-duplicate-deps] <type>:<AdapterClassName> ...\n');
|
|
49
86
|
process.exit(1);
|
|
50
87
|
}
|
|
88
|
+
const { values, positionals: specs } = parsed;
|
|
51
89
|
const failures = [];
|
|
52
90
|
for (const spec of specs) {
|
|
53
91
|
try {
|
|
@@ -59,11 +97,17 @@ function main(specs) {
|
|
|
59
97
|
process.stdout.write(` FAIL ${spec}\n`);
|
|
60
98
|
}
|
|
61
99
|
}
|
|
100
|
+
// Off unless asked for: a self-hosted adapter in content/adapters may
|
|
101
|
+
// legitimately bundle its own dependencies, and that must not fail anyone's
|
|
102
|
+
// build. Only the image build installing adapters itself opts in.
|
|
103
|
+
const duplicatesBlocked = values['check-duplicate-deps'] && reportDuplicateDeps();
|
|
62
104
|
if (failures.length) {
|
|
63
105
|
process.stderr.write(`\n${failures.length} of ${specs.length} adapter(s) failed validation:\n`);
|
|
64
106
|
for (const { spec, message } of failures) {
|
|
65
107
|
process.stderr.write(`- ${spec}: ${message}\n`);
|
|
66
108
|
}
|
|
109
|
+
}
|
|
110
|
+
if (failures.length || duplicatesBlocked) {
|
|
67
111
|
process.exit(1);
|
|
68
112
|
}
|
|
69
113
|
process.stdout.write(`Validated ${specs.length} adapter(s).\n`);
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/components/{tryghost-kg-default-cards-10.3.5.tgz → tryghost-kg-default-cards-10.3.6.tgz}
RENAMED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--color-white:#fff;--color-lighter-gray:rgba(0,0,0,.05);--color-light-gray:#e6e6e6;--color-mid-gray:#ccc;--color-dark-gray:#444;--color-darker-gray:#15171a;--color-black:#000;--color-primary-text:var(--color-darker-gray);--color-secondary-text:rgba(0,0,0,.55);--color-border:rgba(0,0,0,.08);--color-dark-border:rgba(0,0,0,.55);--font-sans:Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-serif:"EB Garamond", Georgia, Times, serif;--font-serif-alt:Georgia, Times, serif;--font-mono:"JetBrains Mono", Menlo, Consolas, Monaco, "Liberation Mono", "Lucida Console", monospace;--container-width:1320px;--container-gap:clamp(24px, 1.7032rem + 1.9355vw, 48px);--grid-gap:42px}:is(.gh-navigation,.gh-footer).has-accent-color,:root.has-light-text{--color-lighter-gray:hsla(0,0%,100%,.1);--color-darker-gray:#fff;--color-secondary-text:hsla(0,0%,100%,.64);--color-border:hsla(0,0%,100%,.15);--color-dark-border:hsla(0,0%,100%,.5)}*,:after,:before{box-sizing:border-box}*{margin:0}html{font-size:62.5%}body{line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}canvas,img,picture,svg,video{display:block;height:auto;max-width:100%}iframe{display:block}button,input,select,textarea{font:inherit}h1,h2,h3,h4,h5,h6,p{overflow-wrap:break-word}h1,h2,h3,h4,h5,h6{line-height:1.2}sub,sup{line-height:1}body{font-family:var(--gh-font-body,var(--font-sans));font-size:1.6rem;background-color:var(--background-color);color:var(--color-primary-text)}h1,h2,h3,h4,h5,h6{font-family:var(--gh-font-heading,var(--font-sans))}a{color:var(--color-darker-gray);text-decoration:none}a:hover{opacity:.8}.gh-button{display:inline-flex;gap:.4em;align-items:center;justify-content:center;padding:.8em 1.4em;font-size:1.5rem;font-weight:600;letter-spacing:-.004em;line-height:1;color:var(--color-white);cursor:pointer;background-color:var(--ghost-accent-color);border:0;border-radius:100px}.gh-button:hover{opacity:.95}.gh-icon-button{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;color:var(--color-darker-gray);cursor:pointer;background-color:transparent;border:0;outline:none}.gh-icon-button:hover :is(svg,span){opacity:.8}.gh-icon-button svg{width:20px;height:20px}.gh-form{display:flex;align-items:center;position:relative;max-width:560px;width:100%;height:56px;font-size:1.7rem;font-weight:450;letter-spacing:-.008em;border-radius:40px;background-color:var(--color-lighter-gray);transition:background-color .2s ease}.gh-form.success{pointer-events:none}.gh-form.error{box-shadow:0 0 0 1px red}.gh-form:hover{background-color:rgba(0,0,0,.065)}.gh-footer.has-accent-color .gh-form:hover,.has-light-text .gh-form:hover{background-color:hsla(0,0%,100%,.15)}.gh-form-input{position:absolute;inset:0;padding-inline:26px;width:100%;height:100%;font-size:inherit;letter-spacing:inherit;line-height:1.1;border:0;border-radius:40px;background-color:transparent;outline:none;transition:.3s ease-in-out}.gh-form-input::-moz-placeholder{color:rgba(0,0,0,.3)}.gh-form-input::placeholder,button.gh-form-input{color:rgba(0,0,0,.3)}:is(.has-serif-title,.has-mono-title):not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-form-input,body[class*=" gh-font-heading"]:not(.gh-font-heading-fira-sans):not(.gh-font-heading-inter):not(.gh-font-heading-manrope):not(.gh-font-heading-noto-sans):not(.gh-font-heading-nunito):not(.gh-font-heading-poppins):not(.gh-font-heading-roboto):not(.gh-font-heading-space-grotesk) .gh-form-input,body[class^=gh-font-heading]:not(.gh-font-heading-fira-sans):not(.gh-font-heading-inter):not(.gh-font-heading-manrope):not(.gh-font-heading-noto-sans):not(.gh-font-heading-nunito):not(.gh-font-heading-poppins):not(.gh-font-heading-roboto):not(.gh-font-heading-space-grotesk) .gh-form-input{padding-inline:20px}.gh-form.gh-form.success .gh-form-input{opacity:.5}.gh-footer.has-accent-color .gh-form-input,.has-light-text .gh-form-input{color:#fff}.gh-footer.has-accent-color .gh-form-input::-moz-placeholder,.has-light-text .gh-form-input::-moz-placeholder{color:hsla(0,0%,100%,.55)}.gh-footer.has-accent-color .gh-form-input::placeholder,.has-light-text .gh-form-input::placeholder,.has-light-text button.gh-form-input{color:hsla(0,0%,100%,.55)}.gh-header.is-classic.has-image .gh-form-input{color:#15171a}.gh-header.is-classic.has-image .gh-form-input::-moz-placeholder{color:rgba(0,0,0,.5)}.gh-header.is-classic.has-image .gh-form-input::placeholder,.gh-header.is-classic.has-image .gh-form>svg,.gh-header.is-classic.has-image button.gh-form-input{color:rgba(0,0,0,.5)}button.gh-form-input{padding-inline-start:56px;text-align:left;color:var(--color-secondary-text);cursor:pointer}:is(.has-serif-title,.has-mono-title):not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) button.gh-form-input,body[class*=" gh-font-heading"]:not(.gh-font-heading-fira-sans):not(.gh-font-heading-inter):not(.gh-font-heading-manrope):not(.gh-font-heading-noto-sans):not(.gh-font-heading-nunito):not(.gh-font-heading-poppins):not(.gh-font-heading-roboto):not(.gh-font-heading-space-grotesk) button.gh-form-input,body[class^=gh-font-heading]:not(.gh-font-heading-fira-sans):not(.gh-font-heading-inter):not(.gh-font-heading-manrope):not(.gh-font-heading-noto-sans):not(.gh-font-heading-nunito):not(.gh-font-heading-poppins):not(.gh-font-heading-roboto):not(.gh-font-heading-space-grotesk) button.gh-form-input{padding-inline-start:50px}.gh-form .gh-button{position:absolute;right:6px;min-width:132px;padding-inline:24px;height:44px;font-size:inherit}.gh-form>svg{position:relative;left:22px;width:20px;height:20px;color:var(--color-secondary-text)}:is(.has-serif-title,.has-mono-title):not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-form>svg{left:16px}.gh-form .gh-button svg{display:none;position:absolute;margin-top:1px}.gh-form .gh-button>span:last-child{display:none}.gh-form:is(.loading,.success) .gh-button>span:first-child{visibility:hidden}.gh-form.loading .gh-button svg:first-of-type{display:block}.gh-form.success .gh-button>span:first-child{display:none}.gh-form.success .gh-button>span:last-child{display:inline}.gh-form [data-members-error]{position:absolute;top:100%;margin-top:10px;width:100%;font-size:1.4rem;line-height:1.4}@media (max-width:576px){.gh-form{font-size:1.6rem}.gh-form .gh-button{min-width:104px;padding-inline:12px}}.gh-viewport{position:relative;display:flex;flex-direction:column;min-height:100vh}.gh-outer{padding:0 max(4vmin,20px)}.gh-outer .gh-outer{padding:0}.gh-inner{margin:0 auto;max-width:var(--container-width);width:100%}.gh-main{flex-grow:1}.gh-canvas,.kg-width-full.kg-content-wide{--main:min(var(--content-width, 720px), 100% - 2 * var(--container-gap));--wide:minmax(0, calc(.5 * (var(--container-width, 1200px) - var(--content-width, 720px))));--full:minmax(var(--container-gap), 1fr);display:grid;grid-template-columns:[full-start] var(--full) [wide-start] var(--wide) [main-start] var(--main) [main-end] var(--wide) [wide-end] var(--full) [full-end]}.gh-canvas>*{grid-column:main}.kg-content-wide>div,.kg-width-wide{grid-column:wide}.kg-width-full{grid-column:full}.gh-navigation{height:100px;font-size:1.5rem;font-weight:550;background-color:var(--background-color);color:var(--color-darker-gray)}.gh-navigation :is(.gh-navigation-logo,a:not(.gh-button),.gh-icon-button){color:inherit}.gh-navigation-inner{display:grid;grid-auto-flow:row dense;-moz-column-gap:24px;column-gap:24px;align-items:center;height:100%}.gh-navigation-brand{line-height:1}.gh-navigation-logo{position:relative;font-family:var(--gh-font-heading,var(--font-sans));font-size:calc(2.4rem * var(--factor, 1));font-weight:725;letter-spacing:-.015em;white-space:nowrap}.gh-navigation-logo img{max-height:40px}.gh-navigation-menu{display:flex;gap:24px;align-items:center}.gh-navigation .nav{gap:28px;padding:0;margin:0;white-space:nowrap;list-style:none}.gh-navigation .nav,.nav a{display:inline-flex;align-items:center}.nav a{gap:.35em;vertical-align:middle}.nav-icon{display:block;width:1em;height:1em;flex:0 0 auto;-o-object-fit:contain;object-fit:contain}.gh-navigation .gh-more-toggle{position:relative;margin:0 -6px;font-size:inherit;text-transform:inherit}.gh-navigation .gh-more-toggle svg{width:24px;height:24px}.gh-navigation-actions{display:flex;gap:24px;align-items:center;justify-content:flex-end;background-color:var(--background-color)}.gh-navigation.has-accent-color .gh-navigation-actions{background-color:var(--ghost-accent-color)}.gh-navigation-members{display:flex;gap:20px;align-items:center;white-space:nowrap}.gh-navigation-members .gh-button{font-size:inherit;font-weight:600}.gh-search{margin-right:-2px;margin-left:-2px}@media (max-width:767px){.gh-navigation-logo{white-space:normal}.gh-navigation-members{flex-direction:column-reverse;gap:16px;width:100%}.gh-navigation-actions .gh-search{display:none}}@media (min-width:768px){.gh-navigation-brand .gh-search{display:none}.gh-navigation:not(.is-dropdown-loaded) .gh-navigation-menu .nav>li{opacity:0}}.gh-navigation.has-accent-color{background-color:var(--ghost-accent-color)}.gh-navigation.has-accent-color .gh-button{background-color:#fff;color:#15171a}.gh-navigation.is-left-logo .gh-navigation-inner{grid-template-columns:auto 1fr auto}@media (min-width:768px){.gh-navigation.is-left-logo .gh-navigation-logo:not(:has(img)){top:-2px}}@media (min-width:992px){.gh-navigation.is-left-logo .gh-navigation-menu{margin-right:100px;margin-left:16px}}.gh-navigation.is-middle-logo .gh-navigation-inner{grid-template-columns:1fr auto 1fr}.gh-navigation.is-middle-logo .gh-navigation-brand{grid-column-start:2}.gh-navigation.is-middle-logo .gh-navigation-actions{gap:28px}@media (min-width:992px){.gh-navigation.is-middle-logo .gh-navigation-menu{margin-right:64px}}.gh-navigation.is-stacked{position:relative;height:auto}.gh-navigation.is-stacked .gh-navigation-inner{grid-template-columns:1fr auto 1fr}.gh-navigation.is-stacked .gh-navigation-brand{display:flex;align-items:center;grid-row-start:1;grid-column-start:2;min-height:80px}@media (max-width:767px){.gh-navigation.is-stacked .gh-navigation-brand{min-height:unset}}@media (min-width:992px){.gh-navigation.is-stacked .gh-navigation-inner{padding:0}.gh-navigation.is-stacked .gh-navigation-brand{display:flex;align-items:center;height:80px}.gh-navigation.is-stacked .gh-navigation-menu{grid-row-start:2;grid-column:1/4;justify-content:center;height:60px;margin:0 48px}.gh-navigation.is-stacked .gh-navigation-menu:after,.gh-navigation.is-stacked .gh-navigation-menu:before{position:absolute;top:80px;left:0;width:100%;height:1px;content:"";background-color:var(--color-border)}.gh-navigation.is-stacked .gh-navigation-menu:after{top:140px}.gh-navigation.is-stacked .gh-navigation-actions{grid-row-start:1;grid-column:1/4;justify-content:space-between}.gh-navigation.is-stacked .gh-navigation-actions .gh-search{display:flex;gap:10px;width:auto}}.gh-dropdown{position:absolute;top:100%;right:-16px;z-index:90;width:200px;padding:12px 0;margin-top:24px;text-align:left;visibility:hidden;background-color:#fff;border-radius:5px;box-shadow:0 0 0 1px rgba(0,0,0,.04),0 7px 20px -5px rgba(0,0,0,.15);opacity:0;transition:opacity .3s,transform .2s;transform:translate3d(0,6px,0)}.gh-dropdown.is-left{right:auto;left:-16px}.is-dropdown-mega .gh-dropdown{display:grid;grid-template-columns:1fr 1fr;grid-auto-flow:column;-moz-column-gap:40px;column-gap:40px;width:auto;padding:20px 32px}.is-dropdown-open .gh-dropdown{visibility:visible;opacity:1;transform:translateY(0)}.gh-dropdown li a{display:block;padding:7px 20px;line-height:1.5;white-space:normal;color:#15171a!important}.is-dropdown-mega .gh-dropdown li a{padding:8px 0}.gh-burger{display:flex;justify-content:center;align-items:center;position:relative;display:none;margin-right:-7px;margin-left:4px}.gh-burger svg{width:24px;height:24px}.gh-burger svg:last-child,.is-open .gh-burger svg:first-child{display:none}.is-open .gh-burger svg:last-child{display:block}@media (max-width:767px){.gh-burger{display:flex}#gh-navigation{height:64px}#gh-navigation .gh-navigation-inner{grid-template-rows:auto 1fr auto;grid-template-columns:1fr;gap:48px}#gh-navigation .gh-navigation-brand{display:grid;grid-template-columns:1fr auto auto;grid-column-start:1;align-items:center;height:64px}#gh-navigation .gh-navigation-logo{font-size:2.2rem}#gh-navigation .gh-navigation-actions,#gh-navigation .gh-navigation-menu{position:fixed;justify-content:center;visibility:hidden;opacity:0}#gh-navigation .gh-navigation-menu{transition:none;transform:translateY(0)}#gh-navigation .nav{gap:20px;align-items:center;line-height:1.4}#gh-navigation .nav a{font-size:1.75rem;font-weight:600;text-transform:none}#gh-navigation .nav li{opacity:0;transform:translateY(-4px)}#gh-navigation .gh-navigation-actions{text-align:center}#gh-navigation :is(.gh-button,a[data-portal=signin]){opacity:0;transform:translateY(8px)}#gh-navigation .gh-button{width:100%;font-size:1.75rem;text-transform:none}#gh-navigation a[data-portal=signin]{font-size:1.75rem}#gh-main{transition:opacity .4s}.is-open#gh-navigation{position:fixed;inset:0;z-index:3999999;height:100%;overflow-y:scroll;-webkit-overflow-scrolling:touch}.is-open#gh-navigation .gh-navigation-actions,.is-open#gh-navigation .gh-navigation-menu{position:static;visibility:visible;opacity:1}.is-open#gh-navigation .nav{display:flex;flex-direction:column}.is-open#gh-navigation .nav li{opacity:1;transition:transform .2s,opacity .2s;transform:translateY(0)}.is-open#gh-navigation .gh-navigation-actions{position:sticky;right:0;bottom:0;left:0;display:inline-flex;flex-direction:column;gap:12px;align-items:center;padding:var(--container-gap) 0}.is-open#gh-navigation :is(.gh-button,a[data-portal=signin]){opacity:1;transition:transform .4s,opacity .4s;transition-delay:.2s;transform:translateY(0)}.is-open#gh-navigation a[data-portal=signin]{transition-delay:.4s}.is-open#gh-main{opacity:0}}.gh-card{position:relative}.gh-card-link{display:flex;flex-direction:column;gap:20px}.gh-card-link:hover{opacity:1}.gh-card-image{position:relative;flex-shrink:0;aspect-ratio:16/9}.gh-card-image img{position:absolute;inset:0;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.gh-card-wrapper{flex-grow:1}.gh-card-tag{display:none;margin-bottom:4px;font-size:1.2rem;font-weight:500;letter-spacing:.01em;text-transform:uppercase}.gh-card-title{font-size:calc(1.9rem * var(--factor, 1));font-weight:725;letter-spacing:-.014em;line-height:1.3}.gh-card-link:hover .gh-card-title{opacity:.8}.gh-card-excerpt{display:-webkit-box;overflow-y:hidden;margin-top:8px;font-size:1.45rem;line-height:1.4;-webkit-line-clamp:2;-webkit-box-orient:vertical}.gh-card-meta{align-items:center;padding-bottom:1px;font-size:1.25rem;font-weight:500;line-height:1.4;letter-spacing:-.004em;color:var(--color-secondary-text)}.gh-card-meta svg{position:relative;top:1px;display:inline-block;width:12px;height:12px;margin-right:2px}.gh-card-meta:not(:empty){margin-top:8px}.gh-card-author+.gh-card-date:before{content:"—";margin-right:4px}.gh-header{position:relative;margin-top:40px}.gh-header-inner{position:relative;overflow:hidden}.gh-header.is-magazine .gh-header-inner{display:grid;grid-template-columns:repeat(16,1fr);gap:var(--grid-gap)}.gh-header.is-magazine .gh-header-inner>div{display:flex;flex-direction:column;gap:var(--grid-gap);grid-row:1}.gh-header.is-magazine .gh-header-left{grid-column:1/span 4}.gh-header.is-magazine .gh-header-inner>.gh-card{position:relative;grid-column:5/span 8}.gh-header.is-magazine .gh-header-right{grid-column:13/-1}.gh-header.is-magazine .gh-header-inner>.gh-card .gh-card-link{gap:28px}.gh-header.is-magazine .gh-header-inner>.gh-card .gh-card-image{aspect-ratio:1.618033}.gh-header.is-magazine .gh-header-inner>.gh-card .gh-card-tag{display:block;margin-bottom:12px}.gh-header.is-magazine .gh-header-inner>.gh-card .gh-card-title{font-size:clamp(2.8rem,1.36vw + 2.25rem,4rem);font-weight:700;line-height:1.1;letter-spacing:-.022em}.gh-header.is-magazine .gh-header-inner>.gh-card .gh-card-excerpt{margin-top:clamp(12px,.45vw + 10.18px,16px);font-size:1.8rem;letter-spacing:-.02em;max-width:90%}.gh-header.is-magazine .gh-header-inner>.gh-card .gh-card-meta:not(:empty){margin-top:14px}.gh-header.is-magazine :is(.gh-header-left,.gh-header-right) .gh-card:last-child .gh-card-image{display:none}.gh-header.is-magazine .gh-header-inner>div .gh-card-excerpt{display:none}.gh-header.is-magazine .gh-header-inner>.gh-card:after,.gh-header.is-magazine .gh-header-inner>.gh-card:before{position:absolute;top:0;left:calc(-.5 * var(--grid-gap));content:"";width:1px;height:100%;background-color:var(--color-border)}.gh-header.is-magazine .gh-header-inner>.gh-card:after{right:calc(-.5 * var(--grid-gap));left:auto}.gh-header.is-magazine .gh-header-inner>div .gh-card+.gh-card:before{position:absolute;top:calc(-.5 * var(--grid-gap));left:0;content:"";width:100%;height:1px;background-color:var(--color-border)}@media (max-width:1199px){.gh-header.is-magazine .gh-header-inner{grid-template-columns:repeat(12,1fr)}.gh-header.is-magazine .gh-header-inner>.gh-card{grid-column:1/span 8}.gh-header.is-magazine .gh-header-left{grid-column:9/-1}.gh-header.is-magazine .gh-header-inner>div.gh-header-right{grid-column:1/-1;grid-row:2;flex-direction:row}.gh-header.is-magazine .gh-header-right .gh-card{flex:1}.gh-header.is-magazine .gh-header-right .gh-card:last-child .gh-card-image{display:block}.gh-header.is-magazine .gh-header-right{position:relative}.gh-header.is-magazine .gh-header-right:before{position:absolute;top:calc(-.5 * var(--grid-gap));left:0;content:"";width:100%;height:1px;background-color:var(--color-border)}.gh-header.is-magazine .gh-header-right .gh-card:before{display:none}.gh-header.is-magazine .gh-header-right .gh-card:after{position:absolute;top:0;right:calc(-.5 * var(--grid-gap));content:"";width:1px;height:100%;background-color:var(--color-border)}}@media (max-width:991px){.gh-header.is-magazine .gh-header-left .gh-card:nth-child(2) .gh-card-image{display:none}}@media (max-width:767px){.gh-header.is-magazine .gh-header-inner{display:flex;flex-direction:column;gap:var(--grid-gap)}.gh-header.is-magazine .gh-header-inner>div.gh-header-right{flex-direction:column}.gh-header.is-magazine .gh-card-image{display:block!important}.gh-header.is-magazine .gh-card:before{display:block!important;position:absolute;top:calc(-.5 * var(--grid-gap));left:0;content:"";width:100%;height:1px;background-color:var(--color-border)}}.gh-header.is-highlight .gh-header-inner{display:grid;grid-template-columns:repeat(16,1fr);gap:var(--grid-gap)}.gh-header.is-highlight .gh-header-left{position:relative;grid-column:span 8}.gh-header.is-highlight .gh-header-left .gh-card{grid-column:span 8;grid-row:span 3}.gh-header.is-highlight .gh-header-left .gh-card .gh-card-link{gap:28px}.gh-header.is-highlight .gh-header-left .gh-card .gh-card-image{aspect-ratio:3/2}.gh-header.is-highlight .gh-header-left .gh-card .gh-card-tag{display:block;margin-bottom:12px}.gh-header.is-highlight .gh-header-left .gh-card .gh-card-title{font-size:clamp(2.8rem,1.36vw + 2.25rem,4rem);font-weight:700;line-height:1.1;letter-spacing:-.022em}.gh-header.is-highlight .gh-header-left .gh-card .gh-card-excerpt{margin-top:clamp(12px,.45vw + 10.18px,16px);font-size:1.8rem}.gh-header.is-highlight .gh-header-left .gh-card .gh-card-meta:not(:empty){margin-top:12px}.gh-header.is-highlight .gh-header-middle{position:relative;display:flex;flex-direction:column;gap:var(--grid-gap);grid-column:9/span 4}.gh-header.is-highlight .gh-header-middle .gh-card .gh-card-excerpt,.gh-header.is-highlight .gh-header-middle .gh-card:last-child .gh-card-image{display:none}.gh-header.is-highlight .gh-header-right{grid-column:13/-1}.gh-header.is-highlight .gh-featured{margin-top:0;padding:0}.gh-header.is-highlight .gh-featured-feed{display:flex;flex-direction:column}.gh-header.is-highlight .gh-featured-feed .gh-card-title{font-size:clamp(1.4rem,.23vw + 1.31rem,1.6rem)}.gh-header.is-highlight .gh-header-left:after,.gh-header.is-highlight .gh-header-middle:after{position:absolute;top:0;right:calc(-.5 * var(--grid-gap));content:"";width:1px;height:100%;background-color:var(--color-border)}.gh-header.is-highlight .gh-card:before{position:absolute;top:calc(-.5 * var(--grid-gap));left:0;content:"";width:100%;height:1px;background-color:var(--color-border)}.gh-header.is-highlight .gh-featured .gh-card:first-child:before{display:none}@media (max-width:1199px){.gh-header.is-highlight .gh-header-inner{grid-template-columns:repeat(9,1fr)}.gh-header.is-highlight .gh-header-left{grid-column:span 6}.gh-header.is-highlight .gh-header-middle{grid-column:7/-1}.gh-header.is-highlight .gh-header-right{grid-column:1/-1}.gh-header.is-highlight .gh-featured-feed{display:grid;grid-template-columns:repeat(3,1fr)}.gh-header.is-highlight .gh-featured-feed .gh-card:before{width:calc(100% + var(--grid-gap))}.gh-header.is-highlight .gh-featured-feed .gh-card:after{position:absolute;top:0;left:calc(-.5 * var(--grid-gap));content:"";width:1px;height:100%;background-color:var(--color-border)}}@media (max-width:991px){.gh-header.is-highlight .gh-header-middle .gh-card:nth-child(2) .gh-card-image{display:none}}@media (max-width:767px){.gh-header.is-highlight .gh-header-inner{display:flex;flex-direction:column}.gh-header.is-highlight .gh-featured-feed{display:flex}.gh-header.is-highlight .gh-card-image{display:block!important}.gh-header.is-highlight .gh-header-middle .gh-card .gh-card-excerpt{display:-webkit-box}}.gh-header.is-classic{display:flex;margin-top:0;padding-block:160px}.gh-header.is-classic .gh-header-inner{display:flex;flex-direction:column;align-items:center;gap:48px;overflow:unset;margin:auto;max-width:1020px;text-align:center}.gh-header.is-classic .gh-header-title{font-size:calc(clamp(3rem, 1.82vw + 2.27rem, 4.6rem) * var(--factor, 1));line-height:1.1;letter-spacing:-.028em}.gh-header.is-classic.has-image{margin-top:0}.gh-header.is-classic.has-image:before{position:absolute;inset:0;content:"";opacity:.3;background-color:var(--color-black);transition:opacity 1.5s ease}.gh-header.is-classic.has-image .gh-header-inner{color:#fff}.gh-header.is-classic.has-image .gh-header-image{position:absolute;inset:0;z-index:-1;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.gh-header.is-classic.has-image .gh-form{background-color:#fff}.gh-cta{display:none;margin-top:max(4vw,40px)}.gh-header:is(.is-highlight,.is-magazine)+.gh-cta{display:block}.gh-cta-inner{position:relative;overflow:hidden;display:flex;flex-direction:column;align-items:center;gap:36px;padding:clamp(48px,3.64vw + 33.45px,80px) clamp(40px,2.73vw + 29.09px,64px);text-align:center;background-color:var(--color-lighter-gray)}.gh-cta-content{max-width:640px}.gh-cta-title{font-size:clamp(2.8rem,1.36vw + 2.25rem,4rem);font-weight:700;line-height:1.1;letter-spacing:-.021em}.gh-cta-description{margin-top:12px;font-size:1.8rem;line-height:1.4;letter-spacing:-.015em}.gh-featured{margin-top:100px}.gh-navigation+.gh-featured{margin-top:64px}.gh-header.is-classic:not(.has-image)+.gh-featured{margin-top:0}.gh-featured-inner{overflow:hidden}.gh-featured-title{margin-bottom:20px;padding-bottom:12px;font-size:1.2rem;font-weight:550;letter-spacing:.025em;text-transform:uppercase;border-bottom:1px solid var(--color-border)}.gh-featured-feed{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--grid-gap)}.gh-featured-feed .gh-card{container-type:inline-size;container-name:featured-card}.gh-featured-feed .gh-card-link{display:flex;flex-direction:row-reverse;align-items:flex-start}.gh-featured-feed .gh-card-image{width:72px;aspect-ratio:1}@container featured-card (width < 240px){.gh-featured-feed .gh-card-image{display:none}}@container featured-card (240px <= width <= 270px){.gh-featured-feed .gh-card-image{width:64px}}.gh-featured-feed .gh-card-wrapper{container-type:inline-size;container-name:featured-card-wrapper}.gh-featured-feed .gh-card-title{font-size:1.6rem;font-weight:650;letter-spacing:-.011em}@container featured-card-wrapper (width < 170px){.gh-featured-feed .gh-card-title{font-size:1.6rem}}.gh-featured-feed .gh-card-excerpt{display:none}.gh-featured-feed .gh-card-meta:not(:empty){margin-top:8px}.gh-featured-feed .gh-card:before{position:absolute;top:0;left:calc(-.5 * var(--grid-gap));content:"";width:1px;height:100%;background-color:var(--color-border)}@media (max-width:1199px){.gh-viewport>.gh-featured .gh-featured-feed{grid-template-columns:repeat(3,1fr)}.gh-viewport>.gh-featured .gh-featured-feed .gh-card:nth-child(4){display:none}}@media (max-width:767px){.gh-viewport>.gh-featured .gh-featured-feed{display:flex;flex-direction:column}}.gh-container{flex-grow:1;margin-top:64px}.gh-container-inner{display:grid;grid-template-columns:repeat(16,1fr);-moz-column-gap:var(--grid-gap);column-gap:var(--grid-gap)}:is(.gh-featured,.gh-cta)+.gh-container{margin-top:max(4vw,40px)}.gh-header.is-classic:not(.has-image)+.gh-container{margin-top:0}.gh-navigation+.gh-container .gh-container-title,:is(.paged,.tag-template,.author-template) .gh-container:not(.has-sidebar) .gh-container-title{display:none}.gh-more{display:none;grid-column:1/-1;margin-top:48px;font-size:calc(1.9rem * var(--factor, 1));font-weight:725;letter-spacing:-.014em}.gh-container.has-sidebar .gh-more{grid-column:span 12}.home-template .gh-feed:has(>:nth-child(12):last-child)~.gh-more{display:block}.gh-more a{display:flex;align-items:center;gap:4px}.gh-more svg{margin-top:-1px;width:18px;height:18px}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-more svg{margin-top:0}.gh-container.has-sidebar .gh-main{grid-column:1/span 12;position:relative}.gh-container.has-sidebar .gh-sidebar{grid-column:13/-1}.gh-container.has-sidebar .gh-main:after{position:absolute;top:0;right:calc(-.5 * var(--grid-gap));content:"";width:1px;height:100%;background-color:var(--color-border)}.gh-container:not(.has-sidebar) :is(.gh-container-title,.gh-main,.gh-more){grid-column:3/span 12}.gh-container.is-list.no-image:not(.has-sidebar) :is(.gh-container-title,.gh-main,.gh-more){grid-column:4/span 10}.gh-header:is(.is-highlight,.is-magazine)~.gh-container.is-grid:not(.has-sidebar) :is(.gh-container-title,.gh-main,.gh-more){grid-column:1/-1}@media (max-width:1199px){.gh-container-inner{display:block;overflow:hidden}.gh-container.has-sidebar .gh-sidebar{display:none}}.gh-container-title{grid-column:1/-1;margin-bottom:calc(.5 * var(--grid-gap));padding-bottom:12px;font-size:1.2rem;font-weight:550;letter-spacing:.025em;text-transform:uppercase;border-bottom:1px solid var(--color-border)}.gh-container:not(:has(.gh-card)) .gh-container-title{display:none}.gh-container .gh-feed{gap:var(--grid-gap)}.gh-container .gh-card-meta:not(:empty){margin-top:12px}.gh-container.is-list .gh-feed{display:flex;flex-direction:column;container-type:inline-size;container-name:list-feed}.gh-container.is-list .gh-card-link{flex-direction:row;align-items:center;gap:24px}.gh-container.is-list .no-image .gh-card-link{padding-block:20px}.gh-container.is-list .gh-card-image{flex-shrink:0;width:220px;aspect-ratio:1.618033}@container list-feed (width < 600px){.gh-container.is-list .gh-card-image{width:160px}}.gh-container.is-list .gh-card:not(.no-image) .gh-card-wrapper{max-width:600px}.gh-container.is-list .gh-card-title{--factor:1.05}.gh-container.is-list .no-image .gh-card-title{--factor:1.2}.gh-container.is-list .gh-card-excerpt{margin-top:6px}.gh-container.is-list .gh-card+.gh-card:before{position:absolute;top:calc(-.5 * var(--grid-gap));left:0;content:"";width:100%;height:1px;background-color:var(--color-border)}.home-template .gh-container.is-list .gh-card:first-child:before{display:none}@media (max-width:767px){.gh-container.is-list .gh-card-link{flex-direction:column;align-items:flex-start}.gh-container.is-list .gh-card-image{width:100%}}.gh-container.is-grid .gh-feed{display:grid;grid-template-columns:repeat(auto-fit,minmax(248px,1fr));row-gap:calc(1.5 * var(--grid-gap));overflow:hidden}.gh-container.is-grid .gh-card:before{top:calc(-.5 * var(--grid-gap));right:calc(-.5 * var(--grid-gap));height:1px}.gh-container.is-grid .gh-card:after,.gh-container.is-grid .gh-card:before{position:absolute;left:calc(-.5 * var(--grid-gap));content:"";background-color:var(--color-border)}.gh-container.is-grid .gh-card:after{top:0;width:1px;height:100%}@media (max-width:767px){.gh-container.is-grid .gh-feed{grid-template-columns:repeat(2,1fr)}}@media (max-width:576px){.gh-container.is-grid .gh-feed{display:flex;flex-direction:column}}.gh-container.is-list.no-image .gh-card-image{display:none}.gh-sidebar-inner{position:sticky;top:calc(.5 * var(--grid-gap))}.gh-sidebar-title{grid-column:1/-1;margin-bottom:calc(.5 * var(--grid-gap));padding-bottom:12px;font-size:1.2rem;font-weight:550;letter-spacing:.025em;text-transform:uppercase;border-bottom:1px solid var(--color-border)}.gh-about{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:48px 24px;min-height:380px;text-align:center;background-color:var(--color-lighter-gray)}.gh-about-icon{margin-bottom:24px;width:60px;height:60px;border-radius:50%}.gh-about-title{font-size:calc(2.4rem * var(--factor, 1));font-weight:700;letter-spacing:-.019em}.gh-about-description{margin-top:12px;font-size:1.45rem;line-height:1.4}.gh-about .gh-button{margin-top:32px}.gh-recommendations{margin-top:48px}.gh-recommendations .recommendations{display:flex;flex-direction:column;gap:26px;margin:0;padding:0;list-style-type:none}.gh-recommendations .recommendation:first-child{margin-top:4px}.gh-recommendations .recommendation a{display:grid;grid-template-columns:24px auto;gap:4px 12px}.gh-recommendations .recommendation a:hover{opacity:1}.gh-recommendations .recommendation-favicon{grid-row:span 2;width:100%;border-radius:4px}.gh-recommendations .recommendation-title{margin-top:-2px;font-size:1.5rem;font-weight:650;letter-spacing:-.009em}.gh-recommendations .recommendation a:hover .recommendation-title{opacity:.8}.gh-recommendations .recommendation-url{order:1;overflow:hidden;font-size:1.4rem;line-height:1.25;color:var(--color-secondary-text);text-overflow:ellipsis}.gh-recommendations .recommendation-description{display:-webkit-box;display:none;overflow-y:hidden;grid-column:2;font-size:1.4rem;line-height:1.4;color:var(--color-secondary-text);-webkit-line-clamp:2;-webkit-box-orient:vertical}.gh-recommendations button{display:inline-flex;align-items:center;gap:2px;margin-top:24px;padding:0;cursor:pointer;font-size:1.2rem;font-weight:550;letter-spacing:.025em;text-transform:uppercase;background-color:transparent;border:0;color:var(--color-darker-gray)}.gh-recommendations button svg{margin-top:-1px;width:12px}.gh-recommendations button:hover{opacity:.8}.gh-article{--container-width:1120px;word-break:break-word}.gh-article-header{margin:clamp(40px,3.64vw + 25.45px,72px) 0 40px}.gh-article-tag{margin-bottom:12px;font-size:1.3rem;font-weight:500;letter-spacing:.01em;text-transform:uppercase;color:var(--ghost-accent-color)}.gh-article-title{font-size:calc(clamp(3.4rem, 1.36vw + 2.85rem, 4.6rem) * var(--factor, 1));line-height:1.1;letter-spacing:-.022em}.gh-article-excerpt{margin-top:clamp(12px,.45vw + 10.18px,16px);max-width:720px;font-size:clamp(1.7rem,.23vw + 1.61rem,1.9rem);line-height:1.45;letter-spacing:-.018em}.gh-article-meta{display:flex;align-items:center;gap:8px;margin-left:6px}.gh-article-author-image{display:flex;margin-right:8px}.gh-article-author-image a{position:relative;margin:0 -8px;width:56px;height:56px;overflow:hidden;background-color:var(--color-light-gray);border-radius:50%;border:3px solid var(--background-color)}.gh-article-author-image a:first-child{z-index:10}.gh-article-author-image a:nth-child(2){z-index:9}.gh-article-author-image a:nth-child(3){z-index:8}.gh-article-author-image :is(img,svg){position:absolute;inset:0;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.gh-article-meta-wrapper{display:flex;flex-direction:column;gap:4px}.gh-article-author-name{font-size:1.6rem;font-weight:650;letter-spacing:-.013em}.gh-article-meta-content{font-size:1.35rem;font-weight:500;line-height:1.2;letter-spacing:-.006em;color:var(--color-secondary-text)}.gh-article-image{grid-column:wide;margin-top:40px}.gh-article-image img{width:100%}.page-template .gh-article-header{margin-block:72px 32px}.page-template .gh-content:only-child>:first-child:not(.kg-width-full){margin-top:64px}.page-template .gh-content>:last-child:not(.kg-width-full){margin-bottom:6vw}.page-template .gh-footer{margin-top:0}.gh-content{font-size:var(--content-font-size,1.7rem);letter-spacing:-.01em}.gh-content>*+*{margin-top:calc(28px * var(--content-spacing-factor, 1));margin-bottom:0}.gh-content>.kg-width-full+.kg-width-full:not(.kg-width-full.kg-card-hascaption+.kg-width-full){margin-top:0}.gh-content>[id]:not(:first-child){margin-top:calc(56px * var(--content-spacing-factor, 1))}.post-template .gh-content.drop-cap>p:first-of-type:first-letter{font-size:3.1em;float:left;line-height:1;margin:0 .2em 0 -1px;font-weight:700}.has-serif-body.post-template:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content.drop-cap>p:first-of-type:first-letter{font-size:3.2em}.gh-content>[id]+p{margin-top:calc(12px * var(--content-spacing-factor, 1))}.gh-content>:is(hr,blockquote,iframe){position:relative;margin-top:calc(48px * var(--content-spacing-factor, 1))!important}.gh-content>:is(hr,blockquote,iframe)+*{margin-top:calc(48px * var(--content-spacing-factor, 1))!important}.gh-content h1{font-size:calc(2.2em * var(--factor, 1));letter-spacing:-.02em}.gh-content h2{font-size:calc(1.6em * var(--factor, 1));letter-spacing:-.02em}.gh-content h3{font-size:calc(1.3em * var(--factor, 1));letter-spacing:-.017em}.gh-content a{color:var(--ghost-accent-color);text-decoration:underline}.gh-content .kg-callout-card .kg-callout-text,.gh-content .kg-toggle-card .kg-toggle-content>:is(ul,ol,p){font-size:.95em}.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content .kg-callout-text,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content .kg-toggle-content>ol,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content .kg-toggle-content>p,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content .kg-toggle-content>ul,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content>blockquote,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content>dl,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content>ol,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content>p,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content>ul{font-family:var(--font-serif-alt)}.gh-content :is(ul,ol){padding-left:28px}.gh-content :is(li+li,li :is(ul,ol)){margin-top:8px}.gh-content ol ol li{list-style-type:lower-alpha}.gh-content ol ol ol li{list-style-type:lower-roman}.gh-content hr{width:100%;height:1px;background-color:var(--color-border);border:0}.gh-content .gh-table{overflow-x:scroll;-webkit-overflow-scrolling:touch}.gh-content .gh-table table{width:100%;font-family:var(--font-sans);font-size:1.5rem;white-space:nowrap;vertical-align:top;border-spacing:0;border-collapse:collapse}.gh-content .gh-table table th{font-size:1.2rem;font-weight:700;color:var(--color-darkgrey);text-align:left;text-transform:uppercase;letter-spacing:.2px}.gh-content .gh-table table :is(th,td),.gh-content .gh-table table td{padding:6px 12px;border-bottom:1px solid var(--color-border)}.gh-content .gh-table table :is(th,td):first-child{padding-left:0}.gh-content .gh-table table :is(th,td):last-child{padding-right:0}.gh-content pre{overflow:auto;padding:16px;font-size:1.5rem;line-height:1.5em;border-radius:6px}.gh-content :not(pre)>code,.gh-content pre{background:var(--color-lighter-gray);font-family:var(--font-mono)}.gh-content :not(pre)>code{vertical-align:baseline;padding:.15em .4em;font-weight:400;font-size:.95em;line-height:1em;border-radius:.25em}.gh-content :not(.kg-card):not(table):not([id])+:is(.kg-card,table){margin-top:calc(48px * var(--content-spacing-factor, 1))}.gh-content :is(.kg-card,table)+:not(.kg-card):not(table):not([id]){margin-top:calc(48px * var(--content-spacing-factor, 1))}.gh-content .kg-card.kg-width-full+:not(.kg-card):not([id]),.gh-content :not(.kg-card):not([id])+.kg-card.kg-width-full{margin-top:calc(68px * var(--content-spacing-factor, 1))}.kg-image{margin-right:auto;margin-left:auto}.kg-embed-card{display:flex;flex-direction:column;align-items:center;width:100%}.gh-feature-image,.kg-gallery-image,.kg-image[width][height]{cursor:pointer}.kg-gallery-image a:hover,.kg-image-card a:hover{opacity:1!important}.kg-card.kg-toggle-card .kg-toggle-heading-text{font-size:2rem;font-weight:700}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .kg-toggle-card .kg-toggle-heading-text{font-family:var(--font-serif)}.has-mono-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .kg-toggle-card .kg-toggle-heading-text{font-family:var(--font-mono)}.kg-callout-card.kg-card{border-radius:.25em}.kg-callout-card-accent a{text-decoration:underline}blockquote:not([class]){padding-left:2rem;border-left:4px solid var(--ghost-accent-color)}blockquote.kg-blockquote-alt{font-style:normal;font-weight:400;color:var(--color-secondary-text)}.kg-card.kg-button-card .kg-btn{height:unset;padding:.6em 1.2em;text-align:center;font-size:1em;line-height:1.2em}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .kg-card.kg-header-card h2.kg-header-card-header{font-family:var(--font-serif)}.has-mono-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .kg-card.kg-header-card h2.kg-header-card-header{font-family:var(--font-mono)}.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .kg-header-card h3.kg-header-card-subheader{font-family:var(--font-serif)}.kg-bookmark-card .kg-bookmark-container{border-radius:.25em!important}.kg-bookmark-card .kg-bookmark-container:hover{opacity:1}.kg-bookmark-card a.kg-bookmark-container,.kg-bookmark-card a.kg-bookmark-container:hover{background:var(--background-color)!important;color:var(--color-darker-gray)!important}.kg-bookmark-card .kg-bookmark-content{padding:1.15em}.kg-bookmark-card .kg-bookmark-title{font-size:.9em}.kg-bookmark-card .kg-bookmark-description{max-height:none;margin-top:.3em;font-size:.8em}.kg-bookmark-card .kg-bookmark-metadata{font-size:.8em}.kg-bookmark-card .kg-bookmark-thumbnail img{border-radius:0 .2em .2em 0}.kg-product-card.kg-card .kg-product-card-image{margin-bottom:12px}.kg-product-card.kg-card a.kg-product-card-button{height:2.8em;margin-top:12px}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .kg-product-card.kg-card .kg-product-card-title{font-family:var(--font-serif)}.has-mono-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .kg-product-card.kg-card .kg-product-card-title{font-family:var(--font-mono)}.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .kg-product-card-description :is(p,ul,ol){font-family:var(--font-serif-alt)}.kg-file-card.kg-card .kg-file-card-container{padding:.6em}.kg-file-card.kg-card .kg-file-card-contents{margin:4px 8px 6px}.kg-file-card.kg-card .kg-file-card-metadata{font-size:.9em}.kg-file-card.kg-card .kg-file-card-filesize:before{margin-right:6px;margin-left:6px}figcaption{margin-top:12px;font-size:1.4rem;text-align:center}.kg-card.kg-width-full figcaption{padding:0 16px}figcaption a{color:var(--ghost-accent-color);text-decoration:underline}.gh-comments{margin-top:48px}.post-template .gh-container{margin-top:120px}.post-template .gh-container-inner{display:block}.post-template .gh-container.is-grid .gh-feed{grid-template-columns:repeat(4,1fr)}.post-template .gh-container .gh-container-title{display:block}.gh-archive{display:grid;grid-template-columns:repeat(16,1fr);gap:var(--grid-gap);margin-block:80px 24px}.gh-archive.has-image{margin-top:48px}.gh-archive-inner{display:grid;grid-template-columns:1fr 1fr;gap:var(--grid-gap);grid-column:1/-1;padding-bottom:clamp(40px,2.73vw + 29.09px,64px);border-bottom:1px solid var(--color-border)}.gh-archive.has-image .gh-archive-inner{align-items:center;grid-column:1/-1}.gh-archive:not(.has-sidebar):not(.has-image) .gh-archive-inner{grid-column:3/span 12}.gh-archive .gh-article-image{grid-column:auto;margin-top:0}:is(.tag-template,.author-template) .gh-container{margin-top:0}.author-template .gh-archive-inner{display:flex;flex-direction:row-reverse;justify-content:flex-end;gap:24px}.author-template .gh-article-image{margin-top:0;width:120px;height:120px;border-radius:50%;-o-object-fit:cover;object-fit:cover}.author-template .gh-article-title{font-size:3.6rem}.gh-author-meta{display:flex;gap:10px;margin-top:14px;font-size:1.5rem;font-weight:550;color:var(--color-secondary-text)}.gh-author-meta a{color:inherit}.gh-author-social{display:flex;gap:16px;align-items:center;padding-left:3px}.gh-author-social svg{width:20px;height:20px}@media (max-width:1199px){.gh-archive{display:block}}@media (max-width:767px){.gh-archive-inner{display:flex;align-items:flex-start}.author-template .gh-archive-inner,.gh-archive-inner{flex-direction:column-reverse}}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]){--factor:1.15}.has-mono-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]){--factor:1.1}.has-sans-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) :is(.is-title,.gh-content :is(h2,h3)){font-family:var(--gh-font-heading,var(--font-sans))}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) :is(.is-title,.gh-content :is(h2,h3)){font-family:var(--gh-font-heading,var(--font-serif));font-weight:550}.has-mono-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) :is(.is-title,.gh-content :is(h2,h3)){font-family:var(--gh-font-heading,var(--font-mono))}.has-sans-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .is-body{font-family:var(--gh-font-body,var(--font-sans))}.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .is-body{font-family:var(--gh-font-body,var(--font-serif-alt))}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-header.is-classic .gh-header-title{font-weight:550;letter-spacing:-.015em}.has-mono-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-header.is-classic .gh-header-title{letter-spacing:-.01em}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-form{border-radius:0}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-card-title{line-height:1.15;letter-spacing:-.006em;font-size:calc(2rem * var(--factor, 1))}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-featured-feed .gh-card-title{font-size:calc(1.6rem * var(--factor, 1))}.has-mono-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-featured-feed .gh-card-title{font-size:calc(1.5rem * var(--factor, 1));letter-spacing:0}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-header.is-highlight .gh-featured-feed .gh-card-title{font-size:clamp(1.6rem,.23vw + 1.51rem,1.8rem)}.has-mono-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-card-title{font-size:calc(1.8rem * var(--factor, 1));line-height:1.2}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-about-title{letter-spacing:-.009em}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-article-title,.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-footer-signup-header{letter-spacing:-.019em}.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]){--content-font-size:1.9rem}.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-card-excerpt{font-size:1.65rem;line-height:1.4;letter-spacing:.0005em}.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-header.is-highlight .gh-card:first-child .gh-card-excerpt,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-header.is-magazine .gh-header-inner>.gh-card .gh-card-excerpt{font-size:1.8rem;letter-spacing:-.001em}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-header.is-highlight .gh-header-left .gh-card-title,.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-header.is-magazine .gh-header-inner>.gh-card .gh-card-title{font-weight:550;font-size:clamp(3.2rem,1.82vw + 2.47rem,4.9rem)}.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-about-description{font-size:1.6rem}.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-article-excerpt,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-footer-signup-subhead{letter-spacing:0}:is(.has-serif-title,.has-mono-title):not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) :is(.gh-button,.gh-form,.gh-form-input),body[class*=" gh-font-heading"]:not(.gh-font-heading-fira-sans):not(.gh-font-heading-inter):not(.gh-font-heading-manrope):not(.gh-font-heading-noto-sans):not(.gh-font-heading-nunito):not(.gh-font-heading-poppins):not(.gh-font-heading-roboto):not(.gh-font-heading-space-grotesk) :is(.gh-button,.gh-form,.gh-form-input),body[class^=gh-font-heading]:not(.gh-font-heading-fira-sans):not(.gh-font-heading-inter):not(.gh-font-heading-manrope):not(.gh-font-heading-noto-sans):not(.gh-font-heading-nunito):not(.gh-font-heading-poppins):not(.gh-font-heading-roboto):not(.gh-font-heading-space-grotesk) :is(.gh-button,.gh-form,.gh-form-input){border-radius:0}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-cta-title{font-size:4.8rem}.gh-footer{margin-top:120px;font-size:1.5rem;color:var(--color-darker-gray)}.gh-footer a:not(.gh-button){color:inherit}.gh-footer.has-accent-color{background-color:var(--ghost-accent-color)}.gh-footer.has-accent-color .gh-footer-bar{border-top:0}.gh-footer.has-accent-color .gh-button{background-color:#fff;color:#15171a}.gh-footer-bar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;-moz-column-gap:32px;column-gap:32px;margin-bottom:120px;padding-block:28px;font-weight:550;border-block:1px solid var(--color-border)}.gh-footer-logo{position:relative;font-family:var(--gh-font-heading,var(--font-sans));font-size:calc(2.4rem * var(--factor, 1));font-weight:725;letter-spacing:-.015em;white-space:nowrap}.gh-footer-logo img{max-height:40px}.gh-footer-menu .nav{display:flex;justify-content:center;gap:8px 28px;flex-wrap:wrap;margin:0;padding:0;list-style-type:none}.gh-footer-copyright{text-align:right;white-space:nowrap}.gh-footer-copyright a{text-decoration:underline}.gh-footer-signup{display:flex;flex-direction:column;align-items:center;margin-bottom:120px;text-align:center}.gh-footer-signup-header{font-size:calc(clamp(2.8rem, 1.36vw + 2.25rem, 4rem) * var(--factor, 1));font-weight:700;letter-spacing:-.03em}.gh-footer-signup-subhead{margin-top:12px;max-width:640px;font-size:1.8rem;font-weight:450;line-height:1.4;letter-spacing:-.014em;opacity:.75}.gh-footer-signup .gh-form{margin-top:40px}@media (max-width:991px){.gh-footer-bar{display:flex;flex-direction:column;gap:20px}}.gh-social-links{display:flex;justify-content:center;gap:20px;margin-bottom:32px}.gh-social-links a{will-change:opacity}.gh-social-links svg{width:20px;height:20px}.pswp{position:absolute;top:0;left:0;z-index:3999999;display:none;width:100%;height:100%;overflow:hidden;touch-action:none;outline:none;backface-visibility:hidden;-webkit-text-size-adjust:100%}.pswp img{max-width:none}.pswp--animate_opacity{opacity:.001;transition:opacity 333ms cubic-bezier(.4,0,.22,1);will-change:opacity}.pswp--open{display:block}.pswp--zoom-allowed .pswp__img{cursor:zoom-in}.pswp--zoomed-in .pswp__img{cursor:grab}.pswp--dragging .pswp__img{cursor:grabbing}.pswp__bg{background-color:rgba(0,0,0,.85);opacity:0;transition:opacity 333ms cubic-bezier(.4,0,.22,1);transform:translateZ(0);backface-visibility:hidden;will-change:opacity}.pswp__bg,.pswp__scroll-wrap{position:absolute;top:0;left:0;width:100%;height:100%}.pswp__scroll-wrap{overflow:hidden}.pswp__container,.pswp__zoom-wrap{position:absolute;top:0;right:0;bottom:0;left:0;touch-action:none;backface-visibility:hidden}.pswp__container,.pswp__img{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}.pswp__zoom-wrap{position:absolute;width:100%;transition:transform 333ms cubic-bezier(.4,0,.22,1);transform-origin:left top}.pswp--animated-in .pswp__bg,.pswp--animated-in .pswp__zoom-wrap{transition:none}.pswp__item{right:0;bottom:0;overflow:hidden}.pswp__img,.pswp__item{position:absolute;top:0;left:0}.pswp__img{width:auto;height:auto}.pswp__img--placeholder{backface-visibility:hidden}.pswp__img--placeholder--blank{background:var(--color-black)}.pswp--ie .pswp__img{top:0;left:0;width:100%!important;height:auto!important}.pswp__error-msg{position:absolute;top:50%;left:0;width:100%;margin-top:-8px;font-size:14px;line-height:16px;color:var(--color-secondary-text);text-align:center}.pswp__error-msg a{color:var(--color-secondary-text);text-decoration:underline}.pswp__button{position:relative;display:block;float:right;width:44px;height:44px;padding:0;margin:0;overflow:visible;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background:none;border:0;box-shadow:none;transition:opacity .2s}.pswp__button:focus,.pswp__button:hover{opacity:1}.pswp__button:active{outline:none;opacity:.9}.pswp__button::-moz-focus-inner{padding:0;border:0}.pswp__ui--over-close .pswp__button--close{opacity:1}.pswp__button,.pswp__button--arrow--left:before,.pswp__button--arrow--right:before{width:44px;height:44px;background:url(../images/default-skin.png) 0 0 no-repeat;background-size:264px 88px}@media (min-resolution:1.1dppx),(min-resolution:105dpi){.pswp--svg .pswp__button,.pswp--svg .pswp__button--arrow--left:before,.pswp--svg .pswp__button--arrow--right:before{background-image:url(../images/default-skin.svg)}.pswp--svg .pswp__button--arrow--left,.pswp--svg .pswp__button--arrow--right{background:none}}.pswp__button--close{background-position:0 -44px}.pswp__button--share{background-position:-44px -44px}.pswp__button--fs{display:none}.pswp--supports-fs .pswp__button--fs{display:block}.pswp--fs .pswp__button--fs{background-position:-44px 0}.pswp__button--zoom{display:none;background-position:-88px 0}.pswp--zoom-allowed .pswp__button--zoom{display:block}.pswp--zoomed-in .pswp__button--zoom{background-position:-132px 0}.pswp--touch .pswp__button--arrow--left,.pswp--touch .pswp__button--arrow--right{visibility:hidden}.pswp__button--arrow--left,.pswp__button--arrow--right{position:absolute;top:50%;width:70px;height:100px;margin-top:-50px;background:none}.pswp__button--arrow--left{left:0}.pswp__button--arrow--right{right:0}.pswp__button--arrow--left:before,.pswp__button--arrow--right:before{position:absolute;top:35px;width:32px;height:30px;content:""}.pswp__button--arrow--left:before{left:6px;background-position:-138px -44px}.pswp__button--arrow--right:before{right:6px;background-position:-94px -44px}.pswp__counter{position:absolute;top:0;left:0;height:44px;padding:0 15px;font-size:11px;font-weight:700;line-height:44px;color:var(--color-white);-webkit-user-select:none;-moz-user-select:none;user-select:none}.pswp__caption{position:absolute;bottom:0;left:0;width:100%;min-height:44px}.pswp__caption__center{max-width:420px;padding:25px 15px 30px;margin:0 auto;font-size:11px;line-height:1.6;color:var(--color-white);text-align:center}.pswp__caption__center .post-caption-title{margin-bottom:7px;font-size:15px;font-weight:500;text-transform:uppercase}.pswp__caption__center .post-caption-meta-item+.post-caption-meta-item:before{padding:0 4px;content:"\02022"}.pswp__caption--empty{display:none}.pswp__caption--fake{visibility:hidden}.pswp__preloader{position:absolute;top:0;left:50%;width:44px;height:44px;margin-left:-22px;opacity:0;transition:opacity .25s ease-out;direction:ltr;will-change:opacity}.pswp__preloader__icn{width:20px;height:20px;margin:12px}.pswp__preloader--active{opacity:1}.pswp__preloader--active .pswp__preloader__icn{background:url(../images/preloader.gif) 0 0 no-repeat}.pswp--css_animation .pswp__preloader--active{opacity:1}.pswp--css_animation .pswp__preloader--active .pswp__preloader__icn{animation:clockwise .5s linear infinite}.pswp--css_animation .pswp__preloader--active .pswp__preloader__donut{animation:donut-rotate 1s cubic-bezier(.4,0,.22,1) infinite}.pswp--css_animation .pswp__preloader__icn{position:absolute;top:15px;left:15px;width:14px;height:14px;margin:0;background:none;opacity:.75}.pswp--css_animation .pswp__preloader__cut{position:relative;width:7px;height:14px;overflow:hidden}.pswp--css_animation .pswp__preloader__donut{position:absolute;top:0;left:0;box-sizing:border-box;width:14px;height:14px;margin:0;background:none;border:2px solid var(--color-white);border-bottom-color:transparent;border-left-color:transparent;border-radius:50%}@media screen and (max-width:1024px){.pswp__preloader{position:relative;top:auto;left:auto;float:right;margin:0}}@keyframes clockwise{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes donut-rotate{0%{transform:rotate(0)}50%{transform:rotate(-140deg)}to{transform:rotate(0)}}.pswp__ui{z-index:1550;visibility:visible;opacity:1;-webkit-font-smoothing:auto}.pswp__top-bar{position:absolute;top:0;left:0;width:100%;height:44px}.pswp--has_mouse .pswp__button--arrow--left,.pswp--has_mouse .pswp__button--arrow--right,.pswp__caption,.pswp__top-bar{backface-visibility:hidden;transition:opacity 333ms cubic-bezier(.4,0,.22,1);will-change:opacity}.pswp--has_mouse .pswp__button--arrow--left,.pswp--has_mouse .pswp__button--arrow--right{visibility:visible}.pswp__ui--idle .pswp__button--arrow--left,.pswp__ui--idle .pswp__button--arrow--right,.pswp__ui--idle .pswp__top-bar{opacity:0}.pswp__ui--hidden .pswp__button--arrow--left,.pswp__ui--hidden .pswp__button--arrow--right,.pswp__ui--hidden .pswp__caption,.pswp__ui--hidden .pswp__top-bar{opacity:.001}.pswp__ui--one-slide .pswp__button--arrow--left,.pswp__ui--one-slide .pswp__button--arrow--right,.pswp__ui--one-slide .pswp__counter{display:none}.pswp__element--disabled{display:none!important}.pswp--minimal--dark .pswp__top-bar{background:none}.gh-meta-share{display:flex;align-items:center;justify-content:space-between;margin-top:20px}.has-light-text .gh-button-share{border-color:hsla(0,0%,100%,.25);color:hsla(0,0%,100%,.85)}.has-light-text .gh-button-share:hover{border-color:hsla(0,0%,100%,.85)}.gh-button-share{display:inline-flex;align-items:center;border:1px solid rgba(0,0,0,.15);border-radius:999px;color:rgba(0,0,0,.85);background:transparent;cursor:pointer;transition:all .4s ease}.gh-button-share:hover{border-color:rgba(0,0,0,.5)}/*# sourceMappingURL=screen.css.map */
|
|
1
|
+
:root{--color-white:#fff;--color-lighter-gray:rgba(0,0,0,.05);--color-light-gray:#e6e6e6;--color-mid-gray:#ccc;--color-dark-gray:#444;--color-darker-gray:#15171a;--color-black:#000;--color-primary-text:var(--color-darker-gray);--color-secondary-text:rgba(0,0,0,.55);--color-border:rgba(0,0,0,.08);--color-dark-border:rgba(0,0,0,.55);--font-sans:Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-serif:"EB Garamond", Georgia, Times, serif;--font-serif-alt:Georgia, Times, serif;--font-mono:"JetBrains Mono", Menlo, Consolas, Monaco, "Liberation Mono", "Lucida Console", monospace;--container-width:1320px;--container-gap:clamp(24px, 1.7032rem + 1.9355vw, 48px);--grid-gap:42px}:is(.gh-navigation,.gh-footer).has-accent-color,:root.has-light-text{--color-lighter-gray:hsla(0,0%,100%,.1);--color-darker-gray:#fff;--color-secondary-text:hsla(0,0%,100%,.64);--color-border:hsla(0,0%,100%,.15);--color-dark-border:hsla(0,0%,100%,.5)}*,:after,:before{box-sizing:border-box}*{margin:0}html{font-size:62.5%}body{line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}canvas,img,picture,svg,video{display:block;height:auto;max-width:100%}iframe{display:block}button,input,select,textarea{font:inherit}h1,h2,h3,h4,h5,h6,p{overflow-wrap:break-word}h1,h2,h3,h4,h5,h6{line-height:1.2}sub,sup{line-height:1}body{font-family:var(--gh-font-body,var(--font-sans));font-size:1.6rem;background-color:var(--background-color);color:var(--color-primary-text)}h1,h2,h3,h4,h5,h6{font-family:var(--gh-font-heading,var(--font-sans))}a{color:var(--color-darker-gray);text-decoration:none}a:hover{opacity:.8}.gh-button{display:inline-flex;gap:.4em;align-items:center;justify-content:center;padding:.8em 1.4em;font-size:1.5rem;font-weight:600;letter-spacing:-.004em;line-height:1;color:var(--color-white);cursor:pointer;background-color:var(--ghost-accent-color);border:0;border-radius:100px}.gh-button:hover{opacity:.95}.gh-icon-button{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;color:var(--color-darker-gray);cursor:pointer;background-color:transparent;border:0;outline:none}.gh-icon-button:hover :is(svg,span){opacity:.8}.gh-icon-button svg{width:20px;height:20px}.gh-form{display:flex;align-items:center;position:relative;max-width:560px;width:100%;height:56px;font-size:1.7rem;font-weight:450;letter-spacing:-.008em;border-radius:40px;background-color:var(--color-lighter-gray);transition:background-color .2s ease}.gh-form.success{pointer-events:none}.gh-form.error{box-shadow:0 0 0 1px red}.gh-form:hover{background-color:rgba(0,0,0,.065)}.gh-footer.has-accent-color .gh-form:hover,.has-light-text .gh-form:hover{background-color:hsla(0,0%,100%,.15)}.gh-form-input{position:absolute;inset:0;padding-inline:26px;width:100%;height:100%;font-size:inherit;letter-spacing:inherit;line-height:1.1;border:0;border-radius:40px;background-color:transparent;outline:none;transition:.3s ease-in-out}.gh-form-input::-moz-placeholder{color:rgba(0,0,0,.3)}.gh-form-input::placeholder,button.gh-form-input{color:rgba(0,0,0,.3)}:is(.has-serif-title,.has-mono-title):not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-form-input,body[class*=" gh-font-heading"]:not(.gh-font-heading-fira-sans):not(.gh-font-heading-inter):not(.gh-font-heading-manrope):not(.gh-font-heading-noto-sans):not(.gh-font-heading-nunito):not(.gh-font-heading-poppins):not(.gh-font-heading-roboto):not(.gh-font-heading-space-grotesk) .gh-form-input,body[class^=gh-font-heading]:not(.gh-font-heading-fira-sans):not(.gh-font-heading-inter):not(.gh-font-heading-manrope):not(.gh-font-heading-noto-sans):not(.gh-font-heading-nunito):not(.gh-font-heading-poppins):not(.gh-font-heading-roboto):not(.gh-font-heading-space-grotesk) .gh-form-input{padding-inline:20px}.gh-form.gh-form.success .gh-form-input{opacity:.5}.gh-footer.has-accent-color .gh-form-input,.has-light-text .gh-form-input{color:#fff}.gh-footer.has-accent-color .gh-form-input::-moz-placeholder,.has-light-text .gh-form-input::-moz-placeholder{color:hsla(0,0%,100%,.55)}.gh-footer.has-accent-color .gh-form-input::placeholder,.has-light-text .gh-form-input::placeholder,.has-light-text button.gh-form-input{color:hsla(0,0%,100%,.55)}.gh-header.is-classic.has-image .gh-form-input{color:#15171a}.gh-header.is-classic.has-image .gh-form-input::-moz-placeholder{color:rgba(0,0,0,.5)}.gh-header.is-classic.has-image .gh-form-input::placeholder,.gh-header.is-classic.has-image .gh-form>svg,.gh-header.is-classic.has-image button.gh-form-input{color:rgba(0,0,0,.5)}button.gh-form-input{padding-inline-start:56px;text-align:left;color:var(--color-secondary-text);cursor:pointer}:is(.has-serif-title,.has-mono-title):not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) button.gh-form-input,body[class*=" gh-font-heading"]:not(.gh-font-heading-fira-sans):not(.gh-font-heading-inter):not(.gh-font-heading-manrope):not(.gh-font-heading-noto-sans):not(.gh-font-heading-nunito):not(.gh-font-heading-poppins):not(.gh-font-heading-roboto):not(.gh-font-heading-space-grotesk) button.gh-form-input,body[class^=gh-font-heading]:not(.gh-font-heading-fira-sans):not(.gh-font-heading-inter):not(.gh-font-heading-manrope):not(.gh-font-heading-noto-sans):not(.gh-font-heading-nunito):not(.gh-font-heading-poppins):not(.gh-font-heading-roboto):not(.gh-font-heading-space-grotesk) button.gh-form-input{padding-inline-start:50px}.gh-form .gh-button{position:absolute;right:6px;min-width:132px;padding-inline:24px;height:44px;font-size:inherit}.gh-form>svg{position:relative;left:22px;width:20px;height:20px;color:var(--color-secondary-text)}:is(.has-serif-title,.has-mono-title):not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-form>svg{left:16px}.gh-form .gh-button svg{display:none;position:absolute;margin-top:1px}.gh-form .gh-button>span:last-child{display:none}.gh-form:is(.loading,.success) .gh-button>span:first-child{visibility:hidden}.gh-form.loading .gh-button svg:first-of-type{display:block}.gh-form.success .gh-button>span:first-child{display:none}.gh-form.success .gh-button>span:last-child{display:inline}.gh-form [data-members-error]{position:absolute;top:100%;margin-top:10px;width:100%;font-size:1.4rem;line-height:1.4}@media (max-width:576px){.gh-form{font-size:1.6rem}.gh-form .gh-button{min-width:104px;padding-inline:12px}}.gh-viewport{position:relative;display:flex;flex-direction:column;min-height:100vh}.gh-outer{padding:0 max(4vmin,20px)}.gh-outer .gh-outer{padding:0}.gh-inner{margin:0 auto;max-width:var(--container-width);width:100%}.gh-main{flex-grow:1}.gh-canvas,.kg-width-full.kg-content-wide{--main:min(var(--content-width, 720px), 100% - 2 * var(--container-gap));--wide:minmax(0, calc(.5 * (var(--container-width, 1200px) - var(--content-width, 720px))));--full:minmax(var(--container-gap), 1fr);display:grid;grid-template-columns:[full-start] var(--full) [wide-start] var(--wide) [main-start] var(--main) [main-end] var(--wide) [wide-end] var(--full) [full-end]}.gh-canvas>*{grid-column:main}.kg-content-wide>div,.kg-width-wide{grid-column:wide}.kg-width-full{grid-column:full}.gh-navigation{height:100px;font-size:1.5rem;font-weight:550;background-color:var(--background-color);color:var(--color-darker-gray)}.gh-navigation :is(.gh-navigation-logo,a:not(.gh-button),.gh-icon-button){color:inherit}.gh-navigation-inner{display:grid;grid-auto-flow:row dense;-moz-column-gap:24px;column-gap:24px;align-items:center;height:100%}.gh-navigation-brand{line-height:1}.gh-navigation-logo{position:relative;font-family:var(--gh-font-heading,var(--font-sans));font-size:calc(2.4rem * var(--factor, 1));font-weight:725;letter-spacing:-.015em;white-space:nowrap}.gh-navigation-logo img{max-height:40px}.gh-navigation-menu{display:flex;gap:24px;align-items:center}.gh-navigation .nav{gap:28px;padding:0;margin:0;white-space:nowrap;list-style:none}.gh-navigation .nav,.nav a{display:inline-flex;align-items:center}.nav a{gap:.35em;vertical-align:middle}.nav-icon{display:block;width:1em;height:1em;flex:0 0 auto;-o-object-fit:contain;object-fit:contain}.gh-navigation .gh-more-toggle{position:relative;margin:0 -6px;font-size:inherit;text-transform:inherit}.gh-navigation .gh-more-toggle svg{width:24px;height:24px}.gh-navigation-actions{display:flex;gap:24px;align-items:center;justify-content:flex-end;background-color:var(--background-color)}.gh-navigation.has-accent-color .gh-navigation-actions{background-color:var(--ghost-accent-color)}.gh-navigation-members{display:flex;gap:20px;align-items:center;white-space:nowrap}.gh-navigation-members .gh-button{font-size:inherit;font-weight:600}.gh-search{margin-right:-2px;margin-left:-2px}@media (max-width:767px){.gh-navigation-logo{white-space:normal}.gh-navigation-members{flex-direction:column-reverse;gap:16px;width:100%}.gh-navigation-actions .gh-search{display:none}}@media (min-width:768px){.gh-navigation-brand .gh-search{display:none}.gh-navigation:not(.is-dropdown-loaded) .gh-navigation-menu .nav>li{opacity:0}}.gh-navigation.has-accent-color{background-color:var(--ghost-accent-color)}.gh-navigation.has-accent-color .gh-button{background-color:#fff;color:#15171a}.gh-navigation.is-left-logo .gh-navigation-inner{grid-template-columns:auto 1fr auto}@media (min-width:768px){.gh-navigation.is-left-logo .gh-navigation-logo:not(:has(img)){top:-2px}}@media (min-width:992px){.gh-navigation.is-left-logo .gh-navigation-menu{margin-right:100px;margin-left:16px}}.gh-navigation.is-middle-logo .gh-navigation-inner{grid-template-columns:1fr auto 1fr}.gh-navigation.is-middle-logo .gh-navigation-brand{grid-column-start:2}.gh-navigation.is-middle-logo .gh-navigation-actions{gap:28px}@media (min-width:992px){.gh-navigation.is-middle-logo .gh-navigation-menu{margin-right:64px}}.gh-navigation.is-stacked{position:relative;height:auto}.gh-navigation.is-stacked .gh-navigation-inner{grid-template-columns:1fr auto 1fr}.gh-navigation.is-stacked .gh-navigation-brand{display:flex;align-items:center;grid-row-start:1;grid-column-start:2;min-height:80px}@media (max-width:767px){.gh-navigation.is-stacked .gh-navigation-brand{min-height:unset}}@media (min-width:768px){.gh-navigation.is-stacked .gh-navigation-inner{padding:0}.gh-navigation.is-stacked .gh-navigation-brand{display:flex;align-items:center;height:80px}.gh-navigation.is-stacked .gh-navigation-menu{grid-row-start:2;grid-column:1/4;justify-content:center;height:60px;margin:0 48px}.gh-navigation.is-stacked .gh-navigation-menu:after,.gh-navigation.is-stacked .gh-navigation-menu:before{position:absolute;top:80px;left:0;width:100%;height:1px;content:"";background-color:var(--color-border)}.gh-navigation.is-stacked .gh-navigation-menu:after{top:140px}.gh-navigation.is-stacked .gh-navigation-actions{grid-row-start:1;grid-column:1/4;justify-content:space-between}.gh-navigation.is-stacked .gh-navigation-actions .gh-search{display:flex;gap:10px;width:auto}}.gh-dropdown{position:absolute;top:100%;right:-16px;z-index:90;width:200px;padding:12px 0;margin-top:24px;text-align:left;visibility:hidden;background-color:#fff;border-radius:5px;box-shadow:0 0 0 1px rgba(0,0,0,.04),0 7px 20px -5px rgba(0,0,0,.15);opacity:0;transition:opacity .3s,transform .2s;transform:translate3d(0,6px,0)}.gh-dropdown.is-left{right:auto;left:-16px}.is-dropdown-mega .gh-dropdown{display:grid;grid-template-columns:1fr 1fr;grid-auto-flow:column;-moz-column-gap:40px;column-gap:40px;width:auto;padding:20px 32px}.is-dropdown-open .gh-dropdown{visibility:visible;opacity:1;transform:translateY(0)}.gh-dropdown li a{display:block;padding:7px 20px;line-height:1.5;white-space:normal;color:#15171a!important}.is-dropdown-mega .gh-dropdown li a{padding:8px 0}.gh-burger{display:flex;justify-content:center;align-items:center;position:relative;display:none;margin-right:-7px;margin-left:4px}.gh-burger svg{width:24px;height:24px}.gh-burger svg:last-child,.is-open .gh-burger svg:first-child{display:none}.is-open .gh-burger svg:last-child{display:block}@media (max-width:767px){.gh-burger{display:flex}#gh-navigation{height:64px}#gh-navigation .gh-navigation-inner{grid-template-rows:auto 1fr auto;grid-template-columns:1fr;gap:48px}#gh-navigation .gh-navigation-brand{display:grid;grid-template-columns:1fr auto auto;grid-column-start:1;align-items:center;height:64px}#gh-navigation .gh-navigation-logo{font-size:2.2rem}#gh-navigation .gh-navigation-actions,#gh-navigation .gh-navigation-menu{position:fixed;justify-content:center;visibility:hidden;opacity:0}#gh-navigation .gh-navigation-menu{transition:none;transform:translateY(0)}#gh-navigation .nav{gap:20px;align-items:center;line-height:1.4}#gh-navigation .nav a{font-size:1.75rem;font-weight:600;text-transform:none}#gh-navigation .nav li{opacity:0;transform:translateY(-4px)}#gh-navigation .gh-navigation-actions{text-align:center}#gh-navigation :is(.gh-button,a[data-portal=signin]){opacity:0;transform:translateY(8px)}#gh-navigation .gh-button{width:100%;font-size:1.75rem;text-transform:none}#gh-navigation a[data-portal=signin]{font-size:1.75rem}#gh-main{transition:opacity .4s}.is-open#gh-navigation{position:fixed;inset:0;z-index:3999999;height:100%;overflow-y:scroll;-webkit-overflow-scrolling:touch}.is-open#gh-navigation .gh-navigation-actions,.is-open#gh-navigation .gh-navigation-menu{position:static;visibility:visible;opacity:1}.is-open#gh-navigation .nav{display:flex;flex-direction:column}.is-open#gh-navigation .nav li{opacity:1;transition:transform .2s,opacity .2s;transform:translateY(0)}.is-open#gh-navigation .gh-navigation-actions{position:sticky;right:0;bottom:0;left:0;display:inline-flex;flex-direction:column;gap:12px;align-items:center;padding:var(--container-gap) 0}.is-open#gh-navigation :is(.gh-button,a[data-portal=signin]){opacity:1;transition:transform .4s,opacity .4s;transition-delay:.2s;transform:translateY(0)}.is-open#gh-navigation a[data-portal=signin]{transition-delay:.4s}.is-open#gh-main{opacity:0}}.gh-card{position:relative}.gh-card-link{display:flex;flex-direction:column;gap:20px}.gh-card-link:hover{opacity:1}.gh-card-image{position:relative;flex-shrink:0;aspect-ratio:16/9}.gh-card-image img{position:absolute;inset:0;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.gh-card-wrapper{flex-grow:1}.gh-card-tag{display:none;margin-bottom:4px;font-size:1.2rem;font-weight:500;letter-spacing:.01em;text-transform:uppercase}.gh-card-title{font-size:calc(1.9rem * var(--factor, 1));font-weight:725;letter-spacing:-.014em;line-height:1.3}.gh-card-link:hover .gh-card-title{opacity:.8}.gh-card-excerpt{display:-webkit-box;overflow-y:hidden;margin-top:8px;font-size:1.45rem;line-height:1.4;-webkit-line-clamp:2;-webkit-box-orient:vertical}.gh-card-meta{align-items:center;padding-bottom:1px;font-size:1.25rem;font-weight:500;line-height:1.4;letter-spacing:-.004em;color:var(--color-secondary-text)}.gh-card-meta svg{position:relative;top:1px;display:inline-block;width:12px;height:12px;margin-right:2px}.gh-card-meta:not(:empty){margin-top:8px}.gh-card-author+.gh-card-date:before{content:"—";margin-right:4px}.gh-header{position:relative;margin-top:40px}.gh-header-inner{position:relative;overflow:hidden}.gh-header.is-magazine .gh-header-inner{display:grid;grid-template-columns:repeat(16,1fr);gap:var(--grid-gap)}.gh-header.is-magazine .gh-header-inner>div{display:flex;flex-direction:column;gap:var(--grid-gap);grid-row:1}.gh-header.is-magazine .gh-header-left{grid-column:1/span 4}.gh-header.is-magazine .gh-header-inner>.gh-card{position:relative;grid-column:5/span 8}.gh-header.is-magazine .gh-header-right{grid-column:13/-1}.gh-header.is-magazine .gh-header-inner>.gh-card .gh-card-link{gap:28px}.gh-header.is-magazine .gh-header-inner>.gh-card .gh-card-image{aspect-ratio:1.618033}.gh-header.is-magazine .gh-header-inner>.gh-card .gh-card-tag{display:block;margin-bottom:12px}.gh-header.is-magazine .gh-header-inner>.gh-card .gh-card-title{font-size:clamp(2.8rem,1.36vw + 2.25rem,4rem);font-weight:700;line-height:1.1;letter-spacing:-.022em}.gh-header.is-magazine .gh-header-inner>.gh-card .gh-card-excerpt{margin-top:clamp(12px,.45vw + 10.18px,16px);font-size:1.8rem;letter-spacing:-.02em;max-width:90%}.gh-header.is-magazine .gh-header-inner>.gh-card .gh-card-meta:not(:empty){margin-top:14px}.gh-header.is-magazine :is(.gh-header-left,.gh-header-right) .gh-card:last-child .gh-card-image{display:none}.gh-header.is-magazine .gh-header-inner>div .gh-card-excerpt{display:none}.gh-header.is-magazine .gh-header-inner>.gh-card:after,.gh-header.is-magazine .gh-header-inner>.gh-card:before{position:absolute;top:0;left:calc(-.5 * var(--grid-gap));content:"";width:1px;height:100%;background-color:var(--color-border)}.gh-header.is-magazine .gh-header-inner>.gh-card:after{right:calc(-.5 * var(--grid-gap));left:auto}.gh-header.is-magazine .gh-header-inner>div .gh-card+.gh-card:before{position:absolute;top:calc(-.5 * var(--grid-gap));left:0;content:"";width:100%;height:1px;background-color:var(--color-border)}@media (max-width:1199px){.gh-header.is-magazine .gh-header-inner{grid-template-columns:repeat(12,1fr)}.gh-header.is-magazine .gh-header-inner>.gh-card{grid-column:1/span 8}.gh-header.is-magazine .gh-header-left{grid-column:9/-1}.gh-header.is-magazine .gh-header-inner>div.gh-header-right{grid-column:1/-1;grid-row:2;flex-direction:row}.gh-header.is-magazine .gh-header-right .gh-card{flex:1}.gh-header.is-magazine .gh-header-right .gh-card:last-child .gh-card-image{display:block}.gh-header.is-magazine .gh-header-right{position:relative}.gh-header.is-magazine .gh-header-right:before{position:absolute;top:calc(-.5 * var(--grid-gap));left:0;content:"";width:100%;height:1px;background-color:var(--color-border)}.gh-header.is-magazine .gh-header-right .gh-card:before{display:none}.gh-header.is-magazine .gh-header-right .gh-card:after{position:absolute;top:0;right:calc(-.5 * var(--grid-gap));content:"";width:1px;height:100%;background-color:var(--color-border)}}@media (max-width:991px){.gh-header.is-magazine .gh-header-left .gh-card:nth-child(2) .gh-card-image{display:none}}@media (max-width:767px){.gh-header.is-magazine .gh-header-inner{display:flex;flex-direction:column;gap:var(--grid-gap)}.gh-header.is-magazine .gh-header-inner>div.gh-header-right{flex-direction:column}.gh-header.is-magazine .gh-card-image{display:block!important}.gh-header.is-magazine .gh-card:before{display:block!important;position:absolute;top:calc(-.5 * var(--grid-gap));left:0;content:"";width:100%;height:1px;background-color:var(--color-border)}}.gh-header.is-highlight .gh-header-inner{display:grid;grid-template-columns:repeat(16,1fr);gap:var(--grid-gap)}.gh-header.is-highlight .gh-header-left{position:relative;grid-column:span 8}.gh-header.is-highlight .gh-header-left .gh-card{grid-column:span 8;grid-row:span 3}.gh-header.is-highlight .gh-header-left .gh-card .gh-card-link{gap:28px}.gh-header.is-highlight .gh-header-left .gh-card .gh-card-image{aspect-ratio:3/2}.gh-header.is-highlight .gh-header-left .gh-card .gh-card-tag{display:block;margin-bottom:12px}.gh-header.is-highlight .gh-header-left .gh-card .gh-card-title{font-size:clamp(2.8rem,1.36vw + 2.25rem,4rem);font-weight:700;line-height:1.1;letter-spacing:-.022em}.gh-header.is-highlight .gh-header-left .gh-card .gh-card-excerpt{margin-top:clamp(12px,.45vw + 10.18px,16px);font-size:1.8rem}.gh-header.is-highlight .gh-header-left .gh-card .gh-card-meta:not(:empty){margin-top:12px}.gh-header.is-highlight .gh-header-middle{position:relative;display:flex;flex-direction:column;gap:var(--grid-gap);grid-column:9/span 4}.gh-header.is-highlight .gh-header-middle .gh-card .gh-card-excerpt,.gh-header.is-highlight .gh-header-middle .gh-card:last-child .gh-card-image{display:none}.gh-header.is-highlight .gh-header-right{grid-column:13/-1}.gh-header.is-highlight .gh-featured{margin-top:0;padding:0}.gh-header.is-highlight .gh-featured-feed{display:flex;flex-direction:column}.gh-header.is-highlight .gh-featured-feed .gh-card-title{font-size:clamp(1.4rem,.23vw + 1.31rem,1.6rem)}.gh-header.is-highlight .gh-header-left:after,.gh-header.is-highlight .gh-header-middle:after{position:absolute;top:0;right:calc(-.5 * var(--grid-gap));content:"";width:1px;height:100%;background-color:var(--color-border)}.gh-header.is-highlight .gh-card:before{position:absolute;top:calc(-.5 * var(--grid-gap));left:0;content:"";width:100%;height:1px;background-color:var(--color-border)}.gh-header.is-highlight .gh-featured .gh-card:first-child:before{display:none}@media (max-width:1199px){.gh-header.is-highlight .gh-header-inner{grid-template-columns:repeat(9,1fr)}.gh-header.is-highlight .gh-header-left{grid-column:span 6}.gh-header.is-highlight .gh-header-middle{grid-column:7/-1}.gh-header.is-highlight .gh-header-right{grid-column:1/-1}.gh-header.is-highlight .gh-featured-feed{display:grid;grid-template-columns:repeat(3,1fr)}.gh-header.is-highlight .gh-featured-feed .gh-card:before{width:calc(100% + var(--grid-gap))}.gh-header.is-highlight .gh-featured-feed .gh-card:after{position:absolute;top:0;left:calc(-.5 * var(--grid-gap));content:"";width:1px;height:100%;background-color:var(--color-border)}}@media (max-width:991px){.gh-header.is-highlight .gh-header-middle .gh-card:nth-child(2) .gh-card-image{display:none}}@media (max-width:767px){.gh-header.is-highlight .gh-header-inner{display:flex;flex-direction:column}.gh-header.is-highlight .gh-featured-feed{display:flex}.gh-header.is-highlight .gh-card-image{display:block!important}.gh-header.is-highlight .gh-header-middle .gh-card .gh-card-excerpt{display:-webkit-box}}.gh-header.is-classic{display:flex;margin-top:0;padding-block:160px}.gh-header.is-classic .gh-header-inner{display:flex;flex-direction:column;align-items:center;gap:48px;overflow:unset;margin:auto;max-width:1020px;text-align:center}.gh-header.is-classic .gh-header-title{font-size:calc(clamp(3rem, 1.82vw + 2.27rem, 4.6rem) * var(--factor, 1));line-height:1.1;letter-spacing:-.028em}.gh-header.is-classic.has-image{margin-top:0}.gh-header.is-classic.has-image:before{position:absolute;inset:0;content:"";opacity:.3;background-color:var(--color-black);transition:opacity 1.5s ease}.gh-header.is-classic.has-image .gh-header-inner{color:#fff}.gh-header.is-classic.has-image .gh-header-image{position:absolute;inset:0;z-index:-1;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.gh-header.is-classic.has-image .gh-form{background-color:#fff}.gh-cta{display:none;margin-top:max(4vw,40px)}.gh-header:is(.is-highlight,.is-magazine)+.gh-cta{display:block}.gh-cta-inner{position:relative;overflow:hidden;display:flex;flex-direction:column;align-items:center;gap:36px;padding:clamp(48px,3.64vw + 33.45px,80px) clamp(40px,2.73vw + 29.09px,64px);text-align:center;background-color:var(--color-lighter-gray)}.gh-cta-content{max-width:640px}.gh-cta-title{font-size:clamp(2.8rem,1.36vw + 2.25rem,4rem);font-weight:700;line-height:1.1;letter-spacing:-.021em}.gh-cta-description{margin-top:12px;font-size:1.8rem;line-height:1.4;letter-spacing:-.015em}.gh-featured{margin-top:100px}.gh-navigation+.gh-featured{margin-top:64px}.gh-header.is-classic:not(.has-image)+.gh-featured{margin-top:0}.gh-featured-inner{overflow:hidden}.gh-featured-title{margin-bottom:20px;padding-bottom:12px;font-size:1.2rem;font-weight:550;letter-spacing:.025em;text-transform:uppercase;border-bottom:1px solid var(--color-border)}.gh-featured-feed{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--grid-gap)}.gh-featured-feed .gh-card{container-type:inline-size;container-name:featured-card}.gh-featured-feed .gh-card-link{display:flex;flex-direction:row-reverse;align-items:flex-start}.gh-featured-feed .gh-card-image{width:72px;aspect-ratio:1}@container featured-card (width < 240px){.gh-featured-feed .gh-card-image{display:none}}@container featured-card (240px <= width <= 270px){.gh-featured-feed .gh-card-image{width:64px}}.gh-featured-feed .gh-card-wrapper{container-type:inline-size;container-name:featured-card-wrapper}.gh-featured-feed .gh-card-title{font-size:1.6rem;font-weight:650;letter-spacing:-.011em}@container featured-card-wrapper (width < 170px){.gh-featured-feed .gh-card-title{font-size:1.6rem}}.gh-featured-feed .gh-card-excerpt{display:none}.gh-featured-feed .gh-card-meta:not(:empty){margin-top:8px}.gh-featured-feed .gh-card:before{position:absolute;top:0;left:calc(-.5 * var(--grid-gap));content:"";width:1px;height:100%;background-color:var(--color-border)}@media (max-width:1199px){.gh-viewport>.gh-featured .gh-featured-feed{grid-template-columns:repeat(3,1fr)}.gh-viewport>.gh-featured .gh-featured-feed .gh-card:nth-child(4){display:none}}@media (max-width:767px){.gh-viewport>.gh-featured .gh-featured-feed{display:flex;flex-direction:column}}.gh-container{flex-grow:1;margin-top:64px}.gh-container-inner{display:grid;grid-template-columns:repeat(16,1fr);-moz-column-gap:var(--grid-gap);column-gap:var(--grid-gap)}:is(.gh-featured,.gh-cta)+.gh-container{margin-top:max(4vw,40px)}.gh-header.is-classic:not(.has-image)+.gh-container{margin-top:0}.gh-navigation+.gh-container .gh-container-title,:is(.paged,.tag-template,.author-template) .gh-container:not(.has-sidebar) .gh-container-title{display:none}.gh-more{display:none;grid-column:1/-1;margin-top:48px;font-size:calc(1.9rem * var(--factor, 1));font-weight:725;letter-spacing:-.014em}.gh-container.has-sidebar .gh-more{grid-column:span 12}.home-template .gh-feed:has(>:nth-child(12):last-child)~.gh-more{display:block}.gh-more a{display:flex;align-items:center;gap:4px}.gh-more svg{margin-top:-1px;width:18px;height:18px}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-more svg{margin-top:0}.gh-container.has-sidebar .gh-main{grid-column:1/span 12;position:relative}.gh-container.has-sidebar .gh-sidebar{grid-column:13/-1}.gh-container.has-sidebar .gh-main:after{position:absolute;top:0;right:calc(-.5 * var(--grid-gap));content:"";width:1px;height:100%;background-color:var(--color-border)}.gh-container:not(.has-sidebar) :is(.gh-container-title,.gh-main,.gh-more){grid-column:3/span 12}.gh-container.is-list.no-image:not(.has-sidebar) :is(.gh-container-title,.gh-main,.gh-more){grid-column:4/span 10}.gh-header:is(.is-highlight,.is-magazine)~.gh-container.is-grid:not(.has-sidebar) :is(.gh-container-title,.gh-main,.gh-more){grid-column:1/-1}@media (max-width:1199px){.gh-container-inner{display:block;overflow:hidden}.gh-container.has-sidebar .gh-sidebar{display:none}}.gh-container-title{grid-column:1/-1;margin-bottom:calc(.5 * var(--grid-gap));padding-bottom:12px;font-size:1.2rem;font-weight:550;letter-spacing:.025em;text-transform:uppercase;border-bottom:1px solid var(--color-border)}.gh-container:not(:has(.gh-card)) .gh-container-title{display:none}.gh-container .gh-feed{gap:var(--grid-gap)}.gh-container .gh-card-meta:not(:empty){margin-top:12px}.gh-container.is-list .gh-feed{display:flex;flex-direction:column;container-type:inline-size;container-name:list-feed}.gh-container.is-list .gh-card-link{flex-direction:row;align-items:center;gap:24px}.gh-container.is-list .no-image .gh-card-link{padding-block:20px}.gh-container.is-list .gh-card-image{flex-shrink:0;width:220px;aspect-ratio:1.618033}@container list-feed (width < 600px){.gh-container.is-list .gh-card-image{width:160px}}.gh-container.is-list .gh-card:not(.no-image) .gh-card-wrapper{max-width:600px}.gh-container.is-list .gh-card-title{--factor:1.05}.gh-container.is-list .no-image .gh-card-title{--factor:1.2}.gh-container.is-list .gh-card-excerpt{margin-top:6px}.gh-container.is-list .gh-card+.gh-card:before{position:absolute;top:calc(-.5 * var(--grid-gap));left:0;content:"";width:100%;height:1px;background-color:var(--color-border)}.home-template .gh-container.is-list .gh-card:first-child:before{display:none}@media (max-width:767px){.gh-container.is-list .gh-card-link{flex-direction:column;align-items:flex-start}.gh-container.is-list .gh-card-image{width:100%}}.gh-container.is-grid .gh-feed{display:grid;grid-template-columns:repeat(auto-fit,minmax(248px,1fr));row-gap:calc(1.5 * var(--grid-gap));overflow:hidden}.gh-container.is-grid .gh-card:before{top:calc(-.5 * var(--grid-gap));right:calc(-.5 * var(--grid-gap));height:1px}.gh-container.is-grid .gh-card:after,.gh-container.is-grid .gh-card:before{position:absolute;left:calc(-.5 * var(--grid-gap));content:"";background-color:var(--color-border)}.gh-container.is-grid .gh-card:after{top:0;width:1px;height:100%}@media (max-width:767px){.gh-container.is-grid .gh-feed{grid-template-columns:repeat(2,1fr)}}@media (max-width:576px){.gh-container.is-grid .gh-feed{display:flex;flex-direction:column}}.gh-container.is-list.no-image .gh-card-image{display:none}.gh-sidebar-inner{position:sticky;top:calc(.5 * var(--grid-gap))}.gh-sidebar-title{grid-column:1/-1;margin-bottom:calc(.5 * var(--grid-gap));padding-bottom:12px;font-size:1.2rem;font-weight:550;letter-spacing:.025em;text-transform:uppercase;border-bottom:1px solid var(--color-border)}.gh-about{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:48px 24px;min-height:380px;text-align:center;background-color:var(--color-lighter-gray)}.gh-about-icon{margin-bottom:24px;width:60px;height:60px;border-radius:50%}.gh-about-title{font-size:calc(2.4rem * var(--factor, 1));font-weight:700;letter-spacing:-.019em}.gh-about-description{margin-top:12px;font-size:1.45rem;line-height:1.4}.gh-about .gh-button{margin-top:32px}.gh-recommendations{margin-top:48px}.gh-recommendations .recommendations{display:flex;flex-direction:column;gap:26px;margin:0;padding:0;list-style-type:none}.gh-recommendations .recommendation:first-child{margin-top:4px}.gh-recommendations .recommendation a{display:grid;grid-template-columns:24px auto;gap:4px 12px}.gh-recommendations .recommendation a:hover{opacity:1}.gh-recommendations .recommendation-favicon{grid-row:span 2;width:100%;border-radius:4px}.gh-recommendations .recommendation-title{margin-top:-2px;font-size:1.5rem;font-weight:650;letter-spacing:-.009em}.gh-recommendations .recommendation a:hover .recommendation-title{opacity:.8}.gh-recommendations .recommendation-url{order:1;overflow:hidden;font-size:1.4rem;line-height:1.25;color:var(--color-secondary-text);text-overflow:ellipsis}.gh-recommendations .recommendation-description{display:-webkit-box;display:none;overflow-y:hidden;grid-column:2;font-size:1.4rem;line-height:1.4;color:var(--color-secondary-text);-webkit-line-clamp:2;-webkit-box-orient:vertical}.gh-recommendations button{display:inline-flex;align-items:center;gap:2px;margin-top:24px;padding:0;cursor:pointer;font-size:1.2rem;font-weight:550;letter-spacing:.025em;text-transform:uppercase;background-color:transparent;border:0;color:var(--color-darker-gray)}.gh-recommendations button svg{margin-top:-1px;width:12px}.gh-recommendations button:hover{opacity:.8}.gh-article{--container-width:1120px;word-break:break-word}.gh-article-header{margin:clamp(40px,3.64vw + 25.45px,72px) 0 40px}.gh-article-tag{margin-bottom:12px;font-size:1.3rem;font-weight:500;letter-spacing:.01em;text-transform:uppercase;color:var(--ghost-accent-color)}.gh-article-title{font-size:calc(clamp(3.4rem, 1.36vw + 2.85rem, 4.6rem) * var(--factor, 1));line-height:1.1;letter-spacing:-.022em}.gh-article-excerpt{margin-top:clamp(12px,.45vw + 10.18px,16px);max-width:720px;font-size:clamp(1.7rem,.23vw + 1.61rem,1.9rem);line-height:1.45;letter-spacing:-.018em}.gh-article-meta{display:flex;align-items:center;gap:8px;margin-left:6px}.gh-article-author-image{display:flex;margin-right:8px}.gh-article-author-image a{position:relative;margin:0 -8px;width:56px;height:56px;overflow:hidden;background-color:var(--color-light-gray);border-radius:50%;border:3px solid var(--background-color)}.gh-article-author-image a:first-child{z-index:10}.gh-article-author-image a:nth-child(2){z-index:9}.gh-article-author-image a:nth-child(3){z-index:8}.gh-article-author-image :is(img,svg){position:absolute;inset:0;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.gh-article-meta-wrapper{display:flex;flex-direction:column;gap:4px}.gh-article-author-name{font-size:1.6rem;font-weight:650;letter-spacing:-.013em}.gh-article-meta-content{font-size:1.35rem;font-weight:500;line-height:1.2;letter-spacing:-.006em;color:var(--color-secondary-text)}.gh-article-image{grid-column:wide;margin-top:40px}.gh-article-image img{width:100%}.page-template .gh-article-header{margin-block:72px 32px}.page-template .gh-content:only-child>:first-child:not(.kg-width-full){margin-top:64px}.page-template .gh-content>:last-child:not(.kg-width-full){margin-bottom:6vw}.page-template .gh-footer{margin-top:0}.gh-content{font-size:var(--content-font-size,1.7rem);letter-spacing:-.01em}.gh-content>*+*{margin-top:calc(28px * var(--content-spacing-factor, 1));margin-bottom:0}.gh-content>.kg-width-full+.kg-width-full:not(.kg-width-full.kg-card-hascaption+.kg-width-full){margin-top:0}.gh-content>[id]:not(:first-child){margin-top:calc(56px * var(--content-spacing-factor, 1))}.post-template .gh-content.drop-cap>p:first-of-type:first-letter{font-size:3.1em;float:left;line-height:1;margin:0 .2em 0 -1px;font-weight:700}.has-serif-body.post-template:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content.drop-cap>p:first-of-type:first-letter{font-size:3.2em}.gh-content>[id]+p{margin-top:calc(12px * var(--content-spacing-factor, 1))}.gh-content>:is(hr,blockquote,iframe){position:relative;margin-top:calc(48px * var(--content-spacing-factor, 1))!important}.gh-content>:is(hr,blockquote,iframe)+*{margin-top:calc(48px * var(--content-spacing-factor, 1))!important}.gh-content h1{font-size:calc(2.2em * var(--factor, 1));letter-spacing:-.02em}.gh-content h2{font-size:calc(1.6em * var(--factor, 1));letter-spacing:-.02em}.gh-content h3{font-size:calc(1.3em * var(--factor, 1));letter-spacing:-.017em}.gh-content a{color:var(--ghost-accent-color);text-decoration:underline}.gh-content .kg-callout-card .kg-callout-text,.gh-content .kg-toggle-card .kg-toggle-content>:is(ul,ol,p){font-size:.95em}.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content .kg-callout-text,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content .kg-toggle-content>ol,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content .kg-toggle-content>p,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content .kg-toggle-content>ul,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content>blockquote,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content>dl,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content>ol,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content>p,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-content>ul{font-family:var(--font-serif-alt)}.gh-content :is(ul,ol){padding-left:28px}.gh-content :is(li+li,li :is(ul,ol)){margin-top:8px}.gh-content ol ol li{list-style-type:lower-alpha}.gh-content ol ol ol li{list-style-type:lower-roman}.gh-content hr{width:100%;height:1px;background-color:var(--color-border);border:0}.gh-content .gh-table{overflow-x:scroll;-webkit-overflow-scrolling:touch}.gh-content .gh-table table{width:100%;font-family:var(--font-sans);font-size:1.5rem;white-space:nowrap;vertical-align:top;border-spacing:0;border-collapse:collapse}.gh-content .gh-table table th{font-size:1.2rem;font-weight:700;color:var(--color-darkgrey);text-align:left;text-transform:uppercase;letter-spacing:.2px}.gh-content .gh-table table :is(th,td),.gh-content .gh-table table td{padding:6px 12px;border-bottom:1px solid var(--color-border)}.gh-content .gh-table table :is(th,td):first-child{padding-left:0}.gh-content .gh-table table :is(th,td):last-child{padding-right:0}.gh-content pre{overflow:auto;padding:16px;font-size:1.5rem;line-height:1.5em;border-radius:6px}.gh-content :not(pre)>code,.gh-content pre{background:var(--color-lighter-gray);font-family:var(--font-mono)}.gh-content :not(pre)>code{vertical-align:baseline;padding:.15em .4em;font-weight:400;font-size:.95em;line-height:1em;border-radius:.25em}.gh-content :not(.kg-card):not(table):not([id])+:is(.kg-card,table){margin-top:calc(48px * var(--content-spacing-factor, 1))}.gh-content :is(.kg-card,table)+:not(.kg-card):not(table):not([id]){margin-top:calc(48px * var(--content-spacing-factor, 1))}.gh-content .kg-card.kg-width-full+:not(.kg-card):not([id]),.gh-content :not(.kg-card):not([id])+.kg-card.kg-width-full{margin-top:calc(68px * var(--content-spacing-factor, 1))}.kg-image{margin-right:auto;margin-left:auto}.kg-embed-card{display:flex;flex-direction:column;align-items:center;width:100%}.gh-feature-image,.kg-gallery-image,.kg-image[width][height]{cursor:pointer}.kg-gallery-image a:hover,.kg-image-card a:hover{opacity:1!important}.kg-card.kg-toggle-card .kg-toggle-heading-text{font-size:2rem;font-weight:700}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .kg-toggle-card .kg-toggle-heading-text{font-family:var(--font-serif)}.has-mono-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .kg-toggle-card .kg-toggle-heading-text{font-family:var(--font-mono)}.kg-callout-card.kg-card{border-radius:.25em}.kg-callout-card-accent a{text-decoration:underline}blockquote:not([class]){padding-left:2rem;border-left:4px solid var(--ghost-accent-color)}blockquote.kg-blockquote-alt{font-style:normal;font-weight:400;color:var(--color-secondary-text)}.kg-card.kg-button-card .kg-btn{height:unset;padding:.6em 1.2em;text-align:center;font-size:1em;line-height:1.2em}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .kg-card.kg-header-card h2.kg-header-card-header{font-family:var(--font-serif)}.has-mono-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .kg-card.kg-header-card h2.kg-header-card-header{font-family:var(--font-mono)}.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .kg-header-card h3.kg-header-card-subheader{font-family:var(--font-serif)}.kg-bookmark-card .kg-bookmark-container{border-radius:.25em!important}.kg-bookmark-card .kg-bookmark-container:hover{opacity:1}.kg-bookmark-card a.kg-bookmark-container,.kg-bookmark-card a.kg-bookmark-container:hover{background:var(--background-color)!important;color:var(--color-darker-gray)!important}.kg-bookmark-card .kg-bookmark-content{padding:1.15em}.kg-bookmark-card .kg-bookmark-title{font-size:.9em}.kg-bookmark-card .kg-bookmark-description{max-height:none;margin-top:.3em;font-size:.8em}.kg-bookmark-card .kg-bookmark-metadata{font-size:.8em}.kg-bookmark-card .kg-bookmark-thumbnail img{border-radius:0 .2em .2em 0}.kg-product-card.kg-card .kg-product-card-image{margin-bottom:12px}.kg-product-card.kg-card a.kg-product-card-button{height:2.8em;margin-top:12px}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .kg-product-card.kg-card .kg-product-card-title{font-family:var(--font-serif)}.has-mono-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .kg-product-card.kg-card .kg-product-card-title{font-family:var(--font-mono)}.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .kg-product-card-description :is(p,ul,ol){font-family:var(--font-serif-alt)}.kg-file-card.kg-card .kg-file-card-container{padding:.6em}.kg-file-card.kg-card .kg-file-card-contents{margin:4px 8px 6px}.kg-file-card.kg-card .kg-file-card-metadata{font-size:.9em}.kg-file-card.kg-card .kg-file-card-filesize:before{margin-right:6px;margin-left:6px}figcaption{margin-top:12px;font-size:1.4rem;text-align:center}.kg-card.kg-width-full figcaption{padding:0 16px}figcaption a{color:var(--ghost-accent-color);text-decoration:underline}.gh-comments{margin-top:48px}.post-template .gh-container{margin-top:120px}.post-template .gh-container-inner{display:block}.post-template .gh-container.is-grid .gh-feed{grid-template-columns:repeat(4,1fr)}.post-template .gh-container .gh-container-title{display:block}.gh-archive{display:grid;grid-template-columns:repeat(16,1fr);gap:var(--grid-gap);margin-block:80px 24px}.gh-archive.has-image{margin-top:48px}.gh-archive-inner{display:grid;grid-template-columns:1fr 1fr;gap:var(--grid-gap);grid-column:1/-1;padding-bottom:clamp(40px,2.73vw + 29.09px,64px);border-bottom:1px solid var(--color-border)}.gh-archive.has-image .gh-archive-inner{align-items:center;grid-column:1/-1}.gh-archive:not(.has-sidebar):not(.has-image) .gh-archive-inner{grid-column:3/span 12}.gh-archive .gh-article-image{grid-column:auto;margin-top:0}:is(.tag-template,.author-template) .gh-container{margin-top:0}.author-template .gh-archive-inner{display:flex;flex-direction:row-reverse;justify-content:flex-end;gap:24px}.author-template .gh-article-image{margin-top:0;width:120px;height:120px;border-radius:50%;-o-object-fit:cover;object-fit:cover}.author-template .gh-article-title{font-size:3.6rem}.gh-author-meta{display:flex;gap:10px;margin-top:14px;font-size:1.5rem;font-weight:550;color:var(--color-secondary-text)}.gh-author-meta a{color:inherit}.gh-author-social{display:flex;gap:16px;align-items:center;padding-left:3px}.gh-author-social svg{width:20px;height:20px}@media (max-width:1199px){.gh-archive{display:block}}@media (max-width:767px){.gh-archive-inner{display:flex;align-items:flex-start}.author-template .gh-archive-inner,.gh-archive-inner{flex-direction:column-reverse}}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]){--factor:1.15}.has-mono-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]){--factor:1.1}.has-sans-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) :is(.is-title,.gh-content :is(h2,h3)){font-family:var(--gh-font-heading,var(--font-sans))}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) :is(.is-title,.gh-content :is(h2,h3)){font-family:var(--gh-font-heading,var(--font-serif));font-weight:550}.has-mono-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) :is(.is-title,.gh-content :is(h2,h3)){font-family:var(--gh-font-heading,var(--font-mono))}.has-sans-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .is-body{font-family:var(--gh-font-body,var(--font-sans))}.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .is-body{font-family:var(--gh-font-body,var(--font-serif-alt))}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-header.is-classic .gh-header-title{font-weight:550;letter-spacing:-.015em}.has-mono-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-header.is-classic .gh-header-title{letter-spacing:-.01em}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-form{border-radius:0}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-card-title{line-height:1.15;letter-spacing:-.006em;font-size:calc(2rem * var(--factor, 1))}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-featured-feed .gh-card-title{font-size:calc(1.6rem * var(--factor, 1))}.has-mono-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-featured-feed .gh-card-title{font-size:calc(1.5rem * var(--factor, 1));letter-spacing:0}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-header.is-highlight .gh-featured-feed .gh-card-title{font-size:clamp(1.6rem,.23vw + 1.51rem,1.8rem)}.has-mono-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-card-title{font-size:calc(1.8rem * var(--factor, 1));line-height:1.2}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-about-title{letter-spacing:-.009em}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-article-title,.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-footer-signup-header{letter-spacing:-.019em}.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]){--content-font-size:1.9rem}.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-card-excerpt{font-size:1.65rem;line-height:1.4;letter-spacing:.0005em}.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-header.is-highlight .gh-card:first-child .gh-card-excerpt,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-header.is-magazine .gh-header-inner>.gh-card .gh-card-excerpt{font-size:1.8rem;letter-spacing:-.001em}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-header.is-highlight .gh-header-left .gh-card-title,.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-header.is-magazine .gh-header-inner>.gh-card .gh-card-title{font-weight:550;font-size:clamp(3.2rem,1.82vw + 2.47rem,4.9rem)}.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-about-description{font-size:1.6rem}.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-article-excerpt,.has-serif-body:not([class*=" gh-font-body"]):not([class^=gh-font-body]) .gh-footer-signup-subhead{letter-spacing:0}:is(.has-serif-title,.has-mono-title):not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) :is(.gh-button,.gh-form,.gh-form-input),body[class*=" gh-font-heading"]:not(.gh-font-heading-fira-sans):not(.gh-font-heading-inter):not(.gh-font-heading-manrope):not(.gh-font-heading-noto-sans):not(.gh-font-heading-nunito):not(.gh-font-heading-poppins):not(.gh-font-heading-roboto):not(.gh-font-heading-space-grotesk) :is(.gh-button,.gh-form,.gh-form-input),body[class^=gh-font-heading]:not(.gh-font-heading-fira-sans):not(.gh-font-heading-inter):not(.gh-font-heading-manrope):not(.gh-font-heading-noto-sans):not(.gh-font-heading-nunito):not(.gh-font-heading-poppins):not(.gh-font-heading-roboto):not(.gh-font-heading-space-grotesk) :is(.gh-button,.gh-form,.gh-form-input){border-radius:0}.has-serif-title:not([class*=" gh-font-heading"]):not([class^=gh-font-heading]) .gh-cta-title{font-size:4.8rem}.gh-footer{margin-top:120px;font-size:1.5rem;color:var(--color-darker-gray)}.gh-footer a:not(.gh-button){color:inherit}.gh-footer.has-accent-color{background-color:var(--ghost-accent-color)}.gh-footer.has-accent-color .gh-footer-bar{border-top:0}.gh-footer.has-accent-color .gh-button{background-color:#fff;color:#15171a}.gh-footer-bar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;-moz-column-gap:32px;column-gap:32px;margin-bottom:120px;padding-block:28px;font-weight:550;border-block:1px solid var(--color-border)}.gh-footer-logo{position:relative;font-family:var(--gh-font-heading,var(--font-sans));font-size:calc(2.4rem * var(--factor, 1));font-weight:725;letter-spacing:-.015em;white-space:nowrap}.gh-footer-logo img{max-height:40px}.gh-footer-menu .nav{display:flex;justify-content:center;gap:8px 28px;flex-wrap:wrap;margin:0;padding:0;list-style-type:none}.gh-footer-copyright{text-align:right;white-space:nowrap}.gh-footer-copyright a{text-decoration:underline}.gh-footer-signup{display:flex;flex-direction:column;align-items:center;margin-bottom:120px;text-align:center}.gh-footer-signup-header{font-size:calc(clamp(2.8rem, 1.36vw + 2.25rem, 4rem) * var(--factor, 1));font-weight:700;letter-spacing:-.03em}.gh-footer-signup-subhead{margin-top:12px;max-width:640px;font-size:1.8rem;font-weight:450;line-height:1.4;letter-spacing:-.014em;opacity:.75}.gh-footer-signup .gh-form{margin-top:40px}@media (max-width:991px){.gh-footer-bar{display:flex;flex-direction:column;gap:20px}}.gh-social-links{display:flex;justify-content:center;gap:20px;margin-bottom:32px}.gh-social-links a{will-change:opacity}.gh-social-links svg{width:20px;height:20px}.pswp{position:absolute;top:0;left:0;z-index:3999999;display:none;width:100%;height:100%;overflow:hidden;touch-action:none;outline:none;backface-visibility:hidden;-webkit-text-size-adjust:100%}.pswp img{max-width:none}.pswp--animate_opacity{opacity:.001;transition:opacity 333ms cubic-bezier(.4,0,.22,1);will-change:opacity}.pswp--open{display:block}.pswp--zoom-allowed .pswp__img{cursor:zoom-in}.pswp--zoomed-in .pswp__img{cursor:grab}.pswp--dragging .pswp__img{cursor:grabbing}.pswp__bg{background-color:rgba(0,0,0,.85);opacity:0;transition:opacity 333ms cubic-bezier(.4,0,.22,1);transform:translateZ(0);backface-visibility:hidden;will-change:opacity}.pswp__bg,.pswp__scroll-wrap{position:absolute;top:0;left:0;width:100%;height:100%}.pswp__scroll-wrap{overflow:hidden}.pswp__container,.pswp__zoom-wrap{position:absolute;top:0;right:0;bottom:0;left:0;touch-action:none;backface-visibility:hidden}.pswp__container,.pswp__img{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}.pswp__zoom-wrap{position:absolute;width:100%;transition:transform 333ms cubic-bezier(.4,0,.22,1);transform-origin:left top}.pswp--animated-in .pswp__bg,.pswp--animated-in .pswp__zoom-wrap{transition:none}.pswp__item{right:0;bottom:0;overflow:hidden}.pswp__img,.pswp__item{position:absolute;top:0;left:0}.pswp__img{width:auto;height:auto}.pswp__img--placeholder{backface-visibility:hidden}.pswp__img--placeholder--blank{background:var(--color-black)}.pswp--ie .pswp__img{top:0;left:0;width:100%!important;height:auto!important}.pswp__error-msg{position:absolute;top:50%;left:0;width:100%;margin-top:-8px;font-size:14px;line-height:16px;color:var(--color-secondary-text);text-align:center}.pswp__error-msg a{color:var(--color-secondary-text);text-decoration:underline}.pswp__button{position:relative;display:block;float:right;width:44px;height:44px;padding:0;margin:0;overflow:visible;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background:none;border:0;box-shadow:none;transition:opacity .2s}.pswp__button:focus,.pswp__button:hover{opacity:1}.pswp__button:active{outline:none;opacity:.9}.pswp__button::-moz-focus-inner{padding:0;border:0}.pswp__ui--over-close .pswp__button--close{opacity:1}.pswp__button,.pswp__button--arrow--left:before,.pswp__button--arrow--right:before{width:44px;height:44px;background:url(../images/default-skin.png) 0 0 no-repeat;background-size:264px 88px}@media (min-resolution:1.1dppx),(min-resolution:105dpi){.pswp--svg .pswp__button,.pswp--svg .pswp__button--arrow--left:before,.pswp--svg .pswp__button--arrow--right:before{background-image:url(../images/default-skin.svg)}.pswp--svg .pswp__button--arrow--left,.pswp--svg .pswp__button--arrow--right{background:none}}.pswp__button--close{background-position:0 -44px}.pswp__button--share{background-position:-44px -44px}.pswp__button--fs{display:none}.pswp--supports-fs .pswp__button--fs{display:block}.pswp--fs .pswp__button--fs{background-position:-44px 0}.pswp__button--zoom{display:none;background-position:-88px 0}.pswp--zoom-allowed .pswp__button--zoom{display:block}.pswp--zoomed-in .pswp__button--zoom{background-position:-132px 0}.pswp--touch .pswp__button--arrow--left,.pswp--touch .pswp__button--arrow--right{visibility:hidden}.pswp__button--arrow--left,.pswp__button--arrow--right{position:absolute;top:50%;width:70px;height:100px;margin-top:-50px;background:none}.pswp__button--arrow--left{left:0}.pswp__button--arrow--right{right:0}.pswp__button--arrow--left:before,.pswp__button--arrow--right:before{position:absolute;top:35px;width:32px;height:30px;content:""}.pswp__button--arrow--left:before{left:6px;background-position:-138px -44px}.pswp__button--arrow--right:before{right:6px;background-position:-94px -44px}.pswp__counter{position:absolute;top:0;left:0;height:44px;padding:0 15px;font-size:11px;font-weight:700;line-height:44px;color:var(--color-white);-webkit-user-select:none;-moz-user-select:none;user-select:none}.pswp__caption{position:absolute;bottom:0;left:0;width:100%;min-height:44px}.pswp__caption__center{max-width:420px;padding:25px 15px 30px;margin:0 auto;font-size:11px;line-height:1.6;color:var(--color-white);text-align:center}.pswp__caption__center .post-caption-title{margin-bottom:7px;font-size:15px;font-weight:500;text-transform:uppercase}.pswp__caption__center .post-caption-meta-item+.post-caption-meta-item:before{padding:0 4px;content:"\02022"}.pswp__caption--empty{display:none}.pswp__caption--fake{visibility:hidden}.pswp__preloader{position:absolute;top:0;left:50%;width:44px;height:44px;margin-left:-22px;opacity:0;transition:opacity .25s ease-out;direction:ltr;will-change:opacity}.pswp__preloader__icn{width:20px;height:20px;margin:12px}.pswp__preloader--active{opacity:1}.pswp__preloader--active .pswp__preloader__icn{background:url(../images/preloader.gif) 0 0 no-repeat}.pswp--css_animation .pswp__preloader--active{opacity:1}.pswp--css_animation .pswp__preloader--active .pswp__preloader__icn{animation:clockwise .5s linear infinite}.pswp--css_animation .pswp__preloader--active .pswp__preloader__donut{animation:donut-rotate 1s cubic-bezier(.4,0,.22,1) infinite}.pswp--css_animation .pswp__preloader__icn{position:absolute;top:15px;left:15px;width:14px;height:14px;margin:0;background:none;opacity:.75}.pswp--css_animation .pswp__preloader__cut{position:relative;width:7px;height:14px;overflow:hidden}.pswp--css_animation .pswp__preloader__donut{position:absolute;top:0;left:0;box-sizing:border-box;width:14px;height:14px;margin:0;background:none;border:2px solid var(--color-white);border-bottom-color:transparent;border-left-color:transparent;border-radius:50%}@media screen and (max-width:1024px){.pswp__preloader{position:relative;top:auto;left:auto;float:right;margin:0}}@keyframes clockwise{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes donut-rotate{0%{transform:rotate(0)}50%{transform:rotate(-140deg)}to{transform:rotate(0)}}.pswp__ui{z-index:1550;visibility:visible;opacity:1;-webkit-font-smoothing:auto}.pswp__top-bar{position:absolute;top:0;left:0;width:100%;height:44px}.pswp--has_mouse .pswp__button--arrow--left,.pswp--has_mouse .pswp__button--arrow--right,.pswp__caption,.pswp__top-bar{backface-visibility:hidden;transition:opacity 333ms cubic-bezier(.4,0,.22,1);will-change:opacity}.pswp--has_mouse .pswp__button--arrow--left,.pswp--has_mouse .pswp__button--arrow--right{visibility:visible}.pswp__ui--idle .pswp__button--arrow--left,.pswp__ui--idle .pswp__button--arrow--right,.pswp__ui--idle .pswp__top-bar{opacity:0}.pswp__ui--hidden .pswp__button--arrow--left,.pswp__ui--hidden .pswp__button--arrow--right,.pswp__ui--hidden .pswp__caption,.pswp__ui--hidden .pswp__top-bar{opacity:.001}.pswp__ui--one-slide .pswp__button--arrow--left,.pswp__ui--one-slide .pswp__button--arrow--right,.pswp__ui--one-slide .pswp__counter{display:none}.pswp__element--disabled{display:none!important}.pswp--minimal--dark .pswp__top-bar{background:none}.gh-meta-share{display:flex;align-items:center;justify-content:space-between;margin-top:20px}.has-light-text .gh-button-share{border-color:hsla(0,0%,100%,.25);color:hsla(0,0%,100%,.85)}.has-light-text .gh-button-share:hover{border-color:hsla(0,0%,100%,.85)}.gh-button-share{display:inline-flex;align-items:center;border:1px solid rgba(0,0,0,.15);border-radius:999px;color:rgba(0,0,0,.85);background:transparent;cursor:pointer;transition:all .4s ease}.gh-button-share:hover{border-color:rgba(0,0,0,.5)}/*# sourceMappingURL=screen.css.map */
|