@tryghost/activitypub 3.0.7 → 3.0.8
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/dist/activitypub.js +6 -3
- package/dist/{at-sign-DjgaOOtV.mjs → at-sign-Fsk3x72r.mjs} +2 -2
- package/dist/{at-sign-DjgaOOtV.mjs.map → at-sign-Fsk3x72r.mjs.map} +1 -1
- package/dist/{avatar-flipboard-8NioODS5.mjs → avatar-flipboard-C10JfFS_.mjs} +2 -2
- package/dist/{avatar-flipboard-8NioODS5.mjs.map → avatar-flipboard-C10JfFS_.mjs.map} +1 -1
- package/dist/{bluesky-sharing-B4oF-0BN.mjs → bluesky-sharing-C1xeGSL6.mjs} +4 -4
- package/dist/{bluesky-sharing-B4oF-0BN.mjs.map → bluesky-sharing-C1xeGSL6.mjs.map} +1 -1
- package/dist/{copy-BxgO1lWX.mjs → copy-C1fElSkQ.mjs} +2 -2
- package/dist/{copy-BxgO1lWX.mjs.map → copy-C1fElSkQ.mjs.map} +1 -1
- package/dist/{deleted-feed-item-Ct4Zc7u3.mjs → deleted-feed-item-Bun4tY2_.mjs} +2 -2
- package/dist/{deleted-feed-item-Ct4Zc7u3.mjs.map → deleted-feed-item-Bun4tY2_.mjs.map} +1 -1
- package/dist/{edit-profile-DVsYbpNY.mjs → edit-profile-CYh00FZ7.mjs} +1211 -1121
- package/dist/edit-profile-CYh00FZ7.mjs.map +1 -0
- package/dist/{feed-D0aeoOOJ.mjs → feed-BxUqmcN9.mjs} +4 -4
- package/dist/{feed-D0aeoOOJ.mjs.map → feed-BxUqmcN9.mjs.map} +1 -1
- package/dist/{hash-B-J30lCU.mjs → hash-CNgwAx-U.mjs} +2 -2
- package/dist/{hash-B-J30lCU.mjs.map → hash-CNgwAx-U.mjs.map} +1 -1
- package/dist/{inbox-BrLsHadF.mjs → inbox-DqNqII4a.mjs} +2 -2
- package/dist/{inbox-BrLsHadF.mjs.map → inbox-DqNqII4a.mjs.map} +1 -1
- package/dist/{index-_vEj3NfZ.mjs → index--Q6orQkb.mjs} +7960 -8593
- package/dist/index--Q6orQkb.mjs.map +1 -0
- package/dist/{index-DyFr7l3O.mjs → index-BueIufRq.mjs} +2450 -2838
- package/dist/index-BueIufRq.mjs.map +1 -0
- package/dist/{index-DnpX9U7J.mjs → index-C3KJXzZE.mjs} +32 -32
- package/dist/{index-DnpX9U7J.mjs.map → index-C3KJXzZE.mjs.map} +1 -1
- package/dist/{index-BftxScf5.mjs → index-C9pnotJK.mjs} +24 -24
- package/dist/{index-BftxScf5.mjs.map → index-C9pnotJK.mjs.map} +1 -1
- package/dist/{index-BMm_mIRT.mjs → index-CJJXnqq1.mjs} +3 -3
- package/dist/{index-BMm_mIRT.mjs.map → index-CJJXnqq1.mjs.map} +1 -1
- package/dist/{index-WlK4xdmR.mjs → index-CONoLlDU.mjs} +2 -2
- package/dist/{index-WlK4xdmR.mjs.map → index-CONoLlDU.mjs.map} +1 -1
- package/dist/{index-DL7eG3Ac.mjs → index-Dvh9q3jy.mjs} +18 -18
- package/dist/{index-DL7eG3Ac.mjs.map → index-Dvh9q3jy.mjs.map} +1 -1
- package/dist/{index-BdcW7GlH.mjs → index-jhjmoHwu.mjs} +36 -36
- package/dist/{index-BdcW7GlH.mjs.map → index-jhjmoHwu.mjs.map} +1 -1
- package/dist/{moderation-KWQp9gQj.mjs → moderation-CYhwUFi2.mjs} +3 -3
- package/dist/{moderation-KWQp9gQj.mjs.map → moderation-CYhwUFi2.mjs.map} +1 -1
- package/dist/{note-CfQDRkeT.mjs → note-COVa8CMw.mjs} +4 -4
- package/dist/{note-CfQDRkeT.mjs.map → note-COVa8CMw.mjs.map} +1 -1
- package/dist/{reply-BrWarBVQ.mjs → reply-BHpKVBxx.mjs} +2 -2
- package/dist/{reply-BrWarBVQ.mjs.map → reply-BHpKVBxx.mjs.map} +1 -1
- package/dist/separator-DP7q5sFH.mjs +116 -0
- package/dist/separator-DP7q5sFH.mjs.map +1 -0
- package/dist/{settings-CCnMmVaW.mjs → settings-3n7zo_3K.mjs} +3 -3
- package/dist/{settings-CCnMmVaW.mjs.map → settings-3n7zo_3K.mjs.map} +1 -1
- package/dist/{step-1-HGv6537o.mjs → step-1-BmUukywZ.mjs} +3 -3
- package/dist/{step-1-HGv6537o.mjs.map → step-1-BmUukywZ.mjs.map} +1 -1
- package/dist/{step-2-hqeY_dIc.mjs → step-2-C--I3xxp.mjs} +7 -7
- package/dist/{step-2-hqeY_dIc.mjs.map → step-2-C--I3xxp.mjs.map} +1 -1
- package/dist/{step-3-8yg4QPpr.mjs → step-3-0Deh5N9c.mjs} +7 -7
- package/dist/{step-3-8yg4QPpr.mjs.map → step-3-0Deh5N9c.mjs.map} +1 -1
- package/dist/{tabs-BZytpdZ9.mjs → tabs-D_vmoLBo.mjs} +35 -35
- package/dist/{tabs-BZytpdZ9.mjs.map → tabs-D_vmoLBo.mjs.map} +1 -1
- package/dist/{topic-filter-1kNAxvyr.mjs → topic-filter-DJMrhH-c.mjs} +2 -2
- package/dist/{topic-filter-1kNAxvyr.mjs.map → topic-filter-DJMrhH-c.mjs.map} +1 -1
- package/package.json +2 -2
- package/dist/edit-profile-DVsYbpNY.mjs.map +0 -1
- package/dist/index-DyFr7l3O.mjs.map +0 -1
- package/dist/index-_vEj3NfZ.mjs.map +0 -1
- package/dist/separator-nDV4oVPB.mjs +0 -39
- package/dist/separator-nDV4oVPB.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-BftxScf5.mjs","sources":["../../../node_modules/lucide-react/dist/esm/icons/minus.js","../../shade/es/components/ui/empty-indicator.js","../src/views/inbox/components/customizer.tsx","../src/components/feed/table-of-contents.tsx","../src/components/article-body-styles.ts","../../../ghost/core/core/frontend/src/cards/js/audio.js?raw","../../../ghost/core/core/frontend/src/cards/js/gallery.js?raw","../../../ghost/core/core/frontend/src/cards/js/toggle.js?raw","../../../ghost/core/core/frontend/src/cards/js/video.js?raw","../../../ghost/core/core/frontend/src/cards/css/audio.css?raw","../../../ghost/core/core/frontend/src/cards/css/blockquote.css?raw","../../../ghost/core/core/frontend/src/cards/css/bookmark.css?raw","../../../ghost/core/core/frontend/src/cards/css/button.css?raw","../../../ghost/core/core/frontend/src/cards/css/callout.css?raw","../../../ghost/core/core/frontend/src/cards/css/collection.css?raw","../../../ghost/core/core/frontend/src/cards/css/cta.css?raw","../../../ghost/core/core/frontend/src/cards/css/file.css?raw","../../../ghost/core/core/frontend/src/cards/css/gallery.css?raw","../../../ghost/core/core/frontend/src/cards/css/header.css?raw","../../../ghost/core/core/frontend/src/cards/css/header_v2.css?raw","../../../ghost/core/core/frontend/src/cards/css/nft.css?raw","../../../ghost/core/core/frontend/src/cards/css/product.css?raw","../../../ghost/core/core/frontend/src/cards/css/signup.css?raw","../../../ghost/core/core/frontend/src/cards/css/toggle.css?raw","../../../ghost/core/core/frontend/src/cards/css/video.css?raw","../src/utils/cards-assets.ts","../src/views/inbox/components/reader.tsx","../src/views/inbox/components/inbox-list.tsx","../src/views/inbox/inbox.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }]];\nconst Minus = createLucideIcon(\"minus\", __iconNode);\n\nexport { __iconNode, Minus as default };\n//# sourceMappingURL=minus.js.map\n","import { jsx, jsxs } from \"react/jsx-runtime\";\nimport { cn } from \"../../lib/utils.js\";\nimport React__default from \"react\";\nconst EmptyBadge = React__default.forwardRef(({ children, className, ...props }, ref) => {\n return /* @__PURE__ */ jsx(\n \"div\",\n {\n ref,\n className: cn(\"flex items-center justify-center rounded-full bg-muted w-12 h-12 max-w-12 max-h-12 [&_svg]:size-4 [&_svg]:text-muted-foreground [&_svg]:shrink-0\", className),\n ...props,\n children\n }\n );\n});\nEmptyBadge.displayName = \"EmptyBadge\";\nconst EmptyIndicator = React__default.forwardRef(({ children, className, title, description, actions, ...props }, ref) => {\n return /* @__PURE__ */ jsxs(\"div\", { ref, className: cn(\"flex flex-col items-center justify-center space-y-3 text-center\", className), ...props, children: [\n /* @__PURE__ */ jsx(EmptyBadge, { children }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-[320px] space-y-1.5\", children: [\n /* @__PURE__ */ jsx(\"h3\", { className: \"text-pretty text-md font-medium tracking-normal text-foreground\", children: title }),\n description && /* @__PURE__ */ jsx(\"p\", { className: \"text-pretty text-sm leading-tight text-muted-foreground\", children: description })\n ] }),\n actions && /* @__PURE__ */ jsx(\"div\", { className: \"mt-4 flex items-center gap-2\", children: actions })\n ] });\n});\nEmptyIndicator.displayName = \"EmptyIndicator\";\nexport {\n EmptyBadge,\n EmptyIndicator\n};\n//# sourceMappingURL=empty-indicator.js.map\n","import React, {useEffect, useState} from 'react';\nimport {Button, Icon, LucideIcon, Popover, PopoverContent, PopoverTrigger} from '@tryghost/shade';\n\nexport const FONT_SIZES = ['1.5rem', '1.6rem', '1.7rem', '1.8rem', '2rem'] as const;\nexport type FontSize = typeof FONT_SIZES[number];\n\nexport const STORAGE_KEYS = {\n BACKGROUND_COLOR: 'ghost-ap-background-color',\n FONT_SIZE: 'ghost-ap-font-size',\n FONT_FAMILY: 'ghost-ap-font-family',\n FONT_STYLE: 'ghost-ap-font-style'\n} as const;\n\nexport const COLOR_OPTIONS = {\n SYSTEM: {\n id: 'system',\n color: '#fff',\n background: 'bg-white dark:bg-black',\n button: 'bg-white dark:bg-black',\n border: 'border-black/[8%] dark:border-gray-950'\n },\n SEPIA: {\n id: 'sepia',\n color: '#FCF8F1',\n background: 'bg-[#FCF8F1]',\n button: 'bg-[#FCF8F1] hover:bg-black/[3%] text-black hover:text-black',\n border: 'border-black/[8%]'\n },\n LIGHT: {\n id: 'light',\n color: '#fff',\n background: 'bg-white',\n button: 'hover:bg-black/[3%] text-black hover:text-black',\n border: 'border-black/[8%] dark:border-gray-950'\n },\n DARK: {\n id: 'dark',\n color: '#15171a',\n background: 'bg-black',\n button: 'text-white dark:bg-black dark:hover:bg-gray-900',\n border: 'border-black/[8%] dark:border-gray-950'\n }\n} as const;\n\nexport type ColorOption = keyof typeof COLOR_OPTIONS;\nexport type FontStyle = 'sans' | 'serif';\n\ninterface CustomizerProps {\n backgroundColor: ColorOption;\n currentFontSizeIndex: number;\n fontStyle: FontStyle;\n onColorChange: (color: ColorOption) => void;\n onFontStyleChange: (style: FontStyle) => void;\n onDecreaseFontSize: () => void;\n onIncreaseFontSize: () => void;\n onResetFontSize: () => void;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport const useCustomizerSettings = () => {\n const [backgroundColor, setBackgroundColor] = useState<ColorOption>(() => {\n const saved = localStorage.getItem(STORAGE_KEYS.BACKGROUND_COLOR);\n return (saved?.toUpperCase() as ColorOption) || 'SYSTEM';\n });\n\n const [currentFontSizeIndex, setCurrentFontSizeIndex] = useState(() => {\n const saved = localStorage.getItem(STORAGE_KEYS.FONT_SIZE);\n return saved ? parseInt(saved) : 2;\n });\n\n const [fontStyle, setFontStyle] = useState<FontStyle>(() => {\n const saved = localStorage.getItem(STORAGE_KEYS.FONT_STYLE);\n return (saved || 'sans') as FontStyle;\n });\n\n const handleColorChange = (color: ColorOption) => {\n setBackgroundColor(color);\n localStorage.setItem(STORAGE_KEYS.BACKGROUND_COLOR, COLOR_OPTIONS[color].id);\n };\n\n useEffect(() => {\n localStorage.setItem(STORAGE_KEYS.FONT_SIZE, currentFontSizeIndex.toString());\n }, [currentFontSizeIndex]);\n\n useEffect(() => {\n localStorage.setItem(STORAGE_KEYS.FONT_STYLE, fontStyle);\n }, [fontStyle]);\n\n const increaseFontSize = () => {\n setCurrentFontSizeIndex(prevIndex => Math.min(prevIndex + 1, FONT_SIZES.length - 1));\n };\n\n const decreaseFontSize = () => {\n setCurrentFontSizeIndex(prevIndex => Math.max(prevIndex - 1, 0));\n };\n\n const resetFontSize = () => setCurrentFontSizeIndex(2);\n\n return {\n backgroundColor,\n currentFontSizeIndex,\n fontStyle,\n handleColorChange,\n setFontStyle,\n increaseFontSize,\n decreaseFontSize,\n resetFontSize,\n fontSize: FONT_SIZES[currentFontSizeIndex]\n };\n};\n\nconst Customizer: React.FC<CustomizerProps> = ({\n backgroundColor,\n currentFontSizeIndex,\n fontStyle,\n onColorChange,\n onFontStyleChange,\n onDecreaseFontSize,\n onIncreaseFontSize,\n onResetFontSize,\n onOpenChange\n}) => {\n const isActiveColor = (color: ColorOption) => backgroundColor === color;\n const isActiveFont = (font: FontStyle) => fontStyle === font;\n\n return (\n <CustomizerView\n backgroundColor={backgroundColor}\n currentFontSizeIndex={currentFontSizeIndex}\n fontStyle={fontStyle}\n isActiveColor={isActiveColor}\n isActiveFont={isActiveFont}\n onColorChange={onColorChange}\n onDecreaseFontSize={onDecreaseFontSize}\n onFontStyleChange={onFontStyleChange}\n onIncreaseFontSize={onIncreaseFontSize}\n onOpenChange={onOpenChange}\n onResetFontSize={onResetFontSize}\n />\n );\n};\n\ninterface CustomizerViewProps extends CustomizerProps {\n isActiveColor: (color: ColorOption) => boolean;\n isActiveFont: (font: FontStyle) => boolean;\n currentFontSizeIndex: number;\n}\n\nconst CustomizerView: React.FC<CustomizerViewProps> = ({\n backgroundColor,\n isActiveColor,\n isActiveFont,\n onColorChange,\n onFontStyleChange,\n currentFontSizeIndex,\n onDecreaseFontSize,\n onIncreaseFontSize,\n onResetFontSize,\n onOpenChange\n}) => (\n <Popover modal={false} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>\n <Button className={`size-9 rounded-full ${COLOR_OPTIONS[backgroundColor].button}`} variant='ghost'>\n <Icon.Typography className='!size-[18px]' />\n </Button>\n </PopoverTrigger>\n <PopoverContent align='end' className='w-[224px]' onCloseAutoFocus={e => e.preventDefault()} onOpenAutoFocus={e => e.preventDefault()}>\n <div className='flex flex-col gap-4'>\n <div className='flex items-center justify-between gap-[6px]'>\n <Button\n className={`h-7 flex-1 rounded-[6px] bg-gray-200 p-0 text-[1.1rem] text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 [&_svg]:size-[14px] ${isActiveColor('SYSTEM') ? 'outline outline-2 outline-green' : ''}`}\n variant=\"secondary\"\n onClick={() => onColorChange('SYSTEM')}\n >\n Auto\n </Button>\n <Button\n className={`h-7 flex-1 rounded-[6px] bg-[#ece6d9] p-0 hover:bg-[#ece6d9] ${isActiveColor('SEPIA') ? 'outline outline-2 outline-green' : 'border border-[#ece6d9]'}`}\n onClick={() => onColorChange('SEPIA')}\n />\n <Button\n className={`h-7 flex-1 rounded-[6px] bg-white p-0 hover:bg-white ${isActiveColor('LIGHT') ? 'outline outline-2 outline-green' : 'border border-gray-200'}`}\n onClick={() => onColorChange('LIGHT')}\n />\n <Button\n className={`h-7 flex-1 rounded-[6px] bg-black p-0 hover:bg-black dark:border dark:border-gray-925 ${isActiveColor('DARK') ? 'outline outline-2 outline-green' : ''}`}\n onClick={() => onColorChange('DARK')}\n />\n </div>\n <div className='flex gap-2'>\n <Button\n className={`flex h-auto w-full flex-col gap-1 rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 ${isActiveFont('sans') && 'outline outline-2 outline-green'}`}\n variant=\"secondary\"\n onClick={() => onFontStyleChange('sans')}\n >\n <span className='text-[2rem] font-bold leading-none'>Aa</span>\n <span className='text-[1.1rem]'>System</span>\n </Button>\n <Button\n className={`flex h-auto w-full flex-col gap-1 rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 ${isActiveFont('serif') && 'outline outline-2 outline-green'}`}\n variant=\"secondary\"\n onClick={() => onFontStyleChange('serif')}\n >\n <span className='pt-1 font-serif text-[2rem] font-bold leading-none'>Aa</span>\n <span className='font-serif text-[1.2rem]'>Serif</span>\n </Button>\n </div>\n <div className='flex gap-2'>\n <Button\n className='h-8 w-full rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 [&_svg]:size-[14px]'\n disabled={currentFontSizeIndex === 0}\n variant=\"secondary\"\n onClick={onDecreaseFontSize}\n >\n <LucideIcon.Minus />\n </Button>\n <Button\n className='h-8 w-full rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900'\n variant=\"secondary\"\n onClick={onResetFontSize}\n >\n <span className='text-[1.6rem] font-bold'>Aa</span>\n </Button>\n <Button\n className='h-8 w-full rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 [&_svg]:size-[14px]'\n disabled={currentFontSizeIndex === FONT_SIZES.length - 1}\n variant=\"secondary\"\n onClick={onIncreaseFontSize}\n >\n <LucideIcon.Plus />\n </Button>\n </div>\n </div>\n </PopoverContent>\n </Popover>\n);\n\nexport default Customizer;\n","import React, {useEffect, useState} from 'react';\nimport {Popover, PopoverContent, PopoverTrigger} from '@tryghost/shade';\n\nexport interface TOCItem {\n id: string;\n text: string;\n level: number;\n element?: HTMLElement;\n}\n\ninterface TableOfContentsProps {\n tocItems: TOCItem[];\n iframeElement: HTMLIFrameElement | null;\n modalRef: React.RefObject<HTMLElement>;\n className?: string;\n onOpenChange?: (open: boolean) => void;\n}\n\n// Main component that handles logic\nconst TableOfContents: React.FC<TableOfContentsProps> = ({\n tocItems,\n iframeElement,\n modalRef,\n className = '!visible absolute inset-y-0 right-7 z-40 hidden lg:!block',\n onOpenChange\n}) => {\n const [activeHeadingId, setActiveHeadingId] = useState<string | null>(null);\n const isScrollingToHeading = React.useRef(false);\n\n const handleHeadingClick = (id: string) => {\n if (!iframeElement?.contentDocument) {\n return;\n }\n\n const heading = iframeElement.contentDocument.getElementById(id);\n if (heading && modalRef.current) {\n isScrollingToHeading.current = true;\n setActiveHeadingId(id);\n\n modalRef.current.scrollTo({\n top: heading.offsetTop - 20,\n behavior: 'smooth'\n });\n\n setTimeout(() => {\n isScrollingToHeading.current = false;\n }, 1000);\n }\n };\n\n useEffect(() => {\n if (!iframeElement?.contentDocument || tocItems.length <= 1) {\n return;\n }\n\n const container = modalRef.current;\n if (!container) {\n return;\n }\n\n const handleScroll = () => {\n if (isScrollingToHeading.current) {\n return;\n }\n\n const doc = iframeElement.contentDocument;\n if (!doc) {\n return;\n }\n\n const scrollTop = container.scrollTop;\n const buffer = 100;\n\n const headings = tocItems\n .map(item => doc.getElementById(item.id))\n .filter((el): el is HTMLElement => el !== null)\n .map(el => ({\n id: el.id,\n top: el.offsetTop\n }));\n\n if (!headings.length) {\n return;\n }\n\n const activeHeading = headings.reduce((prev, curr) => {\n return (curr.top - buffer <= scrollTop) ? curr : prev;\n });\n\n setActiveHeadingId(activeHeading?.id || null);\n };\n\n const scrollHandler = () => {\n requestAnimationFrame(handleScroll);\n };\n\n container.addEventListener('scroll', scrollHandler);\n handleScroll();\n\n return () => {\n container.removeEventListener('scroll', scrollHandler);\n };\n }, [iframeElement, tocItems, modalRef]);\n\n if (tocItems.length <= 1) {\n return null;\n }\n\n return (\n <div className={className}>\n <div className=\"sticky top-1/2 -translate-y-1/2\">\n <TableOfContentsView\n activeHeading={activeHeadingId || ''}\n items={tocItems}\n onItemClick={handleHeadingClick}\n onOpenChange={onOpenChange}\n />\n </div>\n </div>\n );\n};\n\ninterface TableOfContentsViewProps {\n items: TOCItem[];\n activeHeading: string;\n onItemClick: (id: string) => void;\n onOpenChange?: (open: boolean) => void;\n}\n\nconst LINE_WIDTHS = {\n 1: 'w-3',\n 2: 'w-2',\n 3: 'w-1'\n} as const;\n\nconst HEADING_PADDINGS = {\n 1: 'pl-2',\n 2: 'pl-6',\n 3: 'pl-10'\n} as const;\n\nconst TableOfContentsView: React.FC<TableOfContentsViewProps> = ({items, activeHeading, onItemClick, onOpenChange}) => {\n const [open, setOpen] = useState(false);\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout>>();\n\n React.useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n if (items.length === 0) {\n return null;\n }\n\n const getNormalizedLevel = (level: number) => {\n return Math.min(level, 3);\n };\n\n const getLineWidth = (level: number) => {\n return LINE_WIDTHS[getNormalizedLevel(level) as keyof typeof LINE_WIDTHS];\n };\n\n const getHeadingPadding = (level: number) => {\n return HEADING_PADDINGS[getNormalizedLevel(level) as keyof typeof HEADING_PADDINGS];\n };\n\n const handleMouseEnter = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setOpen(true);\n onOpenChange?.(true);\n };\n\n const handleMouseLeave = () => {\n timeoutRef.current = setTimeout(() => {\n setOpen(false);\n onOpenChange?.(false);\n }, 100);\n };\n\n return (\n <Popover modal={false} open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <div\n className='absolute right-2 top-1/2 flex -translate-y-1/2 flex-col items-end gap-2 rounded-md p-2 text-base dark:bg-black'\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {items.map(item => (\n <div\n key={item.id}\n className={`h-[2px] rounded-sm ${activeHeading === item.id ? 'bg-black dark:bg-white' : 'bg-gray-400 dark:bg-gray-700'} pr-1 transition-all ${getLineWidth(item.level)}`}\n />\n ))}\n </div>\n </PopoverTrigger>\n <PopoverContent\n align='center'\n className='w-[240px] p-2'\n side='left'\n sideOffset={-28}\n onCloseAutoFocus={e => e.preventDefault()}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onOpenAutoFocus={e => e.preventDefault()}\n >\n <nav\n aria-label='Table of contents navigation'\n className='max-h-[60vh] overflow-y-auto'\n role='navigation'\n >\n {items.map(item => (\n <button\n key={item.id}\n className={`line-clamp-2 block w-full cursor-pointer rounded py-1 text-left text-sm leading-tight ${activeHeading === item.id ? 'text-black dark:text-white' : 'text-gray-700 dark:text-gray-600'} hover:bg-gray-75 hover:text-gray-900 dark:hover:bg-grey-925 dark:hover:text-white ${getHeadingPadding(item.level)}`}\n type='button'\n onClick={() => onItemClick(item.id)}\n >\n <span className=\"line-clamp-2\">\n {item.text}\n </span>\n </button>\n ))}\n </nav>\n </PopoverContent>\n </Popover>\n );\n};\n\nexport default TableOfContents;\n","const articleBodyStyles = () => {\n return `<style>\n\n/* Variables */\n\n:root {\n --color-white: #fff;\n --color-lighter-gray: rgb(0 0 0 / 0.05);\n --color-light-gray: #e6e6e6;\n --color-mid-gray: #ccc;\n --color-dark-gray: #444;\n --color-darker-gray: #15171a;\n --color-black: #000;\n --color-primary-text: var(--color-darker-gray);\n --color-secondary-text: rgb(124 139 154);\n --color-border: rgb(0 0 0 / 0.08);\n --color-dark-border: rgb(0 0 0 / 0.55);\n --background-color: #fff;\n --font-sans: Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n --font-serif: \"EB Garamond\", Georgia, Times, serif;\n --font-serif-alt: Georgia, Times, serif;\n --font-mono: \"JetBrains Mono\", Menlo, Consolas, Monaco, \"Liberation Mono\", \"Lucida Console\", monospace;\n --letter-spacing: 0;\n --container-width: 1320px;\n --container-gap: clamp(24px, 1.7032rem + 1.9355vw, 48px);\n --ghost-accent-color: #15171a;\n}\n\n:root.has-light-text,\n:is(.gh-navigation, .gh-footer).has-accent-color {\n --color-lighter-gray: rgb(255 255 255 / 0.1);\n --color-darker-gray: #fff;\n --color-secondary-text: rgb(255 255 255 / 0.64);\n --color-border: rgb(255 255 255 / 0.15);\n --color-dark-border: rgb(255 255 255 / 0.5);\n --background-color: #15171a;\n}\n\n/* Resets */\n\n*, *::before, *::after {\n box-sizing: border-box;\n}\n\n* {\n margin: 0;\n}\n\nhtml {\n font-size: 62.5%;\n}\n\nbody {\n font-family: var(--font-sans);\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\nimg, picture, video, canvas, svg {\n display: block;\n height: auto;\n max-width: 100%;\n}\n\niframe {\n display: block;\n}\n\ninput, button, textarea, select {\n font: inherit;\n}\n\np, h1, h2, h3, h4, h5, h6 {\n overflow-wrap: break-word;\n}\n\nh1, h2, h3, h4, h5, h6 {\n font-family: var(--font-sans);\n line-height: 1.2;\n}\n\n/* Globals */\n\nhtml {\n --container-width: 840px;\n --content-width: 640px;\n}\n\nbody {\n font-family: var(--font-sans);\n font-size: 1.6rem;\n background-color: var(--background-color);\n color: var(--color-primary-text);\n}\n\na {\n color: var(--color-darker-gray);\n text-decoration: none;\n}\n\na:not([class]):hover {\n opacity: 0.8;\n}\n\n.gh-canvas,\n.kg-width-full.kg-content-wide {\n --main: min(var(--content-width, 720px), 100% - var(--container-gap) * 2);\n --wide: minmax(0, calc((var(--container-width, 1200px) - var(--content-width, 720px)) / 2));\n --full: minmax(var(--container-gap), 1fr);\n\n display: grid;\n grid-template-columns:\n [full-start] var(--full)\n [wide-start] var(--wide)\n [main-start] var(--main) [main-end]\n var(--wide) [wide-end]\n var(--full) [full-end];\n}\n\n.gh-canvas > * {\n grid-column: main;\n}\n\n.kg-width-wide,\n.kg-content-wide > div {\n grid-column: full;\n}\n\n.kg-width-full {\n grid-column: full;\n}\n\n/* Article */\n\n.gh-article-header {\n margin: 24px 0 40px;\n}\n\n.gh-article-title {\n font-weight: 700;\n text-wrap: pretty;\n font-size: 3.6rem;\n letter-spacing: -0.015em;\n line-height: 1.1;\n}\n\n.gh-article-excerpt {\n margin-top: 12px;\n font-size: calc(var(--font-size) * 1.06 * var(--font-size-multiplier, 1));\n line-height: 1.4;\n text-wrap: pretty;\n}\n\n.has-serif-body .gh-article-excerpt {\n font-family: var(--font-serif-alt);\n}\n\n.gh-article-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 16px;\n}\n\n.gh-article-meta:hover {\n opacity: 1;\n}\n\n.gh-article-author-image {\n display: flex;\n margin-right: 8px;\n margin-left: 6px;\n}\n\n.gh-article-author-image span {\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n width: 46px;\n height: 46px;\n overflow: hidden;\n margin: 0 -8px;\n background-color: #F4F5F6;\n border-radius: 50%;\n border: 3px solid var(--background-color);\n}\n\nhtml.has-sepia-bg .gh-article-author-image span {\n background-color: #EFEDE6;\n}\n\nhtml.has-light-text .gh-article-author-image span {\n background-color: #394047;\n}\n\n.gh-article-author-image span:first-child {\n z-index: 10;\n}\n\n.gh-article-author-image span:nth-child(2) {\n z-index: 9;\n}\n\n.gh-article-author-image span:nth-child(3) {\n z-index: 8;\n}\n\n.gh-article-author-image img {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.gh-article-author-image svg {\n width: 18px;\n height: 18px;\n color: #95A1AD;\n}\n\n.gh-article-meta-wrapper {\n display: flex;\n flex-direction: column;\n gap: 1px;\n margin-top: -2px;\n}\n\n.gh-article-author-name {\n font-size: 1.5rem;\n font-weight: 600;\n letter-spacing: -0.008em;\n}\n\n.gh-article-source {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 1.5rem;\n line-height: 1.2;\n color: var(--color-secondary-text);\n width: fit-content;\n}\n\n.gh-article-source svg {\n width: 12px;\n height: 12px;\n margin-top: 1px;\n}\n\n.gh-article-meta:hover .gh-article-source {\n text-decoration: underline;\n}\n\n.gh-article-image {\n grid-column: full;\n margin-top: 40px;\n}\n\n.gh-article-image img {\n width: 100%;\n}\n\n/* Content */\n\n/* Content refers to styling all page and post content that is\ncreated within the Ghost editor. The main content handles\nheadings, text, images and lists. We deal with cards lower down. */\n\n.gh-content {\n font-size: calc(var(--font-size) * var(--font-size-multiplier, 1));\n overflow-x: hidden;\n letter-spacing: var(--letter-spacing);\n line-height: var(--line-height);\n}\n\n/* Default vertical spacing */\n.gh-content > * + * {\n margin-top: calc(28px * var(--content-spacing-factor, 1));\n margin-bottom: 0;\n}\n\n/* Remove space between full-width cards */\n.gh-content > .kg-width-full + .kg-width-full:not(.kg-width-full.kg-card-hascaption + .kg-width-full) {\n margin-top: 0;\n}\n\n/* Add back a top margin to all headings,\nunless a heading is the very first element in the post content */\n.gh-content > [id]:not(:first-child) {\n margin-top: calc(40px * var(--content-spacing-factor, 1));\n}\n\n/* Add a small margin between a heading and paragraph after it */\n.gh-content > [id] + p {\n margin-top: calc(12px * var(--content-spacing-factor, 1));\n}\n\n/* A larger margin before/after dividers, blockquotes and embeds */\n.gh-content > :is(hr, blockquote, iframe) {\n position: relative;\n margin-top: calc(48px * var(--content-spacing-factor, 1)) !important;\n}\n\n.gh-content > :is(hr, blockquote, iframe) + * {\n margin-top: calc(48px * var(--content-spacing-factor, 1)) !important;\n}\n\n/* Now the content typography styles */\n.gh-content [id] {\n letter-spacing: -0.005em;\n}\n\n.gh-content h1 {\n font-size: 1.9em;\n}\n\n.gh-content h2 {\n font-size: 1.6em;\n}\n\n.gh-content h3 {\n font-size: 1.3em;\n}\n\n.gh-content h4 {\n font-size: 1.2em;\n}\n\n.gh-content h5 {\n font-size: 1.1em;\n}\n\n.gh-content h6 {\n font-size: 1em;\n}\n\n.gh-content a:not([class]) {\n color: #14B8FF;\n text-decoration: underline;\n}\n\nhtml.has-light-text .gh-content a:not([class]) {\n color: #14B8FF;\n}\n\nhtml.has-sepia-bg .gh-content a:not([class]) {\n color: #DD6B02;\n}\n\n.gh-content .kg-callout-card .kg-callout-text,\n.gh-content .kg-toggle-card .kg-toggle-content > :is(ul, ol, p) {\n font-size: 0.95em;\n}\n\n.has-serif-body .gh-content > blockquote,\n.has-serif-body .gh-content > ol,\n.has-serif-body .gh-content > ul,\n.has-serif-body .gh-content > dl,\n.has-serif-body .gh-content > p,\n.has-serif-body .gh-content .kg-callout-text,\n.has-serif-body .gh-content .kg-toggle-content > ol,\n.has-serif-body .gh-content .kg-toggle-content > ul,\n.has-serif-body .gh-content .kg-toggle-content > p {\n font-family: var(--font-serif-alt);\n}\n\n.gh-content :is(ul, ol) {\n padding-left: 28px;\n}\n\n.gh-content :is(li + li, li :is(ul, ol)) {\n margin-top: 8px;\n}\n\n.gh-content ol ol li {\n list-style-type: lower-alpha;\n}\n\n.gh-content ol ol ol li {\n list-style-type: lower-roman;\n}\n\n.gh-content hr {\n width: 100%;\n height: 1px;\n background-color: var(--color-border);\n border: 0;\n}\n\n.gh-content .gh-table {\n overflow-x: scroll;\n -webkit-overflow-scrolling: touch;\n}\n\n.gh-content .gh-table table {\n width: 100%;\n font-family: var(--font-sans);\n font-size: 1.5rem;\n white-space: nowrap;\n vertical-align: top;\n border-spacing: 0;\n border-collapse: collapse;\n}\n\n.gh-content .gh-table table th {\n font-size: 1.2rem;\n font-weight: 700;\n color: var(--color-darkgrey);\n text-align: left;\n text-transform: uppercase;\n letter-spacing: 0.2px;\n}\n\n.gh-content .gh-table table :is(th, td),\n.gh-content .gh-table table td {\n padding: 6px 12px;\n border-bottom: 1px solid var(--color-border);\n}\n\n.gh-content .gh-table table :is(th, td):first-child {\n padding-left: 0;\n}\n\n.gh-content .gh-table table :is(th, td):last-child {\n padding-right: 0;\n}\n\n.gh-content pre {\n overflow: auto;\n padding: 16px;\n font-size: 1.5rem;\n line-height: 1.5em;\n background: var(--color-lighter-gray);\n border-radius: 6px;\n font-family: var(--font-mono);\n}\n\n.gh-content :not(pre) > code {\n vertical-align: baseline;\n padding: 0.15em 0.4em;\n font-weight: 400;\n font-size: 0.95em;\n line-height: 1em;\n background: var(--color-lighter-gray);\n border-radius: 0.25em;\n font-family: var(--font-mono);\n}\n\n.gh-content mark {\n color: inherit;\n background: rgb(255 225 54 / 25%);\n}\n\n/* Cards */\n\n/* Add extra margin before/after any cards, except for when immediately preceeded by a heading */\n\n.gh-content :not(.kg-card):not(table):not([id]) + :is(.kg-card, table) {\n margin-top: calc(48px * var(--content-spacing-factor, 1));\n}\n\n.gh-content :is(.kg-card, table) + :not(.kg-card):not(table):not([id]) {\n margin-top: calc(48px * var(--content-spacing-factor, 1));\n}\n\n.gh-content :not(.kg-card):not([id]) + .kg-card.kg-width-full {\n margin-top: calc(68px * var(--content-spacing-factor, 1));\n}\n\n.gh-content .kg-card.kg-width-full + :not(.kg-card):not([id]) {\n margin-top: calc(68px * var(--content-spacing-factor, 1));\n}\n\n.kg-image {\n margin-right: auto;\n margin-left: auto;\n}\n\n.kg-embed-card {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n}\n\n.kg-image-card a:hover,\n.kg-gallery-image a:hover {\n opacity: 1 !important;\n}\n\nblockquote:not([class]) {\n padding-left: 2rem;\n border-left: 4px solid var(--ghost-accent-color);\n}\n\nblockquote.kg-blockquote-alt {\n font-style: normal;\n font-weight: 400;\n color: var(--color-secondary-text);\n}\n\n.has-serif-body .kg-header-card h3.kg-header-card-subheader {\n font-family: var(--font-serif);\n}\n\n.has-serif-body .kg-product-card-description :is(p, ul, ol) {\n font-family: var(--font-serif-alt);\n}\n\n/* Caption */\n\nfigcaption {\n margin-top: 12px;\n font-size: 1.3rem;\n text-align: center;\n}\n\n.kg-card.kg-width-full figcaption {\n padding: 0 16px;\n}\n\nfigcaption a {\n color: rgb(29 78 216);\n text-decoration: underline;\n}\n\n/* Paid content styles */\n\n.gh-paid-content-notice {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 36px;\n background: rgba(0, 0, 0, 0.035);\n border-radius: 14px;\n font-size: 16px;\n}\n\nhtml.has-light-text .gh-paid-content-notice {\n background: rgba(255, 255, 255, 0.035);\n}\n\n.gh-paid-content-notice h3 {\n letter-spacing: -0.015em !important;\n}\n\n.gh-paid-content-notice p {\n max-width: 350px;\n text-align: center;\n line-height: 1.3em;\n}\n\n.gh-paid-content-cta {\n display: block;\n color: var(--background-color) !important;\n background: var(--color-primary-text);\n text-decoration: none !important;\n font-weight: 600;\n font-size: 0.9em;\n padding: 8px 16px;\n margin-top: 8px;\n border-radius: 6px;\n}\n\n/* Design settings /*\n\n.has-serif-body {\n --font-size-multiplier: 1.1;\n}\n\n.has-serif-body .gh-content > blockquote,\n.has-serif-body .gh-content > ol,\n.has-serif-body .gh-content > ul,\n.has-serif-body .gh-content > dl,\n.has-serif-body .gh-content > p,\n.has-serif-body .gh-content .kg-callout-card .kg-callout-text,\n.has-serif-body .gh-content .kg-toggle-card .kg-toggle-content > ol,\n.has-serif-body .gh-content .kg-toggle-card .kg-toggle-content > ul,\n.has-serif-body .gh-content .kg-toggle-card .kg-toggle-content > p {\n font-family: var(--font-serif-alt);\n}\n\n</style>`;\n};\n\nexport default articleBodyStyles;\n","export default \"(function() {\\n const handleAudioPlayer = function (audioElementContainer) {\\n const audioPlayerContainer = audioElementContainer.querySelector('.kg-audio-player-container');\\n const playIconContainer = audioElementContainer.querySelector('.kg-audio-play-icon');\\n const pauseIconContainer = audioElementContainer.querySelector('.kg-audio-pause-icon');\\n const seekSlider = audioElementContainer.querySelector('.kg-audio-seek-slider');\\n const playbackRateContainer = audioElementContainer.querySelector('.kg-audio-playback-rate');\\n const muteIconContainer = audioElementContainer.querySelector('.kg-audio-mute-icon');\\n const unmuteIconContainer = audioElementContainer.querySelector('.kg-audio-unmute-icon');\\n const volumeSlider = audioElementContainer.querySelector('.kg-audio-volume-slider');\\n const audio = audioElementContainer.querySelector('audio');\\n const durationContainer = audioElementContainer.querySelector('.kg-audio-duration');\\n const currentTimeContainer = audioElementContainer.querySelector('.kg-audio-current-time');\\n let playbackRates = [{\\n rate: 0.75,\\n label: '0.7×'\\n }, {\\n rate: 1.0,\\n label: '1×'\\n }, {\\n rate: 1.25,\\n label: '1.2×'\\n }, {\\n rate: 1.75,\\n label: '1.7×'\\n }, {\\n rate: 2.0,\\n label: '2×'\\n }];\\n\\n let raf = null;\\n let currentPlaybackRateIdx = 1;\\n\\n const whilePlaying = () => {\\n seekSlider.value = Math.floor(audio.currentTime);\\n currentTimeContainer.textContent = calculateTime(seekSlider.value);\\n audioPlayerContainer.style.setProperty('--seek-before-width', `${seekSlider.value / seekSlider.max * 100}%`);\\n raf = requestAnimationFrame(whilePlaying);\\n }\\n\\n const showRangeProgress = (rangeInput) => {\\n if (rangeInput === seekSlider) {\\n audioPlayerContainer.style.setProperty('--seek-before-width', rangeInput.value / rangeInput.max * 100 + '%');\\n }\\n else {\\n audioPlayerContainer.style.setProperty('--volume-before-width', rangeInput.value / rangeInput.max * 100 + '%');\\n }\\n }\\n\\n const calculateTime = (secs) => {\\n const minutes = Math.floor(secs / 60);\\n const seconds = Math.floor(secs % 60);\\n const returnedSeconds = seconds < 10 ? `0${seconds}` : `${seconds}`;\\n return `${minutes}:${returnedSeconds}`;\\n }\\n\\n const displayDuration = () => {\\n durationContainer.textContent = calculateTime(audio.duration);\\n }\\n\\n const setSliderMax = () => {\\n seekSlider.max = Math.floor(audio.duration);\\n }\\n\\n const displayBufferedAmount = () => {\\n if (audio.buffered.length > 0) {\\n const bufferedAmount = Math.floor(audio.buffered.end(audio.buffered.length - 1));\\n audioPlayerContainer.style.setProperty('--buffered-width', `${(bufferedAmount / seekSlider.max) * 100}%`);\\n }\\n }\\n\\n if (audio.readyState > 0) {\\n displayDuration();\\n setSliderMax();\\n displayBufferedAmount();\\n } else {\\n audio.addEventListener('loadedmetadata', () => {\\n displayDuration();\\n setSliderMax();\\n displayBufferedAmount();\\n });\\n }\\n\\n playIconContainer.addEventListener('click', () => {\\n playIconContainer.classList.add(\\\"kg-audio-hide\\\");\\n pauseIconContainer.classList.remove(\\\"kg-audio-hide\\\");\\n audio.play();\\n requestAnimationFrame(whilePlaying);\\n });\\n\\n pauseIconContainer.addEventListener('click', () => {\\n pauseIconContainer.classList.add(\\\"kg-audio-hide\\\");\\n playIconContainer.classList.remove(\\\"kg-audio-hide\\\");\\n audio.pause();\\n cancelAnimationFrame(raf);\\n });\\n\\n muteIconContainer.addEventListener('click', () => {\\n muteIconContainer.classList.add(\\\"kg-audio-hide\\\");\\n unmuteIconContainer.classList.remove(\\\"kg-audio-hide\\\");\\n audio.muted = false;\\n });\\n\\n unmuteIconContainer.addEventListener('click', () => {\\n unmuteIconContainer.classList.add(\\\"kg-audio-hide\\\");\\n muteIconContainer.classList.remove(\\\"kg-audio-hide\\\");\\n audio.muted = true;\\n });\\n\\n playbackRateContainer.addEventListener('click', () => {\\n let nextPlaybackRate = playbackRates[(currentPlaybackRateIdx + 1) % 5];\\n currentPlaybackRateIdx = currentPlaybackRateIdx + 1;\\n audio.playbackRate = nextPlaybackRate.rate;\\n playbackRateContainer.textContent = nextPlaybackRate.label;\\n });\\n\\n audio.addEventListener('progress', displayBufferedAmount);\\n\\n seekSlider.addEventListener('input', (e) => {\\n showRangeProgress(e.target);\\n currentTimeContainer.textContent = calculateTime(seekSlider.value);\\n if (!audio.paused) {\\n cancelAnimationFrame(raf);\\n }\\n });\\n\\n seekSlider.addEventListener('change', () => {\\n audio.currentTime = seekSlider.value;\\n if (!audio.paused) {\\n requestAnimationFrame(whilePlaying);\\n }\\n });\\n\\n volumeSlider.addEventListener('input', (e) => {\\n const value = e.target.value;\\n showRangeProgress(e.target);\\n audio.volume = value / 100;\\n });\\n }\\n\\n const audioCardElements = document.querySelectorAll('.kg-audio-card');\\n\\n for (let i = 0; i < audioCardElements.length; i++) {\\n handleAudioPlayer(audioCardElements[i]);\\n }\\n})();\\n\"","export default \"(function() {\\n const images = document.querySelectorAll('.kg-gallery-image img');\\n images.forEach(function (image) {\\n const container = image.closest('.kg-gallery-image');\\n const width = image.attributes.width.value;\\n const height = image.attributes.height.value;\\n const ratio = width / height;\\n container.style.flex = ratio + ' 1 0%';\\n })\\n})();\\n\"","export default \"(function() {\\n const toggleHeadingElements = document.getElementsByClassName(\\\"kg-toggle-heading\\\");\\n\\n const toggleFn = function(event) {\\n const targetElement = event.target;\\n const parentElement = targetElement.closest('.kg-toggle-card');\\n var toggleState = parentElement.getAttribute(\\\"data-kg-toggle-state\\\");\\n if (toggleState === 'close') {\\n parentElement.setAttribute('data-kg-toggle-state', 'open');\\n } else {\\n parentElement.setAttribute('data-kg-toggle-state', 'close');\\n }\\n };\\n\\n for (let i = 0; i < toggleHeadingElements.length; i++) {\\n toggleHeadingElements[i].addEventListener('click', toggleFn, false);\\n }\\n})();\\n\"","export default \"(function() {\\n const handleVideoPlayer = function (videoElementContainer) {\\n const videoPlayer = videoElementContainer.querySelector('.kg-video-player');\\n const videoPlayerContainer = videoElementContainer.querySelector('.kg-video-player-container');\\n const playIconContainer = videoElementContainer.querySelector('.kg-video-play-icon');\\n const pauseIconContainer = videoElementContainer.querySelector('.kg-video-pause-icon');\\n const seekSlider = videoElementContainer.querySelector('.kg-video-seek-slider');\\n const playbackRateContainer = videoElementContainer.querySelector('.kg-video-playback-rate');\\n const muteIconContainer = videoElementContainer.querySelector('.kg-video-mute-icon');\\n const unmuteIconContainer = videoElementContainer.querySelector('.kg-video-unmute-icon');\\n const volumeSlider = videoElementContainer.querySelector('.kg-video-volume-slider');\\n const videoEl = videoElementContainer.querySelector('video');\\n const durationContainer = videoElementContainer.querySelector('.kg-video-duration');\\n const currentTimeContainer = videoElementContainer.querySelector('.kg-video-current-time');\\n const largePlayIcon = videoElementContainer.querySelector('.kg-video-large-play-icon');\\n const videoOverlay = videoElementContainer.querySelector('.kg-video-overlay');\\n let playbackRates = [{\\n rate: 0.75,\\n label: '0.7×'\\n }, {\\n rate: 1.0,\\n label: '1×'\\n }, {\\n rate: 1.25,\\n label: '1.2×'\\n }, {\\n rate: 1.75,\\n label: '1.7×'\\n }, {\\n rate: 2.0,\\n label: '2×'\\n }];\\n\\n let raf = null;\\n let currentPlaybackRateIdx = 1;\\n if (!!videoEl.loop) {\\n largePlayIcon.classList.add(\\\"kg-video-hide-animated\\\");\\n videoOverlay.classList.add(\\\"kg-video-hide-animated\\\");\\n }\\n const whilePlaying = () => {\\n seekSlider.value = Math.floor(videoEl.currentTime);\\n currentTimeContainer.textContent = calculateTime(seekSlider.value);\\n videoPlayer.style.setProperty('--seek-before-width', `${seekSlider.value / seekSlider.max * 100}%`);\\n raf = requestAnimationFrame(whilePlaying);\\n }\\n\\n const showRangeProgress = (rangeInput) => {\\n if (rangeInput === seekSlider) {\\n videoPlayer.style.setProperty('--seek-before-width', rangeInput.value / rangeInput.max * 100 + '%');\\n }\\n else {\\n videoPlayer.style.setProperty('--volume-before-width', rangeInput.value / rangeInput.max * 100 + '%');\\n }\\n }\\n\\n const calculateTime = (secs) => {\\n const minutes = Math.floor(secs / 60);\\n const seconds = Math.floor(secs % 60);\\n const returnedSeconds = seconds < 10 ? `0${seconds}` : `${seconds}`;\\n return `${minutes}:${returnedSeconds}`;\\n }\\n\\n const displayDuration = () => {\\n durationContainer.textContent = calculateTime(videoEl.duration);\\n }\\n\\n const setSliderMax = () => {\\n seekSlider.max = Math.floor(videoEl.duration);\\n }\\n\\n const displayBufferedAmount = () => {\\n if (videoEl.buffered.length > 0) {\\n const bufferedAmount = Math.floor(videoEl.buffered.end(videoEl.buffered.length - 1));\\n videoPlayer.style.setProperty('--buffered-width', `${(bufferedAmount / seekSlider.max) * 100}%`);\\n }\\n }\\n\\n if (videoEl.readyState > 0) {\\n displayDuration();\\n setSliderMax();\\n displayBufferedAmount();\\n if (videoEl.autoplay) {\\n raf = requestAnimationFrame(whilePlaying);\\n playIconContainer.classList.add(\\\"kg-video-hide\\\");\\n pauseIconContainer.classList.remove(\\\"kg-video-hide\\\");\\n }\\n if (videoEl.muted) {\\n unmuteIconContainer.classList.add(\\\"kg-video-hide\\\");\\n muteIconContainer.classList.remove(\\\"kg-video-hide\\\");\\n }\\n } else {\\n videoEl.addEventListener('loadedmetadata', () => {\\n displayDuration();\\n setSliderMax();\\n displayBufferedAmount();\\n if (videoEl.autoplay) {\\n raf = requestAnimationFrame(whilePlaying);\\n playIconContainer.classList.add(\\\"kg-video-hide\\\");\\n pauseIconContainer.classList.remove(\\\"kg-video-hide\\\");\\n }\\n if (videoEl.muted) {\\n unmuteIconContainer.classList.add(\\\"kg-video-hide\\\");\\n muteIconContainer.classList.remove(\\\"kg-video-hide\\\");\\n }\\n });\\n }\\n\\n videoElementContainer.onmouseover = () => {\\n if (!videoEl.loop) {\\n videoPlayerContainer.classList.remove(\\\"kg-video-hide-animated\\\");\\n }\\n }\\n\\n videoElementContainer.onmouseleave = () => {\\n const isPlaying = !!(videoEl.currentTime > 0 && !videoEl.paused && !videoEl.ended && videoEl.readyState > 2);\\n if (isPlaying) {\\n videoPlayerContainer.classList.add(\\\"kg-video-hide-animated\\\");\\n }\\n }\\n\\n videoElementContainer.addEventListener('click', () => {\\n if (!videoEl.loop) {\\n const isPlaying = !!(videoEl.currentTime > 0 && !videoEl.paused && !videoEl.ended && videoEl.readyState > 2);\\n if (isPlaying) {\\n handleOnPause();\\n } else {\\n handleOnPlay();\\n }\\n }\\n });\\n\\n videoEl.onplay = () => {\\n largePlayIcon.classList.add(\\\"kg-video-hide-animated\\\");\\n videoOverlay.classList.add(\\\"kg-video-hide-animated\\\");\\n playIconContainer.classList.add(\\\"kg-video-hide\\\");\\n pauseIconContainer.classList.remove(\\\"kg-video-hide\\\");\\n };\\n\\n const handleOnPlay = () => {\\n largePlayIcon.classList.add(\\\"kg-video-hide-animated\\\");\\n videoOverlay.classList.add(\\\"kg-video-hide-animated\\\");\\n playIconContainer.classList.add(\\\"kg-video-hide\\\");\\n pauseIconContainer.classList.remove(\\\"kg-video-hide\\\");\\n videoEl.play();\\n raf = requestAnimationFrame(whilePlaying);\\n }\\n\\n const handleOnPause = () => {\\n pauseIconContainer.classList.add(\\\"kg-video-hide\\\");\\n playIconContainer.classList.remove(\\\"kg-video-hide\\\");\\n videoEl.pause();\\n cancelAnimationFrame(raf);\\n }\\n\\n largePlayIcon.addEventListener('click', (event) => {\\n event.stopPropagation();\\n handleOnPlay();\\n });\\n\\n playIconContainer.addEventListener('click', (event) => {\\n event.stopPropagation();\\n handleOnPlay();\\n });\\n\\n pauseIconContainer.addEventListener('click', (event) => {\\n event.stopPropagation();\\n handleOnPause();\\n });\\n\\n muteIconContainer.addEventListener('click', (event) => {\\n event.stopPropagation();\\n muteIconContainer.classList.add(\\\"kg-video-hide\\\");\\n unmuteIconContainer.classList.remove(\\\"kg-video-hide\\\");\\n videoEl.muted = false;\\n });\\n\\n unmuteIconContainer.addEventListener('click', (event) => {\\n event.stopPropagation();\\n unmuteIconContainer.classList.add(\\\"kg-video-hide\\\");\\n muteIconContainer.classList.remove(\\\"kg-video-hide\\\");\\n videoEl.muted = true;\\n });\\n\\n playbackRateContainer.addEventListener('click', (event) => {\\n event.stopPropagation();\\n let nextPlaybackRate = playbackRates[(currentPlaybackRateIdx + 1) % 5];\\n currentPlaybackRateIdx = currentPlaybackRateIdx + 1;\\n videoEl.playbackRate = nextPlaybackRate.rate;\\n playbackRateContainer.textContent = nextPlaybackRate.label;\\n });\\n\\n videoEl.addEventListener('progress', displayBufferedAmount);\\n\\n seekSlider.addEventListener('input', (e) => {\\n e.stopPropagation();\\n showRangeProgress(e.target);\\n currentTimeContainer.textContent = calculateTime(seekSlider.value);\\n if (!videoEl.paused) {\\n cancelAnimationFrame(raf);\\n }\\n });\\n\\n seekSlider.addEventListener('change', (event) => {\\n event.stopPropagation();\\n videoEl.currentTime = seekSlider.value;\\n if (!videoEl.paused) {\\n requestAnimationFrame(whilePlaying);\\n }\\n });\\n\\n volumeSlider.addEventListener('click', (event) => {\\n event.stopPropagation();\\n });\\n\\n seekSlider.addEventListener('click', (event) => {\\n event.stopPropagation();\\n });\\n\\n volumeSlider.addEventListener('input', (e) => {\\n e.stopPropagation();\\n const value = e.target.value;\\n showRangeProgress(e.target);\\n videoEl.volume = value / 100;\\n });\\n }\\n\\n const setVideoContainerAspectRatio = function(videoCard) {\\n const container = videoCard.querySelector('.kg-video-container');\\n const video = container.querySelector('video');\\n if (container && video.width && video.height) {\\n const aspectRatio = (video.height / video.width * 100).toFixed(3);\\n container.style.paddingBottom = `${aspectRatio}%`;\\n }\\n };\\n\\n const videoCardElements = document.querySelectorAll('.kg-video-card');\\n\\n for (let i = 0; i < videoCardElements.length; i++) {\\n setVideoContainerAspectRatio(videoCardElements[i]);\\n handleVideoPlayer(videoCardElements[i]);\\n }\\n})();\\n\"","export default \".kg-audio-card,\\n.kg-audio-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-audio-card {\\n display: flex;\\n width: 100%;\\n min-height: 96px;\\n border-radius: 6px;\\n padding: 4px;\\n background: #fff;\\n color: #222;\\n box-shadow: inset 0 0 0 1px rgba(124, 139, 154, 0.25);\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Oxygen\\\", \\\"Ubuntu\\\", \\\"Cantarell\\\", \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.kg-audio-card+.kg-audio-card {\\n margin-top: 1em;\\n}\\n\\n.kg-audio-thumbnail {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n width: 80px;\\n min-width: 80px;\\n margin: 8px;\\n background: transparent;\\n object-fit: cover;\\n aspect-ratio: 1/1;\\n border-radius: 3px;\\n}\\n\\n.kg-audio-thumbnail.placeholder {\\n background: var(--ghost-accent-color);\\n}\\n\\n.kg-audio-thumbnail.placeholder svg {\\n width: 24px;\\n height: 24px;\\n fill: white;\\n}\\n\\n.kg-audio-player-container {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n justify-content: space-between;\\n width: 100%;\\n --seek-before-width: 0%;\\n --volume-before-width: 100%;\\n --buffered-width: 0%;\\n}\\n\\n.kg-audio-title {\\n width: 100%;\\n margin: 8px 0 0 0;\\n padding: 8px 12px;\\n border: none;\\n font-family: inherit;\\n font-size: 16px;\\n font-weight: 600;\\n line-height: 1.15em;\\n background: transparent;\\n}\\n\\n.kg-audio-player {\\n display: flex;\\n flex-grow: 1;\\n align-items: center;\\n padding: 8px 12px;\\n}\\n\\n.kg-audio-current-time {\\n min-width: 38px;\\n padding: 0 4px;\\n font-family: inherit;\\n font-size: 12.5px;\\n font-weight: 500;\\n line-height: 1em;\\n white-space: nowrap;\\n}\\n\\n.kg-audio-time {\\n width: 56px;\\n color: #ababab;\\n font-family: inherit;\\n font-size: 12.5px;\\n font-weight: 500;\\n line-height: 1em;\\n white-space: nowrap;\\n}\\n\\n.kg-audio-duration {\\n padding: 0 4px;\\n}\\n\\n.kg-audio-play-icon,\\n.kg-audio-pause-icon {\\n position: relative;\\n bottom: 1px;\\n padding: 0px 4px 0 0;\\n font-size: 0;\\n background: transparent;\\n}\\n\\n.kg-audio-hide {\\n display: none !important;\\n}\\n\\n.kg-audio-play-icon svg,\\n.kg-audio-pause-icon svg {\\n width: 14px;\\n height: 14px;\\n fill: currentColor;\\n}\\n\\n.kg-audio-seek-slider {\\n flex-grow: 1;\\n margin: 0 4px;\\n}\\n\\n@media (max-width: 640px) {\\n .kg-audio-seek-slider {\\n display: none;\\n }\\n}\\n\\n.kg-audio-playback-rate {\\n min-width: 37px;\\n padding: 0 4px;\\n font-family: inherit;\\n font-size: 12.5px;\\n font-weight: 600;\\n line-height: 1em;\\n text-align: left;\\n background: transparent;\\n white-space: nowrap;\\n}\\n\\n@media (max-width: 640px) {\\n .kg-audio-playback-rate {\\n padding-left: 8px;\\n }\\n}\\n\\n.kg-audio-mute-icon,\\n.kg-audio-unmute-icon {\\n position: relative;\\n bottom: -1px;\\n padding: 0 4px;\\n font-size: 0;\\n background: transparent;\\n}\\n\\n@media (max-width: 640px) {\\n .kg-audio-mute-icon,\\n .kg-audio-unmute-icon {\\n margin-left: auto;\\n }\\n}\\n\\n.kg-audio-mute-icon svg,\\n.kg-audio-unmute-icon svg {\\n width: 16px;\\n height: 16px;\\n fill: currentColor;\\n}\\n\\n.kg-audio-volume-slider {\\n width: 80px;\\n}\\n\\n@media (max-width: 400px) {\\n .kg-audio-volume-slider {\\n display: none;\\n }\\n}\\n\\n.kg-audio-seek-slider::before {\\n content: \\\"\\\";\\n position: absolute;\\n left: 0;\\n width: var(--seek-before-width) !important;\\n height: 4px;\\n cursor: pointer;\\n background-color: currentColor;\\n border-radius: 2px;\\n}\\n\\n.kg-audio-volume-slider::before {\\n content: \\\"\\\";\\n position: absolute;\\n left: 0;\\n width: var(--volume-before-width) !important;\\n height: 4px;\\n cursor: pointer;\\n background-color: currentColor;\\n border-radius: 2px;\\n}\\n\\n/* Resetting browser styles\\n/* --------------------------------------------------------------- */\\n\\n.kg-audio-player-container input[type=range] {\\n position: relative;\\n -webkit-appearance: none;\\n background: transparent;\\n}\\n\\n.kg-audio-player-container input[type=range]:focus {\\n outline: none;\\n}\\n\\n.kg-audio-player-container input[type=range]::-webkit-slider-thumb {\\n -webkit-appearance: none;\\n}\\n\\n.kg-audio-player-container input[type=range]::-ms-track {\\n cursor: pointer;\\n border-color: transparent;\\n color: transparent;\\n background: transparent;\\n}\\n\\n.kg-audio-player-container button {\\n display: flex;\\n align-items: center;\\n border: 0;\\n cursor: pointer;\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"] {\\n height: auto;\\n padding: 0;\\n border: 0;\\n}\\n\\n/* Chrome & Safari styles\\n/* --------------------------------------------------------------- */\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]::-webkit-slider-runnable-track {\\n width: 100%;\\n height: 4px;\\n cursor: pointer;\\n background: rgba(124, 139, 154, 0.25);\\n border-radius: 2px;\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]::-webkit-slider-thumb {\\n position: relative;\\n box-sizing: content-box;\\n width: 13px;\\n height: 13px;\\n margin: -5px 0 0 0;\\n border: 0;\\n cursor: pointer;\\n background: #fff;\\n border-radius: 50%;\\n box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]:active::-webkit-slider-thumb {\\n transform: scale(1.2);\\n}\\n\\n/* Firefox styles\\n/* --------------------------------------------------------------- */\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]::-moz-range-track {\\n width: 100%;\\n height: 4px;\\n cursor: pointer;\\n background: rgba(124, 139, 154, 0.25);\\n border-radius: 2px;\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]::-moz-range-progress {\\n background: currentColor;\\n border-radius: 2px;\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]::-moz-range-thumb {\\n box-sizing: content-box;\\n width: 13px;\\n height: 13px;\\n border: 0;\\n cursor: pointer;\\n background: #fff;\\n border-radius: 50%;\\n box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]:active::-moz-range-thumb {\\n transform: scale(1.2);\\n}\\n\\n/* Edge & IE styles\\n/* --------------------------------------------------------------- */\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]::-ms-track {\\n width: 100%;\\n height: 3px;\\n border: solid transparent;\\n color: transparent;\\n cursor: pointer;\\n background: transparent;\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]::-ms-fill-lower {\\n background: #fff;\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]::-ms-fill-upper {\\n background: currentColor;\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]::-ms-thumb {\\n box-sizing: content-box;\\n width: 13px;\\n height: 13px;\\n border: 0;\\n cursor: pointer;\\n background: #fff;\\n border-radius: 50%;\\n box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]:active::-ms-thumb {\\n transform: scale(1.2);\\n}\\n\"","export default \".kg-blockquote-alt {\\n font-size: 1.5em;\\n font-style: italic;\\n line-height: 1.7em;\\n text-align: center;\\n padding: 0 2.5em;\\n}\\n\\n@media (max-width: 800px) {\\n .kg-blockquote-alt {\\n font-size: 1.4em;\\n padding-left: 2em;\\n padding-right: 2em;\\n }\\n}\\n\\n@media (max-width: 600px) {\\n .kg-blockquote-alt {\\n font-size: 1.2em;\\n padding-left: 1.75em;\\n padding-right: 1.75em;\\n } \\n}\\n\"","export default \".kg-bookmark-card,\\n.kg-bookmark-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-bookmark-card,\\n.kg-bookmark-publisher {\\n position: relative;\\n /* width: 100%; */\\n}\\n\\n.kg-bookmark-card a.kg-bookmark-container,\\n.kg-bookmark-card a.kg-bookmark-container:hover {\\n display: flex;\\n background: #fff;\\n text-decoration: none;\\n border-radius: 6px;\\n border: 1px solid rgb(124 139 154 / 25%);\\n overflow: hidden;\\n color: #222;\\n}\\n\\n.kg-bookmark-content {\\n display: flex;\\n flex-direction: column;\\n flex-grow: 1;\\n flex-basis: 100%;\\n align-items: flex-start;\\n justify-content: flex-start;\\n padding: 20px;\\n overflow: hidden;\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Oxygen\\\", \\\"Ubuntu\\\", \\\"Cantarell\\\", \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.kg-bookmark-title {\\n font-size: 15px;\\n line-height: 1.4em;\\n font-weight: 600;\\n}\\n\\n.kg-bookmark-description {\\n display: -webkit-box;\\n font-size: 14px;\\n line-height: 1.5em;\\n margin-top: 3px;\\n font-weight: 400;\\n max-height: 44px;\\n overflow-y: hidden;\\n opacity: 0.7;\\n -webkit-line-clamp: 2;\\n -webkit-box-orient: vertical;\\n}\\n\\n.kg-bookmark-metadata {\\n display: flex;\\n align-items: center;\\n margin-top: 22px;\\n width: 100%;\\n font-size: 14px;\\n font-weight: 500;\\n white-space: nowrap;\\n}\\n\\n.kg-bookmark-metadata > *:not(img) {\\n opacity: 0.7;\\n}\\n\\n.kg-bookmark-icon {\\n width: 20px;\\n height: 20px;\\n margin-right: 6px;\\n}\\n\\n.kg-bookmark-author,\\n.kg-bookmark-publisher {\\n display: inline;\\n}\\n\\n.kg-bookmark-publisher {\\n text-overflow: ellipsis;\\n overflow: hidden;\\n max-width: 240px;\\n white-space: nowrap;\\n display: block;\\n line-height: 1.65em;\\n}\\n\\n.kg-bookmark-metadata > span:nth-of-type(2) {\\n font-weight: 400;\\n}\\n\\n.kg-bookmark-metadata > span:nth-of-type(2):before {\\n content: \\\"•\\\";\\n margin: 0 6px;\\n}\\n\\n.kg-bookmark-metadata > span:last-of-type {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n\\n.kg-bookmark-thumbnail {\\n position: relative;\\n flex-grow: 1;\\n min-width: 33%;\\n}\\n\\n.kg-bookmark-thumbnail img {\\n width: 100%;\\n height: 100%;\\n object-fit: cover;\\n position: absolute;\\n top: 0;\\n left: 0;\\n border-radius: 0 2px 2px 0;\\n}\\n\"","export default \".kg-button-card,\\n.kg-button-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-button-card {\\n display: flex;\\n position: static;\\n align-items: center;\\n width: 100%;\\n justify-content: center;\\n}\\n\\n.kg-button-card.kg-align-left {\\n justify-content: flex-start;\\n}\\n\\n.kg-button-card a.kg-btn {\\n display: flex;\\n position: static;\\n align-items: center;\\n padding: 0 1.2em;\\n height: 2.4em;\\n line-height: 1em;\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Oxygen\\\", \\\"Ubuntu\\\", \\\"Cantarell\\\", \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 0.95em;\\n font-weight: 600;\\n text-decoration: none;\\n border-radius: 5px;\\n transition: opacity 0.2s ease-in-out;\\n}\\n\\n.kg-button-card a.kg-btn:hover {\\n opacity: 0.85;\\n}\\n\\n.kg-button-card a.kg-btn-accent {\\n background-color: var(--ghost-accent-color);\\n color: #fff;\\n}\"","export default \".kg-callout-card,\\n.kg-callout-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-callout-card {\\n display: flex;\\n padding: 1.2em 1.6em;\\n border-radius: 8px;\\n}\\n\\n.kg-callout-card-grey {\\n background: rgba(124, 139, 154, 0.13);\\n}\\n\\n.kg-callout-card-white {\\n background: transparent;\\n box-shadow: inset 0 0 0 1px rgba(124, 139, 154, 0.2);\\n}\\n\\n.kg-callout-card-blue {\\n background: rgba(33, 172, 232, 0.12);\\n}\\n\\n.kg-callout-card-green {\\n background: rgba(52, 183, 67, 0.12);\\n}\\n\\n.kg-callout-card-yellow {\\n background: rgba(240, 165, 15, 0.13);\\n}\\n\\n.kg-callout-card-red {\\n background: rgba(209, 46, 46, 0.11);\\n}\\n\\n.kg-callout-card-pink {\\n background: rgba(225, 71, 174, 0.11);\\n}\\n\\n.kg-callout-card-purple {\\n background: rgba(135, 85, 236, 0.12);\\n}\\n\\n.kg-callout-card-accent {\\n background: var(--ghost-accent-color);\\n color: #fff;\\n}\\n\\n.kg-callout-card.kg-callout-card-accent a {\\n color: #fff;\\n text-decoration: underline;\\n}\\n\\n.kg-callout-card div.kg-callout-emoji {\\n padding-right: .8em;\\n line-height: 1.25em;\\n font-size: 1.15em;\\n}\\n\\n.kg-callout-card div.kg-callout-text {\\n font-size: .95em;\\n line-height: 1.5em;\\n}\\n\\n.kg-callout-card + .kg-callout-card {\\n margin-top: 1em;\\n}\"","export default \".kg-collection-card {\\n width: 100%;\\n margin-top: 6vmin;\\n}\\n\\n.kg-collection-card + * { \\n margin-top: 6vmin; \\n}\\n\\n.kg-collection-card-title {\\n margin: .8rem 0 1.6rem 0;\\n font-size: 1.5rem;\\n font-weight: 700;\\n text-transform: uppercase;\\n}\\n\\na.kg-collection-card-post-wrapper {\\n text-decoration: none;\\n color: var(--text-color);\\n}\\n\\na.kg-collection-card-post-wrapper:hover {\\n opacity: 1;\\n}\\n\\n\\n.kg-collection-card-post {\\n display: flex;\\n gap: 3.2rem;\\n}\\n\\n.kg-collection-card-img {\\n position: relative;\\n aspect-ratio: 3/2;\\n}\\n\\n.kg-collection-card-img img {\\n position: absolute;\\n inset: 0;\\n width: 100%;\\n height: 100%;\\n object-fit: cover;\\n}\\n\\na.kg-collection-card-post-wrapper:hover img {\\n opacity: .92;\\n transition: all .2s ease;\\n}\\n\\n.kg-collection-card-content {\\n display: flex;\\n flex-direction: column;\\n font-size: 1.6rem;\\n}\\n\\nh2.kg-collection-card-post-title {\\n margin: 0;\\n font-size: 2.4rem;\\n overflow: hidden;\\n display: -webkit-box;\\n -webkit-box-orient: vertical;\\n -webkit-line-clamp: 2;\\n}\\n\\np.kg-collection-card-post-excerpt {\\n margin-top: 1.2rem;\\n overflow: hidden;\\n display: -webkit-box;\\n -webkit-box-orient: vertical;\\n -webkit-line-clamp: 2;\\n line-height: 1.4;\\n}\\n\\n.kg-collection-card-post-meta {\\n display: flex;\\n opacity: .5;\\n margin-top: 1.2rem;\\n font-size: 1.3rem;\\n font-weight: 500;\\n}\\n\\n/* List layout */\\n\\n.kg-collection-card-list {\\n display: flex;\\n flex-direction: column;\\n gap: 3.2rem;\\n}\\n\\n@media (max-width: 767px) {\\n .kg-collection-card-list .kg-collection-card-post {\\n flex-direction: column;\\n }\\n}\\n\\n.kg-collection-card-list .kg-collection-card-img {\\n flex: 0 0 30%;\\n}\\n\\n/* Grid layout */\\n\\n.kg-collection-card-grid {\\n display: grid;\\n grid-template-columns: repeat(1,minmax(0,1fr));\\n gap: 2.4rem;\\n}\\n\\n@media (min-width: 640px) {\\n .kg-collection-card-grid:not(.columns-1) {\\n grid-template-columns: repeat(2,minmax(0,1fr));\\n }\\n}\\n\\n@media (min-width: 1024px) {\\n .kg-collection-card-grid:not(.columns-1):not(.columns-2) {\\n grid-template-columns: repeat(3,minmax(0,1fr));\\n gap: 3.2rem\\n }\\n\\n .kg-collection-card-grid.columns-1 {\\n gap: 4.8rem\\n }\\n\\n .kg-collection-card-grid.columns-2 {\\n gap: 4rem\\n }\\n}\\n\\n@media (min-width: 1280px) {\\n .kg-collection-card-grid:not(.columns-1):not(.columns-2):not(.columns-3) {\\n grid-template-columns: repeat(4,minmax(0,1fr));\\n }\\n}\\n\\n.kg-collection-card-grid .kg-collection-card-post {\\n flex-direction: column;\\n gap: 1.2rem;\\n}\\n\\n@media (min-width: 1024px) {\\n .kg-collection-card-grid.columns-1 .kg-collection-card-post {\\n gap: 2rem\\n }\\n\\n .kg-collection-card-grid.columns-2 .kg-collection-card-post {\\n gap: 1.6rem\\n }\\n}\\n\\n.kg-collection-card-grid.columns-1 .kg-collection-card-img,\\n.kg-collection-card-grid.columns-2 .kg-collection-card-img {\\n aspect-ratio: 16/9;\\n}\\n\\n.kg-collection-card-grid .kg-collection-card-content {\\n font-size: 1.5rem;\\n}\\n\\n@media (min-width: 640px) {\\n .kg-collection-card-grid .kg-collection-card-content {\\n font-size: 1.6rem;\\n }\\n}\\n\\n@media (min-width: 1024px) {\\n .kg-collection-card-grid.columns-1 .kg-collection-card-content {\\n font-size: 1.8rem;\\n }\\n\\n .kg-collection-card-grid.columns-3 .kg-collection-card-content,\\n .kg-collection-card-grid.columns-4 .kg-collection-card-content {\\n font-size: 1.5rem;\\n }\\n}\\n\\n.kg-collection-card-grid h2.kg-collection-card-post-title {\\n font-size: 1.7rem;\\n}\\n\\n.kg-collection-card-grid .kg-collection-card-post-meta {\\n font-size: 1.25rem;\\n}\\n\\n@media (min-width: 640px) {\\n .kg-collection-card-grid h2.kg-collection-card-post-title {\\n font-size: 1.9rem;\\n }\\n\\n .kg-collection-card-grid.columns-1 h2.kg-collection-card-post-title {\\n font-size: 2.4rem;\\n }\\n\\n .kg-collection-card-grid:not(.columns-3):not(.columns-4) .kg-collection-card-post-meta {\\n font-size: 1.3rem;\\n }\\n}\\n\\n@media (min-width: 1024px) {\\n .kg-collection-card-grid.columns-1 h2.kg-collection-card-post-title {\\n font-size: 3.6rem;\\n }\\n\\n .kg-collection-card-grid.columns-2 h2.kg-collection-card-post-title {\\n font-size: 2.4rem;\\n }\\n\\n .kg-collection-card-grid.columns-1 .kg-collection-card-post-meta {\\n font-size: 1.4rem;\\n }\\n}\\n\\n@media (min-width: 1280px) {\\n .kg-collection-card-grid.columns-4 h2.kg-collection-card-post-title {\\n font-size: 1.7rem;\\n }\\n}\"","export default \".kg-cta-card,\\n.kg-cta-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-cta-card {\\n display: flex;\\n flex-direction: column;\\n border-radius: 8px;\\n}\\n\\n.kg-cta-bg-grey {\\n background: rgba(151, 163, 175, 0.14)\\n}\\n\\n.kg-cta-bg-white {\\n background: transparent;\\n box-shadow: inset 0 0 0 1px rgba(124, 139, 154, 0.2);\\n}\\n\\n.kg-cta-bg-blue {\\n background: rgba(33, 172, 232, 0.12);\\n}\\n\\n.kg-cta-bg-green {\\n background: rgba(52, 183, 67, 0.12);\\n}\\n\\n.kg-cta-bg-yellow {\\n background: rgba(240, 165, 15, 0.13);\\n}\\n\\n.kg-cta-bg-red {\\n background: rgba(209, 46, 46, 0.11);\\n}\\n\\n.kg-cta-bg-pink {\\n background: rgba(225, 71, 174, 0.11);\\n}\\n\\n.kg-cta-bg-purple {\\n background: rgba(135, 85, 236, 0.12);\\n}\\n\\n.kg-cta-sponsor-label-wrapper {\\n margin: 0 1.5em;\\n padding: .7em 0;\\n border-bottom: 1px solid rgba(124, 139, 154, 0.2);\\n}\\n\\n@media (max-width: 600px) {\\n .kg-cta-sponsor-label-wrapper {\\n margin: 0 1.25em;\\n padding: .5em 0;\\n }\\n}\\n\\n.kg-cta-bg-none .kg-cta-sponsor-label-wrapper {\\n margin: 0;\\n padding-top: 0;\\n}\\n\\n.kg-cta-has-img .kg-cta-sponsor-label-wrapper:not(.kg-cta-bg-none .kg-cta-sponsor-label-wrapper):not(.kg-cta-minimal .kg-cta-sponsor-label-wrapper),\\n.kg-cta-bg-none.kg-cta-no-dividers .kg-cta-sponsor-label-wrapper {\\n border-bottom: 0;\\n}\\n\\n.kg-cta-sponsor-label {\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Oxygen\\\", \\\"Ubuntu\\\", \\\"Cantarell\\\", \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 12px;\\n font-weight: 600;\\n text-transform: uppercase;\\n text-wrap: pretty;\\n}\\n\\n.kg-cta-sponsor-label span:not(a span) {\\n color: color-mix(in srgb, currentColor 45%, transparent);\\n}\\n\\n.kg-cta-sponsor-label a,\\n.kg-cta-sponsor-label a span {\\n color: currentColor;\\n transition: opacity 0.15s ease-in-out;\\n}\\n\\n.kg-cta-sponsor-label a:hover,\\n.kg-cta-sponsor-label a:hover span {\\n color: currentColor;\\n opacity: 0.85;\\n}\\n\\n.kg-cta-link-accent .kg-cta-sponsor-label a {\\n color: var(--ghost-accent-color);\\n}\\n\\n.kg-cta-content {\\n display: flex;\\n padding: 1.5em;\\n gap: 1.5em;\\n}\\n\\n@media (max-width: 600px) {\\n .kg-cta-content {\\n padding: 1.25em;\\n gap: 1.25em;\\n }\\n}\\n\\n.kg-cta-has-img .kg-cta-sponsor-label-wrapper + .kg-cta-content:not(.kg-cta-bg-none .kg-cta-content):not(.kg-cta-minimal .kg-cta-content) {\\n padding-top: 0;\\n}\\n\\n.kg-cta-bg-none .kg-cta-content {\\n padding: 1.5em 0;\\n border-bottom: 1px solid rgba(124, 139, 154, 0.2);\\n}\\n\\n.kg-cta-bg-none.kg-cta-no-dividers .kg-cta-content {\\n padding: 0;\\n border-bottom: none;\\n}\\n\\n.kg-cta-bg-none:not(.kg-cta-no-dividers) .kg-cta-content:not(.kg-cta-sponsor-label-wrapper + .kg-cta-content) {\\n border-top: 1px solid rgba(124, 139, 154, 0.2);\\n}\\n\\n@media (max-width: 600px) {\\n .kg-cta-bg-none .kg-cta-content {\\n padding: 1.25em 0;\\n }\\n}\\n\\n.kg-cta-minimal .kg-cta-content {\\n flex-direction: row;\\n}\\n\\n@media (max-width: 600px) {\\n .kg-cta-minimal .kg-cta-content {\\n flex-direction: column;\\n gap: 1.6rem;\\n }\\n}\\n\\n.kg-cta-immersive .kg-cta-content {\\n flex-direction: column;\\n}\\n\\n.kg-cta-content-inner {\\n display: flex;\\n flex-direction: column;\\n gap: 1.5em;\\n}\\n\\n@media (max-width: 600px) {\\n .kg-cta-content-inner {\\n gap: 1.25em;\\n }\\n}\\n\\n.kg-cta-immersive.kg-cta-centered .kg-cta-content-inner {\\n align-items: center;\\n}\\n\\n.kg-cta-image-container {\\n flex-shrink: 0;\\n}\\n\\n.kg-cta-image-container img {\\n width: 100%;\\n height: auto;\\n margin: 0;\\n object-fit: cover;\\n border-radius: 6px;\\n}\\n\\n\\n.kg-cta-minimal .kg-cta-image-container img {\\n width: 64px;\\n height: 64px;\\n}\\n\\n@media (max-width: 600px) {\\n .kg-cta-minimal .kg-cta-image-container img {\\n width: 52px;\\n height: 52px;\\n }\\n}\\n\\n.kg-cta-text p {\\n margin: 0;\\n line-height: 1.5em;\\n text-wrap: pretty;\\n}\\n\\n.kg-cta-bg-none .kg-cta-text p {\\n line-height: unset;\\n}\\n\\n.kg-cta-immersive.kg-cta-centered .kg-cta-text {\\n text-align: center;\\n}\\n\\n.kg-cta-text p + p {\\n margin-top: 1.25em;\\n}\\n\\n.kg-cta-text a {\\n color: currentColor;\\n transition: opacity 0.15s ease-in-out;\\n}\\n\\n.kg-cta-text a:hover {\\n color: currentColor;\\n opacity: 0.85;\\n}\\n\\n.kg-cta-link-accent .kg-cta-text a {\\n color: var(--ghost-accent-color);\\n}\\n\\na.kg-cta-button {\\n display: flex;\\n position: static;\\n align-items: center;\\n justify-content: center;\\n padding: 0 1em;\\n height: 2.5em;\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Oxygen\\\", \\\"Ubuntu\\\", \\\"Cantarell\\\", \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 0.95em;\\n font-weight: 500;\\n line-height: 1.65;\\n text-decoration: none;\\n border-radius: 6px;\\n transition: opacity 0.15s ease-in-out;\\n}\\n\\na.kg-cta-button:hover {\\n opacity: 0.85;\\n}\\n\\na.kg-cta-button.kg-style-accent {\\n background-color: var(--ghost-accent-color);\\n}\\n\\na.kg-cta-button {\\n width: max-content;\\n}\\n\\n.kg-cta-immersive.kg-cta-has-img a.kg-cta-button {\\n width: 100%;\\n}\\n\\n\"","export default \".kg-file-card,\\n.kg-file-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-file-card {\\n display: flex;\\n}\\n\\n.kg-file-card a.kg-file-card-container {\\n display: flex;\\n align-items: stretch;\\n justify-content: space-between;\\n color: inherit;\\n padding: 12px;\\n min-height: 92px;\\n background: #fff;\\n color: #222;\\n border: 1px solid rgb(124 139 154 / 25%);\\n border-radius: 5px;\\n transition: all ease-in-out 0.35s;\\n text-decoration: none;\\n width: 100%;\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Oxygen\\\", \\\"Ubuntu\\\", \\\"Cantarell\\\", \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.kg-file-card a.kg-file-card-container:hover {\\n border: 1px solid rgb(124 139 154 / 35%);\\n}\\n\\n.kg-file-card-contents {\\n display: flex;\\n flex-direction: column;\\n justify-content: space-between;\\n margin: 4px 8px;\\n width: 100%\\n}\\n\\n.kg-file-card-title {\\n font-size: 16px;\\n font-weight: 600;\\n line-height: 1.3em;\\n}\\n\\n.kg-file-card-caption {\\n font-size: 14px;\\n line-height: 1.3em;\\n opacity: 0.7;\\n}\\n\\n.kg-file-card-title + .kg-file-card-caption {\\n flex-grow: 1;\\n margin-top: 3px;\\n}\\n\\n.kg-file-card-metadata {\\n display: inline;\\n font-size: 14px;\\n line-height: 1.3em;\\n margin-top: 5px;\\n}\\n\\n.kg-file-card-filename {\\n display: inline;\\n font-weight: 500;\\n}\\n\\n.kg-file-card-filesize {\\n display: inline-block;\\n font-size: 14px;\\n opacity: 0.6;\\n}\\n\\n.kg-file-card-filesize:before {\\n display: inline-block;\\n content: \\\"\\\\2022\\\";\\n margin-left: 6px;\\n margin-right: 6px;\\n}\\n\\n.kg-file-card-icon {\\n position: relative;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 80px;\\n min-width: 80px;\\n height: 100%;\\n min-height: 80px;\\n}\\n\\n.kg-file-card-icon:before {\\n position: absolute;\\n display: block;\\n content: \\\"\\\";\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n background: currentColor;\\n opacity: 0.06;\\n transition: opacity ease-in-out 0.35s;\\n border-radius: 3px;\\n}\\n\\n.kg-file-card a.kg-file-card-container:hover .kg-file-card-icon:before {\\n opacity: 0.08;\\n}\\n\\n.kg-file-card-icon svg {\\n width: 24px;\\n height: 24px;\\n color: var(--ghost-accent-color);\\n}\\n\\n/* Size variations */\\n.kg-file-card-medium a.kg-file-card-container {\\n min-height: 72px;\\n}\\n\\n.kg-file-card-medium .kg-file-card-caption {\\n opacity: 1.0;\\n font-weight: 500;\\n}\\n\\n.kg-file-card-small a.kg-file-card-container {\\n align-items: center;\\n min-height: 52px;\\n}\\n\\n.kg-file-card-small .kg-file-card-metadata {\\n font-size: 14px;\\n margin-top: 0;\\n}\\n\\n.kg-file-card-small .kg-file-card-icon svg {\\n width: 20px;\\n height: 20px;\\n}\\n\\n.kg-file-card + .kg-file-card {\\n margin-top: 1em;\\n}\\n\"","export default \".kg-gallery-card,\\n.kg-gallery-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-gallery-card,\\n.kg-image-card {\\n --gap: 1.2rem;\\n}\\n\\n.kg-image-card:not(.kg-card-hascaption) + .kg-image-card,\\n.kg-image-card:not(.kg-card-hascaption) + .kg-gallery-card,\\n.kg-gallery-card:not(.kg-card-hascaption) + .kg-image-card,\\n.kg-gallery-card:not(.kg-card-hascaption) + .kg-gallery-card {\\n margin-top: var(--gap);\\n}\\n\\n.kg-gallery-container {\\n position: relative;\\n}\\n\\n.kg-gallery-row {\\n display: flex;\\n flex-direction: row;\\n justify-content: center;\\n}\\n\\n.kg-gallery-image img {\\n display: block;\\n margin: 0;\\n width: 100%;\\n height: 100%;\\n}\\n\\n.kg-gallery-row:not(:first-of-type) {\\n margin: var(--gap) 0 0;\\n}\\n\\n.kg-gallery-image:not(:first-of-type) {\\n margin: 0 0 0 var(--gap);\\n}\\n\\n@media (max-width: 600px) {\\n .kg-gallery-card,\\n .kg-image-card {\\n --gap: 0.6rem;\\n }\\n}\\n\"","export default \".kg-header-card,\\n.kg-header-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-header-card {\\n padding: 12vmin 4em;\\n min-height: 60vh;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n text-align: center;\\n}\\n\\n.kg-header-card.kg-size-small {\\n padding-top: 14vmin;\\n padding-bottom: 14vmin;\\n min-height: 40vh;\\n}\\n\\n.kg-header-card.kg-size-large {\\n padding-top: 18vmin;\\n padding-bottom: 18vmin;\\n min-height: 80vh;\\n}\\n\\n.kg-header-card.kg-align-left {\\n text-align: left;\\n align-items: flex-start;\\n}\\n\\n.kg-header-card.kg-style-dark {\\n background: #151515;\\n color: #ffffff;\\n}\\n\\n.kg-header-card.kg-style-light {\\n background-color: #fafafa;\\n}\\n\\n.kg-header-card.kg-style-accent {\\n background-color: var(--ghost-accent-color);\\n}\\n\\n.kg-header-card.kg-style-image {\\n position: relative;\\n background-color: #e7e7e7;\\n background-size: cover;\\n background-position: center;\\n}\\n\\n.kg-header-card.kg-style-image::before {\\n position: absolute;\\n display: block;\\n content: \\\"\\\";\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n background: linear-gradient(0deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2));\\n}\\n\\n.kg-header-card h2.kg-header-card-header {\\n font-size: 5em;\\n font-weight: 700;\\n line-height: 1.1em;\\n letter-spacing: -0.01em;\\n margin: 0;\\n}\\n\\n.kg-header-card h2.kg-header-card-header strong {\\n font-weight: 800;\\n}\\n\\n.kg-header-card.kg-size-small h2.kg-header-card-header {\\n font-size: 4em;\\n}\\n\\n.kg-header-card.kg-size-large h2.kg-header-card-header {\\n font-size: 6em;\\n}\\n\\n.kg-header-card h3.kg-header-card-subheader {\\n font-size: 1.5em;\\n font-weight: 500;\\n line-height: 1.4em;\\n margin: 0;\\n max-width: 40em;\\n}\\n\\n.kg-header-card h2 + h3.kg-header-card-subheader {\\n margin: 0.35em 0 0;\\n}\\n\\n.kg-header-card h3.kg-header-card-subheader strong {\\n font-weight: 600;\\n}\\n\\n.kg-header-card.kg-size-small h3.kg-header-card-subheader {\\n font-size: 1.25em;\\n}\\n\\n.kg-header-card.kg-size-large h3.kg-header-card-subheader {\\n font-size: 1.75em;\\n}\\n\\n.kg-header-card:not(.kg-style-light) h2.kg-header-card-header,\\n.kg-header-card:not(.kg-style-light) h3.kg-header-card-subheader {\\n color: #ffffff;\\n}\\n\\n.kg-header-card.kg-style-accent h3.kg-header-card-subheader,\\n.kg-header-card.kg-style-image h3.kg-header-card-subheader {\\n opacity: 1.0;\\n}\\n\\n.kg-header-card.kg-style-image h2.kg-header-card-header,\\n.kg-header-card.kg-style-image h3.kg-header-card-subheader,\\n.kg-header-card.kg-style-image a.kg-header-card-button {\\n z-index: 999;\\n}\\n\\n.kg-header-card h2.kg-header-card-header a,\\n.kg-header-card h3.kg-header-card-subheader a {\\n color: var(--ghost-accent-color);\\n}\\n\\n.kg-header-card.kg-style-accent h2.kg-header-card-header a,\\n.kg-header-card.kg-style-accent h3.kg-header-card-subheader a,\\n.kg-header-card.kg-style-image h2.kg-header-card-header a,\\n.kg-header-card.kg-style-image h3.kg-header-card-subheader a {\\n color: #fff;\\n}\\n\\n.kg-header-card a.kg-header-card-button {\\n display: flex;\\n position: static;\\n align-items: center;\\n fill: #fff;\\n background: #fff;\\n border-radius: 3px;\\n outline: none;\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Oxygen\\\", \\\"Ubuntu\\\", \\\"Cantarell\\\", \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 1.05em;\\n font-weight: 600;\\n line-height: 1em;\\n text-align: center;\\n text-decoration: none;\\n letter-spacing: .2px;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n color: #151515;\\n height: 2.7em;\\n padding: 0 1.2em;\\n transition: opacity .2s ease;\\n}\\n\\n.kg-header-card h2 + a.kg-header-card-button,\\n.kg-header-card h3 + a.kg-header-card-button {\\n margin: 1.75em 0 0;\\n}\\n\\n.kg-header-card a.kg-header-card-button:hover {\\n opacity: 0.85;\\n}\\n\\n.kg-header-card.kg-size-large a.kg-header-card-button {\\n font-size: 1.1em;\\n height: 2.9em;\\n}\\n\\n.kg-header-card.kg-size-large h2 + a.kg-header-card-button,\\n.kg-header-card.kg-size-large h3 + a.kg-header-card-button {\\n margin-top: 2em;\\n}\\n\\n.kg-header-card.kg-size-small a.kg-header-card-button {\\n height: 2.4em;\\n font-size: 1em;\\n}\\n\\n.kg-header-card.kg-size-small h2 + a.kg-header-card-button,\\n.kg-header-card.kg-size-small h3 + a.kg-header-card-button {\\n margin-top: 1.5em;\\n}\\n\\n.kg-header-card.kg-style-image a.kg-header-card-button,\\n.kg-header-card.kg-style-dark a.kg-header-card-button {\\n background: #fff;\\n color: #151515;\\n}\\n\\n.kg-header-card.kg-style-light a.kg-header-card-button {\\n background: var(--ghost-accent-color);\\n color: #fff;\\n}\\n\\n.kg-header-card.kg-style-accent a.kg-header-card-button {\\n background: #fff;\\n color: #151515;\\n}\\n\\n@media (max-width: 640px) {\\n .kg-header-card {\\n padding-left: 1em;\\n padding-right: 1em;\\n }\\n\\n .kg-header-card h2.kg-header-card-header {\\n font-size: 3.5em;\\n }\\n\\n .kg-header-card.kg-size-large h2.kg-header-card-header {\\n font-size: 4em;\\n }\\n\\n .kg-header-card.kg-size-small h2.kg-header-card-header {\\n font-size: 3em;\\n }\\n\\n .kg-header-card h3.kg-header-card-subheader {\\n font-size: 1.25em;\\n }\\n\\n .kg-header-card.kg-size-large h3.kg-header-card-subheader {\\n font-size: 1.5em;\\n }\\n\\n .kg-header-card.kg-size-small h3.kg-header-card-subheader {\\n font-size: 1em;\\n }\\n}\\n\"","export default \".kg-header-card.kg-v2 {\\n position: relative;\\n padding: 0;\\n min-height: initial;\\n text-align: initial;\\n}\\n\\n.kg-header-card.kg-v2,\\n.kg-header-card.kg-v2 * {\\n box-sizing: border-box;\\n}\\n\\n.kg-header-card.kg-v2 a,\\n.kg-header-card.kg-v2 a span {\\n color: currentColor;\\n}\\n\\n.kg-header-card.kg-style-accent.kg-v2 {\\n background-color: var(--ghost-accent-color);\\n}\\n\\n.kg-header-card-content {\\n width: 100%;\\n}\\n\\n.kg-layout-split .kg-header-card-content {\\n display: grid;\\n grid-template-columns: 1fr 1fr;\\n}\\n\\n.kg-header-card-text {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n justify-content: center;\\n height: 100%;\\n padding: min(6.4vmax, 120px) min(4vmax, 80px);\\n background-size: cover;\\n background-position: center;\\n text-align: left;\\n}\\n\\n.kg-width-wide .kg-header-card-text {\\n padding: min(10vmax, 220px) min(6.4vmax, 140px);\\n}\\n\\n.kg-width-full .kg-header-card-text {\\n padding: min(12vmax, 260px) 0;\\n}\\n\\n.kg-layout-split .kg-header-card-text {\\n padding: min(12vmax, 260px) min(4vmax, 80px);\\n}\\n\\n.kg-layout-split.kg-content-wide .kg-header-card-text {\\n padding: min(10vmax, 220px) 0 min(10vmax, 220px) min(4vmax, 80px);\\n}\\n\\n.kg-layout-split.kg-content-wide.kg-swapped .kg-header-card-text {\\n padding: min(10vmax, 220px) min(4vmax, 80px) min(10vmax, 220px) 0;\\n}\\n\\n.kg-swapped .kg-header-card-text {\\n grid-row: 1;\\n}\\n\\n.kg-header-card-text.kg-align-center {\\n align-items: center;\\n text-align: center;\\n}\\n\\n.kg-header-card.kg-style-image h2.kg-header-card-heading,\\n.kg-header-card.kg-style-image .kg-header-card-subheading,\\n.kg-header-card.kg-style-image.kg-v2 .kg-header-card-button {\\n z-index: 999;\\n}\\n\\n/* Background image */\\n\\n.kg-header-card > picture > .kg-header-card-image {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n object-fit: cover;\\n object-position: center;\\n background-color: #FFFFFF;\\n pointer-events: none;\\n}\\n\\n/* Split layout image */\\n\\n.kg-header-card-content .kg-header-card-image {\\n width: 100%;\\n /* this will force the image to follow the signup card height */\\n height: 0;\\n min-height: 100%;\\n /**/\\n object-fit: cover;\\n object-position: center;\\n}\\n\\n.kg-content-wide .kg-header-card-content .kg-header-card-image {\\n height: 100%;\\n padding: 5.6em 0;\\n object-fit: contain;\\n}\\n\\n/* Heading */\\n\\n.kg-header-card h2.kg-header-card-heading {\\n margin: 0;\\n font-size: clamp(1.7em, 4vw, 2.5em);\\n font-weight: 700;\\n line-height: 1.05em;\\n letter-spacing: -0.01em;\\n}\\n\\n.kg-header-card.kg-width-wide h2.kg-header-card-heading {\\n font-size: clamp(1.7em, 5vw, 3.3em);\\n}\\n\\n.kg-header-card.kg-width-full h2.kg-header-card-heading {\\n font-size: clamp(1.9em, 5.6vw, 4.2em);\\n}\\n\\n.kg-header-card.kg-width-full.kg-layout-split h2.kg-header-card-heading {\\n font-size: clamp(1.9em, 4vw, 3.3em);\\n}\\n\\n/* Subheading */\\n\\n.kg-header-card-subheading {\\n margin: 0 0 2em;\\n}\\n\\n.kg-header-card .kg-header-card-subheading {\\n max-width: 40em;\\n margin: 0;\\n font-size: clamp(1.05em, 2vw, 1.4em);\\n font-weight: 500;\\n line-height: 1.2em;\\n}\\n\\n.kg-header-card h2 + .kg-header-card-subheading {\\n margin: 0.6em 0 0;\\n}\\n\\n.kg-header-card .kg-header-card-subheading strong {\\n font-weight: 600;\\n}\\n\\n.kg-header-card.kg-width-wide .kg-header-card-subheading {\\n font-size: clamp(1.05em, 2vw, 1.55em);\\n}\\n\\n.kg-header-card.kg-width-full .kg-header-card-subheading:not(.kg-layout-split .kg-header-card-subheading) {\\n max-width: min(65vmax, 1200px);\\n font-size: clamp(1.05em, 2vw, 1.7em);\\n}\\n\\n.kg-header-card.kg-width-full.kg-layout-split .kg-header-card-subheading {\\n font-size: clamp(1.05em, 2vw, 1.55em);\\n}\\n\\n.kg-header-card.kg-v2 .kg-header-card-button {\\n display: flex;\\n position: relative;\\n align-items: center;\\n height: 2.9em;\\n min-height: 46px;\\n padding: 0 1.2em;\\n outline: none;\\n border: none;\\n font-size: 1em;\\n font-weight: 600;\\n line-height: 1em;\\n text-align: center;\\n text-decoration: none;\\n letter-spacing: .2px;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n border-radius: 3px;\\n transition: opacity .2s ease;\\n}\\n\\n.kg-header-card.kg-v2 .kg-header-card-button.kg-style-accent {\\n background-color: var(--ghost-accent-color);\\n}\\n\\n.kg-header-card.kg-v2 h2 + .kg-header-card-button,\\n.kg-header-card.kg-v2 p + .kg-header-card-button {\\n margin: 1.5em 0 0;\\n}\\n\\n.kg-header-card.kg-v2 .kg-header-card-button:hover {\\n opacity: 0.85;\\n}\\n\\n.kg-header-card.kg-v2.kg-width-wide .kg-header-card-button {\\n font-size: 1.05em;\\n}\\n\\n.kg-header-card.kg-v2.kg-width-wide h2 + .kg-header-card-button,\\n.kg-header-card.kg-v2.kg-width-wide p + .kg-header-card-button {\\n margin-top: 1.75em;\\n}\\n\\n.kg-header-card.kg-v2.kg-width-full .kg-header-card-button {\\n font-size: 1.1em;\\n}\\n\\n.kg-header-card.kg-v2.kg-width-full h2 + .kg-header-card-button,\\n.kg-header-card.kg-v2.kg-width-full p + .kg-header-card-button {\\n margin-top: 2em;\\n}\\n\\n/* Responsive styles */\\n\\n@media (max-width: 640px) {\\n .kg-layout-split .kg-header-card-content {\\n grid-template-columns: 1fr;\\n }\\n\\n .kg-width-wide .kg-header-card-text {\\n padding: min(6.4vmax, 120px) min(4vmax, 80px);\\n }\\n\\n .kg-layout-split.kg-content-wide .kg-header-card-text,\\n .kg-layout-split.kg-content-wide.kg-swapped .kg-header-card-text {\\n padding: min(9.6vmax, 180px) 0;\\n }\\n\\n .kg-header-card.kg-width-full .kg-header-card-subheading:not(.kg-layout-split .kg-header-card-subheading) {\\n max-width: unset;\\n }\\n\\n .kg-header-card-content .kg-header-card-image:not(.kg-content-wide .kg-header-card-content .kg-header-card-image) {\\n height: auto;\\n min-height: unset;\\n aspect-ratio: 1 / 1;\\n }\\n\\n .kg-content-wide .kg-header-card-content .kg-header-card-image {\\n padding: 1.7em 0 0;\\n }\\n\\n .kg-content-wide.kg-swapped .kg-header-card-content .kg-header-card-image {\\n padding: 0 0 1.7em;\\n }\\n\\n .kg-header-card.kg-v2 .kg-header-card-button {\\n height: 2.9em;\\n }\\n\\n .kg-header-card.kg-v2.kg-width-wide .kg-header-card-button,\\n .kg-header-card.kg-v2.kg-width-full .kg-header-card-button {\\n font-size: 1em;\\n }\\n}\\n\"","export default \".kg-nft-card,\\n.kg-nft-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-nft-card {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n width: 100%;\\n margin-left: auto;\\n margin-right: auto;\\n}\\n\\n.kg-nft-card a.kg-nft-card-container {\\n position: static;\\n display: flex;\\n flex: auto;\\n flex-direction: column;\\n text-decoration: none;\\n font-family: -apple-system, BlinkMacSystemFont,\\n 'avenir next', avenir,\\n 'helvetica neue', helvetica,\\n ubuntu,\\n roboto, noto,\\n 'segoe ui', arial,\\n sans-serif;\\n font-size: 14px;\\n font-weight: 400;\\n box-shadow: 0 2px 6px -2px rgb(0 0 0 / 10%), 0 0 1px rgb(0 0 0 / 40%);\\n width: 100%;\\n max-width: 512px;\\n color: #222;\\n background: #fff;\\n border-radius: 5px;\\n transition: none;\\n}\\n\\n.kg-nft-card * {\\n position: static;\\n}\\n\\n.kg-nft-metadata {\\n padding: 20px;\\n width: 100%;\\n}\\n\\n.kg-nft-image {\\n border-radius: 5px 5px 0 0;\\n width: 100%;\\n}\\n\\n.kg-nft-header {\\n display: flex;\\n justify-content: space-between;\\n align-items: flex-start;\\n gap: 20px;\\n}\\n\\n.kg-nft-header h4.kg-nft-title {\\n font-family: inherit;\\n font-size: 19px;\\n font-weight: 700;\\n line-height: 1.3em;\\n min-width: unset;\\n max-width: unset;\\n margin: 0;\\n color: #222;\\n}\\n\\n.kg-nft-opensea-logo {\\n margin-top: 2px;\\n width: 100px;\\n object-fit: scale-down;\\n}\\n\\n.kg-nft-creator {\\n font-family: inherit;\\n line-height: 1.4em;\\n margin: 4px 0 0;\\n color: #ababab;\\n}\\n\\n.kg-nft-creator span {\\n font-weight: 500;\\n color: #222;\\n}\\n\\n.kg-nft-card p.kg-nft-description {\\n font-family: inherit;\\n font-size: 14px;\\n line-height: 1.4em;\\n margin: 20px 0 0;\\n color: #222;\\n}\"","export default \".kg-product-card,\\n.kg-product-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-product-card {\\n display: flex;\\n align-items: center;\\n flex-direction: column;\\n width: 100%;\\n}\\n\\n.kg-product-card-container {\\n display: grid;\\n grid-template-columns: auto min-content;\\n align-items: center;\\n grid-row-gap: 16px;\\n background: transparent;\\n max-width: 550px;\\n padding: 20px;\\n width: 100%;\\n background: #fff;\\n color: #222;\\n border-radius: 5px;\\n box-shadow: inset 0 0 0 1px rgb(124 139 154 / 25%);\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Oxygen\\\", \\\"Ubuntu\\\", \\\"Cantarell\\\", \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.kg-product-card-image {\\n grid-column: 1 / 3;\\n justify-self: center;\\n height: auto;\\n}\\n\\n.kg-product-card-title-container {\\n grid-column: 1 / 2;\\n}\\n\\n.kg-product-card h4.kg-product-card-title {\\n text-decoration: none;\\n font-weight: 600;\\n font-size: 21px;\\n margin-top: 0;\\n margin-bottom: 0;\\n line-height: 1.15em;\\n}\\n\\n.kg-product-card-description {\\n grid-column: 1 / 3;\\n}\\n\\n.kg-product-card .kg-product-card-description p,\\n.kg-product-card .kg-product-card-description ol,\\n.kg-product-card .kg-product-card-description ul {\\n font-size: 14px;\\n line-height: 1.5em;\\n opacity: .7;\\n margin-bottom: 0;\\n}\\n\\n.kg-product-card .kg-product-card-description p:first-of-type {\\n margin-top: -4px;\\n}\\n\\n.kg-product-card .kg-product-card-description p:not(:first-of-type),\\n.kg-product-card .kg-product-card-description ul,\\n.kg-product-card .kg-product-card-description ol {\\n margin-top: 0.95em;\\n}\\n\\n.kg-product-card .kg-product-card-description li+li {\\n margin-top: 0.5em;\\n}\\n\\n.kg-product-card-rating {\\n display: flex;\\n align-items: center;\\n grid-column: 2 / 3;\\n align-self: start;\\n justify-self: end;\\n padding-left: 16px;\\n}\\n\\n@media (max-width: 400px) {\\n .kg-product-card-title-container {\\n grid-column: 1 / 3;\\n }\\n\\n .kg-product-card-rating {\\n grid-column: 1 / 3;\\n justify-self: start;\\n margin-top: -15px;\\n padding-left: 0;\\n }\\n}\\n\\n.kg-product-card-rating-star {\\n height: 20px;\\n width: 20px;\\n}\\n\\n.kg-product-card-rating-star svg {\\n width: 16px;\\n height: 16px;\\n fill: currentColor;\\n opacity: 0.15;\\n}\\n\\n.kg-product-card-rating-active.kg-product-card-rating-star svg {\\n opacity: 1;\\n}\\n\\n.kg-product-card a.kg-product-card-button {\\n justify-content: center;\\n grid-column: 1 / 3;\\n display: flex;\\n position: static;\\n align-items: center;\\n font-size: 14px;\\n font-weight: 600;\\n line-height: 1em;\\n text-decoration: none;\\n width: 100%;\\n height: 38px;\\n border-radius: 6px;\\n padding: 0 12px;\\n transition: opacity 0.2s ease-in-out;\\n}\\n\\n.kg-product-card a.kg-product-card-btn-accent {\\n background-color: var(--ghost-accent-color);\\n color: #fff;\\n}\\n\"","export default \".kg-signup-card {\\n position: relative;\\n}\\n\\n.kg-signup-card,\\n.kg-signup-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-signup-card a,\\n.kg-signup-card a span {\\n color: currentColor;\\n}\\n\\n.kg-signup-card.kg-style-accent {\\n background-color: var(--ghost-accent-color);\\n}\\n\\n.kg-layout-split .kg-signup-card-content {\\n display: grid;\\n grid-template-columns: 1fr 1fr;\\n}\\n\\n.kg-signup-card-text {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n justify-content: center;\\n height: 100%;\\n padding: min(4vmax, 80px);\\n background-size: cover;\\n background-position: center;\\n text-align: left;\\n}\\n\\n.kg-width-wide .kg-signup-card-text {\\n padding: min(6.4vmax, 120px);\\n}\\n\\n.kg-width-full .kg-signup-card-text {\\n padding: min(12vmax, 260px) 0;\\n}\\n\\n.kg-layout-split .kg-signup-card-text {\\n padding: min(12vmax, 260px) min(4vmax, 80px);\\n}\\n\\n.kg-layout-split.kg-content-wide .kg-signup-card-text {\\n padding: min(10vmax, 220px) 0 min(10vmax, 220px) min(4vmax, 80px);\\n}\\n\\n.kg-layout-split.kg-content-wide.kg-swapped .kg-signup-card-text {\\n padding: min(10vmax, 220px) min(4vmax, 80px) min(10vmax, 220px) 0;\\n}\\n\\n.kg-swapped .kg-signup-card-text {\\n grid-row: 1;\\n}\\n\\n.kg-signup-card-text.kg-align-center {\\n align-items: center;\\n text-align: center;\\n}\\n\\n.kg-signup-card.kg-style-image h2.kg-signup-card-heading,\\n.kg-signup-card.kg-style-image .kg-signup-card-subheading,\\n.kg-signup-card.kg-style-image .kg-signup-card-button {\\n z-index: 999;\\n}\\n\\n/* Background image */\\n\\n.kg-signup-card > picture > .kg-signup-card-image {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n object-fit: cover;\\n object-position: center;\\n background-color: #FFFFFF;\\n pointer-events: none;\\n}\\n\\n/* Split layout image */\\n\\n.kg-signup-card-content .kg-signup-card-image {\\n width: 100%;\\n /* this will force the image to follow the signup card height */\\n height: 0;\\n min-height: 100%;\\n /**/\\n object-fit: cover;\\n object-position: center;\\n}\\n\\n.kg-content-wide .kg-signup-card-content .kg-signup-card-image {\\n height: 100%;\\n padding: 5.6em 0;\\n object-fit: contain;\\n}\\n\\n/* Heading */\\n\\n.kg-signup-card h2.kg-signup-card-heading {\\n margin: 0;\\n font-size: clamp(1.7em, 4vw, 2.5em);\\n font-weight: 700;\\n line-height: 1.05em;\\n letter-spacing: -0.01em;\\n}\\n\\n.kg-signup-card.kg-width-wide h2.kg-signup-card-heading {\\n font-size: clamp(1.7em, 5vw, 3.3em);\\n}\\n\\n.kg-signup-card.kg-width-full h2.kg-signup-card-heading {\\n font-size: clamp(1.9em, 5.6vw, 4.2em);\\n}\\n\\n.kg-signup-card.kg-width-full.kg-layout-split h2.kg-signup-card-heading {\\n font-size: clamp(1.9em, 4vw, 3.3em);\\n}\\n\\n/* Subheading */\\n\\n.kg-signup-card-subheading {\\n margin: 0 0 2em;\\n}\\n\\n.kg-signup-card .kg-signup-card-subheading {\\n max-width: 40em;\\n margin: 0;\\n font-size: clamp(1.05em, 2vw, 1.4em);\\n font-weight: 500;\\n line-height: 1.2em;\\n}\\n\\n.kg-signup-card h2 + .kg-signup-card-subheading {\\n margin: 0.6em 0 0;\\n}\\n\\n.kg-signup-card .kg-signup-card-subheading strong {\\n font-weight: 600;\\n}\\n\\n.kg-signup-card.kg-width-wide .kg-signup-card-subheading {\\n font-size: clamp(1.05em, 2vw, 1.55em);\\n}\\n\\n.kg-signup-card.kg-width-full .kg-signup-card-subheading:not(.kg-layout-split .kg-signup-card-subheading) {\\n max-width: min(65vmax, 1200px);\\n font-size: clamp(1.05em, 2vw, 1.7em);\\n}\\n\\n.kg-signup-card.kg-width-full.kg-layout-split .kg-signup-card-subheading {\\n font-size: clamp(1.05em, 2vw, 1.55em);\\n}\\n\\n/* Subscribe form */\\n\\n.kg-signup-card-form {\\n position: relative;\\n display: flex;\\n flex-shrink: 0;\\n width: 100%;\\n}\\n\\n.kg-align-center .kg-signup-card-form {\\n justify-content: center;\\n}\\n\\n.kg-signup-card-heading + .kg-signup-card-form,\\n.kg-signup-card-subheading + .kg-signup-card-form {\\n margin: min(2.4vmax, 48px) 0 0;\\n}\\n\\n.kg-width-wide .kg-signup-card-heading + .kg-signup-card-form,\\n.kg-width-wide .kg-signup-card-subheading + .kg-signup-card-form {\\n margin: min(3.2vmax, 64px) 0 0;\\n}\\n\\n.kg-width-full .kg-signup-card-heading + .kg-signup-card-form,\\n.kg-width-full .kg-signup-card-subheading + .kg-signup-card-form {\\n margin: min(4vmax, 80px) 0 0;\\n}\\n\\n.kg-signup-card-fields {\\n display: flex;\\n width: 100%;\\n padding: 3px;\\n background: #FFFFFF;\\n border: 1px solid #E6E6E6;\\n border-radius: 4px;\\n}\\n\\n.kg-width-wide .kg-signup-card-fields,\\n.kg-width-full .kg-signup-card-fields {\\n width: 100%;\\n max-width: 500px;\\n}\\n\\n.kg-signup-card-input {\\n width: 100%;\\n height: 2.9em;\\n min-height: 46px;\\n margin: 0 3px 0 0;\\n padding: 12px 16px;\\n border: none;\\n background: #FFFFFF;\\n font-size: 1.1em;\\n}\\n\\n.kg-signup-card-input:focus,\\n.kg-signup-card-input:focus-visible {\\n outline: none;\\n}\\n\\n.kg-signup-card-button {\\n display: flex;\\n position: relative;\\n align-items: center;\\n height: 2.9em;\\n min-height: 46px;\\n height: 100%;\\n padding: 0 1.2em;\\n outline: none;\\n border: none;\\n font-size: 1em;\\n font-weight: 600;\\n line-height: 1em;\\n text-align: center;\\n text-decoration: none;\\n letter-spacing: .2px;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n border-radius: 3px;\\n transition: opacity .2s ease;\\n cursor: pointer;\\n}\\n\\n.kg-signup-card-button.kg-style-accent {\\n background-color: var(--ghost-accent-color);\\n}\\n\\n.kg-signup-card h2 + .kg-signup-card-button,\\n.kg-signup-card p + .kg-signup-card-button {\\n margin: 1.5em 0 0;\\n}\\n\\n.kg-signup-card .kg-signup-card-button:hover {\\n opacity: 0.85;\\n}\\n\\n.kg-signup-card.kg-width-wide .kg-signup-card-button {\\n font-size: 1.05em;\\n}\\n\\n.kg-signup-card.kg-width-wide h2 + .kg-signup-card-button,\\n.kg-signup-card.kg-width-wide p + .kg-signup-card-button {\\n margin-top: 1.75em;\\n}\\n\\n.kg-signup-card.kg-width-full .kg-signup-card-button {\\n font-size: 1.1em;\\n}\\n\\n.kg-signup-card.kg-width-full h2 + .kg-signup-card-button,\\n.kg-signup-card.kg-width-full p + .kg-signup-card-button {\\n margin-top: 2em;\\n}\\n\\n/* Subscribe form states */\\n\\n.kg-signup-card-success,\\n.kg-signup-card-error {\\n display: none;\\n}\\n\\n.kg-signup-card-form.success .kg-signup-card-fields {\\n display: none;\\n}\\n\\n.kg-signup-card-form.success .kg-signup-card-success {\\n display: flex;\\n align-items: center;\\n height: 3em;\\n font-size: 1.25em;\\n font-weight: 500;\\n line-height: 1.4em;\\n}\\n\\n.kg-signup-card-form.error .kg-signup-card-fields {\\n border: 1px solid #FF0000;\\n box-shadow: inset 0 0 0 1px rgba(255, 0, 0, 0.2);\\n}\\n\\n.kg-signup-card-form.error .kg-signup-card-error {\\n position: absolute;\\n bottom: calc(-1rem - 1.6em);\\n display: block;\\n font-size: inherit;\\n}\\n\\n.kg-signup-card-button-loading {\\n position: absolute;\\n inset: 0;\\n align-items: center;\\n justify-content: center;\\n display: none;\\n}\\n\\n.kg-signup-card-form.loading .kg-signup-card-button-default {\\n color: transparent;\\n}\\n\\n.kg-signup-card-form.loading .kg-signup-card-button-loading {\\n display: flex;\\n}\\n\\n/* Disclaimer */\\n\\n.kg-signup-card-disclaimer {\\n margin: 1rem 0 0;\\n}\\n\\n.kg-signup-card-form.success + .kg-signup-card-disclaimer,\\n.kg-signup-card-form.error + .kg-signup-card-disclaimer {\\n visibility: hidden;\\n}\\n\\n\\n/* Responsive styles */\\n\\n@media (max-width: 640px) {\\n .kg-layout-split .kg-signup-card-content {\\n grid-template-columns: 1fr;\\n }\\n\\n .kg-width-wide .kg-signup-card-text {\\n padding: min(6.4vmax, 120px) min(4vmax, 80px);\\n }\\n\\n .kg-layout-split.kg-content-wide .kg-signup-card-text,\\n .kg-layout-split.kg-content-wide.kg-swapped .kg-signup-card-text {\\n padding: min(9.6vmax, 180px) 0;\\n }\\n\\n .kg-signup-card.kg-width-full .kg-signup-card-subheading:not(.kg-layout-split .kg-signup-card-subheading) {\\n max-width: unset;\\n }\\n\\n .kg-signup-card-content .kg-signup-card-image:not(.kg-content-wide .kg-signup-card-content .kg-signup-card-image) {\\n height: auto;\\n min-height: unset;\\n aspect-ratio: 1 / 1;\\n }\\n\\n .kg-content-wide .kg-signup-card-content .kg-signup-card-image {\\n padding: 1.7em 0 0;\\n }\\n\\n .kg-content-wide.kg-swapped .kg-signup-card-content .kg-signup-card-image {\\n padding: 0 0 1.7em;\\n }\\n\\n .kg-signup-card-input {\\n height: 2.9em;\\n padding: 6px 12px;\\n font-size: 1em;\\n }\\n\\n .kg-signup-card-button {\\n height: 2.9em;\\n }\\n\\n .kg-signup-card.kg-width-wide .kg-signup-card-button,\\n .kg-signup-card.kg-width-full .kg-signup-card-button {\\n font-size: 1em;\\n }\\n}\\n\"","export default \".kg-toggle-card,\\n.kg-toggle-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-toggle-card {\\n background: transparent;\\n box-shadow: inset 0 0 0 1px rgba(124, 139, 154, 0.25);\\n border-radius: 4px;\\n padding: 1.2em;\\n}\\n\\n.kg-toggle-card[data-kg-toggle-state=\\\"close\\\"] .kg-toggle-content{\\n height: 0;\\n overflow: hidden;\\n transition: opacity .5s ease, top .35s ease;\\n opacity: 0;\\n top: -0.5em;\\n position: relative;\\n}\\n\\n.kg-toggle-content {\\n height: auto;\\n opacity: 1;\\n transition: opacity 1s ease, top .35s ease;\\n top: 0;\\n position: relative;\\n}\\n\\n.kg-toggle-card[data-kg-toggle-state=\\\"close\\\"] svg {\\n transform: unset;\\n}\\n\\n.kg-toggle-heading {\\n cursor: pointer;\\n display: flex;\\n justify-content: space-between;\\n align-items: flex-start;\\n}\\n\\n.kg-toggle-card h4.kg-toggle-heading-text {\\n font-size: 1.15em;\\n font-weight: 700;\\n line-height: 1.3em;\\n margin-top: 0;\\n margin-bottom: 0;\\n}\\n\\n.kg-toggle-content p:first-of-type {\\n margin-top: 0.5em;\\n}\\n\\n.kg-toggle-card .kg-toggle-content p,\\n.kg-toggle-card .kg-toggle-content ol,\\n.kg-toggle-card .kg-toggle-content ul {\\n font-size: 0.95em;\\n line-height: 1.5em;\\n margin-top: 0.95em;\\n margin-bottom: 0;\\n}\\n\\n.kg-toggle-card li + li {\\n margin-top: 0.5em;\\n}\\n\\n.kg-toggle-card-icon {\\n height: 24px;\\n width: 24px;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n margin-left: 1em;\\n padding: 0;\\n background: none;\\n border: 0;\\n cursor: pointer;\\n}\\n\\n.kg-toggle-heading svg {\\n width: 14px;\\n color: rgba(124, 139, 154, 0.5);\\n transition: all 0.3s;\\n transform: rotate(-180deg);\\n}\\n\\n.kg-toggle-heading path {\\n fill: none;\\n stroke: currentcolor;\\n stroke-linecap: round;\\n stroke-linejoin: round;\\n stroke-width: 1.5;\\n fill-rule: evenodd;\\n}\\n\\n.kg-toggle-card + .kg-toggle-card {\\n margin-top: 1em;\\n}\\n\"","export default \".kg-video-card,\\n.kg-video-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-video-card {\\n position: relative;\\n --seek-before-width: 0%;\\n --volume-before-width: 100%;\\n --buffered-width: 0%;\\n}\\n\\n.kg-video-card video {\\n display: block;\\n max-width: 100%;\\n height: auto;\\n}\\n\\n.kg-video-container {\\n position: relative;\\n height: 0;\\n width: 100%;\\n overflow: hidden;\\n}\\n\\n.kg-video-container video {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n object-fit: cover;\\n}\\n\\n.kg-video-overlay {\\n position: absolute;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n background-image: linear-gradient(180deg,rgba(0,0,0,0.3) 0,transparent 70%,transparent 100%);\\n z-index: 999;\\n transition: opacity .2s ease-in-out;\\n}\\n\\n.kg-video-large-play-icon {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n width: 72px;\\n height: 72px;\\n padding: 0;\\n background: rgba(0, 0, 0, 0.5);\\n border-radius: 50%;\\n transition: opacity .2s ease-in-out;\\n}\\n\\n.kg-video-large-play-icon svg {\\n width: 20px;\\n height: auto;\\n margin-left: 2px;\\n fill: #fff;\\n}\\n\\n.kg-video-player-container {\\n position: absolute;\\n bottom: -1px;\\n left: 0;\\n right: 0;\\n width: 100%;\\n height: 80px;\\n background: linear-gradient(rgba(0,0,0,0), rgba(0,0,0,.5));\\n z-index: 999;\\n transition: opacity .2s ease-in-out;\\n}\\n\\n.kg-video-player {\\n position: absolute;\\n bottom: 0;\\n display: flex;\\n align-items: center;\\n width: 100%;\\n z-index: 9999;\\n padding: 12px 16px;\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Oxygen\\\", \\\"Ubuntu\\\", \\\"Cantarell\\\", \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.kg-video-current-time {\\n min-width: 38px;\\n padding: 0 4px;\\n color: #fff;\\n font-family: inherit;\\n font-size: 12.5px;\\n font-weight: 500;\\n line-height: 1.4em;\\n white-space: nowrap;\\n}\\n\\n.kg-video-time {\\n color: rgba(255, 255, 255, 0.6);\\n font-family: inherit;\\n font-size: 12.5px;\\n font-weight: 500;\\n line-height: 1.4em;\\n white-space: nowrap;\\n}\\n\\n.kg-video-duration {\\n padding: 0 4px;\\n}\\n\\n.kg-video-play-icon,\\n.kg-video-pause-icon {\\n position: relative;\\n padding: 0px 4px 0 0;\\n font-size: 0;\\n background: transparent;\\n}\\n\\n.kg-video-hide {\\n display: none !important;\\n}\\n\\n.kg-video-hide-animated {\\n opacity: 0 !important;\\n transition: opacity .2s ease-in-out;\\n cursor: initial;\\n}\\n\\n.kg-video-play-icon svg,\\n.kg-video-pause-icon svg {\\n width: 14px;\\n height: 14px;\\n fill: #fff;\\n}\\n\\n.kg-video-seek-slider {\\n flex-grow: 1;\\n margin: 0 4px;\\n}\\n\\n@media (max-width: 520px) {\\n .kg-video-seek-slider {\\n display: none;\\n }\\n}\\n\\n.kg-video-playback-rate {\\n min-width: 37px;\\n padding: 0 4px;\\n color: #fff;\\n font-family: inherit;\\n font-size: 12.5px;\\n font-weight: 600;\\n line-height: 1.4em;\\n text-align: left;\\n background: transparent;\\n white-space: nowrap;\\n}\\n\\n@media (max-width: 520px) {\\n .kg-video-playback-rate {\\n padding-left: 8px;\\n }\\n}\\n\\n.kg-video-mute-icon,\\n.kg-video-unmute-icon {\\n position: relative;\\n bottom: -1px;\\n padding: 0 4px;\\n font-size: 0;\\n background: transparent;\\n}\\n\\n@media (max-width: 520px) {\\n .kg-video-mute-icon,\\n .kg-video-unmute-icon {\\n margin-left: auto;\\n }\\n}\\n\\n.kg-video-mute-icon svg,\\n.kg-video-unmute-icon svg {\\n width: 16px;\\n height: 16px;\\n fill: #fff;\\n}\\n\\n.kg-video-volume-slider {\\n width: 80px;\\n}\\n\\n@media (max-width: 300px) {\\n .kg-video-volume-slider {\\n display: none;\\n }\\n}\\n\\n.kg-video-seek-slider::before {\\n content: \\\"\\\";\\n position: absolute;\\n left: 0;\\n width: var(--seek-before-width) !important;\\n height: 4px;\\n cursor: pointer;\\n background-color: #EBEEF0;\\n border-radius: 2px;\\n}\\n\\n.kg-video-volume-slider::before {\\n content: \\\"\\\";\\n position: absolute;\\n left: 0;\\n width: var(--volume-before-width) !important;\\n height: 4px;\\n cursor: pointer;\\n background-color: #EBEEF0;\\n border-radius: 2px;\\n}\\n\\n/* Resetting browser styles\\n/* --------------------------------------------------------------- */\\n\\n.kg-video-card input[type=range] {\\n position: relative;\\n -webkit-appearance: none;\\n background: transparent;\\n}\\n\\n.kg-video-card input[type=range]:focus {\\n outline: none;\\n}\\n\\n.kg-video-card input[type=range]::-webkit-slider-thumb {\\n -webkit-appearance: none;\\n}\\n\\n.kg-video-card input[type=range]::-ms-track {\\n cursor: pointer;\\n border-color: transparent;\\n color: transparent;\\n background: transparent;\\n}\\n\\n.kg-video-card button {\\n display: flex;\\n align-items: center;\\n border: 0;\\n cursor: pointer;\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"] {\\n height: auto;\\n padding: 0;\\n border: 0;\\n}\\n\\n/* Chrome & Safari styles\\n/* --------------------------------------------------------------- */\\n\\n.kg-video-card input[type=\\\"range\\\"]::-webkit-slider-runnable-track {\\n width: 100%;\\n height: 4px;\\n cursor: pointer;\\n background: rgba(255, 255, 255, 0.2);\\n border-radius: 2px;\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"]::-webkit-slider-thumb {\\n position: relative;\\n box-sizing: content-box;\\n width: 13px;\\n height: 13px;\\n margin: -5px 0 0 0;\\n border: 0;\\n cursor: pointer;\\n background: #fff;\\n border-radius: 50%;\\n box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"]:active::-webkit-slider-thumb {\\n transform: scale(1.2);\\n}\\n\\n/* Firefox styles\\n/* --------------------------------------------------------------- */\\n\\n.kg-video-card input[type=\\\"range\\\"]::-moz-range-track {\\n width: 100%;\\n height: 4px;\\n cursor: pointer;\\n background: rgba(255, 255, 255, 0.2);\\n border-radius: 2px;\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"]::-moz-range-progress {\\n background: #EBEEF0;\\n border-radius: 2px;\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"]::-moz-range-thumb {\\n box-sizing: content-box;\\n width: 13px;\\n height: 13px;\\n border: 0;\\n cursor: pointer;\\n background: #fff;\\n border-radius: 50%;\\n box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"]:active::-moz-range-thumb {\\n transform: scale(1.2);\\n}\\n\\n/* Edge & IE styles\\n/* --------------------------------------------------------------- */\\n\\n.kg-video-card input[type=\\\"range\\\"]::-ms-track {\\n width: 100%;\\n height: 3px;\\n border: solid transparent;\\n color: transparent;\\n cursor: pointer;\\n background: transparent;\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"]::-ms-fill-lower {\\n background: #fff;\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"]::-ms-fill-upper {\\n background: #EBEEF0;\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"]::-ms-thumb {\\n box-sizing: content-box;\\n width: 13px;\\n height: 13px;\\n border: 0;\\n cursor: pointer;\\n background: #fff;\\n border-radius: 50%;\\n box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"]:active::-ms-thumb {\\n transform: scale(1.2);\\n}\\n\\n\"","const jsModules = import.meta.glob('@ghost-cards/js/*.js', {query: 'raw', eager: true}) as Record<string, {default: string}>;\nconst cssModules = import.meta.glob('@ghost-cards/css/*.css', {query: 'raw', eager: true}) as Record<string, {default: string}>;\n\nexport const cardsJS = Object.values(jsModules)\n .map(module => module.default)\n .join('\\n\\n');\n\nexport const cardsCSS = Object.values(cssModules)\n .map(module => module.default)\n .join('\\n\\n');\n","import Customizer, {COLOR_OPTIONS, type ColorOption, type FontSize, useCustomizerSettings} from './customizer';\nimport React, {useCallback, useEffect, useRef, useState} from 'react';\nimport ShowRepliesButton from '@src/components/global/show-replies-button';\nimport getUsername from '../../../utils/get-username';\nimport {LoadingIndicator, Skeleton} from '@tryghost/shade';\n\nimport {renderTimestamp} from '../../../utils/render-timestamp';\nimport {useReplyChainData} from '@hooks/use-reply-chain-data';\n\nimport APAvatar from '@src/components/global/ap-avatar';\nimport APReplyBox from '@src/components/global/ap-reply-box';\nimport BackButton from '@src/components/global/back-button';\nimport DeletedFeedItem from '@src/components/feed/deleted-feed-item';\nimport FeedItem from '@src/components/feed/feed-item';\nimport FeedItemStats from '@src/components/feed/feed-item-stats';\nimport FollowButton from '@src/components/global/follow-button';\nimport ProfilePreviewHoverCard from '@components/global/profile-preview-hover-card';\nimport TableOfContents, {TOCItem} from '@src/components/feed/table-of-contents';\nimport articleBodyStyles from '@src/components/article-body-styles';\nimport getReadingTime from '../../../utils/get-reading-time';\nimport {Activity} from '@src/api/activitypub';\nimport {cardsCSS, cardsJS} from '@src/utils/cards-assets';\nimport {handleProfileClick} from '@src/utils/handle-profile-click';\nimport {isPendingActivity} from '../../../utils/pending-activity';\nimport {openLinksInNewTab} from '@src/utils/content-formatters';\nimport {useDebounce} from 'use-debounce';\nimport {useNavigateWithBasePath} from '@src/hooks/use-navigate-with-base-path';\n\ninterface IframeWindow extends Window {\n resizeIframe?: () => void;\n}\n\nconst ArticleBody: React.FC<{\n postUrl?: string;\n heading: string;\n image: string|undefined;\n excerpt: string|undefined;\n authors: Array<{\n name: string;\n profile_image: string;\n }>;\n html: string;\n backgroundColor: ColorOption;\n fontSize: FontSize;\n fontStyle: string;\n onHeadingsExtracted?: (headings: TOCItem[]) => void;\n onIframeLoad?: (iframe: HTMLIFrameElement) => void;\n onLoadingChange?: (isLoading: boolean) => void;\n isPopoverOpen: boolean;\n}> = ({\n postUrl,\n heading,\n image,\n excerpt,\n authors,\n html,\n backgroundColor,\n fontSize,\n fontStyle,\n onHeadingsExtracted,\n onIframeLoad,\n onLoadingChange,\n isPopoverOpen\n}) => {\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [iframeHeight, setIframeHeight] = useState('0px');\n const darkMode = (document.documentElement.classList.contains('dark') && backgroundColor === 'SYSTEM') || backgroundColor === 'DARK';\n\n const cssContent = articleBodyStyles();\n\n const htmlContent = `\n <html class=\"has-${!darkMode ? 'dark' : 'light'}-text has-${fontStyle}-body ${backgroundColor === 'SEPIA' && 'has-sepia-bg'}\">\n <head>\n ${cssContent}\n <style>\n :root {\n --font-size: ${fontSize};\n }\n body {\n margin: 0;\n padding: 0;\n overflow-y: hidden;\n }\n .has-sepia-bg {\n --background-color: #FCF8F1;\n }\n </style>\n <style>\n ${cardsCSS}\n </style>\n\n <script>\n function resizeIframe() {\n const height = document.body.scrollHeight;\n window.parent.postMessage({\n type: 'resize',\n bodyHeight: height,\n isLoaded: true\n }, '*');\n }\n\n // Initialize resize observers\n function setupResizeObservers() {\n // ResizeObserver for overall size changes\n const resizeObserver = new ResizeObserver(() => {\n resizeIframe();\n });\n resizeObserver.observe(document.body);\n\n // MutationObserver for DOM changes\n const mutationObserver = new MutationObserver(() => {\n resizeIframe();\n });\n mutationObserver.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true\n });\n\n // Handle window resize\n window.addEventListener('resize', resizeIframe);\n\n // Initial resize\n resizeIframe();\n\n // Clean up function\n return () => {\n resizeObserver.disconnect();\n mutationObserver.disconnect();\n window.removeEventListener('resize', resizeIframe);\n };\n }\n\n // Wait for images to load\n function waitForImages() {\n const images = document.getElementsByTagName('img');\n Promise.all(Array.from(images).map(img => {\n if (img.complete) return Promise.resolve();\n return new Promise(resolve => {\n img.onload = resolve;\n img.onerror = resolve;\n });\n })).then(resizeIframe);\n }\n\n // Handle external resize triggers\n window.addEventListener('message', (event) => {\n if (event.data.type === 'triggerResize') {\n resizeIframe();\n }\n });\n\n // Initialize everything once DOM is ready\n document.addEventListener('DOMContentLoaded', () => {\n setupResizeObservers();\n waitForImages();\n });\n </script>\n\n <!-- Reframe.js — a plugin that makes iframes and videos responsive -->\n <script>!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).reframe=t()}(this,function(){\"use strict\";function t(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;for(var i=Array(e),o=0,t=0;t<n;t++)for(var r=arguments[t],f=0,d=r.length;f<d;f++,o++)i[o]=r[f];return i}return function(e,s){return void 0===s&&(s=\"js-reframe\"),(\"string\"==typeof e?t(document.querySelectorAll(e)):\"length\"in e?t(e):[e]).forEach(function(e){var t,n,i,o,r,f,d,l;-1!==e.className.split(\" \").indexOf(s)||-1<e.style.width.indexOf(\"%\")||(i=e.getAttribute(\"height\")||e.offsetHeight,o=e.getAttribute(\"width\")||e.offsetWidth,r=(\"string\"==typeof i?parseInt(i):i)/(\"string\"==typeof o?parseInt(o):o)*100,(f=document.createElement(\"div\")).className=s,(d=f.style).position=\"relative\",d.width=\"100%\",d.paddingTop=r+\"%\",(l=e.style).position=\"absolute\",l.width=\"100%\",l.height=\"100%\",l.left=\"0\",l.top=\"0\",null!==(t=e.parentNode)&&void 0!==t&&t.insertBefore(f,e),null!==(n=e.parentNode)&&void 0!==n&&n.removeChild(e),f.appendChild(e))})}});</script>\n </head>\n <body>\n <header class='gh-article-header gh-canvas'>\n <h1 class='gh-article-title is-title' data-test-article-heading>${heading}</h1>\n ${excerpt ? `<p class='gh-article-excerpt'>${excerpt}</p>` : ''}\n <a href=\"${postUrl}\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"gh-article-meta\">\n ${authors && authors.length > 0 ? `\n <div class=\"gh-article-author-image\">\n ${authors.map(author => `\n <span>\n ${author.profile_image\n ? `<img src=\"${author.profile_image}\" alt=\"${author.name}\">`\n : `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\"><path d=\"M6.75 6a5.25 5.25 0 1 0 10.5 0 5.25 5.25 0 1 0 -10.5 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"M2.25 23.25a9.75 9.75 0 0 1 19.5 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path></svg>`\n}\n </span>\n `).join('')}\n </div>\n ` : ''}\n <div class=\"gh-article-meta-wrapper\">\n ${authors && authors.length > 0 ? `\n <span class=\"gh-article-author-name\">\n ${authors.length > 1 ? `${authors[0].name} and ${authors.length - 1} ${authors.length - 1 === 1 ? 'other' : 'others'}` : authors[0].name}\n </span>\n ` : ''}\n <span class=\"gh-article-source\">${postUrl ? new URL(postUrl).hostname : ''} <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-external-link-icon lucide-external-link\"><path d=\"M15 3h6v6\"/><path d=\"M10 14 21 3\"/><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/></svg></span>\n </div>\n </a>\n ${image ? `\n <figure class='gh-article-image'>\n <img src='${image}' alt='${heading}' />\n </figure>\n ` : ''}\n </header>\n <div class='gh-content gh-canvas is-body'>\n ${openLinksInNewTab(html)}\n </div>\n <script>\n (function () {\n const sources = [\n '.gh-content iframe[src*=\"youtube.com\"]',\n '.gh-content iframe[src*=\"youtube-nocookie.com\"]',\n '.gh-content iframe[src*=\"player.vimeo.com\"]',\n '.gh-content iframe[src*=\"kickstarter.com\"][src*=\"video.html\"]',\n '.gh-content object',\n '.gh-content embed',\n ];\n reframe(document.querySelectorAll(sources.join(',')));\n })();\n </script>\n <script>\n ${cardsJS}\n </script>\n </body>\n </html>\n `;\n\n useEffect(() => {\n const iframe = iframeRef.current;\n if (!iframe) {\n return;\n }\n\n if (!iframe.srcdoc) {\n iframe.srcdoc = htmlContent;\n }\n\n const handleMessage = (event: MessageEvent) => {\n if (event.data.type === 'resize') {\n const newHeight = `${event.data.bodyHeight + 24}px`;\n setIframeHeight(newHeight);\n iframe.style.height = newHeight;\n\n if (event.data.isLoaded) {\n setIsLoading(false);\n }\n }\n };\n\n // Add event listener for Escape key in iframe\n const handleIframeKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n // Prevent default and stop propagation of the original event\n event.preventDefault();\n event.stopPropagation();\n\n // Create and dispatch a new keyboard event to the parent window\n const newEvent = new KeyboardEvent('keydown', {\n key: 'Escape',\n code: 'Escape',\n keyCode: 27,\n which: 27,\n bubbles: true,\n cancelable: true\n });\n document.dispatchEvent(newEvent);\n }\n };\n\n // Wait for iframe to load before adding event listener\n const handleIframeLoad = () => {\n const iframeWindow = iframe.contentWindow;\n if (iframeWindow) {\n iframeWindow.addEventListener('keydown', handleIframeKeyDown);\n }\n };\n\n iframe.addEventListener('load', handleIframeLoad);\n window.addEventListener('message', handleMessage);\n\n return () => {\n window.removeEventListener('message', handleMessage);\n iframe.removeEventListener('load', handleIframeLoad);\n const iframeWindow = iframe.contentWindow;\n if (iframeWindow) {\n iframeWindow.removeEventListener('keydown', handleIframeKeyDown);\n }\n };\n }, [htmlContent]);\n\n // Separate effect for style updates\n useEffect(() => {\n const iframe = iframeRef.current;\n if (!iframe) {\n return;\n }\n\n const iframeDocument = iframe.contentDocument || iframe.contentWindow?.document;\n if (!iframeDocument) {\n return;\n }\n\n const root = iframeDocument.documentElement;\n root.style.setProperty('--font-size', fontSize);\n root.classList.remove('has-sans-body', 'has-serif-body');\n root.classList.add(`has-${fontStyle}-body`);\n root.classList.remove('has-dark-text', 'has-light-text');\n root.classList.add(`has-${!darkMode ? 'dark' : 'light'}-text`);\n if (backgroundColor === 'SEPIA') {\n root.classList.add('has-sepia-bg');\n } else {\n root.classList.remove('has-sepia-bg');\n }\n\n const iframeWindow = iframe.contentWindow as IframeWindow;\n if (iframeWindow && typeof iframeWindow.resizeIframe === 'function') {\n iframeWindow.resizeIframe();\n } else {\n const resizeEvent = new Event('resize');\n iframeDocument.dispatchEvent(resizeEvent);\n }\n }, [fontSize, fontStyle, backgroundColor, darkMode]);\n\n useEffect(() => {\n const iframe = iframeRef.current;\n if (!iframe) {\n return;\n }\n\n const handleLoad = () => {\n if (!iframe.contentDocument) {\n return;\n }\n\n // Get all headings except the article title\n const headingElements = Array.from(\n iframe.contentDocument.querySelectorAll('.gh-content > :is(h2, h3, h4, h5, h6)[id]')\n );\n\n if (headingElements.length === 0) {\n return;\n }\n\n // Find the highest level (smallest number) heading\n const highestLevel = Math.min(\n ...headingElements.map(el => parseInt(el.tagName[1]))\n );\n\n // Map headings and normalize their levels\n const headings = headingElements.map((el, idx) => {\n const id = `heading-${idx}`;\n el.id = id;\n\n // Calculate normalized level (e.g., if highest is h3, then h3->h1, h4->h2)\n const actualLevel = parseInt(el.tagName[1]);\n const normalizedLevel = actualLevel - highestLevel + 1;\n\n return {\n id,\n text: el.textContent || '',\n level: normalizedLevel,\n element: el as HTMLElement\n };\n });\n\n onHeadingsExtracted?.(headings);\n onIframeLoad?.(iframe);\n };\n\n iframe.addEventListener('load', handleLoad);\n return () => iframe.removeEventListener('load', handleLoad);\n }, [onHeadingsExtracted, onIframeLoad]);\n\n // Update parent when loading state changes\n useEffect(() => {\n onLoadingChange?.(isLoading);\n }, [isLoading, onLoadingChange]);\n\n return (\n <div className='w-full pb-6'>\n <div className='relative -mx-6'>\n {isLoading && (\n <div className='mx-auto mt-6 w-full max-w-[640px] max-lg:px-4'>\n <div className='mb-6 flex flex-col gap-2'>\n <Skeleton className='h-8' />\n <Skeleton className='h-8 w-full max-w-md' />\n </div>\n <Skeleton className='mt-2 h-4' count={4} randomize={true} />\n <Skeleton className='mt-8 h-[400px]' />\n <Skeleton className='mt-2 h-4' containerClassName='block mt-7 mb-4' count={8} randomize={true} />\n </div>\n )}\n <iframe\n ref={iframeRef}\n id='gh-ap-article-iframe'\n style={{\n width: '100%',\n border: 'none',\n height: iframeHeight,\n overflow: 'hidden',\n opacity: isLoading ? 0 : 1,\n transition: 'opacity 0.2s ease-in-out',\n pointerEvents: isPopoverOpen ? 'none' : 'auto'\n }}\n title='Embedded Content'\n />\n </div>\n </div>\n );\n};\n\nconst FeedItemDivider: React.FC = () => (\n <div className=\"h-px bg-black/[8%] dark:bg-gray-950\"></div>\n);\n\ninterface ReaderProps {\n postId: string;\n onClose?: () => void;\n}\n\nconst scrollPositionCache = new Map<string, number>();\n\nexport const Reader: React.FC<ReaderProps> = ({\n postId = null,\n onClose\n}) => {\n const {\n backgroundColor,\n currentFontSizeIndex,\n fontStyle,\n fontSize,\n handleColorChange,\n setFontStyle,\n increaseFontSize,\n decreaseFontSize,\n resetFontSize\n } = useCustomizerSettings();\n const modalRef = useRef<HTMLElement>(null);\n const [isCustomizerOpen, setIsCustomizerOpen] = useState(false);\n const [isTOCOpen, setIsTOCOpen] = useState(false);\n\n const [expandedChains, setExpandedChains] = useState<Set<string>>(new Set());\n const [fullyExpandedChains, setFullyExpandedChains] = useState<Set<string>>(new Set());\n const [loadingChains, setLoadingChains] = useState<Set<string>>(new Set());\n const [isLoadingMoreTopLevelReplies, setIsLoadingMoreTopLevelReplies] = useState(false);\n const observerRef = useRef<IntersectionObserver | null>(null);\n const loadMoreRef = useRef<HTMLDivElement | null>(null);\n\n const {\n post: currentPost,\n processedReplies,\n isLoading: isLoadingContent,\n loadMoreChildren,\n loadMoreChildReplies,\n hasMoreChildren,\n hasMoreChildReplies\n } = useReplyChainData(postId ?? '', {includeAncestors: false});\n\n const activityData = currentPost;\n const object = activityData?.object;\n const actor = activityData?.actor;\n const authors = activityData?.object?.metadata?.ghostAuthors;\n\n const replyCount = object?.replyCount ?? 0;\n\n useEffect(() => {\n // Only set up infinite scroll if pagination is supported\n if (!hasMoreChildren) {\n return;\n }\n\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n\n const container = modalRef.current;\n if (!container) {\n return;\n }\n\n observerRef.current = new IntersectionObserver(async (entries) => {\n if (entries[0].isIntersecting && hasMoreChildren && !isLoadingMoreTopLevelReplies) {\n setIsLoadingMoreTopLevelReplies(true);\n try {\n await loadMoreChildren();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Failed to load more top-level replies:', error);\n } finally {\n setIsLoadingMoreTopLevelReplies(false);\n }\n }\n }, {\n root: container,\n rootMargin: '200px'\n });\n\n if (loadMoreRef.current) {\n observerRef.current.observe(loadMoreRef.current);\n }\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n };\n }, [hasMoreChildren, isLoadingMoreTopLevelReplies, loadMoreChildren]);\n\n function handleDelete() {\n // Reply count will be updated via cache invalidation\n }\n\n function toggleChain(chainId: string) {\n setExpandedChains((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(chainId)) {\n newSet.delete(chainId);\n } else {\n newSet.add(chainId);\n setFullyExpandedChains((fullyExpanded) => {\n const newFullyExpanded = new Set(fullyExpanded);\n newFullyExpanded.add(chainId);\n return newFullyExpanded;\n });\n }\n return newSet;\n });\n }\n\n async function loadMoreForChain(chainId: string, childIndex: number) {\n if (loadingChains.has(chainId)) {\n return;\n }\n\n setLoadingChains(prev => new Set(prev).add(chainId));\n\n try {\n if (loadMoreChildReplies) {\n await loadMoreChildReplies(childIndex);\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Failed to load more replies for chain:', error);\n } finally {\n setLoadingChains((prev) => {\n const newSet = new Set(prev);\n newSet.delete(chainId);\n return newSet;\n });\n }\n }\n\n const onLikeClick = () => {\n // Do API req or smth\n // Don't need to know about setting timeouts or anything like that\n };\n\n const repliesRef = useRef<HTMLDivElement>(null);\n\n const currentMaxWidth = '904px';\n const currentGridWidth = '640px';\n\n const [readingProgress, setReadingProgress] = useState(0);\n const [isLoading, setIsLoading] = useState(true);\n\n // Add debounced version of setReadingProgress\n const [debouncedSetReadingProgress] = useDebounce(setReadingProgress, 100);\n\n const PROGRESS_INCREMENT = 1;\n\n useEffect(() => {\n const container = modalRef.current;\n const article = document.getElementById('object-content');\n\n const handleScroll = () => {\n if (isLoading) {\n return;\n }\n\n if (!container || !article) {\n return;\n }\n\n const articleRect = article.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n\n const isContentShorterThanViewport = articleRect.height <= containerRect.height;\n\n if (isContentShorterThanViewport) {\n debouncedSetReadingProgress(100);\n return;\n }\n\n const scrolledPast = Math.max(0, containerRect.top - articleRect.top);\n const totalHeight = (article as HTMLElement).offsetHeight - (container as HTMLElement).offsetHeight;\n\n const rawProgress = Math.min(Math.max((scrolledPast / totalHeight) * 100, 0), 100);\n const progress = Math.round(rawProgress / PROGRESS_INCREMENT) * PROGRESS_INCREMENT;\n\n debouncedSetReadingProgress(progress);\n };\n\n if (isLoading) {\n return;\n }\n\n const observer = new MutationObserver(handleScroll);\n if (article) {\n observer.observe(article, {\n childList: true,\n subtree: true,\n characterData: true\n });\n }\n\n container?.addEventListener('scroll', handleScroll);\n handleScroll();\n\n return () => {\n container?.removeEventListener('scroll', handleScroll);\n observer.disconnect();\n };\n }, [isLoading, debouncedSetReadingProgress]);\n\n const [tocItems, setTocItems] = useState<TOCItem[]>([]);\n const [activeHeadingId, setActiveHeadingId] = useState<string | null>(null);\n const [iframeElement, setIframeElement] = useState<HTMLIFrameElement | null>(null);\n\n const handleHeadingsExtracted = useCallback((headings: TOCItem[]) => {\n setTocItems(headings);\n }, []);\n\n const handleIframeLoad = useCallback((iframe: HTMLIFrameElement) => {\n setIframeElement(iframe);\n }, []);\n\n useEffect(() => {\n if (!iframeElement?.contentDocument || !tocItems.length) {\n return;\n }\n\n const setupObserver = () => {\n const container = modalRef.current;\n if (!container) {\n return;\n }\n\n const handleScroll = () => {\n const doc = iframeElement.contentDocument;\n if (!doc || !doc.documentElement) {\n return;\n }\n\n const scrollTop = container.scrollTop;\n\n const headings = tocItems\n .map(item => doc.getElementById(item.id))\n .filter((el): el is HTMLElement => el !== null)\n .map(el => ({\n element: el,\n id: el.id,\n top: el.offsetTop\n }));\n\n if (!headings.length) {\n return;\n }\n\n const buffer = 100;\n\n let activeHeading = null;\n\n for (const heading of headings) {\n if (heading.top - buffer <= scrollTop) {\n activeHeading = heading;\n } else {\n break;\n }\n }\n\n setActiveHeadingId(activeHeading?.id || null);\n };\n\n container.addEventListener('scroll', handleScroll);\n handleScroll();\n\n return () => {\n container.removeEventListener('scroll', handleScroll);\n };\n };\n\n const timeoutId = setTimeout(setupObserver, 100);\n return () => clearTimeout(timeoutId);\n }, [iframeElement, tocItems, activeHeadingId]);\n\n const navigate = useNavigateWithBasePath();\n\n // Save scroll position when navigating away\n useEffect(() => {\n const container = modalRef.current;\n return () => {\n if (container && postId) {\n scrollPositionCache.set(postId, container.scrollTop);\n }\n };\n }, [postId]);\n\n // Restore scroll position after content loads\n useEffect(() => {\n if (!isLoading && !isLoadingContent && postId && modalRef.current) {\n const savedPosition = scrollPositionCache.get(postId);\n if (savedPosition !== undefined && savedPosition > 0) {\n setTimeout(() => {\n if (modalRef.current) {\n modalRef.current.scrollTop = savedPosition;\n }\n }, 100);\n }\n }\n }, [isLoading, isLoadingContent, postId]);\n\n if (isLoadingContent) {\n return (\n <div className={`max-h-full overflow-auto rounded-md ${backgroundColor === 'DARK' && 'dark'} ${(backgroundColor === 'LIGHT' || backgroundColor === 'SEPIA') && 'light'} ${COLOR_OPTIONS[backgroundColor].background}`}>\n <div className='flex h-full flex-col'>\n <div className='relative flex-1'>\n <div className={`sticky top-0 z-50 flex h-[102px] items-center justify-center rounded-t-md border-b max-md:h-[68px] ${COLOR_OPTIONS[backgroundColor].background} ${COLOR_OPTIONS[backgroundColor].border}`}>\n <div\n className='grid w-full px-8 max-lg:px-4'\n style={{\n gridTemplateColumns: `1fr minmax(0,${currentGridWidth}) 1fr`\n }}\n >\n <div className='flex items-center'>\n <BackButton className={COLOR_OPTIONS[backgroundColor].button} onClick={onClose} />\n </div>\n <div className='col-[2/3] mx-auto flex w-full items-center gap-3 max-md:hidden'>\n <Skeleton className='size-10 rounded-full' />\n <div className='grow pt-1'>\n <Skeleton className='w-full' />\n <Skeleton className='w-2/3' />\n </div>\n </div>\n <div className='col-[3/4] flex items-center justify-end gap-2'>\n <Customizer\n backgroundColor={backgroundColor}\n currentFontSizeIndex={currentFontSizeIndex}\n fontStyle={fontStyle}\n onColorChange={handleColorChange}\n onDecreaseFontSize={decreaseFontSize}\n onFontStyleChange={setFontStyle}\n onIncreaseFontSize={increaseFontSize}\n onOpenChange={setIsCustomizerOpen}\n onResetFontSize={resetFontSize}\n />\n </div>\n </div>\n </div>\n <div className='relative flex-1 max-lg:px-4'>\n <div className='mx-auto mt-11 w-full max-w-[640px]'>\n <div className='mb-6 flex flex-col gap-2'>\n <Skeleton className='h-8' />\n <Skeleton className='h-8 w-full max-w-md' />\n </div>\n <Skeleton className='mt-2 h-4' count={4} randomize={true} />\n <Skeleton className='mt-8 h-[400px]' />\n <Skeleton className='mt-2 h-4' containerClassName='block mt-7 mb-4' count={8} randomize={true} />\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n if (!currentPost) {\n return (\n <div className={`max-h-full overflow-auto rounded-md ${backgroundColor === 'DARK' && 'dark'} ${(backgroundColor === 'LIGHT' || backgroundColor === 'SEPIA') && 'light'} ${COLOR_OPTIONS[backgroundColor].background}`}>\n <div className='flex h-full flex-col'>\n <div className='relative flex-1'>\n <div className={`sticky top-0 z-50 flex h-[102px] items-center justify-center rounded-t-md border-b max-md:h-[68px] ${COLOR_OPTIONS[backgroundColor].background} ${COLOR_OPTIONS[backgroundColor].border}`}>\n <div\n className='grid w-full px-8 max-lg:px-4'\n style={{\n gridTemplateColumns: `1fr minmax(0,${currentGridWidth}) 1fr`\n }}\n >\n <div className='flex items-center'>\n <BackButton className={COLOR_OPTIONS[backgroundColor].button} onClick={onClose} />\n </div>\n <div className='col-[2/3] mx-auto flex w-full items-center gap-3 max-md:hidden'>\n <div className='grow text-center'>\n <span>Error loading article.</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div ref={modalRef as React.RefObject<HTMLDivElement>} className={`max-h-full overflow-auto rounded-md ${backgroundColor === 'DARK' && 'dark'} ${(backgroundColor === 'LIGHT' || backgroundColor === 'SEPIA') && 'light'} ${COLOR_OPTIONS[backgroundColor].background}`} data-scrollable-container>\n\n <>\n <div className='flex h-full flex-col'>\n <div className='relative flex-1'>\n <div className={`sticky top-0 z-50 flex h-[102px] items-center justify-center rounded-t-md border-b max-md:h-[68px] ${COLOR_OPTIONS[backgroundColor].background} ${COLOR_OPTIONS[backgroundColor].border}`}>\n <div\n className='grid w-full px-8 max-lg:px-4'\n style={{\n gridTemplateColumns: `1fr minmax(0,${currentGridWidth}) 1fr`\n }}\n >\n <div className='flex items-center'>\n <BackButton className={COLOR_OPTIONS[backgroundColor].button} onClick={onClose} />\n </div>\n <div className='col-[2/3] mx-auto flex w-full items-center justify-between gap-3 max-md:hidden'>\n <ProfilePreviewHoverCard actor={actor} isCurrentUser={object.authored}>\n <div className='flex cursor-pointer items-center gap-3'>\n <div className='relative z-10 pt-0.5'>\n <APAvatar author={actor}/>\n </div>\n <div className='relative z-10 mt-0.5 flex min-w-0 cursor-pointer flex-col overflow-visible text-[1.5rem]' onClick={e => handleProfileClick(actor, navigate, e)}>\n <div className='flex w-full'>\n <span className='min-w-0 truncate whitespace-nowrap font-semibold text-black hover:underline dark:text-white'>{isLoadingContent ? <Skeleton className='w-20' /> : actor.name}</span>\n </div>\n <div className='flex w-full'>\n {!isLoadingContent && <span className='truncate text-gray-700 after:mx-1 after:font-normal after:text-gray-700 after:content-[\"·\"]'>{getUsername(actor)}</span>}\n <span className='text-gray-700'>{isLoadingContent ? <Skeleton className='w-[120px]' /> : renderTimestamp(object, !object.authored)}</span>\n </div>\n </div>\n </div>\n </ProfilePreviewHoverCard>\n {!object.authored && !isLoadingContent && (\n <FollowButton\n following={actor.followedByMe ?? false}\n handle={getUsername(actor)}\n />\n )}\n </div>\n <div className='col-[3/4] flex items-center justify-end gap-2'>\n <Customizer\n backgroundColor={backgroundColor}\n currentFontSizeIndex={currentFontSizeIndex}\n fontStyle={fontStyle}\n onColorChange={handleColorChange}\n onDecreaseFontSize={decreaseFontSize}\n onFontStyleChange={setFontStyle}\n onIncreaseFontSize={increaseFontSize}\n onOpenChange={setIsCustomizerOpen}\n onResetFontSize={resetFontSize}\n />\n </div>\n </div>\n </div>\n <div className='relative flex-1'>\n <TableOfContents\n iframeElement={iframeElement}\n modalRef={modalRef}\n tocItems={tocItems}\n onOpenChange={setIsTOCOpen}\n />\n {!isLoadingContent && <div className='grow overflow-y-auto'>\n <div className={`mx-auto px-6 pb-10 pt-5`} style={{maxWidth: currentMaxWidth}}>\n <div className='flex flex-col items-center pb-8' id='object-content'>\n <ArticleBody\n authors={authors}\n backgroundColor={backgroundColor}\n excerpt={object.summary ?? ''}\n fontSize={fontSize}\n fontStyle={fontStyle}\n heading={object.name}\n html={object.content ?? ''}\n image={typeof object.image === 'string' ? object.image : object.image?.url}\n isPopoverOpen={isCustomizerOpen || isTOCOpen}\n postUrl={object?.url || ''}\n onHeadingsExtracted={handleHeadingsExtracted}\n onIframeLoad={handleIframeLoad}\n onLoadingChange={setIsLoading}\n />\n <div className='-ml-3 w-full' style={{maxWidth: currentGridWidth}}>\n <FeedItemStats\n actor={actor}\n commentCount={replyCount}\n layout={'modal'}\n likeCount={object.likeCount ?? 0}\n object={object}\n repostCount={object.repostCount ?? 0}\n onLikeClick={onLikeClick}\n />\n </div>\n </div>\n {object.type === 'Tombstone' && (\n <DeletedFeedItem last={true} />\n )}\n\n <div className='mx-auto w-full border-t border-black/[8%] dark:border-gray-950' style={{maxWidth: currentGridWidth}}>\n <APReplyBox\n object={object}\n />\n <FeedItemDivider />\n </div>\n\n {isLoadingContent && <LoadingIndicator size='lg' />}\n\n <div ref={repliesRef} className='mx-auto w-full' style={{maxWidth: currentGridWidth}}>\n {\n processedReplies.map((replyGroup, groupIndex) => {\n const isLastGroup = groupIndex === processedReplies.length - 1;\n const chainId = replyGroup.mainReply.id;\n const isExpanded = expandedChains.has(chainId);\n const isFullyExpanded = fullyExpandedChains.has(chainId);\n const isChainLoading = loadingChains.has(chainId);\n const hasChain = replyGroup.chain.length > 0;\n\n return (\n <React.Fragment key={replyGroup.mainReply.id}>\n <FeedItem\n actor={replyGroup.mainReply.actor}\n allowDelete={replyGroup.mainReply.object.authored}\n commentCount={replyGroup.mainReply.object.replyCount ?? 0}\n isChainParent={hasChain}\n isPending={isPendingActivity(replyGroup.mainReply.id)}\n last={!hasChain}\n layout='reply'\n likeCount={replyGroup.mainReply.object.likeCount ?? 0}\n object={replyGroup.mainReply.object}\n parentId={object.id}\n repostCount={replyGroup.mainReply.object.repostCount ?? 0}\n type='Note'\n onClick={() => {\n const container = modalRef.current;\n if (container && postId) {\n scrollPositionCache.set(postId, container.scrollTop);\n }\n navigate(`/notes/${encodeURIComponent(replyGroup.mainReply.id)}`);\n }}\n onDelete={handleDelete}\n />\n\n {hasChain && replyGroup.chain[0] && (\n <FeedItem\n key={replyGroup.chain[0].id}\n actor={replyGroup.chain[0].actor}\n allowDelete={replyGroup.chain[0].object.authored}\n commentCount={replyGroup.chain[0].object.replyCount ?? 0}\n isChainContinuation={true}\n isPending={isPendingActivity(replyGroup.chain[0].id)}\n last={replyGroup.chain.length === 1}\n layout='reply'\n likeCount={replyGroup.chain[0].object.likeCount ?? 0}\n object={replyGroup.chain[0].object}\n parentId={object.id}\n repostCount={replyGroup.chain[0].object.repostCount ?? 0}\n type='Note'\n onClick={() => {\n const container = modalRef.current;\n if (container && postId) {\n scrollPositionCache.set(postId, container.scrollTop);\n }\n navigate(`/notes/${encodeURIComponent(replyGroup.chain[0].id)}`);\n }}\n onDelete={handleDelete}\n />\n )}\n\n {hasChain && isExpanded && replyGroup.chain.slice(1).map((chainItem: Activity, chainIndex: number) => {\n const isLastChainItem = chainIndex === replyGroup.chain.slice(1).length - 1;\n const hasMoreReplies = hasMoreChildReplies && hasMoreChildReplies(groupIndex);\n const shouldShowConnector = isLastChainItem && hasMoreReplies;\n\n return (\n <FeedItem\n key={chainItem.id}\n actor={chainItem.actor}\n allowDelete={chainItem.object.authored}\n commentCount={chainItem.object.replyCount ?? 0}\n isChainContinuation={true}\n isPending={isPendingActivity(chainItem.id)}\n last={isLastChainItem && !shouldShowConnector}\n layout='reply'\n likeCount={chainItem.object.likeCount ?? 0}\n object={chainItem.object}\n parentId={object.id}\n repostCount={chainItem.object.repostCount ?? 0}\n type='Note'\n onClick={() => {\n const container = modalRef.current;\n if (container && postId) {\n scrollPositionCache.set(postId, container.scrollTop);\n }\n navigate(`/notes/${encodeURIComponent(chainItem.id)}`);\n }}\n onDelete={handleDelete}\n />\n );\n })}\n\n {hasChain && replyGroup.chain.length > 1 && !isExpanded && (\n <ShowRepliesButton\n variant='expand'\n onClick={() => toggleChain(chainId)}\n />\n )}\n\n {hasChain && isExpanded && isFullyExpanded && hasMoreChildReplies && hasMoreChildReplies(groupIndex) && (\n <ShowRepliesButton\n loading={isChainLoading}\n variant='loadMore'\n onClick={() => loadMoreForChain(chainId, groupIndex)}\n />\n )}\n\n {!isLastGroup && <FeedItemDivider />}\n </React.Fragment>\n );\n })\n }\n\n {isLoadingMoreTopLevelReplies && (\n <div className='flex flex-col items-center justify-center text-center'>\n <LoadingIndicator size='md' />\n </div>\n )}\n </div>\n\n {hasMoreChildren && <div ref={loadMoreRef} className='h-1'></div>}\n </div>\n </div>}\n </div>\n </div>\n {!isLoadingContent && <div className='pointer-events-none !visible sticky bottom-0 hidden items-end justify-between px-10 pb-[42px] lg:!flex'>\n <div className='pointer-events-auto text-gray-600'>\n {getReadingTime(object.content ?? '')}\n </div>\n <div key={readingProgress} className='pointer-events-auto min-w-10 text-right text-gray-600 transition-all duration-200 ease-out'>\n {readingProgress}%\n </div>\n </div>}\n </div>\n </>\n </div>\n );\n};\n\nexport default Reader;\n","import FeedItem from '@src/components/feed/feed-item';\nimport Layout from '@src/components/layout';\nimport Reader from './reader';\nimport TopicFilter, {Topic} from '@src/components/topic-filter';\nimport {Activity} from '@src/api/activitypub';\nimport {Button, Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, EmptyIndicator, LoadingIndicator, LucideIcon, Separator} from '@tryghost/shade';\nimport {isPendingActivity} from '@src/utils/pending-activity';\nimport {useEffect, useRef, useState} from 'react';\nimport {useNavigateWithBasePath} from '@src/hooks/use-navigate-with-base-path';\nimport {useNavigationStack, useParams} from '@tryghost/admin-x-framework';\nimport {useTopicsForUser} from '@src/hooks/use-activity-pub-queries';\n\nexport type InboxListProps = {\n isLoading: boolean,\n activities: Activity[],\n currentTopic: Topic,\n fetchNextPage: () => void,\n hasNextPage: boolean,\n isFetchingNextPage: boolean,\n onTopicChange: (topic: Topic) => void\n}\n\nconst InboxList:React.FC<InboxListProps> = ({\n isLoading,\n activities,\n currentTopic,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage,\n onTopicChange\n}) => {\n const navigate = useNavigateWithBasePath();\n const {canGoBack, goBack} = useNavigationStack();\n const [isReaderOpen, setIsReaderOpen] = useState(false);\n const params = useParams();\n const {topicsQuery} = useTopicsForUser();\n const {data: topicsData} = topicsQuery;\n const hasTopics = topicsData && topicsData.topics.length > 0;\n\n useEffect(() => {\n setIsReaderOpen(!!params.postId);\n }, [params.postId]);\n\n const observerRef = useRef<IntersectionObserver | null>(null);\n const loadMoreRef = useRef<HTMLDivElement | null>(null);\n const endLoadMoreRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n\n observerRef.current = new IntersectionObserver((entries) => {\n if (entries[0].isIntersecting && hasNextPage && !isFetchingNextPage) {\n fetchNextPage();\n }\n });\n\n if (loadMoreRef.current) {\n observerRef.current.observe(loadMoreRef.current);\n }\n\n if (endLoadMoreRef.current) {\n observerRef.current.observe(endLoadMoreRef.current);\n }\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n };\n }, [hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n // Calculate the index at which to place the loadMoreRef - This will place it ~75% through the list\n const loadMoreIndex = Math.max(0, Math.floor(activities.length * 0.75) - 1);\n\n return (\n <Layout>\n {hasTopics && <TopicFilter currentTopic={currentTopic} excludeTopics={['top']} onTopicChange={onTopicChange} />}\n <div className='flex w-full flex-col'>\n <div className='w-full'>\n {activities.length > 0 ? (\n <div className='my-4'>\n <div className='mx-auto flex min-h-[calc(100dvh_-_117px)] items-start gap-11'>\n <div className='flex w-full min-w-0 flex-col items-center'>\n <div className='flex w-full min-w-0 flex-col items-start'>\n <ul className='mx-auto flex w-full flex-col' data-testid='inbox-list'>\n {activities.map((activity, index) => (\n <li\n // eslint-disable-next-line react/no-array-index-key\n key={`${activity.id}-${activity.type}-${index}`} // We are using index here as activity.id is cannot be guaranteed to be unique at the moment\n data-testid='inbox-item'\n data-test-view-article\n >\n <FeedItem\n actor={activity.actor}\n allowDelete={activity.object.authored}\n commentCount={activity.object.replyCount ?? 0}\n isLoading={isLoading}\n isPending={isPendingActivity(activity.id)}\n layout={'inbox'}\n likeCount={activity.object.likeCount ?? 0}\n object={activity.object}\n repostCount={activity.object.repostCount ?? 0}\n type={activity.type}\n onClick={() => {\n navigate(`/reader/${encodeURIComponent(activity.id)}`);\n }}\n />\n {index < activities.length - 1 && (\n <Separator />\n )}\n {index === loadMoreIndex && (\n <div ref={loadMoreRef} className='h-1'></div>\n )}\n </li>\n ))}\n {isFetchingNextPage && (\n <li className='flex flex-col items-center justify-center space-y-4 text-center'>\n <LoadingIndicator size='md' />\n </li>\n )}\n </ul>\n <div ref={endLoadMoreRef} className='h-1'></div>\n </div>\n </div>\n </div>\n </div>\n ) : currentTopic !== 'following' ? (\n <div className='mt-[24vh]'>\n <EmptyIndicator\n description=\"Explore other topics for more content.\"\n title=\"Nothing here yet\"\n >\n <LucideIcon.Inbox />\n </EmptyIndicator>\n </div>\n ) : (\n <div className='mt-[24vh]'>\n <EmptyIndicator\n actions={\n hasTopics ? (\n <Button onClick={() => navigate('/explore')}>\n Find accounts to follow →\n </Button>\n ) : (\n <Button asChild>\n <a href=\"https://explore.ghost.org/social-web\" rel=\"noopener noreferrer\" target=\"_blank\">\n Find accounts to follow →\n </a>\n </Button>\n )\n }\n description=\"Start following publishers to see their long-form posts here.\"\n title=\"Your Reader is empty\"\n >\n <LucideIcon.Inbox />\n </EmptyIndicator>\n </div>\n )}\n </div>\n </div>\n <Dialog\n open={isReaderOpen}\n onOpenChange={(open: boolean) => {\n if (!open) {\n if (canGoBack) {\n goBack();\n } else {\n navigate('/reader');\n }\n }\n setIsReaderOpen(open);\n }}\n >\n <DialogContent className='inset-y-3 h-[calc(100vh-24px)] w-screen max-w-[calc(100vw-24px)] !animate-none p-0 focus:outline-none dark:bg-gray-950'>\n <DialogHeader className='hidden'>\n <DialogTitle>Reader</DialogTitle>\n <DialogDescription>Ghost reader for long form articles</DialogDescription>\n </DialogHeader>\n {params.postId && <Reader postId={params.postId} onClose={() => {\n if (canGoBack) {\n goBack();\n } else {\n navigate('/reader');\n }\n }} />}\n </DialogContent>\n </Dialog>\n </Layout>\n );\n};\n\nexport default InboxList;\n","import AppError from '@components/layout/error';\nimport InboxList from './components/inbox-list';\nimport React, {useState} from 'react';\nimport {Topic} from '@src/components/topic-filter';\nimport {isApiError} from '@src/api/activitypub';\nimport {useDiscoveryFeedForUser, useInboxForUser} from '@hooks/use-activity-pub-queries';\n\nconst Inbox: React.FC = () => {\n const [topic, setTopic] = useState<Topic>('following');\n\n const {inboxQuery: followingQuery} = useInboxForUser({enabled: topic === 'following'});\n const {discoveryFeedQuery: discoverQuery} = useDiscoveryFeedForUser({enabled: topic !== 'following', topic});\n\n const feedQueryData = topic === 'following' ? followingQuery : discoverQuery;\n const {data, error, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading} = feedQueryData;\n\n const topicNotFound = error && isApiError(error) && error.statusCode === 404 && topic !== 'following';\n\n if (error && isApiError(error) && !topicNotFound) {\n return <AppError errorCode={error.code} statusCode={error.statusCode}/>;\n }\n\n const activities = topicNotFound ? [] : (data?.pages.flatMap(page => page.posts) ?? Array.from({length: 5}, (_, index) => ({id: `placeholder-${index}`, object: {}})));\n\n return <InboxList\n activities={activities}\n currentTopic={topic}\n fetchNextPage={fetchNextPage}\n hasNextPage={hasNextPage!}\n isFetchingNextPage={isFetchingNextPage}\n isLoading={isLoading}\n onTopicChange={setTopic}\n />;\n};\n\nexport default Inbox;\n"],"names":["__iconNode","Minus","createLucideIcon","EmptyBadge","React__default","children","className","props","ref","jsx","cn","EmptyIndicator","title","description","actions","jsxs","FONT_SIZES","STORAGE_KEYS","COLOR_OPTIONS","useCustomizerSettings","backgroundColor","setBackgroundColor","useState","saved","currentFontSizeIndex","setCurrentFontSizeIndex","fontStyle","setFontStyle","handleColorChange","color","useEffect","prevIndex","Customizer","onColorChange","onFontStyleChange","onDecreaseFontSize","onIncreaseFontSize","onResetFontSize","onOpenChange","isActiveColor","isActiveFont","font","CustomizerView","Popover","PopoverTrigger","Button","Icon","PopoverContent","e","LucideIcon.Minus","LucideIcon.Plus","TableOfContents","tocItems","iframeElement","modalRef","activeHeadingId","setActiveHeadingId","isScrollingToHeading","React","handleHeadingClick","id","heading","container","handleScroll","doc","scrollTop","buffer","headings","item","el","activeHeading","prev","curr","scrollHandler","TableOfContentsView","LINE_WIDTHS","HEADING_PADDINGS","items","onItemClick","open","setOpen","timeoutRef","getNormalizedLevel","level","getLineWidth","getHeadingPadding","handleMouseEnter","handleMouseLeave","articleBodyStyles","audio$1","gallery$1","toggle$1","video$1","audio","blockquote","bookmark","button","callout","collection","cta","file","gallery","header","header_v2","nft","product","signup","toggle","video","jsModules","cssModules","cardsJS","module","cardsCSS","ArticleBody","postUrl","image","excerpt","authors","html","fontSize","onHeadingsExtracted","onIframeLoad","onLoadingChange","isPopoverOpen","iframeRef","useRef","isLoading","setIsLoading","iframeHeight","setIframeHeight","darkMode","cssContent","htmlContent","author","openLinksInNewTab","iframe","handleMessage","event","newHeight","handleIframeKeyDown","newEvent","handleIframeLoad","iframeWindow","iframeDocument","_a","root","resizeEvent","handleLoad","headingElements","highestLevel","idx","normalizedLevel","Skeleton","FeedItemDivider","scrollPositionCache","Reader","postId","onClose","increaseFontSize","decreaseFontSize","resetFontSize","isCustomizerOpen","setIsCustomizerOpen","isTOCOpen","setIsTOCOpen","expandedChains","setExpandedChains","fullyExpandedChains","setFullyExpandedChains","loadingChains","setLoadingChains","isLoadingMoreTopLevelReplies","setIsLoadingMoreTopLevelReplies","observerRef","loadMoreRef","currentPost","processedReplies","isLoadingContent","loadMoreChildren","loadMoreChildReplies","hasMoreChildren","hasMoreChildReplies","useReplyChainData","activityData","object","actor","_b","replyCount","entries","error","handleDelete","toggleChain","chainId","newSet","fullyExpanded","newFullyExpanded","loadMoreForChain","childIndex","onLikeClick","repliesRef","currentMaxWidth","currentGridWidth","readingProgress","setReadingProgress","debouncedSetReadingProgress","useDebounce","PROGRESS_INCREMENT","article","articleRect","containerRect","scrolledPast","totalHeight","rawProgress","progress","observer","setTocItems","setIframeElement","handleHeadingsExtracted","useCallback","timeoutId","navigate","useNavigateWithBasePath","savedPosition","BackButton","Fragment","ProfilePreviewHoverCard","APAvatar","handleProfileClick","getUsername","renderTimestamp","FollowButton","_c","FeedItemStats","DeletedFeedItem","APReplyBox","LoadingIndicator","replyGroup","groupIndex","isLastGroup","isExpanded","isFullyExpanded","isChainLoading","hasChain","FeedItem","isPendingActivity","chainItem","chainIndex","isLastChainItem","hasMoreReplies","shouldShowConnector","ShowRepliesButton","InboxList","activities","currentTopic","fetchNextPage","hasNextPage","isFetchingNextPage","onTopicChange","canGoBack","goBack","useNavigationStack","isReaderOpen","setIsReaderOpen","params","useParams","topicsQuery","useTopicsForUser","topicsData","hasTopics","endLoadMoreRef","loadMoreIndex","Layout","TopicFilter","activity","index","Separator","LucideIcon.Inbox","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Inbox","topic","setTopic","followingQuery","useInboxForUser","discoverQuery","useDiscoveryFeedForUser","feedQueryData","data","topicNotFound","isApiError","AppError","page","_"],"mappings":"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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WCDXC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCATC,2RACAC,8hCAEOC,KAAU,OAAO,OAAOF,EAAS,EACzC,IAAI,CAAAG,MAAUA,EAAO,OAAO,EAC5B,KAAK;AAAA;AAAA,CAAM,GAEHC,KAAW,OAAO,OAAOH,EAAU,EAC3C,IAAI,CAAAE,MAAUA,EAAO,OAAO,EAC5B,KAAK;AAAA;AAAA,CAAM,GCuBVE,KAiBD,CAAC;AAAA,EACF,SAAAC;AAAA,EACA,SAAAtD;AAAA,EACA,OAAAuD;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAC;AAAA,EACA,iBAAAnG;AAAA,EACA,UAAAoG;AAAA,EACA,WAAA9F;AAAA,EACA,qBAAA+F;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,eAAAC;AACJ,MAAM;AACF,QAAMC,IAAYC,EAA0B,IAAI,GAC1C,CAACC,GAAWC,CAAY,IAAI1G,EAAS,EAAI,GACzC,CAAC2G,GAAcC,CAAe,IAAI5G,EAAS,KAAK,GAChD6G,IAAY,SAAS,gBAAgB,UAAU,SAAS,MAAM,KAAK/G,MAAoB,YAAaA,MAAoB,QAExHgH,IAAa5C,GAAA,GAEb6C,IAAc;AAAA,2BACIF,IAAoB,UAAT,MAAgB,aAAazG,CAAS,SAASN,MAAoB,WAAW,cAAc;AAAA;AAAA,cAErHgH,CAAU;AAAA;AAAA;AAAA,mCAGWZ,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAYzBP,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kFA4EwDpD,CAAO;AAAA,kBACvEwD,IAAU,iCAAiCA,CAAO,SAAS,EAAE;AAAA,2BACpDF,CAAO;AAAA,sBACZG,KAAWA,EAAQ,SAAS,IAAI;AAAA;AAAA,0BAE5BA,EAAQ,IAAI,CAAAgB,MAAU;AAAA;AAAA,sCAEVA,EAAO,gBACnC,aAAaA,EAAO,aAAa,UAAUA,EAAO,IAAI,OACtD,+ZACV;AAAA;AAAA,6BAE6B,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA,wBAEf,EAAE;AAAA;AAAA,0BAEAhB,KAAWA,EAAQ,SAAS,IAAI;AAAA;AAAA,kCAExBA,EAAQ,SAAS,IAAI,GAAGA,EAAQ,CAAC,EAAE,IAAI,QAAQA,EAAQ,SAAS,CAAC,IAAIA,EAAQ,SAAS,MAAM,IAAI,UAAU,QAAQ,KAAKA,EAAQ,CAAC,EAAE,IAAI;AAAA;AAAA,4BAE5I,EAAE;AAAA,0DAC4BH,IAAU,IAAI,IAAIA,CAAO,EAAE,WAAW,EAAE;AAAA;AAAA;AAAA,kBAGhFC,IAAQ;AAAA;AAAA,gCAEMA,CAAK,UAAUvD,CAAO;AAAA;AAAA,oBAElC,EAAE;AAAA;AAAA;AAAA,kBAGJ0E,GAAkBhB,CAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAgBvBR,EAAO;AAAA;AAAA;AAAA;AAAA;AAMrB,SAAAjF,EAAU,MAAM;AACZ,UAAM0G,IAASX,EAAU;AACzB,QAAI,CAACW;AACD;AAGJ,IAAKA,EAAO,WACRA,EAAO,SAASH;AAGpB,UAAMI,IAAgB,CAACC,MAAwB;AAC3C,UAAIA,EAAM,KAAK,SAAS,UAAU;AAC9B,cAAMC,IAAY,GAAGD,EAAM,KAAK,aAAa,EAAE;AAC/C,QAAAR,EAAgBS,CAAS,GACzBH,EAAO,MAAM,SAASG,GAElBD,EAAM,KAAK,YACXV,EAAa,EAAK;AAAA,MAE1B;AAAA,IACJ,GAGMY,IAAsB,CAACF,MAAyB;AAClD,UAAIA,EAAM,QAAQ,UAAU;AAExB,QAAAA,EAAM,eAAA,GACNA,EAAM,gBAAA;AAGN,cAAMG,IAAW,IAAI,cAAc,WAAW;AAAA,UAC1C,KAAK;AAAA,UACL,MAAM;AAAA,UACN,SAAS;AAAA,UACT,OAAO;AAAA,UACP,SAAS;AAAA,UACT,YAAY;AAAA,QAAA,CACf;AACD,iBAAS,cAAcA,CAAQ;AAAA,MACnC;AAAA,IACJ,GAGMC,IAAmB,MAAM;AAC3B,YAAMC,IAAeP,EAAO;AAC5B,MAAIO,KACAA,EAAa,iBAAiB,WAAWH,CAAmB;AAAA,IAEpE;AAEA,WAAAJ,EAAO,iBAAiB,QAAQM,CAAgB,GAChD,OAAO,iBAAiB,WAAWL,CAAa,GAEzC,MAAM;AACT,aAAO,oBAAoB,WAAWA,CAAa,GACnDD,EAAO,oBAAoB,QAAQM,CAAgB;AACnD,YAAMC,IAAeP,EAAO;AAC5B,MAAIO,KACAA,EAAa,oBAAoB,WAAWH,CAAmB;AAAA,IAEvE;AAAA,EACJ,GAAG,CAACP,CAAW,CAAC,GAGhBvG,EAAU,MAAM;;AACZ,UAAM0G,IAASX,EAAU;AACzB,QAAI,CAACW;AACD;AAGJ,UAAMQ,IAAiBR,EAAO,qBAAmBS,IAAAT,EAAO,kBAAP,gBAAAS,EAAsB;AACvE,QAAI,CAACD;AACD;AAGJ,UAAME,IAAOF,EAAe;AAC5B,IAAAE,EAAK,MAAM,YAAY,eAAe1B,CAAQ,GAC9C0B,EAAK,UAAU,OAAO,iBAAiB,gBAAgB,GACvDA,EAAK,UAAU,IAAI,OAAOxH,CAAS,OAAO,GAC1CwH,EAAK,UAAU,OAAO,iBAAiB,gBAAgB,GACvDA,EAAK,UAAU,IAAI,OAAQf,IAAoB,UAAT,MAAgB,OAAO,GACzD/G,MAAoB,UACpB8H,EAAK,UAAU,IAAI,cAAc,IAEjCA,EAAK,UAAU,OAAO,cAAc;AAGxC,UAAMH,IAAeP,EAAO;AAC5B,QAAIO,KAAgB,OAAOA,EAAa,gBAAiB;AACrD,MAAAA,EAAa,aAAA;AAAA,SACV;AACH,YAAMI,IAAc,IAAI,MAAM,QAAQ;AACtC,MAAAH,EAAe,cAAcG,CAAW;AAAA,IAC5C;AAAA,EACJ,GAAG,CAAC3B,GAAU9F,GAAWN,GAAiB+G,CAAQ,CAAC,GAEnDrG,EAAU,MAAM;AACZ,UAAM0G,IAASX,EAAU;AACzB,QAAI,CAACW;AACD;AAGJ,UAAMY,IAAa,MAAM;AACrB,UAAI,CAACZ,EAAO;AACR;AAIJ,YAAMa,IAAkB,MAAM;AAAA,QAC1Bb,EAAO,gBAAgB,iBAAiB,2CAA2C;AAAA,MAAA;AAGvF,UAAIa,EAAgB,WAAW;AAC3B;AAIJ,YAAMC,IAAe,KAAK;AAAA,QACtB,GAAGD,EAAgB,IAAI,CAAAhF,MAAM,SAASA,EAAG,QAAQ,CAAC,CAAC,CAAC;AAAA,MAAA,GAIlDF,IAAWkF,EAAgB,IAAI,CAAChF,GAAIkF,OAAQ;AAC9C,cAAM3F,IAAK,WAAW2F,EAAG;AACzB,QAAAlF,EAAG,KAAKT;AAIR,cAAM4F,KADc,SAASnF,EAAG,QAAQ,CAAC,CAAC,IACJiF,IAAe;AAErD,eAAO;AAAA,UACH,IAAA1F;AAAA,UACA,MAAMS,EAAG,eAAe;AAAA,UACxB,OAAOmF;AAAA,UACP,SAASnF;AAAA,QAAA;AAAA,MAEjB,CAAC;AAED,MAAAoD,KAAA,QAAAA,EAAsBtD,IACtBuD,KAAA,QAAAA,EAAec;AAAA,IACnB;AAEA,WAAAA,EAAO,iBAAiB,QAAQY,CAAU,GACnC,MAAMZ,EAAO,oBAAoB,QAAQY,CAAU;AAAA,EAC9D,GAAG,CAAC3B,GAAqBC,CAAY,CAAC,GAGtC5F,EAAU,MAAM;AACZ,IAAA6F,KAAA,QAAAA,EAAkBI;AAAA,EACtB,GAAG,CAACA,GAAWJ,CAAe,CAAC,yBAG1B,OAAA,EAAI,WAAU,eACX,UAAA5G,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,kBACV,UAAA;AAAA,IAAAgH,KACGhH,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,iDACX,UAAA;AAAA,MAAAA,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,4BACX,UAAA;AAAA,QAAAN,gBAAAA,EAAAA,IAACgJ,GAAA,EAAS,WAAU,MAAA,CAAM;AAAA,QAC1BhJ,gBAAAA,EAAAA,IAACgJ,GAAA,EAAS,WAAU,sBAAA,CAAsB;AAAA,MAAA,GAC9C;AAAA,4BACCA,GAAA,EAAS,WAAU,YAAW,OAAO,GAAG,WAAW,IAAM;AAAA,MAC1DhJ,gBAAAA,EAAAA,IAACgJ,GAAA,EAAS,WAAU,iBAAA,CAAiB;AAAA,MACrChJ,gBAAAA,EAAAA,IAACgJ,KAAS,WAAU,YAAW,oBAAmB,mBAAkB,OAAO,GAAG,WAAW,GAAA,CAAM;AAAA,IAAA,GACnG;AAAA,IAEJhJ,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,KAAKoH;AAAA,QACL,IAAG;AAAA,QACH,OAAO;AAAA,UACH,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,QAAQI;AAAA,UACR,UAAU;AAAA,UACV,SAASF,IAAY,IAAI;AAAA,UACzB,YAAY;AAAA,UACZ,eAAeH,IAAgB,SAAS;AAAA,QAAA;AAAA,QAE5C,OAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EACV,EAAA,CACJ,EAAA,CACJ;AAER,GAEM8B,KAA4B,MAC9BjJ,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,sCAAA,CAAsC,GAQnDkJ,wBAA0B,IAAA,GAEnBC,KAAgC,CAAC;AAAA,EAC1C,QAAAC,IAAS;AAAA,EACT,SAAAC;AACJ,MAAM;;AACF,QAAM;AAAA,IACF,iBAAA1I;AAAA,IACA,sBAAAI;AAAA,IACA,WAAAE;AAAA,IACA,UAAA8F;AAAA,IACA,mBAAA5F;AAAA,IACA,cAAAD;AAAA,IACA,kBAAAoI;AAAA,IACA,kBAAAC;AAAA,IACA,eAAAC;AAAA,EAAA,IACA9I,GAAA,GACEmC,IAAWwE,EAAoB,IAAI,GACnC,CAACoC,GAAkBC,CAAmB,IAAI7I,EAAS,EAAK,GACxD,CAAC8I,GAAWC,CAAY,IAAI/I,EAAS,EAAK,GAE1C,CAACgJ,GAAgBC,CAAiB,IAAIjJ,EAAsB,oBAAI,KAAK,GACrE,CAACkJ,GAAqBC,CAAsB,IAAInJ,EAAsB,oBAAI,KAAK,GAC/E,CAACoJ,GAAeC,CAAgB,IAAIrJ,EAAsB,oBAAI,KAAK,GACnE,CAACsJ,GAA8BC,CAA+B,IAAIvJ,EAAS,EAAK,GAChFwJ,IAAchD,EAAoC,IAAI,GACtDiD,IAAcjD,EAA8B,IAAI,GAEhD;AAAA,IACF,MAAMkD;AAAA,IACN,kBAAAC;AAAA,IACA,WAAWC;AAAA,IACX,kBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,qBAAAC;AAAA,EAAA,IACAC,GAAkB1B,KAAU,IAAI,EAAC,kBAAkB,IAAM,GAEvD2B,IAAeR,GACfS,IAASD,KAAA,gBAAAA,EAAc,QACvBE,IAAQF,KAAA,gBAAAA,EAAc,OACtBlE,MAAUqE,MAAA1C,KAAAuC,KAAA,gBAAAA,EAAc,WAAd,gBAAAvC,GAAsB,aAAtB,gBAAA0C,GAAgC,cAE1CC,MAAaH,KAAA,gBAAAA,EAAQ,eAAc;AAEzC,EAAA3J,EAAU,MAAM;AAEZ,QAAI,CAACuJ;AACD;AAGJ,IAAIP,EAAY,WACZA,EAAY,QAAQ,WAAA;AAGxB,UAAMhH,IAAYR,EAAS;AAC3B,QAAKQ;AAIL,aAAAgH,EAAY,UAAU,IAAI,qBAAqB,OAAOe,MAAY;AAC9D,YAAIA,EAAQ,CAAC,EAAE,kBAAkBR,MAAmB,CAACT,GAA8B;AAC/E,UAAAC,EAAgC,EAAI;AACpC,cAAI;AACA,kBAAMM,GAAA;AAAA,UACV,SAASW,GAAO;AAEZ,oBAAQ,MAAM,0CAA0CA,CAAK;AAAA,UACjE,UAAA;AACI,YAAAjB,EAAgC,EAAK;AAAA,UACzC;AAAA,QACJ;AAAA,MACJ,GAAG;AAAA,QACC,MAAM/G;AAAA,QACN,YAAY;AAAA,MAAA,CACf,GAEGiH,EAAY,WACZD,EAAY,QAAQ,QAAQC,EAAY,OAAO,GAG5C,MAAM;AACT,QAAID,EAAY,WACZA,EAAY,QAAQ,WAAA;AAAA,MAE5B;AAAA,EACJ,GAAG,CAACO,IAAiBT,GAA8BO,EAAgB,CAAC;AAEpE,WAASY,KAAe;AAAA,EAExB;AAEA,WAASC,GAAYC,GAAiB;AAClC,IAAA1B,EAAkB,CAAChG,MAAS;AACxB,YAAM2H,IAAS,IAAI,IAAI3H,CAAI;AAC3B,aAAI2H,EAAO,IAAID,CAAO,IAClBC,EAAO,OAAOD,CAAO,KAErBC,EAAO,IAAID,CAAO,GAClBxB,EAAuB,CAAC0B,MAAkB;AACtC,cAAMC,IAAmB,IAAI,IAAID,CAAa;AAC9C,eAAAC,EAAiB,IAAIH,CAAO,GACrBG;AAAA,MACX,CAAC,IAEEF;AAAA,IACX,CAAC;AAAA,EACL;AAEA,iBAAeG,GAAiBJ,GAAiBK,GAAoB;AACjE,QAAI,CAAA5B,EAAc,IAAIuB,CAAO,GAI7B;AAAA,MAAAtB,EAAiB,OAAQ,IAAI,IAAIpG,CAAI,EAAE,IAAI0H,CAAO,CAAC;AAEnD,UAAI;AACA,QAAIb,MACA,MAAMA,GAAqBkB,CAAU;AAAA,MAE7C,SAASR,GAAO;AAEZ,gBAAQ,MAAM,0CAA0CA,CAAK;AAAA,MACjE,UAAA;AACI,QAAAnB,EAAiB,CAACpG,MAAS;AACvB,gBAAM2H,IAAS,IAAI,IAAI3H,CAAI;AAC3B,iBAAA2H,EAAO,OAAOD,CAAO,GACdC;AAAA,QACX,CAAC;AAAA,MACL;AAAA;AAAA,EACJ;AAEA,QAAMK,KAAc,MAAM;AAAA,EAG1B,GAEMC,KAAa1E,EAAuB,IAAI,GAExC2E,KAAkB,SAClBC,IAAmB,SAEnB,CAACC,IAAiBC,EAAkB,IAAItL,EAAS,CAAC,GAClD,CAACyG,GAAWC,EAAY,IAAI1G,EAAS,EAAI,GAGzC,CAACuL,EAA2B,IAAIC,GAAYF,IAAoB,GAAG,GAEnEG,KAAqB;AAE3B,EAAAjL,EAAU,MAAM;AACZ,UAAMgC,IAAYR,EAAS,SACrB0J,IAAU,SAAS,eAAe,gBAAgB,GAElDjJ,IAAe,MAAM;AAKvB,UAJIgE,KAIA,CAACjE,KAAa,CAACkJ;AACf;AAGJ,YAAMC,IAAcD,EAAQ,sBAAA,GACtBE,IAAgBpJ,EAAU,sBAAA;AAIhC,UAFqCmJ,EAAY,UAAUC,EAAc,QAEvC;AAC9B,QAAAL,GAA4B,GAAG;AAC/B;AAAA,MACJ;AAEA,YAAMM,IAAe,KAAK,IAAI,GAAGD,EAAc,MAAMD,EAAY,GAAG,GAC9DG,IAAeJ,EAAwB,eAAgBlJ,EAA0B,cAEjFuJ,IAAc,KAAK,IAAI,KAAK,IAAKF,IAAeC,IAAe,KAAK,CAAC,GAAG,GAAG,GAC3EE,KAAW,KAAK,MAAMD,IAAcN,EAAkB,IAAIA;AAEhE,MAAAF,GAA4BS,EAAQ;AAAA,IACxC;AAEA,QAAIvF;AACA;AAGJ,UAAMwF,IAAW,IAAI,iBAAiBxJ,CAAY;AAClD,WAAIiJ,KACAO,EAAS,QAAQP,GAAS;AAAA,MACtB,WAAW;AAAA,MACX,SAAS;AAAA,MACT,eAAe;AAAA,IAAA,CAClB,GAGLlJ,KAAA,QAAAA,EAAW,iBAAiB,UAAUC,IACtCA,EAAA,GAEO,MAAM;AACT,MAAAD,KAAA,QAAAA,EAAW,oBAAoB,UAAUC,IACzCwJ,EAAS,WAAA;AAAA,IACb;AAAA,EACJ,GAAG,CAACxF,GAAW8E,EAA2B,CAAC;AAE3C,QAAM,CAACzJ,IAAUoK,EAAW,IAAIlM,EAAoB,CAAA,CAAE,GAChD,CAACiC,IAAiBC,EAAkB,IAAIlC,EAAwB,IAAI,GACpE,CAAC+B,GAAeoK,EAAgB,IAAInM,EAAmC,IAAI,GAE3EoM,KAA0BC,GAAY,CAACxJ,MAAwB;AACjE,IAAAqJ,GAAYrJ,CAAQ;AAAA,EACxB,GAAG,CAAA,CAAE,GAEC2E,KAAmB6E,GAAY,CAACnF,MAA8B;AAChE,IAAAiF,GAAiBjF,CAAM;AAAA,EAC3B,GAAG,CAAA,CAAE;AAEL,EAAA1G,EAAU,MAAM;AACZ,QAAI,EAACuB,KAAA,QAAAA,EAAe,oBAAmB,CAACD,GAAS;AAC7C;AAqDJ,UAAMwK,IAAY,WAlDI,MAAM;AACxB,YAAM9J,IAAYR,EAAS;AAC3B,UAAI,CAACQ;AACD;AAGJ,YAAMC,IAAe,MAAM;AACvB,cAAMC,IAAMX,EAAc;AAC1B,YAAI,CAACW,KAAO,CAACA,EAAI;AACb;AAGJ,cAAMC,IAAYH,EAAU,WAEtBK,IAAWf,GACZ,IAAI,CAAAgB,MAAQJ,EAAI,eAAeI,EAAK,EAAE,CAAC,EACvC,OAAO,CAACC,MAA0BA,MAAO,IAAI,EAC7C,IAAI,CAAAA,OAAO;AAAA,UACR,SAASA;AAAA,UACT,IAAIA,EAAG;AAAA,UACP,KAAKA,EAAG;AAAA,QAAA,EACV;AAEN,YAAI,CAACF,EAAS;AACV;AAGJ,cAAMD,IAAS;AAEf,YAAII,IAAgB;AAEpB,mBAAWT,KAAWM;AAClB,cAAIN,EAAQ,MAAMK,KAAUD;AACxB,YAAAK,IAAgBT;AAAA;AAEhB;AAIR,QAAAL,IAAmBc,KAAA,gBAAAA,EAAe,OAAM,IAAI;AAAA,MAChD;AAEA,aAAAR,EAAU,iBAAiB,UAAUC,CAAY,GACjDA,EAAA,GAEO,MAAM;AACT,QAAAD,EAAU,oBAAoB,UAAUC,CAAY;AAAA,MACxD;AAAA,IACJ,GAE4C,GAAG;AAC/C,WAAO,MAAM,aAAa6J,CAAS;AAAA,EACvC,GAAG,CAACvK,GAAeD,IAAUG,EAAe,CAAC;AAE7C,QAAMsK,KAAWC,GAAA;AA0BjB,SAvBAhM,EAAU,MAAM;AACZ,UAAMgC,IAAYR,EAAS;AAC3B,WAAO,MAAM;AACT,MAAIQ,KAAa+F,KACbF,EAAoB,IAAIE,GAAQ/F,EAAU,SAAS;AAAA,IAE3D;AAAA,EACJ,GAAG,CAAC+F,CAAM,CAAC,GAGX/H,EAAU,MAAM;AACZ,QAAI,CAACiG,KAAa,CAACmD,KAAoBrB,KAAUvG,EAAS,SAAS;AAC/D,YAAMyK,IAAgBpE,EAAoB,IAAIE,CAAM;AACpD,MAAIkE,MAAkB,UAAaA,IAAgB,KAC/C,WAAW,MAAM;AACb,QAAIzK,EAAS,YACTA,EAAS,QAAQ,YAAYyK;AAAA,MAErC,GAAG,GAAG;AAAA,IAEd;AAAA,EACJ,GAAG,CAAChG,GAAWmD,GAAkBrB,CAAM,CAAC,GAEpCqB,IAEIzK,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAW,uCAAuCW,MAAoB,UAAU,MAAM,KAAKA,MAAoB,WAAWA,MAAoB,YAAY,OAAO,IAAIF,EAAcE,CAAe,EAAE,UAAU,IAC/M,UAAAX,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,wBACX,UAAAM,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,mBACX,UAAA;AAAA,IAAAN,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAW,sGAAsGS,EAAcE,CAAe,EAAE,UAAU,IAAIF,EAAcE,CAAe,EAAE,MAAM,IACpM,UAAAL,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAU;AAAA,QACV,OAAO;AAAA,UACH,qBAAqB,gBAAgB2L,CAAgB;AAAA,QAAA;AAAA,QAGzD,UAAA;AAAA,UAAAjM,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,qBACX,UAAAA,gBAAAA,EAAAA,IAACuN,IAAA,EAAW,WAAW9M,EAAcE,CAAe,EAAE,QAAQ,SAAS0I,EAAA,CAAS,GACpF;AAAA,UACA/I,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,kEACX,UAAA;AAAA,YAAAN,gBAAAA,EAAAA,IAACgJ,GAAA,EAAS,WAAU,uBAAA,CAAuB;AAAA,YAC3C1I,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,aACX,UAAA;AAAA,cAAAN,gBAAAA,EAAAA,IAACgJ,GAAA,EAAS,WAAU,SAAA,CAAS;AAAA,cAC7BhJ,gBAAAA,EAAAA,IAACgJ,GAAA,EAAS,WAAU,QAAA,CAAQ;AAAA,YAAA,EAAA,CAChC;AAAA,UAAA,GACJ;AAAA,UACAhJ,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,iDACX,UAAAA,gBAAAA,EAAAA;AAAAA,YAACuB;AAAA,YAAA;AAAA,cACG,iBAAAZ;AAAA,cACA,sBAAAI;AAAA,cACA,WAAAE;AAAA,cACA,eAAeE;AAAA,cACf,oBAAoBoI;AAAA,cACpB,mBAAmBrI;AAAA,cACnB,oBAAoBoI;AAAA,cACpB,cAAcI;AAAA,cACd,iBAAiBF;AAAA,YAAA;AAAA,UAAA,EACrB,CACJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAER;AAAA,0BACC,OAAA,EAAI,WAAU,+BACX,UAAAlJ,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,sCACX,UAAA;AAAA,MAAAA,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,4BACX,UAAA;AAAA,QAAAN,gBAAAA,EAAAA,IAACgJ,GAAA,EAAS,WAAU,MAAA,CAAM;AAAA,QAC1BhJ,gBAAAA,EAAAA,IAACgJ,GAAA,EAAS,WAAU,sBAAA,CAAsB;AAAA,MAAA,GAC9C;AAAA,4BACCA,GAAA,EAAS,WAAU,YAAW,OAAO,GAAG,WAAW,IAAM;AAAA,MAC1DhJ,gBAAAA,EAAAA,IAACgJ,GAAA,EAAS,WAAU,iBAAA,CAAiB;AAAA,MACrChJ,gBAAAA,EAAAA,IAACgJ,KAAS,WAAU,YAAW,oBAAmB,mBAAkB,OAAO,GAAG,WAAW,GAAA,CAAM;AAAA,IAAA,EAAA,CACnG,EAAA,CACJ;AAAA,EAAA,EAAA,CACJ,GACJ,GACJ,IAIHuB,IA6BDvK,gBAAAA,EAAAA,IAAC,OAAA,EAAI,KAAK6C,GAA6C,WAAW,uCAAuClC,MAAoB,UAAU,MAAM,KAAKA,MAAoB,WAAWA,MAAoB,YAAY,OAAO,IAAIF,EAAcE,CAAe,EAAE,UAAU,IAAI,6BAAyB,IAE9R,UAAAX,gBAAAA,EAAAA,IAAAwN,EAAAA,UAAA,EACI,UAAAlN,gBAAAA,OAAC,OAAA,EAAI,WAAU,wBACX,UAAA;AAAA,IAAAA,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,mBACX,UAAA;AAAA,MAAAN,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAW,sGAAsGS,EAAcE,CAAe,EAAE,UAAU,IAAIF,EAAcE,CAAe,EAAE,MAAM,IACpM,UAAAL,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAU;AAAA,UACV,OAAO;AAAA,YACH,qBAAqB,gBAAgB2L,CAAgB;AAAA,UAAA;AAAA,UAGzD,UAAA;AAAA,YAAAjM,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,qBACX,UAAAA,gBAAAA,EAAAA,IAACuN,IAAA,EAAW,WAAW9M,EAAcE,CAAe,EAAE,QAAQ,SAAS0I,EAAA,CAAS,GACpF;AAAA,YACA/I,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,kFACX,UAAA;AAAA,cAAAN,gBAAAA,EAAAA,IAACyN,IAAA,EAAwB,OAAAxC,GAAc,eAAeD,EAAO,UACzD,UAAA1K,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,0CACX,UAAA;AAAA,gBAAAN,gBAAAA,EAAAA,IAAC,SAAI,WAAU,wBACX,gCAAC0N,IAAA,EAAS,QAAQzC,GAAM,EAAA,CAC5B;AAAA,gBACA3K,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,4FAA2F,SAAS,OAAKqN,GAAmB1C,GAAOmC,IAAU,CAAC,GACzJ,UAAA;AAAA,kBAAApN,gBAAAA,MAAC,OAAA,EAAI,WAAU,eACX,UAAAA,gBAAAA,MAAC,UAAK,WAAU,+FAA+F,UAAAyK,IAAmBzK,gBAAAA,EAAAA,IAACgJ,KAAS,WAAU,OAAA,CAAO,IAAKiC,EAAM,MAAK,GACjL;AAAA,kBACA3K,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,eACV,UAAA;AAAA,oBAAA,CAACmK,KAAoBzK,gBAAAA,MAAC,QAAA,EAAK,WAAU,+FAA+F,UAAA4N,GAAY3C,CAAK,GAAE;AAAA,oBACxJjL,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,iBAAiB,cAAmBA,gBAAAA,MAACgJ,GAAA,EAAS,WAAU,YAAA,CAAY,IAAK6E,GAAgB7C,GAAQ,CAACA,EAAO,QAAQ,EAAA,CAAE;AAAA,kBAAA,EAAA,CACvI;AAAA,gBAAA,EAAA,CACJ;AAAA,cAAA,EAAA,CACJ,EAAA,CACJ;AAAA,cACC,CAACA,EAAO,YAAY,CAACP,KAClBzK,gBAAAA,EAAAA;AAAAA,gBAAC8N;AAAA,gBAAA;AAAA,kBACG,WAAW7C,EAAM,gBAAgB;AAAA,kBACjC,QAAQ2C,GAAY3C,CAAK;AAAA,gBAAA;AAAA,cAAA;AAAA,YAC7B,GAER;AAAA,YACAjL,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,iDACX,UAAAA,gBAAAA,EAAAA;AAAAA,cAACuB;AAAA,cAAA;AAAA,gBACG,iBAAAZ;AAAA,gBACA,sBAAAI;AAAA,gBACA,WAAAE;AAAA,gBACA,eAAeE;AAAA,gBACf,oBAAoBoI;AAAA,gBACpB,mBAAmBrI;AAAA,gBACnB,oBAAoBoI;AAAA,gBACpB,cAAcI;AAAA,gBACd,iBAAiBF;AAAA,cAAA;AAAA,YAAA,EACrB,CACJ;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA,GAER;AAAA,MACAlJ,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,mBACX,UAAA;AAAA,QAAAN,gBAAAA,EAAAA;AAAAA,UAAC0C;AAAA,UAAA;AAAA,YACG,eAAAE;AAAA,YACA,UAAAC;AAAA,YACA,UAAAF;AAAA,YACA,cAAciH;AAAA,UAAA;AAAA,QAAA;AAAA,QAEjB,CAACa,KAAoBzK,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,wBACjC,UAAAM,gBAAAA,OAAC,OAAA,EAAI,WAAW,2BAA2B,OAAO,EAAC,UAAU0L,MACzD,UAAA;AAAA,UAAA1L,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,mCAAkC,IAAG,kBAChD,UAAA;AAAA,YAAAN,gBAAAA,EAAAA;AAAAA,cAACyG;AAAA,cAAA;AAAA,gBACG,SAAAI;AAAA,gBACA,iBAAAlG;AAAA,gBACA,SAASqK,EAAO,WAAW;AAAA,gBAC3B,UAAAjE;AAAA,gBACA,WAAA9F;AAAA,gBACA,SAAS+J,EAAO;AAAA,gBAChB,MAAMA,EAAO,WAAW;AAAA,gBACxB,OAAO,OAAOA,EAAO,SAAU,WAAWA,EAAO,SAAQ+C,KAAA/C,EAAO,UAAP,gBAAA+C,GAAc;AAAA,gBACvE,eAAetE,KAAoBE;AAAA,gBACnC,UAASqB,KAAA,gBAAAA,EAAQ,QAAO;AAAA,gBACxB,qBAAqBiC;AAAA,gBACrB,cAAc5E;AAAA,gBACd,iBAAiBd;AAAA,cAAA;AAAA,YAAA;AAAA,YAErBvH,gBAAAA,MAAC,SAAI,WAAU,gBAAe,OAAO,EAAC,UAAUiM,KAC5C,UAAAjM,gBAAAA,EAAAA;AAAAA,cAACgO;AAAA,cAAA;AAAA,gBACG,OAAA/C;AAAA,gBACA,cAAcE;AAAA,gBACd,QAAQ;AAAA,gBACR,WAAWH,EAAO,aAAa;AAAA,gBAC/B,QAAAA;AAAA,gBACA,aAAaA,EAAO,eAAe;AAAA,gBACnC,aAAAc;AAAA,cAAA;AAAA,YAAA,EACJ,CACJ;AAAA,UAAA,GACJ;AAAA,UACCd,EAAO,SAAS,eACbhL,gBAAAA,EAAAA,IAACiO,IAAA,EAAgB,MAAM,IAAM;AAAA,UAGjC3N,gBAAAA,OAAC,SAAI,WAAU,kEAAiE,OAAO,EAAC,UAAU2L,KAC9F,UAAA;AAAA,YAAAjM,gBAAAA,EAAAA;AAAAA,cAACkO;AAAA,cAAA;AAAA,gBACG,QAAAlD;AAAA,cAAA;AAAA,YAAA;AAAA,kCAEH/B,IAAA,CAAA,CAAgB;AAAA,UAAA,GACrB;AAAA,UAECwB,KAAoBzK,gBAAAA,EAAAA,IAACmO,IAAA,EAAiB,MAAK,KAAA,CAAK;AAAA,UAEjD7N,gBAAAA,EAAAA,KAAC,OAAA,EAAI,KAAKyL,IAAY,WAAU,kBAAiB,OAAO,EAAC,UAAUE,EAAA,GAE3D,UAAA;AAAA,YAAAzB,GAAiB,IAAI,CAAC4D,GAAYC,MAAe;AAC7C,oBAAMC,IAAcD,MAAe7D,GAAiB,SAAS,GACvDgB,IAAU4C,EAAW,UAAU,IAC/BG,IAAa1E,EAAe,IAAI2B,CAAO,GACvCgD,IAAkBzE,EAAoB,IAAIyB,CAAO,GACjDiD,IAAiBxE,EAAc,IAAIuB,CAAO,GAC1CkD,IAAWN,EAAW,MAAM,SAAS;AAE3C,qBACI9N,gBAAAA,OAAC2C,EAAM,UAAN,EACG,UAAA;AAAA,gBAAAjD,gBAAAA,EAAAA;AAAAA,kBAAC2O;AAAA,kBAAA;AAAA,oBACG,OAAOP,EAAW,UAAU;AAAA,oBAC5B,aAAaA,EAAW,UAAU,OAAO;AAAA,oBACzC,cAAcA,EAAW,UAAU,OAAO,cAAc;AAAA,oBACxD,eAAeM;AAAA,oBACf,WAAWE,GAAkBR,EAAW,UAAU,EAAE;AAAA,oBACpD,MAAM,CAACM;AAAA,oBACP,QAAO;AAAA,oBACP,WAAWN,EAAW,UAAU,OAAO,aAAa;AAAA,oBACpD,QAAQA,EAAW,UAAU;AAAA,oBAC7B,UAAUpD,EAAO;AAAA,oBACjB,aAAaoD,EAAW,UAAU,OAAO,eAAe;AAAA,oBACxD,MAAK;AAAA,oBACL,SAAS,MAAM;AACX,4BAAM/K,IAAYR,EAAS;AAC3B,sBAAIQ,KAAa+F,KACbF,EAAoB,IAAIE,GAAQ/F,EAAU,SAAS,GAEvD+J,GAAS,UAAU,mBAAmBgB,EAAW,UAAU,EAAE,CAAC,EAAE;AAAA,oBACpE;AAAA,oBACA,UAAU9C;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGboD,KAAYN,EAAW,MAAM,CAAC,KAC3BpO,gBAAAA,EAAAA;AAAAA,kBAAC2O;AAAA,kBAAA;AAAA,oBAEG,OAAOP,EAAW,MAAM,CAAC,EAAE;AAAA,oBAC3B,aAAaA,EAAW,MAAM,CAAC,EAAE,OAAO;AAAA,oBACxC,cAAcA,EAAW,MAAM,CAAC,EAAE,OAAO,cAAc;AAAA,oBACvD,qBAAqB;AAAA,oBACrB,WAAWQ,GAAkBR,EAAW,MAAM,CAAC,EAAE,EAAE;AAAA,oBACnD,MAAMA,EAAW,MAAM,WAAW;AAAA,oBAClC,QAAO;AAAA,oBACP,WAAWA,EAAW,MAAM,CAAC,EAAE,OAAO,aAAa;AAAA,oBACnD,QAAQA,EAAW,MAAM,CAAC,EAAE;AAAA,oBAC5B,UAAUpD,EAAO;AAAA,oBACjB,aAAaoD,EAAW,MAAM,CAAC,EAAE,OAAO,eAAe;AAAA,oBACvD,MAAK;AAAA,oBACL,SAAS,MAAM;AACX,4BAAM/K,IAAYR,EAAS;AAC3B,sBAAIQ,KAAa+F,KACbF,EAAoB,IAAIE,GAAQ/F,EAAU,SAAS,GAEvD+J,GAAS,UAAU,mBAAmBgB,EAAW,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE;AAAA,oBACnE;AAAA,oBACA,UAAU9C;AAAA,kBAAA;AAAA,kBApBL8C,EAAW,MAAM,CAAC,EAAE;AAAA,gBAAA;AAAA,gBAwBhCM,KAAYH,KAAcH,EAAW,MAAM,MAAM,CAAC,EAAE,IAAI,CAACS,GAAqBC,MAAuB;AAClG,wBAAMC,KAAkBD,MAAeV,EAAW,MAAM,MAAM,CAAC,EAAE,SAAS,GACpEY,KAAiBnE,MAAuBA,GAAoBwD,CAAU,GACtEY,KAAsBF,MAAmBC;AAE/C,yBACIhP,gBAAAA,EAAAA;AAAAA,oBAAC2O;AAAA,oBAAA;AAAA,sBAEG,OAAOE,EAAU;AAAA,sBACjB,aAAaA,EAAU,OAAO;AAAA,sBAC9B,cAAcA,EAAU,OAAO,cAAc;AAAA,sBAC7C,qBAAqB;AAAA,sBACrB,WAAWD,GAAkBC,EAAU,EAAE;AAAA,sBACzC,MAAME,MAAmB,CAACE;AAAA,sBAC1B,QAAO;AAAA,sBACP,WAAWJ,EAAU,OAAO,aAAa;AAAA,sBACzC,QAAQA,EAAU;AAAA,sBAClB,UAAU7D,EAAO;AAAA,sBACjB,aAAa6D,EAAU,OAAO,eAAe;AAAA,sBAC7C,MAAK;AAAA,sBACL,SAAS,MAAM;AACX,8BAAMxL,KAAYR,EAAS;AAC3B,wBAAIQ,MAAa+F,KACbF,EAAoB,IAAIE,GAAQ/F,GAAU,SAAS,GAEvD+J,GAAS,UAAU,mBAAmByB,EAAU,EAAE,CAAC,EAAE;AAAA,sBACzD;AAAA,sBACA,UAAUvD;AAAA,oBAAA;AAAA,oBApBLuD,EAAU;AAAA,kBAAA;AAAA,gBAuB3B,CAAC;AAAA,gBAEAH,KAAYN,EAAW,MAAM,SAAS,KAAK,CAACG,KACzCvO,gBAAAA,EAAAA;AAAAA,kBAACkP;AAAA,kBAAA;AAAA,oBACG,SAAQ;AAAA,oBACR,SAAS,MAAM3D,GAAYC,CAAO;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAIzCkD,KAAYH,KAAcC,KAAmB3D,MAAuBA,GAAoBwD,CAAU,KAC/FrO,gBAAAA,EAAAA;AAAAA,kBAACkP;AAAA,kBAAA;AAAA,oBACG,SAAST;AAAA,oBACT,SAAQ;AAAA,oBACR,SAAS,MAAM7C,GAAiBJ,GAAS6C,CAAU;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAI1D,CAACC,KAAetO,gBAAAA,MAACiJ,IAAA,CAAA,CAAgB;AAAA,cAAA,KAjGjBmF,EAAW,UAAU,EAkG1C;AAAA,YAER,CAAC;AAAA,YAGJjE,2BACI,OAAA,EAAI,WAAU,yDACX,UAAAnK,gBAAAA,EAAAA,IAACmO,IAAA,EAAiB,MAAK,KAAA,CAAK,EAAA,CAChC;AAAA,UAAA,GAER;AAAA,UAECvD,MAAmB5K,gBAAAA,EAAAA,IAAC,OAAA,EAAI,KAAKsK,GAAa,WAAU,MAAA,CAAM;AAAA,QAAA,EAAA,CAC/D,EAAA,CACJ;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA,GACJ;AAAA,IACC,CAACG,KAAoBnK,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,0GACjC,UAAA;AAAA,MAAAN,gBAAAA,EAAAA,IAAC,SAAI,WAAU,qCACV,aAAegL,EAAO,WAAW,EAAE,GACxC;AAAA,MACA1K,gBAAAA,EAAAA,KAAC,OAAA,EAA0B,WAAU,8FAChC,UAAA;AAAA,QAAA4L;AAAA,QAAgB;AAAA,MAAA,EAAA,GADXA,EAEV;AAAA,IAAA,EAAA,CACJ;AAAA,EAAA,EAAA,CACJ,GACJ,GACJ,0BA3QK,OAAA,EAAI,WAAW,uCAAuCvL,MAAoB,UAAU,MAAM,KAAKA,MAAoB,WAAWA,MAAoB,YAAY,OAAO,IAAIF,EAAcE,CAAe,EAAE,UAAU,IAC/M,UAAAX,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,wBACX,UAAAA,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,mBACX,UAAAA,gBAAAA,MAAC,SAAI,WAAW,sGAAsGS,EAAcE,CAAe,EAAE,UAAU,IAAIF,EAAcE,CAAe,EAAE,MAAM,IACpM,UAAAL,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAU;AAAA,MACV,OAAO;AAAA,QACH,qBAAqB,gBAAgB2L,CAAgB;AAAA,MAAA;AAAA,MAGzD,UAAA;AAAA,QAAAjM,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,qBACX,UAAAA,gBAAAA,EAAAA,IAACuN,IAAA,EAAW,WAAW9M,EAAcE,CAAe,EAAE,QAAQ,SAAS0I,EAAA,CAAS,GACpF;AAAA,QACArJ,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,kEACX,UAAAA,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,oBACX,UAAAA,gBAAAA,EAAAA,IAAC,QAAA,EAAK,UAAA,yBAAA,CAAsB,EAAA,CAChC,EAAA,CACJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAER,EAAA,CACJ,EAAA,CACJ,GACJ;AAuPZ,GCv/BMmP,KAAqC,CAAC;AAAA,EACxC,WAAA7H;AAAA,EACA,YAAA8H;AAAA,EACA,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,eAAAC;AACJ,MAAM;AACF,QAAMrC,IAAWC,GAAA,GACX,EAAC,WAAAqC,GAAW,QAAAC,EAAA,IAAUC,GAAA,GACtB,CAACC,GAAcC,CAAe,IAAIjP,EAAS,EAAK,GAChDkP,IAASC,GAAA,GACT,EAAC,aAAAC,EAAA,IAAeC,GAAA,GAChB,EAAC,MAAMC,EAAA,IAAcF,GACrBG,IAAYD,KAAcA,EAAW,OAAO,SAAS;AAE3D,EAAA9O,EAAU,MAAM;AACZ,IAAAyO,EAAgB,CAAC,CAACC,EAAO,MAAM;AAAA,EACnC,GAAG,CAACA,EAAO,MAAM,CAAC;AAElB,QAAM1F,IAAchD,EAAoC,IAAI,GACtDiD,IAAcjD,EAA8B,IAAI,GAChDgJ,IAAiBhJ,EAA8B,IAAI;AAEzD,EAAAhG,EAAU,OACFgJ,EAAY,WACZA,EAAY,QAAQ,WAAA,GAGxBA,EAAY,UAAU,IAAI,qBAAqB,CAACe,MAAY;AACxD,IAAIA,EAAQ,CAAC,EAAE,kBAAkBmE,KAAe,CAACC,KAC7CF,EAAA;AAAA,EAER,CAAC,GAEGhF,EAAY,WACZD,EAAY,QAAQ,QAAQC,EAAY,OAAO,GAG/C+F,EAAe,WACfhG,EAAY,QAAQ,QAAQgG,EAAe,OAAO,GAG/C,MAAM;AACT,IAAIhG,EAAY,WACZA,EAAY,QAAQ,WAAA;AAAA,EAE5B,IACD,CAACkF,GAAaC,GAAoBF,CAAa,CAAC;AAGnD,QAAMgB,IAAgB,KAAK,IAAI,GAAG,KAAK,MAAMlB,EAAW,SAAS,IAAI,IAAI,CAAC;AAE1E,gCACKmB,IAAA,EACI,UAAA;AAAA,IAAAH,2BAAcI,IAAA,EAAY,cAAAnB,GAA4B,eAAe,CAAC,KAAK,GAAG,eAAAI,GAA8B;AAAA,IAC7GzP,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,wBACX,UAAAA,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,UACV,UAAAoP,EAAW,SAAS,IACjBpP,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,QACX,UAAAA,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,gEACX,UAAAA,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,6CACX,UAAAM,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,4CACX,UAAA;AAAA,MAAAA,gBAAAA,EAAAA,KAAC,MAAA,EAAG,WAAU,gCAA+B,eAAY,cACpD,UAAA;AAAA,QAAA8O,EAAW,IAAI,CAACqB,GAAUC,MACvBpQ,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YAGG,eAAY;AAAA,YACZ,0BAAsB;AAAA,YAEtB,UAAA;AAAA,cAAAN,gBAAAA,EAAAA;AAAAA,gBAAC2O;AAAA,gBAAA;AAAA,kBACG,OAAO8B,EAAS;AAAA,kBAChB,aAAaA,EAAS,OAAO;AAAA,kBAC7B,cAAcA,EAAS,OAAO,cAAc;AAAA,kBAC5C,WAAAnJ;AAAA,kBACA,WAAWsH,GAAkB6B,EAAS,EAAE;AAAA,kBACxC,QAAQ;AAAA,kBACR,WAAWA,EAAS,OAAO,aAAa;AAAA,kBACxC,QAAQA,EAAS;AAAA,kBACjB,aAAaA,EAAS,OAAO,eAAe;AAAA,kBAC5C,MAAMA,EAAS;AAAA,kBACf,SAAS,MAAM;AACX,oBAAArD,EAAS,WAAW,mBAAmBqD,EAAS,EAAE,CAAC,EAAE;AAAA,kBACzD;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEHC,IAAQtB,EAAW,SAAS,2BACxBuB,IAAA,EAAU;AAAA,cAEdD,MAAUJ,KACPtQ,gBAAAA,EAAAA,IAAC,SAAI,KAAKsK,GAAa,WAAU,MAAA,CAAM;AAAA,YAAA;AAAA,UAAA;AAAA,UAvBtC,GAAGmG,EAAS,EAAE,IAAIA,EAAS,IAAI,IAAIC,CAAK;AAAA,QAAA,CA0BpD;AAAA,QACAlB,2BACI,MAAA,EAAG,WAAU,mEACV,UAAAxP,gBAAAA,EAAAA,IAACmO,IAAA,EAAiB,MAAK,KAAA,CAAK,EAAA,CAChC;AAAA,MAAA,GAER;AAAA,MACAnO,gBAAAA,EAAAA,IAAC,OAAA,EAAI,KAAKqQ,GAAgB,WAAU,MAAA,CAAM;AAAA,IAAA,EAAA,CAC9C,EAAA,CACJ,GACJ,EAAA,CACJ,IACAhB,MAAiB,cACjBrP,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,aACX,UAAAA,gBAAAA,EAAAA;AAAAA,MAACE;AAAA,MAAA;AAAA,QACG,aAAY;AAAA,QACZ,OAAM;AAAA,QAEN,UAAAF,gBAAAA,EAAAA,IAAC4Q,IAAA,CAAA,CAAiB;AAAA,MAAA;AAAA,IAAA,EACtB,CACJ,IAEA5Q,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,aACX,UAAAA,gBAAAA,EAAAA;AAAAA,MAACE;AAAA,MAAA;AAAA,QACG,SACIkQ,IACIpQ,gBAAAA,EAAAA,IAACoC,GAAA,EAAO,SAAS,MAAMgL,EAAS,UAAU,GAAG,UAAA,4BAAA,CAE7C,IAEApN,gBAAAA,EAAAA,IAACoC,KAAO,SAAO,IACX,UAAApC,gBAAAA,EAAAA,IAAC,KAAA,EAAE,MAAK,wCAAuC,KAAI,uBAAsB,QAAO,UAAS,UAAA,4BAAA,CAEzF,EAAA,CACJ;AAAA,QAGR,aAAY;AAAA,QACZ,OAAM;AAAA,QAEN,UAAAA,gBAAAA,EAAAA,IAAC4Q,IAAA,CAAA,CAAiB;AAAA,MAAA;AAAA,IAAA,EACtB,CACJ,GAER,GACJ;AAAA,IACA5Q,gBAAAA,EAAAA;AAAAA,MAAC6Q;AAAA,MAAA;AAAA,QACG,MAAMhB;AAAA,QACN,cAAc,CAACvL,MAAkB;AAC7B,UAAKA,MACGoL,IACAC,EAAA,IAEAvC,EAAS,SAAS,IAG1B0C,EAAgBxL,CAAI;AAAA,QACxB;AAAA,QAEA,UAAAhE,gBAAAA,EAAAA,KAACwQ,IAAA,EAAc,WAAU,0HACrB,UAAA;AAAA,UAAAxQ,gBAAAA,EAAAA,KAACyQ,IAAA,EAAa,WAAU,UACpB,UAAA;AAAA,YAAA/Q,gBAAAA,EAAAA,IAACgR,MAAY,UAAA,SAAA,CAAM;AAAA,YACnBhR,gBAAAA,EAAAA,IAACiR,MAAkB,UAAA,sCAAA,CAAmC;AAAA,UAAA,GAC1D;AAAA,UACClB,EAAO,UAAU/P,gBAAAA,EAAAA,IAACmJ,IAAA,EAAO,QAAQ4G,EAAO,QAAQ,SAAS,MAAM;AAC5D,YAAIL,IACAC,EAAA,IAEAvC,EAAS,SAAS;AAAA,UAE1B,EAAA,CAAG;AAAA,QAAA,EAAA,CACP;AAAA,MAAA;AAAA,IAAA;AAAA,EACJ,GACJ;AAER,GCxLM8D,KAAkB,MAAM;AAC1B,QAAM,CAACC,GAAOC,CAAQ,IAAIvQ,EAAgB,WAAW,GAE/C,EAAC,YAAYwQ,MAAkBC,GAAgB,EAAC,SAASH,MAAU,aAAY,GAC/E,EAAC,oBAAoBI,EAAA,IAAiBC,GAAwB,EAAC,SAASL,MAAU,aAAa,OAAAA,GAAM,GAErGM,IAAgBN,MAAU,cAAcE,IAAiBE,GACzD,EAAC,MAAAG,GAAM,OAAArG,GAAO,eAAAiE,GAAe,aAAAC,GAAa,oBAAAC,GAAoB,WAAAlI,MAAamK,GAE3EE,IAAgBtG,KAASuG,GAAWvG,CAAK,KAAKA,EAAM,eAAe,OAAO8F,MAAU;AAE1F,MAAI9F,KAASuG,GAAWvG,CAAK,KAAK,CAACsG;AAC/B,iCAAQE,IAAA,EAAS,WAAWxG,EAAM,MAAM,YAAYA,EAAM,YAAW;AAGzE,QAAM+D,IAAauC,IAAgB,CAAA,KAAMD,KAAA,gBAAAA,EAAM,MAAM,QAAQ,CAAAI,MAAQA,EAAK,WAAU,MAAM,KAAK,EAAC,QAAQ,EAAA,GAAI,CAACC,GAAGrB,OAAW,EAAC,IAAI,eAAeA,CAAK,IAAI,QAAQ,CAAA,EAAC,EAAG;AAEpK,SAAO1Q,gBAAAA,EAAAA;AAAAA,IAACmP;AAAA,IAAA;AAAA,MACJ,YAAAC;AAAA,MACA,cAAc+B;AAAA,MACd,eAAA7B;AAAA,MACA,aAAAC;AAAA,MACA,oBAAAC;AAAA,MACA,WAAAlI;AAAA,MACA,eAAe8J;AAAA,IAAA;AAAA,EAAA;AAEvB;","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index-C9pnotJK.mjs","sources":["../../../node_modules/lucide-react/dist/esm/icons/minus.js","../../shade/es/components/ui/empty-indicator.js","../src/views/inbox/components/customizer.tsx","../src/components/feed/table-of-contents.tsx","../src/components/article-body-styles.ts","../../../ghost/core/core/frontend/src/cards/js/audio.js?raw","../../../ghost/core/core/frontend/src/cards/js/gallery.js?raw","../../../ghost/core/core/frontend/src/cards/js/toggle.js?raw","../../../ghost/core/core/frontend/src/cards/js/video.js?raw","../../../ghost/core/core/frontend/src/cards/css/audio.css?raw","../../../ghost/core/core/frontend/src/cards/css/blockquote.css?raw","../../../ghost/core/core/frontend/src/cards/css/bookmark.css?raw","../../../ghost/core/core/frontend/src/cards/css/button.css?raw","../../../ghost/core/core/frontend/src/cards/css/callout.css?raw","../../../ghost/core/core/frontend/src/cards/css/collection.css?raw","../../../ghost/core/core/frontend/src/cards/css/cta.css?raw","../../../ghost/core/core/frontend/src/cards/css/file.css?raw","../../../ghost/core/core/frontend/src/cards/css/gallery.css?raw","../../../ghost/core/core/frontend/src/cards/css/header.css?raw","../../../ghost/core/core/frontend/src/cards/css/header_v2.css?raw","../../../ghost/core/core/frontend/src/cards/css/nft.css?raw","../../../ghost/core/core/frontend/src/cards/css/product.css?raw","../../../ghost/core/core/frontend/src/cards/css/signup.css?raw","../../../ghost/core/core/frontend/src/cards/css/toggle.css?raw","../../../ghost/core/core/frontend/src/cards/css/video.css?raw","../src/utils/cards-assets.ts","../src/views/inbox/components/reader.tsx","../src/views/inbox/components/inbox-list.tsx","../src/views/inbox/inbox.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }]];\nconst Minus = createLucideIcon(\"minus\", __iconNode);\n\nexport { __iconNode, Minus as default };\n//# sourceMappingURL=minus.js.map\n","import { jsx, jsxs } from \"react/jsx-runtime\";\nimport { cn } from \"../../lib/utils.js\";\nimport React__default from \"react\";\nconst EmptyBadge = React__default.forwardRef(({ children, className, ...props }, ref) => {\n return /* @__PURE__ */ jsx(\n \"div\",\n {\n ref,\n className: cn(\"flex items-center justify-center rounded-full bg-muted w-12 h-12 max-w-12 max-h-12 [&_svg]:size-4 [&_svg]:text-muted-foreground [&_svg]:shrink-0\", className),\n ...props,\n children\n }\n );\n});\nEmptyBadge.displayName = \"EmptyBadge\";\nconst EmptyIndicator = React__default.forwardRef(({ children, className, title, description, actions, ...props }, ref) => {\n return /* @__PURE__ */ jsxs(\"div\", { ref, className: cn(\"flex flex-col items-center justify-center space-y-3 text-center\", className), ...props, children: [\n /* @__PURE__ */ jsx(EmptyBadge, { children }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-[320px] space-y-1.5\", children: [\n /* @__PURE__ */ jsx(\"h3\", { className: \"text-pretty text-md font-medium tracking-normal text-foreground\", children: title }),\n description && /* @__PURE__ */ jsx(\"p\", { className: \"text-pretty text-sm leading-tight text-muted-foreground\", children: description })\n ] }),\n actions && /* @__PURE__ */ jsx(\"div\", { className: \"mt-4 flex items-center gap-2\", children: actions })\n ] });\n});\nEmptyIndicator.displayName = \"EmptyIndicator\";\nexport {\n EmptyBadge,\n EmptyIndicator\n};\n//# sourceMappingURL=empty-indicator.js.map\n","import React, {useEffect, useState} from 'react';\nimport {Button, Icon, LucideIcon, Popover, PopoverContent, PopoverTrigger} from '@tryghost/shade';\n\nexport const FONT_SIZES = ['1.5rem', '1.6rem', '1.7rem', '1.8rem', '2rem'] as const;\nexport type FontSize = typeof FONT_SIZES[number];\n\nexport const STORAGE_KEYS = {\n BACKGROUND_COLOR: 'ghost-ap-background-color',\n FONT_SIZE: 'ghost-ap-font-size',\n FONT_FAMILY: 'ghost-ap-font-family',\n FONT_STYLE: 'ghost-ap-font-style'\n} as const;\n\nexport const COLOR_OPTIONS = {\n SYSTEM: {\n id: 'system',\n color: '#fff',\n background: 'bg-white dark:bg-black',\n button: 'bg-white dark:bg-black',\n border: 'border-black/[8%] dark:border-gray-950'\n },\n SEPIA: {\n id: 'sepia',\n color: '#FCF8F1',\n background: 'bg-[#FCF8F1]',\n button: 'bg-[#FCF8F1] hover:bg-black/[3%] text-black hover:text-black',\n border: 'border-black/[8%]'\n },\n LIGHT: {\n id: 'light',\n color: '#fff',\n background: 'bg-white',\n button: 'hover:bg-black/[3%] text-black hover:text-black',\n border: 'border-black/[8%] dark:border-gray-950'\n },\n DARK: {\n id: 'dark',\n color: '#15171a',\n background: 'bg-black',\n button: 'text-white dark:bg-black dark:hover:bg-gray-900',\n border: 'border-black/[8%] dark:border-gray-950'\n }\n} as const;\n\nexport type ColorOption = keyof typeof COLOR_OPTIONS;\nexport type FontStyle = 'sans' | 'serif';\n\ninterface CustomizerProps {\n backgroundColor: ColorOption;\n currentFontSizeIndex: number;\n fontStyle: FontStyle;\n onColorChange: (color: ColorOption) => void;\n onFontStyleChange: (style: FontStyle) => void;\n onDecreaseFontSize: () => void;\n onIncreaseFontSize: () => void;\n onResetFontSize: () => void;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport const useCustomizerSettings = () => {\n const [backgroundColor, setBackgroundColor] = useState<ColorOption>(() => {\n const saved = localStorage.getItem(STORAGE_KEYS.BACKGROUND_COLOR);\n return (saved?.toUpperCase() as ColorOption) || 'SYSTEM';\n });\n\n const [currentFontSizeIndex, setCurrentFontSizeIndex] = useState(() => {\n const saved = localStorage.getItem(STORAGE_KEYS.FONT_SIZE);\n return saved ? parseInt(saved) : 2;\n });\n\n const [fontStyle, setFontStyle] = useState<FontStyle>(() => {\n const saved = localStorage.getItem(STORAGE_KEYS.FONT_STYLE);\n return (saved || 'sans') as FontStyle;\n });\n\n const handleColorChange = (color: ColorOption) => {\n setBackgroundColor(color);\n localStorage.setItem(STORAGE_KEYS.BACKGROUND_COLOR, COLOR_OPTIONS[color].id);\n };\n\n useEffect(() => {\n localStorage.setItem(STORAGE_KEYS.FONT_SIZE, currentFontSizeIndex.toString());\n }, [currentFontSizeIndex]);\n\n useEffect(() => {\n localStorage.setItem(STORAGE_KEYS.FONT_STYLE, fontStyle);\n }, [fontStyle]);\n\n const increaseFontSize = () => {\n setCurrentFontSizeIndex(prevIndex => Math.min(prevIndex + 1, FONT_SIZES.length - 1));\n };\n\n const decreaseFontSize = () => {\n setCurrentFontSizeIndex(prevIndex => Math.max(prevIndex - 1, 0));\n };\n\n const resetFontSize = () => setCurrentFontSizeIndex(2);\n\n return {\n backgroundColor,\n currentFontSizeIndex,\n fontStyle,\n handleColorChange,\n setFontStyle,\n increaseFontSize,\n decreaseFontSize,\n resetFontSize,\n fontSize: FONT_SIZES[currentFontSizeIndex]\n };\n};\n\nconst Customizer: React.FC<CustomizerProps> = ({\n backgroundColor,\n currentFontSizeIndex,\n fontStyle,\n onColorChange,\n onFontStyleChange,\n onDecreaseFontSize,\n onIncreaseFontSize,\n onResetFontSize,\n onOpenChange\n}) => {\n const isActiveColor = (color: ColorOption) => backgroundColor === color;\n const isActiveFont = (font: FontStyle) => fontStyle === font;\n\n return (\n <CustomizerView\n backgroundColor={backgroundColor}\n currentFontSizeIndex={currentFontSizeIndex}\n fontStyle={fontStyle}\n isActiveColor={isActiveColor}\n isActiveFont={isActiveFont}\n onColorChange={onColorChange}\n onDecreaseFontSize={onDecreaseFontSize}\n onFontStyleChange={onFontStyleChange}\n onIncreaseFontSize={onIncreaseFontSize}\n onOpenChange={onOpenChange}\n onResetFontSize={onResetFontSize}\n />\n );\n};\n\ninterface CustomizerViewProps extends CustomizerProps {\n isActiveColor: (color: ColorOption) => boolean;\n isActiveFont: (font: FontStyle) => boolean;\n currentFontSizeIndex: number;\n}\n\nconst CustomizerView: React.FC<CustomizerViewProps> = ({\n backgroundColor,\n isActiveColor,\n isActiveFont,\n onColorChange,\n onFontStyleChange,\n currentFontSizeIndex,\n onDecreaseFontSize,\n onIncreaseFontSize,\n onResetFontSize,\n onOpenChange\n}) => (\n <Popover modal={false} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>\n <Button className={`size-9 rounded-full ${COLOR_OPTIONS[backgroundColor].button}`} variant='ghost'>\n <Icon.Typography className='!size-[18px]' />\n </Button>\n </PopoverTrigger>\n <PopoverContent align='end' className='w-[224px]' onCloseAutoFocus={e => e.preventDefault()} onOpenAutoFocus={e => e.preventDefault()}>\n <div className='flex flex-col gap-4'>\n <div className='flex items-center justify-between gap-[6px]'>\n <Button\n className={`h-7 flex-1 rounded-[6px] bg-gray-200 p-0 text-[1.1rem] text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 [&_svg]:size-[14px] ${isActiveColor('SYSTEM') ? 'outline outline-2 outline-green' : ''}`}\n variant=\"secondary\"\n onClick={() => onColorChange('SYSTEM')}\n >\n Auto\n </Button>\n <Button\n className={`h-7 flex-1 rounded-[6px] bg-[#ece6d9] p-0 hover:bg-[#ece6d9] ${isActiveColor('SEPIA') ? 'outline outline-2 outline-green' : 'border border-[#ece6d9]'}`}\n onClick={() => onColorChange('SEPIA')}\n />\n <Button\n className={`h-7 flex-1 rounded-[6px] bg-white p-0 hover:bg-white ${isActiveColor('LIGHT') ? 'outline outline-2 outline-green' : 'border border-gray-200'}`}\n onClick={() => onColorChange('LIGHT')}\n />\n <Button\n className={`h-7 flex-1 rounded-[6px] bg-black p-0 hover:bg-black dark:border dark:border-gray-925 ${isActiveColor('DARK') ? 'outline outline-2 outline-green' : ''}`}\n onClick={() => onColorChange('DARK')}\n />\n </div>\n <div className='flex gap-2'>\n <Button\n className={`flex h-auto w-full flex-col gap-1 rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 ${isActiveFont('sans') && 'outline outline-2 outline-green'}`}\n variant=\"secondary\"\n onClick={() => onFontStyleChange('sans')}\n >\n <span className='text-[2rem] font-bold leading-none'>Aa</span>\n <span className='text-[1.1rem]'>System</span>\n </Button>\n <Button\n className={`flex h-auto w-full flex-col gap-1 rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 ${isActiveFont('serif') && 'outline outline-2 outline-green'}`}\n variant=\"secondary\"\n onClick={() => onFontStyleChange('serif')}\n >\n <span className='pt-1 font-serif text-[2rem] font-bold leading-none'>Aa</span>\n <span className='font-serif text-[1.2rem]'>Serif</span>\n </Button>\n </div>\n <div className='flex gap-2'>\n <Button\n className='h-8 w-full rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 [&_svg]:size-[14px]'\n disabled={currentFontSizeIndex === 0}\n variant=\"secondary\"\n onClick={onDecreaseFontSize}\n >\n <LucideIcon.Minus />\n </Button>\n <Button\n className='h-8 w-full rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900'\n variant=\"secondary\"\n onClick={onResetFontSize}\n >\n <span className='text-[1.6rem] font-bold'>Aa</span>\n </Button>\n <Button\n className='h-8 w-full rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 [&_svg]:size-[14px]'\n disabled={currentFontSizeIndex === FONT_SIZES.length - 1}\n variant=\"secondary\"\n onClick={onIncreaseFontSize}\n >\n <LucideIcon.Plus />\n </Button>\n </div>\n </div>\n </PopoverContent>\n </Popover>\n);\n\nexport default Customizer;\n","import React, {useEffect, useState} from 'react';\nimport {Popover, PopoverContent, PopoverTrigger} from '@tryghost/shade';\n\nexport interface TOCItem {\n id: string;\n text: string;\n level: number;\n element?: HTMLElement;\n}\n\ninterface TableOfContentsProps {\n tocItems: TOCItem[];\n iframeElement: HTMLIFrameElement | null;\n modalRef: React.RefObject<HTMLElement>;\n className?: string;\n onOpenChange?: (open: boolean) => void;\n}\n\n// Main component that handles logic\nconst TableOfContents: React.FC<TableOfContentsProps> = ({\n tocItems,\n iframeElement,\n modalRef,\n className = '!visible absolute inset-y-0 right-7 z-40 hidden lg:!block',\n onOpenChange\n}) => {\n const [activeHeadingId, setActiveHeadingId] = useState<string | null>(null);\n const isScrollingToHeading = React.useRef(false);\n\n const handleHeadingClick = (id: string) => {\n if (!iframeElement?.contentDocument) {\n return;\n }\n\n const heading = iframeElement.contentDocument.getElementById(id);\n if (heading && modalRef.current) {\n isScrollingToHeading.current = true;\n setActiveHeadingId(id);\n\n modalRef.current.scrollTo({\n top: heading.offsetTop - 20,\n behavior: 'smooth'\n });\n\n setTimeout(() => {\n isScrollingToHeading.current = false;\n }, 1000);\n }\n };\n\n useEffect(() => {\n if (!iframeElement?.contentDocument || tocItems.length <= 1) {\n return;\n }\n\n const container = modalRef.current;\n if (!container) {\n return;\n }\n\n const handleScroll = () => {\n if (isScrollingToHeading.current) {\n return;\n }\n\n const doc = iframeElement.contentDocument;\n if (!doc) {\n return;\n }\n\n const scrollTop = container.scrollTop;\n const buffer = 100;\n\n const headings = tocItems\n .map(item => doc.getElementById(item.id))\n .filter((el): el is HTMLElement => el !== null)\n .map(el => ({\n id: el.id,\n top: el.offsetTop\n }));\n\n if (!headings.length) {\n return;\n }\n\n const activeHeading = headings.reduce((prev, curr) => {\n return (curr.top - buffer <= scrollTop) ? curr : prev;\n });\n\n setActiveHeadingId(activeHeading?.id || null);\n };\n\n const scrollHandler = () => {\n requestAnimationFrame(handleScroll);\n };\n\n container.addEventListener('scroll', scrollHandler);\n handleScroll();\n\n return () => {\n container.removeEventListener('scroll', scrollHandler);\n };\n }, [iframeElement, tocItems, modalRef]);\n\n if (tocItems.length <= 1) {\n return null;\n }\n\n return (\n <div className={className}>\n <div className=\"sticky top-1/2 -translate-y-1/2\">\n <TableOfContentsView\n activeHeading={activeHeadingId || ''}\n items={tocItems}\n onItemClick={handleHeadingClick}\n onOpenChange={onOpenChange}\n />\n </div>\n </div>\n );\n};\n\ninterface TableOfContentsViewProps {\n items: TOCItem[];\n activeHeading: string;\n onItemClick: (id: string) => void;\n onOpenChange?: (open: boolean) => void;\n}\n\nconst LINE_WIDTHS = {\n 1: 'w-3',\n 2: 'w-2',\n 3: 'w-1'\n} as const;\n\nconst HEADING_PADDINGS = {\n 1: 'pl-2',\n 2: 'pl-6',\n 3: 'pl-10'\n} as const;\n\nconst TableOfContentsView: React.FC<TableOfContentsViewProps> = ({items, activeHeading, onItemClick, onOpenChange}) => {\n const [open, setOpen] = useState(false);\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout>>();\n\n React.useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n if (items.length === 0) {\n return null;\n }\n\n const getNormalizedLevel = (level: number) => {\n return Math.min(level, 3);\n };\n\n const getLineWidth = (level: number) => {\n return LINE_WIDTHS[getNormalizedLevel(level) as keyof typeof LINE_WIDTHS];\n };\n\n const getHeadingPadding = (level: number) => {\n return HEADING_PADDINGS[getNormalizedLevel(level) as keyof typeof HEADING_PADDINGS];\n };\n\n const handleMouseEnter = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setOpen(true);\n onOpenChange?.(true);\n };\n\n const handleMouseLeave = () => {\n timeoutRef.current = setTimeout(() => {\n setOpen(false);\n onOpenChange?.(false);\n }, 100);\n };\n\n return (\n <Popover modal={false} open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <div\n className='absolute right-2 top-1/2 flex -translate-y-1/2 flex-col items-end gap-2 rounded-md p-2 text-base dark:bg-black'\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {items.map(item => (\n <div\n key={item.id}\n className={`h-[2px] rounded-sm ${activeHeading === item.id ? 'bg-black dark:bg-white' : 'bg-gray-400 dark:bg-gray-700'} pr-1 transition-all ${getLineWidth(item.level)}`}\n />\n ))}\n </div>\n </PopoverTrigger>\n <PopoverContent\n align='center'\n className='w-[240px] p-2'\n side='left'\n sideOffset={-28}\n onCloseAutoFocus={e => e.preventDefault()}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onOpenAutoFocus={e => e.preventDefault()}\n >\n <nav\n aria-label='Table of contents navigation'\n className='max-h-[60vh] overflow-y-auto'\n role='navigation'\n >\n {items.map(item => (\n <button\n key={item.id}\n className={`line-clamp-2 block w-full cursor-pointer rounded py-1 text-left text-sm leading-tight ${activeHeading === item.id ? 'text-black dark:text-white' : 'text-gray-700 dark:text-gray-600'} hover:bg-gray-75 hover:text-gray-900 dark:hover:bg-grey-925 dark:hover:text-white ${getHeadingPadding(item.level)}`}\n type='button'\n onClick={() => onItemClick(item.id)}\n >\n <span className=\"line-clamp-2\">\n {item.text}\n </span>\n </button>\n ))}\n </nav>\n </PopoverContent>\n </Popover>\n );\n};\n\nexport default TableOfContents;\n","const articleBodyStyles = () => {\n return `<style>\n\n/* Variables */\n\n:root {\n --color-white: #fff;\n --color-lighter-gray: rgb(0 0 0 / 0.05);\n --color-light-gray: #e6e6e6;\n --color-mid-gray: #ccc;\n --color-dark-gray: #444;\n --color-darker-gray: #15171a;\n --color-black: #000;\n --color-primary-text: var(--color-darker-gray);\n --color-secondary-text: rgb(124 139 154);\n --color-border: rgb(0 0 0 / 0.08);\n --color-dark-border: rgb(0 0 0 / 0.55);\n --background-color: #fff;\n --font-sans: Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n --font-serif: \"EB Garamond\", Georgia, Times, serif;\n --font-serif-alt: Georgia, Times, serif;\n --font-mono: \"JetBrains Mono\", Menlo, Consolas, Monaco, \"Liberation Mono\", \"Lucida Console\", monospace;\n --letter-spacing: 0;\n --container-width: 1320px;\n --container-gap: clamp(24px, 1.7032rem + 1.9355vw, 48px);\n --ghost-accent-color: #15171a;\n}\n\n:root.has-light-text,\n:is(.gh-navigation, .gh-footer).has-accent-color {\n --color-lighter-gray: rgb(255 255 255 / 0.1);\n --color-darker-gray: #fff;\n --color-secondary-text: rgb(255 255 255 / 0.64);\n --color-border: rgb(255 255 255 / 0.15);\n --color-dark-border: rgb(255 255 255 / 0.5);\n --background-color: #15171a;\n}\n\n/* Resets */\n\n*, *::before, *::after {\n box-sizing: border-box;\n}\n\n* {\n margin: 0;\n}\n\nhtml {\n font-size: 62.5%;\n}\n\nbody {\n font-family: var(--font-sans);\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\nimg, picture, video, canvas, svg {\n display: block;\n height: auto;\n max-width: 100%;\n}\n\niframe {\n display: block;\n}\n\ninput, button, textarea, select {\n font: inherit;\n}\n\np, h1, h2, h3, h4, h5, h6 {\n overflow-wrap: break-word;\n}\n\nh1, h2, h3, h4, h5, h6 {\n font-family: var(--font-sans);\n line-height: 1.2;\n}\n\n/* Globals */\n\nhtml {\n --container-width: 840px;\n --content-width: 640px;\n}\n\nbody {\n font-family: var(--font-sans);\n font-size: 1.6rem;\n background-color: var(--background-color);\n color: var(--color-primary-text);\n}\n\na {\n color: var(--color-darker-gray);\n text-decoration: none;\n}\n\na:not([class]):hover {\n opacity: 0.8;\n}\n\n.gh-canvas,\n.kg-width-full.kg-content-wide {\n --main: min(var(--content-width, 720px), 100% - var(--container-gap) * 2);\n --wide: minmax(0, calc((var(--container-width, 1200px) - var(--content-width, 720px)) / 2));\n --full: minmax(var(--container-gap), 1fr);\n\n display: grid;\n grid-template-columns:\n [full-start] var(--full)\n [wide-start] var(--wide)\n [main-start] var(--main) [main-end]\n var(--wide) [wide-end]\n var(--full) [full-end];\n}\n\n.gh-canvas > * {\n grid-column: main;\n}\n\n.kg-width-wide,\n.kg-content-wide > div {\n grid-column: full;\n}\n\n.kg-width-full {\n grid-column: full;\n}\n\n/* Article */\n\n.gh-article-header {\n margin: 24px 0 40px;\n}\n\n.gh-article-title {\n font-weight: 700;\n text-wrap: pretty;\n font-size: 3.6rem;\n letter-spacing: -0.015em;\n line-height: 1.1;\n}\n\n.gh-article-excerpt {\n margin-top: 12px;\n font-size: calc(var(--font-size) * 1.06 * var(--font-size-multiplier, 1));\n line-height: 1.4;\n text-wrap: pretty;\n}\n\n.has-serif-body .gh-article-excerpt {\n font-family: var(--font-serif-alt);\n}\n\n.gh-article-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 16px;\n}\n\n.gh-article-meta:hover {\n opacity: 1;\n}\n\n.gh-article-author-image {\n display: flex;\n margin-right: 8px;\n margin-left: 6px;\n}\n\n.gh-article-author-image span {\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n width: 46px;\n height: 46px;\n overflow: hidden;\n margin: 0 -8px;\n background-color: #F4F5F6;\n border-radius: 50%;\n border: 3px solid var(--background-color);\n}\n\nhtml.has-sepia-bg .gh-article-author-image span {\n background-color: #EFEDE6;\n}\n\nhtml.has-light-text .gh-article-author-image span {\n background-color: #394047;\n}\n\n.gh-article-author-image span:first-child {\n z-index: 10;\n}\n\n.gh-article-author-image span:nth-child(2) {\n z-index: 9;\n}\n\n.gh-article-author-image span:nth-child(3) {\n z-index: 8;\n}\n\n.gh-article-author-image img {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.gh-article-author-image svg {\n width: 18px;\n height: 18px;\n color: #95A1AD;\n}\n\n.gh-article-meta-wrapper {\n display: flex;\n flex-direction: column;\n gap: 1px;\n margin-top: -2px;\n}\n\n.gh-article-author-name {\n font-size: 1.5rem;\n font-weight: 600;\n letter-spacing: -0.008em;\n}\n\n.gh-article-source {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 1.5rem;\n line-height: 1.2;\n color: var(--color-secondary-text);\n width: fit-content;\n}\n\n.gh-article-source svg {\n width: 12px;\n height: 12px;\n margin-top: 1px;\n}\n\n.gh-article-meta:hover .gh-article-source {\n text-decoration: underline;\n}\n\n.gh-article-image {\n grid-column: full;\n margin-top: 40px;\n}\n\n.gh-article-image img {\n width: 100%;\n}\n\n/* Content */\n\n/* Content refers to styling all page and post content that is\ncreated within the Ghost editor. The main content handles\nheadings, text, images and lists. We deal with cards lower down. */\n\n.gh-content {\n font-size: calc(var(--font-size) * var(--font-size-multiplier, 1));\n overflow-x: hidden;\n letter-spacing: var(--letter-spacing);\n line-height: var(--line-height);\n}\n\n/* Default vertical spacing */\n.gh-content > * + * {\n margin-top: calc(28px * var(--content-spacing-factor, 1));\n margin-bottom: 0;\n}\n\n/* Remove space between full-width cards */\n.gh-content > .kg-width-full + .kg-width-full:not(.kg-width-full.kg-card-hascaption + .kg-width-full) {\n margin-top: 0;\n}\n\n/* Add back a top margin to all headings,\nunless a heading is the very first element in the post content */\n.gh-content > [id]:not(:first-child) {\n margin-top: calc(40px * var(--content-spacing-factor, 1));\n}\n\n/* Add a small margin between a heading and paragraph after it */\n.gh-content > [id] + p {\n margin-top: calc(12px * var(--content-spacing-factor, 1));\n}\n\n/* A larger margin before/after dividers, blockquotes and embeds */\n.gh-content > :is(hr, blockquote, iframe) {\n position: relative;\n margin-top: calc(48px * var(--content-spacing-factor, 1)) !important;\n}\n\n.gh-content > :is(hr, blockquote, iframe) + * {\n margin-top: calc(48px * var(--content-spacing-factor, 1)) !important;\n}\n\n/* Now the content typography styles */\n.gh-content [id] {\n letter-spacing: -0.005em;\n}\n\n.gh-content h1 {\n font-size: 1.9em;\n}\n\n.gh-content h2 {\n font-size: 1.6em;\n}\n\n.gh-content h3 {\n font-size: 1.3em;\n}\n\n.gh-content h4 {\n font-size: 1.2em;\n}\n\n.gh-content h5 {\n font-size: 1.1em;\n}\n\n.gh-content h6 {\n font-size: 1em;\n}\n\n.gh-content a:not([class]) {\n color: #14B8FF;\n text-decoration: underline;\n}\n\nhtml.has-light-text .gh-content a:not([class]) {\n color: #14B8FF;\n}\n\nhtml.has-sepia-bg .gh-content a:not([class]) {\n color: #DD6B02;\n}\n\n.gh-content .kg-callout-card .kg-callout-text,\n.gh-content .kg-toggle-card .kg-toggle-content > :is(ul, ol, p) {\n font-size: 0.95em;\n}\n\n.has-serif-body .gh-content > blockquote,\n.has-serif-body .gh-content > ol,\n.has-serif-body .gh-content > ul,\n.has-serif-body .gh-content > dl,\n.has-serif-body .gh-content > p,\n.has-serif-body .gh-content .kg-callout-text,\n.has-serif-body .gh-content .kg-toggle-content > ol,\n.has-serif-body .gh-content .kg-toggle-content > ul,\n.has-serif-body .gh-content .kg-toggle-content > p {\n font-family: var(--font-serif-alt);\n}\n\n.gh-content :is(ul, ol) {\n padding-left: 28px;\n}\n\n.gh-content :is(li + li, li :is(ul, ol)) {\n margin-top: 8px;\n}\n\n.gh-content ol ol li {\n list-style-type: lower-alpha;\n}\n\n.gh-content ol ol ol li {\n list-style-type: lower-roman;\n}\n\n.gh-content hr {\n width: 100%;\n height: 1px;\n background-color: var(--color-border);\n border: 0;\n}\n\n.gh-content .gh-table {\n overflow-x: scroll;\n -webkit-overflow-scrolling: touch;\n}\n\n.gh-content .gh-table table {\n width: 100%;\n font-family: var(--font-sans);\n font-size: 1.5rem;\n white-space: nowrap;\n vertical-align: top;\n border-spacing: 0;\n border-collapse: collapse;\n}\n\n.gh-content .gh-table table th {\n font-size: 1.2rem;\n font-weight: 700;\n color: var(--color-darkgrey);\n text-align: left;\n text-transform: uppercase;\n letter-spacing: 0.2px;\n}\n\n.gh-content .gh-table table :is(th, td),\n.gh-content .gh-table table td {\n padding: 6px 12px;\n border-bottom: 1px solid var(--color-border);\n}\n\n.gh-content .gh-table table :is(th, td):first-child {\n padding-left: 0;\n}\n\n.gh-content .gh-table table :is(th, td):last-child {\n padding-right: 0;\n}\n\n.gh-content pre {\n overflow: auto;\n padding: 16px;\n font-size: 1.5rem;\n line-height: 1.5em;\n background: var(--color-lighter-gray);\n border-radius: 6px;\n font-family: var(--font-mono);\n}\n\n.gh-content :not(pre) > code {\n vertical-align: baseline;\n padding: 0.15em 0.4em;\n font-weight: 400;\n font-size: 0.95em;\n line-height: 1em;\n background: var(--color-lighter-gray);\n border-radius: 0.25em;\n font-family: var(--font-mono);\n}\n\n.gh-content mark {\n color: inherit;\n background: rgb(255 225 54 / 25%);\n}\n\n/* Cards */\n\n/* Add extra margin before/after any cards, except for when immediately preceeded by a heading */\n\n.gh-content :not(.kg-card):not(table):not([id]) + :is(.kg-card, table) {\n margin-top: calc(48px * var(--content-spacing-factor, 1));\n}\n\n.gh-content :is(.kg-card, table) + :not(.kg-card):not(table):not([id]) {\n margin-top: calc(48px * var(--content-spacing-factor, 1));\n}\n\n.gh-content :not(.kg-card):not([id]) + .kg-card.kg-width-full {\n margin-top: calc(68px * var(--content-spacing-factor, 1));\n}\n\n.gh-content .kg-card.kg-width-full + :not(.kg-card):not([id]) {\n margin-top: calc(68px * var(--content-spacing-factor, 1));\n}\n\n.kg-image {\n margin-right: auto;\n margin-left: auto;\n}\n\n.kg-embed-card {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n}\n\n.kg-image-card a:hover,\n.kg-gallery-image a:hover {\n opacity: 1 !important;\n}\n\nblockquote:not([class]) {\n padding-left: 2rem;\n border-left: 4px solid var(--ghost-accent-color);\n}\n\nblockquote.kg-blockquote-alt {\n font-style: normal;\n font-weight: 400;\n color: var(--color-secondary-text);\n}\n\n.has-serif-body .kg-header-card h3.kg-header-card-subheader {\n font-family: var(--font-serif);\n}\n\n.has-serif-body .kg-product-card-description :is(p, ul, ol) {\n font-family: var(--font-serif-alt);\n}\n\n/* Caption */\n\nfigcaption {\n margin-top: 12px;\n font-size: 1.3rem;\n text-align: center;\n}\n\n.kg-card.kg-width-full figcaption {\n padding: 0 16px;\n}\n\nfigcaption a {\n color: rgb(29 78 216);\n text-decoration: underline;\n}\n\n/* Paid content styles */\n\n.gh-paid-content-notice {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 36px;\n background: rgba(0, 0, 0, 0.035);\n border-radius: 14px;\n font-size: 16px;\n}\n\nhtml.has-light-text .gh-paid-content-notice {\n background: rgba(255, 255, 255, 0.035);\n}\n\n.gh-paid-content-notice h3 {\n letter-spacing: -0.015em !important;\n}\n\n.gh-paid-content-notice p {\n max-width: 350px;\n text-align: center;\n line-height: 1.3em;\n}\n\n.gh-paid-content-cta {\n display: block;\n color: var(--background-color) !important;\n background: var(--color-primary-text);\n text-decoration: none !important;\n font-weight: 600;\n font-size: 0.9em;\n padding: 8px 16px;\n margin-top: 8px;\n border-radius: 6px;\n}\n\n/* Design settings /*\n\n.has-serif-body {\n --font-size-multiplier: 1.1;\n}\n\n.has-serif-body .gh-content > blockquote,\n.has-serif-body .gh-content > ol,\n.has-serif-body .gh-content > ul,\n.has-serif-body .gh-content > dl,\n.has-serif-body .gh-content > p,\n.has-serif-body .gh-content .kg-callout-card .kg-callout-text,\n.has-serif-body .gh-content .kg-toggle-card .kg-toggle-content > ol,\n.has-serif-body .gh-content .kg-toggle-card .kg-toggle-content > ul,\n.has-serif-body .gh-content .kg-toggle-card .kg-toggle-content > p {\n font-family: var(--font-serif-alt);\n}\n\n</style>`;\n};\n\nexport default articleBodyStyles;\n","export default \"(function() {\\n const handleAudioPlayer = function (audioElementContainer) {\\n const audioPlayerContainer = audioElementContainer.querySelector('.kg-audio-player-container');\\n const playIconContainer = audioElementContainer.querySelector('.kg-audio-play-icon');\\n const pauseIconContainer = audioElementContainer.querySelector('.kg-audio-pause-icon');\\n const seekSlider = audioElementContainer.querySelector('.kg-audio-seek-slider');\\n const playbackRateContainer = audioElementContainer.querySelector('.kg-audio-playback-rate');\\n const muteIconContainer = audioElementContainer.querySelector('.kg-audio-mute-icon');\\n const unmuteIconContainer = audioElementContainer.querySelector('.kg-audio-unmute-icon');\\n const volumeSlider = audioElementContainer.querySelector('.kg-audio-volume-slider');\\n const audio = audioElementContainer.querySelector('audio');\\n const durationContainer = audioElementContainer.querySelector('.kg-audio-duration');\\n const currentTimeContainer = audioElementContainer.querySelector('.kg-audio-current-time');\\n let playbackRates = [{\\n rate: 0.75,\\n label: '0.7×'\\n }, {\\n rate: 1.0,\\n label: '1×'\\n }, {\\n rate: 1.25,\\n label: '1.2×'\\n }, {\\n rate: 1.75,\\n label: '1.7×'\\n }, {\\n rate: 2.0,\\n label: '2×'\\n }];\\n\\n let raf = null;\\n let currentPlaybackRateIdx = 1;\\n\\n const whilePlaying = () => {\\n seekSlider.value = Math.floor(audio.currentTime);\\n currentTimeContainer.textContent = calculateTime(seekSlider.value);\\n audioPlayerContainer.style.setProperty('--seek-before-width', `${seekSlider.value / seekSlider.max * 100}%`);\\n raf = requestAnimationFrame(whilePlaying);\\n }\\n\\n const showRangeProgress = (rangeInput) => {\\n if (rangeInput === seekSlider) {\\n audioPlayerContainer.style.setProperty('--seek-before-width', rangeInput.value / rangeInput.max * 100 + '%');\\n }\\n else {\\n audioPlayerContainer.style.setProperty('--volume-before-width', rangeInput.value / rangeInput.max * 100 + '%');\\n }\\n }\\n\\n const calculateTime = (secs) => {\\n const minutes = Math.floor(secs / 60);\\n const seconds = Math.floor(secs % 60);\\n const returnedSeconds = seconds < 10 ? `0${seconds}` : `${seconds}`;\\n return `${minutes}:${returnedSeconds}`;\\n }\\n\\n const displayDuration = () => {\\n durationContainer.textContent = calculateTime(audio.duration);\\n }\\n\\n const setSliderMax = () => {\\n seekSlider.max = Math.floor(audio.duration);\\n }\\n\\n const displayBufferedAmount = () => {\\n if (audio.buffered.length > 0) {\\n const bufferedAmount = Math.floor(audio.buffered.end(audio.buffered.length - 1));\\n audioPlayerContainer.style.setProperty('--buffered-width', `${(bufferedAmount / seekSlider.max) * 100}%`);\\n }\\n }\\n\\n if (audio.readyState > 0) {\\n displayDuration();\\n setSliderMax();\\n displayBufferedAmount();\\n } else {\\n audio.addEventListener('loadedmetadata', () => {\\n displayDuration();\\n setSliderMax();\\n displayBufferedAmount();\\n });\\n }\\n\\n playIconContainer.addEventListener('click', () => {\\n playIconContainer.classList.add(\\\"kg-audio-hide\\\");\\n pauseIconContainer.classList.remove(\\\"kg-audio-hide\\\");\\n audio.play();\\n requestAnimationFrame(whilePlaying);\\n });\\n\\n pauseIconContainer.addEventListener('click', () => {\\n pauseIconContainer.classList.add(\\\"kg-audio-hide\\\");\\n playIconContainer.classList.remove(\\\"kg-audio-hide\\\");\\n audio.pause();\\n cancelAnimationFrame(raf);\\n });\\n\\n muteIconContainer.addEventListener('click', () => {\\n muteIconContainer.classList.add(\\\"kg-audio-hide\\\");\\n unmuteIconContainer.classList.remove(\\\"kg-audio-hide\\\");\\n audio.muted = false;\\n });\\n\\n unmuteIconContainer.addEventListener('click', () => {\\n unmuteIconContainer.classList.add(\\\"kg-audio-hide\\\");\\n muteIconContainer.classList.remove(\\\"kg-audio-hide\\\");\\n audio.muted = true;\\n });\\n\\n playbackRateContainer.addEventListener('click', () => {\\n let nextPlaybackRate = playbackRates[(currentPlaybackRateIdx + 1) % 5];\\n currentPlaybackRateIdx = currentPlaybackRateIdx + 1;\\n audio.playbackRate = nextPlaybackRate.rate;\\n playbackRateContainer.textContent = nextPlaybackRate.label;\\n });\\n\\n audio.addEventListener('progress', displayBufferedAmount);\\n\\n seekSlider.addEventListener('input', (e) => {\\n showRangeProgress(e.target);\\n currentTimeContainer.textContent = calculateTime(seekSlider.value);\\n if (!audio.paused) {\\n cancelAnimationFrame(raf);\\n }\\n });\\n\\n seekSlider.addEventListener('change', () => {\\n audio.currentTime = seekSlider.value;\\n if (!audio.paused) {\\n requestAnimationFrame(whilePlaying);\\n }\\n });\\n\\n volumeSlider.addEventListener('input', (e) => {\\n const value = e.target.value;\\n showRangeProgress(e.target);\\n audio.volume = value / 100;\\n });\\n }\\n\\n const audioCardElements = document.querySelectorAll('.kg-audio-card');\\n\\n for (let i = 0; i < audioCardElements.length; i++) {\\n handleAudioPlayer(audioCardElements[i]);\\n }\\n})();\\n\"","export default \"(function() {\\n const images = document.querySelectorAll('.kg-gallery-image img');\\n images.forEach(function (image) {\\n const container = image.closest('.kg-gallery-image');\\n const width = image.attributes.width.value;\\n const height = image.attributes.height.value;\\n const ratio = width / height;\\n container.style.flex = ratio + ' 1 0%';\\n })\\n})();\\n\"","export default \"(function() {\\n const toggleHeadingElements = document.getElementsByClassName(\\\"kg-toggle-heading\\\");\\n\\n const toggleFn = function(event) {\\n const targetElement = event.target;\\n const parentElement = targetElement.closest('.kg-toggle-card');\\n var toggleState = parentElement.getAttribute(\\\"data-kg-toggle-state\\\");\\n if (toggleState === 'close') {\\n parentElement.setAttribute('data-kg-toggle-state', 'open');\\n } else {\\n parentElement.setAttribute('data-kg-toggle-state', 'close');\\n }\\n };\\n\\n for (let i = 0; i < toggleHeadingElements.length; i++) {\\n toggleHeadingElements[i].addEventListener('click', toggleFn, false);\\n }\\n})();\\n\"","export default \"(function() {\\n const handleVideoPlayer = function (videoElementContainer) {\\n const videoPlayer = videoElementContainer.querySelector('.kg-video-player');\\n const videoPlayerContainer = videoElementContainer.querySelector('.kg-video-player-container');\\n const playIconContainer = videoElementContainer.querySelector('.kg-video-play-icon');\\n const pauseIconContainer = videoElementContainer.querySelector('.kg-video-pause-icon');\\n const seekSlider = videoElementContainer.querySelector('.kg-video-seek-slider');\\n const playbackRateContainer = videoElementContainer.querySelector('.kg-video-playback-rate');\\n const muteIconContainer = videoElementContainer.querySelector('.kg-video-mute-icon');\\n const unmuteIconContainer = videoElementContainer.querySelector('.kg-video-unmute-icon');\\n const volumeSlider = videoElementContainer.querySelector('.kg-video-volume-slider');\\n const videoEl = videoElementContainer.querySelector('video');\\n const durationContainer = videoElementContainer.querySelector('.kg-video-duration');\\n const currentTimeContainer = videoElementContainer.querySelector('.kg-video-current-time');\\n const largePlayIcon = videoElementContainer.querySelector('.kg-video-large-play-icon');\\n const videoOverlay = videoElementContainer.querySelector('.kg-video-overlay');\\n let playbackRates = [{\\n rate: 0.75,\\n label: '0.7×'\\n }, {\\n rate: 1.0,\\n label: '1×'\\n }, {\\n rate: 1.25,\\n label: '1.2×'\\n }, {\\n rate: 1.75,\\n label: '1.7×'\\n }, {\\n rate: 2.0,\\n label: '2×'\\n }];\\n\\n let raf = null;\\n let currentPlaybackRateIdx = 1;\\n if (!!videoEl.loop) {\\n largePlayIcon.classList.add(\\\"kg-video-hide-animated\\\");\\n videoOverlay.classList.add(\\\"kg-video-hide-animated\\\");\\n }\\n const whilePlaying = () => {\\n seekSlider.value = Math.floor(videoEl.currentTime);\\n currentTimeContainer.textContent = calculateTime(seekSlider.value);\\n videoPlayer.style.setProperty('--seek-before-width', `${seekSlider.value / seekSlider.max * 100}%`);\\n raf = requestAnimationFrame(whilePlaying);\\n }\\n\\n const showRangeProgress = (rangeInput) => {\\n if (rangeInput === seekSlider) {\\n videoPlayer.style.setProperty('--seek-before-width', rangeInput.value / rangeInput.max * 100 + '%');\\n }\\n else {\\n videoPlayer.style.setProperty('--volume-before-width', rangeInput.value / rangeInput.max * 100 + '%');\\n }\\n }\\n\\n const calculateTime = (secs) => {\\n const minutes = Math.floor(secs / 60);\\n const seconds = Math.floor(secs % 60);\\n const returnedSeconds = seconds < 10 ? `0${seconds}` : `${seconds}`;\\n return `${minutes}:${returnedSeconds}`;\\n }\\n\\n const displayDuration = () => {\\n durationContainer.textContent = calculateTime(videoEl.duration);\\n }\\n\\n const setSliderMax = () => {\\n seekSlider.max = Math.floor(videoEl.duration);\\n }\\n\\n const displayBufferedAmount = () => {\\n if (videoEl.buffered.length > 0) {\\n const bufferedAmount = Math.floor(videoEl.buffered.end(videoEl.buffered.length - 1));\\n videoPlayer.style.setProperty('--buffered-width', `${(bufferedAmount / seekSlider.max) * 100}%`);\\n }\\n }\\n\\n if (videoEl.readyState > 0) {\\n displayDuration();\\n setSliderMax();\\n displayBufferedAmount();\\n if (videoEl.autoplay) {\\n raf = requestAnimationFrame(whilePlaying);\\n playIconContainer.classList.add(\\\"kg-video-hide\\\");\\n pauseIconContainer.classList.remove(\\\"kg-video-hide\\\");\\n }\\n if (videoEl.muted) {\\n unmuteIconContainer.classList.add(\\\"kg-video-hide\\\");\\n muteIconContainer.classList.remove(\\\"kg-video-hide\\\");\\n }\\n } else {\\n videoEl.addEventListener('loadedmetadata', () => {\\n displayDuration();\\n setSliderMax();\\n displayBufferedAmount();\\n if (videoEl.autoplay) {\\n raf = requestAnimationFrame(whilePlaying);\\n playIconContainer.classList.add(\\\"kg-video-hide\\\");\\n pauseIconContainer.classList.remove(\\\"kg-video-hide\\\");\\n }\\n if (videoEl.muted) {\\n unmuteIconContainer.classList.add(\\\"kg-video-hide\\\");\\n muteIconContainer.classList.remove(\\\"kg-video-hide\\\");\\n }\\n });\\n }\\n\\n videoElementContainer.onmouseover = () => {\\n if (!videoEl.loop) {\\n videoPlayerContainer.classList.remove(\\\"kg-video-hide-animated\\\");\\n }\\n }\\n\\n videoElementContainer.onmouseleave = () => {\\n const isPlaying = !!(videoEl.currentTime > 0 && !videoEl.paused && !videoEl.ended && videoEl.readyState > 2);\\n if (isPlaying) {\\n videoPlayerContainer.classList.add(\\\"kg-video-hide-animated\\\");\\n }\\n }\\n\\n videoElementContainer.addEventListener('click', () => {\\n if (!videoEl.loop) {\\n const isPlaying = !!(videoEl.currentTime > 0 && !videoEl.paused && !videoEl.ended && videoEl.readyState > 2);\\n if (isPlaying) {\\n handleOnPause();\\n } else {\\n handleOnPlay();\\n }\\n }\\n });\\n\\n videoEl.onplay = () => {\\n largePlayIcon.classList.add(\\\"kg-video-hide-animated\\\");\\n videoOverlay.classList.add(\\\"kg-video-hide-animated\\\");\\n playIconContainer.classList.add(\\\"kg-video-hide\\\");\\n pauseIconContainer.classList.remove(\\\"kg-video-hide\\\");\\n };\\n\\n const handleOnPlay = () => {\\n largePlayIcon.classList.add(\\\"kg-video-hide-animated\\\");\\n videoOverlay.classList.add(\\\"kg-video-hide-animated\\\");\\n playIconContainer.classList.add(\\\"kg-video-hide\\\");\\n pauseIconContainer.classList.remove(\\\"kg-video-hide\\\");\\n videoEl.play();\\n raf = requestAnimationFrame(whilePlaying);\\n }\\n\\n const handleOnPause = () => {\\n pauseIconContainer.classList.add(\\\"kg-video-hide\\\");\\n playIconContainer.classList.remove(\\\"kg-video-hide\\\");\\n videoEl.pause();\\n cancelAnimationFrame(raf);\\n }\\n\\n largePlayIcon.addEventListener('click', (event) => {\\n event.stopPropagation();\\n handleOnPlay();\\n });\\n\\n playIconContainer.addEventListener('click', (event) => {\\n event.stopPropagation();\\n handleOnPlay();\\n });\\n\\n pauseIconContainer.addEventListener('click', (event) => {\\n event.stopPropagation();\\n handleOnPause();\\n });\\n\\n muteIconContainer.addEventListener('click', (event) => {\\n event.stopPropagation();\\n muteIconContainer.classList.add(\\\"kg-video-hide\\\");\\n unmuteIconContainer.classList.remove(\\\"kg-video-hide\\\");\\n videoEl.muted = false;\\n });\\n\\n unmuteIconContainer.addEventListener('click', (event) => {\\n event.stopPropagation();\\n unmuteIconContainer.classList.add(\\\"kg-video-hide\\\");\\n muteIconContainer.classList.remove(\\\"kg-video-hide\\\");\\n videoEl.muted = true;\\n });\\n\\n playbackRateContainer.addEventListener('click', (event) => {\\n event.stopPropagation();\\n let nextPlaybackRate = playbackRates[(currentPlaybackRateIdx + 1) % 5];\\n currentPlaybackRateIdx = currentPlaybackRateIdx + 1;\\n videoEl.playbackRate = nextPlaybackRate.rate;\\n playbackRateContainer.textContent = nextPlaybackRate.label;\\n });\\n\\n videoEl.addEventListener('progress', displayBufferedAmount);\\n\\n seekSlider.addEventListener('input', (e) => {\\n e.stopPropagation();\\n showRangeProgress(e.target);\\n currentTimeContainer.textContent = calculateTime(seekSlider.value);\\n if (!videoEl.paused) {\\n cancelAnimationFrame(raf);\\n }\\n });\\n\\n seekSlider.addEventListener('change', (event) => {\\n event.stopPropagation();\\n videoEl.currentTime = seekSlider.value;\\n if (!videoEl.paused) {\\n requestAnimationFrame(whilePlaying);\\n }\\n });\\n\\n volumeSlider.addEventListener('click', (event) => {\\n event.stopPropagation();\\n });\\n\\n seekSlider.addEventListener('click', (event) => {\\n event.stopPropagation();\\n });\\n\\n volumeSlider.addEventListener('input', (e) => {\\n e.stopPropagation();\\n const value = e.target.value;\\n showRangeProgress(e.target);\\n videoEl.volume = value / 100;\\n });\\n }\\n\\n const setVideoContainerAspectRatio = function(videoCard) {\\n const container = videoCard.querySelector('.kg-video-container');\\n const video = container.querySelector('video');\\n if (container && video.width && video.height) {\\n const aspectRatio = (video.height / video.width * 100).toFixed(3);\\n container.style.paddingBottom = `${aspectRatio}%`;\\n }\\n };\\n\\n const videoCardElements = document.querySelectorAll('.kg-video-card');\\n\\n for (let i = 0; i < videoCardElements.length; i++) {\\n setVideoContainerAspectRatio(videoCardElements[i]);\\n handleVideoPlayer(videoCardElements[i]);\\n }\\n})();\\n\"","export default \".kg-audio-card,\\n.kg-audio-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-audio-card {\\n display: flex;\\n width: 100%;\\n min-height: 96px;\\n border-radius: 6px;\\n padding: 4px;\\n background: #fff;\\n color: #222;\\n box-shadow: inset 0 0 0 1px rgba(124, 139, 154, 0.25);\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Oxygen\\\", \\\"Ubuntu\\\", \\\"Cantarell\\\", \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.kg-audio-card+.kg-audio-card {\\n margin-top: 1em;\\n}\\n\\n.kg-audio-thumbnail {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n width: 80px;\\n min-width: 80px;\\n margin: 8px;\\n background: transparent;\\n object-fit: cover;\\n aspect-ratio: 1/1;\\n border-radius: 3px;\\n}\\n\\n.kg-audio-thumbnail.placeholder {\\n background: var(--ghost-accent-color);\\n}\\n\\n.kg-audio-thumbnail.placeholder svg {\\n width: 24px;\\n height: 24px;\\n fill: white;\\n}\\n\\n.kg-audio-player-container {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n justify-content: space-between;\\n width: 100%;\\n --seek-before-width: 0%;\\n --volume-before-width: 100%;\\n --buffered-width: 0%;\\n}\\n\\n.kg-audio-title {\\n width: 100%;\\n margin: 8px 0 0 0;\\n padding: 8px 12px;\\n border: none;\\n font-family: inherit;\\n font-size: 16px;\\n font-weight: 600;\\n line-height: 1.15em;\\n background: transparent;\\n}\\n\\n.kg-audio-player {\\n display: flex;\\n flex-grow: 1;\\n align-items: center;\\n padding: 8px 12px;\\n}\\n\\n.kg-audio-current-time {\\n min-width: 38px;\\n padding: 0 4px;\\n font-family: inherit;\\n font-size: 12.5px;\\n font-weight: 500;\\n line-height: 1em;\\n white-space: nowrap;\\n}\\n\\n.kg-audio-time {\\n width: 56px;\\n color: #ababab;\\n font-family: inherit;\\n font-size: 12.5px;\\n font-weight: 500;\\n line-height: 1em;\\n white-space: nowrap;\\n}\\n\\n.kg-audio-duration {\\n padding: 0 4px;\\n}\\n\\n.kg-audio-play-icon,\\n.kg-audio-pause-icon {\\n position: relative;\\n bottom: 1px;\\n padding: 0px 4px 0 0;\\n font-size: 0;\\n background: transparent;\\n}\\n\\n.kg-audio-hide {\\n display: none !important;\\n}\\n\\n.kg-audio-play-icon svg,\\n.kg-audio-pause-icon svg {\\n width: 14px;\\n height: 14px;\\n fill: currentColor;\\n}\\n\\n.kg-audio-seek-slider {\\n flex-grow: 1;\\n margin: 0 4px;\\n}\\n\\n@media (max-width: 640px) {\\n .kg-audio-seek-slider {\\n display: none;\\n }\\n}\\n\\n.kg-audio-playback-rate {\\n min-width: 37px;\\n padding: 0 4px;\\n font-family: inherit;\\n font-size: 12.5px;\\n font-weight: 600;\\n line-height: 1em;\\n text-align: left;\\n background: transparent;\\n white-space: nowrap;\\n}\\n\\n@media (max-width: 640px) {\\n .kg-audio-playback-rate {\\n padding-left: 8px;\\n }\\n}\\n\\n.kg-audio-mute-icon,\\n.kg-audio-unmute-icon {\\n position: relative;\\n bottom: -1px;\\n padding: 0 4px;\\n font-size: 0;\\n background: transparent;\\n}\\n\\n@media (max-width: 640px) {\\n .kg-audio-mute-icon,\\n .kg-audio-unmute-icon {\\n margin-left: auto;\\n }\\n}\\n\\n.kg-audio-mute-icon svg,\\n.kg-audio-unmute-icon svg {\\n width: 16px;\\n height: 16px;\\n fill: currentColor;\\n}\\n\\n.kg-audio-volume-slider {\\n width: 80px;\\n}\\n\\n@media (max-width: 400px) {\\n .kg-audio-volume-slider {\\n display: none;\\n }\\n}\\n\\n.kg-audio-seek-slider::before {\\n content: \\\"\\\";\\n position: absolute;\\n left: 0;\\n width: var(--seek-before-width) !important;\\n height: 4px;\\n cursor: pointer;\\n background-color: currentColor;\\n border-radius: 2px;\\n}\\n\\n.kg-audio-volume-slider::before {\\n content: \\\"\\\";\\n position: absolute;\\n left: 0;\\n width: var(--volume-before-width) !important;\\n height: 4px;\\n cursor: pointer;\\n background-color: currentColor;\\n border-radius: 2px;\\n}\\n\\n/* Resetting browser styles\\n/* --------------------------------------------------------------- */\\n\\n.kg-audio-player-container input[type=range] {\\n position: relative;\\n -webkit-appearance: none;\\n background: transparent;\\n}\\n\\n.kg-audio-player-container input[type=range]:focus {\\n outline: none;\\n}\\n\\n.kg-audio-player-container input[type=range]::-webkit-slider-thumb {\\n -webkit-appearance: none;\\n}\\n\\n.kg-audio-player-container input[type=range]::-ms-track {\\n cursor: pointer;\\n border-color: transparent;\\n color: transparent;\\n background: transparent;\\n}\\n\\n.kg-audio-player-container button {\\n display: flex;\\n align-items: center;\\n border: 0;\\n cursor: pointer;\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"] {\\n height: auto;\\n padding: 0;\\n border: 0;\\n}\\n\\n/* Chrome & Safari styles\\n/* --------------------------------------------------------------- */\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]::-webkit-slider-runnable-track {\\n width: 100%;\\n height: 4px;\\n cursor: pointer;\\n background: rgba(124, 139, 154, 0.25);\\n border-radius: 2px;\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]::-webkit-slider-thumb {\\n position: relative;\\n box-sizing: content-box;\\n width: 13px;\\n height: 13px;\\n margin: -5px 0 0 0;\\n border: 0;\\n cursor: pointer;\\n background: #fff;\\n border-radius: 50%;\\n box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]:active::-webkit-slider-thumb {\\n transform: scale(1.2);\\n}\\n\\n/* Firefox styles\\n/* --------------------------------------------------------------- */\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]::-moz-range-track {\\n width: 100%;\\n height: 4px;\\n cursor: pointer;\\n background: rgba(124, 139, 154, 0.25);\\n border-radius: 2px;\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]::-moz-range-progress {\\n background: currentColor;\\n border-radius: 2px;\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]::-moz-range-thumb {\\n box-sizing: content-box;\\n width: 13px;\\n height: 13px;\\n border: 0;\\n cursor: pointer;\\n background: #fff;\\n border-radius: 50%;\\n box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]:active::-moz-range-thumb {\\n transform: scale(1.2);\\n}\\n\\n/* Edge & IE styles\\n/* --------------------------------------------------------------- */\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]::-ms-track {\\n width: 100%;\\n height: 3px;\\n border: solid transparent;\\n color: transparent;\\n cursor: pointer;\\n background: transparent;\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]::-ms-fill-lower {\\n background: #fff;\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]::-ms-fill-upper {\\n background: currentColor;\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]::-ms-thumb {\\n box-sizing: content-box;\\n width: 13px;\\n height: 13px;\\n border: 0;\\n cursor: pointer;\\n background: #fff;\\n border-radius: 50%;\\n box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);\\n}\\n\\n.kg-audio-player-container input[type=\\\"range\\\"]:active::-ms-thumb {\\n transform: scale(1.2);\\n}\\n\"","export default \".kg-blockquote-alt {\\n font-size: 1.5em;\\n font-style: italic;\\n line-height: 1.7em;\\n text-align: center;\\n padding: 0 2.5em;\\n}\\n\\n@media (max-width: 800px) {\\n .kg-blockquote-alt {\\n font-size: 1.4em;\\n padding-left: 2em;\\n padding-right: 2em;\\n }\\n}\\n\\n@media (max-width: 600px) {\\n .kg-blockquote-alt {\\n font-size: 1.2em;\\n padding-left: 1.75em;\\n padding-right: 1.75em;\\n } \\n}\\n\"","export default \".kg-bookmark-card,\\n.kg-bookmark-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-bookmark-card,\\n.kg-bookmark-publisher {\\n position: relative;\\n /* width: 100%; */\\n}\\n\\n.kg-bookmark-card a.kg-bookmark-container,\\n.kg-bookmark-card a.kg-bookmark-container:hover {\\n display: flex;\\n background: #fff;\\n text-decoration: none;\\n border-radius: 6px;\\n border: 1px solid rgb(124 139 154 / 25%);\\n overflow: hidden;\\n color: #222;\\n}\\n\\n.kg-bookmark-content {\\n display: flex;\\n flex-direction: column;\\n flex-grow: 1;\\n flex-basis: 100%;\\n align-items: flex-start;\\n justify-content: flex-start;\\n padding: 20px;\\n overflow: hidden;\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Oxygen\\\", \\\"Ubuntu\\\", \\\"Cantarell\\\", \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.kg-bookmark-title {\\n font-size: 15px;\\n line-height: 1.4em;\\n font-weight: 600;\\n}\\n\\n.kg-bookmark-description {\\n display: -webkit-box;\\n font-size: 14px;\\n line-height: 1.5em;\\n margin-top: 3px;\\n font-weight: 400;\\n max-height: 44px;\\n overflow-y: hidden;\\n opacity: 0.7;\\n -webkit-line-clamp: 2;\\n -webkit-box-orient: vertical;\\n}\\n\\n.kg-bookmark-metadata {\\n display: flex;\\n align-items: center;\\n margin-top: 22px;\\n width: 100%;\\n font-size: 14px;\\n font-weight: 500;\\n white-space: nowrap;\\n}\\n\\n.kg-bookmark-metadata > *:not(img) {\\n opacity: 0.7;\\n}\\n\\n.kg-bookmark-icon {\\n width: 20px;\\n height: 20px;\\n margin-right: 6px;\\n}\\n\\n.kg-bookmark-author,\\n.kg-bookmark-publisher {\\n display: inline;\\n}\\n\\n.kg-bookmark-publisher {\\n text-overflow: ellipsis;\\n overflow: hidden;\\n max-width: 240px;\\n white-space: nowrap;\\n display: block;\\n line-height: 1.65em;\\n}\\n\\n.kg-bookmark-metadata > span:nth-of-type(2) {\\n font-weight: 400;\\n}\\n\\n.kg-bookmark-metadata > span:nth-of-type(2):before {\\n content: \\\"•\\\";\\n margin: 0 6px;\\n}\\n\\n.kg-bookmark-metadata > span:last-of-type {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n\\n.kg-bookmark-thumbnail {\\n position: relative;\\n flex-grow: 1;\\n min-width: 33%;\\n}\\n\\n.kg-bookmark-thumbnail img {\\n width: 100%;\\n height: 100%;\\n object-fit: cover;\\n position: absolute;\\n top: 0;\\n left: 0;\\n border-radius: 0 2px 2px 0;\\n}\\n\"","export default \".kg-button-card,\\n.kg-button-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-button-card {\\n display: flex;\\n position: static;\\n align-items: center;\\n width: 100%;\\n justify-content: center;\\n}\\n\\n.kg-button-card.kg-align-left {\\n justify-content: flex-start;\\n}\\n\\n.kg-button-card a.kg-btn {\\n display: flex;\\n position: static;\\n align-items: center;\\n padding: 0 1.2em;\\n height: 2.4em;\\n line-height: 1em;\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Oxygen\\\", \\\"Ubuntu\\\", \\\"Cantarell\\\", \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 0.95em;\\n font-weight: 600;\\n text-decoration: none;\\n border-radius: 5px;\\n transition: opacity 0.2s ease-in-out;\\n}\\n\\n.kg-button-card a.kg-btn:hover {\\n opacity: 0.85;\\n}\\n\\n.kg-button-card a.kg-btn-accent {\\n background-color: var(--ghost-accent-color);\\n color: #fff;\\n}\"","export default \".kg-callout-card,\\n.kg-callout-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-callout-card {\\n display: flex;\\n padding: 1.2em 1.6em;\\n border-radius: 8px;\\n}\\n\\n.kg-callout-card-grey {\\n background: rgba(124, 139, 154, 0.13);\\n}\\n\\n.kg-callout-card-white {\\n background: transparent;\\n box-shadow: inset 0 0 0 1px rgba(124, 139, 154, 0.2);\\n}\\n\\n.kg-callout-card-blue {\\n background: rgba(33, 172, 232, 0.12);\\n}\\n\\n.kg-callout-card-green {\\n background: rgba(52, 183, 67, 0.12);\\n}\\n\\n.kg-callout-card-yellow {\\n background: rgba(240, 165, 15, 0.13);\\n}\\n\\n.kg-callout-card-red {\\n background: rgba(209, 46, 46, 0.11);\\n}\\n\\n.kg-callout-card-pink {\\n background: rgba(225, 71, 174, 0.11);\\n}\\n\\n.kg-callout-card-purple {\\n background: rgba(135, 85, 236, 0.12);\\n}\\n\\n.kg-callout-card-accent {\\n background: var(--ghost-accent-color);\\n color: #fff;\\n}\\n\\n.kg-callout-card.kg-callout-card-accent a {\\n color: #fff;\\n text-decoration: underline;\\n}\\n\\n.kg-callout-card div.kg-callout-emoji {\\n padding-right: .8em;\\n line-height: 1.25em;\\n font-size: 1.15em;\\n}\\n\\n.kg-callout-card div.kg-callout-text {\\n font-size: .95em;\\n line-height: 1.5em;\\n}\\n\\n.kg-callout-card + .kg-callout-card {\\n margin-top: 1em;\\n}\"","export default \".kg-collection-card {\\n width: 100%;\\n margin-top: 6vmin;\\n}\\n\\n.kg-collection-card + * { \\n margin-top: 6vmin; \\n}\\n\\n.kg-collection-card-title {\\n margin: .8rem 0 1.6rem 0;\\n font-size: 1.5rem;\\n font-weight: 700;\\n text-transform: uppercase;\\n}\\n\\na.kg-collection-card-post-wrapper {\\n text-decoration: none;\\n color: var(--text-color);\\n}\\n\\na.kg-collection-card-post-wrapper:hover {\\n opacity: 1;\\n}\\n\\n\\n.kg-collection-card-post {\\n display: flex;\\n gap: 3.2rem;\\n}\\n\\n.kg-collection-card-img {\\n position: relative;\\n aspect-ratio: 3/2;\\n}\\n\\n.kg-collection-card-img img {\\n position: absolute;\\n inset: 0;\\n width: 100%;\\n height: 100%;\\n object-fit: cover;\\n}\\n\\na.kg-collection-card-post-wrapper:hover img {\\n opacity: .92;\\n transition: all .2s ease;\\n}\\n\\n.kg-collection-card-content {\\n display: flex;\\n flex-direction: column;\\n font-size: 1.6rem;\\n}\\n\\nh2.kg-collection-card-post-title {\\n margin: 0;\\n font-size: 2.4rem;\\n overflow: hidden;\\n display: -webkit-box;\\n -webkit-box-orient: vertical;\\n -webkit-line-clamp: 2;\\n}\\n\\np.kg-collection-card-post-excerpt {\\n margin-top: 1.2rem;\\n overflow: hidden;\\n display: -webkit-box;\\n -webkit-box-orient: vertical;\\n -webkit-line-clamp: 2;\\n line-height: 1.4;\\n}\\n\\n.kg-collection-card-post-meta {\\n display: flex;\\n opacity: .5;\\n margin-top: 1.2rem;\\n font-size: 1.3rem;\\n font-weight: 500;\\n}\\n\\n/* List layout */\\n\\n.kg-collection-card-list {\\n display: flex;\\n flex-direction: column;\\n gap: 3.2rem;\\n}\\n\\n@media (max-width: 767px) {\\n .kg-collection-card-list .kg-collection-card-post {\\n flex-direction: column;\\n }\\n}\\n\\n.kg-collection-card-list .kg-collection-card-img {\\n flex: 0 0 30%;\\n}\\n\\n/* Grid layout */\\n\\n.kg-collection-card-grid {\\n display: grid;\\n grid-template-columns: repeat(1,minmax(0,1fr));\\n gap: 2.4rem;\\n}\\n\\n@media (min-width: 640px) {\\n .kg-collection-card-grid:not(.columns-1) {\\n grid-template-columns: repeat(2,minmax(0,1fr));\\n }\\n}\\n\\n@media (min-width: 1024px) {\\n .kg-collection-card-grid:not(.columns-1):not(.columns-2) {\\n grid-template-columns: repeat(3,minmax(0,1fr));\\n gap: 3.2rem\\n }\\n\\n .kg-collection-card-grid.columns-1 {\\n gap: 4.8rem\\n }\\n\\n .kg-collection-card-grid.columns-2 {\\n gap: 4rem\\n }\\n}\\n\\n@media (min-width: 1280px) {\\n .kg-collection-card-grid:not(.columns-1):not(.columns-2):not(.columns-3) {\\n grid-template-columns: repeat(4,minmax(0,1fr));\\n }\\n}\\n\\n.kg-collection-card-grid .kg-collection-card-post {\\n flex-direction: column;\\n gap: 1.2rem;\\n}\\n\\n@media (min-width: 1024px) {\\n .kg-collection-card-grid.columns-1 .kg-collection-card-post {\\n gap: 2rem\\n }\\n\\n .kg-collection-card-grid.columns-2 .kg-collection-card-post {\\n gap: 1.6rem\\n }\\n}\\n\\n.kg-collection-card-grid.columns-1 .kg-collection-card-img,\\n.kg-collection-card-grid.columns-2 .kg-collection-card-img {\\n aspect-ratio: 16/9;\\n}\\n\\n.kg-collection-card-grid .kg-collection-card-content {\\n font-size: 1.5rem;\\n}\\n\\n@media (min-width: 640px) {\\n .kg-collection-card-grid .kg-collection-card-content {\\n font-size: 1.6rem;\\n }\\n}\\n\\n@media (min-width: 1024px) {\\n .kg-collection-card-grid.columns-1 .kg-collection-card-content {\\n font-size: 1.8rem;\\n }\\n\\n .kg-collection-card-grid.columns-3 .kg-collection-card-content,\\n .kg-collection-card-grid.columns-4 .kg-collection-card-content {\\n font-size: 1.5rem;\\n }\\n}\\n\\n.kg-collection-card-grid h2.kg-collection-card-post-title {\\n font-size: 1.7rem;\\n}\\n\\n.kg-collection-card-grid .kg-collection-card-post-meta {\\n font-size: 1.25rem;\\n}\\n\\n@media (min-width: 640px) {\\n .kg-collection-card-grid h2.kg-collection-card-post-title {\\n font-size: 1.9rem;\\n }\\n\\n .kg-collection-card-grid.columns-1 h2.kg-collection-card-post-title {\\n font-size: 2.4rem;\\n }\\n\\n .kg-collection-card-grid:not(.columns-3):not(.columns-4) .kg-collection-card-post-meta {\\n font-size: 1.3rem;\\n }\\n}\\n\\n@media (min-width: 1024px) {\\n .kg-collection-card-grid.columns-1 h2.kg-collection-card-post-title {\\n font-size: 3.6rem;\\n }\\n\\n .kg-collection-card-grid.columns-2 h2.kg-collection-card-post-title {\\n font-size: 2.4rem;\\n }\\n\\n .kg-collection-card-grid.columns-1 .kg-collection-card-post-meta {\\n font-size: 1.4rem;\\n }\\n}\\n\\n@media (min-width: 1280px) {\\n .kg-collection-card-grid.columns-4 h2.kg-collection-card-post-title {\\n font-size: 1.7rem;\\n }\\n}\"","export default \".kg-cta-card,\\n.kg-cta-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-cta-card {\\n display: flex;\\n flex-direction: column;\\n border-radius: 8px;\\n}\\n\\n.kg-cta-bg-grey {\\n background: rgba(151, 163, 175, 0.14)\\n}\\n\\n.kg-cta-bg-white {\\n background: transparent;\\n box-shadow: inset 0 0 0 1px rgba(124, 139, 154, 0.2);\\n}\\n\\n.kg-cta-bg-blue {\\n background: rgba(33, 172, 232, 0.12);\\n}\\n\\n.kg-cta-bg-green {\\n background: rgba(52, 183, 67, 0.12);\\n}\\n\\n.kg-cta-bg-yellow {\\n background: rgba(240, 165, 15, 0.13);\\n}\\n\\n.kg-cta-bg-red {\\n background: rgba(209, 46, 46, 0.11);\\n}\\n\\n.kg-cta-bg-pink {\\n background: rgba(225, 71, 174, 0.11);\\n}\\n\\n.kg-cta-bg-purple {\\n background: rgba(135, 85, 236, 0.12);\\n}\\n\\n.kg-cta-sponsor-label-wrapper {\\n margin: 0 1.5em;\\n padding: .7em 0;\\n border-bottom: 1px solid rgba(124, 139, 154, 0.2);\\n}\\n\\n@media (max-width: 600px) {\\n .kg-cta-sponsor-label-wrapper {\\n margin: 0 1.25em;\\n padding: .5em 0;\\n }\\n}\\n\\n.kg-cta-bg-none .kg-cta-sponsor-label-wrapper {\\n margin: 0;\\n padding-top: 0;\\n}\\n\\n.kg-cta-has-img .kg-cta-sponsor-label-wrapper:not(.kg-cta-bg-none .kg-cta-sponsor-label-wrapper):not(.kg-cta-minimal .kg-cta-sponsor-label-wrapper),\\n.kg-cta-bg-none.kg-cta-no-dividers .kg-cta-sponsor-label-wrapper {\\n border-bottom: 0;\\n}\\n\\n.kg-cta-sponsor-label {\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Oxygen\\\", \\\"Ubuntu\\\", \\\"Cantarell\\\", \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 12px;\\n font-weight: 600;\\n text-transform: uppercase;\\n text-wrap: pretty;\\n}\\n\\n.kg-cta-sponsor-label span:not(a span) {\\n color: color-mix(in srgb, currentColor 45%, transparent);\\n}\\n\\n.kg-cta-sponsor-label a,\\n.kg-cta-sponsor-label a span {\\n color: currentColor;\\n transition: opacity 0.15s ease-in-out;\\n}\\n\\n.kg-cta-sponsor-label a:hover,\\n.kg-cta-sponsor-label a:hover span {\\n color: currentColor;\\n opacity: 0.85;\\n}\\n\\n.kg-cta-link-accent .kg-cta-sponsor-label a {\\n color: var(--ghost-accent-color);\\n}\\n\\n.kg-cta-content {\\n display: flex;\\n padding: 1.5em;\\n gap: 1.5em;\\n}\\n\\n@media (max-width: 600px) {\\n .kg-cta-content {\\n padding: 1.25em;\\n gap: 1.25em;\\n }\\n}\\n\\n.kg-cta-has-img .kg-cta-sponsor-label-wrapper + .kg-cta-content:not(.kg-cta-bg-none .kg-cta-content):not(.kg-cta-minimal .kg-cta-content) {\\n padding-top: 0;\\n}\\n\\n.kg-cta-bg-none .kg-cta-content {\\n padding: 1.5em 0;\\n border-bottom: 1px solid rgba(124, 139, 154, 0.2);\\n}\\n\\n.kg-cta-bg-none.kg-cta-no-dividers .kg-cta-content {\\n padding: 0;\\n border-bottom: none;\\n}\\n\\n.kg-cta-bg-none:not(.kg-cta-no-dividers) .kg-cta-content:not(.kg-cta-sponsor-label-wrapper + .kg-cta-content) {\\n border-top: 1px solid rgba(124, 139, 154, 0.2);\\n}\\n\\n@media (max-width: 600px) {\\n .kg-cta-bg-none .kg-cta-content {\\n padding: 1.25em 0;\\n }\\n}\\n\\n.kg-cta-minimal .kg-cta-content {\\n flex-direction: row;\\n}\\n\\n@media (max-width: 600px) {\\n .kg-cta-minimal .kg-cta-content {\\n flex-direction: column;\\n gap: 1.6rem;\\n }\\n}\\n\\n.kg-cta-immersive .kg-cta-content {\\n flex-direction: column;\\n}\\n\\n.kg-cta-content-inner {\\n display: flex;\\n flex-direction: column;\\n gap: 1.5em;\\n}\\n\\n@media (max-width: 600px) {\\n .kg-cta-content-inner {\\n gap: 1.25em;\\n }\\n}\\n\\n.kg-cta-immersive.kg-cta-centered .kg-cta-content-inner {\\n align-items: center;\\n}\\n\\n.kg-cta-image-container {\\n flex-shrink: 0;\\n}\\n\\n.kg-cta-image-container img {\\n width: 100%;\\n height: auto;\\n margin: 0;\\n object-fit: cover;\\n border-radius: 6px;\\n}\\n\\n\\n.kg-cta-minimal .kg-cta-image-container img {\\n width: 64px;\\n height: 64px;\\n}\\n\\n@media (max-width: 600px) {\\n .kg-cta-minimal .kg-cta-image-container img {\\n width: 52px;\\n height: 52px;\\n }\\n}\\n\\n.kg-cta-text p {\\n margin: 0;\\n line-height: 1.5em;\\n text-wrap: pretty;\\n}\\n\\n.kg-cta-bg-none .kg-cta-text p {\\n line-height: unset;\\n}\\n\\n.kg-cta-immersive.kg-cta-centered .kg-cta-text {\\n text-align: center;\\n}\\n\\n.kg-cta-text p + p {\\n margin-top: 1.25em;\\n}\\n\\n.kg-cta-text a {\\n color: currentColor;\\n transition: opacity 0.15s ease-in-out;\\n}\\n\\n.kg-cta-text a:hover {\\n color: currentColor;\\n opacity: 0.85;\\n}\\n\\n.kg-cta-link-accent .kg-cta-text a {\\n color: var(--ghost-accent-color);\\n}\\n\\na.kg-cta-button {\\n display: flex;\\n position: static;\\n align-items: center;\\n justify-content: center;\\n padding: 0 1em;\\n height: 2.5em;\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Oxygen\\\", \\\"Ubuntu\\\", \\\"Cantarell\\\", \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 0.95em;\\n font-weight: 500;\\n line-height: 1.65;\\n text-decoration: none;\\n border-radius: 6px;\\n transition: opacity 0.15s ease-in-out;\\n}\\n\\na.kg-cta-button:hover {\\n opacity: 0.85;\\n}\\n\\na.kg-cta-button.kg-style-accent {\\n background-color: var(--ghost-accent-color);\\n}\\n\\na.kg-cta-button {\\n width: max-content;\\n}\\n\\n.kg-cta-immersive.kg-cta-has-img a.kg-cta-button {\\n width: 100%;\\n}\\n\\n\"","export default \".kg-file-card,\\n.kg-file-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-file-card {\\n display: flex;\\n}\\n\\n.kg-file-card a.kg-file-card-container {\\n display: flex;\\n align-items: stretch;\\n justify-content: space-between;\\n color: inherit;\\n padding: 12px;\\n min-height: 92px;\\n background: #fff;\\n color: #222;\\n border: 1px solid rgb(124 139 154 / 25%);\\n border-radius: 5px;\\n transition: all ease-in-out 0.35s;\\n text-decoration: none;\\n width: 100%;\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Oxygen\\\", \\\"Ubuntu\\\", \\\"Cantarell\\\", \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.kg-file-card a.kg-file-card-container:hover {\\n border: 1px solid rgb(124 139 154 / 35%);\\n}\\n\\n.kg-file-card-contents {\\n display: flex;\\n flex-direction: column;\\n justify-content: space-between;\\n margin: 4px 8px;\\n width: 100%\\n}\\n\\n.kg-file-card-title {\\n font-size: 16px;\\n font-weight: 600;\\n line-height: 1.3em;\\n}\\n\\n.kg-file-card-caption {\\n font-size: 14px;\\n line-height: 1.3em;\\n opacity: 0.7;\\n}\\n\\n.kg-file-card-title + .kg-file-card-caption {\\n flex-grow: 1;\\n margin-top: 3px;\\n}\\n\\n.kg-file-card-metadata {\\n display: inline;\\n font-size: 14px;\\n line-height: 1.3em;\\n margin-top: 5px;\\n}\\n\\n.kg-file-card-filename {\\n display: inline;\\n font-weight: 500;\\n}\\n\\n.kg-file-card-filesize {\\n display: inline-block;\\n font-size: 14px;\\n opacity: 0.6;\\n}\\n\\n.kg-file-card-filesize:before {\\n display: inline-block;\\n content: \\\"\\\\2022\\\";\\n margin-left: 6px;\\n margin-right: 6px;\\n}\\n\\n.kg-file-card-icon {\\n position: relative;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 80px;\\n min-width: 80px;\\n height: 100%;\\n min-height: 80px;\\n}\\n\\n.kg-file-card-icon:before {\\n position: absolute;\\n display: block;\\n content: \\\"\\\";\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n background: currentColor;\\n opacity: 0.06;\\n transition: opacity ease-in-out 0.35s;\\n border-radius: 3px;\\n}\\n\\n.kg-file-card a.kg-file-card-container:hover .kg-file-card-icon:before {\\n opacity: 0.08;\\n}\\n\\n.kg-file-card-icon svg {\\n width: 24px;\\n height: 24px;\\n color: var(--ghost-accent-color);\\n}\\n\\n/* Size variations */\\n.kg-file-card-medium a.kg-file-card-container {\\n min-height: 72px;\\n}\\n\\n.kg-file-card-medium .kg-file-card-caption {\\n opacity: 1.0;\\n font-weight: 500;\\n}\\n\\n.kg-file-card-small a.kg-file-card-container {\\n align-items: center;\\n min-height: 52px;\\n}\\n\\n.kg-file-card-small .kg-file-card-metadata {\\n font-size: 14px;\\n margin-top: 0;\\n}\\n\\n.kg-file-card-small .kg-file-card-icon svg {\\n width: 20px;\\n height: 20px;\\n}\\n\\n.kg-file-card + .kg-file-card {\\n margin-top: 1em;\\n}\\n\"","export default \".kg-gallery-card,\\n.kg-gallery-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-gallery-card,\\n.kg-image-card {\\n --gap: 1.2rem;\\n}\\n\\n.kg-image-card:not(.kg-card-hascaption) + .kg-image-card,\\n.kg-image-card:not(.kg-card-hascaption) + .kg-gallery-card,\\n.kg-gallery-card:not(.kg-card-hascaption) + .kg-image-card,\\n.kg-gallery-card:not(.kg-card-hascaption) + .kg-gallery-card {\\n margin-top: var(--gap);\\n}\\n\\n.kg-gallery-container {\\n position: relative;\\n}\\n\\n.kg-gallery-row {\\n display: flex;\\n flex-direction: row;\\n justify-content: center;\\n}\\n\\n.kg-gallery-image img {\\n display: block;\\n margin: 0;\\n width: 100%;\\n height: 100%;\\n}\\n\\n.kg-gallery-row:not(:first-of-type) {\\n margin: var(--gap) 0 0;\\n}\\n\\n.kg-gallery-image:not(:first-of-type) {\\n margin: 0 0 0 var(--gap);\\n}\\n\\n@media (max-width: 600px) {\\n .kg-gallery-card,\\n .kg-image-card {\\n --gap: 0.6rem;\\n }\\n}\\n\"","export default \".kg-header-card,\\n.kg-header-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-header-card {\\n padding: 12vmin 4em;\\n min-height: 60vh;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n text-align: center;\\n}\\n\\n.kg-header-card.kg-size-small {\\n padding-top: 14vmin;\\n padding-bottom: 14vmin;\\n min-height: 40vh;\\n}\\n\\n.kg-header-card.kg-size-large {\\n padding-top: 18vmin;\\n padding-bottom: 18vmin;\\n min-height: 80vh;\\n}\\n\\n.kg-header-card.kg-align-left {\\n text-align: left;\\n align-items: flex-start;\\n}\\n\\n.kg-header-card.kg-style-dark {\\n background: #151515;\\n color: #ffffff;\\n}\\n\\n.kg-header-card.kg-style-light {\\n background-color: #fafafa;\\n}\\n\\n.kg-header-card.kg-style-accent {\\n background-color: var(--ghost-accent-color);\\n}\\n\\n.kg-header-card.kg-style-image {\\n position: relative;\\n background-color: #e7e7e7;\\n background-size: cover;\\n background-position: center;\\n}\\n\\n.kg-header-card.kg-style-image::before {\\n position: absolute;\\n display: block;\\n content: \\\"\\\";\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n background: linear-gradient(0deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2));\\n}\\n\\n.kg-header-card h2.kg-header-card-header {\\n font-size: 5em;\\n font-weight: 700;\\n line-height: 1.1em;\\n letter-spacing: -0.01em;\\n margin: 0;\\n}\\n\\n.kg-header-card h2.kg-header-card-header strong {\\n font-weight: 800;\\n}\\n\\n.kg-header-card.kg-size-small h2.kg-header-card-header {\\n font-size: 4em;\\n}\\n\\n.kg-header-card.kg-size-large h2.kg-header-card-header {\\n font-size: 6em;\\n}\\n\\n.kg-header-card h3.kg-header-card-subheader {\\n font-size: 1.5em;\\n font-weight: 500;\\n line-height: 1.4em;\\n margin: 0;\\n max-width: 40em;\\n}\\n\\n.kg-header-card h2 + h3.kg-header-card-subheader {\\n margin: 0.35em 0 0;\\n}\\n\\n.kg-header-card h3.kg-header-card-subheader strong {\\n font-weight: 600;\\n}\\n\\n.kg-header-card.kg-size-small h3.kg-header-card-subheader {\\n font-size: 1.25em;\\n}\\n\\n.kg-header-card.kg-size-large h3.kg-header-card-subheader {\\n font-size: 1.75em;\\n}\\n\\n.kg-header-card:not(.kg-style-light) h2.kg-header-card-header,\\n.kg-header-card:not(.kg-style-light) h3.kg-header-card-subheader {\\n color: #ffffff;\\n}\\n\\n.kg-header-card.kg-style-accent h3.kg-header-card-subheader,\\n.kg-header-card.kg-style-image h3.kg-header-card-subheader {\\n opacity: 1.0;\\n}\\n\\n.kg-header-card.kg-style-image h2.kg-header-card-header,\\n.kg-header-card.kg-style-image h3.kg-header-card-subheader,\\n.kg-header-card.kg-style-image a.kg-header-card-button {\\n z-index: 999;\\n}\\n\\n.kg-header-card h2.kg-header-card-header a,\\n.kg-header-card h3.kg-header-card-subheader a {\\n color: var(--ghost-accent-color);\\n}\\n\\n.kg-header-card.kg-style-accent h2.kg-header-card-header a,\\n.kg-header-card.kg-style-accent h3.kg-header-card-subheader a,\\n.kg-header-card.kg-style-image h2.kg-header-card-header a,\\n.kg-header-card.kg-style-image h3.kg-header-card-subheader a {\\n color: #fff;\\n}\\n\\n.kg-header-card a.kg-header-card-button {\\n display: flex;\\n position: static;\\n align-items: center;\\n fill: #fff;\\n background: #fff;\\n border-radius: 3px;\\n outline: none;\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Oxygen\\\", \\\"Ubuntu\\\", \\\"Cantarell\\\", \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 1.05em;\\n font-weight: 600;\\n line-height: 1em;\\n text-align: center;\\n text-decoration: none;\\n letter-spacing: .2px;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n color: #151515;\\n height: 2.7em;\\n padding: 0 1.2em;\\n transition: opacity .2s ease;\\n}\\n\\n.kg-header-card h2 + a.kg-header-card-button,\\n.kg-header-card h3 + a.kg-header-card-button {\\n margin: 1.75em 0 0;\\n}\\n\\n.kg-header-card a.kg-header-card-button:hover {\\n opacity: 0.85;\\n}\\n\\n.kg-header-card.kg-size-large a.kg-header-card-button {\\n font-size: 1.1em;\\n height: 2.9em;\\n}\\n\\n.kg-header-card.kg-size-large h2 + a.kg-header-card-button,\\n.kg-header-card.kg-size-large h3 + a.kg-header-card-button {\\n margin-top: 2em;\\n}\\n\\n.kg-header-card.kg-size-small a.kg-header-card-button {\\n height: 2.4em;\\n font-size: 1em;\\n}\\n\\n.kg-header-card.kg-size-small h2 + a.kg-header-card-button,\\n.kg-header-card.kg-size-small h3 + a.kg-header-card-button {\\n margin-top: 1.5em;\\n}\\n\\n.kg-header-card.kg-style-image a.kg-header-card-button,\\n.kg-header-card.kg-style-dark a.kg-header-card-button {\\n background: #fff;\\n color: #151515;\\n}\\n\\n.kg-header-card.kg-style-light a.kg-header-card-button {\\n background: var(--ghost-accent-color);\\n color: #fff;\\n}\\n\\n.kg-header-card.kg-style-accent a.kg-header-card-button {\\n background: #fff;\\n color: #151515;\\n}\\n\\n@media (max-width: 640px) {\\n .kg-header-card {\\n padding-left: 1em;\\n padding-right: 1em;\\n }\\n\\n .kg-header-card h2.kg-header-card-header {\\n font-size: 3.5em;\\n }\\n\\n .kg-header-card.kg-size-large h2.kg-header-card-header {\\n font-size: 4em;\\n }\\n\\n .kg-header-card.kg-size-small h2.kg-header-card-header {\\n font-size: 3em;\\n }\\n\\n .kg-header-card h3.kg-header-card-subheader {\\n font-size: 1.25em;\\n }\\n\\n .kg-header-card.kg-size-large h3.kg-header-card-subheader {\\n font-size: 1.5em;\\n }\\n\\n .kg-header-card.kg-size-small h3.kg-header-card-subheader {\\n font-size: 1em;\\n }\\n}\\n\"","export default \".kg-header-card.kg-v2 {\\n position: relative;\\n padding: 0;\\n min-height: initial;\\n text-align: initial;\\n}\\n\\n.kg-header-card.kg-v2,\\n.kg-header-card.kg-v2 * {\\n box-sizing: border-box;\\n}\\n\\n.kg-header-card.kg-v2 a,\\n.kg-header-card.kg-v2 a span {\\n color: currentColor;\\n}\\n\\n.kg-header-card.kg-style-accent.kg-v2 {\\n background-color: var(--ghost-accent-color);\\n}\\n\\n.kg-header-card-content {\\n width: 100%;\\n}\\n\\n.kg-layout-split .kg-header-card-content {\\n display: grid;\\n grid-template-columns: 1fr 1fr;\\n}\\n\\n.kg-header-card-text {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n justify-content: center;\\n height: 100%;\\n padding: min(6.4vmax, 120px) min(4vmax, 80px);\\n background-size: cover;\\n background-position: center;\\n text-align: left;\\n}\\n\\n.kg-width-wide .kg-header-card-text {\\n padding: min(10vmax, 220px) min(6.4vmax, 140px);\\n}\\n\\n.kg-width-full .kg-header-card-text {\\n padding: min(12vmax, 260px) 0;\\n}\\n\\n.kg-layout-split .kg-header-card-text {\\n padding: min(12vmax, 260px) min(4vmax, 80px);\\n}\\n\\n.kg-layout-split.kg-content-wide .kg-header-card-text {\\n padding: min(10vmax, 220px) 0 min(10vmax, 220px) min(4vmax, 80px);\\n}\\n\\n.kg-layout-split.kg-content-wide.kg-swapped .kg-header-card-text {\\n padding: min(10vmax, 220px) min(4vmax, 80px) min(10vmax, 220px) 0;\\n}\\n\\n.kg-swapped .kg-header-card-text {\\n grid-row: 1;\\n}\\n\\n.kg-header-card-text.kg-align-center {\\n align-items: center;\\n text-align: center;\\n}\\n\\n.kg-header-card.kg-style-image h2.kg-header-card-heading,\\n.kg-header-card.kg-style-image .kg-header-card-subheading,\\n.kg-header-card.kg-style-image.kg-v2 .kg-header-card-button {\\n z-index: 999;\\n}\\n\\n/* Background image */\\n\\n.kg-header-card > picture > .kg-header-card-image {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n object-fit: cover;\\n object-position: center;\\n background-color: #FFFFFF;\\n pointer-events: none;\\n}\\n\\n/* Split layout image */\\n\\n.kg-header-card-content .kg-header-card-image {\\n width: 100%;\\n /* this will force the image to follow the signup card height */\\n height: 0;\\n min-height: 100%;\\n /**/\\n object-fit: cover;\\n object-position: center;\\n}\\n\\n.kg-content-wide .kg-header-card-content .kg-header-card-image {\\n height: 100%;\\n padding: 5.6em 0;\\n object-fit: contain;\\n}\\n\\n/* Heading */\\n\\n.kg-header-card h2.kg-header-card-heading {\\n margin: 0;\\n font-size: clamp(1.7em, 4vw, 2.5em);\\n font-weight: 700;\\n line-height: 1.05em;\\n letter-spacing: -0.01em;\\n}\\n\\n.kg-header-card.kg-width-wide h2.kg-header-card-heading {\\n font-size: clamp(1.7em, 5vw, 3.3em);\\n}\\n\\n.kg-header-card.kg-width-full h2.kg-header-card-heading {\\n font-size: clamp(1.9em, 5.6vw, 4.2em);\\n}\\n\\n.kg-header-card.kg-width-full.kg-layout-split h2.kg-header-card-heading {\\n font-size: clamp(1.9em, 4vw, 3.3em);\\n}\\n\\n/* Subheading */\\n\\n.kg-header-card-subheading {\\n margin: 0 0 2em;\\n}\\n\\n.kg-header-card .kg-header-card-subheading {\\n max-width: 40em;\\n margin: 0;\\n font-size: clamp(1.05em, 2vw, 1.4em);\\n font-weight: 500;\\n line-height: 1.2em;\\n}\\n\\n.kg-header-card h2 + .kg-header-card-subheading {\\n margin: 0.6em 0 0;\\n}\\n\\n.kg-header-card .kg-header-card-subheading strong {\\n font-weight: 600;\\n}\\n\\n.kg-header-card.kg-width-wide .kg-header-card-subheading {\\n font-size: clamp(1.05em, 2vw, 1.55em);\\n}\\n\\n.kg-header-card.kg-width-full .kg-header-card-subheading:not(.kg-layout-split .kg-header-card-subheading) {\\n max-width: min(65vmax, 1200px);\\n font-size: clamp(1.05em, 2vw, 1.7em);\\n}\\n\\n.kg-header-card.kg-width-full.kg-layout-split .kg-header-card-subheading {\\n font-size: clamp(1.05em, 2vw, 1.55em);\\n}\\n\\n.kg-header-card.kg-v2 .kg-header-card-button {\\n display: flex;\\n position: relative;\\n align-items: center;\\n height: 2.9em;\\n min-height: 46px;\\n padding: 0 1.2em;\\n outline: none;\\n border: none;\\n font-size: 1em;\\n font-weight: 600;\\n line-height: 1em;\\n text-align: center;\\n text-decoration: none;\\n letter-spacing: .2px;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n border-radius: 3px;\\n transition: opacity .2s ease;\\n}\\n\\n.kg-header-card.kg-v2 .kg-header-card-button.kg-style-accent {\\n background-color: var(--ghost-accent-color);\\n}\\n\\n.kg-header-card.kg-v2 h2 + .kg-header-card-button,\\n.kg-header-card.kg-v2 p + .kg-header-card-button {\\n margin: 1.5em 0 0;\\n}\\n\\n.kg-header-card.kg-v2 .kg-header-card-button:hover {\\n opacity: 0.85;\\n}\\n\\n.kg-header-card.kg-v2.kg-width-wide .kg-header-card-button {\\n font-size: 1.05em;\\n}\\n\\n.kg-header-card.kg-v2.kg-width-wide h2 + .kg-header-card-button,\\n.kg-header-card.kg-v2.kg-width-wide p + .kg-header-card-button {\\n margin-top: 1.75em;\\n}\\n\\n.kg-header-card.kg-v2.kg-width-full .kg-header-card-button {\\n font-size: 1.1em;\\n}\\n\\n.kg-header-card.kg-v2.kg-width-full h2 + .kg-header-card-button,\\n.kg-header-card.kg-v2.kg-width-full p + .kg-header-card-button {\\n margin-top: 2em;\\n}\\n\\n/* Responsive styles */\\n\\n@media (max-width: 640px) {\\n .kg-layout-split .kg-header-card-content {\\n grid-template-columns: 1fr;\\n }\\n\\n .kg-width-wide .kg-header-card-text {\\n padding: min(6.4vmax, 120px) min(4vmax, 80px);\\n }\\n\\n .kg-layout-split.kg-content-wide .kg-header-card-text,\\n .kg-layout-split.kg-content-wide.kg-swapped .kg-header-card-text {\\n padding: min(9.6vmax, 180px) 0;\\n }\\n\\n .kg-header-card.kg-width-full .kg-header-card-subheading:not(.kg-layout-split .kg-header-card-subheading) {\\n max-width: unset;\\n }\\n\\n .kg-header-card-content .kg-header-card-image:not(.kg-content-wide .kg-header-card-content .kg-header-card-image) {\\n height: auto;\\n min-height: unset;\\n aspect-ratio: 1 / 1;\\n }\\n\\n .kg-content-wide .kg-header-card-content .kg-header-card-image {\\n padding: 1.7em 0 0;\\n }\\n\\n .kg-content-wide.kg-swapped .kg-header-card-content .kg-header-card-image {\\n padding: 0 0 1.7em;\\n }\\n\\n .kg-header-card.kg-v2 .kg-header-card-button {\\n height: 2.9em;\\n }\\n\\n .kg-header-card.kg-v2.kg-width-wide .kg-header-card-button,\\n .kg-header-card.kg-v2.kg-width-full .kg-header-card-button {\\n font-size: 1em;\\n }\\n}\\n\"","export default \".kg-nft-card,\\n.kg-nft-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-nft-card {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n width: 100%;\\n margin-left: auto;\\n margin-right: auto;\\n}\\n\\n.kg-nft-card a.kg-nft-card-container {\\n position: static;\\n display: flex;\\n flex: auto;\\n flex-direction: column;\\n text-decoration: none;\\n font-family: -apple-system, BlinkMacSystemFont,\\n 'avenir next', avenir,\\n 'helvetica neue', helvetica,\\n ubuntu,\\n roboto, noto,\\n 'segoe ui', arial,\\n sans-serif;\\n font-size: 14px;\\n font-weight: 400;\\n box-shadow: 0 2px 6px -2px rgb(0 0 0 / 10%), 0 0 1px rgb(0 0 0 / 40%);\\n width: 100%;\\n max-width: 512px;\\n color: #222;\\n background: #fff;\\n border-radius: 5px;\\n transition: none;\\n}\\n\\n.kg-nft-card * {\\n position: static;\\n}\\n\\n.kg-nft-metadata {\\n padding: 20px;\\n width: 100%;\\n}\\n\\n.kg-nft-image {\\n border-radius: 5px 5px 0 0;\\n width: 100%;\\n}\\n\\n.kg-nft-header {\\n display: flex;\\n justify-content: space-between;\\n align-items: flex-start;\\n gap: 20px;\\n}\\n\\n.kg-nft-header h4.kg-nft-title {\\n font-family: inherit;\\n font-size: 19px;\\n font-weight: 700;\\n line-height: 1.3em;\\n min-width: unset;\\n max-width: unset;\\n margin: 0;\\n color: #222;\\n}\\n\\n.kg-nft-opensea-logo {\\n margin-top: 2px;\\n width: 100px;\\n object-fit: scale-down;\\n}\\n\\n.kg-nft-creator {\\n font-family: inherit;\\n line-height: 1.4em;\\n margin: 4px 0 0;\\n color: #ababab;\\n}\\n\\n.kg-nft-creator span {\\n font-weight: 500;\\n color: #222;\\n}\\n\\n.kg-nft-card p.kg-nft-description {\\n font-family: inherit;\\n font-size: 14px;\\n line-height: 1.4em;\\n margin: 20px 0 0;\\n color: #222;\\n}\"","export default \".kg-product-card,\\n.kg-product-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-product-card {\\n display: flex;\\n align-items: center;\\n flex-direction: column;\\n width: 100%;\\n}\\n\\n.kg-product-card-container {\\n display: grid;\\n grid-template-columns: auto min-content;\\n align-items: center;\\n grid-row-gap: 16px;\\n background: transparent;\\n max-width: 550px;\\n padding: 20px;\\n width: 100%;\\n background: #fff;\\n color: #222;\\n border-radius: 5px;\\n box-shadow: inset 0 0 0 1px rgb(124 139 154 / 25%);\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Oxygen\\\", \\\"Ubuntu\\\", \\\"Cantarell\\\", \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.kg-product-card-image {\\n grid-column: 1 / 3;\\n justify-self: center;\\n height: auto;\\n}\\n\\n.kg-product-card-title-container {\\n grid-column: 1 / 2;\\n}\\n\\n.kg-product-card h4.kg-product-card-title {\\n text-decoration: none;\\n font-weight: 600;\\n font-size: 21px;\\n margin-top: 0;\\n margin-bottom: 0;\\n line-height: 1.15em;\\n}\\n\\n.kg-product-card-description {\\n grid-column: 1 / 3;\\n}\\n\\n.kg-product-card .kg-product-card-description p,\\n.kg-product-card .kg-product-card-description ol,\\n.kg-product-card .kg-product-card-description ul {\\n font-size: 14px;\\n line-height: 1.5em;\\n opacity: .7;\\n margin-bottom: 0;\\n}\\n\\n.kg-product-card .kg-product-card-description p:first-of-type {\\n margin-top: -4px;\\n}\\n\\n.kg-product-card .kg-product-card-description p:not(:first-of-type),\\n.kg-product-card .kg-product-card-description ul,\\n.kg-product-card .kg-product-card-description ol {\\n margin-top: 0.95em;\\n}\\n\\n.kg-product-card .kg-product-card-description li+li {\\n margin-top: 0.5em;\\n}\\n\\n.kg-product-card-rating {\\n display: flex;\\n align-items: center;\\n grid-column: 2 / 3;\\n align-self: start;\\n justify-self: end;\\n padding-left: 16px;\\n}\\n\\n@media (max-width: 400px) {\\n .kg-product-card-title-container {\\n grid-column: 1 / 3;\\n }\\n\\n .kg-product-card-rating {\\n grid-column: 1 / 3;\\n justify-self: start;\\n margin-top: -15px;\\n padding-left: 0;\\n }\\n}\\n\\n.kg-product-card-rating-star {\\n height: 20px;\\n width: 20px;\\n}\\n\\n.kg-product-card-rating-star svg {\\n width: 16px;\\n height: 16px;\\n fill: currentColor;\\n opacity: 0.15;\\n}\\n\\n.kg-product-card-rating-active.kg-product-card-rating-star svg {\\n opacity: 1;\\n}\\n\\n.kg-product-card a.kg-product-card-button {\\n justify-content: center;\\n grid-column: 1 / 3;\\n display: flex;\\n position: static;\\n align-items: center;\\n font-size: 14px;\\n font-weight: 600;\\n line-height: 1em;\\n text-decoration: none;\\n width: 100%;\\n height: 38px;\\n border-radius: 6px;\\n padding: 0 12px;\\n transition: opacity 0.2s ease-in-out;\\n}\\n\\n.kg-product-card a.kg-product-card-btn-accent {\\n background-color: var(--ghost-accent-color);\\n color: #fff;\\n}\\n\"","export default \".kg-signup-card {\\n position: relative;\\n}\\n\\n.kg-signup-card,\\n.kg-signup-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-signup-card a,\\n.kg-signup-card a span {\\n color: currentColor;\\n}\\n\\n.kg-signup-card.kg-style-accent {\\n background-color: var(--ghost-accent-color);\\n}\\n\\n.kg-layout-split .kg-signup-card-content {\\n display: grid;\\n grid-template-columns: 1fr 1fr;\\n}\\n\\n.kg-signup-card-text {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n justify-content: center;\\n height: 100%;\\n padding: min(4vmax, 80px);\\n background-size: cover;\\n background-position: center;\\n text-align: left;\\n}\\n\\n.kg-width-wide .kg-signup-card-text {\\n padding: min(6.4vmax, 120px);\\n}\\n\\n.kg-width-full .kg-signup-card-text {\\n padding: min(12vmax, 260px) 0;\\n}\\n\\n.kg-layout-split .kg-signup-card-text {\\n padding: min(12vmax, 260px) min(4vmax, 80px);\\n}\\n\\n.kg-layout-split.kg-content-wide .kg-signup-card-text {\\n padding: min(10vmax, 220px) 0 min(10vmax, 220px) min(4vmax, 80px);\\n}\\n\\n.kg-layout-split.kg-content-wide.kg-swapped .kg-signup-card-text {\\n padding: min(10vmax, 220px) min(4vmax, 80px) min(10vmax, 220px) 0;\\n}\\n\\n.kg-swapped .kg-signup-card-text {\\n grid-row: 1;\\n}\\n\\n.kg-signup-card-text.kg-align-center {\\n align-items: center;\\n text-align: center;\\n}\\n\\n.kg-signup-card.kg-style-image h2.kg-signup-card-heading,\\n.kg-signup-card.kg-style-image .kg-signup-card-subheading,\\n.kg-signup-card.kg-style-image .kg-signup-card-button {\\n z-index: 999;\\n}\\n\\n/* Background image */\\n\\n.kg-signup-card > picture > .kg-signup-card-image {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n object-fit: cover;\\n object-position: center;\\n background-color: #FFFFFF;\\n pointer-events: none;\\n}\\n\\n/* Split layout image */\\n\\n.kg-signup-card-content .kg-signup-card-image {\\n width: 100%;\\n /* this will force the image to follow the signup card height */\\n height: 0;\\n min-height: 100%;\\n /**/\\n object-fit: cover;\\n object-position: center;\\n}\\n\\n.kg-content-wide .kg-signup-card-content .kg-signup-card-image {\\n height: 100%;\\n padding: 5.6em 0;\\n object-fit: contain;\\n}\\n\\n/* Heading */\\n\\n.kg-signup-card h2.kg-signup-card-heading {\\n margin: 0;\\n font-size: clamp(1.7em, 4vw, 2.5em);\\n font-weight: 700;\\n line-height: 1.05em;\\n letter-spacing: -0.01em;\\n}\\n\\n.kg-signup-card.kg-width-wide h2.kg-signup-card-heading {\\n font-size: clamp(1.7em, 5vw, 3.3em);\\n}\\n\\n.kg-signup-card.kg-width-full h2.kg-signup-card-heading {\\n font-size: clamp(1.9em, 5.6vw, 4.2em);\\n}\\n\\n.kg-signup-card.kg-width-full.kg-layout-split h2.kg-signup-card-heading {\\n font-size: clamp(1.9em, 4vw, 3.3em);\\n}\\n\\n/* Subheading */\\n\\n.kg-signup-card-subheading {\\n margin: 0 0 2em;\\n}\\n\\n.kg-signup-card .kg-signup-card-subheading {\\n max-width: 40em;\\n margin: 0;\\n font-size: clamp(1.05em, 2vw, 1.4em);\\n font-weight: 500;\\n line-height: 1.2em;\\n}\\n\\n.kg-signup-card h2 + .kg-signup-card-subheading {\\n margin: 0.6em 0 0;\\n}\\n\\n.kg-signup-card .kg-signup-card-subheading strong {\\n font-weight: 600;\\n}\\n\\n.kg-signup-card.kg-width-wide .kg-signup-card-subheading {\\n font-size: clamp(1.05em, 2vw, 1.55em);\\n}\\n\\n.kg-signup-card.kg-width-full .kg-signup-card-subheading:not(.kg-layout-split .kg-signup-card-subheading) {\\n max-width: min(65vmax, 1200px);\\n font-size: clamp(1.05em, 2vw, 1.7em);\\n}\\n\\n.kg-signup-card.kg-width-full.kg-layout-split .kg-signup-card-subheading {\\n font-size: clamp(1.05em, 2vw, 1.55em);\\n}\\n\\n/* Subscribe form */\\n\\n.kg-signup-card-form {\\n position: relative;\\n display: flex;\\n flex-shrink: 0;\\n width: 100%;\\n}\\n\\n.kg-align-center .kg-signup-card-form {\\n justify-content: center;\\n}\\n\\n.kg-signup-card-heading + .kg-signup-card-form,\\n.kg-signup-card-subheading + .kg-signup-card-form {\\n margin: min(2.4vmax, 48px) 0 0;\\n}\\n\\n.kg-width-wide .kg-signup-card-heading + .kg-signup-card-form,\\n.kg-width-wide .kg-signup-card-subheading + .kg-signup-card-form {\\n margin: min(3.2vmax, 64px) 0 0;\\n}\\n\\n.kg-width-full .kg-signup-card-heading + .kg-signup-card-form,\\n.kg-width-full .kg-signup-card-subheading + .kg-signup-card-form {\\n margin: min(4vmax, 80px) 0 0;\\n}\\n\\n.kg-signup-card-fields {\\n display: flex;\\n width: 100%;\\n padding: 3px;\\n background: #FFFFFF;\\n border: 1px solid #E6E6E6;\\n border-radius: 4px;\\n}\\n\\n.kg-width-wide .kg-signup-card-fields,\\n.kg-width-full .kg-signup-card-fields {\\n width: 100%;\\n max-width: 500px;\\n}\\n\\n.kg-signup-card-input {\\n width: 100%;\\n height: 2.9em;\\n min-height: 46px;\\n margin: 0 3px 0 0;\\n padding: 12px 16px;\\n border: none;\\n background: #FFFFFF;\\n font-size: 1.1em;\\n}\\n\\n.kg-signup-card-input:focus,\\n.kg-signup-card-input:focus-visible {\\n outline: none;\\n}\\n\\n.kg-signup-card-button {\\n display: flex;\\n position: relative;\\n align-items: center;\\n height: 2.9em;\\n min-height: 46px;\\n height: 100%;\\n padding: 0 1.2em;\\n outline: none;\\n border: none;\\n font-size: 1em;\\n font-weight: 600;\\n line-height: 1em;\\n text-align: center;\\n text-decoration: none;\\n letter-spacing: .2px;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n border-radius: 3px;\\n transition: opacity .2s ease;\\n cursor: pointer;\\n}\\n\\n.kg-signup-card-button.kg-style-accent {\\n background-color: var(--ghost-accent-color);\\n}\\n\\n.kg-signup-card h2 + .kg-signup-card-button,\\n.kg-signup-card p + .kg-signup-card-button {\\n margin: 1.5em 0 0;\\n}\\n\\n.kg-signup-card .kg-signup-card-button:hover {\\n opacity: 0.85;\\n}\\n\\n.kg-signup-card.kg-width-wide .kg-signup-card-button {\\n font-size: 1.05em;\\n}\\n\\n.kg-signup-card.kg-width-wide h2 + .kg-signup-card-button,\\n.kg-signup-card.kg-width-wide p + .kg-signup-card-button {\\n margin-top: 1.75em;\\n}\\n\\n.kg-signup-card.kg-width-full .kg-signup-card-button {\\n font-size: 1.1em;\\n}\\n\\n.kg-signup-card.kg-width-full h2 + .kg-signup-card-button,\\n.kg-signup-card.kg-width-full p + .kg-signup-card-button {\\n margin-top: 2em;\\n}\\n\\n/* Subscribe form states */\\n\\n.kg-signup-card-success,\\n.kg-signup-card-error {\\n display: none;\\n}\\n\\n.kg-signup-card-form.success .kg-signup-card-fields {\\n display: none;\\n}\\n\\n.kg-signup-card-form.success .kg-signup-card-success {\\n display: flex;\\n align-items: center;\\n height: 3em;\\n font-size: 1.25em;\\n font-weight: 500;\\n line-height: 1.4em;\\n}\\n\\n.kg-signup-card-form.error .kg-signup-card-fields {\\n border: 1px solid #FF0000;\\n box-shadow: inset 0 0 0 1px rgba(255, 0, 0, 0.2);\\n}\\n\\n.kg-signup-card-form.error .kg-signup-card-error {\\n position: absolute;\\n bottom: calc(-1rem - 1.6em);\\n display: block;\\n font-size: inherit;\\n}\\n\\n.kg-signup-card-button-loading {\\n position: absolute;\\n inset: 0;\\n align-items: center;\\n justify-content: center;\\n display: none;\\n}\\n\\n.kg-signup-card-form.loading .kg-signup-card-button-default {\\n color: transparent;\\n}\\n\\n.kg-signup-card-form.loading .kg-signup-card-button-loading {\\n display: flex;\\n}\\n\\n/* Disclaimer */\\n\\n.kg-signup-card-disclaimer {\\n margin: 1rem 0 0;\\n}\\n\\n.kg-signup-card-form.success + .kg-signup-card-disclaimer,\\n.kg-signup-card-form.error + .kg-signup-card-disclaimer {\\n visibility: hidden;\\n}\\n\\n\\n/* Responsive styles */\\n\\n@media (max-width: 640px) {\\n .kg-layout-split .kg-signup-card-content {\\n grid-template-columns: 1fr;\\n }\\n\\n .kg-width-wide .kg-signup-card-text {\\n padding: min(6.4vmax, 120px) min(4vmax, 80px);\\n }\\n\\n .kg-layout-split.kg-content-wide .kg-signup-card-text,\\n .kg-layout-split.kg-content-wide.kg-swapped .kg-signup-card-text {\\n padding: min(9.6vmax, 180px) 0;\\n }\\n\\n .kg-signup-card.kg-width-full .kg-signup-card-subheading:not(.kg-layout-split .kg-signup-card-subheading) {\\n max-width: unset;\\n }\\n\\n .kg-signup-card-content .kg-signup-card-image:not(.kg-content-wide .kg-signup-card-content .kg-signup-card-image) {\\n height: auto;\\n min-height: unset;\\n aspect-ratio: 1 / 1;\\n }\\n\\n .kg-content-wide .kg-signup-card-content .kg-signup-card-image {\\n padding: 1.7em 0 0;\\n }\\n\\n .kg-content-wide.kg-swapped .kg-signup-card-content .kg-signup-card-image {\\n padding: 0 0 1.7em;\\n }\\n\\n .kg-signup-card-input {\\n height: 2.9em;\\n padding: 6px 12px;\\n font-size: 1em;\\n }\\n\\n .kg-signup-card-button {\\n height: 2.9em;\\n }\\n\\n .kg-signup-card.kg-width-wide .kg-signup-card-button,\\n .kg-signup-card.kg-width-full .kg-signup-card-button {\\n font-size: 1em;\\n }\\n}\\n\"","export default \".kg-toggle-card,\\n.kg-toggle-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-toggle-card {\\n background: transparent;\\n box-shadow: inset 0 0 0 1px rgba(124, 139, 154, 0.25);\\n border-radius: 4px;\\n padding: 1.2em;\\n}\\n\\n.kg-toggle-card[data-kg-toggle-state=\\\"close\\\"] .kg-toggle-content{\\n height: 0;\\n overflow: hidden;\\n transition: opacity .5s ease, top .35s ease;\\n opacity: 0;\\n top: -0.5em;\\n position: relative;\\n}\\n\\n.kg-toggle-content {\\n height: auto;\\n opacity: 1;\\n transition: opacity 1s ease, top .35s ease;\\n top: 0;\\n position: relative;\\n}\\n\\n.kg-toggle-card[data-kg-toggle-state=\\\"close\\\"] svg {\\n transform: unset;\\n}\\n\\n.kg-toggle-heading {\\n cursor: pointer;\\n display: flex;\\n justify-content: space-between;\\n align-items: flex-start;\\n}\\n\\n.kg-toggle-card h4.kg-toggle-heading-text {\\n font-size: 1.15em;\\n font-weight: 700;\\n line-height: 1.3em;\\n margin-top: 0;\\n margin-bottom: 0;\\n}\\n\\n.kg-toggle-content p:first-of-type {\\n margin-top: 0.5em;\\n}\\n\\n.kg-toggle-card .kg-toggle-content p,\\n.kg-toggle-card .kg-toggle-content ol,\\n.kg-toggle-card .kg-toggle-content ul {\\n font-size: 0.95em;\\n line-height: 1.5em;\\n margin-top: 0.95em;\\n margin-bottom: 0;\\n}\\n\\n.kg-toggle-card li + li {\\n margin-top: 0.5em;\\n}\\n\\n.kg-toggle-card-icon {\\n height: 24px;\\n width: 24px;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n margin-left: 1em;\\n padding: 0;\\n background: none;\\n border: 0;\\n cursor: pointer;\\n}\\n\\n.kg-toggle-heading svg {\\n width: 14px;\\n color: rgba(124, 139, 154, 0.5);\\n transition: all 0.3s;\\n transform: rotate(-180deg);\\n}\\n\\n.kg-toggle-heading path {\\n fill: none;\\n stroke: currentcolor;\\n stroke-linecap: round;\\n stroke-linejoin: round;\\n stroke-width: 1.5;\\n fill-rule: evenodd;\\n}\\n\\n.kg-toggle-card + .kg-toggle-card {\\n margin-top: 1em;\\n}\\n\"","export default \".kg-video-card,\\n.kg-video-card * {\\n box-sizing: border-box;\\n}\\n\\n.kg-video-card {\\n position: relative;\\n --seek-before-width: 0%;\\n --volume-before-width: 100%;\\n --buffered-width: 0%;\\n}\\n\\n.kg-video-card video {\\n display: block;\\n max-width: 100%;\\n height: auto;\\n}\\n\\n.kg-video-container {\\n position: relative;\\n height: 0;\\n width: 100%;\\n overflow: hidden;\\n}\\n\\n.kg-video-container video {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n object-fit: cover;\\n}\\n\\n.kg-video-overlay {\\n position: absolute;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n background-image: linear-gradient(180deg,rgba(0,0,0,0.3) 0,transparent 70%,transparent 100%);\\n z-index: 999;\\n transition: opacity .2s ease-in-out;\\n}\\n\\n.kg-video-large-play-icon {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n width: 72px;\\n height: 72px;\\n padding: 0;\\n background: rgba(0, 0, 0, 0.5);\\n border-radius: 50%;\\n transition: opacity .2s ease-in-out;\\n}\\n\\n.kg-video-large-play-icon svg {\\n width: 20px;\\n height: auto;\\n margin-left: 2px;\\n fill: #fff;\\n}\\n\\n.kg-video-player-container {\\n position: absolute;\\n bottom: -1px;\\n left: 0;\\n right: 0;\\n width: 100%;\\n height: 80px;\\n background: linear-gradient(rgba(0,0,0,0), rgba(0,0,0,.5));\\n z-index: 999;\\n transition: opacity .2s ease-in-out;\\n}\\n\\n.kg-video-player {\\n position: absolute;\\n bottom: 0;\\n display: flex;\\n align-items: center;\\n width: 100%;\\n z-index: 9999;\\n padding: 12px 16px;\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Oxygen\\\", \\\"Ubuntu\\\", \\\"Cantarell\\\", \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", sans-serif;\\n}\\n\\n.kg-video-current-time {\\n min-width: 38px;\\n padding: 0 4px;\\n color: #fff;\\n font-family: inherit;\\n font-size: 12.5px;\\n font-weight: 500;\\n line-height: 1.4em;\\n white-space: nowrap;\\n}\\n\\n.kg-video-time {\\n color: rgba(255, 255, 255, 0.6);\\n font-family: inherit;\\n font-size: 12.5px;\\n font-weight: 500;\\n line-height: 1.4em;\\n white-space: nowrap;\\n}\\n\\n.kg-video-duration {\\n padding: 0 4px;\\n}\\n\\n.kg-video-play-icon,\\n.kg-video-pause-icon {\\n position: relative;\\n padding: 0px 4px 0 0;\\n font-size: 0;\\n background: transparent;\\n}\\n\\n.kg-video-hide {\\n display: none !important;\\n}\\n\\n.kg-video-hide-animated {\\n opacity: 0 !important;\\n transition: opacity .2s ease-in-out;\\n cursor: initial;\\n}\\n\\n.kg-video-play-icon svg,\\n.kg-video-pause-icon svg {\\n width: 14px;\\n height: 14px;\\n fill: #fff;\\n}\\n\\n.kg-video-seek-slider {\\n flex-grow: 1;\\n margin: 0 4px;\\n}\\n\\n@media (max-width: 520px) {\\n .kg-video-seek-slider {\\n display: none;\\n }\\n}\\n\\n.kg-video-playback-rate {\\n min-width: 37px;\\n padding: 0 4px;\\n color: #fff;\\n font-family: inherit;\\n font-size: 12.5px;\\n font-weight: 600;\\n line-height: 1.4em;\\n text-align: left;\\n background: transparent;\\n white-space: nowrap;\\n}\\n\\n@media (max-width: 520px) {\\n .kg-video-playback-rate {\\n padding-left: 8px;\\n }\\n}\\n\\n.kg-video-mute-icon,\\n.kg-video-unmute-icon {\\n position: relative;\\n bottom: -1px;\\n padding: 0 4px;\\n font-size: 0;\\n background: transparent;\\n}\\n\\n@media (max-width: 520px) {\\n .kg-video-mute-icon,\\n .kg-video-unmute-icon {\\n margin-left: auto;\\n }\\n}\\n\\n.kg-video-mute-icon svg,\\n.kg-video-unmute-icon svg {\\n width: 16px;\\n height: 16px;\\n fill: #fff;\\n}\\n\\n.kg-video-volume-slider {\\n width: 80px;\\n}\\n\\n@media (max-width: 300px) {\\n .kg-video-volume-slider {\\n display: none;\\n }\\n}\\n\\n.kg-video-seek-slider::before {\\n content: \\\"\\\";\\n position: absolute;\\n left: 0;\\n width: var(--seek-before-width) !important;\\n height: 4px;\\n cursor: pointer;\\n background-color: #EBEEF0;\\n border-radius: 2px;\\n}\\n\\n.kg-video-volume-slider::before {\\n content: \\\"\\\";\\n position: absolute;\\n left: 0;\\n width: var(--volume-before-width) !important;\\n height: 4px;\\n cursor: pointer;\\n background-color: #EBEEF0;\\n border-radius: 2px;\\n}\\n\\n/* Resetting browser styles\\n/* --------------------------------------------------------------- */\\n\\n.kg-video-card input[type=range] {\\n position: relative;\\n -webkit-appearance: none;\\n background: transparent;\\n}\\n\\n.kg-video-card input[type=range]:focus {\\n outline: none;\\n}\\n\\n.kg-video-card input[type=range]::-webkit-slider-thumb {\\n -webkit-appearance: none;\\n}\\n\\n.kg-video-card input[type=range]::-ms-track {\\n cursor: pointer;\\n border-color: transparent;\\n color: transparent;\\n background: transparent;\\n}\\n\\n.kg-video-card button {\\n display: flex;\\n align-items: center;\\n border: 0;\\n cursor: pointer;\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"] {\\n height: auto;\\n padding: 0;\\n border: 0;\\n}\\n\\n/* Chrome & Safari styles\\n/* --------------------------------------------------------------- */\\n\\n.kg-video-card input[type=\\\"range\\\"]::-webkit-slider-runnable-track {\\n width: 100%;\\n height: 4px;\\n cursor: pointer;\\n background: rgba(255, 255, 255, 0.2);\\n border-radius: 2px;\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"]::-webkit-slider-thumb {\\n position: relative;\\n box-sizing: content-box;\\n width: 13px;\\n height: 13px;\\n margin: -5px 0 0 0;\\n border: 0;\\n cursor: pointer;\\n background: #fff;\\n border-radius: 50%;\\n box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"]:active::-webkit-slider-thumb {\\n transform: scale(1.2);\\n}\\n\\n/* Firefox styles\\n/* --------------------------------------------------------------- */\\n\\n.kg-video-card input[type=\\\"range\\\"]::-moz-range-track {\\n width: 100%;\\n height: 4px;\\n cursor: pointer;\\n background: rgba(255, 255, 255, 0.2);\\n border-radius: 2px;\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"]::-moz-range-progress {\\n background: #EBEEF0;\\n border-radius: 2px;\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"]::-moz-range-thumb {\\n box-sizing: content-box;\\n width: 13px;\\n height: 13px;\\n border: 0;\\n cursor: pointer;\\n background: #fff;\\n border-radius: 50%;\\n box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"]:active::-moz-range-thumb {\\n transform: scale(1.2);\\n}\\n\\n/* Edge & IE styles\\n/* --------------------------------------------------------------- */\\n\\n.kg-video-card input[type=\\\"range\\\"]::-ms-track {\\n width: 100%;\\n height: 3px;\\n border: solid transparent;\\n color: transparent;\\n cursor: pointer;\\n background: transparent;\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"]::-ms-fill-lower {\\n background: #fff;\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"]::-ms-fill-upper {\\n background: #EBEEF0;\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"]::-ms-thumb {\\n box-sizing: content-box;\\n width: 13px;\\n height: 13px;\\n border: 0;\\n cursor: pointer;\\n background: #fff;\\n border-radius: 50%;\\n box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);\\n}\\n\\n.kg-video-card input[type=\\\"range\\\"]:active::-ms-thumb {\\n transform: scale(1.2);\\n}\\n\\n\"","const jsModules = import.meta.glob('@ghost-cards/js/*.js', {query: 'raw', eager: true}) as Record<string, {default: string}>;\nconst cssModules = import.meta.glob('@ghost-cards/css/*.css', {query: 'raw', eager: true}) as Record<string, {default: string}>;\n\nexport const cardsJS = Object.values(jsModules)\n .map(module => module.default)\n .join('\\n\\n');\n\nexport const cardsCSS = Object.values(cssModules)\n .map(module => module.default)\n .join('\\n\\n');\n","import Customizer, {COLOR_OPTIONS, type ColorOption, type FontSize, useCustomizerSettings} from './customizer';\nimport React, {useCallback, useEffect, useRef, useState} from 'react';\nimport ShowRepliesButton from '@src/components/global/show-replies-button';\nimport getUsername from '../../../utils/get-username';\nimport {LoadingIndicator, Skeleton} from '@tryghost/shade';\n\nimport {renderTimestamp} from '../../../utils/render-timestamp';\nimport {useReplyChainData} from '@hooks/use-reply-chain-data';\n\nimport APAvatar from '@src/components/global/ap-avatar';\nimport APReplyBox from '@src/components/global/ap-reply-box';\nimport BackButton from '@src/components/global/back-button';\nimport DeletedFeedItem from '@src/components/feed/deleted-feed-item';\nimport FeedItem from '@src/components/feed/feed-item';\nimport FeedItemStats from '@src/components/feed/feed-item-stats';\nimport FollowButton from '@src/components/global/follow-button';\nimport ProfilePreviewHoverCard from '@components/global/profile-preview-hover-card';\nimport TableOfContents, {TOCItem} from '@src/components/feed/table-of-contents';\nimport articleBodyStyles from '@src/components/article-body-styles';\nimport getReadingTime from '../../../utils/get-reading-time';\nimport {Activity} from '@src/api/activitypub';\nimport {cardsCSS, cardsJS} from '@src/utils/cards-assets';\nimport {handleProfileClick} from '@src/utils/handle-profile-click';\nimport {isPendingActivity} from '../../../utils/pending-activity';\nimport {openLinksInNewTab} from '@src/utils/content-formatters';\nimport {useDebounce} from 'use-debounce';\nimport {useNavigateWithBasePath} from '@src/hooks/use-navigate-with-base-path';\n\ninterface IframeWindow extends Window {\n resizeIframe?: () => void;\n}\n\nconst ArticleBody: React.FC<{\n postUrl?: string;\n heading: string;\n image: string|undefined;\n excerpt: string|undefined;\n authors: Array<{\n name: string;\n profile_image: string;\n }>;\n html: string;\n backgroundColor: ColorOption;\n fontSize: FontSize;\n fontStyle: string;\n onHeadingsExtracted?: (headings: TOCItem[]) => void;\n onIframeLoad?: (iframe: HTMLIFrameElement) => void;\n onLoadingChange?: (isLoading: boolean) => void;\n isPopoverOpen: boolean;\n}> = ({\n postUrl,\n heading,\n image,\n excerpt,\n authors,\n html,\n backgroundColor,\n fontSize,\n fontStyle,\n onHeadingsExtracted,\n onIframeLoad,\n onLoadingChange,\n isPopoverOpen\n}) => {\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [iframeHeight, setIframeHeight] = useState('0px');\n const darkMode = (document.documentElement.classList.contains('dark') && backgroundColor === 'SYSTEM') || backgroundColor === 'DARK';\n\n const cssContent = articleBodyStyles();\n\n const htmlContent = `\n <html class=\"has-${!darkMode ? 'dark' : 'light'}-text has-${fontStyle}-body ${backgroundColor === 'SEPIA' && 'has-sepia-bg'}\">\n <head>\n ${cssContent}\n <style>\n :root {\n --font-size: ${fontSize};\n }\n body {\n margin: 0;\n padding: 0;\n overflow-y: hidden;\n }\n .has-sepia-bg {\n --background-color: #FCF8F1;\n }\n </style>\n <style>\n ${cardsCSS}\n </style>\n\n <script>\n function resizeIframe() {\n const height = document.body.scrollHeight;\n window.parent.postMessage({\n type: 'resize',\n bodyHeight: height,\n isLoaded: true\n }, '*');\n }\n\n // Initialize resize observers\n function setupResizeObservers() {\n // ResizeObserver for overall size changes\n const resizeObserver = new ResizeObserver(() => {\n resizeIframe();\n });\n resizeObserver.observe(document.body);\n\n // MutationObserver for DOM changes\n const mutationObserver = new MutationObserver(() => {\n resizeIframe();\n });\n mutationObserver.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true\n });\n\n // Handle window resize\n window.addEventListener('resize', resizeIframe);\n\n // Initial resize\n resizeIframe();\n\n // Clean up function\n return () => {\n resizeObserver.disconnect();\n mutationObserver.disconnect();\n window.removeEventListener('resize', resizeIframe);\n };\n }\n\n // Wait for images to load\n function waitForImages() {\n const images = document.getElementsByTagName('img');\n Promise.all(Array.from(images).map(img => {\n if (img.complete) return Promise.resolve();\n return new Promise(resolve => {\n img.onload = resolve;\n img.onerror = resolve;\n });\n })).then(resizeIframe);\n }\n\n // Handle external resize triggers\n window.addEventListener('message', (event) => {\n if (event.data.type === 'triggerResize') {\n resizeIframe();\n }\n });\n\n // Initialize everything once DOM is ready\n document.addEventListener('DOMContentLoaded', () => {\n setupResizeObservers();\n waitForImages();\n });\n </script>\n\n <!-- Reframe.js — a plugin that makes iframes and videos responsive -->\n <script>!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).reframe=t()}(this,function(){\"use strict\";function t(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;for(var i=Array(e),o=0,t=0;t<n;t++)for(var r=arguments[t],f=0,d=r.length;f<d;f++,o++)i[o]=r[f];return i}return function(e,s){return void 0===s&&(s=\"js-reframe\"),(\"string\"==typeof e?t(document.querySelectorAll(e)):\"length\"in e?t(e):[e]).forEach(function(e){var t,n,i,o,r,f,d,l;-1!==e.className.split(\" \").indexOf(s)||-1<e.style.width.indexOf(\"%\")||(i=e.getAttribute(\"height\")||e.offsetHeight,o=e.getAttribute(\"width\")||e.offsetWidth,r=(\"string\"==typeof i?parseInt(i):i)/(\"string\"==typeof o?parseInt(o):o)*100,(f=document.createElement(\"div\")).className=s,(d=f.style).position=\"relative\",d.width=\"100%\",d.paddingTop=r+\"%\",(l=e.style).position=\"absolute\",l.width=\"100%\",l.height=\"100%\",l.left=\"0\",l.top=\"0\",null!==(t=e.parentNode)&&void 0!==t&&t.insertBefore(f,e),null!==(n=e.parentNode)&&void 0!==n&&n.removeChild(e),f.appendChild(e))})}});</script>\n </head>\n <body>\n <header class='gh-article-header gh-canvas'>\n <h1 class='gh-article-title is-title' data-test-article-heading>${heading}</h1>\n ${excerpt ? `<p class='gh-article-excerpt'>${excerpt}</p>` : ''}\n <a href=\"${postUrl}\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"gh-article-meta\">\n ${authors && authors.length > 0 ? `\n <div class=\"gh-article-author-image\">\n ${authors.map(author => `\n <span>\n ${author.profile_image\n ? `<img src=\"${author.profile_image}\" alt=\"${author.name}\">`\n : `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\"><path d=\"M6.75 6a5.25 5.25 0 1 0 10.5 0 5.25 5.25 0 1 0 -10.5 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"M2.25 23.25a9.75 9.75 0 0 1 19.5 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path></svg>`\n}\n </span>\n `).join('')}\n </div>\n ` : ''}\n <div class=\"gh-article-meta-wrapper\">\n ${authors && authors.length > 0 ? `\n <span class=\"gh-article-author-name\">\n ${authors.length > 1 ? `${authors[0].name} and ${authors.length - 1} ${authors.length - 1 === 1 ? 'other' : 'others'}` : authors[0].name}\n </span>\n ` : ''}\n <span class=\"gh-article-source\">${postUrl ? new URL(postUrl).hostname : ''} <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-external-link-icon lucide-external-link\"><path d=\"M15 3h6v6\"/><path d=\"M10 14 21 3\"/><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/></svg></span>\n </div>\n </a>\n ${image ? `\n <figure class='gh-article-image'>\n <img src='${image}' alt='${heading}' />\n </figure>\n ` : ''}\n </header>\n <div class='gh-content gh-canvas is-body'>\n ${openLinksInNewTab(html)}\n </div>\n <script>\n (function () {\n const sources = [\n '.gh-content iframe[src*=\"youtube.com\"]',\n '.gh-content iframe[src*=\"youtube-nocookie.com\"]',\n '.gh-content iframe[src*=\"player.vimeo.com\"]',\n '.gh-content iframe[src*=\"kickstarter.com\"][src*=\"video.html\"]',\n '.gh-content object',\n '.gh-content embed',\n ];\n reframe(document.querySelectorAll(sources.join(',')));\n })();\n </script>\n <script>\n ${cardsJS}\n </script>\n </body>\n </html>\n `;\n\n useEffect(() => {\n const iframe = iframeRef.current;\n if (!iframe) {\n return;\n }\n\n if (!iframe.srcdoc) {\n iframe.srcdoc = htmlContent;\n }\n\n const handleMessage = (event: MessageEvent) => {\n if (event.data.type === 'resize') {\n const newHeight = `${event.data.bodyHeight + 24}px`;\n setIframeHeight(newHeight);\n iframe.style.height = newHeight;\n\n if (event.data.isLoaded) {\n setIsLoading(false);\n }\n }\n };\n\n // Add event listener for Escape key in iframe\n const handleIframeKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n // Prevent default and stop propagation of the original event\n event.preventDefault();\n event.stopPropagation();\n\n // Create and dispatch a new keyboard event to the parent window\n const newEvent = new KeyboardEvent('keydown', {\n key: 'Escape',\n code: 'Escape',\n keyCode: 27,\n which: 27,\n bubbles: true,\n cancelable: true\n });\n document.dispatchEvent(newEvent);\n }\n };\n\n // Wait for iframe to load before adding event listener\n const handleIframeLoad = () => {\n const iframeWindow = iframe.contentWindow;\n if (iframeWindow) {\n iframeWindow.addEventListener('keydown', handleIframeKeyDown);\n }\n };\n\n iframe.addEventListener('load', handleIframeLoad);\n window.addEventListener('message', handleMessage);\n\n return () => {\n window.removeEventListener('message', handleMessage);\n iframe.removeEventListener('load', handleIframeLoad);\n const iframeWindow = iframe.contentWindow;\n if (iframeWindow) {\n iframeWindow.removeEventListener('keydown', handleIframeKeyDown);\n }\n };\n }, [htmlContent]);\n\n // Separate effect for style updates\n useEffect(() => {\n const iframe = iframeRef.current;\n if (!iframe) {\n return;\n }\n\n const iframeDocument = iframe.contentDocument || iframe.contentWindow?.document;\n if (!iframeDocument) {\n return;\n }\n\n const root = iframeDocument.documentElement;\n root.style.setProperty('--font-size', fontSize);\n root.classList.remove('has-sans-body', 'has-serif-body');\n root.classList.add(`has-${fontStyle}-body`);\n root.classList.remove('has-dark-text', 'has-light-text');\n root.classList.add(`has-${!darkMode ? 'dark' : 'light'}-text`);\n if (backgroundColor === 'SEPIA') {\n root.classList.add('has-sepia-bg');\n } else {\n root.classList.remove('has-sepia-bg');\n }\n\n const iframeWindow = iframe.contentWindow as IframeWindow;\n if (iframeWindow && typeof iframeWindow.resizeIframe === 'function') {\n iframeWindow.resizeIframe();\n } else {\n const resizeEvent = new Event('resize');\n iframeDocument.dispatchEvent(resizeEvent);\n }\n }, [fontSize, fontStyle, backgroundColor, darkMode]);\n\n useEffect(() => {\n const iframe = iframeRef.current;\n if (!iframe) {\n return;\n }\n\n const handleLoad = () => {\n if (!iframe.contentDocument) {\n return;\n }\n\n // Get all headings except the article title\n const headingElements = Array.from(\n iframe.contentDocument.querySelectorAll('.gh-content > :is(h2, h3, h4, h5, h6)[id]')\n );\n\n if (headingElements.length === 0) {\n return;\n }\n\n // Find the highest level (smallest number) heading\n const highestLevel = Math.min(\n ...headingElements.map(el => parseInt(el.tagName[1]))\n );\n\n // Map headings and normalize their levels\n const headings = headingElements.map((el, idx) => {\n const id = `heading-${idx}`;\n el.id = id;\n\n // Calculate normalized level (e.g., if highest is h3, then h3->h1, h4->h2)\n const actualLevel = parseInt(el.tagName[1]);\n const normalizedLevel = actualLevel - highestLevel + 1;\n\n return {\n id,\n text: el.textContent || '',\n level: normalizedLevel,\n element: el as HTMLElement\n };\n });\n\n onHeadingsExtracted?.(headings);\n onIframeLoad?.(iframe);\n };\n\n iframe.addEventListener('load', handleLoad);\n return () => iframe.removeEventListener('load', handleLoad);\n }, [onHeadingsExtracted, onIframeLoad]);\n\n // Update parent when loading state changes\n useEffect(() => {\n onLoadingChange?.(isLoading);\n }, [isLoading, onLoadingChange]);\n\n return (\n <div className='w-full pb-6'>\n <div className='relative -mx-6'>\n {isLoading && (\n <div className='mx-auto mt-6 w-full max-w-[640px] max-lg:px-4'>\n <div className='mb-6 flex flex-col gap-2'>\n <Skeleton className='h-8' />\n <Skeleton className='h-8 w-full max-w-md' />\n </div>\n <Skeleton className='mt-2 h-4' count={4} randomize={true} />\n <Skeleton className='mt-8 h-[400px]' />\n <Skeleton className='mt-2 h-4' containerClassName='block mt-7 mb-4' count={8} randomize={true} />\n </div>\n )}\n <iframe\n ref={iframeRef}\n id='gh-ap-article-iframe'\n style={{\n width: '100%',\n border: 'none',\n height: iframeHeight,\n overflow: 'hidden',\n opacity: isLoading ? 0 : 1,\n transition: 'opacity 0.2s ease-in-out',\n pointerEvents: isPopoverOpen ? 'none' : 'auto'\n }}\n title='Embedded Content'\n />\n </div>\n </div>\n );\n};\n\nconst FeedItemDivider: React.FC = () => (\n <div className=\"h-px bg-black/[8%] dark:bg-gray-950\"></div>\n);\n\ninterface ReaderProps {\n postId: string;\n onClose?: () => void;\n}\n\nconst scrollPositionCache = new Map<string, number>();\n\nexport const Reader: React.FC<ReaderProps> = ({\n postId = null,\n onClose\n}) => {\n const {\n backgroundColor,\n currentFontSizeIndex,\n fontStyle,\n fontSize,\n handleColorChange,\n setFontStyle,\n increaseFontSize,\n decreaseFontSize,\n resetFontSize\n } = useCustomizerSettings();\n const modalRef = useRef<HTMLElement>(null);\n const [isCustomizerOpen, setIsCustomizerOpen] = useState(false);\n const [isTOCOpen, setIsTOCOpen] = useState(false);\n\n const [expandedChains, setExpandedChains] = useState<Set<string>>(new Set());\n const [fullyExpandedChains, setFullyExpandedChains] = useState<Set<string>>(new Set());\n const [loadingChains, setLoadingChains] = useState<Set<string>>(new Set());\n const [isLoadingMoreTopLevelReplies, setIsLoadingMoreTopLevelReplies] = useState(false);\n const observerRef = useRef<IntersectionObserver | null>(null);\n const loadMoreRef = useRef<HTMLDivElement | null>(null);\n\n const {\n post: currentPost,\n processedReplies,\n isLoading: isLoadingContent,\n loadMoreChildren,\n loadMoreChildReplies,\n hasMoreChildren,\n hasMoreChildReplies\n } = useReplyChainData(postId ?? '', {includeAncestors: false});\n\n const activityData = currentPost;\n const object = activityData?.object;\n const actor = activityData?.actor;\n const authors = activityData?.object?.metadata?.ghostAuthors;\n\n const replyCount = object?.replyCount ?? 0;\n\n useEffect(() => {\n // Only set up infinite scroll if pagination is supported\n if (!hasMoreChildren) {\n return;\n }\n\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n\n const container = modalRef.current;\n if (!container) {\n return;\n }\n\n observerRef.current = new IntersectionObserver(async (entries) => {\n if (entries[0].isIntersecting && hasMoreChildren && !isLoadingMoreTopLevelReplies) {\n setIsLoadingMoreTopLevelReplies(true);\n try {\n await loadMoreChildren();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Failed to load more top-level replies:', error);\n } finally {\n setIsLoadingMoreTopLevelReplies(false);\n }\n }\n }, {\n root: container,\n rootMargin: '200px'\n });\n\n if (loadMoreRef.current) {\n observerRef.current.observe(loadMoreRef.current);\n }\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n };\n }, [hasMoreChildren, isLoadingMoreTopLevelReplies, loadMoreChildren]);\n\n function handleDelete() {\n // Reply count will be updated via cache invalidation\n }\n\n function toggleChain(chainId: string) {\n setExpandedChains((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(chainId)) {\n newSet.delete(chainId);\n } else {\n newSet.add(chainId);\n setFullyExpandedChains((fullyExpanded) => {\n const newFullyExpanded = new Set(fullyExpanded);\n newFullyExpanded.add(chainId);\n return newFullyExpanded;\n });\n }\n return newSet;\n });\n }\n\n async function loadMoreForChain(chainId: string, childIndex: number) {\n if (loadingChains.has(chainId)) {\n return;\n }\n\n setLoadingChains(prev => new Set(prev).add(chainId));\n\n try {\n if (loadMoreChildReplies) {\n await loadMoreChildReplies(childIndex);\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Failed to load more replies for chain:', error);\n } finally {\n setLoadingChains((prev) => {\n const newSet = new Set(prev);\n newSet.delete(chainId);\n return newSet;\n });\n }\n }\n\n const onLikeClick = () => {\n // Do API req or smth\n // Don't need to know about setting timeouts or anything like that\n };\n\n const repliesRef = useRef<HTMLDivElement>(null);\n\n const currentMaxWidth = '904px';\n const currentGridWidth = '640px';\n\n const [readingProgress, setReadingProgress] = useState(0);\n const [isLoading, setIsLoading] = useState(true);\n\n // Add debounced version of setReadingProgress\n const [debouncedSetReadingProgress] = useDebounce(setReadingProgress, 100);\n\n const PROGRESS_INCREMENT = 1;\n\n useEffect(() => {\n const container = modalRef.current;\n const article = document.getElementById('object-content');\n\n const handleScroll = () => {\n if (isLoading) {\n return;\n }\n\n if (!container || !article) {\n return;\n }\n\n const articleRect = article.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n\n const isContentShorterThanViewport = articleRect.height <= containerRect.height;\n\n if (isContentShorterThanViewport) {\n debouncedSetReadingProgress(100);\n return;\n }\n\n const scrolledPast = Math.max(0, containerRect.top - articleRect.top);\n const totalHeight = (article as HTMLElement).offsetHeight - (container as HTMLElement).offsetHeight;\n\n const rawProgress = Math.min(Math.max((scrolledPast / totalHeight) * 100, 0), 100);\n const progress = Math.round(rawProgress / PROGRESS_INCREMENT) * PROGRESS_INCREMENT;\n\n debouncedSetReadingProgress(progress);\n };\n\n if (isLoading) {\n return;\n }\n\n const observer = new MutationObserver(handleScroll);\n if (article) {\n observer.observe(article, {\n childList: true,\n subtree: true,\n characterData: true\n });\n }\n\n container?.addEventListener('scroll', handleScroll);\n handleScroll();\n\n return () => {\n container?.removeEventListener('scroll', handleScroll);\n observer.disconnect();\n };\n }, [isLoading, debouncedSetReadingProgress]);\n\n const [tocItems, setTocItems] = useState<TOCItem[]>([]);\n const [activeHeadingId, setActiveHeadingId] = useState<string | null>(null);\n const [iframeElement, setIframeElement] = useState<HTMLIFrameElement | null>(null);\n\n const handleHeadingsExtracted = useCallback((headings: TOCItem[]) => {\n setTocItems(headings);\n }, []);\n\n const handleIframeLoad = useCallback((iframe: HTMLIFrameElement) => {\n setIframeElement(iframe);\n }, []);\n\n useEffect(() => {\n if (!iframeElement?.contentDocument || !tocItems.length) {\n return;\n }\n\n const setupObserver = () => {\n const container = modalRef.current;\n if (!container) {\n return;\n }\n\n const handleScroll = () => {\n const doc = iframeElement.contentDocument;\n if (!doc || !doc.documentElement) {\n return;\n }\n\n const scrollTop = container.scrollTop;\n\n const headings = tocItems\n .map(item => doc.getElementById(item.id))\n .filter((el): el is HTMLElement => el !== null)\n .map(el => ({\n element: el,\n id: el.id,\n top: el.offsetTop\n }));\n\n if (!headings.length) {\n return;\n }\n\n const buffer = 100;\n\n let activeHeading = null;\n\n for (const heading of headings) {\n if (heading.top - buffer <= scrollTop) {\n activeHeading = heading;\n } else {\n break;\n }\n }\n\n setActiveHeadingId(activeHeading?.id || null);\n };\n\n container.addEventListener('scroll', handleScroll);\n handleScroll();\n\n return () => {\n container.removeEventListener('scroll', handleScroll);\n };\n };\n\n const timeoutId = setTimeout(setupObserver, 100);\n return () => clearTimeout(timeoutId);\n }, [iframeElement, tocItems, activeHeadingId]);\n\n const navigate = useNavigateWithBasePath();\n\n // Save scroll position when navigating away\n useEffect(() => {\n const container = modalRef.current;\n return () => {\n if (container && postId) {\n scrollPositionCache.set(postId, container.scrollTop);\n }\n };\n }, [postId]);\n\n // Restore scroll position after content loads\n useEffect(() => {\n if (!isLoading && !isLoadingContent && postId && modalRef.current) {\n const savedPosition = scrollPositionCache.get(postId);\n if (savedPosition !== undefined && savedPosition > 0) {\n setTimeout(() => {\n if (modalRef.current) {\n modalRef.current.scrollTop = savedPosition;\n }\n }, 100);\n }\n }\n }, [isLoading, isLoadingContent, postId]);\n\n if (isLoadingContent) {\n return (\n <div className={`max-h-full overflow-auto rounded-md ${backgroundColor === 'DARK' && 'dark'} ${(backgroundColor === 'LIGHT' || backgroundColor === 'SEPIA') && 'light'} ${COLOR_OPTIONS[backgroundColor].background}`}>\n <div className='flex h-full flex-col'>\n <div className='relative flex-1'>\n <div className={`sticky top-0 z-50 flex h-[102px] items-center justify-center rounded-t-md border-b max-md:h-[68px] ${COLOR_OPTIONS[backgroundColor].background} ${COLOR_OPTIONS[backgroundColor].border}`}>\n <div\n className='grid w-full px-8 max-lg:px-4'\n style={{\n gridTemplateColumns: `1fr minmax(0,${currentGridWidth}) 1fr`\n }}\n >\n <div className='flex items-center'>\n <BackButton className={COLOR_OPTIONS[backgroundColor].button} onClick={onClose} />\n </div>\n <div className='col-[2/3] mx-auto flex w-full items-center gap-3 max-md:hidden'>\n <Skeleton className='size-10 rounded-full' />\n <div className='grow pt-1'>\n <Skeleton className='w-full' />\n <Skeleton className='w-2/3' />\n </div>\n </div>\n <div className='col-[3/4] flex items-center justify-end gap-2'>\n <Customizer\n backgroundColor={backgroundColor}\n currentFontSizeIndex={currentFontSizeIndex}\n fontStyle={fontStyle}\n onColorChange={handleColorChange}\n onDecreaseFontSize={decreaseFontSize}\n onFontStyleChange={setFontStyle}\n onIncreaseFontSize={increaseFontSize}\n onOpenChange={setIsCustomizerOpen}\n onResetFontSize={resetFontSize}\n />\n </div>\n </div>\n </div>\n <div className='relative flex-1 max-lg:px-4'>\n <div className='mx-auto mt-11 w-full max-w-[640px]'>\n <div className='mb-6 flex flex-col gap-2'>\n <Skeleton className='h-8' />\n <Skeleton className='h-8 w-full max-w-md' />\n </div>\n <Skeleton className='mt-2 h-4' count={4} randomize={true} />\n <Skeleton className='mt-8 h-[400px]' />\n <Skeleton className='mt-2 h-4' containerClassName='block mt-7 mb-4' count={8} randomize={true} />\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n if (!currentPost) {\n return (\n <div className={`max-h-full overflow-auto rounded-md ${backgroundColor === 'DARK' && 'dark'} ${(backgroundColor === 'LIGHT' || backgroundColor === 'SEPIA') && 'light'} ${COLOR_OPTIONS[backgroundColor].background}`}>\n <div className='flex h-full flex-col'>\n <div className='relative flex-1'>\n <div className={`sticky top-0 z-50 flex h-[102px] items-center justify-center rounded-t-md border-b max-md:h-[68px] ${COLOR_OPTIONS[backgroundColor].background} ${COLOR_OPTIONS[backgroundColor].border}`}>\n <div\n className='grid w-full px-8 max-lg:px-4'\n style={{\n gridTemplateColumns: `1fr minmax(0,${currentGridWidth}) 1fr`\n }}\n >\n <div className='flex items-center'>\n <BackButton className={COLOR_OPTIONS[backgroundColor].button} onClick={onClose} />\n </div>\n <div className='col-[2/3] mx-auto flex w-full items-center gap-3 max-md:hidden'>\n <div className='grow text-center'>\n <span>Error loading article.</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div ref={modalRef as React.RefObject<HTMLDivElement>} className={`max-h-full overflow-auto rounded-md ${backgroundColor === 'DARK' && 'dark'} ${(backgroundColor === 'LIGHT' || backgroundColor === 'SEPIA') && 'light'} ${COLOR_OPTIONS[backgroundColor].background}`} data-scrollable-container>\n\n <>\n <div className='flex h-full flex-col'>\n <div className='relative flex-1'>\n <div className={`sticky top-0 z-50 flex h-[102px] items-center justify-center rounded-t-md border-b max-md:h-[68px] ${COLOR_OPTIONS[backgroundColor].background} ${COLOR_OPTIONS[backgroundColor].border}`}>\n <div\n className='grid w-full px-8 max-lg:px-4'\n style={{\n gridTemplateColumns: `1fr minmax(0,${currentGridWidth}) 1fr`\n }}\n >\n <div className='flex items-center'>\n <BackButton className={COLOR_OPTIONS[backgroundColor].button} onClick={onClose} />\n </div>\n <div className='col-[2/3] mx-auto flex w-full items-center justify-between gap-3 max-md:hidden'>\n <ProfilePreviewHoverCard actor={actor} isCurrentUser={object.authored}>\n <div className='flex cursor-pointer items-center gap-3'>\n <div className='relative z-10 pt-0.5'>\n <APAvatar author={actor}/>\n </div>\n <div className='relative z-10 mt-0.5 flex min-w-0 cursor-pointer flex-col overflow-visible text-[1.5rem]' onClick={e => handleProfileClick(actor, navigate, e)}>\n <div className='flex w-full'>\n <span className='min-w-0 truncate whitespace-nowrap font-semibold text-black hover:underline dark:text-white'>{isLoadingContent ? <Skeleton className='w-20' /> : actor.name}</span>\n </div>\n <div className='flex w-full'>\n {!isLoadingContent && <span className='truncate text-gray-700 after:mx-1 after:font-normal after:text-gray-700 after:content-[\"·\"]'>{getUsername(actor)}</span>}\n <span className='text-gray-700'>{isLoadingContent ? <Skeleton className='w-[120px]' /> : renderTimestamp(object, !object.authored)}</span>\n </div>\n </div>\n </div>\n </ProfilePreviewHoverCard>\n {!object.authored && !isLoadingContent && (\n <FollowButton\n following={actor.followedByMe ?? false}\n handle={getUsername(actor)}\n />\n )}\n </div>\n <div className='col-[3/4] flex items-center justify-end gap-2'>\n <Customizer\n backgroundColor={backgroundColor}\n currentFontSizeIndex={currentFontSizeIndex}\n fontStyle={fontStyle}\n onColorChange={handleColorChange}\n onDecreaseFontSize={decreaseFontSize}\n onFontStyleChange={setFontStyle}\n onIncreaseFontSize={increaseFontSize}\n onOpenChange={setIsCustomizerOpen}\n onResetFontSize={resetFontSize}\n />\n </div>\n </div>\n </div>\n <div className='relative flex-1'>\n <TableOfContents\n iframeElement={iframeElement}\n modalRef={modalRef}\n tocItems={tocItems}\n onOpenChange={setIsTOCOpen}\n />\n {!isLoadingContent && <div className='grow overflow-y-auto'>\n <div className={`mx-auto px-6 pb-10 pt-5`} style={{maxWidth: currentMaxWidth}}>\n <div className='flex flex-col items-center pb-8' id='object-content'>\n <ArticleBody\n authors={authors}\n backgroundColor={backgroundColor}\n excerpt={object.summary ?? ''}\n fontSize={fontSize}\n fontStyle={fontStyle}\n heading={object.name}\n html={object.content ?? ''}\n image={typeof object.image === 'string' ? object.image : object.image?.url}\n isPopoverOpen={isCustomizerOpen || isTOCOpen}\n postUrl={object?.url || ''}\n onHeadingsExtracted={handleHeadingsExtracted}\n onIframeLoad={handleIframeLoad}\n onLoadingChange={setIsLoading}\n />\n <div className='-ml-3 w-full' style={{maxWidth: currentGridWidth}}>\n <FeedItemStats\n actor={actor}\n commentCount={replyCount}\n layout={'modal'}\n likeCount={object.likeCount ?? 0}\n object={object}\n repostCount={object.repostCount ?? 0}\n onLikeClick={onLikeClick}\n />\n </div>\n </div>\n {object.type === 'Tombstone' && (\n <DeletedFeedItem last={true} />\n )}\n\n <div className='mx-auto w-full border-t border-black/[8%] dark:border-gray-950' style={{maxWidth: currentGridWidth}}>\n <APReplyBox\n object={object}\n />\n <FeedItemDivider />\n </div>\n\n {isLoadingContent && <LoadingIndicator size='lg' />}\n\n <div ref={repliesRef} className='mx-auto w-full' style={{maxWidth: currentGridWidth}}>\n {\n processedReplies.map((replyGroup, groupIndex) => {\n const isLastGroup = groupIndex === processedReplies.length - 1;\n const chainId = replyGroup.mainReply.id;\n const isExpanded = expandedChains.has(chainId);\n const isFullyExpanded = fullyExpandedChains.has(chainId);\n const isChainLoading = loadingChains.has(chainId);\n const hasChain = replyGroup.chain.length > 0;\n\n return (\n <React.Fragment key={replyGroup.mainReply.id}>\n <FeedItem\n actor={replyGroup.mainReply.actor}\n allowDelete={replyGroup.mainReply.object.authored}\n commentCount={replyGroup.mainReply.object.replyCount ?? 0}\n isChainParent={hasChain}\n isPending={isPendingActivity(replyGroup.mainReply.id)}\n last={!hasChain}\n layout='reply'\n likeCount={replyGroup.mainReply.object.likeCount ?? 0}\n object={replyGroup.mainReply.object}\n parentId={object.id}\n repostCount={replyGroup.mainReply.object.repostCount ?? 0}\n type='Note'\n onClick={() => {\n const container = modalRef.current;\n if (container && postId) {\n scrollPositionCache.set(postId, container.scrollTop);\n }\n navigate(`/notes/${encodeURIComponent(replyGroup.mainReply.id)}`);\n }}\n onDelete={handleDelete}\n />\n\n {hasChain && replyGroup.chain[0] && (\n <FeedItem\n key={replyGroup.chain[0].id}\n actor={replyGroup.chain[0].actor}\n allowDelete={replyGroup.chain[0].object.authored}\n commentCount={replyGroup.chain[0].object.replyCount ?? 0}\n isChainContinuation={true}\n isPending={isPendingActivity(replyGroup.chain[0].id)}\n last={replyGroup.chain.length === 1}\n layout='reply'\n likeCount={replyGroup.chain[0].object.likeCount ?? 0}\n object={replyGroup.chain[0].object}\n parentId={object.id}\n repostCount={replyGroup.chain[0].object.repostCount ?? 0}\n type='Note'\n onClick={() => {\n const container = modalRef.current;\n if (container && postId) {\n scrollPositionCache.set(postId, container.scrollTop);\n }\n navigate(`/notes/${encodeURIComponent(replyGroup.chain[0].id)}`);\n }}\n onDelete={handleDelete}\n />\n )}\n\n {hasChain && isExpanded && replyGroup.chain.slice(1).map((chainItem: Activity, chainIndex: number) => {\n const isLastChainItem = chainIndex === replyGroup.chain.slice(1).length - 1;\n const hasMoreReplies = hasMoreChildReplies && hasMoreChildReplies(groupIndex);\n const shouldShowConnector = isLastChainItem && hasMoreReplies;\n\n return (\n <FeedItem\n key={chainItem.id}\n actor={chainItem.actor}\n allowDelete={chainItem.object.authored}\n commentCount={chainItem.object.replyCount ?? 0}\n isChainContinuation={true}\n isPending={isPendingActivity(chainItem.id)}\n last={isLastChainItem && !shouldShowConnector}\n layout='reply'\n likeCount={chainItem.object.likeCount ?? 0}\n object={chainItem.object}\n parentId={object.id}\n repostCount={chainItem.object.repostCount ?? 0}\n type='Note'\n onClick={() => {\n const container = modalRef.current;\n if (container && postId) {\n scrollPositionCache.set(postId, container.scrollTop);\n }\n navigate(`/notes/${encodeURIComponent(chainItem.id)}`);\n }}\n onDelete={handleDelete}\n />\n );\n })}\n\n {hasChain && replyGroup.chain.length > 1 && !isExpanded && (\n <ShowRepliesButton\n variant='expand'\n onClick={() => toggleChain(chainId)}\n />\n )}\n\n {hasChain && isExpanded && isFullyExpanded && hasMoreChildReplies && hasMoreChildReplies(groupIndex) && (\n <ShowRepliesButton\n loading={isChainLoading}\n variant='loadMore'\n onClick={() => loadMoreForChain(chainId, groupIndex)}\n />\n )}\n\n {!isLastGroup && <FeedItemDivider />}\n </React.Fragment>\n );\n })\n }\n\n {isLoadingMoreTopLevelReplies && (\n <div className='flex flex-col items-center justify-center text-center'>\n <LoadingIndicator size='md' />\n </div>\n )}\n </div>\n\n {hasMoreChildren && <div ref={loadMoreRef} className='h-1'></div>}\n </div>\n </div>}\n </div>\n </div>\n {!isLoadingContent && <div className='pointer-events-none !visible sticky bottom-0 hidden items-end justify-between px-10 pb-[42px] lg:!flex'>\n <div className='pointer-events-auto text-gray-600'>\n {getReadingTime(object.content ?? '')}\n </div>\n <div key={readingProgress} className='pointer-events-auto min-w-10 text-right text-gray-600 transition-all duration-200 ease-out'>\n {readingProgress}%\n </div>\n </div>}\n </div>\n </>\n </div>\n );\n};\n\nexport default Reader;\n","import FeedItem from '@src/components/feed/feed-item';\nimport Layout from '@src/components/layout';\nimport Reader from './reader';\nimport TopicFilter, {Topic} from '@src/components/topic-filter';\nimport {Activity} from '@src/api/activitypub';\nimport {Button, Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, EmptyIndicator, LoadingIndicator, LucideIcon, Separator} from '@tryghost/shade';\nimport {isPendingActivity} from '@src/utils/pending-activity';\nimport {useEffect, useRef, useState} from 'react';\nimport {useNavigateWithBasePath} from '@src/hooks/use-navigate-with-base-path';\nimport {useNavigationStack, useParams} from '@tryghost/admin-x-framework';\nimport {useTopicsForUser} from '@src/hooks/use-activity-pub-queries';\n\nexport type InboxListProps = {\n isLoading: boolean,\n activities: Activity[],\n currentTopic: Topic,\n fetchNextPage: () => void,\n hasNextPage: boolean,\n isFetchingNextPage: boolean,\n onTopicChange: (topic: Topic) => void\n}\n\nconst InboxList:React.FC<InboxListProps> = ({\n isLoading,\n activities,\n currentTopic,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage,\n onTopicChange\n}) => {\n const navigate = useNavigateWithBasePath();\n const {canGoBack, goBack} = useNavigationStack();\n const [isReaderOpen, setIsReaderOpen] = useState(false);\n const params = useParams();\n const {topicsQuery} = useTopicsForUser();\n const {data: topicsData} = topicsQuery;\n const hasTopics = topicsData && topicsData.topics.length > 0;\n\n useEffect(() => {\n setIsReaderOpen(!!params.postId);\n }, [params.postId]);\n\n const observerRef = useRef<IntersectionObserver | null>(null);\n const loadMoreRef = useRef<HTMLDivElement | null>(null);\n const endLoadMoreRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n\n observerRef.current = new IntersectionObserver((entries) => {\n if (entries[0].isIntersecting && hasNextPage && !isFetchingNextPage) {\n fetchNextPage();\n }\n });\n\n if (loadMoreRef.current) {\n observerRef.current.observe(loadMoreRef.current);\n }\n\n if (endLoadMoreRef.current) {\n observerRef.current.observe(endLoadMoreRef.current);\n }\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n };\n }, [hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n // Calculate the index at which to place the loadMoreRef - This will place it ~75% through the list\n const loadMoreIndex = Math.max(0, Math.floor(activities.length * 0.75) - 1);\n\n return (\n <Layout>\n {hasTopics && <TopicFilter currentTopic={currentTopic} excludeTopics={['top']} onTopicChange={onTopicChange} />}\n <div className='flex w-full flex-col'>\n <div className='w-full'>\n {activities.length > 0 ? (\n <div className='my-4'>\n <div className='mx-auto flex min-h-[calc(100dvh_-_117px)] items-start gap-11'>\n <div className='flex w-full min-w-0 flex-col items-center'>\n <div className='flex w-full min-w-0 flex-col items-start'>\n <ul className='mx-auto flex w-full flex-col' data-testid='inbox-list'>\n {activities.map((activity, index) => (\n <li\n // eslint-disable-next-line react/no-array-index-key\n key={`${activity.id}-${activity.type}-${index}`} // We are using index here as activity.id is cannot be guaranteed to be unique at the moment\n data-testid='inbox-item'\n data-test-view-article\n >\n <FeedItem\n actor={activity.actor}\n allowDelete={activity.object.authored}\n commentCount={activity.object.replyCount ?? 0}\n isLoading={isLoading}\n isPending={isPendingActivity(activity.id)}\n layout={'inbox'}\n likeCount={activity.object.likeCount ?? 0}\n object={activity.object}\n repostCount={activity.object.repostCount ?? 0}\n type={activity.type}\n onClick={() => {\n navigate(`/reader/${encodeURIComponent(activity.id)}`);\n }}\n />\n {index < activities.length - 1 && (\n <Separator />\n )}\n {index === loadMoreIndex && (\n <div ref={loadMoreRef} className='h-1'></div>\n )}\n </li>\n ))}\n {isFetchingNextPage && (\n <li className='flex flex-col items-center justify-center space-y-4 text-center'>\n <LoadingIndicator size='md' />\n </li>\n )}\n </ul>\n <div ref={endLoadMoreRef} className='h-1'></div>\n </div>\n </div>\n </div>\n </div>\n ) : currentTopic !== 'following' ? (\n <div className='mt-[24vh]'>\n <EmptyIndicator\n description=\"Explore other topics for more content.\"\n title=\"Nothing here yet\"\n >\n <LucideIcon.Inbox />\n </EmptyIndicator>\n </div>\n ) : (\n <div className='mt-[24vh]'>\n <EmptyIndicator\n actions={\n hasTopics ? (\n <Button onClick={() => navigate('/explore')}>\n Find accounts to follow →\n </Button>\n ) : (\n <Button asChild>\n <a href=\"https://explore.ghost.org/social-web\" rel=\"noopener noreferrer\" target=\"_blank\">\n Find accounts to follow →\n </a>\n </Button>\n )\n }\n description=\"Start following publishers to see their long-form posts here.\"\n title=\"Your Reader is empty\"\n >\n <LucideIcon.Inbox />\n </EmptyIndicator>\n </div>\n )}\n </div>\n </div>\n <Dialog\n open={isReaderOpen}\n onOpenChange={(open: boolean) => {\n if (!open) {\n if (canGoBack) {\n goBack();\n } else {\n navigate('/reader');\n }\n }\n setIsReaderOpen(open);\n }}\n >\n <DialogContent className='inset-y-3 h-[calc(100vh-24px)] w-screen max-w-[calc(100vw-24px)] !animate-none p-0 focus:outline-none dark:bg-gray-950'>\n <DialogHeader className='hidden'>\n <DialogTitle>Reader</DialogTitle>\n <DialogDescription>Ghost reader for long form articles</DialogDescription>\n </DialogHeader>\n {params.postId && <Reader postId={params.postId} onClose={() => {\n if (canGoBack) {\n goBack();\n } else {\n navigate('/reader');\n }\n }} />}\n </DialogContent>\n </Dialog>\n </Layout>\n );\n};\n\nexport default InboxList;\n","import AppError from '@components/layout/error';\nimport InboxList from './components/inbox-list';\nimport React, {useState} from 'react';\nimport {Topic} from '@src/components/topic-filter';\nimport {isApiError} from '@src/api/activitypub';\nimport {useDiscoveryFeedForUser, useInboxForUser} from '@hooks/use-activity-pub-queries';\n\nconst Inbox: React.FC = () => {\n const [topic, setTopic] = useState<Topic>('following');\n\n const {inboxQuery: followingQuery} = useInboxForUser({enabled: topic === 'following'});\n const {discoveryFeedQuery: discoverQuery} = useDiscoveryFeedForUser({enabled: topic !== 'following', topic});\n\n const feedQueryData = topic === 'following' ? followingQuery : discoverQuery;\n const {data, error, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading} = feedQueryData;\n\n const topicNotFound = error && isApiError(error) && error.statusCode === 404 && topic !== 'following';\n\n if (error && isApiError(error) && !topicNotFound) {\n return <AppError errorCode={error.code} statusCode={error.statusCode}/>;\n }\n\n const activities = topicNotFound ? [] : (data?.pages.flatMap(page => page.posts) ?? Array.from({length: 5}, (_, index) => ({id: `placeholder-${index}`, object: {}})));\n\n return <InboxList\n activities={activities}\n currentTopic={topic}\n fetchNextPage={fetchNextPage}\n hasNextPage={hasNextPage!}\n isFetchingNextPage={isFetchingNextPage}\n isLoading={isLoading}\n onTopicChange={setTopic}\n />;\n};\n\nexport default Inbox;\n"],"names":["__iconNode","Minus","createLucideIcon","EmptyBadge","React__default","children","className","props","ref","jsx","cn","EmptyIndicator","title","description","actions","jsxs","FONT_SIZES","STORAGE_KEYS","COLOR_OPTIONS","useCustomizerSettings","backgroundColor","setBackgroundColor","useState","saved","currentFontSizeIndex","setCurrentFontSizeIndex","fontStyle","setFontStyle","handleColorChange","color","useEffect","prevIndex","Customizer","onColorChange","onFontStyleChange","onDecreaseFontSize","onIncreaseFontSize","onResetFontSize","onOpenChange","isActiveColor","isActiveFont","font","CustomizerView","Popover","PopoverTrigger","Button","Icon","PopoverContent","e","LucideIcon.Minus","LucideIcon.Plus","TableOfContents","tocItems","iframeElement","modalRef","activeHeadingId","setActiveHeadingId","isScrollingToHeading","React","handleHeadingClick","id","heading","container","handleScroll","doc","scrollTop","buffer","headings","item","el","activeHeading","prev","curr","scrollHandler","TableOfContentsView","LINE_WIDTHS","HEADING_PADDINGS","items","onItemClick","open","setOpen","timeoutRef","getNormalizedLevel","level","getLineWidth","getHeadingPadding","handleMouseEnter","handleMouseLeave","articleBodyStyles","audio$1","gallery$1","toggle$1","video$1","audio","blockquote","bookmark","button","callout","collection","cta","file","gallery","header","header_v2","nft","product","signup","toggle","video","jsModules","cssModules","cardsJS","module","cardsCSS","ArticleBody","postUrl","image","excerpt","authors","html","fontSize","onHeadingsExtracted","onIframeLoad","onLoadingChange","isPopoverOpen","iframeRef","useRef","isLoading","setIsLoading","iframeHeight","setIframeHeight","darkMode","cssContent","htmlContent","author","openLinksInNewTab","iframe","handleMessage","event","newHeight","handleIframeKeyDown","newEvent","handleIframeLoad","iframeWindow","iframeDocument","_a","root","resizeEvent","handleLoad","headingElements","highestLevel","idx","normalizedLevel","Skeleton","FeedItemDivider","scrollPositionCache","Reader","postId","onClose","increaseFontSize","decreaseFontSize","resetFontSize","isCustomizerOpen","setIsCustomizerOpen","isTOCOpen","setIsTOCOpen","expandedChains","setExpandedChains","fullyExpandedChains","setFullyExpandedChains","loadingChains","setLoadingChains","isLoadingMoreTopLevelReplies","setIsLoadingMoreTopLevelReplies","observerRef","loadMoreRef","currentPost","processedReplies","isLoadingContent","loadMoreChildren","loadMoreChildReplies","hasMoreChildren","hasMoreChildReplies","useReplyChainData","activityData","object","actor","_b","replyCount","entries","error","handleDelete","toggleChain","chainId","newSet","fullyExpanded","newFullyExpanded","loadMoreForChain","childIndex","onLikeClick","repliesRef","currentMaxWidth","currentGridWidth","readingProgress","setReadingProgress","debouncedSetReadingProgress","useDebounce","PROGRESS_INCREMENT","article","articleRect","containerRect","scrolledPast","totalHeight","rawProgress","progress","observer","setTocItems","setIframeElement","handleHeadingsExtracted","useCallback","timeoutId","navigate","useNavigateWithBasePath","savedPosition","BackButton","Fragment","ProfilePreviewHoverCard","APAvatar","handleProfileClick","getUsername","renderTimestamp","FollowButton","_c","FeedItemStats","DeletedFeedItem","APReplyBox","LoadingIndicator","replyGroup","groupIndex","isLastGroup","isExpanded","isFullyExpanded","isChainLoading","hasChain","FeedItem","isPendingActivity","chainItem","chainIndex","isLastChainItem","hasMoreReplies","shouldShowConnector","ShowRepliesButton","InboxList","activities","currentTopic","fetchNextPage","hasNextPage","isFetchingNextPage","onTopicChange","canGoBack","goBack","useNavigationStack","isReaderOpen","setIsReaderOpen","params","useParams","topicsQuery","useTopicsForUser","topicsData","hasTopics","endLoadMoreRef","loadMoreIndex","Layout","TopicFilter","activity","index","Separator","LucideIcon.Inbox","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Inbox","topic","setTopic","followingQuery","useInboxForUser","discoverQuery","useDiscoveryFeedForUser","feedQueryData","data","topicNotFound","isApiError","AppError","page","_"],"mappings":";;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,KAAa,CAAC,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE,CAAC,GACxDC,KAAQC,GAAiB,SAASF,EAAU,GCP5CG,KAAaC,EAAe,WAAW,CAAC,EAAE,UAAAC,GAAU,WAAAC,GAAW,GAAGC,EAAK,GAAIC,MACxDC,gBAAAA,EAAAA;AAAAA,EACrB;AAAA,EACA;AAAA,IACE,KAAAD;AAAA,IACA,WAAWE,GAAG,oJAAoJJ,CAAS;AAAA,IAC3K,GAAGC;AAAA,IACH,UAAAF;AAAA,EACN;AACA,CACC;AACDF,GAAW,cAAc;AACzB,MAAMQ,KAAiBP,EAAe,WAAW,CAAC,EAAE,UAAAC,GAAU,WAAAC,GAAW,OAAAM,GAAO,aAAAC,GAAa,SAAAC,GAAS,GAAGP,EAAK,GAAIC,MACzFO,gBAAAA,OAAK,OAAO,EAAE,KAAAP,GAAK,WAAWE,GAAG,mEAAmEJ,CAAS,GAAG,GAAGC,GAAO,UAAU;AAAA,EACzIE,gBAAAA,MAAIN,IAAY,EAAE,UAAAE,GAAU;AAAA,EAC5BU,gBAAAA,EAAAA,KAAK,OAAO,EAAE,WAAW,6BAA6B,UAAU;AAAA,IAC9DN,gBAAAA,EAAAA,IAAI,MAAM,EAAE,WAAW,mEAAmE,UAAUG,GAAO;AAAA,IAC3HC,KAA+BJ,gBAAAA,EAAAA,IAAI,KAAK,EAAE,WAAW,2DAA2D,UAAUI,EAAW,CAAE;AAAA,EAC7I,GAAO;AAAA,EACHC,KAA2BL,gBAAAA,EAAAA,IAAI,OAAO,EAAE,WAAW,gCAAgC,UAAUK,EAAO,CAAE;AAC1G,GAAK,CACJ;AACDH,GAAe,cAAc;ACtBtB,MAAMK,KAAa,CAAC,UAAU,UAAU,UAAU,UAAU,MAAM,GAG5DC,IAAe;AAAA,EACxB,kBAAkB;AAAA,EAClB,WAAW;AAAA,EAEX,YAAY;AAChB,GAEaC,IAAgB;AAAA,EACzB,QAAQ;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA;AAAA,EAEZ,OAAO;AAAA,IACH,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA;AAAA,EAEZ,OAAO;AAAA,IACH,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA;AAAA,EAEZ,MAAM;AAAA,IACF,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA;AAEhB,GAiBaC,KAAwB,MAAM;AACvC,QAAM,CAACC,GAAiBC,CAAkB,IAAIC,EAAsB,MAAM;AACtE,UAAMC,IAAQ,aAAa,QAAQN,EAAa,gBAAgB;AAChE,YAAQM,KAAA,gBAAAA,EAAO,kBAAiC;AAAA,EACpD,CAAC,GAEK,CAACC,GAAsBC,CAAuB,IAAIH,EAAS,MAAM;AACnE,UAAMC,IAAQ,aAAa,QAAQN,EAAa,SAAS;AACzD,WAAOM,IAAQ,SAASA,CAAK,IAAI;AAAA,EACrC,CAAC,GAEK,CAACG,GAAWC,CAAY,IAAIL,EAAoB,MACpC,aAAa,QAAQL,EAAa,UAAU,KACzC,MACpB,GAEKW,IAAoB,CAACC,MAAuB;AAC9C,IAAAR,EAAmBQ,CAAK,GACxB,aAAa,QAAQZ,EAAa,kBAAkBC,EAAcW,CAAK,EAAE,EAAE;AAAA,EAC/E;AAEA,SAAAC,EAAU,MAAM;AACZ,iBAAa,QAAQb,EAAa,WAAWO,EAAqB,UAAU;AAAA,EAChF,GAAG,CAACA,CAAoB,CAAC,GAEzBM,EAAU,MAAM;AACZ,iBAAa,QAAQb,EAAa,YAAYS,CAAS;AAAA,EAC3D,GAAG,CAACA,CAAS,CAAC,GAYP;AAAA,IACH,iBAAAN;AAAA,IACA,sBAAAI;AAAA,IACA,WAAAE;AAAA,IACA,mBAAAE;AAAA,IACA,cAAAD;AAAA,IACA,kBAhBqB,MAAM;AAC3B,MAAAF,EAAwB,CAAAM,MAAa,KAAK,IAAIA,IAAY,GAAGf,GAAW,SAAS,CAAC,CAAC;AAAA,IACvF;AAAA,IAeI,kBAbqB,MAAM;AAC3B,MAAAS,EAAwB,OAAa,KAAK,IAAIM,IAAY,GAAG,CAAC,CAAC;AAAA,IACnE;AAAA,IAYI,eAVkB,MAAMN,EAAwB,CAAC;AAAA,IAWjD,UAAUT,GAAWQ,CAAoB;AAAA,EAAA;AAEjD,GAEMQ,KAAwC,CAAC;AAAA,EAC3C,iBAAAZ;AAAA,EACA,sBAAAI;AAAA,EACA,WAAAE;AAAA,EACA,eAAAO;AAAA,EACA,mBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,cAAAC;AACJ,MAAM;AACF,QAAMC,IAAgB,CAACV,MAAuBT,MAAoBS,GAC5DW,IAAe,CAACC,MAAoBf,MAAce;AAExD,SACIhC,gBAAAA,EAAAA;AAAAA,IAACiC;AAAA,IAAA;AAAA,MACG,iBAAAtB;AAAA,MACA,sBAAAI;AAAA,MACA,WAAAE;AAAA,MACA,eAAAa;AAAA,MACA,cAAAC;AAAA,MACA,eAAAP;AAAA,MACA,oBAAAE;AAAA,MACA,mBAAAD;AAAA,MACA,oBAAAE;AAAA,MACA,cAAAE;AAAA,MACA,iBAAAD;AAAA,IAAA;AAAA,EAAA;AAGZ,GAQMK,KAAgD,CAAC;AAAA,EACnD,iBAAAtB;AAAA,EACA,eAAAmB;AAAA,EACA,cAAAC;AAAA,EACA,eAAAP;AAAA,EACA,mBAAAC;AAAA,EACA,sBAAAV;AAAA,EACA,oBAAAW;AAAA,EACA,oBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,cAAAC;AACJ,MACIvB,gBAAAA,EAAAA,KAAC4B,IAAA,EAAQ,OAAO,IAAO,cAAAL,GACnB,UAAA;AAAA,EAAA7B,gBAAAA,EAAAA,IAACmC,IAAA,EAAe,SAAO,IACnB,UAAAnC,gBAAAA,MAACoC,KAAO,WAAW,uBAAuB3B,EAAcE,CAAe,EAAE,MAAM,IAAI,SAAQ,SACvF,UAAAX,gBAAAA,EAAAA,IAACqC,GAAK,YAAL,EAAgB,WAAU,gBAAe,EAAA,CAC9C,EAAA,CACJ;AAAA,wBACCC,IAAA,EAAe,OAAM,OAAM,WAAU,aAAY,kBAAkB,CAAAC,MAAKA,EAAE,kBAAkB,iBAAiB,OAAKA,EAAE,kBACjH,UAAAjC,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,uBACX,UAAA;AAAA,IAAAA,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,+CACX,UAAA;AAAA,MAAAN,gBAAAA,EAAAA;AAAAA,QAACoC;AAAA,QAAA;AAAA,UACG,WAAW,mKAAmKN,EAAc,QAAQ,IAAI,oCAAoC,EAAE;AAAA,UAC9O,SAAQ;AAAA,UACR,SAAS,MAAMN,EAAc,QAAQ;AAAA,UACxC,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGDxB,gBAAAA,EAAAA;AAAAA,QAACoC;AAAA,QAAA;AAAA,UACG,WAAW,gEAAgEN,EAAc,OAAO,IAAI,oCAAoC,yBAAyB;AAAA,UACjK,SAAS,MAAMN,EAAc,OAAO;AAAA,QAAA;AAAA,MAAA;AAAA,MAExCxB,gBAAAA,EAAAA;AAAAA,QAACoC;AAAA,QAAA;AAAA,UACG,WAAW,wDAAwDN,EAAc,OAAO,IAAI,oCAAoC,wBAAwB;AAAA,UACxJ,SAAS,MAAMN,EAAc,OAAO;AAAA,QAAA;AAAA,MAAA;AAAA,MAExCxB,gBAAAA,EAAAA;AAAAA,QAACoC;AAAA,QAAA;AAAA,UACG,WAAW,yFAAyFN,EAAc,MAAM,IAAI,oCAAoC,EAAE;AAAA,UAClK,SAAS,MAAMN,EAAc,MAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IACvC,GACJ;AAAA,IACAlB,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,cACX,UAAA;AAAA,MAAAA,gBAAAA,EAAAA;AAAAA,QAAC8B;AAAA,QAAA;AAAA,UACG,WAAW,oJAAoJL,EAAa,MAAM,KAAK,iCAAiC;AAAA,UACxN,SAAQ;AAAA,UACR,SAAS,MAAMN,EAAkB,MAAM;AAAA,UAEvC,UAAA;AAAA,YAAAzB,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,sCAAqC,UAAA,MAAE;AAAA,YACvDA,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,iBAAgB,UAAA,SAAA,CAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAE1CM,gBAAAA,EAAAA;AAAAA,QAAC8B;AAAA,QAAA;AAAA,UACG,WAAW,oJAAoJL,EAAa,OAAO,KAAK,iCAAiC;AAAA,UACzN,SAAQ;AAAA,UACR,SAAS,MAAMN,EAAkB,OAAO;AAAA,UAExC,UAAA;AAAA,YAAAzB,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,sDAAqD,UAAA,MAAE;AAAA,YACvEA,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,4BAA2B,UAAA,QAAA,CAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACpD,GACJ;AAAA,IACAM,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,cACX,UAAA;AAAA,MAAAN,gBAAAA,EAAAA;AAAAA,QAACoC;AAAA,QAAA;AAAA,UACG,WAAU;AAAA,UACV,UAAUrB,MAAyB;AAAA,UACnC,SAAQ;AAAA,UACR,SAASW;AAAA,UAET,UAAA1B,gBAAAA,EAAAA,IAACwC,IAAA,CAAA,CAAiB;AAAA,QAAA;AAAA,MAAA;AAAA,MAEtBxC,gBAAAA,EAAAA;AAAAA,QAACoC;AAAA,QAAA;AAAA,UACG,WAAU;AAAA,UACV,SAAQ;AAAA,UACR,SAASR;AAAA,UAET,UAAA5B,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,2BAA0B,UAAA,KAAA,CAAE;AAAA,QAAA;AAAA,MAAA;AAAA,MAEhDA,gBAAAA,EAAAA;AAAAA,QAACoC;AAAA,QAAA;AAAA,UACG,WAAU;AAAA,UACV,UAAUrB,MAAyBR,GAAW,SAAS;AAAA,UACvD,SAAQ;AAAA,UACR,SAASoB;AAAA,UAET,UAAA3B,gBAAAA,EAAAA,IAACyC,IAAA,CAAA,CAAgB;AAAA,QAAA;AAAA,MAAA;AAAA,IACrB,EAAA,CACJ;AAAA,EAAA,EAAA,CACJ,EAAA,CACJ;AAAA,GACJ,GCvNEC,KAAkD,CAAC;AAAA,EACrD,UAAAC;AAAA,EACA,eAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAhD,IAAY;AAAA,EACZ,cAAAgC;AACJ,MAAM;AACF,QAAM,CAACiB,GAAiBC,CAAkB,IAAIlC,EAAwB,IAAI,GACpEmC,IAAuBC,EAAM,OAAO,EAAK,GAEzCC,IAAqB,CAACC,MAAe;AACvC,QAAI,EAACP,KAAA,QAAAA,EAAe;AAChB;AAGJ,UAAMQ,IAAUR,EAAc,gBAAgB,eAAeO,CAAE;AAC/D,IAAIC,KAAWP,EAAS,YACpBG,EAAqB,UAAU,IAC/BD,EAAmBI,CAAE,GAErBN,EAAS,QAAQ,SAAS;AAAA,MACtB,KAAKO,EAAQ,YAAY;AAAA,MACzB,UAAU;AAAA,IAAA,CACb,GAED,WAAW,MAAM;AACb,MAAAJ,EAAqB,UAAU;AAAA,IACnC,GAAG,GAAI;AAAA,EAEf;AAwDA,SAtDA3B,EAAU,MAAM;AACZ,QAAI,EAACuB,KAAA,QAAAA,EAAe,oBAAmBD,EAAS,UAAU;AACtD;AAGJ,UAAMU,IAAYR,EAAS;AAC3B,QAAI,CAACQ;AACD;AAGJ,UAAMC,IAAe,MAAM;AACvB,UAAIN,EAAqB;AACrB;AAGJ,YAAMO,IAAMX,EAAc;AAC1B,UAAI,CAACW;AACD;AAGJ,YAAMC,IAAYH,EAAU,WACtBI,IAAS,KAETC,IAAWf,EACZ,IAAI,CAAAgB,MAAQJ,EAAI,eAAeI,EAAK,EAAE,CAAC,EACvC,OAAO,CAACC,MAA0BA,MAAO,IAAI,EAC7C,IAAI,CAAAA,OAAO;AAAA,QACR,IAAIA,EAAG;AAAA,QACP,KAAKA,EAAG;AAAA,MAAA,EACV;AAEN,UAAI,CAACF,EAAS;AACV;AAGJ,YAAMG,IAAgBH,EAAS,OAAO,CAACI,GAAMC,MACjCA,EAAK,MAAMN,KAAUD,IAAaO,IAAOD,CACpD;AAED,MAAAf,GAAmBc,KAAA,gBAAAA,EAAe,OAAM,IAAI;AAAA,IAChD,GAEMG,IAAgB,MAAM;AACxB,4BAAsBV,CAAY;AAAA,IACtC;AAEA,WAAAD,EAAU,iBAAiB,UAAUW,CAAa,GAClDV,EAAA,GAEO,MAAM;AACT,MAAAD,EAAU,oBAAoB,UAAUW,CAAa;AAAA,IACzD;AAAA,EACJ,GAAG,CAACpB,GAAeD,GAAUE,CAAQ,CAAC,GAElCF,EAAS,UAAU,IACZ,6BAIN,OAAA,EAAI,WAAA9C,GACD,UAAAG,gBAAAA,MAAC,OAAA,EAAI,WAAU,mCACX,UAAAA,gBAAAA,EAAAA;AAAAA,IAACiE;AAAA,IAAA;AAAA,MACG,eAAenB,KAAmB;AAAA,MAClC,OAAOH;AAAA,MACP,aAAaO;AAAA,MACb,cAAArB;AAAA,IAAA;AAAA,EAAA,GAER,EAAA,CACJ;AAER,GASMqC,KAAc;AAAA,EAChB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACP,GAEMC,KAAmB;AAAA,EACrB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACP,GAEMF,KAA0D,CAAC,EAAC,OAAAG,GAAO,eAAAP,GAAe,aAAAQ,GAAa,cAAAxC,QAAkB;AACnH,QAAM,CAACyC,GAAMC,CAAO,IAAI1D,EAAS,EAAK,GAChC2D,IAAavB,EAAM,OAAA;AAUzB,MARAA,EAAM,UAAU,MACL,MAAM;AACT,IAAIuB,EAAW,WACX,aAAaA,EAAW,OAAO;AAAA,EAEvC,GACD,CAAA,CAAE,GAEDJ,EAAM,WAAW;AACjB,WAAO;AAGX,QAAMK,IAAqB,CAACC,MACjB,KAAK,IAAIA,GAAO,CAAC,GAGtBC,IAAe,CAACD,MACXR,GAAYO,EAAmBC,CAAK,CAA6B,GAGtEE,IAAoB,CAACF,MAChBP,GAAiBM,EAAmBC,CAAK,CAAkC,GAGhFG,IAAmB,MAAM;AAC3B,IAAIL,EAAW,WACX,aAAaA,EAAW,OAAO,GAEnCD,EAAQ,EAAI,GACZ1C,KAAA,QAAAA,EAAe;AAAA,EACnB,GAEMiD,IAAmB,MAAM;AAC3B,IAAAN,EAAW,UAAU,WAAW,MAAM;AAClC,MAAAD,EAAQ,EAAK,GACb1C,KAAA,QAAAA,EAAe;AAAA,IACnB,GAAG,GAAG;AAAA,EACV;AAEA,gCACKK,IAAA,EAAQ,OAAO,IAAO,MAAAoC,GAAY,cAAcC,GAC7C,UAAA;AAAA,IAAAvE,gBAAAA,EAAAA,IAACmC,IAAA,EAAe,SAAO,IACnB,UAAAnC,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAU;AAAA,QACV,cAAc6E;AAAA,QACd,cAAcC;AAAA,QAEb,UAAAV,EAAM,IAAI,CAAAT,MACP3D,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YAEG,WAAW,sBAAsB6D,MAAkBF,EAAK,KAAK,2BAA2B,8BAA8B,wBAAwBgB,EAAahB,EAAK,KAAK,CAAC;AAAA,UAAA;AAAA,UADjKA,EAAK;AAAA,QAAA,CAGjB;AAAA,MAAA;AAAA,IAAA,GAET;AAAA,IACA3D,gBAAAA,EAAAA;AAAAA,MAACsC;AAAA,MAAA;AAAA,QACG,OAAM;AAAA,QACN,WAAU;AAAA,QACV,MAAK;AAAA,QACL,YAAY;AAAA,QACZ,kBAAkB,CAAAC,MAAKA,EAAE,eAAA;AAAA,QACzB,cAAcsC;AAAA,QACd,cAAcC;AAAA,QACd,iBAAiB,CAAAvC,MAAKA,EAAE,eAAA;AAAA,QAExB,UAAAvC,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACG,cAAW;AAAA,YACX,WAAU;AAAA,YACV,MAAK;AAAA,YAEJ,UAAAoE,EAAM,IAAI,CAAAT,MACP3D,gBAAAA,EAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBAEG,WAAW,yFAAyF6D,MAAkBF,EAAK,KAAK,+BAA+B,kCAAkC,sFAAsFiB,EAAkBjB,EAAK,KAAK,CAAC;AAAA,gBACpT,MAAK;AAAA,gBACL,SAAS,MAAMU,EAAYV,EAAK,EAAE;AAAA,gBAElC,UAAA3D,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,gBACX,YAAK,KAAA,CACV;AAAA,cAAA;AAAA,cAPK2D,EAAK;AAAA,YAAA,CASjB;AAAA,UAAA;AAAA,QAAA;AAAA,MACL;AAAA,IAAA;AAAA,EACJ,GACJ;AAER,GCvOMoB,KAAoB,MACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WCDXC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;8CCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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","x_google_ignoreList":[0]}
|