{"version":3,"file":"static/chunks/app/(home)/page-2a65e0048ad7247f.js","mappings":"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","sources":["webpack://_N_E/?3989","webpack://_N_E/../../src/icons/arrow-down.ts","webpack://_N_E/./src/components/ContentPreview/index.ts","webpack://_N_E/./src/components/Toast/LazyToast.ts","webpack://_N_E/./src/app/(home)/AllContentList.tsx","webpack://_N_E/./src/app/(home)/HeaderContentBlocker.tsx","webpack://_N_E/./src/app/(home)/HomepageConfigurableArt/LazyConfigurableArt.tsx","webpack://_N_E/./src/components/SiteHeader/index.ts","webpack://_N_E/./src/app/(home)/HomepageSiteHeader.tsx","webpack://_N_E/./src/app/(home)/PopularArticleList.tsx","webpack://_N_E/./src/components/ButtonPlayful/ButtonPlayful.tsx","webpack://_N_E/./src/components/ButtonPlayful/index.ts","webpack://_N_E/./src/components/CategoryPill/CategoryPill.tsx","webpack://_N_E/../../src/icons/external-link.ts","webpack://_N_E/./src/components/ContentPreview/PoppingArrows.tsx","webpack://_N_E/./src/components/ContentPreview/ContentPreview.tsx","webpack://_N_E/./src/components/MaxWidthWrapper/MaxWidthWrapper.tsx","webpack://_N_E/./src/components/MaxWidthWrapper/index.ts","webpack://_N_E/./src/hooks/use-font-ratio.ts","webpack://_N_E/./src/hooks/use-scroll-position.ts","webpack://_N_E/./src/hooks/use-window-dimensions.ts","webpack://_N_E/./src/app/(home)/AllContentList.linaria.module.css","webpack://_N_E/./src/app/(home)/HeaderContentBlocker.linaria.module.css","webpack://_N_E/./src/app/(home)/Hero.linaria.module.css","webpack://_N_E/./src/app/(home)/HomepageSiteHeader.linaria.module.css","webpack://_N_E/./src/app/(home)/HomepageSwoops.linaria.module.css","webpack://_N_E/./src/app/(home)/PopularArticleList.linaria.module.css","webpack://_N_E/./src/app/(home)/page.linaria.module.css","webpack://_N_E/./src/components/ButtonPlayful/ButtonPlayful.linaria.module.css","webpack://_N_E/./src/components/CategoryPill/CategoryPill.linaria.module.css","webpack://_N_E/./src/components/ContentPreview/ContentPreview.linaria.module.css","webpack://_N_E/./src/components/ContentPreview/PoppingArrows.linaria.module.css"],"sourcesContent":["import(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/app/(home)/AllContentList.tsx\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/app/(home)/HeaderContentBlocker.tsx\");\n;\nimport(/* webpackMode: \"eager\" */ \"/vercel/path0/src/app/(home)/Hero.linaria.module.css\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/app/(home)/HomepageConfigurableArt/LazyConfigurableArt.tsx\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/app/(home)/HomepageSiteHeader.tsx\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/app/(home)/PopularArticleList.tsx\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/components/CategoryPill/CategoryPill.tsx\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/components/ErrorBoundary/ErrorBoundary.tsx\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/components/Icons/IconBluesky.tsx\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/components/Icons/IconColorMode.tsx\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/components/Icons/IconRSS.tsx\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/components/Icons/IconSearch.tsx\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/components/Icons/IconSpeaker.tsx\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/components/Link/Link.tsx\");\n;\nimport(/* webpackMode: \"eager\" */ \"/vercel/path0/src/components/MaxWidthWrapper/MaxWidthWrapper.linaria.module.css\");\n;\nimport(/* webpackMode: \"eager\" */ \"/vercel/path0/src/components/Logo/Logo.linaria.module.css\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/components/OverscrollColor/OverscrollColor.tsx\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/components/SiteFooter/Affirmation.tsx\");\n;\nimport(/* webpackMode: \"eager\" */ \"/vercel/path0/src/components/SiteFooter/FooterLink.linaria.module.css\");\n;\nimport(/* webpackMode: \"eager\" */ \"/vercel/path0/src/components/SiteFooter/FooterCategoryList.linaria.module.css\");\n;\nimport(/* webpackMode: \"eager\" */ \"/vercel/path0/src/components/SiteFooter/ExtraCloud.linaria.module.css\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/components/SiteFooter/FooterNewsletterForm.tsx\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/components/SiteFooter/IconLink.tsx\");\n;\nimport(/* webpackMode: \"eager\" */ \"/vercel/path0/src/components/SiteFooter/SiteFooter.linaria.module.css\");\n;\nimport(/* webpackMode: \"eager\" */ \"/vercel/path0/src/components/SiteFooter/FooterSwoops.linaria.module.css\");\n;\nimport(/* webpackMode: \"eager\" */ \"/vercel/path0/src/components/SiteFooter/FullFatSiteFooter.linaria.module.css\");\n;\nimport(/* webpackMode: \"eager\" */ \"/vercel/path0/src/app/(home)/HomepageSwoops.linaria.module.css\");\n;\nimport(/* webpackMode: \"eager\" */ \"/vercel/path0/src/app/(home)/page.linaria.module.css\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/vercel/path0/src/components/SiteFooter/UpsideDownJerica.tsx\");\n;\nimport(/* webpackMode: \"eager\", webpackExports: [\"SkipNavTrigger\",\"SkipNavTarget\"] */ \"/vercel/path0/src/components/SkipNav/SkipNav.tsx\");\n;\nimport(/* webpackMode: \"eager\" */ \"/vercel/path0/src/components/Spacer/Spacer.linaria.module.css\");\n;\nimport(/* webpackMode: \"eager\" */ \"/vercel/path0/src/components/VisuallyHidden/VisuallyHidden.linaria.module.css\");\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ArrowDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgNXYxNCIgLz4KICA8cGF0aCBkPSJtMTkgMTItNyA3LTctNyIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/arrow-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowDown = createLucideIcon('ArrowDown', [\n ['path', { d: 'M12 5v14', key: 's699le' }],\n ['path', { d: 'm19 12-7 7-7-7', key: '1idqje' }],\n]);\n\nexport default ArrowDown;\n","export { default } from './ContentPreview';\n","import dynamic from 'next/dynamic';\n\nexport default dynamic(() => import('./Toast'), {\n ssr: false,\n});\n","'use client';\n\nimport * as React from 'react';\nimport { styled } from '@linaria/react';\nimport { ArrowDown } from 'lucide-react';\n\nimport { HOMEPAGE_ARTICLE_LIMIT } from '@/constants';\nimport type { ContentData } from '@/types/content.types';\n\nimport ContentPreview from '@/components/ContentPreview';\nimport ButtonPlayful from '@/components/ButtonPlayful';\nimport Spinner from '@/components/Spinner';\nimport TextLink from '@/components/Link/TextLink';\nimport Toast from '@/components/Toast/LazyToast';\n\ninterface Props {\n initialArticles: Array;\n}\n\nfunction AllContentList({ initialArticles }: Props) {\n const [articles, setArticles] =\n React.useState>(initialArticles);\n const [status, setStatus] = React.useState<\n 'idle' | 'loading' | 'error' | 'success'\n >('idle');\n\n const wrapperRef = React.useRef(null);\n\n async function handleSubmit(\n event: React.FormEvent\n ) {\n if (status === 'loading') {\n // Ignore multiple clicks\n }\n\n event.preventDefault();\n setStatus('loading');\n\n try {\n const response = await fetch('/api/retrieve-remaining-posts/');\n const json = await response.json();\n\n if (!response.ok || !json.articles) {\n setStatus('error');\n return;\n }\n\n setArticles((prevArticles) => [\n ...prevArticles,\n ...json.articles,\n ]);\n setStatus('success');\n } catch (err) {\n setStatus('error');\n }\n }\n\n return (\n \n {articles.map((contentData, index) => {\n return (\n = HOMEPAGE_ARTICLE_LIMIT\n }\n />\n );\n })}\n {status !== 'success' && (\n \n \n Show more\n \n \n )}\n {status === 'error' && (\n setStatus('idle')}\n popTimeout={100}\n >\n Hmm, we weren’t able to reach the server to fetch additional\n articles. Sorry about that! Please check your internet\n connection and try again. If the problem persists, please{' '}\n let me know.\n \n )}\n \n );\n}\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 48px;\n scroll-margin-top: 96px;\n`;\n\nconst ExpandWrapper = styled.form`\n position: relative;\n margin-top: -32px;\n\n &::before {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n height: 300px;\n background: linear-gradient(\n to top,\n var(--color-background) 0%,\n transparent 100%\n );\n pointer-events: none;\n }\n`;\n\nconst ExpandBtn = styled(ButtonPlayful)`\n --button-bg: var(--color-gray-900);\n --button-bg-highlight: var(--color-gray-800);\n position: relative;\n width: 250px;\n max-width: 100%;\n margin: 0 auto;\n\n html[data-color-mode='dark'] & {\n --button-bg: var(--color-gray-200);\n --button-bg-highlight: var(--color-gray-300);\n }\n`;\n\nexport default AllContentList;\n","/*\n Similar to the LayoutArticle, we have an empty box that sits behind the header and semi-blocks the content underneath from being spotted.\n*/\n'use client';\n\nimport * as React from 'react';\nimport { styled } from '@linaria/react';\n\nimport { HEADER_HEIGHT } from '@/constants';\nimport {\n DARK_COLORS_RAW,\n LIGHT_COLORS_RAW,\n vals,\n} from '@/constants/colors';\n\nfunction HeaderContentBlocker() {\n const [isStuck, setIsStuck] = React.useState(false);\n\n const ref = React.useRef(null);\n\n React.useEffect(() => {\n if (!ref.current) {\n return;\n }\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n setIsStuck(entry.intersectionRatio < 1);\n },\n {\n root: null,\n threshold: [0, 1.0],\n rootMargin: `-8px 0px 0px 0px`,\n }\n );\n\n observer.observe(ref.current);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n return ;\n}\n\nconst Wrapper = styled.div`\n grid-area: blocker;\n position: sticky;\n top: 0;\n left: 0;\n right: 0;\n height: ${HEADER_HEIGHT}rem;\n z-index: 1;\n opacity: 0;\n transition:\n background var(--color-swap-duration),\n opacity 300ms;\n pointer-events: none;\n\n &[data-is-stuck='true'] {\n opacity: 1;\n }\n\n html[data-color-mode='dark'] & {\n background: hsl(${vals(DARK_COLORS_RAW.colorBackground)} / 0.65);\n }\n html[data-color-mode='light'] & {\n background: hsl(${vals(LIGHT_COLORS_RAW.colorBackground)} / 0.9);\n }\n`;\n\nexport default HeaderContentBlocker;\n","// The rainbow is not shown on mobile, so we should only load it for desktop users. This code conditionally renders the lazy-loaded HomepageConfigurableArt component.\n// It does mean we lose the nice fade-in / fade-out when resizing, but that's a minor concern.\n\n'use client';\n\nimport dynamic from 'next/dynamic';\n\nimport { BREAKPOINT_SIZES } from '@/constants';\n\nimport useWindowDimensions from '@/hooks/use-window-dimensions';\n\nconst HomepageConfigurableArt = dynamic(\n () => import('./HomepageConfigurableArt'),\n {\n ssr: false,\n }\n);\n\nfunction LazyConfigurableArt() {\n const windowDimensions = useWindowDimensions();\n\n if (\n typeof windowDimensions.width !== 'number' ||\n windowDimensions.width < BREAKPOINT_SIZES.md\n ) {\n return null;\n }\n\n return ;\n}\n\nexport default LazyConfigurableArt;\n","export { default } from './SiteHeader';\n","// NOTE: This component duplicates a lot of the stuff in GlassyBackdrop, but I can't use that since I need hardcoded values for the CSS Custom Properties that will be transitioned.\n'use client';\n\nimport * as React from 'react';\nimport { styled } from '@linaria/react';\n\nimport {\n USE_HAMBURGER_MENU_BELOW,\n HOMEPAGE_PROMO,\n} from '@/constants';\nimport { DARK_COLORS, LIGHT_COLORS } from '@/constants/colors';\nimport useScrollPosition from '@/hooks/use-scroll-position';\nimport useFontRatio from '@/hooks/use-font-ratio';\n\nimport MaxWidthWrapper from '@/components/MaxWidthWrapper';\nimport SiteHeader from '@/components/SiteHeader';\n\nimport { SPACE_ABOVE_HEADER } from './Home.constants';\n\nfunction HomepageSiteHeader() {\n const [, scrollY] = useScrollPosition(100);\n const fontRatio = useFontRatio();\n\n // The glassy headers on this site have a neat trick: they use a subtle gradient to fade out the stuff near the top of the header. This prevents the awkward flickering colors as elements leave the viewport and are no longer blurred by the backdrop filter.\n // The challenge with this specific component is that the header starts above the sky, which is a blue-green gradient, but as the user scrolls, the header sits above the cloud, which is white/black. If we keep the greenish-bluish gradient, it looks really funny.\n // So, once the user scrolls past a certain threshold, we'll swap the color being used for the fade, and use CSS Houdini to animate the transition.\n\n const isOverThreshold =\n typeof scrollY === 'number' && scrollY > 300 * fontRatio;\n\n return (\n \n \n \n \n \n \n );\n}\n\nconst HeaderWrapper = styled.div`\n position: sticky;\n z-index: 2;\n top: 0;\n left: 0;\n right: 0;\n width: 100%;\n margin-top: ${SPACE_ABOVE_HEADER}rem;\n margin-inline: auto;\n background: linear-gradient(\n to top,\n transparent 0%,\n var(--top-color) 100%\n );\n /* HACK: Matching the --sky-from-duration from the homepage */\n transition: --top-color calc(var(--color-swap-duration) + 600ms)\n var(--color-swap-timing-function);\n\n html[data-color-mode='light'] & {\n @property --top-color {\n syntax: '';\n inherits: true;\n initial-value: ${LIGHT_COLORS['--color-sky-from']};\n }\n\n --top-color: ${LIGHT_COLORS['--color-sky-from']};\n\n &[data-is-over-threshold='true'] {\n --top-color: ${LIGHT_COLORS['--color-background']};\n transition: --top-color calc(var(--color-swap-duration))\n var(--color-swap-timing-function);\n }\n }\n\n html[data-color-mode='dark'] & {\n @property --top-color {\n syntax: '';\n inherits: true;\n initial-value: ${DARK_COLORS['--color-sky-from']};\n }\n --top-color: ${DARK_COLORS['--color-sky-from']};\n\n &[data-is-over-threshold='true'] {\n --top-color: ${DARK_COLORS['--color-background']};\n transition: --top-color calc(var(--color-swap-duration))\n var(--color-swap-timing-function);\n }\n }\n\n @media (max-width: ${USE_HAMBURGER_MENU_BELOW}rem) {\n margin-top: 0;\n }\n`;\n\nconst Backdrop = styled.div`\n --extended-by: 100px;\n --cutoff: calc(100% - var(--extended-by));\n position: absolute;\n inset: 0;\n bottom: calc(var(--extended-by) * -1);\n -webkit-mask-image: linear-gradient(\n to bottom,\n black 0,\n black var(--cutoff),\n transparent var(--cutoff)\n );\n mask-image: linear-gradient(\n to bottom,\n black 0,\n black var(--cutoff),\n transparent var(--cutoff)\n );\n backdrop-filter: blur(8px);\n pointer-events: none;\n background: transparent;\n transition: opacity 600ms;\n`;\n\nexport default HomepageSiteHeader;\n","'use client';\n\nimport React from 'react';\nimport { styled } from '@linaria/react';\n\nimport type { ContentData } from '@/types/content.types';\n\nimport Link from '@/components/Link';\nimport IconArrowBullet from '@/components/Icons/IconArrowBullet';\n\n// We only require a few fields from ContentData.\ntype ContentDataSubset = Pick<\n ContentData,\n 'slug' | 'title' | 'pathname'\n>;\n\ninterface Props {\n articles: Array;\n}\n\nfunction PopularArticleList({ articles }: Props) {\n const [hoveredArticleSlug, setHoveredArticleSlug] = React.useState<\n string | null\n >(null);\n\n return (\n \n {articles.map((contentData) => {\n return (\n
  • \n \n setHoveredArticleSlug(contentData.slug)\n }\n onMouseLeave={() => setHoveredArticleSlug(null)}\n >\n \n {contentData.title}\n \n
  • \n );\n })}\n
    \n );\n}\n\nconst Wrapper = styled.ol`\n display: flex;\n flex-direction: column;\n gap: 1rem;\n list-style-type: none;\n padding: 0;\n margin-left: -36px;\n`;\n\nconst ContentLink = styled(Link)`\n display: flex;\n gap: 16px;\n color: inherit;\n font-size: 1.1875rem;\n font-weight: var(--font-weight-medium);\n text-decoration: none;\n /* Not visible except for focus outline: */\n border-radius: 4px;\n\n &:focus-visible {\n outline-offset: 4px;\n }\n\n &:hover {\n color: var(--color-primary);\n }\n`;\n\nconst Bullet = styled(IconArrowBullet)`\n margin-top: 4px;\n`;\n\nexport default PopularArticleList;\n","import * as React from 'react';\nimport { styled } from '@linaria/react';\nimport { animated } from 'react-spring';\n\nimport useBoop from '@/hooks/use-boop';\n\nexport interface Props extends React.ComponentProps<'button'> {\n Icon: any;\n backgroundColor?: string;\n highlightColor?: string;\n iconSide?: 'left' | 'right';\n iconProps?: any;\n boopEffect?: any;\n discouraged?: boolean;\n href?: string;\n textAlign?: 'center' | 'true-center';\n children: React.ReactNode;\n}\n\nconst ButtonPlayful = React.forwardRef(\n function ButtonPlayful(\n {\n Icon,\n iconSide = 'left',\n iconProps = {},\n backgroundColor = 'var(--color-gray-900)',\n highlightColor = 'var(--color-gray-800)',\n boopEffect = { rotation: 10 },\n children,\n style = {},\n discouraged = false,\n href,\n textAlign = 'center',\n ...delegated\n }: Props,\n ref\n ) {\n const [boopStyle, trigger] = useBoop(boopEffect);\n\n return (\n {\n trigger();\n }}\n style={{\n '--background-color': backgroundColor,\n ...style,\n }}\n data-discouraged={discouraged}\n // @ts-ignore\n href={href}\n as={typeof href === 'string' ? 'a' : 'button'}\n {...delegated}\n >\n {Icon && (\n \n \n \n \n \n \n \n )}\n {children && (\n {children}\n )}\n {textAlign === 'true-center' && (\n \n )}\n
    \n );\n }\n);\n\ninterface WrapperProps {\n style: React.CSSProperties;\n}\n\nconst Wrapper = styled.button`\n --height: 2.625rem;\n display: flex;\n align-items: center;\n border-radius: 4px;\n background: var(--background-color);\n color: var(--text-color, white);\n height: var(--height);\n font-size: 1rem;\n text-decoration: none;\n\n &:focus {\n outline-offset: 3px;\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.325;\n }\n\n &[data-discouraged='true'] {\n cursor: not-allowed;\n filter: contrast(0.75) brightness(0.75);\n }\n`;\n\nconst Col = styled.span`\n position: relative;\n height: var(--height);\n width: var(--height);\n`;\n\nconst IconCol = styled(Col)`\n --indent-by: 0.8;\n\n transition: transform 200ms cubic-bezier(0, 0.67, 0.6, 1.24);\n\n ${Wrapper}:active & {\n transform: scale(var(--indent-by));\n transition: transform 0ms;\n }\n\n svg {\n display: block;\n transition: transform 300ms cubic-bezier(0, 0.67, 0.6, 1.24);\n\n ${Wrapper}:active & {\n transform: scale(calc(1 / var(--indent-by)));\n transition: transform 0ms;\n }\n }\n`;\n\nconst IconBox = styled.span`\n position: absolute;\n top: 4px;\n left: 4px;\n right: 4px;\n bottom: 4px;\n display: grid;\n place-content: center;\n border-radius: 2px;\n background: var(--background-color);\n`;\n\nconst IconWrapper = styled(animated.span)`\n display: block;\n`;\n\nconst ChildWrapper = styled.span`\n flex: 1;\n display: flex;\n justify-content: center;\n padding: 0 16px;\n padding-right: calc(16px + 4px);\n font-weight: var(--font-weight-medium);\n font-size: inherit;\n white-space: nowrap;\n`;\n\nexport default ButtonPlayful;\n","export { default } from './ButtonPlayful';\n","'use client';\n\nimport React from 'react';\nimport { styled } from '@linaria/react';\nimport { useSpring, animated } from 'react-spring';\n\nimport { BREAKPOINTS, TIGHT_SPRING } from '@/constants';\nimport useSound from '@/hooks/use-sound';\nimport usePrefersReducedMotion from '@/hooks/use-prefers-reduced-motion';\n\nimport Link from '@/components/Link';\n\ninterface Props {\n href?: string;\n onClick?: () => void;\n children: React.ReactNode;\n}\n\nconst CategoryPill = ({ href, onClick, children }: Props) => {\n const [isHovering, setIsHovering] = React.useState(false);\n const prefersReducedMotion = usePrefersReducedMotion();\n\n const backgroundSpring = useSpring({\n opacity: isHovering ? 1 : 0.8,\n transform: isHovering ? `scale(1.06)` : `scale(0.99)`,\n config: TIGHT_SPRING,\n immediate: prefersReducedMotion,\n });\n\n const [playHoverSound, { stop }] = useSound(\n '/sounds/plunger-immediate.mp3',\n {\n volume: 0.15,\n }\n );\n\n const as = href ? Link : 'button';\n\n return (\n {\n setIsHovering(true);\n playHoverSound();\n }}\n onMouseLeave={() => {\n setIsHovering(false);\n stop();\n }}\n onClick={onClick}\n >\n \n {children}\n \n );\n};\n\n// NOTE: This won't actually render an . It's overwritten by `as` in the component definition, either a Link or \"button\".\nconst LinkWrapper = styled.a`\n position: relative;\n display: inline-block;\n border-radius: 8px;\n padding: 0.3125rem 0.75rem;\n font-size: 0.875rem;\n color: inherit;\n text-decoration: none;\n isolation: isolate;\n\n @media ${BREAKPOINTS.smAndSmaller} {\n padding: 6px 18px;\n font-size: 1rem;\n }\n`;\n\nconst Background = styled(animated.div)`\n position: absolute;\n z-index: -1;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border-radius: inherit;\n background-color: var(--color-cloud-500);\n transform-origin: center center;\n transition: outline-color var(--color-swap-duration);\n outline: 1px solid transparent;\n outline-offset: -1px;\n\n html[data-color-mode='dark'] & {\n background-color: transparent;\n outline: 1px solid var(--color-gray-300);\n }\n`;\n\nexport default CategoryPill;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ExternalLink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgM2g2djYiIC8+CiAgPHBhdGggZD0iTTEwIDE0IDIxIDMiIC8+CiAgPHBhdGggZD0iTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/external-link\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ExternalLink = createLucideIcon('ExternalLink', [\n ['path', { d: 'M15 3h6v6', key: '1q9fwt' }],\n ['path', { d: 'M10 14 21 3', key: 'gplh6r' }],\n ['path', { d: 'M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6', key: 'a6xqqp' }],\n]);\n\nexport default ExternalLink;\n","import React from 'react';\nimport { styled } from '@linaria/react';\n\nimport useSound from '@/hooks/use-sound';\n\nimport Link from '@/components/Link';\n\nconst ARROW_DELAY = 125;\n\ninterface Props extends React.HTMLAttributes {\n href?: string;\n shouldShowFirstArrow: boolean;\n increaseTargetBy?: number;\n children: React.ReactNode;\n}\n\nfunction PoppingArrows({\n href,\n shouldShowFirstArrow,\n increaseTargetBy = 0,\n children,\n ...delegated\n}: Props) {\n const [isHovering, setIsHovering] = React.useState(false);\n\n const [playRising, { stop }] = useSound('/sounds/rising-pops.mp3', {\n volume: 0.25,\n });\n\n return (\n serves as the main focusable link.\n tabIndex={-1}\n onMouseEnter={() => {\n setIsHovering(true);\n playRising();\n }}\n onMouseLeave={() => {\n setIsHovering(false);\n stop();\n }}\n {...delegated}\n >\n \n {children}\n \n \n \n\n \n \n \n \n \n \n );\n}\n\nconst Wrapper = styled(Link)`\n position: relative;\n display: inline-flex;\n align-items: center;\n font-size: 1rem;\n font-weight: var(--font-weight-bold);\n color: inherit;\n text-decoration: none;\n\n &:focus-visible {\n outline: none;\n }\n`;\n\nconst ArrowWrapper = styled.div`\n position: relative;\n margin-left: 8px;\n`;\n\nconst ArrowSvg = styled.svg`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n transform: translateY(-6px);\n max-width: unset;\n\n path {\n stroke: var(--color-primary);\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n`;\n\nconst TargetBump = styled.div`\n position: absolute;\n`;\n\nexport default PoppingArrows;\n","'use client';\n\nimport React from 'react';\nimport { styled } from '@linaria/react';\nimport { ExternalLink } from 'lucide-react';\n\nimport type { ContentData } from '@/types/content.types';\n\nimport Link from '@/components/Link';\nimport VisuallyHidden from '@/components/VisuallyHidden';\nimport PoppingArrows from './PoppingArrows';\n\ninterface Props extends React.HTMLAttributes {\n contentData: ContentData;\n includeEnterAnimation?: boolean;\n}\n\nfunction ContentPreview({\n contentData,\n includeEnterAnimation,\n ...delegated\n}: Props) {\n const {\n title,\n subtitle,\n abstract,\n pathname,\n externalUrl,\n externalLabel,\n } = contentData;\n\n const [isHoveringOverCard, setIsHoveringOverCard] =\n React.useState(false);\n\n const isExternal = !!externalLabel;\n\n const href = isExternal ? externalUrl : pathname;\n\n return (\n setIsHoveringOverCard(true)}\n onMouseLeave={() => setIsHoveringOverCard(false)}\n >\n \n <span dangerouslySetInnerHTML={{ __html: title }} />\n {isExternal && <StyledExternalLink size={18} />}\n \n {subtitle && {subtitle}}\n\n {abstract}\n\n \n {isExternal ? (\n `Read on ${externalLabel}`\n ) : (\n <>\n Read more\n : {title}\n \n )}\n \n \n );\n}\n\nconst Wrapper = styled.article`\n position: relative;\n display: block;\n text-decoration: none;\n color: var(--color-text);\n\n &[data-include-enter-animation='true'] {\n animation:\n entrez 900ms cubic-bezier(0.17, 0.67, 0.34, 1),\n fadeIn 500ms;\n\n @media (prefers-reduced-motion: reduce) {\n animation: fadeIn 500ms;\n }\n }\n\n @keyframes entrez {\n from {\n transform: translateY(-32px);\n }\n }\n`;\n\nconst Title = styled(Link)`\n display: flex;\n align-items: baseline;\n gap: 12px;\n width: fit-content;\n padding-inline: 4px;\n margin-inline: -4px;\n border-radius: 2px;\n color: inherit;\n text-decoration: none;\n font-size: 1.375rem;\n font-weight: var(--font-weight-bold);\n outline-offset: 4px;\n outline-color: var(--color-primary);\n\n &:hover {\n text-decoration: underline;\n text-decoration-thickness: 2px;\n text-decoration-color: var(--color-primary);\n text-underline-offset: 2px;\n }\n\n /*\n I can add certain HTML elements to the title, in the markdown.\n NOTE: This code is semi-duplicated in /components/BlogPostTitle\n */\n code {\n position: relative;\n font-family: var(--font-family-mono);\n font-size: 0.9375em;\n display: inline-block;\n background: var(--color-cloud-300);\n padding-inline: 0.25em;\n border-radius: 4px;\n }\n &:hover code::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0.25rem;\n border-bottom: 2px solid var(--color-primary);\n }\n\n html[data-color-mode='dark'] & code {\n background: var(--color-gray-200);\n }\n`;\n\nconst Subheading = styled.p`\n color: var(--color-gray-600);\n font-weight: var(--font-weight-medium);\n font-size: calc(17 / 16 * 1rem);\n`;\n\nconst Excerpt = styled.p`\n font-size: 1rem;\n margin-block: 16px;\n white-space: pre-wrap;\n`;\n\nconst StyledExternalLink = styled(ExternalLink)`\n color: var(--color-gray-500);\n transform: translateY(1.5px);\n`;\n\nexport default ContentPreview;\n","import * as React from 'react';\nimport { styled } from '@linaria/react';\n\nimport { HEADER_WIDTH } from '@/constants';\n\nexport interface Props {\n as?: keyof JSX.IntrinsicElements | React.ComponentType;\n maxWidth?: number | string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nfunction MaxWidthWrapper({\n as = 'div',\n maxWidth,\n style = {},\n children,\n ...delegated\n}: Props) {\n if (typeof maxWidth === 'undefined') {\n maxWidth = `${HEADER_WIDTH}rem`;\n } else if (typeof maxWidth === 'number') {\n // Historically, I’ve specified the maximum width in pixels, and I'm too lazy to find and update all of the spots where I've specified them. We’ll divide by 16 to convert to rems:\n maxWidth = `${maxWidth / 16}rem`;\n }\n\n return (\n \n {children}\n \n );\n}\n\nconst Wrapper = styled.div`\n width: 100%;\n max-width: var(--max-width);\n margin-inline: auto;\n padding-inline: var(--viewport-padding);\n`;\n\nexport default MaxWidthWrapper;\n","export { default } from './MaxWidthWrapper';\nexport type { Props } from './MaxWidthWrapper';\n","// By default, 1rem is equivalent to 16px, but this ratio can change depending on the user’s specified default font size. This custom hook allows us to check what the current value is. This is useful if, for example, I want to change the UI based on whether or not the user has bumped up their default font size\nimport React from 'react';\n\nfunction useFontRatio() {\n const [ratio, setRatio] = React.useState(1);\n\n React.useEffect(() => {\n let tempElement: HTMLDivElement | null = null;\n\n function calculateRatio() {\n if (!tempElement) {\n tempElement = document.createElement('div');\n\n tempElement.style.fontSize = '1rem';\n\n document.body.appendChild(tempElement);\n }\n\n const computedFontSize = getComputedStyle(tempElement).fontSize;\n\n const fontSize = parseFloat(computedFontSize);\n\n setRatio(fontSize / 16);\n\n document.body.removeChild(tempElement);\n }\n\n calculateRatio();\n\n return () => {\n if (tempElement) {\n try {\n document.body.removeChild(tempElement);\n } catch (err) {\n // Sometimes this happens for unclear reasons. I need to investigate!\n }\n }\n };\n }, []);\n\n return ratio;\n}\n\nexport default useFontRatio;\n","import React from 'react';\n\nimport { throttle } from '@/utils';\n\ninterface ScrollPosition {\n x: number | null;\n y: number | null;\n}\n\nconst useScrollPosition = (throttleBy = 500) => {\n const [scrollPosition, setScrollPosition] =\n React.useState({\n x: null,\n y: null,\n });\n\n React.useEffect(() => {\n const handleScroll = throttle(() => {\n setScrollPosition({ x: window.scrollX, y: window.scrollY });\n }, throttleBy);\n\n // Calculate the initial scroll position:\n handleScroll();\n\n window.addEventListener('scroll', handleScroll);\n\n return () => window.removeEventListener('scroll', handleScroll);\n }, [throttleBy]);\n\n return [scrollPosition.x, scrollPosition.y];\n};\n\nexport default useScrollPosition;\n","/*\n This hook provides responsive window dimensions.\n\n SPECIAL THING: by default, window.innerWidth is always in pixels, and doesn't change as the user scales up their default font size. This isn't useful; if the user cranks their default font size to 32px, the window essentially shrinks by half, but `window.innerWidth` doesn't change.\n This hook solves for this. The values it returns are in pixels, but scaled based on the user’s default font size.\n*/\nimport React from 'react';\n\nimport { throttle } from '@/utils';\n\ninterface WindowDimensions {\n width: number | undefined;\n height: number | undefined;\n clientWidth: number | undefined;\n}\n\nconst useWindowDimensionsInRems = () => {\n const [windowDimensions, setWindowDimensions] =\n React.useState({\n width: undefined,\n height: undefined,\n clientWidth: undefined,\n });\n\n React.useEffect(() => {\n const calculatorElement = document.createElement('div');\n calculatorElement.style.fontSize = '1rem';\n\n document.body.appendChild(calculatorElement);\n\n const fontSize = parseFloat(\n window.getComputedStyle(calculatorElement).fontSize\n );\n\n const ratio = 16 / fontSize;\n\n setWindowDimensions({\n width: window.innerWidth * ratio,\n height: window.innerHeight * ratio,\n clientWidth: document.documentElement.clientWidth * ratio,\n });\n\n const handleResize = throttle(() => {\n setWindowDimensions({\n width: window.innerWidth * ratio,\n height: window.innerHeight * ratio,\n clientWidth: document.documentElement.clientWidth * ratio,\n });\n }, 250);\n\n window.addEventListener('resize', handleResize);\n\n return () => {\n // Hm so weirdly, sometimes the `calculatorElement` is already removed from the DOM by the time this cleanup function runs. So we wrap this in a try/catch to prevent errors.\n try {\n document.body.removeChild(calculatorElement);\n window.removeEventListener('resize', handleResize);\n } catch (err) {}\n };\n }, []);\n\n return windowDimensions;\n};\n\nexport default useWindowDimensionsInRems;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wgvwonx\":\"wgvwonx\",\"edliwny\":\"edliwny\",\"ehtpyuh\":\"ehtpyuh\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wuiocxb\":\"wuiocxb\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"w180az57\":\"w180az57\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"h1w8168s\":\"h1w8168s\",\"bui2te1\":\"bui2te1\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrmemhr\":\"wrmemhr\",\"b17wfnta\":\"b17wfnta\",\"swqn97u\":\"swqn97u\",\"f19h6ry9\":\"f19h6ry9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"w5qey2\":\"w5qey2\",\"c1lywb4d\":\"c1lywb4d\",\"bnak8zc\":\"bnak8zc\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"w1tujqyh\":\"w1tujqyh\",\"m4jraz6\":\"m4jraz6\",\"s1wnoxj8\":\"s1wnoxj8\",\"cwxty3h\":\"cwxty3h\",\"n1yknzbp\":\"n1yknzbp\",\"sr4thyc\":\"sr4thyc\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"w19mrn5v\":\"w19mrn5v\",\"c1rpf4ut\":\"c1rpf4ut\",\"iwv8n0j\":\"iwv8n0j\",\"i1qpbbb9\":\"i1qpbbb9\",\"i1m1cbkp\":\"i1m1cbkp\",\"c7sw782\":\"c7sw782\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"l1e3k5zw\":\"l1e3k5zw\",\"b4xggkn\":\"b4xggkn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"w124ae9d\":\"w124ae9d\",\"entrez-w124ae9d\":\"entrez-w124ae9d\",\"fadeIn\":\"fadeIn\",\"t1afyvh0\":\"t1afyvh0\",\"sirpwu7\":\"sirpwu7\",\"e1la1cd6\":\"e1la1cd6\",\"snnn5ws\":\"snnn5ws\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wohac9x\":\"wohac9x\",\"a1i377xc\":\"a1i377xc\",\"a11yvlpg\":\"a11yvlpg\",\"t1s5uocr\":\"t1s5uocr\"};"],"names":["dynamic","ssr","Wrapper","styled","name","class","propsAsIs","ExpandWrapper","ExpandBtn","ButtonPlayful","AllContentList","initialArticles","articles","setArticles","React","Array","status","ContentData","wrapperRef","HTMLDivElement","handleSubmit","event","preventDefault","setStatus","response","json","ok","prevArticles","err","map","contentData","index","slug","Spinner","y","HeaderContentBlocker","isStuck","setIsStuck","ref","current","observer","IntersectionObserver","entry","intersectionRatio","root","threshold","observe","disconnect","String","HomepageConfigurableArt","LazyConfigurableArt","windowDimensions","useWindowDimensions","width","BREAKPOINT_SIZES","md","HeaderWrapper","Backdrop","HomepageSiteHeader","scrollY","useScrollPosition","fontRatio","useFontRatio","isOverThreshold","position","HOMEPAGE_PROMO","ContentLink","Link","Bullet","IconArrowBullet","PopularArticleList","hoveredArticleSlug","setHoveredArticleSlug","pathname","title","HTMLButtonElement","Props","Icon","iconSide","iconProps","backgroundColor","highlightColor","boopEffect","rotation","children","style","discouraged","href","textAlign","delegated","boopStyle","trigger","useBoop","order","Col","IconCol","_exp","IconBox","IconWrapper","animated","span","ChildWrapper","LinkWrapper","Background","_exp2","div","CategoryPill","onClick","isHovering","setIsHovering","prefersReducedMotion","usePrefersReducedMotion","backgroundSpring","useSpring","opacity","config","TIGHT_SPRING","immediate","playHoverSound","stop","useSound","volume","as","ArrowWrapper","ArrowSvg","TargetBump","PoppingArrows","shouldShowFirstArrow","increaseTargetBy","playRising","left","right","bottom","transition","ARROW_DELAY","Title","Subheading","Excerpt","StyledExternalLink","ContentPreview","includeEnterAnimation","subtitle","abstract","externalUrl","externalLabel","isHoveringOverCard","setIsHoveringOverCard","isExternal","__html","MaxWidthWrapper","maxWidth","HEADER_WIDTH","ratio","setRatio","tempElement","document","createElement","fontSize","body","appendChild","computedFontSize","removeChild","throttleBy","scrollPosition","setScrollPosition","x","handleScroll","throttle","window","scrollX","addEventListener","removeEventListener","setWindowDimensions","useWindowDimensionsInRems","undefined","height","clientWidth","calculatorElement","parseFloat","getComputedStyle","innerWidth","innerHeight","documentElement","handleResize"],"sourceRoot":"","ignoreList":[]}