@treely/strapi-slices 5.11.3 → 5.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ContextProvider/ContextProvider.d.ts +1 -2
- package/dist/constants/strapi.d.ts +1 -0
- package/dist/index.d.ts +6 -3
- package/dist/integrations/strapi/getAllSlugsFromStrapi.d.ts +10 -0
- package/dist/integrations/strapi/getStaticPathsFromStrapi.d.ts +1 -0
- package/dist/integrations/strapi/getStaticPropsFromStrapi.d.ts +1 -0
- package/dist/integrations/strapi/getStrapiCollectionType.d.ts +10 -0
- package/dist/integrations/strapi/getStrapiSingleType.d.ts +8 -0
- package/dist/models/Locale.d.ts +3 -1
- package/dist/models/LocalizedEntity.d.ts +7 -0
- package/dist/models/PageProps.d.ts +1 -0
- package/dist/models/strapi/StrapiGlobal.d.ts +2 -0
- package/dist/strapi-slices.cjs.development.js +205 -31
- package/dist/strapi-slices.cjs.development.js.map +1 -1
- package/dist/strapi-slices.cjs.production.min.js +1 -1
- package/dist/strapi-slices.cjs.production.min.js.map +1 -1
- package/dist/strapi-slices.esm.js +205 -34
- package/dist/strapi-slices.esm.js.map +1 -1
- package/dist/utils/getMessages.d.ts +142 -0
- package/package.json +1 -1
- package/src/components/ContextProvider/ContextProvider.tsx +3 -5
- package/src/components/MinimalProviders/MinimalProviders.tsx +2 -8
- package/src/constants/strapi.ts +2 -0
- package/src/index.tsx +8 -2
- package/src/integrations/strapi/getAllSlugsFromStrapi.test.ts +33 -0
- package/src/integrations/strapi/getAllSlugsFromStrapi.ts +50 -0
- package/src/integrations/strapi/getPortfolioProjects.test.ts +24 -0
- package/src/integrations/strapi/getPortfolioProjects.ts +25 -5
- package/src/integrations/strapi/getStaticPathsFromStrapi.ts +1 -0
- package/src/integrations/strapi/getStaticPropsFromStrapi.ts +1 -0
- package/src/integrations/strapi/getStrapiCollectionType.test.ts +65 -0
- package/src/integrations/strapi/getStrapiCollectionType.ts +61 -0
- package/src/integrations/strapi/getStrapiSingleType.test.ts +53 -0
- package/src/integrations/strapi/getStrapiSingleType.ts +50 -0
- package/src/models/Locale.ts +3 -1
- package/src/models/LocalizedEntity.ts +9 -0
- package/src/models/PageProps.ts +1 -0
- package/src/models/strapi/StrapiGlobal.ts +2 -0
- package/src/test/strapiMocks/minimalGlobalData.ts +1 -0
- package/src/utils/getMessages.ts +18 -0
- package/src/utils/mergeGlobalAndStrapiBlogPostData.test.ts +25 -4
- package/src/utils/mergeGlobalAndStrapiBlogPostData.ts +1 -0
- package/src/utils/mergeGlobalAndStrapiCustomerStoryData.test.ts +24 -4
- package/src/utils/mergeGlobalAndStrapiCustomerStoryData.ts +1 -0
- package/src/utils/mergeGlobalAndStrapiPageData.test.ts +22 -0
- package/src/utils/mergeGlobalAndStrapiPageData.ts +1 -0
- package/src/utils/mergeGlobalAndStrapiProjectData.test.ts +25 -4
- package/src/utils/mergeGlobalAndStrapiProjectData.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strapi-slices.cjs.production.min.js","sources":["../src/constants/strapi.ts","../src/constants/api.ts","../src/slices/TextCardGrid/TextCardGrid.tsx","../src/integrations/fpmClient.ts","../src/integrations/strapi/strapiClient.ts","../src/integrations/strapi/getPortfolioProjects.ts","../src/integrations/strapi/getStaticPathsFromStrapi.ts","../src/integrations/strapi/getStaticPropsFromStrapi.ts","../src/utils/strapiMediaUrl.ts","../src/constants/metadata.ts","../src/constants/slicesConfig.ts","../src/utils/strapiLinkUrl.ts","../src/components/FullScreenImage/ZoomableImage.tsx","../src/components/FullScreenImage/FullScreenImage.tsx","../src/constants/breakpoints.ts","../src/slices/FullWidthImage/FullWidthImage.tsx","../src/utils/openHubSpotChat.ts","../src/components/StrapiLinkButton/StrapiLinkButton.tsx","../src/slices/Hero/Hero.tsx","../src/slices/IconGrid/IconGrid.tsx","../src/icons/LinkedInIcon.tsx","../src/components/StrapiLinkButtonWithIcon/StrapiLinkButtonWithIcon.tsx","../src/slices/ImageGrid/ImageGrid.tsx","../src/slices/ImageTextSequence/ImageTextSequence.tsx","../src/slices/LeftTextRightCard/LeftTextRightCard.tsx","../src/slices/LogoGridWithText/LogoGridWithText.tsx","../src/slices/MapHero/styles.ts","../src/slices/MapHero/MapHero.tsx","../src/utils/convertToKebabCase.ts","../src/slices/QAndA/QAndA.tsx","../src/slices/QuoteCards/QuoteCards.tsx","../src/slices/RichTextSection/RichTextSection.tsx","../src/slices/Steps/Steps.tsx","../src/models/CreditsAvailableState.ts","../src/slices/TextCarousel/styles.ts","../src/rootMessages.de.ts","../src/components/CreditsAvailableBadge/messages.de.ts","../src/components/portfolio/DocumentsDownloadList/messages.de.ts","../src/components/portfolio/PortfolioProjectCard/messages.de.ts","../src/components/portfolio/ProjectInfo/messages.de.ts","../src/components/portfolio/SmallCheckout/messages.de.ts","../src/slices/Comparison/messages.de.ts","../src/slices/Cta/messages.de.ts","../src/components/CustomerCard/messages.de.ts","../src/components/CustomerQuoteCard/messages.de.ts","../src/slices/Glossary/messages.de.ts","../src/slices/ProjectFacts/messages.de.ts","../src/slices/ProjectsMap/messages.de.ts","../src/slices/ShopCheckout/messages.de.ts","../src/slices/TextCarousel/messages.de.ts","../src/slices/Timeline/messages.de.ts","../src/unit.messages.de.ts","../src/rootMessages.en.ts","../src/components/CreditsAvailableBadge/messages.en.ts","../src/components/portfolio/DocumentsDownloadList/messages.en.ts","../src/components/portfolio/PortfolioProjectCard/messages.en.ts","../src/components/portfolio/ProjectInfo/messages.en.ts","../src/components/portfolio/SmallCheckout/messages.en.ts","../src/slices/Comparison/messages.en.ts","../src/slices/Cta/messages.en.ts","../src/components/CustomerCard/messages.en.ts","../src/components/CustomerQuoteCard/messages.en.ts","../src/slices/Glossary/messages.en.ts","../src/slices/ProjectFacts/messages.en.ts","../src/slices/ProjectsMap/messages.en.ts","../src/slices/ShopCheckout/messages.en.ts","../src/slices/TextCarousel/messages.en.ts","../src/slices/Timeline/messages.en.ts","../src/unit.messages.en.ts","../src/constants/globalStyle.ts","../src/components/ContextProvider/ContextProvider.tsx","../src/slices/TextCarousel/TextCarousel.tsx","../src/slices/TextWithTextCards/TextWithTextCards.tsx","../src/constants/mapbox.ts","../src/constants/formatter.ts","../src/components/portfolio/PortfolioProjectCard/PortfolioProjectCard.tsx","../src/slices/TextWithCard/TextWithCard.tsx","../src/slices/LinkCardsGrid/LinkCardsGrid.tsx","../src/slices/SmallHero/SmallHero.tsx","../src/slices/Blog/styles.ts","../src/slices/Blog/Blog.tsx","../src/slices/ProjectsGrid/ProjectsGrid.tsx","../src/constants/fontCustomizations.ts","../src/components/MinimalProviders/MinimalProviders.tsx","../src/components/CreditsAvailableBadge/CreditsAvailableBadge.tsx","../src/slices/ProjectsMap/MapMarker.tsx","../src/slices/ProjectsMap/mapboxStyle.ts","../src/slices/ProjectsMap/ProjectsMap.tsx","../src/slices/Cta/Cta.tsx","../src/utils/mergeBoundingBoxes.ts","../src/slices/Video/Video.tsx","../src/slices/FullWidthHighlightQuote/FullWidthHighlightQuote.tsx","../src/slices/FullWidthImageSlider/styles.ts","../src/slices/FullWidthImageSlider/utils.ts","../src/slices/FullWidthImageSlider/FullWidthImageSlider.tsx","../src/slices/SideBySideImages/SideBySideImages.tsx","../src/slices/CtaOnly/CtaOnly.tsx","../src/slices/Glossary/Glossary.tsx","../src/slices/ShopCheckout/ShopCheckout.tsx","../src/constants/domain.ts","../src/slices/Facts/Facts.tsx","../src/slices/BlogCards/BlogCards.tsx","../src/components/portfolio/SmallCheckout/SmallCheckout.tsx","../src/components/portfolio/ProjectInfo/ProjectInfo.tsx","../src/utils/convertCo2AmountKgToTons.ts","../src/utils/getTimeSpanInYears.ts","../src/utils/convertAreaM2ToHa.ts","../src/components/portfolio/DocumentsDownloadList/DocumentsDownloadList.tsx","../src/components/portfolio/Contact/Contact.tsx","../src/slices/ProjectFacts/ProjectFacts.tsx","../src/components/CustomerCard/CustomerCard.tsx","../src/components/CustomerQuoteCard/CustomerQuoteCard.tsx","../src/components/LogoCard/LogoCard.tsx","../src/slices/CustomerStories/CustomerStories.tsx","../src/slices/Comparison/Icon.tsx","../src/slices/Comparison/Comparison.tsx","../src/slices/Timeline/Timeline.tsx","../src/components/PreviewAlert/PreviewAlert.tsx","../src/components/SEOTags/SEOTags.tsx","../src/components/SliceRenderer/SliceRenderer.tsx","../src/utils/mergeGlobalAndStrapiBlogPostData.ts","../src/utils/mergeGlobalAndStrapiCustomerStoryData.ts","../src/utils/mergeGlobalAndStrapiPageData.ts","../src/utils/mergeGlobalAndStrapiProjectData.ts"],"sourcesContent":["export const STRAPI_URI =\n process.env.NEXT_PUBLIC_STRAPI_URI || 'http://127.0.0.1:1337';\n\nexport const STRAPI_DEFAULT_PAGE_SIZE = '100';\n","export const API_URI =\n process.env.NEXT_PUBLIC_API_URI || 'http://localhost:4001';\nexport const FPM_API_URI =\n process.env.NEXT_PUBLIC_FPM_API_URI || 'https://api.fpm.t-staging.com';\nexport const CDN_URI = 'https://cdn.tree.ly';\n","import React from 'react';\nimport { css } from '@emotion/react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n RichText,\n SimpleGrid,\n Text,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { CaretRight } from '@phosphor-icons/react';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\ninterface TextCardGridSlice extends StrapiDefaultHeader {\n variant: 'shape' | 'image';\n cards: {\n id: number;\n tagline?: string;\n title: string;\n text: string;\n image: StrapiImage;\n buttons?: StrapiLink[];\n }[];\n}\nexport interface TextCardGridProps {\n slice: TextCardGridSlice;\n}\n\nenum ShapePosition {\n topLeft = 'top-left',\n topRight = 'top-right',\n bottomLeft = 'bottom-left',\n bottomRight = 'bottom-right',\n unset = 'unset',\n}\n\nconst shapePositions: ShapePosition[] = [\n ShapePosition.topLeft,\n ShapePosition.bottomRight,\n ShapePosition.topRight,\n ShapePosition.bottomLeft,\n ShapePosition.topRight,\n ShapePosition.bottomLeft,\n ShapePosition.topLeft,\n ShapePosition.bottomRight,\n];\n\nconst oppositesOfCorners = {\n [ShapePosition.bottomLeft]: ShapePosition.topRight,\n [ShapePosition.topRight]: ShapePosition.bottomLeft,\n [ShapePosition.bottomRight]: ShapePosition.topLeft,\n [ShapePosition.topLeft]: ShapePosition.bottomRight,\n [ShapePosition.unset]: ShapePosition.unset,\n};\n\ntype Variant = {\n padding: (string | null)[];\n positionIcon: (index: number) => ShapePosition;\n width: string;\n height: string;\n position: 'absolute' | 'relative';\n mb: string;\n};\n\nconst variants: { shape: Variant; image: Variant } = {\n shape: {\n padding: ['6', null, null, '8'],\n positionIcon: (index: number) => shapePositions[index],\n width: '40',\n height: '40',\n position: 'absolute',\n mb: 'unset',\n },\n image: {\n padding: ['6', null, null, '8'],\n positionIcon: () => ShapePosition.unset,\n width: '24',\n height: '24',\n position: 'relative',\n mb: '10',\n },\n};\n\nexport const TextCardGrid: React.FC<TextCardGridProps> = ({\n slice,\n}: TextCardGridProps) => {\n const [primary800] = useToken('colors', ['primary.800']);\n\n return (\n <DefaultSectionContainer backgroundColor={primary800} title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center', color: 'white' }}\n titleProps={{\n textAlign: 'center',\n maxW: '2xl',\n marginX: 'auto',\n color: 'white',\n }}\n textProps={{\n textAlign: 'center',\n maxW: 'xl',\n marginX: 'auto',\n color: 'whiteAlpha.800',\n }}\n />\n\n <SimpleGrid\n mt={['14', null, null, '24']}\n columns={3}\n justifyItems=\"center\"\n gap=\"20\"\n rowGap=\"16\"\n minChildWidth={['100%', null, '16rem']}\n >\n {slice.cards.map(\n ({ id, tagline, title, text, image, buttons }, index) => (\n <Box\n key={id}\n backgroundColor=\"white\"\n zIndex=\"base\"\n padding={variants[slice.variant].padding}\n boxShadow=\"lg\"\n borderRadius=\"2xl\"\n minHeight=\"2xs\"\n width=\"full\"\n maxWidth={slice.cards.length > 1 ? 'unset' : 'xl'}\n position=\"relative\"\n display=\"flex\"\n flexDir=\"column\"\n alignItems=\"flex-start\"\n justifyContent={\n slice.variant === 'shape' ? 'flex-end' : 'flex-start'\n }\n overflow=\"hidden\"\n >\n <Box\n position={variants[slice.variant].position}\n width={variants[slice.variant].width}\n height={variants[slice.variant].height}\n mb={variants[slice.variant].mb}\n top={\n variants[slice.variant].positionIcon(index).includes('top')\n ? '-4'\n : 'unset'\n }\n left={\n variants[slice.variant].positionIcon(index).includes('left')\n ? '-4'\n : 'unset'\n }\n right={\n variants[slice.variant]\n .positionIcon(index)\n .includes('right')\n ? '-4'\n : 'unset'\n }\n bottom={\n variants[slice.variant]\n .positionIcon(index)\n .includes('bottom')\n ? '-4'\n : 'unset'\n }\n borderBottomRightRadius={\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ].includes('bottomRight')\n ? 'full'\n : 'unset'\n }\n borderBottomLeftRadius={\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ].includes('bottomLeft')\n ? 'full'\n : 'unset'\n }\n borderTopRightRadius={\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ].includes('topRight')\n ? 'full'\n : 'unset'\n }\n borderTopLeftRadius={\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ].includes('topLeft')\n ? 'full'\n : 'unset'\n }\n css={\n variants[slice.variant]\n .positionIcon(index)\n .includes('unset')\n ? css`\n & span,\n div,\n img {\n border-radius: var(--boemly-radii-xl);\n }\n `\n : css`\n & span,\n div,\n img {\n border-${\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ]\n }-radius: var(--boemly-radii-full);\n }\n `\n }\n >\n <Image\n src={strapiMediaUrl(image.img, 'small')}\n alt={image.alt}\n fill\n style={{ objectFit: image.objectFit || 'cover' }}\n />\n </Box>\n <Box zIndex=\"aboveBase\" width=\"full\">\n {tagline && (\n <Text color=\"black\" size=\"smMonoNormal\" mb=\"2\">\n {tagline}\n </Text>\n )}\n <Heading as=\"h4\" size=\"xl\" mb=\"3\">\n {title}\n </Heading>\n <RichText\n content={text}\n listProps={{\n textColor: 'gray.500',\n textSize: 'smRegularNormal',\n }}\n textProps={{\n color: 'gray.500',\n size: 'smRegularNormal',\n }}\n />\n {buttons && !!buttons.length && (\n <Flex\n mt=\"4\"\n gap=\"3\"\n flexDir={['column', null, null, null, 'row']}\n >\n {buttons.map((button, buttonIndex) => (\n <StrapiLinkButton\n key={button.id}\n link={button}\n size=\"sm\"\n rightIcon={\n buttonIndex === 0 ? (\n <CaretRight size=\"10\" weight=\"bold\" />\n ) : undefined\n }\n variant={buttonIndex === 0 ? 'outline' : 'ghost'}\n />\n ))}\n </Flex>\n )}\n </Box>\n </Box>\n )\n )}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import axios from 'axios';\nimport qs from 'qs';\nimport { setupCache } from 'axios-cache-interceptor';\nimport { FPM_API_URI } from '../constants/api';\n\nconst fpmClient = setupCache(\n axios.create({\n baseURL: `${FPM_API_URI}/v1`,\n paramsSerializer: (p) => qs.stringify(p, { encodeValuesOnly: true }),\n timeout: 5000,\n })\n);\n\nexport default fpmClient;\n","import axios from 'axios';\nimport qs from 'qs';\nimport { setupCache } from 'axios-cache-interceptor';\nimport { STRAPI_URI } from '../../constants/strapi';\n\nconst strapiClient = setupCache(\n axios.create({\n baseURL: `${STRAPI_URI}/api`,\n paramsSerializer: (p) => qs.stringify(p, { encodeValuesOnly: true }),\n timeout: 60_000,\n })\n);\n\nexport default strapiClient;\n","import {\n IStrapiData,\n IStrapiResponse,\n PortfolioProject,\n StrapiProject,\n} from '../..';\nimport { STRAPI_DEFAULT_PAGE_SIZE } from '../../constants/strapi';\nimport FPMProject from '../../models/fpm/FPMProject';\nimport fpmClient from '../fpmClient';\nimport strapiClient from './strapiClient';\n\nconst getPortfolioProjects = async (\n locale: string = 'en',\n preview: boolean = false\n): Promise<PortfolioProject[]> => {\n const params: Record<string, any> = {\n populate: 'deep,6',\n locale,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n };\n\n if (preview) {\n params.publicationState = 'preview';\n }\n\n const [{ data: fpmProjects }, { data: strapiProjects }] = await Promise.all([\n fpmClient.get<FPMProject[]>('/public/projects'),\n strapiClient.get<IStrapiResponse<IStrapiData<StrapiProject>[]>>(\n '/projects',\n {\n params,\n }\n ),\n ]);\n\n return fpmProjects.map((fpmProject: FPMProject) => {\n const strapiProject = strapiProjects.data.find(\n (sp: IStrapiData<StrapiProject>) =>\n sp.attributes.fpmProjectId === fpmProject.id\n );\n\n const toReturn: PortfolioProject = fpmProject;\n\n if (strapiProject?.attributes.slug) {\n toReturn.slug = strapiProject.attributes.slug;\n }\n if (strapiProject?.attributes.creditsAvailable) {\n toReturn.creditsAvailable = strapiProject?.attributes.creditsAvailable;\n }\n if (strapiProject?.attributes.thumbnail) {\n toReturn.thumbnail = strapiProject?.attributes.thumbnail;\n }\n if (strapiProject?.attributes.footerSubTitle) {\n toReturn.footerSubTitle = strapiProject?.attributes.footerSubTitle;\n }\n if (strapiProject?.attributes.portfolio.data?.attributes.host) {\n toReturn.portfolioHost =\n strapiProject.attributes.portfolio.data.attributes.host;\n }\n\n return toReturn;\n });\n};\n\nexport default getPortfolioProjects;\n","import { AxiosResponse } from 'axios';\nimport strapiClient from './strapiClient';\nimport { STRAPI_DEFAULT_PAGE_SIZE } from '../../constants/strapi';\n\ninterface Options {\n filters?: Record<string, any>;\n}\n\nconst getStaticPathsFromStrapi = async (\n path: string,\n { filters = {} }: Options = { filters: {} }\n): Promise<AxiosResponse> => {\n const params: Record<string, any> = {\n locale: 'all',\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n filters,\n };\n\n return strapiClient.get(path, { params });\n};\n\nexport default getStaticPathsFromStrapi;\n","import { AxiosResponse } from 'axios';\nimport strapiClient from './strapiClient';\nimport { STRAPI_DEFAULT_PAGE_SIZE } from '../../constants/strapi';\n\ninterface Options {\n locale?: string;\n slug?: string;\n preview?: boolean;\n filters?: Record<string, any>;\n}\n\nconst getStaticPropsFromStrapi = async (\n path: string,\n { locale = 'en', slug, preview = false, filters = {} }: Options\n): Promise<AxiosResponse> => {\n const enrichedFilters: Record<string, string> = filters;\n\n if (slug) {\n enrichedFilters.slug = slug;\n }\n\n const params: Record<string, any> = {\n populate: 'deep,6',\n locale,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n filters: enrichedFilters,\n };\n\n if (preview) {\n params.publicationState = 'preview';\n }\n\n return strapiClient.get(path, { params });\n};\n\nexport default getStaticPropsFromStrapi;\n","import { STRAPI_URI } from '../constants/strapi';\nimport IStrapi from '../models/strapi/IStrapi';\nimport IStrapiData from '../models/strapi/IStrapiData';\nimport StrapiMedia from '../models/strapi/StrapiMedia';\n\nconst strapiMediaUrl = (\n media: IStrapi<IStrapiData<StrapiMedia>>,\n preferredSize:\n | 'native'\n | 'thumbnail'\n | 'xSmall'\n | 'small'\n | 'medium'\n | 'large'\n | 'xLarge' = 'native'\n): string => {\n let { url } = media.data.attributes || {};\n if (preferredSize !== 'native' && media.data.attributes.ext !== '.svg') {\n url = media.data.attributes.formats[preferredSize]?.url || url;\n }\n if (url && (url.indexOf('http://') === 0 || url.indexOf('https://') === 0)) {\n return url;\n }\n return `${\n (STRAPI_URI.includes('127.0.0.1') || STRAPI_URI.includes('localhost')) &&\n !process.env.STORYBOOK\n ? STRAPI_URI\n : ''\n }${url}`;\n};\n\nexport default strapiMediaUrl;\n","export const DEFAULT_SHARE_IMAGE =\n 'https://cdn.tree.ly/assets/v3/app/share-image-generic.webp';\nexport const DEFAULT_SHARE_ALT = 'Share Image';\n","export const EXTENDABLE_HEADER_SECTIONS = [\n 'sections.hero',\n 'sections.map-hero',\n 'sections.full-width-image',\n 'sections.small-hero',\n 'sections.small-hero-light',\n];\nexport const DARK_THEME_HEADER_SECTIONS = [\n 'sections.hero',\n 'sections.small-hero',\n];\nexport const SLICES_WITH_BLOG_POSTS = ['sections.blog', 'sections.blog-cards'];\nexport const SLICES_WITH_CUSTOMER_STORIES = ['sections.customer-stories'];\nexport const SLICES_WITH_PROJECTS = [\n 'sections.projects-grid',\n 'sections.projects-map',\n 'sections.project-facts',\n 'sections.text-with-card',\n];\n","import StrapiLink from '../models/strapi/StrapiLink';\n\nconst strapiLinkUrl = (\n strapiLink: StrapiLink | undefined = undefined\n): string => {\n if (strapiLink?.page?.data) {\n return `/${strapiLink.page.data.attributes.slug}`;\n }\n\n return strapiLink?.url || '/';\n};\n\nexport default strapiLinkUrl;\n","import StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport { Box } from 'boemly';\nimport Head from 'next/head';\nimport Image from 'next/image';\nimport React, { useState } from 'react';\n\ninterface ZoomableImageProps {\n image: StrapiImage;\n zoom?: number;\n}\n\nconst ZoomableImage = ({ image, zoom = 200 }: ZoomableImageProps) => {\n // define and set default values to the states of the component\n const [isZoomed, setIsZoomed] = useState(false);\n const [backgroundPos, setBackgroundPos] = useState('50% 50%');\n\n const imageSrc = strapiMediaUrl(image.img, 'xLarge');\n\n const zoomInPosition = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n // This will handle the calculations of the area where the image needs to zoom in depending on the user interaction\n const zoomer = e.currentTarget.getBoundingClientRect();\n const x = ((e.clientX - zoomer.x) / zoomer.width) * 100;\n const y = ((e.clientY - zoomer.y) / zoomer.height) * 100;\n setBackgroundPos(`${x}% ${y}%`);\n };\n\n const toggleZoomImage = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n if (isZoomed) {\n setIsZoomed(false);\n } else {\n // Zoom in and set the background position correctly\n setIsZoomed(true);\n zoomInPosition(e);\n }\n };\n\n const handleClick = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n toggleZoomImage(e);\n };\n\n const handleMove = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n if (isZoomed) {\n zoomInPosition(e);\n }\n };\n\n return (\n <>\n <Head>\n <link rel=\"prefetch\" as=\"image\" href={imageSrc} />\n </Head>\n <Box\n position=\"relative\"\n display=\"inline-block\"\n width=\"full\"\n height=\"full\"\n overflow=\"hidden\"\n flexShrink=\"0\"\n scrollSnapAlign=\"center\"\n scrollSnapStop=\"always\"\n draggable=\"false\"\n cursor={isZoomed ? 'zoom-out' : 'zoom-in'}\n backgroundImage={isZoomed ? `url( ${imageSrc} )` : 'none'}\n backgroundSize={`${zoom}%`}\n backgroundPosition={backgroundPos}\n onClick={(e) => handleClick(e)}\n onMouseMove={(e) => handleMove(e)}\n >\n <Image\n src={imageSrc}\n alt={image.alt}\n fill\n style={{\n visibility: isZoomed ? 'hidden' : 'visible',\n objectFit: 'contain',\n }}\n />\n </Box>\n </>\n );\n};\n\nexport default ZoomableImage;\n","import React, { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { BoemlyModal, Flex, IconButton } from 'boemly';\nimport { useKey, useLockBodyScroll } from 'react-use';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport { CaretLeft, CaretRight } from '@phosphor-icons/react';\nimport ZoomableImage from './ZoomableImage';\n\nexport interface FullScreenImageProps {\n images: StrapiImage[];\n isOpen: boolean;\n onClose: () => void;\n currentIndex?: number;\n setCurrentIndex?: (callback: (c: number) => number) => void;\n}\n\nexport const FullScreenImage = ({\n images,\n isOpen,\n onClose,\n currentIndex = 0,\n setCurrentIndex,\n}: FullScreenImageProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n useLockBodyScroll(isOpen);\n\n const canMoveRight = useMemo(\n () => currentIndex < images.length - 1,\n [currentIndex, images.length]\n );\n const canMoveLeft = useMemo(() => currentIndex !== 0, [currentIndex]);\n\n const onRight = useCallback(\n () => canMoveRight && setCurrentIndex && setCurrentIndex((c) => c + 1),\n [canMoveRight]\n );\n const onLeft = useCallback(\n () => canMoveLeft && setCurrentIndex && setCurrentIndex((c) => c - 1),\n [canMoveLeft]\n );\n\n useKey('ArrowRight', onRight, {}, [onRight]);\n useKey('ArrowLeft', onLeft, {}, [onLeft]);\n\n useEffect(() => {\n if (!!isOpen) {\n setTimeout(() => {\n containerRef?.current?.scrollTo({\n left: currentIndex * containerRef.current.clientWidth,\n behavior: 'instant',\n });\n }, 10);\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (containerRef.current) {\n containerRef.current.scrollTo({\n left: currentIndex * containerRef.current.clientWidth,\n behavior: 'smooth',\n });\n }\n }, [currentIndex, containerRef]);\n\n return (\n <BoemlyModal\n onClose={onClose}\n isOpen={isOpen}\n title=\"\"\n trigger=\"\"\n size=\"full\"\n content={\n <Flex\n position=\"absolute\"\n insetY=\"16\"\n insetX=\"0\"\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n <Flex\n ref={containerRef}\n flexGrow=\"1\"\n flexBasis=\"100%\"\n flexShrink=\"1\"\n gap=\"4\"\n marginX=\"24\"\n scrollSnapType=\"x mandatory\"\n overflow=\"hidden\"\n position=\"relative\"\n height=\"full\"\n width=\"full\"\n >\n {images.map((image) => (\n <ZoomableImage key={image.id} image={image} />\n ))}\n </Flex>\n\n <Flex\n position=\"absolute\"\n inset=\"6\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n pointerEvents=\"none\"\n >\n <IconButton\n visibility={canMoveLeft ? 'visible' : 'hidden'}\n onClick={onLeft}\n icon={<CaretLeft size={16} />}\n aria-label=\"Previous picture\"\n variant=\"outline\"\n pointerEvents=\"all\"\n mr=\"6\"\n />\n\n <IconButton\n visibility={canMoveRight ? 'visible' : 'hidden'}\n onClick={onRight}\n icon={<CaretRight size={16} />}\n aria-label=\"Next picture\"\n variant=\"outline\"\n pointerEvents=\"all\"\n ml=\"4\"\n />\n </Flex>\n </Flex>\n }\n />\n );\n};\n","export const BREAKPOINT_SM = `${320 - 1}px`;\nexport const BREAKPOINT_MD = `${768 - 1}px`;\nexport const BREAKPOINT_LG = `${960 - 1}px`;\nexport const BREAKPOINT_XL = `${1200 - 1}px`;\n\nexport const BREAKPOINT_SM_QUERY = `(max-width: ${BREAKPOINT_SM})`;\nexport const BREAKPOINT_MD_QUERY = `(max-width: ${BREAKPOINT_MD})`;\nexport const BREAKPOINT_LG_QUERY = `(max-width: ${BREAKPOINT_LG})`;\nexport const BREAKPOINT_XL_QUERY = `(max-width: ${BREAKPOINT_XL})`;\n","import React, { useState } from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Wrapper,\n useMediaQuery,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport FullScreenImage from '../../components/FullScreenImage';\nimport { BREAKPOINT_MD_QUERY } from '../../constants/breakpoints';\n\ninterface FullWidthImageSlice extends StrapiDefaultHeader {\n image: StrapiImage;\n}\nexport interface FullWidthImageProps {\n slice: FullWidthImageSlice;\n}\n\nexport const FullWidthImage: React.FC<FullWidthImageProps> = ({\n slice,\n}: FullWidthImageProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const [isMobile] = useMediaQuery(BREAKPOINT_MD_QUERY);\n\n return (\n <DefaultSectionContainer title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n isHero\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center', mt: ['32', null, null, '56'] }}\n titleProps={{ textAlign: 'center', maxW: '6xl', marginX: 'auto' }}\n textProps={{ textAlign: 'center', maxW: '3xl', marginX: 'auto' }}\n />\n\n <Box position=\"relative\" mt=\"20\" height={['3xs', null, 'xl']}>\n <Image\n src={strapiMediaUrl(slice.image.img, 'xLarge')}\n alt={slice.image.alt}\n fill\n style={{\n objectFit: slice.image.objectFit || 'cover',\n cursor: isMobile ? 'unset' : 'pointer',\n borderRadius: 'var(--boemly-radii-2xl)',\n }}\n onClick={() => !isMobile && setIsOpen(true)}\n />\n\n <FullScreenImage\n images={[slice.image]}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n />\n </Box>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","const openHubSpotChat = () => {\n const w = window as any;\n\n if (w.HubSpotConversations) {\n w.HubSpotConversations.widget.open();\n } else {\n w.hsConversationsOnReady = [\n () => {\n w.HubSpotConversations.widget.open();\n },\n ];\n }\n};\n\nexport default openHubSpotChat;\n","import React from 'react';\nimport { Button } from 'boemly';\nimport Link from 'next/link';\nimport { useDetectAdBlock } from 'adblock-detect-react';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport openHubSpotChat from '../../utils/openHubSpotChat';\n\nexport interface StrapiLinkButtonProps {\n link: StrapiLink;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n variant?: 'solid' | 'outline' | 'outlineWhite' | 'link' | 'ghost';\n colorScheme?: 'primary' | 'gray' | 'orange' | 'green' | 'white';\n rightIcon?: JSX.Element;\n leftIcon?: JSX.Element;\n mt?: any;\n mr?: any;\n mb?: any;\n ml?: any;\n mx?: any;\n my?: any;\n background?: string;\n}\n\nexport const StrapiLinkButton: React.FC<StrapiLinkButtonProps> = ({\n link,\n ...buttonProps\n}: StrapiLinkButtonProps) => {\n const adBlockDetected = useDetectAdBlock();\n\n if (link.intercomLauncher) {\n if (adBlockDetected) {\n return (\n <Button {...buttonProps} as={Link} href=\"mailto:hello@tree.ly\">\n {link.text}\n </Button>\n );\n }\n\n return (\n <Button {...buttonProps} onClick={openHubSpotChat}>\n {link.text}\n </Button>\n );\n }\n\n return (\n <Button {...buttonProps} as={Link} href={strapiLinkUrl(link)}>\n {link.text}\n </Button>\n );\n};\n","import React from 'react';\nimport { Box, DefaultSectionHeader, Flex, Gradient, Wrapper } from 'boemly';\nimport Image from 'next/image';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiButtonWithVariant from '../../models/strapi/StrapiButtonWithVariant';\n\nexport interface HeroProps {\n slice: {\n tagline?: string;\n title: string;\n subTitle: string;\n button?: StrapiLink;\n additionalButtons: StrapiButtonWithVariant[];\n image?: StrapiImage;\n textAlign: 'left' | 'center';\n shape?: StrapiImage;\n };\n}\n\nexport const Hero = ({ slice }: HeroProps): JSX.Element => (\n <Box\n position=\"relative\"\n width=\"full\"\n height=\"var(--default-hero-height)\"\n minHeight=\"2xl\"\n backgroundColor=\"gray.900\"\n overflowX=\"hidden\"\n >\n {slice.image && (\n <>\n <Image\n src={strapiMediaUrl(slice.image.img, 'xLarge')}\n alt={slice.image.alt}\n fill\n style={{ objectFit: slice.image.objectFit || 'cover' }}\n />\n <Gradient />\n </>\n )}\n {slice.shape && (\n <Box\n position=\"absolute\"\n bottom=\"0\"\n borderTopRightRadius=\"full\"\n width={['3xs', null, '2xs', null, 'sm']}\n height={['3xs', null, '2xs', null, 'sm']}\n right={['-16', null, '24']}\n >\n <Image\n src={strapiMediaUrl(slice.shape.img, 'medium')}\n alt={slice.shape.alt}\n fill\n style={{\n objectFit: slice.shape.objectFit || 'cover',\n borderTopRightRadius: 'var(--boemly-radii-full)',\n }}\n />\n </Box>\n )}\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"56%\"\n width=\"full\"\n textAlign={slice.textAlign}\n transform=\"translateY(-50%)\"\n >\n <Wrapper>\n <>\n <DefaultSectionHeader\n isHero\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n taglineProps={{ color: 'white' }}\n titleProps={{\n color: 'white',\n maxW: slice.textAlign === 'center' ? '4xl' : '3xl',\n mx: slice.textAlign === 'center' ? 'auto' : 'unset',\n textAlign: slice.textAlign,\n }}\n textProps={{\n maxW: '2xl',\n mx: slice.textAlign === 'center' ? 'auto' : 'unset',\n textAlign: slice.textAlign,\n color: 'white',\n }}\n />\n\n <Flex\n gap=\"8\"\n justifyContent={slice.textAlign === 'center' ? 'center' : 'start'}\n >\n {slice.button && (\n <StrapiLinkButton\n key={slice.button.id}\n mt=\"10\"\n size=\"xl\"\n link={slice.button}\n />\n )}\n {slice.additionalButtons.map((button) => (\n <StrapiLinkButton\n key={button.button.id}\n mt=\"10\"\n size=\"xl\"\n variant={button.variant}\n link={button.button}\n />\n ))}\n </Flex>\n </>\n </Wrapper>\n </Box>\n </Box>\n);\n","import React from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n SimpleGrid,\n Spacer,\n Text,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\n\nexport interface IconGridProps {\n slice: {\n tagline?: string;\n title?: string;\n subTitle?: string;\n iconsWithTextAndButton: {\n id: number;\n title: string;\n text: string;\n icon: StrapiImage;\n button?: StrapiLink;\n }[];\n };\n}\n\nexport const IconGrid = ({ slice }: IconGridProps): JSX.Element => {\n const columns = () => {\n if (slice.iconsWithTextAndButton.length === 2) {\n return [1, null, null, 2, 2];\n }\n if (slice.iconsWithTextAndButton.length === 1) {\n return 1;\n }\n return [1, null, null, 2, 3];\n };\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n {slice.title ? (\n <>\n <Flex alignItems=\"center\" flexDirection=\"column\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n taglineProps={{ maxW: '2xl', textAlign: 'center' }}\n titleProps={{ maxW: '3xl', textAlign: 'center' }}\n textProps={{ maxW: '3xl', textAlign: 'center' }}\n />\n </Flex>\n <Spacer h=\"20\" />\n </>\n ) : (\n <></>\n )}\n\n <SimpleGrid\n columns={columns()}\n gap={slice.iconsWithTextAndButton.length === 2 ? '14' : '16'}\n rowGap={['16', null, null, '20']}\n >\n {slice.iconsWithTextAndButton.map((iconWithTextAndButton) => (\n <Box key={iconWithTextAndButton.id}>\n <Box\n margin=\"0 auto\"\n backgroundColor=\"primary.50\"\n borderRadius=\"full\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-around\"\n width=\"6.5rem\"\n height=\"6.5rem\"\n >\n <Box position=\"absolute\" width=\"12\" height=\"12\">\n <Image\n src={strapiMediaUrl(\n iconWithTextAndButton.icon.img,\n 'xSmall'\n )}\n alt={iconWithTextAndButton.icon.alt}\n fill\n style={{\n objectFit:\n iconWithTextAndButton.icon.objectFit || 'contain',\n }}\n />\n </Box>\n </Box>\n <Heading size=\"xl\" textAlign=\"center\" mb=\"4\" mt=\"8\">\n {iconWithTextAndButton.title}\n </Heading>\n <Text size=\"mdRegularNormal\" textAlign=\"center\">\n {iconWithTextAndButton.text}\n </Text>\n {iconWithTextAndButton.button && (\n <Box textAlign=\"center\">\n <StrapiLinkButton\n key={iconWithTextAndButton.button.id}\n mt=\"8\"\n size=\"md\"\n variant=\"outline\"\n link={iconWithTextAndButton.button}\n />\n </Box>\n )}\n </Box>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\n\nconst LinkedInIcon = () => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_112_606)\">\n <path\n d=\"M11.9286 11.9285H9.85424V8.67998C9.85424 7.90534 9.84042 6.90813 8.77539 6.90813C7.695 6.90813 7.52969 7.75213 7.52969 8.62357V11.9283H5.45533V5.24799H7.44671V6.16093H7.47459C7.67388 5.82018 7.96186 5.53986 8.30786 5.34984C8.65386 5.15981 9.04493 5.06719 9.4394 5.08183C11.5418 5.08183 11.9295 6.46473 11.9295 8.2638L11.9286 11.9285ZM3.11477 4.33484C2.87669 4.33489 2.64393 4.26433 2.44595 4.13209C2.24796 3.99985 2.09365 3.81188 2.0025 3.59193C1.91135 3.37199 1.88746 3.12995 1.93387 2.89644C1.98027 2.66292 2.09488 2.44841 2.26321 2.28003C2.43153 2.11164 2.646 1.99696 2.8795 1.95047C3.11301 1.90398 3.35504 1.92778 3.57502 2.01884C3.795 2.10992 3.98303 2.26417 4.11533 2.46211C4.24764 2.66004 4.31829 2.89277 4.31833 3.13085C4.31836 3.28894 4.28725 3.44547 4.22678 3.59153C4.1663 3.7376 4.07767 3.87031 3.96591 3.98211C3.85415 4.09392 3.72146 4.18261 3.57541 4.24313C3.42937 4.30365 3.27286 4.33481 3.11477 4.33484ZM4.15194 11.9285H2.07544V5.24799H4.15194V11.9285ZM12.9628 0.000953808H1.03307C0.762304 -0.00210183 0.501383 0.102466 0.307673 0.291681C0.113961 0.480895 0.00330461 0.739273 0 1.01004V12.9892C0.00319151 13.2602 0.113783 13.5187 0.307487 13.7081C0.501192 13.8975 0.762169 14.0023 1.03307 13.9994H12.9628C13.2342 14.0028 13.496 13.8983 13.6904 13.7089C13.8848 13.5195 13.9962 13.2607 14 12.9892V1.00918C13.9961 0.737873 13.8846 0.479199 13.6902 0.28999C13.4958 0.10078 13.2341 -0.00348904 12.9628 8.91429e-05\"\n fill=\"#0A66C2\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_112_606\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n);\n\nexport default LinkedInIcon;\n","import React from 'react';\nimport { CaretRight, Globe } from '@phosphor-icons/react';\nimport LinkedInIcon from '../../icons/LinkedInIcon';\nimport StrapiLinkWithIcon from '../../models/strapi/StrapiLinkWithIcon';\nimport StrapiLinkButton from '../StrapiLinkButton';\nimport { StrapiLinkButtonProps } from '../StrapiLinkButton/StrapiLinkButton';\n\nexport interface StrapiLinkButtonWithIconProps\n extends Omit<StrapiLinkButtonProps, 'link'> {\n link: StrapiLinkWithIcon;\n}\n\nexport const StrapiLinkButtonWithIcon: React.FC<\n StrapiLinkButtonWithIconProps\n> = ({ link, ...props }: StrapiLinkButtonWithIconProps) => {\n const getLinkIcon = (destination: string) => {\n switch (destination) {\n case 'linkedin': {\n return <LinkedInIcon />;\n }\n case 'web': {\n return <Globe />;\n }\n default: {\n return <CaretRight />;\n }\n }\n };\n\n return (\n <StrapiLinkButton\n {...props}\n link={link.link}\n rightIcon={getLinkIcon(link.destination)}\n />\n );\n};\n","import React from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n SimpleGrid,\n Text,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiLinkButtonWithIcon from '../../components/StrapiLinkButtonWithIcon';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLinkWithIcon from '../../models/strapi/StrapiLinkWithIcon';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\ninterface ImageGridSlice extends StrapiDefaultHeader {\n images: {\n id: number;\n title: string;\n subTitle?: string;\n image: StrapiImage;\n links: StrapiLinkWithIcon[];\n }[];\n}\nexport interface ImageGridProps {\n slice: ImageGridSlice;\n}\n\nexport const ImageGrid: React.FC<ImageGridProps> = ({\n slice,\n}: ImageGridProps) => {\n const [primary50] = useToken('colors', ['primary.50']);\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center' }}\n titleProps={{ textAlign: 'center', maxW: '6xl', marginX: 'auto' }}\n textProps={{ textAlign: 'center', maxW: '2xl', marginX: 'auto' }}\n />\n\n <SimpleGrid\n mt=\"24\"\n columns={3}\n gap=\"24\"\n rowGap=\"16\"\n minChildWidth=\"16rem\"\n >\n {slice.images.map(({ id, title, subTitle, image, links }) => (\n <Box key={id}>\n <Box position=\"relative\" height=\"sm\" borderRadius=\"xl\">\n <Image\n src={strapiMediaUrl(image.img, 'medium')}\n alt={image.alt}\n fill\n style={{\n objectFit: image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n <Heading size=\"xl\" mt=\"4\">\n {title}\n </Heading>\n {subTitle && <Text size=\"mdRegularNormal\">{subTitle}</Text>}\n {links && links.length > 0 && (\n <Flex mt=\"3\" flexDir=\"row\" gap=\"2\" flexWrap=\"wrap\">\n {links.map((link) => (\n <StrapiLinkButtonWithIcon\n key={link.id}\n link={link}\n size=\"sm\"\n variant=\"outline\"\n />\n ))}\n </Flex>\n )}\n </Box>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React, { Fragment } from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Heading,\n SimpleGrid,\n Text,\n useMediaQuery,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { CaretRight } from '@phosphor-icons/react';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport { BREAKPOINT_LG_QUERY } from '../../constants/breakpoints';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport { CDN_URI } from '../../constants/api';\n\ninterface ImageTextSequenceSlice extends StrapiDefaultHeader {\n imageTextRows: {\n id: number;\n title: string;\n text: string;\n button?: StrapiLink;\n image: StrapiImage;\n }[];\n background?: boolean;\n}\nexport interface ImageTextSequenceProps {\n slice: ImageTextSequenceSlice;\n}\n\nexport const ImageTextSequence: React.FC<ImageTextSequenceProps> = ({\n slice,\n}: ImageTextSequenceProps) => {\n const [oneColumnGrid] = useMediaQuery(BREAKPOINT_LG_QUERY);\n const [primary50] = useToken('colors', ['primary.50']);\n const [gray700] = useToken('colors', ['gray.700']);\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n {slice.background ? (\n <>\n <Box\n position=\"absolute\"\n top=\"0\"\n right=\"24\"\n display={['none', null, null, 'unset']}\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/desktop-map-border.svg`}\n alt=\"Map\"\n width=\"786\"\n height=\"897\"\n />\n </Box>\n <Box\n position=\"absolute\"\n top=\"64\"\n right=\"-14\"\n display={['unset', null, null, 'none']}\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/mobile-map-border.svg`}\n alt=\"Map\"\n width=\"227\"\n height=\"452\"\n />\n </Box>\n </>\n ) : (\n <></>\n )}\n <Wrapper>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: ['left', null, null, null, 'center'] }}\n titleProps={{\n maxW: '6xl',\n marginX: ['0', null, null, null, 'auto'],\n textAlign: ['left', null, null, null, 'center'],\n }}\n textProps={{\n maxW: '2xl',\n marginX: ['0', null, null, null, 'auto'],\n textAlign: ['left', null, null, null, 'center'],\n color: 'black',\n }}\n />\n\n <SimpleGrid\n gap=\"16\"\n mt={['28', null, null, null, '40']}\n columns={[1, null, null, null, 2]}\n >\n {slice.imageTextRows.map(\n ({ id, title, text, button, image }, index) => {\n const imageBox = (\n <Box>\n <Box\n position=\"relative\"\n width=\"full\"\n minHeight={['2xs', null, null, 'sm']}\n >\n <Image\n src={strapiMediaUrl(image.img, 'large')}\n alt={image.alt}\n fill\n style={{\n objectFit: image.objectFit || 'contain',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n </Box>\n );\n return (\n <Fragment key={id}>\n {(oneColumnGrid || index % 2 !== 0) && imageBox}\n <Box\n display=\"flex\"\n alignItems=\"flex-start\"\n flexDirection=\"column\"\n justifyContent=\"center\"\n >\n <Heading as=\"h2\" size=\"xl\" mb=\"4\">\n {title}\n </Heading>\n <Text size=\"mdRegularNormal\">{text}</Text>\n {button && (\n <StrapiLinkButton\n mt=\"5\"\n link={button}\n size=\"sm\"\n variant=\"outline\"\n rightIcon={<CaretRight size=\"10\" color={gray700} />}\n />\n )}\n </Box>\n {!oneColumnGrid && index % 2 === 0 && imageBox}\n </Fragment>\n );\n }\n )}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport {\n DefaultSectionContainer,\n DefaultSectionHeader,\n Grid,\n GridItem,\n PortfolioCard,\n Spacer,\n BoemlyList,\n Wrapper,\n} from 'boemly';\nimport { ArrowRight } from '@phosphor-icons/react';\nimport Image from 'next/image';\nimport { useRouter } from 'next/router';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiPortfolioCard from '../../models/strapi/StrapiPortfolioCard';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\n\ninterface LeftTextRightCardSlice extends StrapiDefaultHeader {\n checkMarkLabels?: {\n id: number;\n text: string;\n }[];\n button?: StrapiLink;\n card?: StrapiPortfolioCard;\n}\nexport interface LeftTextRightCardProps {\n slice: LeftTextRightCardSlice;\n}\n\nexport const LeftTextRightCard: React.FC<LeftTextRightCardProps> = ({\n slice,\n}: LeftTextRightCardProps) => {\n const { push } = useRouter();\n\n return (\n <DefaultSectionContainer title={slice.title}>\n <Wrapper>\n <Grid\n templateColumns={[\n 'repeat(8, 1fr)',\n null,\n null,\n null,\n 'repeat(12, 1fr)',\n ]}\n templateRows={['repeat(2, 1fr)', null, null, null, 'repeat(1, 1fr)']}\n rowGap=\"12\"\n >\n <GridItem colSpan={8} rowSpan={1} pr={['0', null, null, null, '28']}>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n\n {slice.checkMarkLabels && (\n <>\n <Spacer height=\"10\" />\n <BoemlyList listItems={slice.checkMarkLabels} />\n <Spacer height=\"10\" />\n </>\n )}\n\n {slice.button && (\n <StrapiLinkButton\n link={slice.button}\n size=\"md\"\n colorScheme=\"white\"\n variant=\"outline\"\n rightIcon={<ArrowRight />}\n />\n )}\n </GridItem>\n <GridItem\n colSpan={[8, null, null, null, 4]}\n rowSpan={1}\n position=\"relative\"\n >\n {slice.card && (\n <PortfolioCard\n title={slice.card.title}\n button={\n slice.card.button && {\n text: slice.card.button.text,\n onClick: () => push(strapiLinkUrl(slice.card?.button)),\n }\n }\n facts={slice.card.facts}\n image={\n <Image\n src={strapiMediaUrl(slice.card.image.img, 'medium')}\n alt={slice.card.image.alt}\n fill\n style={{ objectFit: slice.card.image.objectFit || 'cover' }}\n />\n }\n portfolioNumber={slice.card.portfolioNumber}\n />\n )}\n </GridItem>\n </Grid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n Flex,\n Heading,\n RichText,\n SimpleGrid,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { ArrowRight } from '@phosphor-icons/react';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImageWithLink from '../../models/strapi/StrapiImageWithLink';\nimport StrapiLink from '../../models/strapi/StrapiLink';\n\nexport interface LogoGridWithTextProps {\n slice: {\n title: string;\n text: string;\n button?: StrapiLink;\n logos: StrapiImageWithLink[];\n };\n}\n\nexport const LogoGridWithText: React.FC<LogoGridWithTextProps> = ({\n slice,\n}: LogoGridWithTextProps) => {\n const [primary50] = useToken('colors', ['primary.50']);\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n <Wrapper>\n <SimpleGrid columns={2} gap=\"28\" minChildWidth=\"16rem\">\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n justifyContent=\"center\"\n alignItems=\"flex-start\"\n >\n <Heading as=\"h2\" size=\"3xl\" mb=\"4\">\n {slice.title}\n </Heading>\n <RichText content={slice.text} />\n {slice.button && (\n <StrapiLinkButton\n link={slice.button}\n size=\"md\"\n colorScheme=\"white\"\n variant=\"outline\"\n mt=\"6\"\n rightIcon={<ArrowRight />}\n />\n )}\n </Box>\n <Flex flexDir=\"row\" flexWrap=\"wrap\" gap={['12', null, null, '28']}>\n {slice.logos.map((logo) => (\n <Flex\n key={logo.id}\n justifyContent=\"center\"\n alignItems=\"center\"\n flexGrow={1}\n flexShrink={0}\n flexBasis={slice.logos.length > 2 ? '34%' : '90%'} // 34% are just enough to not allow three in one row\n >\n <Box position=\"relative\" height=\"20\" width=\"100%\">\n {logo.link ? (\n <a href={strapiLinkUrl(logo.link)}>\n <Image\n src={strapiMediaUrl(logo.img, 'small')}\n alt={logo.alt}\n fill\n style={{ objectFit: logo.objectFit || 'contain' }}\n />\n </a>\n ) : (\n <Image\n src={strapiMediaUrl(logo.img, 'small')}\n alt={logo.alt}\n fill\n style={{ objectFit: logo.objectFit || 'contain' }}\n />\n )}\n </Box>\n </Flex>\n ))}\n </Flex>\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import styled from '@emotion/styled';\nimport { BREAKPOINT_LG } from '../../constants/breakpoints';\nimport { Box } from 'boemly';\n\nexport const MapHeroContainer = styled(Box)`\n position: relative;\n width: 100vw;\n height: var(--default-hero-height);\n min-height: var(--boemly-sizes-3xl);\n background-color: var(--boemly-colors-primary-50);\n overflow: hidden;\n z-index: var(--boemly-zIndices-base);\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n height: auto;\n }\n`;\n\nexport const MapHeroTextContainer = styled(Box)`\n position: absolute;\n width: 100vw;\n top: 56%;\n left: 0;\n transform: translateY(-50%);\n z-index: var(--boemly-zIndices-aboveBase);\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n position: relative;\n transform: unset;\n\n padding-top: var(--boemly-space-32);\n }\n`;\n\nexport const ShapeContainer = styled(Box)`\n position: absolute;\n bottom: calc(var(--boemly-space-8) * -1);\n left: 0;\n\n width: var(--boemly-sizes-sm);\n height: var(--boemly-sizes-sm);\n\n border-top-right-radius: var(--boemly-radii-full);\n\n & span,\n div {\n border-top-right-radius: var(--boemly-radii-full);\n }\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n display: none;\n }\n`;\n\nexport const MapContainer = styled(Box)`\n position: absolute;\n\n width: 50%;\n height: 100%;\n\n right: 0;\n top: 0;\n\n & img {\n object-fit: cover !important;\n }\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n width: 100%;\n height: var(--boemly-sizes-4xl);\n position: relative;\n margin-top: calc(var(--boemly-space-72) * -1);\n background-color: var(--boemly-colors-white);\n\n & img {\n object-fit: contain !important;\n }\n }\n`;\n\nexport const MapGradient = styled(Box)`\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n\n background: linear-gradient(\n 90deg,\n var(--boemly-colors-primary-50) 0%,\n var(--boemly-colors-primary-50) 10%,\n rgba(243, 246, 245, 0.6) 28%,\n rgba(243, 246, 245, 0) 40%,\n rgba(243, 246, 245, 0) 100%\n );\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n background: linear-gradient(\n 180deg,\n var(--boemly-colors-primary-50) 0%,\n var(--boemly-colors-primary-50) 36%,\n rgba(243, 246, 245, 0.12) 46%,\n rgba(243, 246, 245, 0) 100%\n );\n }\n`;\n","import React from 'react';\nimport { DefaultSectionHeader, Flex, useMediaQuery, Wrapper } from 'boemly';\nimport Image from 'next/image';\nimport { BREAKPOINT_LG_QUERY } from '../../constants/breakpoints';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport {\n MapHeroContainer,\n MapHeroTextContainer,\n ShapeContainer,\n MapContainer,\n MapGradient,\n} from './styles';\n\nexport interface MapHeroProps {\n slice: {\n tagline?: string;\n title: string;\n subTitle?: string;\n buttons?: StrapiLink[];\n shape?: StrapiImage;\n map: StrapiImage;\n mobileMap: StrapiImage;\n };\n}\n\nexport const MapHero: React.FC<MapHeroProps> = ({ slice }: MapHeroProps) => {\n const [belowBreakpoint] = useMediaQuery(BREAKPOINT_LG_QUERY);\n\n return (\n <MapHeroContainer maxWidth=\"full\">\n {slice.shape && (\n <ShapeContainer>\n <Image\n src={strapiMediaUrl(slice.shape.img, 'medium')}\n alt={slice.shape.alt}\n fill\n style={{ objectFit: slice.shape.objectFit || 'cover' }}\n />\n </ShapeContainer>\n )}\n <MapHeroTextContainer>\n <Wrapper>\n <>\n <DefaultSectionHeader\n isHero\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n titleProps={{ maxW: ['100%', null, null, null, '60%'] }}\n textProps={{ maxW: ['100%', null, null, null, '55%'] }}\n />\n {slice.buttons && slice.buttons.length > 0 && (\n <Flex mt=\"10\" flexDir=\"row\" gap=\"5\">\n <StrapiLinkButton link={slice.buttons[0]} size=\"xl\" />\n {slice.buttons.length === 2 && (\n <StrapiLinkButton\n link={slice.buttons[1]}\n variant=\"outline\"\n size=\"xl\"\n />\n )}\n </Flex>\n )}\n </>\n </Wrapper>\n </MapHeroTextContainer>\n <MapContainer>\n {belowBreakpoint ? (\n <Image\n src={strapiMediaUrl(slice.mobileMap.img, 'xLarge')}\n alt={slice.mobileMap.alt}\n fill\n style={{ objectFit: slice.mobileMap.objectFit || 'contain' }}\n />\n ) : (\n <Image\n src={strapiMediaUrl(slice.map.img, 'xLarge')}\n alt={slice.map.alt}\n fill\n style={{ objectFit: slice.map.objectFit || 'cover' }}\n />\n )}\n <MapGradient />\n </MapContainer>\n </MapHeroContainer>\n );\n};\n","const convertToKebabCase = (str: string) => {\n const matches =\n str &&\n str.match(\n /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g\n );\n return matches ? matches.map((x: string) => x.toLowerCase()).join('-') : '';\n};\n\nexport default convertToKebabCase;\n","import React from 'react';\nimport {\n Box,\n Heading,\n HeroCard,\n SimpleGrid,\n Text,\n BoemlyAccordion,\n Wrapper,\n Flex,\n Spacer,\n} from 'boemly';\nimport { ArrowRight } from '@phosphor-icons/react';\nimport { useRouter } from 'next/router';\nimport Image from 'next/image';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiHeroCard from '../../models/strapi/StrapiHeroCard';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport convertToKebabCase from '../../utils/convertToKebabCase';\n\nconst VARIANTS = {\n gray: {\n backgroundColor: 'primary.50',\n tagLineColor: 'primary.500',\n textColor: 'black',\n accordionVariant: 'black',\n otherQuestionsBackground: 'primary.700',\n },\n green: {\n backgroundColor: 'primary.800',\n tagLineColor: 'white',\n textColor: 'white',\n accordionVariant: 'white',\n otherQuestionsBackground: 'primary.900',\n },\n white: {\n backgroundColor: 'white',\n tagLineColor: 'primary.500',\n textColor: 'black',\n accordionVariant: 'black',\n otherQuestionsBackground: 'primary.700',\n },\n};\n\nexport interface QAndAProps {\n slice: {\n tagline: string;\n title: string;\n questionsAndAnswers: {\n id: number;\n key: string;\n value: string;\n }[];\n otherQuestions: string;\n button: StrapiLink;\n hero?: StrapiHeroCard;\n variant?: keyof typeof VARIANTS;\n };\n}\n\nexport const QAndA: React.FC<QAndAProps> = ({ slice }: QAndAProps) => {\n const { push } = useRouter();\n\n const variant = VARIANTS[slice.variant ?? 'green'];\n\n return (\n <>\n <Box\n pb={slice.hero ? 80 : 28}\n id={convertToKebabCase(slice.title)}\n backgroundColor={variant.backgroundColor}\n >\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2]}>\n <Box mr=\"16\" paddingY=\"28\">\n <Text size=\"mdMonoUppercase\" color={variant.tagLineColor}>\n {slice.tagline}\n </Text>\n <Heading\n as=\"h2\"\n size=\"3xl\"\n color={variant.textColor}\n mt=\"6\"\n mb=\"16\"\n >\n {slice.title}\n </Heading>\n </Box>\n <Box\n maxHeight={['unset', null, null, 'xl']}\n paddingTop={['0', null, null, '28']}\n paddingRight={['0', null, null, '6']}\n overflowY={['unset', null, null, 'scroll']}\n >\n <Box>\n <BoemlyAccordion\n rows={slice.questionsAndAnswers}\n defaultIndex={0}\n variant={variant.accordionVariant as 'white' | 'black'}\n />\n <Flex\n padding=\"8\"\n backgroundColor={variant.otherQuestionsBackground}\n borderRadius=\"2xl\"\n mt=\"14\"\n flexDir={['column', null, null, 'row']}\n justifyContent={['flex-start', null, null, 'space-between']}\n alignItems={['flex-start', null, null, 'center']}\n >\n <Heading as=\"h6\" size=\"sm\" color=\"white\">\n {slice.otherQuestions}\n </Heading>\n <Spacer minHeight={['4', null, null, '0']} />\n <StrapiLinkButton\n size=\"lg\"\n colorScheme=\"white\"\n background=\"white\"\n rightIcon={<ArrowRight />}\n link={slice.button}\n />\n </Flex>\n </Box>\n </Box>\n </SimpleGrid>\n </Wrapper>\n </Box>\n\n {slice.hero && (\n <Box pb=\"28\" mt=\"-56\">\n <Wrapper>\n <HeroCard\n title={slice.hero.title}\n subTitle={slice.hero.subTitle}\n link={\n slice.hero.button && {\n text: slice.hero.button.text,\n onClick: () => push(strapiLinkUrl(slice.hero?.button)),\n }\n }\n image={\n slice.hero.image && (\n <Image\n src={strapiMediaUrl(slice.hero.image.img, 'xLarge')}\n alt={slice.hero.image.alt}\n fill\n style={{ objectFit: slice.hero.image.objectFit || 'cover' }}\n />\n )\n }\n />\n </Wrapper>\n </Box>\n )}\n </>\n );\n};\n","import React from 'react';\nimport Image from 'next/image';\nimport {\n Box,\n DefaultSectionHeader,\n HeroCard,\n QuoteCard,\n Shape,\n SimpleGrid,\n Wrapper,\n} from 'boemly';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiQuoteCard from '../../models/strapi/StrapiQuoteCard';\nimport StrapiHeroCard from '../../models/strapi/StrapiHeroCard';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport convertToKebabCase from '../../utils/convertToKebabCase';\nimport { useRouter } from 'next/router';\n\ninterface QuoteCardsSlice extends StrapiDefaultHeader {\n cards: StrapiQuoteCard[];\n shapes?: StrapiImage[];\n hero?: StrapiHeroCard;\n}\nexport interface QuoteCardsProps {\n slice: QuoteCardsSlice;\n}\n\nexport const QuoteCards: React.FC<QuoteCardsProps> = ({\n slice,\n}: QuoteCardsProps) => {\n const { push } = useRouter();\n\n return (\n <>\n <Box\n id={convertToKebabCase(slice.title)}\n position=\"relative\"\n paddingTop=\"28\"\n paddingBottom={!!slice.hero ? '80' : '28'}\n >\n {slice.shapes && slice.shapes.length === 2 && (\n <>\n <Shape\n shape={\n <Image\n src={strapiMediaUrl(slice.shapes[0].img, 'small')}\n alt={slice.shapes[0].alt}\n fill\n style={{ objectFit: slice.shapes[0].objectFit || 'cover' }}\n />\n }\n top=\"0\"\n right=\"0\"\n size=\"xs\"\n radius=\"bottom-left\"\n />\n <Shape\n shape={\n <Image\n src={strapiMediaUrl(slice.shapes[1].img, 'small')}\n alt={slice.shapes[1].alt}\n fill\n style={{ objectFit: slice.shapes[1].objectFit || 'cover' }}\n />\n }\n bottom=\"0\"\n left=\"0\"\n radius=\"top-right\"\n />\n </>\n )}\n <Wrapper>\n <Box maxW=\"3xl\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n </Box>\n <SimpleGrid\n columns={2}\n gap=\"20\"\n rowGap=\"6\"\n mt=\"16\"\n minChildWidth={['100%', null, '16rem']}\n >\n {slice.cards.map((card) => (\n <Box key={card.id} width=\"full\" maxWidth=\"2xl\">\n <QuoteCard\n key={card.id}\n avatar={{\n name: card.avatar.name,\n description: card.avatar.description,\n image: (\n <Image\n src={strapiMediaUrl(card.avatar.image.img, 'small')}\n alt={card.avatar.image.alt}\n fill\n style={{\n objectFit: card.avatar.image.objectFit || 'cover',\n }}\n />\n ),\n }}\n text={card.text}\n />\n </Box>\n ))}\n </SimpleGrid>\n </Wrapper>\n </Box>\n {slice.hero && (\n <Box marginTop=\"-40\" paddingBottom=\"28\">\n <Wrapper>\n <HeroCard\n title={slice.hero.title}\n subTitle={slice.hero.subTitle}\n link={\n slice.hero.button && {\n text: slice.hero.button.text,\n onClick: () => push(strapiLinkUrl(slice.hero?.button)),\n }\n }\n image={\n slice.hero.image && (\n <Image\n src={strapiMediaUrl(slice.hero.image.img, 'xLarge')}\n alt={slice.hero.image.alt}\n fill\n style={{ objectFit: slice.hero.image.objectFit || 'cover' }}\n />\n )\n }\n />\n </Wrapper>\n </Box>\n )}\n </>\n );\n};\n","import React from 'react';\nimport {\n DefaultSectionContainer,\n Grid,\n GridItem,\n RichText,\n Wrapper,\n} from 'boemly';\n\nexport interface RichTextSectionProps {\n slice: {\n content: string;\n };\n}\n\nexport const RichTextSection: React.FC<RichTextSectionProps> = ({\n slice,\n}: RichTextSectionProps) => (\n <DefaultSectionContainer>\n <Wrapper>\n <Grid templateColumns=\"repeat(12, 1fr)\" gap=\"4\">\n <GridItem colSpan={[12, null, null, 7]}>\n <RichText content={slice.content} />\n </GridItem>\n </Grid>\n </Wrapper>\n </DefaultSectionContainer>\n);\n","import React, { createRef, useEffect, useRef, useState } from 'react';\nimport {\n Box,\n Center,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Gradient,\n Heading,\n RichText,\n ShapesCard,\n Text,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { useWindowScroll, useWindowSize } from 'react-use';\nimport { useRouter } from 'next/router';\nimport StrapiShapesCard from '../../models/strapi/StrapiShapesCard';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiImage from '../../models/strapi/StrapiImage';\n\ninterface StepsSlice extends StrapiDefaultHeader {\n steps: {\n id: number;\n step: number;\n title: string;\n text?: string;\n }[];\n image?: StrapiImage;\n card?: StrapiShapesCard;\n}\nexport interface StepsProps {\n slice: StepsSlice;\n}\n\nexport const Steps: React.FC<StepsProps> = ({ slice }: StepsProps) => {\n const { push } = useRouter();\n const [gray900] = useToken('colors', ['gray.900']);\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [stepRefs, setStepRefs] = useState(new Array(slice.steps.length));\n const [stepProgress, setStepProgress] = useState(\n new Array(slice.steps.length)\n );\n\n const { y: offsetY } = useWindowScroll();\n const { height: windowHeight } = useWindowSize();\n\n useEffect(() => {\n setStepRefs(slice.steps.map(() => createRef()));\n }, []);\n\n useEffect(() => {\n const containerOffsetTop = containerRef.current?.offsetTop || 0;\n setStepProgress(\n stepRefs.map((ref) => {\n const currentItemOffsetTop = ref.current?.offsetTop || 0;\n return containerOffsetTop + currentItemOffsetTop <\n offsetY + windowHeight / 3\n ? 100\n : 0;\n })\n );\n }, [offsetY]);\n\n return (\n <div ref={containerRef}>\n <DefaultSectionContainer backgroundColor={gray900} title={slice.title}>\n <>\n {slice.image && (\n <Box\n position=\"absolute\"\n top=\"0\"\n left=\"0\"\n width=\"full\"\n height=\"full\"\n >\n <Image\n src={strapiMediaUrl(slice.image.img, 'xLarge')}\n alt={slice.image.alt}\n fill\n style={{ objectFit: slice.image.objectFit || 'cover' }}\n />\n <Gradient />\n </Box>\n )}\n </>\n <Wrapper>\n <>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center' }}\n titleProps={{\n textAlign: 'center',\n maxW: '2xl',\n marginX: 'auto',\n color: 'white',\n }}\n textProps={{\n textAlign: 'center',\n maxW: 'xl',\n marginX: 'auto',\n color: 'whiteAlpha.800',\n }}\n />\n\n <Box marginTop={['16', null, '24']}>\n {slice.steps.map(({ id, step, title, text }, index) => (\n <Flex flexDir=\"column\" alignItems=\"center\" key={id}>\n <Center\n width=\"10\"\n height=\"10\"\n borderRadius=\"full\"\n backgroundColor=\"white\"\n >\n <Text size=\"smRegularNormal\" color=\"black\">\n {step}\n </Text>\n </Center>\n <Heading size=\"lg\" color=\"white\" mt=\"4\" textAlign=\"center\">\n {title}\n </Heading>\n {text && (\n <Box maxW=\"xl\" mt=\"4\">\n <RichText\n options={{ forceBlock: true }}\n content={text}\n textProps={{\n size: 'mdRegularNormal',\n color: 'whiteAlpha.700',\n textAlign: 'center',\n }}\n />\n </Box>\n )}\n {(index + 1 < slice.steps.length || slice.card) && (\n <Box\n ref={stepRefs[index]}\n position=\"relative\"\n marginTop=\"4\"\n marginBottom=\"6\"\n height=\"12\"\n >\n <Box\n position=\"absolute\"\n height=\"full\"\n borderLeft=\"dashed 1px white\"\n opacity=\"0.5\"\n />\n <Box\n position=\"absolute\"\n height={`${stepProgress[index]}%`}\n borderRight=\"solid 1px white\"\n opacity=\"1\"\n transition=\"height ease var(--medium-transition-duration)\"\n />\n </Box>\n )}\n </Flex>\n ))}\n </Box>\n\n {slice.card && (\n <ShapesCard\n tagline={slice.card.tagline}\n title={slice.card.title}\n text={slice.card.text}\n shapes={\n slice.card.shapes &&\n slice.card.shapes?.map((shape) => (\n <Image\n key={shape.id}\n src={strapiMediaUrl(shape.img, 'small')}\n alt={shape.alt}\n fill\n style={{ objectFit: shape.objectFit || 'cover' }}\n />\n ))\n }\n button={\n slice.card.button && {\n text: slice.card.button.text,\n onClick: () => push(strapiLinkUrl(slice.card?.button)),\n }\n }\n />\n )}\n </>\n </Wrapper>\n </DefaultSectionContainer>\n </div>\n );\n};\n","enum CreditsAvailableState {\n YES = 'yes',\n SOME = 'some',\n NO = 'no',\n NOT_YET = 'notYet',\n}\n\nexport default CreditsAvailableState;\n","import { motion } from 'framer-motion';\nimport styled from '@emotion/styled';\nimport { BREAKPOINT_MD } from '../../constants/breakpoints';\nimport { Box } from 'boemly';\n\nexport const CarouselContainer = styled(Box)`\n margin-top: var(--boemly-space-6);\n padding: var(--boemly-space-8) 0;\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n margin-top: var(--boemly-space-4);\n width: var(--boemly-sizes-full);\n }\n\n width: var(--boemly-sizes-full);\n\n overflow-x: hidden;\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n overflow-x: scroll;\n }\n`;\n\ninterface CarouselInnerContainerProps {\n numberOfItems: number;\n}\nexport const CarouselInnerContainer = styled(\n motion.div\n)<CarouselInnerContainerProps>`\n display: flex;\n gap: var(--boemly-space-6);\n justify-content: center;\n\n width: calc(\n (var(--boemly-sizes-sm) + var(--boemly-space-6)) *\n ${({ numberOfItems }: CarouselInnerContainerProps) => numberOfItems} +\n var(--boemly-space-6)\n );\n min-width: var(--boemly-sizes-full);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n justify-content: flex-start;\n width: calc(\n (var(--boemly-sizes-2xs) + var(--boemly-space-4)) *\n ${({ numberOfItems }: CarouselInnerContainerProps) => numberOfItems} +\n var(--boemly-space-6)\n );\n }\n`;\n\nexport const CardContainer = styled(Box)`\n width: var(--boemly-sizes-sm);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n width: var(--boemly-sizes-2xs);\n\n margin-right: var(--boemly-space-4);\n\n &:first-of-type {\n margin-left: var(--boemly-space-6);\n }\n }\n`;\n","import comparisonMessagesDe from './slices/Comparison/messages.de';\nimport creditsAvailableBadgeMessagesDe from './components/CreditsAvailableBadge/messages.de';\nimport ctaMessagesDe from './slices/Cta/messages.de';\nimport customerCardMessagesDe from './components/CustomerCard/messages.de';\nimport customerQuoteCardMessagesDe from './components/CustomerQuoteCard/messages.de';\nimport glossaryMessagesDe from './slices/Glossary/messages.de';\nimport portfolioDocumentsDownloadListMessagesDe from './components/portfolio/DocumentsDownloadList/messages.de';\nimport projectFactsMessagesDe from './slices/ProjectFacts/messages.de';\nimport projectsMapMessagesDe from './slices/ProjectsMap/messages.de';\nimport portfolioProjectInfoMessagesDe from './components/portfolio/ProjectInfo/messages.de';\nimport portfolioProjectCardMessagesDe from './components/portfolio/PortfolioProjectCard/messages.de';\nimport portfolioSmallCheckoutMessagesDe from './components/portfolio/SmallCheckout/messages.de';\nimport shopCheckoutMessagesDe from './slices/ShopCheckout/messages.de';\nimport textCarouselMessagesDe from './slices/TextCarousel/messages.de';\nimport timelineMessagesDe from './slices/Timeline/messages.de';\n\nimport unitMessagesDe from './unit.messages.de';\n\nconst rootMessagesDe = {\n //\n // Components\n //\n ...creditsAvailableBadgeMessagesDe,\n ...portfolioDocumentsDownloadListMessagesDe,\n ...portfolioProjectCardMessagesDe,\n ...portfolioProjectInfoMessagesDe,\n ...portfolioSmallCheckoutMessagesDe,\n\n //\n // Slices\n //\n ...comparisonMessagesDe,\n ...ctaMessagesDe,\n ...customerCardMessagesDe,\n ...customerQuoteCardMessagesDe,\n ...glossaryMessagesDe,\n ...projectFactsMessagesDe,\n ...projectsMapMessagesDe,\n ...shopCheckoutMessagesDe,\n ...textCarouselMessagesDe,\n ...timelineMessagesDe,\n\n //\n // Units\n //\n ...unitMessagesDe,\n};\n\nexport default rootMessagesDe;\n","const messagesDe = {\n 'components.creditsAvailableBadge.text.yes': 'Credits verfügbar',\n 'components.creditsAvailableBadge.text.some': 'Einige verbleibende Credits',\n 'components.creditsAvailableBadge.text.no': 'Keine verbleibenden Credits',\n 'components.creditsAvailableBadge.text.notYet': 'Gutschriften bald verfügbar',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'features.portfolio.documentsDownloadList.projectDocuments':\n 'Projektdokumente',\n 'features.portfolio.documentsDownloadList.downloadDocument':\n 'Dokument herunterladen',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'components.portfolioProjectCard.text.yes': 'Credits verfügbar',\n 'components.portfolioProjectCard.text.some': 'Einige verbleibende Credits',\n 'components.portfolioProjectCard.text.no': 'Keine verbleibenden Credits',\n 'components.portfolioProjectCard.text.notYet': 'Gutschriften bald verfügbar',\n};\n\nexport default messagesDe;\n","const messagesDe = {\n 'features.projectInfo.projectInfo.value': 'Projekt Infos',\n 'features.projectInfo.properties.area': 'Projekt Fläche',\n 'features.projectInfo.properties.location': 'Standort',\n 'features.projectInfo.properties.start': 'Projekt Start Datum',\n 'features.projectInfo.properties.timeSpan': 'Projekt Zeitraum',\n 'features.projectInfo.properties.projectType': 'Projekt Typ',\n 'features.projectInfo.properties.projectDeveloper': 'Projekt Entwickler',\n 'features.projectInfo.properties.verificationStandard.label':\n 'Verifizierungsstandard',\n 'features.projectInfo.properties.verificationStandard.value.SilvaconsultFCSISO14':\n 'SILVACONSULT® Forest Carbon Standard, ISO 14064-2',\n 'features.projectInfo.properties.verificationStandard.value.MfKWCH':\n 'Methodik für Klimaschutzprojekte im Wald für die Schweiz',\n 'features.projectInfo.properties.forecastedAmountYear.label':\n 'Projektvolumen',\n 'features.projectInfo.properties.riskBuffer': 'Anteil Risikopuffer',\n\n 'features.projectInfo.properties.year':\n '{years} {years, plural, one {Jahr} other {Jahre} }',\n};\n\nexport default messagesDe;\n","const messagesDe = {\n 'portfolio.smallCheckout.price.taxNotIncluded': 'ohne Steuern',\n 'portfolio.smallCheckout.price.taxIncluded':\n 'Preis inklusive Steuern: {number}',\n\n 'portfolio.smallCheckout.contributionValueCurrency.label.CHF':\n 'Geben Sie den Beitrag in Fr. ein',\n 'portfolio.smallCheckout.contributionValueCurrency.label.EUR':\n 'Geben Sie den Beitrag in € ein',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.EUR': '€',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.CHF': 'Fr.',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.CHF':\n 'Der Wert muss mindestens 10 CHF betragen',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.EUR':\n 'Der Wert muss mindestens 10 Euro betragen.',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.empty':\n 'Bitte geben Sie einen Wert ein',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh':\n 'Für größere Einkäufe kontaktieren Sie bitte unser Verkaufsteam über den unten stehenden Button',\n\n 'portfolio.smallCheckout.contributionValueKgs.label': 'Beitrag in Tonnen',\n\n 'portfolio.smallCheckout.submitButton': 'Credits kaufen',\n\n 'portfolio.smallCheckout.cta.title':\n 'Möchten Sie mehr als 10.000 tCO₂ kaufen?',\n 'portfolio.smallCheckout.cta.subTitle':\n 'Für Unternehmenskunden bieten wir individuelle Lösungen an. Kontaktieren Sie uns.',\n 'portfolio.smallCheckout.cta.button': 'Unser Vertriebsteam kontaktieren',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.comparison.backgroundShapes': 'Hintergrundformen',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.cta.backgroundShapes': 'Dunkle Hintergrundformen',\n 'sections.cta.backgroundShapesLight': 'Helle Hintergrundformen',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.customerCard.more': 'Weiterlesen',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.customerQuoteCard.more': 'Weiterlesen',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.glossary.copyButtonLabel':\n 'Kopiere den Link zu diesem Abschnitt in die Zwischenablage',\n 'sections.glossary.copySuccessMessage': 'Link in die Zwischenablage kopiert',\n 'sections.glossary.copyFailureMessage':\n 'Link konnte nicht in die Zwischenablage kopiert werden',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.projectFacts.projectInfo.value': 'Projekt Infos',\n 'projects.projectFacts.properties.area': 'Fläche',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.projectsMap.link.text': 'Mehr Infos',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.shopCheckout.intro.price': 'Preis',\n\n 'sections.shopCheckout.contributionValue.label.EUR':\n 'Geben sie einen Betrag in € ein',\n 'sections.shopCheckout.contributionValue.label.CHF':\n 'Geben sie einen Betrag in CHF ein',\n 'sections.shopCheckout.contributionValue.unit.EUR': '€',\n 'sections.shopCheckout.contributionValue.unit.CHF': 'CHF',\n 'sections.shopCheckout.contributionValue.validation.empty':\n 'Bitte geben sie einen Betrag ein',\n 'sections.shopCheckout.contributionValue.validation.tooLow.EUR':\n 'Der Betrag muss mindestens 10 Euro sein',\n 'sections.shopCheckout.contributionValue.validation.tooLow.CHF':\n 'Der Betrag muss mindestens 10 CHF sein',\n 'sections.shopCheckout.contributionValue.validation.tooHigh':\n 'Für größere Einkäufe kontaktieren Sie bitte unser Verkaufsteam über office@tree.ly',\n\n 'sections.shopCheckout.summary.kg': 'Menge',\n 'sections.shopCheckout.summary.price': 'Preis',\n 'sections.shopCheckout.summary.price.taxNotIncluded': 'ohne Steuern',\n 'sections.shopCheckout.summary.price.taxIncluded':\n 'Preis inklusive Steuern: {number}',\n\n 'sections.shopCheckout.submit': 'Kaufen',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.textCarousel.moveRight': 'Nach rechts bewegen',\n 'sections.textCarousel.moveLeft': 'Nach links bewegen',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.timeline.backgroundShapes': 'Hintergrundformen',\n 'sections.timeline.showMoreButton': 'Drei weitere Meilensteine anzeigen',\n};\nexport default messagesDe;\n","const unitMessagesDe = {\n 'unit.formatter.tonsCo2': '{number} /tCO₂',\n 'unit.formatter.tonsCo2PerYear': '{number} tCO₂/Jahr',\n};\nexport default unitMessagesDe;\n","import comparisonMessagesEn from './slices/Comparison/messages.en';\nimport creditsAvailableBadgeMessagesEn from './components/CreditsAvailableBadge/messages.en';\nimport ctaMessagesEn from './slices/Cta/messages.en';\nimport customerCardMessagesEn from './components/CustomerCard/messages.en';\nimport customerQuoteCardMessagesEn from './components/CustomerQuoteCard/messages.en';\nimport glossaryMessagesEn from './slices/Glossary/messages.en';\nimport portfolioDocumentsDownloadListMessagesEn from './components/portfolio/DocumentsDownloadList/messages.en';\nimport projectFactsMessagesEn from './slices/ProjectFacts/messages.en';\nimport projectsMapMessagesEn from './slices/ProjectsMap/messages.en';\nimport portfolioProjectInfoMessagesEn from './components/portfolio/ProjectInfo/messages.en';\nimport portfolioProjectCardMessagesEn from './components/portfolio/PortfolioProjectCard/messages.en';\nimport portfolioSmallCheckoutMessagesEn from './components/portfolio/SmallCheckout/messages.en';\nimport shopCheckoutMessagesEn from './slices/ShopCheckout/messages.en';\nimport textCarouselMessagesEn from './slices/TextCarousel/messages.en';\nimport timelineMessagesEn from './slices/Timeline/messages.en';\n\nimport unitMessagesEn from './unit.messages.en';\n\nconst rootMessagesEn = {\n //\n // Components\n //\n ...creditsAvailableBadgeMessagesEn,\n ...portfolioDocumentsDownloadListMessagesEn,\n ...portfolioProjectCardMessagesEn,\n ...portfolioProjectInfoMessagesEn,\n ...portfolioSmallCheckoutMessagesEn,\n\n //\n // Slices\n //\n ...comparisonMessagesEn,\n ...ctaMessagesEn,\n ...customerCardMessagesEn,\n ...customerQuoteCardMessagesEn,\n ...glossaryMessagesEn,\n ...projectFactsMessagesEn,\n ...projectsMapMessagesEn,\n ...shopCheckoutMessagesEn,\n ...textCarouselMessagesEn,\n ...timelineMessagesEn,\n\n //\n // Units\n //\n ...unitMessagesEn,\n};\n\nexport default rootMessagesEn;\n","const messagesEn = {\n 'components.creditsAvailableBadge.text.yes': 'Credits available',\n 'components.creditsAvailableBadge.text.some': 'Some remaining credits',\n 'components.creditsAvailableBadge.text.no': 'No remaining credits',\n 'components.creditsAvailableBadge.text.notYet': 'Credits available soon',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'features.portfolio.documentsDownloadList.projectDocuments':\n 'Project documents',\n 'features.portfolio.documentsDownloadList.downloadDocument':\n 'Download document',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'components.portfolioProjectCard.text.yes': 'Credits available',\n 'components.portfolioProjectCard.text.some': 'Some remaining credits',\n 'components.portfolioProjectCard.text.no': 'No remaining credits',\n 'components.portfolioProjectCard.text.notYet': 'Credits available soon',\n};\n\nexport default messagesEn;\n","const messagesEn = {\n 'features.projectInfo.projectInfo.value': 'Project Infos',\n 'features.projectInfo.properties.area': 'Project Area',\n 'features.projectInfo.properties.location': 'Location',\n 'features.projectInfo.properties.start': 'Project Start Date',\n 'features.projectInfo.properties.timeSpan': 'Project Time Span',\n 'features.projectInfo.properties.projectType': 'Project Type',\n 'features.projectInfo.properties.projectDeveloper': 'Project Developer',\n 'features.projectInfo.properties.verificationStandard.label':\n 'Verification Standard',\n 'features.projectInfo.properties.verificationStandard.value.SilvaconsultFCSISO14':\n 'SILVACONSULT® Forest Carbon Standard, ISO 14064-2',\n 'features.projectInfo.properties.verificationStandard.value.MfKWCH':\n 'Methodik für Klimaschutzprojekte im Wald für die Schweiz',\n 'features.projectInfo.properties.forecastedAmountYear.label':\n 'Project Volume',\n 'features.projectInfo.properties.riskBuffer': 'Risk Buffer Share',\n\n 'features.projectInfo.properties.year':\n '{years} {years, plural, one {year} other {years} }',\n};\n\nexport default messagesEn;\n","const messagesEn = {\n 'portfolio.smallCheckout.price.taxNotIncluded': 'not including tax',\n 'portfolio.smallCheckout.price.taxIncluded': 'Price including tax: {number}',\n\n 'portfolio.smallCheckout.contributionValueCurrency.label.CHF':\n 'Contribution Amount in CHF',\n 'portfolio.smallCheckout.contributionValueCurrency.label.EUR':\n 'Contribution Amount in €',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.EUR': '€',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.CHF': 'CHF',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.CHF':\n 'The value must be at least 10 CHF',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.EUR':\n 'The value must be at least 10 Euro',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.empty':\n 'Please enter a value',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh':\n 'For bigger purchases please contact our sales team via office@tree.ly',\n\n 'portfolio.smallCheckout.contributionValueKgs.label':\n 'Contribution Amount in Tons',\n\n 'portfolio.smallCheckout.submitButton': 'Buy credits',\n\n 'portfolio.smallCheckout.cta.title': 'Looking to buy more than 10.000 tCO₂?',\n 'portfolio.smallCheckout.cta.subTitle':\n 'For enterprise-customers we offer custom solutions. Feel free to contact us.',\n 'portfolio.smallCheckout.cta.button': 'Contact our Sales Team',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'sections.comparison.backgroundShapes': 'Background shapes',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'sections.cta.backgroundShapesDark': 'Dark background shapes',\n 'sections.cta.backgroundShapesLight': 'Light background shapes',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'sections.customerCard.more': 'Read more',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'sections.customerQuoteCard.more': 'Read more',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'sections.glossary.copyButtonLabel':\n 'Copy a link to this section to your clipboard',\n 'sections.glossary.copySuccessMessage': 'Copied the link to your clipboard',\n 'sections.glossary.copyFailureMessage': 'Could not copy link to clipboard',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'sections.projectFacts.projectInfo.value': 'Project Infos',\n 'projects.projectFacts.properties.area': 'Area',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'sections.projectsMap.link.text': 'Show more info',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'sections.shopCheckout.intro.price': 'Price',\n\n 'sections.shopCheckout.contributionValue.label.EUR':\n 'Enter contribution value in €',\n 'sections.shopCheckout.contributionValue.label.CHF':\n 'Enter contribution value in CHF',\n 'sections.shopCheckout.contributionValue.unit.EUR': '€',\n 'sections.shopCheckout.contributionValue.unit.CHF': 'CHF',\n 'sections.shopCheckout.contributionValue.validation.empty':\n 'Please enter a value',\n 'sections.shopCheckout.contributionValue.validation.tooLow.EUR':\n 'Der Betrag muss mindestens 10 Euro sein',\n 'sections.shopCheckout.contributionValue.validation.tooLow.CHF':\n 'Der Betrag muss mindestens 10 CHF sein',\n 'sections.shopCheckout.contributionValue.validation.tooHigh':\n 'For bigger purchases please contact our sales team via office@tree.ly',\n\n 'sections.shopCheckout.summary.kg': 'Quantity',\n 'sections.shopCheckout.summary.price': 'Price',\n 'sections.shopCheckout.summary.price.taxNotIncluded': 'not including tax',\n 'sections.shopCheckout.summary.price.taxIncluded':\n 'Price including tax: {number}',\n\n 'sections.shopCheckout.submit': 'Checkout',\n};\nexport default messagesEn;\n","const messagesDe = {\n 'sections.textCarousel.moveRight': 'Move right',\n 'sections.textCarousel.moveLeft': 'Move left',\n};\nexport default messagesDe;\n","const messagesEn = {\n 'sections.timeline.backgroundShapes': 'Background shapes',\n 'sections.timeline.showMoreButton': 'Show three more milestones',\n};\nexport default messagesEn;\n","const unitMessagesEn = {\n 'unit.formatter.tonsCo2': '{number} /tCO₂',\n 'unit.formatter.tonsCo2PerYear': '{number} tCO₂/year',\n};\nexport default unitMessagesEn;\n","import { css } from '@emotion/react';\n\nexport const GLOBAL_STYLE = css`\n :root {\n --default-hero-height: calc(100vh - var(--boemly-space-24));\n }\n\n a {\n text-decoration: none;\n }\n`;\n","import React, { createContext } from 'react';\nimport { createIntl, createIntlCache } from 'react-intl';\nimport rootMessagesDe from '../../rootMessages.de';\nimport rootMessagesEn from '../../rootMessages.en';\nimport Locale from '../../models/Locale';\nimport { Global } from '@emotion/react';\nimport { GLOBAL_STYLE } from '../../constants/globalStyle';\n\nconst cache = createIntlCache();\n\nconst intlFactory = (locale: string) =>\n createIntl(\n {\n locale,\n messages: { de: rootMessagesDe, en: rootMessagesEn }[locale],\n },\n cache\n );\n\nexport const IntlContext = createContext(intlFactory('en'));\n\nexport interface ContextProviderProps {\n children: React.ReactNode;\n locale: Locale;\n}\n\nexport const ContextProvider: React.FC<ContextProviderProps> = ({\n children,\n locale,\n}: ContextProviderProps): JSX.Element => {\n return (\n <>\n <Global styles={{ GLOBAL_STYLE }} />\n <IntlContext.Provider value={intlFactory(locale)}>\n {children}\n </IntlContext.Provider>\n </>\n );\n};\n","import React, { useContext, useMemo, useRef, useState } from 'react';\nimport {\n Box,\n Center,\n DefaultSectionContainer,\n DefaultSectionHeader,\n IconButton,\n TextCardWithIcon,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiTextCardWithIcon from '../../models/strapi/StrapiTextCardWithIcons';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport {\n CardContainer,\n CarouselContainer,\n CarouselInnerContainer,\n} from './styles';\nimport { useMeasure, useWindowSize } from 'react-use';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { ArrowLeft, ArrowRight } from '@phosphor-icons/react';\nimport { IntlContext } from '../../components/ContextProvider';\n\ninterface TextCarouselSlice extends StrapiDefaultHeader {\n slides: StrapiTextCardWithIcon[];\n button?: StrapiLink;\n}\nexport interface TextCarouselProps {\n slice: TextCarouselSlice;\n}\n\nconst ITEM_GAP = 24;\nconst MAX_OFFSET_RIGHT = 55;\n\nexport const TextCarousel: React.FC<TextCarouselProps> = ({\n slice,\n}: TextCarouselProps) => {\n const containerRef = useRef(null);\n const [primary50] = useToken('colors', ['primary.50']);\n const [itemRef, { width: itemWidth }] = useMeasure<HTMLDivElement>();\n const { formatMessage } = useContext(IntlContext);\n const { width: windowWidth } = useWindowSize();\n\n const [sliderIndex, setSliderIndex] = useState(0);\n\n const numberOfItems = useMemo(\n () => slice.slides.length,\n [slice.slides.length]\n );\n\n const sliderItemsWidth = useMemo(\n () => numberOfItems * (itemWidth + ITEM_GAP) - ITEM_GAP,\n [itemWidth, numberOfItems]\n );\n\n const offsetLeft = useMemo(\n () => sliderIndex * (itemWidth + ITEM_GAP) * -1,\n [sliderIndex, itemWidth]\n );\n\n const allowScroll = useMemo(\n () => sliderItemsWidth + ITEM_GAP * 2 > windowWidth,\n\n [sliderItemsWidth, windowWidth]\n );\n\n const canMoveRight = useMemo(() => {\n const offsetRight = windowWidth - (sliderItemsWidth + offsetLeft);\n\n return offsetRight < MAX_OFFSET_RIGHT;\n }, [itemWidth, sliderIndex, sliderItemsWidth, windowWidth]);\n\n const canMoveLeft = useMemo(() => sliderIndex !== 0, [sliderIndex]);\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center' }}\n titleProps={{ textAlign: 'center', maxW: '6xl', marginX: 'auto' }}\n textProps={{ textAlign: 'center', maxW: '2xl', marginX: 'auto' }}\n />\n </Wrapper>\n\n <CarouselContainer ref={containerRef}>\n <Box position=\"relative\" width=\"full\">\n <CarouselInnerContainer\n numberOfItems={slice.slides.length}\n animate={{\n x: offsetLeft,\n }}\n transition={{\n duration: 0.3,\n ease: 'easeInOut',\n }}\n >\n {slice.slides.map(({ id, title, text, icon }) => (\n <CardContainer key={id} ref={itemRef}>\n <TextCardWithIcon\n title={title}\n text={text}\n height=\"full\"\n icon={\n <Image\n src={strapiMediaUrl(icon.img, 'small')}\n alt={icon.alt}\n fill\n style={{ objectFit: icon.objectFit || 'contain' }}\n />\n }\n displayAs=\"column\"\n />\n </CardContainer>\n ))}\n </CarouselInnerContainer>\n <Box\n display={['none', null, null, !!allowScroll ? 'flex' : 'none']}\n pointerEvents=\"none\"\n position=\"absolute\"\n top=\"40%\"\n left=\"0\"\n width=\"full\"\n py=\"0\"\n px=\"32\"\n justifyContent=\"space-between\"\n >\n <Box>\n <AnimatePresence>\n {canMoveLeft && (\n <IconButton\n key=\"leftButton\"\n as={motion.button}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex - 1)}\n aria-label={formatMessage({\n id: 'sections.textCarousel.moveLeft',\n })}\n icon={<ArrowLeft size={16} />}\n pointerEvents=\"auto\"\n boxShadow=\"md\"\n />\n )}\n </AnimatePresence>\n </Box>\n <Box>\n <AnimatePresence>\n {canMoveRight && (\n <IconButton\n key=\"rightButton\"\n as={motion.button}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex + 1)}\n aria-label={formatMessage({\n id: 'sections.textCarousel.moveRight',\n })}\n icon={<ArrowRight size={16} />}\n pointerEvents=\"auto\"\n boxShadow=\"md\"\n />\n )}\n </AnimatePresence>\n </Box>\n </Box>\n </Box>\n </CarouselContainer>\n\n <>\n {slice.button && (\n <Wrapper>\n <Center>\n <StrapiLinkButton\n link={slice.button}\n size=\"xl\"\n mt={['8', null, '14']}\n />\n </Center>\n </Wrapper>\n )}\n </>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport {\n Box,\n ContactArea,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Grid,\n GridItem,\n TextCardWithIcon,\n useMediaQuery,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { useRouter } from 'next/router';\nimport { BREAKPOINT_LG_QUERY } from '../../constants/breakpoints';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiContactArea from '../../models/strapi/StrapiContactArea';\nimport StrapiTextCardWithIcon from '../../models/strapi/StrapiTextCardWithIcons';\nimport StrapiImage from '../../models/strapi/StrapiImage';\n\ninterface TextWithTextCardsSlice extends StrapiDefaultHeader {\n cards: StrapiTextCardWithIcon[];\n contact?: StrapiContactArea;\n shape?: StrapiImage;\n}\nexport interface TextWithTextCardsProps {\n slice: TextWithTextCardsSlice;\n}\n\nexport const TextWithTextCards: React.FC<TextWithTextCardsProps> = ({\n slice,\n}: TextWithTextCardsProps) => {\n const { push } = useRouter();\n const [white] = useToken('colors', ['white']);\n const [belowBreakpoint] = useMediaQuery(BREAKPOINT_LG_QUERY);\n\n return (\n <DefaultSectionContainer backgroundColor={white} title={slice.title}>\n <>\n {slice.shape && (\n <Box\n position=\"absolute\"\n right={['-28', null, null, '-136']}\n top={['96', null, null, '-28']}\n width={['sm', null, null, '4xl']}\n height={['sm', null, null, '4xl']}\n borderBottomRightRadius=\"full\"\n >\n <Image\n src={strapiMediaUrl(slice.shape.img, 'medium')}\n alt={slice.shape.alt}\n fill\n style={{\n objectFit: slice.shape.objectFit || 'cover',\n borderBottomRightRadius: 'var(--boemly-radii-full)',\n }}\n />\n </Box>\n )}\n </>\n <Wrapper>\n <>\n <Grid\n templateColumns={[\n 'repeat(8, 1fr)',\n null,\n null,\n null,\n 'repeat(16, 1fr)',\n ]}\n templateRows={[\n 'repeat(2, auto)',\n null,\n null,\n null,\n 'repeat(1, auto)',\n ]}\n rowGap=\"12\"\n >\n <GridItem\n colSpan={[8, null, null, null, 9]}\n rowSpan={1}\n pr={['0', null, null, null, '32']}\n >\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n textProps={{ pr: ['0', null, null, null, '10'] }}\n />\n\n {slice.contact && !belowBreakpoint && (\n <ContactArea\n title={slice.contact.title}\n text={slice.contact.text}\n avatar={{\n name: slice.contact.avatar.name,\n description: slice.contact.avatar.description,\n image: (\n <Image\n src={strapiMediaUrl(\n slice.contact.avatar.image.img,\n 'small'\n )}\n alt={slice.contact.avatar.image.alt}\n fill\n style={{\n objectFit:\n slice.contact.avatar.image.objectFit || 'cover',\n }}\n />\n ),\n }}\n link={{\n text: slice.contact.button.text,\n onClick: () => push(strapiLinkUrl(slice.contact?.button)),\n }}\n />\n )}\n </GridItem>\n <GridItem\n colSpan={[8, null, null, null, 7]}\n rowSpan={1}\n position=\"relative\"\n >\n {slice.cards.map((card) => (\n <TextCardWithIcon\n key={card.id}\n title={card.title}\n text={card.text}\n icon={\n <Image\n src={strapiMediaUrl(card.icon.img, 'small')}\n alt={card.icon.alt}\n fill\n style={{ objectFit: card.icon.objectFit || 'contain' }}\n />\n }\n />\n ))}\n </GridItem>\n </Grid>\n {slice.contact && belowBreakpoint && (\n <ContactArea\n title={slice.contact.title}\n text={slice.contact.text}\n avatar={{\n name: slice.contact.avatar.name,\n description: slice.contact.avatar.description,\n image: (\n <Image\n src={strapiMediaUrl(\n slice.contact.avatar.image.img,\n 'small'\n )}\n alt={slice.contact.avatar.image.alt}\n fill\n style={{\n objectFit:\n slice.contact.avatar.image.objectFit || 'cover',\n }}\n />\n ),\n }}\n link={{\n text: slice.contact.button.text,\n onClick: () => push(strapiLinkUrl(slice.contact?.button)),\n }}\n />\n )}\n </>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","export const MAPBOX_TOKEN =\n 'pk.eyJ1IjoidHJlZS1seSIsImEiOiJja25rNG1heHgwNThjMnZwZTl2eThmeXUwIn0.SOrYUKfevZkbx8jZPxJesA';\n\nexport enum MapBoxStyle {\n Outdoors = 'mapbox://styles/mapbox/outdoors-v11',\n SatelliteStreets = 'mapbox://styles/mapbox/satellite-streets-v11',\n Satellite = 'mapbox://styles/mapbox/satellite-v9',\n CaliTerrain = 'mapbox://styles/tree-ly/clna54iq603ht01pbc199cszw',\n}\n\nexport const MAPBOX_TILES_URL = `${\n process.env.NEXT_PUBLIC_MAPBOX_TILES_URL || 'http://localhost:8123'\n}/vectortiles/v1/plots/{z}/{x}/{y}.mvt`;\nexport const MAPBOX_SOURCE_LAYER = 'plots';\nexport const MAPBOX_SOURCE_IDENTIFIER = 'plots';\nexport const MAPBOX_BORDER_LAYER_IDENTIFIER = 'plots-borders';\nexport const MAPBOX_FILL_LAYER_IDENTIFIER = 'plots-fill';\nexport const MAPBOX_TEXT_LAYER_IDENTIFIER = 'plots-text';\n\nexport const MAPBOX_TEXT_MIN_ZOOM = 15;\nexport const MAPBOX_SHAPES_MIN_ZOOM = 13;\n\nexport const MAPBOX_MAX_ZOOM = 19;\nexport const MAPBOX_INITIAL_ZOOM = 13;\n","import { FormatNumberOptions } from 'react-intl';\n\nexport const FORMAT_AS_EUR_CONFIG: FormatNumberOptions = {\n style: 'currency',\n currency: 'EUR',\n};\n\nexport const FORMAT_AS_METER_CONFIG: FormatNumberOptions = {\n unit: 'meter',\n unitDisplay: 'short',\n style: 'unit',\n maximumFractionDigits: 0,\n};\n\nexport const FORMAT_AS_HECTARE_CONFIG: FormatNumberOptions = {\n unit: 'hectare',\n unitDisplay: 'short',\n style: 'unit',\n maximumFractionDigits: 2,\n};\n\nexport const FORMAT_AS_CUBIC_METERS_PER_HECTARE_CONFIG: FormatNumberOptions = {\n maximumFractionDigits: 0,\n};\n\nexport const FORMAT_AS_PERCENT_CONFIG: FormatNumberOptions = {\n style: 'percent',\n maximumFractionDigits: 2,\n};\n","import React, { useContext } from 'react';\nimport { ProjectCard } from 'boemly';\nimport { PortfolioProject, strapiMediaUrl } from '../../..';\nimport CreditsAvailableState from '../../../models/CreditsAvailableState';\nimport { FORMAT_AS_HECTARE_CONFIG } from '../../../constants/formatter';\nimport Image from 'next/image';\nimport { IntlContext } from '../../ContextProvider';\n\nexport interface PortfolioProjectCardProps {\n project: PortfolioProject;\n}\n\nexport const PortfolioProjectCard = ({\n project,\n}: PortfolioProjectCardProps) => {\n const { formatMessage, formatNumber } = useContext(IntlContext);\n\n const creditsAvailableMessages: Record<CreditsAvailableState, string> = {\n [CreditsAvailableState.YES]: formatMessage({\n id: 'components.portfolioProjectCard.text.yes',\n }),\n\n [CreditsAvailableState.SOME]: formatMessage({\n id: 'components.portfolioProjectCard.text.some',\n }),\n\n [CreditsAvailableState.NO]: formatMessage({\n id: 'components.portfolioProjectCard.text.no',\n }),\n\n [CreditsAvailableState.NOT_YET]: formatMessage({\n id: 'components.portfolioProjectCard.text.notYet',\n }),\n };\n\n return (\n <ProjectCard\n title={project.title}\n facts={[\n {\n id: 1,\n text: formatNumber(\n (project.area || 0) / 10000,\n FORMAT_AS_HECTARE_CONFIG\n ),\n },\n { id: 2, text: project.location || '' },\n ]}\n footerTitle={\n creditsAvailableMessages[\n project.creditsAvailable ?? CreditsAvailableState.NOT_YET\n ]\n }\n footerSubTitle={project.footerSubTitle || ''}\n image={\n project.thumbnail && (\n <Image\n src={strapiMediaUrl(project.thumbnail?.img, 'medium')}\n alt={project.thumbnail?.alt}\n fill\n style={{\n objectFit: project.thumbnail?.objectFit || 'cover',\n }}\n />\n )\n }\n />\n );\n};\n","import React from 'react';\nimport {\n DefaultSectionContainer,\n DefaultSectionHeader,\n Grid,\n GridItem,\n ProjectCard,\n Spacer,\n BoemlyList,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { ArrowRight } from '@phosphor-icons/react';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiProjectCard from '../../models/strapi/StrapiProjectCard';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport { IStrapiData, PortfolioProject, StrapiProject } from '../..';\nimport PortfolioProjectCard from '../../components/portfolio/PortfolioProjectCard';\n\ninterface TextWithCardSlice {\n tagline?: string;\n title: string;\n text?: string;\n listItems?: {\n id: number;\n text: string;\n }[];\n button?: StrapiLink;\n card?: StrapiProjectCard;\n project?: { data?: IStrapiData<StrapiProject> };\n cardPosition: 'left' | 'right';\n}\nexport interface TextWithCardProps {\n slice: TextWithCardSlice;\n projects: PortfolioProject[];\n}\n\nexport const TextWithCard: React.FC<TextWithCardProps> = ({\n slice,\n projects,\n}: TextWithCardProps) => {\n const portfolioProject = projects.find(\n (p) =>\n slice.project?.data?.attributes.fpmProjectId &&\n p.id === slice.project.data.attributes.fpmProjectId\n );\n\n const card = (\n <GridItem\n colSpan={[4, null, null, null, 2]}\n rowSpan={1}\n position=\"relative\"\n data-testid={`card-position-${slice.cardPosition}`}\n >\n {portfolioProject && <PortfolioProjectCard project={portfolioProject} />}\n {!portfolioProject && slice.card && (\n <ProjectCard\n facts={slice.card.facts}\n footerSubTitle={slice.card.footerSubTitle}\n footerTitle={slice.card.footerTitle}\n title={slice.card.title}\n image={\n <Image\n src={strapiMediaUrl(slice.card.image.img, 'medium')}\n alt={slice.card.image.alt}\n fill\n style={{ objectFit: slice.card.image.objectFit || 'cover' }}\n />\n }\n />\n )}\n </GridItem>\n );\n\n return (\n <DefaultSectionContainer title={slice.title}>\n <Wrapper>\n <Grid\n templateColumns={[\n 'repeat(4, auto)',\n null,\n null,\n null,\n 'repeat(6, auto)',\n ]}\n templateRows={[\n 'repeat(2, auto)',\n null,\n null,\n null,\n 'repeat(1, auto)',\n ]}\n rowGap=\"12\"\n columnGap={['0', null, null, null, '28']}\n >\n {slice.cardPosition === 'left' && card}\n <GridItem colSpan={4} rowSpan={1} position=\"relative\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n\n {slice.listItems && (\n <>\n <Spacer height=\"10\" />\n <BoemlyList listItems={slice.listItems} />\n <Spacer height=\"10\" />\n </>\n )}\n\n {slice.button && (\n <StrapiLinkButton\n link={slice.button}\n size=\"md\"\n colorScheme=\"white\"\n variant=\"outline\"\n rightIcon={<ArrowRight />}\n />\n )}\n </GridItem>\n {slice.cardPosition === 'right' && card}\n </Grid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport Link from 'next/link';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Heading,\n SimpleGrid,\n Text,\n Wrapper,\n} from 'boemly';\nimport { CaretRight } from '@phosphor-icons/react';\nimport { MEDIUM_TRANSITION_DURATION } from '../../constants/animations';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiLink from '../../models/strapi/StrapiLink';\n\ninterface LinkCardsGridSlice {\n tagline?: string;\n title: string;\n text?: string;\n cards: {\n id: number;\n title: string;\n text?: string;\n link: StrapiLink;\n }[];\n}\nexport interface LinkCardsGridProps {\n slice: LinkCardsGridSlice;\n}\n\nexport const LinkCardsGrid: React.FC<LinkCardsGridProps> = ({\n slice,\n}: LinkCardsGridProps) => (\n <DefaultSectionContainer title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n\n <SimpleGrid mt=\"16\" columns={[1, null, null, null, 2]} gap=\"4\">\n {slice.cards.map(({ id, title, text, link }) => (\n <Box\n key={id}\n as={Link}\n href={strapiLinkUrl(link)}\n data-testid=\"link\"\n px=\"10\"\n py=\"8\"\n borderStyle=\"solid\"\n borderWidth=\"thin\"\n borderColor=\"gray.200\"\n borderRadius=\"2xl\"\n display=\"flex\"\n flexDir=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n cursor=\"pointer\"\n transitionDuration={`${MEDIUM_TRANSITION_DURATION}s`}\n _hover={{ backgroundColor: 'gray.50' }}\n >\n <div>\n <Heading as=\"h4\" size=\"lg\">\n {title}\n </Heading>\n {text && (\n <Text mt=\"2\" size=\"smRegularNormal\">\n {text}\n </Text>\n )}\n </div>\n\n <Box\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n borderStyle=\"solid\"\n borderWidth=\"thin\"\n borderColor=\"gray.200\"\n borderRadius=\"2xl\"\n height=\"12\"\n width=\"12\"\n minWidth=\"12\"\n minHeight=\"12\"\n ml=\"6\"\n backgroundColor=\"white\"\n >\n <CaretRight />\n </Box>\n </Box>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n);\n","import React from 'react';\nimport {\n Box,\n DefaultSectionHeader,\n Flex,\n Gradient,\n Tag,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\nexport interface SmallHeroProps {\n slice: {\n tags?: {\n id: number;\n text: string;\n colorScheme: string;\n }[];\n tagline?: string;\n title: string;\n subTitle?: string;\n button?: StrapiLink;\n image?: StrapiImage;\n gradient?: boolean;\n };\n theme: 'dark' | 'light';\n}\n\nconst colors = {\n dark: {\n tagline: 'white',\n title: 'white',\n text: 'white',\n background: 'gray.900',\n },\n light: {\n tagline: 'primary.500',\n title: 'black',\n text: 'gray.500',\n background: 'primary.50',\n },\n};\n\nexport const SmallHero: React.FC<SmallHeroProps> = ({\n slice,\n theme,\n}: SmallHeroProps) => (\n <Box\n position=\"relative\"\n width=\"full\"\n height=\"xl\"\n backgroundColor={colors[theme].background}\n >\n {slice.image && (\n <>\n <Image\n src={strapiMediaUrl(slice.image.img, 'xLarge')}\n alt={slice.image.alt}\n fill\n style={{ objectFit: slice.image.objectFit || 'cover' }}\n />\n {slice.gradient && <Gradient />}\n </>\n )}\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"60%\"\n width=\"full\"\n textAlign=\"center\"\n transform=\"translateY(-50%)\"\n >\n <Wrapper>\n <>\n {slice.tags && (\n <Flex direction=\"row\" justify=\"center\" gap=\"2\" mb=\"4\" wrap=\"wrap\">\n {slice.tags.map(({ id, text, colorScheme }) => (\n <Tag\n key={id}\n colorScheme={colorScheme}\n size=\"md\"\n variant=\"subtle\"\n >\n {text}\n </Tag>\n ))}\n </Flex>\n )}\n <DefaultSectionHeader\n isHero\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n taglineProps={{\n color: colors[theme].tagline,\n textAlign: 'center',\n mx: 'auto',\n }}\n titleProps={{\n color: colors[theme].title,\n maxW: '4xl',\n textAlign: 'center',\n mx: 'auto',\n }}\n textProps={{\n maxW: '2xl',\n textAlign: 'center',\n mx: 'auto',\n color: colors[theme].text,\n }}\n />\n {slice.button && (\n <StrapiLinkButton link={slice.button} mt=\"6\" size=\"lg\" />\n )}\n </>\n </Wrapper>\n </Box>\n </Box>\n);\n","import styled from '@emotion/styled';\nimport { BREAKPOINT_MD } from '../../constants/breakpoints';\nimport { Box, Link } from 'boemly';\n\nexport const BlogItemContainer = styled(Link)`\n text-decoration: none;\n\n & div img {\n transition: transform var(--default-ease) var(--medium-transition-duration);\n }\n\n &:hover {\n text-decoration: none;\n\n & > div:first-of-type img {\n transform: scale(1.03);\n }\n }\n`;\n\nexport const ImageContainer = styled(Box)`\n width: 100%;\n height: var(--boemly-sizes-xs);\n position: relative;\n border-radius: var(--boemly-radii-2xl);\n\n // Fixes the flickering of borders during animation in Safari\n -webkit-mask-image: -webkit-radial-gradient(white, black);\n\n & span,\n div {\n border-radius: var(--boemly-radii-2xl);\n }\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n height: var(--boemly-sizes-3xs);\n }\n`;\n","import React, { useContext } from 'react';\nimport {\n Box,\n DatePersonPair,\n DefaultSectionContainer,\n Heading,\n SimpleGrid,\n Spacer,\n Text,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport Link from 'next/link';\nimport StrapiBlogPost from '../../models/strapi/StrapiBlogPost';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport { BlogItemContainer, ImageContainer } from './styles';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface BlogProps {\n slice: {\n blog_posts: IStrapiData<StrapiBlogPost>[];\n };\n blogPosts: IStrapiData<StrapiBlogPost>[];\n}\n\nexport const Blog: React.FC<BlogProps> = ({ slice, blogPosts }: BlogProps) => {\n const { formatDate } = useContext(IntlContext);\n const sortedBlogPosts = slice.blog_posts.sort(\n (a, b) =>\n new Date(b.attributes.createdAt).getTime() -\n new Date(a.attributes.createdAt).getTime()\n );\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2]} spacingX={56} spacingY={24}>\n {sortedBlogPosts.map(({ attributes }) => {\n const blogPost: IStrapiData<StrapiBlogPost> | undefined =\n blogPosts.find((bp) => bp.attributes.slug === attributes.slug);\n if (!blogPost) {\n return null;\n }\n return (\n <BlogItemContainer\n key={blogPost.attributes.slug}\n as={Link}\n href={`/blog/${blogPost.attributes.slug}`}\n >\n <ImageContainer>\n <Image\n src={strapiMediaUrl(blogPost.attributes.img.img, 'large')}\n alt={blogPost.attributes.img.alt}\n fill\n style={{\n objectFit: blogPost.attributes.img.objectFit || 'cover',\n }}\n />\n </ImageContainer>\n <Box px=\"2\" py=\"8\">\n {blogPost.attributes.category.data && (\n <Text size=\"smMonoUppercase\" color=\"primary.800\" mb=\"2\">\n {blogPost.attributes.category.data.attributes.name}\n </Text>\n )}\n <Heading size=\"lg\">{blogPost.attributes.title}</Heading>\n {blogPost.attributes.teaser && (\n <Text size=\"mdRegularNormal\" mt=\"2\">\n {blogPost.attributes.teaser}\n </Text>\n )}\n <Spacer height=\"4\" />\n <DatePersonPair\n date={formatDate(blogPost.attributes.createdAt)}\n person={\n blogPost.attributes.author.data\n ? {\n name: blogPost.attributes.author.data.attributes\n .name,\n image: (\n <Image\n src={strapiMediaUrl(\n blogPost.attributes.author.data.attributes.img\n .img,\n 'thumbnail'\n )}\n alt={\n blogPost.attributes.author.data.attributes.img\n .alt\n }\n fill\n style={{\n objectFit:\n blogPost.attributes.author.data.attributes\n .img.objectFit || 'cover',\n }}\n />\n ),\n }\n : undefined\n }\n />\n </Box>\n </BlogItemContainer>\n );\n })}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport { Box, DefaultSectionContainer, SimpleGrid, Wrapper } from 'boemly';\nimport Link from 'next/link';\nimport { MEDIUM_TRANSITION_DURATION } from '../../constants/animations';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport PortfolioProjectCard from '../../components/portfolio/PortfolioProjectCard';\nimport { IStrapi, IStrapiData, StrapiProject } from '../..';\n\nexport interface ProjectsGridProps {\n slice: {\n projects: IStrapi<IStrapiData<StrapiProject>[]>;\n };\n projects: PortfolioProject[];\n}\n\nconst ConditionalWrapper = ({\n condition,\n wrapper,\n children,\n}: {\n condition: boolean;\n wrapper: (children: JSX.Element) => JSX.Element;\n children: JSX.Element;\n}) => (condition ? wrapper(children) : children);\n\nexport const ProjectsGrid: React.FC<ProjectsGridProps> = ({\n projects,\n slice,\n}: ProjectsGridProps) => {\n const filteredProjects = projects.filter(\n (fpmProject) =>\n fpmProject.thumbnail &&\n slice.projects.data.some(\n (strapiProject) =>\n strapiProject.attributes.fpmProjectId === fpmProject.id\n )\n );\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2, null, 3]} gap=\"16\">\n {filteredProjects.map((project) => (\n <ConditionalWrapper\n key={project.id}\n condition={!!project.slug}\n wrapper={(children: JSX.Element) => (\n <Link\n href={`${project.portfolioHost || ''}/portfolio/${\n project.slug\n }`}\n passHref\n key={project.id}\n legacyBehavior\n >\n {children}\n </Link>\n )}\n >\n <Box\n width=\"full\"\n as=\"a\"\n cursor=\"pointer\"\n borderRadius=\"2xl\"\n transition={`box-shadow ease ${MEDIUM_TRANSITION_DURATION}s`}\n _hover={{ boxShadow: 'lg' }}\n >\n <PortfolioProjectCard project={project} />\n </Box>\n </ConditionalWrapper>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","export const FONT_CUSTOMIZATIONS = {\n body: 'Inter',\n heading: 'Inter',\n display: 'GintoNord',\n mono: 'SpaceMono',\n};\n","import React from 'react';\nimport { FONT_CUSTOMIZATIONS } from '../../constants/fontCustomizations';\nimport rootMessagesDe from '../../rootMessages.de';\nimport rootMessagesEn from '../../rootMessages.en';\nimport { BoemlyThemeProvider } from 'boemly';\nimport { IntlProvider } from 'react-intl';\n\nconst messages = {\n en: rootMessagesEn,\n de: rootMessagesDe,\n};\n\ninterface MinimalProvidersProps {\n locale: string;\n children: JSX.Element | JSX.Element[];\n}\n\nconst MinimalProviders = ({ children, locale }: MinimalProvidersProps) => (\n <IntlProvider messages={messages[locale as 'en' | 'de']} locale={locale}>\n <BoemlyThemeProvider fonts={FONT_CUSTOMIZATIONS}>\n {children}\n </BoemlyThemeProvider>\n </IntlProvider>\n);\n\nexport default MinimalProviders;\n","import React, { useContext } from 'react';\nimport CreditsAvailableState from '../../models/CreditsAvailableState';\nimport { Badge } from 'boemly';\nimport NextLink from 'next/link';\nimport { IntlContext } from '../ContextProvider';\n\nexport interface CreditsAvailableBadgeProps {\n status: CreditsAvailableState;\n href?: string;\n}\n\nconst CreditsAvailableBadge = ({\n status,\n href,\n}: CreditsAvailableBadgeProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n const variants: Record<\n CreditsAvailableState,\n { color: string; text: string }\n > = {\n [CreditsAvailableState.YES]: {\n color: 'green',\n text: formatMessage({ id: 'components.creditsAvailableBadge.text.yes' }),\n },\n [CreditsAvailableState.SOME]: {\n color: 'orange',\n text: formatMessage({ id: 'components.creditsAvailableBadge.text.some' }),\n },\n [CreditsAvailableState.NO]: {\n color: 'red',\n text: formatMessage({ id: 'components.creditsAvailableBadge.text.no' }),\n },\n [CreditsAvailableState.NOT_YET]: {\n color: 'blue',\n text: formatMessage({\n id: 'components.creditsAvailableBadge.text.notYet',\n }),\n },\n };\n\n const variant = variants[status];\n\n return (\n <Badge\n as={href ? NextLink : undefined}\n href={href}\n colorScheme={variant.color}\n width=\"fit-content\"\n >\n {variant.text}\n </Badge>\n );\n};\n\nexport default CreditsAvailableBadge;\n","import React, { useContext } from 'react';\nimport {\n Box,\n Button,\n Container,\n Flex,\n Heading,\n Text,\n useDisclosure,\n useToken,\n} from 'boemly';\nimport { MapPin } from '@phosphor-icons/react';\nimport NextLink from 'next/link';\nimport CreditsAvailableBadge from '../../components/CreditsAvailableBadge';\nimport CreditsAvailableState from '../../models/CreditsAvailableState';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface MapMarkerProps {\n title: string;\n isPublic?: boolean;\n projectDeveloper?: string;\n slug?: string;\n portfolioHost?: string;\n creditsAvailable?: CreditsAvailableState;\n}\n\nconst MapMarker = ({\n title,\n projectDeveloper,\n slug,\n creditsAvailable,\n portfolioHost = '',\n isPublic = false,\n}: MapMarkerProps) => {\n const { formatMessage } = useContext(IntlContext);\n const { isOpen, onOpen, onClose } = useDisclosure();\n const blue600 = useToken('colors', 'blue.600');\n\n return (\n <Flex\n position=\"absolute\"\n gap=\"4\"\n onMouseEnter={onOpen}\n onMouseLeave={onClose}\n cursor=\"grab\"\n >\n <Box\n as={slug ? NextLink : undefined}\n href={slug && `${portfolioHost}/portfolio/${slug}`}\n >\n <MapPin\n size=\"40px\"\n color={blue600}\n weight=\"fill\"\n data-testid=\"mapmarker-pin\"\n filter=\"drop-shadow(0px 0px 2px #FFF)\"\n />\n </Box>\n\n {isPublic && isOpen && (\n <Container\n shadow=\"md\"\n width=\"max-content\"\n minWidth=\"3xs\"\n maxWidth={['3xs', null, null, 'sm']}\n >\n <Flex direction=\"column\">\n {creditsAvailable && (\n <>\n <CreditsAvailableBadge\n status={creditsAvailable}\n href={slug && `${portfolioHost}/portfolio/${slug}`}\n />\n <Box height=\"3\" />\n </>\n )}\n\n <Heading size=\"md\">{title}</Heading>\n\n {projectDeveloper && (\n <Text size=\"smLowNormal\" mt=\"1\">\n {projectDeveloper}\n </Text>\n )}\n\n {slug && (\n <Button\n width=\"fit-content\"\n variant=\"outline\"\n size=\"sm\"\n as={NextLink}\n href={`${portfolioHost}/portfolio/${slug}`}\n mt=\"4\"\n whiteSpace=\"nowrap\"\n >\n {formatMessage({ id: 'sections.projectsMap.link.text' })}\n </Button>\n )}\n </Flex>\n </Container>\n )}\n </Flex>\n );\n};\n\nexport default MapMarker;\n","import { css } from '@emotion/react';\n\nconst mapboxStyle = css`\n .mapboxgl-map {\n -webkit-tap-highlight-color: rgb(0 0 0/0);\n font: 12px/20px Helvetica Neue, Arial, Helvetica, sans-serif;\n overflow: hidden;\n position: relative;\n }\n .mapboxgl-canvas {\n left: 0;\n position: absolute;\n top: 0;\n }\n .mapboxgl-map:-webkit-full-screen {\n height: 100%;\n width: 100%;\n }\n .mapboxgl-canary {\n background-color: salmon;\n }\n .mapboxgl-canvas-container.mapboxgl-interactive,\n .mapboxgl-ctrl-group button.mapboxgl-ctrl-compass {\n cursor: grab;\n -webkit-user-select: none;\n user-select: none;\n }\n .mapboxgl-canvas-container.mapboxgl-interactive.mapboxgl-track-pointer {\n cursor: pointer;\n }\n .mapboxgl-canvas-container.mapboxgl-interactive:active,\n .mapboxgl-ctrl-group button.mapboxgl-ctrl-compass:active {\n cursor: grabbing;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate,\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate .mapboxgl-canvas {\n touch-action: pan-x pan-y;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-drag-pan,\n .mapboxgl-canvas-container.mapboxgl-touch-drag-pan .mapboxgl-canvas {\n touch-action: pinch-zoom;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan,\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan\n .mapboxgl-canvas {\n touch-action: none;\n }\n .mapboxgl-ctrl-bottom-left,\n .mapboxgl-ctrl-bottom-right,\n .mapboxgl-ctrl-top-left,\n .mapboxgl-ctrl-top-right {\n pointer-events: none;\n position: absolute;\n z-index: 2;\n }\n .mapboxgl-ctrl-top-left {\n left: 0;\n top: 0;\n }\n .mapboxgl-ctrl-top-right {\n right: 0;\n top: 0;\n }\n .mapboxgl-ctrl-bottom-left {\n bottom: 0;\n left: 0;\n }\n .mapboxgl-ctrl-bottom-right {\n bottom: 0;\n right: 0;\n }\n .mapboxgl-ctrl {\n clear: both;\n pointer-events: auto;\n transform: translate(0);\n }\n .mapboxgl-ctrl-top-left .mapboxgl-ctrl {\n float: left;\n margin: 10px 0 0 10px;\n }\n .mapboxgl-ctrl-top-right .mapboxgl-ctrl {\n float: right;\n margin: 10px 10px 0 0;\n }\n .mapboxgl-ctrl-bottom-left .mapboxgl-ctrl {\n float: left;\n margin: 0 0 10px 10px;\n }\n .mapboxgl-ctrl-bottom-right .mapboxgl-ctrl {\n float: right;\n margin: 0 10px 10px 0;\n }\n .mapboxgl-ctrl-group {\n background: #fff;\n border-radius: 4px;\n }\n .mapboxgl-ctrl-group:not(:empty) {\n box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1);\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl-group:not(:empty) {\n box-shadow: 0 0 0 2px ButtonText;\n }\n }\n .mapboxgl-ctrl-group button {\n background-color: transparent;\n border: 0;\n box-sizing: border-box;\n cursor: pointer;\n display: block;\n height: 29px;\n outline: none;\n overflow: hidden;\n padding: 0;\n width: 29px;\n }\n .mapboxgl-ctrl-group button + button {\n border-top: 1px solid #ddd;\n }\n .mapboxgl-ctrl button .mapboxgl-ctrl-icon {\n background-position: 50%;\n background-repeat: no-repeat;\n display: block;\n height: 100%;\n width: 100%;\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl-icon {\n background-color: transparent;\n }\n .mapboxgl-ctrl-group button + button {\n border-top: 1px solid ButtonText;\n }\n }\n .mapboxgl-ctrl-attrib-button:focus,\n .mapboxgl-ctrl-group button:focus {\n box-shadow: 0 0 2px 2px #0096ff;\n }\n .mapboxgl-ctrl button:disabled {\n cursor: not-allowed;\n }\n .mapboxgl-ctrl button:disabled .mapboxgl-ctrl-icon {\n opacity: 0.25;\n }\n .mapboxgl-ctrl-group button:first-of-type {\n border-radius: 4px 4px 0 0;\n }\n .mapboxgl-ctrl-group button:last-of-type {\n border-radius: 0 0 4px 4px;\n }\n .mapboxgl-ctrl-group button:only-of-type {\n border-radius: inherit;\n }\n .mapboxgl-ctrl button:not(:disabled):hover {\n background-color: rgb(0 0 0/5%);\n }\n .mapboxgl-ctrl-group button:focus:focus-visible {\n box-shadow: 0 0 2px 2px #0096ff;\n }\n .mapboxgl-ctrl-group button:focus:not(:focus-visible) {\n box-shadow: none;\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E\");\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E\");\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E\");\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23999'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23aaa'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='%23f00'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-waiting\n .mapboxgl-ctrl-icon {\n animation: mapboxgl-spin 2s linear infinite;\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23999'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='%23f00'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23000'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23666'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='%23f00'/%3E%3C/svg%3E\");\n }\n }\n @keyframes mapboxgl-spin {\n 0% {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(1turn);\n }\n }\n a.mapboxgl-ctrl-logo {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='clip'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/mask%3E%3Cg id='outline' opacity='0.3' stroke='%23000' stroke-width='3'%3E%3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E%3C/g%3E%3Cg id='fill' opacity='0.9' fill='%23fff'%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/g%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n cursor: pointer;\n display: block;\n height: 23px;\n margin: 0 0 -4px -4px;\n overflow: hidden;\n width: 88px;\n }\n a.mapboxgl-ctrl-logo.mapboxgl-compact {\n width: 23px;\n }\n @media (-ms-high-contrast: active) {\n a.mapboxgl-ctrl-logo {\n background-color: transparent;\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='clip'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/mask%3E%3Cg id='outline' opacity='1' stroke='%23000' stroke-width='3'%3E%3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E%3C/g%3E%3Cg id='fill' opacity='1' fill='%23fff'%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/g%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n a.mapboxgl-ctrl-logo {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='clip'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/mask%3E%3Cg id='outline' opacity='1' stroke='%23fff' stroke-width='3' fill='%23fff'%3E%3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E%3C/g%3E%3Cg id='fill' opacity='1' fill='%23000'%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/g%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl.mapboxgl-ctrl-attrib {\n background-color: hsla(0, 0%, 100%, 0.5);\n margin: 0;\n padding: 0 5px;\n }\n @media screen {\n .mapboxgl-ctrl-attrib.mapboxgl-compact {\n background-color: #fff;\n border-radius: 12px;\n margin: 10px;\n min-height: 20px;\n padding: 2px 24px 2px 0;\n position: relative;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact-show {\n padding: 2px 28px 2px 8px;\n visibility: visible;\n }\n .mapboxgl-ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact-show,\n .mapboxgl-ctrl-top-left > .mapboxgl-ctrl-attrib.mapboxgl-compact-show {\n border-radius: 12px;\n padding: 2px 8px 2px 28px;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner {\n display: none;\n }\n .mapboxgl-ctrl-attrib-button {\n background-color: hsla(0, 0%, 100%, 0.5);\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E\");\n border: 0;\n border-radius: 12px;\n box-sizing: border-box;\n cursor: pointer;\n display: none;\n height: 24px;\n outline: none;\n position: absolute;\n right: 0;\n top: 0;\n width: 24px;\n }\n .mapboxgl-ctrl-bottom-left .mapboxgl-ctrl-attrib-button,\n .mapboxgl-ctrl-top-left .mapboxgl-ctrl-attrib-button {\n left: 0;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-button,\n .mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-inner {\n display: block;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-button {\n background-color: rgb(0 0 0/5%);\n }\n .mapboxgl-ctrl-bottom-right > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n bottom: 0;\n right: 0;\n }\n .mapboxgl-ctrl-top-right > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n right: 0;\n top: 0;\n }\n .mapboxgl-ctrl-top-left > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n left: 0;\n top: 0;\n }\n .mapboxgl-ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n bottom: 0;\n left: 0;\n }\n }\n @media screen and (-ms-high-contrast: active) {\n .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' fill='%23fff'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E\");\n }\n }\n @media screen and (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl-attrib a {\n color: rgba(0, 0, 0, 0.75);\n text-decoration: none;\n }\n .mapboxgl-ctrl-attrib a:hover {\n color: inherit;\n text-decoration: underline;\n }\n .mapboxgl-ctrl-attrib .mapbox-improve-map {\n font-weight: 700;\n margin-left: 2px;\n }\n .mapboxgl-attrib-empty {\n display: none;\n }\n .mapboxgl-ctrl-scale {\n background-color: hsla(0, 0%, 100%, 0.75);\n border: 2px solid #333;\n border-top: #333;\n box-sizing: border-box;\n color: #333;\n font-size: 10px;\n padding: 0 5px;\n white-space: nowrap;\n }\n .mapboxgl-popup {\n display: flex;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n will-change: transform;\n }\n .mapboxgl-popup-anchor-top,\n .mapboxgl-popup-anchor-top-left,\n .mapboxgl-popup-anchor-top-right {\n flex-direction: column;\n }\n .mapboxgl-popup-anchor-bottom,\n .mapboxgl-popup-anchor-bottom-left,\n .mapboxgl-popup-anchor-bottom-right {\n flex-direction: column-reverse;\n }\n .mapboxgl-popup-anchor-left {\n flex-direction: row;\n }\n .mapboxgl-popup-anchor-right {\n flex-direction: row-reverse;\n }\n .mapboxgl-popup-tip {\n border: 10px solid transparent;\n height: 0;\n width: 0;\n z-index: 1;\n }\n .mapboxgl-popup-anchor-top .mapboxgl-popup-tip {\n align-self: center;\n border-bottom-color: #fff;\n border-top: none;\n }\n .mapboxgl-popup-anchor-top-left .mapboxgl-popup-tip {\n align-self: flex-start;\n border-bottom-color: #fff;\n border-left: none;\n border-top: none;\n }\n .mapboxgl-popup-anchor-top-right .mapboxgl-popup-tip {\n align-self: flex-end;\n border-bottom-color: #fff;\n border-right: none;\n border-top: none;\n }\n .mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip {\n align-self: center;\n border-bottom: none;\n border-top-color: #fff;\n }\n .mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-tip {\n align-self: flex-start;\n border-bottom: none;\n border-left: none;\n border-top-color: #fff;\n }\n .mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-tip {\n align-self: flex-end;\n border-bottom: none;\n border-right: none;\n border-top-color: #fff;\n }\n .mapboxgl-popup-anchor-left .mapboxgl-popup-tip {\n align-self: center;\n border-left: none;\n border-right-color: #fff;\n }\n .mapboxgl-popup-anchor-right .mapboxgl-popup-tip {\n align-self: center;\n border-left-color: #fff;\n border-right: none;\n }\n .mapboxgl-popup-close-button {\n background-color: transparent;\n border: 0;\n border-radius: 0 3px 0 0;\n cursor: pointer;\n position: absolute;\n right: 0;\n top: 0;\n }\n .mapboxgl-popup-close-button:hover {\n background-color: rgb(0 0 0/5%);\n }\n .mapboxgl-popup-content {\n background: #fff;\n border-radius: 3px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n padding: 10px 10px 15px;\n pointer-events: auto;\n position: relative;\n }\n .mapboxgl-popup-anchor-top-left .mapboxgl-popup-content {\n border-top-left-radius: 0;\n }\n .mapboxgl-popup-anchor-top-right .mapboxgl-popup-content {\n border-top-right-radius: 0;\n }\n .mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-content {\n border-bottom-left-radius: 0;\n }\n .mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-content {\n border-bottom-right-radius: 0;\n }\n .mapboxgl-popup-track-pointer {\n display: none;\n }\n .mapboxgl-popup-track-pointer * {\n pointer-events: none;\n user-select: none;\n }\n .mapboxgl-map:hover .mapboxgl-popup-track-pointer {\n display: flex;\n }\n .mapboxgl-map:active .mapboxgl-popup-track-pointer {\n display: none;\n }\n .mapboxgl-marker {\n left: 0;\n opacity: 1;\n position: absolute;\n top: 0;\n transition: opacity 0.2s;\n will-change: transform;\n }\n .mapboxgl-user-location-dot,\n .mapboxgl-user-location-dot:before {\n background-color: #1da1f2;\n border-radius: 50%;\n height: 15px;\n width: 15px;\n }\n .mapboxgl-user-location-dot:before {\n animation: mapboxgl-user-location-dot-pulse 2s infinite;\n content: '';\n position: absolute;\n }\n .mapboxgl-user-location-dot:after {\n border: 2px solid #fff;\n border-radius: 50%;\n box-shadow: 0 0 3px rgba(0, 0, 0, 0.35);\n box-sizing: border-box;\n content: '';\n height: 19px;\n left: -2px;\n position: absolute;\n top: -2px;\n width: 19px;\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading {\n height: 0;\n width: 0;\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after,\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:before {\n border-bottom: 7.5px solid #4aa1eb;\n content: '';\n position: absolute;\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:before {\n border-left: 7.5px solid transparent;\n transform: translateY(-28px) skewY(-20deg);\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after {\n border-right: 7.5px solid transparent;\n transform: translate(7.5px, -28px) skewY(20deg);\n }\n @keyframes mapboxgl-user-location-dot-pulse {\n 0% {\n opacity: 1;\n transform: scale(1);\n }\n 70% {\n opacity: 0;\n transform: scale(3);\n }\n to {\n opacity: 0;\n transform: scale(1);\n }\n }\n .mapboxgl-user-location-dot-stale {\n background-color: #aaa;\n }\n .mapboxgl-user-location-dot-stale:after {\n display: none;\n }\n .mapboxgl-user-location-accuracy-circle {\n background-color: #1da1f233;\n border-radius: 100%;\n height: 1px;\n width: 1px;\n }\n .mapboxgl-crosshair,\n .mapboxgl-crosshair .mapboxgl-interactive,\n .mapboxgl-crosshair .mapboxgl-interactive:active {\n cursor: crosshair;\n }\n .mapboxgl-boxzoom {\n background: #fff;\n border: 2px dotted #202020;\n height: 0;\n left: 0;\n opacity: 0.5;\n position: absolute;\n top: 0;\n width: 0;\n }\n @media print {\n .mapbox-improve-map {\n display: none;\n }\n }\n .mapboxgl-scroll-zoom-blocker,\n .mapboxgl-touch-pan-blocker {\n align-items: center;\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n display: flex;\n font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n sans-serif;\n height: 100%;\n justify-content: center;\n left: 0;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n text-align: center;\n top: 0;\n transition: opacity 0.75s ease-in-out;\n transition-delay: 1s;\n width: 100%;\n }\n .mapboxgl-scroll-zoom-blocker-show,\n .mapboxgl-touch-pan-blocker-show {\n opacity: 1;\n transition: opacity 0.1s ease-in-out;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-pan-blocker-override.mapboxgl-scrollable-page,\n .mapboxgl-canvas-container.mapboxgl-touch-pan-blocker-override.mapboxgl-scrollable-page\n .mapboxgl-canvas {\n touch-action: pan-x pan-y;\n }\n`;\n\nexport default mapboxStyle;\n","import React, { useContext } from 'react';\nimport {\n MAPBOX_INITIAL_ZOOM,\n MAPBOX_MAX_ZOOM,\n MAPBOX_TOKEN,\n MapBoxStyle,\n} from '../../constants/mapbox';\nimport BBox from '../../models/BBox';\nimport mergeBoundingBoxes from '../../utils/mergeBoundingBoxes';\nimport { css } from '@emotion/react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Wrapper,\n} from 'boemly';\nimport mapboxgl, { LngLatBoundsLike, LngLatLike, Map, Marker } from 'mapbox-gl';\nimport { MutableRefObject, createRef, useEffect, useRef } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport MinimalProviders from '../../components/MinimalProviders';\nimport MapMarker from './MapMarker';\nimport mapboxStyle from './mapboxStyle';\nimport { IntlContext } from '../../components/ContextProvider';\n\nmapboxgl.accessToken = MAPBOX_TOKEN;\n\nexport interface ProjectsMapProps {\n slice: {\n tagline?: string;\n title?: string;\n text?: string;\n\n defaultCenterCoordinates?: {\n latitude: number;\n longitude: number;\n };\n defaultZoomLevel?: number;\n };\n\n projects: PortfolioProject[];\n}\n\nexport const ProjectsMap: React.FC<ProjectsMapProps> = ({\n slice,\n projects,\n}: ProjectsMapProps) => {\n const { locale } = useContext(IntlContext);\n\n const filteredProjects = projects.filter(\n (project) => project.geom\n ) as (PortfolioProject & {\n geom: Pick<PortfolioProject, 'geom'>;\n })[];\n\n const center: LngLatLike | undefined = slice.defaultCenterCoordinates\n ? [\n slice.defaultCenterCoordinates.longitude,\n slice.defaultCenterCoordinates.latitude,\n ]\n : undefined;\n\n const bounds: LngLatBoundsLike | undefined = center\n ? undefined\n : mergeBoundingBoxes(\n filteredProjects.map(\n (p): BBox =>\n [\n ...p.geom.coordinates.map((c) => c - 0.2),\n ...p.geom.coordinates.map((c) => c + 0.2),\n ] as BBox\n )\n );\n\n const mapContainer = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const map = new Map({\n container: mapContainer.current || '',\n style: MapBoxStyle.CaliTerrain,\n center,\n zoom: slice.defaultZoomLevel || MAPBOX_INITIAL_ZOOM,\n maxZoom: MAPBOX_MAX_ZOOM,\n bounds,\n });\n\n filteredProjects\n // Sort by longitude, so that the markers are rendeed form right to left\n .sort((a, b) => b.geom.coordinates[0] - a.geom.coordinates[0])\n .forEach((project) => {\n const ref =\n createRef<HTMLDivElement>() as MutableRefObject<HTMLDivElement>;\n ref.current = document.createElement('div');\n\n createRoot(ref.current).render(\n <MinimalProviders locale={locale}>\n <MapMarker\n title={project.title}\n isPublic={project.isPublic}\n portfolioHost={project.portfolioHost}\n slug={project.slug}\n creditsAvailable={project.creditsAvailable}\n projectDeveloper={project.projectDeveloper?.name}\n />\n </MinimalProviders>\n );\n\n // Offset is needed to center the marker on the coordinates\n const marker = new Marker(ref.current, { offset: [-20, -40] });\n\n // No chaining here, because the mocks don't support it\n marker.setLngLat(project.geom.coordinates);\n marker.addTo(map);\n });\n\n // Clean up on unmount\n return () => map.remove();\n }, [locale]);\n\n return (\n <DefaultSectionContainer>\n <Box css={mapboxStyle}>\n <Wrapper>\n {slice.title ? (\n <>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center' }}\n titleProps={{\n textAlign: 'center',\n maxW: '6xl',\n marginX: 'auto',\n }}\n textProps={{\n textAlign: 'center',\n maxW: '3xl',\n marginX: 'auto',\n }}\n />\n <Box height=\"16\" />\n </>\n ) : (\n <></>\n )}\n\n <Box\n height=\"xl\"\n ref={mapContainer}\n borderRadius=\"xl\"\n overflow=\"hidden\"\n boxShadow={['md', null, null, 'none']}\n css={css`\n mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC);\n `}\n />\n </Wrapper>\n </Box>\n </DefaultSectionContainer>\n );\n};\n","import React, { useContext } from 'react';\nimport {\n Box,\n Container,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Gradient,\n Spacer,\n Wrapper,\n} from 'boemly';\nimport StrapiButtonWithVariant from '../../models/strapi/StrapiButtonWithVariant';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport Image from 'next/image';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport { CDN_URI } from '../../constants/api';\nimport { IntlContext } from '../../components/ContextProvider';\n\ntype Variant = 'gray' | 'green' | 'white';\n\nenum CtaCardType {\n Left = 'left',\n CenterWithoutImage = 'centerWithoutImage',\n CenterWithImage = 'centerWithImage',\n Right = 'right',\n}\n\nexport interface CtaProps {\n slice: {\n tagline?: string;\n title?: string;\n subTitle?: string;\n variant: Variant;\n ctaCards: CtaCard[];\n };\n}\n\nexport interface CtaCard {\n id: number;\n tagline?: string;\n title: string;\n subTitle?: string;\n image?: StrapiImage;\n buttons?: StrapiButtonWithVariant[];\n variant: Variant;\n backgroundShape: boolean;\n textAlign: 'left' | 'right' | 'center';\n}\n\nconst STATES: Record<CtaCardType, Record<string, any>> = {\n left: {\n textAlign: 'left',\n paddingTagline: '0',\n paddingTitle: '0',\n justifyContent: 'space-between',\n buttonJustifyContent: 'start',\n textMarginLeft: ['0', null, null, null, '14'],\n textMarginRight: '0',\n },\n centerWithoutImage: {\n textAlign: 'center',\n paddingTagline: '28',\n paddingTitle: '20',\n justifyContent: 'center',\n buttonJustifyContent: 'center',\n textMarginLeft: '0',\n textMarginRight: '0',\n },\n centerWithImage: {\n textAlign: 'center',\n paddingTagline: '28',\n paddingTitle: '20',\n justifyContent: 'center',\n buttonJustifyContent: 'center',\n textMarginLeft: '0',\n textMarginRight: '0',\n },\n right: {\n textAlign: 'left',\n paddingTagline: '0',\n paddingTitle: '0',\n justifyContent: 'start',\n buttonJustifyContent: 'start',\n textMarginLeft: '0',\n textMarginRight: ['0', null, null, null, '10'],\n },\n};\n\nconst VARIANTS: Record<Variant, Record<string, Record<CtaCardType, string>>> = {\n gray: {\n backgroundColor: {\n left: 'primary.50',\n centerWithoutImage: 'primary.50',\n centerWithImage: 'primary.50',\n right: 'primary.50',\n },\n taglineColor: {\n left: 'primary.500',\n centerWithoutImage: 'primary.500',\n centerWithImage: 'white',\n right: 'primary.500',\n },\n titleColor: {\n left: 'black',\n centerWithoutImage: 'black',\n centerWithImage: 'white',\n right: 'black',\n },\n subTitleColor: {\n left: 'black',\n centerWithoutImage: 'black',\n centerWithImage: 'white',\n right: 'black',\n },\n },\n green: {\n backgroundColor: {\n left: 'primary.800',\n centerWithoutImage: 'primary.800',\n centerWithImage: 'primary.800',\n right: 'primary.800',\n },\n taglineColor: {\n left: 'white',\n centerWithoutImage: 'white',\n centerWithImage: 'white',\n right: 'white',\n },\n titleColor: {\n left: 'white',\n centerWithoutImage: 'white',\n centerWithImage: 'white',\n right: 'white',\n },\n subTitleColor: {\n left: 'white',\n centerWithoutImage: 'white',\n centerWithImage: 'white',\n right: 'white',\n },\n },\n white: {\n backgroundColor: {\n left: 'white',\n centerWithoutImage: 'white',\n centerWithImage: 'primary.800',\n right: 'white',\n },\n taglineColor: {\n left: 'primary.500',\n centerWithoutImage: 'primary.500',\n centerWithImage: 'white',\n right: 'primary.500',\n },\n titleColor: {\n left: 'black',\n centerWithoutImage: 'black',\n centerWithImage: 'white',\n right: 'black',\n },\n subTitleColor: {\n left: 'black',\n centerWithoutImage: 'black',\n centerWithImage: 'white',\n right: 'black',\n },\n },\n};\n\nconst getTypeOfCard = (ctaCard: CtaCard): CtaCardType => {\n if (ctaCard.textAlign === 'center') {\n if (ctaCard.image) {\n return CtaCardType.CenterWithImage;\n }\n return CtaCardType.CenterWithoutImage;\n }\n if (ctaCard.textAlign === 'left') {\n return CtaCardType.Left;\n }\n return CtaCardType.Right;\n};\n\nexport const Cta: React.FC<CtaProps> = ({ slice }: CtaProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <DefaultSectionContainer\n backgroundColor={VARIANTS[slice.variant].backgroundColor.left}\n title={slice.title}\n >\n <Wrapper>\n {slice.title ? (\n <>\n <Flex alignItems=\"center\" flexDirection=\"column\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n taglineProps={{\n color: VARIANTS[slice.variant].taglineColor.left,\n textAlign: 'center',\n maxWidth: '3xl',\n }}\n title={slice.title}\n titleProps={{\n color: VARIANTS[slice.variant].titleColor.left,\n textAlign: 'center',\n width: 'full',\n maxWidth: '3xl',\n }}\n text={slice.subTitle}\n textProps={{\n color: VARIANTS[slice.variant].subTitleColor.left,\n textAlign: 'center',\n maxWidth: '3xl',\n }}\n />\n </Flex>\n <Spacer height={['16', null, null, null, '20']} />\n </>\n ) : (\n <></>\n )}\n <Flex gap=\"4\" flexDirection=\"column\">\n {slice.ctaCards.map((ctaCard) => {\n const ctaCardType = getTypeOfCard(ctaCard);\n\n return (\n <Container\n backgroundColor={\n VARIANTS[ctaCard.variant].backgroundColor[ctaCardType]\n }\n key={ctaCard.id}\n position=\"relative\"\n elevation=\"none\"\n >\n {ctaCard.image &&\n ctaCardType === CtaCardType.CenterWithImage ? (\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"0\"\n width=\"full\"\n height=\"full\"\n borderRadius=\"xl\"\n overflow=\"hidden\"\n >\n <Image\n src={strapiMediaUrl(ctaCard.image.img, 'large')}\n alt={ctaCard.image.alt}\n fill\n style={{\n objectFit: ctaCard.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n <Gradient />\n </Box>\n ) : (\n <></>\n )}\n {ctaCard.backgroundShape ? (\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"0\"\n width=\"full\"\n height=\"full\"\n >\n <Image\n src={\n ctaCardType === CtaCardType.CenterWithImage ||\n ctaCard.variant === 'green'\n ? `${CDN_URI}/assets/v3/strapi-slices/shapes-dark.svg`\n : `${CDN_URI}/assets/v3/strapi-slices/shapes-light.svg`\n }\n alt={formatMessage({\n id: `sections.cta.backgroundShapes${\n ctaCardType === CtaCardType.CenterWithImage ||\n ctaCard.variant === 'green'\n ? 'Dark'\n : 'Light'\n }`,\n })}\n fill\n style={{\n objectFit: 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n\n <Flex\n flexDir={['column', null, null, null, 'row']}\n flexGrow=\"1\"\n gap={['8', null, null, null, '16']}\n justifyContent={STATES[ctaCardType].justifyContent}\n >\n {ctaCard.image && ctaCardType === CtaCardType.Right ? (\n <Box\n position=\"relative\"\n height={['3xs', null, null, null, 'auto']}\n minWidth={[null, null, null, null, '50%']}\n >\n <Image\n src={strapiMediaUrl(ctaCard.image.img, 'xLarge')}\n alt={ctaCard.image.alt}\n fill\n style={{\n objectFit: ctaCard.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n\n <Box\n zIndex=\"base\"\n marginLeft={STATES[ctaCardType].textMarginLeft}\n marginRight={STATES[ctaCardType].textMarginRight}\n maxWidth=\"3xl\"\n >\n <Spacer height={['0', null, null, null, '20']} />\n\n <DefaultSectionHeader\n tagline={ctaCard.tagline}\n taglineProps={{\n textAlign: STATES[ctaCardType].textAlign,\n color:\n VARIANTS[ctaCard.variant].taglineColor[ctaCardType],\n paddingX: [\n '0',\n null,\n null,\n null,\n STATES[ctaCardType].paddingTagline,\n ],\n }}\n title={ctaCard.title}\n titleProps={{\n fontFamily: 'heading',\n fontSize: '4xl',\n fontWeight: '600',\n lineHeight: '9',\n textAlign: STATES[ctaCardType].textAlign,\n paddingX: [\n '0',\n null,\n null,\n null,\n STATES[ctaCardType].paddingTitle,\n ],\n color:\n VARIANTS[ctaCard.variant].titleColor[ctaCardType],\n }}\n text={ctaCard.subTitle}\n textProps={{\n textAlign: STATES[ctaCardType].textAlign,\n color:\n VARIANTS[ctaCard.variant].subTitleColor[ctaCardType],\n }}\n />\n {ctaCard.buttons && ctaCard.buttons.length > 0 ? (\n <>\n <Spacer height=\"8\" />\n <Flex\n gap=\"2\"\n justifyContent={\n STATES[ctaCardType].buttonJustifyContent\n }\n >\n {ctaCard.buttons &&\n ctaCard.buttons.map((button) => (\n <StrapiLinkButton\n key={button.button.id}\n link={button.button}\n size=\"md\"\n variant={button.variant}\n />\n ))}\n </Flex>\n </>\n ) : (\n <></>\n )}\n <Spacer height={['1', null, null, null, '20']} />\n </Box>\n {ctaCard.image && ctaCardType === CtaCardType.Left ? (\n <Box\n position=\"relative\"\n height={['3xs', null, null, null, 'auto']}\n minWidth={[null, null, null, null, '50%']}\n >\n <Image\n src={strapiMediaUrl(ctaCard.image.img, 'xLarge')}\n alt={ctaCard.image.alt}\n fill\n style={{\n objectFit: ctaCard.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n </Flex>\n </Container>\n );\n })}\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import BBox from '../models/BBox';\n\nconst mergeBoundingBoxes = (boundingBoxes: BBox[]): BBox => {\n let minLeft: number = 180;\n let minBottom: number = 90;\n let maxRight: number = -180;\n let maxTop: number = -90;\n\n boundingBoxes.forEach(([left, bottom, right, top]) => {\n if (left < minLeft) minLeft = left;\n if (bottom < minBottom) minBottom = bottom;\n if (right > maxRight) maxRight = right;\n if (top > maxTop) maxTop = top;\n });\n\n return [minLeft, minBottom, maxRight, maxTop];\n};\n\nexport default mergeBoundingBoxes;\n","import React from 'react';\nimport { Box, DefaultSectionContainer, Wrapper } from 'boemly';\nimport { useMeasure } from 'react-use';\n\ninterface VideoSlice {\n youTubeID: string;\n title: string;\n}\n\nexport interface VideoProps {\n slice: VideoSlice;\n}\n\nexport const Video: React.FC<VideoProps> = ({ slice }: VideoProps) => {\n const [ref, { width }] = useMeasure<HTMLDivElement>();\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <Box ref={ref} borderRadius=\"xl\">\n <iframe\n data-testid=\"video-iframe\"\n width={width}\n height={(width / 16) * 9}\n src={`https://www.youtube.com/embed/${slice.youTubeID}`}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n title={slice.title}\n style={{ borderRadius: 'var(--boemly-radii-xl)' }}\n />\n </Box>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport Image from 'next/image';\nimport {\n DefaultSectionContainer,\n Wrapper,\n AvatarWithName,\n Text,\n Box,\n} from 'boemly';\nimport StrapiAvatarWithName from '../../models/strapi/StrapiAvatarWithName';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\nexport interface FullWidthHighlightQuoteProps {\n slice: {\n tagline?: string;\n quote: string;\n avatarWithName: StrapiAvatarWithName;\n };\n}\n\nexport const FullWidthHighlightQuote: React.FC<\n FullWidthHighlightQuoteProps\n> = ({ slice }: FullWidthHighlightQuoteProps) => (\n <DefaultSectionContainer>\n <Wrapper>\n <Box maxWidth=\"5xl\" marginX=\"auto\" mb=\"8\">\n {slice.tagline && (\n <Text\n color=\"primary.700\"\n size=\"mdMonoUppercase\"\n textAlign=\"center\"\n mb=\"3\"\n >\n {slice.tagline}\n </Text>\n )}\n <Text color=\"black\" size=\"xlRegularNormalBold\" textAlign=\"center\">\n {slice.quote}\n </Text>\n </Box>\n <AvatarWithName\n name={slice.avatarWithName.name}\n description={slice.avatarWithName.description}\n image={\n <Image\n src={strapiMediaUrl(slice.avatarWithName.image.img, 'small')}\n alt={slice.avatarWithName.image.alt}\n fill\n style={{\n objectFit: slice.avatarWithName.image.objectFit || 'cover',\n }}\n />\n }\n orientation=\"vertical\"\n />\n </Wrapper>\n </DefaultSectionContainer>\n);\n","import { motion } from 'framer-motion';\nimport styled from '@emotion/styled';\nimport { BREAKPOINT_MD } from '../../constants/breakpoints';\nimport { Box } from 'boemly';\n\nexport const SliderContainer = styled(Box)`\n --mobile-image-width: calc(100vw - var(--boemly-space-24));\n --desktop-image-width: var(--boemly-sizes-md);\n\n width: var(--boemly-size-full);\n\n overflow-x: hidden;\n\n padding-left: max(\n var(--boemly-space-8),\n calc(50vw - var(--boemly-sizes-7xl) / 2 + var(--boemly-space-6))\n );\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n overflow-x: scroll;\n padding-left: max(\n var(--boemly-space-8),\n calc(50vw - var(--boemly-sizes-7xl) / 2 + var(--boemly-space-8))\n );\n }\n`;\n\ninterface SliderInnerContainerProps {\n imageCount: number;\n}\nexport const SliderInnerContainer = styled(\n motion.div\n)<SliderInnerContainerProps>`\n display: flex;\n gap: var(--boemly-space-6);\n\n width: fit-content;\n`;\n\nexport const ItemContainer = styled(Box)`\n width: var(--desktop-image-width);\n\n :last-of-type {\n margin-right: var(--boemly-space-8);\n }\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n width: var(--mobile-image-width);\n }\n`;\n\ninterface ImageContainerProps {\n aspectRatio: number;\n}\nexport const ImageContainer = styled(Box)<ImageContainerProps>`\n position: relative;\n\n max-height: var(--boemly-sizes-xl);\n height: calc(\n var(--desktop-image-width) /\n ${({ aspectRatio }: ImageContainerProps) => aspectRatio}\n );\n width: var(--desktop-image-width);\n\n border-radius: var(--boemly-radii-xl);\n\n & img {\n border-radius: var(--boemly-radii-xl);\n }\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n height: calc(\n var(--mobile-image-width) /\n ${({ aspectRatio }: ImageContainerProps) => aspectRatio}\n );\n width: var(--mobile-image-width);\n }\n`;\n","const ALLOWED_RATIOS = [2 / 3, 1 / 1, 3 / 2];\n\nexport const getClosestRatio = (width: number, height: number): number => {\n const ratio = width / height;\n\n let minDiff = Math.abs(ratio - ALLOWED_RATIOS[0]);\n let posMinDiff = 0;\n\n ALLOWED_RATIOS.forEach((allowedRatio, index) => {\n if (Math.abs(ratio - allowedRatio) < minDiff) {\n minDiff = Math.abs(ratio - allowedRatio);\n posMinDiff = index;\n }\n });\n\n return ALLOWED_RATIOS[posMinDiff];\n};\n","import React, { useMemo, useRef, useState } from 'react';\nimport {\n Box,\n IconButton,\n DefaultSectionContainer,\n Flex,\n Text,\n useMediaQuery,\n} from 'boemly';\nimport Image from 'next/image';\nimport { useMeasure, useWindowSize } from 'react-use';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { ArrowLeft, ArrowRight } from '@phosphor-icons/react';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport FullScreenImage from '../../components/FullScreenImage';\nimport { BREAKPOINT_MD_QUERY } from '../../constants/breakpoints';\nimport {\n ItemContainer,\n SliderContainer,\n SliderInnerContainer,\n ImageContainer,\n} from './styles';\nimport { getClosestRatio } from './utils';\n\nexport interface FullWidthImageSliderProps {\n slice: {\n images: {\n id: number;\n caption: string;\n img: StrapiImage;\n }[];\n };\n}\n\nconst ITEM_GAP = 24;\nconst MAX_OFFSET_RIGHT = 162;\n\nexport const FullWidthImageSlider: React.FC<FullWidthImageSliderProps> = ({\n slice,\n}: FullWidthImageSliderProps) => {\n const containerRef = useRef(null);\n const [imageRef, { width: imageWidth }] = useMeasure<HTMLDivElement>();\n const { width: windowWidth } = useWindowSize();\n const [isMobile] = useMediaQuery(BREAKPOINT_MD_QUERY);\n\n const [sliderIndex, setSliderIndex] = useState(0);\n const [isOpen, setIsOpen] = useState(false);\n\n const numberOfItems = useMemo(\n () => slice.images.length,\n [slice.images.length]\n );\n\n const sliderItemsWidth = useMemo(\n () => numberOfItems * (imageWidth + ITEM_GAP) - ITEM_GAP,\n [imageWidth, numberOfItems]\n );\n\n const offsetLeft = useMemo(\n () => sliderIndex * (imageWidth + ITEM_GAP) * -1,\n [sliderIndex, imageWidth]\n );\n\n const allowScroll = useMemo(\n () => sliderItemsWidth + ITEM_GAP * 3 > windowWidth,\n\n [sliderItemsWidth, windowWidth]\n );\n\n const canMoveRight = useMemo(() => {\n const offsetRight = windowWidth - (sliderItemsWidth + offsetLeft);\n\n return offsetRight < MAX_OFFSET_RIGHT;\n }, [imageWidth, sliderIndex, sliderItemsWidth, windowWidth]);\n\n const canMoveLeft = useMemo(() => sliderIndex !== 0, [sliderIndex]);\n\n return (\n <DefaultSectionContainer>\n <SliderContainer ref={containerRef}>\n <SliderInnerContainer\n animate={{\n x: imageWidth * -sliderIndex,\n }}\n transition={{\n duration: 0.3,\n ease: 'easeInOut',\n }}\n imageCount={slice.images.length}\n >\n {slice.images.map((image, index) => (\n <ItemContainer key={image.id} ref={imageRef}>\n <Flex\n height=\"full\"\n width=\"full\"\n justifyContent=\"end\"\n flexDirection=\"column\"\n gap=\"2\"\n >\n <ImageContainer\n aspectRatio={getClosestRatio(\n image.img.img.data.attributes.width,\n image.img.img.data.attributes.height\n )}\n >\n <Image\n src={strapiMediaUrl(image.img.img, 'large')}\n alt={image.img.alt}\n fill\n style={{\n objectFit: image.img.objectFit || 'cover',\n cursor: isMobile ? 'unset' : 'pointer',\n }}\n onClick={() => {\n setSliderIndex(index);\n if (!isMobile) setIsOpen(true);\n }}\n />\n </ImageContainer>\n <Text height=\"6\">{image.caption}</Text>\n </Flex>\n </ItemContainer>\n ))}\n </SliderInnerContainer>\n </SliderContainer>\n\n <Box\n display={['none', null, null, !!allowScroll ? 'flex' : 'none']}\n pointerEvents=\"none\"\n position=\"absolute\"\n top=\"calc(50% - var(--boemly-sizes-12))\"\n left=\"0\"\n width=\"full\"\n py=\"0\"\n px=\"32\"\n justifyContent=\"space-between\"\n >\n <Box>\n <AnimatePresence>\n {canMoveLeft && (\n <IconButton\n key=\"leftButton\"\n as={motion.button}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex - 1)}\n aria-label=\"Move left\"\n icon={<ArrowLeft size={16} />}\n pointerEvents=\"auto\"\n />\n )}\n </AnimatePresence>\n </Box>\n <Box>\n <AnimatePresence>\n {canMoveRight && (\n <IconButton\n key=\"rightButton\"\n as={motion.button}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex + 1)}\n aria-label=\"Move right\"\n icon={<ArrowRight size={16} />}\n pointerEvents=\"auto\"\n />\n )}\n </AnimatePresence>\n </Box>\n </Box>\n\n <FullScreenImage\n images={slice.images.map((image) => image.img)}\n currentIndex={sliderIndex}\n setCurrentIndex={setSliderIndex}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n />\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n Grid,\n GridItem,\n SimpleGrid,\n Text,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\nexport interface SideBySideImagesProps {\n slice: {\n images: {\n id: number;\n caption: string;\n img: StrapiImage;\n }[];\n };\n}\nexport const SideBySideImages: React.FC<SideBySideImagesProps> = ({\n slice,\n}: SideBySideImagesProps) => (\n <DefaultSectionContainer>\n <Wrapper>\n <Grid templateColumns=\"repeat(12, 1fr)\" gap=\"4\">\n <GridItem colSpan={[12, null, null, 7]}>\n <SimpleGrid\n columns={[1, null, null, 2]}\n gap={['12', null, null, '6']}\n >\n {slice.images.map((image) => (\n <Box key={image.id}>\n <Box height=\"md\" position=\"relative\" borderRadius=\"xl\">\n <Image\n src={strapiMediaUrl(image.img.img, 'large')}\n alt={image.img.alt}\n fill\n style={{\n objectFit: image.img.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n <Text mt=\"3\" size=\"xsLowNormal\">\n {image.caption}\n </Text>\n </Box>\n ))}\n </SimpleGrid>\n </GridItem>\n </Grid>\n </Wrapper>\n </DefaultSectionContainer>\n);\n","import React from 'react';\nimport { Box, Wrapper } from 'boemly';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiLink from '../../models/strapi/StrapiLink';\n\nexport interface CtaOnlyProps {\n slice: {\n button: StrapiLink;\n };\n}\n\nexport const CtaOnly: React.FC<CtaOnlyProps> = ({ slice }: CtaOnlyProps) => (\n <Wrapper>\n <Box position=\"absolute\" top=\"-28\" transform=\"translateY(50%)\">\n <StrapiLinkButton size=\"md\" link={slice.button} />\n </Box>\n </Wrapper>\n);\n","import React, { useContext, useState } from 'react';\nimport {\n DefaultSectionContainer,\n Divider,\n Flex,\n GridItem,\n Heading,\n IconButton,\n SimpleGrid,\n Text,\n Wrapper,\n} from 'boemly';\nimport { Check, Link as LinkIcon } from '@phosphor-icons/react';\nimport { useCopyToClipboard } from 'react-use';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport StrapiGlossaryItem from '../../models/strapi/StrapiGlossaryItem';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface GlossaryProps {\n slice: {\n glossary_items: IStrapiData<StrapiGlossaryItem>[];\n };\n}\n\nexport const Glossary: React.FC<GlossaryProps> = ({ slice }: GlossaryProps) => {\n const [, copyToClipboard] = useCopyToClipboard();\n const { formatMessage } = useContext(IntlContext);\n const grouped: Record<string, StrapiGlossaryItem[]> = {};\n const [copiedItem, setCopiedItem] = useState<string>();\n\n slice.glossary_items\n .sort((a, b) => a.attributes.title.localeCompare(b.attributes.title))\n .forEach((curr) => {\n const index = curr.attributes.title.at(0)?.toUpperCase() || 'A';\n if (!grouped[index]) {\n grouped[index] = [];\n }\n grouped[index].push(curr.attributes);\n }, {});\n\n const handleAnchorClick = async (slug: string) => {\n if (window?.location) {\n const currentUrl = window.location.href.split('#')[0];\n copyToClipboard(`${currentUrl}#${slug}`);\n setCopiedItem(slug);\n\n setTimeout(() => {\n setCopiedItem(undefined);\n }, 1200);\n }\n };\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid>\n {Object.entries(grouped).map(([letter, items], index) => (\n <GridItem maxW=\"xl\" placeSelf=\"center\" key={letter}>\n <Heading size=\"3xl\" mb=\"8\">\n {letter}\n </Heading>\n\n <SimpleGrid spacing=\"6\">\n {items.map((item) => (\n <GridItem key={item.slug}>\n <Flex mb=\"2\" gap=\"1.5\" alignItems=\"center\">\n <Heading\n size=\"xl\"\n id={item.slug}\n scrollMarginTop=\"calc(var(--header-height) + var(--boemly-sizes-10))\"\n >\n {item.title}\n </Heading>\n <IconButton\n variant=\"ghost\"\n size=\"xs\"\n icon={\n copiedItem === item.slug ? (\n <Check size=\"16\" data-testid=\"check-icon\" />\n ) : (\n <LinkIcon size=\"16\" />\n )\n }\n title={formatMessage({\n id: 'sections.glossary.copyButtonLabel',\n })}\n aria-label={formatMessage({\n id: 'sections.glossary.copyButtonLabel',\n })}\n onClick={async () => handleAnchorClick(item.slug)}\n />\n </Flex>\n <Text color=\"black\">{item.text}</Text>\n </GridItem>\n ))}\n </SimpleGrid>\n\n {index !== Object.keys(grouped).length - 1 && (\n <Divider maxW=\"xl\" placeSelf=\"center\" mb=\"10\" mt=\"10\" />\n )}\n </GridItem>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React, { useContext, useCallback } from 'react';\nimport {\n Badge,\n BoemlyFormControl,\n Box,\n Button,\n Container,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Divider,\n Flex,\n InputRightAddon,\n LabelNumberPair,\n RichText,\n SimpleGrid,\n Spacer,\n useToken,\n Wrapper,\n} from 'boemly';\nimport { Field, FieldProps, Form, Formik, FormikProps } from 'formik';\nimport { FPM_API_URI } from '../../constants/api';\nimport CheckoutForm from '../../models/forms/CheckoutForm';\nimport {\n MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY,\n MINIMUM_CONTRIBUTION_VALUE_IN_MONEY,\n} from '../../constants/domain';\nimport { IntlContext } from '../../components/ContextProvider';\nimport { useRouter } from 'next/router';\n\nexport interface ShopCheckoutProps {\n slice: {\n tagline?: string;\n title: string;\n text?: string;\n badge?: string;\n batchId: string;\n pricePerKg: number;\n couponId?: string;\n initialContributionValue: number;\n checkoutText: string;\n currency: 'EUR' | 'CHF';\n taxInPercent?: number;\n };\n}\n\nexport const ShopCheckout = ({ slice }: ShopCheckoutProps): JSX.Element => {\n const [primary50] = useToken('colors', ['primary.50']);\n const { formatMessage, formatNumber, locale } = useContext(IntlContext);\n const { push } = useRouter();\n\n const validateForm = useCallback(\n (values: CheckoutForm) => {\n const errors: Partial<{ contributionValue: string }> = {};\n\n if (!values.contributionValue) {\n errors.contributionValue = formatMessage({\n id: 'sections.shopCheckout.contributionValue.validation.empty',\n });\n } else if (\n values.contributionValue < MINIMUM_CONTRIBUTION_VALUE_IN_MONEY\n ) {\n errors.contributionValue = formatMessage({\n id: `sections.shopCheckout.contributionValue.validation.tooLow.${slice.currency}`,\n });\n } else if (\n values.contributionValue > MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY\n ) {\n errors.contributionValue = formatMessage({\n id: 'sections.shopCheckout.contributionValue.validation.tooHigh',\n });\n }\n\n return errors;\n },\n [locale]\n );\n\n const onSubmit = ({ contributionValue }: CheckoutForm) => {\n const checkoutURL = new URL(`${FPM_API_URI}/v1/webhooks/shop/checkout`);\n const currentURL = new URL(window.location.href);\n\n checkoutURL.searchParams.append('batchId', slice.batchId);\n\n checkoutURL.searchParams.append(\n 'quantity',\n Math.floor(contributionValue / slice.pricePerKg).toString()\n );\n\n checkoutURL.searchParams.append('cancelPath', currentURL.pathname);\n\n if (slice.couponId)\n checkoutURL.searchParams.append('couponId', slice.couponId);\n\n push(checkoutURL.toString());\n };\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n <Wrapper>\n <Flex\n flexDir={['column', null, null, null, 'row']}\n justifyContent=\"space-between\"\n alignItems={['left', null, null, null, 'center']}\n >\n <Box marginRight={['0', null, null, null, '36']} flexShrink={2}>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n </Box>\n <Container maxWidth=\"md\" padding=\"lg\" shadow=\"lg\">\n {slice.badge ? (\n <>\n <Badge\n colorScheme=\"green\"\n textTransform=\"none\"\n whiteSpace=\"unset\"\n >\n {slice.badge}\n </Badge>\n <Spacer height=\"3\" />\n </>\n ) : (\n <></>\n )}\n\n <RichText\n content={slice.checkoutText}\n textProps={{ color: 'gray.500' }}\n />\n\n <Spacer height=\"6\" />\n <Divider />\n <Spacer height=\"6\" />\n\n <LabelNumberPair\n label={formatMessage({ id: 'sections.shopCheckout.intro.price' })}\n number={`${formatNumber(slice.pricePerKg * 100, {\n style: 'currency',\n currency: slice.currency,\n })}/${formatNumber(100, {\n style: 'unit',\n unit: 'kilogram',\n })} CO₂`}\n caption={formatMessage({\n id: 'sections.shopCheckout.summary.price.taxNotIncluded',\n })}\n />\n\n <Spacer height=\"6\" />\n <Divider />\n <Spacer height=\"6\" />\n\n <Formik\n initialValues={{\n contributionValue: slice.initialContributionValue,\n }}\n validate={validateForm}\n onSubmit={onSubmit}\n >\n {({\n errors,\n touched,\n handleSubmit,\n values,\n }: FormikProps<CheckoutForm>) => {\n const summaryPrice =\n Math.floor(values.contributionValue / slice.pricePerKg) *\n slice.pricePerKg;\n\n return (\n <Form onSubmit={handleSubmit}>\n <Box width=\"full\">\n <Field name=\"contributionValue\">\n {({ field }: FieldProps) => (\n <BoemlyFormControl\n id=\"contributionValue\"\n size=\"md\"\n inputProps={{ type: 'number', ...field }}\n label={formatMessage({\n id: `sections.shopCheckout.contributionValue.label.${slice.currency}`,\n })}\n rightAddonsOrElements={[\n <InputRightAddon key=\"1\">\n {formatMessage({\n id: `sections.shopCheckout.contributionValue.unit.${slice.currency}`,\n })}\n </InputRightAddon>,\n ]}\n isInvalid={\n !!errors.contributionValue &&\n touched.contributionValue\n }\n errorMessage={errors.contributionValue}\n />\n )}\n </Field>\n </Box>\n\n <Spacer height=\"6\" />\n\n <SimpleGrid columns={2} gap=\"4\">\n <LabelNumberPair\n label={formatMessage({\n id: 'sections.shopCheckout.summary.kg',\n })}\n number={`${formatNumber(\n Math.floor(\n values.contributionValue / slice.pricePerKg\n ),\n {\n style: 'unit',\n unit: 'kilogram',\n maximumFractionDigits: 0,\n }\n )} CO₂`}\n />\n <LabelNumberPair\n label={formatMessage({\n id: 'sections.shopCheckout.summary.price',\n })}\n number={formatNumber(summaryPrice, {\n style: 'currency',\n currency: slice.currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}\n caption={\n slice.taxInPercent &&\n slice.taxInPercent > 0 &&\n summaryPrice > 0\n ? formatMessage(\n {\n id: 'sections.shopCheckout.summary.price.taxIncluded',\n },\n {\n number: formatNumber(\n summaryPrice +\n summaryPrice * (slice.taxInPercent / 100),\n {\n style: 'currency',\n currency: slice.currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }\n ),\n }\n )\n : ''\n }\n />\n </SimpleGrid>\n\n <Spacer height=\"6\" />\n\n <Button type=\"submit\" width=\"full\">\n {formatMessage({ id: 'sections.shopCheckout.submit' })}\n </Button>\n </Form>\n );\n }}\n </Formik>\n </Container>\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","export const MINIMUM_CONTRIBUTION_VALUE_IN_MONEY = 10;\n\nexport const MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY = 60_000;\n","import React from 'react';\nimport {\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n Spacer,\n Text,\n} from 'boemly';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiLink from '../../models/strapi/StrapiLink';\n\nexport interface FactsProps {\n slice: {\n tagline?: string;\n title?: string;\n subTitle?: string;\n button?: StrapiLink;\n variant: 'gray' | 'green' | 'white';\n facts: { key: string; value: string }[];\n };\n}\n\nconst VARIANTS = {\n gray: {\n backgroundColor: 'primary.50',\n tagLineColor: 'primary.500',\n titleColor: 'black',\n subTitleColor: 'black',\n factKeyColor: 'gray.700',\n factValueColor: 'gray.700',\n },\n green: {\n backgroundColor: 'primary.800',\n tagLineColor: 'white',\n titleColor: 'white',\n subTitleColor: 'white',\n factKeyColor: 'whiteAlpha.900',\n factValueColor: 'white',\n },\n white: {\n backgroundColor: 'white',\n tagLineColor: 'primary.500',\n titleColor: 'black',\n subTitleColor: 'black',\n factKeyColor: 'gray.700',\n factValueColor: 'gray.700',\n },\n};\n\nexport const Facts: React.FC<FactsProps> = ({ slice }: FactsProps) => (\n <DefaultSectionContainer\n backgroundColor={VARIANTS[slice.variant].backgroundColor}\n flexDir=\"column\"\n textAlign=\"center\"\n justifyContent=\"space-between\"\n paddingX={['6', null, '8']}\n title={slice.title}\n >\n <>\n {slice.title && (\n <>\n <DefaultSectionHeader\n tagline={slice.tagline}\n text={slice.subTitle}\n title={slice.title}\n taglineProps={{\n color: VARIANTS[slice.variant].tagLineColor,\n textAlign: 'center',\n }}\n titleProps={{\n color: VARIANTS[slice.variant].titleColor,\n textAlign: 'center',\n maxW: '6xl',\n marginX: 'auto',\n }}\n textProps={{\n color: VARIANTS[slice.variant].subTitleColor,\n textAlign: 'center',\n maxW: '3xl',\n marginX: 'auto',\n }}\n />\n <Spacer height={['0', null, '12']} />\n </>\n )}\n <Flex\n justifyContent={slice.facts.length < 3 ? 'center' : 'flex-start'}\n alignItems=\"center\"\n flexWrap=\"wrap\"\n mx={[null, null, null, '22', '28']}\n flexDir={['column', null, null, 'row']}\n gap={[null, null, null, '12']}\n >\n {slice.facts.map((fact) => (\n <Flex\n key={fact.key}\n flexDir=\"column\"\n width={[\n 'var(--boemly-sizes-full)',\n null,\n null,\n 'calc((var(--boemly-sizes-full) - var(--boemly-space-24))/ 3 )',\n ]}\n mt={['8', '8', '8', slice.facts.length > 3 ? '16' : '0']}\n >\n <Heading\n fontSize=\"6xl\"\n fontFamily=\"display\"\n lineHeight=\"10\"\n fontWeight=\"700\"\n color={VARIANTS[slice.variant].factValueColor}\n mb=\"2\"\n as=\"p\"\n >\n {fact.value}\n </Heading>\n\n <Text\n size=\"mdLowNormal\"\n color={VARIANTS[slice.variant].factKeyColor}\n >\n {fact.key}\n </Text>\n </Flex>\n ))}\n </Flex>\n\n {slice.button && (\n <>\n <Spacer height={['0', null, '20']} />\n <StrapiLinkButton\n link={slice.button}\n size=\"md\"\n variant={slice.variant === 'green' ? 'outline' : 'solid'}\n />\n </>\n )}\n </>\n </DefaultSectionContainer>\n);\n","import React, { useContext, useMemo } from 'react';\nimport {\n Text,\n Heading,\n Spacer,\n DatePersonPair,\n DefaultSectionHeader,\n DefaultSectionContainer,\n Wrapper,\n SimpleGrid,\n Box,\n Flex,\n useMediaQuery,\n useToken,\n} from 'boemly';\nimport Image from 'next/image';\nimport Link from 'next/link';\nimport { CaretRight } from '@phosphor-icons/react';\nimport StrapiBlogPost from '../../models/strapi/StrapiBlogPost';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiCategory from '../../models/strapi/StrapiCategory';\nimport IStrapi from '../../models/strapi/IStrapi';\nimport { BREAKPOINT_LG_QUERY } from '../../constants/breakpoints';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport { BlogItemContainer, ImageContainer } from '../Blog/styles';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface BlogCardsProps {\n slice: {\n tagline: string;\n title: string;\n subTitle: string;\n button?: StrapiLink;\n variant: 'white' | 'gray';\n blogPostCategory: IStrapi<IStrapiData<StrapiCategory> | null>;\n };\n blogPosts: IStrapiData<StrapiBlogPost>[];\n}\n\nconst VARIANTS = {\n white: {\n backgroundColor: 'white',\n },\n gray: {\n backgroundColor: 'primary.50',\n },\n};\n\nconst sortByCreatedAt = (\n a: IStrapiData<StrapiBlogPost>,\n b: IStrapiData<StrapiBlogPost>\n): number =>\n new Date(b.attributes.createdAt).getTime() -\n new Date(a.attributes.createdAt).getTime();\n\nexport const BlogCards: React.FC<BlogCardsProps> = ({\n slice,\n blogPosts,\n}: BlogCardsProps) => {\n const { formatDate } = useContext(IntlContext);\n const [mobile] = useMediaQuery(BREAKPOINT_LG_QUERY);\n const [gray700] = useToken('colors', ['gray.700']);\n\n const sortedBlogPosts = useMemo(\n () => blogPosts.sort(sortByCreatedAt),\n [blogPosts]\n );\n\n const blogPostsToDisplay = useMemo(\n () =>\n slice.blogPostCategory?.data?.attributes.name\n ? sortedBlogPosts\n .filter(\n (blogPost) =>\n blogPost.attributes.category.data?.attributes.name ===\n slice.blogPostCategory?.data?.attributes.name\n )\n .slice(0, 3)\n : sortedBlogPosts.slice(0, 3),\n [sortedBlogPosts, slice]\n );\n\n return (\n <DefaultSectionContainer\n backgroundColor={VARIANTS[slice.variant].backgroundColor}\n title={slice.title}\n >\n <Wrapper>\n {mobile || !slice.button ? (\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n titleProps={{ maxW: '2xl' }}\n textProps={{ maxW: '2xl' }}\n />\n ) : (\n <Flex justifyContent=\"space-between\" alignItems=\"center\" gap=\"60\">\n <Box>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n />\n </Box>\n <Box minWidth=\"40\">\n <StrapiLinkButton\n link={slice.button}\n size=\"lg\"\n variant=\"outline\"\n rightIcon={<CaretRight color={gray700} />}\n />\n </Box>\n </Flex>\n )}\n <Spacer height=\"14\" />\n <SimpleGrid\n columns={[1, null, null, 3]}\n spacingX={4}\n spacingY={24}\n flexShrink=\"0\"\n >\n {blogPostsToDisplay.map((blogPost) => (\n <BlogItemContainer\n as={Link}\n href={`/blog/${blogPost.attributes.slug}`}\n data-testid=\"blog-item\"\n key={blogPost.attributes.slug}\n >\n <ImageContainer>\n <Image\n src={strapiMediaUrl(blogPost.attributes.img.img, 'medium')}\n alt={blogPost.attributes.img.alt}\n fill\n style={{\n objectFit: blogPost.attributes.img.objectFit || 'cover',\n }}\n />\n </ImageContainer>\n <Box px=\"2\" py=\"8\">\n {blogPost.attributes.category && (\n <Text size=\"smMonoUppercase\" color=\"primary.800\" mb=\"2\">\n {blogPost.attributes.category.data?.attributes.name}\n </Text>\n )}\n <Heading size=\"lg\">{blogPost.attributes.title}</Heading>\n {blogPost.attributes.teaser && (\n <Text size=\"mdRegularNormal\" mt=\"2\">\n {blogPost.attributes.teaser}\n </Text>\n )}\n\n <Spacer height=\"4\" />\n\n <DatePersonPair\n date={formatDate(blogPost.attributes.createdAt)}\n person={\n blogPost.attributes.author.data\n ? {\n name: blogPost.attributes.author.data.attributes.name,\n image: (\n <Image\n src={strapiMediaUrl(\n blogPost.attributes.author.data.attributes.img\n .img,\n 'thumbnail'\n )}\n alt={\n blogPost.attributes.author.data.attributes.img\n .alt\n }\n fill\n style={{\n objectFit:\n blogPost.attributes.author.data.attributes.img\n .objectFit || 'cover',\n }}\n />\n ),\n }\n : undefined\n }\n />\n </Box>\n </BlogItemContainer>\n ))}\n </SimpleGrid>\n <>\n {mobile && slice.button && (\n <>\n <Box minWidth=\"40\" mt=\"6\">\n <StrapiLinkButton\n link={slice.button}\n size=\"lg\"\n variant=\"outline\"\n rightIcon={<CaretRight color={gray700} />}\n />\n </Box>\n </>\n )}\n </>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React, { useCallback, useContext } from 'react';\nimport {\n BoemlyFormControl,\n Box,\n Button,\n Divider,\n Flex,\n InputRightAddon,\n Spacer,\n Text,\n} from 'boemly';\nimport {\n Field,\n FieldProps,\n Form,\n Formik,\n FormikErrors,\n FormikProps,\n} from 'formik';\nimport { useRouter } from 'next/router';\nimport Image from 'next/image';\nimport { StrapiLink } from '../../..';\nimport { IntlContext } from '../../ContextProvider';\nimport {\n MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY,\n MINIMUM_CONTRIBUTION_VALUE_IN_MONEY,\n} from '../../../constants/domain';\nimport { CDN_URI, FPM_API_URI } from '../../../constants/api';\nimport StrapiLinkButton from '../../StrapiLinkButton';\nimport SmallCheckoutForm from '../../../models/forms/SmallCheckoutForm';\n\nconst calculateTaxIncludedValue = (\n values: SmallCheckoutForm,\n taxInPercent: number\n) => {\n const value = parseInt(values.contributionValueCurrency);\n\n if (isNaN(value)) return 0;\n\n return value + value * (taxInPercent / 100);\n};\n\nexport interface SmallCheckoutProps {\n batchId: string;\n pricePerKg: number;\n initialContributionValue: number;\n taxInPercent?: number;\n checkoutText?: string;\n currency: 'EUR' | 'CHF';\n\n title?: string;\n subtitle?: string;\n button?: StrapiLink;\n}\n\nconst SmallCheckout = ({\n pricePerKg,\n currency,\n batchId,\n initialContributionValue,\n taxInPercent,\n checkoutText,\n title,\n subtitle,\n button,\n}: SmallCheckoutProps) => {\n const { formatNumber, formatMessage, locale } = useContext(IntlContext);\n const { push } = useRouter();\n\n const validateForm = useCallback(\n (values: SmallCheckoutForm) => {\n const errors: FormikErrors<SmallCheckoutForm> = {};\n const value = parseInt(values.contributionValueCurrency);\n if (!values.contributionValueCurrency || isNaN(value)) {\n errors.contributionValueCurrency = formatMessage({\n id: 'portfolio.smallCheckout.contributionValueCurrency.validation.empty',\n });\n } else if (value < MINIMUM_CONTRIBUTION_VALUE_IN_MONEY) {\n errors.contributionValueCurrency = formatMessage({\n id: `portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.${currency}`,\n });\n } else if (value > MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY) {\n errors.contributionValueCurrency = formatMessage({\n id: 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh',\n });\n }\n\n return errors;\n },\n [currency, locale]\n );\n\n const onSubmit = async ({ contributionValueCurrency }: SmallCheckoutForm) => {\n const checkoutURL = new URL(`${FPM_API_URI}/v1/webhooks/shop/checkout`);\n const currentURL = new URL(window.location.href);\n\n checkoutURL.searchParams.append('batchId', batchId);\n\n checkoutURL.searchParams.append(\n 'quantity',\n Math.floor(parseInt(contributionValueCurrency) / pricePerKg).toString()\n );\n\n checkoutURL.searchParams.append('cancelPath', currentURL.pathname);\n\n push(checkoutURL.toString());\n };\n\n return (\n <Flex\n width=\"full\"\n height=\"full\"\n borderRadius=\"xl\"\n background=\"primary.100\"\n padding=\"6\"\n direction=\"column\"\n >\n <Flex gap=\"2\" alignItems=\"end\" mb=\"6\">\n <Text color=\"black\" lineHeight=\"0\">\n {formatMessage(\n { id: 'unit.formatter.tonsCo2' },\n {\n number: (\n <Text as=\"span\" size=\"lgLowBold\" color=\"black\">\n {formatNumber(pricePerKg * 1000, {\n style: 'currency',\n currency,\n maximumFractionDigits: 0,\n })}\n </Text>\n ),\n }\n )}\n </Text>\n <Text size=\"smLowNormal\">\n {formatMessage({\n id: 'portfolio.smallCheckout.price.taxNotIncluded',\n })}\n </Text>\n </Flex>\n\n <Formik\n initialValues={{\n contributionValueCurrency: initialContributionValue.toString(),\n contributionValueKgs: (\n initialContributionValue /\n pricePerKg /\n 1000\n ).toString(),\n }}\n validate={validateForm}\n onSubmit={onSubmit}\n >\n {({\n errors,\n touched,\n handleSubmit,\n setValues,\n values,\n }: FormikProps<SmallCheckoutForm>) => (\n <Form onSubmit={handleSubmit}>\n <Flex gap=\"4\">\n <Box width=\"full\">\n <Field name=\"contributionValueCurrency\">\n {({ field }: FieldProps) => (\n <BoemlyFormControl\n id=\"contributionValueCurrency\"\n size=\"md\"\n inputProps={{\n type: 'number',\n value: field.value || '',\n onChange: (e) => {\n const value = e.target.valueAsNumber;\n\n setValues({\n contributionValueCurrency: value.toString(),\n contributionValueKgs: (\n value /\n pricePerKg /\n 1000\n ).toString(),\n });\n },\n }}\n label={formatMessage({\n id: `portfolio.smallCheckout.contributionValueCurrency.label.${currency}`,\n })}\n rightAddonsOrElements={[\n <InputRightAddon key=\"currencyUnit\">\n {formatMessage({\n id: `portfolio.smallCheckout.contributionValueCurrency.unit.${currency}`,\n })}\n </InputRightAddon>,\n ]}\n isInvalid={\n !!errors.contributionValueCurrency &&\n touched.contributionValueCurrency\n }\n errorMessage={errors.contributionValueCurrency}\n />\n )}\n </Field>\n </Box>\n\n <Box width=\"full\">\n <Field name=\"contributionValueKgs\">\n {({ field }: FieldProps) => (\n <BoemlyFormControl\n id=\"contributionValueKgs\"\n size=\"md\"\n inputProps={{\n type: 'number',\n value: field.value || '',\n onChange: (e) => {\n const value = e.target.valueAsNumber;\n setValues({\n contributionValueCurrency: (\n value *\n pricePerKg *\n 1000\n ).toString(),\n contributionValueKgs: value.toString(),\n });\n },\n }}\n label={formatMessage({\n id: 'portfolio.smallCheckout.contributionValueKgs.label',\n })}\n rightAddonsOrElements={[\n <InputRightAddon key=\"tCO₂\">tCO₂</InputRightAddon>,\n ]}\n isInvalid={\n !!errors.contributionValueKgs &&\n touched.contributionValueKgs\n }\n errorMessage={errors.contributionValueKgs}\n />\n )}\n </Field>\n </Box>\n </Flex>\n {values.contributionValueCurrency &&\n taxInPercent &&\n taxInPercent > 0 && (\n <Text size=\"smLowNormal\" mt=\"2\">\n {formatMessage(\n { id: 'portfolio.smallCheckout.price.taxIncluded' },\n {\n number: formatNumber(\n calculateTaxIncludedValue(values, taxInPercent),\n {\n style: 'currency',\n currency,\n maximumFractionDigits: 2,\n }\n ),\n }\n )}\n </Text>\n )}\n\n <Spacer height=\"4\" />\n\n <Button type=\"submit\" width=\"full\">\n {formatMessage({ id: 'portfolio.smallCheckout.submitButton' })}\n </Button>\n </Form>\n )}\n </Formik>\n\n <Flex\n width=\"full\"\n justifyContent=\"center\"\n alignItems=\"center\"\n mt=\"6\"\n gap=\"2\"\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/globe-love-icon.svg`}\n alt=\"Icon\"\n width={20}\n height={20}\n />\n <Text size=\"smLowNormal\">{checkoutText}</Text>\n </Flex>\n\n <Divider my=\"6\" />\n\n <Flex width=\"full\" alignItems=\"center\" direction=\"column\">\n {title && (\n <Text size=\"smLowBold\" textAlign=\"center\" color=\"black\" mb=\"2\">\n {title}\n </Text>\n )}\n {subtitle && (\n <Text size=\"smRegularNormal\" textAlign=\"center\" mb=\"3\">\n {subtitle}\n </Text>\n )}\n {button && (\n <StrapiLinkButton\n link={{\n intercomLauncher: true,\n ...button,\n }}\n variant=\"outline\"\n />\n )}\n </Flex>\n </Flex>\n );\n};\n\nexport default SmallCheckout;\n","import React, { useContext } from 'react';\nimport {\n Box,\n Container,\n Divider,\n Flex,\n Heading,\n LabelTextPair,\n SimpleGrid,\n Spacer,\n} from 'boemly';\nimport Image from 'next/image';\nimport convertAreaM2ToHa from '../../../utils/convertAreaM2ToHa';\nimport convertCo2AmountKgToTons from '../../../utils/convertCo2AmountKgToTons';\nimport CreditsAvailableBadge from '../../../components/CreditsAvailableBadge';\nimport PortfolioProject from '../../../models/PortfolioProject';\nimport {\n FORMAT_AS_HECTARE_CONFIG,\n FORMAT_AS_PERCENT_CONFIG,\n} from '../../../constants/formatter';\nimport getTimeSpanInYears from '../../../utils/getTimeSpanInYears';\nimport { IntlContext } from '../../ContextProvider';\n\nexport interface ProjectInfoProps {\n project: PortfolioProject;\n subtitles: {\n areaSubtitle?: string;\n locationSubtitle?: string;\n startSubtitle?: string;\n timeSpanSubtitle?: string;\n projectTypeSubtitle?: string;\n projectDeveloperSubtitle?: string;\n verificationStandardSubtitle?: string;\n forecastedAmountSubtitle?: string;\n riskBufferSubtitle?: string;\n buyCreditsSubtitle?: string;\n };\n}\n\nexport const ProjectInfo: React.FC<ProjectInfoProps> = ({\n project,\n subtitles,\n}: ProjectInfoProps) => {\n const { formatMessage, formatNumber, formatDate } = useContext(IntlContext);\n\n return (\n <Container p=\"2\" width=\"full\">\n <Heading size=\"xl\" textAlign=\"left\">\n {formatMessage({ id: 'features.projectInfo.projectInfo.value' })}\n </Heading>\n\n <Spacer height=\"8\" />\n\n <SimpleGrid\n columns={[1, null, null, 2]}\n gap=\"8\"\n spacingX=\"10\"\n spacingY=\"8\"\n >\n {project.area && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.area',\n })}\n text={formatNumber(\n convertAreaM2ToHa(project.area.toString()),\n FORMAT_AS_HECTARE_CONFIG\n )}\n caption={subtitles.areaSubtitle}\n />\n </Box>\n )}\n\n {project.location && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.location',\n })}\n text={project.location}\n caption={subtitles.locationSubtitle}\n />\n </Box>\n )}\n\n {project.start && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.start',\n })}\n text={formatDate(project.start, {\n year: 'numeric',\n month: 'long',\n })}\n caption={subtitles.startSubtitle}\n />\n </Box>\n )}\n\n {project.start && project.end && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.timeSpan',\n })}\n text={formatMessage(\n {\n id: 'features.projectInfo.properties.year',\n },\n {\n years: getTimeSpanInYears(\n new Date(project.start),\n new Date(project.end)\n ),\n }\n )}\n caption={subtitles.timeSpanSubtitle}\n />\n </Box>\n )}\n </SimpleGrid>\n\n {project.projectType ||\n project.projectDeveloper ||\n project.verificationStandard ? (\n <>\n <Spacer height=\"6\" />\n <Divider />\n <Spacer height=\"6\" />\n </>\n ) : (\n <></>\n )}\n <SimpleGrid columns={[1, null, null, 2]} spacingX=\"10\" spacingY=\"8\">\n {project.projectType && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.projectType',\n })}\n text={project.projectType.title}\n caption={subtitles.projectTypeSubtitle}\n />\n </Box>\n )}\n {project.projectDeveloper && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.projectDeveloper',\n })}\n text={project.projectDeveloper.name}\n caption={subtitles.projectDeveloperSubtitle}\n />\n </Box>\n )}\n </SimpleGrid>\n\n {project.verificationStandard ? (\n <>\n {project.projectType || project.projectDeveloper ? (\n <Spacer height=\"6\" />\n ) : (\n <></>\n )}\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.verificationStandard.label',\n })}\n text={formatMessage({\n id: `features.projectInfo.properties.verificationStandard.value.${project.verificationStandard.id}`,\n defaultMessage: project.verificationStandard.id,\n })}\n caption={subtitles.verificationStandardSubtitle}\n />\n </Box>\n\n {project.defaultIssuer && (\n <Box position=\"relative\" width=\"14\" height=\"8\">\n <Image\n src={project.defaultIssuer.logoUrl}\n alt={`${project.defaultIssuer.name} logo`}\n fill\n style={{ objectFit: 'contain' }}\n />\n </Box>\n )}\n </Flex>\n </>\n ) : (\n <></>\n )}\n\n {project.forecastedAmountYearly && project.riskBuffer ? (\n <>\n <Spacer height=\"8\" />\n <Divider />\n <Spacer height=\"8\" />\n <SimpleGrid columns={[1, null, null, 2]} spacingX=\"10\" spacingY=\"8\">\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.forecastedAmountYear.label',\n })}\n text={formatMessage(\n {\n id: 'unit.formatter.tonsCo2PerYear',\n },\n {\n number: formatNumber(\n convertCo2AmountKgToTons(\n project.forecastedAmountYearly.toString()\n ),\n { maximumFractionDigits: 0 }\n ),\n }\n )}\n caption={subtitles.forecastedAmountSubtitle}\n />\n </Box>\n\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.riskBuffer',\n })}\n text={formatNumber(\n project.riskBuffer / 100,\n FORMAT_AS_PERCENT_CONFIG\n )}\n caption={subtitles.riskBufferSubtitle}\n />\n </Box>\n </SimpleGrid>\n </>\n ) : (\n <></>\n )}\n\n {project.creditsAvailable ? (\n <Box mt=\"2\">\n <CreditsAvailableBadge status={project.creditsAvailable} />\n </Box>\n ) : (\n <></>\n )}\n </Container>\n );\n};\n","const convertCo2AmountKgToTons = (amount: string): number =>\n parseInt(amount, 10) / 1000;\n\nexport default convertCo2AmountKgToTons;\n","const getTimeSpanInYears = (start: Date, end: Date) => {\n const monthsDifference = end.getMonth() - start.getMonth();\n const yearsDifference = end.getFullYear() - start.getFullYear();\n\n if (monthsDifference > 4) {\n return yearsDifference + 1;\n }\n if (monthsDifference < -4) {\n return yearsDifference - 1;\n }\n return yearsDifference;\n};\n\nexport default getTimeSpanInYears;\n","const convertAreaM2ToHa = (areaInM2: string): number =>\n parseInt(areaInM2, 10) / 10000;\n\nexport default convertAreaM2ToHa;\n","import React, { useContext } from 'react';\nimport StrapiLink from '../../../models/strapi/StrapiLink';\nimport {\n Center,\n Container,\n Flex,\n Heading,\n IconButton,\n Spacer,\n Text,\n} from 'boemly';\nimport { DownloadSimple, FilePdf } from '@phosphor-icons/react';\nimport Link from 'next/link';\nimport { IntlContext } from '../../ContextProvider';\n\nexport interface DocumentsDownloadListProps {\n documentUrls: StrapiLink[];\n}\n\nexport const DocumentsDownloadList: React.FC<DocumentsDownloadListProps> = ({\n documentUrls,\n}: DocumentsDownloadListProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <Container p=\"2\">\n <Heading size=\"xl\" textAlign=\"left\">\n {formatMessage({\n id: 'features.portfolio.documentsDownloadList.projectDocuments',\n })}\n </Heading>\n\n <Flex flexDir=\"column\">\n {documentUrls.map((documentUrl) => (\n <Flex\n justifyContent=\"space-between\"\n alignItems=\"center\"\n mt=\"6\"\n key={documentUrl.text}\n >\n <Flex alignItems=\"center\">\n <Center\n w=\"8\"\n h=\"8\"\n borderRadius=\"full\"\n borderWidth=\"1px\"\n borderColor=\"grey.200\"\n >\n <FilePdf />\n </Center>\n\n <Spacer width=\"4\" />\n\n <Flex flexDir=\"column\">\n <Text size=\"smMonoNormal\">PDF</Text>\n <Text size=\"mdLowBold\" color=\"black\" textAlign=\"left\">\n {documentUrl.text}\n </Text>\n </Flex>\n </Flex>\n\n <Spacer width=\"32\" />\n\n <IconButton\n variant=\"outline\"\n aria-label={formatMessage({\n id: 'features.portfolio.documentsDownloadList.downloadDocument',\n })}\n icon={<DownloadSimple />}\n as={Link}\n href={documentUrl.url}\n size=\"sm\"\n />\n </Flex>\n ))}\n </Flex>\n </Container>\n );\n};\n","import React from 'react';\nimport StrapiImage from '../../../models/strapi/StrapiImage';\nimport StrapiLink from '../../../models/strapi/StrapiLink';\nimport strapiMediaUrl from '../../../utils/strapiMediaUrl';\nimport { Text, Heading, Flex, Box, Container } from 'boemly';\nimport Image from 'next/image';\nimport StrapiLinkButton from '../../../components/StrapiLinkButton';\n\nexport interface ContactProps {\n avatar?: StrapiImage;\n title?: string;\n text?: string;\n button?: StrapiLink;\n}\n\nexport const Contact: React.FC<ContactProps> = ({\n avatar,\n title,\n text,\n button,\n}: ContactProps) => (\n <Container backgroundColor=\"primary.100\" border=\"none\" p=\"8\" height=\"full\">\n <Flex\n flexDir=\"column\"\n justifyContent=\"center\"\n alignItems=\"center\"\n height=\"full\"\n >\n {avatar ? (\n <Box\n position=\"relative\"\n width=\"20\"\n height=\"20\"\n borderRadius=\"full\"\n overflow=\"hidden\"\n >\n <Image\n src={strapiMediaUrl(avatar.img, 'small')}\n alt={avatar.alt}\n fill\n objectFit={avatar.objectFit}\n />\n </Box>\n ) : (\n <></>\n )}\n {title ? (\n <Heading\n mt=\"6\"\n size=\"md\"\n fontWeight=\"500\"\n textAlign=\"center\"\n color=\"black\"\n >\n {title}\n </Heading>\n ) : (\n <></>\n )}\n {text ? (\n <Text mt=\"2\" size=\"smRegularNormal\" textAlign=\"center\">\n {text}\n </Text>\n ) : (\n <></>\n )}\n {button ? (\n <StrapiLinkButton mt=\"6\" link={button} size=\"md\" variant=\"outline\" />\n ) : (\n <></>\n )}\n </Flex>\n </Container>\n);\n","import React from 'react';\nimport { DefaultSectionContainer, Flex, Wrapper } from 'boemly';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport SmallCheckout from '../../components/portfolio/SmallCheckout';\nimport ProjectInfo from '../../components/portfolio/ProjectInfo';\nimport DocumentsDownloadList from '../../components/portfolio/DocumentsDownloadList';\nimport Contact from '../../components/portfolio/Contact';\nimport StrapiImage from '../../models/strapi/StrapiImage';\n\nexport interface ProjectFactsProps {\n project?: PortfolioProject;\n slice: {\n projectId: string;\n\n batchId?: string;\n currency?: 'EUR' | 'CHF';\n pricePerKg?: number;\n taxInPercent?: number;\n initialContributionValue?: number;\n checkoutText?: string;\n\n customTitle?: string;\n customSubtitle?: string;\n customButton?: StrapiLink;\n documentUrls?: StrapiLink[];\n\n areaSubtitle?: string;\n locationSubtitle?: string;\n startSubtitle?: string;\n timeSpanSubtitle?: string;\n projectTypeSubtitle?: string;\n projectDeveloperSubtitle?: string;\n verificationStandardSubtitle?: string;\n forecastedAmountSubtitle?: string;\n riskBufferSubtitle?: string;\n buyCreditsSubtitle?: string;\n\n contactTitle?: string;\n contactText?: string;\n contactButton?: StrapiLink;\n contactAvatar?: StrapiImage;\n };\n}\n\nexport const ProjectFacts: React.FC<ProjectFactsProps> = ({\n slice,\n project,\n}: ProjectFactsProps) => {\n if (!project) {\n return (\n <>Invalid configuration, check if a project this id exists in the FPM</>\n );\n }\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <Flex flexDir={['column', null, null, 'row']} gap=\"4\" width=\"full\">\n <ProjectInfo project={project} subtitles={slice} />\n <Flex flexDir=\"column\" gap=\"4\" width=\"full\">\n {slice.documentUrls && slice.documentUrls.length > 0 && (\n <DocumentsDownloadList documentUrls={slice.documentUrls} />\n )}\n {slice.batchId &&\n slice.pricePerKg &&\n slice.currency &&\n slice.initialContributionValue ? (\n <SmallCheckout\n batchId={slice.batchId}\n checkoutText={slice.checkoutText}\n currency={slice.currency}\n initialContributionValue={slice.initialContributionValue}\n pricePerKg={slice.pricePerKg}\n title={slice.customTitle}\n subtitle={slice.customSubtitle}\n button={slice.customButton}\n taxInPercent={slice.taxInPercent}\n />\n ) : (\n (slice.contactTitle ||\n slice.contactText ||\n slice.contactButton ||\n slice.contactAvatar) && (\n <Contact\n title={slice.contactTitle}\n text={slice.contactText}\n button={slice.contactButton}\n avatar={slice.contactAvatar}\n />\n )\n )}\n </Flex>\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import { Container, Center, Heading, Button, Box, Text, Flex } from 'boemly';\nimport React, { useContext } from 'react';\nimport { StrapiCustomerStory, strapiMediaUrl } from '../..';\nimport Image from 'next/image';\nimport { IntlContext } from '../../components/ContextProvider';\nimport Link from 'next/link';\n\nexport interface CustomerCardProps {\n customerStory: StrapiCustomerStory;\n}\nexport const CustomerCard = ({\n customerStory,\n}: CustomerCardProps): JSX.Element => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <Container padding=\"none\" height=\"full\">\n <Flex flexDir=\"column\" height=\"full\">\n <Center height=\"24\" backgroundColor=\"primary.50\" borderTopRadius=\"xl\">\n {customerStory.cardImage && (\n <Box position=\"relative\" height=\"12\" width=\"12\">\n <Image\n src={strapiMediaUrl(customerStory.cardImage.img, 'medium')}\n alt={customerStory.cardImage.alt}\n fill\n style={{\n objectFit: customerStory.cardImage.objectFit,\n }}\n />\n </Box>\n )}\n </Center>\n <Box px=\"6\" pt=\"8\" pb=\"6\" mb=\"auto\">\n {customerStory.customerCardCustomerIndustry && (\n <Text size=\"xsMonoUppercase\" color=\"gray.500\" mb=\"2\">\n {customerStory.customerCardCustomerIndustry}\n </Text>\n )}\n {customerStory.title && (\n <Heading size=\"md\" fontWeight=\"500\">\n {customerStory.title}\n </Heading>\n )}\n </Box>\n <Box px=\"6\" pt=\"8\" pb=\"6\">\n <Button\n as={Link}\n href={`/customer-stories/${customerStory.slug}`}\n variant=\"outline\"\n size=\"sm\"\n >\n {formatMessage({ id: 'sections.customerCard.more' })}\n </Button>\n </Box>\n </Flex>\n </Container>\n );\n};\n","import { Container, Heading, Button, Box, Text } from 'boemly';\nimport React, { useContext } from 'react';\nimport { StrapiCustomerStory, strapiMediaUrl } from '../..';\nimport Image from 'next/image';\nimport { IntlContext } from '../../components/ContextProvider';\nimport Link from 'next/link';\n\nexport interface CustomerQuoteCardProps {\n customerStory: StrapiCustomerStory;\n}\nexport const CustomerQuoteCard = ({\n customerStory,\n}: CustomerQuoteCardProps): JSX.Element => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <Container p=\"1\" backgroundColor=\"primary.100\" height=\"full\">\n {customerStory.cardImage ? (\n <Box\n position=\"relative\"\n height=\"12\"\n width=\"12\"\n borderRadius=\"full\"\n overflow=\"hidden\"\n >\n <Image\n src={strapiMediaUrl(customerStory.cardImage.img, 'medium')}\n alt={customerStory.cardImage.alt}\n fill\n style={{\n objectFit: customerStory.cardImage.objectFit,\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n <Box>\n <Box my=\"8\">\n <Heading size=\"md\" fontWeight=\"500\">\n {customerStory.customerName}\n </Heading>\n <Text size=\"xs\">{customerStory.quoteCardCustomerTitle}</Text>\n </Box>\n <Text size=\"xs\" color=\"black\">\n {customerStory.quoteCardQuote}\n </Text>\n <Button\n href={`/customer-stories/${customerStory.slug}`}\n as={Link}\n variant=\"outline\"\n size=\"sm\"\n mt=\"8\"\n >\n {formatMessage({ id: 'sections.customerQuoteCard.more' })}\n </Button>\n </Box>\n </Container>\n );\n};\n","import { Box, Container, Flex } from 'boemly';\nimport { StrapiCustomerStory, strapiMediaUrl } from '../..';\nimport Image from 'next/image';\nimport React from 'react';\nimport Link from 'next/link';\n\nexport interface LogoCardProps {\n customerStory: StrapiCustomerStory;\n}\nexport const LogoCard = ({ customerStory }: LogoCardProps) => {\n if (customerStory.cardImage) {\n return (\n <Container height=\"full\" backgroundColor=\"primary.50\">\n <Flex justifyContent=\"center\" height=\"full\" padding=\"4\">\n <Box position=\"relative\" height=\"12\" width=\"36\" marginY=\"auto\">\n <Link href={`/customer-stories/${customerStory.slug}`}>\n <Image\n src={strapiMediaUrl(customerStory.cardImage.img, 'medium')}\n alt={customerStory.cardImage.alt}\n fill\n style={{\n objectFit: customerStory.cardImage.objectFit,\n }}\n />\n </Link>\n </Box>\n </Flex>\n </Container>\n );\n }\n return <></>;\n};\n","import React from 'react';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport StrapiCustomerStory from '../../models/strapi/StrapiCustomerStory';\nimport { Box, DefaultSectionContainer, SimpleGrid, Wrapper } from 'boemly';\nimport CustomerCard from '../../components/CustomerCard';\nimport CustomerQuoteCard from '../../components/CustomerQuoteCard';\nimport LogoCard from '../../components/LogoCard';\n\nexport interface CustomerStoriesProps {\n slice: {\n customer_stories: IStrapiData<StrapiCustomerStory>[];\n };\n customerStories: IStrapiData<StrapiCustomerStory>[];\n}\n\nexport const CustomerStories = ({\n slice,\n customerStories,\n}: CustomerStoriesProps): JSX.Element => {\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2, 3]} spacingX={6} spacingY={6}>\n {slice.customer_stories.map(({ attributes }) => {\n const customerStory: IStrapiData<StrapiCustomerStory> | undefined =\n customerStories.find(\n (cs) => cs.attributes.slug === attributes.slug\n );\n if (!customerStory) {\n return null;\n }\n return (\n <Box key={customerStory.id}>\n {attributes.variant === 'customerCard' && (\n <CustomerCard customerStory={customerStory.attributes} />\n )}\n {attributes.variant === 'quoteCard' && (\n <CustomerQuoteCard customerStory={customerStory.attributes} />\n )}\n {attributes.variant === 'logoCard' && (\n <LogoCard customerStory={customerStory.attributes} />\n )}\n </Box>\n );\n })}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport { Check, X } from '@phosphor-icons/react';\nimport { Box } from 'boemly';\n\nexport interface IconProps {\n variant: 'gray' | 'green' | 'white';\n icon: string;\n}\n\nconst BULLET_POINT_VARIANTS = {\n gray: { bulletPointColor: 'black' },\n green: { bulletPointColor: 'white' },\n white: { bulletPointColor: 'black' },\n};\n\nexport const Icon = ({ variant, icon }: IconProps): JSX.Element => {\n switch (icon) {\n case 'check':\n return <Check size={20} color=\"var(--boemly-colors-primary-500)\" />;\n case 'cross':\n return <X size={20} color=\"var(--boemly-colors-red-500)\" />;\n default:\n return (\n <Box\n data-testid=\"bullet-point-box\"\n borderRadius=\"full\"\n backgroundColor={BULLET_POINT_VARIANTS[variant].bulletPointColor}\n width=\"2\"\n height=\"2\"\n margin=\"1.5\"\n />\n );\n }\n};\nexport default Icon;\n","import React, { useContext } from 'react';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport {\n Container,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Wrapper,\n Text,\n Flex,\n Box,\n Spacer,\n Divider,\n Heading,\n Badge,\n SimpleGrid,\n} from 'boemly';\nimport Image from 'next/image';\nimport { CaretRight } from '@phosphor-icons/react';\nimport { Icon } from './Icon';\nimport { CDN_URI } from '../../constants/api';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface ComparisonProps {\n slice: {\n title?: string;\n subTitle?: string;\n tagline?: string;\n\n comparisonCards: ComparisonCard[];\n };\n}\n\nexport interface ComparisonCard {\n id: number;\n title: string;\n subTitle: string;\n badge?: string;\n variant: 'gray' | 'green' | 'white';\n image?: StrapiImage;\n button?: StrapiLink;\n factTitle?: string;\n factSubtitle?: string;\n lists: {\n id: string;\n title: string;\n items: { id: string; text: string; icon: 'bullet' | 'check' | 'cross' }[];\n }[];\n}\n\nconst VARIANTS = {\n gray: {\n backgroundColor: 'primary.50',\n textColor: 'black',\n subTitleColor: 'gray.500',\n factColor: 'primary.800',\n dividerColor: 'gray.200',\n },\n green: {\n backgroundColor: 'primary.800',\n textColor: 'white',\n subTitleColor: 'whiteAlpha.900',\n factColor: 'white',\n dividerColor: 'whiteAlpha.200',\n },\n white: {\n backgroundColor: 'white',\n textColor: 'black',\n subTitleColor: 'gray.500',\n factColor: 'primary.800',\n dividerColor: 'gray.200',\n },\n};\n\nexport const Comparison: React.FC<ComparisonProps> = ({\n slice,\n}: ComparisonProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n {slice.title ? (\n <>\n <Flex alignItems=\"center\" flexDirection=\"column\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n textProps={{ maxW: '2xl', textAlign: 'center' }}\n titleProps={{\n textAlign: 'center',\n maxWidth: '3xl',\n }}\n taglineProps={{ textAlign: 'center', maxWidth: '3xl' }}\n />\n </Flex>\n <Spacer height=\"12\" />\n </>\n ) : (\n <></>\n )}\n <SimpleGrid\n columns={[1, null, null, null, slice.comparisonCards.length]}\n spacing=\"4\"\n >\n {slice.comparisonCards.map((comparisonCard) => (\n <Container\n boxShadow={comparisonCard.variant === 'green' ? 'xl' : 'base'}\n border={\n comparisonCard.variant === 'green' ? 'primary.800' : undefined\n }\n zIndex=\"base\"\n key={comparisonCard.id}\n position=\"relative\"\n elevation=\"none\"\n p=\"3\"\n backgroundColor={VARIANTS[comparisonCard.variant].backgroundColor}\n >\n {comparisonCard.variant === 'green' ? (\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"0\"\n width=\"full\"\n height=\"full\"\n zIndex=\"-1\"\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/shapes-comparison.svg`}\n alt={formatMessage({\n id: 'sections.comparison.backgroundShapes',\n })}\n fill\n style={{\n objectFit: 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n <Flex flexDir=\"column\" gap=\"4\">\n {comparisonCard.image && (\n <Box position=\"relative\" height=\"7\" width=\"100%\">\n <Image\n src={strapiMediaUrl(comparisonCard.image.img, 'small')}\n alt={comparisonCard.image.alt}\n fill\n style={{\n objectFit: comparisonCard.image.objectFit,\n }}\n />\n </Box>\n )}\n <Flex gap=\"2\" alignItems=\"center\" flexWrap=\"wrap\">\n <Heading\n size=\"2xl\"\n color={VARIANTS[comparisonCard.variant].textColor}\n whiteSpace=\"pre-line\"\n >\n {comparisonCard.title}\n </Heading>\n {comparisonCard.badge && (\n <Badge\n backgroundColor=\"green.100\"\n borderRadius=\"md\"\n whiteSpace=\"pre-line\"\n >\n {comparisonCard.badge}\n </Badge>\n )}\n </Flex>\n </Flex>\n <Spacer height=\"4\" />\n <Text\n size=\"smRegularNormal\"\n color={VARIANTS[comparisonCard.variant].subTitleColor}\n >\n {comparisonCard.subTitle}\n </Text>\n\n {comparisonCard.factTitle ||\n comparisonCard.factSubtitle ||\n comparisonCard.button ? (\n <>\n <Spacer height=\"6\" />\n <Flex flexDir=\"column\">\n {comparisonCard.factTitle && (\n <>\n <Text\n color={VARIANTS[comparisonCard.variant].factColor}\n size=\"lgMonoNormal\"\n >\n {comparisonCard.factTitle}\n </Text>\n <Text\n color={VARIANTS[comparisonCard.variant].factColor}\n size=\"smLowNormal\"\n >\n {comparisonCard.factSubtitle}\n </Text>\n </>\n )}\n {comparisonCard.button && (\n <StrapiLinkButton\n mt=\"6\"\n link={comparisonCard.button}\n size=\"md\"\n variant=\"outline\"\n rightIcon={<CaretRight size={16} weight=\"bold\" />}\n />\n )}\n </Flex>\n </>\n ) : (\n <></>\n )}\n <>\n {comparisonCard.lists.map((list) => (\n <Box key={list.id}>\n <Divider\n my=\"8\"\n color={VARIANTS[comparisonCard.variant].dividerColor}\n />\n <Text\n size=\"smLowBold\"\n color={VARIANTS[comparisonCard.variant].textColor}\n >\n {list.title}\n </Text>\n <>\n {list.items.map((item) => (\n <Box key={item.id}>\n <Spacer height=\"4\" />\n <Flex gap=\"4\" alignItems=\"center\">\n <Box>\n <Icon\n variant={comparisonCard.variant}\n icon={item.icon}\n />\n </Box>\n <Text\n size=\"smLowNormal\"\n color={VARIANTS[comparisonCard.variant].textColor}\n >\n {item.text}\n </Text>\n </Flex>\n </Box>\n ))}\n </>\n </Box>\n ))}\n </>\n </Container>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\nexport default Comparison;\n","import React, { useContext } from 'react';\nimport {\n Button,\n Box,\n Container,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n RichText,\n SimpleGrid,\n Spacer,\n Tag,\n Text,\n Wrapper,\n useMediaQuery,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport { CDN_URI } from '../../constants/api';\nimport { IntlContext } from 'react-intl';\nimport { BREAKPOINT_MD_QUERY } from '../../constants/breakpoints';\nimport { useState } from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport FullScreenImage from '../../components/FullScreenImage';\n\nexport interface TimelineProps {\n slice: {\n title: string;\n text?: string;\n tagline?: string;\n\n timelineItems: TimelineItem[];\n };\n}\n\nexport interface TimelineItem {\n id: number;\n tagline?: string;\n title: string;\n text?: string;\n badge?: { text: string; variant: 'orange' | 'green' | 'red' | 'gray' };\n logo?: StrapiImage;\n icon?: StrapiImage;\n image?: StrapiImage;\n button?: StrapiLink;\n backgroundShapes?: boolean;\n}\n\nexport const Timeline: React.FC<TimelineProps> = ({ slice }: TimelineProps) => {\n const { formatMessage } = useContext(IntlContext);\n const [visibleItems, setVisibleItems] = useState(3);\n const [mobile] = useMediaQuery(BREAKPOINT_MD_QUERY);\n const [isOpen, setIsOpen] = useState(false);\n\n const showMoreItems = () => {\n setVisibleItems((prevVisibleItems) => prevVisibleItems + 3);\n };\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <Flex flexDir={['column', null, null, 'row']}>\n <Box\n width={['full', null, null, '50%']}\n position={[null, null, null, 'sticky']}\n top={['16', null, null, '32']}\n height=\"full\"\n paddingRight={[null, null, null, '28']}\n >\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n {mobile && (\n <>\n <Spacer h=\"10\" />\n <Flex justifyContent=\"center\">\n <Box\n borderRadius=\"full\"\n width=\"3\"\n height=\"3\"\n margin=\"1.5\"\n backgroundColor=\"gray\"\n />\n </Flex>\n <Box\n overflow=\"visible\"\n borderRight=\"dashed 1px var(--boemly-colors-gray-200)\"\n transform=\"translateX(-50%)\"\n position=\"relative\"\n height=\"20\"\n />\n </>\n )}\n </Box>\n <Box\n overflow=\"visible\"\n maxWidth={['full', null, null, '50%']}\n borderLeft={[\n null,\n null,\n null,\n 'dashed 1px var(--boemly-colors-gray-200)',\n ]}\n position=\"relative\"\n width=\"full\"\n >\n <Flex\n flexDir=\"column\"\n overflow=\"visible\"\n gap={[null, null, null, '8']}\n >\n {slice.timelineItems.slice(0, visibleItems).map((item, index) => (\n <SimpleGrid\n gap={['none', null, null, '4']}\n key={item.id}\n columns={[1, null, null, 2]}\n alignContent=\"center\"\n gridTemplateColumns={[null, null, null, '1fr 16fr']}\n position=\"relative\"\n >\n <Flex\n alignItems=\"center\"\n justifyContent={['center', null, null, 'flex-start']}\n >\n <Box\n position=\"absolute\"\n transform={[null, null, null, 'translateX(-50%)']}\n backgroundColor=\"white\"\n >\n {item.icon ? (\n <Box padding=\"2\">\n <Image\n src={strapiMediaUrl(item.icon.img, 'xSmall')}\n alt={item.icon.alt}\n width=\"21\"\n height=\"21\"\n />\n </Box>\n ) : (\n <Box padding=\"2\">\n <Box\n borderRadius=\"full\"\n backgroundColor=\"primary.800\"\n width=\"2\"\n height=\"2\"\n />\n </Box>\n )}\n {mobile && (\n <Box\n overflow=\"visible\"\n borderRight=\"dashed 1px var(--boemly-colors-gray-200)\"\n transform=\"translateX(-50%)\"\n position=\"relative\"\n height=\"10\"\n />\n )}\n </Box>\n </Flex>\n <Container\n p={[null, null, null, '3']}\n zIndex=\"base\"\n position=\"relative\"\n elevation=\"none\"\n >\n {item.backgroundShapes ? (\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"0\"\n width=\"full\"\n height=\"full\"\n zIndex=\"-1\"\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/timeline-shapes.svg`}\n alt={formatMessage({\n id: 'sections.timeline.backgroundShapes',\n })}\n fill\n style={{\n objectFit: 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n\n <Flex flexDir=\"column\">\n <Flex\n alignItems=\"flex-start\"\n justifyContent=\"space-between\"\n >\n <Box>\n {item.tagline && (\n <>\n <Text color=\"primary.800\" size=\"smMonoUppercase\">\n {item.tagline}\n </Text>\n <Spacer h=\"2\" />\n </>\n )}\n </Box>\n <Flex>\n {item.badge && (\n <Tag\n colorScheme={item.badge.variant}\n borderRadius=\"md\"\n >\n {item.badge.text}\n </Tag>\n )}\n {item.logo && (\n <Box position=\"relative\" height=\"8\" width=\"16\">\n <Image\n src={strapiMediaUrl(item.logo.img, 'small')}\n alt={item.logo.alt}\n fill\n style={{\n objectFit: item.logo.objectFit,\n }}\n />\n </Box>\n )}\n </Flex>\n </Flex>\n <Heading\n size=\"lg\"\n mt={['6', null, null, '3']}\n maxWidth=\"xs\"\n >\n {item.title}\n </Heading>\n {item.text && (\n <Box mt=\"3\">\n <RichText content={item.text} />\n </Box>\n )}\n {item.button && (\n <Box textAlign=\"left\">\n <Spacer h=\"4\" />\n <StrapiLinkButton\n link={item.button}\n size=\"sm\"\n variant=\"outline\"\n />\n </Box>\n )}\n {item.image ? (\n <>\n <Box\n position=\"relative\"\n mt=\"4\"\n height={['2xs', null, null, null, '48']}\n minWidth={[null, null, null, null, '50%']}\n >\n <Image\n src={strapiMediaUrl(item.image.img, 'xLarge')}\n alt={item.image.alt}\n fill\n style={{\n cursor: mobile ? 'unset' : 'pointer',\n objectFit: item.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n onClick={() => !mobile && setIsOpen(true)}\n />\n <FullScreenImage\n images={[item.image]}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n />\n </Box>\n </>\n ) : (\n <></>\n )}\n </Flex>\n </Container>\n {mobile && index + 1 < slice.timelineItems.length && (\n <Box\n overflow=\"visible\"\n borderRight=\"dashed 1px var(--boemly-colors-gray-200)\"\n transform=\"translateX(-50%)\"\n position=\"relative\"\n height=\"20\"\n />\n )}\n </SimpleGrid>\n ))}\n </Flex>\n {visibleItems < slice.timelineItems.length && (\n <>\n <Box\n width=\"full\"\n height={['36', null, null, '64']}\n position=\"absolute\"\n bottom=\"0\"\n zIndex=\"1\"\n background=\"linear-gradient(180deg, rgba(255, 255, 255, 0.00) 0%, rgba(255, 255, 255, 0.98) 76.54%, #FFF 100%)\"\n />\n <Box\n bottom=\"0\"\n textAlign=\"center\"\n zIndex=\"overlay\"\n position=\"relative\"\n >\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={showMoreItems}\n m={[null, null, null, '8']}\n >\n <FormattedMessage id=\"sections.timeline.showMoreButton\" />\n </Button>\n </Box>\n </>\n )}\n </Box>\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport { BoemlyAlert, Box } from 'boemly';\n\nexport const PreviewAlert = (): JSX.Element => {\n return (\n <Box position=\"fixed\" top=\"4\" left=\"4\">\n <BoemlyAlert text=\"Preview\" status=\"error\" />\n </Box>\n );\n};\n","import React from 'react';\nimport Head from 'next/head';\nimport {\n DEFAULT_SHARE_ALT,\n DEFAULT_SHARE_IMAGE,\n} from '../../constants/metadata';\n\ninterface SEOTagsProps {\n title: string;\n description: string;\n shareImage?: {\n url: string;\n alt: string;\n };\n metaTitleSuffix?: string;\n favicon?: string;\n domain?: string;\n}\n\nexport const SEOTags: React.FC<SEOTagsProps> = ({\n title,\n description,\n shareImage,\n metaTitleSuffix = 'Tree.ly',\n favicon = 'https://cdn.tree.ly/favicon.ico',\n domain = 'tree.ly',\n}: SEOTagsProps) => {\n const shareImageUrl = shareImage?.url ?? DEFAULT_SHARE_IMAGE;\n const shareImageAlt = shareImage?.alt ?? DEFAULT_SHARE_ALT;\n\n return (\n <Head>\n <title>{`${title} - ${metaTitleSuffix}`}</title>\n <meta name=\"description\" content={description} />\n <link rel=\"icon\" href={favicon} />\n\n <meta property=\"og:url\" content={`https://${domain}`} />\n <meta property=\"og:type\" content=\"website\" />\n <meta property=\"og:title\" content={title} />\n <meta property=\"og:description\" content={description} />\n <meta property=\"og:image\" content={shareImageUrl} />\n <meta property=\"og:image:alt\" content={shareImageAlt} />\n\n <meta name=\"twitter:card\" content=\"summary_large_image\" />\n <meta property=\"twitter:domain\" content={domain} />\n <meta property=\"twitter:url\" content={`https://${domain}`} />\n <meta name=\"twitter:title\" content={title} />\n <meta name=\"twitter:description\" content={description} />\n <meta name=\"twitter:image\" content={shareImageUrl} />\n <meta name=\"twitter:image:alt\" content={shareImageAlt} />\n </Head>\n );\n};\n","import React from 'react';\nimport FullWidthImage from '../../slices/FullWidthImage';\nimport Hero from '../../slices/Hero';\nimport IconGrid from '../../slices/IconGrid';\nimport ImageGrid from '../../slices/ImageGrid';\nimport ImageTextSequence from '../../slices/ImageTextSequence';\nimport LeftTextRightCard from '../../slices/LeftTextRightCard';\nimport LogoGridWithText from '../../slices/LogoGridWithText';\nimport MapHero from '../../slices/MapHero';\nimport QAndA from '../../slices/QAndA';\nimport QuoteCards from '../../slices/QuoteCards';\nimport RichTextSection from '../../slices/RichTextSection';\nimport Steps from '../../slices/Steps';\nimport TextCardGrid from '../../slices/TextCardGrid';\nimport TextCarousel from '../../slices/TextCarousel';\nimport TextWithTextCards from '../../slices/TextWithTextCards';\nimport TextWithCard from '../../slices/TextWithCard';\nimport LinkCardsGrid from '../../slices/LinkCardsGrid';\nimport SmallHero from '../../slices/SmallHero';\nimport Blog from '../../slices/Blog';\nimport StrapiBlogPost from '../../models/strapi/StrapiBlogPost';\nimport ProjectsGrid from '../../slices/ProjectsGrid';\nimport ProjectsMap from '../../slices/ProjectsMap';\nimport Video from '../../slices/Video';\nimport FullWidthHighlightQuote from '../../slices/FullWidthHighlightQuote';\nimport FullWidthImageSlider from '../../slices/FullWidthImageSlider';\nimport SideBySideImages from '../../slices/SideBySideImages';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport Cta from '../../slices/Cta';\nimport CtaOnly from '../../slices/CtaOnly';\nimport Glossary from '../../slices/Glossary';\nimport ShopCheckout from '../../slices/ShopCheckout';\nimport Facts from '../../slices/Facts';\nimport BlogCards from '../../slices/BlogCards';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport ProjectFacts from '../../slices/ProjectFacts';\nimport CustomerStories from '../../slices/CustomerStories';\nimport StrapiCustomerStory from '../../models/strapi/StrapiCustomerStory';\nimport Comparison from '../../slices/Comparison';\nimport Locale from '../../models/Locale';\nimport { ContextProvider } from '../ContextProvider';\nimport Timeline from '../../slices/Timeline';\n\nexport interface CustomSliceProps {\n slice: any;\n id: string;\n}\n\nexport interface SliceRendererProps {\n slices: any;\n blogPosts: IStrapiData<StrapiBlogPost>[];\n projects: PortfolioProject[];\n customerStories: IStrapiData<StrapiCustomerStory>[];\n locale?: Locale;\n CustomSlice?: ({ slice, id }: CustomSliceProps) => JSX.Element;\n}\n\nexport const SliceRenderer = ({\n slices,\n blogPosts,\n projects,\n customerStories,\n locale = 'en',\n CustomSlice,\n}: SliceRendererProps): JSX.Element => (\n <ContextProvider locale={locale}>\n {slices.map((slice: any) => {\n switch (slice.__component) {\n case 'sections.hero':\n return (\n <Hero key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.map-hero':\n return (\n <MapHero key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.rich-text':\n return (\n <RichTextSection\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.left-text-right-card':\n return (\n <LeftTextRightCard\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.text-with-card':\n return (\n <TextWithCard\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n projects={projects}\n />\n );\n case 'sections.logo-grid-with-text':\n return (\n <LogoGridWithText\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.quote-cards':\n return (\n <QuoteCards\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.q-and-a':\n return (\n <QAndA key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.image-grid':\n return (\n <ImageGrid key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.full-width-image':\n return (\n <FullWidthImage\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.text-with-text-cards':\n return (\n <TextWithTextCards\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.text-card-grid':\n return (\n <TextCardGrid\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.icon-grid':\n return (\n <IconGrid key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.image-text-sequence':\n return (\n <ImageTextSequence\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.steps':\n return (\n <Steps key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.text-carousel':\n return (\n <TextCarousel\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.link-cards-grid':\n return (\n <LinkCardsGrid\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.small-hero':\n return (\n <SmallHero\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n theme=\"dark\"\n />\n );\n case 'sections.small-hero-light':\n return (\n <SmallHero\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n theme=\"light\"\n />\n );\n case 'sections.project-facts':\n return (\n <ProjectFacts\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n project={projects.find((p) => p.id === slice.projectId)}\n />\n );\n case 'sections.projects-grid':\n return (\n <ProjectsGrid\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n projects={projects}\n />\n );\n case 'sections.projects-map':\n return (\n <ProjectsMap\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n projects={projects}\n />\n );\n case 'sections.video':\n return (\n <Video key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.full-width-highlight-quote':\n return (\n <FullWidthHighlightQuote\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.full-width-image-slider':\n return (\n <FullWidthImageSlider\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.side-by-side-images':\n return (\n <SideBySideImages\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.cta-only':\n return (\n <CtaOnly key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.cta':\n return <Cta key={`${slice.__component}-${slice.id}`} slice={slice} />;\n case 'sections.shop-checkout':\n return (\n <ShopCheckout\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.facts':\n return (\n <Facts key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.blog-cards':\n return (\n <BlogCards\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n blogPosts={blogPosts}\n />\n );\n case 'sections.blog':\n return (\n <Blog\n key={`${slice.__component}-${slice.id}`}\n slice={{\n ...slice,\n blog_posts: slice.blog_posts.data,\n }}\n blogPosts={blogPosts}\n />\n );\n case 'sections.glossary':\n return (\n <Glossary\n key={`${slice.__component}-${slice.id}`}\n slice={{\n ...slice,\n glossary_items: slice.glossary_items.data,\n }}\n />\n );\n case 'sections.customer-stories':\n return (\n <CustomerStories\n key={`${slice.__component}-${slice.id}`}\n slice={{\n ...slice,\n customer_stories: slice.customer_stories.data,\n }}\n customerStories={customerStories}\n />\n );\n case 'sections.comparison':\n return (\n <Comparison\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.timeline':\n return (\n <Timeline key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n default:\n if (CustomSlice) {\n return (\n <CustomSlice\n key={`${slice.__component}-${slice.id}`}\n id={slice.__component}\n slice={slice}\n />\n );\n }\n\n return (\n <div key={`${slice.__component}-${slice.id}`}>\n Slice component not supported\n </div>\n );\n }\n })}\n </ContextProvider>\n);\n","import { GetStaticPropsContext } from 'next';\nimport strapiMediaUrl from './strapiMediaUrl';\nimport {\n IStrapiData,\n StrapiBlogPost,\n StrapiBlogPostProps,\n StrapiGlobal,\n} from '..';\nimport PortfolioProject from '../models/PortfolioProject';\nimport { DEFAULT_SHARE_ALT, DEFAULT_SHARE_IMAGE } from '../constants/metadata';\nimport {\n SLICES_WITH_BLOG_POSTS,\n SLICES_WITH_PROJECTS,\n} from '../constants/slicesConfig';\n\nconst mergeGlobalAndStrapiBlogPostData = (\n context: GetStaticPropsContext,\n global: IStrapiData<StrapiGlobal>,\n post: IStrapiData<StrapiBlogPost>,\n blog: IStrapiData<StrapiBlogPost>[],\n projects: PortfolioProject[]\n): StrapiBlogPostProps => {\n const metaShareImageUrl = post.attributes.metadata?.shareImage\n ? strapiMediaUrl(\n post.attributes.metadata?.shareImage.media ??\n global.attributes.metadata.shareImage?.media,\n 'large'\n )\n : DEFAULT_SHARE_IMAGE;\n\n const returnBlog = post.attributes.slices.some((slice) =>\n SLICES_WITH_BLOG_POSTS.includes(slice.__component)\n );\n const returnProjects = post.attributes.slices.some((slice) =>\n SLICES_WITH_PROJECTS.includes(slice.__component)\n );\n\n return {\n ...post,\n // Portfolio Projects\n projects: returnProjects ? projects : [],\n // StrapiBlogPost\n attributes: {\n ...post?.attributes,\n metadata: post?.attributes?.metadata || global.attributes.metadata,\n },\n // PageProps\n headerType: {\n extendable: true,\n theme: 'light',\n },\n headerNavMenus: global.attributes.navbar.navMenus || [],\n headerButtons: global.attributes.navbar.buttons || [],\n footerLinks: global.attributes.footer.links || [],\n metadata: {\n title:\n post.attributes.metadata?.title ?? global.attributes.metadata.title,\n description:\n post.attributes.metadata?.description ??\n global.attributes.metadata.description,\n shareImage: {\n url: metaShareImageUrl,\n alt:\n post.attributes.metadata?.shareImage?.alt ??\n global.attributes.metadata.shareImage?.alt ??\n DEFAULT_SHARE_ALT,\n },\n metaTitleSuffix: global.attributes.metaTitleSuffix,\n favicon: strapiMediaUrl(global.attributes.favicon, 'thumbnail'),\n },\n slices: post?.attributes.slices,\n blogPosts: returnBlog ? blog : [],\n banner: global.attributes.banner,\n topBanner: post?.attributes.topBanner || global.attributes.topBanner,\n customerStories: [],\n preview: !!context.preview,\n };\n};\n\nexport default mergeGlobalAndStrapiBlogPostData;\n","import { GetStaticPropsContext } from 'next';\nimport strapiMediaUrl from './strapiMediaUrl';\nimport {\n IStrapiData,\n StrapiCustomerStory,\n StrapiCustomerStoryProps,\n StrapiGlobal,\n} from '..';\nimport { DEFAULT_SHARE_ALT, DEFAULT_SHARE_IMAGE } from '../constants/metadata';\nimport { SLICES_WITH_CUSTOMER_STORIES } from '../constants/slicesConfig';\n\nconst mergeGlobalAndStrapiCustomerStoryData = (\n context: GetStaticPropsContext,\n global: IStrapiData<StrapiGlobal>,\n customerStory: IStrapiData<StrapiCustomerStory>,\n customerStories: IStrapiData<StrapiCustomerStory>[]\n): StrapiCustomerStoryProps => {\n const metaShareImageUrl = customerStory.attributes.metadata?.shareImage\n ? strapiMediaUrl(\n customerStory.attributes.metadata?.shareImage.media ??\n global.attributes.metadata.shareImage?.media,\n 'large'\n )\n : DEFAULT_SHARE_IMAGE;\n\n const returnCustomerStories = customerStory.attributes.slices.some((slice) =>\n SLICES_WITH_CUSTOMER_STORIES.includes(slice.__component)\n );\n\n return {\n ...customerStory,\n // Portfolio Projects\n projects: [],\n attributes: {\n ...customerStory?.attributes,\n metadata:\n customerStory?.attributes?.metadata || global.attributes.metadata,\n },\n // PageProps\n headerType: {\n extendable: true,\n theme: 'light',\n },\n headerNavMenus: global.attributes.navbar.navMenus || [],\n headerButtons: global.attributes.navbar.buttons || [],\n footerLinks: global.attributes.footer.links || [],\n metadata: {\n title:\n customerStory.attributes.metadata?.title ??\n global.attributes.metadata.title,\n description:\n customerStory.attributes.metadata?.description ??\n global.attributes.metadata.description,\n shareImage: {\n url: metaShareImageUrl,\n alt:\n customerStory.attributes.metadata?.shareImage?.alt ??\n global.attributes.metadata.shareImage?.alt ??\n DEFAULT_SHARE_ALT,\n },\n metaTitleSuffix: global.attributes.metaTitleSuffix,\n favicon: strapiMediaUrl(global.attributes.favicon, 'thumbnail'),\n },\n slices: customerStory?.attributes.slices,\n customerStories: returnCustomerStories ? customerStories : [],\n banner: global.attributes.banner,\n topBanner:\n customerStory?.attributes.topBanner || global.attributes.topBanner,\n blogPosts: [],\n preview: !!context.preview,\n };\n};\n\nexport default mergeGlobalAndStrapiCustomerStoryData;\n","import { GetStaticPropsContext } from 'next';\nimport strapiMediaUrl from './strapiMediaUrl';\nimport {\n IStrapiData,\n StrapiBlogPost,\n StrapiCustomerStory,\n StrapiGlobal,\n StrapiPage,\n StrapiPageProps,\n} from '..';\nimport PortfolioProject from '../models/PortfolioProject';\nimport {\n DARK_THEME_HEADER_SECTIONS,\n EXTENDABLE_HEADER_SECTIONS,\n SLICES_WITH_BLOG_POSTS,\n SLICES_WITH_CUSTOMER_STORIES,\n SLICES_WITH_PROJECTS,\n} from '../constants/slicesConfig';\nimport { DEFAULT_SHARE_ALT, DEFAULT_SHARE_IMAGE } from '../constants/metadata';\n\nconst mergeGlobalAndStrapiPageData = (\n context: GetStaticPropsContext,\n global: IStrapiData<StrapiGlobal>,\n page: IStrapiData<StrapiPage>,\n blogPosts: IStrapiData<StrapiBlogPost>[],\n customerStories: IStrapiData<StrapiCustomerStory>[],\n projects: PortfolioProject[]\n): StrapiPageProps => {\n const metaShareImageUrl = page.attributes.metadata?.shareImage\n ? strapiMediaUrl(\n page.attributes.metadata?.shareImage.media ??\n global.attributes.metadata.shareImage?.media,\n 'large'\n )\n : DEFAULT_SHARE_IMAGE;\n\n const returnBlogPosts = page.attributes.slices.some((slice) =>\n SLICES_WITH_BLOG_POSTS.includes(slice.__component)\n );\n const returnCustomerStories = page.attributes.slices.some((slice) =>\n SLICES_WITH_CUSTOMER_STORIES.includes(slice.__component)\n );\n const returnProjects = page.attributes.slices.some((slice) =>\n SLICES_WITH_PROJECTS.includes(slice.__component)\n );\n\n return {\n ...page,\n // Portfolio Projects\n projects: returnProjects ? projects : [],\n // StrapiPage\n attributes: {\n ...page?.attributes,\n metadata: page?.attributes?.metadata ?? global.attributes.metadata,\n },\n // PageProps\n headerType: {\n extendable: EXTENDABLE_HEADER_SECTIONS.includes(\n page.attributes.slices[0]?.__component\n ),\n theme: DARK_THEME_HEADER_SECTIONS.includes(\n page.attributes.slices[0]?.__component\n )\n ? 'dark'\n : 'light',\n },\n headerNavMenus: global.attributes.navbar.navMenus || [],\n headerButtons: global.attributes.navbar.buttons || [],\n footerLinks: global.attributes.footer.links || [],\n metadata: {\n title:\n page.attributes.metadata?.title ?? global.attributes.metadata.title,\n description:\n page.attributes.metadata?.description ??\n global.attributes.metadata.description,\n shareImage: {\n url: metaShareImageUrl,\n alt:\n page.attributes.metadata?.shareImage?.alt ??\n global.attributes.metadata.shareImage?.alt ??\n DEFAULT_SHARE_ALT,\n },\n metaTitleSuffix: global.attributes.metaTitleSuffix,\n favicon: strapiMediaUrl(global.attributes.favicon, 'thumbnail'),\n },\n slices: page?.attributes.slices,\n blogPosts: returnBlogPosts ? blogPosts : [],\n banner: global.attributes.banner,\n topBanner: page?.attributes.topBanner || global.attributes.topBanner,\n customerStories: returnCustomerStories ? customerStories : [],\n preview: !!context.preview,\n };\n};\n\nexport default mergeGlobalAndStrapiPageData;\n","import { GetStaticPropsContext } from 'next';\nimport strapiMediaUrl from './strapiMediaUrl';\nimport {\n IStrapiData,\n StrapiBlogPost,\n StrapiGlobal,\n StrapiProject,\n StrapiProjectProps,\n} from '..';\nimport PortfolioProject from '../models/PortfolioProject';\nimport {\n DARK_THEME_HEADER_SECTIONS,\n EXTENDABLE_HEADER_SECTIONS,\n SLICES_WITH_BLOG_POSTS,\n SLICES_WITH_PROJECTS,\n} from '../constants/slicesConfig';\nimport { DEFAULT_SHARE_ALT, DEFAULT_SHARE_IMAGE } from '../constants/metadata';\n\nconst mergeGlobalAndStrapiProject = (\n context: GetStaticPropsContext,\n global: IStrapiData<StrapiGlobal>,\n project: IStrapiData<StrapiProject>,\n blogPosts: IStrapiData<StrapiBlogPost>[],\n projects: PortfolioProject[]\n): StrapiProjectProps => {\n const metaShareImageUrl = project.attributes.metadata?.shareImage\n ? strapiMediaUrl(\n project.attributes.metadata?.shareImage.media ??\n global.attributes.metadata.shareImage?.media,\n 'large'\n )\n : DEFAULT_SHARE_IMAGE;\n\n const returnBlogPosts = project.attributes.slices.some((slice) =>\n SLICES_WITH_BLOG_POSTS.includes(slice.__component)\n );\n const returnProjects = project.attributes.slices.some((slice) =>\n SLICES_WITH_PROJECTS.includes(slice.__component)\n );\n\n return {\n ...project,\n // Portfolio Projects\n projects: returnProjects ? projects : [],\n // StrapiProject\n attributes: {\n ...project.attributes,\n metadata: project?.attributes?.metadata || global.attributes.metadata,\n },\n headerType: {\n extendable: EXTENDABLE_HEADER_SECTIONS.includes(\n project.attributes.slices[0]?.__component\n ),\n theme: DARK_THEME_HEADER_SECTIONS.includes(\n project.attributes.slices[0]?.__component\n )\n ? 'dark'\n : 'light',\n },\n // PageProps\n headerNavMenus: global.attributes.navbar.navMenus || [],\n headerButtons: global.attributes.navbar.buttons || [],\n footerLinks: global.attributes.footer.links || [],\n metadata: {\n title:\n project.attributes.metadata?.title ?? global.attributes.metadata.title,\n description:\n project.attributes.metadata?.description ??\n global.attributes.metadata.description,\n shareImage: {\n url: metaShareImageUrl,\n alt:\n project.attributes.metadata?.shareImage?.alt ??\n global.attributes.metadata.shareImage?.alt ??\n DEFAULT_SHARE_ALT,\n },\n metaTitleSuffix: global.attributes.metaTitleSuffix,\n favicon: strapiMediaUrl(global.attributes.favicon, 'thumbnail'),\n },\n slices: project.attributes.slices,\n blogPosts: returnBlogPosts ? blogPosts : [],\n banner: global.attributes.banner,\n topBanner: project?.attributes.topBanner || global.attributes.topBanner,\n customerStories: [],\n preview: !!context.preview,\n };\n};\n\nexport default mergeGlobalAndStrapiProject;\n"],"names":["STRAPI_URI","process","env","NEXT_PUBLIC_STRAPI_URI","STRAPI_DEFAULT_PAGE_SIZE","ShapePosition","FPM_API_URI","NEXT_PUBLIC_FPM_API_URI","CDN_URI","fpmClient","setupCache","axios","default","create","baseURL","paramsSerializer","p","qs","stringify","encodeValuesOnly","timeout","strapiClient","getPortfolioProjects","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","locale","preview","params","_yield$Promise$all","strapiProjects","wrap","_context","prev","next","populate","publicationState","Promise","all","get","sent","data","abrupt","fpmProjects","map","fpmProject","_strapiProject$attrib","strapiProject","find","sp","attributes","fpmProjectId","id","toReturn","slug","creditsAvailable","thumbnail","footerSubTitle","portfolio","host","portfolioHost","stop","_x","_x2","apply","this","arguments","getStaticPathsFromStrapi","path","_temp","_ref2$filters","filters","getStaticPropsFromStrapi","_ref2","_ref$locale","_ref$preview","_ref$filters","enrichedFilters","strapiMediaUrl","media","preferredSize","_media$data$attribute","url","ext","formats","indexOf","includes","STORYBOOK","DEFAULT_SHARE_IMAGE","DEFAULT_SHARE_ALT","EXTENDABLE_HEADER_SECTIONS","DARK_THEME_HEADER_SECTIONS","SLICES_WITH_BLOG_POSTS","SLICES_WITH_CUSTOMER_STORIES","SLICES_WITH_PROJECTS","strapiLinkUrl","strapiLink","_strapiLink","_strapiLink2","undefined","page","ZoomableImage","image","_ref$zoom","zoom","_useState","useState","isZoomed","setIsZoomed","_useState2","backgroundPos","setBackgroundPos","imageSrc","img","zoomInPosition","e","zoomer","currentTarget","getBoundingClientRect","clientX","x","width","y","clientY","height","React","createElement","Fragment","Head","rel","as","href","Box","position","display","overflow","flexShrink","scrollSnapAlign","scrollSnapStop","draggable","cursor","backgroundImage","backgroundSize","backgroundPosition","onClick","toggleZoomImage","handleClick","onMouseMove","handleMove","Image","src","alt","fill","style","visibility","objectFit","FullScreenImage","images","isOpen","onClose","_ref$currentIndex","currentIndex","setCurrentIndex","containerRef","useRef","useLockBodyScroll","canMoveRight","useMemo","length","canMoveLeft","onRight","useCallback","c","onLeft","useKey","useEffect","setTimeout","_containerRef$current","current","scrollTo","left","clientWidth","behavior","BoemlyModal","title","trigger","size","content","Flex","insetY","insetX","alignItems","justifyContent","ref","flexGrow","flexBasis","gap","marginX","scrollSnapType","key","inset","pointerEvents","IconButton","icon","CaretLeft","variant","mr","CaretRight","ml","BREAKPOINT_MD","BREAKPOINT_LG","BREAKPOINT_MD_QUERY","BREAKPOINT_LG_QUERY","FullWidthImage","slice","setIsOpen","isMobile","useMediaQuery","DefaultSectionContainer","Wrapper","DefaultSectionHeader","isHero","tagline","text","taglineProps","textAlign","mt","titleProps","maxW","textProps","borderRadius","openHubSpotChat","w","window","HubSpotConversations","widget","open","hsConversationsOnReady","StrapiLinkButton","link","buttonProps","_objectWithoutPropertiesLoose","_excluded","adBlockDetected","useDetectAdBlock","Button","_extends","intercomLauncher","Link","Hero","minHeight","backgroundColor","overflowX","Gradient","shape","bottom","borderTopRightRadius","right","top","transform","subTitle","color","mx","button","additionalButtons","IconGrid","flexDirection","Spacer","h","SimpleGrid","columns","iconsWithTextAndButton","rowGap","iconWithTextAndButton","margin","Heading","mb","Text","LinkedInIcon","viewBox","xmlns","clipPath","d","StrapiLinkButtonWithIcon","props","rightIcon","destination","Globe","getLinkIcon","ImageGrid","_useToken","useToken","minChildWidth","links","flexDir","flexWrap","ImageTextSequence","oneColumnGrid","primary50","gray700","background","imageTextRows","index","imageBox","LeftTextRightCard","push","useRouter","Grid","templateColumns","templateRows","GridItem","colSpan","rowSpan","pr","checkMarkLabels","BoemlyList","listItems","colorScheme","ArrowRight","card","PortfolioCard","_slice$card","facts","portfolioNumber","LogoGridWithText","RichText","logos","logo","MapHeroContainer","styled","_templateObject","_taggedTemplateLiteralLoose","MapHeroTextContainer","_templateObject2","ShapeContainer","_templateObject3","MapContainer","_templateObject4","MapGradient","_templateObject5","MapHero","belowBreakpoint","maxWidth","buttons","mobileMap","convertToKebabCase","str","matches","match","toLowerCase","join","VARIANTS","gray","tagLineColor","textColor","accordionVariant","otherQuestionsBackground","green","white","QAndA","_slice$variant","pb","hero","paddingY","maxHeight","paddingTop","paddingRight","overflowY","BoemlyAccordion","rows","questionsAndAnswers","defaultIndex","padding","otherQuestions","HeroCard","_slice$hero","QuoteCards","paddingBottom","shapes","Shape","radius","cards","QuoteCard","avatar","name","description","marginTop","RichTextSection","Steps","_slice$card$shapes","gray900","Array","steps","stepRefs","setStepRefs","stepProgress","setStepProgress","offsetY","useWindowScroll","windowHeight","useWindowSize","createRef","containerOffsetTop","offsetTop","_ref$current","currentItemOffsetTop","Center","step","options","forceBlock","marginBottom","borderLeft","opacity","borderRight","transition","ShapesCard","CreditsAvailableState","shapePositions","topLeft","bottomRight","topRight","bottomLeft","oppositesOfCorners","_oppositesOfCorners","unset","variants","positionIcon","TextCardGrid","justifyItems","zIndex","boxShadow","borderBottomRightRadius","borderBottomLeftRadius","borderTopLeftRadius","css","listProps","textSize","buttonIndex","weight","CarouselContainer","CarouselInnerContainer","motion","div","numberOfItems","CardContainer","rootMessagesDe","rootMessagesEn","GLOBAL_STYLE","cache","createIntlCache","intlFactory","createIntl","messages","de","en","IntlContext","createContext","ContextProvider","children","Global","styles","Provider","value","TextCarousel","_useMeasure","useMeasure","itemRef","itemWidth","formatMessage","useContext","windowWidth","sliderIndex","setSliderIndex","slides","sliderItemsWidth","offsetLeft","allowScroll","ITEM_GAP","animate","duration","ease","TextCardWithIcon","displayAs","py","px","AnimatePresence","initial","exit","ArrowLeft","TextWithTextCards","contact","ContactArea","_slice$contact","_slice$contact2","MapBoxStyle","CreditsAvailableState$1","FORMAT_AS_HECTARE_CONFIG","unit","unitDisplay","maximumFractionDigits","FORMAT_AS_PERCENT_CONFIG","PortfolioProjectCard","_creditsAvailableMess","_project$creditsAvail","_project$thumbnail","_project$thumbnail2","_project$thumbnail3","project","_useContext","formatNumber","creditsAvailableMessages","YES","SOME","NO","NOT_YET","ProjectCard","area","location","footerTitle","TextWithCard","portfolioProject","projects","_slice$project","cardPosition","columnGap","LinkCardsGrid","borderStyle","borderWidth","borderColor","transitionDuration","MEDIUM_TRANSITION_DURATION","_hover","minWidth","colors","dark","light","SmallHero","theme","gradient","tags","direction","justify","Tag","BlogItemContainer","ImageContainer","Blog","blogPosts","formatDate","sortedBlogPosts","blog_posts","sort","a","b","Date","createdAt","getTime","spacingX","spacingY","blogPost","bp","category","teaser","DatePersonPair","date","person","author","ConditionalWrapper","condition","wrapper","ProjectsGrid","filteredProjects","filter","some","passHref","legacyBehavior","FONT_CUSTOMIZATIONS","body","heading","mono","MinimalProviders","IntlProvider","BoemlyThemeProvider","fonts","CreditsAvailableBadge","_variants","status","Badge","NextLink","MapMarker","projectDeveloper","_ref$portfolioHost","_ref$isPublic","isPublic","_useDisclosure","useDisclosure","onOpen","blue600","onMouseEnter","onMouseLeave","MapPin","Container","shadow","whiteSpace","mapboxStyle","mapboxgl","accessToken","CtaCardType","ProjectsMap","boundingBoxes","minLeft","minBottom","maxRight","maxTop","geom","center","defaultCenterCoordinates","longitude","latitude","bounds","concat","coordinates","forEach","mapContainer","Map","container","CaliTerrain","defaultZoomLevel","maxZoom","_project$projectDevel","document","createRoot","render","marker","Marker","offset","setLngLat","addTo","remove","Video","youTubeID","frameBorder","allow","allowFullScreen","FullWidthHighlightQuote","quote","AvatarWithName","avatarWithName","orientation","SliderContainer","SliderInnerContainer","ItemContainer","aspectRatio","ALLOWED_RATIOS","FullWidthImageSlider","imageRef","imageWidth","imageCount","ratio","minDiff","Math","abs","posMinDiff","allowedRatio","caption","SideBySideImages","STATES","paddingTagline","paddingTitle","buttonJustifyContent","textMarginLeft","textMarginRight","centerWithoutImage","centerWithImage","taglineColor","titleColor","subTitleColor","Cta","ctaCards","ctaCard","ctaCardType","CenterWithImage","CenterWithoutImage","Left","Right","getTypeOfCard","elevation","backgroundShape","marginLeft","marginRight","paddingX","fontFamily","fontSize","fontWeight","lineHeight","CtaOnly","Glossary","copyToClipboard","useCopyToClipboard","grouped","copiedItem","setCopiedItem","glossary_items","localeCompare","curr","_curr$attributes$titl","at","toUpperCase","handleAnchorClick","_window","currentUrl","split","Object","entries","_ref3","letter","items","placeSelf","spacing","item","scrollMarginTop","Check","LinkIcon","_onClick","_callee2","_context2","keys","Divider","ShopCheckout","validateForm","values","errors","contributionValue","currency","badge","textTransform","checkoutText","LabelNumberPair","label","number","pricePerKg","Formik","initialValues","initialContributionValue","validate","onSubmit","checkoutURL","URL","currentURL","searchParams","append","batchId","floor","toString","pathname","couponId","touched","handleSubmit","summaryPrice","Form","Field","_ref4","BoemlyFormControl","inputProps","type","field","rightAddonsOrElements","InputRightAddon","isInvalid","errorMessage","minimumFractionDigits","taxInPercent","factKeyColor","factValueColor","Facts","fact","sortByCreatedAt","BlogCards","mobile","blogPostsToDisplay","_slice$blogPostCatego","blogPostCategory","_blogPost$attributes$","_slice$blogPostCatego2","_blogPost$attributes$2","calculateTaxIncludedValue","parseInt","contributionValueCurrency","isNaN","SmallCheckout","subtitle","contributionValueKgs","setValues","_ref5","onChange","target","valueAsNumber","_ref6","my","ProjectInfo","amount","start","end","monthsDifference","yearsDifference","areaInM2","subtitles","LabelTextPair","areaSubtitle","locationSubtitle","year","month","startSubtitle","years","getMonth","getFullYear","timeSpanSubtitle","projectType","verificationStandard","projectTypeSubtitle","projectDeveloperSubtitle","defaultMessage","verificationStandardSubtitle","defaultIssuer","logoUrl","forecastedAmountYearly","riskBuffer","forecastedAmountSubtitle","riskBufferSubtitle","DocumentsDownloadList","documentUrls","documentUrl","FilePdf","DownloadSimple","Contact","border","ProjectFacts","customTitle","customSubtitle","customButton","contactTitle","contactText","contactButton","contactAvatar","CustomerCard","customerStory","borderTopRadius","cardImage","pt","customerCardCustomerIndustry","CustomerQuoteCard","customerName","quoteCardCustomerTitle","quoteCardQuote","LogoCard","marginY","CustomerStories","customerStories","customer_stories","cs","BULLET_POINT_VARIANTS","bulletPointColor","Icon","X","factColor","dividerColor","Comparison","comparisonCards","comparisonCard","factTitle","factSubtitle","lists","list","Timeline","visibleItems","setVisibleItems","timelineItems","alignContent","gridTemplateColumns","backgroundShapes","prevVisibleItems","m","FormattedMessage","BoemlyAlert","_shareImage$url","_shareImage$alt","shareImage","_ref$metaTitleSuffix","metaTitleSuffix","_ref$favicon","favicon","_ref$domain","domain","shareImageUrl","shareImageAlt","property","CustomSlice","slices","__component","projectId","context","global","post","blog","_post$attributes$meta","_post$attributes$meta2","_post$attributes$meta3","_global$attributes$me","_post$attributes","_post$attributes$meta4","_post$attributes$meta5","_post$attributes$meta6","_post$attributes$meta7","_post$attributes$meta8","_post$attributes$meta9","_global$attributes$me2","metaShareImageUrl","metadata","returnBlog","returnProjects","headerType","extendable","headerNavMenus","navbar","navMenus","headerButtons","footerLinks","footer","banner","topBanner","_customerStory$attrib","_customerStory$attrib2","_customerStory$attrib3","_customerStory$attrib4","_customerStory$attrib5","_customerStory$attrib6","_customerStory$attrib7","_customerStory$attrib8","_customerStory$attrib9","_customerStory$attrib10","returnCustomerStories","_page$attributes$meta","_page$attributes$meta2","_page$attributes$meta3","_page$attributes$meta4","_page$attributes","_page$attributes$slic","_page$attributes$slic2","_page$attributes$meta5","_page$attributes$meta6","_page$attributes$meta7","_page$attributes$meta8","_page$attributes$meta9","_page$attributes$meta10","returnBlogPosts","_project$attributes$m","_project$attributes$m2","_project$attributes$m3","_project$attributes","_project$attributes$s","_project$attributes$s2","_project$attributes$m4","_project$attributes$m5","_project$attributes$m6","_project$attributes$m7","_project$attributes$m8","_project$attributes$m9"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"strapi-slices.cjs.production.min.js","sources":["../src/constants/strapi.ts","../src/integrations/strapi/strapiClient.ts","../src/integrations/strapi/getAllSlugsFromStrapi.ts","../src/constants/api.ts","../src/slices/TextCardGrid/TextCardGrid.tsx","../src/integrations/fpmClient.ts","../src/integrations/strapi/getPortfolioProjects.ts","../src/integrations/strapi/getStaticPathsFromStrapi.ts","../src/integrations/strapi/getStaticPropsFromStrapi.ts","../src/integrations/strapi/getStrapiCollectionType.ts","../src/integrations/strapi/getStrapiSingleType.ts","../src/utils/strapiMediaUrl.ts","../src/constants/metadata.ts","../src/constants/slicesConfig.ts","../src/utils/strapiLinkUrl.ts","../src/components/FullScreenImage/ZoomableImage.tsx","../src/components/FullScreenImage/FullScreenImage.tsx","../src/constants/breakpoints.ts","../src/slices/FullWidthImage/FullWidthImage.tsx","../src/utils/openHubSpotChat.ts","../src/components/StrapiLinkButton/StrapiLinkButton.tsx","../src/slices/Hero/Hero.tsx","../src/slices/IconGrid/IconGrid.tsx","../src/icons/LinkedInIcon.tsx","../src/components/StrapiLinkButtonWithIcon/StrapiLinkButtonWithIcon.tsx","../src/slices/ImageGrid/ImageGrid.tsx","../src/slices/ImageTextSequence/ImageTextSequence.tsx","../src/slices/LeftTextRightCard/LeftTextRightCard.tsx","../src/slices/LogoGridWithText/LogoGridWithText.tsx","../src/slices/MapHero/styles.ts","../src/slices/MapHero/MapHero.tsx","../src/utils/convertToKebabCase.ts","../src/slices/QAndA/QAndA.tsx","../src/slices/QuoteCards/QuoteCards.tsx","../src/slices/RichTextSection/RichTextSection.tsx","../src/slices/Steps/Steps.tsx","../src/models/CreditsAvailableState.ts","../src/slices/TextCarousel/styles.ts","../src/constants/globalStyle.ts","../src/rootMessages.de.ts","../src/components/CreditsAvailableBadge/messages.de.ts","../src/components/portfolio/DocumentsDownloadList/messages.de.ts","../src/components/portfolio/PortfolioProjectCard/messages.de.ts","../src/components/portfolio/ProjectInfo/messages.de.ts","../src/components/portfolio/SmallCheckout/messages.de.ts","../src/slices/Comparison/messages.de.ts","../src/slices/Cta/messages.de.ts","../src/components/CustomerCard/messages.de.ts","../src/components/CustomerQuoteCard/messages.de.ts","../src/slices/Glossary/messages.de.ts","../src/slices/ProjectFacts/messages.de.ts","../src/slices/ProjectsMap/messages.de.ts","../src/slices/ShopCheckout/messages.de.ts","../src/slices/TextCarousel/messages.de.ts","../src/slices/Timeline/messages.de.ts","../src/unit.messages.de.ts","../src/utils/getMessages.ts","../src/rootMessages.en.ts","../src/components/CreditsAvailableBadge/messages.en.ts","../src/components/portfolio/DocumentsDownloadList/messages.en.ts","../src/components/portfolio/PortfolioProjectCard/messages.en.ts","../src/components/portfolio/ProjectInfo/messages.en.ts","../src/components/portfolio/SmallCheckout/messages.en.ts","../src/slices/Comparison/messages.en.ts","../src/slices/Cta/messages.en.ts","../src/components/CustomerCard/messages.en.ts","../src/components/CustomerQuoteCard/messages.en.ts","../src/slices/Glossary/messages.en.ts","../src/slices/ProjectFacts/messages.en.ts","../src/slices/ProjectsMap/messages.en.ts","../src/slices/ShopCheckout/messages.en.ts","../src/slices/TextCarousel/messages.en.ts","../src/slices/Timeline/messages.en.ts","../src/unit.messages.en.ts","../src/components/ContextProvider/ContextProvider.tsx","../src/slices/TextCarousel/TextCarousel.tsx","../src/slices/TextWithTextCards/TextWithTextCards.tsx","../src/constants/mapbox.ts","../src/constants/formatter.ts","../src/components/portfolio/PortfolioProjectCard/PortfolioProjectCard.tsx","../src/slices/TextWithCard/TextWithCard.tsx","../src/slices/LinkCardsGrid/LinkCardsGrid.tsx","../src/slices/SmallHero/SmallHero.tsx","../src/slices/Blog/styles.ts","../src/slices/Blog/Blog.tsx","../src/slices/ProjectsGrid/ProjectsGrid.tsx","../src/constants/fontCustomizations.ts","../src/components/MinimalProviders/MinimalProviders.tsx","../src/components/CreditsAvailableBadge/CreditsAvailableBadge.tsx","../src/slices/ProjectsMap/MapMarker.tsx","../src/slices/ProjectsMap/mapboxStyle.ts","../src/slices/ProjectsMap/ProjectsMap.tsx","../src/slices/Cta/Cta.tsx","../src/utils/mergeBoundingBoxes.ts","../src/slices/Video/Video.tsx","../src/slices/FullWidthHighlightQuote/FullWidthHighlightQuote.tsx","../src/slices/FullWidthImageSlider/styles.ts","../src/slices/FullWidthImageSlider/utils.ts","../src/slices/FullWidthImageSlider/FullWidthImageSlider.tsx","../src/slices/SideBySideImages/SideBySideImages.tsx","../src/slices/CtaOnly/CtaOnly.tsx","../src/slices/Glossary/Glossary.tsx","../src/slices/ShopCheckout/ShopCheckout.tsx","../src/constants/domain.ts","../src/slices/Facts/Facts.tsx","../src/slices/BlogCards/BlogCards.tsx","../src/components/portfolio/SmallCheckout/SmallCheckout.tsx","../src/components/portfolio/ProjectInfo/ProjectInfo.tsx","../src/utils/convertCo2AmountKgToTons.ts","../src/utils/getTimeSpanInYears.ts","../src/utils/convertAreaM2ToHa.ts","../src/components/portfolio/DocumentsDownloadList/DocumentsDownloadList.tsx","../src/components/portfolio/Contact/Contact.tsx","../src/slices/ProjectFacts/ProjectFacts.tsx","../src/components/CustomerCard/CustomerCard.tsx","../src/components/CustomerQuoteCard/CustomerQuoteCard.tsx","../src/components/LogoCard/LogoCard.tsx","../src/slices/CustomerStories/CustomerStories.tsx","../src/slices/Comparison/Icon.tsx","../src/slices/Comparison/Comparison.tsx","../src/slices/Timeline/Timeline.tsx","../src/components/PreviewAlert/PreviewAlert.tsx","../src/components/SEOTags/SEOTags.tsx","../src/components/SliceRenderer/SliceRenderer.tsx","../src/utils/mergeGlobalAndStrapiBlogPostData.ts","../src/utils/mergeGlobalAndStrapiCustomerStoryData.ts","../src/utils/mergeGlobalAndStrapiPageData.ts","../src/utils/mergeGlobalAndStrapiProjectData.ts"],"sourcesContent":["export const STRAPI_URI =\n process.env.NEXT_PUBLIC_STRAPI_URI || 'http://127.0.0.1:1337';\n\nexport const STRAPI_DEFAULT_PAGE_SIZE = '100';\n\nexport const STRAPI_FALLBACK_LOCALE = 'en';\n","import axios from 'axios';\nimport qs from 'qs';\nimport { setupCache } from 'axios-cache-interceptor';\nimport { STRAPI_URI } from '../../constants/strapi';\n\nconst strapiClient = setupCache(\n axios.create({\n baseURL: `${STRAPI_URI}/api`,\n paramsSerializer: (p) => qs.stringify(p, { encodeValuesOnly: true }),\n timeout: 60_000,\n })\n);\n\nexport default strapiClient;\n","import strapiClient from './strapiClient';\nimport {\n STRAPI_DEFAULT_PAGE_SIZE,\n STRAPI_FALLBACK_LOCALE,\n} from '../../constants/strapi';\nimport IStrapiResponse from '../../models/strapi/IStrapiResponse';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport LocalizedEntity from '../../models/LocalizedEntity';\n\ninterface Options {\n filters?: Record<string, any>;\n}\n\ntype Slug = { slug: string; locale: string };\n\nconst getAllSlugsFromStrapi = async <T extends LocalizedEntity<'slug'>>(\n path: string,\n locales: string[],\n { filters = {} }: Options = { filters: {} }\n): Promise<Slug[]> => {\n const params: Record<string, any> = {\n locale: 'all',\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n filters,\n };\n\n const { data } = await strapiClient.get<IStrapiResponse<IStrapiData<T>[]>>(\n path,\n { params }\n );\n\n const slugs: Slug[] = data.data.map((page) => ({\n slug: page.attributes.slug,\n locale: page.attributes.locale,\n }));\n\n const fallBackSlugs: Slug[] = locales.flatMap((locale) =>\n slugs\n .filter((slug) => slug.locale === STRAPI_FALLBACK_LOCALE)\n .map((slug) => ({ ...slug, locale }))\n );\n\n const nonFallbackSlugs = slugs.filter(\n (p) => p.locale !== STRAPI_FALLBACK_LOCALE\n );\n\n return [...fallBackSlugs, ...nonFallbackSlugs];\n};\n\nexport default getAllSlugsFromStrapi;\n","export const API_URI =\n process.env.NEXT_PUBLIC_API_URI || 'http://localhost:4001';\nexport const FPM_API_URI =\n process.env.NEXT_PUBLIC_FPM_API_URI || 'https://api.fpm.t-staging.com';\nexport const CDN_URI = 'https://cdn.tree.ly';\n","import React from 'react';\nimport { css } from '@emotion/react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n RichText,\n SimpleGrid,\n Text,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { CaretRight } from '@phosphor-icons/react';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\ninterface TextCardGridSlice extends StrapiDefaultHeader {\n variant: 'shape' | 'image';\n cards: {\n id: number;\n tagline?: string;\n title: string;\n text: string;\n image: StrapiImage;\n buttons?: StrapiLink[];\n }[];\n}\nexport interface TextCardGridProps {\n slice: TextCardGridSlice;\n}\n\nenum ShapePosition {\n topLeft = 'top-left',\n topRight = 'top-right',\n bottomLeft = 'bottom-left',\n bottomRight = 'bottom-right',\n unset = 'unset',\n}\n\nconst shapePositions: ShapePosition[] = [\n ShapePosition.topLeft,\n ShapePosition.bottomRight,\n ShapePosition.topRight,\n ShapePosition.bottomLeft,\n ShapePosition.topRight,\n ShapePosition.bottomLeft,\n ShapePosition.topLeft,\n ShapePosition.bottomRight,\n];\n\nconst oppositesOfCorners = {\n [ShapePosition.bottomLeft]: ShapePosition.topRight,\n [ShapePosition.topRight]: ShapePosition.bottomLeft,\n [ShapePosition.bottomRight]: ShapePosition.topLeft,\n [ShapePosition.topLeft]: ShapePosition.bottomRight,\n [ShapePosition.unset]: ShapePosition.unset,\n};\n\ntype Variant = {\n padding: (string | null)[];\n positionIcon: (index: number) => ShapePosition;\n width: string;\n height: string;\n position: 'absolute' | 'relative';\n mb: string;\n};\n\nconst variants: { shape: Variant; image: Variant } = {\n shape: {\n padding: ['6', null, null, '8'],\n positionIcon: (index: number) => shapePositions[index],\n width: '40',\n height: '40',\n position: 'absolute',\n mb: 'unset',\n },\n image: {\n padding: ['6', null, null, '8'],\n positionIcon: () => ShapePosition.unset,\n width: '24',\n height: '24',\n position: 'relative',\n mb: '10',\n },\n};\n\nexport const TextCardGrid: React.FC<TextCardGridProps> = ({\n slice,\n}: TextCardGridProps) => {\n const [primary800] = useToken('colors', ['primary.800']);\n\n return (\n <DefaultSectionContainer backgroundColor={primary800} title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center', color: 'white' }}\n titleProps={{\n textAlign: 'center',\n maxW: '2xl',\n marginX: 'auto',\n color: 'white',\n }}\n textProps={{\n textAlign: 'center',\n maxW: 'xl',\n marginX: 'auto',\n color: 'whiteAlpha.800',\n }}\n />\n\n <SimpleGrid\n mt={['14', null, null, '24']}\n columns={3}\n justifyItems=\"center\"\n gap=\"20\"\n rowGap=\"16\"\n minChildWidth={['100%', null, '16rem']}\n >\n {slice.cards.map(\n ({ id, tagline, title, text, image, buttons }, index) => (\n <Box\n key={id}\n backgroundColor=\"white\"\n zIndex=\"base\"\n padding={variants[slice.variant].padding}\n boxShadow=\"lg\"\n borderRadius=\"2xl\"\n minHeight=\"2xs\"\n width=\"full\"\n maxWidth={slice.cards.length > 1 ? 'unset' : 'xl'}\n position=\"relative\"\n display=\"flex\"\n flexDir=\"column\"\n alignItems=\"flex-start\"\n justifyContent={\n slice.variant === 'shape' ? 'flex-end' : 'flex-start'\n }\n overflow=\"hidden\"\n >\n <Box\n position={variants[slice.variant].position}\n width={variants[slice.variant].width}\n height={variants[slice.variant].height}\n mb={variants[slice.variant].mb}\n top={\n variants[slice.variant].positionIcon(index).includes('top')\n ? '-4'\n : 'unset'\n }\n left={\n variants[slice.variant].positionIcon(index).includes('left')\n ? '-4'\n : 'unset'\n }\n right={\n variants[slice.variant]\n .positionIcon(index)\n .includes('right')\n ? '-4'\n : 'unset'\n }\n bottom={\n variants[slice.variant]\n .positionIcon(index)\n .includes('bottom')\n ? '-4'\n : 'unset'\n }\n borderBottomRightRadius={\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ].includes('bottomRight')\n ? 'full'\n : 'unset'\n }\n borderBottomLeftRadius={\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ].includes('bottomLeft')\n ? 'full'\n : 'unset'\n }\n borderTopRightRadius={\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ].includes('topRight')\n ? 'full'\n : 'unset'\n }\n borderTopLeftRadius={\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ].includes('topLeft')\n ? 'full'\n : 'unset'\n }\n css={\n variants[slice.variant]\n .positionIcon(index)\n .includes('unset')\n ? css`\n & span,\n div,\n img {\n border-radius: var(--boemly-radii-xl);\n }\n `\n : css`\n & span,\n div,\n img {\n border-${\n oppositesOfCorners[\n variants[slice.variant].positionIcon(index)\n ]\n }-radius: var(--boemly-radii-full);\n }\n `\n }\n >\n <Image\n src={strapiMediaUrl(image.img, 'small')}\n alt={image.alt}\n fill\n style={{ objectFit: image.objectFit || 'cover' }}\n />\n </Box>\n <Box zIndex=\"aboveBase\" width=\"full\">\n {tagline && (\n <Text color=\"black\" size=\"smMonoNormal\" mb=\"2\">\n {tagline}\n </Text>\n )}\n <Heading as=\"h4\" size=\"xl\" mb=\"3\">\n {title}\n </Heading>\n <RichText\n content={text}\n listProps={{\n textColor: 'gray.500',\n textSize: 'smRegularNormal',\n }}\n textProps={{\n color: 'gray.500',\n size: 'smRegularNormal',\n }}\n />\n {buttons && !!buttons.length && (\n <Flex\n mt=\"4\"\n gap=\"3\"\n flexDir={['column', null, null, null, 'row']}\n >\n {buttons.map((button, buttonIndex) => (\n <StrapiLinkButton\n key={button.id}\n link={button}\n size=\"sm\"\n rightIcon={\n buttonIndex === 0 ? (\n <CaretRight size=\"10\" weight=\"bold\" />\n ) : undefined\n }\n variant={buttonIndex === 0 ? 'outline' : 'ghost'}\n />\n ))}\n </Flex>\n )}\n </Box>\n </Box>\n )\n )}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import axios from 'axios';\nimport qs from 'qs';\nimport { setupCache } from 'axios-cache-interceptor';\nimport { FPM_API_URI } from '../constants/api';\n\nconst fpmClient = setupCache(\n axios.create({\n baseURL: `${FPM_API_URI}/v1`,\n paramsSerializer: (p) => qs.stringify(p, { encodeValuesOnly: true }),\n timeout: 5000,\n })\n);\n\nexport default fpmClient;\n","import {\n IStrapiData,\n IStrapiResponse,\n PortfolioProject,\n StrapiProject,\n} from '../..';\nimport { STRAPI_DEFAULT_PAGE_SIZE } from '../../constants/strapi';\nimport FPMProject from '../../models/fpm/FPMProject';\nimport fpmClient from '../fpmClient';\nimport strapiClient from './strapiClient';\n\nconst FALLBACK_LOCALE = 'en';\n\nconst getPortfolioProjects = async (\n locale: string = 'en',\n preview: boolean = false\n): Promise<PortfolioProject[]> => {\n const params: Record<string, any> = {\n populate: 'deep,6',\n locale,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n };\n\n if (preview) {\n params.publicationState = 'preview';\n }\n\n const [\n { data: fpmProjects },\n { data: strapiProjectsLocalized },\n { data: strapiProjectsEnglish },\n ] = await Promise.all([\n fpmClient.get<FPMProject[]>('/public/projects'),\n strapiClient.get<IStrapiResponse<IStrapiData<StrapiProject>[]>>(\n '/projects',\n {\n params,\n }\n ),\n strapiClient.get<IStrapiResponse<IStrapiData<StrapiProject>[]>>(\n '/projects',\n {\n params: { ...params, locale: FALLBACK_LOCALE },\n }\n ),\n ]);\n\n const strapiProjects = new Map<string, IStrapiData<StrapiProject>>();\n\n for (const project of [\n ...strapiProjectsEnglish.data,\n ...strapiProjectsLocalized.data,\n ]) {\n if (project.attributes.fpmProjectId) {\n strapiProjects.set(project.attributes.fpmProjectId, project);\n }\n }\n\n return fpmProjects.map((fpmProject: FPMProject) => {\n const strapiProject = strapiProjects.get(fpmProject.id);\n\n const toReturn: PortfolioProject = fpmProject;\n\n if (strapiProject?.attributes.slug) {\n toReturn.slug = strapiProject.attributes.slug;\n }\n if (strapiProject?.attributes.creditsAvailable) {\n toReturn.creditsAvailable = strapiProject?.attributes.creditsAvailable;\n }\n if (strapiProject?.attributes.thumbnail) {\n toReturn.thumbnail = strapiProject?.attributes.thumbnail;\n }\n if (strapiProject?.attributes.footerSubTitle) {\n toReturn.footerSubTitle = strapiProject?.attributes.footerSubTitle;\n }\n if (strapiProject?.attributes.portfolio.data?.attributes.host) {\n toReturn.portfolioHost =\n strapiProject.attributes.portfolio.data.attributes.host;\n }\n\n return toReturn;\n });\n};\n\nexport default getPortfolioProjects;\n","import { AxiosResponse } from 'axios';\nimport strapiClient from './strapiClient';\nimport { STRAPI_DEFAULT_PAGE_SIZE } from '../../constants/strapi';\n\ninterface Options {\n filters?: Record<string, any>;\n}\n\n/** @deprecated Migrate to getAllSlugsFromStrapi */\nconst getStaticPathsFromStrapi = async (\n path: string,\n { filters = {} }: Options = { filters: {} }\n): Promise<AxiosResponse> => {\n const params: Record<string, any> = {\n locale: 'all',\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n filters,\n };\n\n return strapiClient.get(path, { params });\n};\n\nexport default getStaticPathsFromStrapi;\n","import { AxiosResponse } from 'axios';\nimport strapiClient from './strapiClient';\nimport { STRAPI_DEFAULT_PAGE_SIZE } from '../../constants/strapi';\n\ninterface Options {\n locale?: string;\n slug?: string;\n preview?: boolean;\n filters?: Record<string, any>;\n}\n\n/** @deprecated Migrate to getStrapiSingleType or getStrapiCollectionType */\nconst getStaticPropsFromStrapi = async (\n path: string,\n { locale = 'en', slug, preview = false, filters = {} }: Options\n): Promise<AxiosResponse> => {\n const enrichedFilters: Record<string, string> = filters;\n\n if (slug) {\n enrichedFilters.slug = slug;\n }\n\n const params: Record<string, any> = {\n populate: 'deep,6',\n locale,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n filters: enrichedFilters,\n };\n\n if (preview) {\n params.publicationState = 'preview';\n }\n\n return strapiClient.get(path, { params });\n};\n\nexport default getStaticPropsFromStrapi;\n","import strapiClient from './strapiClient';\nimport {\n STRAPI_DEFAULT_PAGE_SIZE,\n STRAPI_FALLBACK_LOCALE,\n} from '../../constants/strapi';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport IStrapiResponse from '../../models/strapi/IStrapiResponse';\nimport LocalizedEntity from '../../models/LocalizedEntity';\n\ninterface Options {\n locale?: string;\n slug?: string;\n preview?: boolean;\n filters?: Record<string, any>;\n}\n\nconst getStrapiCollectionType = async <\n T extends LocalizedEntity<K>,\n K extends string\n>(\n path: string,\n key: K,\n { locale = 'en', preview = false, filters = {} }: Options\n): Promise<IStrapiData<T>[]> => {\n const params: Record<string, any> = {\n populate: 'deep,6',\n locale: 'all',\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n filters,\n };\n\n if (preview) {\n params.publicationState = 'preview';\n }\n\n const { data } = await strapiClient.get<IStrapiResponse<IStrapiData<T>[]>>(\n path,\n { params }\n );\n\n const localizedResponses = data.data.filter(\n (d) => d.attributes.locale === locale\n );\n\n const fallbackResponses = data.data.filter(\n (d) => d.attributes.locale === STRAPI_FALLBACK_LOCALE\n );\n\n const responses = fallbackResponses.map((fallbackResponse) => {\n const localizedResponse = localizedResponses.find(\n (localized) =>\n localized.attributes[key] === fallbackResponse.attributes[key]\n );\n\n return localizedResponse || fallbackResponse;\n });\n\n return responses;\n};\n\nexport default getStrapiCollectionType;\n","import { AxiosResponse } from 'axios';\nimport strapiClient from './strapiClient';\nimport {\n STRAPI_DEFAULT_PAGE_SIZE,\n STRAPI_FALLBACK_LOCALE,\n} from '../../constants/strapi';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport IStrapiResponse from '../../models/strapi/IStrapiResponse';\n\ninterface Options {\n locale?: string;\n preview?: boolean;\n filters?: Record<string, any>;\n}\n\nconst getStrapiSingleType = async <T>(\n path: string,\n { locale = 'en', preview = false, filters = {} }: Options\n): Promise<IStrapiData<T>> => {\n const params: Record<string, any> = {\n populate: 'deep,6',\n locale,\n 'pagination[pageSize]': STRAPI_DEFAULT_PAGE_SIZE,\n filters,\n };\n\n if (preview) {\n params.publicationState = 'preview';\n }\n\n let response: AxiosResponse<IStrapiResponse<IStrapiData<T>>>;\n\n try {\n response = await strapiClient.get(path, { params });\n return response.data.data;\n } catch (error: any) {\n if (error.isAxiosError && error.response?.status === 404) {\n // Retry request with fallback locale\n response = await strapiClient.get(path, {\n params: { ...params, locale: STRAPI_FALLBACK_LOCALE },\n });\n\n return response.data.data;\n }\n\n throw error;\n }\n};\n\nexport default getStrapiSingleType;\n","import { STRAPI_URI } from '../constants/strapi';\nimport IStrapi from '../models/strapi/IStrapi';\nimport IStrapiData from '../models/strapi/IStrapiData';\nimport StrapiMedia from '../models/strapi/StrapiMedia';\n\nconst strapiMediaUrl = (\n media: IStrapi<IStrapiData<StrapiMedia>>,\n preferredSize:\n | 'native'\n | 'thumbnail'\n | 'xSmall'\n | 'small'\n | 'medium'\n | 'large'\n | 'xLarge' = 'native'\n): string => {\n let { url } = media.data.attributes || {};\n if (preferredSize !== 'native' && media.data.attributes.ext !== '.svg') {\n url = media.data.attributes.formats[preferredSize]?.url || url;\n }\n if (url && (url.indexOf('http://') === 0 || url.indexOf('https://') === 0)) {\n return url;\n }\n return `${\n (STRAPI_URI.includes('127.0.0.1') || STRAPI_URI.includes('localhost')) &&\n !process.env.STORYBOOK\n ? STRAPI_URI\n : ''\n }${url}`;\n};\n\nexport default strapiMediaUrl;\n","export const DEFAULT_SHARE_IMAGE =\n 'https://cdn.tree.ly/assets/v3/app/share-image-generic.webp';\nexport const DEFAULT_SHARE_ALT = 'Share Image';\n","export const EXTENDABLE_HEADER_SECTIONS = [\n 'sections.hero',\n 'sections.map-hero',\n 'sections.full-width-image',\n 'sections.small-hero',\n 'sections.small-hero-light',\n];\nexport const DARK_THEME_HEADER_SECTIONS = [\n 'sections.hero',\n 'sections.small-hero',\n];\nexport const SLICES_WITH_BLOG_POSTS = ['sections.blog', 'sections.blog-cards'];\nexport const SLICES_WITH_CUSTOMER_STORIES = ['sections.customer-stories'];\nexport const SLICES_WITH_PROJECTS = [\n 'sections.projects-grid',\n 'sections.projects-map',\n 'sections.project-facts',\n 'sections.text-with-card',\n];\n","import StrapiLink from '../models/strapi/StrapiLink';\n\nconst strapiLinkUrl = (\n strapiLink: StrapiLink | undefined = undefined\n): string => {\n if (strapiLink?.page?.data) {\n return `/${strapiLink.page.data.attributes.slug}`;\n }\n\n return strapiLink?.url || '/';\n};\n\nexport default strapiLinkUrl;\n","import StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport { Box } from 'boemly';\nimport Head from 'next/head';\nimport Image from 'next/image';\nimport React, { useState } from 'react';\n\ninterface ZoomableImageProps {\n image: StrapiImage;\n zoom?: number;\n}\n\nconst ZoomableImage = ({ image, zoom = 200 }: ZoomableImageProps) => {\n // define and set default values to the states of the component\n const [isZoomed, setIsZoomed] = useState(false);\n const [backgroundPos, setBackgroundPos] = useState('50% 50%');\n\n const imageSrc = strapiMediaUrl(image.img, 'xLarge');\n\n const zoomInPosition = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n // This will handle the calculations of the area where the image needs to zoom in depending on the user interaction\n const zoomer = e.currentTarget.getBoundingClientRect();\n const x = ((e.clientX - zoomer.x) / zoomer.width) * 100;\n const y = ((e.clientY - zoomer.y) / zoomer.height) * 100;\n setBackgroundPos(`${x}% ${y}%`);\n };\n\n const toggleZoomImage = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n if (isZoomed) {\n setIsZoomed(false);\n } else {\n // Zoom in and set the background position correctly\n setIsZoomed(true);\n zoomInPosition(e);\n }\n };\n\n const handleClick = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n toggleZoomImage(e);\n };\n\n const handleMove = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n if (isZoomed) {\n zoomInPosition(e);\n }\n };\n\n return (\n <>\n <Head>\n <link rel=\"prefetch\" as=\"image\" href={imageSrc} />\n </Head>\n <Box\n position=\"relative\"\n display=\"inline-block\"\n width=\"full\"\n height=\"full\"\n overflow=\"hidden\"\n flexShrink=\"0\"\n scrollSnapAlign=\"center\"\n scrollSnapStop=\"always\"\n draggable=\"false\"\n cursor={isZoomed ? 'zoom-out' : 'zoom-in'}\n backgroundImage={isZoomed ? `url( ${imageSrc} )` : 'none'}\n backgroundSize={`${zoom}%`}\n backgroundPosition={backgroundPos}\n onClick={(e) => handleClick(e)}\n onMouseMove={(e) => handleMove(e)}\n >\n <Image\n src={imageSrc}\n alt={image.alt}\n fill\n style={{\n visibility: isZoomed ? 'hidden' : 'visible',\n objectFit: 'contain',\n }}\n />\n </Box>\n </>\n );\n};\n\nexport default ZoomableImage;\n","import React, { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { BoemlyModal, Flex, IconButton } from 'boemly';\nimport { useKey, useLockBodyScroll } from 'react-use';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport { CaretLeft, CaretRight } from '@phosphor-icons/react';\nimport ZoomableImage from './ZoomableImage';\n\nexport interface FullScreenImageProps {\n images: StrapiImage[];\n isOpen: boolean;\n onClose: () => void;\n currentIndex?: number;\n setCurrentIndex?: (callback: (c: number) => number) => void;\n}\n\nexport const FullScreenImage = ({\n images,\n isOpen,\n onClose,\n currentIndex = 0,\n setCurrentIndex,\n}: FullScreenImageProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n useLockBodyScroll(isOpen);\n\n const canMoveRight = useMemo(\n () => currentIndex < images.length - 1,\n [currentIndex, images.length]\n );\n const canMoveLeft = useMemo(() => currentIndex !== 0, [currentIndex]);\n\n const onRight = useCallback(\n () => canMoveRight && setCurrentIndex && setCurrentIndex((c) => c + 1),\n [canMoveRight]\n );\n const onLeft = useCallback(\n () => canMoveLeft && setCurrentIndex && setCurrentIndex((c) => c - 1),\n [canMoveLeft]\n );\n\n useKey('ArrowRight', onRight, {}, [onRight]);\n useKey('ArrowLeft', onLeft, {}, [onLeft]);\n\n useEffect(() => {\n if (!!isOpen) {\n setTimeout(() => {\n containerRef?.current?.scrollTo({\n left: currentIndex * containerRef.current.clientWidth,\n behavior: 'instant',\n });\n }, 10);\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (containerRef.current) {\n containerRef.current.scrollTo({\n left: currentIndex * containerRef.current.clientWidth,\n behavior: 'smooth',\n });\n }\n }, [currentIndex, containerRef]);\n\n return (\n <BoemlyModal\n onClose={onClose}\n isOpen={isOpen}\n title=\"\"\n trigger=\"\"\n size=\"full\"\n content={\n <Flex\n position=\"absolute\"\n insetY=\"16\"\n insetX=\"0\"\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n <Flex\n ref={containerRef}\n flexGrow=\"1\"\n flexBasis=\"100%\"\n flexShrink=\"1\"\n gap=\"4\"\n marginX=\"24\"\n scrollSnapType=\"x mandatory\"\n overflow=\"hidden\"\n position=\"relative\"\n height=\"full\"\n width=\"full\"\n >\n {images.map((image) => (\n <ZoomableImage key={image.id} image={image} />\n ))}\n </Flex>\n\n <Flex\n position=\"absolute\"\n inset=\"6\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n pointerEvents=\"none\"\n >\n <IconButton\n visibility={canMoveLeft ? 'visible' : 'hidden'}\n onClick={onLeft}\n icon={<CaretLeft size={16} />}\n aria-label=\"Previous picture\"\n variant=\"outline\"\n pointerEvents=\"all\"\n mr=\"6\"\n />\n\n <IconButton\n visibility={canMoveRight ? 'visible' : 'hidden'}\n onClick={onRight}\n icon={<CaretRight size={16} />}\n aria-label=\"Next picture\"\n variant=\"outline\"\n pointerEvents=\"all\"\n ml=\"4\"\n />\n </Flex>\n </Flex>\n }\n />\n );\n};\n","export const BREAKPOINT_SM = `${320 - 1}px`;\nexport const BREAKPOINT_MD = `${768 - 1}px`;\nexport const BREAKPOINT_LG = `${960 - 1}px`;\nexport const BREAKPOINT_XL = `${1200 - 1}px`;\n\nexport const BREAKPOINT_SM_QUERY = `(max-width: ${BREAKPOINT_SM})`;\nexport const BREAKPOINT_MD_QUERY = `(max-width: ${BREAKPOINT_MD})`;\nexport const BREAKPOINT_LG_QUERY = `(max-width: ${BREAKPOINT_LG})`;\nexport const BREAKPOINT_XL_QUERY = `(max-width: ${BREAKPOINT_XL})`;\n","import React, { useState } from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Wrapper,\n useMediaQuery,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport FullScreenImage from '../../components/FullScreenImage';\nimport { BREAKPOINT_MD_QUERY } from '../../constants/breakpoints';\n\ninterface FullWidthImageSlice extends StrapiDefaultHeader {\n image: StrapiImage;\n}\nexport interface FullWidthImageProps {\n slice: FullWidthImageSlice;\n}\n\nexport const FullWidthImage: React.FC<FullWidthImageProps> = ({\n slice,\n}: FullWidthImageProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const [isMobile] = useMediaQuery(BREAKPOINT_MD_QUERY);\n\n return (\n <DefaultSectionContainer title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n isHero\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center', mt: ['32', null, null, '56'] }}\n titleProps={{ textAlign: 'center', maxW: '6xl', marginX: 'auto' }}\n textProps={{ textAlign: 'center', maxW: '3xl', marginX: 'auto' }}\n />\n\n <Box position=\"relative\" mt=\"20\" height={['3xs', null, 'xl']}>\n <Image\n src={strapiMediaUrl(slice.image.img, 'xLarge')}\n alt={slice.image.alt}\n fill\n style={{\n objectFit: slice.image.objectFit || 'cover',\n cursor: isMobile ? 'unset' : 'pointer',\n borderRadius: 'var(--boemly-radii-2xl)',\n }}\n onClick={() => !isMobile && setIsOpen(true)}\n />\n\n <FullScreenImage\n images={[slice.image]}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n />\n </Box>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","const openHubSpotChat = () => {\n const w = window as any;\n\n if (w.HubSpotConversations) {\n w.HubSpotConversations.widget.open();\n } else {\n w.hsConversationsOnReady = [\n () => {\n w.HubSpotConversations.widget.open();\n },\n ];\n }\n};\n\nexport default openHubSpotChat;\n","import React from 'react';\nimport { Button } from 'boemly';\nimport Link from 'next/link';\nimport { useDetectAdBlock } from 'adblock-detect-react';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport openHubSpotChat from '../../utils/openHubSpotChat';\n\nexport interface StrapiLinkButtonProps {\n link: StrapiLink;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n variant?: 'solid' | 'outline' | 'outlineWhite' | 'link' | 'ghost';\n colorScheme?: 'primary' | 'gray' | 'orange' | 'green' | 'white';\n rightIcon?: JSX.Element;\n leftIcon?: JSX.Element;\n mt?: any;\n mr?: any;\n mb?: any;\n ml?: any;\n mx?: any;\n my?: any;\n background?: string;\n}\n\nexport const StrapiLinkButton: React.FC<StrapiLinkButtonProps> = ({\n link,\n ...buttonProps\n}: StrapiLinkButtonProps) => {\n const adBlockDetected = useDetectAdBlock();\n\n if (link.intercomLauncher) {\n if (adBlockDetected) {\n return (\n <Button {...buttonProps} as={Link} href=\"mailto:hello@tree.ly\">\n {link.text}\n </Button>\n );\n }\n\n return (\n <Button {...buttonProps} onClick={openHubSpotChat}>\n {link.text}\n </Button>\n );\n }\n\n return (\n <Button {...buttonProps} as={Link} href={strapiLinkUrl(link)}>\n {link.text}\n </Button>\n );\n};\n","import React from 'react';\nimport { Box, DefaultSectionHeader, Flex, Gradient, Wrapper } from 'boemly';\nimport Image from 'next/image';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiButtonWithVariant from '../../models/strapi/StrapiButtonWithVariant';\n\nexport interface HeroProps {\n slice: {\n tagline?: string;\n title: string;\n subTitle: string;\n button?: StrapiLink;\n additionalButtons: StrapiButtonWithVariant[];\n image?: StrapiImage;\n textAlign: 'left' | 'center';\n shape?: StrapiImage;\n };\n}\n\nexport const Hero = ({ slice }: HeroProps): JSX.Element => (\n <Box\n position=\"relative\"\n width=\"full\"\n height=\"var(--default-hero-height)\"\n minHeight=\"2xl\"\n backgroundColor=\"gray.900\"\n overflowX=\"hidden\"\n >\n {slice.image && (\n <>\n <Image\n src={strapiMediaUrl(slice.image.img, 'xLarge')}\n alt={slice.image.alt}\n fill\n style={{ objectFit: slice.image.objectFit || 'cover' }}\n />\n <Gradient />\n </>\n )}\n {slice.shape && (\n <Box\n position=\"absolute\"\n bottom=\"0\"\n borderTopRightRadius=\"full\"\n width={['3xs', null, '2xs', null, 'sm']}\n height={['3xs', null, '2xs', null, 'sm']}\n right={['-16', null, '24']}\n >\n <Image\n src={strapiMediaUrl(slice.shape.img, 'medium')}\n alt={slice.shape.alt}\n fill\n style={{\n objectFit: slice.shape.objectFit || 'cover',\n borderTopRightRadius: 'var(--boemly-radii-full)',\n }}\n />\n </Box>\n )}\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"56%\"\n width=\"full\"\n textAlign={slice.textAlign}\n transform=\"translateY(-50%)\"\n >\n <Wrapper>\n <>\n <DefaultSectionHeader\n isHero\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n taglineProps={{ color: 'white' }}\n titleProps={{\n color: 'white',\n maxW: slice.textAlign === 'center' ? '4xl' : '3xl',\n mx: slice.textAlign === 'center' ? 'auto' : 'unset',\n textAlign: slice.textAlign,\n }}\n textProps={{\n maxW: '2xl',\n mx: slice.textAlign === 'center' ? 'auto' : 'unset',\n textAlign: slice.textAlign,\n color: 'white',\n }}\n />\n\n <Flex\n gap=\"8\"\n justifyContent={slice.textAlign === 'center' ? 'center' : 'start'}\n >\n {slice.button && (\n <StrapiLinkButton\n key={slice.button.id}\n mt=\"10\"\n size=\"xl\"\n link={slice.button}\n />\n )}\n {slice.additionalButtons.map((button) => (\n <StrapiLinkButton\n key={button.button.id}\n mt=\"10\"\n size=\"xl\"\n variant={button.variant}\n link={button.button}\n />\n ))}\n </Flex>\n </>\n </Wrapper>\n </Box>\n </Box>\n);\n","import React from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n SimpleGrid,\n Spacer,\n Text,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\n\nexport interface IconGridProps {\n slice: {\n tagline?: string;\n title?: string;\n subTitle?: string;\n iconsWithTextAndButton: {\n id: number;\n title: string;\n text: string;\n icon: StrapiImage;\n button?: StrapiLink;\n }[];\n };\n}\n\nexport const IconGrid = ({ slice }: IconGridProps): JSX.Element => {\n const columns = () => {\n if (slice.iconsWithTextAndButton.length === 2) {\n return [1, null, null, 2, 2];\n }\n if (slice.iconsWithTextAndButton.length === 1) {\n return 1;\n }\n return [1, null, null, 2, 3];\n };\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n {slice.title ? (\n <>\n <Flex alignItems=\"center\" flexDirection=\"column\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n taglineProps={{ maxW: '2xl', textAlign: 'center' }}\n titleProps={{ maxW: '3xl', textAlign: 'center' }}\n textProps={{ maxW: '3xl', textAlign: 'center' }}\n />\n </Flex>\n <Spacer h=\"20\" />\n </>\n ) : (\n <></>\n )}\n\n <SimpleGrid\n columns={columns()}\n gap={slice.iconsWithTextAndButton.length === 2 ? '14' : '16'}\n rowGap={['16', null, null, '20']}\n >\n {slice.iconsWithTextAndButton.map((iconWithTextAndButton) => (\n <Box key={iconWithTextAndButton.id}>\n <Box\n margin=\"0 auto\"\n backgroundColor=\"primary.50\"\n borderRadius=\"full\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-around\"\n width=\"6.5rem\"\n height=\"6.5rem\"\n >\n <Box position=\"absolute\" width=\"12\" height=\"12\">\n <Image\n src={strapiMediaUrl(\n iconWithTextAndButton.icon.img,\n 'xSmall'\n )}\n alt={iconWithTextAndButton.icon.alt}\n fill\n style={{\n objectFit:\n iconWithTextAndButton.icon.objectFit || 'contain',\n }}\n />\n </Box>\n </Box>\n <Heading size=\"xl\" textAlign=\"center\" mb=\"4\" mt=\"8\">\n {iconWithTextAndButton.title}\n </Heading>\n <Text size=\"mdRegularNormal\" textAlign=\"center\">\n {iconWithTextAndButton.text}\n </Text>\n {iconWithTextAndButton.button && (\n <Box textAlign=\"center\">\n <StrapiLinkButton\n key={iconWithTextAndButton.button.id}\n mt=\"8\"\n size=\"md\"\n variant=\"outline\"\n link={iconWithTextAndButton.button}\n />\n </Box>\n )}\n </Box>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\n\nconst LinkedInIcon = () => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_112_606)\">\n <path\n d=\"M11.9286 11.9285H9.85424V8.67998C9.85424 7.90534 9.84042 6.90813 8.77539 6.90813C7.695 6.90813 7.52969 7.75213 7.52969 8.62357V11.9283H5.45533V5.24799H7.44671V6.16093H7.47459C7.67388 5.82018 7.96186 5.53986 8.30786 5.34984C8.65386 5.15981 9.04493 5.06719 9.4394 5.08183C11.5418 5.08183 11.9295 6.46473 11.9295 8.2638L11.9286 11.9285ZM3.11477 4.33484C2.87669 4.33489 2.64393 4.26433 2.44595 4.13209C2.24796 3.99985 2.09365 3.81188 2.0025 3.59193C1.91135 3.37199 1.88746 3.12995 1.93387 2.89644C1.98027 2.66292 2.09488 2.44841 2.26321 2.28003C2.43153 2.11164 2.646 1.99696 2.8795 1.95047C3.11301 1.90398 3.35504 1.92778 3.57502 2.01884C3.795 2.10992 3.98303 2.26417 4.11533 2.46211C4.24764 2.66004 4.31829 2.89277 4.31833 3.13085C4.31836 3.28894 4.28725 3.44547 4.22678 3.59153C4.1663 3.7376 4.07767 3.87031 3.96591 3.98211C3.85415 4.09392 3.72146 4.18261 3.57541 4.24313C3.42937 4.30365 3.27286 4.33481 3.11477 4.33484ZM4.15194 11.9285H2.07544V5.24799H4.15194V11.9285ZM12.9628 0.000953808H1.03307C0.762304 -0.00210183 0.501383 0.102466 0.307673 0.291681C0.113961 0.480895 0.00330461 0.739273 0 1.01004V12.9892C0.00319151 13.2602 0.113783 13.5187 0.307487 13.7081C0.501192 13.8975 0.762169 14.0023 1.03307 13.9994H12.9628C13.2342 14.0028 13.496 13.8983 13.6904 13.7089C13.8848 13.5195 13.9962 13.2607 14 12.9892V1.00918C13.9961 0.737873 13.8846 0.479199 13.6902 0.28999C13.4958 0.10078 13.2341 -0.00348904 12.9628 8.91429e-05\"\n fill=\"#0A66C2\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_112_606\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n);\n\nexport default LinkedInIcon;\n","import React from 'react';\nimport { CaretRight, Globe } from '@phosphor-icons/react';\nimport LinkedInIcon from '../../icons/LinkedInIcon';\nimport StrapiLinkWithIcon from '../../models/strapi/StrapiLinkWithIcon';\nimport StrapiLinkButton from '../StrapiLinkButton';\nimport { StrapiLinkButtonProps } from '../StrapiLinkButton/StrapiLinkButton';\n\nexport interface StrapiLinkButtonWithIconProps\n extends Omit<StrapiLinkButtonProps, 'link'> {\n link: StrapiLinkWithIcon;\n}\n\nexport const StrapiLinkButtonWithIcon: React.FC<\n StrapiLinkButtonWithIconProps\n> = ({ link, ...props }: StrapiLinkButtonWithIconProps) => {\n const getLinkIcon = (destination: string) => {\n switch (destination) {\n case 'linkedin': {\n return <LinkedInIcon />;\n }\n case 'web': {\n return <Globe />;\n }\n default: {\n return <CaretRight />;\n }\n }\n };\n\n return (\n <StrapiLinkButton\n {...props}\n link={link.link}\n rightIcon={getLinkIcon(link.destination)}\n />\n );\n};\n","import React from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n SimpleGrid,\n Text,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiLinkButtonWithIcon from '../../components/StrapiLinkButtonWithIcon';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLinkWithIcon from '../../models/strapi/StrapiLinkWithIcon';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\ninterface ImageGridSlice extends StrapiDefaultHeader {\n images: {\n id: number;\n title: string;\n subTitle?: string;\n image: StrapiImage;\n links: StrapiLinkWithIcon[];\n }[];\n}\nexport interface ImageGridProps {\n slice: ImageGridSlice;\n}\n\nexport const ImageGrid: React.FC<ImageGridProps> = ({\n slice,\n}: ImageGridProps) => {\n const [primary50] = useToken('colors', ['primary.50']);\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center' }}\n titleProps={{ textAlign: 'center', maxW: '6xl', marginX: 'auto' }}\n textProps={{ textAlign: 'center', maxW: '2xl', marginX: 'auto' }}\n />\n\n <SimpleGrid\n mt=\"24\"\n columns={3}\n gap=\"24\"\n rowGap=\"16\"\n minChildWidth=\"16rem\"\n >\n {slice.images.map(({ id, title, subTitle, image, links }) => (\n <Box key={id}>\n <Box position=\"relative\" height=\"sm\" borderRadius=\"xl\">\n <Image\n src={strapiMediaUrl(image.img, 'medium')}\n alt={image.alt}\n fill\n style={{\n objectFit: image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n <Heading size=\"xl\" mt=\"4\">\n {title}\n </Heading>\n {subTitle && <Text size=\"mdRegularNormal\">{subTitle}</Text>}\n {links && links.length > 0 && (\n <Flex mt=\"3\" flexDir=\"row\" gap=\"2\" flexWrap=\"wrap\">\n {links.map((link) => (\n <StrapiLinkButtonWithIcon\n key={link.id}\n link={link}\n size=\"sm\"\n variant=\"outline\"\n />\n ))}\n </Flex>\n )}\n </Box>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React, { Fragment } from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Heading,\n SimpleGrid,\n Text,\n useMediaQuery,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { CaretRight } from '@phosphor-icons/react';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport { BREAKPOINT_LG_QUERY } from '../../constants/breakpoints';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport { CDN_URI } from '../../constants/api';\n\ninterface ImageTextSequenceSlice extends StrapiDefaultHeader {\n imageTextRows: {\n id: number;\n title: string;\n text: string;\n button?: StrapiLink;\n image: StrapiImage;\n }[];\n background?: boolean;\n}\nexport interface ImageTextSequenceProps {\n slice: ImageTextSequenceSlice;\n}\n\nexport const ImageTextSequence: React.FC<ImageTextSequenceProps> = ({\n slice,\n}: ImageTextSequenceProps) => {\n const [oneColumnGrid] = useMediaQuery(BREAKPOINT_LG_QUERY);\n const [primary50] = useToken('colors', ['primary.50']);\n const [gray700] = useToken('colors', ['gray.700']);\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n {slice.background ? (\n <>\n <Box\n position=\"absolute\"\n top=\"0\"\n right=\"24\"\n display={['none', null, null, 'unset']}\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/desktop-map-border.svg`}\n alt=\"Map\"\n width=\"786\"\n height=\"897\"\n />\n </Box>\n <Box\n position=\"absolute\"\n top=\"64\"\n right=\"-14\"\n display={['unset', null, null, 'none']}\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/mobile-map-border.svg`}\n alt=\"Map\"\n width=\"227\"\n height=\"452\"\n />\n </Box>\n </>\n ) : (\n <></>\n )}\n <Wrapper>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: ['left', null, null, null, 'center'] }}\n titleProps={{\n maxW: '6xl',\n marginX: ['0', null, null, null, 'auto'],\n textAlign: ['left', null, null, null, 'center'],\n }}\n textProps={{\n maxW: '2xl',\n marginX: ['0', null, null, null, 'auto'],\n textAlign: ['left', null, null, null, 'center'],\n color: 'black',\n }}\n />\n\n <SimpleGrid\n gap=\"16\"\n mt={['28', null, null, null, '40']}\n columns={[1, null, null, null, 2]}\n >\n {slice.imageTextRows.map(\n ({ id, title, text, button, image }, index) => {\n const imageBox = (\n <Box>\n <Box\n position=\"relative\"\n width=\"full\"\n minHeight={['2xs', null, null, 'sm']}\n >\n <Image\n src={strapiMediaUrl(image.img, 'large')}\n alt={image.alt}\n fill\n style={{\n objectFit: image.objectFit || 'contain',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n </Box>\n );\n return (\n <Fragment key={id}>\n {(oneColumnGrid || index % 2 !== 0) && imageBox}\n <Box\n display=\"flex\"\n alignItems=\"flex-start\"\n flexDirection=\"column\"\n justifyContent=\"center\"\n >\n <Heading as=\"h2\" size=\"xl\" mb=\"4\">\n {title}\n </Heading>\n <Text size=\"mdRegularNormal\">{text}</Text>\n {button && (\n <StrapiLinkButton\n mt=\"5\"\n link={button}\n size=\"sm\"\n variant=\"outline\"\n rightIcon={<CaretRight size=\"10\" color={gray700} />}\n />\n )}\n </Box>\n {!oneColumnGrid && index % 2 === 0 && imageBox}\n </Fragment>\n );\n }\n )}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport {\n DefaultSectionContainer,\n DefaultSectionHeader,\n Grid,\n GridItem,\n PortfolioCard,\n Spacer,\n BoemlyList,\n Wrapper,\n} from 'boemly';\nimport { ArrowRight } from '@phosphor-icons/react';\nimport Image from 'next/image';\nimport { useRouter } from 'next/router';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiPortfolioCard from '../../models/strapi/StrapiPortfolioCard';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\n\ninterface LeftTextRightCardSlice extends StrapiDefaultHeader {\n checkMarkLabels?: {\n id: number;\n text: string;\n }[];\n button?: StrapiLink;\n card?: StrapiPortfolioCard;\n}\nexport interface LeftTextRightCardProps {\n slice: LeftTextRightCardSlice;\n}\n\nexport const LeftTextRightCard: React.FC<LeftTextRightCardProps> = ({\n slice,\n}: LeftTextRightCardProps) => {\n const { push } = useRouter();\n\n return (\n <DefaultSectionContainer title={slice.title}>\n <Wrapper>\n <Grid\n templateColumns={[\n 'repeat(8, 1fr)',\n null,\n null,\n null,\n 'repeat(12, 1fr)',\n ]}\n templateRows={['repeat(2, 1fr)', null, null, null, 'repeat(1, 1fr)']}\n rowGap=\"12\"\n >\n <GridItem colSpan={8} rowSpan={1} pr={['0', null, null, null, '28']}>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n\n {slice.checkMarkLabels && (\n <>\n <Spacer height=\"10\" />\n <BoemlyList listItems={slice.checkMarkLabels} />\n <Spacer height=\"10\" />\n </>\n )}\n\n {slice.button && (\n <StrapiLinkButton\n link={slice.button}\n size=\"md\"\n colorScheme=\"white\"\n variant=\"outline\"\n rightIcon={<ArrowRight />}\n />\n )}\n </GridItem>\n <GridItem\n colSpan={[8, null, null, null, 4]}\n rowSpan={1}\n position=\"relative\"\n >\n {slice.card && (\n <PortfolioCard\n title={slice.card.title}\n button={\n slice.card.button && {\n text: slice.card.button.text,\n onClick: () => push(strapiLinkUrl(slice.card?.button)),\n }\n }\n facts={slice.card.facts}\n image={\n <Image\n src={strapiMediaUrl(slice.card.image.img, 'medium')}\n alt={slice.card.image.alt}\n fill\n style={{ objectFit: slice.card.image.objectFit || 'cover' }}\n />\n }\n portfolioNumber={slice.card.portfolioNumber}\n />\n )}\n </GridItem>\n </Grid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n Flex,\n Heading,\n RichText,\n SimpleGrid,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { ArrowRight } from '@phosphor-icons/react';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImageWithLink from '../../models/strapi/StrapiImageWithLink';\nimport StrapiLink from '../../models/strapi/StrapiLink';\n\nexport interface LogoGridWithTextProps {\n slice: {\n title: string;\n text: string;\n button?: StrapiLink;\n logos: StrapiImageWithLink[];\n };\n}\n\nexport const LogoGridWithText: React.FC<LogoGridWithTextProps> = ({\n slice,\n}: LogoGridWithTextProps) => {\n const [primary50] = useToken('colors', ['primary.50']);\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n <Wrapper>\n <SimpleGrid columns={2} gap=\"28\" minChildWidth=\"16rem\">\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n justifyContent=\"center\"\n alignItems=\"flex-start\"\n >\n <Heading as=\"h2\" size=\"3xl\" mb=\"4\">\n {slice.title}\n </Heading>\n <RichText content={slice.text} />\n {slice.button && (\n <StrapiLinkButton\n link={slice.button}\n size=\"md\"\n colorScheme=\"white\"\n variant=\"outline\"\n mt=\"6\"\n rightIcon={<ArrowRight />}\n />\n )}\n </Box>\n <Flex flexDir=\"row\" flexWrap=\"wrap\" gap={['12', null, null, '28']}>\n {slice.logos.map((logo) => (\n <Flex\n key={logo.id}\n justifyContent=\"center\"\n alignItems=\"center\"\n flexGrow={1}\n flexShrink={0}\n flexBasis={slice.logos.length > 2 ? '34%' : '90%'} // 34% are just enough to not allow three in one row\n >\n <Box position=\"relative\" height=\"20\" width=\"100%\">\n {logo.link ? (\n <a href={strapiLinkUrl(logo.link)}>\n <Image\n src={strapiMediaUrl(logo.img, 'small')}\n alt={logo.alt}\n fill\n style={{ objectFit: logo.objectFit || 'contain' }}\n />\n </a>\n ) : (\n <Image\n src={strapiMediaUrl(logo.img, 'small')}\n alt={logo.alt}\n fill\n style={{ objectFit: logo.objectFit || 'contain' }}\n />\n )}\n </Box>\n </Flex>\n ))}\n </Flex>\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import styled from '@emotion/styled';\nimport { BREAKPOINT_LG } from '../../constants/breakpoints';\nimport { Box } from 'boemly';\n\nexport const MapHeroContainer = styled(Box)`\n position: relative;\n width: 100vw;\n height: var(--default-hero-height);\n min-height: var(--boemly-sizes-3xl);\n background-color: var(--boemly-colors-primary-50);\n overflow: hidden;\n z-index: var(--boemly-zIndices-base);\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n height: auto;\n }\n`;\n\nexport const MapHeroTextContainer = styled(Box)`\n position: absolute;\n width: 100vw;\n top: 56%;\n left: 0;\n transform: translateY(-50%);\n z-index: var(--boemly-zIndices-aboveBase);\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n position: relative;\n transform: unset;\n\n padding-top: var(--boemly-space-32);\n }\n`;\n\nexport const ShapeContainer = styled(Box)`\n position: absolute;\n bottom: calc(var(--boemly-space-8) * -1);\n left: 0;\n\n width: var(--boemly-sizes-sm);\n height: var(--boemly-sizes-sm);\n\n border-top-right-radius: var(--boemly-radii-full);\n\n & span,\n div {\n border-top-right-radius: var(--boemly-radii-full);\n }\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n display: none;\n }\n`;\n\nexport const MapContainer = styled(Box)`\n position: absolute;\n\n width: 50%;\n height: 100%;\n\n right: 0;\n top: 0;\n\n & img {\n object-fit: cover !important;\n }\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n width: 100%;\n height: var(--boemly-sizes-4xl);\n position: relative;\n margin-top: calc(var(--boemly-space-72) * -1);\n background-color: var(--boemly-colors-white);\n\n & img {\n object-fit: contain !important;\n }\n }\n`;\n\nexport const MapGradient = styled(Box)`\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n\n background: linear-gradient(\n 90deg,\n var(--boemly-colors-primary-50) 0%,\n var(--boemly-colors-primary-50) 10%,\n rgba(243, 246, 245, 0.6) 28%,\n rgba(243, 246, 245, 0) 40%,\n rgba(243, 246, 245, 0) 100%\n );\n\n @media screen and (max-width: ${BREAKPOINT_LG}) {\n background: linear-gradient(\n 180deg,\n var(--boemly-colors-primary-50) 0%,\n var(--boemly-colors-primary-50) 36%,\n rgba(243, 246, 245, 0.12) 46%,\n rgba(243, 246, 245, 0) 100%\n );\n }\n`;\n","import React from 'react';\nimport { DefaultSectionHeader, Flex, useMediaQuery, Wrapper } from 'boemly';\nimport Image from 'next/image';\nimport { BREAKPOINT_LG_QUERY } from '../../constants/breakpoints';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport {\n MapHeroContainer,\n MapHeroTextContainer,\n ShapeContainer,\n MapContainer,\n MapGradient,\n} from './styles';\n\nexport interface MapHeroProps {\n slice: {\n tagline?: string;\n title: string;\n subTitle?: string;\n buttons?: StrapiLink[];\n shape?: StrapiImage;\n map: StrapiImage;\n mobileMap: StrapiImage;\n };\n}\n\nexport const MapHero: React.FC<MapHeroProps> = ({ slice }: MapHeroProps) => {\n const [belowBreakpoint] = useMediaQuery(BREAKPOINT_LG_QUERY);\n\n return (\n <MapHeroContainer maxWidth=\"full\">\n {slice.shape && (\n <ShapeContainer>\n <Image\n src={strapiMediaUrl(slice.shape.img, 'medium')}\n alt={slice.shape.alt}\n fill\n style={{ objectFit: slice.shape.objectFit || 'cover' }}\n />\n </ShapeContainer>\n )}\n <MapHeroTextContainer>\n <Wrapper>\n <>\n <DefaultSectionHeader\n isHero\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n titleProps={{ maxW: ['100%', null, null, null, '60%'] }}\n textProps={{ maxW: ['100%', null, null, null, '55%'] }}\n />\n {slice.buttons && slice.buttons.length > 0 && (\n <Flex mt=\"10\" flexDir=\"row\" gap=\"5\">\n <StrapiLinkButton link={slice.buttons[0]} size=\"xl\" />\n {slice.buttons.length === 2 && (\n <StrapiLinkButton\n link={slice.buttons[1]}\n variant=\"outline\"\n size=\"xl\"\n />\n )}\n </Flex>\n )}\n </>\n </Wrapper>\n </MapHeroTextContainer>\n <MapContainer>\n {belowBreakpoint ? (\n <Image\n src={strapiMediaUrl(slice.mobileMap.img, 'xLarge')}\n alt={slice.mobileMap.alt}\n fill\n style={{ objectFit: slice.mobileMap.objectFit || 'contain' }}\n />\n ) : (\n <Image\n src={strapiMediaUrl(slice.map.img, 'xLarge')}\n alt={slice.map.alt}\n fill\n style={{ objectFit: slice.map.objectFit || 'cover' }}\n />\n )}\n <MapGradient />\n </MapContainer>\n </MapHeroContainer>\n );\n};\n","const convertToKebabCase = (str: string) => {\n const matches =\n str &&\n str.match(\n /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g\n );\n return matches ? matches.map((x: string) => x.toLowerCase()).join('-') : '';\n};\n\nexport default convertToKebabCase;\n","import React from 'react';\nimport {\n Box,\n Heading,\n HeroCard,\n SimpleGrid,\n Text,\n BoemlyAccordion,\n Wrapper,\n Flex,\n Spacer,\n} from 'boemly';\nimport { ArrowRight } from '@phosphor-icons/react';\nimport { useRouter } from 'next/router';\nimport Image from 'next/image';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiHeroCard from '../../models/strapi/StrapiHeroCard';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport convertToKebabCase from '../../utils/convertToKebabCase';\n\nconst VARIANTS = {\n gray: {\n backgroundColor: 'primary.50',\n tagLineColor: 'primary.500',\n textColor: 'black',\n accordionVariant: 'black',\n otherQuestionsBackground: 'primary.700',\n },\n green: {\n backgroundColor: 'primary.800',\n tagLineColor: 'white',\n textColor: 'white',\n accordionVariant: 'white',\n otherQuestionsBackground: 'primary.900',\n },\n white: {\n backgroundColor: 'white',\n tagLineColor: 'primary.500',\n textColor: 'black',\n accordionVariant: 'black',\n otherQuestionsBackground: 'primary.700',\n },\n};\n\nexport interface QAndAProps {\n slice: {\n tagline: string;\n title: string;\n questionsAndAnswers: {\n id: number;\n key: string;\n value: string;\n }[];\n otherQuestions: string;\n button: StrapiLink;\n hero?: StrapiHeroCard;\n variant?: keyof typeof VARIANTS;\n };\n}\n\nexport const QAndA: React.FC<QAndAProps> = ({ slice }: QAndAProps) => {\n const { push } = useRouter();\n\n const variant = VARIANTS[slice.variant ?? 'green'];\n\n return (\n <>\n <Box\n pb={slice.hero ? 80 : 28}\n id={convertToKebabCase(slice.title)}\n backgroundColor={variant.backgroundColor}\n >\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2]}>\n <Box mr=\"16\" paddingY=\"28\">\n <Text size=\"mdMonoUppercase\" color={variant.tagLineColor}>\n {slice.tagline}\n </Text>\n <Heading\n as=\"h2\"\n size=\"3xl\"\n color={variant.textColor}\n mt=\"6\"\n mb=\"16\"\n >\n {slice.title}\n </Heading>\n </Box>\n <Box\n maxHeight={['unset', null, null, 'xl']}\n paddingTop={['0', null, null, '28']}\n paddingRight={['0', null, null, '6']}\n overflowY={['unset', null, null, 'scroll']}\n >\n <Box>\n <BoemlyAccordion\n rows={slice.questionsAndAnswers}\n defaultIndex={0}\n variant={variant.accordionVariant as 'white' | 'black'}\n />\n <Flex\n padding=\"8\"\n backgroundColor={variant.otherQuestionsBackground}\n borderRadius=\"2xl\"\n mt=\"14\"\n flexDir={['column', null, null, 'row']}\n justifyContent={['flex-start', null, null, 'space-between']}\n alignItems={['flex-start', null, null, 'center']}\n >\n <Heading as=\"h6\" size=\"sm\" color=\"white\">\n {slice.otherQuestions}\n </Heading>\n <Spacer minHeight={['4', null, null, '0']} />\n <StrapiLinkButton\n size=\"lg\"\n colorScheme=\"white\"\n background=\"white\"\n rightIcon={<ArrowRight />}\n link={slice.button}\n />\n </Flex>\n </Box>\n </Box>\n </SimpleGrid>\n </Wrapper>\n </Box>\n\n {slice.hero && (\n <Box pb=\"28\" mt=\"-56\">\n <Wrapper>\n <HeroCard\n title={slice.hero.title}\n subTitle={slice.hero.subTitle}\n link={\n slice.hero.button && {\n text: slice.hero.button.text,\n onClick: () => push(strapiLinkUrl(slice.hero?.button)),\n }\n }\n image={\n slice.hero.image && (\n <Image\n src={strapiMediaUrl(slice.hero.image.img, 'xLarge')}\n alt={slice.hero.image.alt}\n fill\n style={{ objectFit: slice.hero.image.objectFit || 'cover' }}\n />\n )\n }\n />\n </Wrapper>\n </Box>\n )}\n </>\n );\n};\n","import React from 'react';\nimport Image from 'next/image';\nimport {\n Box,\n DefaultSectionHeader,\n HeroCard,\n QuoteCard,\n Shape,\n SimpleGrid,\n Wrapper,\n} from 'boemly';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiQuoteCard from '../../models/strapi/StrapiQuoteCard';\nimport StrapiHeroCard from '../../models/strapi/StrapiHeroCard';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport convertToKebabCase from '../../utils/convertToKebabCase';\nimport { useRouter } from 'next/router';\n\ninterface QuoteCardsSlice extends StrapiDefaultHeader {\n cards: StrapiQuoteCard[];\n shapes?: StrapiImage[];\n hero?: StrapiHeroCard;\n}\nexport interface QuoteCardsProps {\n slice: QuoteCardsSlice;\n}\n\nexport const QuoteCards: React.FC<QuoteCardsProps> = ({\n slice,\n}: QuoteCardsProps) => {\n const { push } = useRouter();\n\n return (\n <>\n <Box\n id={convertToKebabCase(slice.title)}\n position=\"relative\"\n paddingTop=\"28\"\n paddingBottom={!!slice.hero ? '80' : '28'}\n >\n {slice.shapes && slice.shapes.length === 2 && (\n <>\n <Shape\n shape={\n <Image\n src={strapiMediaUrl(slice.shapes[0].img, 'small')}\n alt={slice.shapes[0].alt}\n fill\n style={{ objectFit: slice.shapes[0].objectFit || 'cover' }}\n />\n }\n top=\"0\"\n right=\"0\"\n size=\"xs\"\n radius=\"bottom-left\"\n />\n <Shape\n shape={\n <Image\n src={strapiMediaUrl(slice.shapes[1].img, 'small')}\n alt={slice.shapes[1].alt}\n fill\n style={{ objectFit: slice.shapes[1].objectFit || 'cover' }}\n />\n }\n bottom=\"0\"\n left=\"0\"\n radius=\"top-right\"\n />\n </>\n )}\n <Wrapper>\n <Box maxW=\"3xl\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n </Box>\n <SimpleGrid\n columns={2}\n gap=\"20\"\n rowGap=\"6\"\n mt=\"16\"\n minChildWidth={['100%', null, '16rem']}\n >\n {slice.cards.map((card) => (\n <Box key={card.id} width=\"full\" maxWidth=\"2xl\">\n <QuoteCard\n key={card.id}\n avatar={{\n name: card.avatar.name,\n description: card.avatar.description,\n image: (\n <Image\n src={strapiMediaUrl(card.avatar.image.img, 'small')}\n alt={card.avatar.image.alt}\n fill\n style={{\n objectFit: card.avatar.image.objectFit || 'cover',\n }}\n />\n ),\n }}\n text={card.text}\n />\n </Box>\n ))}\n </SimpleGrid>\n </Wrapper>\n </Box>\n {slice.hero && (\n <Box marginTop=\"-40\" paddingBottom=\"28\">\n <Wrapper>\n <HeroCard\n title={slice.hero.title}\n subTitle={slice.hero.subTitle}\n link={\n slice.hero.button && {\n text: slice.hero.button.text,\n onClick: () => push(strapiLinkUrl(slice.hero?.button)),\n }\n }\n image={\n slice.hero.image && (\n <Image\n src={strapiMediaUrl(slice.hero.image.img, 'xLarge')}\n alt={slice.hero.image.alt}\n fill\n style={{ objectFit: slice.hero.image.objectFit || 'cover' }}\n />\n )\n }\n />\n </Wrapper>\n </Box>\n )}\n </>\n );\n};\n","import React from 'react';\nimport {\n DefaultSectionContainer,\n Grid,\n GridItem,\n RichText,\n Wrapper,\n} from 'boemly';\n\nexport interface RichTextSectionProps {\n slice: {\n content: string;\n };\n}\n\nexport const RichTextSection: React.FC<RichTextSectionProps> = ({\n slice,\n}: RichTextSectionProps) => (\n <DefaultSectionContainer>\n <Wrapper>\n <Grid templateColumns=\"repeat(12, 1fr)\" gap=\"4\">\n <GridItem colSpan={[12, null, null, 7]}>\n <RichText content={slice.content} />\n </GridItem>\n </Grid>\n </Wrapper>\n </DefaultSectionContainer>\n);\n","import React, { createRef, useEffect, useRef, useState } from 'react';\nimport {\n Box,\n Center,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Gradient,\n Heading,\n RichText,\n ShapesCard,\n Text,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { useWindowScroll, useWindowSize } from 'react-use';\nimport { useRouter } from 'next/router';\nimport StrapiShapesCard from '../../models/strapi/StrapiShapesCard';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiImage from '../../models/strapi/StrapiImage';\n\ninterface StepsSlice extends StrapiDefaultHeader {\n steps: {\n id: number;\n step: number;\n title: string;\n text?: string;\n }[];\n image?: StrapiImage;\n card?: StrapiShapesCard;\n}\nexport interface StepsProps {\n slice: StepsSlice;\n}\n\nexport const Steps: React.FC<StepsProps> = ({ slice }: StepsProps) => {\n const { push } = useRouter();\n const [gray900] = useToken('colors', ['gray.900']);\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [stepRefs, setStepRefs] = useState(new Array(slice.steps.length));\n const [stepProgress, setStepProgress] = useState(\n new Array(slice.steps.length)\n );\n\n const { y: offsetY } = useWindowScroll();\n const { height: windowHeight } = useWindowSize();\n\n useEffect(() => {\n setStepRefs(slice.steps.map(() => createRef()));\n }, []);\n\n useEffect(() => {\n const containerOffsetTop = containerRef.current?.offsetTop || 0;\n setStepProgress(\n stepRefs.map((ref) => {\n const currentItemOffsetTop = ref.current?.offsetTop || 0;\n return containerOffsetTop + currentItemOffsetTop <\n offsetY + windowHeight / 3\n ? 100\n : 0;\n })\n );\n }, [offsetY]);\n\n return (\n <div ref={containerRef}>\n <DefaultSectionContainer backgroundColor={gray900} title={slice.title}>\n <>\n {slice.image && (\n <Box\n position=\"absolute\"\n top=\"0\"\n left=\"0\"\n width=\"full\"\n height=\"full\"\n >\n <Image\n src={strapiMediaUrl(slice.image.img, 'xLarge')}\n alt={slice.image.alt}\n fill\n style={{ objectFit: slice.image.objectFit || 'cover' }}\n />\n <Gradient />\n </Box>\n )}\n </>\n <Wrapper>\n <>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center' }}\n titleProps={{\n textAlign: 'center',\n maxW: '2xl',\n marginX: 'auto',\n color: 'white',\n }}\n textProps={{\n textAlign: 'center',\n maxW: 'xl',\n marginX: 'auto',\n color: 'whiteAlpha.800',\n }}\n />\n\n <Box marginTop={['16', null, '24']}>\n {slice.steps.map(({ id, step, title, text }, index) => (\n <Flex flexDir=\"column\" alignItems=\"center\" key={id}>\n <Center\n width=\"10\"\n height=\"10\"\n borderRadius=\"full\"\n backgroundColor=\"white\"\n >\n <Text size=\"smRegularNormal\" color=\"black\">\n {step}\n </Text>\n </Center>\n <Heading size=\"lg\" color=\"white\" mt=\"4\" textAlign=\"center\">\n {title}\n </Heading>\n {text && (\n <Box maxW=\"xl\" mt=\"4\">\n <RichText\n options={{ forceBlock: true }}\n content={text}\n textProps={{\n size: 'mdRegularNormal',\n color: 'whiteAlpha.700',\n textAlign: 'center',\n }}\n />\n </Box>\n )}\n {(index + 1 < slice.steps.length || slice.card) && (\n <Box\n ref={stepRefs[index]}\n position=\"relative\"\n marginTop=\"4\"\n marginBottom=\"6\"\n height=\"12\"\n >\n <Box\n position=\"absolute\"\n height=\"full\"\n borderLeft=\"dashed 1px white\"\n opacity=\"0.5\"\n />\n <Box\n position=\"absolute\"\n height={`${stepProgress[index]}%`}\n borderRight=\"solid 1px white\"\n opacity=\"1\"\n transition=\"height ease var(--medium-transition-duration)\"\n />\n </Box>\n )}\n </Flex>\n ))}\n </Box>\n\n {slice.card && (\n <ShapesCard\n tagline={slice.card.tagline}\n title={slice.card.title}\n text={slice.card.text}\n shapes={\n slice.card.shapes &&\n slice.card.shapes?.map((shape) => (\n <Image\n key={shape.id}\n src={strapiMediaUrl(shape.img, 'small')}\n alt={shape.alt}\n fill\n style={{ objectFit: shape.objectFit || 'cover' }}\n />\n ))\n }\n button={\n slice.card.button && {\n text: slice.card.button.text,\n onClick: () => push(strapiLinkUrl(slice.card?.button)),\n }\n }\n />\n )}\n </>\n </Wrapper>\n </DefaultSectionContainer>\n </div>\n );\n};\n","enum CreditsAvailableState {\n YES = 'yes',\n SOME = 'some',\n NO = 'no',\n NOT_YET = 'notYet',\n}\n\nexport default CreditsAvailableState;\n","import { motion } from 'framer-motion';\nimport styled from '@emotion/styled';\nimport { BREAKPOINT_MD } from '../../constants/breakpoints';\nimport { Box } from 'boemly';\n\nexport const CarouselContainer = styled(Box)`\n margin-top: var(--boemly-space-6);\n padding: var(--boemly-space-8) 0;\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n margin-top: var(--boemly-space-4);\n width: var(--boemly-sizes-full);\n }\n\n width: var(--boemly-sizes-full);\n\n overflow-x: hidden;\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n overflow-x: scroll;\n }\n`;\n\ninterface CarouselInnerContainerProps {\n numberOfItems: number;\n}\nexport const CarouselInnerContainer = styled(\n motion.div\n)<CarouselInnerContainerProps>`\n display: flex;\n gap: var(--boemly-space-6);\n justify-content: center;\n\n width: calc(\n (var(--boemly-sizes-sm) + var(--boemly-space-6)) *\n ${({ numberOfItems }: CarouselInnerContainerProps) => numberOfItems} +\n var(--boemly-space-6)\n );\n min-width: var(--boemly-sizes-full);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n justify-content: flex-start;\n width: calc(\n (var(--boemly-sizes-2xs) + var(--boemly-space-4)) *\n ${({ numberOfItems }: CarouselInnerContainerProps) => numberOfItems} +\n var(--boemly-space-6)\n );\n }\n`;\n\nexport const CardContainer = styled(Box)`\n width: var(--boemly-sizes-sm);\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n width: var(--boemly-sizes-2xs);\n\n margin-right: var(--boemly-space-4);\n\n &:first-of-type {\n margin-left: var(--boemly-space-6);\n }\n }\n`;\n","import { css } from '@emotion/react';\n\nexport const GLOBAL_STYLE = css`\n :root {\n --default-hero-height: calc(100vh - var(--boemly-space-24));\n }\n\n a {\n text-decoration: none;\n }\n`;\n","import comparisonMessagesDe from './slices/Comparison/messages.de';\nimport creditsAvailableBadgeMessagesDe from './components/CreditsAvailableBadge/messages.de';\nimport ctaMessagesDe from './slices/Cta/messages.de';\nimport customerCardMessagesDe from './components/CustomerCard/messages.de';\nimport customerQuoteCardMessagesDe from './components/CustomerQuoteCard/messages.de';\nimport glossaryMessagesDe from './slices/Glossary/messages.de';\nimport portfolioDocumentsDownloadListMessagesDe from './components/portfolio/DocumentsDownloadList/messages.de';\nimport projectFactsMessagesDe from './slices/ProjectFacts/messages.de';\nimport projectsMapMessagesDe from './slices/ProjectsMap/messages.de';\nimport portfolioProjectInfoMessagesDe from './components/portfolio/ProjectInfo/messages.de';\nimport portfolioProjectCardMessagesDe from './components/portfolio/PortfolioProjectCard/messages.de';\nimport portfolioSmallCheckoutMessagesDe from './components/portfolio/SmallCheckout/messages.de';\nimport shopCheckoutMessagesDe from './slices/ShopCheckout/messages.de';\nimport textCarouselMessagesDe from './slices/TextCarousel/messages.de';\nimport timelineMessagesDe from './slices/Timeline/messages.de';\n\nimport unitMessagesDe from './unit.messages.de';\n\nconst rootMessagesDe = {\n //\n // Components\n //\n ...creditsAvailableBadgeMessagesDe,\n ...portfolioDocumentsDownloadListMessagesDe,\n ...portfolioProjectCardMessagesDe,\n ...portfolioProjectInfoMessagesDe,\n ...portfolioSmallCheckoutMessagesDe,\n\n //\n // Slices\n //\n ...comparisonMessagesDe,\n ...ctaMessagesDe,\n ...customerCardMessagesDe,\n ...customerQuoteCardMessagesDe,\n ...glossaryMessagesDe,\n ...projectFactsMessagesDe,\n ...projectsMapMessagesDe,\n ...shopCheckoutMessagesDe,\n ...textCarouselMessagesDe,\n ...timelineMessagesDe,\n\n //\n // Units\n //\n ...unitMessagesDe,\n};\n\nexport default rootMessagesDe;\n","const messagesDe = {\n 'components.creditsAvailableBadge.text.yes': 'Credits verfügbar',\n 'components.creditsAvailableBadge.text.some': 'Einige verbleibende Credits',\n 'components.creditsAvailableBadge.text.no': 'Keine verbleibenden Credits',\n 'components.creditsAvailableBadge.text.notYet': 'Gutschriften bald verfügbar',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'features.portfolio.documentsDownloadList.projectDocuments':\n 'Projektdokumente',\n 'features.portfolio.documentsDownloadList.downloadDocument':\n 'Dokument herunterladen',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'components.portfolioProjectCard.text.yes': 'Credits verfügbar',\n 'components.portfolioProjectCard.text.some': 'Einige verbleibende Credits',\n 'components.portfolioProjectCard.text.no': 'Keine verbleibenden Credits',\n 'components.portfolioProjectCard.text.notYet': 'Gutschriften bald verfügbar',\n};\n\nexport default messagesDe;\n","const messagesDe = {\n 'features.projectInfo.projectInfo.value': 'Projekt Infos',\n 'features.projectInfo.properties.area': 'Projekt Fläche',\n 'features.projectInfo.properties.location': 'Standort',\n 'features.projectInfo.properties.start': 'Projekt Start Datum',\n 'features.projectInfo.properties.timeSpan': 'Projekt Zeitraum',\n 'features.projectInfo.properties.projectType': 'Projekt Typ',\n 'features.projectInfo.properties.projectDeveloper': 'Projekt Entwickler',\n 'features.projectInfo.properties.verificationStandard.label':\n 'Verifizierungsstandard',\n 'features.projectInfo.properties.verificationStandard.value.SilvaconsultFCSISO14':\n 'SILVACONSULT® Forest Carbon Standard, ISO 14064-2',\n 'features.projectInfo.properties.verificationStandard.value.MfKWCH':\n 'Methodik für Klimaschutzprojekte im Wald für die Schweiz',\n 'features.projectInfo.properties.forecastedAmountYear.label':\n 'Projektvolumen',\n 'features.projectInfo.properties.riskBuffer': 'Anteil Risikopuffer',\n\n 'features.projectInfo.properties.year':\n '{years} {years, plural, one {Jahr} other {Jahre} }',\n};\n\nexport default messagesDe;\n","const messagesDe = {\n 'portfolio.smallCheckout.price.taxNotIncluded': 'ohne Steuern',\n 'portfolio.smallCheckout.price.taxIncluded':\n 'Preis inklusive Steuern: {number}',\n\n 'portfolio.smallCheckout.contributionValueCurrency.label.CHF':\n 'Geben Sie den Beitrag in Fr. ein',\n 'portfolio.smallCheckout.contributionValueCurrency.label.EUR':\n 'Geben Sie den Beitrag in € ein',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.EUR': '€',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.CHF': 'Fr.',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.CHF':\n 'Der Wert muss mindestens 10 CHF betragen',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.EUR':\n 'Der Wert muss mindestens 10 Euro betragen.',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.empty':\n 'Bitte geben Sie einen Wert ein',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh':\n 'Für größere Einkäufe kontaktieren Sie bitte unser Verkaufsteam über den unten stehenden Button',\n\n 'portfolio.smallCheckout.contributionValueKgs.label': 'Beitrag in Tonnen',\n\n 'portfolio.smallCheckout.submitButton': 'Credits kaufen',\n\n 'portfolio.smallCheckout.cta.title':\n 'Möchten Sie mehr als 10.000 tCO₂ kaufen?',\n 'portfolio.smallCheckout.cta.subTitle':\n 'Für Unternehmenskunden bieten wir individuelle Lösungen an. Kontaktieren Sie uns.',\n 'portfolio.smallCheckout.cta.button': 'Unser Vertriebsteam kontaktieren',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.comparison.backgroundShapes': 'Hintergrundformen',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.cta.backgroundShapes': 'Dunkle Hintergrundformen',\n 'sections.cta.backgroundShapesLight': 'Helle Hintergrundformen',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.customerCard.more': 'Weiterlesen',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.customerQuoteCard.more': 'Weiterlesen',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.glossary.copyButtonLabel':\n 'Kopiere den Link zu diesem Abschnitt in die Zwischenablage',\n 'sections.glossary.copySuccessMessage': 'Link in die Zwischenablage kopiert',\n 'sections.glossary.copyFailureMessage':\n 'Link konnte nicht in die Zwischenablage kopiert werden',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.projectFacts.projectInfo.value': 'Projekt Infos',\n 'projects.projectFacts.properties.area': 'Fläche',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.projectsMap.link.text': 'Mehr Infos',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.shopCheckout.intro.price': 'Preis',\n\n 'sections.shopCheckout.contributionValue.label.EUR':\n 'Geben sie einen Betrag in € ein',\n 'sections.shopCheckout.contributionValue.label.CHF':\n 'Geben sie einen Betrag in CHF ein',\n 'sections.shopCheckout.contributionValue.unit.EUR': '€',\n 'sections.shopCheckout.contributionValue.unit.CHF': 'CHF',\n 'sections.shopCheckout.contributionValue.validation.empty':\n 'Bitte geben sie einen Betrag ein',\n 'sections.shopCheckout.contributionValue.validation.tooLow.EUR':\n 'Der Betrag muss mindestens 10 Euro sein',\n 'sections.shopCheckout.contributionValue.validation.tooLow.CHF':\n 'Der Betrag muss mindestens 10 CHF sein',\n 'sections.shopCheckout.contributionValue.validation.tooHigh':\n 'Für größere Einkäufe kontaktieren Sie bitte unser Verkaufsteam über office@tree.ly',\n\n 'sections.shopCheckout.summary.kg': 'Menge',\n 'sections.shopCheckout.summary.price': 'Preis',\n 'sections.shopCheckout.summary.price.taxNotIncluded': 'ohne Steuern',\n 'sections.shopCheckout.summary.price.taxIncluded':\n 'Preis inklusive Steuern: {number}',\n\n 'sections.shopCheckout.submit': 'Kaufen',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.textCarousel.moveRight': 'Nach rechts bewegen',\n 'sections.textCarousel.moveLeft': 'Nach links bewegen',\n};\nexport default messagesDe;\n","const messagesDe = {\n 'sections.timeline.backgroundShapes': 'Hintergrundformen',\n 'sections.timeline.showMoreButton': 'Drei weitere Meilensteine anzeigen',\n};\nexport default messagesDe;\n","const unitMessagesDe = {\n 'unit.formatter.tonsCo2': '{number} /tCO₂',\n 'unit.formatter.tonsCo2PerYear': '{number} tCO₂/Jahr',\n};\nexport default unitMessagesDe;\n","import { STRAPI_FALLBACK_LOCALE } from '../constants/strapi';\nimport rootMessagesDe from '../rootMessages.de';\nimport rootMessagesEn from '../rootMessages.en';\n\nconst messages = {\n en: rootMessagesEn,\n de: rootMessagesDe,\n};\n\nconst getMessages = (locale: string) => {\n const messagesLocale = Object.keys(messages).includes(`${locale}`)\n ? (locale as keyof typeof messages)\n : STRAPI_FALLBACK_LOCALE;\n\n return messages[messagesLocale];\n};\n\nexport default getMessages;\n","import comparisonMessagesEn from './slices/Comparison/messages.en';\nimport creditsAvailableBadgeMessagesEn from './components/CreditsAvailableBadge/messages.en';\nimport ctaMessagesEn from './slices/Cta/messages.en';\nimport customerCardMessagesEn from './components/CustomerCard/messages.en';\nimport customerQuoteCardMessagesEn from './components/CustomerQuoteCard/messages.en';\nimport glossaryMessagesEn from './slices/Glossary/messages.en';\nimport portfolioDocumentsDownloadListMessagesEn from './components/portfolio/DocumentsDownloadList/messages.en';\nimport projectFactsMessagesEn from './slices/ProjectFacts/messages.en';\nimport projectsMapMessagesEn from './slices/ProjectsMap/messages.en';\nimport portfolioProjectInfoMessagesEn from './components/portfolio/ProjectInfo/messages.en';\nimport portfolioProjectCardMessagesEn from './components/portfolio/PortfolioProjectCard/messages.en';\nimport portfolioSmallCheckoutMessagesEn from './components/portfolio/SmallCheckout/messages.en';\nimport shopCheckoutMessagesEn from './slices/ShopCheckout/messages.en';\nimport textCarouselMessagesEn from './slices/TextCarousel/messages.en';\nimport timelineMessagesEn from './slices/Timeline/messages.en';\n\nimport unitMessagesEn from './unit.messages.en';\n\nconst rootMessagesEn = {\n //\n // Components\n //\n ...creditsAvailableBadgeMessagesEn,\n ...portfolioDocumentsDownloadListMessagesEn,\n ...portfolioProjectCardMessagesEn,\n ...portfolioProjectInfoMessagesEn,\n ...portfolioSmallCheckoutMessagesEn,\n\n //\n // Slices\n //\n ...comparisonMessagesEn,\n ...ctaMessagesEn,\n ...customerCardMessagesEn,\n ...customerQuoteCardMessagesEn,\n ...glossaryMessagesEn,\n ...projectFactsMessagesEn,\n ...projectsMapMessagesEn,\n ...shopCheckoutMessagesEn,\n ...textCarouselMessagesEn,\n ...timelineMessagesEn,\n\n //\n // Units\n //\n ...unitMessagesEn,\n};\n\nexport default rootMessagesEn;\n","const messagesEn = {\n 'components.creditsAvailableBadge.text.yes': 'Credits available',\n 'components.creditsAvailableBadge.text.some': 'Some remaining credits',\n 'components.creditsAvailableBadge.text.no': 'No remaining credits',\n 'components.creditsAvailableBadge.text.notYet': 'Credits available soon',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'features.portfolio.documentsDownloadList.projectDocuments':\n 'Project documents',\n 'features.portfolio.documentsDownloadList.downloadDocument':\n 'Download document',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'components.portfolioProjectCard.text.yes': 'Credits available',\n 'components.portfolioProjectCard.text.some': 'Some remaining credits',\n 'components.portfolioProjectCard.text.no': 'No remaining credits',\n 'components.portfolioProjectCard.text.notYet': 'Credits available soon',\n};\n\nexport default messagesEn;\n","const messagesEn = {\n 'features.projectInfo.projectInfo.value': 'Project Infos',\n 'features.projectInfo.properties.area': 'Project Area',\n 'features.projectInfo.properties.location': 'Location',\n 'features.projectInfo.properties.start': 'Project Start Date',\n 'features.projectInfo.properties.timeSpan': 'Project Time Span',\n 'features.projectInfo.properties.projectType': 'Project Type',\n 'features.projectInfo.properties.projectDeveloper': 'Project Developer',\n 'features.projectInfo.properties.verificationStandard.label':\n 'Verification Standard',\n 'features.projectInfo.properties.verificationStandard.value.SilvaconsultFCSISO14':\n 'SILVACONSULT® Forest Carbon Standard, ISO 14064-2',\n 'features.projectInfo.properties.verificationStandard.value.MfKWCH':\n 'Methodik für Klimaschutzprojekte im Wald für die Schweiz',\n 'features.projectInfo.properties.forecastedAmountYear.label':\n 'Project Volume',\n 'features.projectInfo.properties.riskBuffer': 'Risk Buffer Share',\n\n 'features.projectInfo.properties.year':\n '{years} {years, plural, one {year} other {years} }',\n};\n\nexport default messagesEn;\n","const messagesEn = {\n 'portfolio.smallCheckout.price.taxNotIncluded': 'not including tax',\n 'portfolio.smallCheckout.price.taxIncluded': 'Price including tax: {number}',\n\n 'portfolio.smallCheckout.contributionValueCurrency.label.CHF':\n 'Contribution Amount in CHF',\n 'portfolio.smallCheckout.contributionValueCurrency.label.EUR':\n 'Contribution Amount in €',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.EUR': '€',\n 'portfolio.smallCheckout.contributionValueCurrency.unit.CHF': 'CHF',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.CHF':\n 'The value must be at least 10 CHF',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.EUR':\n 'The value must be at least 10 Euro',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.empty':\n 'Please enter a value',\n 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh':\n 'For bigger purchases please contact our sales team via office@tree.ly',\n\n 'portfolio.smallCheckout.contributionValueKgs.label':\n 'Contribution Amount in Tons',\n\n 'portfolio.smallCheckout.submitButton': 'Buy credits',\n\n 'portfolio.smallCheckout.cta.title': 'Looking to buy more than 10.000 tCO₂?',\n 'portfolio.smallCheckout.cta.subTitle':\n 'For enterprise-customers we offer custom solutions. Feel free to contact us.',\n 'portfolio.smallCheckout.cta.button': 'Contact our Sales Team',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'sections.comparison.backgroundShapes': 'Background shapes',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'sections.cta.backgroundShapesDark': 'Dark background shapes',\n 'sections.cta.backgroundShapesLight': 'Light background shapes',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'sections.customerCard.more': 'Read more',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'sections.customerQuoteCard.more': 'Read more',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'sections.glossary.copyButtonLabel':\n 'Copy a link to this section to your clipboard',\n 'sections.glossary.copySuccessMessage': 'Copied the link to your clipboard',\n 'sections.glossary.copyFailureMessage': 'Could not copy link to clipboard',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'sections.projectFacts.projectInfo.value': 'Project Infos',\n 'projects.projectFacts.properties.area': 'Area',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'sections.projectsMap.link.text': 'Show more info',\n};\nexport default messagesEn;\n","const messagesEn = {\n 'sections.shopCheckout.intro.price': 'Price',\n\n 'sections.shopCheckout.contributionValue.label.EUR':\n 'Enter contribution value in €',\n 'sections.shopCheckout.contributionValue.label.CHF':\n 'Enter contribution value in CHF',\n 'sections.shopCheckout.contributionValue.unit.EUR': '€',\n 'sections.shopCheckout.contributionValue.unit.CHF': 'CHF',\n 'sections.shopCheckout.contributionValue.validation.empty':\n 'Please enter a value',\n 'sections.shopCheckout.contributionValue.validation.tooLow.EUR':\n 'Der Betrag muss mindestens 10 Euro sein',\n 'sections.shopCheckout.contributionValue.validation.tooLow.CHF':\n 'Der Betrag muss mindestens 10 CHF sein',\n 'sections.shopCheckout.contributionValue.validation.tooHigh':\n 'For bigger purchases please contact our sales team via office@tree.ly',\n\n 'sections.shopCheckout.summary.kg': 'Quantity',\n 'sections.shopCheckout.summary.price': 'Price',\n 'sections.shopCheckout.summary.price.taxNotIncluded': 'not including tax',\n 'sections.shopCheckout.summary.price.taxIncluded':\n 'Price including tax: {number}',\n\n 'sections.shopCheckout.submit': 'Checkout',\n};\nexport default messagesEn;\n","const messagesDe = {\n 'sections.textCarousel.moveRight': 'Move right',\n 'sections.textCarousel.moveLeft': 'Move left',\n};\nexport default messagesDe;\n","const messagesEn = {\n 'sections.timeline.backgroundShapes': 'Background shapes',\n 'sections.timeline.showMoreButton': 'Show three more milestones',\n};\nexport default messagesEn;\n","const unitMessagesEn = {\n 'unit.formatter.tonsCo2': '{number} /tCO₂',\n 'unit.formatter.tonsCo2PerYear': '{number} tCO₂/year',\n};\nexport default unitMessagesEn;\n","import React, { createContext } from 'react';\nimport { createIntl, createIntlCache } from 'react-intl';\nimport { Global } from '@emotion/react';\nimport { GLOBAL_STYLE } from '../../constants/globalStyle';\nimport getMessages from '../../utils/getMessages';\n\nconst cache = createIntlCache();\n\nconst intlFactory = (locale: string) =>\n createIntl(\n {\n locale,\n messages: getMessages(locale),\n },\n cache\n );\n\nexport const IntlContext = createContext(intlFactory('en'));\n\nexport interface ContextProviderProps {\n children: React.ReactNode;\n locale: string;\n}\n\nexport const ContextProvider: React.FC<ContextProviderProps> = ({\n children,\n locale,\n}: ContextProviderProps): JSX.Element => {\n return (\n <>\n <Global styles={{ GLOBAL_STYLE }} />\n <IntlContext.Provider value={intlFactory(locale)}>\n {children}\n </IntlContext.Provider>\n </>\n );\n};\n","import React, { useContext, useMemo, useRef, useState } from 'react';\nimport {\n Box,\n Center,\n DefaultSectionContainer,\n DefaultSectionHeader,\n IconButton,\n TextCardWithIcon,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiTextCardWithIcon from '../../models/strapi/StrapiTextCardWithIcons';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport {\n CardContainer,\n CarouselContainer,\n CarouselInnerContainer,\n} from './styles';\nimport { useMeasure, useWindowSize } from 'react-use';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { ArrowLeft, ArrowRight } from '@phosphor-icons/react';\nimport { IntlContext } from '../../components/ContextProvider';\n\ninterface TextCarouselSlice extends StrapiDefaultHeader {\n slides: StrapiTextCardWithIcon[];\n button?: StrapiLink;\n}\nexport interface TextCarouselProps {\n slice: TextCarouselSlice;\n}\n\nconst ITEM_GAP = 24;\nconst MAX_OFFSET_RIGHT = 55;\n\nexport const TextCarousel: React.FC<TextCarouselProps> = ({\n slice,\n}: TextCarouselProps) => {\n const containerRef = useRef(null);\n const [primary50] = useToken('colors', ['primary.50']);\n const [itemRef, { width: itemWidth }] = useMeasure<HTMLDivElement>();\n const { formatMessage } = useContext(IntlContext);\n const { width: windowWidth } = useWindowSize();\n\n const [sliderIndex, setSliderIndex] = useState(0);\n\n const numberOfItems = useMemo(\n () => slice.slides.length,\n [slice.slides.length]\n );\n\n const sliderItemsWidth = useMemo(\n () => numberOfItems * (itemWidth + ITEM_GAP) - ITEM_GAP,\n [itemWidth, numberOfItems]\n );\n\n const offsetLeft = useMemo(\n () => sliderIndex * (itemWidth + ITEM_GAP) * -1,\n [sliderIndex, itemWidth]\n );\n\n const allowScroll = useMemo(\n () => sliderItemsWidth + ITEM_GAP * 2 > windowWidth,\n\n [sliderItemsWidth, windowWidth]\n );\n\n const canMoveRight = useMemo(() => {\n const offsetRight = windowWidth - (sliderItemsWidth + offsetLeft);\n\n return offsetRight < MAX_OFFSET_RIGHT;\n }, [itemWidth, sliderIndex, sliderItemsWidth, windowWidth]);\n\n const canMoveLeft = useMemo(() => sliderIndex !== 0, [sliderIndex]);\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center' }}\n titleProps={{ textAlign: 'center', maxW: '6xl', marginX: 'auto' }}\n textProps={{ textAlign: 'center', maxW: '2xl', marginX: 'auto' }}\n />\n </Wrapper>\n\n <CarouselContainer ref={containerRef}>\n <Box position=\"relative\" width=\"full\">\n <CarouselInnerContainer\n numberOfItems={slice.slides.length}\n animate={{\n x: offsetLeft,\n }}\n transition={{\n duration: 0.3,\n ease: 'easeInOut',\n }}\n >\n {slice.slides.map(({ id, title, text, icon }) => (\n <CardContainer key={id} ref={itemRef}>\n <TextCardWithIcon\n title={title}\n text={text}\n height=\"full\"\n icon={\n <Image\n src={strapiMediaUrl(icon.img, 'small')}\n alt={icon.alt}\n fill\n style={{ objectFit: icon.objectFit || 'contain' }}\n />\n }\n displayAs=\"column\"\n />\n </CardContainer>\n ))}\n </CarouselInnerContainer>\n <Box\n display={['none', null, null, !!allowScroll ? 'flex' : 'none']}\n pointerEvents=\"none\"\n position=\"absolute\"\n top=\"40%\"\n left=\"0\"\n width=\"full\"\n py=\"0\"\n px=\"32\"\n justifyContent=\"space-between\"\n >\n <Box>\n <AnimatePresence>\n {canMoveLeft && (\n <IconButton\n key=\"leftButton\"\n as={motion.button}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex - 1)}\n aria-label={formatMessage({\n id: 'sections.textCarousel.moveLeft',\n })}\n icon={<ArrowLeft size={16} />}\n pointerEvents=\"auto\"\n boxShadow=\"md\"\n />\n )}\n </AnimatePresence>\n </Box>\n <Box>\n <AnimatePresence>\n {canMoveRight && (\n <IconButton\n key=\"rightButton\"\n as={motion.button}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex + 1)}\n aria-label={formatMessage({\n id: 'sections.textCarousel.moveRight',\n })}\n icon={<ArrowRight size={16} />}\n pointerEvents=\"auto\"\n boxShadow=\"md\"\n />\n )}\n </AnimatePresence>\n </Box>\n </Box>\n </Box>\n </CarouselContainer>\n\n <>\n {slice.button && (\n <Wrapper>\n <Center>\n <StrapiLinkButton\n link={slice.button}\n size=\"xl\"\n mt={['8', null, '14']}\n />\n </Center>\n </Wrapper>\n )}\n </>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport {\n Box,\n ContactArea,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Grid,\n GridItem,\n TextCardWithIcon,\n useMediaQuery,\n useToken,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { useRouter } from 'next/router';\nimport { BREAKPOINT_LG_QUERY } from '../../constants/breakpoints';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiDefaultHeader from '../../models/strapi/StrapiDefaultHeader';\nimport StrapiContactArea from '../../models/strapi/StrapiContactArea';\nimport StrapiTextCardWithIcon from '../../models/strapi/StrapiTextCardWithIcons';\nimport StrapiImage from '../../models/strapi/StrapiImage';\n\ninterface TextWithTextCardsSlice extends StrapiDefaultHeader {\n cards: StrapiTextCardWithIcon[];\n contact?: StrapiContactArea;\n shape?: StrapiImage;\n}\nexport interface TextWithTextCardsProps {\n slice: TextWithTextCardsSlice;\n}\n\nexport const TextWithTextCards: React.FC<TextWithTextCardsProps> = ({\n slice,\n}: TextWithTextCardsProps) => {\n const { push } = useRouter();\n const [white] = useToken('colors', ['white']);\n const [belowBreakpoint] = useMediaQuery(BREAKPOINT_LG_QUERY);\n\n return (\n <DefaultSectionContainer backgroundColor={white} title={slice.title}>\n <>\n {slice.shape && (\n <Box\n position=\"absolute\"\n right={['-28', null, null, '-136']}\n top={['96', null, null, '-28']}\n width={['sm', null, null, '4xl']}\n height={['sm', null, null, '4xl']}\n borderBottomRightRadius=\"full\"\n >\n <Image\n src={strapiMediaUrl(slice.shape.img, 'medium')}\n alt={slice.shape.alt}\n fill\n style={{\n objectFit: slice.shape.objectFit || 'cover',\n borderBottomRightRadius: 'var(--boemly-radii-full)',\n }}\n />\n </Box>\n )}\n </>\n <Wrapper>\n <>\n <Grid\n templateColumns={[\n 'repeat(8, 1fr)',\n null,\n null,\n null,\n 'repeat(16, 1fr)',\n ]}\n templateRows={[\n 'repeat(2, auto)',\n null,\n null,\n null,\n 'repeat(1, auto)',\n ]}\n rowGap=\"12\"\n >\n <GridItem\n colSpan={[8, null, null, null, 9]}\n rowSpan={1}\n pr={['0', null, null, null, '32']}\n >\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n textProps={{ pr: ['0', null, null, null, '10'] }}\n />\n\n {slice.contact && !belowBreakpoint && (\n <ContactArea\n title={slice.contact.title}\n text={slice.contact.text}\n avatar={{\n name: slice.contact.avatar.name,\n description: slice.contact.avatar.description,\n image: (\n <Image\n src={strapiMediaUrl(\n slice.contact.avatar.image.img,\n 'small'\n )}\n alt={slice.contact.avatar.image.alt}\n fill\n style={{\n objectFit:\n slice.contact.avatar.image.objectFit || 'cover',\n }}\n />\n ),\n }}\n link={{\n text: slice.contact.button.text,\n onClick: () => push(strapiLinkUrl(slice.contact?.button)),\n }}\n />\n )}\n </GridItem>\n <GridItem\n colSpan={[8, null, null, null, 7]}\n rowSpan={1}\n position=\"relative\"\n >\n {slice.cards.map((card) => (\n <TextCardWithIcon\n key={card.id}\n title={card.title}\n text={card.text}\n icon={\n <Image\n src={strapiMediaUrl(card.icon.img, 'small')}\n alt={card.icon.alt}\n fill\n style={{ objectFit: card.icon.objectFit || 'contain' }}\n />\n }\n />\n ))}\n </GridItem>\n </Grid>\n {slice.contact && belowBreakpoint && (\n <ContactArea\n title={slice.contact.title}\n text={slice.contact.text}\n avatar={{\n name: slice.contact.avatar.name,\n description: slice.contact.avatar.description,\n image: (\n <Image\n src={strapiMediaUrl(\n slice.contact.avatar.image.img,\n 'small'\n )}\n alt={slice.contact.avatar.image.alt}\n fill\n style={{\n objectFit:\n slice.contact.avatar.image.objectFit || 'cover',\n }}\n />\n ),\n }}\n link={{\n text: slice.contact.button.text,\n onClick: () => push(strapiLinkUrl(slice.contact?.button)),\n }}\n />\n )}\n </>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","export const MAPBOX_TOKEN =\n 'pk.eyJ1IjoidHJlZS1seSIsImEiOiJja25rNG1heHgwNThjMnZwZTl2eThmeXUwIn0.SOrYUKfevZkbx8jZPxJesA';\n\nexport enum MapBoxStyle {\n Outdoors = 'mapbox://styles/mapbox/outdoors-v11',\n SatelliteStreets = 'mapbox://styles/mapbox/satellite-streets-v11',\n Satellite = 'mapbox://styles/mapbox/satellite-v9',\n CaliTerrain = 'mapbox://styles/tree-ly/clna54iq603ht01pbc199cszw',\n}\n\nexport const MAPBOX_TILES_URL = `${\n process.env.NEXT_PUBLIC_MAPBOX_TILES_URL || 'http://localhost:8123'\n}/vectortiles/v1/plots/{z}/{x}/{y}.mvt`;\nexport const MAPBOX_SOURCE_LAYER = 'plots';\nexport const MAPBOX_SOURCE_IDENTIFIER = 'plots';\nexport const MAPBOX_BORDER_LAYER_IDENTIFIER = 'plots-borders';\nexport const MAPBOX_FILL_LAYER_IDENTIFIER = 'plots-fill';\nexport const MAPBOX_TEXT_LAYER_IDENTIFIER = 'plots-text';\n\nexport const MAPBOX_TEXT_MIN_ZOOM = 15;\nexport const MAPBOX_SHAPES_MIN_ZOOM = 13;\n\nexport const MAPBOX_MAX_ZOOM = 19;\nexport const MAPBOX_INITIAL_ZOOM = 13;\n","import { FormatNumberOptions } from 'react-intl';\n\nexport const FORMAT_AS_EUR_CONFIG: FormatNumberOptions = {\n style: 'currency',\n currency: 'EUR',\n};\n\nexport const FORMAT_AS_METER_CONFIG: FormatNumberOptions = {\n unit: 'meter',\n unitDisplay: 'short',\n style: 'unit',\n maximumFractionDigits: 0,\n};\n\nexport const FORMAT_AS_HECTARE_CONFIG: FormatNumberOptions = {\n unit: 'hectare',\n unitDisplay: 'short',\n style: 'unit',\n maximumFractionDigits: 2,\n};\n\nexport const FORMAT_AS_CUBIC_METERS_PER_HECTARE_CONFIG: FormatNumberOptions = {\n maximumFractionDigits: 0,\n};\n\nexport const FORMAT_AS_PERCENT_CONFIG: FormatNumberOptions = {\n style: 'percent',\n maximumFractionDigits: 2,\n};\n","import React, { useContext } from 'react';\nimport { ProjectCard } from 'boemly';\nimport { PortfolioProject, strapiMediaUrl } from '../../..';\nimport CreditsAvailableState from '../../../models/CreditsAvailableState';\nimport { FORMAT_AS_HECTARE_CONFIG } from '../../../constants/formatter';\nimport Image from 'next/image';\nimport { IntlContext } from '../../ContextProvider';\n\nexport interface PortfolioProjectCardProps {\n project: PortfolioProject;\n}\n\nexport const PortfolioProjectCard = ({\n project,\n}: PortfolioProjectCardProps) => {\n const { formatMessage, formatNumber } = useContext(IntlContext);\n\n const creditsAvailableMessages: Record<CreditsAvailableState, string> = {\n [CreditsAvailableState.YES]: formatMessage({\n id: 'components.portfolioProjectCard.text.yes',\n }),\n\n [CreditsAvailableState.SOME]: formatMessage({\n id: 'components.portfolioProjectCard.text.some',\n }),\n\n [CreditsAvailableState.NO]: formatMessage({\n id: 'components.portfolioProjectCard.text.no',\n }),\n\n [CreditsAvailableState.NOT_YET]: formatMessage({\n id: 'components.portfolioProjectCard.text.notYet',\n }),\n };\n\n return (\n <ProjectCard\n title={project.title}\n facts={[\n {\n id: 1,\n text: formatNumber(\n (project.area || 0) / 10000,\n FORMAT_AS_HECTARE_CONFIG\n ),\n },\n { id: 2, text: project.location || '' },\n ]}\n footerTitle={\n creditsAvailableMessages[\n project.creditsAvailable ?? CreditsAvailableState.NOT_YET\n ]\n }\n footerSubTitle={project.footerSubTitle || ''}\n image={\n project.thumbnail && (\n <Image\n src={strapiMediaUrl(project.thumbnail?.img, 'medium')}\n alt={project.thumbnail?.alt}\n fill\n style={{\n objectFit: project.thumbnail?.objectFit || 'cover',\n }}\n />\n )\n }\n />\n );\n};\n","import React from 'react';\nimport {\n DefaultSectionContainer,\n DefaultSectionHeader,\n Grid,\n GridItem,\n ProjectCard,\n Spacer,\n BoemlyList,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport { ArrowRight } from '@phosphor-icons/react';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiProjectCard from '../../models/strapi/StrapiProjectCard';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport { IStrapiData, PortfolioProject, StrapiProject } from '../..';\nimport PortfolioProjectCard from '../../components/portfolio/PortfolioProjectCard';\n\ninterface TextWithCardSlice {\n tagline?: string;\n title: string;\n text?: string;\n listItems?: {\n id: number;\n text: string;\n }[];\n button?: StrapiLink;\n card?: StrapiProjectCard;\n project?: { data?: IStrapiData<StrapiProject> };\n cardPosition: 'left' | 'right';\n}\nexport interface TextWithCardProps {\n slice: TextWithCardSlice;\n projects: PortfolioProject[];\n}\n\nexport const TextWithCard: React.FC<TextWithCardProps> = ({\n slice,\n projects,\n}: TextWithCardProps) => {\n const portfolioProject = projects.find(\n (p) =>\n slice.project?.data?.attributes.fpmProjectId &&\n p.id === slice.project.data.attributes.fpmProjectId\n );\n\n const card = (\n <GridItem\n colSpan={[4, null, null, null, 2]}\n rowSpan={1}\n position=\"relative\"\n data-testid={`card-position-${slice.cardPosition}`}\n >\n {portfolioProject && <PortfolioProjectCard project={portfolioProject} />}\n {!portfolioProject && slice.card && (\n <ProjectCard\n facts={slice.card.facts}\n footerSubTitle={slice.card.footerSubTitle}\n footerTitle={slice.card.footerTitle}\n title={slice.card.title}\n image={\n <Image\n src={strapiMediaUrl(slice.card.image.img, 'medium')}\n alt={slice.card.image.alt}\n fill\n style={{ objectFit: slice.card.image.objectFit || 'cover' }}\n />\n }\n />\n )}\n </GridItem>\n );\n\n return (\n <DefaultSectionContainer title={slice.title}>\n <Wrapper>\n <Grid\n templateColumns={[\n 'repeat(4, auto)',\n null,\n null,\n null,\n 'repeat(6, auto)',\n ]}\n templateRows={[\n 'repeat(2, auto)',\n null,\n null,\n null,\n 'repeat(1, auto)',\n ]}\n rowGap=\"12\"\n columnGap={['0', null, null, null, '28']}\n >\n {slice.cardPosition === 'left' && card}\n <GridItem colSpan={4} rowSpan={1} position=\"relative\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n\n {slice.listItems && (\n <>\n <Spacer height=\"10\" />\n <BoemlyList listItems={slice.listItems} />\n <Spacer height=\"10\" />\n </>\n )}\n\n {slice.button && (\n <StrapiLinkButton\n link={slice.button}\n size=\"md\"\n colorScheme=\"white\"\n variant=\"outline\"\n rightIcon={<ArrowRight />}\n />\n )}\n </GridItem>\n {slice.cardPosition === 'right' && card}\n </Grid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport Link from 'next/link';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Heading,\n SimpleGrid,\n Text,\n Wrapper,\n} from 'boemly';\nimport { CaretRight } from '@phosphor-icons/react';\nimport { MEDIUM_TRANSITION_DURATION } from '../../constants/animations';\nimport strapiLinkUrl from '../../utils/strapiLinkUrl';\nimport StrapiLink from '../../models/strapi/StrapiLink';\n\ninterface LinkCardsGridSlice {\n tagline?: string;\n title: string;\n text?: string;\n cards: {\n id: number;\n title: string;\n text?: string;\n link: StrapiLink;\n }[];\n}\nexport interface LinkCardsGridProps {\n slice: LinkCardsGridSlice;\n}\n\nexport const LinkCardsGrid: React.FC<LinkCardsGridProps> = ({\n slice,\n}: LinkCardsGridProps) => (\n <DefaultSectionContainer title={slice.title}>\n <Wrapper>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n\n <SimpleGrid mt=\"16\" columns={[1, null, null, null, 2]} gap=\"4\">\n {slice.cards.map(({ id, title, text, link }) => (\n <Box\n key={id}\n as={Link}\n href={strapiLinkUrl(link)}\n data-testid=\"link\"\n px=\"10\"\n py=\"8\"\n borderStyle=\"solid\"\n borderWidth=\"thin\"\n borderColor=\"gray.200\"\n borderRadius=\"2xl\"\n display=\"flex\"\n flexDir=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n cursor=\"pointer\"\n transitionDuration={`${MEDIUM_TRANSITION_DURATION}s`}\n _hover={{ backgroundColor: 'gray.50' }}\n >\n <div>\n <Heading as=\"h4\" size=\"lg\">\n {title}\n </Heading>\n {text && (\n <Text mt=\"2\" size=\"smRegularNormal\">\n {text}\n </Text>\n )}\n </div>\n\n <Box\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n borderStyle=\"solid\"\n borderWidth=\"thin\"\n borderColor=\"gray.200\"\n borderRadius=\"2xl\"\n height=\"12\"\n width=\"12\"\n minWidth=\"12\"\n minHeight=\"12\"\n ml=\"6\"\n backgroundColor=\"white\"\n >\n <CaretRight />\n </Box>\n </Box>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n);\n","import React from 'react';\nimport {\n Box,\n DefaultSectionHeader,\n Flex,\n Gradient,\n Tag,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\nexport interface SmallHeroProps {\n slice: {\n tags?: {\n id: number;\n text: string;\n colorScheme: string;\n }[];\n tagline?: string;\n title: string;\n subTitle?: string;\n button?: StrapiLink;\n image?: StrapiImage;\n gradient?: boolean;\n };\n theme: 'dark' | 'light';\n}\n\nconst colors = {\n dark: {\n tagline: 'white',\n title: 'white',\n text: 'white',\n background: 'gray.900',\n },\n light: {\n tagline: 'primary.500',\n title: 'black',\n text: 'gray.500',\n background: 'primary.50',\n },\n};\n\nexport const SmallHero: React.FC<SmallHeroProps> = ({\n slice,\n theme,\n}: SmallHeroProps) => (\n <Box\n position=\"relative\"\n width=\"full\"\n height=\"xl\"\n backgroundColor={colors[theme].background}\n >\n {slice.image && (\n <>\n <Image\n src={strapiMediaUrl(slice.image.img, 'xLarge')}\n alt={slice.image.alt}\n fill\n style={{ objectFit: slice.image.objectFit || 'cover' }}\n />\n {slice.gradient && <Gradient />}\n </>\n )}\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"60%\"\n width=\"full\"\n textAlign=\"center\"\n transform=\"translateY(-50%)\"\n >\n <Wrapper>\n <>\n {slice.tags && (\n <Flex direction=\"row\" justify=\"center\" gap=\"2\" mb=\"4\" wrap=\"wrap\">\n {slice.tags.map(({ id, text, colorScheme }) => (\n <Tag\n key={id}\n colorScheme={colorScheme}\n size=\"md\"\n variant=\"subtle\"\n >\n {text}\n </Tag>\n ))}\n </Flex>\n )}\n <DefaultSectionHeader\n isHero\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n taglineProps={{\n color: colors[theme].tagline,\n textAlign: 'center',\n mx: 'auto',\n }}\n titleProps={{\n color: colors[theme].title,\n maxW: '4xl',\n textAlign: 'center',\n mx: 'auto',\n }}\n textProps={{\n maxW: '2xl',\n textAlign: 'center',\n mx: 'auto',\n color: colors[theme].text,\n }}\n />\n {slice.button && (\n <StrapiLinkButton link={slice.button} mt=\"6\" size=\"lg\" />\n )}\n </>\n </Wrapper>\n </Box>\n </Box>\n);\n","import styled from '@emotion/styled';\nimport { BREAKPOINT_MD } from '../../constants/breakpoints';\nimport { Box, Link } from 'boemly';\n\nexport const BlogItemContainer = styled(Link)`\n text-decoration: none;\n\n & div img {\n transition: transform var(--default-ease) var(--medium-transition-duration);\n }\n\n &:hover {\n text-decoration: none;\n\n & > div:first-of-type img {\n transform: scale(1.03);\n }\n }\n`;\n\nexport const ImageContainer = styled(Box)`\n width: 100%;\n height: var(--boemly-sizes-xs);\n position: relative;\n border-radius: var(--boemly-radii-2xl);\n\n // Fixes the flickering of borders during animation in Safari\n -webkit-mask-image: -webkit-radial-gradient(white, black);\n\n & span,\n div {\n border-radius: var(--boemly-radii-2xl);\n }\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n height: var(--boemly-sizes-3xs);\n }\n`;\n","import React, { useContext } from 'react';\nimport {\n Box,\n DatePersonPair,\n DefaultSectionContainer,\n Heading,\n SimpleGrid,\n Spacer,\n Text,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport Link from 'next/link';\nimport StrapiBlogPost from '../../models/strapi/StrapiBlogPost';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport { BlogItemContainer, ImageContainer } from './styles';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface BlogProps {\n slice: {\n blog_posts: IStrapiData<StrapiBlogPost>[];\n };\n blogPosts: IStrapiData<StrapiBlogPost>[];\n}\n\nexport const Blog: React.FC<BlogProps> = ({ slice, blogPosts }: BlogProps) => {\n const { formatDate } = useContext(IntlContext);\n const sortedBlogPosts = slice.blog_posts.sort(\n (a, b) =>\n new Date(b.attributes.createdAt).getTime() -\n new Date(a.attributes.createdAt).getTime()\n );\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2]} spacingX={56} spacingY={24}>\n {sortedBlogPosts.map(({ attributes }) => {\n const blogPost: IStrapiData<StrapiBlogPost> | undefined =\n blogPosts.find((bp) => bp.attributes.slug === attributes.slug);\n if (!blogPost) {\n return null;\n }\n return (\n <BlogItemContainer\n key={blogPost.attributes.slug}\n as={Link}\n href={`/blog/${blogPost.attributes.slug}`}\n >\n <ImageContainer>\n <Image\n src={strapiMediaUrl(blogPost.attributes.img.img, 'large')}\n alt={blogPost.attributes.img.alt}\n fill\n style={{\n objectFit: blogPost.attributes.img.objectFit || 'cover',\n }}\n />\n </ImageContainer>\n <Box px=\"2\" py=\"8\">\n {blogPost.attributes.category.data && (\n <Text size=\"smMonoUppercase\" color=\"primary.800\" mb=\"2\">\n {blogPost.attributes.category.data.attributes.name}\n </Text>\n )}\n <Heading size=\"lg\">{blogPost.attributes.title}</Heading>\n {blogPost.attributes.teaser && (\n <Text size=\"mdRegularNormal\" mt=\"2\">\n {blogPost.attributes.teaser}\n </Text>\n )}\n <Spacer height=\"4\" />\n <DatePersonPair\n date={formatDate(blogPost.attributes.createdAt)}\n person={\n blogPost.attributes.author.data\n ? {\n name: blogPost.attributes.author.data.attributes\n .name,\n image: (\n <Image\n src={strapiMediaUrl(\n blogPost.attributes.author.data.attributes.img\n .img,\n 'thumbnail'\n )}\n alt={\n blogPost.attributes.author.data.attributes.img\n .alt\n }\n fill\n style={{\n objectFit:\n blogPost.attributes.author.data.attributes\n .img.objectFit || 'cover',\n }}\n />\n ),\n }\n : undefined\n }\n />\n </Box>\n </BlogItemContainer>\n );\n })}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport { Box, DefaultSectionContainer, SimpleGrid, Wrapper } from 'boemly';\nimport Link from 'next/link';\nimport { MEDIUM_TRANSITION_DURATION } from '../../constants/animations';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport PortfolioProjectCard from '../../components/portfolio/PortfolioProjectCard';\nimport { IStrapi, IStrapiData, StrapiProject } from '../..';\n\nexport interface ProjectsGridProps {\n slice: {\n projects: IStrapi<IStrapiData<StrapiProject>[]>;\n };\n projects: PortfolioProject[];\n}\n\nconst ConditionalWrapper = ({\n condition,\n wrapper,\n children,\n}: {\n condition: boolean;\n wrapper: (children: JSX.Element) => JSX.Element;\n children: JSX.Element;\n}) => (condition ? wrapper(children) : children);\n\nexport const ProjectsGrid: React.FC<ProjectsGridProps> = ({\n projects,\n slice,\n}: ProjectsGridProps) => {\n const filteredProjects = projects.filter(\n (fpmProject) =>\n fpmProject.thumbnail &&\n slice.projects.data.some(\n (strapiProject) =>\n strapiProject.attributes.fpmProjectId === fpmProject.id\n )\n );\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2, null, 3]} gap=\"16\">\n {filteredProjects.map((project) => (\n <ConditionalWrapper\n key={project.id}\n condition={!!project.slug}\n wrapper={(children: JSX.Element) => (\n <Link\n href={`${project.portfolioHost || ''}/portfolio/${\n project.slug\n }`}\n passHref\n key={project.id}\n legacyBehavior\n >\n {children}\n </Link>\n )}\n >\n <Box\n width=\"full\"\n as=\"a\"\n cursor=\"pointer\"\n borderRadius=\"2xl\"\n transition={`box-shadow ease ${MEDIUM_TRANSITION_DURATION}s`}\n _hover={{ boxShadow: 'lg' }}\n >\n <PortfolioProjectCard project={project} />\n </Box>\n </ConditionalWrapper>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","export const FONT_CUSTOMIZATIONS = {\n body: 'Inter',\n heading: 'Inter',\n display: 'GintoNord',\n mono: 'SpaceMono',\n};\n","import React from 'react';\nimport { FONT_CUSTOMIZATIONS } from '../../constants/fontCustomizations';\nimport { BoemlyThemeProvider } from 'boemly';\nimport { IntlProvider } from 'react-intl';\nimport getMessages from '../../utils/getMessages';\n\ninterface MinimalProvidersProps {\n locale: string;\n children: JSX.Element | JSX.Element[];\n}\n\nconst MinimalProviders = ({ children, locale }: MinimalProvidersProps) => (\n <IntlProvider messages={getMessages(locale)} locale={locale}>\n <BoemlyThemeProvider fonts={FONT_CUSTOMIZATIONS}>\n {children}\n </BoemlyThemeProvider>\n </IntlProvider>\n);\n\nexport default MinimalProviders;\n","import React, { useContext } from 'react';\nimport CreditsAvailableState from '../../models/CreditsAvailableState';\nimport { Badge } from 'boemly';\nimport NextLink from 'next/link';\nimport { IntlContext } from '../ContextProvider';\n\nexport interface CreditsAvailableBadgeProps {\n status: CreditsAvailableState;\n href?: string;\n}\n\nconst CreditsAvailableBadge = ({\n status,\n href,\n}: CreditsAvailableBadgeProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n const variants: Record<\n CreditsAvailableState,\n { color: string; text: string }\n > = {\n [CreditsAvailableState.YES]: {\n color: 'green',\n text: formatMessage({ id: 'components.creditsAvailableBadge.text.yes' }),\n },\n [CreditsAvailableState.SOME]: {\n color: 'orange',\n text: formatMessage({ id: 'components.creditsAvailableBadge.text.some' }),\n },\n [CreditsAvailableState.NO]: {\n color: 'red',\n text: formatMessage({ id: 'components.creditsAvailableBadge.text.no' }),\n },\n [CreditsAvailableState.NOT_YET]: {\n color: 'blue',\n text: formatMessage({\n id: 'components.creditsAvailableBadge.text.notYet',\n }),\n },\n };\n\n const variant = variants[status];\n\n return (\n <Badge\n as={href ? NextLink : undefined}\n href={href}\n colorScheme={variant.color}\n width=\"fit-content\"\n >\n {variant.text}\n </Badge>\n );\n};\n\nexport default CreditsAvailableBadge;\n","import React, { useContext } from 'react';\nimport {\n Box,\n Button,\n Container,\n Flex,\n Heading,\n Text,\n useDisclosure,\n useToken,\n} from 'boemly';\nimport { MapPin } from '@phosphor-icons/react';\nimport NextLink from 'next/link';\nimport CreditsAvailableBadge from '../../components/CreditsAvailableBadge';\nimport CreditsAvailableState from '../../models/CreditsAvailableState';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface MapMarkerProps {\n title: string;\n isPublic?: boolean;\n projectDeveloper?: string;\n slug?: string;\n portfolioHost?: string;\n creditsAvailable?: CreditsAvailableState;\n}\n\nconst MapMarker = ({\n title,\n projectDeveloper,\n slug,\n creditsAvailable,\n portfolioHost = '',\n isPublic = false,\n}: MapMarkerProps) => {\n const { formatMessage } = useContext(IntlContext);\n const { isOpen, onOpen, onClose } = useDisclosure();\n const blue600 = useToken('colors', 'blue.600');\n\n return (\n <Flex\n position=\"absolute\"\n gap=\"4\"\n onMouseEnter={onOpen}\n onMouseLeave={onClose}\n cursor=\"grab\"\n >\n <Box\n as={slug ? NextLink : undefined}\n href={slug && `${portfolioHost}/portfolio/${slug}`}\n >\n <MapPin\n size=\"40px\"\n color={blue600}\n weight=\"fill\"\n data-testid=\"mapmarker-pin\"\n filter=\"drop-shadow(0px 0px 2px #FFF)\"\n />\n </Box>\n\n {isPublic && isOpen && (\n <Container\n shadow=\"md\"\n width=\"max-content\"\n minWidth=\"3xs\"\n maxWidth={['3xs', null, null, 'sm']}\n >\n <Flex direction=\"column\">\n {creditsAvailable && (\n <>\n <CreditsAvailableBadge\n status={creditsAvailable}\n href={slug && `${portfolioHost}/portfolio/${slug}`}\n />\n <Box height=\"3\" />\n </>\n )}\n\n <Heading size=\"md\">{title}</Heading>\n\n {projectDeveloper && (\n <Text size=\"smLowNormal\" mt=\"1\">\n {projectDeveloper}\n </Text>\n )}\n\n {slug && (\n <Button\n width=\"fit-content\"\n variant=\"outline\"\n size=\"sm\"\n as={NextLink}\n href={`${portfolioHost}/portfolio/${slug}`}\n mt=\"4\"\n whiteSpace=\"nowrap\"\n >\n {formatMessage({ id: 'sections.projectsMap.link.text' })}\n </Button>\n )}\n </Flex>\n </Container>\n )}\n </Flex>\n );\n};\n\nexport default MapMarker;\n","import { css } from '@emotion/react';\n\nconst mapboxStyle = css`\n .mapboxgl-map {\n -webkit-tap-highlight-color: rgb(0 0 0/0);\n font: 12px/20px Helvetica Neue, Arial, Helvetica, sans-serif;\n overflow: hidden;\n position: relative;\n }\n .mapboxgl-canvas {\n left: 0;\n position: absolute;\n top: 0;\n }\n .mapboxgl-map:-webkit-full-screen {\n height: 100%;\n width: 100%;\n }\n .mapboxgl-canary {\n background-color: salmon;\n }\n .mapboxgl-canvas-container.mapboxgl-interactive,\n .mapboxgl-ctrl-group button.mapboxgl-ctrl-compass {\n cursor: grab;\n -webkit-user-select: none;\n user-select: none;\n }\n .mapboxgl-canvas-container.mapboxgl-interactive.mapboxgl-track-pointer {\n cursor: pointer;\n }\n .mapboxgl-canvas-container.mapboxgl-interactive:active,\n .mapboxgl-ctrl-group button.mapboxgl-ctrl-compass:active {\n cursor: grabbing;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate,\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate .mapboxgl-canvas {\n touch-action: pan-x pan-y;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-drag-pan,\n .mapboxgl-canvas-container.mapboxgl-touch-drag-pan .mapboxgl-canvas {\n touch-action: pinch-zoom;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan,\n .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan\n .mapboxgl-canvas {\n touch-action: none;\n }\n .mapboxgl-ctrl-bottom-left,\n .mapboxgl-ctrl-bottom-right,\n .mapboxgl-ctrl-top-left,\n .mapboxgl-ctrl-top-right {\n pointer-events: none;\n position: absolute;\n z-index: 2;\n }\n .mapboxgl-ctrl-top-left {\n left: 0;\n top: 0;\n }\n .mapboxgl-ctrl-top-right {\n right: 0;\n top: 0;\n }\n .mapboxgl-ctrl-bottom-left {\n bottom: 0;\n left: 0;\n }\n .mapboxgl-ctrl-bottom-right {\n bottom: 0;\n right: 0;\n }\n .mapboxgl-ctrl {\n clear: both;\n pointer-events: auto;\n transform: translate(0);\n }\n .mapboxgl-ctrl-top-left .mapboxgl-ctrl {\n float: left;\n margin: 10px 0 0 10px;\n }\n .mapboxgl-ctrl-top-right .mapboxgl-ctrl {\n float: right;\n margin: 10px 10px 0 0;\n }\n .mapboxgl-ctrl-bottom-left .mapboxgl-ctrl {\n float: left;\n margin: 0 0 10px 10px;\n }\n .mapboxgl-ctrl-bottom-right .mapboxgl-ctrl {\n float: right;\n margin: 0 10px 10px 0;\n }\n .mapboxgl-ctrl-group {\n background: #fff;\n border-radius: 4px;\n }\n .mapboxgl-ctrl-group:not(:empty) {\n box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1);\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl-group:not(:empty) {\n box-shadow: 0 0 0 2px ButtonText;\n }\n }\n .mapboxgl-ctrl-group button {\n background-color: transparent;\n border: 0;\n box-sizing: border-box;\n cursor: pointer;\n display: block;\n height: 29px;\n outline: none;\n overflow: hidden;\n padding: 0;\n width: 29px;\n }\n .mapboxgl-ctrl-group button + button {\n border-top: 1px solid #ddd;\n }\n .mapboxgl-ctrl button .mapboxgl-ctrl-icon {\n background-position: 50%;\n background-repeat: no-repeat;\n display: block;\n height: 100%;\n width: 100%;\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl-icon {\n background-color: transparent;\n }\n .mapboxgl-ctrl-group button + button {\n border-top: 1px solid ButtonText;\n }\n }\n .mapboxgl-ctrl-attrib-button:focus,\n .mapboxgl-ctrl-group button:focus {\n box-shadow: 0 0 2px 2px #0096ff;\n }\n .mapboxgl-ctrl button:disabled {\n cursor: not-allowed;\n }\n .mapboxgl-ctrl button:disabled .mapboxgl-ctrl-icon {\n opacity: 0.25;\n }\n .mapboxgl-ctrl-group button:first-of-type {\n border-radius: 4px 4px 0 0;\n }\n .mapboxgl-ctrl-group button:last-of-type {\n border-radius: 0 0 4px 4px;\n }\n .mapboxgl-ctrl-group button:only-of-type {\n border-radius: inherit;\n }\n .mapboxgl-ctrl button:not(:disabled):hover {\n background-color: rgb(0 0 0/5%);\n }\n .mapboxgl-ctrl-group button:focus:focus-visible {\n box-shadow: 0 0 2px 2px #0096ff;\n }\n .mapboxgl-ctrl-group button:focus:not(:focus-visible) {\n box-shadow: none;\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E\");\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E\");\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E\");\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23999'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23aaa'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='%23f00'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-waiting\n .mapboxgl-ctrl-icon {\n animation: mapboxgl-spin 2s linear infinite;\n }\n @media (-ms-high-contrast: active) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23999'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='%23f00'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl\n button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error\n .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23000'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E\");\n }\n .mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23666'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='%23f00'/%3E%3C/svg%3E\");\n }\n }\n @keyframes mapboxgl-spin {\n 0% {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(1turn);\n }\n }\n a.mapboxgl-ctrl-logo {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='clip'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/mask%3E%3Cg id='outline' opacity='0.3' stroke='%23000' stroke-width='3'%3E%3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E%3C/g%3E%3Cg id='fill' opacity='0.9' fill='%23fff'%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/g%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n cursor: pointer;\n display: block;\n height: 23px;\n margin: 0 0 -4px -4px;\n overflow: hidden;\n width: 88px;\n }\n a.mapboxgl-ctrl-logo.mapboxgl-compact {\n width: 23px;\n }\n @media (-ms-high-contrast: active) {\n a.mapboxgl-ctrl-logo {\n background-color: transparent;\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='clip'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/mask%3E%3Cg id='outline' opacity='1' stroke='%23000' stroke-width='3'%3E%3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E%3C/g%3E%3Cg id='fill' opacity='1' fill='%23fff'%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/g%3E%3C/svg%3E\");\n }\n }\n @media (-ms-high-contrast: black-on-white) {\n a.mapboxgl-ctrl-logo {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='clip'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/mask%3E%3Cg id='outline' opacity='1' stroke='%23fff' stroke-width='3' fill='%23fff'%3E%3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E%3C/g%3E%3Cg id='fill' opacity='1' fill='%23000'%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/g%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl.mapboxgl-ctrl-attrib {\n background-color: hsla(0, 0%, 100%, 0.5);\n margin: 0;\n padding: 0 5px;\n }\n @media screen {\n .mapboxgl-ctrl-attrib.mapboxgl-compact {\n background-color: #fff;\n border-radius: 12px;\n margin: 10px;\n min-height: 20px;\n padding: 2px 24px 2px 0;\n position: relative;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact-show {\n padding: 2px 28px 2px 8px;\n visibility: visible;\n }\n .mapboxgl-ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact-show,\n .mapboxgl-ctrl-top-left > .mapboxgl-ctrl-attrib.mapboxgl-compact-show {\n border-radius: 12px;\n padding: 2px 8px 2px 28px;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner {\n display: none;\n }\n .mapboxgl-ctrl-attrib-button {\n background-color: hsla(0, 0%, 100%, 0.5);\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E\");\n border: 0;\n border-radius: 12px;\n box-sizing: border-box;\n cursor: pointer;\n display: none;\n height: 24px;\n outline: none;\n position: absolute;\n right: 0;\n top: 0;\n width: 24px;\n }\n .mapboxgl-ctrl-bottom-left .mapboxgl-ctrl-attrib-button,\n .mapboxgl-ctrl-top-left .mapboxgl-ctrl-attrib-button {\n left: 0;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-button,\n .mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-inner {\n display: block;\n }\n .mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-button {\n background-color: rgb(0 0 0/5%);\n }\n .mapboxgl-ctrl-bottom-right > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n bottom: 0;\n right: 0;\n }\n .mapboxgl-ctrl-top-right > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n right: 0;\n top: 0;\n }\n .mapboxgl-ctrl-top-left > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n left: 0;\n top: 0;\n }\n .mapboxgl-ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n bottom: 0;\n left: 0;\n }\n }\n @media screen and (-ms-high-contrast: active) {\n .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' fill='%23fff'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E\");\n }\n }\n @media screen and (-ms-high-contrast: black-on-white) {\n .mapboxgl-ctrl-attrib.mapboxgl-compact:after {\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E\");\n }\n }\n .mapboxgl-ctrl-attrib a {\n color: rgba(0, 0, 0, 0.75);\n text-decoration: none;\n }\n .mapboxgl-ctrl-attrib a:hover {\n color: inherit;\n text-decoration: underline;\n }\n .mapboxgl-ctrl-attrib .mapbox-improve-map {\n font-weight: 700;\n margin-left: 2px;\n }\n .mapboxgl-attrib-empty {\n display: none;\n }\n .mapboxgl-ctrl-scale {\n background-color: hsla(0, 0%, 100%, 0.75);\n border: 2px solid #333;\n border-top: #333;\n box-sizing: border-box;\n color: #333;\n font-size: 10px;\n padding: 0 5px;\n white-space: nowrap;\n }\n .mapboxgl-popup {\n display: flex;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n will-change: transform;\n }\n .mapboxgl-popup-anchor-top,\n .mapboxgl-popup-anchor-top-left,\n .mapboxgl-popup-anchor-top-right {\n flex-direction: column;\n }\n .mapboxgl-popup-anchor-bottom,\n .mapboxgl-popup-anchor-bottom-left,\n .mapboxgl-popup-anchor-bottom-right {\n flex-direction: column-reverse;\n }\n .mapboxgl-popup-anchor-left {\n flex-direction: row;\n }\n .mapboxgl-popup-anchor-right {\n flex-direction: row-reverse;\n }\n .mapboxgl-popup-tip {\n border: 10px solid transparent;\n height: 0;\n width: 0;\n z-index: 1;\n }\n .mapboxgl-popup-anchor-top .mapboxgl-popup-tip {\n align-self: center;\n border-bottom-color: #fff;\n border-top: none;\n }\n .mapboxgl-popup-anchor-top-left .mapboxgl-popup-tip {\n align-self: flex-start;\n border-bottom-color: #fff;\n border-left: none;\n border-top: none;\n }\n .mapboxgl-popup-anchor-top-right .mapboxgl-popup-tip {\n align-self: flex-end;\n border-bottom-color: #fff;\n border-right: none;\n border-top: none;\n }\n .mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip {\n align-self: center;\n border-bottom: none;\n border-top-color: #fff;\n }\n .mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-tip {\n align-self: flex-start;\n border-bottom: none;\n border-left: none;\n border-top-color: #fff;\n }\n .mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-tip {\n align-self: flex-end;\n border-bottom: none;\n border-right: none;\n border-top-color: #fff;\n }\n .mapboxgl-popup-anchor-left .mapboxgl-popup-tip {\n align-self: center;\n border-left: none;\n border-right-color: #fff;\n }\n .mapboxgl-popup-anchor-right .mapboxgl-popup-tip {\n align-self: center;\n border-left-color: #fff;\n border-right: none;\n }\n .mapboxgl-popup-close-button {\n background-color: transparent;\n border: 0;\n border-radius: 0 3px 0 0;\n cursor: pointer;\n position: absolute;\n right: 0;\n top: 0;\n }\n .mapboxgl-popup-close-button:hover {\n background-color: rgb(0 0 0/5%);\n }\n .mapboxgl-popup-content {\n background: #fff;\n border-radius: 3px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n padding: 10px 10px 15px;\n pointer-events: auto;\n position: relative;\n }\n .mapboxgl-popup-anchor-top-left .mapboxgl-popup-content {\n border-top-left-radius: 0;\n }\n .mapboxgl-popup-anchor-top-right .mapboxgl-popup-content {\n border-top-right-radius: 0;\n }\n .mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-content {\n border-bottom-left-radius: 0;\n }\n .mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-content {\n border-bottom-right-radius: 0;\n }\n .mapboxgl-popup-track-pointer {\n display: none;\n }\n .mapboxgl-popup-track-pointer * {\n pointer-events: none;\n user-select: none;\n }\n .mapboxgl-map:hover .mapboxgl-popup-track-pointer {\n display: flex;\n }\n .mapboxgl-map:active .mapboxgl-popup-track-pointer {\n display: none;\n }\n .mapboxgl-marker {\n left: 0;\n opacity: 1;\n position: absolute;\n top: 0;\n transition: opacity 0.2s;\n will-change: transform;\n }\n .mapboxgl-user-location-dot,\n .mapboxgl-user-location-dot:before {\n background-color: #1da1f2;\n border-radius: 50%;\n height: 15px;\n width: 15px;\n }\n .mapboxgl-user-location-dot:before {\n animation: mapboxgl-user-location-dot-pulse 2s infinite;\n content: '';\n position: absolute;\n }\n .mapboxgl-user-location-dot:after {\n border: 2px solid #fff;\n border-radius: 50%;\n box-shadow: 0 0 3px rgba(0, 0, 0, 0.35);\n box-sizing: border-box;\n content: '';\n height: 19px;\n left: -2px;\n position: absolute;\n top: -2px;\n width: 19px;\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading {\n height: 0;\n width: 0;\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after,\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:before {\n border-bottom: 7.5px solid #4aa1eb;\n content: '';\n position: absolute;\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:before {\n border-left: 7.5px solid transparent;\n transform: translateY(-28px) skewY(-20deg);\n }\n .mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after {\n border-right: 7.5px solid transparent;\n transform: translate(7.5px, -28px) skewY(20deg);\n }\n @keyframes mapboxgl-user-location-dot-pulse {\n 0% {\n opacity: 1;\n transform: scale(1);\n }\n 70% {\n opacity: 0;\n transform: scale(3);\n }\n to {\n opacity: 0;\n transform: scale(1);\n }\n }\n .mapboxgl-user-location-dot-stale {\n background-color: #aaa;\n }\n .mapboxgl-user-location-dot-stale:after {\n display: none;\n }\n .mapboxgl-user-location-accuracy-circle {\n background-color: #1da1f233;\n border-radius: 100%;\n height: 1px;\n width: 1px;\n }\n .mapboxgl-crosshair,\n .mapboxgl-crosshair .mapboxgl-interactive,\n .mapboxgl-crosshair .mapboxgl-interactive:active {\n cursor: crosshair;\n }\n .mapboxgl-boxzoom {\n background: #fff;\n border: 2px dotted #202020;\n height: 0;\n left: 0;\n opacity: 0.5;\n position: absolute;\n top: 0;\n width: 0;\n }\n @media print {\n .mapbox-improve-map {\n display: none;\n }\n }\n .mapboxgl-scroll-zoom-blocker,\n .mapboxgl-touch-pan-blocker {\n align-items: center;\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n display: flex;\n font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n sans-serif;\n height: 100%;\n justify-content: center;\n left: 0;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n text-align: center;\n top: 0;\n transition: opacity 0.75s ease-in-out;\n transition-delay: 1s;\n width: 100%;\n }\n .mapboxgl-scroll-zoom-blocker-show,\n .mapboxgl-touch-pan-blocker-show {\n opacity: 1;\n transition: opacity 0.1s ease-in-out;\n }\n .mapboxgl-canvas-container.mapboxgl-touch-pan-blocker-override.mapboxgl-scrollable-page,\n .mapboxgl-canvas-container.mapboxgl-touch-pan-blocker-override.mapboxgl-scrollable-page\n .mapboxgl-canvas {\n touch-action: pan-x pan-y;\n }\n`;\n\nexport default mapboxStyle;\n","import React, { useContext } from 'react';\nimport {\n MAPBOX_INITIAL_ZOOM,\n MAPBOX_MAX_ZOOM,\n MAPBOX_TOKEN,\n MapBoxStyle,\n} from '../../constants/mapbox';\nimport BBox from '../../models/BBox';\nimport mergeBoundingBoxes from '../../utils/mergeBoundingBoxes';\nimport { css } from '@emotion/react';\nimport {\n Box,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Wrapper,\n} from 'boemly';\nimport mapboxgl, { LngLatBoundsLike, LngLatLike, Map, Marker } from 'mapbox-gl';\nimport { MutableRefObject, createRef, useEffect, useRef } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport MinimalProviders from '../../components/MinimalProviders';\nimport MapMarker from './MapMarker';\nimport mapboxStyle from './mapboxStyle';\nimport { IntlContext } from '../../components/ContextProvider';\n\nmapboxgl.accessToken = MAPBOX_TOKEN;\n\nexport interface ProjectsMapProps {\n slice: {\n tagline?: string;\n title?: string;\n text?: string;\n\n defaultCenterCoordinates?: {\n latitude: number;\n longitude: number;\n };\n defaultZoomLevel?: number;\n };\n\n projects: PortfolioProject[];\n}\n\nexport const ProjectsMap: React.FC<ProjectsMapProps> = ({\n slice,\n projects,\n}: ProjectsMapProps) => {\n const { locale } = useContext(IntlContext);\n\n const filteredProjects = projects.filter(\n (project) => project.geom\n ) as (PortfolioProject & {\n geom: Pick<PortfolioProject, 'geom'>;\n })[];\n\n const center: LngLatLike | undefined = slice.defaultCenterCoordinates\n ? [\n slice.defaultCenterCoordinates.longitude,\n slice.defaultCenterCoordinates.latitude,\n ]\n : undefined;\n\n const bounds: LngLatBoundsLike | undefined = center\n ? undefined\n : mergeBoundingBoxes(\n filteredProjects.map(\n (p): BBox =>\n [\n ...p.geom.coordinates.map((c) => c - 0.2),\n ...p.geom.coordinates.map((c) => c + 0.2),\n ] as BBox\n )\n );\n\n const mapContainer = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const map = new Map({\n container: mapContainer.current || '',\n style: MapBoxStyle.CaliTerrain,\n center,\n zoom: slice.defaultZoomLevel || MAPBOX_INITIAL_ZOOM,\n maxZoom: MAPBOX_MAX_ZOOM,\n bounds,\n });\n\n filteredProjects\n // Sort by longitude, so that the markers are rendeed form right to left\n .sort((a, b) => b.geom.coordinates[0] - a.geom.coordinates[0])\n .forEach((project) => {\n const ref =\n createRef<HTMLDivElement>() as MutableRefObject<HTMLDivElement>;\n ref.current = document.createElement('div');\n\n createRoot(ref.current).render(\n <MinimalProviders locale={locale}>\n <MapMarker\n title={project.title}\n isPublic={project.isPublic}\n portfolioHost={project.portfolioHost}\n slug={project.slug}\n creditsAvailable={project.creditsAvailable}\n projectDeveloper={project.projectDeveloper?.name}\n />\n </MinimalProviders>\n );\n\n // Offset is needed to center the marker on the coordinates\n const marker = new Marker(ref.current, { offset: [-20, -40] });\n\n // No chaining here, because the mocks don't support it\n marker.setLngLat(project.geom.coordinates);\n marker.addTo(map);\n });\n\n // Clean up on unmount\n return () => map.remove();\n }, [locale]);\n\n return (\n <DefaultSectionContainer>\n <Box css={mapboxStyle}>\n <Wrapper>\n {slice.title ? (\n <>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n taglineProps={{ textAlign: 'center' }}\n titleProps={{\n textAlign: 'center',\n maxW: '6xl',\n marginX: 'auto',\n }}\n textProps={{\n textAlign: 'center',\n maxW: '3xl',\n marginX: 'auto',\n }}\n />\n <Box height=\"16\" />\n </>\n ) : (\n <></>\n )}\n\n <Box\n height=\"xl\"\n ref={mapContainer}\n borderRadius=\"xl\"\n overflow=\"hidden\"\n boxShadow={['md', null, null, 'none']}\n css={css`\n mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC);\n `}\n />\n </Wrapper>\n </Box>\n </DefaultSectionContainer>\n );\n};\n","import React, { useContext } from 'react';\nimport {\n Box,\n Container,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Gradient,\n Spacer,\n Wrapper,\n} from 'boemly';\nimport StrapiButtonWithVariant from '../../models/strapi/StrapiButtonWithVariant';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport Image from 'next/image';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport { CDN_URI } from '../../constants/api';\nimport { IntlContext } from '../../components/ContextProvider';\n\ntype Variant = 'gray' | 'green' | 'white';\n\nenum CtaCardType {\n Left = 'left',\n CenterWithoutImage = 'centerWithoutImage',\n CenterWithImage = 'centerWithImage',\n Right = 'right',\n}\n\nexport interface CtaProps {\n slice: {\n tagline?: string;\n title?: string;\n subTitle?: string;\n variant: Variant;\n ctaCards: CtaCard[];\n };\n}\n\nexport interface CtaCard {\n id: number;\n tagline?: string;\n title: string;\n subTitle?: string;\n image?: StrapiImage;\n buttons?: StrapiButtonWithVariant[];\n variant: Variant;\n backgroundShape: boolean;\n textAlign: 'left' | 'right' | 'center';\n}\n\nconst STATES: Record<CtaCardType, Record<string, any>> = {\n left: {\n textAlign: 'left',\n paddingTagline: '0',\n paddingTitle: '0',\n justifyContent: 'space-between',\n buttonJustifyContent: 'start',\n textMarginLeft: ['0', null, null, null, '14'],\n textMarginRight: '0',\n },\n centerWithoutImage: {\n textAlign: 'center',\n paddingTagline: '28',\n paddingTitle: '20',\n justifyContent: 'center',\n buttonJustifyContent: 'center',\n textMarginLeft: '0',\n textMarginRight: '0',\n },\n centerWithImage: {\n textAlign: 'center',\n paddingTagline: '28',\n paddingTitle: '20',\n justifyContent: 'center',\n buttonJustifyContent: 'center',\n textMarginLeft: '0',\n textMarginRight: '0',\n },\n right: {\n textAlign: 'left',\n paddingTagline: '0',\n paddingTitle: '0',\n justifyContent: 'start',\n buttonJustifyContent: 'start',\n textMarginLeft: '0',\n textMarginRight: ['0', null, null, null, '10'],\n },\n};\n\nconst VARIANTS: Record<Variant, Record<string, Record<CtaCardType, string>>> = {\n gray: {\n backgroundColor: {\n left: 'primary.50',\n centerWithoutImage: 'primary.50',\n centerWithImage: 'primary.50',\n right: 'primary.50',\n },\n taglineColor: {\n left: 'primary.500',\n centerWithoutImage: 'primary.500',\n centerWithImage: 'white',\n right: 'primary.500',\n },\n titleColor: {\n left: 'black',\n centerWithoutImage: 'black',\n centerWithImage: 'white',\n right: 'black',\n },\n subTitleColor: {\n left: 'black',\n centerWithoutImage: 'black',\n centerWithImage: 'white',\n right: 'black',\n },\n },\n green: {\n backgroundColor: {\n left: 'primary.800',\n centerWithoutImage: 'primary.800',\n centerWithImage: 'primary.800',\n right: 'primary.800',\n },\n taglineColor: {\n left: 'white',\n centerWithoutImage: 'white',\n centerWithImage: 'white',\n right: 'white',\n },\n titleColor: {\n left: 'white',\n centerWithoutImage: 'white',\n centerWithImage: 'white',\n right: 'white',\n },\n subTitleColor: {\n left: 'white',\n centerWithoutImage: 'white',\n centerWithImage: 'white',\n right: 'white',\n },\n },\n white: {\n backgroundColor: {\n left: 'white',\n centerWithoutImage: 'white',\n centerWithImage: 'primary.800',\n right: 'white',\n },\n taglineColor: {\n left: 'primary.500',\n centerWithoutImage: 'primary.500',\n centerWithImage: 'white',\n right: 'primary.500',\n },\n titleColor: {\n left: 'black',\n centerWithoutImage: 'black',\n centerWithImage: 'white',\n right: 'black',\n },\n subTitleColor: {\n left: 'black',\n centerWithoutImage: 'black',\n centerWithImage: 'white',\n right: 'black',\n },\n },\n};\n\nconst getTypeOfCard = (ctaCard: CtaCard): CtaCardType => {\n if (ctaCard.textAlign === 'center') {\n if (ctaCard.image) {\n return CtaCardType.CenterWithImage;\n }\n return CtaCardType.CenterWithoutImage;\n }\n if (ctaCard.textAlign === 'left') {\n return CtaCardType.Left;\n }\n return CtaCardType.Right;\n};\n\nexport const Cta: React.FC<CtaProps> = ({ slice }: CtaProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <DefaultSectionContainer\n backgroundColor={VARIANTS[slice.variant].backgroundColor.left}\n title={slice.title}\n >\n <Wrapper>\n {slice.title ? (\n <>\n <Flex alignItems=\"center\" flexDirection=\"column\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n taglineProps={{\n color: VARIANTS[slice.variant].taglineColor.left,\n textAlign: 'center',\n maxWidth: '3xl',\n }}\n title={slice.title}\n titleProps={{\n color: VARIANTS[slice.variant].titleColor.left,\n textAlign: 'center',\n width: 'full',\n maxWidth: '3xl',\n }}\n text={slice.subTitle}\n textProps={{\n color: VARIANTS[slice.variant].subTitleColor.left,\n textAlign: 'center',\n maxWidth: '3xl',\n }}\n />\n </Flex>\n <Spacer height={['16', null, null, null, '20']} />\n </>\n ) : (\n <></>\n )}\n <Flex gap=\"4\" flexDirection=\"column\">\n {slice.ctaCards.map((ctaCard) => {\n const ctaCardType = getTypeOfCard(ctaCard);\n\n return (\n <Container\n backgroundColor={\n VARIANTS[ctaCard.variant].backgroundColor[ctaCardType]\n }\n key={ctaCard.id}\n position=\"relative\"\n elevation=\"none\"\n >\n {ctaCard.image &&\n ctaCardType === CtaCardType.CenterWithImage ? (\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"0\"\n width=\"full\"\n height=\"full\"\n borderRadius=\"xl\"\n overflow=\"hidden\"\n >\n <Image\n src={strapiMediaUrl(ctaCard.image.img, 'large')}\n alt={ctaCard.image.alt}\n fill\n style={{\n objectFit: ctaCard.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n <Gradient />\n </Box>\n ) : (\n <></>\n )}\n {ctaCard.backgroundShape ? (\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"0\"\n width=\"full\"\n height=\"full\"\n >\n <Image\n src={\n ctaCardType === CtaCardType.CenterWithImage ||\n ctaCard.variant === 'green'\n ? `${CDN_URI}/assets/v3/strapi-slices/shapes-dark.svg`\n : `${CDN_URI}/assets/v3/strapi-slices/shapes-light.svg`\n }\n alt={formatMessage({\n id: `sections.cta.backgroundShapes${\n ctaCardType === CtaCardType.CenterWithImage ||\n ctaCard.variant === 'green'\n ? 'Dark'\n : 'Light'\n }`,\n })}\n fill\n style={{\n objectFit: 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n\n <Flex\n flexDir={['column', null, null, null, 'row']}\n flexGrow=\"1\"\n gap={['8', null, null, null, '16']}\n justifyContent={STATES[ctaCardType].justifyContent}\n >\n {ctaCard.image && ctaCardType === CtaCardType.Right ? (\n <Box\n position=\"relative\"\n height={['3xs', null, null, null, 'auto']}\n minWidth={[null, null, null, null, '50%']}\n >\n <Image\n src={strapiMediaUrl(ctaCard.image.img, 'xLarge')}\n alt={ctaCard.image.alt}\n fill\n style={{\n objectFit: ctaCard.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n\n <Box\n zIndex=\"base\"\n marginLeft={STATES[ctaCardType].textMarginLeft}\n marginRight={STATES[ctaCardType].textMarginRight}\n maxWidth=\"3xl\"\n >\n <Spacer height={['0', null, null, null, '20']} />\n\n <DefaultSectionHeader\n tagline={ctaCard.tagline}\n taglineProps={{\n textAlign: STATES[ctaCardType].textAlign,\n color:\n VARIANTS[ctaCard.variant].taglineColor[ctaCardType],\n paddingX: [\n '0',\n null,\n null,\n null,\n STATES[ctaCardType].paddingTagline,\n ],\n }}\n title={ctaCard.title}\n titleProps={{\n fontFamily: 'heading',\n fontSize: '4xl',\n fontWeight: '600',\n lineHeight: '9',\n textAlign: STATES[ctaCardType].textAlign,\n paddingX: [\n '0',\n null,\n null,\n null,\n STATES[ctaCardType].paddingTitle,\n ],\n color:\n VARIANTS[ctaCard.variant].titleColor[ctaCardType],\n }}\n text={ctaCard.subTitle}\n textProps={{\n textAlign: STATES[ctaCardType].textAlign,\n color:\n VARIANTS[ctaCard.variant].subTitleColor[ctaCardType],\n }}\n />\n {ctaCard.buttons && ctaCard.buttons.length > 0 ? (\n <>\n <Spacer height=\"8\" />\n <Flex\n gap=\"2\"\n justifyContent={\n STATES[ctaCardType].buttonJustifyContent\n }\n >\n {ctaCard.buttons &&\n ctaCard.buttons.map((button) => (\n <StrapiLinkButton\n key={button.button.id}\n link={button.button}\n size=\"md\"\n variant={button.variant}\n />\n ))}\n </Flex>\n </>\n ) : (\n <></>\n )}\n <Spacer height={['1', null, null, null, '20']} />\n </Box>\n {ctaCard.image && ctaCardType === CtaCardType.Left ? (\n <Box\n position=\"relative\"\n height={['3xs', null, null, null, 'auto']}\n minWidth={[null, null, null, null, '50%']}\n >\n <Image\n src={strapiMediaUrl(ctaCard.image.img, 'xLarge')}\n alt={ctaCard.image.alt}\n fill\n style={{\n objectFit: ctaCard.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n </Flex>\n </Container>\n );\n })}\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import BBox from '../models/BBox';\n\nconst mergeBoundingBoxes = (boundingBoxes: BBox[]): BBox => {\n let minLeft: number = 180;\n let minBottom: number = 90;\n let maxRight: number = -180;\n let maxTop: number = -90;\n\n boundingBoxes.forEach(([left, bottom, right, top]) => {\n if (left < minLeft) minLeft = left;\n if (bottom < minBottom) minBottom = bottom;\n if (right > maxRight) maxRight = right;\n if (top > maxTop) maxTop = top;\n });\n\n return [minLeft, minBottom, maxRight, maxTop];\n};\n\nexport default mergeBoundingBoxes;\n","import React from 'react';\nimport { Box, DefaultSectionContainer, Wrapper } from 'boemly';\nimport { useMeasure } from 'react-use';\n\ninterface VideoSlice {\n youTubeID: string;\n title: string;\n}\n\nexport interface VideoProps {\n slice: VideoSlice;\n}\n\nexport const Video: React.FC<VideoProps> = ({ slice }: VideoProps) => {\n const [ref, { width }] = useMeasure<HTMLDivElement>();\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <Box ref={ref} borderRadius=\"xl\">\n <iframe\n data-testid=\"video-iframe\"\n width={width}\n height={(width / 16) * 9}\n src={`https://www.youtube.com/embed/${slice.youTubeID}`}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n title={slice.title}\n style={{ borderRadius: 'var(--boemly-radii-xl)' }}\n />\n </Box>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport Image from 'next/image';\nimport {\n DefaultSectionContainer,\n Wrapper,\n AvatarWithName,\n Text,\n Box,\n} from 'boemly';\nimport StrapiAvatarWithName from '../../models/strapi/StrapiAvatarWithName';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\nexport interface FullWidthHighlightQuoteProps {\n slice: {\n tagline?: string;\n quote: string;\n avatarWithName: StrapiAvatarWithName;\n };\n}\n\nexport const FullWidthHighlightQuote: React.FC<\n FullWidthHighlightQuoteProps\n> = ({ slice }: FullWidthHighlightQuoteProps) => (\n <DefaultSectionContainer>\n <Wrapper>\n <Box maxWidth=\"5xl\" marginX=\"auto\" mb=\"8\">\n {slice.tagline && (\n <Text\n color=\"primary.700\"\n size=\"mdMonoUppercase\"\n textAlign=\"center\"\n mb=\"3\"\n >\n {slice.tagline}\n </Text>\n )}\n <Text color=\"black\" size=\"xlRegularNormalBold\" textAlign=\"center\">\n {slice.quote}\n </Text>\n </Box>\n <AvatarWithName\n name={slice.avatarWithName.name}\n description={slice.avatarWithName.description}\n image={\n <Image\n src={strapiMediaUrl(slice.avatarWithName.image.img, 'small')}\n alt={slice.avatarWithName.image.alt}\n fill\n style={{\n objectFit: slice.avatarWithName.image.objectFit || 'cover',\n }}\n />\n }\n orientation=\"vertical\"\n />\n </Wrapper>\n </DefaultSectionContainer>\n);\n","import { motion } from 'framer-motion';\nimport styled from '@emotion/styled';\nimport { BREAKPOINT_MD } from '../../constants/breakpoints';\nimport { Box } from 'boemly';\n\nexport const SliderContainer = styled(Box)`\n --mobile-image-width: calc(100vw - var(--boemly-space-24));\n --desktop-image-width: var(--boemly-sizes-md);\n\n width: var(--boemly-size-full);\n\n overflow-x: hidden;\n\n padding-left: max(\n var(--boemly-space-8),\n calc(50vw - var(--boemly-sizes-7xl) / 2 + var(--boemly-space-6))\n );\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n overflow-x: scroll;\n padding-left: max(\n var(--boemly-space-8),\n calc(50vw - var(--boemly-sizes-7xl) / 2 + var(--boemly-space-8))\n );\n }\n`;\n\ninterface SliderInnerContainerProps {\n imageCount: number;\n}\nexport const SliderInnerContainer = styled(\n motion.div\n)<SliderInnerContainerProps>`\n display: flex;\n gap: var(--boemly-space-6);\n\n width: fit-content;\n`;\n\nexport const ItemContainer = styled(Box)`\n width: var(--desktop-image-width);\n\n :last-of-type {\n margin-right: var(--boemly-space-8);\n }\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n width: var(--mobile-image-width);\n }\n`;\n\ninterface ImageContainerProps {\n aspectRatio: number;\n}\nexport const ImageContainer = styled(Box)<ImageContainerProps>`\n position: relative;\n\n max-height: var(--boemly-sizes-xl);\n height: calc(\n var(--desktop-image-width) /\n ${({ aspectRatio }: ImageContainerProps) => aspectRatio}\n );\n width: var(--desktop-image-width);\n\n border-radius: var(--boemly-radii-xl);\n\n & img {\n border-radius: var(--boemly-radii-xl);\n }\n\n @media screen and (max-width: ${BREAKPOINT_MD}) {\n height: calc(\n var(--mobile-image-width) /\n ${({ aspectRatio }: ImageContainerProps) => aspectRatio}\n );\n width: var(--mobile-image-width);\n }\n`;\n","const ALLOWED_RATIOS = [2 / 3, 1 / 1, 3 / 2];\n\nexport const getClosestRatio = (width: number, height: number): number => {\n const ratio = width / height;\n\n let minDiff = Math.abs(ratio - ALLOWED_RATIOS[0]);\n let posMinDiff = 0;\n\n ALLOWED_RATIOS.forEach((allowedRatio, index) => {\n if (Math.abs(ratio - allowedRatio) < minDiff) {\n minDiff = Math.abs(ratio - allowedRatio);\n posMinDiff = index;\n }\n });\n\n return ALLOWED_RATIOS[posMinDiff];\n};\n","import React, { useMemo, useRef, useState } from 'react';\nimport {\n Box,\n IconButton,\n DefaultSectionContainer,\n Flex,\n Text,\n useMediaQuery,\n} from 'boemly';\nimport Image from 'next/image';\nimport { useMeasure, useWindowSize } from 'react-use';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { ArrowLeft, ArrowRight } from '@phosphor-icons/react';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport FullScreenImage from '../../components/FullScreenImage';\nimport { BREAKPOINT_MD_QUERY } from '../../constants/breakpoints';\nimport {\n ItemContainer,\n SliderContainer,\n SliderInnerContainer,\n ImageContainer,\n} from './styles';\nimport { getClosestRatio } from './utils';\n\nexport interface FullWidthImageSliderProps {\n slice: {\n images: {\n id: number;\n caption: string;\n img: StrapiImage;\n }[];\n };\n}\n\nconst ITEM_GAP = 24;\nconst MAX_OFFSET_RIGHT = 162;\n\nexport const FullWidthImageSlider: React.FC<FullWidthImageSliderProps> = ({\n slice,\n}: FullWidthImageSliderProps) => {\n const containerRef = useRef(null);\n const [imageRef, { width: imageWidth }] = useMeasure<HTMLDivElement>();\n const { width: windowWidth } = useWindowSize();\n const [isMobile] = useMediaQuery(BREAKPOINT_MD_QUERY);\n\n const [sliderIndex, setSliderIndex] = useState(0);\n const [isOpen, setIsOpen] = useState(false);\n\n const numberOfItems = useMemo(\n () => slice.images.length,\n [slice.images.length]\n );\n\n const sliderItemsWidth = useMemo(\n () => numberOfItems * (imageWidth + ITEM_GAP) - ITEM_GAP,\n [imageWidth, numberOfItems]\n );\n\n const offsetLeft = useMemo(\n () => sliderIndex * (imageWidth + ITEM_GAP) * -1,\n [sliderIndex, imageWidth]\n );\n\n const allowScroll = useMemo(\n () => sliderItemsWidth + ITEM_GAP * 3 > windowWidth,\n\n [sliderItemsWidth, windowWidth]\n );\n\n const canMoveRight = useMemo(() => {\n const offsetRight = windowWidth - (sliderItemsWidth + offsetLeft);\n\n return offsetRight < MAX_OFFSET_RIGHT;\n }, [imageWidth, sliderIndex, sliderItemsWidth, windowWidth]);\n\n const canMoveLeft = useMemo(() => sliderIndex !== 0, [sliderIndex]);\n\n return (\n <DefaultSectionContainer>\n <SliderContainer ref={containerRef}>\n <SliderInnerContainer\n animate={{\n x: imageWidth * -sliderIndex,\n }}\n transition={{\n duration: 0.3,\n ease: 'easeInOut',\n }}\n imageCount={slice.images.length}\n >\n {slice.images.map((image, index) => (\n <ItemContainer key={image.id} ref={imageRef}>\n <Flex\n height=\"full\"\n width=\"full\"\n justifyContent=\"end\"\n flexDirection=\"column\"\n gap=\"2\"\n >\n <ImageContainer\n aspectRatio={getClosestRatio(\n image.img.img.data.attributes.width,\n image.img.img.data.attributes.height\n )}\n >\n <Image\n src={strapiMediaUrl(image.img.img, 'large')}\n alt={image.img.alt}\n fill\n style={{\n objectFit: image.img.objectFit || 'cover',\n cursor: isMobile ? 'unset' : 'pointer',\n }}\n onClick={() => {\n setSliderIndex(index);\n if (!isMobile) setIsOpen(true);\n }}\n />\n </ImageContainer>\n <Text height=\"6\">{image.caption}</Text>\n </Flex>\n </ItemContainer>\n ))}\n </SliderInnerContainer>\n </SliderContainer>\n\n <Box\n display={['none', null, null, !!allowScroll ? 'flex' : 'none']}\n pointerEvents=\"none\"\n position=\"absolute\"\n top=\"calc(50% - var(--boemly-sizes-12))\"\n left=\"0\"\n width=\"full\"\n py=\"0\"\n px=\"32\"\n justifyContent=\"space-between\"\n >\n <Box>\n <AnimatePresence>\n {canMoveLeft && (\n <IconButton\n key=\"leftButton\"\n as={motion.button}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex - 1)}\n aria-label=\"Move left\"\n icon={<ArrowLeft size={16} />}\n pointerEvents=\"auto\"\n />\n )}\n </AnimatePresence>\n </Box>\n <Box>\n <AnimatePresence>\n {canMoveRight && (\n <IconButton\n key=\"rightButton\"\n as={motion.button}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n size=\"lg\"\n variant=\"outline\"\n onClick={() => setSliderIndex(sliderIndex + 1)}\n aria-label=\"Move right\"\n icon={<ArrowRight size={16} />}\n pointerEvents=\"auto\"\n />\n )}\n </AnimatePresence>\n </Box>\n </Box>\n\n <FullScreenImage\n images={slice.images.map((image) => image.img)}\n currentIndex={sliderIndex}\n setCurrentIndex={setSliderIndex}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n />\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport {\n Box,\n DefaultSectionContainer,\n Grid,\n GridItem,\n SimpleGrid,\n Text,\n Wrapper,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\n\nexport interface SideBySideImagesProps {\n slice: {\n images: {\n id: number;\n caption: string;\n img: StrapiImage;\n }[];\n };\n}\nexport const SideBySideImages: React.FC<SideBySideImagesProps> = ({\n slice,\n}: SideBySideImagesProps) => (\n <DefaultSectionContainer>\n <Wrapper>\n <Grid templateColumns=\"repeat(12, 1fr)\" gap=\"4\">\n <GridItem colSpan={[12, null, null, 7]}>\n <SimpleGrid\n columns={[1, null, null, 2]}\n gap={['12', null, null, '6']}\n >\n {slice.images.map((image) => (\n <Box key={image.id}>\n <Box height=\"md\" position=\"relative\" borderRadius=\"xl\">\n <Image\n src={strapiMediaUrl(image.img.img, 'large')}\n alt={image.img.alt}\n fill\n style={{\n objectFit: image.img.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n <Text mt=\"3\" size=\"xsLowNormal\">\n {image.caption}\n </Text>\n </Box>\n ))}\n </SimpleGrid>\n </GridItem>\n </Grid>\n </Wrapper>\n </DefaultSectionContainer>\n);\n","import React from 'react';\nimport { Box, Wrapper } from 'boemly';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiLink from '../../models/strapi/StrapiLink';\n\nexport interface CtaOnlyProps {\n slice: {\n button: StrapiLink;\n };\n}\n\nexport const CtaOnly: React.FC<CtaOnlyProps> = ({ slice }: CtaOnlyProps) => (\n <Wrapper>\n <Box position=\"absolute\" top=\"-28\" transform=\"translateY(50%)\">\n <StrapiLinkButton size=\"md\" link={slice.button} />\n </Box>\n </Wrapper>\n);\n","import React, { useContext, useState } from 'react';\nimport {\n DefaultSectionContainer,\n Divider,\n Flex,\n GridItem,\n Heading,\n IconButton,\n SimpleGrid,\n Text,\n Wrapper,\n} from 'boemly';\nimport { Check, Link as LinkIcon } from '@phosphor-icons/react';\nimport { useCopyToClipboard } from 'react-use';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport StrapiGlossaryItem from '../../models/strapi/StrapiGlossaryItem';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface GlossaryProps {\n slice: {\n glossary_items: IStrapiData<StrapiGlossaryItem>[];\n };\n}\n\nexport const Glossary: React.FC<GlossaryProps> = ({ slice }: GlossaryProps) => {\n const [, copyToClipboard] = useCopyToClipboard();\n const { formatMessage } = useContext(IntlContext);\n const grouped: Record<string, StrapiGlossaryItem[]> = {};\n const [copiedItem, setCopiedItem] = useState<string>();\n\n slice.glossary_items\n .sort((a, b) => a.attributes.title.localeCompare(b.attributes.title))\n .forEach((curr) => {\n const index = curr.attributes.title.at(0)?.toUpperCase() || 'A';\n if (!grouped[index]) {\n grouped[index] = [];\n }\n grouped[index].push(curr.attributes);\n }, {});\n\n const handleAnchorClick = async (slug: string) => {\n if (window?.location) {\n const currentUrl = window.location.href.split('#')[0];\n copyToClipboard(`${currentUrl}#${slug}`);\n setCopiedItem(slug);\n\n setTimeout(() => {\n setCopiedItem(undefined);\n }, 1200);\n }\n };\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid>\n {Object.entries(grouped).map(([letter, items], index) => (\n <GridItem maxW=\"xl\" placeSelf=\"center\" key={letter}>\n <Heading size=\"3xl\" mb=\"8\">\n {letter}\n </Heading>\n\n <SimpleGrid spacing=\"6\">\n {items.map((item) => (\n <GridItem key={item.slug}>\n <Flex mb=\"2\" gap=\"1.5\" alignItems=\"center\">\n <Heading\n size=\"xl\"\n id={item.slug}\n scrollMarginTop=\"calc(var(--header-height) + var(--boemly-sizes-10))\"\n >\n {item.title}\n </Heading>\n <IconButton\n variant=\"ghost\"\n size=\"xs\"\n icon={\n copiedItem === item.slug ? (\n <Check size=\"16\" data-testid=\"check-icon\" />\n ) : (\n <LinkIcon size=\"16\" />\n )\n }\n title={formatMessage({\n id: 'sections.glossary.copyButtonLabel',\n })}\n aria-label={formatMessage({\n id: 'sections.glossary.copyButtonLabel',\n })}\n onClick={async () => handleAnchorClick(item.slug)}\n />\n </Flex>\n <Text color=\"black\">{item.text}</Text>\n </GridItem>\n ))}\n </SimpleGrid>\n\n {index !== Object.keys(grouped).length - 1 && (\n <Divider maxW=\"xl\" placeSelf=\"center\" mb=\"10\" mt=\"10\" />\n )}\n </GridItem>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React, { useContext, useCallback } from 'react';\nimport {\n Badge,\n BoemlyFormControl,\n Box,\n Button,\n Container,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Divider,\n Flex,\n InputRightAddon,\n LabelNumberPair,\n RichText,\n SimpleGrid,\n Spacer,\n useToken,\n Wrapper,\n} from 'boemly';\nimport { Field, FieldProps, Form, Formik, FormikProps } from 'formik';\nimport { FPM_API_URI } from '../../constants/api';\nimport CheckoutForm from '../../models/forms/CheckoutForm';\nimport {\n MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY,\n MINIMUM_CONTRIBUTION_VALUE_IN_MONEY,\n} from '../../constants/domain';\nimport { IntlContext } from '../../components/ContextProvider';\nimport { useRouter } from 'next/router';\n\nexport interface ShopCheckoutProps {\n slice: {\n tagline?: string;\n title: string;\n text?: string;\n badge?: string;\n batchId: string;\n pricePerKg: number;\n couponId?: string;\n initialContributionValue: number;\n checkoutText: string;\n currency: 'EUR' | 'CHF';\n taxInPercent?: number;\n };\n}\n\nexport const ShopCheckout = ({ slice }: ShopCheckoutProps): JSX.Element => {\n const [primary50] = useToken('colors', ['primary.50']);\n const { formatMessage, formatNumber, locale } = useContext(IntlContext);\n const { push } = useRouter();\n\n const validateForm = useCallback(\n (values: CheckoutForm) => {\n const errors: Partial<{ contributionValue: string }> = {};\n\n if (!values.contributionValue) {\n errors.contributionValue = formatMessage({\n id: 'sections.shopCheckout.contributionValue.validation.empty',\n });\n } else if (\n values.contributionValue < MINIMUM_CONTRIBUTION_VALUE_IN_MONEY\n ) {\n errors.contributionValue = formatMessage({\n id: `sections.shopCheckout.contributionValue.validation.tooLow.${slice.currency}`,\n });\n } else if (\n values.contributionValue > MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY\n ) {\n errors.contributionValue = formatMessage({\n id: 'sections.shopCheckout.contributionValue.validation.tooHigh',\n });\n }\n\n return errors;\n },\n [locale]\n );\n\n const onSubmit = ({ contributionValue }: CheckoutForm) => {\n const checkoutURL = new URL(`${FPM_API_URI}/v1/webhooks/shop/checkout`);\n const currentURL = new URL(window.location.href);\n\n checkoutURL.searchParams.append('batchId', slice.batchId);\n\n checkoutURL.searchParams.append(\n 'quantity',\n Math.floor(contributionValue / slice.pricePerKg).toString()\n );\n\n checkoutURL.searchParams.append('cancelPath', currentURL.pathname);\n\n if (slice.couponId)\n checkoutURL.searchParams.append('couponId', slice.couponId);\n\n push(checkoutURL.toString());\n };\n\n return (\n <DefaultSectionContainer backgroundColor={primary50} title={slice.title}>\n <Wrapper>\n <Flex\n flexDir={['column', null, null, null, 'row']}\n justifyContent=\"space-between\"\n alignItems={['left', null, null, null, 'center']}\n >\n <Box marginRight={['0', null, null, null, '36']} flexShrink={2}>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n </Box>\n <Container maxWidth=\"md\" padding=\"lg\" shadow=\"lg\">\n {slice.badge ? (\n <>\n <Badge\n colorScheme=\"green\"\n textTransform=\"none\"\n whiteSpace=\"unset\"\n >\n {slice.badge}\n </Badge>\n <Spacer height=\"3\" />\n </>\n ) : (\n <></>\n )}\n\n <RichText\n content={slice.checkoutText}\n textProps={{ color: 'gray.500' }}\n />\n\n <Spacer height=\"6\" />\n <Divider />\n <Spacer height=\"6\" />\n\n <LabelNumberPair\n label={formatMessage({ id: 'sections.shopCheckout.intro.price' })}\n number={`${formatNumber(slice.pricePerKg * 100, {\n style: 'currency',\n currency: slice.currency,\n })}/${formatNumber(100, {\n style: 'unit',\n unit: 'kilogram',\n })} CO₂`}\n caption={formatMessage({\n id: 'sections.shopCheckout.summary.price.taxNotIncluded',\n })}\n />\n\n <Spacer height=\"6\" />\n <Divider />\n <Spacer height=\"6\" />\n\n <Formik\n initialValues={{\n contributionValue: slice.initialContributionValue,\n }}\n validate={validateForm}\n onSubmit={onSubmit}\n >\n {({\n errors,\n touched,\n handleSubmit,\n values,\n }: FormikProps<CheckoutForm>) => {\n const summaryPrice =\n Math.floor(values.contributionValue / slice.pricePerKg) *\n slice.pricePerKg;\n\n return (\n <Form onSubmit={handleSubmit}>\n <Box width=\"full\">\n <Field name=\"contributionValue\">\n {({ field }: FieldProps) => (\n <BoemlyFormControl\n id=\"contributionValue\"\n size=\"md\"\n inputProps={{ type: 'number', ...field }}\n label={formatMessage({\n id: `sections.shopCheckout.contributionValue.label.${slice.currency}`,\n })}\n rightAddonsOrElements={[\n <InputRightAddon key=\"1\">\n {formatMessage({\n id: `sections.shopCheckout.contributionValue.unit.${slice.currency}`,\n })}\n </InputRightAddon>,\n ]}\n isInvalid={\n !!errors.contributionValue &&\n touched.contributionValue\n }\n errorMessage={errors.contributionValue}\n />\n )}\n </Field>\n </Box>\n\n <Spacer height=\"6\" />\n\n <SimpleGrid columns={2} gap=\"4\">\n <LabelNumberPair\n label={formatMessage({\n id: 'sections.shopCheckout.summary.kg',\n })}\n number={`${formatNumber(\n Math.floor(\n values.contributionValue / slice.pricePerKg\n ),\n {\n style: 'unit',\n unit: 'kilogram',\n maximumFractionDigits: 0,\n }\n )} CO₂`}\n />\n <LabelNumberPair\n label={formatMessage({\n id: 'sections.shopCheckout.summary.price',\n })}\n number={formatNumber(summaryPrice, {\n style: 'currency',\n currency: slice.currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}\n caption={\n slice.taxInPercent &&\n slice.taxInPercent > 0 &&\n summaryPrice > 0\n ? formatMessage(\n {\n id: 'sections.shopCheckout.summary.price.taxIncluded',\n },\n {\n number: formatNumber(\n summaryPrice +\n summaryPrice * (slice.taxInPercent / 100),\n {\n style: 'currency',\n currency: slice.currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }\n ),\n }\n )\n : ''\n }\n />\n </SimpleGrid>\n\n <Spacer height=\"6\" />\n\n <Button type=\"submit\" width=\"full\">\n {formatMessage({ id: 'sections.shopCheckout.submit' })}\n </Button>\n </Form>\n );\n }}\n </Formik>\n </Container>\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","export const MINIMUM_CONTRIBUTION_VALUE_IN_MONEY = 10;\n\nexport const MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY = 60_000;\n","import React from 'react';\nimport {\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n Spacer,\n Text,\n} from 'boemly';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiLink from '../../models/strapi/StrapiLink';\n\nexport interface FactsProps {\n slice: {\n tagline?: string;\n title?: string;\n subTitle?: string;\n button?: StrapiLink;\n variant: 'gray' | 'green' | 'white';\n facts: { key: string; value: string }[];\n };\n}\n\nconst VARIANTS = {\n gray: {\n backgroundColor: 'primary.50',\n tagLineColor: 'primary.500',\n titleColor: 'black',\n subTitleColor: 'black',\n factKeyColor: 'gray.700',\n factValueColor: 'gray.700',\n },\n green: {\n backgroundColor: 'primary.800',\n tagLineColor: 'white',\n titleColor: 'white',\n subTitleColor: 'white',\n factKeyColor: 'whiteAlpha.900',\n factValueColor: 'white',\n },\n white: {\n backgroundColor: 'white',\n tagLineColor: 'primary.500',\n titleColor: 'black',\n subTitleColor: 'black',\n factKeyColor: 'gray.700',\n factValueColor: 'gray.700',\n },\n};\n\nexport const Facts: React.FC<FactsProps> = ({ slice }: FactsProps) => (\n <DefaultSectionContainer\n backgroundColor={VARIANTS[slice.variant].backgroundColor}\n flexDir=\"column\"\n textAlign=\"center\"\n justifyContent=\"space-between\"\n paddingX={['6', null, '8']}\n title={slice.title}\n >\n <>\n {slice.title && (\n <>\n <DefaultSectionHeader\n tagline={slice.tagline}\n text={slice.subTitle}\n title={slice.title}\n taglineProps={{\n color: VARIANTS[slice.variant].tagLineColor,\n textAlign: 'center',\n }}\n titleProps={{\n color: VARIANTS[slice.variant].titleColor,\n textAlign: 'center',\n maxW: '6xl',\n marginX: 'auto',\n }}\n textProps={{\n color: VARIANTS[slice.variant].subTitleColor,\n textAlign: 'center',\n maxW: '3xl',\n marginX: 'auto',\n }}\n />\n <Spacer height={['0', null, '12']} />\n </>\n )}\n <Flex\n justifyContent={slice.facts.length < 3 ? 'center' : 'flex-start'}\n alignItems=\"center\"\n flexWrap=\"wrap\"\n mx={[null, null, null, '22', '28']}\n flexDir={['column', null, null, 'row']}\n gap={[null, null, null, '12']}\n >\n {slice.facts.map((fact) => (\n <Flex\n key={fact.key}\n flexDir=\"column\"\n width={[\n 'var(--boemly-sizes-full)',\n null,\n null,\n 'calc((var(--boemly-sizes-full) - var(--boemly-space-24))/ 3 )',\n ]}\n mt={['8', '8', '8', slice.facts.length > 3 ? '16' : '0']}\n >\n <Heading\n fontSize=\"6xl\"\n fontFamily=\"display\"\n lineHeight=\"10\"\n fontWeight=\"700\"\n color={VARIANTS[slice.variant].factValueColor}\n mb=\"2\"\n as=\"p\"\n >\n {fact.value}\n </Heading>\n\n <Text\n size=\"mdLowNormal\"\n color={VARIANTS[slice.variant].factKeyColor}\n >\n {fact.key}\n </Text>\n </Flex>\n ))}\n </Flex>\n\n {slice.button && (\n <>\n <Spacer height={['0', null, '20']} />\n <StrapiLinkButton\n link={slice.button}\n size=\"md\"\n variant={slice.variant === 'green' ? 'outline' : 'solid'}\n />\n </>\n )}\n </>\n </DefaultSectionContainer>\n);\n","import React, { useContext, useMemo } from 'react';\nimport {\n Text,\n Heading,\n Spacer,\n DatePersonPair,\n DefaultSectionHeader,\n DefaultSectionContainer,\n Wrapper,\n SimpleGrid,\n Box,\n Flex,\n useMediaQuery,\n useToken,\n} from 'boemly';\nimport Image from 'next/image';\nimport Link from 'next/link';\nimport { CaretRight } from '@phosphor-icons/react';\nimport StrapiBlogPost from '../../models/strapi/StrapiBlogPost';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiCategory from '../../models/strapi/StrapiCategory';\nimport IStrapi from '../../models/strapi/IStrapi';\nimport { BREAKPOINT_LG_QUERY } from '../../constants/breakpoints';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport { BlogItemContainer, ImageContainer } from '../Blog/styles';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface BlogCardsProps {\n slice: {\n tagline: string;\n title: string;\n subTitle: string;\n button?: StrapiLink;\n variant: 'white' | 'gray';\n blogPostCategory: IStrapi<IStrapiData<StrapiCategory> | null>;\n };\n blogPosts: IStrapiData<StrapiBlogPost>[];\n}\n\nconst VARIANTS = {\n white: {\n backgroundColor: 'white',\n },\n gray: {\n backgroundColor: 'primary.50',\n },\n};\n\nconst sortByCreatedAt = (\n a: IStrapiData<StrapiBlogPost>,\n b: IStrapiData<StrapiBlogPost>\n): number =>\n new Date(b.attributes.createdAt).getTime() -\n new Date(a.attributes.createdAt).getTime();\n\nexport const BlogCards: React.FC<BlogCardsProps> = ({\n slice,\n blogPosts,\n}: BlogCardsProps) => {\n const { formatDate } = useContext(IntlContext);\n const [mobile] = useMediaQuery(BREAKPOINT_LG_QUERY);\n const [gray700] = useToken('colors', ['gray.700']);\n\n const sortedBlogPosts = useMemo(\n () => blogPosts.sort(sortByCreatedAt),\n [blogPosts]\n );\n\n const blogPostsToDisplay = useMemo(\n () =>\n slice.blogPostCategory?.data?.attributes.name\n ? sortedBlogPosts\n .filter(\n (blogPost) =>\n blogPost.attributes.category.data?.attributes.name ===\n slice.blogPostCategory?.data?.attributes.name\n )\n .slice(0, 3)\n : sortedBlogPosts.slice(0, 3),\n [sortedBlogPosts, slice]\n );\n\n return (\n <DefaultSectionContainer\n backgroundColor={VARIANTS[slice.variant].backgroundColor}\n title={slice.title}\n >\n <Wrapper>\n {mobile || !slice.button ? (\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n titleProps={{ maxW: '2xl' }}\n textProps={{ maxW: '2xl' }}\n />\n ) : (\n <Flex justifyContent=\"space-between\" alignItems=\"center\" gap=\"60\">\n <Box>\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n />\n </Box>\n <Box minWidth=\"40\">\n <StrapiLinkButton\n link={slice.button}\n size=\"lg\"\n variant=\"outline\"\n rightIcon={<CaretRight color={gray700} />}\n />\n </Box>\n </Flex>\n )}\n <Spacer height=\"14\" />\n <SimpleGrid\n columns={[1, null, null, 3]}\n spacingX={4}\n spacingY={24}\n flexShrink=\"0\"\n >\n {blogPostsToDisplay.map((blogPost) => (\n <BlogItemContainer\n as={Link}\n href={`/blog/${blogPost.attributes.slug}`}\n data-testid=\"blog-item\"\n key={blogPost.attributes.slug}\n >\n <ImageContainer>\n <Image\n src={strapiMediaUrl(blogPost.attributes.img.img, 'medium')}\n alt={blogPost.attributes.img.alt}\n fill\n style={{\n objectFit: blogPost.attributes.img.objectFit || 'cover',\n }}\n />\n </ImageContainer>\n <Box px=\"2\" py=\"8\">\n {blogPost.attributes.category && (\n <Text size=\"smMonoUppercase\" color=\"primary.800\" mb=\"2\">\n {blogPost.attributes.category.data?.attributes.name}\n </Text>\n )}\n <Heading size=\"lg\">{blogPost.attributes.title}</Heading>\n {blogPost.attributes.teaser && (\n <Text size=\"mdRegularNormal\" mt=\"2\">\n {blogPost.attributes.teaser}\n </Text>\n )}\n\n <Spacer height=\"4\" />\n\n <DatePersonPair\n date={formatDate(blogPost.attributes.createdAt)}\n person={\n blogPost.attributes.author.data\n ? {\n name: blogPost.attributes.author.data.attributes.name,\n image: (\n <Image\n src={strapiMediaUrl(\n blogPost.attributes.author.data.attributes.img\n .img,\n 'thumbnail'\n )}\n alt={\n blogPost.attributes.author.data.attributes.img\n .alt\n }\n fill\n style={{\n objectFit:\n blogPost.attributes.author.data.attributes.img\n .objectFit || 'cover',\n }}\n />\n ),\n }\n : undefined\n }\n />\n </Box>\n </BlogItemContainer>\n ))}\n </SimpleGrid>\n <>\n {mobile && slice.button && (\n <>\n <Box minWidth=\"40\" mt=\"6\">\n <StrapiLinkButton\n link={slice.button}\n size=\"lg\"\n variant=\"outline\"\n rightIcon={<CaretRight color={gray700} />}\n />\n </Box>\n </>\n )}\n </>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React, { useCallback, useContext } from 'react';\nimport {\n BoemlyFormControl,\n Box,\n Button,\n Divider,\n Flex,\n InputRightAddon,\n Spacer,\n Text,\n} from 'boemly';\nimport {\n Field,\n FieldProps,\n Form,\n Formik,\n FormikErrors,\n FormikProps,\n} from 'formik';\nimport { useRouter } from 'next/router';\nimport Image from 'next/image';\nimport { StrapiLink } from '../../..';\nimport { IntlContext } from '../../ContextProvider';\nimport {\n MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY,\n MINIMUM_CONTRIBUTION_VALUE_IN_MONEY,\n} from '../../../constants/domain';\nimport { CDN_URI, FPM_API_URI } from '../../../constants/api';\nimport StrapiLinkButton from '../../StrapiLinkButton';\nimport SmallCheckoutForm from '../../../models/forms/SmallCheckoutForm';\n\nconst calculateTaxIncludedValue = (\n values: SmallCheckoutForm,\n taxInPercent: number\n) => {\n const value = parseInt(values.contributionValueCurrency);\n\n if (isNaN(value)) return 0;\n\n return value + value * (taxInPercent / 100);\n};\n\nexport interface SmallCheckoutProps {\n batchId: string;\n pricePerKg: number;\n initialContributionValue: number;\n taxInPercent?: number;\n checkoutText?: string;\n currency: 'EUR' | 'CHF';\n\n title?: string;\n subtitle?: string;\n button?: StrapiLink;\n}\n\nconst SmallCheckout = ({\n pricePerKg,\n currency,\n batchId,\n initialContributionValue,\n taxInPercent,\n checkoutText,\n title,\n subtitle,\n button,\n}: SmallCheckoutProps) => {\n const { formatNumber, formatMessage, locale } = useContext(IntlContext);\n const { push } = useRouter();\n\n const validateForm = useCallback(\n (values: SmallCheckoutForm) => {\n const errors: FormikErrors<SmallCheckoutForm> = {};\n const value = parseInt(values.contributionValueCurrency);\n if (!values.contributionValueCurrency || isNaN(value)) {\n errors.contributionValueCurrency = formatMessage({\n id: 'portfolio.smallCheckout.contributionValueCurrency.validation.empty',\n });\n } else if (value < MINIMUM_CONTRIBUTION_VALUE_IN_MONEY) {\n errors.contributionValueCurrency = formatMessage({\n id: `portfolio.smallCheckout.contributionValueCurrency.validation.tooLow.${currency}`,\n });\n } else if (value > MAXIMUM_CONTRIBUTION_VALUE_IN_MONEY) {\n errors.contributionValueCurrency = formatMessage({\n id: 'portfolio.smallCheckout.contributionValueCurrency.validation.tooHigh',\n });\n }\n\n return errors;\n },\n [currency, locale]\n );\n\n const onSubmit = async ({ contributionValueCurrency }: SmallCheckoutForm) => {\n const checkoutURL = new URL(`${FPM_API_URI}/v1/webhooks/shop/checkout`);\n const currentURL = new URL(window.location.href);\n\n checkoutURL.searchParams.append('batchId', batchId);\n\n checkoutURL.searchParams.append(\n 'quantity',\n Math.floor(parseInt(contributionValueCurrency) / pricePerKg).toString()\n );\n\n checkoutURL.searchParams.append('cancelPath', currentURL.pathname);\n\n push(checkoutURL.toString());\n };\n\n return (\n <Flex\n width=\"full\"\n height=\"full\"\n borderRadius=\"xl\"\n background=\"primary.100\"\n padding=\"6\"\n direction=\"column\"\n >\n <Flex gap=\"2\" alignItems=\"end\" mb=\"6\">\n <Text color=\"black\" lineHeight=\"0\">\n {formatMessage(\n { id: 'unit.formatter.tonsCo2' },\n {\n number: (\n <Text as=\"span\" size=\"lgLowBold\" color=\"black\">\n {formatNumber(pricePerKg * 1000, {\n style: 'currency',\n currency,\n maximumFractionDigits: 0,\n })}\n </Text>\n ),\n }\n )}\n </Text>\n <Text size=\"smLowNormal\">\n {formatMessage({\n id: 'portfolio.smallCheckout.price.taxNotIncluded',\n })}\n </Text>\n </Flex>\n\n <Formik\n initialValues={{\n contributionValueCurrency: initialContributionValue.toString(),\n contributionValueKgs: (\n initialContributionValue /\n pricePerKg /\n 1000\n ).toString(),\n }}\n validate={validateForm}\n onSubmit={onSubmit}\n >\n {({\n errors,\n touched,\n handleSubmit,\n setValues,\n values,\n }: FormikProps<SmallCheckoutForm>) => (\n <Form onSubmit={handleSubmit}>\n <Flex gap=\"4\">\n <Box width=\"full\">\n <Field name=\"contributionValueCurrency\">\n {({ field }: FieldProps) => (\n <BoemlyFormControl\n id=\"contributionValueCurrency\"\n size=\"md\"\n inputProps={{\n type: 'number',\n value: field.value || '',\n onChange: (e) => {\n const value = e.target.valueAsNumber;\n\n setValues({\n contributionValueCurrency: value.toString(),\n contributionValueKgs: (\n value /\n pricePerKg /\n 1000\n ).toString(),\n });\n },\n }}\n label={formatMessage({\n id: `portfolio.smallCheckout.contributionValueCurrency.label.${currency}`,\n })}\n rightAddonsOrElements={[\n <InputRightAddon key=\"currencyUnit\">\n {formatMessage({\n id: `portfolio.smallCheckout.contributionValueCurrency.unit.${currency}`,\n })}\n </InputRightAddon>,\n ]}\n isInvalid={\n !!errors.contributionValueCurrency &&\n touched.contributionValueCurrency\n }\n errorMessage={errors.contributionValueCurrency}\n />\n )}\n </Field>\n </Box>\n\n <Box width=\"full\">\n <Field name=\"contributionValueKgs\">\n {({ field }: FieldProps) => (\n <BoemlyFormControl\n id=\"contributionValueKgs\"\n size=\"md\"\n inputProps={{\n type: 'number',\n value: field.value || '',\n onChange: (e) => {\n const value = e.target.valueAsNumber;\n setValues({\n contributionValueCurrency: (\n value *\n pricePerKg *\n 1000\n ).toString(),\n contributionValueKgs: value.toString(),\n });\n },\n }}\n label={formatMessage({\n id: 'portfolio.smallCheckout.contributionValueKgs.label',\n })}\n rightAddonsOrElements={[\n <InputRightAddon key=\"tCO₂\">tCO₂</InputRightAddon>,\n ]}\n isInvalid={\n !!errors.contributionValueKgs &&\n touched.contributionValueKgs\n }\n errorMessage={errors.contributionValueKgs}\n />\n )}\n </Field>\n </Box>\n </Flex>\n {values.contributionValueCurrency &&\n taxInPercent &&\n taxInPercent > 0 && (\n <Text size=\"smLowNormal\" mt=\"2\">\n {formatMessage(\n { id: 'portfolio.smallCheckout.price.taxIncluded' },\n {\n number: formatNumber(\n calculateTaxIncludedValue(values, taxInPercent),\n {\n style: 'currency',\n currency,\n maximumFractionDigits: 2,\n }\n ),\n }\n )}\n </Text>\n )}\n\n <Spacer height=\"4\" />\n\n <Button type=\"submit\" width=\"full\">\n {formatMessage({ id: 'portfolio.smallCheckout.submitButton' })}\n </Button>\n </Form>\n )}\n </Formik>\n\n <Flex\n width=\"full\"\n justifyContent=\"center\"\n alignItems=\"center\"\n mt=\"6\"\n gap=\"2\"\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/globe-love-icon.svg`}\n alt=\"Icon\"\n width={20}\n height={20}\n />\n <Text size=\"smLowNormal\">{checkoutText}</Text>\n </Flex>\n\n <Divider my=\"6\" />\n\n <Flex width=\"full\" alignItems=\"center\" direction=\"column\">\n {title && (\n <Text size=\"smLowBold\" textAlign=\"center\" color=\"black\" mb=\"2\">\n {title}\n </Text>\n )}\n {subtitle && (\n <Text size=\"smRegularNormal\" textAlign=\"center\" mb=\"3\">\n {subtitle}\n </Text>\n )}\n {button && (\n <StrapiLinkButton\n link={{\n intercomLauncher: true,\n ...button,\n }}\n variant=\"outline\"\n />\n )}\n </Flex>\n </Flex>\n );\n};\n\nexport default SmallCheckout;\n","import React, { useContext } from 'react';\nimport {\n Box,\n Container,\n Divider,\n Flex,\n Heading,\n LabelTextPair,\n SimpleGrid,\n Spacer,\n} from 'boemly';\nimport Image from 'next/image';\nimport convertAreaM2ToHa from '../../../utils/convertAreaM2ToHa';\nimport convertCo2AmountKgToTons from '../../../utils/convertCo2AmountKgToTons';\nimport CreditsAvailableBadge from '../../../components/CreditsAvailableBadge';\nimport PortfolioProject from '../../../models/PortfolioProject';\nimport {\n FORMAT_AS_HECTARE_CONFIG,\n FORMAT_AS_PERCENT_CONFIG,\n} from '../../../constants/formatter';\nimport getTimeSpanInYears from '../../../utils/getTimeSpanInYears';\nimport { IntlContext } from '../../ContextProvider';\n\nexport interface ProjectInfoProps {\n project: PortfolioProject;\n subtitles: {\n areaSubtitle?: string;\n locationSubtitle?: string;\n startSubtitle?: string;\n timeSpanSubtitle?: string;\n projectTypeSubtitle?: string;\n projectDeveloperSubtitle?: string;\n verificationStandardSubtitle?: string;\n forecastedAmountSubtitle?: string;\n riskBufferSubtitle?: string;\n buyCreditsSubtitle?: string;\n };\n}\n\nexport const ProjectInfo: React.FC<ProjectInfoProps> = ({\n project,\n subtitles,\n}: ProjectInfoProps) => {\n const { formatMessage, formatNumber, formatDate } = useContext(IntlContext);\n\n return (\n <Container p=\"2\" width=\"full\">\n <Heading size=\"xl\" textAlign=\"left\">\n {formatMessage({ id: 'features.projectInfo.projectInfo.value' })}\n </Heading>\n\n <Spacer height=\"8\" />\n\n <SimpleGrid\n columns={[1, null, null, 2]}\n gap=\"8\"\n spacingX=\"10\"\n spacingY=\"8\"\n >\n {project.area && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.area',\n })}\n text={formatNumber(\n convertAreaM2ToHa(project.area.toString()),\n FORMAT_AS_HECTARE_CONFIG\n )}\n caption={subtitles.areaSubtitle}\n />\n </Box>\n )}\n\n {project.location && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.location',\n })}\n text={project.location}\n caption={subtitles.locationSubtitle}\n />\n </Box>\n )}\n\n {project.start && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.start',\n })}\n text={formatDate(project.start, {\n year: 'numeric',\n month: 'long',\n })}\n caption={subtitles.startSubtitle}\n />\n </Box>\n )}\n\n {project.start && project.end && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.timeSpan',\n })}\n text={formatMessage(\n {\n id: 'features.projectInfo.properties.year',\n },\n {\n years: getTimeSpanInYears(\n new Date(project.start),\n new Date(project.end)\n ),\n }\n )}\n caption={subtitles.timeSpanSubtitle}\n />\n </Box>\n )}\n </SimpleGrid>\n\n {project.projectType ||\n project.projectDeveloper ||\n project.verificationStandard ? (\n <>\n <Spacer height=\"6\" />\n <Divider />\n <Spacer height=\"6\" />\n </>\n ) : (\n <></>\n )}\n <SimpleGrid columns={[1, null, null, 2]} spacingX=\"10\" spacingY=\"8\">\n {project.projectType && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.projectType',\n })}\n text={project.projectType.title}\n caption={subtitles.projectTypeSubtitle}\n />\n </Box>\n )}\n {project.projectDeveloper && (\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.projectDeveloper',\n })}\n text={project.projectDeveloper.name}\n caption={subtitles.projectDeveloperSubtitle}\n />\n </Box>\n )}\n </SimpleGrid>\n\n {project.verificationStandard ? (\n <>\n {project.projectType || project.projectDeveloper ? (\n <Spacer height=\"6\" />\n ) : (\n <></>\n )}\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.verificationStandard.label',\n })}\n text={formatMessage({\n id: `features.projectInfo.properties.verificationStandard.value.${project.verificationStandard.id}`,\n defaultMessage: project.verificationStandard.id,\n })}\n caption={subtitles.verificationStandardSubtitle}\n />\n </Box>\n\n {project.defaultIssuer && (\n <Box position=\"relative\" width=\"14\" height=\"8\">\n <Image\n src={project.defaultIssuer.logoUrl}\n alt={`${project.defaultIssuer.name} logo`}\n fill\n style={{ objectFit: 'contain' }}\n />\n </Box>\n )}\n </Flex>\n </>\n ) : (\n <></>\n )}\n\n {project.forecastedAmountYearly && project.riskBuffer ? (\n <>\n <Spacer height=\"8\" />\n <Divider />\n <Spacer height=\"8\" />\n <SimpleGrid columns={[1, null, null, 2]} spacingX=\"10\" spacingY=\"8\">\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.forecastedAmountYear.label',\n })}\n text={formatMessage(\n {\n id: 'unit.formatter.tonsCo2PerYear',\n },\n {\n number: formatNumber(\n convertCo2AmountKgToTons(\n project.forecastedAmountYearly.toString()\n ),\n { maximumFractionDigits: 0 }\n ),\n }\n )}\n caption={subtitles.forecastedAmountSubtitle}\n />\n </Box>\n\n <Box>\n <LabelTextPair\n label={formatMessage({\n id: 'features.projectInfo.properties.riskBuffer',\n })}\n text={formatNumber(\n project.riskBuffer / 100,\n FORMAT_AS_PERCENT_CONFIG\n )}\n caption={subtitles.riskBufferSubtitle}\n />\n </Box>\n </SimpleGrid>\n </>\n ) : (\n <></>\n )}\n\n {project.creditsAvailable ? (\n <Box mt=\"2\">\n <CreditsAvailableBadge status={project.creditsAvailable} />\n </Box>\n ) : (\n <></>\n )}\n </Container>\n );\n};\n","const convertCo2AmountKgToTons = (amount: string): number =>\n parseInt(amount, 10) / 1000;\n\nexport default convertCo2AmountKgToTons;\n","const getTimeSpanInYears = (start: Date, end: Date) => {\n const monthsDifference = end.getMonth() - start.getMonth();\n const yearsDifference = end.getFullYear() - start.getFullYear();\n\n if (monthsDifference > 4) {\n return yearsDifference + 1;\n }\n if (monthsDifference < -4) {\n return yearsDifference - 1;\n }\n return yearsDifference;\n};\n\nexport default getTimeSpanInYears;\n","const convertAreaM2ToHa = (areaInM2: string): number =>\n parseInt(areaInM2, 10) / 10000;\n\nexport default convertAreaM2ToHa;\n","import React, { useContext } from 'react';\nimport StrapiLink from '../../../models/strapi/StrapiLink';\nimport {\n Center,\n Container,\n Flex,\n Heading,\n IconButton,\n Spacer,\n Text,\n} from 'boemly';\nimport { DownloadSimple, FilePdf } from '@phosphor-icons/react';\nimport Link from 'next/link';\nimport { IntlContext } from '../../ContextProvider';\n\nexport interface DocumentsDownloadListProps {\n documentUrls: StrapiLink[];\n}\n\nexport const DocumentsDownloadList: React.FC<DocumentsDownloadListProps> = ({\n documentUrls,\n}: DocumentsDownloadListProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <Container p=\"2\">\n <Heading size=\"xl\" textAlign=\"left\">\n {formatMessage({\n id: 'features.portfolio.documentsDownloadList.projectDocuments',\n })}\n </Heading>\n\n <Flex flexDir=\"column\">\n {documentUrls.map((documentUrl) => (\n <Flex\n justifyContent=\"space-between\"\n alignItems=\"center\"\n mt=\"6\"\n key={documentUrl.text}\n >\n <Flex alignItems=\"center\">\n <Center\n w=\"8\"\n h=\"8\"\n borderRadius=\"full\"\n borderWidth=\"1px\"\n borderColor=\"grey.200\"\n >\n <FilePdf />\n </Center>\n\n <Spacer width=\"4\" />\n\n <Flex flexDir=\"column\">\n <Text size=\"smMonoNormal\">PDF</Text>\n <Text size=\"mdLowBold\" color=\"black\" textAlign=\"left\">\n {documentUrl.text}\n </Text>\n </Flex>\n </Flex>\n\n <Spacer width=\"32\" />\n\n <IconButton\n variant=\"outline\"\n aria-label={formatMessage({\n id: 'features.portfolio.documentsDownloadList.downloadDocument',\n })}\n icon={<DownloadSimple />}\n as={Link}\n href={documentUrl.url}\n size=\"sm\"\n />\n </Flex>\n ))}\n </Flex>\n </Container>\n );\n};\n","import React from 'react';\nimport StrapiImage from '../../../models/strapi/StrapiImage';\nimport StrapiLink from '../../../models/strapi/StrapiLink';\nimport strapiMediaUrl from '../../../utils/strapiMediaUrl';\nimport { Text, Heading, Flex, Box, Container } from 'boemly';\nimport Image from 'next/image';\nimport StrapiLinkButton from '../../../components/StrapiLinkButton';\n\nexport interface ContactProps {\n avatar?: StrapiImage;\n title?: string;\n text?: string;\n button?: StrapiLink;\n}\n\nexport const Contact: React.FC<ContactProps> = ({\n avatar,\n title,\n text,\n button,\n}: ContactProps) => (\n <Container backgroundColor=\"primary.100\" border=\"none\" p=\"8\" height=\"full\">\n <Flex\n flexDir=\"column\"\n justifyContent=\"center\"\n alignItems=\"center\"\n height=\"full\"\n >\n {avatar ? (\n <Box\n position=\"relative\"\n width=\"20\"\n height=\"20\"\n borderRadius=\"full\"\n overflow=\"hidden\"\n >\n <Image\n src={strapiMediaUrl(avatar.img, 'small')}\n alt={avatar.alt}\n fill\n objectFit={avatar.objectFit}\n />\n </Box>\n ) : (\n <></>\n )}\n {title ? (\n <Heading\n mt=\"6\"\n size=\"md\"\n fontWeight=\"500\"\n textAlign=\"center\"\n color=\"black\"\n >\n {title}\n </Heading>\n ) : (\n <></>\n )}\n {text ? (\n <Text mt=\"2\" size=\"smRegularNormal\" textAlign=\"center\">\n {text}\n </Text>\n ) : (\n <></>\n )}\n {button ? (\n <StrapiLinkButton mt=\"6\" link={button} size=\"md\" variant=\"outline\" />\n ) : (\n <></>\n )}\n </Flex>\n </Container>\n);\n","import React from 'react';\nimport { DefaultSectionContainer, Flex, Wrapper } from 'boemly';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport SmallCheckout from '../../components/portfolio/SmallCheckout';\nimport ProjectInfo from '../../components/portfolio/ProjectInfo';\nimport DocumentsDownloadList from '../../components/portfolio/DocumentsDownloadList';\nimport Contact from '../../components/portfolio/Contact';\nimport StrapiImage from '../../models/strapi/StrapiImage';\n\nexport interface ProjectFactsProps {\n project?: PortfolioProject;\n slice: {\n projectId: string;\n\n batchId?: string;\n currency?: 'EUR' | 'CHF';\n pricePerKg?: number;\n taxInPercent?: number;\n initialContributionValue?: number;\n checkoutText?: string;\n\n customTitle?: string;\n customSubtitle?: string;\n customButton?: StrapiLink;\n documentUrls?: StrapiLink[];\n\n areaSubtitle?: string;\n locationSubtitle?: string;\n startSubtitle?: string;\n timeSpanSubtitle?: string;\n projectTypeSubtitle?: string;\n projectDeveloperSubtitle?: string;\n verificationStandardSubtitle?: string;\n forecastedAmountSubtitle?: string;\n riskBufferSubtitle?: string;\n buyCreditsSubtitle?: string;\n\n contactTitle?: string;\n contactText?: string;\n contactButton?: StrapiLink;\n contactAvatar?: StrapiImage;\n };\n}\n\nexport const ProjectFacts: React.FC<ProjectFactsProps> = ({\n slice,\n project,\n}: ProjectFactsProps) => {\n if (!project) {\n return (\n <>Invalid configuration, check if a project this id exists in the FPM</>\n );\n }\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <Flex flexDir={['column', null, null, 'row']} gap=\"4\" width=\"full\">\n <ProjectInfo project={project} subtitles={slice} />\n <Flex flexDir=\"column\" gap=\"4\" width=\"full\">\n {slice.documentUrls && slice.documentUrls.length > 0 && (\n <DocumentsDownloadList documentUrls={slice.documentUrls} />\n )}\n {slice.batchId &&\n slice.pricePerKg &&\n slice.currency &&\n slice.initialContributionValue ? (\n <SmallCheckout\n batchId={slice.batchId}\n checkoutText={slice.checkoutText}\n currency={slice.currency}\n initialContributionValue={slice.initialContributionValue}\n pricePerKg={slice.pricePerKg}\n title={slice.customTitle}\n subtitle={slice.customSubtitle}\n button={slice.customButton}\n taxInPercent={slice.taxInPercent}\n />\n ) : (\n (slice.contactTitle ||\n slice.contactText ||\n slice.contactButton ||\n slice.contactAvatar) && (\n <Contact\n title={slice.contactTitle}\n text={slice.contactText}\n button={slice.contactButton}\n avatar={slice.contactAvatar}\n />\n )\n )}\n </Flex>\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import { Container, Center, Heading, Button, Box, Text, Flex } from 'boemly';\nimport React, { useContext } from 'react';\nimport { StrapiCustomerStory, strapiMediaUrl } from '../..';\nimport Image from 'next/image';\nimport { IntlContext } from '../../components/ContextProvider';\nimport Link from 'next/link';\n\nexport interface CustomerCardProps {\n customerStory: StrapiCustomerStory;\n}\nexport const CustomerCard = ({\n customerStory,\n}: CustomerCardProps): JSX.Element => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <Container padding=\"none\" height=\"full\">\n <Flex flexDir=\"column\" height=\"full\">\n <Center height=\"24\" backgroundColor=\"primary.50\" borderTopRadius=\"xl\">\n {customerStory.cardImage && (\n <Box position=\"relative\" height=\"12\" width=\"12\">\n <Image\n src={strapiMediaUrl(customerStory.cardImage.img, 'medium')}\n alt={customerStory.cardImage.alt}\n fill\n style={{\n objectFit: customerStory.cardImage.objectFit,\n }}\n />\n </Box>\n )}\n </Center>\n <Box px=\"6\" pt=\"8\" pb=\"6\" mb=\"auto\">\n {customerStory.customerCardCustomerIndustry && (\n <Text size=\"xsMonoUppercase\" color=\"gray.500\" mb=\"2\">\n {customerStory.customerCardCustomerIndustry}\n </Text>\n )}\n {customerStory.title && (\n <Heading size=\"md\" fontWeight=\"500\">\n {customerStory.title}\n </Heading>\n )}\n </Box>\n <Box px=\"6\" pt=\"8\" pb=\"6\">\n <Button\n as={Link}\n href={`/customer-stories/${customerStory.slug}`}\n variant=\"outline\"\n size=\"sm\"\n >\n {formatMessage({ id: 'sections.customerCard.more' })}\n </Button>\n </Box>\n </Flex>\n </Container>\n );\n};\n","import { Container, Heading, Button, Box, Text } from 'boemly';\nimport React, { useContext } from 'react';\nimport { StrapiCustomerStory, strapiMediaUrl } from '../..';\nimport Image from 'next/image';\nimport { IntlContext } from '../../components/ContextProvider';\nimport Link from 'next/link';\n\nexport interface CustomerQuoteCardProps {\n customerStory: StrapiCustomerStory;\n}\nexport const CustomerQuoteCard = ({\n customerStory,\n}: CustomerQuoteCardProps): JSX.Element => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <Container p=\"1\" backgroundColor=\"primary.100\" height=\"full\">\n {customerStory.cardImage ? (\n <Box\n position=\"relative\"\n height=\"12\"\n width=\"12\"\n borderRadius=\"full\"\n overflow=\"hidden\"\n >\n <Image\n src={strapiMediaUrl(customerStory.cardImage.img, 'medium')}\n alt={customerStory.cardImage.alt}\n fill\n style={{\n objectFit: customerStory.cardImage.objectFit,\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n <Box>\n <Box my=\"8\">\n <Heading size=\"md\" fontWeight=\"500\">\n {customerStory.customerName}\n </Heading>\n <Text size=\"xs\">{customerStory.quoteCardCustomerTitle}</Text>\n </Box>\n <Text size=\"xs\" color=\"black\">\n {customerStory.quoteCardQuote}\n </Text>\n <Button\n href={`/customer-stories/${customerStory.slug}`}\n as={Link}\n variant=\"outline\"\n size=\"sm\"\n mt=\"8\"\n >\n {formatMessage({ id: 'sections.customerQuoteCard.more' })}\n </Button>\n </Box>\n </Container>\n );\n};\n","import { Box, Container, Flex } from 'boemly';\nimport { StrapiCustomerStory, strapiMediaUrl } from '../..';\nimport Image from 'next/image';\nimport React from 'react';\nimport Link from 'next/link';\n\nexport interface LogoCardProps {\n customerStory: StrapiCustomerStory;\n}\nexport const LogoCard = ({ customerStory }: LogoCardProps) => {\n if (customerStory.cardImage) {\n return (\n <Container height=\"full\" backgroundColor=\"primary.50\">\n <Flex justifyContent=\"center\" height=\"full\" padding=\"4\">\n <Box position=\"relative\" height=\"12\" width=\"36\" marginY=\"auto\">\n <Link href={`/customer-stories/${customerStory.slug}`}>\n <Image\n src={strapiMediaUrl(customerStory.cardImage.img, 'medium')}\n alt={customerStory.cardImage.alt}\n fill\n style={{\n objectFit: customerStory.cardImage.objectFit,\n }}\n />\n </Link>\n </Box>\n </Flex>\n </Container>\n );\n }\n return <></>;\n};\n","import React from 'react';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport StrapiCustomerStory from '../../models/strapi/StrapiCustomerStory';\nimport { Box, DefaultSectionContainer, SimpleGrid, Wrapper } from 'boemly';\nimport CustomerCard from '../../components/CustomerCard';\nimport CustomerQuoteCard from '../../components/CustomerQuoteCard';\nimport LogoCard from '../../components/LogoCard';\n\nexport interface CustomerStoriesProps {\n slice: {\n customer_stories: IStrapiData<StrapiCustomerStory>[];\n };\n customerStories: IStrapiData<StrapiCustomerStory>[];\n}\n\nexport const CustomerStories = ({\n slice,\n customerStories,\n}: CustomerStoriesProps): JSX.Element => {\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <SimpleGrid columns={[1, null, null, 2, 3]} spacingX={6} spacingY={6}>\n {slice.customer_stories.map(({ attributes }) => {\n const customerStory: IStrapiData<StrapiCustomerStory> | undefined =\n customerStories.find(\n (cs) => cs.attributes.slug === attributes.slug\n );\n if (!customerStory) {\n return null;\n }\n return (\n <Box key={customerStory.id}>\n {attributes.variant === 'customerCard' && (\n <CustomerCard customerStory={customerStory.attributes} />\n )}\n {attributes.variant === 'quoteCard' && (\n <CustomerQuoteCard customerStory={customerStory.attributes} />\n )}\n {attributes.variant === 'logoCard' && (\n <LogoCard customerStory={customerStory.attributes} />\n )}\n </Box>\n );\n })}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport { Check, X } from '@phosphor-icons/react';\nimport { Box } from 'boemly';\n\nexport interface IconProps {\n variant: 'gray' | 'green' | 'white';\n icon: string;\n}\n\nconst BULLET_POINT_VARIANTS = {\n gray: { bulletPointColor: 'black' },\n green: { bulletPointColor: 'white' },\n white: { bulletPointColor: 'black' },\n};\n\nexport const Icon = ({ variant, icon }: IconProps): JSX.Element => {\n switch (icon) {\n case 'check':\n return <Check size={20} color=\"var(--boemly-colors-primary-500)\" />;\n case 'cross':\n return <X size={20} color=\"var(--boemly-colors-red-500)\" />;\n default:\n return (\n <Box\n data-testid=\"bullet-point-box\"\n borderRadius=\"full\"\n backgroundColor={BULLET_POINT_VARIANTS[variant].bulletPointColor}\n width=\"2\"\n height=\"2\"\n margin=\"1.5\"\n />\n );\n }\n};\nexport default Icon;\n","import React, { useContext } from 'react';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport {\n Container,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Wrapper,\n Text,\n Flex,\n Box,\n Spacer,\n Divider,\n Heading,\n Badge,\n SimpleGrid,\n} from 'boemly';\nimport Image from 'next/image';\nimport { CaretRight } from '@phosphor-icons/react';\nimport { Icon } from './Icon';\nimport { CDN_URI } from '../../constants/api';\nimport { IntlContext } from '../../components/ContextProvider';\n\nexport interface ComparisonProps {\n slice: {\n title?: string;\n subTitle?: string;\n tagline?: string;\n\n comparisonCards: ComparisonCard[];\n };\n}\n\nexport interface ComparisonCard {\n id: number;\n title: string;\n subTitle: string;\n badge?: string;\n variant: 'gray' | 'green' | 'white';\n image?: StrapiImage;\n button?: StrapiLink;\n factTitle?: string;\n factSubtitle?: string;\n lists: {\n id: string;\n title: string;\n items: { id: string; text: string; icon: 'bullet' | 'check' | 'cross' }[];\n }[];\n}\n\nconst VARIANTS = {\n gray: {\n backgroundColor: 'primary.50',\n textColor: 'black',\n subTitleColor: 'gray.500',\n factColor: 'primary.800',\n dividerColor: 'gray.200',\n },\n green: {\n backgroundColor: 'primary.800',\n textColor: 'white',\n subTitleColor: 'whiteAlpha.900',\n factColor: 'white',\n dividerColor: 'whiteAlpha.200',\n },\n white: {\n backgroundColor: 'white',\n textColor: 'black',\n subTitleColor: 'gray.500',\n factColor: 'primary.800',\n dividerColor: 'gray.200',\n },\n};\n\nexport const Comparison: React.FC<ComparisonProps> = ({\n slice,\n}: ComparisonProps) => {\n const { formatMessage } = useContext(IntlContext);\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n {slice.title ? (\n <>\n <Flex alignItems=\"center\" flexDirection=\"column\">\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.subTitle}\n textProps={{ maxW: '2xl', textAlign: 'center' }}\n titleProps={{\n textAlign: 'center',\n maxWidth: '3xl',\n }}\n taglineProps={{ textAlign: 'center', maxWidth: '3xl' }}\n />\n </Flex>\n <Spacer height=\"12\" />\n </>\n ) : (\n <></>\n )}\n <SimpleGrid\n columns={[1, null, null, null, slice.comparisonCards.length]}\n spacing=\"4\"\n >\n {slice.comparisonCards.map((comparisonCard) => (\n <Container\n boxShadow={comparisonCard.variant === 'green' ? 'xl' : 'base'}\n border={\n comparisonCard.variant === 'green' ? 'primary.800' : undefined\n }\n zIndex=\"base\"\n key={comparisonCard.id}\n position=\"relative\"\n elevation=\"none\"\n p=\"3\"\n backgroundColor={VARIANTS[comparisonCard.variant].backgroundColor}\n >\n {comparisonCard.variant === 'green' ? (\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"0\"\n width=\"full\"\n height=\"full\"\n zIndex=\"-1\"\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/shapes-comparison.svg`}\n alt={formatMessage({\n id: 'sections.comparison.backgroundShapes',\n })}\n fill\n style={{\n objectFit: 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n <Flex flexDir=\"column\" gap=\"4\">\n {comparisonCard.image && (\n <Box position=\"relative\" height=\"7\" width=\"100%\">\n <Image\n src={strapiMediaUrl(comparisonCard.image.img, 'small')}\n alt={comparisonCard.image.alt}\n fill\n style={{\n objectFit: comparisonCard.image.objectFit,\n }}\n />\n </Box>\n )}\n <Flex gap=\"2\" alignItems=\"center\" flexWrap=\"wrap\">\n <Heading\n size=\"2xl\"\n color={VARIANTS[comparisonCard.variant].textColor}\n whiteSpace=\"pre-line\"\n >\n {comparisonCard.title}\n </Heading>\n {comparisonCard.badge && (\n <Badge\n backgroundColor=\"green.100\"\n borderRadius=\"md\"\n whiteSpace=\"pre-line\"\n >\n {comparisonCard.badge}\n </Badge>\n )}\n </Flex>\n </Flex>\n <Spacer height=\"4\" />\n <Text\n size=\"smRegularNormal\"\n color={VARIANTS[comparisonCard.variant].subTitleColor}\n >\n {comparisonCard.subTitle}\n </Text>\n\n {comparisonCard.factTitle ||\n comparisonCard.factSubtitle ||\n comparisonCard.button ? (\n <>\n <Spacer height=\"6\" />\n <Flex flexDir=\"column\">\n {comparisonCard.factTitle && (\n <>\n <Text\n color={VARIANTS[comparisonCard.variant].factColor}\n size=\"lgMonoNormal\"\n >\n {comparisonCard.factTitle}\n </Text>\n <Text\n color={VARIANTS[comparisonCard.variant].factColor}\n size=\"smLowNormal\"\n >\n {comparisonCard.factSubtitle}\n </Text>\n </>\n )}\n {comparisonCard.button && (\n <StrapiLinkButton\n mt=\"6\"\n link={comparisonCard.button}\n size=\"md\"\n variant=\"outline\"\n rightIcon={<CaretRight size={16} weight=\"bold\" />}\n />\n )}\n </Flex>\n </>\n ) : (\n <></>\n )}\n <>\n {comparisonCard.lists.map((list) => (\n <Box key={list.id}>\n <Divider\n my=\"8\"\n color={VARIANTS[comparisonCard.variant].dividerColor}\n />\n <Text\n size=\"smLowBold\"\n color={VARIANTS[comparisonCard.variant].textColor}\n >\n {list.title}\n </Text>\n <>\n {list.items.map((item) => (\n <Box key={item.id}>\n <Spacer height=\"4\" />\n <Flex gap=\"4\" alignItems=\"center\">\n <Box>\n <Icon\n variant={comparisonCard.variant}\n icon={item.icon}\n />\n </Box>\n <Text\n size=\"smLowNormal\"\n color={VARIANTS[comparisonCard.variant].textColor}\n >\n {item.text}\n </Text>\n </Flex>\n </Box>\n ))}\n </>\n </Box>\n ))}\n </>\n </Container>\n ))}\n </SimpleGrid>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\nexport default Comparison;\n","import React, { useContext } from 'react';\nimport {\n Button,\n Box,\n Container,\n DefaultSectionContainer,\n DefaultSectionHeader,\n Flex,\n Heading,\n RichText,\n SimpleGrid,\n Spacer,\n Tag,\n Text,\n Wrapper,\n useMediaQuery,\n} from 'boemly';\nimport Image from 'next/image';\nimport StrapiImage from '../../models/strapi/StrapiImage';\nimport strapiMediaUrl from '../../utils/strapiMediaUrl';\nimport StrapiLink from '../../models/strapi/StrapiLink';\nimport StrapiLinkButton from '../../components/StrapiLinkButton';\nimport { CDN_URI } from '../../constants/api';\nimport { IntlContext } from 'react-intl';\nimport { BREAKPOINT_MD_QUERY } from '../../constants/breakpoints';\nimport { useState } from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport FullScreenImage from '../../components/FullScreenImage';\n\nexport interface TimelineProps {\n slice: {\n title: string;\n text?: string;\n tagline?: string;\n\n timelineItems: TimelineItem[];\n };\n}\n\nexport interface TimelineItem {\n id: number;\n tagline?: string;\n title: string;\n text?: string;\n badge?: { text: string; variant: 'orange' | 'green' | 'red' | 'gray' };\n logo?: StrapiImage;\n icon?: StrapiImage;\n image?: StrapiImage;\n button?: StrapiLink;\n backgroundShapes?: boolean;\n}\n\nexport const Timeline: React.FC<TimelineProps> = ({ slice }: TimelineProps) => {\n const { formatMessage } = useContext(IntlContext);\n const [visibleItems, setVisibleItems] = useState(3);\n const [mobile] = useMediaQuery(BREAKPOINT_MD_QUERY);\n const [isOpen, setIsOpen] = useState(false);\n\n const showMoreItems = () => {\n setVisibleItems((prevVisibleItems) => prevVisibleItems + 3);\n };\n\n return (\n <DefaultSectionContainer>\n <Wrapper>\n <Flex flexDir={['column', null, null, 'row']}>\n <Box\n width={['full', null, null, '50%']}\n position={[null, null, null, 'sticky']}\n top={['16', null, null, '32']}\n height=\"full\"\n paddingRight={[null, null, null, '28']}\n >\n <DefaultSectionHeader\n tagline={slice.tagline}\n title={slice.title}\n text={slice.text}\n />\n {mobile && (\n <>\n <Spacer h=\"10\" />\n <Flex justifyContent=\"center\">\n <Box\n borderRadius=\"full\"\n width=\"3\"\n height=\"3\"\n margin=\"1.5\"\n backgroundColor=\"gray\"\n />\n </Flex>\n <Box\n overflow=\"visible\"\n borderRight=\"dashed 1px var(--boemly-colors-gray-200)\"\n transform=\"translateX(-50%)\"\n position=\"relative\"\n height=\"20\"\n />\n </>\n )}\n </Box>\n <Box\n overflow=\"visible\"\n maxWidth={['full', null, null, '50%']}\n borderLeft={[\n null,\n null,\n null,\n 'dashed 1px var(--boemly-colors-gray-200)',\n ]}\n position=\"relative\"\n width=\"full\"\n >\n <Flex\n flexDir=\"column\"\n overflow=\"visible\"\n gap={[null, null, null, '8']}\n >\n {slice.timelineItems.slice(0, visibleItems).map((item, index) => (\n <SimpleGrid\n gap={['none', null, null, '4']}\n key={item.id}\n columns={[1, null, null, 2]}\n alignContent=\"center\"\n gridTemplateColumns={[null, null, null, '1fr 16fr']}\n position=\"relative\"\n >\n <Flex\n alignItems=\"center\"\n justifyContent={['center', null, null, 'flex-start']}\n >\n <Box\n position=\"absolute\"\n transform={[null, null, null, 'translateX(-50%)']}\n backgroundColor=\"white\"\n >\n {item.icon ? (\n <Box padding=\"2\">\n <Image\n src={strapiMediaUrl(item.icon.img, 'xSmall')}\n alt={item.icon.alt}\n width=\"21\"\n height=\"21\"\n />\n </Box>\n ) : (\n <Box padding=\"2\">\n <Box\n borderRadius=\"full\"\n backgroundColor=\"primary.800\"\n width=\"2\"\n height=\"2\"\n />\n </Box>\n )}\n {mobile && (\n <Box\n overflow=\"visible\"\n borderRight=\"dashed 1px var(--boemly-colors-gray-200)\"\n transform=\"translateX(-50%)\"\n position=\"relative\"\n height=\"10\"\n />\n )}\n </Box>\n </Flex>\n <Container\n p={[null, null, null, '3']}\n zIndex=\"base\"\n position=\"relative\"\n elevation=\"none\"\n >\n {item.backgroundShapes ? (\n <Box\n position=\"absolute\"\n left=\"0\"\n top=\"0\"\n width=\"full\"\n height=\"full\"\n zIndex=\"-1\"\n >\n <Image\n src={`${CDN_URI}/assets/v3/strapi-slices/timeline-shapes.svg`}\n alt={formatMessage({\n id: 'sections.timeline.backgroundShapes',\n })}\n fill\n style={{\n objectFit: 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n />\n </Box>\n ) : (\n <></>\n )}\n\n <Flex flexDir=\"column\">\n <Flex\n alignItems=\"flex-start\"\n justifyContent=\"space-between\"\n >\n <Box>\n {item.tagline && (\n <>\n <Text color=\"primary.800\" size=\"smMonoUppercase\">\n {item.tagline}\n </Text>\n <Spacer h=\"2\" />\n </>\n )}\n </Box>\n <Flex>\n {item.badge && (\n <Tag\n colorScheme={item.badge.variant}\n borderRadius=\"md\"\n >\n {item.badge.text}\n </Tag>\n )}\n {item.logo && (\n <Box position=\"relative\" height=\"8\" width=\"16\">\n <Image\n src={strapiMediaUrl(item.logo.img, 'small')}\n alt={item.logo.alt}\n fill\n style={{\n objectFit: item.logo.objectFit,\n }}\n />\n </Box>\n )}\n </Flex>\n </Flex>\n <Heading\n size=\"lg\"\n mt={['6', null, null, '3']}\n maxWidth=\"xs\"\n >\n {item.title}\n </Heading>\n {item.text && (\n <Box mt=\"3\">\n <RichText content={item.text} />\n </Box>\n )}\n {item.button && (\n <Box textAlign=\"left\">\n <Spacer h=\"4\" />\n <StrapiLinkButton\n link={item.button}\n size=\"sm\"\n variant=\"outline\"\n />\n </Box>\n )}\n {item.image ? (\n <>\n <Box\n position=\"relative\"\n mt=\"4\"\n height={['2xs', null, null, null, '48']}\n minWidth={[null, null, null, null, '50%']}\n >\n <Image\n src={strapiMediaUrl(item.image.img, 'xLarge')}\n alt={item.image.alt}\n fill\n style={{\n cursor: mobile ? 'unset' : 'pointer',\n objectFit: item.image.objectFit || 'cover',\n borderRadius: 'var(--boemly-radii-xl)',\n }}\n onClick={() => !mobile && setIsOpen(true)}\n />\n <FullScreenImage\n images={[item.image]}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n />\n </Box>\n </>\n ) : (\n <></>\n )}\n </Flex>\n </Container>\n {mobile && index + 1 < slice.timelineItems.length && (\n <Box\n overflow=\"visible\"\n borderRight=\"dashed 1px var(--boemly-colors-gray-200)\"\n transform=\"translateX(-50%)\"\n position=\"relative\"\n height=\"20\"\n />\n )}\n </SimpleGrid>\n ))}\n </Flex>\n {visibleItems < slice.timelineItems.length && (\n <>\n <Box\n width=\"full\"\n height={['36', null, null, '64']}\n position=\"absolute\"\n bottom=\"0\"\n zIndex=\"1\"\n background=\"linear-gradient(180deg, rgba(255, 255, 255, 0.00) 0%, rgba(255, 255, 255, 0.98) 76.54%, #FFF 100%)\"\n />\n <Box\n bottom=\"0\"\n textAlign=\"center\"\n zIndex=\"overlay\"\n position=\"relative\"\n >\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={showMoreItems}\n m={[null, null, null, '8']}\n >\n <FormattedMessage id=\"sections.timeline.showMoreButton\" />\n </Button>\n </Box>\n </>\n )}\n </Box>\n </Flex>\n </Wrapper>\n </DefaultSectionContainer>\n );\n};\n","import React from 'react';\nimport { BoemlyAlert, Box } from 'boemly';\n\nexport const PreviewAlert = (): JSX.Element => {\n return (\n <Box position=\"fixed\" top=\"4\" left=\"4\">\n <BoemlyAlert text=\"Preview\" status=\"error\" />\n </Box>\n );\n};\n","import React from 'react';\nimport Head from 'next/head';\nimport {\n DEFAULT_SHARE_ALT,\n DEFAULT_SHARE_IMAGE,\n} from '../../constants/metadata';\n\ninterface SEOTagsProps {\n title: string;\n description: string;\n shareImage?: {\n url: string;\n alt: string;\n };\n metaTitleSuffix?: string;\n favicon?: string;\n domain?: string;\n}\n\nexport const SEOTags: React.FC<SEOTagsProps> = ({\n title,\n description,\n shareImage,\n metaTitleSuffix = 'Tree.ly',\n favicon = 'https://cdn.tree.ly/favicon.ico',\n domain = 'tree.ly',\n}: SEOTagsProps) => {\n const shareImageUrl = shareImage?.url ?? DEFAULT_SHARE_IMAGE;\n const shareImageAlt = shareImage?.alt ?? DEFAULT_SHARE_ALT;\n\n return (\n <Head>\n <title>{`${title} - ${metaTitleSuffix}`}</title>\n <meta name=\"description\" content={description} />\n <link rel=\"icon\" href={favicon} />\n\n <meta property=\"og:url\" content={`https://${domain}`} />\n <meta property=\"og:type\" content=\"website\" />\n <meta property=\"og:title\" content={title} />\n <meta property=\"og:description\" content={description} />\n <meta property=\"og:image\" content={shareImageUrl} />\n <meta property=\"og:image:alt\" content={shareImageAlt} />\n\n <meta name=\"twitter:card\" content=\"summary_large_image\" />\n <meta property=\"twitter:domain\" content={domain} />\n <meta property=\"twitter:url\" content={`https://${domain}`} />\n <meta name=\"twitter:title\" content={title} />\n <meta name=\"twitter:description\" content={description} />\n <meta name=\"twitter:image\" content={shareImageUrl} />\n <meta name=\"twitter:image:alt\" content={shareImageAlt} />\n </Head>\n );\n};\n","import React from 'react';\nimport FullWidthImage from '../../slices/FullWidthImage';\nimport Hero from '../../slices/Hero';\nimport IconGrid from '../../slices/IconGrid';\nimport ImageGrid from '../../slices/ImageGrid';\nimport ImageTextSequence from '../../slices/ImageTextSequence';\nimport LeftTextRightCard from '../../slices/LeftTextRightCard';\nimport LogoGridWithText from '../../slices/LogoGridWithText';\nimport MapHero from '../../slices/MapHero';\nimport QAndA from '../../slices/QAndA';\nimport QuoteCards from '../../slices/QuoteCards';\nimport RichTextSection from '../../slices/RichTextSection';\nimport Steps from '../../slices/Steps';\nimport TextCardGrid from '../../slices/TextCardGrid';\nimport TextCarousel from '../../slices/TextCarousel';\nimport TextWithTextCards from '../../slices/TextWithTextCards';\nimport TextWithCard from '../../slices/TextWithCard';\nimport LinkCardsGrid from '../../slices/LinkCardsGrid';\nimport SmallHero from '../../slices/SmallHero';\nimport Blog from '../../slices/Blog';\nimport StrapiBlogPost from '../../models/strapi/StrapiBlogPost';\nimport ProjectsGrid from '../../slices/ProjectsGrid';\nimport ProjectsMap from '../../slices/ProjectsMap';\nimport Video from '../../slices/Video';\nimport FullWidthHighlightQuote from '../../slices/FullWidthHighlightQuote';\nimport FullWidthImageSlider from '../../slices/FullWidthImageSlider';\nimport SideBySideImages from '../../slices/SideBySideImages';\nimport IStrapiData from '../../models/strapi/IStrapiData';\nimport Cta from '../../slices/Cta';\nimport CtaOnly from '../../slices/CtaOnly';\nimport Glossary from '../../slices/Glossary';\nimport ShopCheckout from '../../slices/ShopCheckout';\nimport Facts from '../../slices/Facts';\nimport BlogCards from '../../slices/BlogCards';\nimport PortfolioProject from '../../models/PortfolioProject';\nimport ProjectFacts from '../../slices/ProjectFacts';\nimport CustomerStories from '../../slices/CustomerStories';\nimport StrapiCustomerStory from '../../models/strapi/StrapiCustomerStory';\nimport Comparison from '../../slices/Comparison';\nimport Locale from '../../models/Locale';\nimport { ContextProvider } from '../ContextProvider';\nimport Timeline from '../../slices/Timeline';\n\nexport interface CustomSliceProps {\n slice: any;\n id: string;\n}\n\nexport interface SliceRendererProps {\n slices: any;\n blogPosts: IStrapiData<StrapiBlogPost>[];\n projects: PortfolioProject[];\n customerStories: IStrapiData<StrapiCustomerStory>[];\n locale?: Locale;\n CustomSlice?: ({ slice, id }: CustomSliceProps) => JSX.Element;\n}\n\nexport const SliceRenderer = ({\n slices,\n blogPosts,\n projects,\n customerStories,\n locale = 'en',\n CustomSlice,\n}: SliceRendererProps): JSX.Element => (\n <ContextProvider locale={locale}>\n {slices.map((slice: any) => {\n switch (slice.__component) {\n case 'sections.hero':\n return (\n <Hero key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.map-hero':\n return (\n <MapHero key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.rich-text':\n return (\n <RichTextSection\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.left-text-right-card':\n return (\n <LeftTextRightCard\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.text-with-card':\n return (\n <TextWithCard\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n projects={projects}\n />\n );\n case 'sections.logo-grid-with-text':\n return (\n <LogoGridWithText\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.quote-cards':\n return (\n <QuoteCards\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.q-and-a':\n return (\n <QAndA key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.image-grid':\n return (\n <ImageGrid key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.full-width-image':\n return (\n <FullWidthImage\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.text-with-text-cards':\n return (\n <TextWithTextCards\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.text-card-grid':\n return (\n <TextCardGrid\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.icon-grid':\n return (\n <IconGrid key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.image-text-sequence':\n return (\n <ImageTextSequence\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.steps':\n return (\n <Steps key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.text-carousel':\n return (\n <TextCarousel\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.link-cards-grid':\n return (\n <LinkCardsGrid\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.small-hero':\n return (\n <SmallHero\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n theme=\"dark\"\n />\n );\n case 'sections.small-hero-light':\n return (\n <SmallHero\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n theme=\"light\"\n />\n );\n case 'sections.project-facts':\n return (\n <ProjectFacts\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n project={projects.find((p) => p.id === slice.projectId)}\n />\n );\n case 'sections.projects-grid':\n return (\n <ProjectsGrid\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n projects={projects}\n />\n );\n case 'sections.projects-map':\n return (\n <ProjectsMap\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n projects={projects}\n />\n );\n case 'sections.video':\n return (\n <Video key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.full-width-highlight-quote':\n return (\n <FullWidthHighlightQuote\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.full-width-image-slider':\n return (\n <FullWidthImageSlider\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.side-by-side-images':\n return (\n <SideBySideImages\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.cta-only':\n return (\n <CtaOnly key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.cta':\n return <Cta key={`${slice.__component}-${slice.id}`} slice={slice} />;\n case 'sections.shop-checkout':\n return (\n <ShopCheckout\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.facts':\n return (\n <Facts key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n case 'sections.blog-cards':\n return (\n <BlogCards\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n blogPosts={blogPosts}\n />\n );\n case 'sections.blog':\n return (\n <Blog\n key={`${slice.__component}-${slice.id}`}\n slice={{\n ...slice,\n blog_posts: slice.blog_posts.data,\n }}\n blogPosts={blogPosts}\n />\n );\n case 'sections.glossary':\n return (\n <Glossary\n key={`${slice.__component}-${slice.id}`}\n slice={{\n ...slice,\n glossary_items: slice.glossary_items.data,\n }}\n />\n );\n case 'sections.customer-stories':\n return (\n <CustomerStories\n key={`${slice.__component}-${slice.id}`}\n slice={{\n ...slice,\n customer_stories: slice.customer_stories.data,\n }}\n customerStories={customerStories}\n />\n );\n case 'sections.comparison':\n return (\n <Comparison\n key={`${slice.__component}-${slice.id}`}\n slice={slice}\n />\n );\n case 'sections.timeline':\n return (\n <Timeline key={`${slice.__component}-${slice.id}`} slice={slice} />\n );\n default:\n if (CustomSlice) {\n return (\n <CustomSlice\n key={`${slice.__component}-${slice.id}`}\n id={slice.__component}\n slice={slice}\n />\n );\n }\n\n return (\n <div key={`${slice.__component}-${slice.id}`}>\n Slice component not supported\n </div>\n );\n }\n })}\n </ContextProvider>\n);\n","import { GetStaticPropsContext } from 'next';\nimport strapiMediaUrl from './strapiMediaUrl';\nimport {\n IStrapiData,\n StrapiBlogPost,\n StrapiBlogPostProps,\n StrapiGlobal,\n} from '..';\nimport PortfolioProject from '../models/PortfolioProject';\nimport { DEFAULT_SHARE_ALT, DEFAULT_SHARE_IMAGE } from '../constants/metadata';\nimport {\n SLICES_WITH_BLOG_POSTS,\n SLICES_WITH_PROJECTS,\n} from '../constants/slicesConfig';\n\nconst mergeGlobalAndStrapiBlogPostData = (\n context: GetStaticPropsContext,\n global: IStrapiData<StrapiGlobal>,\n post: IStrapiData<StrapiBlogPost>,\n blog: IStrapiData<StrapiBlogPost>[],\n projects: PortfolioProject[]\n): StrapiBlogPostProps => {\n const metaShareImageUrl = post.attributes.metadata?.shareImage\n ? strapiMediaUrl(\n post.attributes.metadata?.shareImage.media ??\n global.attributes.metadata.shareImage?.media,\n 'large'\n )\n : DEFAULT_SHARE_IMAGE;\n\n const returnBlog = post.attributes.slices.some((slice) =>\n SLICES_WITH_BLOG_POSTS.includes(slice.__component)\n );\n const returnProjects = post.attributes.slices.some((slice) =>\n SLICES_WITH_PROJECTS.includes(slice.__component)\n );\n\n return {\n ...post,\n // Portfolio Projects\n projects: returnProjects ? projects : [],\n // StrapiBlogPost\n attributes: {\n ...post?.attributes,\n metadata: post?.attributes?.metadata || global.attributes.metadata,\n },\n // PageProps\n headerType: {\n extendable: true,\n theme: 'light',\n },\n headerNavMenus: global.attributes.navbar.navMenus || [],\n headerButtons: global.attributes.navbar.buttons || [],\n footerLinks: global.attributes.footer.links || [],\n metadata: {\n title:\n post.attributes.metadata?.title ?? global.attributes.metadata.title,\n description:\n post.attributes.metadata?.description ??\n global.attributes.metadata.description,\n shareImage: {\n url: metaShareImageUrl,\n alt:\n post.attributes.metadata?.shareImage?.alt ??\n global.attributes.metadata.shareImage?.alt ??\n DEFAULT_SHARE_ALT,\n },\n metaTitleSuffix: global.attributes.metaTitleSuffix,\n favicon: strapiMediaUrl(global.attributes.favicon, 'thumbnail'),\n },\n slices: post?.attributes.slices,\n blogPosts: returnBlog ? blog : [],\n banner: global.attributes.banner,\n topBanner: post?.attributes.topBanner || global.attributes.topBanner,\n customerStories: [],\n preview: !!context.preview,\n isFallbackLocale: context.locale !== post.attributes.locale,\n };\n};\n\nexport default mergeGlobalAndStrapiBlogPostData;\n","import { GetStaticPropsContext } from 'next';\nimport strapiMediaUrl from './strapiMediaUrl';\nimport {\n IStrapiData,\n StrapiCustomerStory,\n StrapiCustomerStoryProps,\n StrapiGlobal,\n} from '..';\nimport { DEFAULT_SHARE_ALT, DEFAULT_SHARE_IMAGE } from '../constants/metadata';\nimport { SLICES_WITH_CUSTOMER_STORIES } from '../constants/slicesConfig';\n\nconst mergeGlobalAndStrapiCustomerStoryData = (\n context: GetStaticPropsContext,\n global: IStrapiData<StrapiGlobal>,\n customerStory: IStrapiData<StrapiCustomerStory>,\n customerStories: IStrapiData<StrapiCustomerStory>[]\n): StrapiCustomerStoryProps => {\n const metaShareImageUrl = customerStory.attributes.metadata?.shareImage\n ? strapiMediaUrl(\n customerStory.attributes.metadata?.shareImage.media ??\n global.attributes.metadata.shareImage?.media,\n 'large'\n )\n : DEFAULT_SHARE_IMAGE;\n\n const returnCustomerStories = customerStory.attributes.slices.some((slice) =>\n SLICES_WITH_CUSTOMER_STORIES.includes(slice.__component)\n );\n\n return {\n ...customerStory,\n // Portfolio Projects\n projects: [],\n attributes: {\n ...customerStory?.attributes,\n metadata:\n customerStory?.attributes?.metadata || global.attributes.metadata,\n },\n // PageProps\n headerType: {\n extendable: true,\n theme: 'light',\n },\n headerNavMenus: global.attributes.navbar.navMenus || [],\n headerButtons: global.attributes.navbar.buttons || [],\n footerLinks: global.attributes.footer.links || [],\n metadata: {\n title:\n customerStory.attributes.metadata?.title ??\n global.attributes.metadata.title,\n description:\n customerStory.attributes.metadata?.description ??\n global.attributes.metadata.description,\n shareImage: {\n url: metaShareImageUrl,\n alt:\n customerStory.attributes.metadata?.shareImage?.alt ??\n global.attributes.metadata.shareImage?.alt ??\n DEFAULT_SHARE_ALT,\n },\n metaTitleSuffix: global.attributes.metaTitleSuffix,\n favicon: strapiMediaUrl(global.attributes.favicon, 'thumbnail'),\n },\n slices: customerStory?.attributes.slices,\n customerStories: returnCustomerStories ? customerStories : [],\n banner: global.attributes.banner,\n topBanner:\n customerStory?.attributes.topBanner || global.attributes.topBanner,\n blogPosts: [],\n preview: !!context.preview,\n isFallbackLocale: context.locale !== customerStory.attributes.locale,\n };\n};\n\nexport default mergeGlobalAndStrapiCustomerStoryData;\n","import { GetStaticPropsContext } from 'next';\nimport strapiMediaUrl from './strapiMediaUrl';\nimport {\n IStrapiData,\n StrapiBlogPost,\n StrapiCustomerStory,\n StrapiGlobal,\n StrapiPage,\n StrapiPageProps,\n} from '..';\nimport PortfolioProject from '../models/PortfolioProject';\nimport {\n DARK_THEME_HEADER_SECTIONS,\n EXTENDABLE_HEADER_SECTIONS,\n SLICES_WITH_BLOG_POSTS,\n SLICES_WITH_CUSTOMER_STORIES,\n SLICES_WITH_PROJECTS,\n} from '../constants/slicesConfig';\nimport { DEFAULT_SHARE_ALT, DEFAULT_SHARE_IMAGE } from '../constants/metadata';\n\nconst mergeGlobalAndStrapiPageData = (\n context: GetStaticPropsContext,\n global: IStrapiData<StrapiGlobal>,\n page: IStrapiData<StrapiPage>,\n blogPosts: IStrapiData<StrapiBlogPost>[],\n customerStories: IStrapiData<StrapiCustomerStory>[],\n projects: PortfolioProject[]\n): StrapiPageProps => {\n const metaShareImageUrl = page.attributes.metadata?.shareImage\n ? strapiMediaUrl(\n page.attributes.metadata?.shareImage.media ??\n global.attributes.metadata.shareImage?.media,\n 'large'\n )\n : DEFAULT_SHARE_IMAGE;\n\n const returnBlogPosts = page.attributes.slices.some((slice) =>\n SLICES_WITH_BLOG_POSTS.includes(slice.__component)\n );\n const returnCustomerStories = page.attributes.slices.some((slice) =>\n SLICES_WITH_CUSTOMER_STORIES.includes(slice.__component)\n );\n const returnProjects = page.attributes.slices.some((slice) =>\n SLICES_WITH_PROJECTS.includes(slice.__component)\n );\n\n return {\n ...page,\n // Portfolio Projects\n projects: returnProjects ? projects : [],\n // StrapiPage\n attributes: {\n ...page?.attributes,\n metadata: page?.attributes?.metadata ?? global.attributes.metadata,\n },\n // PageProps\n headerType: {\n extendable: EXTENDABLE_HEADER_SECTIONS.includes(\n page.attributes.slices[0]?.__component\n ),\n theme: DARK_THEME_HEADER_SECTIONS.includes(\n page.attributes.slices[0]?.__component\n )\n ? 'dark'\n : 'light',\n },\n headerNavMenus: global.attributes.navbar.navMenus || [],\n headerButtons: global.attributes.navbar.buttons || [],\n footerLinks: global.attributes.footer.links || [],\n metadata: {\n title:\n page.attributes.metadata?.title ?? global.attributes.metadata.title,\n description:\n page.attributes.metadata?.description ??\n global.attributes.metadata.description,\n shareImage: {\n url: metaShareImageUrl,\n alt:\n page.attributes.metadata?.shareImage?.alt ??\n global.attributes.metadata.shareImage?.alt ??\n DEFAULT_SHARE_ALT,\n },\n metaTitleSuffix: global.attributes.metaTitleSuffix,\n favicon: strapiMediaUrl(global.attributes.favicon, 'thumbnail'),\n },\n slices: page?.attributes.slices,\n blogPosts: returnBlogPosts ? blogPosts : [],\n banner: global.attributes.banner,\n topBanner: page?.attributes.topBanner || global.attributes.topBanner,\n customerStories: returnCustomerStories ? customerStories : [],\n preview: !!context.preview,\n isFallbackLocale: context.locale !== page.attributes.locale,\n };\n};\n\nexport default mergeGlobalAndStrapiPageData;\n","import { GetStaticPropsContext } from 'next';\nimport strapiMediaUrl from './strapiMediaUrl';\nimport {\n IStrapiData,\n StrapiBlogPost,\n StrapiGlobal,\n StrapiProject,\n StrapiProjectProps,\n} from '..';\nimport PortfolioProject from '../models/PortfolioProject';\nimport {\n DARK_THEME_HEADER_SECTIONS,\n EXTENDABLE_HEADER_SECTIONS,\n SLICES_WITH_BLOG_POSTS,\n SLICES_WITH_PROJECTS,\n} from '../constants/slicesConfig';\nimport { DEFAULT_SHARE_ALT, DEFAULT_SHARE_IMAGE } from '../constants/metadata';\n\nconst mergeGlobalAndStrapiProject = (\n context: GetStaticPropsContext,\n global: IStrapiData<StrapiGlobal>,\n project: IStrapiData<StrapiProject>,\n blogPosts: IStrapiData<StrapiBlogPost>[],\n projects: PortfolioProject[]\n): StrapiProjectProps => {\n const metaShareImageUrl = project.attributes.metadata?.shareImage\n ? strapiMediaUrl(\n project.attributes.metadata?.shareImage.media ??\n global.attributes.metadata.shareImage?.media,\n 'large'\n )\n : DEFAULT_SHARE_IMAGE;\n\n const returnBlogPosts = project.attributes.slices.some((slice) =>\n SLICES_WITH_BLOG_POSTS.includes(slice.__component)\n );\n const returnProjects = project.attributes.slices.some((slice) =>\n SLICES_WITH_PROJECTS.includes(slice.__component)\n );\n\n return {\n ...project,\n // Portfolio Projects\n projects: returnProjects ? projects : [],\n // StrapiProject\n attributes: {\n ...project.attributes,\n metadata: project?.attributes?.metadata || global.attributes.metadata,\n },\n headerType: {\n extendable: EXTENDABLE_HEADER_SECTIONS.includes(\n project.attributes.slices[0]?.__component\n ),\n theme: DARK_THEME_HEADER_SECTIONS.includes(\n project.attributes.slices[0]?.__component\n )\n ? 'dark'\n : 'light',\n },\n // PageProps\n headerNavMenus: global.attributes.navbar.navMenus || [],\n headerButtons: global.attributes.navbar.buttons || [],\n footerLinks: global.attributes.footer.links || [],\n metadata: {\n title:\n project.attributes.metadata?.title ?? global.attributes.metadata.title,\n description:\n project.attributes.metadata?.description ??\n global.attributes.metadata.description,\n shareImage: {\n url: metaShareImageUrl,\n alt:\n project.attributes.metadata?.shareImage?.alt ??\n global.attributes.metadata.shareImage?.alt ??\n DEFAULT_SHARE_ALT,\n },\n metaTitleSuffix: global.attributes.metaTitleSuffix,\n favicon: strapiMediaUrl(global.attributes.favicon, 'thumbnail'),\n },\n slices: project.attributes.slices,\n blogPosts: returnBlogPosts ? blogPosts : [],\n banner: global.attributes.banner,\n topBanner: project?.attributes.topBanner || global.attributes.topBanner,\n customerStories: [],\n preview: !!context.preview,\n isFallbackLocale: context.locale !== project.attributes.locale,\n };\n};\n\nexport default mergeGlobalAndStrapiProject;\n"],"names":["STRAPI_URI","process","env","NEXT_PUBLIC_STRAPI_URI","STRAPI_DEFAULT_PAGE_SIZE","STRAPI_FALLBACK_LOCALE","strapiClient","setupCache","axios","default","create","baseURL","paramsSerializer","p","qs","stringify","encodeValuesOnly","timeout","getAllSlugsFromStrapi","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","path","locales","_temp","_ref2$filters","params","slugs","fallBackSlugs","nonFallbackSlugs","wrap","_context","prev","next","locale","filters","get","sent","data","map","page","slug","attributes","flatMap","filter","_extends","abrupt","concat","stop","_x","_x2","_x3","apply","this","arguments","ShapePosition","FPM_API_URI","NEXT_PUBLIC_FPM_API_URI","CDN_URI","fpmClient","getPortfolioProjects","preview","_yield$Promise$all","fpmProjects","strapiProjectsLocalized","strapiProjectsEnglish","strapiProjects","_i","_arr","project","populate","publicationState","Promise","all","Map","length","fpmProjectId","set","fpmProject","_strapiProject$attrib","strapiProject","id","toReturn","creditsAvailable","thumbnail","footerSubTitle","portfolio","host","portfolioHost","getStaticPathsFromStrapi","getStaticPropsFromStrapi","_ref2","_ref$locale","_ref$preview","_ref$filters","enrichedFilters","getStrapiCollectionType","key","localizedResponses","fallbackResponses","responses","d","fallbackResponse","find","localized","getStrapiSingleType","_error$response","t0","isAxiosError","response","status","strapiMediaUrl","media","preferredSize","_media$data$attribute","url","ext","formats","indexOf","includes","STORYBOOK","DEFAULT_SHARE_IMAGE","DEFAULT_SHARE_ALT","EXTENDABLE_HEADER_SECTIONS","DARK_THEME_HEADER_SECTIONS","SLICES_WITH_BLOG_POSTS","SLICES_WITH_CUSTOMER_STORIES","SLICES_WITH_PROJECTS","strapiLinkUrl","strapiLink","_strapiLink","_strapiLink2","undefined","ZoomableImage","image","_ref$zoom","zoom","_useState","useState","isZoomed","setIsZoomed","_useState2","backgroundPos","setBackgroundPos","imageSrc","img","zoomInPosition","e","zoomer","currentTarget","getBoundingClientRect","clientX","x","width","y","clientY","height","React","createElement","Fragment","Head","rel","as","href","Box","position","display","overflow","flexShrink","scrollSnapAlign","scrollSnapStop","draggable","cursor","backgroundImage","backgroundSize","backgroundPosition","onClick","toggleZoomImage","handleClick","onMouseMove","handleMove","Image","src","alt","fill","style","visibility","objectFit","FullScreenImage","images","isOpen","onClose","_ref$currentIndex","currentIndex","setCurrentIndex","containerRef","useRef","useLockBodyScroll","canMoveRight","useMemo","canMoveLeft","onRight","useCallback","c","onLeft","useKey","useEffect","setTimeout","_containerRef$current","current","scrollTo","left","clientWidth","behavior","BoemlyModal","title","trigger","size","content","Flex","insetY","insetX","alignItems","justifyContent","ref","flexGrow","flexBasis","gap","marginX","scrollSnapType","inset","pointerEvents","IconButton","icon","CaretLeft","variant","mr","CaretRight","ml","BREAKPOINT_MD","BREAKPOINT_LG","BREAKPOINT_MD_QUERY","BREAKPOINT_LG_QUERY","FullWidthImage","slice","setIsOpen","isMobile","useMediaQuery","DefaultSectionContainer","Wrapper","DefaultSectionHeader","isHero","tagline","text","taglineProps","textAlign","mt","titleProps","maxW","textProps","borderRadius","openHubSpotChat","w","window","HubSpotConversations","widget","open","hsConversationsOnReady","StrapiLinkButton","link","buttonProps","_objectWithoutPropertiesLoose","_excluded","adBlockDetected","useDetectAdBlock","Button","intercomLauncher","Link","Hero","minHeight","backgroundColor","overflowX","Gradient","shape","bottom","borderTopRightRadius","right","top","transform","subTitle","color","mx","button","additionalButtons","IconGrid","flexDirection","Spacer","h","SimpleGrid","columns","iconsWithTextAndButton","rowGap","iconWithTextAndButton","margin","Heading","mb","Text","LinkedInIcon","viewBox","xmlns","clipPath","StrapiLinkButtonWithIcon","props","rightIcon","destination","Globe","getLinkIcon","ImageGrid","_useToken","useToken","minChildWidth","links","flexDir","flexWrap","ImageTextSequence","oneColumnGrid","primary50","gray700","background","imageTextRows","index","imageBox","LeftTextRightCard","push","useRouter","Grid","templateColumns","templateRows","GridItem","colSpan","rowSpan","pr","checkMarkLabels","BoemlyList","listItems","colorScheme","ArrowRight","card","PortfolioCard","_slice$card","facts","portfolioNumber","LogoGridWithText","RichText","logos","logo","MapHeroContainer","styled","_templateObject","_taggedTemplateLiteralLoose","MapHeroTextContainer","_templateObject2","ShapeContainer","_templateObject3","MapContainer","_templateObject4","MapGradient","_templateObject5","MapHero","belowBreakpoint","maxWidth","buttons","mobileMap","convertToKebabCase","str","matches","match","toLowerCase","join","VARIANTS","gray","tagLineColor","textColor","accordionVariant","otherQuestionsBackground","green","white","QAndA","_slice$variant","pb","hero","paddingY","maxHeight","paddingTop","paddingRight","overflowY","BoemlyAccordion","rows","questionsAndAnswers","defaultIndex","padding","otherQuestions","HeroCard","_slice$hero","QuoteCards","paddingBottom","shapes","Shape","radius","cards","QuoteCard","avatar","name","description","marginTop","RichTextSection","Steps","_slice$card$shapes","gray900","Array","steps","stepRefs","setStepRefs","stepProgress","setStepProgress","offsetY","useWindowScroll","windowHeight","useWindowSize","createRef","containerOffsetTop","offsetTop","_ref$current","currentItemOffsetTop","Center","step","options","forceBlock","marginBottom","borderLeft","opacity","borderRight","transition","ShapesCard","CreditsAvailableState","shapePositions","topLeft","bottomRight","topRight","bottomLeft","oppositesOfCorners","_oppositesOfCorners","unset","variants","positionIcon","TextCardGrid","justifyItems","zIndex","boxShadow","borderBottomRightRadius","borderBottomLeftRadius","borderTopLeftRadius","css","listProps","textSize","buttonIndex","weight","CarouselContainer","CarouselInnerContainer","motion","div","numberOfItems","CardContainer","GLOBAL_STYLE","rootMessagesDe","messages","en","de","getMessages","messagesLocale","Object","keys","cache","createIntlCache","intlFactory","createIntl","IntlContext","createContext","ContextProvider","children","Global","styles","Provider","value","TextCarousel","_useMeasure","useMeasure","itemRef","itemWidth","formatMessage","useContext","windowWidth","sliderIndex","setSliderIndex","slides","sliderItemsWidth","offsetLeft","allowScroll","ITEM_GAP","animate","duration","ease","TextCardWithIcon","displayAs","py","px","AnimatePresence","initial","exit","ArrowLeft","TextWithTextCards","contact","ContactArea","_slice$contact","_slice$contact2","MapBoxStyle","CreditsAvailableState$1","FORMAT_AS_HECTARE_CONFIG","unit","unitDisplay","maximumFractionDigits","FORMAT_AS_PERCENT_CONFIG","PortfolioProjectCard","_creditsAvailableMess","_project$creditsAvail","_project$thumbnail","_project$thumbnail2","_project$thumbnail3","_useContext","formatNumber","creditsAvailableMessages","YES","SOME","NO","NOT_YET","ProjectCard","area","location","footerTitle","TextWithCard","portfolioProject","projects","_slice$project","cardPosition","columnGap","LinkCardsGrid","borderStyle","borderWidth","borderColor","transitionDuration","MEDIUM_TRANSITION_DURATION","_hover","minWidth","colors","dark","light","SmallHero","theme","gradient","tags","direction","justify","Tag","BlogItemContainer","ImageContainer","Blog","blogPosts","formatDate","sortedBlogPosts","blog_posts","sort","a","b","Date","createdAt","getTime","spacingX","spacingY","blogPost","bp","category","teaser","DatePersonPair","date","person","author","ConditionalWrapper","condition","wrapper","ProjectsGrid","filteredProjects","some","passHref","legacyBehavior","FONT_CUSTOMIZATIONS","body","heading","mono","MinimalProviders","IntlProvider","BoemlyThemeProvider","fonts","CreditsAvailableBadge","_variants","Badge","NextLink","MapMarker","projectDeveloper","_ref$portfolioHost","_ref$isPublic","isPublic","_useDisclosure","useDisclosure","onOpen","blue600","onMouseEnter","onMouseLeave","MapPin","Container","shadow","whiteSpace","mapboxStyle","mapboxgl","accessToken","CtaCardType","ProjectsMap","boundingBoxes","minLeft","minBottom","maxRight","maxTop","geom","center","defaultCenterCoordinates","longitude","latitude","bounds","coordinates","forEach","mapContainer","container","CaliTerrain","defaultZoomLevel","maxZoom","_project$projectDevel","document","createRoot","render","marker","Marker","offset","setLngLat","addTo","remove","Video","youTubeID","frameBorder","allow","allowFullScreen","FullWidthHighlightQuote","quote","AvatarWithName","avatarWithName","orientation","SliderContainer","SliderInnerContainer","ItemContainer","aspectRatio","ALLOWED_RATIOS","FullWidthImageSlider","imageRef","imageWidth","imageCount","ratio","minDiff","Math","abs","posMinDiff","allowedRatio","caption","SideBySideImages","STATES","paddingTagline","paddingTitle","buttonJustifyContent","textMarginLeft","textMarginRight","centerWithoutImage","centerWithImage","taglineColor","titleColor","subTitleColor","Cta","ctaCards","ctaCard","ctaCardType","CenterWithImage","CenterWithoutImage","Left","Right","getTypeOfCard","elevation","backgroundShape","marginLeft","marginRight","paddingX","fontFamily","fontSize","fontWeight","lineHeight","CtaOnly","Glossary","copyToClipboard","useCopyToClipboard","grouped","copiedItem","setCopiedItem","glossary_items","localeCompare","curr","_curr$attributes$titl","at","toUpperCase","handleAnchorClick","_window","currentUrl","split","entries","_ref3","letter","items","placeSelf","spacing","item","scrollMarginTop","Check","LinkIcon","_onClick","_callee2","_context2","Divider","ShopCheckout","validateForm","values","errors","contributionValue","currency","badge","textTransform","checkoutText","LabelNumberPair","label","number","pricePerKg","Formik","initialValues","initialContributionValue","validate","onSubmit","checkoutURL","URL","currentURL","searchParams","append","batchId","floor","toString","pathname","couponId","touched","handleSubmit","summaryPrice","Form","Field","_ref4","BoemlyFormControl","inputProps","type","field","rightAddonsOrElements","InputRightAddon","isInvalid","errorMessage","minimumFractionDigits","taxInPercent","factKeyColor","factValueColor","Facts","fact","sortByCreatedAt","BlogCards","mobile","blogPostsToDisplay","_slice$blogPostCatego","blogPostCategory","_blogPost$attributes$","_slice$blogPostCatego2","_blogPost$attributes$2","calculateTaxIncludedValue","parseInt","contributionValueCurrency","isNaN","SmallCheckout","subtitle","contributionValueKgs","setValues","_ref5","onChange","target","valueAsNumber","_ref6","my","ProjectInfo","amount","start","end","monthsDifference","yearsDifference","areaInM2","subtitles","LabelTextPair","areaSubtitle","locationSubtitle","year","month","startSubtitle","years","getMonth","getFullYear","timeSpanSubtitle","projectType","verificationStandard","projectTypeSubtitle","projectDeveloperSubtitle","defaultMessage","verificationStandardSubtitle","defaultIssuer","logoUrl","forecastedAmountYearly","riskBuffer","forecastedAmountSubtitle","riskBufferSubtitle","DocumentsDownloadList","documentUrls","documentUrl","FilePdf","DownloadSimple","Contact","border","ProjectFacts","customTitle","customSubtitle","customButton","contactTitle","contactText","contactButton","contactAvatar","CustomerCard","customerStory","borderTopRadius","cardImage","pt","customerCardCustomerIndustry","CustomerQuoteCard","customerName","quoteCardCustomerTitle","quoteCardQuote","LogoCard","marginY","CustomerStories","customerStories","customer_stories","cs","BULLET_POINT_VARIANTS","bulletPointColor","Icon","X","factColor","dividerColor","Comparison","comparisonCards","comparisonCard","factTitle","factSubtitle","lists","list","Timeline","visibleItems","setVisibleItems","timelineItems","alignContent","gridTemplateColumns","backgroundShapes","prevVisibleItems","m","FormattedMessage","BoemlyAlert","_shareImage$url","_shareImage$alt","shareImage","_ref$metaTitleSuffix","metaTitleSuffix","_ref$favicon","favicon","_ref$domain","domain","shareImageUrl","shareImageAlt","property","CustomSlice","slices","__component","projectId","context","global","post","blog","_post$attributes$meta","_post$attributes$meta2","_post$attributes$meta3","_global$attributes$me","_post$attributes","_post$attributes$meta4","_post$attributes$meta5","_post$attributes$meta6","_post$attributes$meta7","_post$attributes$meta8","_post$attributes$meta9","_global$attributes$me2","metaShareImageUrl","metadata","returnBlog","returnProjects","headerType","extendable","headerNavMenus","navbar","navMenus","headerButtons","footerLinks","footer","banner","topBanner","isFallbackLocale","_customerStory$attrib","_customerStory$attrib2","_customerStory$attrib3","_customerStory$attrib4","_customerStory$attrib5","_customerStory$attrib6","_customerStory$attrib7","_customerStory$attrib8","_customerStory$attrib9","_customerStory$attrib10","returnCustomerStories","_page$attributes$meta","_page$attributes$meta2","_page$attributes$meta3","_page$attributes$meta4","_page$attributes","_page$attributes$slic","_page$attributes$slic2","_page$attributes$meta5","_page$attributes$meta6","_page$attributes$meta7","_page$attributes$meta8","_page$attributes$meta9","_page$attributes$meta10","returnBlogPosts","_project$attributes$m","_project$attributes$m2","_project$attributes$m3","_project$attributes","_project$attributes$s","_project$attributes$s2","_project$attributes$m4","_project$attributes$m5","_project$attributes$m6","_project$attributes$m7","_project$attributes$m8","_project$attributes$m9"],"mappings":"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"}
|