@blateral/b.kit 0.10.31 → 0.10.33

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../node_modules/tslib/tslib.es6.js","../src/utils/useScroll.ts","../src/utils/styles.ts","../src/utils/useMediaQuery.ts","../src/utils/useEqualSheetHeight.ts","../src/utils/cookie-consent/cookie.ts","../src/utils/useIE.ts","../src/utils/useItemHeight.ts","../src/utils/useScrollTo.ts","../src/utils/usePoster.ts","../src/utils/useInterval.ts","../src/utils/useTouch.ts","../src/utils/useImgPreload.ts","../src/utils/hexRgbConverter.ts","../src/utils/LibThemeProvider.tsx","../src/components/base/Section.tsx","../src/components/base/Wrapper.tsx","../src/components/blocks/Image.tsx","../src/components/typography/Heading.tsx","../src/components/blocks/Title.tsx","../src/components/typography/Copy.tsx","../src/components/blocks/Actions.tsx","../src/components/blocks/Intro.tsx","../src/components/sections/Gallery.tsx","../src/components/base/Grid.tsx","../src/components/sections/Teaser.tsx","../src/components/sections/TeaserWide.tsx","../src/components/buttons/Pointer.tsx","../src/components/blocks/Slider.tsx","../src/components/sections/IconList.tsx","../src/components/sections/Article.tsx","../src/components/blocks/Feature.tsx","../src/components/sections/FeatureList.tsx","../src/components/blocks/PromotionCard.tsx","../src/components/sections/CrossPromotion.tsx","../src/components/sections/Poster.tsx","../src/components/base/icons/Play.tsx","../src/components/blocks/VideoCard.tsx","../src/components/sections/Video.tsx","../src/components/sections/CallToAction.tsx","../src/components/sections/FactList.tsx","../src/components/blocks/Fact.tsx","../src/components/sections/FactGrid.tsx","../src/components/sections/Table.tsx","../src/components/base/icons/ArrowLeftGhost.tsx","../src/components/base/icons/ArrowRightGhost.tsx","../src/components/blocks/LeafletMap.tsx","../src/components/sections/Map.tsx","../src/components/fields/Textfield.tsx","../src/components/fields/Textarea.tsx","../src/components/base/icons/Check.tsx","../src/components/fields/Checkbox.tsx","../src/components/sections/Form.tsx","../src/components/base/icons/ArrowLeftRight.tsx","../src/components/sections/ComparisonSlider.tsx","../src/components/sections/carousel/CarouselBase.tsx","../src/components/sections/carousel/ImageCarousel.tsx","../src/components/sections/carousel/FeatureCarousel.tsx","../src/components/sections/carousel/PromotionCarousel.tsx","../src/components/sections/carousel/VideoCarousel.tsx","../src/components/typography/Link.tsx","../src/components/blocks/Bdot.tsx","../src/components/blocks/SocialList.tsx","../src/components/sections/Footer.tsx","../src/utils/backgroundImage.ts","../src/components/sections/header/HeaderKenBurns.tsx","../src/components/sections/header/HeaderPoster.tsx","../src/components/typography/Callout.tsx","../src/components/sections/header/HeaderVideo.tsx","../src/components/sections/header/Header.tsx","../src/components/sections/news/NewsAuthorCard.tsx","../src/components/blocks/Tag.tsx","../src/utils/statusFormatter.ts","../src/components/blocks/NewsCard.tsx","../src/components/sections/news/NewsFooter.tsx","../src/components/sections/news/NewsImages.tsx","../src/components/sections/news/NewsIntro.tsx","../src/components/sections/news/NewsList.tsx","../src/components/sections/news/NewsTable.tsx","../src/components/sections/news/NewsText.tsx","../src/components/sections/news/NewsVideo.tsx","../src/components/sections/news/NewsOverview.tsx","../src/utils/useObserverSupport.ts","../src/components/buttons/Button.tsx","../src/components/buttons/ButtonGhost.tsx","../src/components/fields/CompactForm.tsx","../src/components/fields/SearchInput.tsx","../src/utils/cookie-consent/mutations.ts","../src/components/blocks/CookieConsent.tsx","../src/components/base/icons/Cross.tsx","../src/components/sections/navigation/menu/Flyout.tsx","../src/components/sections/navigation/menu/Menu.tsx","../src/components/base/icons/MenuBurger.tsx","../src/components/sections/navigation/TopBar.tsx","../src/components/sections/navigation/Navigation.tsx","../src/components/base/icons/ArrowRight.tsx","../src/components/base/icons/CrossSmall.tsx","../src/components/base/icons/Magnifier.tsx","../src/components/base/icons/FlyTo.tsx","../src/components/base/icons/Star.tsx","../src/components/base/icons/StarGhost.tsx","../src/components/base/icons/Mail.tsx","../src/components/base/icons/Phone.tsx","../src/components/base/icons/Route.tsx","../src/components/base/icons/socials/Facebook.tsx","../src/components/base/icons/socials/LinkedIn.tsx","../src/components/base/icons/socials/Twitter.tsx","../src/components/base/icons/socials/Xing.tsx","../src/components/base/icons/socials/Instagram.tsx","../src/components/base/icons/socials/Youtube.tsx"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { useEffect, useRef, useState } from 'react';\n\nexport enum ScrollDirection {\n UP,\n DOWN,\n}\n\nexport const useScroll = ({\n initialTopOffset = 0,\n onLeftOffset,\n onEnterOffset,\n}: {\n initialTopOffset?: number;\n onLeftOffset?: () => void;\n onEnterOffset?: () => void;\n}) => {\n const [topOffset, setTopOffset] = useState<number>(initialTopOffset);\n const [isTop, setIsTop] = useState<boolean>(true);\n const [isInOffset, setIsInOffset] = useState<boolean>(true);\n const [scrollDirection, setScrollDirection] = useState<ScrollDirection>(\n ScrollDirection.DOWN\n );\n const lastScrollPos = useRef<number>(0);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const handleScroll = () => {\n setIsTop(window.pageYOffset <= 1);\n setIsInOffset(window.pageYOffset <= 1 + topOffset);\n\n if (lastScrollPos.current) {\n // check if top offset is left\n if (\n window.pageYOffset > 1 + topOffset &&\n lastScrollPos.current <= 1 + topOffset\n ) {\n onLeftOffset && onLeftOffset();\n }\n\n // check if top offset was joined\n if (\n window.pageYOffset <= 1 + topOffset &&\n lastScrollPos.current > 1 + topOffset\n ) {\n onEnterOffset && onEnterOffset();\n }\n\n setScrollDirection((prev) => {\n if (window.pageYOffset <= 1) return ScrollDirection.DOWN;\n return window.pageYOffset > lastScrollPos.current\n ? ScrollDirection.DOWN\n : window.pageYOffset < lastScrollPos.current\n ? ScrollDirection.UP\n : prev;\n });\n }\n lastScrollPos.current = window.pageYOffset;\n };\n\n handleScroll();\n window.addEventListener('scroll', handleScroll);\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n };\n }, [\n lastScrollPos,\n onLeftOffset,\n onEnterOffset,\n scrollDirection,\n topOffset,\n ]);\n\n return {\n isTop,\n isInOffset,\n scrollDirection,\n setTopOffset,\n topOffset,\n };\n};\n","import { css, DefaultTheme } from 'styled-components';\n\nexport type MediaQueryType =\n | 'small'\n | 'medium'\n | 'semilarge'\n | 'large'\n | 'xlarge'\n | 'xxlarge'\n | 'xxxLarge';\n\nexport const mq: { [key in Exclude<MediaQueryType, 'small'>]: string } = {\n medium: '(min-width: 40em)', // 640 px\n semilarge: '(min-width: 52em)', // 832 px\n large: '(min-width: 64em)', // 1024 px\n xlarge: '(min-width: 90em)', // 1440 px\n xxlarge: '(min-width: 105em)', // 1680 px\n xxxLarge: '(min-width: 150em)', // 2400 px\n};\n\nexport const spacings = {\n nudge: 5,\n spacer: 20,\n wrapperSmall: 1000,\n wrapper: 1440,\n wrapperLarge: 2400,\n};\n\n/***** Range Helper *****/\nexport const getSizeByRange = (range: [number, number]): string =>\n `calc(${range[0]}px + (${range[1]} - ${range[0]}) * ((100vw - 300px) / (${spacings.wrapperLarge} - 320)));`;\n\nexport const withRange = (\n range: [number, number],\n property: string\n): string => {\n if (!property) return '';\n\n return `\n ${property}: ${range[0]}px;\n ${property}: ${getSizeByRange(range)};\n\n @media ${mq.xxlarge} {\n ${property}: ${range[1]}px;\n }\n `;\n};\n\n/**\n * Generate css attributes to style text color with plain color or gradient\n * @param fallbackColor\n * @param gradient\n */\nexport const styleTextColor = (fallbackColor?: string, gradient?: string) => {\n if (gradient) {\n return css`\n color: ${fallbackColor};\n\n @supports (-webkit-text-stroke: thin) {\n padding-top: 2px;\n background: ${gradient};\n background-clip: text;\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n `;\n } else {\n return css`\n color: ${fallbackColor};\n `;\n }\n};\n\n/***** Color Types *****/\ninterface ColorOptions {\n light: string;\n medium: string;\n dark: string;\n}\n\nexport type ColorOptionsType = keyof ColorOptions;\n\nexport interface Colors {\n dark: string;\n light: string;\n mono: ColorOptions;\n primary: ColorOptions;\n secondary: ColorOptions;\n tertiary: ColorOptions;\n}\n\nexport type ColorType = keyof Colors;\n\n/***** Font Types *****/\nexport interface FontProps {\n family: string;\n weight?: string;\n style?: string;\n lineHeight?: string;\n letterSpacing?: string;\n size: [number, number];\n textTransform?: string;\n color?: string;\n colorInverted?: string;\n colorGradient?: string;\n colorGradientInverted?: string;\n}\n\nexport type FontPropsType = keyof FontProps;\n\nexport interface FontOptions {\n small: FontProps;\n medium: FontProps;\n big: FontProps;\n}\n\nexport type FontOptionType = keyof FontOptions;\n\nexport interface Fonts {\n copy: FontOptions;\n 'copy-i': FontOptions;\n 'copy-b': FontOptions;\n super: FontProps;\n 'heading-1': FontProps;\n 'heading-2': FontProps;\n 'heading-3': FontProps;\n 'heading-4': FontProps;\n label: FontOptions;\n callout: FontOptions;\n}\n\nexport type FontType = keyof Fonts;\n\n/**\n * Base font styles for all font types\n */\nexport type FontBase = FontProps;\n\n/***** Colors *****/\nconst defaultColors: Colors = {\n dark: '#000000',\n light: '#ffffff',\n mono: {\n light: '#F0F0F0',\n medium: '#C8C8C8',\n dark: '#A5A5A5',\n },\n primary: {\n light: '#DD8AA3',\n medium: '#98012E',\n dark: '#59011B',\n },\n secondary: {\n light: '#5A7384',\n medium: '#35444E',\n dark: '#222A30',\n },\n tertiary: {\n light: '#F2F5FA',\n medium: '#C9CED7',\n dark: '#A8ABB4',\n },\n};\n\n/***** Fonts *****/\nconst copyBase: FontProps = {\n family: 'Roboto',\n weight: '400',\n style: 'normal',\n lineHeight: '1.53',\n letterSpacing: '0',\n size: [10, 13],\n textTransform: '',\n color: defaultColors.dark,\n colorInverted: defaultColors.light,\n};\n\nconst headingBase: FontProps = {\n family: 'Roboto',\n weight: '700',\n style: 'normal',\n lineHeight: '1.1',\n letterSpacing: '0',\n size: [38, 40],\n color: defaultColors.dark,\n colorInverted: defaultColors.light,\n};\n\nconst defaultFonts: Fonts = {\n copy: {\n small: {\n ...copyBase,\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n 'copy-i': {\n small: {\n ...copyBase,\n style: 'italic',\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n style: 'italic',\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n style: 'italic',\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n 'copy-b': {\n small: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n super: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.43',\n size: [14, 16],\n },\n 'heading-1': headingBase,\n 'heading-2': {\n ...headingBase,\n size: [32, 35],\n lineHeight: '1.14',\n },\n 'heading-3': {\n ...headingBase,\n size: [19, 22],\n lineHeight: '1.14',\n },\n 'heading-4': {\n ...headingBase,\n size: [16, 19],\n lineHeight: '1.5',\n },\n label: {\n small: {\n ...copyBase,\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n callout: {\n small: {\n ...headingBase,\n lineHeight: '1.14',\n size: [33, 35],\n },\n medium: {\n ...headingBase,\n lineHeight: '1.18',\n size: [50, 55],\n },\n big: {\n ...headingBase,\n lineHeight: '1.18',\n size: [60, 62],\n },\n },\n};\n\n/***** Global Settings *****/\nexport interface GlobalSettings {\n sections: {\n /** Add seperation around sections with background attribute 'plain' (e.g. Teaser) */\n plainSeperation: boolean;\n /** Customnize gradient for all text on image background gradients */\n imageTextGradient: string;\n /** Date and Time Formats for all news sections */\n newsDateFormat: string;\n newsTimeFormat: string;\n newsLocaleKey: 'de' | 'en';\n };\n}\n\nconst defaultGlobalSettings: GlobalSettings = {\n sections: {\n plainSeperation: false,\n imageTextGradient: `\n linear-gradient(\n 0deg,\n rgba(0, 0, 0, 0.6) 0%,\n rgba(0, 0, 0, 0.4) 30%,\n rgba(0, 0, 0, 0.1) 60%,\n rgba(0, 0, 0, 0) 100%\n );\n `,\n newsDateFormat: 'dd/mm/yy',\n newsTimeFormat: 'hh:mm',\n newsLocaleKey: 'en',\n },\n};\n\n/***** Theme Helper *****/\nexport const getBaseTheme = () => {\n return {\n colors: { ...defaultColors },\n fonts: { types: { ...defaultFonts } },\n globalSettings: { ...defaultGlobalSettings },\n } as DefaultTheme;\n};\n\nexport const getTheme = (theme?: DefaultTheme) => {\n return (\n (theme && theme.colors && theme.fonts && theme.globalSettings) ||\n getBaseTheme()\n );\n};\n\nexport const getColors = (theme?: DefaultTheme) => {\n return theme && theme.colors ? theme.colors : getBaseTheme().colors;\n};\n\nexport const getFonts = (theme?: DefaultTheme) => {\n return theme && theme.fonts?.types\n ? theme.fonts.types\n : getBaseTheme().fonts.types;\n};\n\nexport const getGlobalSettings = (theme?: DefaultTheme) => {\n return theme && theme.globalSettings\n ? theme.globalSettings\n : getBaseTheme().globalSettings;\n};\n","import { useEffect, useState } from 'react';\nimport { MediaQueryType, mq } from './styles';\n\nexport const isBrowser =\n typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\n// *****************\n// useBreakpoint\n// *****************\nconst checkMq = (cmq: MediaQueryType, checkMqs: MediaQueryType[]) => {\n return (\n isBrowser &&\n (checkMqs.length <= 0 || checkMqs.indexOf(cmq) > -1) &&\n (cmq !== 'small' ? window.matchMedia(mq[cmq]).matches : true)\n );\n};\n\nexport const getMediaQuery = (checkMqs: MediaQueryType[]): MediaQueryType => {\n if (checkMq('xxxLarge', checkMqs)) {\n return 'xxxLarge';\n } else if (checkMq('xxlarge', checkMqs)) {\n return 'xxlarge';\n } else if (checkMq('xlarge', checkMqs)) {\n return 'xlarge';\n } else if (checkMq('large', checkMqs)) {\n return 'large';\n } else if (checkMq('semilarge', checkMqs)) {\n return 'semilarge';\n } else if (checkMq('medium', checkMqs)) {\n return 'medium';\n } else {\n return 'small';\n }\n};\n\nexport const useMediaQuery = (mqs?: MediaQueryType[]) => {\n const checkMqs = mqs || [];\n const [mediaQuery, setMediaQuery] = useState<MediaQueryType | undefined>();\n\n useEffect(() => {\n const handleResize = () => {\n const newMediaQuery = getMediaQuery(checkMqs);\n\n if (newMediaQuery !== mediaQuery) {\n setMediaQuery(newMediaQuery);\n }\n };\n\n window.addEventListener('resize', handleResize);\n setMediaQuery(getMediaQuery(checkMqs));\n\n return () => window.removeEventListener('resize', handleResize);\n }, [checkMqs, mediaQuery]);\n\n return mediaQuery;\n};\n","import { useEffect, useState, MutableRefObject, createRef } from 'react';\nimport { useMediaQuery } from './useMediaQuery';\n\ninterface ItemsPerRow {\n small?: number;\n medium?: number;\n semilarge?: number;\n large?: number;\n xlarge?: number;\n}\n\ntype Mq = keyof ItemsPerRow;\n\n// ********************\n// useEqualSheetHeight\n// ********************\n\nexport const useEqualSheetHeight = (props: {\n listLength: number;\n identifiers: string[];\n responsive?: ItemsPerRow;\n}) => {\n const defaultResponsive = {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: 3,\n xlarge: 3,\n ...props.responsive,\n };\n const mqs: Mq[] = ['small', 'medium', 'semilarge', 'large', 'xlarge'];\n const currentMq = useMediaQuery(mqs) as Mq | undefined;\n const itemsPerRow = currentMq\n ? defaultResponsive[currentMq]\n : defaultResponsive.small;\n\n const [sheetRefs, setSheetRefs] = useState<\n MutableRefObject<HTMLDivElement>[]\n >([]);\n\n const makeRows = (\n result: Array<number>[],\n _: number,\n index: number,\n arr: number[]\n ) => {\n // make new row after 3 items\n if (index % itemsPerRow === 0)\n result.push(arr.slice(index, index + itemsPerRow) as Array<number>);\n return result;\n };\n\n const setHeights = (\n heights: (number | null)[],\n selector: string,\n refs: MutableRefObject<HTMLDivElement>[]\n ) => {\n const x = heights.reduce(makeRows, []);\n\n x.forEach((rowHeights, y) => {\n const highest = rowHeights.slice().sort((vA, vB) => {\n if (vA && vB) {\n if (vA > vB) return -1;\n return 1;\n } else return 0;\n })[0];\n\n // set height of all items in row to the highest value\n if (rowHeights.length > 1 && highest) {\n for (let x = 0; x < rowHeights.length; x++) {\n const index = x + y * itemsPerRow;\n const el = refs[index].current.querySelector(selector);\n\n if (el) {\n el.setAttribute('style', `height: ${highest}px`);\n }\n }\n }\n });\n };\n\n const resize = (refs: MutableRefObject<HTMLDivElement>[]) => () => {\n const identifierSizes = new Map<string, Array<number | null>>();\n\n // create identifier map\n for (let i = 0; i < props.identifiers.length; i++) {\n identifierSizes.set(props.identifiers[i], []);\n }\n\n // set height values\n refs.filter((ref) => ref.current).forEach(({ current }) => {\n // get height for each element\n props.identifiers.forEach((id) => {\n const element = current.querySelector(id);\n element?.removeAttribute('style');\n\n const prevHeights = identifierSizes.get(id);\n if (prevHeights)\n identifierSizes.set(id, [\n ...prevHeights,\n element ? element.scrollHeight : null,\n ]);\n });\n });\n\n // set heights for each identifier\n identifierSizes.forEach((value, key) => {\n setHeights(value, key, refs);\n });\n };\n\n useEffect(() => {\n const resizeHandler = resize(sheetRefs);\n resizeHandler();\n\n window.addEventListener('resize', resizeHandler);\n\n return () => {\n window.removeEventListener('resize', resizeHandler);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sheetRefs, currentMq]);\n\n const triggerCalculation = () => {\n setSheetRefs(() =>\n Array(props.listLength)\n .fill(null)\n .map((_, i) => sheetRefs[i] || createRef())\n );\n };\n\n useEffect(() => {\n setSheetRefs(() =>\n Array(props.listLength)\n .fill(null)\n .map((_, i) => sheetRefs[i] || createRef())\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.listLength]);\n\n return {\n sheetRefs,\n triggerCalculation,\n };\n};\n","export interface Cookie<T> {\n name: string;\n data: T;\n}\n\nexport const setCookie = <T>({\n name,\n data,\n days = -1,\n path = '/',\n}: {\n name: string;\n data: T;\n days?: number;\n path?: string;\n}) => {\n let cookieString = `${name}=`;\n\n // set cookie value\n let valueString = '';\n const dataKeys = Object.keys(data);\n for (let i = 0; i < dataKeys.length; i++) {\n valueString += `${dataKeys[i]}:${data[dataKeys[i]]}|`;\n }\n\n cookieString += encodeURIComponent(\n valueString.substr(0, valueString.length - 1)\n );\n\n // specify path\n cookieString += `; path=${path};`;\n\n // check if cookie should have lifetime\n if (days >= 0) {\n const date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n cookieString += ` expires=${date.toUTCString()};`;\n }\n document.cookie = cookieString;\n};\n\nexport const getCookie = <T>(name: string): Cookie<T> | undefined => {\n let cookie = undefined;\n\n // get cookie value\n const b = document.cookie.match('(^|;)\\\\s*' + name + '\\\\s*=\\\\s*([^;]+)');\n let cookieValue = b ? b.pop() : '';\n cookieValue = cookieValue ? decodeURIComponent(cookieValue) : '';\n\n if (cookieValue) {\n const valueArray = cookieValue.split('|').map((el) => {\n const keyValueArray = el.split(':');\n return {\n key: keyValueArray[0],\n value: keyValueArray[1],\n };\n });\n\n const cookieData: { [k: string]: any } = {};\n for (let i = 0; i < valueArray.length; i++) {\n const value: any = valueArray[i].value;\n\n // checking for right types\n if (!isNaN(Number(value)))\n cookieData[valueArray[i].key] = Number(value) as number;\n else if (isBoolean(value))\n cookieData[valueArray[i].key] = stringToBoolean(\n value\n ) as boolean;\n else cookieData[valueArray[i].key] = value as string;\n }\n\n cookie = {\n name: name,\n data: cookieData as T,\n } as Cookie<T>;\n }\n return cookie;\n};\n\nexport const deleteCookie = (name: string) => {\n setCookie<any>({ name, data: {} });\n};\n\nconst stringToBoolean = (value: string | number | boolean) => {\n return [true, 'true', 'True', 'TRUE', '1', 1].indexOf(value) > -1;\n};\n\nconst isBoolean = (value: string | number | boolean) => {\n return value === 'true' || value === 'false';\n};\n\nconst isNaN = (value: number) => {\n if (Number.isNaN !== undefined) return Number.isNaN(value);\n else return value !== value;\n};\n","import { useState, useEffect } from 'react';\n\nconst useIE = (initialValue?: boolean) => {\n const [isIE, setIE] = useState(initialValue || false);\n\n useEffect(() => {\n setIE((document.body.style as any).msTouchAction !== undefined);\n }, []);\n return isIE;\n};\n\nexport default useIE;\n","import { useEffect, useState } from 'react';\n\nexport const useItemHeight = () => {\n const [element, setElement] = useState<HTMLElement | null>(null);\n const [height, setHeight] = useState<number>(0);\n\n useEffect(() => {\n const calcHeight = () => {\n if (element) setHeight(element.offsetHeight);\n };\n\n if (element) {\n calcHeight();\n window.addEventListener('resize', calcHeight);\n }\n\n return () => {\n window.removeEventListener('resize', calcHeight);\n };\n }, [element]);\n\n return {\n setElement,\n height,\n };\n};\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useScrollTo = (fallbackScrollDuration: number) => {\n const startTime = useRef<number>(-1);\n const firstPos = useRef<number>(0);\n const [targetPos, setTargetPos] = useState<number | undefined>(undefined);\n\n const outQuad = (n: number) => {\n return n * (2 - n);\n };\n\n useEffect(() => {\n if (targetPos === undefined) return;\n if ('scrollBehavior' in document.documentElement.style) {\n window.scroll({\n top: targetPos,\n left: 0,\n behavior: 'smooth',\n });\n setTargetPos(undefined);\n } else {\n const animate = (timestamp: number) => {\n if (startTime.current === -1) {\n startTime.current = timestamp || new Date().getTime();\n }\n\n const elapsed = timestamp - startTime.current;\n const progress = elapsed / fallbackScrollDuration;\n const easeProgress = +outQuad(progress).toFixed(2);\n\n const newPos =\n targetPos === 0\n ? firstPos.current - firstPos.current * easeProgress\n : firstPos.current + targetPos * easeProgress;\n\n // scroll to new position\n window.scrollTo(0, newPos);\n\n if (\n (targetPos > 0 && newPos >= firstPos.current + targetPos) ||\n (targetPos < 0 && newPos <= firstPos.current + targetPos) ||\n (targetPos === 0 && newPos <= 0)\n ) {\n cancelAnimationFrame(startTime.current);\n startTime.current = -1;\n setTargetPos(undefined);\n } else {\n window.requestAnimationFrame(animate);\n }\n };\n\n cancelAnimationFrame(startTime.current);\n startTime.current = -1;\n firstPos.current =\n window.pageYOffset || document.documentElement.scrollTop;\n window.requestAnimationFrame(animate);\n }\n }, [targetPos, fallbackScrollDuration]);\n\n return setTargetPos;\n};\n","import { useEffect, useState } from 'react';\nimport { isBrowser, useMediaQuery } from './useMediaQuery';\n\n// *****************\n// usePoster\n// *****************\n\ninterface PosterImage {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n}\n\nexport const canUseWebP = () => {\n if (!isBrowser) return false;\n\n const elem = document.createElement('canvas');\n\n if (!(elem.getContext && elem.getContext('2d'))) {\n // was able or not to get WebP representation\n return elem.toDataURL('image/webp').indexOf('data:image/webp') == 0;\n }\n\n // very old browser like IE 8, canvas not supported\n return false;\n};\n\nexport type PosterMq = 'small' | 'medium' | 'semilarge' | 'large' | 'xlarge';\n\nexport const usePoster = (\n posterImage: PosterImage & {\n webp?: PosterImage;\n },\n mqs?: PosterMq[]\n) => {\n const [currentImage, setCurrentImage] = useState<string | undefined>();\n\n const workingImage =\n posterImage.webp && canUseWebP() ? posterImage.webp : posterImage;\n const currentMq = useMediaQuery(\n mqs || ['small', 'medium', 'semilarge', 'large', 'xlarge']\n ) as PosterMq | undefined;\n\n useEffect(() => {\n if (\n currentMq &&\n workingImage[currentMq] &&\n workingImage[currentMq] !== currentImage\n ) {\n setCurrentImage(workingImage[currentMq]);\n }\n }, [currentImage, currentMq, workingImage]);\n\n return currentImage;\n};\n","import { useEffect, useRef } from 'react';\n\nexport default function useInterval(callback: any, delay?: number) {\n const savedCallback: any = useRef();\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n useEffect(() => {\n function tick() {\n savedCallback.current();\n }\n if (delay !== null) {\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n}\n","import { useState, useEffect } from 'react';\n\nconst useTouch = () => {\n const [canTouch, setCanTouch] = useState(false);\n\n useEffect(() => {\n setCanTouch(\n 'ontouchstart' in window ||\n navigator.maxTouchPoints > 0 ||\n navigator.msMaxTouchPoints > 0\n );\n }, []);\n return canTouch;\n};\n\nexport default useTouch;\n","import { ImageProps } from 'components/blocks/Image';\nimport { useEffect, useState } from 'react';\nimport { MediaQueryType } from './styles';\nimport { useMediaQuery } from './useMediaQuery';\n\nexport const useImgPreload = (\n imageUrls: ImageProps[],\n mqs: MediaQueryType[] = ['semilarge', 'large']\n) => {\n const [isReady, setReady] = useState(false);\n const [isLoaded, setLoaded] = useState(false);\n const currentMq = useMediaQuery(mqs as MediaQueryType[]);\n const [loadedImages, setLoadedImages] = useState<{\n [key: string]: { id: number | string; image: string }[];\n }>({\n small: [],\n medium: [],\n semilarge: [],\n large: [],\n xlarge: [],\n xxlarge: [],\n xxxLarge: [],\n });\n\n const preloadImages = (imageUrls: (string | undefined)[]) => {\n const images = (imageUrls.filter((img) => img) as string[]).map(\n (src, i) => {\n return new Promise((res) => {\n const img = new window.Image();\n img.src = src;\n img.onload = () => res({ url: src, i });\n });\n }\n );\n\n return images;\n };\n\n useEffect(() => {\n if (isReady && loadedImages && currentMq) {\n const loadedForMq = loadedImages[currentMq];\n\n if (loadedForMq.length < imageUrls.length && imageUrls.length > 0) {\n const requestedImages = imageUrls.map((img) => img[currentMq]);\n\n const resolve = async (items: any) => {\n for (const item of items) {\n const x = await item;\n\n setLoadedImages((prev) => {\n // check if image id already exists in array\n if (!prev[currentMq].find((e) => e.id === x.i)) {\n return {\n ...prev,\n [currentMq]: [\n ...prev[currentMq],\n {\n id: x.i,\n image: x.url,\n },\n ],\n };\n } else return prev;\n });\n }\n };\n\n resolve(preloadImages(requestedImages));\n }\n }\n }, [currentMq, imageUrls, isReady, loadedImages]);\n\n useEffect(() => {\n if (loadedImages && currentMq) {\n const imgCount = imageUrls.filter((img) => img[currentMq]).length;\n setLoaded(loadedImages[currentMq].length >= imgCount);\n }\n }, [currentMq, imageUrls, loadedImages]);\n\n return {\n loadedImages: currentMq && loadedImages[currentMq],\n isLoaded,\n setReady,\n };\n};\n","// converting 6 character hex color code to rgba string\nexport const hexToRgba = (hex: string, alpha = 1) => {\n const rgb = hex.match(/\\w\\w/g)?.map((x) => parseInt(x, 16));\n return rgb && `rgba(${rgb[0]},${rgb[1]},${rgb[2]},${alpha})`;\n};\n","import React, { FC } from 'react';\nimport { DefaultTheme, ThemeProvider } from 'styled-components';\n\nimport { FontBase, getBaseTheme } from 'utils/styles';\n\ntype RecursivePartial<T> = {\n [P in keyof T]?: RecursivePartial<T[P]>;\n};\n\nexport type Theme = RecursivePartial<DefaultTheme>;\n\n/**\n * Assigning font base key values to theme. Searches for each font base object key inside target theme object and replacing the values\n * @param target Combined result object\n * @param source FontBase object with properties that should by overritten.\n */\nconst assignFontBase = (\n target: DefaultTheme,\n source?: RecursivePartial<FontBase>\n) => {\n if (!source) return target;\n // deep iterate through target and search matching key\n const assign = (target: any, key: string, value: string) => {\n Object.keys(target).forEach((tKey) => {\n // check if target value is an object and no array\n if (\n target[tKey] &&\n typeof target[tKey] === 'object' &&\n !Array.isArray(target[tKey])\n ) {\n target[tKey] = assign(target[tKey], key, value);\n } else if (key === tKey) {\n target[tKey] = value;\n }\n });\n return target;\n };\n\n // search each base key and replace values\n Object.keys(source).forEach((sKey) => {\n if (source[sKey])\n target.fonts.types = assign(target.fonts.types, sKey, source[sKey]);\n });\n return target;\n};\n\n/**\n * Comnbining Theme objects\n * @param target Result theme object\n * @param source Theme object that should be assigned to target\n */\nconst assignTo = (target: DefaultTheme, source: Theme) => {\n const output = { ...target };\n\n Object.keys(source).forEach((key) => {\n const sourceVal = source[key];\n const targetVal = target[key];\n output[key] =\n targetVal &&\n sourceVal &&\n typeof targetVal === 'object' &&\n typeof sourceVal === 'object'\n ? assignTo(targetVal, sourceVal)\n : sourceVal;\n });\n return output;\n};\n\nexport const LibThemeProvider: FC<{\n theme: Theme;\n}> = ({ theme, children }) => {\n const combinedBaseTheme = assignFontBase(getBaseTheme(), theme.fonts?.base);\n const combinedTheme = assignTo(combinedBaseTheme, theme);\n return <ThemeProvider theme={combinedTheme}>{children}</ThemeProvider>;\n};\n","import * as React from 'react';\nimport { useContext } from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as settings,\n} from 'utils/styles';\n\nexport type BgMode =\n | 'full'\n | 'half-left'\n | 'half-right'\n | 'larger-left'\n | 'larger-right';\n\nconst getBackground = (mode: BgMode, bgColor: string) => {\n let bgValue = undefined;\n\n switch (mode) {\n case 'full':\n bgValue = bgColor;\n break;\n\n case 'half-left':\n bgValue = `linear-gradient(to left, transparent 50%, ${bgColor} 50%)`;\n break;\n\n case 'half-right':\n bgValue = `linear-gradient(to right, transparent 50%, ${bgColor} 50%)`;\n break;\n\n case 'larger-left':\n bgValue = `linear-gradient(to left, transparent 40%, ${bgColor} 40%)`;\n break;\n\n case 'larger-right':\n bgValue = `linear-gradient(to right, transparent 40%, ${bgColor} 40%)`;\n break;\n }\n return bgValue;\n};\n\nconst View = styled.section<{\n indent: string;\n addSeperation?: boolean;\n addPlainSeperation?: boolean;\n}>`\n position: relative;\n overflow: hidden;\n\n ${({ addSeperation }) =>\n addSeperation &&\n withRange([spacings.spacer * 2, spacings.spacer * 4], 'padding-top')}\n ${({ addSeperation }) =>\n addSeperation &&\n withRange([spacings.spacer * 2, spacings.spacer * 4], 'padding-bottom')}\n\n ${({ indent }) =>\n indent !== 'plain' &&\n css`\n &[data-ident='${indent}'] + &[data-ident='${indent}'] {\n padding-top: 0;\n }\n `}\n\n ${({ indent, addPlainSeperation }) =>\n addPlainSeperation &&\n indent &&\n css`\n &[data-ident='plain'] {\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4],\n 'margin-top'\n )}\n }\n\n &[data-ident='plain'] + & {\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4],\n 'margin-top'\n )}\n }\n\n &[data-ident='plain'] + &[data-ident='transparent'] {\n margin-top: 0;\n }\n\n &[data-ident='transparent'] + &[data-ident='plain'] {\n margin-top: 0;\n }\n `}\n`;\n\nconst Back = styled.div<{\n bgColor?: string;\n bgMode?: BgMode;\n}>`\n display: ${({ bgColor, bgMode }) => (bgColor && bgMode ? 'block' : 'none')};\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n max-width: ${({ bgMode }) =>\n (bgMode === 'full' ? spacings.wrapperLarge : spacings.wrapper) + 'px'};\n\n background: ${({ bgColor }) => bgColor || undefined};\n\n margin: 0 auto;\n\n @media ${mq.semilarge} {\n background: ${({ bgColor, bgMode }) =>\n bgColor && bgMode && bgMode !== 'full'\n ? getBackground(bgMode, bgColor)\n : undefined};\n }\n\n @media ${mq.xlarge} {\n :before {\n content: ${({ bgMode }) =>\n bgMode === 'half-left' || bgMode === 'larger-left'\n ? `\"\"`\n : undefined};\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: ${(spacings.wrapperLarge - spacings.wrapper) / 2}px;\n background-color: ${({ bgColor }) => bgColor && bgColor};\n\n transform: translateX(-100%);\n }\n\n :after {\n content: ${({ bgMode }) =>\n bgMode === 'half-right' || bgMode === 'larger-right'\n ? `\"\"`\n : undefined};\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: ${(spacings.wrapperLarge - spacings.wrapper) / 2}px;\n background-color: ${({ bgColor }) => bgColor && bgColor};\n\n transform: translateX(100%);\n }\n }\n`;\n\nconst Section: React.FC<{\n as?: 'header' | 'footer';\n bgColor?: string;\n bgMode?: BgMode;\n addSeperation?: boolean;\n className?: string;\n}> = ({\n as,\n bgColor,\n bgMode = 'full',\n addSeperation = false,\n className,\n children,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <View\n as={as}\n data-ident={bgColor && bgMode === 'full' ? bgColor : 'plain'}\n indent={bgColor && bgMode === 'full' ? bgColor : 'plain'}\n addSeperation={addSeperation}\n addPlainSeperation={settings(theme).sections.plainSeperation}\n className={className}\n >\n {bgColor && bgMode && <Back bgColor={bgColor} bgMode={bgMode} />}\n {children}\n </View>\n );\n};\n\nexport default Section;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings } from 'utils/styles';\n\nexport type ClampWidthType = 'small' | 'normal' | 'large';\n\nconst View = styled.div<{\n clampWidth?: ClampWidthType;\n addWhitespace?: boolean;\n}>`\n position: relative;\n width: 100%;\n max-width: ${({ clampWidth }) =>\n clampWidth === 'large'\n ? spacings.wrapperLarge\n : clampWidth === 'small'\n ? spacings.wrapperSmall\n : spacings.wrapper}px;\n margin-left: auto;\n margin-right: auto;\n padding: 0\n ${({ addWhitespace }) => (addWhitespace ? spacings.nudge * 2 : 0)}px;\n\n @media ${mq.medium} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n\n @media ${mq.semilarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * 100 : 0}%;\n padding-left: ${({ addWhitespace }) =>\n addWhitespace\n ? `\n max(\n ${spacings.spacer}px,\n ${(1 / 28) * 100}%\n );\n `\n : 0};\n\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * spacings.wrapper : 0}px;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n`;\n\nconst Wrapper: React.FC<{\n addWhitespace?: boolean;\n clampWidth?: ClampWidthType;\n className?: string;\n}> = ({\n addWhitespace = false,\n clampWidth = 'normal',\n className,\n children,\n}) => {\n return (\n <View\n className={className}\n addWhitespace={addWhitespace}\n clampWidth={clampWidth}\n >\n {children}\n </View>\n );\n};\n\nexport default Wrapper;\n","import * as React from 'react';\nimport styled, { css } from 'styled-components';\nimport { mq } from 'utils/styles';\n\nexport interface ImageProps {\n alt?: string;\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n coverSpace?: boolean;\n}\n\nconst Img = styled.img<{ coverSpace?: boolean }>`\n max-width: 100%;\n display: block;\n align-self: flex-start;\n ${({ coverSpace }) =>\n coverSpace &&\n css`\n width: 100%;\n object-fit: cover;\n object-position: center;\n `}\n`;\n\nconst Picture = styled.picture<{ coverSpace?: boolean }>`\n ${({ coverSpace }) =>\n coverSpace &&\n `\n display: flex;\n height: 100%;\n width: 100%;\n`}\n`;\n\nconst Image: React.FC<\n { className?: string; onClick?: () => void } & ImageProps\n> = ({\n className,\n small,\n medium,\n semilarge,\n large,\n xlarge,\n alt,\n coverSpace,\n onClick,\n}) => {\n return (\n <Picture coverSpace={coverSpace} onClick={onClick}>\n {xlarge && <source srcSet={xlarge} media={mq.xlarge} />}\n {large && <source srcSet={large} media={mq.large} />}\n {semilarge && <source srcSet={semilarge} media={mq.semilarge} />}\n {medium && <source srcSet={medium} media={mq.medium} />}\n <Img\n srcSet={small}\n alt={alt || ''}\n coverSpace={coverSpace}\n loading=\"lazy\"\n className={className}\n />\n </Picture>\n );\n};\n\nexport default Image;\n","import * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n styleTextColor,\n FontType,\n getFonts as font,\n mq,\n withRange,\n} from 'utils/styles';\n\ntype HeadingType = Exclude<\n FontType,\n 'copy' | 'copy-i' | 'copy-b' | 'label' | 'callout'\n>;\n\n// Styles\nconst BaseStyles = styled.h1<{\n hyphens?: boolean;\n hasShadow?: boolean;\n textColor?: string;\n textGradient?: string;\n type: HeadingType;\n}>`\n display: inline-block;\n margin: 0;\n padding: 0;\n ${({ textColor, textGradient }) => styleTextColor(textColor, textGradient)}\n\n hyphens: auto;\n /* overflow-wrap: break-word; */\n\n ${(props: { hyphens?: boolean }) =>\n !props.hyphens &&\n css`\n @media ${mq.large} {\n hyphens: none;\n }\n `}\n\n text-shadow: ${({ hasShadow }) =>\n hasShadow && '1px 2px 8px rgba(0, 0, 0, 0.25)'};\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin: 0;\n padding: 0;\n border: 0;\n outline: 0;\n font-weight: inherit;\n font-style: inherit;\n font-size: 100%;\n font-family: inherit;\n vertical-align: baseline;\n }\n`;\n\nconst View = styled(BaseStyles)`\n font-family: ${({ type, theme }) => font(theme)[type].family};\n font-weight: ${({ type, theme }) => font(theme)[type].weight};\n font-style: ${({ type, theme }) => font(theme)[type].style};\n ${({ type, theme }) => withRange(font(theme)[type].size, 'font-size')}\n line-height: ${({ type, theme }) => font(theme)[type].lineHeight};\n letter-spacing: ${({ type, theme }) => font(theme)[type].letterSpacing};\n text-transform: ${({ type, theme }) => font(theme)[type].textTransform};\n`;\n\nexport type HeadlineTag =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'span'\n | 'div';\n\nconst Heading: React.FC<{\n as?: HeadlineTag;\n isInverted?: boolean;\n size?: HeadingType;\n textColor?: string;\n textGradient?: string;\n hyphens?: boolean;\n hasShadow?: boolean;\n innerHTML?: string;\n\n className?: string;\n}> = ({\n as,\n isInverted,\n className,\n size = 'heading-2',\n textColor,\n textGradient,\n hyphens = false,\n hasShadow = false,\n innerHTML,\n children,\n ...rest\n}) => {\n const theme = React.useContext(ThemeContext);\n let tag: HeadlineTag = 'h2';\n\n switch (size) {\n default:\n case 'heading-1':\n tag = 'h1';\n break;\n case 'heading-2':\n tag = 'h2';\n break;\n case 'heading-3':\n tag = 'h3';\n break;\n case 'heading-4':\n tag = 'h4';\n break;\n case 'super':\n tag = 'div';\n break;\n }\n\n // get font settings from global context\n const fontSettings = font(theme)?.[size];\n\n return (\n <View\n as={as || tag}\n type={size}\n textColor={\n textColor ||\n (isInverted ? fontSettings.colorInverted : fontSettings.color)\n }\n textGradient={\n textGradient ||\n (!textColor\n ? isInverted\n ? fontSettings.colorGradientInverted\n : fontSettings.colorGradient\n : undefined)\n }\n hyphens={hyphens}\n hasShadow={hasShadow}\n dangerouslySetInnerHTML={\n innerHTML && !children ? { __html: innerHTML } : undefined\n }\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n};\n\nHeading.defaultProps = {\n as: 'h2',\n size: 'heading-2',\n};\n\nexport default Heading;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport Heading, { HeadlineTag } from 'components/typography/Heading';\nimport { spacings, withRange } from 'utils/styles';\n\nconst View = styled.div<{ isCentered?: boolean }>`\n display: block;\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n margin: ${({ isCentered }) => isCentered && '0 auto'};\n\n & > * + * {\n ${withRange([spacings.nudge * 2, spacings.nudge * 3], 'padding-top')};\n }\n`;\n\nconst Title: FC<{\n colorMode?: 'default' | 'inverted' | 'onImage';\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n title?: string;\n titleAs?: HeadlineTag;\n isCentered?: boolean;\n className?: string;\n}> = ({\n colorMode = 'default',\n superTitle,\n superTitleAs,\n title,\n titleAs,\n isCentered = false,\n className,\n}) => {\n return (\n <View isCentered={isCentered} className={className}>\n {superTitle && (\n <div>\n <Heading\n as={superTitleAs || 'h2'}\n size=\"super\"\n textColor={colorMode === 'onImage' ? '#fff' : undefined}\n isInverted={colorMode === 'inverted'}\n innerHTML={superTitle}\n />\n </div>\n )}\n {title && (\n <div>\n <Heading\n as={titleAs || 'h3'}\n size=\"heading-2\"\n textColor={colorMode === 'onImage' ? '#fff' : undefined}\n isInverted={colorMode === 'inverted'}\n innerHTML={title}\n />\n </div>\n )}\n </View>\n );\n};\n\nexport default Title;\n","import * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n FontType,\n mq,\n spacings,\n withRange,\n FontOptionType,\n getFonts as font,\n styleTextColor,\n} from 'utils/styles';\n\ntype CopyType = Exclude<\n FontType,\n | 'heading-1'\n | 'heading-2'\n | 'heading-3'\n | 'heading-4'\n | 'callout'\n | 'super'\n | 'label'\n>;\n\nconst BaseStyles = styled.div<{\n textColor?: string;\n textGradient?: string;\n columns?: boolean;\n type: CopyType;\n size: FontOptionType;\n}>`\n hyphens: auto;\n ${({ textColor, textGradient }) => styleTextColor(textColor, textGradient)}\n\n @media ${mq.medium} {\n hyphens: none;\n }\n\n a:not([class]) {\n color: currentColor;\n transition: color 0.25s;\n\n &:hover {\n opacity: 0.75;\n }\n }\n\n *:first-child {\n margin-top: 0;\n }\n\n // *:last-child {\n // margin-bottom: 0;\n // }\n\n :not(li) > ul,\n :not(li) > ol {\n display: inline-block;\n padding-left: 0;\n }\n\n li > ul,\n li > ol {\n padding-left: 0;\n }\n\n ul,\n ol li {\n list-style-position: outside;\n margin-left: 1.1em;\n }\n\n ${({ columns }) =>\n columns &&\n css`\n columns: 350px 2;\n column-gap: ${spacings.spacer}px;\n\n li {\n break-inside: avoid;\n }\n\n blockquote {\n break-inside: avoid;\n }\n `};\n`;\n\nconst View = styled(BaseStyles)`\n font-family: ${({ type, size, theme }) => font(theme)[type][size].family};\n font-weight: ${({ type, size, theme }) => font(theme)[type][size].weight};\n font-style: ${({ type, size, theme }) => font(theme)[type][size].style};\n ${({ type, size, theme }) =>\n withRange(font(theme)[type][size].size, 'font-size')}\n line-height: ${({ type, size, theme }) =>\n font(theme)[type][size].lineHeight};\n letter-spacing: ${({ type, size, theme }) =>\n font(theme)[type][size].letterSpacing};\n text-transform: ${({ type, size, theme }) =>\n font(theme)[type][size].textTransform};\n`;\n\nconst Copy: React.FC<{\n isInverted?: boolean;\n textColor?: string;\n textGradient?: string;\n type?: CopyType;\n size?: FontOptionType;\n columns?: boolean;\n innerHTML?: string;\n className?: string;\n}> = ({\n isInverted,\n type = 'copy',\n size = 'medium',\n textColor,\n textGradient,\n columns = false,\n innerHTML,\n className,\n children,\n ...rest\n}) => {\n const theme = React.useContext(ThemeContext);\n const fontSettings = font(theme)?.[type]?.[size];\n\n return (\n <View\n type={type}\n size={size}\n textColor={\n textColor ||\n (isInverted ? fontSettings.colorInverted : fontSettings.color)\n }\n textGradient={\n textGradient ||\n (!textColor\n ? isInverted\n ? fontSettings.colorGradientInverted\n : fontSettings.colorGradient\n : undefined)\n }\n columns={columns}\n dangerouslySetInnerHTML={\n innerHTML && !children ? { __html: innerHTML } : undefined\n }\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n};\n\nCopy.defaultProps = { type: 'copy', size: 'medium' };\n\nexport default Copy;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings } from 'utils/styles';\n\nconst View = styled.div<{ isCentered?: boolean; isMirrored?: boolean }>`\n display: inline-flex;\n flex-wrap: wrap;\n flex-direction: ${({ isMirrored }) =>\n isMirrored ? 'column-reverse' : 'column'};\n\n justify-content: ${({ isMirrored, isCentered }) =>\n isCentered ? 'center' : isMirrored ? 'flex-end' : 'flex-start'};\n\n margin-top: -${spacings.spacer * 0.5}px;\n margin-left: -${spacings.spacer}px;\n width: calc(100% + ${spacings.spacer}px);\n\n & > * {\n flex: 1 0 auto;\n margin-top: ${spacings.spacer * 0.5}px;\n margin-left: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n flex-direction: ${({ isMirrored }) =>\n isMirrored ? 'row-reverse' : 'row'};\n align-items: stretch;\n width: auto;\n }\n`;\n\nconst Actions: FC<{\n isCentered?: boolean;\n isMirrored?: boolean;\n primary?: React.ReactNode;\n secondary?: React.ReactNode;\n className?: string;\n}> = ({\n isCentered = false,\n isMirrored = false,\n primary,\n secondary,\n className,\n}) => {\n return (\n <View\n isCentered={isCentered}\n isMirrored={isMirrored}\n className={className}\n >\n {primary && primary}\n {secondary && secondary}\n </View>\n );\n};\n\nexport default Actions;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { spacings, mq, withRange } from 'utils/styles';\n\nimport Title from 'components/blocks/Title';\nimport Copy from 'components/typography/Copy';\nimport Actions from 'components/blocks/Actions';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst View = styled.div<{ isCentered?: boolean }>`\n width: 100%;\n text-align: ${({ isCentered }) => isCentered && 'center'};\n`;\n\nconst StyledTitle = styled(Title)<{ clampTitle?: boolean }>`\n max-width: ${({ clampTitle }) =>\n clampTitle && (13 / 28) * spacings.wrapper + 'px'};\n`;\n\nconst ContentBlock = styled(Copy)<{\n clampText?: boolean;\n isCentered?: boolean;\n}>`\n display: block;\n margin: ${({ isCentered }) => isCentered && '0 auto'};\n max-width: ${({ clampText }) =>\n clampText && (19 / 28) * spacings.wrapper + 'px'};\n\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')}\n\n @media ${mq.semilarge} {\n align-items: flex-start;\n\n & > * {\n max-width: ${(19 / 28) * spacings.wrapper + 'px'};\n }\n }\n`;\n\nconst Intro: React.FC<{\n colorMode?: 'default' | 'inverted' | 'onImage';\n title: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isCentered?: boolean;\n clampTitle?: boolean;\n clampText?: boolean;\n className?: string;\n}> = ({\n colorMode = 'default',\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isCentered = false,\n clampTitle = true,\n clampText = true,\n className,\n}) => {\n return (\n <View isCentered={isCentered} className={className}>\n <StyledTitle\n colorMode={colorMode}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n isCentered={isCentered}\n clampTitle={clampTitle}\n />\n {text && (\n <ContentBlock\n type=\"copy-b\"\n textColor={colorMode === 'onImage' ? '#fff' : undefined}\n isInverted={colorMode === 'inverted'}\n isCentered={isCentered}\n clampText={clampText}\n innerHTML={text}\n />\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={\n primaryAction &&\n primaryAction(\n colorMode === 'inverted' || colorMode === 'onImage'\n )\n }\n secondary={\n secondaryAction &&\n secondaryAction(\n colorMode === 'inverted' || colorMode === 'onImage'\n )\n }\n />\n )}\n </View>\n );\n};\n\nexport default Intro;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport Intro from 'components/blocks/Intro';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst StyledIntro = styled(Intro)`\n padding-bottom: ${spacings.spacer * 2}px;\n`;\n\nconst ImgContainer = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n width: 100%;\n\n @media ${mq.semilarge} {\n margin-left: ${spacings.spacer * -1}px;\n width: calc(100% + ${spacings.spacer}px);\n }\n`;\n\nconst ImgWrapper = styled.div<{ isFull?: boolean }>`\n flex: 0 100%;\n padding-top: ${spacings.nudge * 2}px;\n\n picture > img {\n width: 100%;\n }\n\n @media ${mq.semilarge} {\n flex: 0 ${({ isFull }) => (isFull ? 100 : 50)}%;\n padding-left: ${spacings.spacer}px;\n padding-top: ${spacings.spacer}px;\n\n /* &:last-child:nth-child(odd) {\n flex: 0 100%;\n } */\n }\n`;\n\ntype ImageType = ImageProps & { isFull?: boolean };\n\nconst Gallery: FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n hasBack?: boolean;\n images?: Array<ImageType>;\n className?: string;\n}> = ({\n isInverted = false,\n hasBack = false,\n images,\n className,\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n}) => {\n const theme = useContext(ThemeContext);\n\n // const isPrevImgFull = (images: ImageType[], currentIndex: number) => {\n // const newIndex = --currentIndex;\n // if (images && images[newIndex]) return images[newIndex]?.isFull;\n // else return false;\n // };\n\n const isNextImgFull = (images: ImageType[], currentIndex: number) => {\n const newIndex = ++currentIndex;\n if (images && images[newIndex]) return images[newIndex]?.isFull;\n else return false;\n };\n\n // map images to fill always full width\n images = images?.map((img, i, array) => {\n if (!img.isFull) {\n img.isFull =\n (i % 2 === 0 && isNextImgFull(array, i)) || array.length === 1;\n }\n return img;\n });\n\n return (\n <Section\n addSeperation\n bgMode=\"full\"\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n className={className}\n >\n {title && (\n <Wrapper addWhitespace>\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n secondaryAction={secondaryAction}\n primaryAction={primaryAction}\n />\n </Wrapper>\n )}\n <Wrapper>\n <ImgContainer>\n {images &&\n images.map((img, i) => (\n <ImgWrapper key={i} isFull={img.isFull}>\n <Image {...img} />\n </ImgWrapper>\n ))}\n </ImgContainer>\n </Wrapper>\n </Section>\n );\n};\n\nexport default Gallery;\n","import * as React from 'react';\nimport styled, { css } from 'styled-components';\nimport { spacings, mq } from 'utils/styles';\n\nexport interface ColPropsSettings {\n /** Normalisierte Werte zwischen 0 und 1: z.B. 12 von 28 Spalten (12 / 28) */\n span?: number;\n /** Normalisierte Werte zwischen -1 und 1: z.B. -12 von 28 Spalten (-12 / 28) */\n move?: number;\n valign?: VerticalAlign;\n}\n\ntype VerticalAlign = 'top' | 'center' | 'bottom';\n\ninterface ColProps extends ColPropsSettings {\n medium?: ColPropsSettings;\n semilarge?: ColPropsSettings;\n large?: ColPropsSettings;\n xlarge?: ColPropsSettings;\n}\n\nconst gridSettings = {\n cols: 28,\n gutter: spacings.spacer,\n};\n\nconst getWidth = (props: ColProps) => {\n const mediumSpan = props.medium ? props.medium.span : 1;\n const semilargeSpan = props.semilarge ? props.semilarge.span : 1;\n const largeSpan = props.large ? props.large.span : 1;\n const xlargeSpan = props.xlarge ? props.xlarge.span : 1;\n\n return css`\n width: ${(props.span || 1) * 100}%;\n\n ${(props: ColProps) => {\n return props.medium\n ? css`\n @media ${mq.medium} {\n width: ${(mediumSpan || 1) * 100}%;\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.semilarge\n ? css`\n @media ${mq.semilarge} {\n width: ${(semilargeSpan || 1) * 100}%;\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.large\n ? css`\n @media ${mq.large} {\n width: ${(largeSpan || 1) * 100}%;\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.xlarge\n ? css`\n @media ${mq.xlarge} {\n width: ${(xlargeSpan || 1) * 100}%;\n }\n `\n : '';\n }}\n `;\n};\n\nconst getLeftRight = (props: ColProps) => {\n const mediumMove = props.medium ? props.medium.move : 0;\n const semilargeMove = props.semilarge ? props.semilarge.move : 0;\n const largeMove = props.large ? props.large.move : 0;\n const xlargeMove = props.xlarge ? props.xlarge.move : 0;\n\n return css`\n left: ${props.move && props.move > 0 ? props.move * 100 + '%' : 'auto'};\n right: ${props.move && props.move < 0\n ? props.move * -100 + '%'\n : 'auto'};\n\n ${(props: ColProps) => {\n return props.medium\n ? css`\n @media ${mq.medium} {\n left: ${mediumMove && mediumMove > 0\n ? mediumMove * 100 + '%'\n : 'auto'};\n right: ${mediumMove && mediumMove < 0\n ? mediumMove * -100 + '%'\n : 'auto'};\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.semilarge\n ? css`\n @media ${mq.semilarge} {\n left: ${semilargeMove && semilargeMove > 0\n ? semilargeMove * 100 + '%'\n : 'auto'};\n right: ${semilargeMove && semilargeMove < 0\n ? semilargeMove * -100 + '%'\n : 'auto'};\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.large\n ? css`\n @media ${mq.large} {\n left: ${largeMove && largeMove > 0\n ? largeMove * 100 + '%'\n : 'auto'};\n right: ${largeMove && largeMove < 0\n ? largeMove * -100 + '%'\n : 'auto'};\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.xlarge\n ? css`\n @media ${mq.xlarge} {\n left: ${xlargeMove && xlargeMove > 0\n ? xlargeMove * 100 + '%'\n : 'auto'};\n right: ${xlargeMove && xlargeMove < 0\n ? xlargeMove * -100 + '%'\n : 'auto'};\n }\n `\n : '';\n }}\n `;\n};\n\nconst StyledCol = styled.div<GridProps & ColProps>`\n ${getWidth};\n ${getLeftRight};\n padding-top: ${({ gutter }) => gutter || 0}px;\n padding-left: ${({ gutter }) => gutter || 0}px;\n display: block;\n position: relative;\n\n align-self: ${({ valign }) => {\n switch (valign) {\n case 'top':\n return 'flex-start';\n case 'center':\n return 'center';\n case 'bottom':\n return 'flex-end';\n default:\n return undefined;\n }\n }};\n`;\n\nconst Col: React.FC<ColProps> = (props) => {\n return <React.Fragment>{props.children}</React.Fragment>;\n};\n\ninterface GridProps {\n gutter?: number;\n valign?: VerticalAlign;\n}\n\nconst StyledGrid = styled.div<GridProps>`\n margin-top: -${({ gutter }) => gutter || 0}px;\n margin-left: -${({ gutter }) => gutter || 0}px;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n\n align-items: ${({ valign }) => {\n switch (valign) {\n case 'top':\n return 'flex-start';\n case 'center':\n return 'center';\n case 'bottom':\n return 'flex-end';\n default:\n return undefined;\n }\n }};\n`;\n\nconst Grid: React.FC<GridProps> = ({ gutter, valign, children }) => {\n return (\n <StyledGrid gutter={gutter} valign={valign}>\n {React.Children.map(children, (comp: any) => {\n return <StyledCol {...comp.props} gutter={gutter} />;\n })}\n </StyledGrid>\n );\n};\n\nGrid.defaultProps = {\n gutter: gridSettings.gutter,\n};\n\nexport default {\n Row: Grid,\n Col,\n};\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Grid from 'components/base/Grid';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Copy from 'components/typography/Copy';\nimport Title from 'components/blocks/Title';\nimport Wrapper from 'components/base/Wrapper';\nimport Section, { BgMode } from 'components/base/Section';\nimport { mq, spacings, withRange, getColors as color } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\n\nconst ImgWrapper = styled.div<{ isMirrored?: boolean }>`\n display: flex;\n flex-direction: column;\n position: relative;\n height: 100%;\n width: 100%;\n`;\n\nconst StyledImage = styled(Image)`\n position: relative;\n width: 100%;\n height: 100%;\n`;\n\nconst ImgDescDesktop = styled(Copy)`\n display: none;\n\n @media ${mq.semilarge} {\n display: block;\n padding: ${spacings.spacer}px ${spacings.spacer * 2}px;\n }\n`;\n\nconst ImgDescMobile = styled(Copy)`\n display: block;\n padding: ${spacings.spacer}px 0;\n padding-left: ${spacings.nudge * 2}px;\n\n @media ${mq.semilarge} {\n display: none;\n }\n`;\n\nconst InfoWrapper = styled.div<{ isMirrored?: boolean }>`\n padding-left: ${spacings.nudge * 2}px;\n padding-right: ${spacings.nudge * 2}px;\n padding-top: ${spacings.nudge}px;\n padding-bottom: ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n ${withRange([spacings.spacer * 3, spacings.spacer * 4], 'padding-top')}\n\n padding-right: ${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n ${withRange([spacings.spacer * 3, spacings.spacer * 4], 'padding-top')}\n\n padding-right: ${({ isMirrored }) =>\n isMirrored ? spacings.spacer * 1.5 + 'px' : (1 / 28) * 100 + '%'};\n padding-bottom: ${spacings.nudge * 6}px;\n padding-left: ${({ isMirrored }) =>\n !isMirrored ? spacings.spacer * 1.5 + 'px' : (1 / 28) * 100 + '%'};\n }\n\n @media ${mq.xlarge} {\n padding-right: ${({ isMirrored }) =>\n isMirrored ? spacings.spacer * 1.5 : (1 / 28) * spacings.wrapper}px;\n padding-left: ${({ isMirrored }) =>\n !isMirrored\n ? spacings.spacer * 1.5\n : (1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst StyledTitle = styled(Title)`\n & + * {\n margin-top: ${spacings.nudge * 6}px;\n }\n`;\n\nconst ContentBlock = styled(Copy)`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n`;\n\nconst SubTextBlock = styled(ContentBlock)`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n padding-top: ${spacings.spacer * 2}px;\n\n @media ${mq.semilarge} {\n & > * {\n max-width: 300px;\n }\n }\n`;\n\nconst Teaser: FC<{\n isInverted?: boolean;\n isMirrored?: boolean;\n bgMode?: 'full' | 'splitted';\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n title?: string;\n titleAs?: HeadlineTag;\n image?: Omit<ImageProps, 'coverSpace'> & { description?: string };\n intro?: string;\n text?: string;\n subText?: string;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n isInverted = false,\n isMirrored = false,\n bgMode,\n superTitle,\n superTitleAs,\n title,\n titleAs,\n image,\n intro,\n text,\n subText,\n primaryAction,\n secondaryAction,\n}) => {\n const theme = useContext(ThemeContext);\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'splitted':\n return isMirrored ? 'larger-left' : 'larger-right';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <Wrapper clampWidth=\"normal\">\n <Grid.Row gutter={spacings.spacer}>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? 14 : 0) / 28,\n }}\n >\n <ImgWrapper isMirrored={isMirrored}>\n {image && <StyledImage coverSpace {...image} />}\n {image?.description && (\n <ImgDescMobile\n size=\"small\"\n isInverted={isInverted}\n innerHTML={image.description}\n />\n )}\n </ImgWrapper>\n </Grid.Col>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? -14 : 0) / 28,\n }}\n >\n <InfoWrapper isMirrored={isMirrored}>\n <StyledTitle\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n />\n {intro && (\n <ContentBlock\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n />\n )}\n {text && (\n <ContentBlock\n isInverted={isInverted}\n innerHTML={text}\n />\n )}\n {subText && (\n <SubTextBlock\n isInverted={isInverted}\n type=\"copy-i\"\n innerHTML={subText}\n />\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={\n primaryAction &&\n primaryAction(isInverted)\n }\n secondary={\n secondaryAction &&\n secondaryAction(isInverted)\n }\n />\n )}\n </InfoWrapper>\n </Grid.Col>\n </Grid.Row>\n <Grid.Row gutter={spacings.spacer}>\n <Grid.Col\n semilarge={{\n span: (bgMode === 'splitted' ? 11.2 : 14) / 28,\n move:\n (isMirrored\n ? bgMode === 'splitted'\n ? 16.8\n : 14\n : 0) / 28,\n }}\n >\n {image?.description && (\n <ImgDescDesktop\n size=\"small\"\n isInverted={isInverted}\n innerHTML={image.description}\n />\n )}\n </Grid.Col>\n <Grid.Col\n semilarge={{\n span: (bgMode === 'splitted' ? 16.8 : 14) / 28,\n move:\n (isMirrored\n ? bgMode === 'splitted'\n ? -11.2\n : -14\n : 0) / 28,\n }}\n />\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport default Teaser;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Grid from 'components/base/Grid';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Copy from 'components/typography/Copy';\nimport Title from 'components/blocks/Title';\nimport Wrapper from 'components/base/Wrapper';\nimport Section from 'components/base/Section';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\n\nconst WideImage = styled(Image)<{ isMirrored?: boolean }>`\n position: relative;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n\n @media ${mq.semilarge} {\n position: absolute;\n width: 50%;\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '50%')};\n right: ${({ isMirrored }) => (isMirrored ? '50%' : 'auto')};\n\n transform: translateX(\n ${({ isMirrored }) => (isMirrored ? '100%' : '-100%')}\n );\n }\n\n @media ${mq.xlarge} {\n max-width: ${spacings.wrapperLarge / 2}px;\n }\n`;\n\nconst InfoWrapper = styled.div<{ isMirrored?: boolean }>`\n padding-left: ${spacings.nudge * 2}px;\n padding-right: ${spacings.nudge * 2}px;\n padding-top: ${spacings.nudge}px;\n padding-bottom: ${spacings.nudge * 2}px;\n\n @media ${mq.semilarge} {\n ${withRange([spacings.spacer * 3, spacings.spacer * 4], 'padding-top')}\n\n padding-right: ${({ isMirrored }) =>\n isMirrored ? spacings.spacer * 1.5 : (1 / 28) * spacings.wrapper}px;\n padding-bottom: ${spacings.nudge * 6}px;\n padding-left: ${({ isMirrored }) =>\n !isMirrored\n ? spacings.spacer * 1.5\n : (1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst StyledTitle = styled(Title)`\n & + * {\n margin-top: ${spacings.nudge * 6}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n padding-top: ${spacings.spacer * 2}px;\n\n @media ${mq.semilarge} {\n & > * {\n max-width: 300px;\n }\n }\n`;\n\nconst ContentBlock = styled(Copy)`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n`;\n\nconst SubTextBlock = styled(ContentBlock)`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst TeaserWide: FC<{\n isInverted?: boolean;\n isMirrored?: boolean;\n hasBack?: boolean;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n title?: string;\n titleAs?: HeadlineTag;\n image?: Omit<ImageProps, 'coverSpace'> & { description?: string };\n intro?: string;\n text?: string;\n subText?: string;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n isInverted = false,\n isMirrored = false,\n hasBack = false,\n superTitle,\n superTitleAs,\n title,\n titleAs,\n image,\n intro,\n text,\n subText,\n primaryAction,\n secondaryAction,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n {image && (\n <WideImage coverSpace {...image} isMirrored={isMirrored} />\n )}\n <Wrapper clampWidth=\"normal\">\n <Grid.Row gutter={spacings.spacer}>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? 14 : 0) / 28,\n }}\n ></Grid.Col>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? -14 : 0) / 28,\n }}\n >\n <InfoWrapper isMirrored={isMirrored}>\n <StyledTitle\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n />\n {intro && (\n <ContentBlock\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n />\n )}\n {text && (\n <ContentBlock\n isInverted={isInverted}\n innerHTML={text}\n />\n )}\n {subText && (\n <SubTextBlock\n isInverted={isInverted}\n type=\"copy-i\"\n innerHTML={subText}\n />\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={\n primaryAction &&\n primaryAction(isInverted)\n }\n secondary={\n secondaryAction &&\n secondaryAction(isInverted)\n }\n />\n )}\n </InfoWrapper>\n </Grid.Col>\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport default TeaserWide;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.a<{ inverted?: boolean; disable?: boolean }>`\n padding: 0.2em;\n\n display: inline-block;\n display: inline-flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: ${({ theme }) => font(theme).copy.medium.weight};\n text-align: center;\n text-decoration: underline;\n line-height: 1;\n letter-spacing: ${({ theme }) => font(theme).copy.medium.letterSpacing};\n\n perspective: 1000;\n -webkit-font-smoothing: subpixel-antialiased;\n -webkit-perspective: 1000;\n -moz-osx-font-smoothing: grayscale;\n will-change: auto;\n\n outline: none;\n border: none;\n cursor: pointer;\n\n pointer-events: ${({ disable }) => (disable ? 'none' : 'all')};\n\n background: none;\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.light\n : inverted\n ? color(theme).light\n : color(theme).dark};\n\n & > * {\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.light\n : inverted\n ? color(theme).light\n : color(theme).dark};\n }\n\n & > :not(:last-child) {\n padding-right: ${spacings.nudge}px;\n }\n\n &:hover {\n opacity: 0.6;\n }\n\n /* &:focus {\n text-decoration: underline;\n }\n\n &:active {\n text-decoration: underline;\n } */\n`;\n\ninterface Props {\n isInverted?: boolean;\n isDisabled?: boolean;\n onClick?: () => void;\n className?: string;\n}\n\nexport type BtnProps = Props & {\n as?: 'button';\n};\n\nexport type LinkProps = Props & {\n as?: 'a';\n href?: string;\n isExternal?: boolean;\n};\n\nconst Pointer: React.FC<BtnProps | LinkProps> = React.forwardRef(\n (\n { as, isInverted, isDisabled, onClick, className, children, ...rest },\n ref\n ) => {\n if (as === 'button') {\n return (\n <View\n ref={ref}\n as={as as any}\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n } else {\n return (\n <View\n ref={ref}\n as={as as any}\n href={(rest as LinkProps).href}\n data-disabled={isDisabled}\n target={\n (rest as LinkProps).isExternal ? '_blank' : undefined\n }\n rel={\n (rest as LinkProps).isExternal\n ? 'noopener noreferrer'\n : undefined\n }\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n }\n }\n);\n\nPointer.displayName = 'Button';\n\nconst Icon = styled.div<{ iconColor?: string }>`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n width: 35px;\n height: 35px;\n\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).primary.medium};\n\n transition: transform 0.2s ease-in-out;\n\n ${View}[data-disabled='true'] > & {\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).mono.light};\n }\n\n ${View}:hover > & {\n transform: translateX(3px);\n }\n`;\n\nconst Label = styled.span`\n display: inline-block;\n`;\n\nexport default { View: Pointer, Label: Label, Icon: Icon };\n","import React, { FC, useContext, useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport SlickSlider, { Settings } from 'react-slick';\nimport { withRange } from 'utils/styles';\n\n// Slider context\ninterface SliderContextState {\n setSlider?: React.Dispatch<\n React.SetStateAction<SlickSlider | null | undefined>\n >;\n setSlideCount?: React.Dispatch<React.SetStateAction<number>>;\n steps: number;\n currentStep: number;\n slideSpacing?: { min: number; max: number };\n cursorPaths?: {\n prev?: string;\n next?: string;\n };\n clickSideOffset: number;\n fullHeight?: boolean;\n sameHeight?: boolean;\n slickSettings: Settings;\n goToStep: (step: number) => void;\n nextStep: () => void;\n previousStep: () => void;\n isOnFirstStep: () => boolean;\n isOnLastStep: () => boolean;\n}\n\nexport const SliderContext = React.createContext<SliderContextState>({\n steps: 0,\n currentStep: 0,\n slickSettings: {},\n clickSideOffset: 0.2,\n goToStep: () => '',\n nextStep: () => '',\n previousStep: () => '',\n isOnFirstStep: () => {\n return false;\n },\n isOnLastStep: () => {\n return false;\n },\n});\n\nexport type SlickSliderSettings = Pick<\n Settings,\n | 'responsive'\n | 'draggable'\n | 'speed'\n | 'slidesToShow'\n | 'slidesToScroll'\n | 'variableWidth'\n | 'autoplay'\n | 'autoplaySpeed'\n | 'fade'\n | 'swipe'\n | 'infinite' // not fully working yet\n>;\n\nconst Slider: FC<\n SlickSliderSettings & {\n initialStep?: number;\n slideSpacing?: { min: number; max: number }; // max image size 64x64\n cursorPaths?: {\n prev?: string;\n next?: string;\n };\n clickSideOffset?: number;\n sameHeight?: boolean;\n fullHeight?: boolean;\n beforeChange?: (props: {\n currentStep: number;\n nextStep: number;\n }) => void;\n afterChange?: (currentStep: number) => void;\n onInit?: (steps: number) => void;\n }\n> = ({\n initialStep = 0,\n slideSpacing,\n cursorPaths,\n clickSideOffset = 0.2,\n fullHeight,\n sameHeight,\n beforeChange,\n afterChange,\n onInit,\n children,\n ...rest\n}) => {\n const [slideCount, setSlideCount] = useState<number>(0);\n const [sliderRef, setSliderRef] = useState<SlickSlider | null>();\n const [currentStep, setCurrentStep] = useState<number>(initialStep);\n const [visibleSlides, setVisibleSlides] = useState<number | null>();\n const [steps, setSteps] = useState<number>(0);\n\n const goToStep = (step: number) => {\n if (sliderRef) {\n const intNum = Math.floor(step);\n if (intNum >= 0 && intNum < steps) {\n sliderRef.slickGoTo(intNum);\n }\n }\n };\n\n const nextStep = () => {\n if (sliderRef) {\n let prev = currentStep;\n if (slickSettings.infinite) sliderRef.slickGoTo(++prev);\n else sliderRef.slickGoTo(prev >= slideCount - 1 ? prev : ++prev);\n }\n };\n\n const previousStep = () => {\n if (sliderRef) {\n let prev = currentStep;\n if (slickSettings.infinite) sliderRef.slickGoTo(--prev);\n sliderRef.slickGoTo(prev <= 0 ? prev : --prev);\n }\n };\n\n const isOnFirstStep = (): boolean => {\n return slickSettings.infinite ? false : currentStep === 0;\n };\n\n const isOnLastStep = (): boolean => {\n return slickSettings.infinite ? false : currentStep >= steps - 1;\n };\n\n // slick settings\n const slickSettings: Settings = {\n className: 'slider variable-width',\n dots: false,\n arrows: false,\n infinite: false,\n speed: 500,\n slidesToScroll: 1,\n slidesToShow: 1,\n variableWidth: true,\n fade: false,\n swipe: true,\n beforeChange: (current: number, next: number) => {\n beforeChange &&\n beforeChange({ currentStep: current, nextStep: next });\n setCurrentStep(next);\n },\n afterChange: afterChange,\n ...rest,\n };\n\n // calc slidesToShow on each window resize\n useEffect(() => {\n const handleResize = () => {\n if (sliderRef && slickSettings.responsive) {\n const settings = slickSettings.responsive;\n const cBreakpoint: number | null = (sliderRef.state as any)\n .breakpoint;\n\n for (let i = 0; i < settings.length; i++) {\n if (settings[i].breakpoint === cBreakpoint) {\n const { slidesToShow } = settings[i]\n .settings as Settings;\n\n if (slidesToShow) setVisibleSlides(slidesToShow);\n break;\n }\n }\n }\n };\n\n // calc visible slides\n if (sliderRef && slickSettings.slidesToShow) {\n setVisibleSlides(slickSettings.slidesToShow);\n handleResize();\n window.addEventListener('resize', handleResize);\n }\n\n return () => {\n if (sliderRef) window.removeEventListener('resize', handleResize);\n };\n }, [slickSettings.responsive, slickSettings.slidesToShow, sliderRef]);\n\n useEffect(() => {\n // calc steps\n if (visibleSlides) {\n const itemsPerSlide = Math.floor(visibleSlides);\n\n let slides = 0;\n for (let i = 0; i < slideCount; i++) {\n if (i + itemsPerSlide > slideCount) {\n break;\n } else slides += 1;\n }\n setSteps(slides);\n }\n }, [slideCount, visibleSlides]);\n\n useEffect(() => {\n if (steps && steps > 0) {\n onInit && onInit(steps);\n }\n }, [onInit, steps]);\n\n return (\n <SliderContext.Provider\n value={{\n setSlider: setSliderRef,\n setSlideCount: setSlideCount,\n steps: steps,\n currentStep: currentStep,\n slideSpacing: slideSpacing,\n cursorPaths: cursorPaths,\n clickSideOffset: clickSideOffset,\n fullHeight: fullHeight,\n sameHeight: sameHeight,\n slickSettings: slickSettings,\n goToStep: goToStep,\n nextStep: nextStep,\n previousStep: previousStep,\n isOnFirstStep: isOnFirstStep,\n isOnLastStep: isOnLastStep,\n }}\n >\n {children}\n </SliderContext.Provider>\n );\n};\n\nconst SlidesView = styled.div<{\n cursorPath?: string;\n sameHeight?: boolean;\n fullHeight?: boolean;\n}>`\n position: relative;\n width: 100%;\n overflow: hidden;\n\n cursor: ${({ cursorPath }) =>\n cursorPath ? `url(\"${cursorPath}\") 64 64, auto` : 'default'};\n\n ${({ fullHeight }) =>\n fullHeight &&\n css`\n .slick-list {\n height: 100%;\n }\n `}\n\n .slick-track {\n display: flex;\n height: ${({ fullHeight }) => (fullHeight ? '100%' : 'auto')};\n ${({ sameHeight, fullHeight }) =>\n (sameHeight || fullHeight) &&\n css`\n .slick-slide {\n height: auto;\n > div {\n height: 100%;\n > div {\n height: 100%;\n }\n }\n }\n `}\n }\n`;\n\nconst StyledSlider = styled(SlickSlider)<{\n leftMargin?: { min: number; max: number };\n}>`\n ${({ leftMargin }) =>\n leftMargin &&\n withRange([leftMargin.min * -1, leftMargin.max * -1], 'margin-left')};\n`;\n\nenum CursorState {\n PREV,\n NEXT,\n}\n\nconst Slides: FC<{\n className?: string;\n}> = ({ children, className }) => {\n const context = useContext(SliderContext);\n const [cursor, setCursor] = useState<CursorState | null>();\n const [viewRef, setViewRef] = useState<HTMLDivElement | null>();\n const [mousePos, setMousePos] = useState<number>(0);\n\n // cursor control\n const getCursorPath = () => {\n switch (cursor) {\n case CursorState.NEXT:\n return context.cursorPaths?.next;\n case CursorState.PREV:\n return context.cursorPaths?.prev;\n default:\n return undefined;\n }\n };\n\n const handleClick = (ev: React.MouseEvent) => {\n if (context.clickSideOffset <= 0) return;\n ev.stopPropagation();\n if (!viewRef) return;\n\n // check for other UI elements\n const target = ev.target as HTMLElement;\n const isSlideControl = target.classList.contains('slider-control');\n const isAnchor =\n target instanceof HTMLAnchorElement ||\n target.parentElement instanceof HTMLAnchorElement;\n\n if (ev.button !== 0 || isSlideControl || isAnchor) return;\n\n // check if step is first or last\n if (context.isOnFirstStep()) {\n context.nextStep();\n return;\n } else if (context.isOnLastStep()) {\n context.previousStep();\n return;\n }\n\n // check orientation with client x position\n const rect = viewRef.getBoundingClientRect();\n const relMouseX = mousePos - rect.left;\n if (relMouseX >= rect.width - rect.width * context.clickSideOffset) {\n context.nextStep();\n } else if (relMouseX < rect.width * context.clickSideOffset) {\n context.previousStep();\n }\n };\n\n useEffect(() => {\n if (!context.cursorPaths) return;\n if (!viewRef) return;\n const rect = viewRef.getBoundingClientRect();\n const relMouseX = mousePos - rect.left;\n\n if (relMouseX >= rect.width / 2) {\n if (context.isOnLastStep()) setCursor(CursorState.PREV);\n else setCursor(CursorState.NEXT);\n } else {\n if (context.isOnFirstStep()) setCursor(CursorState.NEXT);\n else setCursor(CursorState.PREV);\n }\n }, [context, mousePos, viewRef]);\n\n useEffect(() => {\n if (children && context.setSlideCount)\n context.setSlideCount(React.Children.count(children));\n }, [children, context]);\n\n return (\n <SliderContext.Consumer>\n {(values) => (\n <SlidesView\n ref={setViewRef}\n cursorPath={getCursorPath()}\n onMouseMove={(ev) => setMousePos(ev.clientX)}\n fullHeight={context.fullHeight}\n sameHeight={context.sameHeight}\n onClick={handleClick}\n className={className}\n >\n <StyledSlider\n ref={context.setSlider}\n leftMargin={values.slideSpacing}\n {...values.slickSettings}\n >\n {children}\n </StyledSlider>\n </SlidesView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nconst SlideView = styled.div<{ spacing?: { min: number; max: number } }>`\n width: 100%;\n outline: none;\n\n ${({ spacing }) =>\n spacing && withRange([spacing.min, spacing.max], 'padding-left')};\n`;\n\nconst Slide: FC<{\n className?: string;\n}> = ({ children, className }) => {\n return (\n <SliderContext.Consumer>\n {(value) => (\n <SlideView className={className} spacing={value.slideSpacing}>\n {children}\n </SlideView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nconst ControlView = styled.button``;\n\nconst Control: FC<{\n type: 'next' | 'prev';\n onClick?: (ev: React.SyntheticEvent<HTMLButtonElement>) => void;\n className?: string;\n children?: (isActive?: boolean) => React.ReactNode;\n}> = ({ type, onClick, children, className }) => {\n return (\n <SliderContext.Consumer>\n {(values) => {\n if (values.steps > 1) {\n return (\n <ControlView\n className={className + ' slider-control'}\n onClick={(ev) => {\n type === 'next'\n ? values.nextStep()\n : values.previousStep();\n\n onClick && onClick(ev);\n }}\n disabled={\n type === 'next'\n ? values.isOnLastStep()\n : values.isOnFirstStep()\n }\n >\n {children &&\n children(\n type === 'next'\n ? !values.isOnLastStep()\n : !values.isOnFirstStep()\n )}\n </ControlView>\n );\n } else return null;\n }}\n </SliderContext.Consumer>\n );\n};\n\nconst StatusView = styled.div``;\n\nconst Status: FC<{\n seperator?: string;\n className?: string;\n}> = ({ seperator = '/', className }) => {\n return (\n <SliderContext.Consumer>\n {(values) => (\n <StatusView className={className + ' slider-control'}>\n {`${values.currentStep + 1}${seperator}${values.steps}`}\n </StatusView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nconst DotView = styled.button``;\n\ninterface DotProps {\n step: number;\n disabled?: boolean;\n onClick?: (ev: React.SyntheticEvent<HTMLButtonElement>) => void;\n}\n\nconst Dot: FC<\n DotProps & {\n className?: string;\n }\n> = ({ step, disabled, onClick, className, children }) => {\n return (\n <SliderContext.Consumer>\n {(values) => (\n <DotView\n disabled={\n disabled !== undefined\n ? disabled\n : step === values.currentStep\n }\n onClick={(ev) => {\n values.goToStep(step);\n onClick && onClick(ev);\n }}\n className={className + ' slider-control'}\n >\n {children}\n </DotView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nconst DotGroupView = styled.div``;\n\nconst DotGroup: FC<{\n children?: (\n key: number,\n isActive?: boolean,\n onClick?: (ev: React.SyntheticEvent<HTMLElement>) => void\n ) => React.ReactNode;\n className?: string;\n}> = ({ className, children }) => {\n const context = useContext(SliderContext);\n const [stepsArray, setStepsArray] = useState<number[]>();\n\n useEffect(() => {\n const steps = Array<number>(context.steps);\n for (let i = 0; i < steps.length; i++) {\n steps[i] = i;\n }\n setStepsArray(steps);\n }, [context.steps]);\n\n return (\n <SliderContext.Consumer>\n {(values) => (\n <DotGroupView className={className + ' slider-control'}>\n {stepsArray &&\n stepsArray.length > 1 &&\n stepsArray?.map((step, i) => {\n return (\n children &&\n children(i, i === values.currentStep, () =>\n values.goToStep(i)\n )\n );\n })}\n </DotGroupView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nexport default {\n Provider: Slider,\n Slides: Slides,\n Slide: Slide,\n Control: Control,\n Status: Status,\n Dot: Dot,\n DotGroup: DotGroup,\n};\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\nimport Intro from 'components/blocks/Intro';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Pointer from 'components/buttons/Pointer';\n\nconst StyledSection = styled(Section)<{ isCentered?: boolean }>`\n margin: 0 auto;\n\n @media ${mq.semilarge} {\n margin: ${({ isCentered }) => (isCentered ? '0 auto' : '0')};\n\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n }\n`;\n\nconst ListContainer = styled.div`\n text-align: center;\n &:not(:first-child) {\n ${withRange([spacings.spacer, spacings.spacer * 1.75], 'margin-top')}\n }\n\n &:not(:last-child) {\n ${withRange([spacings.spacer, spacings.spacer * 1.75], 'margin-bottom')}\n }\n`;\n\nconst ItemContainer = styled.div<{ isCentered?: boolean }>`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n margin-bottom: ${spacings.spacer * 1.75}px;\n\n text-align: center;\n\n @media ${mq.semilarge} {\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n }\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 6 ? 'block' : 'none'};\n\n @media ${mq.semilarge} {\n display: ${({ itemCount }) =>\n itemCount && itemCount > 8 ? 'block' : 'none'};\n }\n\n @media ${mq.large} {\n display: ${({ itemCount }) =>\n itemCount && itemCount > 10 ? 'block' : 'none'};\n }\n`;\n\nconst Items = styled.div<{ isVisible?: boolean; isCentered?: boolean }>`\n display: ${({ isVisible }) => (isVisible ? 'flex' : 'none')};\n align-items: center;\n justify-content: center;\n\n flex-wrap: wrap;\n margin-left: -20px;\n\n @media ${mq.medium} {\n align-items: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n }\n`;\n\nconst ActionsWrapper = styled.div<{ isCentered?: boolean }>`\n position: relative;\n padding-top: ${spacings.spacer * 2}px;\n\n @media ${mq.medium} {\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n }\n`;\n\nconst StyledActions = styled(Actions)`\n @media ${mq.medium} {\n max-width: 600px;\n }\n`;\n\nconst Item = styled.img<{ isVisible?: boolean; index: number }>`\n display: block;\n\n padding-left: 20px;\n padding-top: 20px;\n\n display: ${({ index, isVisible }) =>\n isVisible || index < 6 ? 'block' : 'none'};\n\n @media ${mq.semilarge} {\n display: ${({ index, isVisible }) =>\n isVisible || index < 8 ? 'block' : 'none'};\n }\n\n @media ${mq.large} {\n display: ${({ index, isVisible }) =>\n isVisible || index < 10 ? 'block' : 'none'};\n }\n`;\n\nconst ListFooter = styled(Copy)<{ isCentered?: boolean }>`\n text-align: center;\n\n @media ${mq.medium} {\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n }\n`;\n\nconst IconList: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n hasBack?: boolean;\n items: { src: string; alt?: string }[];\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n showMoreText?: string;\n showLessText?: string;\n isInverted?: boolean;\n isCentered?: boolean;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n hasBack,\n items,\n isInverted = false,\n isCentered = false,\n primaryAction,\n secondaryAction,\n showLessText = 'weniger anzeigen',\n showMoreText = 'weitere anzeigen',\n}) => {\n const [showMore, setShowMore] = React.useState(false);\n const theme = React.useContext(ThemeContext);\n\n return (\n <StyledSection\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n isCentered={isCentered}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {title && (\n <Intro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n isCentered={isCentered}\n />\n )}\n <ListContainer>\n <Copy type=\"copy\" size=\"medium\" isInverted={isInverted}>\n <ItemContainer isCentered={isCentered}>\n <Items\n isVisible={!showMore ? true : showMore === true}\n isCentered={isCentered}\n >\n {items.map(({ src, alt }, i) => {\n return (\n <Item\n isVisible={showMore}\n index={i}\n key={i}\n src={src}\n alt={alt}\n />\n );\n })}\n </Items>\n </ItemContainer>\n <ListFooter\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n isCentered={isCentered}\n >\n <ShowMore\n itemCount={items.length}\n onClick={() => setShowMore((prev) => !prev)}\n >\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMore ? showLessText : showMoreText}\n </Pointer.Label>\n </Pointer.View>\n </ShowMore>\n </ListFooter>\n </Copy>\n </ListContainer>\n\n {(primaryAction || secondaryAction) && (\n <ActionsWrapper isCentered={isCentered}>\n <StyledActions\n isCentered={isCentered}\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n </ActionsWrapper>\n )}\n </Wrapper>\n </StyledSection>\n );\n};\n\nexport default IconList;\n","import * as React from 'react';\nimport styled, { ThemeContext, css } from 'styled-components';\n\nimport Section, { BgMode } from 'components/base/Section';\nimport Title from 'components/blocks/Title';\nimport Copy from 'components/typography/Copy';\nimport Wrapper from 'components/base/Wrapper';\nimport { spacings, mq, getColors as color } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst StyledTitle = styled(Title)`\n @media ${mq.semilarge} {\n max-width: 50%;\n }\n`;\n\nconst Content = styled.div<{ withAsideText?: boolean }>`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n\n ${({ withAsideText }) =>\n withAsideText &&\n css`\n @media ${mq.semilarge} {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n\n & > * + * {\n margin-left: ${spacings.spacer * 3}px;\n }\n }\n `}\n`;\n\nconst ContentBlock = styled.div<{ isAside?: boolean }>`\n & + & {\n padding-top: ${({ isAside }) => (isAside ? spacings.spacer : '0')}px;\n }\n\n flex: ${({ isAside }) => (isAside ? '1 0 30%' : '1 0 60%')};\n\n @media ${mq.semilarge} {\n max-width: ${({ isAside }) => (isAside ? '100%' : '60%')};\n\n & + & {\n padding-top: 0;\n }\n }\n`;\n\nconst ContentText = styled(Copy)`\n text-align: left;\n`;\n\nconst StyledActions = styled(Actions)`\n padding-top: ${spacings.spacer * 2}px;\n\n @media ${mq.semilarge} {\n max-width: 50%;\n }\n`;\n\nconst Article: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n intro?: string;\n text?: string;\n asideText?: string;\n\n bgMode?: BgMode;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n intro,\n text,\n asideText,\n bgMode,\n primaryAction,\n secondaryAction,\n isInverted = false,\n}) => {\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'half-right':\n return 'half-right';\n case 'half-left':\n return 'half-left';\n case 'larger-right':\n return 'larger-right';\n case 'larger-left':\n return 'larger-left';\n default:\n return undefined;\n }\n };\n\n const theme = React.useContext(ThemeContext);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <StyledTitle\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n <Content withAsideText={asideText ? true : false}>\n <ContentBlock>\n {intro && (\n <ContentText\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n />\n )}\n {text && (\n <ContentText\n type=\"copy\"\n isInverted={isInverted}\n innerHTML={text}\n />\n )}\n </ContentBlock>\n\n {asideText && (\n <ContentBlock isAside>\n <ContentText\n type=\"copy\"\n isInverted={isInverted}\n innerHTML={asideText}\n />\n </ContentBlock>\n )}\n </Content>\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default Article;\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport { mq, spacings, withRange } from 'utils/styles';\n\nimport Copy from 'components/typography/Copy';\nimport Image, { ImageProps as Props } from 'components/blocks/Image';\nimport Actions from './Actions';\n\nconst View = styled.div`\n min-width: 270px;\n padding-bottom: ${spacings.nudge}px;\n`;\n\nconst ImageContainer = styled.div<{ isCentered?: boolean }>`\n display: flex;\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n padding-bottom: ${spacings.spacer * 2}px;\n`;\n\nconst StyledImage = styled(Image)`\n // width: 100%;\n`;\n\nconst Content = styled.div<{ addWhitespace?: boolean; isCentered?: boolean }>`\n text-align: ${({ isCentered }) => isCentered && 'center'};\n padding: 0\n ${({ addWhitespace }) => addWhitespace && spacings.nudge * 2 + 'px'};\n\n & + & {\n ${withRange(\n [spacings.spacer * 1.5, spacings.spacer * 2],\n 'padding-top'\n )}\n }\n`;\n\nconst ArticleContent = styled(Content)<{ isCentered?: boolean }>`\n text-align: ${({ isCentered }) => isCentered && 'center'};\n\n @media ${mq.medium} {\n max-width: 95%;\n }\n`;\n\nconst ContentBlock = styled(Copy)`\n & + & {\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'padding-top')}\n }\n`;\n\nconst Desc = styled.div`\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'padding-top')}\n`;\n\nconst StyledActions = styled(Actions)<{ addWhitespace?: boolean }>`\n padding: 0\n ${({ addWhitespace }) => addWhitespace && spacings.nudge * 2 + 'px'};\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')}\n\n @media ${mq.medium} {\n width: 100%;\n\n & > * {\n max-width: 50%;\n min-width: 0 !important;\n flex: 1;\n }\n }\n`;\n\nexport interface FeatureProps {\n isInverted?: boolean;\n isCentered?: boolean;\n title?: string;\n description?: string;\n intro?: string;\n text?: string;\n image?: Props;\n\n addWhitespace?: boolean;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}\n\nconst Feature: React.FC<\n FeatureProps & {\n className?: string;\n }\n> = ({\n title,\n description,\n intro,\n text,\n image,\n addWhitespace = false,\n isInverted = false,\n isCentered = false,\n primaryAction,\n secondaryAction,\n className,\n}) => {\n return (\n <View className={className}>\n {image && (\n <ImageContainer isCentered={isCentered}>\n <StyledImage\n small={image.small}\n medium={image.medium}\n semilarge={image.semilarge}\n large={image.large}\n xlarge={image.xlarge}\n alt={image.alt}\n coverSpace={image.coverSpace}\n />\n </ImageContainer>\n )}\n <Content addWhitespace={addWhitespace} isCentered={isCentered}>\n <ContentBlock\n type=\"copy-b\"\n size=\"big\"\n isInverted={isInverted}\n data-sheet=\"title\"\n >\n {title}\n </ContentBlock>\n {description && (\n <ContentBlock\n size=\"small\"\n isInverted={isInverted}\n data-sheet=\"desc\"\n >\n <Desc\n dangerouslySetInnerHTML={{ __html: description }}\n />\n </ContentBlock>\n )}\n </Content>\n <ArticleContent\n addWhitespace={addWhitespace}\n isCentered={isCentered}\n >\n {intro && (\n <ContentBlock\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n data-sheet=\"intro\"\n />\n )}\n {text && (\n <ContentBlock\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n innerHTML={text}\n data-sheet=\"text\"\n />\n )}\n </ArticleContent>\n {(primaryAction || secondaryAction) && (\n <StyledActions\n isCentered={isCentered}\n addWhitespace={addWhitespace}\n primary={primaryAction && primaryAction(isInverted)}\n secondary={secondaryAction && secondaryAction(isInverted)}\n />\n )}\n </View>\n );\n};\n\nexport default Feature;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings, mq } from 'utils/styles';\nimport Section, { BgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Feature, { FeatureProps } from 'components/blocks/Feature';\nimport Intro from 'components/blocks/Intro';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\n\nconst StyledIntro = styled(Intro)`\n padding-bottom: ${spacings.spacer * 2}px;\n`;\n\nconst ContentContainer = styled.div<{ isHalf?: boolean }>`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: ${({ isHalf }) => (isHalf ? 'center' : 'flex-start')};\n align-items: flex-start;\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n padding-left: 20px;\n padding-top: 40px;\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n\n @media ${mq.large} {\n padding-right: ${({ isHalf }) => isHalf && '7%'};\n padding-left: ${({ isHalf }) => isHalf && '7%'};\n\n & > * {\n flex: ${({ isHalf }) => (isHalf ? '1 0 50%' : '1 0 33.33%')};\n max-width: ${({ isHalf }) => (isHalf ? '50%' : '33.33%')};\n }\n }\n`;\n\nconst FeatureList: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n isCentered?: boolean;\n features?: FeatureProps[];\n bgMode?: 'full' | 'splitted';\n}> = ({\n features,\n bgMode,\n isInverted = false,\n isCentered = false,\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n}) => {\n const theme = React.useContext(ThemeContext);\n const featureCount = features?.length || 0;\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\n listLength: featureCount,\n identifiers: [\n '[data-sheet=\"title\"]',\n '[data-sheet=\"desc\"]',\n '[data-sheet=\"intro\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: featureCount % 2 === 0 ? 2 : 3,\n xlarge: featureCount % 2 === 0 ? 2 : 3,\n },\n });\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'splitted':\n return 'half-right';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n {title && (\n <Wrapper addWhitespace>\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n secondaryAction={secondaryAction}\n primaryAction={primaryAction}\n />\n </Wrapper>\n )}\n <Wrapper addWhitespace clampWidth=\"normal\">\n {features && (\n <ContentContainer\n isHalf={features.length % 2 === 0 ? true : false}\n >\n {features &&\n features.map((feature, i) => {\n return (\n <div key={i} ref={cardRefs[i]}>\n <Feature\n isCentered={isCentered}\n isInverted={isInverted}\n addWhitespace\n {...feature}\n />\n </div>\n );\n })}\n </ContentContainer>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default FeatureList;\n","import React, { FC } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Intro from './Intro';\n\nconst View = styled.div<{\n clickable?: boolean;\n}>`\n display: block;\n position: relative;\n width: 100%;\n\n &:after {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: ${({ theme }) => global(theme).sections.imageTextGradient};\n pointer-events: none;\n }\n\n ${({ clickable }) =>\n clickable &&\n css`\n transition: box-shadow 0.2s ease-in-out;\n cursor: pointer;\n\n &:hover {\n box-shadow: 0 2px 24px 0 rgba(0, 0, 0, 0.35);\n }\n `}\n`;\n\nconst StyledImage = styled(Image)`\n width: 100%;\n min-height: 300px;\n`;\n\nconst LinkHelper = styled.a`\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n`;\n\nconst IntroContainer = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: auto;\n z-index: 1;\n\n padding-left: ${spacings.spacer}px;\n padding-right: ${spacings.spacer}px;\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')};\n ${withRange([spacings.spacer, spacings.spacer * 4], 'padding-bottom')};\n\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n display: block;\n flex: 1 0 0px;\n }\n\n @media ${mq.semilarge} {\n padding-left: calc(${1 / 28} * 100vw);\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nexport interface PromotionCardProps {\n image: ImageProps;\n title?: string;\n superTitle?: string;\n text?: string;\n href?: string;\n primaryAction?: React.ReactNode;\n secondaryAction?: React.ReactNode;\n onClick?: () => void;\n}\n\nconst PromotionCard: FC<PromotionCardProps> = ({\n image,\n title,\n superTitle,\n text,\n href,\n primaryAction,\n secondaryAction,\n onClick,\n}) => {\n return (\n <View onClick={onClick} clickable={onClick || href ? true : false}>\n <StyledImage {...image} coverSpace />\n {title && (\n <IntroContainer>\n <LinkHelper href={href} />\n <Intro\n colorMode=\"onImage\"\n title={title}\n superTitle={superTitle}\n text={text}\n secondaryAction={() => secondaryAction}\n primaryAction={() => primaryAction}\n clampText={text !== undefined}\n />\n </IntroContainer>\n )}\n </View>\n );\n};\n\nexport default PromotionCard;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings, mq } from 'utils/styles';\n\nimport Grid from 'components/base/Grid';\nimport Section, { BgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\n\nimport Intro from 'components/blocks/Intro';\nimport PromotionCard, {\n PromotionCardProps,\n} from 'components/blocks/PromotionCard';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst StyledIntro = styled(Intro)`\n padding-bottom: ${spacings.spacer * 2}px;\n`;\n\nconst FlexGrid = styled.div`\n @media ${mq.semilarge} {\n display: flex;\n flex-direction: row;\n margin-left: -${spacings.spacer}px;\n }\n`;\n\nconst FlexGridCol = styled.div`\n display: flex;\n flex-direction: column;\n\n @media ${mq.semilarge} {\n flex: 1 0 50%;\n max-width: 50%;\n padding-left: ${spacings.spacer}px;\n }\n\n & + & {\n margin-top: ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n margin-top: 0;\n }\n }\n`;\n\nconst PosterContainer = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n\n flex: 1 0 auto;\n\n & + & {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst CrossPromotion: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n main?: Array<PromotionCardProps & { size?: 'full' | 'half' }>;\n aside?: Array<PromotionCardProps & { size?: 'full' | 'half' }>;\n isMirrored?: boolean;\n\n // bgMode?: 'full' | 'splitted';\n bgMode?: BgMode;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n main,\n aside,\n bgMode,\n isInverted = false,\n isMirrored = false,\n}) => {\n // const getSectionBgMode = (): BgMode | undefined => {\n // switch (bgMode) {\n // case 'full':\n // return 'full';\n // case 'splitted':\n // return 'half-right';\n // default:\n // return undefined;\n // }\n // };\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'half-right':\n return 'half-right';\n case 'half-left':\n return 'half-left';\n case 'larger-right':\n return 'larger-right';\n case 'larger-left':\n return 'larger-left';\n default:\n return undefined;\n }\n };\n\n const theme = React.useContext(ThemeContext);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n {title && (\n <Wrapper addWhitespace>\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n secondaryAction={secondaryAction}\n primaryAction={primaryAction}\n />\n </Wrapper>\n )}\n <Wrapper clampWidth=\"normal\">\n <Grid.Row>\n <Grid.Col>\n {aside ? (\n isMirrored ? (\n <FlexGrid>\n <FlexGridCol>\n {main &&\n main.map((card, i) => (\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n ))}\n </FlexGridCol>\n\n <FlexGridCol>\n {aside.map((card, i) => (\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n ))}\n </FlexGridCol>\n </FlexGrid>\n ) : (\n <FlexGrid>\n <FlexGridCol>\n {aside.map((card, i) => (\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n ))}\n </FlexGridCol>\n <FlexGridCol>\n {main &&\n main.map((card, i) => (\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n ))}\n </FlexGridCol>\n </FlexGrid>\n )\n ) : (\n <Grid.Row>\n {main &&\n main.map((card, i) => (\n <Grid.Col\n semilarge={{\n span:\n (card.size === 'half'\n ? 14\n : 28) / 28,\n }}\n key={i}\n >\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n </Grid.Col>\n ))}\n </Grid.Row>\n )}\n </Grid.Col>\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport default CrossPromotion;\n","import React, { FC } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Intro from 'components/blocks/Intro';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst PosterContainer = styled.div<{\n hasContent?: boolean;\n}>`\n position: relative;\n width: 100%;\n max-height: 500px;\n\n @media ${mq.medium} {\n max-height: 900px;\n }\n\n &:after {\n content: ${({ hasContent }) => hasContent && '\"\"'};\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: ${({ theme }) => global(theme).sections.imageTextGradient};\n pointer-events: none;\n }\n\n ${({ onClick }) =>\n onClick &&\n css`\n transition: box-shadow 0.2s ease-in-out;\n cursor: pointer;\n\n &:hover {\n box-shadow: 0 2px 24px 0 rgba(0, 0, 0, 0.35);\n }\n `}\n`;\n\nconst StyledImage = styled(Image)`\n width: 100%;\n min-height: 500px;\n`;\n\nconst IntroContainer = styled(Wrapper)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: auto;\n z-index: 1;\n\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')};\n ${withRange([spacings.spacer, spacings.spacer * 4], 'padding-bottom')};\n\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n display: block;\n flex: 1 0 0px;\n }\n`;\n\nconst Poster: FC<{\n image: ImageProps;\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n image,\n}) => {\n return (\n <Section>\n <Wrapper clampWidth=\"large\">\n <PosterContainer hasContent={title !== undefined}>\n <StyledImage {...image} coverSpace />\n {title && (\n <IntroContainer addWhitespace>\n <Intro\n colorMode=\"onImage\"\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n secondaryAction={secondaryAction}\n primaryAction={primaryAction}\n clampText={text !== undefined}\n />\n </IntroContainer>\n )}\n </PosterContainer>\n </Wrapper>\n </Section>\n );\n};\n\nexport default Poster;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Play: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"67\"\n height=\"67\"\n viewBox=\"0 0 67 67\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M26.5625 48.2812l20-15-20-15v30zM33.2812 0c9.1668 0 17.0052 3.25518 23.5157 9.76562 6.5104 6.51048 9.7656 14.34888 9.7656 23.51558 0 9.1668-3.2552 17.0052-9.7656 23.5157-6.5105 6.5104-14.3489 9.7656-23.5157 9.7656-9.1667 0-17.0051-3.2552-23.51558-9.7656C3.25518 50.2864 0 42.448 0 33.2812c0-9.1667 3.25518-17.0051 9.76562-23.51558C16.2761 3.25518 24.1145 0 33.2812 0z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Play;\n","import React, { FC, useState } from 'react';\nimport styled from 'styled-components';\n\nimport { ImageProps } from 'components/blocks/Image';\nimport { mq, getColors as color } from 'utils/styles';\nimport Play from 'components/base/icons/Play';\n\nconst View = styled.div<{ bgImage?: ImageProps; isActive?: boolean }>`\n text-align: center;\n\n cursor: pointer;\n position: relative;\n\n padding-bottom: 56.25%;\n\n background-image: url('${({ bgImage }) => (bgImage ? bgImage.small : '')}');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n @media ${mq.medium} {\n text-align: left;\n\n background-image: ${({ bgImage }) =>\n bgImage ? `url(\"${bgImage.medium}\")` : ''};\n }\n\n @media ${mq.semilarge} {\n background-image: ${({ bgImage }) =>\n bgImage ? `url(\"${bgImage.semilarge}\")` : ''};\n }\n\n @media ${mq.large} {\n background-image: ${({ bgImage }) =>\n bgImage ? `url(\"${bgImage.large}\")` : ''};\n }\n\n @media ${mq.xlarge} {\n background-image: ${({ bgImage }) =>\n bgImage ? `url(\"${bgImage.xlarge}\")` : ''};\n }\n\n &:before {\n content: ${({ isActive, bgImage }) => !isActive && bgImage && '\"\"'};\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background-color: ${({ theme }) => color(theme).mono.medium};\n opacity: ${({ bgImage }) => (bgImage ? '0.3' : '0')};\n\n pointer-events: none;\n }\n\n &:after {\n content: ${({ isActive, bgImage }) => !isActive && bgImage && '\"\"'};\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n pointer-events: none;\n\n background: linear-gradient(\n 358.19deg,\n rgba(29, 34, 35, 0.52) 12.37%,\n rgba(29, 34, 35, 0) 59.02%\n );\n }\n`;\n\nconst VideoControls = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n color: ${({ theme }) => color(theme).light};\n\n & > * {\n opacity: 0.8;\n transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out;\n }\n\n ${View}:hover > & > * {\n transform: scale(1.05);\n opacity: 1;\n }\n\n ${View}:active > & > * {\n transform: scale(0.95);\n opacity: 1;\n }\n`;\n\nconst Iframe = styled.iframe`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n\n border: none;\n`;\n\nexport interface VideoCardProps {\n bgImage: ImageProps;\n embedId: string;\n playIcon?: React.ReactChild;\n}\n\nconst VideoCard: FC<VideoCardProps & { className?: string }> = ({\n bgImage,\n embedId,\n playIcon,\n className,\n}) => {\n const [isActive, setIsActive] = useState(false);\n\n return (\n <View\n onClick={() => setIsActive(true)}\n bgImage={isActive ? undefined : bgImage}\n isActive={isActive}\n className={className}\n >\n {!isActive && <VideoControls>{playIcon || <Play />}</VideoControls>}\n {isActive && (\n <Iframe\n id=\"ytplayer\"\n src={`https://www.youtube.com/embed/${embedId}?autoplay=1`}\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n />\n )}\n </View>\n );\n};\n\nexport default VideoCard;\n","import React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport { getColors as color, spacings } from 'utils/styles';\nimport Intro from 'components/blocks/Intro';\nimport Wrapper from 'components/base/Wrapper';\nimport { ImageProps } from 'components/blocks/Image';\n\nimport VideoCard from 'components/blocks/VideoCard';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst StyledIntro = styled(Intro)`\n padding-bottom: ${spacings.spacer * 2}px;\n`;\n\nconst Video: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n bgImage: ImageProps;\n embedId: string;\n playIcon?: React.ReactChild;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n hasBack?: boolean;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n hasBack = false,\n bgImage,\n embedId,\n playIcon,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <Section\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n addSeperation\n >\n {title && (\n <Wrapper addWhitespace>\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n </Wrapper>\n )}\n <Wrapper>\n <VideoCard\n bgImage={bgImage}\n embedId={embedId}\n playIcon={playIcon}\n />\n </Wrapper>\n </Section>\n );\n};\n\nexport default Video;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\n} from 'utils/styles';\nimport Copy from 'components/typography/Copy';\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Intro from 'components/blocks/Intro';\nimport Actions from 'components/blocks/Actions';\n\nconst ContactView = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n margin: 0 auto;\n width: 100%;\n\n text-align: left;\n hyphens: auto;\n overflow-wrap: break-word;\n\n @media ${mq.medium} {\n flex-direction: row;\n }\n`;\n\nconst Avatar = styled.img`\n height: 196px;\n width: 196px;\n border: solid 1px transparent;\n border-radius: 50%;\n padding: ${spacings.nudge}px;\n\n @media ${mq.medium} {\n margin-right: ${spacings.nudge * 6}px;\n }\n`;\n\nconst Info = styled.div`\n display: flex;\n flex-direction: column;\n align-self: flex-start;\n align-content: center;\n text-align: center;\n width: 100%;\n\n padding: ${spacings.spacer}px;\n\n & > *:not(:last-child) {\n margin-bottom: ${spacings.spacer * 1.5}px;\n }\n\n @media ${mq.medium} {\n align-content: flex-start;\n text-align: left;\n width: auto;\n }\n`;\n\nconst Address = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: ${spacings.nudge}px;\n\n & + & {\n margin-top: ${spacings.nudge}px;\n }\n\n & > *:not(:first-child) {\n margin-left: 0;\n }\n\n @media ${mq.medium} {\n justify-content: flex-start;\n flex-direction: row;\n padding: ${spacings.nudge}px ${spacings.nudge}px ${spacings.nudge}px 0;\n\n & > *:not(:first-child) {\n margin-left: ${spacings.spacer}px;\n }\n }\n`;\n\nconst Decorator = styled.div<{ isInverted?: boolean }>`\n flex: 1;\n width: 25px;\n margin-bottom: ${spacings.nudge * 1.5}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted\n ? font(theme)['copy-b'].big.colorInverted\n : font(theme)['copy-b'].big.color};\n\n @media ${mq.medium} {\n margin-bottom: 0;\n }\n`;\n\nconst AddressLabel = styled(Copy)`\n flex: 0 100%;\n text-align: left;\n\n a {\n color: ${({ textColor }) => textColor && textColor};\n text-decoration: none;\n }\n\n p {\n margin: 0;\n }\n\n a:hover {\n text-decoration: underline;\n }\n`;\n\nexport interface ContactBoxProps {\n isInverted?: boolean;\n name?: string;\n description?: string;\n addresses?: { decorator?: React.ReactNode; label: string }[];\n avatar?: { src: string; alt: string };\n}\n\nconst ContactBox: FC<ContactBoxProps & { className?: string }> = ({\n isInverted,\n name,\n description,\n addresses,\n avatar,\n className,\n}) => {\n return (\n <ContactView className={className}>\n {avatar && <Avatar src={avatar?.src} alt={avatar?.alt} />}\n <Info>\n {name && (\n <div>\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {name}\n </Copy>\n {description && (\n <Copy\n type=\"copy\"\n isInverted={isInverted}\n innerHTML={description}\n />\n )}\n </div>\n )}\n <div>\n {addresses &&\n addresses.map((address, i) => (\n <Address key={i}>\n <Decorator isInverted={isInverted}>\n {address.decorator}\n </Decorator>\n <AddressLabel\n type=\"copy-b\"\n size=\"big\"\n isInverted={isInverted}\n innerHTML={address.label}\n />\n </Address>\n ))}\n </div>\n </Info>\n </ContactView>\n );\n};\n\n// const StyledSection = styled(Section)`\n// padding: ${spacings.spacer * 3}px ${spacings.nudge * 2}px;\n// padding-top: ${spacings.spacer * 2}px;\n// text-align: center;\n\n// @media ${mq.medium} {\n// padding: ${spacings.spacer * 3}px ${spacings.spacer}px;\n// padding-top: ${spacings.spacer * 2}px;\n// }\n// `;\n\nconst StyledIntro = styled(Intro)`\n @media ${mq.semilarge} {\n & > *:first-child {\n min-height: 110px;\n }\n }\n`;\n\nconst Content = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n max-width: ${(17 / 28) * spacings.wrapper}px;\n margin: 0 auto;\n\n & > * + * {\n ${withRange([spacings.spacer * 1, spacings.spacer * 1.5], 'margin-top')}\n }\n`;\n\nconst StyledContactBox = styled(ContactBox)`\n margin-top: ${spacings.spacer * 2.5}px;\n`;\n\nconst StyledActions = styled(Actions)`\n @media ${mq.semilarge} {\n & > * {\n max-width: 300px;\n }\n }\n`;\n\nconst NewsletterWrapper = styled.div`\n width: 100%;\n margin-top: ${spacings.spacer * 2.5}px;\n\n @media ${mq.semilarge} {\n max-width: 400px;\n }\n`;\n\nconst Badge = styled.div`\n display: none;\n position: relative;\n height: 241px;\n width: 241px;\n margin-left: auto;\n margin-bottom: -110px;\n z-index: 3;\n\n @media ${mq.xlarge} {\n display: block;\n margin-right: ${1440 * (1 / 28) + 'px'};\n }\n`;\n\nexport const CallToAction: FC<{\n isInverted?: boolean;\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n contact?: ContactBoxProps;\n\n badge?: React.ReactNode;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n newsForm?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n isInverted = false,\n title,\n titleAs = 'h1',\n superTitle,\n superTitleAs,\n text,\n contact,\n badge,\n primaryAction,\n secondaryAction,\n newsForm,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <Section\n addSeperation\n bgColor={isInverted ? color(theme).dark : color(theme).mono.light}\n >\n <Wrapper addWhitespace clampWidth=\"normal\">\n {badge && <Badge>{badge}</Badge>}\n <Content>\n {title && (\n <StyledIntro\n isCentered\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n />\n )}\n {contact && (\n <StyledContactBox\n isInverted={isInverted}\n name={contact.name}\n description={contact.description}\n addresses={contact.addresses}\n avatar={contact.avatar}\n />\n )}\n {newsForm && (\n <NewsletterWrapper>\n {newsForm(isInverted)}\n </NewsletterWrapper>\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n isCentered\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Content>\n </Wrapper>\n </Section>\n );\n};\n\nexport default CallToAction;\n","import * as React from 'react';\nimport Section from 'components/base/Section';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors, spacings, withRange } from 'utils/styles';\nimport Wrapper from 'components/base/Wrapper';\nimport Intro from 'components/blocks/Intro';\nimport Copy from 'components/typography/Copy';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst FactsContainer = styled.ul`\n padding: 0;\n margin: 0;\n\n ${withRange([spacings.spacer * 2, spacings.spacer * 3], 'padding-top')}\n\n list-style-type: none;\n`;\n\nconst FactsItem = styled.li<{ hasText?: boolean }>`\n padding: ${spacings.spacer}px ${spacings.nudge * 2}px;\n\n background: #fff;\n\n cursor: pointer;\n\n display: flex;\n flex-direction: row;\n align-items: ${({ hasText }) => (hasText ? 'flex-start' : 'center')};\n\n & + & {\n margin-top: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Icon = styled.img`\n margin-right: ${spacings.spacer}px;\n display: block;\n width: 100%;\n max-width: ${spacings.spacer * 2}px;\n`;\n\nconst ContentBlock = styled.div`\n max-width: 80%;\n`;\n\nconst Text = styled(Copy)`\n margin-top: ${spacings.spacer}px;\n`;\n\nconst FactList: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n intro?: string;\n\n facts?: {\n label?: string;\n text?: string;\n icon?: { src: string; alt?: string };\n }[];\n\n hasBack?: boolean;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n intro,\n facts,\n hasBack,\n primaryAction,\n secondaryAction,\n isInverted,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? getColors(theme).dark\n : hasBack\n ? getColors(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {title && (\n <Intro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={intro}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n )}\n {facts && (\n <FactsContainer>\n {facts.map(({ label, text, icon }, i) => {\n return (\n <FactsItem key={i} hasText={!!text}>\n {icon && (\n <Icon src={icon.src} alt={icon.alt} />\n )}\n <ContentBlock>\n <Copy type=\"copy-b\">{label}</Copy>\n {text && (\n <Text\n type=\"copy\"\n innerHTML={text}\n />\n )}\n </ContentBlock>\n </FactsItem>\n );\n })}\n </FactsContainer>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default FactList;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { spacings, withRange } from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Copy from 'components/typography/Copy';\n\nconst View = styled.div``;\n\nconst ImageContainer = styled.div<{ isCentered?: boolean }>`\n display: flex;\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n padding-bottom: ${spacings.nudge * 3}px;\n max-width: 100%;\n`;\n\nconst Content = styled.div<{ isCentered?: boolean }>`\n text-align: ${({ isCentered }) => isCentered && 'center'};\n`;\n\nconst Title = styled(Copy)`\n * + & {\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'margin-top')}\n }\n`;\n\nconst ContentBlock = styled(Copy)`\n * + & {\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'margin-top')}\n }\n`;\n\nconst Text = styled(Copy)`\n margin-top: ${spacings.nudge}px;\n\n ${Title} + & {\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'margin-top')}\n }\n`;\n\nexport interface FactProps {\n isInverted?: boolean;\n isCentered?: boolean;\n title?: string;\n subTitle?: string;\n text?: string;\n image?: ImageProps;\n}\n\nconst Fact: FC<\n FactProps & {\n className?: string;\n }\n> = ({\n isInverted = false,\n isCentered = false,\n title,\n subTitle,\n text,\n image,\n className,\n}) => {\n return (\n <View className={className}>\n {image && (\n <ImageContainer isCentered={isCentered}>\n <Image\n small={image.small}\n medium={image.medium}\n semilarge={image.semilarge}\n large={image.large}\n xlarge={image.xlarge}\n alt={image.alt}\n coverSpace={image.coverSpace}\n />\n </ImageContainer>\n )}\n <Content isCentered={isCentered}>\n {title && (\n <Title\n type=\"copy-b\"\n size=\"big\"\n isInverted={isInverted}\n data-sheet=\"title\"\n >\n {title}\n </Title>\n )}\n {subTitle && (\n <ContentBlock\n type=\"copy-b\"\n isInverted={isInverted}\n data-sheet=\"subtitle\"\n >\n {subTitle}\n </ContentBlock>\n )}\n {text && (\n <Text\n type=\"copy\"\n isInverted={isInverted}\n data-sheet=\"text\"\n innerHTML={text}\n />\n )}\n </Content>\n </View>\n );\n};\n\nexport default Fact;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Section, { BgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Intro from 'components/blocks/Intro';\nimport Fact, { FactProps } from 'components/blocks/Fact';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\n\nconst StyledIntro = styled(Intro)`\n ${withRange([spacings.spacer * 2, spacings.spacer * 4], 'padding-bottom')}\n`;\n\nconst ContentContainer = styled.div<{ columns?: number }>`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.medium} {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n\n @supports (display: grid) {\n display: -ms-grid;\n display: grid;\n -ms-grid-columns: ${({ columns }) =>\n columns &&\n new Array(columns < 3 ? columns : 3).fill('').map(() => {\n return '1fr ';\n })};\n grid-template-columns: repeat(\n ${({ columns }) => columns && (columns < 3 ? columns : 3)},\n 1fr\n );\n }\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n flex: 0 0\n ${({ columns }) =>\n columns && (1 / (columns < 3 ? columns : 3)) * 100 + '%'};\n max-width: ${({ columns }) =>\n columns && (1 / (columns < 3 ? columns : 3)) * 100 + '%'};\n padding-left: 20px;\n padding-top: 40px;\n\n @supports (display: grid) {\n max-width: 370px;\n }\n }\n }\n\n @media ${mq.semilarge} {\n & > * {\n flex: 0 0\n ${({ columns }) =>\n columns && (1 / (columns < 4 ? columns : 4)) * 100 + '%'};\n max-width: ${({ columns }) =>\n columns && (1 / (columns < 4 ? columns : 4)) * 100 + '%'};\n }\n\n @supports (display: grid) {\n -ms-grid-columns: ${({ columns }) =>\n columns &&\n new Array(columns < 4 ? columns : 4).fill('').map(() => {\n return '1fr ';\n })};\n grid-template-columns: repeat(\n ${({ columns }) => columns && (columns < 4 ? columns : 4)},\n 1fr\n );\n\n & > * {\n max-width: 370px;\n }\n }\n }\n\n @media ${mq.large} {\n & > * {\n flex: 0 0 ${({ columns }) => columns && (1 / columns) * 100 + '%'};\n max-width: ${({ columns }) => columns && (1 / columns) * 100 + '%'};\n }\n\n @supports (display: grid) {\n -ms-grid-columns: ${({ columns }) =>\n columns &&\n new Array(columns).fill('').map(() => {\n return '1fr ';\n })};\n grid-template-columns: repeat(${({ columns }) => columns}, 1fr);\n\n & > * {\n max-width: 370px;\n }\n }\n }\n`;\n\nconst FactFill = styled.div`\n display: none;\n\n @media ${mq.large} {\n display: block;\n }\n`;\n\nconst FactGrid: FC<{\n columns?: 3 | 4 | 6;\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n intro?: string;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n facts?: Array<Omit<FactProps, 'isInverted' | 'isCentered'>>;\n\n bgMode?: 'full' | 'splitted';\n isInverted?: boolean;\n isCentered?: boolean;\n}> = ({\n columns = 3,\n title,\n titleAs,\n superTitle,\n superTitleAs,\n intro,\n primaryAction,\n secondaryAction,\n facts,\n bgMode,\n isInverted,\n isCentered,\n}) => {\n const theme = useContext(ThemeContext);\n const factCount = facts?.length || 0;\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'splitted':\n return 'half-right';\n default:\n return undefined;\n }\n };\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\n listLength: factCount,\n identifiers: [\n '[data-sheet=\"title\"]',\n '[data-sheet=\"subtitle\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: 1,\n medium: columns < 3 ? columns : 3,\n semilarge: columns < 4 ? columns : 4,\n large: columns,\n xlarge: columns,\n },\n });\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {title && (\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={intro}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n )}\n {facts && (\n <ContentContainer columns={columns}>\n {facts.map((fact, i) => {\n if (\n fact?.title ||\n fact?.subTitle ||\n fact?.image ||\n fact?.text\n ) {\n return (\n <div key={i} ref={cardRefs[i]}>\n <Fact\n key={i}\n {...fact}\n isCentered={isCentered}\n isInverted={isInverted}\n />\n </div>\n );\n } else {\n return <FactFill ref={cardRefs[i]} key={i} />;\n }\n })}\n </ContentContainer>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default FactGrid;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, withRange, spacings, mq } from 'utils/styles';\nimport Intro from 'components/blocks/Intro';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport { hexToRgba } from 'utils/hexRgbConverter';\n\nconst TableContainer = styled.div`\n overflow-x: scroll;\n overflow-y: hidden;\n white-space: nowrap;\n\n /* @media ${mq.semilarge} {\n overflow-x: auto;\n overflow-y: hidden;\n white-space: pre-wrap;\n margin-right: 0px;\n } */\n`;\n\nconst TableBody = styled.table`\n width: 100%;\n max-width: 100%;\n margin-top: ${spacings.nudge * 2}px;\n\n border-collapse: separate;\n border-spacing: 0 ${spacings.nudge}px;\n\n padding: 0 ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n padding-left: ${spacings.spacer}px;\n padding-right: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n padding-left: ${(1 / 28) * 100}%;\n padding-left: ${`\n max(\n ${spacings.spacer}px,\n ${(1 / 28) * 100}%\n );\n `};\n padding-right: ${spacings.spacer}px;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n padding-right: ${spacings.spacer}px;\n }\n`;\n\nconst TableHead = styled.th`\n text-align: left;\n color: ${({ theme }) => color(theme).dark};\n background-color: ${({ theme }) => color(theme).light};\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 2}px\n ${spacings.nudge * 3.5}px ${spacings.spacer * 2}px;\n min-width: 60px;\n box-sizing: content-box;\n\n :last-child {\n padding-right: ${spacings.spacer * 2.5}px;\n }\n`;\n\nconst TableData = styled.td<{ isInverted?: boolean }>`\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 2}px\n ${spacings.nudge * 3.5}px ${spacings.spacer * 2}px;\n min-width: 60px;\n box-sizing: content-box;\n\n background-color: ${({ isInverted, theme }) =>\n hexToRgba(color(theme).light, isInverted ? 0.2 : 0.4)};\n\n :last-child {\n padding-right: ${spacings.spacer * 2.5}px;\n }\n`;\n\nexport interface TableProps {\n tableTitle?: string;\n rowTitle?: string[];\n row: {\n cols: string[];\n }[];\n isInverted?: boolean;\n}\n\nconst TableBlock: React.FC<TableProps> = ({\n row,\n tableTitle,\n rowTitle,\n isInverted,\n}) => {\n return (\n <div>\n {tableTitle && (\n <Wrapper addWhitespace>\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {tableTitle}\n </Copy>\n </Wrapper>\n )}\n <TableContainer>\n <TableBody>\n {rowTitle && (\n <thead>\n <tr>\n {rowTitle.map((item, ii) => {\n return (\n <TableHead key={ii}>\n <Copy type=\"copy-b\">{item}</Copy>\n </TableHead>\n );\n })}\n </tr>\n </thead>\n )}\n <tbody>\n {row.map(({ cols }, i) => (\n <tr key={i}>\n {cols.map((itemText, ii) => {\n return (\n <TableData\n key={ii}\n isInverted={isInverted}\n >\n <Copy isInverted={isInverted}>\n {itemText}\n </Copy>\n </TableData>\n );\n })}\n </tr>\n ))}\n </tbody>\n </TableBody>\n </TableContainer>\n </div>\n );\n};\n\nconst TableWrapper = styled.div<{ withSeperation?: boolean }>`\n ${({ withSeperation }) =>\n withSeperation &&\n withRange([spacings.spacer, spacings.spacer * 4], 'padding-top')};\n\n & + & {\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n }\n`;\n\nconst Table: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n tableItems: TableProps[];\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n}> = ({\n text,\n title,\n superTitle,\n superTitleAs,\n titleAs,\n isInverted,\n tableItems,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <Section\n addSeperation\n bgColor={isInverted ? color(theme).dark : color(theme).mono.light}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {title && (\n <Intro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n )}\n </Wrapper>\n <Wrapper>\n {tableItems.map((item, i) => {\n return (\n <TableWrapper key={i} withSeperation={!!title}>\n <TableBlock {...item} isInverted={isInverted} />\n </TableWrapper>\n );\n })}\n </Wrapper>\n </Section>\n );\n};\n\nexport default Table;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowLeftGhost: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"58\"\n height=\"58\"\n viewBox=\"0 0 58 58\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g fill=\"none\">\n <path\n d=\"M29.00009 1.0086C13.55287 1.0086 1.009 13.5526 1.009 28.99998c0 15.44738 12.54387 27.99138 27.99109 27.99138s27.99109-12.544 27.99109-27.99138S44.44731 1.0086 29.00009 1.0086zm0 1.93044c14.4048 0 26.06067 11.656 26.06067 26.06094S43.40488 55.06092 29.00009 55.06092 2.93942 43.40492 2.93942 28.99998 14.5953 2.93904 29.00009 2.93904z\"\n fill={iconColor}\n />\n <g transform=\"matrix(.96521 0 0 .96522 1.009 1.0086)\">\n <g>\n <path\n d=\"M38.73 28.38H23.634l4.7893-4.9143c.2082-.2315.3123-.4986.3123-.8013s-.1041-.5698-.3123-.8013c-.2256-.2136-.4859-.3205-.7809-.3205s-.5553.1069-.7808.3205l-6.6633 6.8374c-.0521.0713-.1041.1336-.1562.187-.052.0534-.0781.1068-.0781.1602-.052.1247-.0781.2671-.0781.4274 0 .1602.0261.3205.0781.4807.0521.0713.0911.1336.1172.187.026.0534.065.1068.1171.1602l6.6633 6.8374c.1041.1247.2169.2137.3383.2671.1215.0534.269.0801.4425.0801.1562 0 .295-.0267.4165-.0801.1214-.0534.2429-.1424.3644-.2671.2082-.2314.3123-.4985.3123-.8012s-.1041-.5698-.3123-.8013l-4.7893-4.8876H38.73c.3471 0 .6204-.1024.8199-.3072.1996-.2048.2993-.4852.2993-.8413 0-.3383-.0997-.6099-.2993-.8146-.1995-.2048-.4728-.3072-.8199-.3072z\"\n fill={iconColor}\n />\n <path d=\"M27.643 21.043c-.41579 0-.8205.1686-1.125.45703l-.00781.00781-6.6953 6.8691-.01953.0293c-.04046.05536-.07885.09952-.11133.1328-.10781.11073-.21275.28915-.2168.5-.03865.14284-.08203.28464-.08203.43556 0 .2145.03644.43009.10352.63672l.02539.07422.04687.0664c.04037.05525.06313.09664.07031.11133.05464.11173.128.20605.20898.28906l6.6641 6.8379-.02539-.0293c.14297.17127.3152.31443.51953.4043.20176.08868.41973.12306.64453.12306.21318 0 .42348-.03791.6172-.12305.19627-.08634.3667-.21614.52147-.375l.00782-.00781.00586-.00782c.28073-.312.4414-.71743.4414-1.1348s-.16074-.82466-.4414-1.1367l-.00782-.00781-3.9648-4.0449h13.908c.44544 0 .8771-.15036 1.1777-.45898.30073-.30856.44141-.74003.44141-1.1895 0-.43654-.14557-.86067-.4414-1.1641-.30064-.30862-.7323-.45703-1.1777-.45703h-13.912l3.9707-4.0723.00585-.00781c.28066-.31206.44141-.71938.44141-1.1367 0-.41733-.16075-.8227-.4414-1.1348l-.01368-.01563-.01367-.01367c-.30455-.28835-.70921-.45703-1.125-.45703zm0 1c.16555 0 .27932.05066.41602.17383.12311.14291.17773.26708.17773.44726 0 .18807-.0498.31586-.18555.4668l-5.6016 5.75h16.281c.24876 0 .36257.05527.46094.15625.10337.10601.1582.22478.1582.46484 0 .26277-.05973.39115-.1582.49219-.09837.10098-.21218.15625-.46094.15625h-16.287l5.6074 5.7227c.13574.15094.18555.27873.18555.4668 0 .18481-.05129.31156-.18164.45898-.08255.08228-.15298.13091-.19727.15039-.0493.02166-.11562.03906-.21484.03906-.1222 0-.20094-.02093-.24219-.03906-.03846-.01692-.08907-.05077-.1543-.12891l-.01367-.01562-6.6758-6.8496v-.00196c-.02285-.02341-.0281-.03487-.0254-.0293h-.00195c-.0264-.05402-.06298-.10381-.0957-.1543-.0299-.10164-.04883-.1992-.04883-.29491 0-.10603.01819-.17962.04102-.23438l.02734-.06641c.03584-.03994.0698-.08138.10352-.125l.00586-.00586 6.6426-6.8164c.1465-.13877.2633-.18359.4375-.18359z\" />\n </g>\n </g>\n </g>\n </SVG>\n);\n\nexport default ArrowLeftGhost;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowRightGhost: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"58\"\n height=\"58\"\n viewBox=\"0 0 58 58\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g fill=\"none\">\n <path\n d=\"M29.00009 1.0086C13.55287 1.0086 1.009 13.5526 1.009 28.99998c0 15.44738 12.54387 27.99138 27.99109 27.99138s27.99109-12.544 27.99109-27.99138S44.44731 1.0086 29.00009 1.0086zm0 1.93044c14.4048 0 26.06067 11.656 26.06067 26.06094S43.40488 55.06092 29.00009 55.06092 2.93942 43.40492 2.93942 28.99998 14.5953 2.93904 29.00009 2.93904z\"\n fill={iconColor}\n />\n <g transform=\"matrix(.96521 0 0 .96522 1.009 1.0086)\">\n <g>\n <path\n d=\"M21.005 30.65h15.096l-4.7893 4.9143c-.2082.2315-.3123.4986-.3123.8013s.1041.5698.3123.8013c.2256.2136.4859.3205.7809.3205s.5553-.1069.7808-.3205l6.6633-6.8374c.0521-.0713.1041-.1336.1562-.187.052-.0534.0781-.1068.0781-.1602.052-.1247.0781-.2671.0781-.4274 0-.1602-.0261-.3205-.0781-.4807-.0521-.0713-.0911-.1336-.1172-.187-.026-.0534-.065-.1068-.1171-.1602l-6.6633-6.8374c-.1041-.1247-.2169-.2137-.3383-.2671-.1215-.0534-.269-.0801-.4425-.0801-.1562 0-.295.0267-.4165.0801-.1214.0534-.2429.1424-.3644.2671-.2082.2314-.3123.4985-.3123.8012s.1041.5698.3123.8013l4.7893 4.8876H21.005c-.3471 0-.6204.1024-.8199.3072-.1996.2048-.2993.4852-.2993.8413 0 .3383.0997.6099.2993.8146.1995.2048.4728.3072.8199.3072z\"\n fill={iconColor}\n />\n <path d=\"M27.643 21.043c-.41579 0-.8205.1686-1.125.45703l-.00781.00781-6.6953 6.8691-.01953.0293c-.04046.05536-.07885.09952-.11133.1328-.10781.11073-.21275.28915-.2168.5-.03865.14284-.08203.28464-.08203.43556 0 .2145.03644.43009.10352.63672l.02539.07422.04687.0664c.04037.05525.06313.09664.07031.11133.05464.11173.128.20605.20898.28906l6.6641 6.8379-.02539-.0293c.14297.17127.3152.31443.51953.4043.20176.08868.41973.12306.64453.12306.21318 0 .42348-.03791.6172-.12305.19627-.08634.3667-.21614.52147-.375l.00782-.00781.00586-.00782c.28073-.312.4414-.71743.4414-1.1348s-.16074-.82466-.4414-1.1367l-.00782-.00781-3.9648-4.0449h13.908c.44544 0 .8771-.15036 1.1777-.45898.30073-.30856.44141-.74003.44141-1.1895 0-.43654-.14557-.86067-.4414-1.1641-.30064-.30862-.7323-.45703-1.1777-.45703h-13.912l3.9707-4.0723.00585-.00781c.28066-.31206.44141-.71938.44141-1.1367 0-.41733-.16075-.8227-.4414-1.1348l-.01368-.01563-.01367-.01367c-.30455-.28835-.70921-.45703-1.125-.45703zm0 1c.16555 0 .27932.05066.41602.17383.12311.14291.17773.26708.17773.44726 0 .18807-.0498.31586-.18555.4668l-5.6016 5.75h16.281c.24876 0 .36257.05527.46094.15625.10337.10601.1582.22478.1582.46484 0 .26277-.05973.39115-.1582.49219-.09837.10098-.21218.15625-.46094.15625h-16.287l5.6074 5.7227c.13574.15094.18555.27873.18555.4668 0 .18481-.05129.31156-.18164.45898-.08255.08228-.15298.13091-.19727.15039-.0493.02166-.11562.03906-.21484.03906-.1222 0-.20094-.02093-.24219-.03906-.03846-.01692-.08907-.05077-.1543-.12891l-.01367-.01562-6.6758-6.8496v-.00196c-.02285-.02341-.0281-.03487-.0254-.0293h-.00195c-.0264-.05402-.06298-.10381-.0957-.1543-.0299-.10164-.04883-.1992-.04883-.29491 0-.10603.01819-.17962.04102-.23438l.02734-.06641c.03584-.03994.0698-.08138.10352-.125l.00586-.00586 6.6426-6.8164c.1465-.13877.2633-.18359.4375-.18359z\" />\n </g>\n </g>\n </g>\n </SVG>\n);\n\nexport default ArrowRightGhost;\n","import { FeatureGroup, Map, Marker, MarkerOptions } from 'leaflet';\nimport React, { FC, useEffect, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { spacings, getColors as color } from 'utils/styles';\n\nconst MapContainer = styled.div`\n position: relative;\n z-index: 0;\n`;\n\nconst FylToCtrlContainer = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1000;\n\n margin-top: ${spacings.spacer}px;\n margin-right: ${spacings.spacer}px;\n color: ${({ theme }) => color(theme).dark};\n\n cursor: pointer;\n`;\n\nexport interface LeafletMapMarker {\n id: string;\n position: [number, number];\n icon?: {\n url: string;\n size: [number, number];\n anchor: [number, number];\n\n sizeActive: [number, number];\n anchorActive: [number, number];\n };\n popup?: {\n text: string;\n };\n}\n\nconst LeafletMap: FC<{\n containerRef?: React.MutableRefObject<HTMLDivElement | null>;\n onReady?: (props: {\n goTo: (position?: [number, number], zoom?: number) => void;\n showAll: () => void;\n }) => void;\n url?: string;\n attribution?: string;\n activeMarkerId?: string;\n markers?: Array<LeafletMapMarker>;\n center: [number, number];\n zoom?: number;\n touchZoom?: boolean;\n scrollWheelZoom?: boolean;\n onlyScrollOnFocus?: boolean;\n fitBoundsPadding?: [number, number];\n onMarkerClick?: (markerId: string) => void;\n onFlyToClick?: (goTo: (zoom?: number) => void) => void;\n flyToControl?: React.ReactNode;\n onActiveMarkerChanged?: (props: {\n markerId: string;\n goTo: (zoom?: number) => void;\n }) => void;\n className?: string;\n}> = ({\n containerRef,\n onReady,\n url = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n attribution = '&copy; <a href=\"http://osm.org/copyright\">OpenStreetMap</a> contributors',\n activeMarkerId,\n markers,\n center,\n zoom = 2.5,\n touchZoom = false,\n scrollWheelZoom = false,\n onlyScrollOnFocus = true,\n fitBoundsPadding = [20, 20], // 0 = TopLeft, 1 = BottomRight\n onMarkerClick,\n onFlyToClick,\n flyToControl,\n onActiveMarkerChanged,\n className,\n}) => {\n const cRef = useRef<HTMLDivElement | null>(null);\n const prevMarkerId = useRef<string | null>(null);\n\n // leaflet ref\n const [L, setLeaflet] = useState<any>(null);\n const [map, setMap] = useState<Map | null>(null);\n const [markersLayer, setMarkersLayer] = useState<FeatureGroup<any> | null>(\n null\n );\n const [isLoaded, setLoaded] = useState<boolean>(false);\n\n useEffect(() => {\n const initLeaflet = async (cElement: HTMLDivElement) => {\n const leaflet = await import('leaflet');\n if (leaflet) {\n // set leaflet state\n setLeaflet(leaflet);\n\n // setup map\n const map = leaflet.map(cElement, {\n center: center,\n zoom: zoom,\n touchZoom: touchZoom,\n scrollWheelZoom: scrollWheelZoom,\n });\n\n // activate map scrolling on focus\n map.once('focus', () => {\n if (onlyScrollOnFocus) map.scrollWheelZoom.enable();\n });\n\n // deactivate map scrolling on focus is lost\n map.once('blur', () => {\n if (onlyScrollOnFocus) map.scrollWheelZoom.disable();\n });\n\n // set map state\n setMap(map);\n\n // add map layer from map provider\n leaflet\n .tileLayer(url, {\n attribution: attribution,\n })\n .addTo(map);\n\n // setup layer for markers\n const markersLayer = new leaflet.FeatureGroup();\n markersLayer.addTo(map);\n setMarkersLayer(markersLayer);\n }\n };\n\n // load leaflet\n const mapContainerRef = containerRef || cRef;\n if (!isLoaded && mapContainerRef?.current)\n initLeaflet(mapContainerRef.current);\n }, [\n attribution,\n center,\n containerRef,\n isLoaded,\n onlyScrollOnFocus,\n scrollWheelZoom,\n touchZoom,\n url,\n zoom,\n ]);\n\n // setup markers\n useEffect(() => {\n /**\n * Adjust zoom to show all markers\n */\n const showAllMarkers = () => {\n if (map && markersLayer) {\n map.fitBounds(markersLayer.getBounds(), {\n padding: L.point(fitBoundsPadding),\n });\n }\n };\n\n /**\n * Pan and zoom to marker position on map\n * @param position\n * @param zoom\n */\n const flyToPosition = (position?: [number, number], zoom?: number) => {\n if (position) map?.flyTo(position, zoom);\n else flyToActive(zoom);\n };\n\n /**\n * Pan and zoom to active marker position on map\n * @param zoom\n */\n const flyToActive = (zoom?: number) => {\n const marker = markers?.find((m) => m.id === activeMarkerId);\n if (marker) map?.flyTo(marker.position, zoom);\n };\n\n // setup markers\n if (markersLayer) {\n markersLayer.clearLayers();\n\n markers?.forEach(({ position, icon, id }) => {\n if (!icon?.url || !icon?.size || !position) return;\n const isActive = id === activeMarkerId;\n\n const markerIcon = L.icon({\n iconUrl: icon.url,\n\n iconSize: isActive ? icon.sizeActive : icon.size, // size of the icon\n // shadowSize: [50, 64], // size of the shadow\n iconAnchor: isActive ? icon.anchorActive : icon?.anchor, // point of the icon which will correspond to marker's location\n // shadowAnchor: [4, 62], // the same for the shadow\n // popupAnchor: [0, -16], // point from which the popup should open relative to the iconAnchor\n });\n\n const marker: Marker = L.marker(position, {\n icon: markerIcon,\n riseOnHover: true,\n } as MarkerOptions).addTo(map);\n\n marker.on('click', () => {\n onMarkerClick && onMarkerClick(id);\n });\n\n // add marker to markers layer\n markersLayer.addLayer(marker);\n\n if (L && map && markersLayer) {\n if (!isLoaded) {\n // on first load\n onReady &&\n onReady({\n goTo: flyToPosition,\n showAll: showAllMarkers,\n });\n setLoaded(true);\n if (activeMarkerId)\n prevMarkerId.current = activeMarkerId;\n } else {\n // check if active marker changed\n if (\n activeMarkerId &&\n activeMarkerId !== prevMarkerId?.current\n ) {\n prevMarkerId.current = activeMarkerId;\n activeMarkerId &&\n onActiveMarkerChanged &&\n onActiveMarkerChanged({\n markerId: activeMarkerId,\n goTo: flyToActive,\n });\n }\n }\n }\n });\n }\n }, [\n L,\n fitBoundsPadding,\n isLoaded,\n map,\n markers,\n markersLayer,\n onMarkerClick,\n activeMarkerId,\n onActiveMarkerChanged,\n onReady,\n ]);\n\n return (\n <MapContainer ref={cRef} className={className}>\n {flyToControl && (\n <FylToCtrlContainer\n onClick={(ev) => {\n ev.stopPropagation();\n if (map && onFlyToClick) {\n onFlyToClick((zoom) => {\n // fly to active marker\n const marker = markers?.find(\n (m) => m.id === activeMarkerId\n );\n if (marker) {\n map.flyTo(marker.position, zoom);\n }\n });\n }\n }}\n >\n {flyToControl}\n </FylToCtrlContainer>\n )}\n </MapContainer>\n );\n};\n\nexport default LeafletMap;\n","import Grid from 'components/base/Grid';\nimport ArrowLeftGhost from 'components/base/icons/ArrowLeftGhost';\nimport ArrowRightGhost from 'components/base/icons/ArrowRightGhost';\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\nimport Intro from 'components/blocks/Intro';\nimport LeafletMap from 'components/blocks/LeafletMap';\nimport Slider, { SliderContext } from 'components/blocks/Slider';\nimport Copy from 'components/typography/Copy';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport React, { FC, useContext, useState } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { mq, spacings, getColors as color, withRange } from 'utils/styles';\n\nconst StyledSection = styled(Section)`\n position: relative;\n min-height: 500px;\n z-index: 0;\n`;\n\nconst MapContainer = styled(LeafletMap)<{ isMirrored?: boolean }>`\n position: relative;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n min-height: 500px;\n\n @media ${mq.semilarge} {\n position: absolute;\n width: 50%;\n height: 100%;\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '50%')};\n right: ${({ isMirrored }) => (isMirrored ? '50%' : 'auto')};\n\n transform: translateX(\n ${({ isMirrored }) => (isMirrored ? '100%' : '-100%')}\n );\n }\n\n @media ${mq.xlarge} {\n max-width: ${spacings.wrapperLarge / 2}px;\n }\n`;\n\nconst CardWrapper = styled(Wrapper)`\n pointer-events: none;\n`;\n\nconst SliderWrapper = styled.div<{ isMirrored?: boolean }>`\n display: flex;\n flex-direction: column;\n position: relative;\n width: 100%;\n pointer-events: all;\n\n padding: ${spacings.nudge * 3}px ${spacings.nudge * 3}px\n ${spacings.spacer * 2}px ${spacings.nudge * 3}px;\n\n @media ${mq.medium} {\n padding: ${spacings.nudge * 3}px ${spacings.spacer}px\n ${spacings.spacer * 2}px ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n flex-direction: row;\n ${withRange([spacings.spacer * 3, spacings.spacer * 5], 'padding-top')};\n ${withRange(\n [spacings.spacer * 3, spacings.spacer * 5],\n 'padding-bottom'\n )};\n ${({ isMirrored }) =>\n isMirrored\n ? withRange(\n [spacings.spacer, spacings.spacer * 4],\n 'padding-right'\n )\n : `padding-right: ${spacings.spacer}px`};\n ${({ isMirrored }) =>\n !isMirrored\n ? withRange(\n [spacings.spacer, spacings.spacer * 4],\n 'padding-left'\n )\n : `padding-left: ${(1 / 28) * 100}vw`};\n }\n\n @media ${mq.xlarge} {\n ${({ isMirrored }) =>\n !isMirrored\n ? withRange(\n [spacings.spacer, spacings.spacer * 4],\n 'padding-left'\n )\n : `padding-left: ${(1 / 28) * spacings.wrapper}px`};\n }\n\n .slick-slide div {\n outline: none;\n }\n\n .slick-initialized .slick-slide.slick-active {\n z-index: 1;\n }\n`;\n\nconst InfoCardView = styled.div`\n min-height: 100px;\n pointer-events: all;\n\n & > * + * {\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')}\n }\n`;\n\nconst CardHeader = styled.div`\n display: flex;\n`;\n\nconst StyledActions = styled(Actions)`\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n padding-bottom: ${spacings.nudge}px;\n\n @media ${mq.medium} {\n & > * {\n max-width: calc(50% - ${spacings.spacer}px);\n }\n }\n`;\n\nconst ContactList = styled.ul<{ isInverted?: boolean }>`\n padding: 0;\n list-style-type: none;\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n\n a {\n color: inherit;\n }\n\n li {\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0;\n margin: 0;\n }\n\n li + li {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n span:first-child {\n flex: 0 0 30px;\n max-width: 30px;\n\n & > * {\n max-width: 100%;\n }\n }\n`;\n\nconst ContactListLabel = styled(Copy)`\n margin-left: ${spacings.nudge * 2.5}px;\n\n * {\n margin: 0;\n padding: 0;\n }\n`;\n\nconst LocationInfoCard: FC<{\n isInverted?: boolean;\n location: MapLocation;\n}> = ({ isInverted, location }) => {\n return (\n <InfoCardView>\n {location.meta?.title && (\n <CardHeader>\n <Intro\n colorMode={isInverted ? 'inverted' : 'default'}\n title={location.meta.title}\n titleAs={location.meta.titleAs}\n superTitle={location.meta?.superTitle}\n superTitleAs={location.meta?.superTitleAs}\n />\n </CardHeader>\n )}\n {location.meta?.contact && location.meta.contact.length > 0 && (\n <ContactList isInverted={isInverted}>\n {location.meta?.contact\n ?.filter((c) => c.label)\n .map((contact, i) => (\n <li key={i}>\n <span>{contact.icon}</span>\n <ContactListLabel\n isInverted={isInverted}\n innerHTML={contact.label}\n />\n </li>\n ))}\n </ContactList>\n )}\n {(location?.meta?.primaryAction ||\n location?.meta?.secondaryAction) && (\n <StyledActions\n primary={\n location?.meta?.primaryAction &&\n location.meta.primaryAction(isInverted)\n }\n secondary={\n location?.meta?.secondaryAction &&\n location.meta.secondaryAction(isInverted)\n }\n />\n )}\n </InfoCardView>\n );\n};\n\nconst Controls = styled.div`\n display: flex;\n flex-direction: row;\n align-self: center;\n text-align: center;\n\n @media ${mq.semilarge} {\n flex-direction: column;\n align-self: flex-start;\n margin-left: auto;\n text-align: right;\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n }\n`;\n\nconst StyledDotGroup = styled(Slider.DotGroup)`\n display: flex;\n flex-direction: row;\n padding-top: ${spacings.spacer * 1.5}px;\n padding-left: ${spacings.spacer * 1.5}px;\n padding-right: ${spacings.spacer * 1.5}px;\n\n @media ${mq.semilarge} {\n display: none;\n padding: 0;\n }\n`;\n\nconst DotWrapper = styled.button`\n border: none;\n outline: none;\n background: none;\n cursor: pointer;\n\n padding: ${spacings.nudge * 2}px;\n margin: -${spacings.nudge * 2}px;\n\n & + & {\n margin-left: ${spacings.nudge * 1.5}px;\n }\n`;\n\nconst Dot = styled.div<{ isActive?: boolean; isInverted?: boolean }>`\n height: 14px;\n width: 14px;\n border: solid 1px\n ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 14px;\n\n transition: background-color 0.2s ease-in-out;\n\n background-color: ${({ isActive, isInverted, theme }) =>\n isActive\n ? isInverted\n ? color(theme).light\n : color(theme).dark\n : 'transparent'};\n`;\n\nconst StyledControl = styled(Slider.Control)<{ isInverted?: boolean }>`\n display: none;\n border: none;\n outline: none;\n background: none;\n padding: 0 ${spacings.nudge * 3}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n transition: color 0.2s ease-in-out, transform 0.2s ease-in-out;\n\n &:enabled {\n cursor: pointer;\n }\n\n &:enabled:hover {\n transform: scale(1.05);\n }\n\n &:enabled:active {\n transform: scale(0.95);\n }\n\n &:disabled {\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).mono.dark : color(theme).mono.medium};\n }\n\n @media ${mq.semilarge} {\n display: block;\n }\n`;\n\nexport interface LocationIcon {\n url: string;\n size: [number, number];\n anchor: [number, number];\n\n sizeActive: [number, number];\n anchorActive: [number, number];\n}\n\nexport interface MapLocation {\n id: string;\n position: [number, number];\n icon?: LocationIcon;\n meta?: {\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n contact?: Array<{ icon?: React.ReactNode; label?: string }>;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n };\n}\n\nconst Map: FC<{\n isInverted?: boolean;\n isMirrored?: boolean;\n center?: [number, number];\n zoom?: number;\n flyToZoom?: number;\n initialLocation?: string;\n locations?: Array<MapLocation>;\n /** Show all markers on first load */\n allMarkersOnInit?: boolean;\n /** Map container padding for show all markers */\n fitBoundsPadding?: [number, number];\n flyToControl?: React.ReactNode;\n controlNext?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n controlPrev?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n dot?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n index?: number;\n }) => React.ReactNode;\n}> = ({\n isInverted = false,\n isMirrored = false,\n center = [51.505, -0.09],\n zoom = 5,\n flyToZoom,\n initialLocation,\n locations,\n allMarkersOnInit = false,\n fitBoundsPadding,\n flyToControl,\n controlNext,\n controlPrev,\n dot,\n}) => {\n const theme = useContext(ThemeContext);\n const [activeLocation, setActiveLocation] = useState<string>(\n initialLocation || ''\n );\n\n return (\n <StyledSection\n bgColor={isInverted ? color(theme).dark : color(theme).mono.light}\n >\n <Slider.Provider\n fade={true}\n swipe={false}\n slidesToShow={1}\n variableWidth={false}\n sameHeight={true}\n clickSideOffset={0}\n responsive={[\n {\n breakpoint: 832,\n settings: {\n fade: false,\n swipe: true,\n },\n },\n ]}\n beforeChange={({ nextStep }) => {\n if (locations && locations[nextStep]) {\n setActiveLocation(locations[nextStep].id);\n }\n }}\n >\n <SliderContext.Consumer>\n {({ goToStep }) => (\n <MapContainer\n onReady={({ showAll, goTo }) => {\n if (allMarkersOnInit) showAll();\n else goTo();\n }}\n center={center}\n zoom={zoom}\n isMirrored={isMirrored}\n activeMarkerId={activeLocation}\n onMarkerClick={(markerId) => {\n setActiveLocation(markerId);\n\n // move slider to step\n const locIndex = locations?.findIndex(\n (loc) => loc.id === markerId\n );\n\n if (locIndex !== undefined && locIndex !== -1)\n goToStep(locIndex);\n }}\n flyToControl={flyToControl}\n onFlyToClick={(goTo) => {\n // pan and zoom to active location\n goTo(flyToZoom);\n }}\n fitBoundsPadding={fitBoundsPadding}\n markers={locations?.map(\n ({ id, position, icon }) => {\n return {\n id,\n position,\n icon,\n };\n }\n )}\n onActiveMarkerChanged={({ goTo }) => goTo()}\n />\n )}\n </SliderContext.Consumer>\n\n <CardWrapper clampWidth=\"normal\">\n <Grid.Row gutter={spacings.spacer}>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? 14 : 0) / 28,\n }}\n ></Grid.Col>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? -14 : 0) / 28,\n }}\n >\n <SliderWrapper isMirrored={isMirrored}>\n {locations && locations.length > 1 && (\n <>\n <Slider.Slides>\n {locations?.map((location, i) => (\n <LocationInfoCard\n key={i}\n isInverted={isInverted}\n location={location}\n />\n ))}\n </Slider.Slides>\n <Controls>\n <StyledControl\n type=\"next\"\n isInverted={isInverted}\n >\n {(isActive) =>\n controlNext ? (\n controlNext({\n isInverted,\n isActive,\n name:\n 'control_next_head',\n })\n ) : (\n <ArrowRightGhost />\n )\n }\n </StyledControl>\n <StyledControl\n type=\"prev\"\n isInverted={isInverted}\n >\n {(isActive) =>\n controlPrev ? (\n controlPrev({\n isInverted,\n isActive,\n name:\n 'control_prev_head',\n })\n ) : (\n <ArrowLeftGhost />\n )\n }\n </StyledControl>\n <StyledDotGroup>\n {(i, isActive, onClick) => (\n <DotWrapper\n key={i}\n onClick={onClick}\n >\n {dot ? (\n dot({\n isInverted,\n isActive,\n index: i,\n })\n ) : (\n <Dot\n isActive={\n isActive\n }\n isInverted={\n isInverted\n }\n />\n )}\n </DotWrapper>\n )}\n </StyledDotGroup>\n </Controls>\n </>\n )}\n {locations && locations.length === 1 && (\n <LocationInfoCard\n isInverted={isInverted}\n location={locations[0]}\n />\n )}\n </SliderWrapper>\n </Grid.Col>\n </Grid.Row>\n </CardWrapper>\n </Slider.Provider>\n </StyledSection>\n );\n};\n\nexport default Map;\n","import Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors as color, spacings } from 'utils/styles';\n\nconst View = styled.div``;\n\nconst FieldHead = styled.div`\n display: flex;\n flex-direction: row;\n align-items: top;\n justify-content: space-between;\n padding-bottom: ${spacings.nudge * 3}px;\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n`;\n\nconst Field = styled.input<{\n isInverted?: boolean;\n hasError?: boolean;\n isDisabled?: boolean;\n hasBack?: boolean;\n}>`\n display: block;\n outline: none;\n width: 100%;\n min-height: 60px;\n box-shadow: none;\n border: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n padding: ${spacings.nudge * 2}px ${spacings.spacer}px;\n border: ${({ hasError }) =>\n hasError ? '2px solid #ff0000' : '2px solid transparent'};\n background-color: ${({ isInverted, hasBack, theme }) =>\n isInverted || !hasBack ? color(theme).light : color(theme).mono.light};\n\n font-weight: inherit;\n font-family: inherit;\n font-size: inherit;\n color: ${({ hasError }) => (hasError ? '#ff0000' : 'inherit')};\n\n pointer-events: ${({ isDisabled }) => isDisabled && 'none'};\n\n &:active {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n &:focus {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n ::placeholder {\n color: ${({ theme }) => color(theme).secondary.light};\n }\n`;\n\nconst InfoMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst ErrorMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nexport type FormProps = {\n label?: string;\n errorMessage?: string;\n infoMessage?: string;\n\n value?: string;\n name?: string;\n placeholder?: string;\n isRequired?: boolean;\n isDisabled?: boolean;\n};\n\nconst Textfield: React.FC<\n FormProps & {\n type?: 'text' | 'email' | 'tel';\n isInverted?: boolean;\n lightBg?: boolean;\n onChange?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n }\n> = ({\n lightBg,\n type = 'text',\n label,\n errorMessage,\n infoMessage,\n placeholder,\n value,\n name,\n isInverted,\n isDisabled,\n isRequired,\n onChange,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <View>\n <FieldHead>\n {label && (\n <Copy\n isInverted={isInverted}\n textColor={\n isDisabled ? color(theme).mono.dark : undefined\n }\n >\n {`${label}${isRequired ? ' *' : ''}`}\n </Copy>\n )}\n </FieldHead>\n <Copy textColor={color(theme).secondary.dark} type=\"copy-b\">\n <Field\n hasBack={!lightBg}\n placeholder={placeholder}\n hasError={!!errorMessage}\n type={type}\n isInverted={isInverted}\n isDisabled={isDisabled}\n name={name}\n value={value}\n required={isRequired}\n onChange={onChange}\n />\n </Copy>\n {infoMessage && (\n <InfoMessage textColor={color(theme).mono.dark} size=\"small\">\n {infoMessage}\n </InfoMessage>\n )}\n {errorMessage && (\n <ErrorMessage textColor=\"#ff0000\" size=\"small\" type=\"copy-i\">\n {errorMessage\n ? errorMessage\n : 'Bitte geben Sie einen gültigen Text ein'}\n </ErrorMessage>\n )}\n </View>\n );\n};\n\nexport default Textfield;\n","import Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport { FormProps } from './Textfield';\n\nconst FieldHead = styled.div`\n display: flex;\n flex-direction: row;\n align-items: top;\n justify-content: space-between;\n padding-bottom: ${spacings.nudge * 3}px;\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n`;\n\nconst Area = styled.textarea<{\n isInverted?: boolean;\n hasError?: boolean;\n isDisabled?: boolean;\n hasBack?: boolean;\n}>`\n display: block;\n outline: none;\n width: 100%;\n min-height: 60px;\n box-shadow: none;\n border: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n resize: none;\n width: 100%;\n min-height: 120px;\n\n @media ${mq.semilarge} {\n min-height: 185px;\n }\n\n padding: ${spacings.nudge * 2}px ${spacings.spacer}px;\n\n /* border: ${({ isInverted, theme }) =>\n isInverted\n ? '2px solid transparent'\n : `2px solid ${color(theme).mono.medium}`}; */\n border: ${({ hasError }) =>\n hasError ? '2px solid #ff0000' : '2px solid transparent'};\n background-color: ${({ isInverted, hasBack, theme }) =>\n isInverted || !hasBack ? color(theme).light : color(theme).mono.light};\n\n font-weight: inherit;\n font-family: inherit;\n font-size: inherit;\n color: ${({ hasError }) => (hasError ? '#ff0000' : 'inherit')};\n\n pointer-events: ${({ isDisabled }) => isDisabled && 'none'};\n\n &:active {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n &:focus {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n ::placeholder {\n color: ${({ theme }) => color(theme).secondary.light};\n }\n`;\n\nconst InfoMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n`;\n\nconst ErrorMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n`;\n\nconst Textarea: React.FC<\n FormProps & {\n isInverted?: boolean;\n lightBg?: boolean;\n onChange?: (ev: React.SyntheticEvent<HTMLTextAreaElement>) => void;\n }\n> = ({\n lightBg,\n label,\n errorMessage,\n infoMessage,\n placeholder,\n value,\n name,\n isInverted,\n isDisabled,\n isRequired,\n onChange,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <div>\n <FieldHead>\n {label && (\n <Copy\n isInverted={isInverted}\n textColor={\n isDisabled ? color(theme).mono.dark : undefined\n }\n >\n {`${label}${isRequired ? ' *' : ''}`}\n </Copy>\n )}\n </FieldHead>\n <Copy type=\"copy-b\">\n <Area\n value={value}\n name={name}\n placeholder={placeholder}\n hasError={!!errorMessage}\n isDisabled={isDisabled}\n isInverted={isInverted}\n required={isRequired}\n hasBack={!lightBg}\n onChange={onChange}\n />\n </Copy>\n {infoMessage && (\n <InfoMessage textColor={color(theme).mono.dark} size=\"small\">\n {infoMessage}\n </InfoMessage>\n )}\n {errorMessage && (\n <ErrorMessage textColor=\"#ff0000\" size=\"small\" type=\"copy-i\">\n {errorMessage\n ? errorMessage\n : 'Bitte geben Sie einen gültigen Text ein'}\n </ErrorMessage>\n )}\n </div>\n );\n};\n\nexport default Textarea;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Check: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"12\"\n height=\"9\"\n viewBox=\"0 0 12 9\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M10.833 1.162A.512.512 0 0010.444 1a.512.512 0 00-.388.162L4.333 6.708 1.944 4.392a.512.512 0 00-.388-.161.512.512 0 00-.39.161A.482.482 0 001 4.77c0 .162.056.27.167.377l2.777 2.692c.056.054.112.108.167.108.056.054.167.054.222.054.111 0 .167 0 .223-.054.055 0 .11-.054.166-.108l6.111-5.923A.482.482 0 0011 1.538a.482.482 0 00-.167-.376z\"\n fill=\"#fff\"\n stroke=\"#fff\"\n />\n </SVG>\n);\n\nexport default Check;\n","import Check from 'components/base/icons/Check';\nimport Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors, spacings } from 'utils/styles';\n\nconst View = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n\n & > * + * {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Label = styled(Copy)`\n display: flex;\n\n & > * {\n margin: 0;\n }\n`;\n\nconst CheckboxContainer = styled.div<{ isDisabled?: boolean }>`\n cursor: ${({ isDisabled }) => (isDisabled ? 'default' : 'pointer')};\n pointer-events: ${({ isDisabled }) => (isDisabled ? 'none' : 'all')};\n`;\n\nconst Original = styled.input`\n position: absolute;\n left: -9999px;\n opacity: 0;\n`;\n\nconst Box = styled.span<{ isSelected?: boolean; isInverted?: boolean }>`\n width: 20px;\n min-width: 20px;\n height: 20px;\n display: block;\n position: relative;\n\n border: 2px solid\n ${({ isInverted, theme }) =>\n isInverted ? '#fff' : getColors(theme).mono.medium};\n\n background-color: ${({ isSelected, theme }) =>\n isSelected ? getColors(theme).primary.medium : '#fff'};\n`;\n\nconst StyledCheck = styled(Check)`\n width: 80%;\n height: 80%;\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n`;\n\nconst Checkbox: React.FC<{\n label?: string;\n\n onChange?: (e: React.SyntheticEvent<HTMLInputElement>) => void;\n onClick?: () => void;\n\n name?: string;\n value?: string;\n\n isDisabled?: boolean;\n isSelected?: boolean;\n isInverted?: boolean;\n isRequired?: boolean;\n}> = ({\n label,\n isDisabled,\n isSelected,\n isInverted,\n onChange,\n onClick,\n name,\n value,\n isRequired,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <View>\n <CheckboxContainer isDisabled={isDisabled} onClick={onClick}>\n <Box isSelected={isSelected} isInverted={isInverted}>\n {isSelected && <StyledCheck />}\n </Box>\n <Original\n type=\"checkbox\"\n name={name}\n value={value}\n disabled\n checked={isSelected}\n required={isRequired}\n onChange={onChange}\n />\n </CheckboxContainer>\n {label && (\n <Label\n size=\"small\"\n type=\"copy-b\"\n isInverted={isInverted}\n textColor={\n isDisabled ? getColors(theme).mono.dark : undefined\n }\n innerHTML={`${label}${isRequired ? '<span> *</span>' : ''}`}\n />\n )}\n </View>\n );\n};\n\nexport default Checkbox;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport Section, { BgMode } from 'components/base/Section';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport { spacings, mq, getColors as color, withRange } from 'utils/styles';\nimport Textfield, { FormProps } from 'components/fields/Textfield';\nimport Textarea from 'components/fields/Textarea';\nimport Checkbox from 'components/fields/Checkbox';\nimport Wrapper from 'components/base/Wrapper';\nimport Intro from 'components/blocks/Intro';\nimport { Field, Formik } from 'formik';\nimport { FormEvent } from 'react';\nimport Actions from 'components/blocks/Actions';\n\nconst StyledIntro = styled(Intro)`\n ${withRange([spacings.spacer * 2, spacings.spacer * 3], 'padding-bottom')}\n`;\n\nconst FieldsContainer = styled.div`\n padding-bottom: 30px;\n max-width: 1150px;\n\n & > * > * + * {\n padding-top: 30px;\n }\n\n @media ${mq.medium} {\n display: flex;\n flex-direction: row;\n align-items: top;\n }\n`;\n\nconst FlexContainer = styled.div`\n flex: 0 1 50%;\n width: 100%;\n max-width: 650px;\n\n & + & {\n padding-top: 30px;\n }\n\n @media ${mq.medium} {\n & + & {\n padding-top: 0;\n margin-left: 30px;\n }\n }\n`;\n\nconst ActionWrapper = styled(Actions)`\n margin-top: ${spacings.spacer * 3}px;\n`;\n\nexport interface FormData {\n name?: string;\n surname?: string;\n mail?: string;\n phone?: string;\n area?: string;\n check?: boolean;\n}\n\nexport type FormFieldProps = Omit<FormProps, 'value' | 'name' | 'errorMessage'>;\nexport type FormDataErrors = { [key in keyof FormData]: string };\n\nconst Form: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n intro?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n submitAction?: (props: {\n isInverted?: boolean;\n additionalProps: { type: 'submit'; as: 'button' | 'a' };\n isDisabled?: boolean;\n }) => React.ReactNode;\n onSubmit?: (data: FormData) => void;\n validation?: (values: FormData, errors: FormDataErrors) => FormDataErrors;\n yupValidationSchema?: any;\n\n isInverted?: boolean;\n bgMode?: 'full';\n\n formFields: {\n name?: FormFieldProps;\n surname?: FormFieldProps;\n mail?: FormFieldProps;\n phone?: FormFieldProps;\n area?: FormFieldProps;\n };\n\n checkbox?: {\n label?: string;\n name?: string;\n value?: string;\n isDisabled?: boolean;\n };\n}> = ({\n bgMode,\n isInverted = false,\n title,\n titleAs,\n superTitle,\n superTitleAs,\n intro,\n primaryAction,\n secondaryAction,\n submitAction,\n onSubmit,\n formFields,\n checkbox,\n yupValidationSchema,\n validation,\n}) => {\n const theme = React.useContext(ThemeContext);\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n default:\n return undefined;\n }\n };\n\n const isEmpty = (obj: any) => {\n return (\n obj && Object.keys(obj).length === 0 && obj.constructor === Object\n );\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {title && (\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={intro}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n )}\n <Formik\n initialValues={\n {\n name: '',\n surname: '',\n phone: '',\n area: '',\n mail: '',\n check: false,\n } as FormData\n }\n validate={(values) => {\n let errors: FormDataErrors = {};\n if (validation)\n errors = validation(\n values,\n errors\n ) as FormDataErrors;\n return errors;\n }}\n validationSchema={yupValidationSchema}\n onSubmit={async (values) => {\n onSubmit && onSubmit(values);\n }}\n >\n {({\n handleSubmit,\n setFieldValue,\n values,\n errors,\n isValid,\n dirty,\n }) => (\n <form\n onSubmit={(e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n handleSubmit(e);\n }}\n >\n <FieldsContainer>\n <FlexContainer>\n {formFields.name && (\n <Field\n label={\n formFields.name?.label ||\n 'Vorname'\n }\n placeholder={\n formFields.name?.placeholder\n }\n infoMessage={\n formFields.name?.infoMessage\n }\n as={Textfield}\n name=\"name\"\n isRequired={\n formFields.name?.isRequired\n }\n errorMessage={errors.name}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n )}\n {formFields.surname && (\n <Field\n label={\n formFields.surname?.label ||\n 'Nachname'\n }\n placeholder={\n formFields.surname?.placeholder\n }\n infoMessage={\n formFields.surname?.infoMessage\n }\n as={Textfield}\n name=\"surname\"\n isRequired={\n formFields.surname?.isRequired\n }\n errorMessage={errors.surname}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n )}\n {formFields.mail && (\n <Field\n type=\"email\"\n label={\n formFields.mail?.label ||\n 'E-Mail'\n }\n placeholder={\n formFields.mail?.placeholder\n }\n infoMessage={\n formFields.mail?.infoMessage\n }\n as={Textfield}\n name=\"mail\"\n isRequired={\n formFields.mail?.isRequired\n }\n errorMessage={errors.mail}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n )}\n {formFields.phone && (\n <Field\n type=\"tel\"\n label={\n formFields.phone?.label ||\n 'Telefon'\n }\n placeholder={\n formFields.phone?.placeholder\n }\n infoMessage={\n formFields.phone?.infoMessage\n }\n as={Textfield}\n name=\"phone\"\n isRequired={\n formFields.phone?.isRequired\n }\n errorMessage={errors.phone}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n )}\n </FlexContainer>\n {formFields.area && (\n <FlexContainer>\n <Field\n label={\n formFields.area?.label ||\n 'Textfeld'\n }\n placeholder={\n formFields.area?.placeholder\n }\n infoMessage={\n formFields.area?.infoMessage\n }\n name=\"area\"\n as={Textarea}\n isRequired={\n formFields.area?.isRequired\n }\n errorMessage={errors.area}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n </FlexContainer>\n )}\n </FieldsContainer>\n {checkbox && (\n <Field\n onClick={() => {\n setFieldValue('check', !values.check);\n }}\n value={values.check}\n isSelected={values.check}\n isDisabled={checkbox.isDisabled}\n name=\"check\"\n as={Checkbox}\n label={\n checkbox.label ||\n 'Ich habe die Datenschutzbestimmungen zu Kenntnis genommen und aktzeptiere.'\n }\n isInverted={isInverted}\n isRequired\n />\n )}\n {submitAction && (\n <ActionWrapper\n primary={\n submitAction &&\n submitAction({\n isInverted,\n isDisabled:\n !dirty ||\n !isValid ||\n !isEmpty(errors),\n additionalProps: {\n type: 'submit',\n as: 'button',\n },\n })\n }\n />\n )}\n </form>\n )}\n </Formik>\n </Wrapper>\n </Section>\n );\n};\n\nexport default Form;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowLeftRight: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"36\"\n height=\"17\"\n viewBox=\"0 0 36 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.06818 7.42108H32.7534l-6.3638-5.86523c-.3753-.34588-.3753-.71337 0-1.10248.1641-.17293.3635-.2594.598-.2594.2346 0 .4457.08647.6333.2594l7.8808 7.29576c.1642.12971.2463.31345.2463.55124 0 .21617-.0821.39991-.2463.55123l-7.8808 7.2309c-.1642.1729-.3694.2594-.6157.2594-.2462 0-.4515-.0864-.6156-.2594-.3753-.3459-.3753-.7133 0-1.1025l6.3663-5.86748H3.0657L9.43204 14.98c.37527.3459.37527.7134 0 1.1025-.16419.1729-.36355.2594-.5981.2594-.23455 0-.44564-.0865-.63328-.2594L.31986 8.78675c-.1642-.1297-.24628-.31344-.24628-.55123 0-.21617.08209-.39992.24627-.55124L8.20066.45338c.16419-.17294.36942-.25941.61569-.25941.24628 0 .4515.08647.61569.2594.37528.34588.37528.71337 0 1.10248L3.06818 7.42108z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default ArrowLeftRight;\n","import React, { FC, useContext, useEffect, useRef, useState } from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\n\nimport Section, { BgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport { getColors as color, spacings } from 'utils/styles';\nimport ArrowLeftRight from 'components/base/icons/ArrowLeftRight';\nimport Copy from 'components/typography/Copy';\nimport useIE from 'utils/useIE';\n\nconst clamp = (num: number, min: number, max: number) => {\n return Math.min(Math.max(num, min), max);\n};\n\nconst Images = styled.div`\n position: relative;\n cursor: col-resize;\n\n & > * {\n pointer-events: none;\n user-select: none;\n }\n`;\n\nconst BackgroundImg = styled(Image)`\n position: relative;\n display: block;\n width: 100%;\n`;\n\nconst ForegroundContainer = styled.div<{\n hasTransition?: boolean;\n initalValue?: number;\n hasAnim?: boolean;\n}>`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 50%;\n overflow: hidden;\n\n transition: width ${({ hasTransition }) => (hasTransition ? 0.1 : 0)}s\n ease-in-out;\n\n ${({ hasAnim, initalValue }) =>\n hasAnim &&\n css`\n animation-name: ForegroundAnim;\n animation-duration: 5s;\n animation-iteration-count: 1;\n animation-play-state: ${hasAnim && 'running'};\n animation-timing-function: ease-in-out;\n\n @keyframes ForegroundAnim {\n 0% {\n width: ${initalValue\n ? clamp(initalValue * 100, 0, 100) + '%'\n : '50%'};\n }\n 33% {\n width: ${initalValue\n ? clamp(initalValue * 100 + 10, 0, 100) + '%'\n : '60%'};\n }\n 66% {\n width: ${initalValue\n ? clamp(initalValue * 100 - 10, 0, 100) + '%'\n : '40%'};\n }\n 100% {\n width: ${initalValue ? initalValue * 100 + '%' : '50%'};\n }\n }\n `}\n`;\n\nconst ForegroundImg = styled(Image)`\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n max-width: none;\n object-fit: cover;\n`;\n\nconst ForegroundOverlay = styled.div<{ color: string }>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: ${({ color }) => color};\n`;\n\nconst ImageLabel = styled(Copy)<{ bgColor?: string }>`\n height: ${spacings.spacer * 1.5}px;\n padding: ${spacings.nudge}px ${spacings.spacer}px ${spacings.nudge * 2}px\n ${spacings.spacer}px;\n background: ${({ bgColor }) => bgColor && bgColor};\n`;\n\nconst ForegroundLabel = styled(ImageLabel)`\n position: absolute;\n bottom: ${spacings.spacer * 1.5}px;\n left: ${spacings.spacer}px;\n pointer-events: none;\n`;\n\nconst BackgroundLabel = styled(ImageLabel)`\n position: absolute;\n bottom: ${spacings.spacer * 1.5}px;\n right: ${spacings.spacer}px;\n pointer-events: none;\n`;\n\nconst ControlContainer = styled.div<{\n hasTransition?: boolean;\n hasAnim?: boolean;\n initalValue?: number;\n}>`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n transition: left ${({ hasTransition }) => (hasTransition ? 0.1 : 0)}s\n ease-in-out;\n\n ${({ hasAnim, initalValue }) =>\n hasAnim &&\n css`\n animation-name: ControlAnim;\n animation-duration: 5s;\n animation-iteration-count: 1;\n animation-play-state: ${hasAnim && 'running'};\n animation-timing-function: ease-in-out;\n\n @keyframes ControlAnim {\n 0% {\n left: ${initalValue\n ? clamp(initalValue * 100, 0, 100) + '%'\n : '50%'};\n }\n 33% {\n left: ${initalValue\n ? clamp(initalValue * 100 + 10, 0, 100) + '%'\n : '60%'};\n }\n 66% {\n left: ${initalValue\n ? clamp(initalValue * 100 - 10, 0, 100) + '%'\n : '40%'};\n }\n 100% {\n left: ${initalValue ? initalValue * 100 + '%' : '50%'};\n }\n }\n `}\n`;\n\nconst Control = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n height: 54px;\n width: 54px;\n border: solid 2px ${({ theme }) => color(theme).light};\n border-radius: 50%;\n background-color: ${({ theme }) => color(theme).primary.medium};\n`;\n\nconst ComparisonSlider: FC<{\n isInverted?: boolean;\n bgMode?: BgMode;\n initialValue?: number;\n foregroundImg?: ImageProps;\n backgroundImg?: ImageProps;\n foregroundLabel?: string;\n backgroundLabel?: string;\n overlayColor?: string;\n labelColor?: string;\n dragControl?: React.ReactNode;\n enableControlAnim?: boolean;\n}> = ({\n isInverted,\n bgMode,\n initialValue,\n foregroundImg,\n backgroundImg,\n foregroundLabel,\n backgroundLabel,\n overlayColor = 'rgba(0, 0 , 0, 0.2)',\n labelColor = 'rgba(0, 0 , 0, 0.3)',\n dragControl,\n enableControlAnim,\n}) => {\n const isIE = useIE(true);\n const [slideValue, setSlideValue] = useState<number>(\n initialValue ? Math.min(Math.max(initialValue, 0), 1) : 0.5\n );\n const [isHolding, setIsHolding] = useState<boolean>(false);\n const [isDragging, setIsDragging] = useState<boolean>(false);\n const [interacted, setInteracted] = useState<boolean>(true);\n const [sideOffset, setSideOffset] = useState<number>(0);\n const controlRef = useRef<HTMLDivElement | null>(null);\n const theme = useContext(ThemeContext);\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'half-right':\n return 'half-right';\n case 'half-left':\n return 'half-left';\n case 'larger-right':\n return 'larger-right';\n case 'larger-left':\n return 'larger-left';\n default:\n return undefined;\n }\n };\n\n useEffect(() => {\n if (controlRef.current) {\n setSideOffset(controlRef.current.offsetWidth / 2);\n }\n }, []);\n\n useEffect(() => {\n const handleInitalLoad = () => {\n const options = {\n rootMargin: '0px',\n threshold: 1.0,\n };\n\n const observer = new IntersectionObserver((entries, observer) => {\n if (enableControlAnim && entries[0]?.isIntersecting) {\n // if control is first fully visible\n observer.unobserve(entries[0]?.target);\n setInteracted(false);\n }\n }, options);\n if (controlRef.current) observer.observe(controlRef.current);\n window.removeEventListener('load', handleInitalLoad);\n };\n\n // wait unitl user has scrolled once\n if (!isIE) {\n if (document.readyState === 'complete') handleInitalLoad();\n else window.addEventListener('load', handleInitalLoad);\n }\n\n return () => {\n window.removeEventListener('load', handleInitalLoad);\n };\n }, [enableControlAnim, isIE]);\n\n const setCurrentPos = (target: EventTarget & Element, clientX: number) => {\n if (target && clientX) {\n const relativeClientX = clientX - target.getBoundingClientRect().x;\n\n // check side offset\n if (\n relativeClientX >= sideOffset &&\n relativeClientX <=\n target.getBoundingClientRect().width - sideOffset\n ) {\n let percentage =\n relativeClientX / target.getBoundingClientRect().width;\n percentage = Math.min(Math.max(percentage, 0), 1);\n\n setSlideValue(percentage);\n }\n }\n };\n\n const handleClick = (ev: React.MouseEvent) => {\n const target = ev.currentTarget;\n if (target && ev.clientX) {\n setCurrentPos(target, ev.clientX);\n setInteracted(true);\n }\n };\n\n const handleMouseMove = (ev: React.MouseEvent) => {\n const target = ev.currentTarget;\n if (target && ev.clientX && isHolding) {\n setIsDragging(true);\n setInteracted(true);\n if (isDragging) setCurrentPos(target, ev.clientX);\n }\n };\n\n const handleTouchMove = (ev: React.TouchEvent<HTMLDivElement>) => {\n const target = ev.currentTarget;\n if (target && ev.touches[0]?.clientX) {\n setInteracted(true);\n setCurrentPos(target, ev.touches[0]?.clientX);\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <Wrapper>\n {backgroundImg && foregroundImg && (\n <Images\n onClick={handleClick}\n onMouseMove={handleMouseMove}\n onMouseDown={() => {\n setIsDragging(false);\n setIsHolding(true);\n }}\n onMouseUp={() => {\n setIsDragging(false);\n setIsHolding(false);\n }}\n onMouseLeave={() => {\n setIsHolding(false);\n setIsDragging(false);\n }}\n onTouchMove={handleTouchMove}\n onTouchStart={() => setIsHolding(true)}\n onTouchEnd={() => setIsHolding(false)}\n >\n <BackgroundImg {...backgroundImg} />\n {backgroundLabel && (\n <BackgroundLabel\n textColor={color(theme).light}\n bgColor={labelColor}\n >\n {backgroundLabel}\n </BackgroundLabel>\n )}\n <ForegroundContainer\n hasTransition={!isHolding}\n hasAnim={!interacted}\n initalValue={initialValue}\n style={{ width: slideValue * 100 + '%' }}\n >\n <ForegroundImg {...foregroundImg} />\n {foregroundLabel && (\n <ForegroundLabel\n textColor={color(theme).light}\n bgColor={labelColor}\n >\n {foregroundLabel}\n </ForegroundLabel>\n )}\n <ForegroundOverlay color={overlayColor} />\n </ForegroundContainer>\n <ControlContainer\n ref={controlRef}\n hasTransition={!isHolding}\n hasAnim={!interacted}\n initalValue={initialValue}\n style={{ left: slideValue * 100 + '%' }}\n >\n {dragControl ? (\n dragControl\n ) : (\n <Control>\n <ArrowLeftRight\n iconColor={color(theme).light}\n />\n </Control>\n )}\n </ControlContainer>\n </Images>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default ComparisonSlider;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings, getColors as color, withRange } from 'utils/styles';\nimport Wrapper from 'components/base/Wrapper';\nimport ArrowLeftGhost from 'components/base/icons/ArrowLeftGhost';\nimport ArrowRightGhost from 'components/base/icons/ArrowRightGhost';\nimport Slider from 'components/blocks/Slider';\nimport { ResponsiveObject } from 'react-slick';\nimport Intro from 'components/blocks/Intro';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst View = styled(Wrapper)`\n position: relative;\n width: 100%;\n overflow: hidden;\n\n @media ${mq.xlarge} {\n padding: 0;\n }\n`;\n\nconst Head = styled(Wrapper)`\n display: flex;\n flex-direction: row;\n`;\n\nconst IntroBlock = styled.div`\n flex: 1;\n ${withRange([spacings.spacer * 2, spacings.spacer * 3], 'padding-bottom')}\n`;\n\nconst TopControls = styled.div`\n display: none;\n text-align: right;\n max-width: ${spacings.wrapper}px;\n margin-left: auto;\n ${withRange(\n [spacings.spacer * 0.5, spacings.spacer * 1.5],\n 'margin-bottom'\n )};\n\n @media ${mq.semilarge} {\n display: flex;\n flex-direction: row;\n align-self: flex-end;\n }\n`;\n\nconst StyledControl = styled(Slider.Control)<{ isInverted?: boolean }>`\n border: none;\n outline: none;\n background: none;\n padding: 0 ${spacings.nudge * 3}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n transition: color 0.2s ease-in-out, transform 0.2s ease-in-out;\n\n &:enabled {\n cursor: pointer;\n }\n\n &:enabled:hover {\n transform: scale(1.05);\n }\n\n &:enabled:active {\n transform: scale(0.95);\n }\n\n &:disabled {\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).mono.dark : color(theme).mono.medium};\n }\n`;\n\nconst StyledSlides = styled(Slider.Slides)`\n margin-bottom: ${spacings.spacer}px;\n\n @media ${mq.xlarge} {\n margin-left: auto;\n width: 100%;\n max-width: ${spacings.wrapperLarge -\n (spacings.wrapperLarge - spacings.wrapper) / 2}px;\n }\n`;\n\nconst Footer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n`;\n\nconst CtrlWrapper = styled.div`\n display: block;\n\n @media ${mq.semilarge} {\n display: none;\n }\n`;\n\nconst CtrlWrapperLeft = styled(CtrlWrapper)`\n flex: 1;\n text-align: left;\n`;\n\nconst CtrlWrapperRight = styled(CtrlWrapper)`\n flex: 1;\n text-align: right;\n`;\n\nconst StyledDotGroup = styled(Slider.DotGroup)`\n display: inline-block;\n align-self: center;\n padding: ${spacings.nudge * 2}px 0;\n`;\n\nconst DotWrapper = styled.button`\n border: none;\n outline: none;\n background: none;\n cursor: pointer;\n\n padding: ${spacings.nudge * 2}px;\n margin: -${spacings.nudge * 2}px;\n\n & + & {\n margin-left: ${spacings.nudge * 1.5}px;\n }\n`;\n\nconst Dot = styled.div<{ isActive?: boolean; isInverted?: boolean }>`\n height: 14px;\n width: 14px;\n border: solid 1px\n ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 14px;\n\n transition: background-color 0.2s ease-in-out;\n\n background-color: ${({ isActive, isInverted, theme }) =>\n isActive\n ? isInverted\n ? color(theme).light\n : color(theme).dark\n : 'transparent'};\n`;\n\nexport interface CarouselProps {\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n spacing?: 'normal' | 'large';\n variableWidths?: boolean;\n isInverted?: boolean;\n controlNext?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n controlPrev?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n dot?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n index?: number;\n }) => React.ReactNode;\n beforeChange?: (props: { currentStep: number; nextStep: number }) => void;\n afterChange?: (currentStep: number) => void;\n onInit?: (steps: number) => void;\n responsive?: ResponsiveObject[];\n slidesToShow?: number;\n}\n\nconst CarouselBase: FC<CarouselProps & { className?: string }> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n spacing,\n variableWidths,\n isInverted,\n controlNext,\n controlPrev,\n dot,\n beforeChange,\n afterChange,\n onInit,\n slidesToShow,\n responsive,\n children,\n className,\n}) => {\n return (\n <View clampWidth=\"large\" className={className}>\n <Slider.Provider\n variableWidth={variableWidths}\n sameHeight={variableWidths}\n slideSpacing={\n spacing === 'large'\n ? { min: 30, max: 60 }\n : { min: 20, max: 30 }\n }\n slidesToShow={slidesToShow}\n responsive={responsive}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n >\n <Head clampWidth=\"normal\" addWhitespace>\n {title && (\n <IntroBlock>\n <Intro\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n secondaryAction={secondaryAction}\n primaryAction={primaryAction}\n />\n </IntroBlock>\n )}\n {React.Children.count(children) > 1 && (\n <TopControls>\n <StyledControl type=\"prev\" isInverted={isInverted}>\n {(isActive) =>\n controlPrev ? (\n controlPrev({\n isInverted,\n isActive,\n name: 'control_prev_head',\n })\n ) : (\n <ArrowLeftGhost />\n )\n }\n </StyledControl>\n <StyledControl type=\"next\" isInverted={isInverted}>\n {(isActive) =>\n controlNext ? (\n controlNext({\n isInverted,\n isActive,\n name: 'control_next_head',\n })\n ) : (\n <ArrowRightGhost />\n )\n }\n </StyledControl>\n </TopControls>\n )}\n </Head>\n\n <StyledSlides>\n {React.Children.map(children, (child, i) => (\n <Slider.Slide key={i}>{child}</Slider.Slide>\n ))}\n </StyledSlides>\n {React.Children.count(children) > 1 && (\n <Footer>\n <CtrlWrapperLeft>\n <StyledControl type=\"prev\" isInverted={isInverted}>\n {(isActive) =>\n controlPrev ? (\n controlPrev({\n isInverted,\n isActive,\n name: 'control_prev_footer',\n })\n ) : (\n <ArrowLeftGhost />\n )\n }\n </StyledControl>\n </CtrlWrapperLeft>\n <StyledDotGroup>\n {(i, isActive, onClick) => (\n <DotWrapper key={i} onClick={onClick}>\n {dot ? (\n dot({ isInverted, isActive, index: i })\n ) : (\n <Dot\n isActive={isActive}\n isInverted={isInverted}\n />\n )}\n </DotWrapper>\n )}\n </StyledDotGroup>\n <CtrlWrapperRight>\n <StyledControl type=\"next\" isInverted={isInverted}>\n {(isActive) =>\n controlNext ? (\n controlNext({\n isInverted,\n isActive,\n name: 'control_next_footer',\n })\n ) : (\n <ArrowRightGhost />\n )\n }\n </StyledControl>\n </CtrlWrapperRight>\n </Footer>\n )}\n </Slider.Provider>\n </View>\n );\n};\n\nexport default CarouselBase;\n","import React, { FC } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color } from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Section, { BgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\n\nconst ImageCarousel: FC<\n Omit<CarouselProps, 'variableWidths'> & {\n bgMode?: 'full' | 'splitted';\n images?: ImageProps[];\n }\n> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n bgMode,\n spacing = 'normal',\n images,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const imageCount = images?.length || 0;\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'splitted':\n return 'half-right';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <CarouselBase\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n variableWidths\n spacing={spacing}\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={imageCount > 1 ? 2.75 : 1}\n responsive={[\n {\n breakpoint: 832,\n settings: {\n slidesToShow: imageCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: imageCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {images &&\n images.map((img, i) => <FullWidthImg key={i} {...img} />)}\n </CarouselBase>\n </Section>\n );\n};\n\nconst FullWidthImg = styled(Image)`\n width: 100%;\n`;\n\nexport default ImageCarousel;\n","import React, { FC } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings, mq } from 'utils/styles';\nimport Section, { BgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\nimport Feature, { FeatureProps } from 'components/blocks/Feature';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\n\nconst StyledWrapper = styled.div`\n padding-left: ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n padding-left: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n padding-left: ${(1 / 28) * 100}%;\n\n padding-left: ${`\n max(\n ${spacings.spacer}px,\n ${(1 / 28) * 100}%\n );\n `};\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst FeatureCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'spacing'> & {\n bgMode?: 'full' | 'splitted';\n features?: FeatureProps[];\n }\n> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n bgMode,\n features,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const featureCount = features?.length || 0;\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\n listLength: featureCount,\n identifiers: [\n '[data-sheet=\"title\"]',\n '[data-sheet=\"desc\"]',\n '[data-sheet=\"intro\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: featureCount,\n medium: featureCount,\n semilarge: featureCount,\n large: featureCount,\n xlarge: featureCount,\n },\n });\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'splitted':\n return 'half-right';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <StyledWrapper>\n <CarouselBase\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n spacing=\"normal\"\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={featureCount > 1 ? 3 : 1}\n responsive={[\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: featureCount > 1 ? 3 : 1,\n },\n },\n {\n breakpoint: 832,\n settings: {\n slidesToShow: featureCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: featureCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {features &&\n features.map((feature, i) => (\n <div key={i} ref={cardRefs[i]}>\n <Feature\n key={i}\n addWhitespace\n isInverted={isInverted}\n {...feature}\n />\n </div>\n ))}\n </CarouselBase>\n </StyledWrapper>\n </Section>\n );\n};\n\nexport default FeatureCarousel;\n","import React, { FC } from 'react';\nimport { ThemeContext } from 'styled-components';\n\nimport { getColors as color } from 'utils/styles';\nimport Section, { BgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\nimport PromotionCard, {\n PromotionCardProps,\n} from 'components/blocks/PromotionCard';\n\nexport type PromotionCarouselItem = Omit<\n PromotionCardProps,\n 'text' | 'superTitle' | 'text' | 'primaryAction' | 'secondaryAction'\n>;\n\nconst PromotionCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'spacing'> & {\n bgMode?: BgMode;\n promotions?: PromotionCarouselItem[];\n }\n> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n bgMode,\n promotions,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const promotionCount = promotions?.length || 0;\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'half-right':\n return 'half-right';\n case 'half-left':\n return 'half-left';\n case 'larger-right':\n return 'larger-right';\n case 'larger-left':\n return 'larger-left';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <CarouselBase\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n spacing=\"normal\"\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={promotionCount > 1 ? 2.75 : 1}\n responsive={[\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: promotionCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 832,\n settings: {\n slidesToShow: promotionCount > 1 ? 1.15 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: promotionCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {promotions &&\n promotions.map((promotion, i) => (\n <PromotionCard key={i} {...promotion} />\n ))}\n </CarouselBase>\n </Section>\n );\n};\n\nexport default PromotionCarousel;\n","import React, { FC } from 'react';\nimport { ThemeContext } from 'styled-components';\n\nimport { getColors as color } from 'utils/styles';\nimport Section, { BgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\nimport VideoCard, { VideoCardProps } from 'components/blocks/VideoCard';\n\nconst VideoCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'spacing'> & {\n bgMode?: 'full' | 'splitted';\n videos?: VideoCardProps[];\n }\n> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n bgMode,\n videos,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const videoCount = videos?.length || 0;\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'splitted':\n return 'half-right';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <CarouselBase\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n spacing=\"normal\"\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={videoCount > 1 ? 2.75 : 1}\n responsive={[\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: videoCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 832,\n settings: {\n slidesToShow: videoCount > 1 ? 1.15 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: videoCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {videos &&\n videos.map((video, i) => <VideoCard key={i} {...video} />)}\n </CarouselBase>\n </Section>\n );\n};\n\nexport default VideoCarousel;\n","/* eslint-disable react/jsx-no-target-blank */\nimport React, { FC } from 'react';\n\nexport interface LinkProps {\n isExternal?: boolean;\n href?: string;\n}\n\nconst Link: FC<\n LinkProps & {\n className?: string;\n }\n> = ({ isExternal = false, href, children, className }) => {\n return (\n <a\n href={href}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n className={className}\n >\n {children}\n </a>\n );\n};\n\nexport default Link;\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport Link from 'components/typography/Link';\n\nconst bdotColor = '#1fc2f4';\n\nconst Dot = styled(Link)`\n width: 11px;\n height: 11px;\n\n display: inline-block;\n vertical-align: middle;\n border-radius: 50%;\n\n background: ${bdotColor};\n color: ${bdotColor};\n text-decoration: none;\n\n span {\n visibility: hidden;\n font-size: 0;\n color: transparent;\n }\n`;\n\nconst Bdot: React.FC<{ className?: string }> = ({ className }) => {\n return (\n <Dot className={className} href=\"https://blateral.com\" isExternal>\n <span>b.lateral - creative agency</span>\n </Dot>\n );\n};\n\nexport default Bdot;\n","import React, { FC } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings } from 'utils/styles';\nimport Link from 'components/typography/Link';\n\nconst View = styled.div`\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n // padding: ${spacings.nudge * 2}px 0;\n // overflow: hidden;\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n`;\n\nconst IconItemView = styled.div`\n transition: all ease-in-out 0.2s;\n\n &:hover {\n transform: scale(1.1);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst StyledLink = styled(Link)<{ textColor?: string }>`\n display: block;\n padding: ${spacings.nudge * 2}px ${spacings.nudge * 1.5}px;\n margin: -${spacings.nudge * 2}px -${spacings.nudge * 1.5}px;\n color: ${({ theme, textColor }) => textColor || color(theme).dark};\n`;\n\nconst SocialList: FC<{\n isInverted?: boolean;\n items?: { href: string; icon: React.ReactNode }[];\n className?: string;\n}> = ({ isInverted = false, items, className }) => {\n const theme = React.useContext(ThemeContext);\n\n return (\n <View className={className}>\n {items &&\n items.map((item, i) => (\n <IconItemView key={i}>\n <StyledLink\n isExternal\n href={item.href}\n textColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n >\n {item.icon}\n </StyledLink>\n </IconItemView>\n ))}\n </View>\n );\n};\n\nexport default SocialList;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\n} from 'utils/styles';\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport Bdot from 'components/blocks/Bdot';\nimport SocialList from 'components/blocks/SocialList';\n\nconst MainView = styled(Wrapper)<{ isInverted?: boolean }>`\n background-color: ${({ theme, isInverted }) =>\n isInverted && color(theme).dark};\n`;\n\nconst StyledLink = styled(Link)`\n display: inline-block;\n padding: ${spacings.nudge * 0.5}px 0;\n color: inherit;\n text-decoration: underline;\n`;\n\n/**** MAIN FOOTER CONTENT ****/\nconst Content = styled.div<{ isInverted?: boolean }>`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n margin-left: -${spacings.spacer}px;\n margin-right: -${spacings.spacer}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n\n & > * {\n flex: 1;\n }\n\n & > *:last-child {\n flex: 1 1 100%;\n }\n\n @media ${mq.medium} {\n flex-direction: row;\n flex-wrap: wrap;\n padding-top: ${spacings.spacer}px;\n padding-bottom: ${spacings.spacer}px;\n\n & > *:last-child {\n max-width: 600px;\n }\n }\n\n @media ${mq.large} {\n & > *:last-child {\n flex: 1;\n max-width: 100%;\n }\n }\n`;\n\nconst ContentBlock = styled.div<{\n direction?: 'row' | 'column';\n topSpace?: string;\n hAlign?: 'left' | 'center' | 'right';\n}>`\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n\n padding: ${spacings.spacer}px;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n flex-direction: ${({ direction }) => direction || 'column'};\n align-items: flex-start;\n padding-top: ${({ topSpace }) => topSpace && topSpace};\n text-align: left;\n min-width: 330px;\n }\n\n @media ${mq.large} {\n align-items: ${({ hAlign }) =>\n hAlign === 'right'\n ? 'flex-end'\n : hAlign === 'center'\n ? 'center'\n : 'flex-start'};\n text-align: ${({ hAlign }) => hAlign && hAlign};\n }\n`;\n\nconst LogoLink = styled(Link)`\n display: inline-block;\n color: inherit;\n`;\n\nconst ContactData = styled(Copy)`\n text-align: center;\n\n p {\n margin: 0;\n padding: 0;\n }\n\n @media ${mq.medium} {\n text-align: left;\n margin-top: auto;\n padding: ${spacings.nudge * 2}px 0;\n }\n`;\n\nconst SiteLinksView = styled.div`\n flex: 50%;\n display: flex;\n flex-direction: column;\n text-align: center;\n\n margin: 0;\n\n & + & {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n\n @media ${mq.medium} {\n padding: 0 ${spacings.nudge * 3}px;\n text-align: left;\n\n & + & {\n padding-top: 0;\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n }\n`;\n\nconst SiteLink = styled(StyledLink)`\n font-weight: ${({ theme }) => font(theme)['copy-b'].medium.weight};\n font-family: ${({ theme }) => font(theme)['copy-b'].medium.family};\n ${({ theme }) => withRange(font(theme)['copy-b'].medium.size, 'font-size')}\n line-height: ${({ theme }) => font(theme)['copy-b'].medium.lineHeight};\n`;\n\nconst LinkWrapper = styled(Copy)<{ isActive?: boolean; isInverted?: boolean }>`\n display: inline-block;\n position: relative;\n padding-bottom: 3px;\n\n &:before {\n content: ${({ isActive }) => (isActive ? `\"\"` : undefined)};\n position: absolute;\n left: -12px;\n top: 50%;\n height: 4px;\n width: 4px;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 4px;\n\n transform: translateY(-100%);\n }\n\n &:after {\n content: '';\n position: absolute;\n left: 0;\n bottom: 0;\n right: 0;\n height: 1px;\n background-color: ${({ theme }) => color(theme).primary.medium};\n margin-top: ${spacings.nudge * 10}px;\n opacity: 0;\n\n transition: opacity 0.2s ease-in-out;\n\n ${SiteLink}:hover > & {\n opacity: 1;\n }\n }\n`;\n\n/**** BOTTOM FOOTER CONTENT ****/\nconst BottomWrapper = styled(Wrapper)`\n background-color: ${({ theme }) => color(theme).mono.light};\n`;\n\nconst BottomView = styled(Wrapper)`\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 100%;\n min-height: 41px;\n\n padding-top: ${spacings.nudge * 1.5}px;\n padding-bottom: ${spacings.nudge * 1.5}px;\n\n color: ${({ theme }) => color(theme).dark};\n\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n justify-content: flex-end;\n }\n`;\n\n/**** FOOTER SECTION ****/\nconst Footer: FC<{\n isInverted?: boolean;\n logo?: {\n img?: string;\n link?: string;\n };\n columnTopSpace?: string;\n contactData?: string;\n siteLinks?: Array<LinkProps & { label?: string; isActive?: boolean }>;\n newsTitle?: string;\n newsText?: string;\n newsForm?: (isInverted?: boolean) => React.ReactNode;\n socials?: Array<{ icon: React.ReactNode; href: string }>;\n bottomLinks?: { href: string; label?: string; isExternal?: boolean }[];\n brandIcon?: React.ReactNode;\n}> = ({\n isInverted = false,\n logo,\n columnTopSpace,\n contactData,\n siteLinks,\n newsTitle,\n newsText,\n newsForm,\n socials,\n bottomLinks,\n brandIcon,\n}) => {\n // setup siteLinks columns\n const siteLinksColLeft =\n siteLinks && siteLinks.length > 6\n ? siteLinks?.slice(0, Math.ceil(siteLinks.length / 2))\n : siteLinks;\n const siteLinksColRight =\n siteLinks && siteLinks.length > 6\n ? siteLinks?.slice(Math.ceil(siteLinks.length / 2))\n : undefined;\n\n return (\n <Section as=\"footer\" bgMode=\"full\" bgColor=\"transparent\">\n <MainView clampWidth=\"large\" isInverted={isInverted}>\n <Wrapper addWhitespace>\n <Content isInverted={isInverted}>\n <ContentBlock>\n {logo?.img && (\n <LogoLink href={logo?.link}>\n <img src={logo?.img} />\n </LogoLink>\n )}\n {contactData && (\n <ContactData\n size=\"small\"\n isInverted={isInverted}\n innerHTML={contactData}\n />\n )}\n </ContentBlock>\n <ContentBlock\n direction=\"row\"\n topSpace={logo && columnTopSpace}\n >\n {siteLinksColLeft && (\n <SiteLinksView>\n {siteLinksColLeft.map((link, i) => (\n <SiteLink key={i} href={link.href}>\n <LinkWrapper\n type=\"copy\"\n isActive={link.isActive}\n isInverted={isInverted}\n >\n {link.label || link.href}\n </LinkWrapper>\n </SiteLink>\n ))}\n </SiteLinksView>\n )}\n {siteLinksColRight && (\n <SiteLinksView>\n {siteLinksColRight.map((link, i) => (\n <SiteLink key={i} href={link.href}>\n <LinkWrapper\n type=\"copy\"\n isActive={link.isActive}\n isInverted={isInverted}\n >\n {link.label || link.href}\n </LinkWrapper>\n </SiteLink>\n ))}\n </SiteLinksView>\n )}\n </ContentBlock>\n <ContentBlock\n topSpace={logo && columnTopSpace}\n hAlign={\n !newsTitle && !newsText && !newsForm\n ? 'right'\n : 'left'\n }\n >\n {newsTitle && (\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {newsTitle}\n </Copy>\n )}\n {newsText && (\n <Copy\n size=\"small\"\n isInverted={isInverted}\n innerHTML={newsText}\n />\n )}\n {newsForm && newsForm(isInverted)}\n {socials && (\n <SocialList\n isInverted={isInverted}\n items={socials.map((item) => {\n return {\n href: item.href,\n icon: item.icon,\n };\n })}\n />\n )}\n </ContentBlock>\n </Content>\n </Wrapper>\n </MainView>\n\n {bottomLinks && (\n <BottomWrapper clampWidth=\"large\">\n <BottomView addWhitespace>\n {bottomLinks.map((link, i) => {\n if (link.href) {\n return (\n <StyledLink\n key={i}\n isExternal={link.isExternal}\n href={link.href}\n >\n <Copy size=\"small\">\n {link.label || link.href}\n </Copy>\n </StyledLink>\n );\n } else return null;\n })}\n {brandIcon ? brandIcon : <Bdot />}\n </BottomView>\n </BottomWrapper>\n )}\n </Section>\n );\n};\n\nexport default Footer;\n","export const getBgImage = (\n bgImage: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n },\n mq?: 'small' | 'medium' | 'semilarge' | 'large' | 'xlarge'\n): string => {\n switch (mq) {\n default:\n case 'small':\n return bgImage.small;\n\n case 'medium':\n return (\n bgImage.medium ||\n bgImage.semilarge ||\n bgImage.large ||\n bgImage.xlarge ||\n bgImage.small\n );\n\n case 'semilarge':\n return (\n bgImage.semilarge ||\n bgImage.large ||\n bgImage.xlarge ||\n bgImage.medium ||\n bgImage.small\n );\n\n case 'large':\n return (\n bgImage.large ||\n bgImage.xlarge ||\n bgImage.semilarge ||\n bgImage.medium ||\n bgImage.small\n );\n\n case 'xlarge':\n return (\n bgImage.xlarge ||\n bgImage.large ||\n bgImage.semilarge ||\n bgImage.medium ||\n bgImage.small\n );\n }\n};\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { getBgImage } from 'utils/backgroundImage';\nimport { canUseWebP } from 'utils/usePoster';\nimport { FC, useEffect, useRef, useState } from 'react';\n\nexport interface HeaderKenBurnsImageProps {\n small: string;\n medium: string;\n large: string;\n xlarge: string;\n webp?: {\n small: string;\n medium: string;\n large: string;\n xlarge: string;\n };\n}\n\nconst AnimationContainer = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n overflow: hidden;\n`;\n\nconst PosterImage = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n`;\n\nconst AnimationImage = styled.div<{ scale?: number; opacity?: number }>`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n transition-property: opacity, transform;\n transition-duration: ${({ scale }) => `2s, ${scale === 1 ? '0s' : '13s'}`};\n transition-delay: ${({ scale }) =>\n `${scale === 1 ? '1s' : '0s'}, ${scale === 1 ? '3s' : '0s'}`};\n\n opacity: ${({ opacity }) => opacity && opacity};\n transform: scale(${({ scale }) => scale || 1})\n rotate(${({ scale }) => (scale !== 1 ? 0.04 : 0)}deg);\n\n will-change: transform, opacity;\n`;\n\nconst AnimationImages: FC<{\n zoom?: number;\n images: { id: number | string; image: string }[];\n}> = ({ zoom = 1.08, images }) => {\n const intervalRef = useRef<number | null>();\n const [activeImg, setActiveImg] = useState<number>(-1);\n\n useEffect(() => {\n const changeImage = () => {\n setActiveImg((prev) => {\n return (prev + 1) % images.length;\n });\n };\n\n // changeImage();\n window.setTimeout(changeImage, 200);\n if (intervalRef.current) window.clearInterval(intervalRef.current);\n intervalRef.current = window.setInterval(changeImage, 10000);\n\n return () => {\n if (intervalRef.current) window.clearInterval(intervalRef.current);\n };\n }, [images]);\n\n return (\n <>\n {images.map((img, i) => (\n <AnimationImage\n key={i}\n style={{\n backgroundImage: `url(${img.image})`,\n zIndex: i === activeImg ? 1 : 0,\n }}\n scale={i === activeImg ? zoom : 1}\n opacity={i === activeImg ? 1 : 0}\n />\n ))}\n </>\n );\n};\n\nconst preloadImages = (imageUrls: string[]) => {\n const images = imageUrls.map((src, i) => {\n return new Promise((res) => {\n const img = new Image();\n img.src = src;\n img.onload = () => res({ url: src, i });\n });\n });\n\n return images;\n};\n\ntype KenBurnsMq = 'small' | 'medium' | 'large' | 'xlarge';\n\nconst HeaderKenBurns: React.FC<{\n images: HeaderKenBurnsImageProps[];\n className?: string;\n}> = ({ images, className, children }) => {\n const mqs: KenBurnsMq[] = ['small', 'medium', 'large', 'xlarge'];\n const currentMq = useMediaQuery(mqs) as KenBurnsMq | undefined;\n\n const [loadedImages, setLoadedImages] = React.useState<{\n [key: string]: { id: number | string; image: string }[];\n }>({\n small: [],\n medium: [],\n large: [],\n xlarge: [],\n });\n\n React.useEffect(() => {\n if (currentMq) {\n const loadedForMq = loadedImages[currentMq];\n const useWebp = canUseWebP();\n\n if (loadedForMq.length < images.length && images.length >= 2) {\n const requestedImages = images.map((img) =>\n img.webp && useWebp ? img.webp[currentMq] : img[currentMq]\n );\n\n const resolve = async (items: any) => {\n for (const item of items) {\n const x = await item;\n\n setLoadedImages((prev) => {\n // check if image id already exists in array\n if (!prev[currentMq].find((e) => e.id === x.i)) {\n return {\n ...prev,\n [currentMq]: [\n ...prev[currentMq],\n {\n id: x.i,\n image: x.url,\n },\n ],\n };\n } else return prev;\n });\n }\n };\n\n resolve(preloadImages(requestedImages));\n }\n }\n }, [currentMq, images, loadedImages]);\n\n return (\n <AnimationContainer className={className}>\n {currentMq && loadedImages[currentMq].length >= images.length ? (\n <AnimationImages images={loadedImages[currentMq]} />\n ) : (\n <PosterImage\n style={{\n backgroundImage: `url(${getBgImage(\n images[0],\n currentMq\n )})`,\n }}\n />\n )}\n {children}\n </AnimationContainer>\n );\n};\n\nexport default HeaderKenBurns;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { usePoster } from 'utils/usePoster';\n\ninterface HeaderPosterImageProps {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n webp?: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n };\n}\n\nconst PosterView = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n min-height: 200px;\n display: block;\n flex: 1 0 0px;\n }\n`;\n\nconst HeaderPoster: React.FC<{\n bgImage: HeaderPosterImageProps;\n className?: string;\n}> = ({ bgImage, className, children }) => {\n const currentImage = usePoster(bgImage);\n return (\n <PosterView\n style={\n currentImage ? { backgroundImage: `url(${currentImage})` } : {}\n }\n className={className}\n >\n {children}\n </PosterView>\n );\n};\n\nexport default HeaderPoster;\n","import * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n FontOptionType,\n getFonts as font,\n mq,\n styleTextColor,\n withRange,\n} from 'utils/styles';\n\n// Styles\nconst BaseStyles = styled.h1<{\n size: FontOptionType;\n hyphens?: boolean;\n hasShadow?: boolean;\n textColor?: string;\n textGradient?: string;\n}>`\n margin: 0;\n padding: 0;\n ${({ textColor, textGradient }) => styleTextColor(textColor, textGradient)}\n\n hyphens: auto;\n /* -webkit-hyphens: auto; */\n /* overflow-wrap: break-word; */\n\n ${(props: { hyphens?: boolean }) =>\n !props.hyphens &&\n css`\n @media ${mq.large} {\n hyphens: none;\n }\n `}\n\n text-shadow: ${({ hasShadow }) =>\n hasShadow && '1px 2px 8px rgba(0, 0, 0, 0.25)'};\n`;\n\nconst View = styled(BaseStyles)`\n font-family: ${({ theme, size }) => font(theme).callout[size].family};\n font-weight: ${({ theme, size }) => font(theme).callout[size].weight};\n font-style: ${({ theme, size }) => font(theme).callout[size].style};\n ${({ theme, size }) =>\n withRange(font(theme).callout[size].size, 'font-size')}\n line-height: ${({ theme, size }) => font(theme).callout[size].lineHeight};\n letter-spacing: ${({ theme, size }) =>\n font(theme).callout[size].letterSpacing};\n text-transform: ${({ theme, size }) =>\n font(theme).callout[size].textTransform};\n`;\n\nexport type CalloutTag =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'span'\n | 'div';\n\nconst Callout: React.FC<{\n isInverted?: boolean;\n as?: CalloutTag;\n size?: FontOptionType;\n textColor?: string;\n textGradient?: string;\n hyphens?: boolean;\n hasShadow?: boolean;\n innerHTML?: string;\n\n className?: string;\n}> = ({\n isInverted,\n as = 'h2',\n className,\n size = 'medium',\n textColor,\n textGradient,\n hyphens = false,\n hasShadow = false,\n innerHTML,\n children,\n}) => {\n const theme = React.useContext(ThemeContext);\n const fontSettings = font(theme)?.callout?.[size];\n\n return (\n <View\n as={as}\n size={size}\n textColor={\n textColor ||\n (isInverted ? fontSettings.colorInverted : fontSettings.color)\n }\n textGradient={\n textGradient ||\n (!textColor\n ? isInverted\n ? fontSettings.colorGradientInverted\n : fontSettings.colorGradient\n : undefined)\n }\n hyphens={hyphens}\n hasShadow={hasShadow}\n dangerouslySetInnerHTML={\n innerHTML && !children ? { __html: innerHTML } : undefined\n }\n className={className}\n >\n {children}\n </View>\n );\n};\n\nexport default Callout;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { useState, useEffect } from 'react';\nimport Image from 'components/blocks/Image';\nimport { useMediaQuery } from 'utils/useMediaQuery';\n\ninterface HeaderVideoImageProps {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n webp?: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n };\n}\n\nconst PosterView = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n min-height: 200px;\n display: block;\n flex: 1 0 0px;\n }\n`;\n\nconst PlaceholderImg = styled(Image)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n z-index: 0;\n`;\n\nconst AutoplayVideo = styled.video<{ isVisible?: boolean }>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n object-position: center;\n opacity: ${({ isVisible }) => (isVisible ? 1 : 0)};\n pointer-events: none;\n z-index: 1;\n\n transition: opacity 0.3s ease-in-out;\n`;\n\ntype HeaderVideoMq = 'small' | 'medium' | 'semilarge' | 'large' | 'xlarge';\n\nconst HeaderVideo: React.FC<{\n placeholderImg?: HeaderVideoImageProps;\n videoUrl?: string;\n className?: string;\n}> = ({ placeholderImg, videoUrl, className, children }) => {\n const [isLoaded, setLoaded] = useState<boolean>(false);\n const currentMq = useMediaQuery([\n 'small',\n 'medium',\n 'semilarge',\n 'large',\n 'xlarge',\n ]) as HeaderVideoMq | undefined;\n\n const isMobile = currentMq === undefined || currentMq === 'small';\n\n useEffect(() => {\n if (isMobile) setLoaded(false);\n }, [isMobile]);\n\n return (\n <PosterView className={className}>\n {placeholderImg?.small && !isLoaded && (\n <PlaceholderImg coverSpace {...placeholderImg} />\n )}\n {videoUrl && !isMobile && (\n <AutoplayVideo\n isVisible={isLoaded}\n src={videoUrl}\n muted\n autoPlay\n loop\n onCanPlayThrough={() => setLoaded(true)}\n />\n )}\n {children}\n </PosterView>\n );\n};\n\nexport default HeaderVideo;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { CalloutTag } from 'components/typography/Callout';\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Grid from 'components/base/Grid';\nimport Wrapper from 'components/base/Wrapper';\nimport HeaderKenBurns, { HeaderKenBurnsImageProps } from './HeaderKenBurns';\nimport HeaderPoster from './HeaderPoster';\nimport Actions from 'components/blocks/Actions';\nimport Callout from 'components/typography/Callout';\nimport HeaderVideo from './HeaderVideo';\n\ninterface HeaderImageProps {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n webp?: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n };\n}\n\nconst View = styled.header`\n position: relative;\n`;\n\nconst HeaderWrapper = styled(Wrapper)`\n display: flex;\n flex-direction: column;\n height: 100%;\n`;\n\nconst PosterContent = styled.div`\n position: relative;\n display: none;\n width: 100%;\n margin: auto;\n z-index: 3;\n text-align: center;\n padding: 0 ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n display: block;\n max-width: none;\n margin-left: 0;\n text-align: left;\n padding-left: ${(1 / 28) * 100}%;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst PosterContentMobile = styled(PosterContent)`\n display: block;\n padding-top: ${spacings.spacer * 2}px;\n ${withRange([spacings.spacer * 2, spacings.spacer * 4], 'padding-bottom')}\n\n @media ${mq.semilarge} {\n display: none;\n }\n`;\n\nconst Badge = styled.div<{ showOnMobile?: boolean }>`\n display: ${({ showOnMobile }) => (showOnMobile ? 'block' : 'none')};\n position: relative;\n height: 234px;\n width: 234px;\n margin-left: auto;\n margin-right: ${spacings.spacer}px;\n margin-top: -173px;\n z-index: 3;\n\n @media ${mq.semilarge} {\n display: block;\n margin-right: ${spacings.spacer * 4}px;\n }\n\n @media ${mq.xlarge} {\n width: 392px;\n height: 392px;\n margin-left: 0;\n margin-top: -300px;\n\n right: -50%;\n transform: translate(\n ${spacings.wrapper / 2 - (392 + spacings.spacer * 3)}px\n );\n }\n`;\n\nconst Poster: FC<{\n videoUrl?: string;\n images?: HeaderImageProps[];\n className?: string;\n}> = ({ videoUrl, images, className, children }) => {\n if (!videoUrl) {\n if (!images || images.length === 0) return <div>{children}</div>;\n else if (images.length === 1)\n return (\n <HeaderPoster bgImage={images[0]} className={className}>\n {children}\n </HeaderPoster>\n );\n else\n return (\n <HeaderKenBurns\n images={images.map((img) => {\n return {\n ...img,\n } as HeaderKenBurnsImageProps;\n })}\n className={className}\n >\n {children}\n </HeaderKenBurns>\n );\n } else {\n return (\n <HeaderVideo\n videoUrl={videoUrl}\n placeholderImg={images?.[0]}\n className={className}\n >\n {children}\n </HeaderVideo>\n );\n }\n};\n\nconst StyledPoster = styled(Poster)<{ gradient?: string; size?: number }>`\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-end;\n height: ${({ size }) => (size ? size * 100 + 'vh' : '100vh')};\n max-height: 1100px;\n\n ${withRange([spacings.spacer * 7, spacings.spacer * 8], 'padding-top')};\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4.5],\n 'padding-bottom'\n )};\n\n @media ${mq.semilarge} {\n &:after {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-image: ${({ gradient }) => gradient || undefined};\n pointer-events: none;\n z-index: 2;\n }\n }\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n min-height: 1px; // before: 200px\n display: block;\n flex: 1 0 0px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')};\n\n @media ${mq.semilarge} {\n max-width: 600px;\n }\n`;\n\nconst Header: FC<{\n size?: 'full' | 'small';\n /** Optional explicit height scale value: 100vh * [0...1] */\n sizeScale?: number;\n title?: string;\n titleAs?: CalloutTag;\n primaryCta?: (isInverted?: boolean) => React.ReactNode;\n secondaryCta?: (isInverted?: boolean) => React.ReactNode;\n videoUrl?: string;\n images?: HeaderImageProps[];\n withTopGradient?: boolean;\n customTopGradient?: string;\n customBottomGradient?: string;\n badge?: {\n content: React.ReactNode;\n showOnMobile?: boolean;\n };\n}> = ({\n size = 'full',\n sizeScale,\n title,\n titleAs,\n primaryCta,\n secondaryCta,\n videoUrl,\n images,\n withTopGradient = true,\n customTopGradient,\n customBottomGradient,\n badge,\n}) => {\n const theme = useContext(ThemeContext);\n const topGradient = withTopGradient\n ? customTopGradient ||\n 'linear-gradient(179deg,rgba(0,0,0,.4) 0%,rgba(0,0,0,0) 40%)'\n : undefined;\n\n const bottomGradient =\n title || primaryCta || secondaryCta\n ? customBottomGradient || global(theme).sections.imageTextGradient\n : undefined;\n\n const gradient = `${bottomGradient ? bottomGradient + ', ' : ''}${\n topGradient || ''\n }`;\n return (\n <View>\n <HeaderWrapper clampWidth=\"large\">\n <StyledPoster\n videoUrl={videoUrl}\n images={images}\n gradient={withTopGradient ? gradient : undefined}\n size={\n sizeScale === undefined\n ? size === 'small'\n ? 0.8\n : 1\n : sizeScale\n }\n >\n <Wrapper>\n <PosterContent>\n <Grid.Row gutter={0}>\n <Grid.Col\n medium={{ span: 16 / 28 }}\n large={{ span: 15 / 28 }}\n >\n {title && (\n <Callout\n hyphens\n size=\"medium\"\n as={titleAs}\n hasShadow\n textColor=\"#fff\"\n innerHTML={title}\n />\n )}\n {(primaryCta || secondaryCta) && (\n <StyledActions\n primary={\n primaryCta && primaryCta(true)\n }\n secondary={\n secondaryCta &&\n secondaryCta(true)\n }\n />\n )}\n </Grid.Col>\n </Grid.Row>\n </PosterContent>\n </Wrapper>\n </StyledPoster>\n {badge && badge.content && (\n <Badge showOnMobile={badge.showOnMobile}>\n {badge.content}\n </Badge>\n )}\n </HeaderWrapper>\n <PosterContentMobile>\n <Wrapper addWhitespace>\n {title && (\n <Callout\n hyphens\n size=\"small\"\n as={titleAs}\n isInverted={false}\n innerHTML={title}\n />\n )}\n {(primaryCta || secondaryCta) && (\n <StyledActions\n primary={primaryCta && primaryCta(false)}\n secondary={secondaryCta && secondaryCta(false)}\n />\n )}\n </Wrapper>\n </PosterContentMobile>\n </View>\n );\n};\n\nexport default Header;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\nimport { getColors as color, mq, spacings } from 'utils/styles';\n\nconst Seperator = styled.div<{ isInverted?: boolean }>`\n border-bottom: solid 1px\n ${({ isInverted, theme }) =>\n isInverted ? color(theme).light : color(theme).dark};\n`;\n\nconst ContentFlex = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n\n margin: ${spacings.spacer * 2}px 0;\n\n @media ${mq.medium} {\n flex-direction: row;\n justify-content: flex-start;\n text-align: left;\n }\n`;\n\nconst Avatar = styled.img`\n border-radius: 50%; ;\n`;\n\nconst Author = styled.div`\n margin-top: ${spacings.spacer}px;\n\n @media ${mq.medium} {\n margin-left: 0;\n margin-left: ${spacings.spacer}px;\n }\n`;\n\nconst StyledCopy = styled(Copy)`\n text-transform: uppercase;\n margin-bottom: ${spacings.nudge * 2}px;\n`;\n\nconst NewsAuthorCard: React.FC<{\n label?: string;\n author?: string;\n avatar?: { src: string; alt?: string };\n\n isInverted?: boolean;\n hasBack?: boolean;\n}> = ({ label, author, avatar, isInverted = false, hasBack = false }) => {\n const theme = React.useContext(ThemeContext);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper clampWidth=\"small\" addWhitespace>\n {author && (\n <>\n <Seperator isInverted={isInverted} />\n <ContentFlex>\n {avatar && (\n <Avatar src={avatar.src} alt={avatar.alt} />\n )}\n <Author>\n {author && (\n <StyledCopy\n isInverted={isInverted}\n type=\"copy-b\"\n >\n {label || 'Written By'}\n </StyledCopy>\n )}\n <Heading\n isInverted={isInverted}\n size=\"heading-2\"\n >\n {author}\n </Heading>\n </Author>\n </ContentFlex>\n </>\n )}\n <Seperator isInverted={isInverted} />\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsAuthorCard;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { spacings, getColors as color } from 'utils/styles';\nimport Copy from 'components/typography/Copy';\n\nconst View = styled(Copy)<{\n isInverted?: boolean;\n isActive?: boolean;\n onClick?: () => void;\n}>`\n display: inline-block;\n border: 1px solid\n ${({ isInverted, theme }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 15px;\n\n padding: 3px ${spacings.nudge * 2}px;\n user-select: none;\n\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-align: center;\n background: ${({ isActive, isInverted, theme }) =>\n isActive && (isInverted ? color(theme).light : color(theme).dark)};\n color: ${({ isActive, isInverted, theme }) =>\n isActive && (isInverted ? color(theme).dark : color(theme).light)};\n cursor: ${({ onClick }) => (onClick ? 'pointer' : 'default')};\n\n transition: background 0.1s ease-in-out, color 0.1s ease-in-out;\n\n &:hover {\n background: ${({ theme, isInverted, onClick }) =>\n onClick && (isInverted ? color(theme).light : color(theme).dark)};\n color: ${({ theme, isInverted, onClick }) =>\n onClick && (isInverted ? color(theme).dark : color(theme).light)};\n }\n`;\n\nconst Tag: FC<{\n isInverted?: boolean;\n isActive?: boolean;\n onClick?: () => void;\n className?: string;\n}> = ({ isInverted, isActive, onClick, className, children }) => {\n return (\n <View\n isInverted={isInverted}\n isActive={isActive}\n onClick={onClick}\n className={className}\n >\n {children}\n </View>\n );\n};\n\nexport default Tag;\n","interface DateReplacementHolder {\n [key: string]: () => string;\n}\n\nexport default class StatusFormatter {\n private timestamp: number;\n private input: string;\n private dateFormat: string;\n private timeFormat: string;\n\n private localeKey: string;\n private date: Date;\n\n constructor(\n timestamp: number,\n input: string,\n dateFormat: string,\n timeFormat: string,\n localeKey?: string\n ) {\n this.timestamp = timestamp;\n this.input = input;\n this.dateFormat = dateFormat;\n this.timeFormat = timeFormat;\n\n this.localeKey = localeKey ? localeKey : 'de';\n this.date = new Date(this.timestamp);\n }\n\n private dateReplacements: DateReplacementHolder = {\n dddd: () => {\n return weekDays[this.localeKey].long[this.date.getDay()];\n },\n DDDD: () => {\n return weekDays[this.localeKey].long[this.date.getDay()];\n },\n ddd: () => {\n return weekDays[this.localeKey].short[this.date.getDay()];\n },\n DDD: () => {\n return weekDays[this.localeKey].short[this.date.getDay()];\n },\n dd: () => {\n return this.getDay();\n },\n DD: () => {\n return this.getDay();\n },\n MMMM: () => {\n return monthNames[this.localeKey].long[this.date.getMonth()];\n },\n mmmm: () => {\n return monthNames[this.localeKey].long[this.date.getMonth()];\n },\n MMM: () => {\n return monthNames[this.localeKey].short[this.date.getMonth()];\n },\n mmm: () => {\n return monthNames[this.localeKey].short[this.date.getMonth()];\n },\n mm: () => {\n return this.getMonth();\n },\n MM: () => {\n return this.getMonth();\n },\n yyyy: () => {\n return this.getYear();\n },\n YYYY: () => {\n return this.getYear();\n },\n yy: () => {\n return this.getYear().substr(-2);\n },\n YY: () => {\n return this.getYear().substr(-2);\n },\n };\n\n private timeReplacements: DateReplacementHolder = {\n hh: () => {\n return this.getHours();\n },\n HH: () => {\n return this.getHours();\n },\n hs: () => {\n return this.getHours12h();\n },\n HS: () => {\n return this.getHours12h();\n },\n mm: () => {\n return this.getMinutes();\n },\n MM: () => {\n return this.getMinutes();\n },\n ss: () => {\n return this.getSeconds();\n },\n SS: () => {\n return this.getSeconds();\n },\n ap: () => {\n const hours = this.date.getHours();\n return hours >= 12 ? 'pm' : 'am';\n },\n AP: () => {\n const hours = this.date.getHours();\n return hours >= 12 ? 'PM' : 'AM';\n },\n };\n\n public setDate(timestamp: number) {\n this.date = new Date(timestamp);\n }\n\n public setLocale(localeKey: string) {\n this.localeKey = localeKey;\n }\n\n public getFormattedStatus() {\n const placeholders: {\n [key: string]: any;\n } = {\n '%DATE%': this.getFormattedDate(),\n '%TIME%': this.getFormattedTime(),\n };\n\n const formattedInput = this.input.replace(/%\\w+%/g, (foundString) => {\n return placeholders[foundString] || foundString;\n });\n return formattedInput;\n }\n\n public getFormattedDate() {\n // replace placeholders with values from dateReplacements object\n const dataKeys = Object.keys(this.dateReplacements);\n let formattedDate = this.dateFormat;\n for (let i = 0; i < dataKeys.length; i++) {\n formattedDate = formattedDate.replace(\n new RegExp(dataKeys[i], 'g'),\n (foundString) => {\n return this.dateReplacements[foundString].call(this);\n }\n );\n }\n return formattedDate;\n }\n\n public getFormattedTime() {\n // replace placeholders with values from timeReplacements object\n const dataKeys = Object.keys(this.timeReplacements);\n let formattedTime = this.timeFormat;\n for (let i = 0; i < dataKeys.length; i++) {\n formattedTime = formattedTime.replace(\n new RegExp(dataKeys[i], 'g'),\n (foundString) => {\n return this.timeReplacements[foundString].call(this);\n }\n );\n }\n return formattedTime;\n }\n\n private getDoubleDigitString(value: number) {\n return value < 10 ? '0' + value.toString() : value.toString();\n }\n\n private getDay() {\n return this.getDoubleDigitString(this.date.getDate());\n }\n\n private getMonth() {\n return this.getDoubleDigitString(this.date.getMonth() + 1);\n }\n\n private getYear() {\n return this.date.getFullYear().toString();\n }\n\n private getHours() {\n return this.getDoubleDigitString(this.date.getHours());\n }\n\n private getHours12h() {\n let hours = this.date.getHours();\n hours = hours % 12;\n hours = hours === 0 ? 12 : hours;\n return this.getDoubleDigitString(hours);\n }\n\n private getMinutes() {\n return this.getDoubleDigitString(this.date.getMinutes());\n }\n\n private getSeconds() {\n return this.getDoubleDigitString(this.date.getSeconds());\n }\n}\n\ninterface WeekDays {\n [key: string]: {\n long: string[];\n short: string[];\n };\n}\n\ninterface MonthNames {\n [key: string]: {\n long: string[];\n short: string[];\n };\n}\n\nconst weekDays: WeekDays = {\n de: {\n long: [\n 'Montag',\n 'Dienstag',\n 'Mittwoch',\n 'Donnerstag',\n 'Freitag',\n 'Samstag',\n 'Sonntag',\n ],\n short: ['Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.', 'So.'],\n },\n en: {\n long: [\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n 'Sunday',\n ],\n short: ['Mon.', 'Tue.', 'Wed.', 'Thu.', 'Fri.', 'Sat.', 'Sun.'],\n },\n};\n\nconst monthNames: MonthNames = {\n de: {\n long: [\n 'Januar',\n 'Februar',\n 'März',\n 'April',\n 'Mai',\n 'Juni',\n 'Juli',\n 'August',\n 'September',\n 'Oktober',\n 'November',\n 'Dezember',\n ],\n short: [\n 'Jan.',\n 'Febr.',\n 'März',\n 'Apr.',\n 'Mai',\n 'Juni',\n 'Juli',\n 'Aug.',\n 'Sept.',\n 'Okt.',\n 'Nov.',\n 'Dez',\n ],\n },\n en: {\n long: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n short: [\n 'Jan.',\n 'Feb.',\n 'Mar.',\n 'Apr.',\n 'May',\n 'June',\n 'July',\n 'Aug.',\n 'Sept.',\n 'Oct.',\n 'Nov.',\n 'Dec.',\n ],\n },\n};\n","import React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Copy from 'components/typography/Copy';\nimport Actions from 'components/blocks/Actions';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Tag from 'components/blocks/Tag';\nimport StatusFormatter from 'utils/statusFormatter';\nimport Link, { LinkProps } from 'components/typography/Link';\n\nconst View = styled.div`\n position: relative;\n text-decoration: none;\n padding-bottom: ${spacings.spacer}px;\n`;\n\nconst ImageLink = styled(Link)`\n width: 100%;\n`;\n\nconst TitleLink = styled(Link)`\n text-decoration: none;\n`;\n\nconst Head = styled(Copy)`\n display: flex;\n\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n\n margin-top: ${spacings.spacer * 2}px;\n margin-bottom: ${spacings.spacer * 1.5}px;\n\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n`;\n\nconst Main = styled.div`\n max-width: 95%;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')}\n\n @media ${mq.medium} {\n width: 100%;\n\n & > * {\n max-width: 50%;\n min-width: 0 !important;\n flex: 1;\n }\n }\n`;\n\nexport interface NewsCardProps {\n isInverted?: boolean;\n tag?: string;\n onTagClick?: (name: string) => void;\n publishDate?: Date;\n title?: string;\n text?: string;\n image?: Omit<ImageProps, 'coverSpace'>;\n link?: LinkProps;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}\n\nconst NewsCard: React.FC<\n NewsCardProps & {\n className?: string;\n }\n> = ({\n tag,\n onTagClick,\n publishDate,\n title,\n text,\n image,\n link,\n isInverted,\n primaryAction,\n secondaryAction,\n className,\n}) => {\n const theme = useContext(ThemeContext);\n\n let publishedAt = '';\n if (publishDate) {\n const formatter = new StatusFormatter(\n publishDate.getTime(),\n '',\n global(theme).sections.newsDateFormat,\n global(theme).sections.newsTimeFormat,\n global(theme).sections.newsLocaleKey\n );\n publishedAt = formatter.getFormattedDate();\n }\n\n // settings max text length to 300 chars\n if (text && text.length > 300) {\n text = text.slice(0, 301) + '...';\n }\n\n return (\n <View className={className}>\n {image && (\n <ImageLink {...link}>\n <Image coverSpace {...image} />\n </ImageLink>\n )}\n <Head isInverted={isInverted} data-sheet=\"head\">\n {tag && (\n <Tag\n isInverted={isInverted}\n onClick={onTagClick ? () => onTagClick(tag) : undefined}\n >\n {tag}\n </Tag>\n )}\n {publishedAt && <div>{publishedAt}</div>}\n </Head>\n <Main>\n {title && (\n <TitleLink {...link}>\n <Copy\n isInverted={isInverted}\n size=\"big\"\n type=\"copy-b\"\n data-sheet=\"title\"\n >\n {title}\n </Copy>\n </TitleLink>\n )}\n {text && (\n <Copy\n isInverted={isInverted}\n type=\"copy\"\n innerHTML={text}\n data-sheet=\"text\"\n />\n )}\n </Main>\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={secondaryAction && secondaryAction(isInverted)}\n />\n )}\n </View>\n );\n};\n\nexport default NewsCard;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport Copy from 'components/typography/Copy';\nimport NewsCard, { NewsCardProps } from 'components/blocks/NewsCard';\nimport { useContext, useEffect, useState } from 'react';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport Pointer from 'components/buttons/Pointer';\n\nconst ContentFlex = styled.div`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: 'flex-start';\n align-items: flex-start;\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n padding-left: 20px;\n padding-top: 40px;\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n`;\n\nconst Actions = styled.div`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n text-align: left;\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 2 ? 'block' : 'none'};\n`;\n\ntype NewsFooterMq = 'small' | 'semilarge';\n\nconst NewsFooter: React.FC<{\n news: NewsCardProps[];\n onTagClick?: (tag: string) => void;\n\n isInverted?: boolean;\n hasBack?: boolean;\n showMoreText?: string;\n}> = ({\n news,\n onTagClick,\n isInverted = false,\n hasBack = false,\n showMoreText,\n}) => {\n const newsCount = news?.length || 0;\n const theme = useContext(ThemeContext);\n\n const mqs: NewsFooterMq[] = ['small', 'semilarge'];\n const currentMq = useMediaQuery(mqs) as NewsFooterMq | undefined;\n const [itemsPerRow, setItemsPerRow] = useState(2);\n const [visibleRows, setVisibleRows] = useState(1);\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\n listLength: Math.min(visibleRows * itemsPerRow, newsCount),\n identifiers: [\n '[data-sheet=\"head\"]',\n '[data-sheet=\"title\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: 2,\n xlarge: 2,\n },\n });\n\n useEffect(() => {\n switch (currentMq) {\n case 'semilarge':\n setItemsPerRow(2);\n break;\n\n case 'small':\n setItemsPerRow(1);\n if (visibleRows < 3) setVisibleRows(3);\n break;\n\n default:\n setItemsPerRow(1);\n }\n }, [currentMq, visibleRows]);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper addWhitespace clampWidth=\"small\">\n <ContentFlex>\n {news &&\n news\n .filter((_, i) => i < visibleRows * itemsPerRow)\n .map((item, i) => {\n return (\n <div key={i} ref={cardRefs[i]}>\n <NewsCard\n isInverted={isInverted}\n onTagClick={onTagClick}\n {...item}\n />\n </div>\n );\n })}\n </ContentFlex>\n {news && news.length > 0 && (\n <Actions>\n <Copy isInverted={isInverted}>\n <ShowMore\n itemCount={news.length}\n onClick={(ev) => {\n ev.preventDefault();\n if (\n visibleRows <\n Math.ceil(newsCount / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows < newsCount / itemsPerRow && (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMoreText || 'mehr anzeigen'}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n </Copy>\n </Actions>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsFooter;\n","import React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\n\nconst Content = styled.div`\n & > * + * {\n margin-top: ${spacings.spacer * 2}px;\n }\n`;\n\nconst ImageFlex = styled.div`\n margin: -${spacings.spacer}px;\n\n @media ${mq.medium} {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n\n & > * {\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n`;\n\nconst Img = styled.div<{ isSingleHalf?: boolean }>`\n padding: ${spacings.spacer}px;\n width: 100%;\n\n @media ${mq.semilarge} {\n width: ${({ isSingleHalf }) => isSingleHalf && '50%'};\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n`;\n\nconst NewsImages: React.FC<{\n images?: Omit<ImageProps, 'coverSpace'>[];\n imageStyle?: 'full' | 'half';\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n hasBack?: boolean;\n}> = ({\n images,\n imageStyle = 'full',\n primaryAction,\n secondaryAction,\n isInverted = false,\n hasBack = false,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper clampWidth=\"small\" addWhitespace>\n <Content>\n {images && (imageStyle === 'half' || images.length >= 2) ? (\n <ImageFlex>\n {images.map((img, i) => {\n return (\n <Img\n key={i}\n isSingleHalf={images.length >= 1}\n >\n <Image coverSpace {...img} />\n </Img>\n );\n })}\n </ImageFlex>\n ) : (\n images && (\n <div>\n {images.map((img, i) => {\n return (\n <Image coverSpace {...img} key={i} />\n );\n })}\n </div>\n )\n )}\n </Content>\n\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsImages;\n","import React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Title from 'components/blocks/Title';\nimport Copy from 'components/typography/Copy';\nimport Tag from 'components/blocks/Tag';\nimport {\n getColors as color,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport StatusFormatter from 'utils/statusFormatter';\n\nconst Content = styled.div`\n & > * + * {\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n }\n`;\n\nconst IntroHead = styled(Copy)`\n display: flex;\n\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n`;\n\nconst HeadTag = styled(Tag)`\n flex: 0 1 auto;\n margin-right: ${spacings.nudge * 2}px;\n`;\n\nconst MetaBlock = styled.div`\n flex: 1 1 auto;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-end;\n align-items: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n * + & {\n margin-left: ${spacings.spacer}px;\n }\n\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n`;\n\nconst StyledTitle = styled(Title)<{ clampTitle?: boolean }>`\n max-width: ${({ clampTitle }) =>\n clampTitle && (13 / 28) * spacings.wrapperSmall + 'px'};\n`;\n\nconst ContentBlock = styled(Copy)<{\n clampText?: boolean;\n isCentered?: boolean;\n}>`\n display: block;\n margin: ${({ isCentered }) => isCentered && '0 auto'};\n max-width: ${({ clampText }) =>\n clampText && (19 / 28) * spacings.wrapper + 'px'};\n\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n`;\n\nconst NewsIntro: React.FC<{\n tags?: string[];\n onTagClick?: (name: string) => void;\n meta?: { date?: Date; author?: string };\n title?: string;\n text?: string;\n image?: ImageProps;\n\n isInverted?: boolean;\n hasBack?: boolean;\n}> = ({\n tags,\n onTagClick,\n meta,\n title,\n text,\n image,\n isInverted = false,\n hasBack = false,\n}) => {\n const theme = useContext(ThemeContext);\n\n let publishedAt = '';\n if (meta?.date) {\n const formatter = new StatusFormatter(\n meta.date.getTime(),\n '',\n global(theme).sections.newsDateFormat,\n global(theme).sections.newsTimeFormat,\n global(theme).sections.newsLocaleKey\n );\n publishedAt = formatter.getFormattedDate();\n }\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper clampWidth=\"small\" addWhitespace>\n <Content>\n <IntroHead isInverted={isInverted}>\n {tags &&\n tags.map((tag, index) => {\n return (\n <HeadTag\n key={`headtag-${index}`}\n isInverted={isInverted}\n onClick={\n onTagClick\n ? () => onTagClick(tag)\n : undefined\n }\n >\n {tag}\n </HeadTag>\n );\n })}\n {(publishedAt || meta?.author) && (\n <MetaBlock>\n {meta?.author && <div>{meta?.author}</div>}\n {publishedAt && <div>{publishedAt}</div>}\n </MetaBlock>\n )}\n </IntroHead>\n <div>\n <StyledTitle\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n />\n {text && (\n <ContentBlock\n isInverted={isInverted}\n type=\"copy-b\"\n innerHTML={text}\n />\n )}\n </div>\n {image?.small && (\n <div>\n <Image coverSpace {...image} />\n </div>\n )}\n </Content>\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsIntro;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\n\nimport NewsCard, { NewsCardProps } from 'components/blocks/NewsCard';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Intro from 'components/blocks/Intro';\nimport Copy from 'components/typography/Copy';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport { useContext, useEffect, useState } from 'react';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport Pointer from 'components/buttons/Pointer';\n\nconst StyledIntro = styled(Intro)`\n padding-bottom: ${spacings.spacer * 2}px;\n`;\n\nconst News = styled.div`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: 'flex-start';\n align-items: flex-start;\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n padding-left: 20px;\n padding-top: 40px;\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n\n @media ${mq.large} {\n & > * {\n flex: 1 0 33.33%;\n max-width: 33.33%;\n }\n }\n`;\n\nconst ListFooter = styled.div`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n text-align: center;\n\n @media ${mq.medium} {\n text-align: left;\n }\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 2 ? 'block' : 'none'};\n`;\n\ntype NewsListMq = 'small' | 'semilarge' | 'large';\n\nconst NewsList: React.FC<{\n title: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n news?: NewsCardProps[];\n onTagClick?: (tag: string) => void;\n isInverted?: boolean;\n hasBack?: boolean;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n showMoreText?: string;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n news,\n onTagClick,\n isInverted = false,\n hasBack = false,\n\n primaryAction,\n secondaryAction,\n showMoreText,\n}) => {\n const theme = useContext(ThemeContext);\n const mqs: NewsListMq[] = ['small', 'semilarge', 'large'];\n const currentMq = useMediaQuery(mqs) as NewsListMq | undefined;\n const [itemsPerRow, setItemsPerRow] = useState(3);\n const [visibleRows, setVisibleRows] = useState(1);\n\n const newsCount = news?.length || 0;\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\n listLength: Math.min(visibleRows * itemsPerRow, newsCount),\n identifiers: [\n '[data-sheet=\"head\"]',\n '[data-sheet=\"title\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: 3,\n xlarge: 3,\n },\n });\n\n useEffect(() => {\n switch (currentMq) {\n case 'large':\n setItemsPerRow(3);\n break;\n\n case 'semilarge':\n setItemsPerRow(2);\n break;\n\n case 'small':\n setItemsPerRow(1);\n if (visibleRows < 3) setVisibleRows(3);\n break;\n\n default:\n setItemsPerRow(1);\n }\n }, [currentMq, visibleRows]);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n {title && (\n <Wrapper addWhitespace>\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n </Wrapper>\n )}\n <Wrapper addWhitespace clampWidth=\"normal\">\n <News>\n {news &&\n news\n .filter((_, i) => i < visibleRows * itemsPerRow)\n .map((item, i) => {\n return (\n <div key={i} ref={cardRefs[i]}>\n <NewsCard\n onTagClick={onTagClick}\n isInverted={isInverted}\n {...item}\n />\n </div>\n );\n })}\n </News>\n <ListFooter>\n {news && news.length > 0 && (\n <Copy type=\"copy\" size=\"medium\" isInverted={isInverted}>\n <ShowMore\n itemCount={news.length}\n onClick={(ev) => {\n ev.preventDefault();\n if (\n visibleRows <\n Math.ceil(newsCount / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows < newsCount / itemsPerRow && (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMoreText || 'mehr anzeigen'}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n </Copy>\n )}\n </ListFooter>\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsList;\n","import Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\nimport Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { hexToRgba } from 'utils/hexRgbConverter';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\n\nconst TableContainer = styled.div`\n overflow-x: scroll;\n overflow-y: hidden;\n white-space: nowrap;\n`;\n\nconst TableBody = styled.table`\n width: 100%;\n max-width: 100%;\n margin-top: ${spacings.nudge * 2}px;\n\n border-collapse: separate;\n border-spacing: 0 ${spacings.nudge}px;\n\n @media ${mq.medium} {\n padding: 0;\n }\n`;\n\nconst TableHead = styled.th<{ hasBack?: boolean; isInverted?: boolean }>`\n text-align: left;\n color: ${({ theme }) => color(theme).dark};\n background-color: ${({ theme, hasBack, isInverted }) =>\n hasBack && !isInverted ? color(theme).light : color(theme).mono.light};\n\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 2}px\n ${spacings.nudge * 3.5}px ${spacings.spacer * 2}px;\n min-width: 60px;\n box-sizing: content-box;\n\n :last-child {\n padding-right: ${spacings.spacer * 2.5}px;\n }\n`;\n\nconst TableData = styled.td<{ isInverted?: boolean; hasBack?: boolean }>`\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 2}px\n ${spacings.nudge * 3.5}px ${spacings.spacer * 2}px;\n min-width: 60px;\n box-sizing: content-box;\n\n background-color: ${({ isInverted, hasBack, theme }) =>\n hexToRgba(\n hasBack && !isInverted\n ? color(theme).light\n : color(theme).mono.light,\n isInverted ? 0.2 : 0.4\n )};\n\n :last-child {\n padding-right: ${spacings.spacer * 2.5}px;\n }\n`;\n\nexport interface TableProps {\n tableTitle?: string;\n rowTitle?: string[];\n row: {\n cols: string[];\n }[];\n isInverted?: boolean;\n hasBack?: boolean;\n}\n\nconst TableBlock: React.FC<TableProps> = ({\n row,\n tableTitle,\n rowTitle,\n isInverted = false,\n hasBack = false,\n}) => {\n return (\n <div>\n {tableTitle && (\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {tableTitle}\n </Copy>\n )}\n <TableContainer>\n <TableBody>\n {rowTitle && (\n <thead>\n <tr>\n {rowTitle.map((item, ii) => {\n return (\n <TableHead\n hasBack={hasBack}\n isInverted={isInverted}\n key={ii}\n >\n <Copy type=\"copy-b\">{item}</Copy>\n </TableHead>\n );\n })}\n </tr>\n </thead>\n )}\n <tbody>\n {row.map(({ cols }, i) => (\n <tr key={i}>\n {cols.map((itemText, ii) => {\n return (\n <TableData\n key={ii}\n isInverted={isInverted}\n hasBack={hasBack}\n >\n <Copy isInverted={isInverted}>\n {itemText}\n </Copy>\n </TableData>\n );\n })}\n </tr>\n ))}\n </tbody>\n </TableBody>\n </TableContainer>\n </div>\n );\n};\n\nconst TableWrapper = styled.div<{ withSeperation?: boolean }>`\n ${({ withSeperation }) =>\n withSeperation &&\n withRange([spacings.spacer, spacings.spacer * 4], 'padding-top')};\n\n & + & {\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n`;\n\nconst NewsTable: React.FC<{\n tableItems: TableProps[];\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n hasBack?: boolean;\n}> = ({ isInverted, hasBack, tableItems, primaryAction, secondaryAction }) => {\n const theme = React.useContext(ThemeContext);\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper addWhitespace clampWidth=\"small\">\n {tableItems.map((item, i) => {\n return (\n <TableWrapper key={i}>\n <TableBlock\n {...item}\n hasBack={hasBack}\n isInverted={isInverted}\n />\n </TableWrapper>\n );\n })}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsTable;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Actions from 'components/blocks/Actions';\nimport Copy from 'components/typography/Copy';\nimport Wrapper from 'components/base/Wrapper';\nimport { getColors as color, spacings, withRange } from 'utils/styles';\nimport { useContext } from 'react';\n\nconst ContentBlock = styled(Copy)<{\n clampText?: boolean;\n isCentered?: boolean;\n}>`\n display: block;\n margin: ${({ isCentered }) => isCentered && '0 auto'};\n max-width: ${({ clampText }) =>\n clampText && (19 / 28) * spacings.wrapperSmall + 'px'};\n\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n`;\n\nconst NewsText: React.FC<{\n text: string;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n hasBack?: boolean;\n}> = ({\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n hasBack = false,\n}) => {\n const theme = useContext(ThemeContext);\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper clampWidth=\"small\" addWhitespace>\n {text && (\n <ContentBlock\n isInverted={isInverted}\n type=\"copy\"\n innerHTML={text}\n />\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsText;\n","import React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { ImageProps } from 'components/blocks/Image';\nimport Section from 'components/base/Section';\nimport { getColors as color, spacings, withRange } from 'utils/styles';\nimport Wrapper from 'components/base/Wrapper';\nimport VideoCard from 'components/blocks/VideoCard';\nimport Actions from 'components/blocks/Actions';\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n`;\n\nconst NewsVideo: React.FC<{\n bgImage?: ImageProps;\n embedId?: string;\n playIcon?: React.ReactChild;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n hasBack?: boolean;\n}> = ({\n bgImage,\n embedId,\n playIcon,\n primaryAction,\n secondaryAction,\n isInverted = false,\n hasBack = false,\n}) => {\n const theme = useContext(ThemeContext);\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper addWhitespace clampWidth=\"small\">\n <div>\n {embedId && bgImage && (\n <VideoCard\n bgImage={bgImage}\n embedId={embedId}\n playIcon={playIcon}\n />\n )}\n </div>\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsVideo;\n","import React, { useContext, useEffect, useRef, useState } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\n\nimport NewsCard, { NewsCardProps } from 'components/blocks/NewsCard';\nimport { getColors, mq, spacings, withRange } from 'utils/styles';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Intro from 'components/blocks/Intro';\nimport Tag from 'components/blocks/Tag';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport { useObserverSupport } from 'utils/useObserverSupport';\nimport Copy from 'components/typography/Copy';\nimport { useScrollTo } from 'utils/useScrollTo';\nimport Pointer from 'components/buttons/Pointer';\n\nconst StyledIntro = styled(Intro)`\n ${withRange([spacings.spacer * 1.5, spacings.spacer * 3], 'margin-bottom')};\n`;\n\nconst TagContainer = styled.div`\n margin: -${spacings.nudge}px;\n ${withRange([spacings.spacer * 1.5, spacings.spacer * 3], 'margin-bottom')};\n\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n`;\n\nconst TagWrapper = styled.div`\n padding: ${spacings.nudge}px;\n`;\n\nconst List = styled.div`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: 'flex-start';\n align-items: flex-start;\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n padding-left: 20px;\n padding-top: 40px;\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n\n @media ${mq.large} {\n & > * {\n flex: 1 0 33.33%;\n max-width: 33.33%;\n }\n }\n`;\n\nconst ListFooter = styled.div`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n text-align: center;\n\n @media ${mq.medium} {\n text-align: left;\n }\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 2 ? 'block' : 'none'};\n`;\n\ntype NewsOverviewMq = 'small' | 'semilarge' | 'large';\n\nconst NewsOverview: React.FC<{\n title: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n news: NewsCardProps[];\n activeTag?: string;\n tags?: string[];\n queryParams?: Record<string, any>;\n onTagClick?: (tag: string, insideList?: boolean) => void;\n showMoreText?: string;\n\n isInverted?: boolean;\n hasBack?: boolean;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n\n news,\n activeTag,\n tags,\n queryParams,\n onTagClick,\n showMoreText,\n\n isInverted,\n hasBack,\n}) => {\n const theme = useContext(ThemeContext);\n\n activeTag = queryParams?.selected\n ? decodeURI(queryParams.selected)\n : activeTag;\n const [selectedTag, setSelectedTag] = useState<string | undefined>(\n activeTag || undefined\n );\n\n const mqs: NewsOverviewMq[] = ['small', 'semilarge', 'large'];\n const currentMq = useMediaQuery(mqs) as NewsOverviewMq | undefined;\n const [itemsPerRow, setItemsPerRow] = useState(3);\n const [visibleRows, setVisibleRows] = useState(3);\n\n const targetRef = useRef<HTMLDivElement>(null);\n const observerSupported = useObserverSupport();\n\n const newsCount = news?.length || 0;\n\n const setNewPos = useScrollTo(800);\n const { sheetRefs: cardRefs, triggerCalculation } = useEqualSheetHeight({\n listLength: Math.min(visibleRows * itemsPerRow, newsCount),\n identifiers: [\n '[data-sheet=\"head\"]',\n '[data-sheet=\"title\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: 3,\n xlarge: 3,\n },\n });\n\n useEffect(() => {\n switch (currentMq) {\n case 'large':\n setItemsPerRow(3);\n break;\n\n case 'semilarge':\n setItemsPerRow(2);\n break;\n\n case 'small':\n setItemsPerRow(1);\n if (visibleRows < 3) setVisibleRows(3);\n break;\n\n default:\n setItemsPerRow(1);\n }\n }, [currentMq, visibleRows]);\n\n useEffect(() => {\n setSelectedTag(activeTag);\n }, [activeTag]);\n\n useEffect(() => {\n // if new tag is selected reset list rows to three visible item rows\n setVisibleRows(3);\n triggerCalculation();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedTag]);\n\n useEffect(() => {\n // cancel if intersection observers are not supported\n if (!observerSupported) return;\n\n const element = targetRef.current;\n let observer: IntersectionObserver;\n\n if (element) {\n const options = {\n rootMargin: '0px 0px 100px 0px',\n threshold: 0,\n };\n\n observer = new IntersectionObserver((entries) => {\n const entry = entries[0];\n if (entry?.isIntersecting) {\n // on bottom of the wrapper load more news\n if (visibleRows < Math.ceil(newsCount / itemsPerRow)) {\n setVisibleRows((prev) => prev + 1);\n }\n }\n }, options);\n observer.observe(element);\n }\n\n return () => {\n if (observer) observer.disconnect();\n };\n }, [itemsPerRow, newsCount, visibleRows, observerSupported]);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? getColors(theme).dark\n : hasBack\n ? getColors(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper addWhitespace>\n {title && (\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n )}\n {tags && (\n <TagContainer>\n {tags.sort().map((tag, i) => {\n return (\n <TagWrapper key={'tag_' + i}>\n <Tag\n isInverted={isInverted}\n onClick={() => {\n if (!onTagClick) {\n // if no callback is defined handle filtering on client side inside the component\n setSelectedTag(\n selectedTag === tag\n ? undefined\n : tag\n );\n } else onTagClick(tag, false);\n }}\n isActive={selectedTag === tag}\n >\n {tag}\n </Tag>\n </TagWrapper>\n );\n })}\n </TagContainer>\n )}\n <List>\n {news &&\n news\n .filter((item) =>\n selectedTag ? item.tag === selectedTag : true\n )\n .filter((_, i) => i < visibleRows * itemsPerRow)\n .map((item, i) => {\n return (\n <div key={i} ref={cardRefs[i]}>\n <NewsCard\n isInverted={isInverted}\n onTagClick={(name) => {\n // scroll back to top\n setNewPos(0);\n if (!onTagClick) {\n // if no callback is defined handle filtering on client side inside the component\n setSelectedTag(\n selectedTag === name\n ? undefined\n : name\n );\n } else {\n onTagClick(name, true);\n }\n }}\n {...item}\n />\n </div>\n );\n })}\n </List>\n <div ref={targetRef} />\n {!observerSupported && (\n <ListFooter>\n {news && news.length > 0 && (\n <Copy\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n >\n <ShowMore\n itemCount={news.length}\n onClick={(ev) => {\n ev.preventDefault();\n if (\n visibleRows <\n Math.ceil(newsCount / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows < newsCount / itemsPerRow && (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMoreText ||\n 'mehr anzeigen'}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n </Copy>\n )}\n </ListFooter>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsOverview;\n","import { useEffect, useState } from 'react';\n\nexport const useObserverSupport = (inital?: boolean) => {\n const [observerSupported, setObserverSupport] = useState(inital || false);\n\n useEffect(() => {\n if (\n !('IntersectionObserver' in window) ||\n !('IntersectionObserverEntry' in window) ||\n !('intersectionRatio' in window.IntersectionObserverEntry.prototype)\n ) {\n setObserverSupport(false);\n } else {\n setObserverSupport(true);\n }\n }, []);\n\n return observerSupported;\n};\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.a<{ inverted?: boolean; disable?: boolean }>`\n min-height: 3em;\n height: 3.65em;\n min-width: 210px;\n padding: 0.1em 1.2em;\n\n display: inline-block;\n display: inline-flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: ${({ theme }) => font(theme).copy.medium.weight};\n text-align: center;\n text-decoration: none;\n line-height: 1;\n letter-spacing: ${({ theme }) => font(theme).copy.medium.letterSpacing};\n\n perspective: 1000;\n -webkit-font-smoothing: subpixel-antialiased;\n -webkit-perspective: 1000;\n -moz-osx-font-smoothing: grayscale;\n will-change: auto;\n\n outline: none;\n border: none;\n user-select: none;\n cursor: pointer;\n\n pointer-events: ${({ disable }) => (disable ? 'none' : 'all')};\n\n // will-change: transform;\n\n background-color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).light\n : inverted\n ? color(theme).dark\n : color(theme).light};\n text-align: left;\n\n transition: all ease-in-out 0.2s;\n\n & > * {\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).light\n : inverted\n ? color(theme).dark\n : color(theme).light};\n }\n\n & > :not(:last-child) {\n padding-right: ${spacings.nudge}px;\n }\n\n &:hover {\n transform: scale(1.02);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\ninterface Props {\n isInverted?: boolean;\n isDisabled?: boolean;\n onClick?: () => void;\n className?: string;\n}\n\nexport type BtnProps = Props & {\n as?: 'button';\n};\n\nexport type LinkProps = Props & {\n as?: 'a';\n href?: string;\n isExternal?: boolean;\n};\n\nconst Button: React.FC<BtnProps | LinkProps> = React.forwardRef(\n (\n { as, isInverted, isDisabled, onClick, className, children, ...rest },\n ref\n ) => {\n if (as === 'button') {\n return (\n <View\n ref={ref}\n as={as as any}\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n } else {\n return (\n <View\n ref={ref}\n as={as as any}\n href={(rest as LinkProps).href}\n target={\n (rest as LinkProps).isExternal ? '_blank' : undefined\n }\n rel={\n (rest as LinkProps).isExternal\n ? 'noopener noreferrer'\n : undefined\n }\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n }\n }\n);\n\nButton.displayName = 'Button';\n\nconst Icon = styled.div<{ iconColor?: string }>`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n width: 35px;\n height: 35px;\n\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).primary.medium};\n\n transition: transform 0.2s ease-in-out;\n\n ${View}:hover > & {\n transform: translateX(3px);\n }\n`;\n\nconst Label = styled.span`\n display: inline-block;\n`;\n\nexport default { View: Button, Label: Label, Icon: Icon };\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.a<{ inverted?: boolean; disable?: boolean }>`\n min-height: 3em;\n height: 3.65em;\n min-width: 210px;\n padding: 0.1em 1.2em;\n\n display: inline-block;\n display: inline-flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: ${({ theme }) => font(theme).copy.medium.weight};\n text-align: center;\n text-decoration: none;\n line-height: 1;\n letter-spacing: ${({ theme }) => font(theme).copy.medium.letterSpacing};\n\n perspective: 1000;\n -webkit-font-smoothing: subpixel-antialiased;\n -webkit-perspective: 1000;\n -moz-osx-font-smoothing: grayscale;\n will-change: auto;\n\n outline: none;\n box-shadow: none;\n border: solid 1px\n ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n user-select: none;\n cursor: pointer;\n\n pointer-events: ${({ disable }) => (disable ? 'none' : 'all')};\n\n // will-change: transform;\n\n background-color: transparent;\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n text-align: center;\n\n transition: all ease-in-out 0.2s;\n\n & > * {\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n }\n\n & > :not(:last-child) {\n padding-right: ${spacings.nudge}px;\n }\n\n &:hover {\n transform: scale(1.04);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\ninterface Props {\n isInverted?: boolean;\n isDisabled?: boolean;\n onClick?: () => void;\n className?: string;\n}\n\nexport type BtnProps = Props & {\n as?: 'button';\n};\n\nexport type LinkProps = Props & {\n as?: 'a';\n href?: string;\n isExternal?: boolean;\n};\n\nconst ButtonGhost: React.FC<BtnProps | LinkProps> = React.forwardRef(\n (\n { as, isInverted, isDisabled, onClick, className, children, ...rest },\n ref\n ) => {\n if (as === 'button') {\n return (\n <View\n ref={ref}\n as={as as any}\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n } else {\n return (\n <View\n ref={ref}\n as={as as any}\n href={(rest as LinkProps).href}\n target={\n (rest as LinkProps).isExternal ? '_blank' : undefined\n }\n rel={\n (rest as LinkProps).isExternal\n ? 'noopener noreferrer'\n : undefined\n }\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n }\n }\n);\n\nButtonGhost.displayName = 'Button Ghost';\n\nconst Icon = styled.div<{ iconColor?: string }>`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n width: 35px;\n height: 35px;\n\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).primary.medium};\n\n transition: transform 0.2s ease-in-out;\n\n ${View}:hover > & {\n transform: translateX(3px);\n }\n`;\n\nconst Label = styled.span`\n display: inline-block;\n`;\n\nexport default { View: ButtonGhost, Label: Label, Icon: Icon };\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.form`\n width: 100%;\n display: flex;\n flex-direction: column;\n\n color: ${({ theme }) => color(theme).mono.dark};\n\n @media ${mq.medium} {\n flex-direction: row;\n }\n`;\n\nconst InputField = styled.input<{ backColor?: string }>`\n display: block;\n width: 100%;\n height: 100%;\n max-height: 49px;\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 3.5}px;\n color: inherit;\n\n background-color: ${({ backColor }) => backColor && backColor};\n box-shadow: none;\n border: none;\n border-right: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n font-family: ${({ theme }) => font(theme).copy.small.family};\n font-weight: ${({ theme }) => font(theme).copy.small.weight};\n ${({ theme }) => withRange(font(theme).copy.small.size, 'font-size')}\n line-height: ${({ theme }) => font(theme).copy.small.lineHeight};\n\n &::placeholder {\n color: inherit;\n }\n`;\n\nconst SubmitBtn = styled.button<{ isInverted?: boolean }>`\n display: inline-flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 49px;\n\n margin-top: ${spacings.spacer * 0.5}px;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).dark : color(theme).light};\n\n outline: none;\n border: none;\n user-select: none;\n cursor: pointer;\n transition: all ease-in-out 0.2s;\n\n @media ${mq.medium} {\n width: 100px;\n margin-top: 0;\n }\n\n &:hover {\n transform: scale(1.05);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst CompactForm: FC<{\n isInverted?: boolean;\n value?: string;\n placeholder?: string;\n method?: string;\n action?: string;\n buttonIcon?: React.ReactNode;\n onSubmit?: (ev: React.SyntheticEvent<HTMLFormElement>) => void;\n onClick?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onFocus?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onBlur?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n backgroundStyle?: 'white' | 'grey';\n className?: string;\n}> = ({\n isInverted = false,\n value,\n placeholder,\n method,\n action,\n buttonIcon,\n onSubmit,\n onClick,\n onBlur,\n onFocus,\n backgroundStyle = 'grey',\n className,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <View\n onSubmit={onSubmit}\n method={method}\n action={action}\n className={className}\n >\n <InputField\n placeholder={placeholder}\n value={value}\n onClick={onClick}\n onBlur={onBlur}\n onFocus={onFocus}\n backColor={\n backgroundStyle === 'grey' || isInverted\n ? color(theme).mono.light\n : color(theme).light\n }\n />\n {buttonIcon && (\n <SubmitBtn isInverted={isInverted}>{buttonIcon}</SubmitBtn>\n )}\n </View>\n );\n};\n\nexport default CompactForm;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.div<{ isInverted?: boolean }>`\n position: relative;\n width: 100%;\n display: flex;\n flex-direction: row;\n\n color: ${({ theme }) => color(theme).dark};\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).mono.light};\n`;\n\nconst InputField = styled.input<{\n hasLeftIcon?: boolean;\n hasRightIcon?: boolean;\n}>`\n display: block;\n width: 100%;\n height: 100%;\n padding: ${spacings.nudge * 3}px ${spacings.nudge * 3.5}px;\n padding-left: ${({ hasLeftIcon }) =>\n hasLeftIcon && spacings.spacer * 2.5 + 'px'};\n padding-right: ${({ hasRightIcon }) =>\n hasRightIcon && spacings.spacer * 2.5 + 'px'};\n color: inherit;\n\n background-color: transparent;\n box-shadow: none;\n border: none;\n border-right: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n font-family: ${({ theme }) => font(theme).copy.small.family};\n font-weight: 400;\n ${({ theme }) => withRange(font(theme).copy.small.size, 'font-size')}\n line-height: 1.25;\n\n &::placeholder {\n color: inherit;\n }\n`;\n\nconst ControlBtn = styled.button<{ isInverted?: boolean }>`\n display: inline-flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 53px;\n\n margin: -2px;\n background-color: transparent;\n color: ${({ theme }) => color(theme).dark};\n\n outline: none;\n border: none;\n user-select: none;\n cursor: pointer;\n /* transition: all ease-in-out 0.2s; */\n\n &:hover {\n transform: scale(1.02);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst SubmitBtn = styled(ControlBtn)`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n`;\n\nconst ClearBtn = styled(ControlBtn)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n`;\n\nconst SearchInput: FC<{\n isInverted?: boolean;\n value?: string;\n placeholder?: string;\n submitIcon?: React.ReactNode;\n clearIcon?: React.ReactNode;\n onSubmit?: () => void;\n onClear?: () => void;\n onClick?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onBlur?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onFocus?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n className?: string;\n}> = ({\n isInverted = false,\n value,\n placeholder,\n submitIcon,\n clearIcon,\n onSubmit,\n onClick,\n onClear,\n onBlur,\n onFocus,\n className,\n}) => {\n const handleKeyDown = (ev: React.KeyboardEvent<HTMLInputElement>) => {\n if (ev.keyCode === 13) {\n onSubmit && onSubmit();\n ev.preventDefault();\n }\n };\n\n return (\n <View isInverted={isInverted} className={className}>\n {submitIcon && (\n <SubmitBtn\n isInverted={isInverted}\n onClick={() => onSubmit && onSubmit()}\n >\n {submitIcon}\n </SubmitBtn>\n )}\n <InputField\n hasLeftIcon={submitIcon !== undefined}\n hasRightIcon={clearIcon !== undefined}\n placeholder={placeholder}\n value={value}\n onClick={onClick}\n onBlur={onBlur}\n onFocus={onFocus}\n onKeyDown={handleKeyDown}\n />\n {clearIcon && (\n <ClearBtn\n isInverted={isInverted}\n onClick={() => onClear && onClear()}\n >\n {clearIcon}\n </ClearBtn>\n )}\n </View>\n );\n};\n\nexport default SearchInput;\n","import { CookieConsentData } from 'components/blocks/CookieConsent';\nimport { Cookie } from './cookie';\nimport StatusFormatter from '../statusFormatter';\n\nexport const isUrlInWhitelist = (\n urlString: string,\n whitelist: string[] = []\n) => {\n let isInWhiteList = false;\n for (let i = 0; i < whitelist.length; i++) {\n if (urlString.indexOf(whitelist[i]) > -1) {\n isInWhiteList = true;\n break;\n }\n }\n return isInWhiteList;\n};\n\nexport const bindConsentButtons = (callback: () => void) => {\n const allConsentButtons = document.querySelectorAll(\n '[data-consent-button], .cookie-consent-button'\n );\n\n for (let i = 0, len = allConsentButtons.length; i < len; i++) {\n allConsentButtons[i].addEventListener('click', callback);\n }\n};\n\nexport const activateTrackingScripts = () => {\n const scriptElements = document.querySelectorAll(\n \"script[type='text/consent_banner_script'], script[type='text/cookie-consent-script']\"\n );\n\n let i = scriptElements.length;\n const newScriptElements: HTMLScriptElement[] = [];\n while (i--) {\n // create new script element to call it\n const newScriptElement = document.createElement('script');\n newScriptElement.type = 'text/javascript';\n\n if (scriptElements[i].hasAttribute('src')) {\n newScriptElement.src = scriptElements[i].getAttribute('src')!;\n newScriptElement.async = true;\n } else {\n newScriptElement.innerHTML = scriptElements[i].innerHTML;\n }\n\n // add new script tags to list\n newScriptElements.push(newScriptElement);\n\n // delete old helper element\n if (scriptElements[i].parentNode) {\n // eslint-disable-next-line no-unused-expressions\n scriptElements[i].parentNode?.removeChild(scriptElements[i]);\n }\n }\n\n // append new script tags\n i = newScriptElements.length;\n while (i--) {\n // append / activate script\n document.body.appendChild(newScriptElements[i]);\n }\n};\n\nexport const updateConsentStatusElements = ({\n cookie,\n status,\n dateFormat,\n timeFormat,\n localeKey = 'en',\n}: {\n cookie: Cookie<CookieConsentData>;\n status: string;\n dateFormat: string;\n timeFormat: string;\n localeKey: 'de' | 'en';\n}) => {\n const allConsentStatusElements = document.querySelectorAll(\n '[data-consent-status], .cookie-consent-status'\n );\n\n // render status inside defined dom elements without react\n const formatter = new StatusFormatter(\n cookie?.data.updatedAt,\n status,\n dateFormat,\n timeFormat,\n localeKey\n );\n\n for (let i = 0, len = allConsentStatusElements.length; i < len; i++) {\n allConsentStatusElements[i].innerHTML = formatter.getFormattedStatus();\n }\n};\n","import Actions from 'components/blocks/Actions';\nimport Copy from 'components/typography/Copy';\nimport React, { FC, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { Cookie, getCookie, setCookie } from 'utils/cookie-consent/cookie';\nimport {\n activateTrackingScripts,\n bindConsentButtons,\n isUrlInWhitelist,\n updateConsentStatusElements,\n} from 'utils/cookie-consent/mutations';\nimport { getColors as color, mq, spacings } from 'utils/styles';\n\nconst Stage = styled.div<{ zIndex?: number; bgOpacity?: number }>`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: rgba(0, 0, 0, ${({ bgOpacity }) => bgOpacity || 0.4});\n z-index: ${({ zIndex }) => zIndex || 1000};\n`;\n\nconst View = styled.div`\n box-sizing: border-box;\n max-width: 850px;\n width: 100vw;\n max-height: 100vh;\n padding: ${spacings.spacer}px ${spacings.spacer * 1.5}px;\n position: fixed;\n bottom: 0;\n left: 50%;\n transform: translate(-50%, 0);\n text-align: center;\n\n background-color: ${({ theme }) => color(theme).light};\n box-shadow: 0 2px 44px rgba(0, 0, 0, 0.3);\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n bottom: ${spacings.spacer * 1.5}px;\n }\n\n @media ${mq.medium} {\n padding: ${spacings.spacer * 2}px;\n }\n`;\n\nexport interface CookieConfig {\n cookieName?: string;\n\n /** URL's that should be excluded from consent */\n urlWhitelist?: string[];\n consentAcceptStatusMsg?: string;\n consentDeclineStatusMsg?: string;\n noCookieStatusMsg?: string;\n dateFormat?: string;\n timeFormat?: string;\n lifetime?: number;\n localeKey?: 'de' | 'en';\n zIndex?: number;\n overlayOpacity?: number;\n}\n\ntype RenderProps = {\n handleAccept: () => void;\n handleDecline: () => void;\n additionalDeclineProps: {\n ['data-gtm']: string;\n };\n additionalAcceptProps: {\n ['data-gtm']: string;\n };\n};\n\nexport interface CookieConsentData {\n consent: boolean;\n updatedAt: number;\n}\n\nexport const CookieConsent: FC<\n CookieConfig & {\n className?: string;\n children?: (props: RenderProps) => React.ReactElement;\n }\n> = ({\n cookieName = 'cookie-consent',\n urlWhitelist,\n consentAcceptStatusMsg = 'Akzeptiert am %DATE% um %TIME% Uhr',\n consentDeclineStatusMsg = 'Abgelehnt am %DATE% um %TIME% Uhr',\n noCookieStatusMsg = '-',\n dateFormat = 'dd.mm.yy',\n timeFormat = 'hh:mm',\n lifetime = 365,\n localeKey = 'de',\n zIndex,\n overlayOpacity = 0.4,\n className,\n children,\n}) => {\n const [isVisible, setIsVisible] = useState(false);\n\n useEffect(() => {\n bindConsentButtons(() => setIsVisible(true));\n\n const cookie = getCookie(cookieName) as Cookie<CookieConsentData>;\n const containsWhitelist = isUrlInWhitelist(\n window.location.pathname,\n urlWhitelist\n );\n if (!containsWhitelist) setIsVisible(!cookie);\n if (cookie && cookie.data.consent) {\n activateTrackingScripts();\n }\n }, [cookieName, urlWhitelist]);\n\n useEffect(() => {\n const cookie = getCookie(cookieName) as Cookie<CookieConsentData>;\n\n const str = !cookie\n ? noCookieStatusMsg\n : cookie.data.consent\n ? consentAcceptStatusMsg\n : consentDeclineStatusMsg;\n\n updateConsentStatusElements({\n cookie,\n status: str,\n dateFormat,\n timeFormat,\n localeKey,\n });\n }, [\n consentAcceptStatusMsg,\n consentDeclineStatusMsg,\n cookieName,\n dateFormat,\n isVisible,\n localeKey,\n noCookieStatusMsg,\n timeFormat,\n ]);\n\n if (!isVisible) return null;\n return (\n <Stage zIndex={zIndex} bgOpacity={overlayOpacity}>\n <View className={className}>\n {children &&\n children({\n handleDecline: () => {\n console.log('decline');\n setCookie<CookieConsentData>({\n name: cookieName,\n data: {\n consent: false,\n updatedAt: new Date().getTime(),\n },\n days: lifetime,\n });\n setIsVisible(false);\n },\n handleAccept: () => {\n console.log('accept');\n setCookie<CookieConsentData>({\n name: cookieName,\n data: {\n consent: true,\n updatedAt: new Date().getTime(),\n },\n days: lifetime,\n });\n setIsVisible(false);\n activateTrackingScripts();\n },\n additionalAcceptProps: {\n ['data-gtm']: 'button-cookie-consent-accept',\n },\n additionalDeclineProps: {\n ['data-gtm']: 'button-cookie-consent-decline',\n },\n })}\n </View>\n </Stage>\n );\n};\n\n/** Example Cookie icon */\nexport const CookieIcon = styled.img`\n display: block;\n margin: 0 auto;\n`;\n\n/** Example Cookie title */\nconst TitleView = styled(Copy)`\n max-width: 670px;\n margin-left: auto;\n margin-right: auto;\n`;\n\nexport const CookieTitle: FC<{\n innerHTML?: string;\n className?: string;\n}> = ({ innerHTML, className, children }) => {\n return (\n <TitleView\n size=\"big\"\n type=\"copy-b\"\n innerHTML={innerHTML}\n className={className}\n >\n {children}\n </TitleView>\n );\n};\n\n/** Example Cookie title */\nconst TextView = styled(Copy)`\n max-width: 670px;\n margin-left: auto;\n margin-right: auto;\n`;\n\nexport const CookieText: FC<{\n innerHTML?: string;\n className?: string;\n}> = ({ innerHTML, className, children }) => {\n return (\n <TextView innerHTML={innerHTML} className={className}>\n {children}\n </TextView>\n );\n};\n\n/** Example Cookie actions */\nexport const CookieActions = styled(Actions)`\n max-width: 670px;\n margin-top: ${spacings.spacer * 1.5}px;\n`;\n\nexport default CookieConsent;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Cross: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"35\"\n height=\"35\"\n viewBox=\"0 0 35 35\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M35 2.77995L32.2201 0 17.5 14.7201 2.77995 0 0 2.77995 14.7201 17.5 0 32.2201 2.77995 35 17.5 20.2799 32.2201 35 35 32.2201 20.2799 17.5 35 2.77995z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Cross;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Wrapper from 'components/base/Wrapper';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\n} from 'utils/styles';\nimport Cross from 'components/base/icons/Cross';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { LogoProps } from '../Navigation';\n\nconst View = styled.div<{ isOpen?: boolean }>`\n position: absolute;\n top: 0;\n left: 0;\n height: 100vh;\n width: 100%;\n overflow: hidden;\n pointer-events: none;\n\n transform: translate(${({ isOpen }) => (isOpen ? '0%' : '-100%')});\n\n transition: transform 0.2s cubic-bezier(0.71, 0, 0.29, 1);\n will-change: transform;\n`;\n\nconst StyledWrapper = styled(Wrapper)`\n height: 100%;\n`;\n\nconst Stage = styled.div<{\n isOpen?: boolean;\n isLarge?: boolean;\n isInverted?: boolean;\n}>`\n height: 100%;\n width: 100%;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).dark : color(theme).light};\n pointer-events: all;\n\n @media ${mq.semilarge} {\n width: ${({ isLarge }) => !isLarge && '40vw'};\n max-width: ${({ isLarge }) => (isLarge ? undefined : '500px')};\n }\n\n &:after {\n content: ${({ isLarge }) => !isLarge && `\"\"`};\n position: absolute;\n top: 0;\n left: 1px;\n bottom: 0;\n width: 40vw;\n\n transform: translateX(-100%);\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).dark : color(theme).light};\n }\n`;\n\nconst Header = styled.div`\n display: flex;\n max-width: ${spacings.wrapper}px;\n\n padding-top: ${spacings.spacer}px;\n padding-bottom: ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n padding: ${spacings.nudge * 7}px 0 ${spacings.nudge * 3}px 0;\n }\n`;\n\nconst Content = styled.div<{ isLarge?: boolean }>`\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n max-width: ${spacings.wrapper}px;\n margin: 0 auto;\n padding-left: ${spacings.spacer}px;\n padding-bottom: ${spacings.nudge * 3}px;\n\n @media ${mq.semilarge} {\n padding-left: ${(1 / 28) * 100}%;\n padding-left: max(${spacings.spacer}px, ${(1 / 28) * 100}vw);\n padding-right: ${({ isLarge }) => isLarge && spacings.spacer + 'px'};\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst HeaderCol = styled.div`\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n position: relative;\n color: ${({ theme }) => color(theme).light};\n\n transition: padding-top 0.2s ease-in-out;\n`;\n\nconst LeftCol = styled(HeaderCol)`\n flex: 1;\n justify-content: flex-start;\n align-self: flex-start;\n text-align: left;\n\n ${withRange([spacings.nudge, spacings.nudge * 1.5], 'padding-top')}\n`;\n\nconst CenterCol = styled(HeaderCol)`\n padding: 0 ${spacings.nudge * 2}px;\n text-align: center;\n`;\n\nconst RightCol = styled(HeaderCol)`\n flex: 1;\n justify-content: flex-end;\n text-align: right;\n\n ${withRange([spacings.nudge, spacings.nudge * 1.5], 'padding-top')}\n\n & > * {\n min-width: auto;\n }\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.semilarge} {\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n }\n`;\n\nconst ToggleContainer = styled.div<{ iconColor?: string }>`\n cursor: pointer;\n padding: ${spacings.nudge * 2}px;\n margin: -${spacings.nudge * 2}px;\n\n color: ${({ iconColor }) => iconColor && iconColor};\n`;\n\nconst StyledMenuClose = styled(Cross)`\n margin-top: ${spacings.nudge}px;\n`;\n\nconst SearchContainer = styled.div<{ isLarge?: boolean }>`\n display: flex;\n justify-content: center;\n width: 100%;\n padding-right: ${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n & > * {\n max-width: ${({ isLarge }) => isLarge && '355px'};\n }\n }\n`;\n\nconst LogoLink = styled(Link)`\n display: flex;\n justify-content: center;\n position: relative;\n\n color: ${({ theme }) => color(theme).light};\n transition: height 0.2s ease-in-out, width 0.2s ease-in-out;\n will-change: height, width;\n\n & > * {\n max-height: 100%;\n height: 100%;\n }\n`;\n\nconst ScrollArea = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n height: 100%;\n overflow-y: auto;\n\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')};\n margin-left: -${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n padding-bottom: ${spacings.spacer * 4.5}px;\n\n & > * {\n flex: 1 1 auto;\n flex-shrink: 0;\n }\n`;\n\ntype FlyoutMq = 'semilarge' | 'large';\n\nconst Flyout: FC<{\n isOpen?: boolean;\n isLarge?: boolean;\n isInverted?: boolean;\n toggleIcon?: (isInverted?: boolean) => React.ReactNode;\n logo?: LogoProps;\n primaryAction?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n secondaryAction?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n search?: (isInverted?: boolean) => React.ReactNode;\n onCloseClick?: () => void;\n className?: string;\n}> = ({\n isOpen = false,\n isLarge = false,\n isInverted = false,\n toggleIcon,\n logo,\n primaryAction,\n secondaryAction,\n search,\n onCloseClick,\n className,\n children,\n}) => {\n const theme = useContext(ThemeContext);\n const mqs: FlyoutMq[] = ['semilarge', 'large'];\n const currentMq = useMediaQuery(mqs) as FlyoutMq | undefined;\n\n return (\n <View isOpen={isOpen} className={className}>\n <StyledWrapper clampWidth={isLarge ? 'large' : 'normal'}>\n <Stage\n isOpen={isOpen}\n isLarge={isLarge}\n isInverted={isInverted}\n >\n <Content isLarge={isLarge}>\n <Header>\n <LeftCol>\n <ToggleContainer\n onClick={onCloseClick}\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n >\n {toggleIcon ? (\n toggleIcon(isInverted)\n ) : (\n <StyledMenuClose\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n />\n )}\n </ToggleContainer>\n {search && (\n <SearchContainer isLarge={isLarge}>\n {search(isInverted)}\n </SearchContainer>\n )}\n </LeftCol>\n {isLarge &&\n (currentMq === 'semilarge' ||\n currentMq === 'large') && (\n <>\n <CenterCol>\n {logo && (\n <LogoLink href={logo.link}>\n {logo.icon &&\n logo.icon({\n isInverted: isInverted,\n name: 'menu_logo',\n size:\n currentMq !==\n 'large'\n ? 'small'\n : 'full',\n })}\n </LogoLink>\n )}\n </CenterCol>\n <RightCol>\n {secondaryAction &&\n secondaryAction({\n isInverted,\n name: 'menu_secondaryCta',\n size:\n currentMq === 'large'\n ? 'desktop'\n : 'mobile',\n })}\n {primaryAction &&\n primaryAction({\n isInverted,\n name: 'menu_primaryCta',\n size:\n currentMq === 'large'\n ? 'desktop'\n : 'mobile',\n })}\n </RightCol>\n </>\n )}\n </Header>\n <ScrollArea>{children}</ScrollArea>\n </Content>\n </Stage>\n </StyledWrapper>\n </View>\n );\n};\n\nexport interface NavGroup {\n id: string;\n name?: string;\n isSmall?: boolean;\n items?: NavItem[];\n}\n\nexport interface NavItem {\n id?: string;\n label?: string;\n link?: LinkProps;\n onClick?: (id?: string, fullId?: string) => void;\n}\n\nconst NavListView = styled.ul<{ isLarge?: boolean }>`\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n\n list-style: none;\n padding: 0;\n margin: 0;\n\n & > * {\n ${withRange([spacings.nudge * 3, spacings.spacer], 'margin-top')};\n }\n\n @media ${mq.medium} {\n flex-direction: ${({ isLarge }) => (isLarge ? 'row' : 'column')};\n\n & > * {\n flex: ${({ isLarge }) => (isLarge ? '1 0 260px' : '1')};\n }\n }\n`;\n\nconst Nav = styled.nav<{ isInverted?: boolean }>`\n display: block;\n width: calc(100% + ${spacings.spacer}px);\n margin-left: -${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n`;\n\nconst Group = styled.li`\n flex: 1 1 auto;\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: 300;\n line-height: ${({ theme }) => font(theme).copy.medium.lineHeight};\n\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-right')};\n\n hyphens: auto;\n overflow-wrap: break-word;\n\n &:not(:last-child) {\n ${withRange([spacings.nudge * 3, spacings.spacer], 'margin-bottom')};\n }\n`;\n\nconst GroupLabel = styled.label`\n display: block;\n height: 30px;\n padding-bottom: ${spacings.nudge * 2}px;\n`;\n\nconst GroupLabelSpacer = styled.label`\n display: none;\n height: 30px;\n\n @media ${mq.medium} {\n display: block;\n }\n`;\n\nconst ItemContainer = styled.ul`\n list-style: none;\n margin: 0;\n padding: 0;\n color: inherit;\n`;\n\nconst NavItem = styled.li<{ isSmall?: boolean }>`\n position: relative;\n margin: 0;\n padding-bottom: ${spacings.nudge}px;\n\n font-family: ${({ theme }) => font(theme)['heading-3'].family};\n ${({ theme, isSmall }) =>\n withRange(\n isSmall\n ? font(theme)['heading-4'].size\n : font(theme)['heading-3'].size,\n 'font-size'\n )}\n font-weight: 700;\n line-height: ${({ theme, isSmall }) =>\n isSmall\n ? font(theme)['heading-4'].lineHeight\n : font(theme)['heading-3'].lineHeight};\n\n color: inherit;\n hyphens: auto;\n overflow-wrap: break-word;\n cursor: pointer;\n user-select: none;\n\n & + & {\n padding-top: ${spacings.nudge}px;\n }\n\n & > li {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n`;\n\nconst ItemLink = styled(Link)`\n display: inline-block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n`;\n\nconst ItemLabel = styled.label<{ isActive?: boolean; isInverted?: boolean }>`\n display: inline-block;\n position: relative;\n border-bottom: solid 2px transparent;\n pointer-events: none;\n\n transition: border 0.2s ease-in-out;\n\n ${ItemLink}:hover + & {\n border-bottom: solid 2px ${({ theme }) => color(theme).primary.medium};\n }\n\n &:before {\n content: ${({ isActive }) => (isActive ? `\"\"` : undefined)};\n position: absolute;\n left: -13px;\n top: 50%;\n height: 6px;\n width: 6px;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 4px;\n\n transform: translateY(-50%);\n }\n`;\n\nconst NavList: FC<{\n isInverted?: boolean;\n activeNavItem?: string;\n navGroups?: NavGroup[];\n isLarge?: boolean;\n className?: string;\n}> = ({\n isInverted = false,\n activeNavItem,\n navGroups,\n isLarge = false,\n className,\n}) => {\n const [activeGroup, activeItem] = activeNavItem\n ? activeNavItem?.split('.')\n : [];\n\n return (\n <Nav isInverted={isInverted}>\n <NavListView isLarge={isLarge} className={className}>\n {navGroups &&\n navGroups.map((group, i) => (\n <Group key={i}>\n {group.name ? (\n <GroupLabel>{group.name}</GroupLabel>\n ) : (\n isLarge && <GroupLabelSpacer />\n )}\n <ItemContainer>\n {group.items &&\n group.items\n .filter((item) => {\n return item.label && item.link;\n })\n .map((item, itemIndex) => (\n <NavItem\n key={itemIndex}\n isSmall={group.isSmall}\n onClick={() =>\n item.onClick &&\n item.onClick(\n item.id,\n group.id + '.' + item.id\n )\n }\n >\n <ItemLink {...item.link} />\n <ItemLabel\n isActive={\n activeGroup ===\n group.id &&\n activeItem === item.id\n }\n isInverted={isInverted}\n >\n {item.label}\n </ItemLabel>\n </NavItem>\n ))}\n </ItemContainer>\n </Group>\n ))}\n </NavListView>\n </Nav>\n );\n};\n\nexport default {\n View: Flyout,\n NavList: NavList,\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { mq, spacings } from 'utils/styles';\nimport Flyout, { NavGroup } from './Flyout';\nimport SocialList from 'components/blocks/SocialList';\nimport { LogoProps } from '../Navigation';\n\nconst View = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n width: 100%;\n z-index: 10;\n`;\n\nconst Backdrop = styled.div<{ isVisible?: boolean; opacity?: number }>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100vh;\n background-color: rgba(\n 0,\n 0,\n 0,\n ${({ isVisible, opacity }) => (isVisible ? opacity : 0)}\n );\n\n pointer-events: ${({ isVisible }) => !isVisible && 'none'};\n transition: background-color 0.2s ease-in-out;\n`;\n\nconst SocialContainer = styled.div<{ isLarge?: boolean }>`\n display: flex;\n justify-content: flex-start;\n padding-top: ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n justify-content: ${({ isLarge }) =>\n isLarge ? 'flex-end' : 'flex-start'};\n }\n\n @media ${mq.xlarge} {\n padding-right: ${({ isLarge }) => isLarge && spacings.spacer}px;\n }\n`;\ninterface MenuProps {\n isOpen?: boolean;\n size?: 'small' | 'full';\n isInverted?: boolean;\n backdropOpacity?: number;\n toggleIcon?: (isInverted?: boolean) => React.ReactNode;\n logo?: LogoProps;\n primaryAction?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n secondaryAction?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n search?: (isInverted?: boolean) => React.ReactNode;\n activeNavItem?: string;\n navItems?: NavGroup[];\n socials?: Array<{ icon: React.ReactNode; href: string }>;\n onCloseClick?: () => void;\n}\n\nconst Menu: FC<MenuProps> = ({\n isOpen = false,\n size = 'small',\n isInverted = false,\n backdropOpacity = 0.4,\n toggleIcon,\n logo,\n primaryAction,\n secondaryAction,\n search,\n activeNavItem,\n navItems,\n socials,\n onCloseClick,\n}) => {\n return (\n <View>\n <Backdrop\n isVisible={isOpen}\n opacity={backdropOpacity}\n onClick={onCloseClick}\n />\n <Flyout.View\n isOpen={isOpen}\n isLarge={size === 'full'}\n isInverted={isInverted}\n onCloseClick={onCloseClick}\n toggleIcon={toggleIcon}\n logo={logo}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n search={search}\n >\n {navItems && (\n <Flyout.NavList\n activeNavItem={activeNavItem}\n navGroups={navItems}\n isLarge={size === 'full'}\n isInverted={isInverted}\n />\n )}\n {socials && (\n <SocialContainer isLarge={size === 'full'}>\n <SocialList\n isInverted={isInverted}\n items={socials.map((item) => {\n return {\n href: item.href,\n icon: item.icon,\n };\n })}\n />\n </SocialContainer>\n )}\n </Flyout.View>\n </View>\n );\n};\n\nexport default Menu;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst MenuBurger: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"31\"\n height=\"37\"\n viewBox=\"0 0 31 37\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fill={iconColor}\n d=\"M3.89556 33.59887c.05495.10804.10504.22107.15029.33926.04848.11472.09534.23122.14059.34932a11.78855 11.78855 0 01.1406-.35946c.04847-.1181.10018-.23122.15513-.33917l2.0749-4.0556c.02587-.05064.05172-.09113.07758-.12147.02909-.03035.0598-.05234.0921-.06587.03557-.01343.07435-.02189.11637-.02527s.0921-.00507.15028-.00507h.98413v7.32121H6.8286V31.9078c0-.08775.00162-.18396.00485-.28853a11.4408 11.4408 0 01.02423-.31897L4.73916 35.452c-.04848.09452-.1115.16874-.18907.22277-.07757.05064-.16806.0759-.2715.0759h-.17936c-.10343 0-.19392-.02526-.2715-.0759-.07755-.05403-.14059-.12825-.18906-.22277l-2.1476-4.16692c.01292.11143.021.22107.02423.32912.00647.10457.0097.20247.0097.2936v4.72895H.37607v-7.32121h.98413c.05817 0 .10827.00169.15028.00507s.07918.01184.11151.02527c.03555.01353.06787.03552.09696.06587s.05655.07083.08241.12147zM14.68715 29.31574v1.08346H11.5796v2.03034h2.44823v1.04805h-2.44823v2.07082h3.10754v1.08854h-4.42137v-7.32121zM17.37336 29.31574c.05815 0 .10665.00338.14539.01014.03883.00339.07279.01353.10186.03035.0323.01353.06304.03542.09211.06586.02908.02696.06138.06408.097.11133l3.6796 4.896a6.80536 6.80536 0 01-.02917-.34424c-.00322-.11481-.00478-.22107-.00478-.31897v-4.45047h1.14893v7.32121h-.67384c-.10343 0-.1891-.01691-.25692-.05064-.0679-.03373-.13416-.09452-.19875-.18227l-3.66508-4.8757c.00966.10795.0161.216.01932.32404.00654.10457.00976.20078.00976.28853v4.49604h-1.14903v-7.32121zM27.71523 35.53797c.25213 0 .47675-.04388.67385-.13163.20041-.08775.36843-.21103.50416-.36962.13904-.15869.24403-.351.31516-.57725.07436-.22614.11153-.47925.11153-.75942v-4.38461h1.30408v4.3846c0 .43549-.06791.83883-.20364 1.21013-.1325.36792-.32482.6869-.57686.95691-.25213.26664-.55753.47587-.91631.6278-.35869.14854-.76274.22276-1.21197.22276s-.85329-.07422-1.21197-.22276c-.35878-.15193-.66418-.36116-.91632-.6278-.2488-.27002-.44113-.58899-.57685-.9569-.1325-.37131-.19876-.77465-.19876-1.21013v-4.38461h1.30408v4.37954c0 .28016.03551.53337.10664.75952.07436.22614.17935.42015.31507.58222.13582.1586.30219.28187.49938.36962.20042.08775.4266.13163.67873.13163z\"\n />\n <path\n fill={iconColor}\n d=\"M.37597 1.2769h30.24794M7.25006 11.0904H30.6239M.37597 20.90398h30.24794M.37597.28198v1.98984h30.24794V.28198zm6.874 9.8132V12.085H30.6238v-1.98984zm-6.874 9.81319v1.98984h30.24794v-1.98984z\"\n />\n </SVG>\n);\n\nexport default MenuBurger;\n","import MenuBurger from 'components/base/icons/MenuBurger';\nimport Wrapper from 'components/base/Wrapper';\nimport Link from 'components/typography/Link';\nimport React, { FC, useContext, useEffect, useRef, useState } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { spacings, getColors as color, mq, withRange } from 'utils/styles';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { ScrollDirection, useScroll } from 'utils/useScroll';\nimport { LogoProps } from './Navigation';\n\nconst TopWhitespace = styled.div<{ logoHeight?: number; showLarge?: boolean }>`\n width: 100%;\n height: ${({ logoHeight, showLarge }) =>\n logoHeight ? logoHeight + (showLarge ? 25 : 10) + 'px' : '140px'};\n\n @media ${mq.semilarge} {\n height: ${({ logoHeight, showLarge }) =>\n logoHeight ? logoHeight + (showLarge ? 50 : 30) + 'px' : '140px'};\n }\n`;\n\nconst View = styled.div<{\n isVisible?: boolean;\n isLarge?: boolean;\n showLarge?: boolean;\n isOpen?: boolean;\n isInverted?: boolean;\n animated?: boolean;\n allowOffset?: boolean;\n isBackVisible?: boolean;\n}>`\n position: ${({ isLarge }) => (isLarge ? 'absolute' : 'fixed')};\n top: 0;\n left: 0;\n right: 0;\n width: 100%;\n z-index: 10;\n max-width: ${spacings.wrapperLarge}px;\n padding: ${({ showLarge, isOpen }) =>\n !showLarge && isOpen ? spacings.nudge : spacings.spacer}px\n 0 ${spacings.nudge}px 0;\n margin: 0 auto;\n overflow: hidden;\n\n background-color: ${({\n theme,\n isInverted,\n isLarge,\n isBackVisible,\n allowOffset,\n }) =>\n isBackVisible\n ? isInverted\n ? (!isLarge || !allowOffset) &&\n `rgba(0, 0, 0, ${!isLarge ? 0.3 : 0})`\n : (!isLarge || !allowOffset) && color(theme).light\n : 'transparent'};\n\n box-shadow: 0px 4px 4px\n ${({ isInverted, isLarge, isOpen, isBackVisible }) =>\n isInverted || !isBackVisible\n ? `transparent`\n : isOpen && !isLarge\n ? `rgba(0, 0, 0, 0.13)`\n : 'transparent'};\n\n opacity: ${({ isVisible }) => (isVisible ? 1 : 0)};\n pointer-events: ${({ isVisible }) => (isVisible ? 'all' : 'none')};\n\n transform: translate(0, ${({ isOpen }) => (!isOpen ? '-100%' : '0')});\n\n transition: ${({ animated }) =>\n animated ? 'transform 0.3s cubic-bezier(.71,0,.29,1),' : ''}\n height 0.2s ease-in-out,\n background-color 0.3s ease-in-out, padding 0.2s ease-in-out,\n box-shadow 0.2s ease-in-out, opacity 0.2s ease-in-out;\n will-change: transform, background-color, padding, height, box-shadow,\n opacity;\n\n @media ${mq.semilarge} {\n padding: ${({ showLarge, isOpen }) =>\n !showLarge && isOpen\n ? spacings.nudge * 3\n : spacings.nudge * 7}px\n 0 ${spacings.nudge * 3}px 0;\n }\n`;\n\nconst Content = styled(Wrapper)`\n position: relative;\n display: flex;\n flex-direction: row;\n width: 100%;\n height: 100%;\n\n padding: 0 ${({ addWhitespace }) => (addWhitespace ? spacings.spacer : 0)}px;\n\n @media ${mq.semilarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * 100 : 0}%;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * spacings.wrapper : 0}px;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n`;\n\nconst Column = styled.div<{\n isTop?: boolean;\n}>`\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n position: relative;\n color: ${({ theme }) => color(theme).light};\n\n transition: padding-top 0.2s ease-in-out;\n`;\n\nconst LeftCol = styled(Column)`\n flex: 1;\n justify-content: flex-start;\n align-self: ${({ isTop }) => (isTop ? 'flex-start' : 'center')};\n text-align: left;\n\n ${({ isTop }) =>\n isTop &&\n withRange([spacings.nudge, spacings.nudge * 1.5], 'padding-top')}\n`;\n\nconst CenterCol = styled(Column)`\n display: flex;\n align-self: ${({ isTop }) => (isTop ? 'flex-start' : 'center')};\n padding: 0 ${spacings.nudge * 2}px;\n text-align: center;\n`;\n\nconst RightCol = styled(Column)`\n flex: 1;\n justify-content: flex-end;\n align-self: ${({ isTop }) => (isTop ? 'flex-start' : 'center')};\n text-align: right;\n\n ${({ isTop }) =>\n isTop &&\n withRange([spacings.nudge, spacings.nudge * 1.5], 'padding-top')}\n\n & > * {\n min-width: auto;\n }\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.semilarge} {\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n }\n`;\n\nconst ToggleContainer = styled.div<{ iconColor?: string }>`\n cursor: pointer;\n padding: ${spacings.nudge * 2}px;\n margin: -${spacings.nudge * 2}px;\n\n color: ${({ iconColor }) => iconColor && iconColor};\n`;\n\nconst StyledMenuBurger = styled(MenuBurger)`\n margin-top: ${spacings.nudge}px;\n`;\n\nconst LogoLink = styled(Link)<{ logoHeight?: number }>`\n display: flex;\n justify-content: center;\n position: relative;\n height: ${({ logoHeight }) => logoHeight && logoHeight + 'px'};\n width: auto;\n\n color: ${({ theme }) => color(theme).light};\n transition: height 0.2s ease-in-out, width 0.2s ease-in-out;\n will-change: height, width;\n\n & > * {\n max-height: 100%;\n height: 100%;\n }\n`;\n\nconst clampValue = (num: number, min: number, max: number) => {\n return Math.min(Math.max(num, min), max);\n};\n\ntype TopBarMq = 'semilarge' | 'large';\n\nconst TopBar: FC<{\n isVisible?: boolean;\n isBackVisible?: boolean;\n isInverted?: boolean;\n allowTopOverlow?: boolean;\n isLargeOnPageTop?: boolean;\n onToggleClick?: () => void;\n toggleIcon?: (isInverted?: boolean) => React.ReactNode;\n logo?: LogoProps;\n primaryAction?: (props: {\n isInverted?: boolean;\n size?: 'mobile' | 'desktop';\n name?: string;\n }) => React.ReactNode;\n secondaryAction?: (props: {\n isInverted?: boolean;\n size?: 'mobile' | 'desktop';\n name?: string;\n }) => React.ReactNode;\n className?: string;\n}> = ({\n isVisible = true,\n isInverted = false,\n isBackVisible = true,\n allowTopOverlow = true,\n isLargeOnPageTop = true,\n onToggleClick,\n toggleIcon,\n logo,\n primaryAction,\n secondaryAction,\n className,\n}) => {\n const theme = useContext(ThemeContext);\n const viewRef = useRef<HTMLDivElement | null>(null);\n const [isOpen, setIsOpen] = useState(true);\n const [isLarge, setIsLarge] = useState(true);\n const [isAnimated, setIsAnimated] = useState(false);\n const defaultLogoScale: Pick<\n LogoProps,\n 'pageTopScale' | 'scrolledScale'\n > = {\n pageTopScale: {\n mobile: 1,\n desktop: 1,\n ...logo?.pageTopScale,\n },\n scrolledScale: {\n mobile: 0.6,\n desktop: 0.6,\n ...logo?.scrolledScale,\n },\n };\n\n const mqs: TopBarMq[] = ['semilarge', 'large'];\n const currentMq = useMediaQuery(mqs) as TopBarMq | undefined;\n\n const { isTop, isInOffset, scrollDirection, setTopOffset } = useScroll({});\n\n useEffect(() => {\n if (!isInOffset) {\n if (scrollDirection === ScrollDirection.UP) {\n setIsOpen(true);\n setIsAnimated(true);\n } else if (scrollDirection === ScrollDirection.DOWN) {\n setIsOpen(false);\n }\n }\n }, [isInOffset, scrollDirection]);\n\n useEffect(() => {\n if (!isInOffset && !isTop) {\n setIsLarge((prev) => {\n if (prev) setIsAnimated(false);\n return false;\n });\n }\n }, [isInOffset, isLarge, isTop]);\n\n useEffect(() => {\n if (isTop) setIsLarge(true);\n }, [isTop]);\n\n // check if top bar is inverted\n const isBarInverted =\n (isLarge && allowTopOverlow) || isInverted || !isBackVisible;\n\n // get scale factor of topbar logo\n let logoScale = 1;\n // get scale for current media query\n const scalePageTop =\n defaultLogoScale.pageTopScale?.[\n currentMq === 'large' ? 'desktop' : 'mobile'\n ];\n const scaleScrolled =\n defaultLogoScale.scrolledScale?.[\n currentMq === 'large' ? 'desktop' : 'mobile'\n ];\n\n const scale = (isLargeOnPageTop ? isLarge : false)\n ? scalePageTop\n : scaleScrolled;\n if (scale !== undefined) logoScale = scale;\n\n // calc logo height\n const logoHeight = clampValue(115 * logoScale, 60, 300);\n const logoTopHeight =\n scalePageTop &&\n scaleScrolled &&\n clampValue(\n 115 * (isLargeOnPageTop ? scalePageTop : scaleScrolled),\n 60,\n 300\n );\n\n // calculate top scroll offset\n useEffect(() => {\n const showLarge = isLargeOnPageTop ? isLarge : false;\n\n if (currentMq === 'large') {\n setTopOffset(logoHeight + (showLarge ? 25 : 10));\n } else {\n setTopOffset(logoHeight + (showLarge ? 50 : 30));\n }\n }, [setTopOffset, currentMq, isLargeOnPageTop, isLarge, logoHeight]);\n\n return (\n <>\n {!allowTopOverlow && (\n <TopWhitespace\n showLarge={isLargeOnPageTop}\n logoHeight={logoTopHeight}\n />\n )}\n <View\n ref={viewRef}\n isInverted={isInverted}\n isVisible={isVisible}\n isBackVisible={isBackVisible}\n isOpen={isOpen}\n isLarge={isLarge}\n showLarge={isLargeOnPageTop ? isLarge : false}\n animated={isAnimated}\n allowOffset={allowTopOverlow}\n className={className}\n >\n <Content clampWidth=\"normal\" addWhitespace>\n <LeftCol isTop={isLargeOnPageTop ? isLarge : false}>\n <ToggleContainer\n onClick={onToggleClick}\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n >\n {toggleIcon ? (\n toggleIcon(isBarInverted)\n ) : (\n <StyledMenuBurger\n iconColor={\n isBarInverted\n ? color(theme).light\n : color(theme).dark\n }\n />\n )}\n </ToggleContainer>\n </LeftCol>\n <CenterCol isTop={isLargeOnPageTop ? isLarge : false}>\n {logo && (\n <LogoLink href={logo.link} logoHeight={logoHeight}>\n {logo.icon &&\n logo.icon({\n isInverted: isBarInverted,\n name: 'topbar_logo',\n size:\n currentMq !== 'large' ||\n !(isLargeOnPageTop\n ? isLarge\n : false)\n ? 'small'\n : 'full',\n })}\n </LogoLink>\n )}\n </CenterCol>\n <RightCol isTop={isLargeOnPageTop ? isLarge : false}>\n {secondaryAction &&\n secondaryAction({\n isInverted: isBarInverted,\n name: 'topbar_secondaryCta',\n size:\n currentMq === 'large'\n ? 'desktop'\n : 'mobile',\n })}\n {primaryAction &&\n primaryAction({\n isInverted: isBarInverted,\n name: 'topbar_primaryCta',\n size:\n currentMq === 'large'\n ? 'desktop'\n : 'mobile',\n })}\n </RightCol>\n </Content>\n </View>\n </>\n );\n};\n\nexport default TopBar;\n","import React, { FC, useEffect, useState } from 'react';\nimport { NavGroup } from './menu/Flyout';\nimport Menu from './menu/Menu';\n\nimport TopBar from './TopBar';\n\nexport interface LogoProps {\n icon?: (props: {\n isInverted?: boolean;\n size?: 'full' | 'small';\n name?: string;\n }) => React.ReactNode;\n link?: string;\n pageTopScale?: {\n // icon scale factor\n mobile?: number;\n desktop?: number;\n };\n /** Logo scale if is shown from scroll up */\n scrolledScale?: {\n /** Default is 0.6 */\n mobile?: number;\n desktop?: number;\n };\n}\n\nexport interface NavProps {\n isLargeMenu?: boolean;\n isMenuInverted?: boolean;\n isTopbarInverted?: boolean;\n activeNavItem?: string;\n navItems?: NavGroup[];\n backdropOpacity?: number;\n socials?: Array<{ icon: React.ReactNode; href: string }>;\n logo?: LogoProps;\n /** Allow overflow of topbar over content if page is on top */\n allowTopbarOverflow?: boolean;\n /** Hide topbar background if menu overlay is open */\n hideTopbarBackUnderMenu?: boolean;\n isTopbarLargeOnPageTop?: boolean;\n primaryCta?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n secondaryCta?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n search?: (isInverted?: boolean) => React.ReactNode;\n openMenuIcon?: (isInverted?: boolean) => React.ReactNode;\n closeMenuIcon?: (isInverted?: boolean) => React.ReactNode;\n}\n\nconst Navigation: FC<NavProps> = ({\n isMenuInverted,\n isLargeMenu,\n activeNavItem,\n navItems,\n socials,\n search,\n logo,\n backdropOpacity,\n primaryCta,\n secondaryCta,\n isTopbarInverted,\n allowTopbarOverflow,\n hideTopbarBackUnderMenu,\n isTopbarLargeOnPageTop,\n openMenuIcon,\n closeMenuIcon,\n}) => {\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n\n const sharedProps = {\n logo: logo,\n primaryAction: primaryCta,\n secondaryAction: secondaryCta,\n };\n\n useEffect(() => {\n document.body.style.overflow = isMenuOpen ? 'hidden' : 'visible';\n }, [isMenuOpen]);\n\n return (\n <>\n <TopBar\n isBackVisible={hideTopbarBackUnderMenu ? !isMenuOpen : true}\n isInverted={isTopbarInverted}\n allowTopOverlow={allowTopbarOverflow}\n isLargeOnPageTop={isTopbarLargeOnPageTop}\n toggleIcon={openMenuIcon}\n onToggleClick={() => setIsMenuOpen(true)}\n {...sharedProps}\n />\n <Menu\n isOpen={isMenuOpen}\n backdropOpacity={backdropOpacity}\n size={isLargeMenu ? 'full' : 'small'}\n isInverted={isMenuInverted}\n activeNavItem={activeNavItem}\n navItems={navItems}\n socials={socials}\n search={search}\n onCloseClick={() => setIsMenuOpen(false)}\n toggleIcon={closeMenuIcon}\n {...sharedProps}\n />\n </>\n );\n};\n\nexport default Navigation;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowRight: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"18\"\n height=\"13\"\n viewBox=\"0 0 18 13\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M1.85397 7.42546H14.5657L10.533 11.4322c-.1753.1887-.263.4064-.263.6532 0 .2468.0877.4646.263.6533.1899.1742.4091.2613.6575.2613.2484 0 .4676-.0871.6575-.2613l5.6107-5.57454c.0438-.05807.0876-.10888.1315-.15243.0438-.04356.0657-.08711.0657-.13066.0439-.10162.0658-.21775.0658-.34841 0-.13065-.0219-.2613-.0658-.39196-.0438-.05806-.0767-.10887-.0986-.15242-.0219-.04356-.0548-.08711-.0986-.13066L11.848.28308c-.0877-.10162-.1826-.1742-.2849-.21775C11.4608.02178 11.3366 0 11.1905 0c-.1315 0-.2484.02178-.3507.06533s-.2045.11613-.3068.21775c-.1753.18873-.263.40648-.263.65327s.0877.46454.263.65327l4.0327 3.98492H1.85397c-.29223 0-.52235.08347-.69038.25042s-.25204.39559-.25204.68593c0 .27582.08401.49721.25204.66415.16803.16695.39815.25042.69038.25042z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default ArrowRight;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst CrossSmall: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 35 35\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M35 2.77995L32.2201 0 17.5 14.7201 2.77995 0 0 2.77995 14.7201 17.5 0 32.2201 2.77995 35 17.5 20.2799 32.2201 35 35 32.2201 20.2799 17.5 35 2.77995z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default CrossSmall;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Magnifier: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M19.6955 18.267l-4.4964-4.4965c.5464-.687.9836-1.491 1.3114-2.4122.3279-.9211.4918-1.88132.4918-2.88055 0-1.17096-.2263-2.27165-.6791-3.3021-.4372-1.03045-1.0422-1.92818-1.815-2.69321-.7728-.76504-1.6745-1.37393-2.7049-1.8267C10.7728.21858 9.67214 0 8.50117 0S6.22951.21858 5.19906.65574c-1.03045.45277-1.93208 1.06166-2.70492 1.8267-.77283.76503-1.37782 1.66276-1.81498 2.69321C.22638 6.2061 0 7.30679 0 8.47775c0 1.18658.22638 2.29505.67916 3.32555.43716 1.0304 1.04215 1.9282 1.81498 2.6932.77284.765 1.67447 1.3739 2.70492 1.8267 1.03045.4371 2.13114.6557 3.30211.6557.99922 0 1.94383-.1639 2.83373-.4918.8899-.3278 1.7096-.765 2.459-1.3115l4.4965 4.4965c.1093.1093.2303.1874.363.2342.1327.0469.2459.0703.3396.0703s.2068-.0234.3396-.0703c.1327-.0468.2537-.1249.3629-.2342.203-.2029.3045-.4371.3045-.7025 0-.2655-.1015-.4996-.3045-.7026zM2.01405 8.47775c0-.88993.16393-1.73301.4918-2.52927.34349-.78065.80796-1.4676 1.39345-2.06089.58548-.59329 1.27634-1.05386 2.0726-1.38173.78064-.34349 1.62372-.51523 2.52927-.51523.90555 0 1.74863.17174 2.52923.51523.7963.32787 1.4872.78844 2.0726 1.38173.5855.59329 1.05 1.28024 1.3935 2.06089.3279.79626.4918 1.63934.4918 2.52927 0 .90555-.1639 1.74865-.4918 2.52925-.3279.7807-.7963 1.4754-1.4052 2.0843-.5933.5933-1.2802 1.0578-2.0609 1.3935-.7806.3357-1.62368.5035-2.52923.5035-.90555 0-1.74863-.1717-2.52927-.5152-.79626-.3435-1.48712-.808-2.0726-1.3935-.58549-.5855-1.04996-1.2763-1.39345-2.0726-.32787-.7806-.4918-1.6237-.4918-2.52925z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Magnifier;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst FlyTo: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"52\"\n height=\"52\"\n viewBox=\"0 0 52 52\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M26 31.8229c1.5347 0 2.8889-.5868 4.0625-1.7604S31.8229 27.5347 31.8229 26s-.5868-2.8889-1.7604-4.0625S27.5347 20.1771 26 20.1771s-2.8889.5868-4.0625 1.7604S20.1771 24.4653 20.1771 26s.5868 2.8889 1.7604 4.0625S24.4653 31.8229 26 31.8229zm0-17.3333c3.1597 0 5.868 1.1284 8.125 3.3854 2.257 2.257 3.3854 4.9653 3.3854 8.125s-1.1284 5.868-3.3854 8.125c-2.257 2.257-4.9653 3.3854-8.125 3.3854s-5.868-1.1284-8.125-3.3854c-2.257-2.257-3.3854-4.9653-3.3854-8.125s1.1284-5.868 3.3854-8.125c2.257-2.257 4.9653-3.3854 8.125-3.3854zm20.1771 31.6875V34.6667H52v11.5104c0 1.5347-.5868 2.8889-1.7604 4.0625S47.7118 52 46.1771 52H34.6667v-5.8229h11.5104zm0-46.1771c1.5347 0 2.8889.5868 4.0625 1.76042C51.4132 2.93403 52 4.28819 52 5.82292V17.3333h-5.8229V5.82292H34.6667V0h11.5104zM5.82292 5.82292V17.3333H0V5.82292c0-1.53473.5868-2.88889 1.76042-4.0625C2.93403.5868 4.28819 0 5.82292 0H17.3333v5.82292H5.82292zm0 28.84378v11.5104H17.3333V52H5.82292c-1.53473 0-2.88889-.5868-4.0625-1.7604C.5868 49.066 0 47.7118 0 46.1771V34.6667h5.82292z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default FlyTo;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Star: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"34\"\n height=\"32\"\n viewBox=\"0 0 34 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M33.9231 12.1154l-11.8504-1.5523L16.9615 0l-5.1111 10.5631L0 12.1154l8.70793 7.9128L6.47416 31.5l10.48734-5.6412L27.4489 31.5l-2.2338-11.4718 8.708-7.9128z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Star;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst StarGhost: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"33\"\n height=\"31\"\n viewBox=\"0 0 33 31\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M32.0408 11.6671c-.0682-.2762-.2045-.4948-.409-.6559-.2045-.161-.4544-.2876-.7498-.3797l-9.3041-1.31165L17.3518.79391C17.1474.26463 16.7157 0 16.0568 0c-.6589 0-1.0906.26464-1.2951.79391l-4.2261 8.38787-9.16781 1.44972c-.29537 0-.55098.1036-.76683.3107-.21584.2071-.39193.4487-.52825.7249-.09089.2991-.09657.5868-.01704.8629.07952.2762.22152.4833.42601.6214l6.71398 6.6274-1.60181 9.4234c-.06816.2992-.04544.5811.06816.8457.11361.2646.28401.4775.51122.6386.20449.1381.44873.2301.73274.2761.28401.0461.5737 0 .86907-.138l8.28176-4.4183 8.2817 4.4183h.7498c.1363 0 .2783-.0288.426-.0863.1477-.0576.2897-.1324.426-.2244.2272-.1381.3976-.3394.5112-.6041.1136-.2646.1363-.5465.0682-.8457l-1.6019-9.4234 6.714-6.6274c.2045-.1611.3465-.3682.426-.6213.0796-.2532.0739-.4948-.017-.7249zm-9.7472 6.4894c-.1363.2301-.2386.4544-.3067.6731-.0682.2186-.1023.4314-.1023.6385l1.1588 7.2488-6.4073-3.4173c-.2272-.138-.4487-.2071-.6645-.2071-.2159 0-.4261.0691-.6305.2071l-6.4073 3.4173 1.2951-7.2488c0-.2071-.0341-.4199-.1023-.6385-.0681-.2187-.17037-.443-.30669-.6731l-5.2485-5.0051 7.12299-1.0356c.2272 0 .443-.0863.6475-.2589.2045-.1726.3749-.3279.5112-.466l3.2037-6.62742 3.2036 6.48942c.0681.2071.2045.3797.409.5177.2044.1381.4544.2071.7497.2071l7.123 1.0356-5.2485 5.1432z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default StarGhost;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Mail: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"25\"\n height=\"25\"\n viewBox=\"0 0 25 25\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fill={iconColor}\n d=\"M22.3988 2.6786c.61982 0 1.16669.24181 1.64061.72545.47402.48363.71098 1.0417.71098 1.6741v14.844c0 .6324-.23696 1.1905-.71098 1.6741-.47392.4836-1.0208.7255-1.64061.7255H2.60173c-.61979 0-1.16669-.2419-1.64061-.7255s-.71094-1.0417-.71094-1.6741v-14.844c0-.63244.23698-1.1905.71094-1.6741.47396-.48363 1.0208-.72545 1.64061-.72545zm-.27349 5.0781V5.3571l-9.62495 6.529-9.62504-6.529v2.3996l9.62504 6.529z\"\n />\n </SVG>\n);\n\nexport default Mail;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Phone: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"25\"\n height=\"25\"\n viewBox=\"0 0 25 25\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fill={iconColor}\n d=\"M23.92962 18.18155c1.4269 1.42053 1.4269 2.98303 0 4.6876-.57072.66283-1.12955 1.16-1.6765 1.49142-.54693.33151-.99875.52086-1.35545.56825-.3567.04729-.86797.07098-1.53382.07098-1.85494 0-4.06648-.94696-6.63472-2.84087-2.04518-1.46783-3.90002-3.05402-5.56462-4.75858-2.1402-2.22543-4.01882-4.75858-5.63596-7.59946C.10175 7.14937-.3263 4.97133.24443 3.26676c.28537-.89961.9512-1.68086 1.99752-2.3438l.07134-.07102c.8561-.56818 1.61704-.85227 2.28288-.85227.90366 0 1.71216.42613 2.42556 1.27837l.07134.07103C8.18695 2.7695 8.94791 3.88222 9.37595 4.6871c.7134 1.46782.68962 2.7225-.07134 3.76424-.57072.75758-.85608 1.30206-.85608 1.63348 0 .14206.30914.56825.92742 1.27847l.07134.07098c1.14144 1.27848 1.75972 1.965 1.85484 2.05968.04756 0 .09512.02369.14268.07108.04756.04729.09512.09467.14278.14196l.14268.14207c.9512.94705 1.64082 1.60988 2.06886 1.98869l.07134.07098c.42804.3788.7134.56825.85608.56825.2378 0 .92742-.3551 2.06886-1.06542.33292-.23674.73718-.35511 1.21288-.35511.85608 0 1.89052.3551 3.1033 1.06542 1.21278.71022 2.15209 1.39675 2.81793 2.05958z\"\n />\n </SVG>\n);\n\nexport default Phone;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Route: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"29\"\n height=\"30\"\n viewBox=\"0 0 29 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M28.629 13.5725L15.4275.371C15.1802.12367 14.871 0 14.5 0s-.6802.12367-.9275.371L.371 13.5725c-.24733.2679-.371.5823-.371.943 0 .3607.12367.6647.371.912L13.5725 28.629c.2473.2679.5565.4019.9275.4019s.6802-.134.9275-.4019L28.629 15.4275c.2473-.2473.371-.5513.371-.912s-.1237-.6751-.371-.943zm-11.5011 4.2356V14.5h-6.5853v3.9574H7.91471v-5.2559c0-.371.12882-.6853.38646-.943.25765-.2576.56166-.3864.91205-.3864h7.91468V8.56397l4.6376 4.63753-4.6376 4.6066z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Route;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Facebook: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M26.6012 0H3.32515C1.48872 0 0 1.48872 0 3.32515V26.6012c0 1.8364 1.48872 3.3252 3.32515 3.3252H14.9832v.0053h4.9877v-.0053h6.6303c1.8364 0 3.3252-1.4888 3.3252-3.3252V3.32515C29.9264 1.48872 28.4376 0 26.6012 0zm-6.6303 29.9264V18.2937h4.9877V13.306h-4.9877V9.98081c0-.91821.7444-1.66257 1.6626-1.66257h3.3251V3.33051h-4.1564c-3.2138 0-5.819 2.60526-5.819 5.81902V13.306H11.658v4.9877h3.3252v11.6327h4.9877z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Facebook;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst LinkedIn: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M29.9752 3.32515C29.9752 1.48872 28.4865 0 26.65 0H3.37398C1.53755 0 .04883 1.48872.04883 3.32515V26.6012c0 1.8364 1.48872 3.3252 3.32515 3.3252H26.65c1.8365 0 3.3252-1.4888 3.3252-3.3252V3.32515zM25.7835 16.9523v8.8116h-4.6386v-8.1965c0-1.2855-1.0421-2.3276-2.3276-2.3276-1.2802 0-2.311 1.0475-2.311 2.3276v8.1965h-4.6386V11.8482h4.6386v1.8454c.7981-1.2968 2.444-2.1613 3.8572-2.1613 2.9934 0 5.42 2.4266 5.42 5.42zM6.487 9.24675c1.54261 0 2.79313-1.25053 2.79313-2.79313 0-1.54619-1.24693-2.80975-2.79313-2.80975-1.55178 0-2.80975 1.25797-2.80975 2.80975 0 1.5462 1.26356 2.79313 2.80975 2.79313zM8.77571 11.855v13.9157H4.17037V11.855h4.60534z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default LinkedIn;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Twitter: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M26.6735 0H3.39742C1.56099 0 .07227 1.48872.07227 3.32515V26.6012c0 1.8364 1.48872 3.3252 3.32515 3.3252H26.6735c1.8364 0 3.3251-1.4888 3.3251-3.3252V3.32515C29.9986 1.48872 28.5099 0 26.6735 0zm.0131 8.17421c-.4157.88117-1.3467 1.6792-2.1448 2.34419-.1163 7.6811-5.0209 12.9349-12.3529 13.2674-3.02588.133-5.20385-.8313-7.11582-2.045 2.22785.3492 4.98772-.532 6.48402-1.7956-2.19457-.2327-3.47475-1.3466-4.08991-3.1256.63178.0998 1.29681.0665 1.89534-.0499-1.97847-.665-3.39166-1.8953-3.45816-4.4557.54865.266 1.13055.4988 1.89534.5487-1.4797-.8479-2.56037-3.9237-1.31344-5.95204 2.1946 2.41073 4.83813 4.37254 9.17743 4.63854-1.0973-4.65517 5.0708-7.18228 7.6478-4.07327 1.0973-.19951 1.9785-.59853 2.843-1.06405-.3491 1.06405-1.0308 1.84546-1.862 2.44399.8978-.11638 1.7124-.33252 2.3941-.68166z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Twitter;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Xing: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.04732 0C1.38475 0 .05469 1.33006.05469 2.99264V26.9337c0 1.6626 1.33006 2.9927 2.99263 2.9927H26.9884c1.6626 0 2.9926-1.3301 2.9926-2.9927V2.99264C29.981 1.33006 28.651 0 26.9884 0H3.04732zM21.782 3.33051h3.3917c.1995 0 .3657.06651.4323.21614.0997.14963.0997.33251 0 .5154L18.1742 17.2296l4.7384 8.6454c.0997.1829.0997.3658 0 .5154-.0831.133-.2328.2162-.4157.2162h-3.375c-.5154 0-.7814-.3492-.931-.6484l-4.7716-8.7452c.2327-.4156 7.4649-13.23408 7.4649-13.23408.1829-.33252.3991-.64841.8978-.64841zM10.1943 7.91799H6.85251c-.21613 0-.38239.08313-.46552.21614-.09975.18288-.0665.33251.01663.5154l2.2611 3.94027-3.55791 6.3012c-.0665.1829-.0665.3824 0 .5154.08313.1496.23276.2327.43227.2327h3.3584c.5154 0 .74816-.3325.93104-.6484 0 0 3.47478-6.1681 3.62438-6.4009L11.142 8.5664c-.1663-.31589-.4323-.64841-.9477-.64841z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Xing;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Instagram: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M25.6051 4.3945C22.67541 1.46476 19.1403 0 14.99951 0S7.32378 1.46486 4.39391 4.3945C1.46424 7.3242-.00061 10.85933-.00061 14.99987s1.46485 7.67574 4.39454 10.60538c2.92969 2.92972 6.4648 4.39458 10.6056 4.39458s7.67572-1.46486 10.60558-4.39458c2.9297-2.92964 4.39454-6.46476 4.39454-10.60538S28.5348 7.32413 25.6051 4.39449zm-1.23745 14.4139c0 1.56243-.53708 2.8808-1.61126 3.955-1.07426 1.0742-2.3926 1.61136-3.95511 1.61136h-7.61715c-1.52343 0-2.81252-.52735-3.8672-1.58204-1.05467-1.0547-1.6211-2.34374-1.69917-3.86715v-7.85156c.03906-1.5234.60546-2.81245 1.69917-3.86715 1.09376-1.05469 2.38277-1.58204 3.8672-1.58204h7.61715c1.56251 0 2.88085.5371 3.95511 1.61136 1.07418 1.0742 1.61126 2.39257 1.61126 3.9551zM18.81568 7.49976h-7.61714c-1.01568 0-1.88477.36132-2.60744 1.084-.72265.72268-1.08401 1.59176-1.08401 2.60742v7.6172c0 1.01558.36133 1.88474 1.084 2.60742.72268.72258 1.59177 1.08392 2.60745 1.08392h7.61714c1.01568 0 1.88477-.36134 2.60744-1.08392.72267-.72268 1.08392-1.59184 1.08392-2.60742v-7.6172c0-.97655-.37108-1.83591-1.11326-2.5781-.74217-.7422-1.6015-1.11332-2.5781-1.11332zm-.12235 11.19256c-.9766.97655-2.12885 1.46477-3.45703 1.46477-1.32809 0-2.48043-.48822-3.45702-1.46477-.9765-.97663-1.46485-2.1289-1.46485-3.45707 0-1.32808.48834-2.48043 1.46485-3.45698.97659-.97663 2.12893-1.46485 3.45702-1.46485 1.32818 0 2.48044.48822 3.45703 1.46485.9766.97655 1.46485 2.1289 1.46485 3.45698 0 1.32817-.48825 2.48044-1.46485 3.45707zm2.05094-7.79465c-.23442.23436-.50783.35154-.82034.35154s-.58592-.11718-.82034-.35154c-.23433-.23444-.3515-.50783-.3515-.82033s.11717-.58598.3515-.82034c.23442-.23435.50784-.35153.82034-.35153s.58592.11718.82034.35153c.23434.23436.3515.50783.3515.82034s-.11716.5859-.3515.82033zm-3.39449 2.22734c-.58592-.58598-1.289-.87897-2.10935-.87897s-1.52343.293-2.10935.87897c-.58592.5859-.87892 1.28905-.87892 2.1093 0 .82033.293 1.5235.87892 2.10938.58592.58598 1.28901.87889 2.10935.87889s1.52343-.2929 2.10935-.87889c.58601-.58589.87893-1.28905.87893-2.10938 0-.82025-.29292-1.5234-.87893-2.1093z\"\n clipRule=\"evenodd\"\n fillRule=\"evenodd\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Instagram;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Youtube: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"43\"\n height=\"30\"\n viewBox=\"0 0 43 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M17.19523 20.52408l11.27986-5.95252-11.27986-6.02397zM21.49983 0c2.61017 0 5.13098.03571 7.56251.10715 2.43154.07142 4.21437.14682 5.34859.22619l1.70128.09523c.01554 0 .14756.0119.39616.03572.2486.0238.42723.04762.53599.07142.10876.02382.29134.05953.54766.10715.25641.04762.4778.11111.66424.19048s.40397.18253.65257.30952c.2486.12698.48937.28174.72243.46428s.4583.39286.67583.63095c.09322.09524.21366.24206.36122.44047.14765.19841.3729.6627.67591 1.39282.30293.73016.50878 1.5317.61754 2.40476.1243 1.0159.22138 2.0992.29135 3.25.06987 1.15082.11262 2.05163.12816 2.70235v4.19049c.01553 2.30161-.1243 4.60314-.4195 6.90476-.10877.87298-.30294 1.66266-.58261 2.36903s-.52827 1.19444-.74579 1.46428l-.32628.40476c-.21752.23806-.44277.44838-.67583.63097-.23306.1825-.47384.3333-.72243.45233s-.46612.21823-.65257.29767c-.18644.07935-.40783.14282-.66424.1904-.25632.04766-.44276.08339-.55925.10718-.11657.02378-.2952.04766-.53608.07145-.24078.02379-.36894.03573-.38448.03573-3.89976.30152-8.77055.45233-14.61202.45233-3.21612-.03177-6.00888-.0833-8.37826-.15476s-3.92688-.13097-4.67267-.17854l-1.14195-.09524-.83899-.09525c-.55932-.07935-.9827-.1587-1.2701-.23815-.28744-.07935-.68362-.24596-1.18856-.49991-.50495-.25404-.94382-.57944-1.31671-.97621-.09323-.09524-.21363-.2421-.36123-.44049-.1476-.19838-.37288-.66266-.67585-1.39282s-.50883-1.53178-.6176-2.40476c-.1243-1.01589-.2214-2.0992-.2913-3.25-.06992-1.15081-.11264-2.05162-.12818-2.70234V13.3809c-.01554-2.30162.12429-4.60315.4195-6.90477.10876-.87302.30296-1.66266.58263-2.36903.27966-.70635.52825-1.19444.74576-1.46427l.32628-.40477c.21752-.23809.4428-.4484.67585-.63094s.47387-.33731.72246-.46429c.24859-.12699.4661-.23016.65255-.30952.18644-.07937.40784-.14286.6642-.19048.25635-.04762.4389-.08333.54767-.10714.10876-.02381.28743-.04762.53602-.07143.24858-.02381.38065-.03571.39619-.03571 3.89976-.28572 8.77046-.42857 14.61202-.42857z\"\n clipRule=\"evenodd\"\n fillRule=\"evenodd\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Youtube;\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","Symbol","iterator","v","op","TypeError","pop","push","__spreadArray","to","from","il","j","__makeTemplateObject","cooked","raw","defineProperty","ScrollDirection","mq","medium","semilarge","large","xlarge","xxlarge","xxxLarge","spacings","nudge","spacer","wrapperSmall","wrapper","wrapperLarge","withRange","range","property","getSizeByRange","styleTextColor","fallbackColor","gradient","css","defaultColors","dark","light","mono","primary","secondary","tertiary","copyBase","family","weight","style","lineHeight","letterSpacing","size","textTransform","color","colorInverted","headingBase","defaultFonts","copy","small","big","copy-i","copy-b","super","heading-1","heading-2","heading-3","heading-4","callout","defaultGlobalSettings","sections","plainSeperation","imageTextGradient","newsDateFormat","newsTimeFormat","newsLocaleKey","getBaseTheme","colors","fonts","types","globalSettings","getColors","theme","getFonts","getGlobalSettings","isBrowser","window","document","checkMq","cmq","checkMqs","matchMedia","matches","getMediaQuery","useMediaQuery","mqs","_a","useState","mediaQuery","setMediaQuery","useEffect","handleResize","newMediaQuery","addEventListener","removeEventListener","useEqualSheetHeight","props","defaultResponsive","responsive","currentMq","itemsPerRow","sheetRefs","setSheetRefs","makeRows","index","arr","slice","resize","refs","identifierSizes","Map","identifiers","set","filter","ref","current","forEach","id","element","querySelector","removeAttribute","prevHeights","get","scrollHeight","key","heights","selector","reduce","rowHeights","highest","sort","vA","vB","x_1","el","setAttribute","setHeights","resizeHandler","Array","listLength","fill","map","createRef","triggerCalculation","setCookie","name","data","_b","days","_c","path","cookieString","valueString","dataKeys","keys","encodeURIComponent","substr","date","Date","setTime","getTime","toUTCString","cookie","getCookie","undefined","b","match","cookieValue","decodeURIComponent","valueArray","split","keyValueArray","cookieData","isNaN","Number","isBoolean","stringToBoolean","deleteCookie","useIE","initialValue","isIE","setIE","msTouchAction","useItemHeight","setElement","height","setHeight","calcHeight","offsetHeight","useScroll","initialTopOffset","onLeftOffset","onEnterOffset","topOffset","setTopOffset","_d","isTop","setIsTop","_e","isInOffset","setIsInOffset","_f","DOWN","scrollDirection","setScrollDirection","lastScrollPos","useRef","handleScroll","pageYOffset","prev","UP","useScrollTo","fallbackScrollDuration","startTime","firstPos","targetPos","setTargetPos","documentElement","scroll","top","left","behavior","animate_1","timestamp","elapsed","easeProgress","toFixed","newPos","scrollTo","cancelAnimationFrame","requestAnimationFrame","scrollTop","canUseWebP","elem","createElement","getContext","toDataURL","usePoster","posterImage","currentImage","setCurrentImage","workingImage","webp","useInterval","callback","delay","savedCallback","id_1","setInterval","clearInterval","useTouch","canTouch","setCanTouch","navigator","maxTouchPoints","msMaxTouchPoints","useImgPreload","imageUrls","isReady","setReady","isLoaded","setLoaded","loadedImages","setLoadedImages","items","requestedImages","img","src","res","Image","onload","url","preloadImages","item","x","find","image","items_1","_i","imgCount","hexToRgba","hex","alpha","rgb","parseInt","assignTo","target","source","output","sourceVal","targetVal","LibThemeProvider","children","combinedBaseTheme","tKey","isArray","sKey","assignFontBase","base","combinedTheme","React","ThemeProvider","View","styled","section","indent","Back","div","bgColor","bgMode","mode","bgValue","getBackground","Section","as","addSeperation","className","useContext","ThemeContext","React.createElement","addPlainSeperation","settings","clampWidth","Wrapper","addWhitespace","Img","Picture","picture","alt","coverSpace","onClick","srcSet","media","loading","BaseStyles","h1","textColor","textGradient","hyphens","type","font","Heading","isInverted","hasShadow","innerHTML","rest","React.useContext","tag","fontSettings","colorGradientInverted","colorGradient","dangerouslySetInnerHTML","__html","defaultProps","Title","colorMode","superTitle","superTitleAs","title","titleAs","isCentered","Copy","columns","isMirrored","Actions","StyledTitle","ContentBlock","StyledActions","Intro","text","primaryAction","secondaryAction","clampTitle","clampText","StyledIntro","ImgContainer","ImgWrapper","Gallery","hasBack","images","array","isFull","currentIndex","newIndex","isNextImgFull","gridSettings","cols","gutter","StyledCol","mediumSpan","span","semilargeSpan","largeSpan","xlargeSpan","mediumMove","move","semilargeMove","largeMove","xlargeMove","StyledGrid","Grid","valign","React.Children","comp","Row","Col","React.Fragment","StyledImage","ImgDescDesktop","ImgDescMobile","InfoWrapper","SubTextBlock","Teaser","intro","subText","getSectionBgMode","description","WideImage","TeaserWide","a","inverted","Pointer","React.forwardRef","isDisabled","disable","href","isExternal","rel","displayName","CursorState","Icon","Label","StyledSection","ListContainer","ItemContainer","ShowMore","itemCount","Items","ActionsWrapper","Item","ListFooter","IconList","showLessText","showMoreText","React.useState","showMore","setShowMore","isVisible","Content","ContentText","Article","asideText","withAsideText","isAside","ImageContainer","ArticleContent","Desc","Feature","ContentContainer","FeatureList","features","featureCount","cardRefs","isHalf","feature","global","LinkHelper","IntroContainer","PromotionCard","clickable","FlexGrid","FlexGridCol","PosterContainer","CrossPromotion","main","aside","card","Poster","hasContent","SVG","svg","Play","iconColor","width","viewBox","xmlns","d","bgImage","isActive","VideoControls","Iframe","iframe","VideoCard","embedId","playIcon","setIsActive","allow","Video","ContactView","Avatar","Info","Address","Decorator","AddressLabel","StyledContactBox","addresses","avatar","address","decorator","NewsletterWrapper","Badge","CallToAction","contact","badge","newsForm","FactsContainer","ul","FactsItem","li","Text","FactList","facts","icon","hasText","Fact","subTitle","FactFill","FactGrid","factCount","fact","TableContainer","TableBody","table","TableHead","th","TableData","td","TableBlock","row","tableTitle","rowTitle","ii","itemText","TableWrapper","Table","tableItems","withSeperation","ArrowLeftGhost","transform","ArrowRightGhost","MapContainer","FylToCtrlContainer","SliderContext","createContext","steps","currentStep","slickSettings","clickSideOffset","goToStep","nextStep","previousStep","isOnFirstStep","isOnLastStep","SlidesView","cursorPath","sameHeight","fullHeight","StyledSlider","SlickSlider","leftMargin","min","max","SlideView","spacing","ControlView","button","DotGroupView","initialStep","slideSpacing","cursorPaths","beforeChange","afterChange","onInit","slideCount","setSlideCount","sliderRef","setSliderRef","setCurrentStep","_g","visibleSlides","setVisibleSlides","_h","setSteps","dots","arrows","infinite","speed","slidesToScroll","slidesToShow","variableWidth","fade","swipe","cBreakpoint","state","breakpoint","itemsPerSlide","Math","floor","slides","Provider","setSlider","intNum","slickGoTo","context","cursor","setCursor","viewRef","setViewRef","mousePos","setMousePos","getCursorPath","NEXT","PREV","handleClick","ev","stopPropagation","isSlideControl","classList","contains","isAnchor","HTMLAnchorElement","parentElement","rect","getBoundingClientRect","relMouseX","Children","count","Consumer","values","onMouseMove","clientX","disabled","stepsArray","setStepsArray","containerRef","onReady","attribution","activeMarkerId","markers","center","zoom","touchZoom","scrollWheelZoom","onlyScrollOnFocus","fitBoundsPadding","onMarkerClick","onFlyToClick","flyToControl","onActiveMarkerChanged","cRef","prevMarkerId","_j","L","setLeaflet","_k","setMap","_l","markersLayer","setMarkersLayer","_m","cElement","mapContainerRef","import","leaflet","map_1","once","enable","tileLayer","addTo","markersLayer_1","FeatureGroup","showAllMarkers","fitBounds","getBounds","padding","point","flyToPosition","position","flyTo","flyToActive","marker","m","clearLayers","markerIcon","iconUrl","iconSize","sizeActive","iconAnchor","anchorActive","anchor","riseOnHover","on","addLayer","markerId","goTo","showAll","CardWrapper","SliderWrapper","InfoCardView","CardHeader","ContactList","ContactListLabel","LocationInfoCard","location","meta","c","Controls","StyledDotGroup","Slider","DotWrapper","Dot","StyledControl","flyToZoom","initialLocation","locations","allMarkersOnInit","controlNext","controlPrev","dot","activeLocation","setActiveLocation","locIndex","findIndex","loc","FieldHead","Field","input","InfoMessage","ErrorMessage","Textfield","lightBg","errorMessage","infoMessage","placeholder","isRequired","onChange","hasError","required","Area","textarea","Textarea","CheckboxContainer","Original","Box","isSelected","StyledCheck","stroke","Checkbox","checked","FieldsContainer","FlexContainer","ActionWrapper","Form","submitAction","onSubmit","formFields","checkbox","yupValidationSchema","validation","Formik","initialValues","surname","phone","area","mail","check","validate","errors","validationSchema","obj","handleSubmit","setFieldValue","isValid","dirty","preventDefault","constructor","additionalProps","ArrowLeftRight","fillRule","clipRule","clamp","num","Images","BackgroundImg","ForegroundContainer","hasAnim","initalValue","ForegroundImg","ForegroundOverlay","ImageLabel","ForegroundLabel","BackgroundLabel","ControlContainer","Control","ComparisonSlider","foregroundImg","backgroundImg","foregroundLabel","backgroundLabel","overlayColor","labelColor","dragControl","enableControlAnim","slideValue","setSlideValue","isHolding","setIsHolding","isDragging","setIsDragging","interacted","setInteracted","sideOffset","setSideOffset","controlRef","offsetWidth","handleInitalLoad","observer","IntersectionObserver","entries","isIntersecting","unobserve","rootMargin","threshold","observe","readyState","setCurrentPos","relativeClientX","percentage","currentTarget","onMouseDown","onMouseUp","onMouseLeave","onTouchMove","touches","onTouchStart","onTouchEnd","hasTransition","Head","IntroBlock","TopControls","StyledSlides","Footer","CtrlWrapper","CtrlWrapperLeft","CtrlWrapperRight","CarouselBase","variableWidths","child","ImageCarousel","imageCount","FullWidthImg","StyledWrapper","FeatureCarousel","PromotionCarousel","promotions","promotionCount","promotion","VideoCarousel","videos","videoCount","video","Link","Bdot","IconItemView","StyledLink","SocialList","MainView","topSpace","hAlign","LogoLink","ContactData","SiteLinksView","SiteLink","LinkWrapper","BottomWrapper","BottomView","logo","columnTopSpace","contactData","siteLinks","newsTitle","newsText","socials","bottomLinks","brandIcon","siteLinksColLeft","ceil","siteLinksColRight","link","direction","getBgImage","AnimationContainer","PosterImage","AnimationImage","scale","opacity","AnimationImages","intervalRef","activeImg","setActiveImg","changeImage","setTimeout","backgroundImage","zIndex","HeaderKenBurns","React.useEffect","loadedForMq","useWebp_1","PosterView","HeaderPoster","Callout","PlaceholderImg","AutoplayVideo","HeaderVideo","placeholderImg","videoUrl","isMobile","muted","autoPlay","loop","onCanPlayThrough","header","HeaderWrapper","PosterContent","PosterContentMobile","StyledPoster","Header","sizeScale","primaryCta","secondaryCta","withTopGradient","customTopGradient","customBottomGradient","topGradient","bottomGradient","content","showOnMobile","Seperator","ContentFlex","Author","StyledCopy","NewsAuthorCard","author","Tag","dateFormat","timeFormat","localeKey","dddd","weekDays","_this","long","getDay","DDDD","ddd","short","DDD","dd","DD","MMMM","monthNames","getMonth","mmmm","MMM","mmm","mm","MM","yyyy","getYear","YYYY","yy","YY","hh","getHours","HH","hs","getHours12h","HS","getMinutes","ss","getSeconds","SS","ap","AP","StatusFormatter","placeholders","%DATE%","getFormattedDate","%TIME%","getFormattedTime","replace","foundString","dateReplacements","formattedDate","RegExp","timeReplacements","formattedTime","toString","getDoubleDigitString","getDate","getFullYear","hours","de","en","ImageLink","TitleLink","Main","NewsCard","onTagClick","publishDate","publishedAt","NewsFooter","news","newsCount","setItemsPerRow","visibleRows","setVisibleRows","ImageFlex","NewsImages","imageStyle","isSingleHalf","IntroHead","HeadTag","MetaBlock","NewsIntro","tags","News","NewsList","NewsTable","NewsText","NewsVideo","TagContainer","TagWrapper","List","NewsOverview","activeTag","queryParams","selected","decodeURI","selectedTag","setSelectedTag","targetRef","observerSupported","inital","setObserverSupport","IntersectionObserverEntry","useObserverSupport","setNewPos","entry","disconnect","Button","ButtonGhost","form","InputField","backColor","SubmitBtn","CompactForm","method","action","buttonIcon","onBlur","onFocus","backgroundStyle","ControlBtn","ClearBtn","SearchInput","submitIcon","clearIcon","onClear","hasLeftIcon","hasRightIcon","onKeyDown","keyCode","activateTrackingScripts","scriptElements","querySelectorAll","newScriptElements","newScriptElement","hasAttribute","getAttribute","async","parentNode","removeChild","appendChild","Stage","CookieConsent","cookieName","urlWhitelist","consentAcceptStatusMsg","consentDeclineStatusMsg","noCookieStatusMsg","lifetime","overlayOpacity","_o","setIsVisible","allConsentButtons","len","bindConsentButtons","urlString","whitelist","isInWhiteList","isUrlInWhitelist","pathname","consent","status","allConsentStatusElements","formatter","updatedAt","getFormattedStatus","updateConsentStatusElements","bgOpacity","handleDecline","console","log","handleAccept","additionalAcceptProps","additionalDeclineProps","CookieIcon","TitleView","CookieTitle","TextView","CookieText","CookieActions","Cross","HeaderCol","LeftCol","CenterCol","RightCol","ToggleContainer","StyledMenuClose","SearchContainer","ScrollArea","NavListView","Nav","nav","Group","GroupLabel","GroupLabelSpacer","NavItem","isSmall","ItemLink","ItemLabel","isOpen","isLarge","toggleIcon","search","onCloseClick","activeNavItem","navGroups","activeGroup","activeItem","group","itemIndex","Backdrop","SocialContainer","Menu","backdropOpacity","navItems","Flyout","MenuBurger","TopWhitespace","logoHeight","showLarge","isBackVisible","allowOffset","Column","StyledMenuBurger","clampValue","TopBar","allowTopOverlow","isLargeOnPageTop","onToggleClick","setIsOpen","setIsLarge","isAnimated","setIsAnimated","defaultLogoScale","pageTopScale","mobile","desktop","scrolledScale","isBarInverted","logoScale","scalePageTop","scaleScrolled","logoTopHeight","animated","Navigation","isMenuInverted","isLargeMenu","isTopbarInverted","allowTopbarOverflow","hideTopbarBackUnderMenu","isTopbarLargeOnPageTop","openMenuIcon","closeMenuIcon","isMenuOpen","setIsMenuOpen","sharedProps","overflow","ArrowRight","CrossSmall","Magnifier","FlyTo","Star","StarGhost","Mail","Phone","Route","Facebook","LinkedIn","Twitter","Xing","Instagram","Youtube"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../node_modules/tslib/tslib.es6.js","../src/utils/useScroll.ts","../src/utils/styles.ts","../src/utils/useMediaQuery.ts","../src/utils/useEqualSheetHeight.ts","../src/utils/cookie-consent/cookie.ts","../src/utils/useIE.ts","../src/utils/useItemHeight.ts","../src/utils/useScrollTo.ts","../src/utils/usePoster.ts","../src/utils/useInterval.ts","../src/utils/useTouch.ts","../src/utils/useImgPreload.ts","../src/utils/hexRgbConverter.ts","../src/utils/LibThemeProvider.tsx","../src/components/base/Section.tsx","../src/components/base/Wrapper.tsx","../src/components/blocks/Image.tsx","../src/components/typography/Heading.tsx","../src/components/blocks/Title.tsx","../src/components/typography/Copy.tsx","../src/components/blocks/Actions.tsx","../src/components/blocks/Intro.tsx","../src/components/sections/Gallery.tsx","../src/components/base/Grid.tsx","../src/components/sections/Teaser.tsx","../src/components/sections/TeaserWide.tsx","../src/components/buttons/Pointer.tsx","../src/components/blocks/Slider.tsx","../src/components/sections/IconList.tsx","../src/components/sections/Article.tsx","../src/components/blocks/Feature.tsx","../src/components/sections/FeatureList.tsx","../src/components/blocks/PromotionCard.tsx","../src/components/sections/CrossPromotion.tsx","../src/components/sections/Poster.tsx","../src/components/base/icons/Play.tsx","../src/components/blocks/VideoCard.tsx","../src/components/sections/Video.tsx","../src/components/sections/CallToAction.tsx","../src/components/sections/FactList.tsx","../src/components/blocks/Fact.tsx","../src/components/sections/FactGrid.tsx","../src/components/sections/Table.tsx","../src/components/base/icons/ArrowLeftGhost.tsx","../src/components/base/icons/ArrowRightGhost.tsx","../src/components/blocks/LeafletMap.tsx","../src/components/sections/Map.tsx","../src/components/fields/Textfield.tsx","../src/components/fields/Textarea.tsx","../src/components/base/icons/Check.tsx","../src/components/fields/Checkbox.tsx","../src/components/sections/Form.tsx","../src/components/base/icons/ArrowLeftRight.tsx","../src/components/sections/ComparisonSlider.tsx","../src/components/sections/carousel/CarouselBase.tsx","../src/components/sections/carousel/ImageCarousel.tsx","../src/components/sections/carousel/FeatureCarousel.tsx","../src/components/sections/carousel/PromotionCarousel.tsx","../src/components/sections/carousel/VideoCarousel.tsx","../src/components/typography/Link.tsx","../src/components/blocks/Bdot.tsx","../src/components/blocks/SocialList.tsx","../src/components/sections/Footer.tsx","../src/utils/backgroundImage.ts","../src/components/sections/header/HeaderKenBurns.tsx","../src/components/sections/header/HeaderPoster.tsx","../src/components/typography/Callout.tsx","../src/components/sections/header/HeaderVideo.tsx","../src/components/sections/header/Header.tsx","../src/components/sections/news/NewsAuthorCard.tsx","../src/components/blocks/Tag.tsx","../src/utils/statusFormatter.ts","../src/components/blocks/NewsCard.tsx","../src/components/sections/news/NewsFooter.tsx","../src/components/sections/news/NewsImages.tsx","../src/components/sections/news/NewsIntro.tsx","../src/components/sections/news/NewsList.tsx","../src/components/sections/news/NewsTable.tsx","../src/components/sections/news/NewsText.tsx","../src/components/sections/news/NewsVideo.tsx","../src/components/sections/news/NewsOverview.tsx","../src/utils/useObserverSupport.ts","../src/components/buttons/Button.tsx","../src/components/buttons/ButtonGhost.tsx","../src/components/fields/CompactForm.tsx","../src/components/fields/SearchInput.tsx","../src/utils/cookie-consent/mutations.ts","../src/components/blocks/CookieConsent.tsx","../src/components/base/icons/Cross.tsx","../src/components/sections/navigation/menu/Flyout.tsx","../src/components/sections/navigation/menu/Menu.tsx","../src/components/base/icons/MenuBurger.tsx","../src/components/sections/navigation/TopBar.tsx","../src/components/sections/navigation/Navigation.tsx","../src/components/base/icons/ArrowRight.tsx","../src/components/base/icons/CrossSmall.tsx","../src/components/base/icons/Magnifier.tsx","../src/components/base/icons/FlyTo.tsx","../src/components/base/icons/Star.tsx","../src/components/base/icons/StarGhost.tsx","../src/components/base/icons/Mail.tsx","../src/components/base/icons/Phone.tsx","../src/components/base/icons/Route.tsx","../src/components/base/icons/socials/Facebook.tsx","../src/components/base/icons/socials/LinkedIn.tsx","../src/components/base/icons/socials/Twitter.tsx","../src/components/base/icons/socials/Xing.tsx","../src/components/base/icons/socials/Instagram.tsx","../src/components/base/icons/socials/Youtube.tsx"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { useEffect, useRef, useState } from 'react';\n\nexport enum ScrollDirection {\n UP,\n DOWN,\n}\n\nexport const useScroll = ({\n initialTopOffset = 0,\n onLeftOffset,\n onEnterOffset,\n}: {\n initialTopOffset?: number;\n onLeftOffset?: () => void;\n onEnterOffset?: () => void;\n}) => {\n const [topOffset, setTopOffset] = useState<number>(initialTopOffset);\n const [isTop, setIsTop] = useState<boolean>(true);\n const [isInOffset, setIsInOffset] = useState<boolean>(true);\n const [scrollDirection, setScrollDirection] = useState<ScrollDirection>(\n ScrollDirection.DOWN\n );\n const lastScrollPos = useRef<number>(0);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const handleScroll = () => {\n setIsTop(window.pageYOffset <= 1);\n setIsInOffset(window.pageYOffset <= 1 + topOffset);\n\n if (lastScrollPos.current) {\n // check if top offset is left\n if (\n window.pageYOffset > 1 + topOffset &&\n lastScrollPos.current <= 1 + topOffset\n ) {\n onLeftOffset && onLeftOffset();\n }\n\n // check if top offset was joined\n if (\n window.pageYOffset <= 1 + topOffset &&\n lastScrollPos.current > 1 + topOffset\n ) {\n onEnterOffset && onEnterOffset();\n }\n\n setScrollDirection((prev) => {\n if (window.pageYOffset <= 1) return ScrollDirection.DOWN;\n return window.pageYOffset > lastScrollPos.current\n ? ScrollDirection.DOWN\n : window.pageYOffset < lastScrollPos.current\n ? ScrollDirection.UP\n : prev;\n });\n }\n lastScrollPos.current = window.pageYOffset;\n };\n\n handleScroll();\n window.addEventListener('scroll', handleScroll);\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n };\n }, [\n lastScrollPos,\n onLeftOffset,\n onEnterOffset,\n scrollDirection,\n topOffset,\n ]);\n\n return {\n isTop,\n isInOffset,\n scrollDirection,\n setTopOffset,\n topOffset,\n };\n};\n","import { css, DefaultTheme } from 'styled-components';\n\nexport type MediaQueryType =\n | 'small'\n | 'medium'\n | 'semilarge'\n | 'large'\n | 'xlarge'\n | 'xxlarge'\n | 'xxxLarge';\n\nexport const mq: { [key in Exclude<MediaQueryType, 'small'>]: string } = {\n medium: '(min-width: 40em)', // 640 px\n semilarge: '(min-width: 52em)', // 832 px\n large: '(min-width: 64em)', // 1024 px\n xlarge: '(min-width: 90em)', // 1440 px\n xxlarge: '(min-width: 105em)', // 1680 px\n xxxLarge: '(min-width: 150em)', // 2400 px\n};\n\nexport const spacings = {\n nudge: 5,\n spacer: 20,\n wrapperSmall: 1000,\n wrapper: 1440,\n wrapperLarge: 2400,\n};\n\n/***** Range Helper *****/\nexport const getSizeByRange = (range: [number, number]): string =>\n `calc(${range[0]}px + (${range[1]} - ${range[0]}) * ((100vw - 300px) / (${spacings.wrapperLarge} - 320)));`;\n\nexport const withRange = (\n range: [number, number],\n property: string\n): string => {\n if (!property) return '';\n\n return `\n ${property}: ${range[0]}px;\n ${property}: ${getSizeByRange(range)};\n\n @media ${mq.xxlarge} {\n ${property}: ${range[1]}px;\n }\n `;\n};\n\n/**\n * Generate css attributes to style text color with plain color or gradient\n * @param fallbackColor\n * @param gradient\n */\nexport const styleTextColor = (fallbackColor?: string, gradient?: string) => {\n if (gradient) {\n return css`\n color: ${fallbackColor};\n\n @supports (-webkit-text-stroke: thin) {\n padding-top: 2px;\n background: ${gradient};\n background-clip: text;\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n `;\n } else {\n return css`\n color: ${fallbackColor};\n `;\n }\n};\n\n/***** Color Types *****/\ninterface ColorOptions {\n light: string;\n medium: string;\n dark: string;\n}\n\nexport type ColorOptionsType = keyof ColorOptions;\n\nexport interface Colors {\n dark: string;\n light: string;\n mono: ColorOptions;\n primary: ColorOptions;\n secondary: ColorOptions;\n tertiary: ColorOptions;\n}\n\nexport type ColorType = keyof Colors;\n\n/***** Font Types *****/\nexport interface FontProps {\n family: string;\n weight?: string;\n style?: string;\n lineHeight?: string;\n letterSpacing?: string;\n size: [number, number];\n textTransform?: string;\n color?: string;\n colorInverted?: string;\n colorGradient?: string;\n colorGradientInverted?: string;\n}\n\nexport type FontPropsType = keyof FontProps;\n\nexport interface FontOptions {\n small: FontProps;\n medium: FontProps;\n big: FontProps;\n}\n\nexport type FontOptionType = keyof FontOptions;\n\nexport interface Fonts {\n copy: FontOptions;\n 'copy-i': FontOptions;\n 'copy-b': FontOptions;\n super: FontProps;\n 'heading-1': FontProps;\n 'heading-2': FontProps;\n 'heading-3': FontProps;\n 'heading-4': FontProps;\n label: FontOptions;\n callout: FontOptions;\n}\n\nexport type FontType = keyof Fonts;\n\n/**\n * Base font styles for all font types\n */\nexport type FontBase = FontProps;\n\n/***** Colors *****/\nconst defaultColors: Colors = {\n dark: '#000000',\n light: '#ffffff',\n mono: {\n light: '#F0F0F0',\n medium: '#C8C8C8',\n dark: '#A5A5A5',\n },\n primary: {\n light: '#DD8AA3',\n medium: '#98012E',\n dark: '#59011B',\n },\n secondary: {\n light: '#5A7384',\n medium: '#35444E',\n dark: '#222A30',\n },\n tertiary: {\n light: '#F2F5FA',\n medium: '#C9CED7',\n dark: '#A8ABB4',\n },\n};\n\n/***** Fonts *****/\nconst copyBase: FontProps = {\n family: 'Roboto',\n weight: '400',\n style: 'normal',\n lineHeight: '1.53',\n letterSpacing: '0',\n size: [10, 13],\n textTransform: '',\n color: defaultColors.dark,\n colorInverted: defaultColors.light,\n};\n\nconst headingBase: FontProps = {\n family: 'Roboto',\n weight: '700',\n style: 'normal',\n lineHeight: '1.1',\n letterSpacing: '0',\n size: [38, 40],\n color: defaultColors.dark,\n colorInverted: defaultColors.light,\n};\n\nconst defaultFonts: Fonts = {\n copy: {\n small: {\n ...copyBase,\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n 'copy-i': {\n small: {\n ...copyBase,\n style: 'italic',\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n style: 'italic',\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n style: 'italic',\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n 'copy-b': {\n small: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n super: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.43',\n size: [14, 16],\n },\n 'heading-1': headingBase,\n 'heading-2': {\n ...headingBase,\n size: [32, 35],\n lineHeight: '1.14',\n },\n 'heading-3': {\n ...headingBase,\n size: [19, 22],\n lineHeight: '1.14',\n },\n 'heading-4': {\n ...headingBase,\n size: [16, 19],\n lineHeight: '1.5',\n },\n label: {\n small: {\n ...copyBase,\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n callout: {\n small: {\n ...headingBase,\n lineHeight: '1.14',\n size: [33, 35],\n },\n medium: {\n ...headingBase,\n lineHeight: '1.18',\n size: [50, 55],\n },\n big: {\n ...headingBase,\n lineHeight: '1.18',\n size: [60, 62],\n },\n },\n};\n\n/***** Global Settings *****/\nexport interface GlobalSettings {\n sections: {\n /** Add seperation around sections with background attribute 'plain' (e.g. Teaser) */\n plainSeperation: boolean;\n /** Customnize gradient for all text on image background gradients */\n imageTextGradient: string;\n /** Date and Time Formats for all news sections */\n newsDateFormat: string;\n newsTimeFormat: string;\n newsLocaleKey: 'de' | 'en';\n };\n}\n\nconst defaultGlobalSettings: GlobalSettings = {\n sections: {\n plainSeperation: false,\n imageTextGradient: `\n linear-gradient(\n 0deg,\n rgba(0, 0, 0, 0.6) 0%,\n rgba(0, 0, 0, 0.4) 30%,\n rgba(0, 0, 0, 0.1) 60%,\n rgba(0, 0, 0, 0) 100%\n );\n `,\n newsDateFormat: 'dd/mm/yy',\n newsTimeFormat: 'hh:mm',\n newsLocaleKey: 'en',\n },\n};\n\n/***** Theme Helper *****/\nexport const getBaseTheme = () => {\n return {\n colors: { ...defaultColors },\n fonts: { types: { ...defaultFonts } },\n globalSettings: { ...defaultGlobalSettings },\n } as DefaultTheme;\n};\n\nexport const getTheme = (theme?: DefaultTheme) => {\n return (\n (theme && theme.colors && theme.fonts && theme.globalSettings) ||\n getBaseTheme()\n );\n};\n\nexport const getColors = (theme?: DefaultTheme) => {\n return theme && theme.colors ? theme.colors : getBaseTheme().colors;\n};\n\nexport const getFonts = (theme?: DefaultTheme) => {\n return theme && theme.fonts?.types\n ? theme.fonts.types\n : getBaseTheme().fonts.types;\n};\n\nexport const getGlobalSettings = (theme?: DefaultTheme) => {\n return theme && theme.globalSettings\n ? theme.globalSettings\n : getBaseTheme().globalSettings;\n};\n","import { useEffect, useState } from 'react';\nimport { MediaQueryType, mq } from './styles';\n\nexport const isBrowser =\n typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\n// *****************\n// useBreakpoint\n// *****************\nconst checkMq = (cmq: MediaQueryType, checkMqs: MediaQueryType[]) => {\n return (\n isBrowser &&\n (checkMqs.length <= 0 || checkMqs.indexOf(cmq) > -1) &&\n (cmq !== 'small' ? window.matchMedia(mq[cmq]).matches : true)\n );\n};\n\nexport const getMediaQuery = (checkMqs: MediaQueryType[]): MediaQueryType => {\n if (checkMq('xxxLarge', checkMqs)) {\n return 'xxxLarge';\n } else if (checkMq('xxlarge', checkMqs)) {\n return 'xxlarge';\n } else if (checkMq('xlarge', checkMqs)) {\n return 'xlarge';\n } else if (checkMq('large', checkMqs)) {\n return 'large';\n } else if (checkMq('semilarge', checkMqs)) {\n return 'semilarge';\n } else if (checkMq('medium', checkMqs)) {\n return 'medium';\n } else {\n return 'small';\n }\n};\n\nexport const useMediaQuery = (mqs?: MediaQueryType[]) => {\n const checkMqs = mqs || [];\n const [mediaQuery, setMediaQuery] = useState<MediaQueryType | undefined>();\n\n useEffect(() => {\n const handleResize = () => {\n const newMediaQuery = getMediaQuery(checkMqs);\n\n if (newMediaQuery !== mediaQuery) {\n setMediaQuery(newMediaQuery);\n }\n };\n\n window.addEventListener('resize', handleResize);\n setMediaQuery(getMediaQuery(checkMqs));\n\n return () => window.removeEventListener('resize', handleResize);\n }, [checkMqs, mediaQuery]);\n\n return mediaQuery;\n};\n","import { useEffect, useState, MutableRefObject, createRef } from 'react';\nimport { useMediaQuery } from './useMediaQuery';\n\ninterface ItemsPerRow {\n small?: number;\n medium?: number;\n semilarge?: number;\n large?: number;\n xlarge?: number;\n}\n\ntype Mq = keyof ItemsPerRow;\n\n// ********************\n// useEqualSheetHeight\n// ********************\n\nexport const useEqualSheetHeight = (props: {\n listLength: number;\n identifiers: string[];\n responsive?: ItemsPerRow;\n}) => {\n const defaultResponsive = {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: 3,\n xlarge: 3,\n ...props.responsive,\n };\n const mqs: Mq[] = ['small', 'medium', 'semilarge', 'large', 'xlarge'];\n const currentMq = useMediaQuery(mqs) as Mq | undefined;\n const itemsPerRow = currentMq\n ? defaultResponsive[currentMq]\n : defaultResponsive.small;\n\n const [sheetRefs, setSheetRefs] = useState<\n MutableRefObject<HTMLDivElement>[]\n >([]);\n\n const makeRows = (\n result: Array<number>[],\n _: number,\n index: number,\n arr: number[]\n ) => {\n // make new row after 3 items\n if (index % itemsPerRow === 0)\n result.push(arr.slice(index, index + itemsPerRow) as Array<number>);\n return result;\n };\n\n const setHeights = (\n heights: (number | null)[],\n selector: string,\n refs: MutableRefObject<HTMLDivElement>[]\n ) => {\n const x = heights.reduce(makeRows, []);\n\n x.forEach((rowHeights, y) => {\n const highest = rowHeights.slice().sort((vA, vB) => {\n if (vA && vB) {\n if (vA > vB) return -1;\n return 1;\n } else return 0;\n })[0];\n\n // set height of all items in row to the highest value\n if (rowHeights.length > 1 && highest) {\n for (let x = 0; x < rowHeights.length; x++) {\n const index = x + y * itemsPerRow;\n const el = refs[index].current.querySelector(selector);\n\n if (el) {\n el.setAttribute('style', `height: ${highest}px`);\n }\n }\n }\n });\n };\n\n const resize = (refs: MutableRefObject<HTMLDivElement>[]) => () => {\n const identifierSizes = new Map<string, Array<number | null>>();\n\n // create identifier map\n for (let i = 0; i < props.identifiers.length; i++) {\n identifierSizes.set(props.identifiers[i], []);\n }\n\n // set height values\n refs.filter((ref) => ref.current).forEach(({ current }) => {\n // get height for each element\n props.identifiers.forEach((id) => {\n const element = current.querySelector(id);\n element?.removeAttribute('style');\n\n const prevHeights = identifierSizes.get(id);\n if (prevHeights)\n identifierSizes.set(id, [\n ...prevHeights,\n element ? element.scrollHeight : null,\n ]);\n });\n });\n\n // set heights for each identifier\n identifierSizes.forEach((value, key) => {\n setHeights(value, key, refs);\n });\n };\n\n useEffect(() => {\n const resizeHandler = resize(sheetRefs);\n resizeHandler();\n\n window.addEventListener('resize', resizeHandler);\n\n return () => {\n window.removeEventListener('resize', resizeHandler);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sheetRefs, currentMq]);\n\n const triggerCalculation = () => {\n setSheetRefs(() =>\n Array(props.listLength)\n .fill(null)\n .map((_, i) => sheetRefs[i] || createRef())\n );\n };\n\n useEffect(() => {\n setSheetRefs(() =>\n Array(props.listLength)\n .fill(null)\n .map((_, i) => sheetRefs[i] || createRef())\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.listLength]);\n\n return {\n sheetRefs,\n triggerCalculation,\n };\n};\n","export interface Cookie<T> {\n name: string;\n data: T;\n}\n\nexport const setCookie = <T>({\n name,\n data,\n days = -1,\n path = '/',\n}: {\n name: string;\n data: T;\n days?: number;\n path?: string;\n}) => {\n let cookieString = `${name}=`;\n\n // set cookie value\n let valueString = '';\n const dataKeys = Object.keys(data);\n for (let i = 0; i < dataKeys.length; i++) {\n valueString += `${dataKeys[i]}:${data[dataKeys[i]]}|`;\n }\n\n cookieString += encodeURIComponent(\n valueString.substr(0, valueString.length - 1)\n );\n\n // specify path\n cookieString += `; path=${path};`;\n\n // check if cookie should have lifetime\n if (days >= 0) {\n const date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n cookieString += ` expires=${date.toUTCString()};`;\n }\n document.cookie = cookieString;\n};\n\nexport const getCookie = <T>(name: string): Cookie<T> | undefined => {\n let cookie = undefined;\n\n // get cookie value\n const b = document.cookie.match('(^|;)\\\\s*' + name + '\\\\s*=\\\\s*([^;]+)');\n let cookieValue = b ? b.pop() : '';\n cookieValue = cookieValue ? decodeURIComponent(cookieValue) : '';\n\n if (cookieValue) {\n const valueArray = cookieValue.split('|').map((el) => {\n const keyValueArray = el.split(':');\n return {\n key: keyValueArray[0],\n value: keyValueArray[1],\n };\n });\n\n const cookieData: { [k: string]: any } = {};\n for (let i = 0; i < valueArray.length; i++) {\n const value: any = valueArray[i].value;\n\n // checking for right types\n if (!isNaN(Number(value)))\n cookieData[valueArray[i].key] = Number(value) as number;\n else if (isBoolean(value))\n cookieData[valueArray[i].key] = stringToBoolean(\n value\n ) as boolean;\n else cookieData[valueArray[i].key] = value as string;\n }\n\n cookie = {\n name: name,\n data: cookieData as T,\n } as Cookie<T>;\n }\n return cookie;\n};\n\nexport const deleteCookie = (name: string) => {\n setCookie<any>({ name, data: {} });\n};\n\nconst stringToBoolean = (value: string | number | boolean) => {\n return [true, 'true', 'True', 'TRUE', '1', 1].indexOf(value) > -1;\n};\n\nconst isBoolean = (value: string | number | boolean) => {\n return value === 'true' || value === 'false';\n};\n\nconst isNaN = (value: number) => {\n if (Number.isNaN !== undefined) return Number.isNaN(value);\n else return value !== value;\n};\n","import { useState, useEffect } from 'react';\n\nconst useIE = (initialValue?: boolean) => {\n const [isIE, setIE] = useState(initialValue || false);\n\n useEffect(() => {\n setIE((document.body.style as any).msTouchAction !== undefined);\n }, []);\n return isIE;\n};\n\nexport default useIE;\n","import { useEffect, useState } from 'react';\n\nexport const useItemHeight = () => {\n const [element, setElement] = useState<HTMLElement | null>(null);\n const [height, setHeight] = useState<number>(0);\n\n useEffect(() => {\n const calcHeight = () => {\n if (element) setHeight(element.offsetHeight);\n };\n\n if (element) {\n calcHeight();\n window.addEventListener('resize', calcHeight);\n }\n\n return () => {\n window.removeEventListener('resize', calcHeight);\n };\n }, [element]);\n\n return {\n setElement,\n height,\n };\n};\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useScrollTo = (fallbackScrollDuration: number) => {\n const startTime = useRef<number>(-1);\n const firstPos = useRef<number>(0);\n const [targetPos, setTargetPos] = useState<number | undefined>(undefined);\n\n const outQuad = (n: number) => {\n return n * (2 - n);\n };\n\n useEffect(() => {\n if (targetPos === undefined) return;\n if ('scrollBehavior' in document.documentElement.style) {\n window.scroll({\n top: targetPos,\n left: 0,\n behavior: 'smooth',\n });\n setTargetPos(undefined);\n } else {\n const animate = (timestamp: number) => {\n if (startTime.current === -1) {\n startTime.current = timestamp || new Date().getTime();\n }\n\n const elapsed = timestamp - startTime.current;\n const progress = elapsed / fallbackScrollDuration;\n const easeProgress = +outQuad(progress).toFixed(2);\n\n const newPos =\n targetPos === 0\n ? firstPos.current - firstPos.current * easeProgress\n : firstPos.current + targetPos * easeProgress;\n\n // scroll to new position\n window.scrollTo(0, newPos);\n\n if (\n (targetPos > 0 && newPos >= firstPos.current + targetPos) ||\n (targetPos < 0 && newPos <= firstPos.current + targetPos) ||\n (targetPos === 0 && newPos <= 0)\n ) {\n cancelAnimationFrame(startTime.current);\n startTime.current = -1;\n setTargetPos(undefined);\n } else {\n window.requestAnimationFrame(animate);\n }\n };\n\n cancelAnimationFrame(startTime.current);\n startTime.current = -1;\n firstPos.current =\n window.pageYOffset || document.documentElement.scrollTop;\n window.requestAnimationFrame(animate);\n }\n }, [targetPos, fallbackScrollDuration]);\n\n return setTargetPos;\n};\n","import { useEffect, useState } from 'react';\nimport { isBrowser, useMediaQuery } from './useMediaQuery';\n\n// *****************\n// usePoster\n// *****************\n\ninterface PosterImage {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n}\n\nexport const canUseWebP = () => {\n if (!isBrowser) return false;\n\n const elem = document.createElement('canvas');\n\n if (!(elem.getContext && elem.getContext('2d'))) {\n // was able or not to get WebP representation\n return elem.toDataURL('image/webp').indexOf('data:image/webp') == 0;\n }\n\n // very old browser like IE 8, canvas not supported\n return false;\n};\n\nexport type PosterMq = 'small' | 'medium' | 'semilarge' | 'large' | 'xlarge';\n\nexport const usePoster = (\n posterImage: PosterImage & {\n webp?: PosterImage;\n },\n mqs?: PosterMq[]\n) => {\n const [currentImage, setCurrentImage] = useState<string | undefined>();\n\n const workingImage =\n posterImage.webp && canUseWebP() ? posterImage.webp : posterImage;\n const currentMq = useMediaQuery(\n mqs || ['small', 'medium', 'semilarge', 'large', 'xlarge']\n ) as PosterMq | undefined;\n\n useEffect(() => {\n if (\n currentMq &&\n workingImage[currentMq] &&\n workingImage[currentMq] !== currentImage\n ) {\n setCurrentImage(workingImage[currentMq]);\n }\n }, [currentImage, currentMq, workingImage]);\n\n return currentImage;\n};\n","import { useEffect, useRef } from 'react';\n\nexport default function useInterval(callback: any, delay?: number) {\n const savedCallback: any = useRef();\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n useEffect(() => {\n function tick() {\n savedCallback.current();\n }\n if (delay !== null) {\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n}\n","import { useState, useEffect } from 'react';\n\nconst useTouch = () => {\n const [canTouch, setCanTouch] = useState(false);\n\n useEffect(() => {\n setCanTouch(\n 'ontouchstart' in window ||\n navigator.maxTouchPoints > 0 ||\n navigator.msMaxTouchPoints > 0\n );\n }, []);\n return canTouch;\n};\n\nexport default useTouch;\n","import { ImageProps } from 'components/blocks/Image';\nimport { useEffect, useState } from 'react';\nimport { MediaQueryType } from './styles';\nimport { useMediaQuery } from './useMediaQuery';\n\nexport const useImgPreload = (\n imageUrls: ImageProps[],\n mqs: MediaQueryType[] = ['semilarge', 'large']\n) => {\n const [isReady, setReady] = useState(false);\n const [isLoaded, setLoaded] = useState(false);\n const currentMq = useMediaQuery(mqs as MediaQueryType[]);\n const [loadedImages, setLoadedImages] = useState<{\n [key: string]: { id: number | string; image: string }[];\n }>({\n small: [],\n medium: [],\n semilarge: [],\n large: [],\n xlarge: [],\n xxlarge: [],\n xxxLarge: [],\n });\n\n const preloadImages = (imageUrls: (string | undefined)[]) => {\n const images = (imageUrls.filter((img) => img) as string[]).map(\n (src, i) => {\n return new Promise((res) => {\n const img = new window.Image();\n img.src = src;\n img.onload = () => res({ url: src, i });\n });\n }\n );\n\n return images;\n };\n\n useEffect(() => {\n if (isReady && loadedImages && currentMq) {\n const loadedForMq = loadedImages[currentMq];\n\n if (loadedForMq.length < imageUrls.length && imageUrls.length > 0) {\n const requestedImages = imageUrls.map((img) => img[currentMq]);\n\n const resolve = async (items: any) => {\n for (const item of items) {\n const x = await item;\n\n setLoadedImages((prev) => {\n // check if image id already exists in array\n if (!prev[currentMq].find((e) => e.id === x.i)) {\n return {\n ...prev,\n [currentMq]: [\n ...prev[currentMq],\n {\n id: x.i,\n image: x.url,\n },\n ],\n };\n } else return prev;\n });\n }\n };\n\n resolve(preloadImages(requestedImages));\n }\n }\n }, [currentMq, imageUrls, isReady, loadedImages]);\n\n useEffect(() => {\n if (loadedImages && currentMq) {\n const imgCount = imageUrls.filter((img) => img[currentMq]).length;\n setLoaded(loadedImages[currentMq].length >= imgCount);\n }\n }, [currentMq, imageUrls, loadedImages]);\n\n return {\n loadedImages: currentMq && loadedImages[currentMq],\n isLoaded,\n setReady,\n };\n};\n","// converting 6 character hex color code to rgba string\nexport const hexToRgba = (hex: string, alpha = 1) => {\n const rgb = hex.match(/\\w\\w/g)?.map((x) => parseInt(x, 16));\n return rgb && `rgba(${rgb[0]},${rgb[1]},${rgb[2]},${alpha})`;\n};\n","import React, { FC } from 'react';\nimport { DefaultTheme, ThemeProvider } from 'styled-components';\n\nimport { FontBase, getBaseTheme } from 'utils/styles';\n\ntype RecursivePartial<T> = {\n [P in keyof T]?: RecursivePartial<T[P]>;\n};\n\nexport type Theme = RecursivePartial<DefaultTheme>;\n\n/**\n * Assigning font base key values to theme. Searches for each font base object key inside target theme object and replacing the values\n * @param target Combined result object\n * @param source FontBase object with properties that should by overritten.\n */\nconst assignFontBase = (\n target: DefaultTheme,\n source?: RecursivePartial<FontBase>\n) => {\n if (!source) return target;\n // deep iterate through target and search matching key\n const assign = (target: any, key: string, value: string) => {\n Object.keys(target).forEach((tKey) => {\n // check if target value is an object and no array\n if (\n target[tKey] &&\n typeof target[tKey] === 'object' &&\n !Array.isArray(target[tKey])\n ) {\n target[tKey] = assign(target[tKey], key, value);\n } else if (key === tKey) {\n target[tKey] = value;\n }\n });\n return target;\n };\n\n // search each base key and replace values\n Object.keys(source).forEach((sKey) => {\n if (source[sKey])\n target.fonts.types = assign(target.fonts.types, sKey, source[sKey]);\n });\n return target;\n};\n\n/**\n * Comnbining Theme objects\n * @param target Result theme object\n * @param source Theme object that should be assigned to target\n */\nconst assignTo = (target: DefaultTheme, source: Theme) => {\n const output = { ...target };\n\n Object.keys(source).forEach((key) => {\n const sourceVal = source[key];\n const targetVal = target[key];\n output[key] =\n targetVal &&\n sourceVal &&\n typeof targetVal === 'object' &&\n typeof sourceVal === 'object'\n ? assignTo(targetVal, sourceVal)\n : sourceVal;\n });\n return output;\n};\n\nexport const LibThemeProvider: FC<{\n theme: Theme;\n}> = ({ theme, children }) => {\n const combinedBaseTheme = assignFontBase(getBaseTheme(), theme.fonts?.base);\n const combinedTheme = assignTo(combinedBaseTheme, theme);\n return <ThemeProvider theme={combinedTheme}>{children}</ThemeProvider>;\n};\n","import * as React from 'react';\nimport { useContext } from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as settings,\n} from 'utils/styles';\n\nexport type BgMode =\n | 'full'\n | 'half-left'\n | 'half-right'\n | 'larger-left'\n | 'larger-right';\n\nconst getBackground = (mode: BgMode, bgColor: string) => {\n let bgValue = undefined;\n\n switch (mode) {\n case 'full':\n bgValue = bgColor;\n break;\n\n case 'half-left':\n bgValue = `linear-gradient(to left, transparent 50%, ${bgColor} 50%)`;\n break;\n\n case 'half-right':\n bgValue = `linear-gradient(to right, transparent 50%, ${bgColor} 50%)`;\n break;\n\n case 'larger-left':\n bgValue = `linear-gradient(to left, transparent 40%, ${bgColor} 40%)`;\n break;\n\n case 'larger-right':\n bgValue = `linear-gradient(to right, transparent 40%, ${bgColor} 40%)`;\n break;\n }\n return bgValue;\n};\n\nconst View = styled.section<{\n indent: string;\n addSeperation?: boolean;\n addPlainSeperation?: boolean;\n}>`\n position: relative;\n overflow: hidden;\n\n ${({ addSeperation }) =>\n addSeperation &&\n withRange([spacings.spacer * 2, spacings.spacer * 4], 'padding-top')}\n ${({ addSeperation }) =>\n addSeperation &&\n withRange([spacings.spacer * 2, spacings.spacer * 4], 'padding-bottom')}\n\n ${({ indent }) =>\n indent !== 'plain' &&\n css`\n &[data-ident='${indent}'] + &[data-ident='${indent}'] {\n padding-top: 0;\n }\n `}\n\n ${({ indent, addPlainSeperation }) =>\n addPlainSeperation &&\n indent &&\n css`\n &[data-ident='plain'] {\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4],\n 'margin-top'\n )}\n }\n\n &[data-ident='plain'] + & {\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4],\n 'margin-top'\n )}\n }\n\n &[data-ident='plain'] + &[data-ident='transparent'] {\n margin-top: 0;\n }\n\n &[data-ident='transparent'] + &[data-ident='plain'] {\n margin-top: 0;\n }\n `}\n`;\n\nconst Back = styled.div<{\n bgColor?: string;\n bgMode?: BgMode;\n}>`\n display: ${({ bgColor, bgMode }) => (bgColor && bgMode ? 'block' : 'none')};\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n max-width: ${({ bgMode }) =>\n (bgMode === 'full' ? spacings.wrapperLarge : spacings.wrapper) + 'px'};\n\n background: ${({ bgColor }) => bgColor || undefined};\n\n margin: 0 auto;\n\n @media ${mq.semilarge} {\n background: ${({ bgColor, bgMode }) =>\n bgColor && bgMode && bgMode !== 'full'\n ? getBackground(bgMode, bgColor)\n : undefined};\n }\n\n @media ${mq.xlarge} {\n :before {\n content: ${({ bgMode }) =>\n bgMode === 'half-left' || bgMode === 'larger-left'\n ? `\"\"`\n : undefined};\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: ${(spacings.wrapperLarge - spacings.wrapper) / 2}px;\n background-color: ${({ bgColor }) => bgColor && bgColor};\n\n transform: translateX(-100%);\n }\n\n :after {\n content: ${({ bgMode }) =>\n bgMode === 'half-right' || bgMode === 'larger-right'\n ? `\"\"`\n : undefined};\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: ${(spacings.wrapperLarge - spacings.wrapper) / 2}px;\n background-color: ${({ bgColor }) => bgColor && bgColor};\n\n transform: translateX(100%);\n }\n }\n`;\n\nconst Section: React.FC<{\n as?: 'header' | 'footer';\n bgColor?: string;\n bgMode?: BgMode;\n addSeperation?: boolean;\n className?: string;\n}> = ({\n as,\n bgColor,\n bgMode = 'full',\n addSeperation = false,\n className,\n children,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <View\n as={as}\n data-ident={bgColor && bgMode === 'full' ? bgColor : 'plain'}\n indent={bgColor && bgMode === 'full' ? bgColor : 'plain'}\n addSeperation={addSeperation}\n addPlainSeperation={settings(theme).sections.plainSeperation}\n className={className}\n >\n {bgColor && bgMode && <Back bgColor={bgColor} bgMode={bgMode} />}\n {children}\n </View>\n );\n};\n\nexport default Section;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings } from 'utils/styles';\n\nexport type ClampWidthType = 'small' | 'normal' | 'large';\n\nconst View = styled.div<{\n clampWidth?: ClampWidthType;\n addWhitespace?: boolean;\n}>`\n position: relative;\n width: 100%;\n max-width: ${({ clampWidth }) =>\n clampWidth === 'large'\n ? spacings.wrapperLarge\n : clampWidth === 'small'\n ? spacings.wrapperSmall\n : spacings.wrapper}px;\n margin-left: auto;\n margin-right: auto;\n padding: 0\n ${({ addWhitespace }) => (addWhitespace ? spacings.nudge * 2 : 0)}px;\n\n @media ${mq.medium} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n\n @media ${mq.semilarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * 100 : 0}%;\n padding-left: ${({ addWhitespace }) =>\n addWhitespace\n ? `\n max(\n ${spacings.spacer}px,\n ${(1 / 28) * 100}%\n );\n `\n : 0};\n\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * spacings.wrapper : 0}px;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n`;\n\nconst Wrapper: React.FC<{\n addWhitespace?: boolean;\n clampWidth?: ClampWidthType;\n className?: string;\n}> = ({\n addWhitespace = false,\n clampWidth = 'normal',\n className,\n children,\n}) => {\n return (\n <View\n className={className}\n addWhitespace={addWhitespace}\n clampWidth={clampWidth}\n >\n {children}\n </View>\n );\n};\n\nexport default Wrapper;\n","import * as React from 'react';\nimport styled, { css } from 'styled-components';\nimport { mq } from 'utils/styles';\n\nexport interface ImageProps {\n alt?: string;\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n coverSpace?: boolean;\n}\n\nconst Img = styled.img<{ coverSpace?: boolean }>`\n max-width: 100%;\n display: block;\n align-self: flex-start;\n ${({ coverSpace }) =>\n coverSpace &&\n css`\n width: 100%;\n object-fit: cover;\n object-position: center;\n `}\n`;\n\nconst Picture = styled.picture<{ coverSpace?: boolean }>`\n ${({ coverSpace }) =>\n coverSpace &&\n `\n display: flex;\n height: 100%;\n width: 100%;\n`}\n`;\n\nconst Image: React.FC<\n { className?: string; onClick?: () => void } & ImageProps\n> = ({\n className,\n small,\n medium,\n semilarge,\n large,\n xlarge,\n alt,\n coverSpace,\n onClick,\n}) => {\n return (\n <Picture coverSpace={coverSpace} onClick={onClick}>\n {xlarge && <source srcSet={xlarge} media={mq.xlarge} />}\n {large && <source srcSet={large} media={mq.large} />}\n {semilarge && <source srcSet={semilarge} media={mq.semilarge} />}\n {medium && <source srcSet={medium} media={mq.medium} />}\n <Img\n srcSet={small}\n alt={alt || ''}\n coverSpace={coverSpace}\n loading=\"lazy\"\n className={className}\n />\n </Picture>\n );\n};\n\nexport default Image;\n","import * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n styleTextColor,\n FontType,\n getFonts as font,\n mq,\n withRange,\n} from 'utils/styles';\n\ntype HeadingType = Exclude<\n FontType,\n 'copy' | 'copy-i' | 'copy-b' | 'label' | 'callout'\n>;\n\n// Styles\nconst BaseStyles = styled.h1<{\n hyphens?: boolean;\n hasShadow?: boolean;\n textColor?: string;\n textGradient?: string;\n type: HeadingType;\n}>`\n display: inline-block;\n margin: 0;\n padding: 0;\n ${({ textColor, textGradient }) => styleTextColor(textColor, textGradient)}\n\n hyphens: auto;\n /* overflow-wrap: break-word; */\n\n ${(props: { hyphens?: boolean }) =>\n !props.hyphens &&\n css`\n @media ${mq.large} {\n hyphens: none;\n }\n `}\n\n text-shadow: ${({ hasShadow }) =>\n hasShadow && '1px 2px 8px rgba(0, 0, 0, 0.25)'};\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin: 0;\n padding: 0;\n border: 0;\n outline: 0;\n font-weight: inherit;\n font-style: inherit;\n font-size: 100%;\n font-family: inherit;\n vertical-align: baseline;\n }\n`;\n\nconst View = styled(BaseStyles)`\n font-family: ${({ type, theme }) => font(theme)[type].family};\n font-weight: ${({ type, theme }) => font(theme)[type].weight};\n font-style: ${({ type, theme }) => font(theme)[type].style};\n ${({ type, theme }) => withRange(font(theme)[type].size, 'font-size')}\n line-height: ${({ type, theme }) => font(theme)[type].lineHeight};\n letter-spacing: ${({ type, theme }) => font(theme)[type].letterSpacing};\n text-transform: ${({ type, theme }) => font(theme)[type].textTransform};\n`;\n\nexport type HeadlineTag =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'span'\n | 'div';\n\nconst Heading: React.FC<{\n as?: HeadlineTag;\n isInverted?: boolean;\n size?: HeadingType;\n textColor?: string;\n textGradient?: string;\n hyphens?: boolean;\n hasShadow?: boolean;\n innerHTML?: string;\n\n className?: string;\n}> = ({\n as,\n isInverted,\n className,\n size = 'heading-2',\n textColor,\n textGradient,\n hyphens = false,\n hasShadow = false,\n innerHTML,\n children,\n ...rest\n}) => {\n const theme = React.useContext(ThemeContext);\n let tag: HeadlineTag = 'h2';\n\n switch (size) {\n default:\n case 'heading-1':\n tag = 'h1';\n break;\n case 'heading-2':\n tag = 'h2';\n break;\n case 'heading-3':\n tag = 'h3';\n break;\n case 'heading-4':\n tag = 'h4';\n break;\n case 'super':\n tag = 'div';\n break;\n }\n\n // get font settings from global context\n const fontSettings = font(theme)?.[size];\n\n return (\n <View\n as={as || tag}\n type={size}\n textColor={\n textColor ||\n (isInverted ? fontSettings.colorInverted : fontSettings.color)\n }\n textGradient={\n textGradient ||\n (!textColor\n ? isInverted\n ? fontSettings.colorGradientInverted\n : fontSettings.colorGradient\n : undefined)\n }\n hyphens={hyphens}\n hasShadow={hasShadow}\n dangerouslySetInnerHTML={\n innerHTML && !children ? { __html: innerHTML } : undefined\n }\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n};\n\nHeading.defaultProps = {\n as: 'h2',\n size: 'heading-2',\n};\n\nexport default Heading;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport Heading, { HeadlineTag } from 'components/typography/Heading';\nimport { spacings, withRange } from 'utils/styles';\n\nconst View = styled.div<{ isCentered?: boolean }>`\n display: block;\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n margin: ${({ isCentered }) => isCentered && '0 auto'};\n\n & > * + * {\n ${withRange([spacings.nudge * 2, spacings.nudge * 3], 'padding-top')};\n }\n`;\n\nconst Title: FC<{\n colorMode?: 'default' | 'inverted' | 'onImage';\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n title?: string;\n titleAs?: HeadlineTag;\n isCentered?: boolean;\n className?: string;\n}> = ({\n colorMode = 'default',\n superTitle,\n superTitleAs,\n title,\n titleAs,\n isCentered = false,\n className,\n}) => {\n return (\n <View isCentered={isCentered} className={className}>\n {superTitle && (\n <div>\n <Heading\n as={superTitleAs || 'h2'}\n size=\"super\"\n textColor={colorMode === 'onImage' ? '#fff' : undefined}\n isInverted={colorMode === 'inverted'}\n innerHTML={superTitle}\n />\n </div>\n )}\n {title && (\n <div>\n <Heading\n as={titleAs || 'h3'}\n size=\"heading-2\"\n textColor={colorMode === 'onImage' ? '#fff' : undefined}\n isInverted={colorMode === 'inverted'}\n innerHTML={title}\n />\n </div>\n )}\n </View>\n );\n};\n\nexport default Title;\n","import * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n FontType,\n mq,\n spacings,\n withRange,\n FontOptionType,\n getFonts as font,\n styleTextColor,\n} from 'utils/styles';\n\ntype CopyType = Exclude<\n FontType,\n | 'heading-1'\n | 'heading-2'\n | 'heading-3'\n | 'heading-4'\n | 'callout'\n | 'super'\n | 'label'\n>;\n\nconst BaseStyles = styled.div<{\n textColor?: string;\n textGradient?: string;\n columns?: boolean;\n type: CopyType;\n size: FontOptionType;\n}>`\n hyphens: auto;\n ${({ textColor, textGradient }) => styleTextColor(textColor, textGradient)}\n\n @media ${mq.medium} {\n hyphens: none;\n }\n\n a:not([class]) {\n color: currentColor;\n transition: color 0.25s;\n\n &:hover {\n opacity: 0.75;\n }\n }\n\n *:first-child {\n margin-top: 0;\n }\n\n // *:last-child {\n // margin-bottom: 0;\n // }\n\n :not(li) > ul,\n :not(li) > ol {\n display: inline-block;\n padding-left: 0;\n }\n\n li > ul,\n li > ol {\n padding-left: 0;\n }\n\n ul,\n ol li {\n list-style-position: outside;\n margin-left: 1.1em;\n }\n\n ${({ columns }) =>\n columns &&\n css`\n columns: 350px 2;\n column-gap: ${spacings.spacer}px;\n\n li {\n break-inside: avoid;\n }\n\n blockquote {\n break-inside: avoid;\n }\n `};\n`;\n\nconst View = styled(BaseStyles)`\n font-family: ${({ type, size, theme }) => font(theme)[type][size].family};\n font-weight: ${({ type, size, theme }) => font(theme)[type][size].weight};\n font-style: ${({ type, size, theme }) => font(theme)[type][size].style};\n ${({ type, size, theme }) =>\n withRange(font(theme)[type][size].size, 'font-size')}\n line-height: ${({ type, size, theme }) =>\n font(theme)[type][size].lineHeight};\n letter-spacing: ${({ type, size, theme }) =>\n font(theme)[type][size].letterSpacing};\n text-transform: ${({ type, size, theme }) =>\n font(theme)[type][size].textTransform};\n`;\n\nconst Copy: React.FC<{\n isInverted?: boolean;\n textColor?: string;\n textGradient?: string;\n type?: CopyType;\n size?: FontOptionType;\n columns?: boolean;\n innerHTML?: string;\n className?: string;\n}> = ({\n isInverted,\n type = 'copy',\n size = 'medium',\n textColor,\n textGradient,\n columns = false,\n innerHTML,\n className,\n children,\n ...rest\n}) => {\n const theme = React.useContext(ThemeContext);\n const fontSettings = font(theme)?.[type]?.[size];\n\n return (\n <View\n type={type}\n size={size}\n textColor={\n textColor ||\n (isInverted ? fontSettings.colorInverted : fontSettings.color)\n }\n textGradient={\n textGradient ||\n (!textColor\n ? isInverted\n ? fontSettings.colorGradientInverted\n : fontSettings.colorGradient\n : undefined)\n }\n columns={columns}\n dangerouslySetInnerHTML={\n innerHTML && !children ? { __html: innerHTML } : undefined\n }\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n};\n\nCopy.defaultProps = { type: 'copy', size: 'medium' };\n\nexport default Copy;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings } from 'utils/styles';\n\nconst View = styled.div<{ isCentered?: boolean; isMirrored?: boolean }>`\n display: inline-flex;\n flex-wrap: wrap;\n flex-direction: ${({ isMirrored }) =>\n isMirrored ? 'column-reverse' : 'column'};\n\n justify-content: ${({ isMirrored, isCentered }) =>\n isCentered ? 'center' : isMirrored ? 'flex-end' : 'flex-start'};\n\n margin-top: -${spacings.spacer * 0.5}px;\n margin-left: -${spacings.spacer}px;\n width: calc(100% + ${spacings.spacer}px);\n\n & > * {\n flex: 1 0 auto;\n margin-top: ${spacings.spacer * 0.5}px;\n margin-left: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n flex-direction: ${({ isMirrored }) =>\n isMirrored ? 'row-reverse' : 'row'};\n align-items: stretch;\n width: auto;\n }\n`;\n\nconst Actions: FC<{\n isCentered?: boolean;\n isMirrored?: boolean;\n primary?: React.ReactNode;\n secondary?: React.ReactNode;\n className?: string;\n}> = ({\n isCentered = false,\n isMirrored = false,\n primary,\n secondary,\n className,\n}) => {\n return (\n <View\n isCentered={isCentered}\n isMirrored={isMirrored}\n className={className}\n >\n {primary && primary}\n {secondary && secondary}\n </View>\n );\n};\n\nexport default Actions;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { spacings, mq, withRange } from 'utils/styles';\n\nimport Title from 'components/blocks/Title';\nimport Copy from 'components/typography/Copy';\nimport Actions from 'components/blocks/Actions';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst View = styled.div<{ isCentered?: boolean }>`\n width: 100%;\n text-align: ${({ isCentered }) => isCentered && 'center'};\n`;\n\nconst StyledTitle = styled(Title)<{ clampTitle?: boolean }>`\n max-width: ${({ clampTitle }) =>\n clampTitle && (13 / 28) * spacings.wrapper + 'px'};\n`;\n\nconst ContentBlock = styled(Copy)<{\n clampText?: boolean;\n isCentered?: boolean;\n}>`\n display: block;\n margin: ${({ isCentered }) => isCentered && '0 auto'};\n max-width: ${({ clampText }) =>\n clampText && (19 / 28) * spacings.wrapper + 'px'};\n\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')}\n\n @media ${mq.semilarge} {\n align-items: flex-start;\n\n & > * {\n max-width: ${(19 / 28) * spacings.wrapper + 'px'};\n }\n }\n`;\n\nconst Intro: React.FC<{\n colorMode?: 'default' | 'inverted' | 'onImage';\n title: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isCentered?: boolean;\n clampTitle?: boolean;\n clampText?: boolean;\n className?: string;\n}> = ({\n colorMode = 'default',\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isCentered = false,\n clampTitle = true,\n clampText = true,\n className,\n}) => {\n return (\n <View isCentered={isCentered} className={className}>\n <StyledTitle\n colorMode={colorMode}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n isCentered={isCentered}\n clampTitle={clampTitle}\n />\n {text && (\n <ContentBlock\n type=\"copy-b\"\n textColor={colorMode === 'onImage' ? '#fff' : undefined}\n isInverted={colorMode === 'inverted'}\n isCentered={isCentered}\n clampText={clampText}\n innerHTML={text}\n />\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={\n primaryAction &&\n primaryAction(\n colorMode === 'inverted' || colorMode === 'onImage'\n )\n }\n secondary={\n secondaryAction &&\n secondaryAction(\n colorMode === 'inverted' || colorMode === 'onImage'\n )\n }\n />\n )}\n </View>\n );\n};\n\nexport default Intro;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport Intro from 'components/blocks/Intro';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst StyledIntro = styled(Intro)`\n padding-bottom: ${spacings.spacer * 2}px;\n`;\n\nconst ImgContainer = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n width: 100%;\n\n @media ${mq.semilarge} {\n margin-left: ${spacings.spacer * -1}px;\n width: calc(100% + ${spacings.spacer}px);\n }\n`;\n\nconst ImgWrapper = styled.div<{ isFull?: boolean }>`\n flex: 0 100%;\n padding-top: ${spacings.nudge * 2}px;\n\n picture > img {\n width: 100%;\n }\n\n @media ${mq.semilarge} {\n flex: 0 ${({ isFull }) => (isFull ? 100 : 50)}%;\n padding-left: ${spacings.spacer}px;\n padding-top: ${spacings.spacer}px;\n\n /* &:last-child:nth-child(odd) {\n flex: 0 100%;\n } */\n }\n`;\n\ntype ImageType = ImageProps & { isFull?: boolean };\n\nconst Gallery: FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n hasBack?: boolean;\n images?: Array<ImageType>;\n className?: string;\n}> = ({\n isInverted = false,\n hasBack = false,\n images,\n className,\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n}) => {\n const theme = useContext(ThemeContext);\n\n // const isPrevImgFull = (images: ImageType[], currentIndex: number) => {\n // const newIndex = --currentIndex;\n // if (images && images[newIndex]) return images[newIndex]?.isFull;\n // else return false;\n // };\n\n const isNextImgFull = (images: ImageType[], currentIndex: number) => {\n const newIndex = ++currentIndex;\n if (images && images[newIndex]) return images[newIndex]?.isFull;\n else return false;\n };\n\n // map images to fill always full width\n images = images?.map((img, i, array) => {\n if (!img.isFull) {\n img.isFull =\n (i % 2 === 0 && isNextImgFull(array, i)) || array.length === 1;\n }\n return img;\n });\n\n return (\n <Section\n addSeperation\n bgMode=\"full\"\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n className={className}\n >\n {title && (\n <Wrapper addWhitespace>\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n secondaryAction={secondaryAction}\n primaryAction={primaryAction}\n />\n </Wrapper>\n )}\n <Wrapper>\n <ImgContainer>\n {images &&\n images.map((img, i) => (\n <ImgWrapper key={i} isFull={img.isFull}>\n <Image {...img} />\n </ImgWrapper>\n ))}\n </ImgContainer>\n </Wrapper>\n </Section>\n );\n};\n\nexport default Gallery;\n","import * as React from 'react';\nimport styled, { css } from 'styled-components';\nimport { spacings, mq } from 'utils/styles';\n\nexport interface ColPropsSettings {\n /** Normalisierte Werte zwischen 0 und 1: z.B. 12 von 28 Spalten (12 / 28) */\n span?: number;\n /** Normalisierte Werte zwischen -1 und 1: z.B. -12 von 28 Spalten (-12 / 28) */\n move?: number;\n valign?: VerticalAlign;\n}\n\ntype VerticalAlign = 'top' | 'center' | 'bottom';\n\ninterface ColProps extends ColPropsSettings {\n medium?: ColPropsSettings;\n semilarge?: ColPropsSettings;\n large?: ColPropsSettings;\n xlarge?: ColPropsSettings;\n}\n\nconst gridSettings = {\n cols: 28,\n gutter: spacings.spacer,\n};\n\nconst getWidth = (props: ColProps) => {\n const mediumSpan = props.medium ? props.medium.span : 1;\n const semilargeSpan = props.semilarge ? props.semilarge.span : 1;\n const largeSpan = props.large ? props.large.span : 1;\n const xlargeSpan = props.xlarge ? props.xlarge.span : 1;\n\n return css`\n width: ${(props.span || 1) * 100}%;\n\n ${(props: ColProps) => {\n return props.medium\n ? css`\n @media ${mq.medium} {\n width: ${(mediumSpan || 1) * 100}%;\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.semilarge\n ? css`\n @media ${mq.semilarge} {\n width: ${(semilargeSpan || 1) * 100}%;\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.large\n ? css`\n @media ${mq.large} {\n width: ${(largeSpan || 1) * 100}%;\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.xlarge\n ? css`\n @media ${mq.xlarge} {\n width: ${(xlargeSpan || 1) * 100}%;\n }\n `\n : '';\n }}\n `;\n};\n\nconst getLeftRight = (props: ColProps) => {\n const mediumMove = props.medium ? props.medium.move : 0;\n const semilargeMove = props.semilarge ? props.semilarge.move : 0;\n const largeMove = props.large ? props.large.move : 0;\n const xlargeMove = props.xlarge ? props.xlarge.move : 0;\n\n return css`\n left: ${props.move && props.move > 0 ? props.move * 100 + '%' : 'auto'};\n right: ${props.move && props.move < 0\n ? props.move * -100 + '%'\n : 'auto'};\n\n ${(props: ColProps) => {\n return props.medium\n ? css`\n @media ${mq.medium} {\n left: ${mediumMove && mediumMove > 0\n ? mediumMove * 100 + '%'\n : 'auto'};\n right: ${mediumMove && mediumMove < 0\n ? mediumMove * -100 + '%'\n : 'auto'};\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.semilarge\n ? css`\n @media ${mq.semilarge} {\n left: ${semilargeMove && semilargeMove > 0\n ? semilargeMove * 100 + '%'\n : 'auto'};\n right: ${semilargeMove && semilargeMove < 0\n ? semilargeMove * -100 + '%'\n : 'auto'};\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.large\n ? css`\n @media ${mq.large} {\n left: ${largeMove && largeMove > 0\n ? largeMove * 100 + '%'\n : 'auto'};\n right: ${largeMove && largeMove < 0\n ? largeMove * -100 + '%'\n : 'auto'};\n }\n `\n : '';\n }}\n\n ${(props: ColProps) => {\n return props.xlarge\n ? css`\n @media ${mq.xlarge} {\n left: ${xlargeMove && xlargeMove > 0\n ? xlargeMove * 100 + '%'\n : 'auto'};\n right: ${xlargeMove && xlargeMove < 0\n ? xlargeMove * -100 + '%'\n : 'auto'};\n }\n `\n : '';\n }}\n `;\n};\n\nconst StyledCol = styled.div<GridProps & ColProps>`\n ${getWidth};\n ${getLeftRight};\n padding-top: ${({ gutter }) => gutter || 0}px;\n padding-left: ${({ gutter }) => gutter || 0}px;\n display: block;\n position: relative;\n\n align-self: ${({ valign }) => {\n switch (valign) {\n case 'top':\n return 'flex-start';\n case 'center':\n return 'center';\n case 'bottom':\n return 'flex-end';\n default:\n return undefined;\n }\n }};\n`;\n\nconst Col: React.FC<ColProps> = (props) => {\n return <React.Fragment>{props.children}</React.Fragment>;\n};\n\ninterface GridProps {\n gutter?: number;\n valign?: VerticalAlign;\n}\n\nconst StyledGrid = styled.div<GridProps>`\n margin-top: -${({ gutter }) => gutter || 0}px;\n margin-left: -${({ gutter }) => gutter || 0}px;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n\n align-items: ${({ valign }) => {\n switch (valign) {\n case 'top':\n return 'flex-start';\n case 'center':\n return 'center';\n case 'bottom':\n return 'flex-end';\n default:\n return undefined;\n }\n }};\n`;\n\nconst Grid: React.FC<GridProps> = ({ gutter, valign, children }) => {\n return (\n <StyledGrid gutter={gutter} valign={valign}>\n {React.Children.map(children, (comp: any) => {\n return <StyledCol {...comp.props} gutter={gutter} />;\n })}\n </StyledGrid>\n );\n};\n\nGrid.defaultProps = {\n gutter: gridSettings.gutter,\n};\n\nexport default {\n Row: Grid,\n Col,\n};\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Grid from 'components/base/Grid';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Copy from 'components/typography/Copy';\nimport Title from 'components/blocks/Title';\nimport Wrapper from 'components/base/Wrapper';\nimport Section, { BgMode } from 'components/base/Section';\nimport { mq, spacings, withRange, getColors as color } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\n\nconst ImgWrapper = styled.div<{ isMirrored?: boolean }>`\n display: flex;\n flex-direction: column;\n position: relative;\n height: 100%;\n width: 100%;\n`;\n\nconst StyledImage = styled(Image)`\n position: relative;\n width: 100%;\n height: 100%;\n`;\n\nconst ImgDescDesktop = styled(Copy)`\n display: none;\n\n @media ${mq.semilarge} {\n display: block;\n padding: ${spacings.spacer}px ${spacings.spacer * 2}px;\n }\n`;\n\nconst ImgDescMobile = styled(Copy)`\n display: block;\n padding: ${spacings.spacer}px 0;\n padding-left: ${spacings.nudge * 2}px;\n\n @media ${mq.semilarge} {\n display: none;\n }\n`;\n\nconst InfoWrapper = styled.div<{ isMirrored?: boolean }>`\n padding-left: ${spacings.nudge * 2}px;\n padding-right: ${spacings.nudge * 2}px;\n padding-top: ${spacings.nudge}px;\n padding-bottom: ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n ${withRange([spacings.spacer * 3, spacings.spacer * 4], 'padding-top')}\n\n padding-right: ${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n ${withRange([spacings.spacer * 3, spacings.spacer * 4], 'padding-top')}\n\n padding-right: ${({ isMirrored }) =>\n isMirrored ? spacings.spacer * 1.5 + 'px' : (1 / 28) * 100 + '%'};\n padding-bottom: ${spacings.nudge * 6}px;\n padding-left: ${({ isMirrored }) =>\n !isMirrored ? spacings.spacer * 1.5 + 'px' : (1 / 28) * 100 + '%'};\n }\n\n @media ${mq.xlarge} {\n padding-right: ${({ isMirrored }) =>\n isMirrored ? spacings.spacer * 1.5 : (1 / 28) * spacings.wrapper}px;\n padding-left: ${({ isMirrored }) =>\n !isMirrored\n ? spacings.spacer * 1.5\n : (1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst StyledTitle = styled(Title)`\n & + * {\n margin-top: ${spacings.nudge * 6}px;\n }\n`;\n\nconst ContentBlock = styled(Copy)`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n`;\n\nconst SubTextBlock = styled(ContentBlock)`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n padding-top: ${spacings.spacer * 2}px;\n\n @media ${mq.semilarge} {\n & > * {\n max-width: 300px;\n }\n }\n`;\n\nconst Teaser: FC<{\n isInverted?: boolean;\n isMirrored?: boolean;\n bgMode?: 'full' | 'splitted';\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n title?: string;\n titleAs?: HeadlineTag;\n image?: Omit<ImageProps, 'coverSpace'> & { description?: string };\n intro?: string;\n text?: string;\n subText?: string;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n isInverted = false,\n isMirrored = false,\n bgMode,\n superTitle,\n superTitleAs,\n title,\n titleAs,\n image,\n intro,\n text,\n subText,\n primaryAction,\n secondaryAction,\n}) => {\n const theme = useContext(ThemeContext);\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'splitted':\n return isMirrored ? 'larger-left' : 'larger-right';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <Wrapper clampWidth=\"normal\">\n <Grid.Row gutter={spacings.spacer}>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? 14 : 0) / 28,\n }}\n >\n <ImgWrapper isMirrored={isMirrored}>\n {image && <StyledImage coverSpace {...image} />}\n {image?.description && (\n <ImgDescMobile\n size=\"small\"\n isInverted={isInverted}\n innerHTML={image.description}\n />\n )}\n </ImgWrapper>\n </Grid.Col>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? -14 : 0) / 28,\n }}\n >\n <InfoWrapper isMirrored={isMirrored}>\n <StyledTitle\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n />\n {intro && (\n <ContentBlock\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n />\n )}\n {text && (\n <ContentBlock\n isInverted={isInverted}\n innerHTML={text}\n />\n )}\n {subText && (\n <SubTextBlock\n isInverted={isInverted}\n type=\"copy-i\"\n innerHTML={subText}\n />\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={\n primaryAction &&\n primaryAction(isInverted)\n }\n secondary={\n secondaryAction &&\n secondaryAction(isInverted)\n }\n />\n )}\n </InfoWrapper>\n </Grid.Col>\n </Grid.Row>\n <Grid.Row gutter={spacings.spacer}>\n <Grid.Col\n semilarge={{\n span: (bgMode === 'splitted' ? 11.2 : 14) / 28,\n move:\n (isMirrored\n ? bgMode === 'splitted'\n ? 16.8\n : 14\n : 0) / 28,\n }}\n >\n {image?.description && (\n <ImgDescDesktop\n size=\"small\"\n isInverted={isInverted}\n innerHTML={image.description}\n />\n )}\n </Grid.Col>\n <Grid.Col\n semilarge={{\n span: (bgMode === 'splitted' ? 16.8 : 14) / 28,\n move:\n (isMirrored\n ? bgMode === 'splitted'\n ? -11.2\n : -14\n : 0) / 28,\n }}\n />\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport default Teaser;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Grid from 'components/base/Grid';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Copy from 'components/typography/Copy';\nimport Title from 'components/blocks/Title';\nimport Wrapper from 'components/base/Wrapper';\nimport Section from 'components/base/Section';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\n\nconst WideImage = styled(Image)<{ isMirrored?: boolean }>`\n position: relative;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n\n @media ${mq.semilarge} {\n position: absolute;\n width: 50%;\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '50%')};\n right: ${({ isMirrored }) => (isMirrored ? '50%' : 'auto')};\n\n transform: translateX(\n ${({ isMirrored }) => (isMirrored ? '100%' : '-100%')}\n );\n }\n\n @media ${mq.xlarge} {\n max-width: ${spacings.wrapperLarge / 2}px;\n }\n`;\n\nconst InfoWrapper = styled.div<{ isMirrored?: boolean }>`\n padding-left: ${spacings.nudge * 2}px;\n padding-right: ${spacings.nudge * 2}px;\n padding-top: ${spacings.nudge}px;\n padding-bottom: ${spacings.nudge * 2}px;\n\n @media ${mq.semilarge} {\n ${withRange([spacings.spacer * 3, spacings.spacer * 4], 'padding-top')}\n\n padding-right: ${({ isMirrored }) =>\n isMirrored ? spacings.spacer * 1.5 : (1 / 28) * spacings.wrapper}px;\n padding-bottom: ${spacings.nudge * 6}px;\n padding-left: ${({ isMirrored }) =>\n !isMirrored\n ? spacings.spacer * 1.5\n : (1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst StyledTitle = styled(Title)`\n & + * {\n margin-top: ${spacings.nudge * 6}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n padding-top: ${spacings.spacer * 2}px;\n\n @media ${mq.semilarge} {\n & > * {\n max-width: 300px;\n }\n }\n`;\n\nconst ContentBlock = styled(Copy)`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n`;\n\nconst SubTextBlock = styled(ContentBlock)`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst TeaserWide: FC<{\n isInverted?: boolean;\n isMirrored?: boolean;\n hasBack?: boolean;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n title?: string;\n titleAs?: HeadlineTag;\n image?: Omit<ImageProps, 'coverSpace'> & { description?: string };\n intro?: string;\n text?: string;\n subText?: string;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n isInverted = false,\n isMirrored = false,\n hasBack = false,\n superTitle,\n superTitleAs,\n title,\n titleAs,\n image,\n intro,\n text,\n subText,\n primaryAction,\n secondaryAction,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n {image && (\n <WideImage coverSpace {...image} isMirrored={isMirrored} />\n )}\n <Wrapper clampWidth=\"normal\">\n <Grid.Row gutter={spacings.spacer}>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? 14 : 0) / 28,\n }}\n ></Grid.Col>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? -14 : 0) / 28,\n }}\n >\n <InfoWrapper isMirrored={isMirrored}>\n <StyledTitle\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n />\n {intro && (\n <ContentBlock\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n />\n )}\n {text && (\n <ContentBlock\n isInverted={isInverted}\n innerHTML={text}\n />\n )}\n {subText && (\n <SubTextBlock\n isInverted={isInverted}\n type=\"copy-i\"\n innerHTML={subText}\n />\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={\n primaryAction &&\n primaryAction(isInverted)\n }\n secondary={\n secondaryAction &&\n secondaryAction(isInverted)\n }\n />\n )}\n </InfoWrapper>\n </Grid.Col>\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport default TeaserWide;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.a<{ inverted?: boolean; disable?: boolean }>`\n padding: 0.2em;\n\n display: inline-block;\n display: inline-flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: ${({ theme }) => font(theme).copy.medium.weight};\n text-align: center;\n text-decoration: underline;\n line-height: 1;\n letter-spacing: ${({ theme }) => font(theme).copy.medium.letterSpacing};\n\n perspective: 1000;\n -webkit-font-smoothing: subpixel-antialiased;\n -webkit-perspective: 1000;\n -moz-osx-font-smoothing: grayscale;\n will-change: auto;\n\n outline: none;\n border: none;\n cursor: pointer;\n\n pointer-events: ${({ disable }) => (disable ? 'none' : 'all')};\n\n background: none;\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.light\n : inverted\n ? color(theme).light\n : color(theme).dark};\n\n & > * {\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.light\n : inverted\n ? color(theme).light\n : color(theme).dark};\n }\n\n & > :not(:last-child) {\n padding-right: ${spacings.nudge}px;\n }\n\n &:hover {\n opacity: 0.6;\n }\n\n /* &:focus {\n text-decoration: underline;\n }\n\n &:active {\n text-decoration: underline;\n } */\n`;\n\ninterface Props {\n isInverted?: boolean;\n isDisabled?: boolean;\n onClick?: () => void;\n className?: string;\n}\n\nexport type BtnProps = Props & {\n as?: 'button';\n};\n\nexport type LinkProps = Props & {\n as?: 'a';\n href?: string;\n isExternal?: boolean;\n};\n\nconst Pointer: React.FC<BtnProps | LinkProps> = React.forwardRef(\n (\n { as, isInverted, isDisabled, onClick, className, children, ...rest },\n ref\n ) => {\n if (as === 'button') {\n return (\n <View\n ref={ref}\n as={as as any}\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n } else {\n return (\n <View\n ref={ref}\n as={as as any}\n href={(rest as LinkProps).href}\n data-disabled={isDisabled}\n target={\n (rest as LinkProps).isExternal ? '_blank' : undefined\n }\n rel={\n (rest as LinkProps).isExternal\n ? 'noopener noreferrer'\n : undefined\n }\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n }\n }\n);\n\nPointer.displayName = 'Button';\n\nconst Icon = styled.div<{ iconColor?: string }>`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n width: 35px;\n height: 35px;\n\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).primary.medium};\n\n transition: transform 0.2s ease-in-out;\n\n ${View}[data-disabled='true'] > & {\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).mono.light};\n }\n\n ${View}:hover > & {\n transform: translateX(3px);\n }\n`;\n\nconst Label = styled.span`\n display: inline-block;\n`;\n\nexport default { View: Pointer, Label: Label, Icon: Icon };\n","import React, { FC, useContext, useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport SlickSlider, { Settings } from 'react-slick';\nimport { withRange } from 'utils/styles';\n\n// Slider context\ninterface SliderContextState {\n setSlider?: React.Dispatch<\n React.SetStateAction<SlickSlider | null | undefined>\n >;\n setSlideCount?: React.Dispatch<React.SetStateAction<number>>;\n steps: number;\n currentStep: number;\n slideSpacing?: { min: number; max: number };\n cursorPaths?: {\n prev?: string;\n next?: string;\n };\n clickSideOffset: number;\n fullHeight?: boolean;\n sameHeight?: boolean;\n slickSettings: Settings;\n goToStep: (step: number) => void;\n nextStep: () => void;\n previousStep: () => void;\n isOnFirstStep: () => boolean;\n isOnLastStep: () => boolean;\n}\n\nexport const SliderContext = React.createContext<SliderContextState>({\n steps: 0,\n currentStep: 0,\n slickSettings: {},\n clickSideOffset: 0.2,\n goToStep: () => '',\n nextStep: () => '',\n previousStep: () => '',\n isOnFirstStep: () => {\n return false;\n },\n isOnLastStep: () => {\n return false;\n },\n});\n\nexport type SlickSliderSettings = Pick<\n Settings,\n | 'responsive'\n | 'draggable'\n | 'speed'\n | 'slidesToShow'\n | 'slidesToScroll'\n | 'variableWidth'\n | 'autoplay'\n | 'autoplaySpeed'\n | 'fade'\n | 'swipe'\n | 'infinite' // not fully working yet\n>;\n\nconst Slider: FC<\n SlickSliderSettings & {\n initialStep?: number;\n slideSpacing?: { min: number; max: number }; // max image size 64x64\n cursorPaths?: {\n prev?: string;\n next?: string;\n };\n clickSideOffset?: number;\n sameHeight?: boolean;\n fullHeight?: boolean;\n beforeChange?: (props: {\n currentStep: number;\n nextStep: number;\n }) => void;\n afterChange?: (currentStep: number) => void;\n onInit?: (steps: number) => void;\n }\n> = ({\n initialStep = 0,\n slideSpacing,\n cursorPaths,\n clickSideOffset = 0.2,\n fullHeight,\n sameHeight,\n beforeChange,\n afterChange,\n onInit,\n children,\n ...rest\n}) => {\n const [slideCount, setSlideCount] = useState<number>(0);\n const [sliderRef, setSliderRef] = useState<SlickSlider | null>();\n const [currentStep, setCurrentStep] = useState<number>(initialStep);\n const [visibleSlides, setVisibleSlides] = useState<number | null>();\n const [steps, setSteps] = useState<number>(0);\n\n const goToStep = (step: number) => {\n if (sliderRef) {\n const intNum = Math.floor(step);\n if (intNum >= 0 && intNum < steps) {\n sliderRef.slickGoTo(intNum);\n }\n }\n };\n\n const nextStep = () => {\n if (sliderRef) {\n let prev = currentStep;\n if (slickSettings.infinite) sliderRef.slickGoTo(++prev);\n else sliderRef.slickGoTo(prev >= slideCount - 1 ? prev : ++prev);\n }\n };\n\n const previousStep = () => {\n if (sliderRef) {\n let prev = currentStep;\n if (slickSettings.infinite) sliderRef.slickGoTo(--prev);\n sliderRef.slickGoTo(prev <= 0 ? prev : --prev);\n }\n };\n\n const isOnFirstStep = (): boolean => {\n return slickSettings.infinite ? false : currentStep === 0;\n };\n\n const isOnLastStep = (): boolean => {\n return slickSettings.infinite ? false : currentStep >= steps - 1;\n };\n\n // slick settings\n const slickSettings: Settings = {\n className: 'slider variable-width',\n dots: false,\n arrows: false,\n infinite: false,\n speed: 500,\n slidesToScroll: 1,\n slidesToShow: 1,\n variableWidth: true,\n fade: false,\n swipe: true,\n beforeChange: (current: number, next: number) => {\n beforeChange &&\n beforeChange({ currentStep: current, nextStep: next });\n setCurrentStep(next);\n },\n afterChange: afterChange,\n ...rest,\n };\n\n // calc slidesToShow on each window resize\n useEffect(() => {\n const handleResize = () => {\n if (sliderRef && slickSettings.responsive) {\n const settings = slickSettings.responsive;\n const cBreakpoint: number | null = (sliderRef.state as any)\n .breakpoint;\n\n for (let i = 0; i < settings.length; i++) {\n if (settings[i].breakpoint === cBreakpoint) {\n const { slidesToShow } = settings[i]\n .settings as Settings;\n\n if (slidesToShow) setVisibleSlides(slidesToShow);\n break;\n }\n }\n }\n };\n\n // calc visible slides\n if (sliderRef && slickSettings.slidesToShow) {\n setVisibleSlides(slickSettings.slidesToShow);\n handleResize();\n window.addEventListener('resize', handleResize);\n }\n\n return () => {\n if (sliderRef) window.removeEventListener('resize', handleResize);\n };\n }, [slickSettings.responsive, slickSettings.slidesToShow, sliderRef]);\n\n useEffect(() => {\n // calc steps\n if (visibleSlides) {\n const itemsPerSlide = Math.floor(visibleSlides);\n\n let slides = 0;\n for (let i = 0; i < slideCount; i++) {\n if (i + itemsPerSlide > slideCount) {\n break;\n } else slides += 1;\n }\n setSteps(slides);\n }\n }, [slideCount, visibleSlides]);\n\n useEffect(() => {\n if (steps && steps > 0) {\n onInit && onInit(steps);\n }\n }, [onInit, steps]);\n\n return (\n <SliderContext.Provider\n value={{\n setSlider: setSliderRef,\n setSlideCount: setSlideCount,\n steps: steps,\n currentStep: currentStep,\n slideSpacing: slideSpacing,\n cursorPaths: cursorPaths,\n clickSideOffset: clickSideOffset,\n fullHeight: fullHeight,\n sameHeight: sameHeight,\n slickSettings: slickSettings,\n goToStep: goToStep,\n nextStep: nextStep,\n previousStep: previousStep,\n isOnFirstStep: isOnFirstStep,\n isOnLastStep: isOnLastStep,\n }}\n >\n {children}\n </SliderContext.Provider>\n );\n};\n\nconst SlidesView = styled.div<{\n cursorPath?: string;\n sameHeight?: boolean;\n fullHeight?: boolean;\n}>`\n position: relative;\n width: 100%;\n overflow: hidden;\n\n cursor: ${({ cursorPath }) =>\n cursorPath ? `url(\"${cursorPath}\") 64 64, auto` : 'default'};\n\n ${({ fullHeight }) =>\n fullHeight &&\n css`\n .slick-list {\n height: 100%;\n }\n `}\n\n .slick-track {\n display: flex;\n height: ${({ fullHeight }) => (fullHeight ? '100%' : 'auto')};\n ${({ sameHeight, fullHeight }) =>\n (sameHeight || fullHeight) &&\n css`\n .slick-slide {\n height: auto;\n > div {\n height: 100%;\n > div {\n height: 100%;\n }\n }\n }\n `}\n }\n`;\n\nconst StyledSlider = styled(SlickSlider)<{\n leftMargin?: { min: number; max: number };\n}>`\n ${({ leftMargin }) =>\n leftMargin &&\n withRange([leftMargin.min * -1, leftMargin.max * -1], 'margin-left')};\n`;\n\nenum CursorState {\n PREV,\n NEXT,\n}\n\nconst Slides: FC<{\n className?: string;\n}> = ({ children, className }) => {\n const context = useContext(SliderContext);\n const [cursor, setCursor] = useState<CursorState | null>();\n const [viewRef, setViewRef] = useState<HTMLDivElement | null>();\n const [mousePos, setMousePos] = useState<number>(0);\n\n // cursor control\n const getCursorPath = () => {\n switch (cursor) {\n case CursorState.NEXT:\n return context.cursorPaths?.next;\n case CursorState.PREV:\n return context.cursorPaths?.prev;\n default:\n return undefined;\n }\n };\n\n const handleClick = (ev: React.MouseEvent) => {\n if (context.clickSideOffset <= 0) return;\n ev.stopPropagation();\n if (!viewRef) return;\n\n // check for other UI elements\n const target = ev.target as HTMLElement;\n const isSlideControl = target.classList.contains('slider-control');\n const isAnchor =\n target instanceof HTMLAnchorElement ||\n target.parentElement instanceof HTMLAnchorElement;\n\n if (ev.button !== 0 || isSlideControl || isAnchor) return;\n\n // check if step is first or last\n if (context.isOnFirstStep()) {\n context.nextStep();\n return;\n } else if (context.isOnLastStep()) {\n context.previousStep();\n return;\n }\n\n // check orientation with client x position\n const rect = viewRef.getBoundingClientRect();\n const relMouseX = mousePos - rect.left;\n if (relMouseX >= rect.width - rect.width * context.clickSideOffset) {\n context.nextStep();\n } else if (relMouseX < rect.width * context.clickSideOffset) {\n context.previousStep();\n }\n };\n\n useEffect(() => {\n if (!context.cursorPaths) return;\n if (!viewRef) return;\n const rect = viewRef.getBoundingClientRect();\n const relMouseX = mousePos - rect.left;\n\n if (relMouseX >= rect.width / 2) {\n if (context.isOnLastStep()) setCursor(CursorState.PREV);\n else setCursor(CursorState.NEXT);\n } else {\n if (context.isOnFirstStep()) setCursor(CursorState.NEXT);\n else setCursor(CursorState.PREV);\n }\n }, [context, mousePos, viewRef]);\n\n useEffect(() => {\n if (children && context.setSlideCount)\n context.setSlideCount(React.Children.count(children));\n }, [children, context]);\n\n return (\n <SliderContext.Consumer>\n {(values) => (\n <SlidesView\n ref={setViewRef}\n cursorPath={getCursorPath()}\n onMouseMove={(ev) => setMousePos(ev.clientX)}\n fullHeight={context.fullHeight}\n sameHeight={context.sameHeight}\n onClick={handleClick}\n className={className}\n >\n <StyledSlider\n ref={context.setSlider}\n leftMargin={values.slideSpacing}\n {...values.slickSettings}\n >\n {children}\n </StyledSlider>\n </SlidesView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nconst SlideView = styled.div<{ spacing?: { min: number; max: number } }>`\n width: 100%;\n outline: none;\n\n ${({ spacing }) =>\n spacing && withRange([spacing.min, spacing.max], 'padding-left')};\n`;\n\nconst Slide: FC<{\n className?: string;\n}> = ({ children, className }) => {\n return (\n <SliderContext.Consumer>\n {(value) => (\n <SlideView className={className} spacing={value.slideSpacing}>\n {children}\n </SlideView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nconst ControlView = styled.button``;\n\nconst Control: FC<{\n type: 'next' | 'prev';\n onClick?: (ev: React.SyntheticEvent<HTMLButtonElement>) => void;\n className?: string;\n children?: (isActive?: boolean) => React.ReactNode;\n}> = ({ type, onClick, children, className }) => {\n return (\n <SliderContext.Consumer>\n {(values) => {\n if (values.steps > 1) {\n return (\n <ControlView\n className={className + ' slider-control'}\n onClick={(ev) => {\n type === 'next'\n ? values.nextStep()\n : values.previousStep();\n\n onClick && onClick(ev);\n }}\n disabled={\n type === 'next'\n ? values.isOnLastStep()\n : values.isOnFirstStep()\n }\n >\n {children &&\n children(\n type === 'next'\n ? !values.isOnLastStep()\n : !values.isOnFirstStep()\n )}\n </ControlView>\n );\n } else return null;\n }}\n </SliderContext.Consumer>\n );\n};\n\nconst StatusView = styled.div``;\n\nconst Status: FC<{\n seperator?: string;\n className?: string;\n}> = ({ seperator = '/', className }) => {\n return (\n <SliderContext.Consumer>\n {(values) => (\n <StatusView className={className + ' slider-control'}>\n {`${values.currentStep + 1}${seperator}${values.steps}`}\n </StatusView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nconst DotView = styled.button``;\n\ninterface DotProps {\n step: number;\n disabled?: boolean;\n onClick?: (ev: React.SyntheticEvent<HTMLButtonElement>) => void;\n}\n\nconst Dot: FC<\n DotProps & {\n className?: string;\n }\n> = ({ step, disabled, onClick, className, children }) => {\n return (\n <SliderContext.Consumer>\n {(values) => (\n <DotView\n disabled={\n disabled !== undefined\n ? disabled\n : step === values.currentStep\n }\n onClick={(ev) => {\n values.goToStep(step);\n onClick && onClick(ev);\n }}\n className={className + ' slider-control'}\n >\n {children}\n </DotView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nconst DotGroupView = styled.div``;\n\nconst DotGroup: FC<{\n children?: (\n key: number,\n isActive?: boolean,\n onClick?: (ev: React.SyntheticEvent<HTMLElement>) => void\n ) => React.ReactNode;\n className?: string;\n}> = ({ className, children }) => {\n const context = useContext(SliderContext);\n const [stepsArray, setStepsArray] = useState<number[]>();\n\n useEffect(() => {\n const steps = Array<number>(context.steps);\n for (let i = 0; i < steps.length; i++) {\n steps[i] = i;\n }\n setStepsArray(steps);\n }, [context.steps]);\n\n return (\n <SliderContext.Consumer>\n {(values) => (\n <DotGroupView className={className + ' slider-control'}>\n {stepsArray &&\n stepsArray.length > 1 &&\n stepsArray?.map((step, i) => {\n return (\n children &&\n children(i, i === values.currentStep, () =>\n values.goToStep(i)\n )\n );\n })}\n </DotGroupView>\n )}\n </SliderContext.Consumer>\n );\n};\n\nexport default {\n Provider: Slider,\n Slides: Slides,\n Slide: Slide,\n Control: Control,\n Status: Status,\n Dot: Dot,\n DotGroup: DotGroup,\n};\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\nimport Intro from 'components/blocks/Intro';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Pointer from 'components/buttons/Pointer';\n\nconst StyledSection = styled(Section)<{ isCentered?: boolean }>`\n margin: 0 auto;\n\n @media ${mq.semilarge} {\n margin: ${({ isCentered }) => (isCentered ? '0 auto' : '0')};\n\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n }\n`;\n\nconst ListContainer = styled.div`\n text-align: center;\n &:not(:first-child) {\n ${withRange([spacings.spacer, spacings.spacer * 1.75], 'margin-top')}\n }\n\n &:not(:last-child) {\n ${withRange([spacings.spacer, spacings.spacer * 1.75], 'margin-bottom')}\n }\n`;\n\nconst ItemContainer = styled.div<{ isCentered?: boolean }>`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n margin-bottom: ${spacings.spacer * 1.75}px;\n\n text-align: center;\n\n @media ${mq.semilarge} {\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n }\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 6 ? 'block' : 'none'};\n\n @media ${mq.semilarge} {\n display: ${({ itemCount }) =>\n itemCount && itemCount > 8 ? 'block' : 'none'};\n }\n\n @media ${mq.large} {\n display: ${({ itemCount }) =>\n itemCount && itemCount > 10 ? 'block' : 'none'};\n }\n`;\n\nconst Items = styled.div<{ isVisible?: boolean; isCentered?: boolean }>`\n display: ${({ isVisible }) => (isVisible ? 'flex' : 'none')};\n align-items: center;\n justify-content: center;\n\n flex-wrap: wrap;\n margin-left: -20px;\n\n @media ${mq.medium} {\n align-items: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n }\n`;\n\nconst ActionsWrapper = styled.div<{ isCentered?: boolean }>`\n position: relative;\n padding-top: ${spacings.spacer * 2}px;\n\n @media ${mq.medium} {\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n }\n`;\n\nconst StyledActions = styled(Actions)`\n @media ${mq.medium} {\n max-width: 600px;\n }\n`;\n\nconst Item = styled.img<{ isVisible?: boolean; index: number }>`\n display: block;\n\n padding-left: 20px;\n padding-top: 20px;\n\n display: ${({ index, isVisible }) =>\n isVisible || index < 6 ? 'block' : 'none'};\n\n @media ${mq.semilarge} {\n display: ${({ index, isVisible }) =>\n isVisible || index < 8 ? 'block' : 'none'};\n }\n\n @media ${mq.large} {\n display: ${({ index, isVisible }) =>\n isVisible || index < 10 ? 'block' : 'none'};\n }\n`;\n\nconst ListFooter = styled(Copy)<{ isCentered?: boolean }>`\n text-align: center;\n\n @media ${mq.medium} {\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n }\n`;\n\nconst IconList: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n hasBack?: boolean;\n items: { src: string; alt?: string }[];\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n showMoreText?: string;\n showLessText?: string;\n isInverted?: boolean;\n isCentered?: boolean;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n hasBack,\n items,\n isInverted = false,\n isCentered = false,\n primaryAction,\n secondaryAction,\n showLessText = 'weniger anzeigen',\n showMoreText = 'weitere anzeigen',\n}) => {\n const [showMore, setShowMore] = React.useState(false);\n const theme = React.useContext(ThemeContext);\n\n return (\n <StyledSection\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n isCentered={isCentered}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {title && (\n <Intro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n isCentered={isCentered}\n />\n )}\n <ListContainer>\n <Copy type=\"copy\" size=\"medium\" isInverted={isInverted}>\n <ItemContainer isCentered={isCentered}>\n <Items\n isVisible={!showMore ? true : showMore === true}\n isCentered={isCentered}\n >\n {items.map(({ src, alt }, i) => {\n return (\n <Item\n isVisible={showMore}\n index={i}\n key={i}\n src={src}\n alt={alt}\n />\n );\n })}\n </Items>\n </ItemContainer>\n <ListFooter\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n isCentered={isCentered}\n >\n <ShowMore\n itemCount={items.length}\n onClick={() => setShowMore((prev) => !prev)}\n >\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMore ? showLessText : showMoreText}\n </Pointer.Label>\n </Pointer.View>\n </ShowMore>\n </ListFooter>\n </Copy>\n </ListContainer>\n\n {(primaryAction || secondaryAction) && (\n <ActionsWrapper isCentered={isCentered}>\n <StyledActions\n isCentered={isCentered}\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n </ActionsWrapper>\n )}\n </Wrapper>\n </StyledSection>\n );\n};\n\nexport default IconList;\n","import * as React from 'react';\nimport styled, { ThemeContext, css } from 'styled-components';\n\nimport Section, { BgMode } from 'components/base/Section';\nimport Title from 'components/blocks/Title';\nimport Copy from 'components/typography/Copy';\nimport Wrapper from 'components/base/Wrapper';\nimport { spacings, mq, getColors as color } from 'utils/styles';\nimport Actions from 'components/blocks/Actions';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst StyledTitle = styled(Title)`\n @media ${mq.semilarge} {\n max-width: 50%;\n }\n`;\n\nconst Content = styled.div<{ withAsideText?: boolean }>`\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n\n ${({ withAsideText }) =>\n withAsideText &&\n css`\n @media ${mq.semilarge} {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n\n & > * + * {\n margin-left: ${spacings.spacer * 3}px;\n }\n }\n `}\n`;\n\nconst ContentBlock = styled.div<{ isAside?: boolean }>`\n & + & {\n padding-top: ${({ isAside }) => (isAside ? spacings.spacer : '0')}px;\n }\n\n flex: ${({ isAside }) => (isAside ? '1 0 30%' : '1 0 60%')};\n\n @media ${mq.semilarge} {\n max-width: ${({ isAside }) => (isAside ? '100%' : '60%')};\n\n & + & {\n padding-top: 0;\n }\n }\n`;\n\nconst ContentText = styled(Copy)`\n text-align: left;\n`;\n\nconst StyledActions = styled(Actions)`\n padding-top: ${spacings.spacer * 2}px;\n\n @media ${mq.semilarge} {\n max-width: 50%;\n }\n`;\n\nconst Article: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n intro?: string;\n text?: string;\n asideText?: string;\n\n bgMode?: BgMode;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n intro,\n text,\n asideText,\n bgMode,\n primaryAction,\n secondaryAction,\n isInverted = false,\n}) => {\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'half-right':\n return 'half-right';\n case 'half-left':\n return 'half-left';\n case 'larger-right':\n return 'larger-right';\n case 'larger-left':\n return 'larger-left';\n default:\n return undefined;\n }\n };\n\n const theme = React.useContext(ThemeContext);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n <StyledTitle\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n <Content withAsideText={asideText ? true : false}>\n <ContentBlock>\n {intro && (\n <ContentText\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n />\n )}\n {text && (\n <ContentText\n type=\"copy\"\n isInverted={isInverted}\n innerHTML={text}\n />\n )}\n </ContentBlock>\n\n {asideText && (\n <ContentBlock isAside>\n <ContentText\n type=\"copy\"\n isInverted={isInverted}\n innerHTML={asideText}\n />\n </ContentBlock>\n )}\n </Content>\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default Article;\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport { mq, spacings, withRange } from 'utils/styles';\n\nimport Copy from 'components/typography/Copy';\nimport Image, { ImageProps as Props } from 'components/blocks/Image';\nimport Actions from './Actions';\n\nconst View = styled.div`\n min-width: 270px;\n padding-bottom: ${spacings.nudge}px;\n`;\n\nconst ImageContainer = styled.div<{ isCentered?: boolean }>`\n display: flex;\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n padding-bottom: ${spacings.spacer * 2}px;\n`;\n\nconst StyledImage = styled(Image)`\n // width: 100%;\n`;\n\nconst Content = styled.div<{ addWhitespace?: boolean; isCentered?: boolean }>`\n text-align: ${({ isCentered }) => isCentered && 'center'};\n padding: 0\n ${({ addWhitespace }) => addWhitespace && spacings.nudge * 2 + 'px'};\n\n & + & {\n ${withRange(\n [spacings.spacer * 1.5, spacings.spacer * 2],\n 'padding-top'\n )}\n }\n`;\n\nconst ArticleContent = styled(Content)<{ isCentered?: boolean }>`\n text-align: ${({ isCentered }) => isCentered && 'center'};\n\n @media ${mq.medium} {\n max-width: 95%;\n }\n`;\n\nconst ContentBlock = styled(Copy)`\n & + & {\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'padding-top')}\n }\n`;\n\nconst Desc = styled.div`\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'padding-top')}\n`;\n\nconst StyledActions = styled(Actions)<{ addWhitespace?: boolean }>`\n padding: 0\n ${({ addWhitespace }) => addWhitespace && spacings.nudge * 2 + 'px'};\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')}\n\n @media ${mq.medium} {\n width: 100%;\n\n & > * {\n max-width: 50%;\n min-width: 0 !important;\n flex: 1;\n }\n }\n`;\n\nexport interface FeatureProps {\n isInverted?: boolean;\n isCentered?: boolean;\n title?: string;\n description?: string;\n intro?: string;\n text?: string;\n image?: Props;\n\n addWhitespace?: boolean;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}\n\nconst Feature: React.FC<\n FeatureProps & {\n className?: string;\n }\n> = ({\n title,\n description,\n intro,\n text,\n image,\n addWhitespace = false,\n isInverted = false,\n isCentered = false,\n primaryAction,\n secondaryAction,\n className,\n}) => {\n return (\n <View className={className}>\n {image && (\n <ImageContainer isCentered={isCentered}>\n <StyledImage\n small={image.small}\n medium={image.medium}\n semilarge={image.semilarge}\n large={image.large}\n xlarge={image.xlarge}\n alt={image.alt}\n coverSpace={image.coverSpace}\n />\n </ImageContainer>\n )}\n <Content addWhitespace={addWhitespace} isCentered={isCentered}>\n <ContentBlock\n type=\"copy-b\"\n size=\"big\"\n isInverted={isInverted}\n data-sheet=\"title\"\n >\n {title}\n </ContentBlock>\n {description && (\n <ContentBlock\n size=\"small\"\n isInverted={isInverted}\n data-sheet=\"desc\"\n >\n <Desc\n dangerouslySetInnerHTML={{ __html: description }}\n />\n </ContentBlock>\n )}\n </Content>\n <ArticleContent\n addWhitespace={addWhitespace}\n isCentered={isCentered}\n >\n {intro && (\n <ContentBlock\n type=\"copy-b\"\n isInverted={isInverted}\n innerHTML={intro}\n data-sheet=\"intro\"\n />\n )}\n {text && (\n <ContentBlock\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n innerHTML={text}\n data-sheet=\"text\"\n />\n )}\n </ArticleContent>\n {(primaryAction || secondaryAction) && (\n <StyledActions\n isCentered={isCentered}\n addWhitespace={addWhitespace}\n primary={primaryAction && primaryAction(isInverted)}\n secondary={secondaryAction && secondaryAction(isInverted)}\n />\n )}\n </View>\n );\n};\n\nexport default Feature;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings, mq } from 'utils/styles';\nimport Section, { BgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Feature, { FeatureProps } from 'components/blocks/Feature';\nimport Intro from 'components/blocks/Intro';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\n\nconst StyledIntro = styled(Intro)`\n padding-bottom: ${spacings.spacer * 2}px;\n`;\n\nconst ContentContainer = styled.div<{ isHalf?: boolean }>`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: ${({ isHalf }) => (isHalf ? 'center' : 'flex-start')};\n align-items: flex-start;\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n padding-left: 20px;\n padding-top: 40px;\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n\n @media ${mq.large} {\n padding-right: ${({ isHalf }) => isHalf && '7%'};\n padding-left: ${({ isHalf }) => isHalf && '7%'};\n\n & > * {\n flex: ${({ isHalf }) => (isHalf ? '1 0 50%' : '1 0 33.33%')};\n max-width: ${({ isHalf }) => (isHalf ? '50%' : '33.33%')};\n }\n }\n`;\n\nconst FeatureList: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n isCentered?: boolean;\n features?: FeatureProps[];\n bgMode?: 'full' | 'splitted';\n}> = ({\n features,\n bgMode,\n isInverted = false,\n isCentered = false,\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n}) => {\n const theme = React.useContext(ThemeContext);\n const featureCount = features?.length || 0;\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\n listLength: featureCount,\n identifiers: [\n '[data-sheet=\"title\"]',\n '[data-sheet=\"desc\"]',\n '[data-sheet=\"intro\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: featureCount % 2 === 0 ? 2 : 3,\n xlarge: featureCount % 2 === 0 ? 2 : 3,\n },\n });\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'splitted':\n return 'half-right';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n {title && (\n <Wrapper addWhitespace>\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n secondaryAction={secondaryAction}\n primaryAction={primaryAction}\n />\n </Wrapper>\n )}\n <Wrapper addWhitespace clampWidth=\"normal\">\n {features && (\n <ContentContainer\n isHalf={features.length % 2 === 0 ? true : false}\n >\n {features &&\n features.map((feature, i) => {\n return (\n <div key={i} ref={cardRefs[i]}>\n <Feature\n isCentered={isCentered}\n isInverted={isInverted}\n addWhitespace\n {...feature}\n />\n </div>\n );\n })}\n </ContentContainer>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default FeatureList;\n","import React, { FC } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Intro from './Intro';\n\nconst View = styled.div<{\n clickable?: boolean;\n}>`\n display: block;\n position: relative;\n width: 100%;\n\n &:after {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: ${({ theme }) => global(theme).sections.imageTextGradient};\n pointer-events: none;\n }\n\n ${({ clickable }) =>\n clickable &&\n css`\n transition: box-shadow 0.2s ease-in-out;\n cursor: pointer;\n\n &:hover {\n box-shadow: 0 2px 24px 0 rgba(0, 0, 0, 0.35);\n }\n `}\n`;\n\nconst StyledImage = styled(Image)`\n width: 100%;\n min-height: 300px;\n`;\n\nconst LinkHelper = styled.a`\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n`;\n\nconst IntroContainer = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: auto;\n z-index: 1;\n\n padding-left: ${spacings.spacer}px;\n padding-right: ${spacings.spacer}px;\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')};\n ${withRange([spacings.spacer, spacings.spacer * 4], 'padding-bottom')};\n\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n display: block;\n flex: 1 0 0px;\n }\n\n @media ${mq.semilarge} {\n padding-left: calc(${1 / 28} * 100vw);\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nexport interface PromotionCardProps {\n image: ImageProps;\n title?: string;\n superTitle?: string;\n text?: string;\n href?: string;\n primaryAction?: React.ReactNode;\n secondaryAction?: React.ReactNode;\n onClick?: () => void;\n}\n\nconst PromotionCard: FC<PromotionCardProps> = ({\n image,\n title,\n superTitle,\n text,\n href,\n primaryAction,\n secondaryAction,\n onClick,\n}) => {\n return (\n <View onClick={onClick} clickable={onClick || href ? true : false}>\n <StyledImage {...image} coverSpace />\n {title && (\n <IntroContainer>\n <LinkHelper href={href} />\n <Intro\n colorMode=\"onImage\"\n title={title}\n superTitle={superTitle}\n text={text}\n secondaryAction={() => secondaryAction}\n primaryAction={() => primaryAction}\n clampText={text !== undefined}\n />\n </IntroContainer>\n )}\n </View>\n );\n};\n\nexport default PromotionCard;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings, mq } from 'utils/styles';\n\nimport Grid from 'components/base/Grid';\nimport Section, { BgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\n\nimport Intro from 'components/blocks/Intro';\nimport PromotionCard, {\n PromotionCardProps,\n} from 'components/blocks/PromotionCard';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst StyledIntro = styled(Intro)`\n padding-bottom: ${spacings.spacer * 2}px;\n`;\n\nconst FlexGrid = styled.div`\n @media ${mq.semilarge} {\n display: flex;\n flex-direction: row;\n margin-left: -${spacings.spacer}px;\n }\n`;\n\nconst FlexGridCol = styled.div`\n display: flex;\n flex-direction: column;\n\n @media ${mq.semilarge} {\n flex: 1 0 50%;\n max-width: 50%;\n padding-left: ${spacings.spacer}px;\n }\n\n & + & {\n margin-top: ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n margin-top: 0;\n }\n }\n`;\n\nconst PosterContainer = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n\n flex: 1 0 auto;\n\n & + & {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst CrossPromotion: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n main?: Array<PromotionCardProps & { size?: 'full' | 'half' }>;\n aside?: Array<PromotionCardProps & { size?: 'full' | 'half' }>;\n isMirrored?: boolean;\n\n // bgMode?: 'full' | 'splitted';\n bgMode?: BgMode;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n main,\n aside,\n bgMode,\n isInverted = false,\n isMirrored = false,\n}) => {\n // const getSectionBgMode = (): BgMode | undefined => {\n // switch (bgMode) {\n // case 'full':\n // return 'full';\n // case 'splitted':\n // return 'half-right';\n // default:\n // return undefined;\n // }\n // };\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'half-right':\n return 'half-right';\n case 'half-left':\n return 'half-left';\n case 'larger-right':\n return 'larger-right';\n case 'larger-left':\n return 'larger-left';\n default:\n return undefined;\n }\n };\n\n const theme = React.useContext(ThemeContext);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n {title && (\n <Wrapper addWhitespace>\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n secondaryAction={secondaryAction}\n primaryAction={primaryAction}\n />\n </Wrapper>\n )}\n <Wrapper clampWidth=\"normal\">\n <Grid.Row>\n <Grid.Col>\n {aside ? (\n isMirrored ? (\n <FlexGrid>\n <FlexGridCol>\n {main &&\n main.map((card, i) => (\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n ))}\n </FlexGridCol>\n\n <FlexGridCol>\n {aside.map((card, i) => (\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n ))}\n </FlexGridCol>\n </FlexGrid>\n ) : (\n <FlexGrid>\n <FlexGridCol>\n {aside.map((card, i) => (\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n ))}\n </FlexGridCol>\n <FlexGridCol>\n {main &&\n main.map((card, i) => (\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n ))}\n </FlexGridCol>\n </FlexGrid>\n )\n ) : (\n <Grid.Row>\n {main &&\n main.map((card, i) => (\n <Grid.Col\n semilarge={{\n span:\n (card.size === 'half'\n ? 14\n : 28) / 28,\n }}\n key={i}\n >\n <PosterContainer key={i}>\n <PromotionCard {...card} />\n </PosterContainer>\n </Grid.Col>\n ))}\n </Grid.Row>\n )}\n </Grid.Col>\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport default CrossPromotion;\n","import React, { FC } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Intro from 'components/blocks/Intro';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst PosterContainer = styled.div<{\n hasContent?: boolean;\n}>`\n position: relative;\n width: 100%;\n max-height: 500px;\n\n @media ${mq.medium} {\n max-height: 900px;\n }\n\n &:after {\n content: ${({ hasContent }) => hasContent && '\"\"'};\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: ${({ theme }) => global(theme).sections.imageTextGradient};\n pointer-events: none;\n }\n\n ${({ onClick }) =>\n onClick &&\n css`\n transition: box-shadow 0.2s ease-in-out;\n cursor: pointer;\n\n &:hover {\n box-shadow: 0 2px 24px 0 rgba(0, 0, 0, 0.35);\n }\n `}\n`;\n\nconst StyledImage = styled(Image)`\n width: 100%;\n min-height: 500px;\n`;\n\nconst IntroContainer = styled(Wrapper)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: auto;\n z-index: 1;\n\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')};\n ${withRange([spacings.spacer, spacings.spacer * 4], 'padding-bottom')};\n\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n display: block;\n flex: 1 0 0px;\n }\n`;\n\nconst Poster: FC<{\n image: ImageProps;\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n image,\n}) => {\n return (\n <Section>\n <Wrapper clampWidth=\"large\">\n <PosterContainer hasContent={title !== undefined}>\n <StyledImage {...image} coverSpace />\n {title && (\n <IntroContainer addWhitespace>\n <Intro\n colorMode=\"onImage\"\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n secondaryAction={secondaryAction}\n primaryAction={primaryAction}\n clampText={text !== undefined}\n />\n </IntroContainer>\n )}\n </PosterContainer>\n </Wrapper>\n </Section>\n );\n};\n\nexport default Poster;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Play: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"67\"\n height=\"67\"\n viewBox=\"0 0 67 67\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M26.5625 48.2812l20-15-20-15v30zM33.2812 0c9.1668 0 17.0052 3.25518 23.5157 9.76562 6.5104 6.51048 9.7656 14.34888 9.7656 23.51558 0 9.1668-3.2552 17.0052-9.7656 23.5157-6.5105 6.5104-14.3489 9.7656-23.5157 9.7656-9.1667 0-17.0051-3.2552-23.51558-9.7656C3.25518 50.2864 0 42.448 0 33.2812c0-9.1667 3.25518-17.0051 9.76562-23.51558C16.2761 3.25518 24.1145 0 33.2812 0z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Play;\n","import React, { FC, useState } from 'react';\nimport styled from 'styled-components';\n\nimport { ImageProps } from 'components/blocks/Image';\nimport { mq, getColors as color } from 'utils/styles';\nimport Play from 'components/base/icons/Play';\n\nconst View = styled.div<{ bgImage?: ImageProps; isActive?: boolean }>`\n text-align: center;\n\n cursor: pointer;\n position: relative;\n\n padding-bottom: 56.25%;\n\n background-image: url('${({ bgImage }) => (bgImage ? bgImage.small : '')}');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n @media ${mq.medium} {\n text-align: left;\n\n background-image: ${({ bgImage }) =>\n bgImage ? `url(\"${bgImage.medium}\")` : ''};\n }\n\n @media ${mq.semilarge} {\n background-image: ${({ bgImage }) =>\n bgImage ? `url(\"${bgImage.semilarge}\")` : ''};\n }\n\n @media ${mq.large} {\n background-image: ${({ bgImage }) =>\n bgImage ? `url(\"${bgImage.large}\")` : ''};\n }\n\n @media ${mq.xlarge} {\n background-image: ${({ bgImage }) =>\n bgImage ? `url(\"${bgImage.xlarge}\")` : ''};\n }\n\n &:before {\n content: ${({ isActive, bgImage }) => !isActive && bgImage && '\"\"'};\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background-color: ${({ theme }) => color(theme).mono.medium};\n opacity: ${({ bgImage }) => (bgImage ? '0.3' : '0')};\n\n pointer-events: none;\n }\n\n &:after {\n content: ${({ isActive, bgImage }) => !isActive && bgImage && '\"\"'};\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n pointer-events: none;\n\n background: linear-gradient(\n 358.19deg,\n rgba(29, 34, 35, 0.52) 12.37%,\n rgba(29, 34, 35, 0) 59.02%\n );\n }\n`;\n\nconst VideoControls = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n color: ${({ theme }) => color(theme).light};\n\n & > * {\n opacity: 0.8;\n transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out;\n }\n\n ${View}:hover > & > * {\n transform: scale(1.05);\n opacity: 1;\n }\n\n ${View}:active > & > * {\n transform: scale(0.95);\n opacity: 1;\n }\n`;\n\nconst Iframe = styled.iframe`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n\n border: none;\n`;\n\nexport interface VideoCardProps {\n bgImage: ImageProps;\n embedId: string;\n playIcon?: React.ReactChild;\n}\n\nconst VideoCard: FC<VideoCardProps & { className?: string }> = ({\n bgImage,\n embedId,\n playIcon,\n className,\n}) => {\n const [isActive, setIsActive] = useState(false);\n\n return (\n <View\n onClick={() => setIsActive(true)}\n bgImage={isActive ? undefined : bgImage}\n isActive={isActive}\n className={className}\n >\n {!isActive && <VideoControls>{playIcon || <Play />}</VideoControls>}\n {isActive && (\n <Iframe\n id=\"ytplayer\"\n src={`https://www.youtube.com/embed/${embedId}?autoplay=1`}\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n />\n )}\n </View>\n );\n};\n\nexport default VideoCard;\n","import React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport { getColors as color, spacings } from 'utils/styles';\nimport Intro from 'components/blocks/Intro';\nimport Wrapper from 'components/base/Wrapper';\nimport { ImageProps } from 'components/blocks/Image';\n\nimport VideoCard from 'components/blocks/VideoCard';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst StyledIntro = styled(Intro)`\n padding-bottom: ${spacings.spacer * 2}px;\n`;\n\nconst Video: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n bgImage: ImageProps;\n embedId: string;\n playIcon?: React.ReactChild;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n hasBack?: boolean;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n hasBack = false,\n bgImage,\n embedId,\n playIcon,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <Section\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n addSeperation\n >\n {title && (\n <Wrapper addWhitespace>\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n </Wrapper>\n )}\n <Wrapper>\n <VideoCard\n bgImage={bgImage}\n embedId={embedId}\n playIcon={playIcon}\n />\n </Wrapper>\n </Section>\n );\n};\n\nexport default Video;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\n} from 'utils/styles';\nimport Copy from 'components/typography/Copy';\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Intro from 'components/blocks/Intro';\nimport Actions from 'components/blocks/Actions';\n\nconst ContactView = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n margin: 0 auto;\n width: 100%;\n\n text-align: left;\n hyphens: auto;\n overflow-wrap: break-word;\n\n @media ${mq.medium} {\n flex-direction: row;\n }\n`;\n\nconst Avatar = styled.img`\n height: 196px;\n width: 196px;\n border: solid 1px transparent;\n border-radius: 50%;\n padding: ${spacings.nudge}px;\n\n @media ${mq.medium} {\n margin-right: ${spacings.nudge * 6}px;\n }\n`;\n\nconst Info = styled.div`\n display: flex;\n flex-direction: column;\n align-self: flex-start;\n align-content: center;\n text-align: center;\n width: 100%;\n\n padding: ${spacings.spacer}px;\n\n & > *:not(:last-child) {\n margin-bottom: ${spacings.spacer * 1.5}px;\n }\n\n @media ${mq.medium} {\n align-content: flex-start;\n text-align: left;\n width: auto;\n }\n`;\n\nconst Address = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: ${spacings.nudge}px;\n\n & + & {\n margin-top: ${spacings.nudge}px;\n }\n\n & > *:not(:first-child) {\n margin-left: 0;\n }\n\n @media ${mq.medium} {\n justify-content: flex-start;\n flex-direction: row;\n padding: ${spacings.nudge}px ${spacings.nudge}px ${spacings.nudge}px 0;\n\n & > *:not(:first-child) {\n margin-left: ${spacings.spacer}px;\n }\n }\n`;\n\nconst Decorator = styled.div<{ isInverted?: boolean }>`\n flex: 1;\n width: 25px;\n margin-bottom: ${spacings.nudge * 1.5}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted\n ? font(theme)['copy-b'].big.colorInverted\n : font(theme)['copy-b'].big.color};\n\n @media ${mq.medium} {\n margin-bottom: 0;\n }\n`;\n\nconst AddressLabel = styled(Copy)`\n flex: 0 100%;\n text-align: left;\n\n a {\n color: ${({ textColor }) => textColor && textColor};\n text-decoration: none;\n }\n\n p {\n margin: 0;\n }\n\n a:hover {\n text-decoration: underline;\n }\n`;\n\nexport interface ContactBoxProps {\n isInverted?: boolean;\n name?: string;\n description?: string;\n addresses?: { decorator?: React.ReactNode; label: string }[];\n avatar?: { src: string; alt: string };\n}\n\nconst ContactBox: FC<ContactBoxProps & { className?: string }> = ({\n isInverted,\n name,\n description,\n addresses,\n avatar,\n className,\n}) => {\n return (\n <ContactView className={className}>\n {avatar && <Avatar src={avatar?.src} alt={avatar?.alt} />}\n <Info>\n {name && (\n <div>\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {name}\n </Copy>\n {description && (\n <Copy\n type=\"copy\"\n isInverted={isInverted}\n innerHTML={description}\n />\n )}\n </div>\n )}\n <div>\n {addresses &&\n addresses.map((address, i) => (\n <Address key={i}>\n <Decorator isInverted={isInverted}>\n {address.decorator}\n </Decorator>\n <AddressLabel\n type=\"copy-b\"\n size=\"big\"\n isInverted={isInverted}\n innerHTML={address.label}\n />\n </Address>\n ))}\n </div>\n </Info>\n </ContactView>\n );\n};\n\n// const StyledSection = styled(Section)`\n// padding: ${spacings.spacer * 3}px ${spacings.nudge * 2}px;\n// padding-top: ${spacings.spacer * 2}px;\n// text-align: center;\n\n// @media ${mq.medium} {\n// padding: ${spacings.spacer * 3}px ${spacings.spacer}px;\n// padding-top: ${spacings.spacer * 2}px;\n// }\n// `;\n\nconst StyledIntro = styled(Intro)`\n @media ${mq.semilarge} {\n & > *:first-child {\n min-height: 110px;\n }\n }\n`;\n\nconst Content = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n max-width: ${(17 / 28) * spacings.wrapper}px;\n margin: 0 auto;\n\n & > * + * {\n ${withRange([spacings.spacer * 1, spacings.spacer * 1.5], 'margin-top')}\n }\n`;\n\nconst StyledContactBox = styled(ContactBox)`\n margin-top: ${spacings.spacer * 2.5}px;\n`;\n\nconst StyledActions = styled(Actions)`\n @media ${mq.semilarge} {\n & > * {\n max-width: 300px;\n }\n }\n`;\n\nconst NewsletterWrapper = styled.div`\n width: 100%;\n margin-top: ${spacings.spacer * 2.5}px;\n\n @media ${mq.semilarge} {\n max-width: 400px;\n }\n`;\n\nconst Badge = styled.div`\n display: none;\n position: relative;\n height: 241px;\n width: 241px;\n margin-left: auto;\n margin-bottom: -110px;\n z-index: 3;\n\n @media ${mq.xlarge} {\n display: block;\n margin-right: ${1440 * (1 / 28) + 'px'};\n }\n`;\n\nexport const CallToAction: FC<{\n isInverted?: boolean;\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n contact?: ContactBoxProps;\n\n badge?: React.ReactNode;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n newsForm?: (isInverted?: boolean) => React.ReactNode;\n}> = ({\n isInverted = false,\n title,\n titleAs = 'h1',\n superTitle,\n superTitleAs,\n text,\n contact,\n badge,\n primaryAction,\n secondaryAction,\n newsForm,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <Section\n addSeperation\n bgColor={isInverted ? color(theme).dark : color(theme).mono.light}\n >\n <Wrapper addWhitespace clampWidth=\"normal\">\n {badge && <Badge>{badge}</Badge>}\n <Content>\n {title && (\n <StyledIntro\n isCentered\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n />\n )}\n {contact && (\n <StyledContactBox\n isInverted={isInverted}\n name={contact.name}\n description={contact.description}\n addresses={contact.addresses}\n avatar={contact.avatar}\n />\n )}\n {newsForm && (\n <NewsletterWrapper>\n {newsForm(isInverted)}\n </NewsletterWrapper>\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n isCentered\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Content>\n </Wrapper>\n </Section>\n );\n};\n\nexport default CallToAction;\n","import * as React from 'react';\nimport Section from 'components/base/Section';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors, spacings, withRange } from 'utils/styles';\nimport Wrapper from 'components/base/Wrapper';\nimport Intro from 'components/blocks/Intro';\nimport Copy from 'components/typography/Copy';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst FactsContainer = styled.ul`\n padding: 0;\n margin: 0;\n\n ${withRange([spacings.spacer * 2, spacings.spacer * 3], 'padding-top')}\n\n list-style-type: none;\n`;\n\nconst FactsItem = styled.li<{ hasText?: boolean }>`\n padding: ${spacings.spacer}px ${spacings.nudge * 2}px;\n\n background: #fff;\n\n cursor: pointer;\n\n display: flex;\n flex-direction: row;\n align-items: ${({ hasText }) => (hasText ? 'flex-start' : 'center')};\n\n & + & {\n margin-top: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Icon = styled.img`\n margin-right: ${spacings.spacer}px;\n display: block;\n width: 100%;\n max-width: ${spacings.spacer * 2}px;\n`;\n\nconst ContentBlock = styled.div`\n max-width: 80%;\n`;\n\nconst Text = styled(Copy)`\n margin-top: ${spacings.spacer}px;\n`;\n\nconst FactList: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n intro?: string;\n\n facts?: {\n label?: string;\n text?: string;\n icon?: { src: string; alt?: string };\n }[];\n\n hasBack?: boolean;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n intro,\n facts,\n hasBack,\n primaryAction,\n secondaryAction,\n isInverted,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? getColors(theme).dark\n : hasBack\n ? getColors(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {title && (\n <Intro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={intro}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n )}\n {facts && (\n <FactsContainer>\n {facts.map(({ label, text, icon }, i) => {\n return (\n <FactsItem key={i} hasText={!!text}>\n {icon && (\n <Icon src={icon.src} alt={icon.alt} />\n )}\n <ContentBlock>\n <Copy type=\"copy-b\">{label}</Copy>\n {text && (\n <Text\n type=\"copy\"\n innerHTML={text}\n />\n )}\n </ContentBlock>\n </FactsItem>\n );\n })}\n </FactsContainer>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default FactList;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { spacings, withRange } from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Copy from 'components/typography/Copy';\n\nconst View = styled.div``;\n\nconst ImageContainer = styled.div<{ isCentered?: boolean }>`\n display: flex;\n justify-content: ${({ isCentered }) =>\n isCentered ? 'center' : 'flex-start'};\n padding-bottom: ${spacings.nudge * 3}px;\n max-width: 100%;\n`;\n\nconst Content = styled.div<{ isCentered?: boolean }>`\n text-align: ${({ isCentered }) => isCentered && 'center'};\n`;\n\nconst Title = styled(Copy)`\n * + & {\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'margin-top')}\n }\n`;\n\nconst ContentBlock = styled(Copy)`\n * + & {\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'margin-top')}\n }\n`;\n\nconst Text = styled(Copy)`\n margin-top: ${spacings.nudge}px;\n\n ${Title} + & {\n ${withRange([spacings.spacer * 0.5, spacings.spacer], 'margin-top')}\n }\n`;\n\nexport interface FactProps {\n isInverted?: boolean;\n isCentered?: boolean;\n title?: string;\n subTitle?: string;\n text?: string;\n image?: ImageProps;\n}\n\nconst Fact: FC<\n FactProps & {\n className?: string;\n }\n> = ({\n isInverted = false,\n isCentered = false,\n title,\n subTitle,\n text,\n image,\n className,\n}) => {\n return (\n <View className={className}>\n {image && (\n <ImageContainer isCentered={isCentered}>\n <Image\n small={image.small}\n medium={image.medium}\n semilarge={image.semilarge}\n large={image.large}\n xlarge={image.xlarge}\n alt={image.alt}\n coverSpace={image.coverSpace}\n />\n </ImageContainer>\n )}\n <Content isCentered={isCentered}>\n {title && (\n <Title\n type=\"copy-b\"\n size=\"big\"\n isInverted={isInverted}\n data-sheet=\"title\"\n >\n {title}\n </Title>\n )}\n {subTitle && (\n <ContentBlock\n type=\"copy-b\"\n isInverted={isInverted}\n data-sheet=\"subtitle\"\n >\n {subTitle}\n </ContentBlock>\n )}\n {text && (\n <Text\n type=\"copy\"\n isInverted={isInverted}\n data-sheet=\"text\"\n innerHTML={text}\n />\n )}\n </Content>\n </View>\n );\n};\n\nexport default Fact;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Section, { BgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Intro from 'components/blocks/Intro';\nimport Fact, { FactProps } from 'components/blocks/Fact';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\n\nconst StyledIntro = styled(Intro)`\n ${withRange([spacings.spacer * 2, spacings.spacer * 4], 'padding-bottom')}\n`;\n\nconst ContentContainer = styled.div<{ columns?: number }>`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.medium} {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n\n @supports (display: grid) {\n display: -ms-grid;\n display: grid;\n -ms-grid-columns: ${({ columns }) =>\n columns &&\n new Array(columns < 3 ? columns : 3).fill('').map(() => {\n return '1fr ';\n })};\n grid-template-columns: repeat(\n ${({ columns }) => columns && (columns < 3 ? columns : 3)},\n 1fr\n );\n }\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n flex: 0 0\n ${({ columns }) =>\n columns && (1 / (columns < 3 ? columns : 3)) * 100 + '%'};\n max-width: ${({ columns }) =>\n columns && (1 / (columns < 3 ? columns : 3)) * 100 + '%'};\n padding-left: 20px;\n padding-top: 40px;\n\n @supports (display: grid) {\n max-width: 370px;\n }\n }\n }\n\n @media ${mq.semilarge} {\n & > * {\n flex: 0 0\n ${({ columns }) =>\n columns && (1 / (columns < 4 ? columns : 4)) * 100 + '%'};\n max-width: ${({ columns }) =>\n columns && (1 / (columns < 4 ? columns : 4)) * 100 + '%'};\n }\n\n @supports (display: grid) {\n -ms-grid-columns: ${({ columns }) =>\n columns &&\n new Array(columns < 4 ? columns : 4).fill('').map(() => {\n return '1fr ';\n })};\n grid-template-columns: repeat(\n ${({ columns }) => columns && (columns < 4 ? columns : 4)},\n 1fr\n );\n\n & > * {\n max-width: 370px;\n }\n }\n }\n\n @media ${mq.large} {\n & > * {\n flex: 0 0 ${({ columns }) => columns && (1 / columns) * 100 + '%'};\n max-width: ${({ columns }) => columns && (1 / columns) * 100 + '%'};\n }\n\n @supports (display: grid) {\n -ms-grid-columns: ${({ columns }) =>\n columns &&\n new Array(columns).fill('').map(() => {\n return '1fr ';\n })};\n grid-template-columns: repeat(${({ columns }) => columns}, 1fr);\n\n & > * {\n max-width: 370px;\n }\n }\n }\n`;\n\nconst FactFill = styled.div`\n display: none;\n\n @media ${mq.large} {\n display: block;\n }\n`;\n\nconst FactGrid: FC<{\n columns?: 3 | 4 | 6;\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n intro?: string;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n facts?: Array<Omit<FactProps, 'isInverted' | 'isCentered'>>;\n\n bgMode?: 'full' | 'splitted';\n isInverted?: boolean;\n isCentered?: boolean;\n}> = ({\n columns = 3,\n title,\n titleAs,\n superTitle,\n superTitleAs,\n intro,\n primaryAction,\n secondaryAction,\n facts,\n bgMode,\n isInverted,\n isCentered,\n}) => {\n const theme = useContext(ThemeContext);\n const factCount = facts?.length || 0;\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'splitted':\n return 'half-right';\n default:\n return undefined;\n }\n };\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\n listLength: factCount,\n identifiers: [\n '[data-sheet=\"title\"]',\n '[data-sheet=\"subtitle\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: 1,\n medium: columns < 3 ? columns : 3,\n semilarge: columns < 4 ? columns : 4,\n large: columns,\n xlarge: columns,\n },\n });\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {title && (\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={intro}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n )}\n {facts && (\n <ContentContainer columns={columns}>\n {facts.map((fact, i) => {\n if (\n fact?.title ||\n fact?.subTitle ||\n fact?.image ||\n fact?.text\n ) {\n return (\n <div key={i} ref={cardRefs[i]}>\n <Fact\n key={i}\n {...fact}\n isCentered={isCentered}\n isInverted={isInverted}\n />\n </div>\n );\n } else {\n return <FactFill ref={cardRefs[i]} key={i} />;\n }\n })}\n </ContentContainer>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default FactGrid;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, withRange, spacings, mq } from 'utils/styles';\nimport Intro from 'components/blocks/Intro';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport { hexToRgba } from 'utils/hexRgbConverter';\n\nconst TableContainer = styled.div`\n overflow-x: scroll;\n overflow-y: hidden;\n white-space: nowrap;\n\n /* @media ${mq.semilarge} {\n overflow-x: auto;\n overflow-y: hidden;\n white-space: pre-wrap;\n margin-right: 0px;\n } */\n`;\n\nconst TableBody = styled.table`\n width: 100%;\n max-width: 100%;\n margin-top: ${spacings.nudge * 2}px;\n\n border-collapse: separate;\n border-spacing: 0 ${spacings.nudge}px;\n\n padding: 0 ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n padding-left: ${spacings.spacer}px;\n padding-right: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n padding-left: ${(1 / 28) * 100}%;\n padding-left: ${`\n max(\n ${spacings.spacer}px,\n ${(1 / 28) * 100}%\n );\n `};\n padding-right: ${spacings.spacer}px;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n padding-right: ${spacings.spacer}px;\n }\n`;\n\nconst TableHead = styled.th`\n text-align: left;\n color: ${({ theme }) => color(theme).dark};\n background-color: ${({ theme }) => color(theme).light};\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 2}px\n ${spacings.nudge * 3.5}px ${spacings.spacer * 2}px;\n min-width: 60px;\n box-sizing: content-box;\n\n :last-child {\n padding-right: ${spacings.spacer * 2.5}px;\n }\n`;\n\nconst TableData = styled.td<{ isInverted?: boolean }>`\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 2}px\n ${spacings.nudge * 3.5}px ${spacings.spacer * 2}px;\n min-width: 60px;\n box-sizing: content-box;\n\n background-color: ${({ isInverted, theme }) =>\n hexToRgba(color(theme).light, isInverted ? 0.2 : 0.4)};\n\n :last-child {\n padding-right: ${spacings.spacer * 2.5}px;\n }\n`;\n\nexport interface TableProps {\n tableTitle?: string;\n rowTitle?: string[];\n row: {\n cols: string[];\n }[];\n isInverted?: boolean;\n}\n\nconst TableBlock: React.FC<TableProps> = ({\n row,\n tableTitle,\n rowTitle,\n isInverted,\n}) => {\n return (\n <div>\n {tableTitle && (\n <Wrapper addWhitespace>\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {tableTitle}\n </Copy>\n </Wrapper>\n )}\n <TableContainer>\n <TableBody>\n {rowTitle && (\n <thead>\n <tr>\n {rowTitle.map((item, ii) => {\n return (\n <TableHead key={ii}>\n <Copy type=\"copy-b\">{item}</Copy>\n </TableHead>\n );\n })}\n </tr>\n </thead>\n )}\n <tbody>\n {row.map(({ cols }, i) => (\n <tr key={i}>\n {cols.map((itemText, ii) => {\n return (\n <TableData\n key={ii}\n isInverted={isInverted}\n >\n <Copy isInverted={isInverted}>\n {itemText}\n </Copy>\n </TableData>\n );\n })}\n </tr>\n ))}\n </tbody>\n </TableBody>\n </TableContainer>\n </div>\n );\n};\n\nconst TableWrapper = styled.div<{ withSeperation?: boolean }>`\n ${({ withSeperation }) =>\n withSeperation &&\n withRange([spacings.spacer, spacings.spacer * 4], 'padding-top')};\n\n & + & {\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n }\n`;\n\nconst Table: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n tableItems: TableProps[];\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n}> = ({\n text,\n title,\n superTitle,\n superTitleAs,\n titleAs,\n isInverted,\n tableItems,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <Section\n addSeperation\n bgColor={isInverted ? color(theme).dark : color(theme).mono.light}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {title && (\n <Intro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n )}\n </Wrapper>\n <Wrapper>\n {tableItems.map((item, i) => {\n return (\n <TableWrapper key={i} withSeperation={!!title}>\n <TableBlock {...item} isInverted={isInverted} />\n </TableWrapper>\n );\n })}\n </Wrapper>\n </Section>\n );\n};\n\nexport default Table;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowLeftGhost: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"58\"\n height=\"58\"\n viewBox=\"0 0 58 58\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g fill=\"none\">\n <path\n d=\"M29.00009 1.0086C13.55287 1.0086 1.009 13.5526 1.009 28.99998c0 15.44738 12.54387 27.99138 27.99109 27.99138s27.99109-12.544 27.99109-27.99138S44.44731 1.0086 29.00009 1.0086zm0 1.93044c14.4048 0 26.06067 11.656 26.06067 26.06094S43.40488 55.06092 29.00009 55.06092 2.93942 43.40492 2.93942 28.99998 14.5953 2.93904 29.00009 2.93904z\"\n fill={iconColor}\n />\n <g transform=\"matrix(.96521 0 0 .96522 1.009 1.0086)\">\n <g>\n <path\n d=\"M38.73 28.38H23.634l4.7893-4.9143c.2082-.2315.3123-.4986.3123-.8013s-.1041-.5698-.3123-.8013c-.2256-.2136-.4859-.3205-.7809-.3205s-.5553.1069-.7808.3205l-6.6633 6.8374c-.0521.0713-.1041.1336-.1562.187-.052.0534-.0781.1068-.0781.1602-.052.1247-.0781.2671-.0781.4274 0 .1602.0261.3205.0781.4807.0521.0713.0911.1336.1172.187.026.0534.065.1068.1171.1602l6.6633 6.8374c.1041.1247.2169.2137.3383.2671.1215.0534.269.0801.4425.0801.1562 0 .295-.0267.4165-.0801.1214-.0534.2429-.1424.3644-.2671.2082-.2314.3123-.4985.3123-.8012s-.1041-.5698-.3123-.8013l-4.7893-4.8876H38.73c.3471 0 .6204-.1024.8199-.3072.1996-.2048.2993-.4852.2993-.8413 0-.3383-.0997-.6099-.2993-.8146-.1995-.2048-.4728-.3072-.8199-.3072z\"\n fill={iconColor}\n />\n <path d=\"M27.643 21.043c-.41579 0-.8205.1686-1.125.45703l-.00781.00781-6.6953 6.8691-.01953.0293c-.04046.05536-.07885.09952-.11133.1328-.10781.11073-.21275.28915-.2168.5-.03865.14284-.08203.28464-.08203.43556 0 .2145.03644.43009.10352.63672l.02539.07422.04687.0664c.04037.05525.06313.09664.07031.11133.05464.11173.128.20605.20898.28906l6.6641 6.8379-.02539-.0293c.14297.17127.3152.31443.51953.4043.20176.08868.41973.12306.64453.12306.21318 0 .42348-.03791.6172-.12305.19627-.08634.3667-.21614.52147-.375l.00782-.00781.00586-.00782c.28073-.312.4414-.71743.4414-1.1348s-.16074-.82466-.4414-1.1367l-.00782-.00781-3.9648-4.0449h13.908c.44544 0 .8771-.15036 1.1777-.45898.30073-.30856.44141-.74003.44141-1.1895 0-.43654-.14557-.86067-.4414-1.1641-.30064-.30862-.7323-.45703-1.1777-.45703h-13.912l3.9707-4.0723.00585-.00781c.28066-.31206.44141-.71938.44141-1.1367 0-.41733-.16075-.8227-.4414-1.1348l-.01368-.01563-.01367-.01367c-.30455-.28835-.70921-.45703-1.125-.45703zm0 1c.16555 0 .27932.05066.41602.17383.12311.14291.17773.26708.17773.44726 0 .18807-.0498.31586-.18555.4668l-5.6016 5.75h16.281c.24876 0 .36257.05527.46094.15625.10337.10601.1582.22478.1582.46484 0 .26277-.05973.39115-.1582.49219-.09837.10098-.21218.15625-.46094.15625h-16.287l5.6074 5.7227c.13574.15094.18555.27873.18555.4668 0 .18481-.05129.31156-.18164.45898-.08255.08228-.15298.13091-.19727.15039-.0493.02166-.11562.03906-.21484.03906-.1222 0-.20094-.02093-.24219-.03906-.03846-.01692-.08907-.05077-.1543-.12891l-.01367-.01562-6.6758-6.8496v-.00196c-.02285-.02341-.0281-.03487-.0254-.0293h-.00195c-.0264-.05402-.06298-.10381-.0957-.1543-.0299-.10164-.04883-.1992-.04883-.29491 0-.10603.01819-.17962.04102-.23438l.02734-.06641c.03584-.03994.0698-.08138.10352-.125l.00586-.00586 6.6426-6.8164c.1465-.13877.2633-.18359.4375-.18359z\" />\n </g>\n </g>\n </g>\n </SVG>\n);\n\nexport default ArrowLeftGhost;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowRightGhost: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"58\"\n height=\"58\"\n viewBox=\"0 0 58 58\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <g fill=\"none\">\n <path\n d=\"M29.00009 1.0086C13.55287 1.0086 1.009 13.5526 1.009 28.99998c0 15.44738 12.54387 27.99138 27.99109 27.99138s27.99109-12.544 27.99109-27.99138S44.44731 1.0086 29.00009 1.0086zm0 1.93044c14.4048 0 26.06067 11.656 26.06067 26.06094S43.40488 55.06092 29.00009 55.06092 2.93942 43.40492 2.93942 28.99998 14.5953 2.93904 29.00009 2.93904z\"\n fill={iconColor}\n />\n <g transform=\"matrix(.96521 0 0 .96522 1.009 1.0086)\">\n <g>\n <path\n d=\"M21.005 30.65h15.096l-4.7893 4.9143c-.2082.2315-.3123.4986-.3123.8013s.1041.5698.3123.8013c.2256.2136.4859.3205.7809.3205s.5553-.1069.7808-.3205l6.6633-6.8374c.0521-.0713.1041-.1336.1562-.187.052-.0534.0781-.1068.0781-.1602.052-.1247.0781-.2671.0781-.4274 0-.1602-.0261-.3205-.0781-.4807-.0521-.0713-.0911-.1336-.1172-.187-.026-.0534-.065-.1068-.1171-.1602l-6.6633-6.8374c-.1041-.1247-.2169-.2137-.3383-.2671-.1215-.0534-.269-.0801-.4425-.0801-.1562 0-.295.0267-.4165.0801-.1214.0534-.2429.1424-.3644.2671-.2082.2314-.3123.4985-.3123.8012s.1041.5698.3123.8013l4.7893 4.8876H21.005c-.3471 0-.6204.1024-.8199.3072-.1996.2048-.2993.4852-.2993.8413 0 .3383.0997.6099.2993.8146.1995.2048.4728.3072.8199.3072z\"\n fill={iconColor}\n />\n <path d=\"M27.643 21.043c-.41579 0-.8205.1686-1.125.45703l-.00781.00781-6.6953 6.8691-.01953.0293c-.04046.05536-.07885.09952-.11133.1328-.10781.11073-.21275.28915-.2168.5-.03865.14284-.08203.28464-.08203.43556 0 .2145.03644.43009.10352.63672l.02539.07422.04687.0664c.04037.05525.06313.09664.07031.11133.05464.11173.128.20605.20898.28906l6.6641 6.8379-.02539-.0293c.14297.17127.3152.31443.51953.4043.20176.08868.41973.12306.64453.12306.21318 0 .42348-.03791.6172-.12305.19627-.08634.3667-.21614.52147-.375l.00782-.00781.00586-.00782c.28073-.312.4414-.71743.4414-1.1348s-.16074-.82466-.4414-1.1367l-.00782-.00781-3.9648-4.0449h13.908c.44544 0 .8771-.15036 1.1777-.45898.30073-.30856.44141-.74003.44141-1.1895 0-.43654-.14557-.86067-.4414-1.1641-.30064-.30862-.7323-.45703-1.1777-.45703h-13.912l3.9707-4.0723.00585-.00781c.28066-.31206.44141-.71938.44141-1.1367 0-.41733-.16075-.8227-.4414-1.1348l-.01368-.01563-.01367-.01367c-.30455-.28835-.70921-.45703-1.125-.45703zm0 1c.16555 0 .27932.05066.41602.17383.12311.14291.17773.26708.17773.44726 0 .18807-.0498.31586-.18555.4668l-5.6016 5.75h16.281c.24876 0 .36257.05527.46094.15625.10337.10601.1582.22478.1582.46484 0 .26277-.05973.39115-.1582.49219-.09837.10098-.21218.15625-.46094.15625h-16.287l5.6074 5.7227c.13574.15094.18555.27873.18555.4668 0 .18481-.05129.31156-.18164.45898-.08255.08228-.15298.13091-.19727.15039-.0493.02166-.11562.03906-.21484.03906-.1222 0-.20094-.02093-.24219-.03906-.03846-.01692-.08907-.05077-.1543-.12891l-.01367-.01562-6.6758-6.8496v-.00196c-.02285-.02341-.0281-.03487-.0254-.0293h-.00195c-.0264-.05402-.06298-.10381-.0957-.1543-.0299-.10164-.04883-.1992-.04883-.29491 0-.10603.01819-.17962.04102-.23438l.02734-.06641c.03584-.03994.0698-.08138.10352-.125l.00586-.00586 6.6426-6.8164c.1465-.13877.2633-.18359.4375-.18359z\" />\n </g>\n </g>\n </g>\n </SVG>\n);\n\nexport default ArrowRightGhost;\n","import { FeatureGroup, Map, Marker, MarkerOptions } from 'leaflet';\nimport React, { FC, useEffect, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { spacings, getColors as color } from 'utils/styles';\n\nconst MapContainer = styled.div`\n position: relative;\n z-index: 0;\n`;\n\nconst FylToCtrlContainer = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1000;\n\n margin-top: ${spacings.spacer}px;\n margin-right: ${spacings.spacer}px;\n color: ${({ theme }) => color(theme).dark};\n\n cursor: pointer;\n`;\n\nexport interface LeafletMapMarker {\n id: string;\n position: [number, number];\n icon?: {\n url: string;\n size: [number, number];\n anchor: [number, number];\n\n sizeActive: [number, number];\n anchorActive: [number, number];\n };\n popup?: {\n text: string;\n };\n}\n\nconst LeafletMap: FC<{\n containerRef?: React.MutableRefObject<HTMLDivElement | null>;\n onReady?: (props: {\n goTo: (position?: [number, number], zoom?: number) => void;\n showAll: () => void;\n }) => void;\n url?: string;\n attribution?: string;\n activeMarkerId?: string;\n markers?: Array<LeafletMapMarker>;\n center: [number, number];\n zoom?: number;\n touchZoom?: boolean;\n scrollWheelZoom?: boolean;\n onlyScrollOnFocus?: boolean;\n fitBoundsPadding?: [number, number];\n onMarkerClick?: (markerId: string) => void;\n onFlyToClick?: (goTo: (zoom?: number) => void) => void;\n flyToControl?: React.ReactNode;\n onActiveMarkerChanged?: (props: {\n markerId: string;\n goTo: (zoom?: number) => void;\n }) => void;\n className?: string;\n}> = ({\n containerRef,\n onReady,\n url = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n attribution = '&copy; <a href=\"http://osm.org/copyright\">OpenStreetMap</a> contributors',\n activeMarkerId,\n markers,\n center,\n zoom = 2.5,\n touchZoom = false,\n scrollWheelZoom = false,\n onlyScrollOnFocus = true,\n fitBoundsPadding = [20, 20], // 0 = TopLeft, 1 = BottomRight\n onMarkerClick,\n onFlyToClick,\n flyToControl,\n onActiveMarkerChanged,\n className,\n}) => {\n const cRef = useRef<HTMLDivElement | null>(null);\n const prevMarkerId = useRef<string | null>(null);\n\n // leaflet ref\n const [L, setLeaflet] = useState<any>(null);\n const [map, setMap] = useState<Map | null>(null);\n const [markersLayer, setMarkersLayer] = useState<FeatureGroup<any> | null>(\n null\n );\n const [isLoaded, setLoaded] = useState<boolean>(false);\n\n useEffect(() => {\n const initLeaflet = async (cElement: HTMLDivElement) => {\n const leaflet = await import('leaflet');\n if (leaflet) {\n // set leaflet state\n setLeaflet(leaflet);\n\n // setup map\n const map = leaflet.map(cElement, {\n center: center,\n zoom: zoom,\n touchZoom: touchZoom,\n scrollWheelZoom: scrollWheelZoom,\n });\n\n // activate map scrolling on focus\n map.once('focus', () => {\n if (onlyScrollOnFocus) map.scrollWheelZoom.enable();\n });\n\n // deactivate map scrolling on focus is lost\n map.once('blur', () => {\n if (onlyScrollOnFocus) map.scrollWheelZoom.disable();\n });\n\n // set map state\n setMap(map);\n\n // add map layer from map provider\n leaflet\n .tileLayer(url, {\n attribution: attribution,\n })\n .addTo(map);\n\n // setup layer for markers\n const markersLayer = new leaflet.FeatureGroup();\n markersLayer.addTo(map);\n setMarkersLayer(markersLayer);\n }\n };\n\n // load leaflet\n const mapContainerRef = containerRef || cRef;\n if (!isLoaded && mapContainerRef?.current)\n initLeaflet(mapContainerRef.current);\n }, [\n attribution,\n center,\n containerRef,\n isLoaded,\n onlyScrollOnFocus,\n scrollWheelZoom,\n touchZoom,\n url,\n zoom,\n ]);\n\n // setup markers\n useEffect(() => {\n /**\n * Adjust zoom to show all markers\n */\n const showAllMarkers = () => {\n if (map && markersLayer) {\n map.fitBounds(markersLayer.getBounds(), {\n padding: L.point(fitBoundsPadding),\n });\n }\n };\n\n /**\n * Pan and zoom to marker position on map\n * @param position\n * @param zoom\n */\n const flyToPosition = (position?: [number, number], zoom?: number) => {\n if (position) map?.flyTo(position, zoom);\n else flyToActive(zoom);\n };\n\n /**\n * Pan and zoom to active marker position on map\n * @param zoom\n */\n const flyToActive = (zoom?: number) => {\n const marker = markers?.find((m) => m.id === activeMarkerId);\n if (marker) map?.flyTo(marker.position, zoom);\n };\n\n // setup markers\n if (markersLayer) {\n markersLayer.clearLayers();\n\n markers?.forEach(({ position, icon, id }) => {\n if (!icon?.url || !icon?.size || !position) return;\n const isActive = id === activeMarkerId;\n\n const markerIcon = L.icon({\n iconUrl: icon.url,\n\n iconSize: isActive ? icon.sizeActive : icon.size, // size of the icon\n // shadowSize: [50, 64], // size of the shadow\n iconAnchor: isActive ? icon.anchorActive : icon?.anchor, // point of the icon which will correspond to marker's location\n // shadowAnchor: [4, 62], // the same for the shadow\n // popupAnchor: [0, -16], // point from which the popup should open relative to the iconAnchor\n });\n\n const marker: Marker = L.marker(position, {\n icon: markerIcon,\n riseOnHover: true,\n } as MarkerOptions).addTo(map);\n\n marker.on('click', () => {\n onMarkerClick && onMarkerClick(id);\n });\n\n // add marker to markers layer\n markersLayer.addLayer(marker);\n\n if (L && map && markersLayer) {\n if (!isLoaded) {\n // on first load\n onReady &&\n onReady({\n goTo: flyToPosition,\n showAll: showAllMarkers,\n });\n setLoaded(true);\n if (activeMarkerId)\n prevMarkerId.current = activeMarkerId;\n } else {\n // check if active marker changed\n if (\n activeMarkerId &&\n activeMarkerId !== prevMarkerId?.current\n ) {\n prevMarkerId.current = activeMarkerId;\n activeMarkerId &&\n onActiveMarkerChanged &&\n onActiveMarkerChanged({\n markerId: activeMarkerId,\n goTo: flyToActive,\n });\n }\n }\n }\n });\n }\n }, [\n L,\n fitBoundsPadding,\n isLoaded,\n map,\n markers,\n markersLayer,\n onMarkerClick,\n activeMarkerId,\n onActiveMarkerChanged,\n onReady,\n ]);\n\n return (\n <MapContainer ref={cRef} className={className}>\n {flyToControl && (\n <FylToCtrlContainer\n onClick={(ev) => {\n ev.stopPropagation();\n if (map && onFlyToClick) {\n onFlyToClick((zoom) => {\n // fly to active marker\n const marker = markers?.find(\n (m) => m.id === activeMarkerId\n );\n if (marker) {\n map.flyTo(marker.position, zoom);\n }\n });\n }\n }}\n >\n {flyToControl}\n </FylToCtrlContainer>\n )}\n </MapContainer>\n );\n};\n\nexport default LeafletMap;\n","import Grid from 'components/base/Grid';\nimport ArrowLeftGhost from 'components/base/icons/ArrowLeftGhost';\nimport ArrowRightGhost from 'components/base/icons/ArrowRightGhost';\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\nimport Intro from 'components/blocks/Intro';\nimport LeafletMap from 'components/blocks/LeafletMap';\nimport Slider, { SliderContext } from 'components/blocks/Slider';\nimport Copy from 'components/typography/Copy';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport React, { FC, useContext, useState } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { mq, spacings, getColors as color, withRange } from 'utils/styles';\n\nconst StyledSection = styled(Section)`\n position: relative;\n min-height: 500px;\n z-index: 0;\n`;\n\nconst MapContainer = styled(LeafletMap)<{ isMirrored?: boolean }>`\n position: relative;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n min-height: 500px;\n\n @media ${mq.semilarge} {\n position: absolute;\n width: 50%;\n height: 100%;\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '50%')};\n right: ${({ isMirrored }) => (isMirrored ? '50%' : 'auto')};\n\n transform: translateX(\n ${({ isMirrored }) => (isMirrored ? '100%' : '-100%')}\n );\n }\n\n @media ${mq.xlarge} {\n max-width: ${spacings.wrapperLarge / 2}px;\n }\n`;\n\nconst CardWrapper = styled(Wrapper)`\n pointer-events: none;\n`;\n\nconst SliderWrapper = styled.div<{ isMirrored?: boolean }>`\n display: flex;\n flex-direction: column;\n position: relative;\n width: 100%;\n pointer-events: all;\n\n padding: ${spacings.nudge * 3}px ${spacings.nudge * 3}px\n ${spacings.spacer * 2}px ${spacings.nudge * 3}px;\n\n @media ${mq.medium} {\n padding: ${spacings.nudge * 3}px ${spacings.spacer}px\n ${spacings.spacer * 2}px ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n flex-direction: row;\n ${withRange([spacings.spacer * 3, spacings.spacer * 5], 'padding-top')};\n ${withRange(\n [spacings.spacer * 3, spacings.spacer * 5],\n 'padding-bottom'\n )};\n ${({ isMirrored }) =>\n isMirrored\n ? withRange(\n [spacings.spacer, spacings.spacer * 4],\n 'padding-right'\n )\n : `padding-right: ${spacings.spacer}px`};\n ${({ isMirrored }) =>\n !isMirrored\n ? withRange(\n [spacings.spacer, spacings.spacer * 4],\n 'padding-left'\n )\n : `padding-left: ${(1 / 28) * 100}vw`};\n }\n\n @media ${mq.xlarge} {\n ${({ isMirrored }) =>\n !isMirrored\n ? withRange(\n [spacings.spacer, spacings.spacer * 4],\n 'padding-left'\n )\n : `padding-left: ${(1 / 28) * spacings.wrapper}px`};\n }\n\n .slick-slide div {\n outline: none;\n }\n\n .slick-initialized .slick-slide.slick-active {\n z-index: 1;\n }\n`;\n\nconst InfoCardView = styled.div`\n min-height: 100px;\n pointer-events: all;\n\n & > * + * {\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')}\n }\n`;\n\nconst CardHeader = styled.div`\n display: flex;\n`;\n\nconst StyledActions = styled(Actions)`\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n padding-bottom: ${spacings.nudge}px;\n\n @media ${mq.medium} {\n & > * {\n max-width: calc(50% - ${spacings.spacer}px);\n }\n }\n`;\n\nconst ContactList = styled.ul<{ isInverted?: boolean }>`\n padding: 0;\n list-style-type: none;\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n\n a {\n color: inherit;\n }\n\n li {\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0;\n margin: 0;\n }\n\n li + li {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n span:first-child {\n flex: 0 0 30px;\n max-width: 30px;\n\n & > * {\n max-width: 100%;\n }\n }\n`;\n\nconst ContactListLabel = styled(Copy)`\n margin-left: ${spacings.nudge * 2.5}px;\n\n * {\n margin: 0;\n padding: 0;\n }\n`;\n\nconst LocationInfoCard: FC<{\n isInverted?: boolean;\n location: MapLocation;\n}> = ({ isInverted, location }) => {\n return (\n <InfoCardView>\n {location.meta?.title && (\n <CardHeader>\n <Intro\n colorMode={isInverted ? 'inverted' : 'default'}\n title={location.meta.title}\n titleAs={location.meta.titleAs}\n superTitle={location.meta?.superTitle}\n superTitleAs={location.meta?.superTitleAs}\n />\n </CardHeader>\n )}\n {location.meta?.contact && location.meta.contact.length > 0 && (\n <ContactList isInverted={isInverted}>\n {location.meta?.contact\n ?.filter((c) => c.label)\n .map((contact, i) => (\n <li key={i}>\n <span>{contact.icon}</span>\n <ContactListLabel\n isInverted={isInverted}\n innerHTML={contact.label}\n />\n </li>\n ))}\n </ContactList>\n )}\n {(location?.meta?.primaryAction ||\n location?.meta?.secondaryAction) && (\n <StyledActions\n primary={\n location?.meta?.primaryAction &&\n location.meta.primaryAction(isInverted)\n }\n secondary={\n location?.meta?.secondaryAction &&\n location.meta.secondaryAction(isInverted)\n }\n />\n )}\n </InfoCardView>\n );\n};\n\nconst Controls = styled.div`\n display: flex;\n flex-direction: row;\n align-self: center;\n text-align: center;\n\n @media ${mq.semilarge} {\n flex-direction: column;\n align-self: flex-start;\n margin-left: auto;\n text-align: right;\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n }\n`;\n\nconst StyledDotGroup = styled(Slider.DotGroup)`\n display: flex;\n flex-direction: row;\n padding-top: ${spacings.spacer * 1.5}px;\n padding-left: ${spacings.spacer * 1.5}px;\n padding-right: ${spacings.spacer * 1.5}px;\n\n @media ${mq.semilarge} {\n display: none;\n padding: 0;\n }\n`;\n\nconst DotWrapper = styled.button`\n border: none;\n outline: none;\n background: none;\n cursor: pointer;\n\n padding: ${spacings.nudge * 2}px;\n margin: -${spacings.nudge * 2}px;\n\n & + & {\n margin-left: ${spacings.nudge * 1.5}px;\n }\n`;\n\nconst Dot = styled.div<{ isActive?: boolean; isInverted?: boolean }>`\n height: 14px;\n width: 14px;\n border: solid 1px\n ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 14px;\n\n transition: background-color 0.2s ease-in-out;\n\n background-color: ${({ isActive, isInverted, theme }) =>\n isActive\n ? isInverted\n ? color(theme).light\n : color(theme).dark\n : 'transparent'};\n`;\n\nconst StyledControl = styled(Slider.Control)<{ isInverted?: boolean }>`\n display: none;\n border: none;\n outline: none;\n background: none;\n padding: 0 ${spacings.nudge * 3}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n transition: color 0.2s ease-in-out, transform 0.2s ease-in-out;\n\n &:enabled {\n cursor: pointer;\n }\n\n &:enabled:hover {\n transform: scale(1.05);\n }\n\n &:enabled:active {\n transform: scale(0.95);\n }\n\n &:disabled {\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).mono.dark : color(theme).mono.medium};\n }\n\n @media ${mq.semilarge} {\n display: block;\n }\n`;\n\nexport interface LocationIcon {\n url: string;\n size: [number, number];\n anchor: [number, number];\n\n sizeActive: [number, number];\n anchorActive: [number, number];\n}\n\nexport interface MapLocation {\n id: string;\n position: [number, number];\n icon?: LocationIcon;\n meta?: {\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n contact?: Array<{ icon?: React.ReactNode; label?: string }>;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n };\n}\n\nconst Map: FC<{\n isInverted?: boolean;\n isMirrored?: boolean;\n center?: [number, number];\n zoom?: number;\n flyToZoom?: number;\n initialLocation?: string;\n locations?: Array<MapLocation>;\n /** Show all markers on first load */\n allMarkersOnInit?: boolean;\n /** Map container padding for show all markers */\n fitBoundsPadding?: [number, number];\n flyToControl?: React.ReactNode;\n controlNext?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n controlPrev?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n dot?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n index?: number;\n }) => React.ReactNode;\n}> = ({\n isInverted = false,\n isMirrored = false,\n center = [51.505, -0.09],\n zoom = 5,\n flyToZoom,\n initialLocation,\n locations,\n allMarkersOnInit = false,\n fitBoundsPadding,\n flyToControl,\n controlNext,\n controlPrev,\n dot,\n}) => {\n const theme = useContext(ThemeContext);\n const [activeLocation, setActiveLocation] = useState<string>(\n initialLocation || ''\n );\n\n return (\n <StyledSection\n bgColor={isInverted ? color(theme).dark : color(theme).mono.light}\n >\n <Slider.Provider\n fade={true}\n swipe={false}\n slidesToShow={1}\n variableWidth={false}\n sameHeight={true}\n clickSideOffset={0}\n responsive={[\n {\n breakpoint: 832,\n settings: {\n fade: false,\n swipe: true,\n },\n },\n ]}\n beforeChange={({ nextStep }) => {\n if (locations && locations[nextStep]) {\n setActiveLocation(locations[nextStep].id);\n }\n }}\n >\n <SliderContext.Consumer>\n {({ goToStep }) => (\n <MapContainer\n onReady={({ showAll, goTo }) => {\n if (allMarkersOnInit) showAll();\n else goTo();\n }}\n center={center}\n zoom={zoom}\n isMirrored={isMirrored}\n activeMarkerId={activeLocation}\n onMarkerClick={(markerId) => {\n setActiveLocation(markerId);\n\n // move slider to step\n const locIndex = locations?.findIndex(\n (loc) => loc.id === markerId\n );\n\n if (locIndex !== undefined && locIndex !== -1)\n goToStep(locIndex);\n }}\n flyToControl={flyToControl}\n onFlyToClick={(goTo) => {\n // pan and zoom to active location\n goTo(flyToZoom);\n }}\n fitBoundsPadding={fitBoundsPadding}\n markers={locations?.map(\n ({ id, position, icon }) => {\n return {\n id,\n position,\n icon,\n };\n }\n )}\n onActiveMarkerChanged={({ goTo }) => goTo()}\n />\n )}\n </SliderContext.Consumer>\n\n <CardWrapper clampWidth=\"normal\">\n <Grid.Row gutter={spacings.spacer}>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? 14 : 0) / 28,\n }}\n ></Grid.Col>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? -14 : 0) / 28,\n }}\n >\n <SliderWrapper isMirrored={isMirrored}>\n {locations && locations.length > 1 && (\n <>\n <Slider.Slides>\n {locations?.map((location, i) => (\n <LocationInfoCard\n key={i}\n isInverted={isInverted}\n location={location}\n />\n ))}\n </Slider.Slides>\n <Controls>\n <StyledControl\n type=\"next\"\n isInverted={isInverted}\n >\n {(isActive) =>\n controlNext ? (\n controlNext({\n isInverted,\n isActive,\n name:\n 'control_next_head',\n })\n ) : (\n <ArrowRightGhost />\n )\n }\n </StyledControl>\n <StyledControl\n type=\"prev\"\n isInverted={isInverted}\n >\n {(isActive) =>\n controlPrev ? (\n controlPrev({\n isInverted,\n isActive,\n name:\n 'control_prev_head',\n })\n ) : (\n <ArrowLeftGhost />\n )\n }\n </StyledControl>\n <StyledDotGroup>\n {(i, isActive, onClick) => (\n <DotWrapper\n key={i}\n onClick={onClick}\n >\n {dot ? (\n dot({\n isInverted,\n isActive,\n index: i,\n })\n ) : (\n <Dot\n isActive={\n isActive\n }\n isInverted={\n isInverted\n }\n />\n )}\n </DotWrapper>\n )}\n </StyledDotGroup>\n </Controls>\n </>\n )}\n {locations && locations.length === 1 && (\n <LocationInfoCard\n isInverted={isInverted}\n location={locations[0]}\n />\n )}\n </SliderWrapper>\n </Grid.Col>\n </Grid.Row>\n </CardWrapper>\n </Slider.Provider>\n </StyledSection>\n );\n};\n\nexport default Map;\n","import Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors as color, spacings } from 'utils/styles';\n\nconst View = styled.div``;\n\nconst FieldHead = styled.div`\n display: flex;\n flex-direction: row;\n align-items: top;\n justify-content: space-between;\n padding-bottom: ${spacings.nudge * 3}px;\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n`;\n\nconst Field = styled.input<{\n isInverted?: boolean;\n hasError?: boolean;\n isDisabled?: boolean;\n hasBack?: boolean;\n}>`\n display: block;\n outline: none;\n width: 100%;\n min-height: 60px;\n box-shadow: none;\n border: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n padding: ${spacings.nudge * 2}px ${spacings.spacer}px;\n border: ${({ hasError }) =>\n hasError ? '2px solid #ff0000' : '2px solid transparent'};\n background-color: ${({ isInverted, hasBack, theme }) =>\n isInverted || !hasBack ? color(theme).light : color(theme).mono.light};\n\n font-weight: inherit;\n font-family: inherit;\n font-size: inherit;\n color: ${({ hasError }) => (hasError ? '#ff0000' : 'inherit')};\n\n pointer-events: ${({ isDisabled }) => isDisabled && 'none'};\n\n &:active {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n &:focus {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n ::placeholder {\n color: ${({ theme }) => color(theme).secondary.light};\n }\n`;\n\nconst InfoMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst ErrorMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nexport type FormProps = {\n label?: string;\n errorMessage?: string;\n infoMessage?: string;\n\n value?: string;\n name?: string;\n placeholder?: string;\n isRequired?: boolean;\n isDisabled?: boolean;\n tabIndex?: number;\n ariaHidden?: boolean;\n};\n\nconst Textfield: React.FC<\n FormProps & {\n type?: 'text' | 'email' | 'tel';\n isInverted?: boolean;\n lightBg?: boolean;\n onChange?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n }\n> = ({\n lightBg,\n type = 'text',\n label,\n errorMessage,\n infoMessage,\n placeholder,\n value,\n name,\n isInverted,\n isDisabled,\n isRequired,\n tabIndex,\n ariaHidden,\n onChange,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <View>\n <FieldHead>\n {label && (\n <Copy\n isInverted={isInverted}\n textColor={\n isDisabled ? color(theme).mono.dark : undefined\n }\n >\n {`${label}${isRequired ? ' *' : ''}`}\n </Copy>\n )}\n </FieldHead>\n <Copy textColor={color(theme).secondary.dark} type=\"copy-b\">\n <Field\n hasBack={!lightBg}\n placeholder={placeholder}\n hasError={!!errorMessage}\n type={type}\n isInverted={isInverted}\n isDisabled={isDisabled}\n name={name}\n value={value}\n required={isRequired}\n onChange={onChange}\n tabIndex={tabIndex}\n aria-hidden={ariaHidden}\n />\n </Copy>\n {infoMessage && (\n <InfoMessage textColor={color(theme).mono.dark} size=\"small\">\n {infoMessage}\n </InfoMessage>\n )}\n {errorMessage && (\n <ErrorMessage textColor=\"#ff0000\" size=\"small\" type=\"copy-i\">\n {errorMessage\n ? errorMessage\n : 'Bitte geben Sie einen gültigen Text ein'}\n </ErrorMessage>\n )}\n </View>\n );\n};\n\nexport default Textfield;\n","import Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport { FormProps } from './Textfield';\n\nconst FieldHead = styled.div`\n display: flex;\n flex-direction: row;\n align-items: top;\n justify-content: space-between;\n padding-bottom: ${spacings.nudge * 3}px;\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n`;\n\nconst Area = styled.textarea<{\n isInverted?: boolean;\n hasError?: boolean;\n isDisabled?: boolean;\n hasBack?: boolean;\n}>`\n display: block;\n outline: none;\n width: 100%;\n min-height: 60px;\n box-shadow: none;\n border: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n resize: none;\n width: 100%;\n min-height: 120px;\n\n @media ${mq.semilarge} {\n min-height: 185px;\n }\n\n padding: ${spacings.nudge * 2}px ${spacings.spacer}px;\n\n /* border: ${({ isInverted, theme }) =>\n isInverted\n ? '2px solid transparent'\n : `2px solid ${color(theme).mono.medium}`}; */\n border: ${({ hasError }) =>\n hasError ? '2px solid #ff0000' : '2px solid transparent'};\n background-color: ${({ isInverted, hasBack, theme }) =>\n isInverted || !hasBack ? color(theme).light : color(theme).mono.light};\n\n font-weight: inherit;\n font-family: inherit;\n font-size: inherit;\n color: ${({ hasError }) => (hasError ? '#ff0000' : 'inherit')};\n\n pointer-events: ${({ isDisabled }) => isDisabled && 'none'};\n\n &:active {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n &:focus {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n ::placeholder {\n color: ${({ theme }) => color(theme).secondary.light};\n }\n`;\n\nconst InfoMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n`;\n\nconst ErrorMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n`;\n\nconst Textarea: React.FC<\n FormProps & {\n isInverted?: boolean;\n lightBg?: boolean;\n onChange?: (ev: React.SyntheticEvent<HTMLTextAreaElement>) => void;\n }\n> = ({\n lightBg,\n label,\n errorMessage,\n infoMessage,\n placeholder,\n value,\n name,\n isInverted,\n isDisabled,\n isRequired,\n onChange,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <div>\n <FieldHead>\n {label && (\n <Copy\n isInverted={isInverted}\n textColor={\n isDisabled ? color(theme).mono.dark : undefined\n }\n >\n {`${label}${isRequired ? ' *' : ''}`}\n </Copy>\n )}\n </FieldHead>\n <Copy type=\"copy-b\">\n <Area\n value={value}\n name={name}\n placeholder={placeholder}\n hasError={!!errorMessage}\n isDisabled={isDisabled}\n isInverted={isInverted}\n required={isRequired}\n hasBack={!lightBg}\n onChange={onChange}\n />\n </Copy>\n {infoMessage && (\n <InfoMessage textColor={color(theme).mono.dark} size=\"small\">\n {infoMessage}\n </InfoMessage>\n )}\n {errorMessage && (\n <ErrorMessage textColor=\"#ff0000\" size=\"small\" type=\"copy-i\">\n {errorMessage\n ? errorMessage\n : 'Bitte geben Sie einen gültigen Text ein'}\n </ErrorMessage>\n )}\n </div>\n );\n};\n\nexport default Textarea;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Check: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"12\"\n height=\"9\"\n viewBox=\"0 0 12 9\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M10.833 1.162A.512.512 0 0010.444 1a.512.512 0 00-.388.162L4.333 6.708 1.944 4.392a.512.512 0 00-.388-.161.512.512 0 00-.39.161A.482.482 0 001 4.77c0 .162.056.27.167.377l2.777 2.692c.056.054.112.108.167.108.056.054.167.054.222.054.111 0 .167 0 .223-.054.055 0 .11-.054.166-.108l6.111-5.923A.482.482 0 0011 1.538a.482.482 0 00-.167-.376z\"\n fill=\"#fff\"\n stroke=\"#fff\"\n />\n </SVG>\n);\n\nexport default Check;\n","import Check from 'components/base/icons/Check';\nimport Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors, spacings } from 'utils/styles';\n\nconst View = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n\n & > * + * {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Label = styled(Copy)`\n display: flex;\n\n & > * {\n margin: 0;\n }\n`;\n\nconst CheckboxContainer = styled.div<{ isDisabled?: boolean }>`\n cursor: ${({ isDisabled }) => (isDisabled ? 'default' : 'pointer')};\n pointer-events: ${({ isDisabled }) => (isDisabled ? 'none' : 'all')};\n`;\n\nconst Original = styled.input`\n position: absolute;\n left: -9999px;\n opacity: 0;\n`;\n\nconst Box = styled.span<{ isSelected?: boolean; isInverted?: boolean }>`\n width: 20px;\n min-width: 20px;\n height: 20px;\n display: block;\n position: relative;\n\n border: 2px solid\n ${({ isInverted, theme }) =>\n isInverted ? '#fff' : getColors(theme).mono.medium};\n\n background-color: ${({ isSelected, theme }) =>\n isSelected ? getColors(theme).primary.medium : '#fff'};\n`;\n\nconst StyledCheck = styled(Check)`\n width: 80%;\n height: 80%;\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n`;\n\nconst Checkbox: React.FC<{\n label?: string;\n\n onChange?: (e: React.SyntheticEvent<HTMLInputElement>) => void;\n onClick?: () => void;\n\n name?: string;\n value?: string;\n\n isDisabled?: boolean;\n isSelected?: boolean;\n isInverted?: boolean;\n isRequired?: boolean;\n}> = ({\n label,\n isDisabled,\n isSelected,\n isInverted,\n onChange,\n onClick,\n name,\n value,\n isRequired,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <View>\n <CheckboxContainer isDisabled={isDisabled} onClick={onClick}>\n <Box isSelected={isSelected} isInverted={isInverted}>\n {isSelected && <StyledCheck />}\n </Box>\n <Original\n type=\"checkbox\"\n name={name}\n value={value}\n disabled\n checked={isSelected}\n required={isRequired}\n onChange={onChange}\n />\n </CheckboxContainer>\n {label && (\n <Label\n size=\"small\"\n type=\"copy-b\"\n isInverted={isInverted}\n textColor={\n isDisabled ? getColors(theme).mono.dark : undefined\n }\n innerHTML={`${label}${isRequired ? '<span> *</span>' : ''}`}\n />\n )}\n </View>\n );\n};\n\nexport default Checkbox;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport Section, { BgMode } from 'components/base/Section';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport { spacings, mq, getColors as color, withRange } from 'utils/styles';\nimport Textfield, { FormProps } from 'components/fields/Textfield';\nimport Textarea from 'components/fields/Textarea';\nimport Checkbox from 'components/fields/Checkbox';\nimport Wrapper from 'components/base/Wrapper';\nimport Intro from 'components/blocks/Intro';\nimport { Field, Formik } from 'formik';\nimport { FormEvent } from 'react';\nimport Actions from 'components/blocks/Actions';\n\nconst StyledIntro = styled(Intro)`\n ${withRange([spacings.spacer * 2, spacings.spacer * 3], 'padding-bottom')}\n`;\n\nconst FieldsContainer = styled.div`\n padding-bottom: 30px;\n max-width: 1150px;\n\n & > * > * + * {\n padding-top: 30px;\n }\n\n @media ${mq.medium} {\n display: flex;\n flex-direction: row;\n align-items: top;\n }\n`;\n\nconst FlexContainer = styled.div`\n flex: 0 1 50%;\n width: 100%;\n max-width: 650px;\n\n & + & {\n padding-top: 30px;\n }\n\n @media ${mq.medium} {\n & + & {\n padding-top: 0;\n margin-left: 30px;\n }\n }\n`;\n\nconst HpFieldContainer = styled.div`\n opacity: 0;\n position: absolute;\n top: 0;\n left: 0;\n height: 0;\n width: 0;\n z-index: -1;\n`;\n\nconst ActionWrapper = styled(Actions)`\n margin-top: ${spacings.spacer * 3}px;\n`;\n\nexport interface FormData {\n name?: string;\n surname?: string;\n mail?: string;\n phone?: string;\n area?: string;\n check?: boolean;\n}\n\nexport type FormFieldProps = Omit<FormProps, 'value' | 'name' | 'errorMessage'>;\nexport type FormDataErrors = { [key in keyof FormData]: string };\n\nconst Form: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n intro?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n submitAction?: (props: {\n isInverted?: boolean;\n additionalProps: { type: 'submit'; as: 'button' | 'a' };\n isDisabled?: boolean;\n }) => React.ReactNode;\n onSubmit?: (data: FormData) => void;\n validation?: (values: FormData, errors: FormDataErrors) => FormDataErrors;\n yupValidationSchema?: any;\n\n isInverted?: boolean;\n bgMode?: 'full';\n\n formFields: {\n name?: FormFieldProps;\n surname?: FormFieldProps;\n mail?: FormFieldProps;\n phone?: FormFieldProps;\n area?: FormFieldProps;\n };\n\n checkbox?: {\n label?: string;\n name?: string;\n value?: string;\n isDisabled?: boolean;\n };\n honeypotFieldName?: string;\n}> = ({\n bgMode,\n isInverted = false,\n title,\n titleAs,\n superTitle,\n superTitleAs,\n intro,\n primaryAction,\n secondaryAction,\n submitAction,\n onSubmit,\n formFields,\n checkbox,\n yupValidationSchema,\n validation,\n honeypotFieldName = 'hp-office-address',\n}) => {\n const theme = React.useContext(ThemeContext);\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n default:\n return undefined;\n }\n };\n\n const isEmpty = (obj: any) => {\n return (\n obj && Object.keys(obj).length === 0 && obj.constructor === Object\n );\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {title && (\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={intro}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n )}\n <Formik\n initialValues={\n {\n name: '',\n surname: '',\n phone: '',\n area: '',\n mail: '',\n check: false,\n } as FormData\n }\n validate={(values) => {\n let errors: FormDataErrors = {};\n if (validation)\n errors = validation(\n values,\n errors\n ) as FormDataErrors;\n return errors;\n }}\n validationSchema={yupValidationSchema}\n onSubmit={async (values) => {\n const hpField = document.getElementsByName(\n honeypotFieldName\n )[0] as HTMLInputElement;\n\n if (hpField && hpField.value) {\n console.warn(\n 'honeypot field is filled, probably a bot, do not submit'\n );\n\n // honeypot field is filled, probably a bot, do not submit\n return;\n }\n\n onSubmit && onSubmit(values);\n }}\n >\n {({\n handleSubmit,\n setFieldValue,\n values,\n errors,\n isValid,\n dirty,\n }) => (\n <form\n onSubmit={(e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n handleSubmit(e);\n }}\n >\n <FieldsContainer>\n <FlexContainer>\n {formFields.name && (\n <Field\n label={\n formFields.name?.label ||\n 'Vorname'\n }\n placeholder={\n formFields.name?.placeholder\n }\n infoMessage={\n formFields.name?.infoMessage\n }\n as={Textfield}\n name=\"name\"\n isRequired={\n formFields.name?.isRequired\n }\n errorMessage={errors.name}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n )}\n {formFields.surname && (\n <Field\n label={\n formFields.surname?.label ||\n 'Nachname'\n }\n placeholder={\n formFields.surname?.placeholder\n }\n infoMessage={\n formFields.surname?.infoMessage\n }\n as={Textfield}\n name=\"surname\"\n isRequired={\n formFields.surname?.isRequired\n }\n errorMessage={errors.surname}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n )}\n {formFields.mail && (\n <Field\n type=\"email\"\n label={\n formFields.mail?.label ||\n 'E-Mail'\n }\n placeholder={\n formFields.mail?.placeholder\n }\n infoMessage={\n formFields.mail?.infoMessage\n }\n as={Textfield}\n name=\"mail\"\n isRequired={\n formFields.mail?.isRequired\n }\n errorMessage={errors.mail}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n )}\n {formFields.phone && (\n <Field\n type=\"tel\"\n label={\n formFields.phone?.label ||\n 'Telefon'\n }\n placeholder={\n formFields.phone?.placeholder\n }\n infoMessage={\n formFields.phone?.infoMessage\n }\n as={Textfield}\n name=\"phone\"\n isRequired={\n formFields.phone?.isRequired\n }\n errorMessage={errors.phone}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n )}\n </FlexContainer>\n {formFields.area && (\n <FlexContainer>\n <Field\n label={\n formFields.area?.label ||\n 'Textfeld'\n }\n placeholder={\n formFields.area?.placeholder\n }\n infoMessage={\n formFields.area?.infoMessage\n }\n name=\"area\"\n as={Textarea}\n isRequired={\n formFields.area?.isRequired\n }\n errorMessage={errors.area}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n </FlexContainer>\n )}\n </FieldsContainer>\n {checkbox && (\n <Field\n onClick={() => {\n setFieldValue('check', !values.check);\n }}\n value={values.check}\n isSelected={values.check}\n isDisabled={checkbox.isDisabled}\n name=\"check\"\n as={Checkbox}\n label={\n checkbox.label ||\n 'Ich habe die Datenschutzbestimmungen zu Kenntnis genommen und aktzeptiere.'\n }\n isInverted={isInverted}\n isRequired\n />\n )}\n {honeypotFieldName && (\n <HpFieldContainer>\n <Textfield\n tabIndex={-1}\n ariaHidden\n label={honeypotFieldName}\n name={honeypotFieldName}\n />\n </HpFieldContainer>\n )}\n {submitAction && (\n <ActionWrapper\n primary={\n submitAction &&\n submitAction({\n isInverted,\n isDisabled:\n !dirty ||\n !isValid ||\n !isEmpty(errors),\n additionalProps: {\n type: 'submit',\n as: 'button',\n },\n })\n }\n />\n )}\n </form>\n )}\n </Formik>\n </Wrapper>\n </Section>\n );\n};\n\nexport default Form;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowLeftRight: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"36\"\n height=\"17\"\n viewBox=\"0 0 36 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.06818 7.42108H32.7534l-6.3638-5.86523c-.3753-.34588-.3753-.71337 0-1.10248.1641-.17293.3635-.2594.598-.2594.2346 0 .4457.08647.6333.2594l7.8808 7.29576c.1642.12971.2463.31345.2463.55124 0 .21617-.0821.39991-.2463.55123l-7.8808 7.2309c-.1642.1729-.3694.2594-.6157.2594-.2462 0-.4515-.0864-.6156-.2594-.3753-.3459-.3753-.7133 0-1.1025l6.3663-5.86748H3.0657L9.43204 14.98c.37527.3459.37527.7134 0 1.1025-.16419.1729-.36355.2594-.5981.2594-.23455 0-.44564-.0865-.63328-.2594L.31986 8.78675c-.1642-.1297-.24628-.31344-.24628-.55123 0-.21617.08209-.39992.24627-.55124L8.20066.45338c.16419-.17294.36942-.25941.61569-.25941.24628 0 .4515.08647.61569.2594.37528.34588.37528.71337 0 1.10248L3.06818 7.42108z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default ArrowLeftRight;\n","import React, { FC, useContext, useEffect, useRef, useState } from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\n\nimport Section, { BgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport { getColors as color, spacings } from 'utils/styles';\nimport ArrowLeftRight from 'components/base/icons/ArrowLeftRight';\nimport Copy from 'components/typography/Copy';\nimport useIE from 'utils/useIE';\n\nconst clamp = (num: number, min: number, max: number) => {\n return Math.min(Math.max(num, min), max);\n};\n\nconst Images = styled.div`\n position: relative;\n cursor: col-resize;\n\n & > * {\n pointer-events: none;\n user-select: none;\n }\n`;\n\nconst BackgroundImg = styled(Image)`\n position: relative;\n display: block;\n width: 100%;\n`;\n\nconst ForegroundContainer = styled.div<{\n hasTransition?: boolean;\n initalValue?: number;\n hasAnim?: boolean;\n}>`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 50%;\n overflow: hidden;\n\n transition: width ${({ hasTransition }) => (hasTransition ? 0.1 : 0)}s\n ease-in-out;\n\n ${({ hasAnim, initalValue }) =>\n hasAnim &&\n css`\n animation-name: ForegroundAnim;\n animation-duration: 5s;\n animation-iteration-count: 1;\n animation-play-state: ${hasAnim && 'running'};\n animation-timing-function: ease-in-out;\n\n @keyframes ForegroundAnim {\n 0% {\n width: ${initalValue\n ? clamp(initalValue * 100, 0, 100) + '%'\n : '50%'};\n }\n 33% {\n width: ${initalValue\n ? clamp(initalValue * 100 + 10, 0, 100) + '%'\n : '60%'};\n }\n 66% {\n width: ${initalValue\n ? clamp(initalValue * 100 - 10, 0, 100) + '%'\n : '40%'};\n }\n 100% {\n width: ${initalValue ? initalValue * 100 + '%' : '50%'};\n }\n }\n `}\n`;\n\nconst ForegroundImg = styled(Image)`\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n max-width: none;\n object-fit: cover;\n`;\n\nconst ForegroundOverlay = styled.div<{ color: string }>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: ${({ color }) => color};\n`;\n\nconst ImageLabel = styled(Copy)<{ bgColor?: string }>`\n height: ${spacings.spacer * 1.5}px;\n padding: ${spacings.nudge}px ${spacings.spacer}px ${spacings.nudge * 2}px\n ${spacings.spacer}px;\n background: ${({ bgColor }) => bgColor && bgColor};\n`;\n\nconst ForegroundLabel = styled(ImageLabel)`\n position: absolute;\n bottom: ${spacings.spacer * 1.5}px;\n left: ${spacings.spacer}px;\n pointer-events: none;\n`;\n\nconst BackgroundLabel = styled(ImageLabel)`\n position: absolute;\n bottom: ${spacings.spacer * 1.5}px;\n right: ${spacings.spacer}px;\n pointer-events: none;\n`;\n\nconst ControlContainer = styled.div<{\n hasTransition?: boolean;\n hasAnim?: boolean;\n initalValue?: number;\n}>`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n transition: left ${({ hasTransition }) => (hasTransition ? 0.1 : 0)}s\n ease-in-out;\n\n ${({ hasAnim, initalValue }) =>\n hasAnim &&\n css`\n animation-name: ControlAnim;\n animation-duration: 5s;\n animation-iteration-count: 1;\n animation-play-state: ${hasAnim && 'running'};\n animation-timing-function: ease-in-out;\n\n @keyframes ControlAnim {\n 0% {\n left: ${initalValue\n ? clamp(initalValue * 100, 0, 100) + '%'\n : '50%'};\n }\n 33% {\n left: ${initalValue\n ? clamp(initalValue * 100 + 10, 0, 100) + '%'\n : '60%'};\n }\n 66% {\n left: ${initalValue\n ? clamp(initalValue * 100 - 10, 0, 100) + '%'\n : '40%'};\n }\n 100% {\n left: ${initalValue ? initalValue * 100 + '%' : '50%'};\n }\n }\n `}\n`;\n\nconst Control = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n height: 54px;\n width: 54px;\n border: solid 2px ${({ theme }) => color(theme).light};\n border-radius: 50%;\n background-color: ${({ theme }) => color(theme).primary.medium};\n`;\n\nconst ComparisonSlider: FC<{\n isInverted?: boolean;\n bgMode?: BgMode;\n initialValue?: number;\n foregroundImg?: ImageProps;\n backgroundImg?: ImageProps;\n foregroundLabel?: string;\n backgroundLabel?: string;\n overlayColor?: string;\n labelColor?: string;\n dragControl?: React.ReactNode;\n enableControlAnim?: boolean;\n}> = ({\n isInverted,\n bgMode,\n initialValue,\n foregroundImg,\n backgroundImg,\n foregroundLabel,\n backgroundLabel,\n overlayColor = 'rgba(0, 0 , 0, 0.2)',\n labelColor = 'rgba(0, 0 , 0, 0.3)',\n dragControl,\n enableControlAnim,\n}) => {\n const isIE = useIE(true);\n const [slideValue, setSlideValue] = useState<number>(\n initialValue ? Math.min(Math.max(initialValue, 0), 1) : 0.5\n );\n const [isHolding, setIsHolding] = useState<boolean>(false);\n const [isDragging, setIsDragging] = useState<boolean>(false);\n const [interacted, setInteracted] = useState<boolean>(true);\n const [sideOffset, setSideOffset] = useState<number>(0);\n const controlRef = useRef<HTMLDivElement | null>(null);\n const theme = useContext(ThemeContext);\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'half-right':\n return 'half-right';\n case 'half-left':\n return 'half-left';\n case 'larger-right':\n return 'larger-right';\n case 'larger-left':\n return 'larger-left';\n default:\n return undefined;\n }\n };\n\n useEffect(() => {\n if (controlRef.current) {\n setSideOffset(controlRef.current.offsetWidth / 2);\n }\n }, []);\n\n useEffect(() => {\n const handleInitalLoad = () => {\n const options = {\n rootMargin: '0px',\n threshold: 1.0,\n };\n\n const observer = new IntersectionObserver((entries, observer) => {\n if (enableControlAnim && entries[0]?.isIntersecting) {\n // if control is first fully visible\n observer.unobserve(entries[0]?.target);\n setInteracted(false);\n }\n }, options);\n if (controlRef.current) observer.observe(controlRef.current);\n window.removeEventListener('load', handleInitalLoad);\n };\n\n // wait unitl user has scrolled once\n if (!isIE) {\n if (document.readyState === 'complete') handleInitalLoad();\n else window.addEventListener('load', handleInitalLoad);\n }\n\n return () => {\n window.removeEventListener('load', handleInitalLoad);\n };\n }, [enableControlAnim, isIE]);\n\n const setCurrentPos = (target: EventTarget & Element, clientX: number) => {\n if (target && clientX) {\n const relativeClientX = clientX - target.getBoundingClientRect().x;\n\n // check side offset\n if (\n relativeClientX >= sideOffset &&\n relativeClientX <=\n target.getBoundingClientRect().width - sideOffset\n ) {\n let percentage =\n relativeClientX / target.getBoundingClientRect().width;\n percentage = Math.min(Math.max(percentage, 0), 1);\n\n setSlideValue(percentage);\n }\n }\n };\n\n const handleClick = (ev: React.MouseEvent) => {\n const target = ev.currentTarget;\n if (target && ev.clientX) {\n setCurrentPos(target, ev.clientX);\n setInteracted(true);\n }\n };\n\n const handleMouseMove = (ev: React.MouseEvent) => {\n const target = ev.currentTarget;\n if (target && ev.clientX && isHolding) {\n setIsDragging(true);\n setInteracted(true);\n if (isDragging) setCurrentPos(target, ev.clientX);\n }\n };\n\n const handleTouchMove = (ev: React.TouchEvent<HTMLDivElement>) => {\n const target = ev.currentTarget;\n if (target && ev.touches[0]?.clientX) {\n setInteracted(true);\n setCurrentPos(target, ev.touches[0]?.clientX);\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <Wrapper>\n {backgroundImg && foregroundImg && (\n <Images\n onClick={handleClick}\n onMouseMove={handleMouseMove}\n onMouseDown={() => {\n setIsDragging(false);\n setIsHolding(true);\n }}\n onMouseUp={() => {\n setIsDragging(false);\n setIsHolding(false);\n }}\n onMouseLeave={() => {\n setIsHolding(false);\n setIsDragging(false);\n }}\n onTouchMove={handleTouchMove}\n onTouchStart={() => setIsHolding(true)}\n onTouchEnd={() => setIsHolding(false)}\n >\n <BackgroundImg {...backgroundImg} />\n {backgroundLabel && (\n <BackgroundLabel\n textColor={color(theme).light}\n bgColor={labelColor}\n >\n {backgroundLabel}\n </BackgroundLabel>\n )}\n <ForegroundContainer\n hasTransition={!isHolding}\n hasAnim={!interacted}\n initalValue={initialValue}\n style={{ width: slideValue * 100 + '%' }}\n >\n <ForegroundImg {...foregroundImg} />\n {foregroundLabel && (\n <ForegroundLabel\n textColor={color(theme).light}\n bgColor={labelColor}\n >\n {foregroundLabel}\n </ForegroundLabel>\n )}\n <ForegroundOverlay color={overlayColor} />\n </ForegroundContainer>\n <ControlContainer\n ref={controlRef}\n hasTransition={!isHolding}\n hasAnim={!interacted}\n initalValue={initialValue}\n style={{ left: slideValue * 100 + '%' }}\n >\n {dragControl ? (\n dragControl\n ) : (\n <Control>\n <ArrowLeftRight\n iconColor={color(theme).light}\n />\n </Control>\n )}\n </ControlContainer>\n </Images>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default ComparisonSlider;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings, getColors as color, withRange } from 'utils/styles';\nimport Wrapper from 'components/base/Wrapper';\nimport ArrowLeftGhost from 'components/base/icons/ArrowLeftGhost';\nimport ArrowRightGhost from 'components/base/icons/ArrowRightGhost';\nimport Slider from 'components/blocks/Slider';\nimport { ResponsiveObject } from 'react-slick';\nimport Intro from 'components/blocks/Intro';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst View = styled(Wrapper)`\n position: relative;\n width: 100%;\n overflow: hidden;\n\n @media ${mq.xlarge} {\n padding: 0;\n }\n`;\n\nconst Head = styled(Wrapper)`\n display: flex;\n flex-direction: row;\n`;\n\nconst IntroBlock = styled.div`\n flex: 1;\n ${withRange([spacings.spacer * 2, spacings.spacer * 3], 'padding-bottom')}\n`;\n\nconst TopControls = styled.div`\n display: none;\n text-align: right;\n max-width: ${spacings.wrapper}px;\n margin-left: auto;\n ${withRange(\n [spacings.spacer * 0.5, spacings.spacer * 1.5],\n 'margin-bottom'\n )};\n\n @media ${mq.semilarge} {\n display: flex;\n flex-direction: row;\n align-self: flex-end;\n }\n`;\n\nconst StyledControl = styled(Slider.Control)<{ isInverted?: boolean }>`\n border: none;\n outline: none;\n background: none;\n padding: 0 ${spacings.nudge * 3}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n transition: color 0.2s ease-in-out, transform 0.2s ease-in-out;\n\n &:enabled {\n cursor: pointer;\n }\n\n &:enabled:hover {\n transform: scale(1.05);\n }\n\n &:enabled:active {\n transform: scale(0.95);\n }\n\n &:disabled {\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).mono.dark : color(theme).mono.medium};\n }\n`;\n\nconst StyledSlides = styled(Slider.Slides)`\n margin-bottom: ${spacings.spacer}px;\n\n @media ${mq.xlarge} {\n margin-left: auto;\n width: 100%;\n max-width: ${spacings.wrapperLarge -\n (spacings.wrapperLarge - spacings.wrapper) / 2}px;\n }\n`;\n\nconst Footer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n`;\n\nconst CtrlWrapper = styled.div`\n display: block;\n\n @media ${mq.semilarge} {\n display: none;\n }\n`;\n\nconst CtrlWrapperLeft = styled(CtrlWrapper)`\n flex: 1;\n text-align: left;\n`;\n\nconst CtrlWrapperRight = styled(CtrlWrapper)`\n flex: 1;\n text-align: right;\n`;\n\nconst StyledDotGroup = styled(Slider.DotGroup)`\n display: inline-block;\n align-self: center;\n padding: ${spacings.nudge * 2}px 0;\n`;\n\nconst DotWrapper = styled.button`\n border: none;\n outline: none;\n background: none;\n cursor: pointer;\n\n padding: ${spacings.nudge * 2}px;\n margin: -${spacings.nudge * 2}px;\n\n & + & {\n margin-left: ${spacings.nudge * 1.5}px;\n }\n`;\n\nconst Dot = styled.div<{ isActive?: boolean; isInverted?: boolean }>`\n height: 14px;\n width: 14px;\n border: solid 1px\n ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 14px;\n\n transition: background-color 0.2s ease-in-out;\n\n background-color: ${({ isActive, isInverted, theme }) =>\n isActive\n ? isInverted\n ? color(theme).light\n : color(theme).dark\n : 'transparent'};\n`;\n\nexport interface CarouselProps {\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n spacing?: 'normal' | 'large';\n variableWidths?: boolean;\n isInverted?: boolean;\n controlNext?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n controlPrev?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n dot?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n index?: number;\n }) => React.ReactNode;\n beforeChange?: (props: { currentStep: number; nextStep: number }) => void;\n afterChange?: (currentStep: number) => void;\n onInit?: (steps: number) => void;\n responsive?: ResponsiveObject[];\n slidesToShow?: number;\n}\n\nconst CarouselBase: FC<CarouselProps & { className?: string }> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n spacing,\n variableWidths,\n isInverted,\n controlNext,\n controlPrev,\n dot,\n beforeChange,\n afterChange,\n onInit,\n slidesToShow,\n responsive,\n children,\n className,\n}) => {\n return (\n <View clampWidth=\"large\" className={className}>\n <Slider.Provider\n variableWidth={variableWidths}\n sameHeight={variableWidths}\n slideSpacing={\n spacing === 'large'\n ? { min: 30, max: 60 }\n : { min: 20, max: 30 }\n }\n slidesToShow={slidesToShow}\n responsive={responsive}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n >\n <Head clampWidth=\"normal\" addWhitespace>\n {title && (\n <IntroBlock>\n <Intro\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n secondaryAction={secondaryAction}\n primaryAction={primaryAction}\n />\n </IntroBlock>\n )}\n {React.Children.count(children) > 1 && (\n <TopControls>\n <StyledControl type=\"prev\" isInverted={isInverted}>\n {(isActive) =>\n controlPrev ? (\n controlPrev({\n isInverted,\n isActive,\n name: 'control_prev_head',\n })\n ) : (\n <ArrowLeftGhost />\n )\n }\n </StyledControl>\n <StyledControl type=\"next\" isInverted={isInverted}>\n {(isActive) =>\n controlNext ? (\n controlNext({\n isInverted,\n isActive,\n name: 'control_next_head',\n })\n ) : (\n <ArrowRightGhost />\n )\n }\n </StyledControl>\n </TopControls>\n )}\n </Head>\n\n <StyledSlides>\n {React.Children.map(children, (child, i) => (\n <Slider.Slide key={i}>{child}</Slider.Slide>\n ))}\n </StyledSlides>\n {React.Children.count(children) > 1 && (\n <Footer>\n <CtrlWrapperLeft>\n <StyledControl type=\"prev\" isInverted={isInverted}>\n {(isActive) =>\n controlPrev ? (\n controlPrev({\n isInverted,\n isActive,\n name: 'control_prev_footer',\n })\n ) : (\n <ArrowLeftGhost />\n )\n }\n </StyledControl>\n </CtrlWrapperLeft>\n <StyledDotGroup>\n {(i, isActive, onClick) => (\n <DotWrapper key={i} onClick={onClick}>\n {dot ? (\n dot({ isInverted, isActive, index: i })\n ) : (\n <Dot\n isActive={isActive}\n isInverted={isInverted}\n />\n )}\n </DotWrapper>\n )}\n </StyledDotGroup>\n <CtrlWrapperRight>\n <StyledControl type=\"next\" isInverted={isInverted}>\n {(isActive) =>\n controlNext ? (\n controlNext({\n isInverted,\n isActive,\n name: 'control_next_footer',\n })\n ) : (\n <ArrowRightGhost />\n )\n }\n </StyledControl>\n </CtrlWrapperRight>\n </Footer>\n )}\n </Slider.Provider>\n </View>\n );\n};\n\nexport default CarouselBase;\n","import React, { FC } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color } from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Section, { BgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\n\nconst ImageCarousel: FC<\n Omit<CarouselProps, 'variableWidths'> & {\n bgMode?: 'full' | 'splitted';\n images?: ImageProps[];\n }\n> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n bgMode,\n spacing = 'normal',\n images,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const imageCount = images?.length || 0;\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'splitted':\n return 'half-right';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <CarouselBase\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n variableWidths\n spacing={spacing}\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={imageCount > 1 ? 2.75 : 1}\n responsive={[\n {\n breakpoint: 832,\n settings: {\n slidesToShow: imageCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: imageCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {images &&\n images.map((img, i) => <FullWidthImg key={i} {...img} />)}\n </CarouselBase>\n </Section>\n );\n};\n\nconst FullWidthImg = styled(Image)`\n width: 100%;\n`;\n\nexport default ImageCarousel;\n","import React, { FC } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings, mq } from 'utils/styles';\nimport Section, { BgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\nimport Feature, { FeatureProps } from 'components/blocks/Feature';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\n\nconst StyledWrapper = styled.div`\n padding-left: ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n padding-left: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n padding-left: ${(1 / 28) * 100}%;\n\n padding-left: ${`\n max(\n ${spacings.spacer}px,\n ${(1 / 28) * 100}%\n );\n `};\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst FeatureCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'spacing'> & {\n bgMode?: 'full' | 'splitted';\n features?: FeatureProps[];\n }\n> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n bgMode,\n features,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const featureCount = features?.length || 0;\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\n listLength: featureCount,\n identifiers: [\n '[data-sheet=\"title\"]',\n '[data-sheet=\"desc\"]',\n '[data-sheet=\"intro\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: featureCount,\n medium: featureCount,\n semilarge: featureCount,\n large: featureCount,\n xlarge: featureCount,\n },\n });\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'splitted':\n return 'half-right';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <StyledWrapper>\n <CarouselBase\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n spacing=\"normal\"\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={featureCount > 1 ? 3 : 1}\n responsive={[\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: featureCount > 1 ? 3 : 1,\n },\n },\n {\n breakpoint: 832,\n settings: {\n slidesToShow: featureCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: featureCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {features &&\n features.map((feature, i) => (\n <div key={i} ref={cardRefs[i]}>\n <Feature\n key={i}\n addWhitespace\n isInverted={isInverted}\n {...feature}\n />\n </div>\n ))}\n </CarouselBase>\n </StyledWrapper>\n </Section>\n );\n};\n\nexport default FeatureCarousel;\n","import React, { FC } from 'react';\nimport { ThemeContext } from 'styled-components';\n\nimport { getColors as color } from 'utils/styles';\nimport Section, { BgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\nimport PromotionCard, {\n PromotionCardProps,\n} from 'components/blocks/PromotionCard';\n\nexport type PromotionCarouselItem = Omit<\n PromotionCardProps,\n 'text' | 'superTitle' | 'text' | 'primaryAction' | 'secondaryAction'\n>;\n\nconst PromotionCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'spacing'> & {\n bgMode?: BgMode;\n promotions?: PromotionCarouselItem[];\n }\n> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n bgMode,\n promotions,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const promotionCount = promotions?.length || 0;\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'half-right':\n return 'half-right';\n case 'half-left':\n return 'half-left';\n case 'larger-right':\n return 'larger-right';\n case 'larger-left':\n return 'larger-left';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <CarouselBase\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n spacing=\"normal\"\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={promotionCount > 1 ? 2.75 : 1}\n responsive={[\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: promotionCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 832,\n settings: {\n slidesToShow: promotionCount > 1 ? 1.15 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: promotionCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {promotions &&\n promotions.map((promotion, i) => (\n <PromotionCard key={i} {...promotion} />\n ))}\n </CarouselBase>\n </Section>\n );\n};\n\nexport default PromotionCarousel;\n","import React, { FC } from 'react';\nimport { ThemeContext } from 'styled-components';\n\nimport { getColors as color } from 'utils/styles';\nimport Section, { BgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\nimport VideoCard, { VideoCardProps } from 'components/blocks/VideoCard';\n\nconst VideoCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'spacing'> & {\n bgMode?: 'full' | 'splitted';\n videos?: VideoCardProps[];\n }\n> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n bgMode,\n videos,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const videoCount = videos?.length || 0;\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'splitted':\n return 'half-right';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <CarouselBase\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n spacing=\"normal\"\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={videoCount > 1 ? 2.75 : 1}\n responsive={[\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: videoCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 832,\n settings: {\n slidesToShow: videoCount > 1 ? 1.15 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: videoCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {videos &&\n videos.map((video, i) => <VideoCard key={i} {...video} />)}\n </CarouselBase>\n </Section>\n );\n};\n\nexport default VideoCarousel;\n","/* eslint-disable react/jsx-no-target-blank */\nimport React, { FC } from 'react';\n\nexport interface LinkProps {\n isExternal?: boolean;\n href?: string;\n}\n\nconst Link: FC<\n LinkProps & {\n className?: string;\n }\n> = ({ isExternal = false, href, children, className }) => {\n return (\n <a\n href={href}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n className={className}\n >\n {children}\n </a>\n );\n};\n\nexport default Link;\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport Link from 'components/typography/Link';\n\nconst bdotColor = '#1fc2f4';\n\nconst Dot = styled(Link)`\n width: 11px;\n height: 11px;\n\n display: inline-block;\n vertical-align: middle;\n border-radius: 50%;\n\n background: ${bdotColor};\n color: ${bdotColor};\n text-decoration: none;\n\n span {\n visibility: hidden;\n font-size: 0;\n color: transparent;\n }\n`;\n\nconst Bdot: React.FC<{ className?: string }> = ({ className }) => {\n return (\n <Dot className={className} href=\"https://blateral.com\" isExternal>\n <span>b.lateral - creative agency</span>\n </Dot>\n );\n};\n\nexport default Bdot;\n","import React, { FC } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings } from 'utils/styles';\nimport Link from 'components/typography/Link';\n\nconst View = styled.div`\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n // padding: ${spacings.nudge * 2}px 0;\n // overflow: hidden;\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n`;\n\nconst IconItemView = styled.div`\n transition: all ease-in-out 0.2s;\n\n &:hover {\n transform: scale(1.1);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst StyledLink = styled(Link)<{ textColor?: string }>`\n display: block;\n padding: ${spacings.nudge * 2}px ${spacings.nudge * 1.5}px;\n margin: -${spacings.nudge * 2}px -${spacings.nudge * 1.5}px;\n color: ${({ theme, textColor }) => textColor || color(theme).dark};\n`;\n\nconst SocialList: FC<{\n isInverted?: boolean;\n items?: { href: string; icon: React.ReactNode }[];\n className?: string;\n}> = ({ isInverted = false, items, className }) => {\n const theme = React.useContext(ThemeContext);\n\n return (\n <View className={className}>\n {items &&\n items.map((item, i) => (\n <IconItemView key={i}>\n <StyledLink\n isExternal\n href={item.href}\n textColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n >\n {item.icon}\n </StyledLink>\n </IconItemView>\n ))}\n </View>\n );\n};\n\nexport default SocialList;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\n} from 'utils/styles';\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport Bdot from 'components/blocks/Bdot';\nimport SocialList from 'components/blocks/SocialList';\n\nconst MainView = styled(Wrapper)<{ isInverted?: boolean }>`\n background-color: ${({ theme, isInverted }) =>\n isInverted && color(theme).dark};\n`;\n\nconst StyledLink = styled(Link)`\n display: inline-block;\n padding: ${spacings.nudge * 0.5}px 0;\n color: inherit;\n text-decoration: underline;\n`;\n\n/**** MAIN FOOTER CONTENT ****/\nconst Content = styled.div<{ isInverted?: boolean }>`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n margin-left: -${spacings.spacer}px;\n margin-right: -${spacings.spacer}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n\n & > * {\n flex: 1;\n }\n\n & > *:last-child {\n flex: 1 1 100%;\n }\n\n @media ${mq.medium} {\n flex-direction: row;\n flex-wrap: wrap;\n padding-top: ${spacings.spacer}px;\n padding-bottom: ${spacings.spacer}px;\n\n & > *:last-child {\n max-width: 600px;\n }\n }\n\n @media ${mq.large} {\n & > *:last-child {\n flex: 1;\n max-width: 100%;\n }\n }\n`;\n\nconst ContentBlock = styled.div<{\n direction?: 'row' | 'column';\n topSpace?: string;\n hAlign?: 'left' | 'center' | 'right';\n}>`\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n\n padding: ${spacings.spacer}px;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n flex-direction: ${({ direction }) => direction || 'column'};\n align-items: flex-start;\n padding-top: ${({ topSpace }) => topSpace && topSpace};\n text-align: left;\n min-width: 330px;\n }\n\n @media ${mq.large} {\n align-items: ${({ hAlign }) =>\n hAlign === 'right'\n ? 'flex-end'\n : hAlign === 'center'\n ? 'center'\n : 'flex-start'};\n text-align: ${({ hAlign }) => hAlign && hAlign};\n }\n`;\n\nconst LogoLink = styled(Link)`\n display: inline-block;\n color: inherit;\n`;\n\nconst ContactData = styled(Copy)`\n text-align: center;\n\n p {\n margin: 0;\n padding: 0;\n }\n\n @media ${mq.medium} {\n text-align: left;\n margin-top: auto;\n padding: ${spacings.nudge * 2}px 0;\n }\n`;\n\nconst SiteLinksView = styled.div`\n flex: 50%;\n display: flex;\n flex-direction: column;\n text-align: center;\n\n margin: 0;\n\n & + & {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n\n @media ${mq.medium} {\n padding: 0 ${spacings.nudge * 3}px;\n text-align: left;\n\n & + & {\n padding-top: 0;\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n }\n`;\n\nconst SiteLink = styled(StyledLink)`\n font-weight: ${({ theme }) => font(theme)['copy-b'].medium.weight};\n font-family: ${({ theme }) => font(theme)['copy-b'].medium.family};\n ${({ theme }) => withRange(font(theme)['copy-b'].medium.size, 'font-size')}\n line-height: ${({ theme }) => font(theme)['copy-b'].medium.lineHeight};\n`;\n\nconst LinkWrapper = styled(Copy)<{ isActive?: boolean; isInverted?: boolean }>`\n display: inline-block;\n position: relative;\n padding-bottom: 3px;\n\n &:before {\n content: ${({ isActive }) => (isActive ? `\"\"` : undefined)};\n position: absolute;\n left: -12px;\n top: 50%;\n height: 4px;\n width: 4px;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 4px;\n\n transform: translateY(-100%);\n }\n\n &:after {\n content: '';\n position: absolute;\n left: 0;\n bottom: 0;\n right: 0;\n height: 1px;\n background-color: ${({ theme }) => color(theme).primary.medium};\n margin-top: ${spacings.nudge * 10}px;\n opacity: 0;\n\n transition: opacity 0.2s ease-in-out;\n\n ${SiteLink}:hover > & {\n opacity: 1;\n }\n }\n`;\n\n/**** BOTTOM FOOTER CONTENT ****/\nconst BottomWrapper = styled(Wrapper)`\n background-color: ${({ theme }) => color(theme).mono.light};\n`;\n\nconst BottomView = styled(Wrapper)`\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 100%;\n min-height: 41px;\n\n padding-top: ${spacings.nudge * 1.5}px;\n padding-bottom: ${spacings.nudge * 1.5}px;\n\n color: ${({ theme }) => color(theme).dark};\n\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n justify-content: flex-end;\n }\n`;\n\n/**** FOOTER SECTION ****/\nconst Footer: FC<{\n isInverted?: boolean;\n logo?: {\n img?: string;\n link?: string;\n };\n columnTopSpace?: string;\n contactData?: string;\n siteLinks?: Array<LinkProps & { label?: string; isActive?: boolean }>;\n newsTitle?: string;\n newsText?: string;\n newsForm?: (isInverted?: boolean) => React.ReactNode;\n socials?: Array<{ icon: React.ReactNode; href: string }>;\n bottomLinks?: { href: string; label?: string; isExternal?: boolean }[];\n brandIcon?: React.ReactNode;\n}> = ({\n isInverted = false,\n logo,\n columnTopSpace,\n contactData,\n siteLinks,\n newsTitle,\n newsText,\n newsForm,\n socials,\n bottomLinks,\n brandIcon,\n}) => {\n // setup siteLinks columns\n const siteLinksColLeft =\n siteLinks && siteLinks.length > 6\n ? siteLinks?.slice(0, Math.ceil(siteLinks.length / 2))\n : siteLinks;\n const siteLinksColRight =\n siteLinks && siteLinks.length > 6\n ? siteLinks?.slice(Math.ceil(siteLinks.length / 2))\n : undefined;\n\n return (\n <Section as=\"footer\" bgMode=\"full\" bgColor=\"transparent\">\n <MainView clampWidth=\"large\" isInverted={isInverted}>\n <Wrapper addWhitespace>\n <Content isInverted={isInverted}>\n <ContentBlock>\n {logo?.img && (\n <LogoLink href={logo?.link}>\n <img src={logo?.img} />\n </LogoLink>\n )}\n {contactData && (\n <ContactData\n size=\"small\"\n isInverted={isInverted}\n innerHTML={contactData}\n />\n )}\n </ContentBlock>\n <ContentBlock\n direction=\"row\"\n topSpace={logo && columnTopSpace}\n >\n {siteLinksColLeft && (\n <SiteLinksView>\n {siteLinksColLeft.map((link, i) => (\n <SiteLink key={i} href={link.href}>\n <LinkWrapper\n type=\"copy\"\n isActive={link.isActive}\n isInverted={isInverted}\n >\n {link.label || link.href}\n </LinkWrapper>\n </SiteLink>\n ))}\n </SiteLinksView>\n )}\n {siteLinksColRight && (\n <SiteLinksView>\n {siteLinksColRight.map((link, i) => (\n <SiteLink key={i} href={link.href}>\n <LinkWrapper\n type=\"copy\"\n isActive={link.isActive}\n isInverted={isInverted}\n >\n {link.label || link.href}\n </LinkWrapper>\n </SiteLink>\n ))}\n </SiteLinksView>\n )}\n </ContentBlock>\n <ContentBlock\n topSpace={logo && columnTopSpace}\n hAlign={\n !newsTitle && !newsText && !newsForm\n ? 'right'\n : 'left'\n }\n >\n {newsTitle && (\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {newsTitle}\n </Copy>\n )}\n {newsText && (\n <Copy\n size=\"small\"\n isInverted={isInverted}\n innerHTML={newsText}\n />\n )}\n {newsForm && newsForm(isInverted)}\n {socials && (\n <SocialList\n isInverted={isInverted}\n items={socials.map((item) => {\n return {\n href: item.href,\n icon: item.icon,\n };\n })}\n />\n )}\n </ContentBlock>\n </Content>\n </Wrapper>\n </MainView>\n\n {bottomLinks && (\n <BottomWrapper clampWidth=\"large\">\n <BottomView addWhitespace>\n {bottomLinks.map((link, i) => {\n if (link.href) {\n return (\n <StyledLink\n key={i}\n isExternal={link.isExternal}\n href={link.href}\n >\n <Copy size=\"small\">\n {link.label || link.href}\n </Copy>\n </StyledLink>\n );\n } else return null;\n })}\n {brandIcon ? brandIcon : <Bdot />}\n </BottomView>\n </BottomWrapper>\n )}\n </Section>\n );\n};\n\nexport default Footer;\n","export const getBgImage = (\n bgImage: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n },\n mq?: 'small' | 'medium' | 'semilarge' | 'large' | 'xlarge'\n): string => {\n switch (mq) {\n default:\n case 'small':\n return bgImage.small;\n\n case 'medium':\n return (\n bgImage.medium ||\n bgImage.semilarge ||\n bgImage.large ||\n bgImage.xlarge ||\n bgImage.small\n );\n\n case 'semilarge':\n return (\n bgImage.semilarge ||\n bgImage.large ||\n bgImage.xlarge ||\n bgImage.medium ||\n bgImage.small\n );\n\n case 'large':\n return (\n bgImage.large ||\n bgImage.xlarge ||\n bgImage.semilarge ||\n bgImage.medium ||\n bgImage.small\n );\n\n case 'xlarge':\n return (\n bgImage.xlarge ||\n bgImage.large ||\n bgImage.semilarge ||\n bgImage.medium ||\n bgImage.small\n );\n }\n};\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { getBgImage } from 'utils/backgroundImage';\nimport { canUseWebP } from 'utils/usePoster';\nimport { FC, useEffect, useRef, useState } from 'react';\n\nexport interface HeaderKenBurnsImageProps {\n small: string;\n medium: string;\n large: string;\n xlarge: string;\n webp?: {\n small: string;\n medium: string;\n large: string;\n xlarge: string;\n };\n}\n\nconst AnimationContainer = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n overflow: hidden;\n`;\n\nconst PosterImage = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n`;\n\nconst AnimationImage = styled.div<{ scale?: number; opacity?: number }>`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n transition-property: opacity, transform;\n transition-duration: ${({ scale }) => `2s, ${scale === 1 ? '0s' : '13s'}`};\n transition-delay: ${({ scale }) =>\n `${scale === 1 ? '1s' : '0s'}, ${scale === 1 ? '3s' : '0s'}`};\n\n opacity: ${({ opacity }) => opacity && opacity};\n transform: scale(${({ scale }) => scale || 1})\n rotate(${({ scale }) => (scale !== 1 ? 0.04 : 0)}deg);\n\n will-change: transform, opacity;\n`;\n\nconst AnimationImages: FC<{\n zoom?: number;\n images: { id: number | string; image: string }[];\n}> = ({ zoom = 1.08, images }) => {\n const intervalRef = useRef<number | null>();\n const [activeImg, setActiveImg] = useState<number>(-1);\n\n useEffect(() => {\n const changeImage = () => {\n setActiveImg((prev) => {\n return (prev + 1) % images.length;\n });\n };\n\n // changeImage();\n window.setTimeout(changeImage, 200);\n if (intervalRef.current) window.clearInterval(intervalRef.current);\n intervalRef.current = window.setInterval(changeImage, 10000);\n\n return () => {\n if (intervalRef.current) window.clearInterval(intervalRef.current);\n };\n }, [images]);\n\n return (\n <>\n {images.map((img, i) => (\n <AnimationImage\n key={i}\n style={{\n backgroundImage: `url(${img.image})`,\n zIndex: i === activeImg ? 1 : 0,\n }}\n scale={i === activeImg ? zoom : 1}\n opacity={i === activeImg ? 1 : 0}\n />\n ))}\n </>\n );\n};\n\nconst preloadImages = (imageUrls: string[]) => {\n const images = imageUrls.map((src, i) => {\n return new Promise((res) => {\n const img = new Image();\n img.src = src;\n img.onload = () => res({ url: src, i });\n });\n });\n\n return images;\n};\n\ntype KenBurnsMq = 'small' | 'medium' | 'large' | 'xlarge';\n\nconst HeaderKenBurns: React.FC<{\n images: HeaderKenBurnsImageProps[];\n className?: string;\n}> = ({ images, className, children }) => {\n const mqs: KenBurnsMq[] = ['small', 'medium', 'large', 'xlarge'];\n const currentMq = useMediaQuery(mqs) as KenBurnsMq | undefined;\n\n const [loadedImages, setLoadedImages] = React.useState<{\n [key: string]: { id: number | string; image: string }[];\n }>({\n small: [],\n medium: [],\n large: [],\n xlarge: [],\n });\n\n React.useEffect(() => {\n if (currentMq) {\n const loadedForMq = loadedImages[currentMq];\n const useWebp = canUseWebP();\n\n if (loadedForMq.length < images.length && images.length >= 2) {\n const requestedImages = images.map((img) =>\n img.webp && useWebp ? img.webp[currentMq] : img[currentMq]\n );\n\n const resolve = async (items: any) => {\n for (const item of items) {\n const x = await item;\n\n setLoadedImages((prev) => {\n // check if image id already exists in array\n if (!prev[currentMq].find((e) => e.id === x.i)) {\n return {\n ...prev,\n [currentMq]: [\n ...prev[currentMq],\n {\n id: x.i,\n image: x.url,\n },\n ],\n };\n } else return prev;\n });\n }\n };\n\n resolve(preloadImages(requestedImages));\n }\n }\n }, [currentMq, images, loadedImages]);\n\n return (\n <AnimationContainer className={className}>\n {currentMq && loadedImages[currentMq].length >= images.length ? (\n <AnimationImages images={loadedImages[currentMq]} />\n ) : (\n <PosterImage\n style={{\n backgroundImage: `url(${getBgImage(\n images[0],\n currentMq\n )})`,\n }}\n />\n )}\n {children}\n </AnimationContainer>\n );\n};\n\nexport default HeaderKenBurns;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { usePoster } from 'utils/usePoster';\n\ninterface HeaderPosterImageProps {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n webp?: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n };\n}\n\nconst PosterView = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n min-height: 200px;\n display: block;\n flex: 1 0 0px;\n }\n`;\n\nconst HeaderPoster: React.FC<{\n bgImage: HeaderPosterImageProps;\n className?: string;\n}> = ({ bgImage, className, children }) => {\n const currentImage = usePoster(bgImage);\n return (\n <PosterView\n style={\n currentImage ? { backgroundImage: `url(${currentImage})` } : {}\n }\n className={className}\n >\n {children}\n </PosterView>\n );\n};\n\nexport default HeaderPoster;\n","import * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n FontOptionType,\n getFonts as font,\n mq,\n styleTextColor,\n withRange,\n} from 'utils/styles';\n\n// Styles\nconst BaseStyles = styled.h1<{\n size: FontOptionType;\n hyphens?: boolean;\n hasShadow?: boolean;\n textColor?: string;\n textGradient?: string;\n}>`\n margin: 0;\n padding: 0;\n ${({ textColor, textGradient }) => styleTextColor(textColor, textGradient)}\n\n hyphens: auto;\n /* -webkit-hyphens: auto; */\n /* overflow-wrap: break-word; */\n\n ${(props: { hyphens?: boolean }) =>\n !props.hyphens &&\n css`\n @media ${mq.large} {\n hyphens: none;\n }\n `}\n\n text-shadow: ${({ hasShadow }) =>\n hasShadow && '1px 2px 8px rgba(0, 0, 0, 0.25)'};\n`;\n\nconst View = styled(BaseStyles)`\n font-family: ${({ theme, size }) => font(theme).callout[size].family};\n font-weight: ${({ theme, size }) => font(theme).callout[size].weight};\n font-style: ${({ theme, size }) => font(theme).callout[size].style};\n ${({ theme, size }) =>\n withRange(font(theme).callout[size].size, 'font-size')}\n line-height: ${({ theme, size }) => font(theme).callout[size].lineHeight};\n letter-spacing: ${({ theme, size }) =>\n font(theme).callout[size].letterSpacing};\n text-transform: ${({ theme, size }) =>\n font(theme).callout[size].textTransform};\n`;\n\nexport type CalloutTag =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'span'\n | 'div';\n\nconst Callout: React.FC<{\n isInverted?: boolean;\n as?: CalloutTag;\n size?: FontOptionType;\n textColor?: string;\n textGradient?: string;\n hyphens?: boolean;\n hasShadow?: boolean;\n innerHTML?: string;\n\n className?: string;\n}> = ({\n isInverted,\n as = 'h2',\n className,\n size = 'medium',\n textColor,\n textGradient,\n hyphens = false,\n hasShadow = false,\n innerHTML,\n children,\n}) => {\n const theme = React.useContext(ThemeContext);\n const fontSettings = font(theme)?.callout?.[size];\n\n return (\n <View\n as={as}\n size={size}\n textColor={\n textColor ||\n (isInverted ? fontSettings.colorInverted : fontSettings.color)\n }\n textGradient={\n textGradient ||\n (!textColor\n ? isInverted\n ? fontSettings.colorGradientInverted\n : fontSettings.colorGradient\n : undefined)\n }\n hyphens={hyphens}\n hasShadow={hasShadow}\n dangerouslySetInnerHTML={\n innerHTML && !children ? { __html: innerHTML } : undefined\n }\n className={className}\n >\n {children}\n </View>\n );\n};\n\nexport default Callout;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { useState, useEffect } from 'react';\nimport Image from 'components/blocks/Image';\nimport { useMediaQuery } from 'utils/useMediaQuery';\n\ninterface HeaderVideoImageProps {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n webp?: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n };\n}\n\nconst PosterView = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n min-height: 200px;\n display: block;\n flex: 1 0 0px;\n }\n`;\n\nconst PlaceholderImg = styled(Image)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n z-index: 0;\n`;\n\nconst AutoplayVideo = styled.video<{ isVisible?: boolean }>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n object-position: center;\n opacity: ${({ isVisible }) => (isVisible ? 1 : 0)};\n pointer-events: none;\n z-index: 1;\n\n transition: opacity 0.3s ease-in-out;\n`;\n\ntype HeaderVideoMq = 'small' | 'medium' | 'semilarge' | 'large' | 'xlarge';\n\nconst HeaderVideo: React.FC<{\n placeholderImg?: HeaderVideoImageProps;\n videoUrl?: string;\n className?: string;\n}> = ({ placeholderImg, videoUrl, className, children }) => {\n const [isLoaded, setLoaded] = useState<boolean>(false);\n const currentMq = useMediaQuery([\n 'small',\n 'medium',\n 'semilarge',\n 'large',\n 'xlarge',\n ]) as HeaderVideoMq | undefined;\n\n const isMobile = currentMq === undefined || currentMq === 'small';\n\n useEffect(() => {\n if (isMobile) setLoaded(false);\n }, [isMobile]);\n\n return (\n <PosterView className={className}>\n {placeholderImg?.small && !isLoaded && (\n <PlaceholderImg coverSpace {...placeholderImg} />\n )}\n {videoUrl && !isMobile && (\n <AutoplayVideo\n isVisible={isLoaded}\n src={videoUrl}\n muted\n autoPlay\n loop\n onCanPlayThrough={() => setLoaded(true)}\n />\n )}\n {children}\n </PosterView>\n );\n};\n\nexport default HeaderVideo;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { CalloutTag } from 'components/typography/Callout';\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Grid from 'components/base/Grid';\nimport Wrapper from 'components/base/Wrapper';\nimport HeaderKenBurns, { HeaderKenBurnsImageProps } from './HeaderKenBurns';\nimport HeaderPoster from './HeaderPoster';\nimport Actions from 'components/blocks/Actions';\nimport Callout from 'components/typography/Callout';\nimport HeaderVideo from './HeaderVideo';\n\ninterface HeaderImageProps {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n webp?: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n };\n}\n\nconst View = styled.header`\n position: relative;\n`;\n\nconst HeaderWrapper = styled(Wrapper)`\n display: flex;\n flex-direction: column;\n height: 100%;\n`;\n\nconst PosterContent = styled.div`\n position: relative;\n display: none;\n width: 100%;\n margin: auto;\n z-index: 3;\n text-align: center;\n padding: 0 ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n display: block;\n max-width: none;\n margin-left: 0;\n text-align: left;\n padding-left: ${(1 / 28) * 100}%;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst PosterContentMobile = styled(PosterContent)`\n display: block;\n padding-top: ${spacings.spacer * 2}px;\n ${withRange([spacings.spacer * 2, spacings.spacer * 4], 'padding-bottom')}\n\n @media ${mq.semilarge} {\n display: none;\n }\n`;\n\nconst Badge = styled.div<{ showOnMobile?: boolean }>`\n display: ${({ showOnMobile }) => (showOnMobile ? 'block' : 'none')};\n position: relative;\n height: 234px;\n width: 234px;\n margin-left: auto;\n margin-right: ${spacings.spacer}px;\n margin-top: -173px;\n z-index: 3;\n\n @media ${mq.semilarge} {\n display: block;\n margin-right: ${spacings.spacer * 4}px;\n }\n\n @media ${mq.xlarge} {\n width: 392px;\n height: 392px;\n margin-left: 0;\n margin-top: -300px;\n\n right: -50%;\n transform: translate(\n ${spacings.wrapper / 2 - (392 + spacings.spacer * 3)}px\n );\n }\n`;\n\nconst Poster: FC<{\n videoUrl?: string;\n images?: HeaderImageProps[];\n className?: string;\n}> = ({ videoUrl, images, className, children }) => {\n if (!videoUrl) {\n if (!images || images.length === 0) return <div>{children}</div>;\n else if (images.length === 1)\n return (\n <HeaderPoster bgImage={images[0]} className={className}>\n {children}\n </HeaderPoster>\n );\n else\n return (\n <HeaderKenBurns\n images={images.map((img) => {\n return {\n ...img,\n } as HeaderKenBurnsImageProps;\n })}\n className={className}\n >\n {children}\n </HeaderKenBurns>\n );\n } else {\n return (\n <HeaderVideo\n videoUrl={videoUrl}\n placeholderImg={images?.[0]}\n className={className}\n >\n {children}\n </HeaderVideo>\n );\n }\n};\n\nconst StyledPoster = styled(Poster)<{ gradient?: string; size?: number }>`\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-end;\n height: ${({ size }) => (size ? size * 100 + 'vh' : '100vh')};\n max-height: 1100px;\n\n ${withRange([spacings.spacer * 7, spacings.spacer * 8], 'padding-top')};\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4.5],\n 'padding-bottom'\n )};\n\n @media ${mq.semilarge} {\n &:after {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-image: ${({ gradient }) => gradient || undefined};\n pointer-events: none;\n z-index: 2;\n }\n }\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n min-height: 1px; // before: 200px\n display: block;\n flex: 1 0 0px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')};\n\n @media ${mq.semilarge} {\n max-width: 600px;\n }\n`;\n\nconst Header: FC<{\n size?: 'full' | 'small';\n /** Optional explicit height scale value: 100vh * [0...1] */\n sizeScale?: number;\n title?: string;\n titleAs?: CalloutTag;\n primaryCta?: (isInverted?: boolean) => React.ReactNode;\n secondaryCta?: (isInverted?: boolean) => React.ReactNode;\n videoUrl?: string;\n images?: HeaderImageProps[];\n withTopGradient?: boolean;\n customTopGradient?: string;\n customBottomGradient?: string;\n badge?: {\n content: React.ReactNode;\n showOnMobile?: boolean;\n };\n}> = ({\n size = 'full',\n sizeScale,\n title,\n titleAs,\n primaryCta,\n secondaryCta,\n videoUrl,\n images,\n withTopGradient = true,\n customTopGradient,\n customBottomGradient,\n badge,\n}) => {\n const theme = useContext(ThemeContext);\n const topGradient = withTopGradient\n ? customTopGradient ||\n 'linear-gradient(179deg,rgba(0,0,0,.4) 0%,rgba(0,0,0,0) 40%)'\n : undefined;\n\n const bottomGradient =\n title || primaryCta || secondaryCta\n ? customBottomGradient || global(theme).sections.imageTextGradient\n : undefined;\n\n const gradient = `${bottomGradient ? bottomGradient + ', ' : ''}${\n topGradient || ''\n }`;\n return (\n <View>\n <HeaderWrapper clampWidth=\"large\">\n <StyledPoster\n videoUrl={videoUrl}\n images={images}\n gradient={withTopGradient ? gradient : undefined}\n size={\n sizeScale === undefined\n ? size === 'small'\n ? 0.8\n : 1\n : sizeScale\n }\n >\n <Wrapper>\n <PosterContent>\n <Grid.Row gutter={0}>\n <Grid.Col\n medium={{ span: 16 / 28 }}\n large={{ span: 15 / 28 }}\n >\n {title && (\n <Callout\n hyphens\n size=\"medium\"\n as={titleAs}\n hasShadow\n textColor=\"#fff\"\n innerHTML={title}\n />\n )}\n {(primaryCta || secondaryCta) && (\n <StyledActions\n primary={\n primaryCta && primaryCta(true)\n }\n secondary={\n secondaryCta &&\n secondaryCta(true)\n }\n />\n )}\n </Grid.Col>\n </Grid.Row>\n </PosterContent>\n </Wrapper>\n </StyledPoster>\n {badge && badge.content && (\n <Badge showOnMobile={badge.showOnMobile}>\n {badge.content}\n </Badge>\n )}\n </HeaderWrapper>\n <PosterContentMobile>\n <Wrapper addWhitespace>\n {title && (\n <Callout\n hyphens\n size=\"small\"\n as={titleAs}\n isInverted={false}\n innerHTML={title}\n />\n )}\n {(primaryCta || secondaryCta) && (\n <StyledActions\n primary={primaryCta && primaryCta(false)}\n secondary={secondaryCta && secondaryCta(false)}\n />\n )}\n </Wrapper>\n </PosterContentMobile>\n </View>\n );\n};\n\nexport default Header;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\nimport { getColors as color, mq, spacings } from 'utils/styles';\n\nconst Seperator = styled.div<{ isInverted?: boolean }>`\n border-bottom: solid 1px\n ${({ isInverted, theme }) =>\n isInverted ? color(theme).light : color(theme).dark};\n`;\n\nconst ContentFlex = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n\n margin: ${spacings.spacer * 2}px 0;\n\n @media ${mq.medium} {\n flex-direction: row;\n justify-content: flex-start;\n text-align: left;\n }\n`;\n\nconst Avatar = styled.img`\n border-radius: 50%; ;\n`;\n\nconst Author = styled.div`\n margin-top: ${spacings.spacer}px;\n\n @media ${mq.medium} {\n margin-left: 0;\n margin-left: ${spacings.spacer}px;\n }\n`;\n\nconst StyledCopy = styled(Copy)`\n text-transform: uppercase;\n margin-bottom: ${spacings.nudge * 2}px;\n`;\n\nconst NewsAuthorCard: React.FC<{\n label?: string;\n author?: string;\n avatar?: { src: string; alt?: string };\n\n isInverted?: boolean;\n hasBack?: boolean;\n}> = ({ label, author, avatar, isInverted = false, hasBack = false }) => {\n const theme = React.useContext(ThemeContext);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper clampWidth=\"small\" addWhitespace>\n {author && (\n <>\n <Seperator isInverted={isInverted} />\n <ContentFlex>\n {avatar && (\n <Avatar src={avatar.src} alt={avatar.alt} />\n )}\n <Author>\n {author && (\n <StyledCopy\n isInverted={isInverted}\n type=\"copy-b\"\n >\n {label || 'Written By'}\n </StyledCopy>\n )}\n <Heading\n isInverted={isInverted}\n size=\"heading-2\"\n >\n {author}\n </Heading>\n </Author>\n </ContentFlex>\n </>\n )}\n <Seperator isInverted={isInverted} />\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsAuthorCard;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { spacings, getColors as color } from 'utils/styles';\nimport Copy from 'components/typography/Copy';\n\nconst View = styled(Copy)<{\n isInverted?: boolean;\n isActive?: boolean;\n onClick?: () => void;\n}>`\n display: inline-block;\n border: 1px solid\n ${({ isInverted, theme }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 15px;\n\n padding: 3px ${spacings.nudge * 2}px;\n user-select: none;\n\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n text-align: center;\n background: ${({ isActive, isInverted, theme }) =>\n isActive && (isInverted ? color(theme).light : color(theme).dark)};\n color: ${({ isActive, isInverted, theme }) =>\n isActive && (isInverted ? color(theme).dark : color(theme).light)};\n cursor: ${({ onClick }) => (onClick ? 'pointer' : 'default')};\n\n transition: background 0.1s ease-in-out, color 0.1s ease-in-out;\n\n &:hover {\n background: ${({ theme, isInverted, onClick }) =>\n onClick && (isInverted ? color(theme).light : color(theme).dark)};\n color: ${({ theme, isInverted, onClick }) =>\n onClick && (isInverted ? color(theme).dark : color(theme).light)};\n }\n`;\n\nconst Tag: FC<{\n isInverted?: boolean;\n isActive?: boolean;\n onClick?: () => void;\n className?: string;\n}> = ({ isInverted, isActive, onClick, className, children }) => {\n return (\n <View\n isInverted={isInverted}\n isActive={isActive}\n onClick={onClick}\n className={className}\n >\n {children}\n </View>\n );\n};\n\nexport default Tag;\n","interface DateReplacementHolder {\n [key: string]: () => string;\n}\n\nexport default class StatusFormatter {\n private timestamp: number;\n private input: string;\n private dateFormat: string;\n private timeFormat: string;\n\n private localeKey: string;\n private date: Date;\n\n constructor(\n timestamp: number,\n input: string,\n dateFormat: string,\n timeFormat: string,\n localeKey?: string\n ) {\n this.timestamp = timestamp;\n this.input = input;\n this.dateFormat = dateFormat;\n this.timeFormat = timeFormat;\n\n this.localeKey = localeKey ? localeKey : 'de';\n this.date = new Date(this.timestamp);\n }\n\n private dateReplacements: DateReplacementHolder = {\n dddd: () => {\n return weekDays[this.localeKey].long[this.date.getDay()];\n },\n DDDD: () => {\n return weekDays[this.localeKey].long[this.date.getDay()];\n },\n ddd: () => {\n return weekDays[this.localeKey].short[this.date.getDay()];\n },\n DDD: () => {\n return weekDays[this.localeKey].short[this.date.getDay()];\n },\n dd: () => {\n return this.getDay();\n },\n DD: () => {\n return this.getDay();\n },\n MMMM: () => {\n return monthNames[this.localeKey].long[this.date.getMonth()];\n },\n mmmm: () => {\n return monthNames[this.localeKey].long[this.date.getMonth()];\n },\n MMM: () => {\n return monthNames[this.localeKey].short[this.date.getMonth()];\n },\n mmm: () => {\n return monthNames[this.localeKey].short[this.date.getMonth()];\n },\n mm: () => {\n return this.getMonth();\n },\n MM: () => {\n return this.getMonth();\n },\n yyyy: () => {\n return this.getYear();\n },\n YYYY: () => {\n return this.getYear();\n },\n yy: () => {\n return this.getYear().substr(-2);\n },\n YY: () => {\n return this.getYear().substr(-2);\n },\n };\n\n private timeReplacements: DateReplacementHolder = {\n hh: () => {\n return this.getHours();\n },\n HH: () => {\n return this.getHours();\n },\n hs: () => {\n return this.getHours12h();\n },\n HS: () => {\n return this.getHours12h();\n },\n mm: () => {\n return this.getMinutes();\n },\n MM: () => {\n return this.getMinutes();\n },\n ss: () => {\n return this.getSeconds();\n },\n SS: () => {\n return this.getSeconds();\n },\n ap: () => {\n const hours = this.date.getHours();\n return hours >= 12 ? 'pm' : 'am';\n },\n AP: () => {\n const hours = this.date.getHours();\n return hours >= 12 ? 'PM' : 'AM';\n },\n };\n\n public setDate(timestamp: number) {\n this.date = new Date(timestamp);\n }\n\n public setLocale(localeKey: string) {\n this.localeKey = localeKey;\n }\n\n public getFormattedStatus() {\n const placeholders: {\n [key: string]: any;\n } = {\n '%DATE%': this.getFormattedDate(),\n '%TIME%': this.getFormattedTime(),\n };\n\n const formattedInput = this.input.replace(/%\\w+%/g, (foundString) => {\n return placeholders[foundString] || foundString;\n });\n return formattedInput;\n }\n\n public getFormattedDate() {\n // replace placeholders with values from dateReplacements object\n const dataKeys = Object.keys(this.dateReplacements);\n let formattedDate = this.dateFormat;\n for (let i = 0; i < dataKeys.length; i++) {\n formattedDate = formattedDate.replace(\n new RegExp(dataKeys[i], 'g'),\n (foundString) => {\n return this.dateReplacements[foundString].call(this);\n }\n );\n }\n return formattedDate;\n }\n\n public getFormattedTime() {\n // replace placeholders with values from timeReplacements object\n const dataKeys = Object.keys(this.timeReplacements);\n let formattedTime = this.timeFormat;\n for (let i = 0; i < dataKeys.length; i++) {\n formattedTime = formattedTime.replace(\n new RegExp(dataKeys[i], 'g'),\n (foundString) => {\n return this.timeReplacements[foundString].call(this);\n }\n );\n }\n return formattedTime;\n }\n\n private getDoubleDigitString(value: number) {\n return value < 10 ? '0' + value.toString() : value.toString();\n }\n\n private getDay() {\n return this.getDoubleDigitString(this.date.getDate());\n }\n\n private getMonth() {\n return this.getDoubleDigitString(this.date.getMonth() + 1);\n }\n\n private getYear() {\n return this.date.getFullYear().toString();\n }\n\n private getHours() {\n return this.getDoubleDigitString(this.date.getHours());\n }\n\n private getHours12h() {\n let hours = this.date.getHours();\n hours = hours % 12;\n hours = hours === 0 ? 12 : hours;\n return this.getDoubleDigitString(hours);\n }\n\n private getMinutes() {\n return this.getDoubleDigitString(this.date.getMinutes());\n }\n\n private getSeconds() {\n return this.getDoubleDigitString(this.date.getSeconds());\n }\n}\n\ninterface WeekDays {\n [key: string]: {\n long: string[];\n short: string[];\n };\n}\n\ninterface MonthNames {\n [key: string]: {\n long: string[];\n short: string[];\n };\n}\n\nconst weekDays: WeekDays = {\n de: {\n long: [\n 'Montag',\n 'Dienstag',\n 'Mittwoch',\n 'Donnerstag',\n 'Freitag',\n 'Samstag',\n 'Sonntag',\n ],\n short: ['Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.', 'So.'],\n },\n en: {\n long: [\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n 'Sunday',\n ],\n short: ['Mon.', 'Tue.', 'Wed.', 'Thu.', 'Fri.', 'Sat.', 'Sun.'],\n },\n};\n\nconst monthNames: MonthNames = {\n de: {\n long: [\n 'Januar',\n 'Februar',\n 'März',\n 'April',\n 'Mai',\n 'Juni',\n 'Juli',\n 'August',\n 'September',\n 'Oktober',\n 'November',\n 'Dezember',\n ],\n short: [\n 'Jan.',\n 'Febr.',\n 'März',\n 'Apr.',\n 'Mai',\n 'Juni',\n 'Juli',\n 'Aug.',\n 'Sept.',\n 'Okt.',\n 'Nov.',\n 'Dez',\n ],\n },\n en: {\n long: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n short: [\n 'Jan.',\n 'Feb.',\n 'Mar.',\n 'Apr.',\n 'May',\n 'June',\n 'July',\n 'Aug.',\n 'Sept.',\n 'Oct.',\n 'Nov.',\n 'Dec.',\n ],\n },\n};\n","import React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Copy from 'components/typography/Copy';\nimport Actions from 'components/blocks/Actions';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Tag from 'components/blocks/Tag';\nimport StatusFormatter from 'utils/statusFormatter';\nimport Link, { LinkProps } from 'components/typography/Link';\n\nconst View = styled.div`\n position: relative;\n text-decoration: none;\n padding-bottom: ${spacings.spacer}px;\n`;\n\nconst ImageLink = styled(Link)`\n width: 100%;\n`;\n\nconst TitleLink = styled(Link)`\n text-decoration: none;\n`;\n\nconst Head = styled(Copy)`\n display: flex;\n\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n\n margin-top: ${spacings.spacer * 2}px;\n margin-bottom: ${spacings.spacer * 1.5}px;\n\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n`;\n\nconst Main = styled.div`\n max-width: 95%;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')}\n\n @media ${mq.medium} {\n width: 100%;\n\n & > * {\n max-width: 50%;\n min-width: 0 !important;\n flex: 1;\n }\n }\n`;\n\nexport interface NewsCardProps {\n isInverted?: boolean;\n tag?: string;\n onTagClick?: (name: string) => void;\n publishDate?: Date;\n title?: string;\n text?: string;\n image?: Omit<ImageProps, 'coverSpace'>;\n link?: LinkProps;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n}\n\nconst NewsCard: React.FC<\n NewsCardProps & {\n className?: string;\n }\n> = ({\n tag,\n onTagClick,\n publishDate,\n title,\n text,\n image,\n link,\n isInverted,\n primaryAction,\n secondaryAction,\n className,\n}) => {\n const theme = useContext(ThemeContext);\n\n let publishedAt = '';\n if (publishDate) {\n const formatter = new StatusFormatter(\n publishDate.getTime(),\n '',\n global(theme).sections.newsDateFormat,\n global(theme).sections.newsTimeFormat,\n global(theme).sections.newsLocaleKey\n );\n publishedAt = formatter.getFormattedDate();\n }\n\n // settings max text length to 300 chars\n if (text && text.length > 300) {\n text = text.slice(0, 301) + '...';\n }\n\n return (\n <View className={className}>\n {image && (\n <ImageLink {...link}>\n <Image coverSpace {...image} />\n </ImageLink>\n )}\n <Head isInverted={isInverted} data-sheet=\"head\">\n {tag && (\n <Tag\n isInverted={isInverted}\n onClick={onTagClick ? () => onTagClick(tag) : undefined}\n >\n {tag}\n </Tag>\n )}\n {publishedAt && <div>{publishedAt}</div>}\n </Head>\n <Main>\n {title && (\n <TitleLink {...link}>\n <Copy\n isInverted={isInverted}\n size=\"big\"\n type=\"copy-b\"\n data-sheet=\"title\"\n >\n {title}\n </Copy>\n </TitleLink>\n )}\n {text && (\n <Copy\n isInverted={isInverted}\n type=\"copy\"\n innerHTML={text}\n data-sheet=\"text\"\n />\n )}\n </Main>\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={secondaryAction && secondaryAction(isInverted)}\n />\n )}\n </View>\n );\n};\n\nexport default NewsCard;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport Copy from 'components/typography/Copy';\nimport NewsCard, { NewsCardProps } from 'components/blocks/NewsCard';\nimport { useContext, useEffect, useState } from 'react';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport Pointer from 'components/buttons/Pointer';\n\nconst ContentFlex = styled.div`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: 'flex-start';\n align-items: flex-start;\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n padding-left: 20px;\n padding-top: 40px;\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n`;\n\nconst Actions = styled.div`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n text-align: left;\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 2 ? 'block' : 'none'};\n`;\n\ntype NewsFooterMq = 'small' | 'semilarge';\n\nconst NewsFooter: React.FC<{\n news: NewsCardProps[];\n onTagClick?: (tag: string) => void;\n\n isInverted?: boolean;\n hasBack?: boolean;\n showMoreText?: string;\n}> = ({\n news,\n onTagClick,\n isInverted = false,\n hasBack = false,\n showMoreText,\n}) => {\n const newsCount = news?.length || 0;\n const theme = useContext(ThemeContext);\n\n const mqs: NewsFooterMq[] = ['small', 'semilarge'];\n const currentMq = useMediaQuery(mqs) as NewsFooterMq | undefined;\n const [itemsPerRow, setItemsPerRow] = useState(2);\n const [visibleRows, setVisibleRows] = useState(1);\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\n listLength: Math.min(visibleRows * itemsPerRow, newsCount),\n identifiers: [\n '[data-sheet=\"head\"]',\n '[data-sheet=\"title\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: 2,\n xlarge: 2,\n },\n });\n\n useEffect(() => {\n switch (currentMq) {\n case 'semilarge':\n setItemsPerRow(2);\n break;\n\n case 'small':\n setItemsPerRow(1);\n if (visibleRows < 3) setVisibleRows(3);\n break;\n\n default:\n setItemsPerRow(1);\n }\n }, [currentMq, visibleRows]);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper addWhitespace clampWidth=\"small\">\n <ContentFlex>\n {news &&\n news\n .filter((_, i) => i < visibleRows * itemsPerRow)\n .map((item, i) => {\n return (\n <div key={i} ref={cardRefs[i]}>\n <NewsCard\n isInverted={isInverted}\n onTagClick={onTagClick}\n {...item}\n />\n </div>\n );\n })}\n </ContentFlex>\n {news && news.length > 0 && (\n <Actions>\n <Copy isInverted={isInverted}>\n <ShowMore\n itemCount={news.length}\n onClick={(ev) => {\n ev.preventDefault();\n if (\n visibleRows <\n Math.ceil(newsCount / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows < newsCount / itemsPerRow && (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMoreText || 'mehr anzeigen'}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n </Copy>\n </Actions>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsFooter;\n","import React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\n\nconst Content = styled.div`\n & > * + * {\n margin-top: ${spacings.spacer * 2}px;\n }\n`;\n\nconst ImageFlex = styled.div`\n margin: -${spacings.spacer}px;\n\n @media ${mq.medium} {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n\n & > * {\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n`;\n\nconst Img = styled.div<{ isSingleHalf?: boolean }>`\n padding: ${spacings.spacer}px;\n width: 100%;\n\n @media ${mq.semilarge} {\n width: ${({ isSingleHalf }) => isSingleHalf && '50%'};\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n`;\n\nconst NewsImages: React.FC<{\n images?: Omit<ImageProps, 'coverSpace'>[];\n imageStyle?: 'full' | 'half';\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n hasBack?: boolean;\n}> = ({\n images,\n imageStyle = 'full',\n primaryAction,\n secondaryAction,\n isInverted = false,\n hasBack = false,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper clampWidth=\"small\" addWhitespace>\n <Content>\n {images && (imageStyle === 'half' || images.length >= 2) ? (\n <ImageFlex>\n {images.map((img, i) => {\n return (\n <Img\n key={i}\n isSingleHalf={images.length >= 1}\n >\n <Image coverSpace {...img} />\n </Img>\n );\n })}\n </ImageFlex>\n ) : (\n images && (\n <div>\n {images.map((img, i) => {\n return (\n <Image coverSpace {...img} key={i} />\n );\n })}\n </div>\n )\n )}\n </Content>\n\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsImages;\n","import React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Title from 'components/blocks/Title';\nimport Copy from 'components/typography/Copy';\nimport Tag from 'components/blocks/Tag';\nimport {\n getColors as color,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport StatusFormatter from 'utils/statusFormatter';\n\nconst Content = styled.div`\n & > * + * {\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n }\n`;\n\nconst IntroHead = styled(Copy)`\n display: flex;\n\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n`;\n\nconst HeadTag = styled(Tag)`\n flex: 0 1 auto;\n margin-right: ${spacings.nudge * 2}px;\n`;\n\nconst MetaBlock = styled.div`\n flex: 1 1 auto;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-end;\n align-items: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n * + & {\n margin-left: ${spacings.spacer}px;\n }\n\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n`;\n\nconst StyledTitle = styled(Title)<{ clampTitle?: boolean }>`\n max-width: ${({ clampTitle }) =>\n clampTitle && (13 / 28) * spacings.wrapperSmall + 'px'};\n`;\n\nconst ContentBlock = styled(Copy)<{\n clampText?: boolean;\n isCentered?: boolean;\n}>`\n display: block;\n margin: ${({ isCentered }) => isCentered && '0 auto'};\n max-width: ${({ clampText }) =>\n clampText && (19 / 28) * spacings.wrapper + 'px'};\n\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n`;\n\nconst NewsIntro: React.FC<{\n tags?: string[];\n onTagClick?: (name: string) => void;\n meta?: { date?: Date; author?: string };\n title?: string;\n text?: string;\n image?: ImageProps;\n\n isInverted?: boolean;\n hasBack?: boolean;\n}> = ({\n tags,\n onTagClick,\n meta,\n title,\n text,\n image,\n isInverted = false,\n hasBack = false,\n}) => {\n const theme = useContext(ThemeContext);\n\n let publishedAt = '';\n if (meta?.date) {\n const formatter = new StatusFormatter(\n meta.date.getTime(),\n '',\n global(theme).sections.newsDateFormat,\n global(theme).sections.newsTimeFormat,\n global(theme).sections.newsLocaleKey\n );\n publishedAt = formatter.getFormattedDate();\n }\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper clampWidth=\"small\" addWhitespace>\n <Content>\n <IntroHead isInverted={isInverted}>\n {tags &&\n tags.map((tag, index) => {\n return (\n <HeadTag\n key={`headtag-${index}`}\n isInverted={isInverted}\n onClick={\n onTagClick\n ? () => onTagClick(tag)\n : undefined\n }\n >\n {tag}\n </HeadTag>\n );\n })}\n {(publishedAt || meta?.author) && (\n <MetaBlock>\n {meta?.author && <div>{meta?.author}</div>}\n {publishedAt && <div>{publishedAt}</div>}\n </MetaBlock>\n )}\n </IntroHead>\n <div>\n <StyledTitle\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n />\n {text && (\n <ContentBlock\n isInverted={isInverted}\n type=\"copy-b\"\n innerHTML={text}\n />\n )}\n </div>\n {image?.small && (\n <div>\n <Image coverSpace {...image} />\n </div>\n )}\n </Content>\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsIntro;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\n\nimport NewsCard, { NewsCardProps } from 'components/blocks/NewsCard';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Intro from 'components/blocks/Intro';\nimport Copy from 'components/typography/Copy';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport { useContext, useEffect, useState } from 'react';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport Pointer from 'components/buttons/Pointer';\n\nconst StyledIntro = styled(Intro)`\n padding-bottom: ${spacings.spacer * 2}px;\n`;\n\nconst News = styled.div`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: 'flex-start';\n align-items: flex-start;\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n padding-left: 20px;\n padding-top: 40px;\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n\n @media ${mq.large} {\n & > * {\n flex: 1 0 33.33%;\n max-width: 33.33%;\n }\n }\n`;\n\nconst ListFooter = styled.div`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n text-align: center;\n\n @media ${mq.medium} {\n text-align: left;\n }\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 2 ? 'block' : 'none'};\n`;\n\ntype NewsListMq = 'small' | 'semilarge' | 'large';\n\nconst NewsList: React.FC<{\n title: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n news?: NewsCardProps[];\n onTagClick?: (tag: string) => void;\n isInverted?: boolean;\n hasBack?: boolean;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n showMoreText?: string;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n news,\n onTagClick,\n isInverted = false,\n hasBack = false,\n\n primaryAction,\n secondaryAction,\n showMoreText,\n}) => {\n const theme = useContext(ThemeContext);\n const mqs: NewsListMq[] = ['small', 'semilarge', 'large'];\n const currentMq = useMediaQuery(mqs) as NewsListMq | undefined;\n const [itemsPerRow, setItemsPerRow] = useState(3);\n const [visibleRows, setVisibleRows] = useState(1);\n\n const newsCount = news?.length || 0;\n\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\n listLength: Math.min(visibleRows * itemsPerRow, newsCount),\n identifiers: [\n '[data-sheet=\"head\"]',\n '[data-sheet=\"title\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: 3,\n xlarge: 3,\n },\n });\n\n useEffect(() => {\n switch (currentMq) {\n case 'large':\n setItemsPerRow(3);\n break;\n\n case 'semilarge':\n setItemsPerRow(2);\n break;\n\n case 'small':\n setItemsPerRow(1);\n if (visibleRows < 3) setVisibleRows(3);\n break;\n\n default:\n setItemsPerRow(1);\n }\n }, [currentMq, visibleRows]);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n {title && (\n <Wrapper addWhitespace>\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n </Wrapper>\n )}\n <Wrapper addWhitespace clampWidth=\"normal\">\n <News>\n {news &&\n news\n .filter((_, i) => i < visibleRows * itemsPerRow)\n .map((item, i) => {\n return (\n <div key={i} ref={cardRefs[i]}>\n <NewsCard\n onTagClick={onTagClick}\n isInverted={isInverted}\n {...item}\n />\n </div>\n );\n })}\n </News>\n <ListFooter>\n {news && news.length > 0 && (\n <Copy type=\"copy\" size=\"medium\" isInverted={isInverted}>\n <ShowMore\n itemCount={news.length}\n onClick={(ev) => {\n ev.preventDefault();\n if (\n visibleRows <\n Math.ceil(newsCount / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows < newsCount / itemsPerRow && (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMoreText || 'mehr anzeigen'}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n </Copy>\n )}\n </ListFooter>\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsList;\n","import Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\nimport Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { hexToRgba } from 'utils/hexRgbConverter';\nimport { getColors as color, mq, spacings, withRange } from 'utils/styles';\n\nconst TableContainer = styled.div`\n overflow-x: scroll;\n overflow-y: hidden;\n white-space: nowrap;\n`;\n\nconst TableBody = styled.table`\n width: 100%;\n max-width: 100%;\n margin-top: ${spacings.nudge * 2}px;\n\n border-collapse: separate;\n border-spacing: 0 ${spacings.nudge}px;\n\n @media ${mq.medium} {\n padding: 0;\n }\n`;\n\nconst TableHead = styled.th<{ hasBack?: boolean; isInverted?: boolean }>`\n text-align: left;\n color: ${({ theme }) => color(theme).dark};\n background-color: ${({ theme, hasBack, isInverted }) =>\n hasBack && !isInverted ? color(theme).light : color(theme).mono.light};\n\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 2}px\n ${spacings.nudge * 3.5}px ${spacings.spacer * 2}px;\n min-width: 60px;\n box-sizing: content-box;\n\n :last-child {\n padding-right: ${spacings.spacer * 2.5}px;\n }\n`;\n\nconst TableData = styled.td<{ isInverted?: boolean; hasBack?: boolean }>`\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 2}px\n ${spacings.nudge * 3.5}px ${spacings.spacer * 2}px;\n min-width: 60px;\n box-sizing: content-box;\n\n background-color: ${({ isInverted, hasBack, theme }) =>\n hexToRgba(\n hasBack && !isInverted\n ? color(theme).light\n : color(theme).mono.light,\n isInverted ? 0.2 : 0.4\n )};\n\n :last-child {\n padding-right: ${spacings.spacer * 2.5}px;\n }\n`;\n\nexport interface TableProps {\n tableTitle?: string;\n rowTitle?: string[];\n row: {\n cols: string[];\n }[];\n isInverted?: boolean;\n hasBack?: boolean;\n}\n\nconst TableBlock: React.FC<TableProps> = ({\n row,\n tableTitle,\n rowTitle,\n isInverted = false,\n hasBack = false,\n}) => {\n return (\n <div>\n {tableTitle && (\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {tableTitle}\n </Copy>\n )}\n <TableContainer>\n <TableBody>\n {rowTitle && (\n <thead>\n <tr>\n {rowTitle.map((item, ii) => {\n return (\n <TableHead\n hasBack={hasBack}\n isInverted={isInverted}\n key={ii}\n >\n <Copy type=\"copy-b\">{item}</Copy>\n </TableHead>\n );\n })}\n </tr>\n </thead>\n )}\n <tbody>\n {row.map(({ cols }, i) => (\n <tr key={i}>\n {cols.map((itemText, ii) => {\n return (\n <TableData\n key={ii}\n isInverted={isInverted}\n hasBack={hasBack}\n >\n <Copy isInverted={isInverted}>\n {itemText}\n </Copy>\n </TableData>\n );\n })}\n </tr>\n ))}\n </tbody>\n </TableBody>\n </TableContainer>\n </div>\n );\n};\n\nconst TableWrapper = styled.div<{ withSeperation?: boolean }>`\n ${({ withSeperation }) =>\n withSeperation &&\n withRange([spacings.spacer, spacings.spacer * 4], 'padding-top')};\n\n & + & {\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n`;\n\nconst NewsTable: React.FC<{\n tableItems: TableProps[];\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n hasBack?: boolean;\n}> = ({ isInverted, hasBack, tableItems, primaryAction, secondaryAction }) => {\n const theme = React.useContext(ThemeContext);\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper addWhitespace clampWidth=\"small\">\n {tableItems.map((item, i) => {\n return (\n <TableWrapper key={i}>\n <TableBlock\n {...item}\n hasBack={hasBack}\n isInverted={isInverted}\n />\n </TableWrapper>\n );\n })}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsTable;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Actions from 'components/blocks/Actions';\nimport Copy from 'components/typography/Copy';\nimport Wrapper from 'components/base/Wrapper';\nimport { getColors as color, spacings, withRange } from 'utils/styles';\nimport { useContext } from 'react';\n\nconst ContentBlock = styled(Copy)<{\n clampText?: boolean;\n isCentered?: boolean;\n}>`\n display: block;\n margin: ${({ isCentered }) => isCentered && '0 auto'};\n max-width: ${({ clampText }) =>\n clampText && (19 / 28) * spacings.wrapperSmall + 'px'};\n\n :not(:first-child) {\n padding-top: ${spacings.nudge * 5}px;\n }\n`;\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n`;\n\nconst NewsText: React.FC<{\n text: string;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n hasBack?: boolean;\n}> = ({\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n hasBack = false,\n}) => {\n const theme = useContext(ThemeContext);\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper clampWidth=\"small\" addWhitespace>\n {text && (\n <ContentBlock\n isInverted={isInverted}\n type=\"copy\"\n innerHTML={text}\n />\n )}\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsText;\n","import React, { useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { ImageProps } from 'components/blocks/Image';\nimport Section from 'components/base/Section';\nimport { getColors as color, spacings, withRange } from 'utils/styles';\nimport Wrapper from 'components/base/Wrapper';\nimport VideoCard from 'components/blocks/VideoCard';\nimport Actions from 'components/blocks/Actions';\n\nconst StyledActions = styled(Actions)`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n`;\n\nconst NewsVideo: React.FC<{\n bgImage?: ImageProps;\n embedId?: string;\n playIcon?: React.ReactChild;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n isInverted?: boolean;\n hasBack?: boolean;\n}> = ({\n bgImage,\n embedId,\n playIcon,\n primaryAction,\n secondaryAction,\n isInverted = false,\n hasBack = false,\n}) => {\n const theme = useContext(ThemeContext);\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper addWhitespace clampWidth=\"small\">\n <div>\n {embedId && bgImage && (\n <VideoCard\n bgImage={bgImage}\n embedId={embedId}\n playIcon={playIcon}\n />\n )}\n </div>\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsVideo;\n","import React, { useContext, useEffect, useRef, useState } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\n\nimport NewsCard, { NewsCardProps } from 'components/blocks/NewsCard';\nimport { getColors, mq, spacings, withRange } from 'utils/styles';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Intro from 'components/blocks/Intro';\nimport Tag from 'components/blocks/Tag';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport { useObserverSupport } from 'utils/useObserverSupport';\nimport Copy from 'components/typography/Copy';\nimport { useScrollTo } from 'utils/useScrollTo';\nimport Pointer from 'components/buttons/Pointer';\n\nconst StyledIntro = styled(Intro)`\n ${withRange([spacings.spacer * 1.5, spacings.spacer * 3], 'margin-bottom')};\n`;\n\nconst TagContainer = styled.div`\n margin: -${spacings.nudge}px;\n ${withRange([spacings.spacer * 1.5, spacings.spacer * 3], 'margin-bottom')};\n\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n`;\n\nconst TagWrapper = styled.div`\n padding: ${spacings.nudge}px;\n`;\n\nconst List = styled.div`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: 'flex-start';\n align-items: flex-start;\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n padding-left: 20px;\n padding-top: 40px;\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n\n @media ${mq.large} {\n & > * {\n flex: 1 0 33.33%;\n max-width: 33.33%;\n }\n }\n`;\n\nconst ListFooter = styled.div`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n text-align: center;\n\n @media ${mq.medium} {\n text-align: left;\n }\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 2 ? 'block' : 'none'};\n`;\n\ntype NewsOverviewMq = 'small' | 'semilarge' | 'large';\n\nconst NewsOverview: React.FC<{\n title: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n news: NewsCardProps[];\n activeTag?: string;\n tags?: string[];\n queryParams?: Record<string, any>;\n onTagClick?: (tag: string, insideList?: boolean) => void;\n showMoreText?: string;\n\n isInverted?: boolean;\n hasBack?: boolean;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n\n news,\n activeTag,\n tags,\n queryParams,\n onTagClick,\n showMoreText,\n\n isInverted,\n hasBack,\n}) => {\n const theme = useContext(ThemeContext);\n\n activeTag = queryParams?.selected\n ? decodeURI(queryParams.selected)\n : activeTag;\n const [selectedTag, setSelectedTag] = useState<string | undefined>(\n activeTag || undefined\n );\n\n const mqs: NewsOverviewMq[] = ['small', 'semilarge', 'large'];\n const currentMq = useMediaQuery(mqs) as NewsOverviewMq | undefined;\n const [itemsPerRow, setItemsPerRow] = useState(3);\n const [visibleRows, setVisibleRows] = useState(3);\n\n const targetRef = useRef<HTMLDivElement>(null);\n const observerSupported = useObserverSupport();\n\n const newsCount = news?.length || 0;\n\n const setNewPos = useScrollTo(800);\n const { sheetRefs: cardRefs, triggerCalculation } = useEqualSheetHeight({\n listLength: Math.min(visibleRows * itemsPerRow, newsCount),\n identifiers: [\n '[data-sheet=\"head\"]',\n '[data-sheet=\"title\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: 3,\n xlarge: 3,\n },\n });\n\n useEffect(() => {\n switch (currentMq) {\n case 'large':\n setItemsPerRow(3);\n break;\n\n case 'semilarge':\n setItemsPerRow(2);\n break;\n\n case 'small':\n setItemsPerRow(1);\n if (visibleRows < 3) setVisibleRows(3);\n break;\n\n default:\n setItemsPerRow(1);\n }\n }, [currentMq, visibleRows]);\n\n useEffect(() => {\n setSelectedTag(activeTag);\n }, [activeTag]);\n\n useEffect(() => {\n // if new tag is selected reset list rows to three visible item rows\n setVisibleRows(3);\n triggerCalculation();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedTag]);\n\n useEffect(() => {\n // cancel if intersection observers are not supported\n if (!observerSupported) return;\n\n const element = targetRef.current;\n let observer: IntersectionObserver;\n\n if (element) {\n const options = {\n rootMargin: '0px 0px 100px 0px',\n threshold: 0,\n };\n\n observer = new IntersectionObserver((entries) => {\n const entry = entries[0];\n if (entry?.isIntersecting) {\n // on bottom of the wrapper load more news\n if (visibleRows < Math.ceil(newsCount / itemsPerRow)) {\n setVisibleRows((prev) => prev + 1);\n }\n }\n }, options);\n observer.observe(element);\n }\n\n return () => {\n if (observer) observer.disconnect();\n };\n }, [itemsPerRow, newsCount, visibleRows, observerSupported]);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? getColors(theme).dark\n : hasBack\n ? getColors(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper addWhitespace>\n {title && (\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n )}\n {tags && (\n <TagContainer>\n {tags.sort().map((tag, i) => {\n return (\n <TagWrapper key={'tag_' + i}>\n <Tag\n isInverted={isInverted}\n onClick={() => {\n if (!onTagClick) {\n // if no callback is defined handle filtering on client side inside the component\n setSelectedTag(\n selectedTag === tag\n ? undefined\n : tag\n );\n } else onTagClick(tag, false);\n }}\n isActive={selectedTag === tag}\n >\n {tag}\n </Tag>\n </TagWrapper>\n );\n })}\n </TagContainer>\n )}\n <List>\n {news &&\n news\n .filter((item) =>\n selectedTag ? item.tag === selectedTag : true\n )\n .filter((_, i) => i < visibleRows * itemsPerRow)\n .map((item, i) => {\n return (\n <div key={i} ref={cardRefs[i]}>\n <NewsCard\n isInverted={isInverted}\n onTagClick={(name) => {\n // scroll back to top\n setNewPos(0);\n if (!onTagClick) {\n // if no callback is defined handle filtering on client side inside the component\n setSelectedTag(\n selectedTag === name\n ? undefined\n : name\n );\n } else {\n onTagClick(name, true);\n }\n }}\n {...item}\n />\n </div>\n );\n })}\n </List>\n <div ref={targetRef} />\n {!observerSupported && (\n <ListFooter>\n {news && news.length > 0 && (\n <Copy\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n >\n <ShowMore\n itemCount={news.length}\n onClick={(ev) => {\n ev.preventDefault();\n if (\n visibleRows <\n Math.ceil(newsCount / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows < newsCount / itemsPerRow && (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMoreText ||\n 'mehr anzeigen'}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n </Copy>\n )}\n </ListFooter>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsOverview;\n","import { useEffect, useState } from 'react';\n\nexport const useObserverSupport = (inital?: boolean) => {\n const [observerSupported, setObserverSupport] = useState(inital || false);\n\n useEffect(() => {\n if (\n !('IntersectionObserver' in window) ||\n !('IntersectionObserverEntry' in window) ||\n !('intersectionRatio' in window.IntersectionObserverEntry.prototype)\n ) {\n setObserverSupport(false);\n } else {\n setObserverSupport(true);\n }\n }, []);\n\n return observerSupported;\n};\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.a<{ inverted?: boolean; disable?: boolean }>`\n min-height: 3em;\n height: 3.65em;\n min-width: 210px;\n padding: 0.1em 1.2em;\n\n display: inline-block;\n display: inline-flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: ${({ theme }) => font(theme).copy.medium.weight};\n text-align: center;\n text-decoration: none;\n line-height: 1;\n letter-spacing: ${({ theme }) => font(theme).copy.medium.letterSpacing};\n\n perspective: 1000;\n -webkit-font-smoothing: subpixel-antialiased;\n -webkit-perspective: 1000;\n -moz-osx-font-smoothing: grayscale;\n will-change: auto;\n\n outline: none;\n border: none;\n user-select: none;\n cursor: pointer;\n\n pointer-events: ${({ disable }) => (disable ? 'none' : 'all')};\n\n // will-change: transform;\n\n background-color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).light\n : inverted\n ? color(theme).dark\n : color(theme).light};\n text-align: left;\n\n transition: all ease-in-out 0.2s;\n\n & > * {\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).light\n : inverted\n ? color(theme).dark\n : color(theme).light};\n }\n\n & > :not(:last-child) {\n padding-right: ${spacings.nudge}px;\n }\n\n &:hover {\n transform: scale(1.02);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\ninterface Props {\n isInverted?: boolean;\n isDisabled?: boolean;\n onClick?: () => void;\n className?: string;\n}\n\nexport type BtnProps = Props & {\n as?: 'button';\n};\n\nexport type LinkProps = Props & {\n as?: 'a';\n href?: string;\n isExternal?: boolean;\n};\n\nconst Button: React.FC<BtnProps | LinkProps> = React.forwardRef(\n (\n { as, isInverted, isDisabled, onClick, className, children, ...rest },\n ref\n ) => {\n if (as === 'button') {\n return (\n <View\n ref={ref}\n as={as as any}\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n } else {\n return (\n <View\n ref={ref}\n as={as as any}\n href={(rest as LinkProps).href}\n target={\n (rest as LinkProps).isExternal ? '_blank' : undefined\n }\n rel={\n (rest as LinkProps).isExternal\n ? 'noopener noreferrer'\n : undefined\n }\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n }\n }\n);\n\nButton.displayName = 'Button';\n\nconst Icon = styled.div<{ iconColor?: string }>`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n width: 35px;\n height: 35px;\n\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).primary.medium};\n\n transition: transform 0.2s ease-in-out;\n\n ${View}:hover > & {\n transform: translateX(3px);\n }\n`;\n\nconst Label = styled.span`\n display: inline-block;\n`;\n\nexport default { View: Button, Label: Label, Icon: Icon };\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.a<{ inverted?: boolean; disable?: boolean }>`\n min-height: 3em;\n height: 3.65em;\n min-width: 210px;\n padding: 0.1em 1.2em;\n\n display: inline-block;\n display: inline-flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: ${({ theme }) => font(theme).copy.medium.weight};\n text-align: center;\n text-decoration: none;\n line-height: 1;\n letter-spacing: ${({ theme }) => font(theme).copy.medium.letterSpacing};\n\n perspective: 1000;\n -webkit-font-smoothing: subpixel-antialiased;\n -webkit-perspective: 1000;\n -moz-osx-font-smoothing: grayscale;\n will-change: auto;\n\n outline: none;\n box-shadow: none;\n border: solid 1px\n ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n user-select: none;\n cursor: pointer;\n\n pointer-events: ${({ disable }) => (disable ? 'none' : 'all')};\n\n // will-change: transform;\n\n background-color: transparent;\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n text-align: center;\n\n transition: all ease-in-out 0.2s;\n\n & > * {\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n }\n\n & > :not(:last-child) {\n padding-right: ${spacings.nudge}px;\n }\n\n &:hover {\n transform: scale(1.04);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\ninterface Props {\n isInverted?: boolean;\n isDisabled?: boolean;\n onClick?: () => void;\n className?: string;\n}\n\nexport type BtnProps = Props & {\n as?: 'button';\n};\n\nexport type LinkProps = Props & {\n as?: 'a';\n href?: string;\n isExternal?: boolean;\n};\n\nconst ButtonGhost: React.FC<BtnProps | LinkProps> = React.forwardRef(\n (\n { as, isInverted, isDisabled, onClick, className, children, ...rest },\n ref\n ) => {\n if (as === 'button') {\n return (\n <View\n ref={ref}\n as={as as any}\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n } else {\n return (\n <View\n ref={ref}\n as={as as any}\n href={(rest as LinkProps).href}\n target={\n (rest as LinkProps).isExternal ? '_blank' : undefined\n }\n rel={\n (rest as LinkProps).isExternal\n ? 'noopener noreferrer'\n : undefined\n }\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n }\n }\n);\n\nButtonGhost.displayName = 'Button Ghost';\n\nconst Icon = styled.div<{ iconColor?: string }>`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n width: 35px;\n height: 35px;\n\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).primary.medium};\n\n transition: transform 0.2s ease-in-out;\n\n ${View}:hover > & {\n transform: translateX(3px);\n }\n`;\n\nconst Label = styled.span`\n display: inline-block;\n`;\n\nexport default { View: ButtonGhost, Label: Label, Icon: Icon };\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.form`\n width: 100%;\n display: flex;\n flex-direction: column;\n\n color: ${({ theme }) => color(theme).mono.dark};\n\n @media ${mq.medium} {\n flex-direction: row;\n }\n`;\n\nconst InputField = styled.input<{ backColor?: string }>`\n display: block;\n width: 100%;\n height: 100%;\n max-height: 49px;\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 3.5}px;\n color: inherit;\n\n background-color: ${({ backColor }) => backColor && backColor};\n box-shadow: none;\n border: none;\n border-right: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n font-family: ${({ theme }) => font(theme).copy.small.family};\n font-weight: ${({ theme }) => font(theme).copy.small.weight};\n ${({ theme }) => withRange(font(theme).copy.small.size, 'font-size')}\n line-height: ${({ theme }) => font(theme).copy.small.lineHeight};\n\n &::placeholder {\n color: inherit;\n }\n`;\n\nconst SubmitBtn = styled.button<{ isInverted?: boolean }>`\n display: inline-flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 49px;\n\n margin-top: ${spacings.spacer * 0.5}px;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).dark : color(theme).light};\n\n outline: none;\n border: none;\n user-select: none;\n cursor: pointer;\n transition: all ease-in-out 0.2s;\n\n @media ${mq.medium} {\n width: 100px;\n margin-top: 0;\n }\n\n &:hover {\n transform: scale(1.05);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst CompactForm: FC<{\n isInverted?: boolean;\n value?: string;\n placeholder?: string;\n method?: string;\n action?: string;\n buttonIcon?: React.ReactNode;\n onSubmit?: (ev: React.SyntheticEvent<HTMLFormElement>) => void;\n onClick?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onFocus?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onBlur?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n backgroundStyle?: 'white' | 'grey';\n className?: string;\n}> = ({\n isInverted = false,\n value,\n placeholder,\n method,\n action,\n buttonIcon,\n onSubmit,\n onClick,\n onBlur,\n onFocus,\n backgroundStyle = 'grey',\n className,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <View\n onSubmit={onSubmit}\n method={method}\n action={action}\n className={className}\n >\n <InputField\n placeholder={placeholder}\n value={value}\n onClick={onClick}\n onBlur={onBlur}\n onFocus={onFocus}\n backColor={\n backgroundStyle === 'grey' || isInverted\n ? color(theme).mono.light\n : color(theme).light\n }\n />\n {buttonIcon && (\n <SubmitBtn isInverted={isInverted}>{buttonIcon}</SubmitBtn>\n )}\n </View>\n );\n};\n\nexport default CompactForm;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.div<{ isInverted?: boolean }>`\n position: relative;\n width: 100%;\n display: flex;\n flex-direction: row;\n\n color: ${({ theme }) => color(theme).dark};\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).mono.light};\n`;\n\nconst InputField = styled.input<{\n hasLeftIcon?: boolean;\n hasRightIcon?: boolean;\n}>`\n display: block;\n width: 100%;\n height: 100%;\n padding: ${spacings.nudge * 3}px ${spacings.nudge * 3.5}px;\n padding-left: ${({ hasLeftIcon }) =>\n hasLeftIcon && spacings.spacer * 2.5 + 'px'};\n padding-right: ${({ hasRightIcon }) =>\n hasRightIcon && spacings.spacer * 2.5 + 'px'};\n color: inherit;\n\n background-color: transparent;\n box-shadow: none;\n border: none;\n border-right: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n font-family: ${({ theme }) => font(theme).copy.small.family};\n font-weight: 400;\n ${({ theme }) => withRange(font(theme).copy.small.size, 'font-size')}\n line-height: 1.25;\n\n &::placeholder {\n color: inherit;\n }\n`;\n\nconst ControlBtn = styled.button<{ isInverted?: boolean }>`\n display: inline-flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 53px;\n\n margin: -2px;\n background-color: transparent;\n color: ${({ theme }) => color(theme).dark};\n\n outline: none;\n border: none;\n user-select: none;\n cursor: pointer;\n /* transition: all ease-in-out 0.2s; */\n\n &:hover {\n transform: scale(1.02);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst SubmitBtn = styled(ControlBtn)`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n`;\n\nconst ClearBtn = styled(ControlBtn)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n`;\n\nconst SearchInput: FC<{\n isInverted?: boolean;\n value?: string;\n placeholder?: string;\n submitIcon?: React.ReactNode;\n clearIcon?: React.ReactNode;\n onSubmit?: () => void;\n onClear?: () => void;\n onClick?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onBlur?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onFocus?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n className?: string;\n}> = ({\n isInverted = false,\n value,\n placeholder,\n submitIcon,\n clearIcon,\n onSubmit,\n onClick,\n onClear,\n onBlur,\n onFocus,\n className,\n}) => {\n const handleKeyDown = (ev: React.KeyboardEvent<HTMLInputElement>) => {\n if (ev.keyCode === 13) {\n onSubmit && onSubmit();\n ev.preventDefault();\n }\n };\n\n return (\n <View isInverted={isInverted} className={className}>\n {submitIcon && (\n <SubmitBtn\n isInverted={isInverted}\n onClick={() => onSubmit && onSubmit()}\n >\n {submitIcon}\n </SubmitBtn>\n )}\n <InputField\n hasLeftIcon={submitIcon !== undefined}\n hasRightIcon={clearIcon !== undefined}\n placeholder={placeholder}\n value={value}\n onClick={onClick}\n onBlur={onBlur}\n onFocus={onFocus}\n onKeyDown={handleKeyDown}\n />\n {clearIcon && (\n <ClearBtn\n isInverted={isInverted}\n onClick={() => onClear && onClear()}\n >\n {clearIcon}\n </ClearBtn>\n )}\n </View>\n );\n};\n\nexport default SearchInput;\n","import { CookieConsentData } from 'components/blocks/CookieConsent';\nimport { Cookie } from './cookie';\nimport StatusFormatter from '../statusFormatter';\n\nexport const isUrlInWhitelist = (\n urlString: string,\n whitelist: string[] = []\n) => {\n let isInWhiteList = false;\n for (let i = 0; i < whitelist.length; i++) {\n if (urlString.indexOf(whitelist[i]) > -1) {\n isInWhiteList = true;\n break;\n }\n }\n return isInWhiteList;\n};\n\nexport const bindConsentButtons = (callback: () => void) => {\n const allConsentButtons = document.querySelectorAll(\n '[data-consent-button], .cookie-consent-button'\n );\n\n for (let i = 0, len = allConsentButtons.length; i < len; i++) {\n allConsentButtons[i].addEventListener('click', callback);\n }\n};\n\nexport const activateTrackingScripts = () => {\n const scriptElements = document.querySelectorAll(\n \"script[type='text/consent_banner_script'], script[type='text/cookie-consent-script']\"\n );\n\n let i = scriptElements.length;\n const newScriptElements: HTMLScriptElement[] = [];\n while (i--) {\n // create new script element to call it\n const newScriptElement = document.createElement('script');\n newScriptElement.type = 'text/javascript';\n\n if (scriptElements[i].hasAttribute('src')) {\n newScriptElement.src = scriptElements[i].getAttribute('src')!;\n newScriptElement.async = true;\n } else {\n newScriptElement.innerHTML = scriptElements[i].innerHTML;\n }\n\n // add new script tags to list\n newScriptElements.push(newScriptElement);\n\n // delete old helper element\n if (scriptElements[i].parentNode) {\n // eslint-disable-next-line no-unused-expressions\n scriptElements[i].parentNode?.removeChild(scriptElements[i]);\n }\n }\n\n // append new script tags\n i = newScriptElements.length;\n while (i--) {\n // append / activate script\n document.body.appendChild(newScriptElements[i]);\n }\n};\n\nexport const updateConsentStatusElements = ({\n cookie,\n status,\n dateFormat,\n timeFormat,\n localeKey = 'en',\n}: {\n cookie: Cookie<CookieConsentData>;\n status: string;\n dateFormat: string;\n timeFormat: string;\n localeKey: 'de' | 'en';\n}) => {\n const allConsentStatusElements = document.querySelectorAll(\n '[data-consent-status], .cookie-consent-status'\n );\n\n // render status inside defined dom elements without react\n const formatter = new StatusFormatter(\n cookie?.data.updatedAt,\n status,\n dateFormat,\n timeFormat,\n localeKey\n );\n\n for (let i = 0, len = allConsentStatusElements.length; i < len; i++) {\n allConsentStatusElements[i].innerHTML = formatter.getFormattedStatus();\n }\n};\n","import Actions from 'components/blocks/Actions';\nimport Copy from 'components/typography/Copy';\nimport React, { FC, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { Cookie, getCookie, setCookie } from 'utils/cookie-consent/cookie';\nimport {\n activateTrackingScripts,\n bindConsentButtons,\n isUrlInWhitelist,\n updateConsentStatusElements,\n} from 'utils/cookie-consent/mutations';\nimport { getColors as color, mq, spacings } from 'utils/styles';\n\nconst Stage = styled.div<{ zIndex?: number; bgOpacity?: number }>`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: rgba(0, 0, 0, ${({ bgOpacity }) => bgOpacity || 0.4});\n z-index: ${({ zIndex }) => zIndex || 1000};\n`;\n\nconst View = styled.div`\n box-sizing: border-box;\n max-width: 850px;\n width: 100vw;\n max-height: 100vh;\n padding: ${spacings.spacer}px ${spacings.spacer * 1.5}px;\n position: fixed;\n bottom: 0;\n left: 50%;\n transform: translate(-50%, 0);\n text-align: center;\n\n background-color: ${({ theme }) => color(theme).light};\n box-shadow: 0 2px 44px rgba(0, 0, 0, 0.3);\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n bottom: ${spacings.spacer * 1.5}px;\n }\n\n @media ${mq.medium} {\n padding: ${spacings.spacer * 2}px;\n }\n`;\n\nexport interface CookieConfig {\n cookieName?: string;\n\n /** URL's that should be excluded from consent */\n urlWhitelist?: string[];\n consentAcceptStatusMsg?: string;\n consentDeclineStatusMsg?: string;\n noCookieStatusMsg?: string;\n dateFormat?: string;\n timeFormat?: string;\n lifetime?: number;\n localeKey?: 'de' | 'en';\n zIndex?: number;\n overlayOpacity?: number;\n}\n\ntype RenderProps = {\n handleAccept: () => void;\n handleDecline: () => void;\n additionalDeclineProps: {\n ['data-gtm']: string;\n };\n additionalAcceptProps: {\n ['data-gtm']: string;\n };\n};\n\nexport interface CookieConsentData {\n consent: boolean;\n updatedAt: number;\n}\n\nexport const CookieConsent: FC<\n CookieConfig & {\n className?: string;\n children?: (props: RenderProps) => React.ReactElement;\n }\n> = ({\n cookieName = 'cookie-consent',\n urlWhitelist,\n consentAcceptStatusMsg = 'Akzeptiert am %DATE% um %TIME% Uhr',\n consentDeclineStatusMsg = 'Abgelehnt am %DATE% um %TIME% Uhr',\n noCookieStatusMsg = '-',\n dateFormat = 'dd.mm.yy',\n timeFormat = 'hh:mm',\n lifetime = 365,\n localeKey = 'de',\n zIndex,\n overlayOpacity = 0.4,\n className,\n children,\n}) => {\n const [isVisible, setIsVisible] = useState(false);\n\n useEffect(() => {\n bindConsentButtons(() => setIsVisible(true));\n\n const cookie = getCookie(cookieName) as Cookie<CookieConsentData>;\n const containsWhitelist = isUrlInWhitelist(\n window.location.pathname,\n urlWhitelist\n );\n if (!containsWhitelist) setIsVisible(!cookie);\n if (cookie && cookie.data.consent) {\n activateTrackingScripts();\n }\n }, [cookieName, urlWhitelist]);\n\n useEffect(() => {\n const cookie = getCookie(cookieName) as Cookie<CookieConsentData>;\n\n const str = !cookie\n ? noCookieStatusMsg\n : cookie.data.consent\n ? consentAcceptStatusMsg\n : consentDeclineStatusMsg;\n\n updateConsentStatusElements({\n cookie,\n status: str,\n dateFormat,\n timeFormat,\n localeKey,\n });\n }, [\n consentAcceptStatusMsg,\n consentDeclineStatusMsg,\n cookieName,\n dateFormat,\n isVisible,\n localeKey,\n noCookieStatusMsg,\n timeFormat,\n ]);\n\n if (!isVisible) return null;\n return (\n <Stage zIndex={zIndex} bgOpacity={overlayOpacity}>\n <View className={className}>\n {children &&\n children({\n handleDecline: () => {\n console.log('decline');\n setCookie<CookieConsentData>({\n name: cookieName,\n data: {\n consent: false,\n updatedAt: new Date().getTime(),\n },\n days: lifetime,\n });\n setIsVisible(false);\n },\n handleAccept: () => {\n console.log('accept');\n setCookie<CookieConsentData>({\n name: cookieName,\n data: {\n consent: true,\n updatedAt: new Date().getTime(),\n },\n days: lifetime,\n });\n setIsVisible(false);\n activateTrackingScripts();\n },\n additionalAcceptProps: {\n ['data-gtm']: 'button-cookie-consent-accept',\n },\n additionalDeclineProps: {\n ['data-gtm']: 'button-cookie-consent-decline',\n },\n })}\n </View>\n </Stage>\n );\n};\n\n/** Example Cookie icon */\nexport const CookieIcon = styled.img`\n display: block;\n margin: 0 auto;\n`;\n\n/** Example Cookie title */\nconst TitleView = styled(Copy)`\n max-width: 670px;\n margin-left: auto;\n margin-right: auto;\n`;\n\nexport const CookieTitle: FC<{\n innerHTML?: string;\n className?: string;\n}> = ({ innerHTML, className, children }) => {\n return (\n <TitleView\n size=\"big\"\n type=\"copy-b\"\n innerHTML={innerHTML}\n className={className}\n >\n {children}\n </TitleView>\n );\n};\n\n/** Example Cookie title */\nconst TextView = styled(Copy)`\n max-width: 670px;\n margin-left: auto;\n margin-right: auto;\n`;\n\nexport const CookieText: FC<{\n innerHTML?: string;\n className?: string;\n}> = ({ innerHTML, className, children }) => {\n return (\n <TextView innerHTML={innerHTML} className={className}>\n {children}\n </TextView>\n );\n};\n\n/** Example Cookie actions */\nexport const CookieActions = styled(Actions)`\n max-width: 670px;\n margin-top: ${spacings.spacer * 1.5}px;\n`;\n\nexport default CookieConsent;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Cross: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"35\"\n height=\"35\"\n viewBox=\"0 0 35 35\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M35 2.77995L32.2201 0 17.5 14.7201 2.77995 0 0 2.77995 14.7201 17.5 0 32.2201 2.77995 35 17.5 20.2799 32.2201 35 35 32.2201 20.2799 17.5 35 2.77995z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Cross;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Wrapper from 'components/base/Wrapper';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\n} from 'utils/styles';\nimport Cross from 'components/base/icons/Cross';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { LogoProps } from '../Navigation';\n\nconst View = styled.div<{ isOpen?: boolean }>`\n position: absolute;\n top: 0;\n left: 0;\n height: 100vh;\n width: 100%;\n overflow: hidden;\n pointer-events: none;\n\n transform: translate(${({ isOpen }) => (isOpen ? '0%' : '-100%')});\n\n transition: transform 0.2s cubic-bezier(0.71, 0, 0.29, 1);\n will-change: transform;\n`;\n\nconst StyledWrapper = styled(Wrapper)`\n height: 100%;\n`;\n\nconst Stage = styled.div<{\n isOpen?: boolean;\n isLarge?: boolean;\n isInverted?: boolean;\n}>`\n height: 100%;\n width: 100%;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).dark : color(theme).light};\n pointer-events: all;\n\n @media ${mq.semilarge} {\n width: ${({ isLarge }) => !isLarge && '40vw'};\n max-width: ${({ isLarge }) => (isLarge ? undefined : '500px')};\n }\n\n &:after {\n content: ${({ isLarge }) => !isLarge && `\"\"`};\n position: absolute;\n top: 0;\n left: 1px;\n bottom: 0;\n width: 40vw;\n\n transform: translateX(-100%);\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).dark : color(theme).light};\n }\n`;\n\nconst Header = styled.div`\n display: flex;\n max-width: ${spacings.wrapper}px;\n\n padding-top: ${spacings.spacer}px;\n padding-bottom: ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n padding: ${spacings.nudge * 7}px 0 ${spacings.nudge * 3}px 0;\n }\n`;\n\nconst Content = styled.div<{ isLarge?: boolean }>`\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n max-width: ${spacings.wrapper}px;\n margin: 0 auto;\n padding-left: ${spacings.spacer}px;\n padding-bottom: ${spacings.nudge * 3}px;\n\n @media ${mq.semilarge} {\n padding-left: ${(1 / 28) * 100}%;\n padding-left: max(${spacings.spacer}px, ${(1 / 28) * 100}vw);\n padding-right: ${({ isLarge }) => isLarge && spacings.spacer + 'px'};\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst HeaderCol = styled.div`\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n position: relative;\n color: ${({ theme }) => color(theme).light};\n\n transition: padding-top 0.2s ease-in-out;\n`;\n\nconst LeftCol = styled(HeaderCol)`\n flex: 1;\n justify-content: flex-start;\n align-self: flex-start;\n text-align: left;\n\n ${withRange([spacings.nudge, spacings.nudge * 1.5], 'padding-top')}\n`;\n\nconst CenterCol = styled(HeaderCol)`\n padding: 0 ${spacings.nudge * 2}px;\n text-align: center;\n`;\n\nconst RightCol = styled(HeaderCol)`\n flex: 1;\n justify-content: flex-end;\n text-align: right;\n\n ${withRange([spacings.nudge, spacings.nudge * 1.5], 'padding-top')}\n\n & > * {\n min-width: auto;\n }\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.semilarge} {\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n }\n`;\n\nconst ToggleContainer = styled.div<{ iconColor?: string }>`\n cursor: pointer;\n padding: ${spacings.nudge * 2}px;\n margin: -${spacings.nudge * 2}px;\n\n color: ${({ iconColor }) => iconColor && iconColor};\n`;\n\nconst StyledMenuClose = styled(Cross)`\n margin-top: ${spacings.nudge}px;\n`;\n\nconst SearchContainer = styled.div<{ isLarge?: boolean }>`\n display: flex;\n justify-content: center;\n width: 100%;\n padding-right: ${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n & > * {\n max-width: ${({ isLarge }) => isLarge && '355px'};\n }\n }\n`;\n\nconst LogoLink = styled(Link)`\n display: flex;\n justify-content: center;\n position: relative;\n\n color: ${({ theme }) => color(theme).light};\n transition: height 0.2s ease-in-out, width 0.2s ease-in-out;\n will-change: height, width;\n\n & > * {\n max-height: 100%;\n height: 100%;\n }\n`;\n\nconst ScrollArea = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n height: 100%;\n overflow-y: auto;\n\n ${withRange([spacings.spacer, spacings.spacer * 2], 'padding-top')};\n margin-left: -${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n padding-bottom: ${spacings.spacer * 4.5}px;\n\n & > * {\n flex: 1 1 auto;\n flex-shrink: 0;\n }\n`;\n\ntype FlyoutMq = 'semilarge' | 'large';\n\nconst Flyout: FC<{\n isOpen?: boolean;\n isLarge?: boolean;\n isInverted?: boolean;\n toggleIcon?: (isInverted?: boolean) => React.ReactNode;\n logo?: LogoProps;\n primaryAction?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n secondaryAction?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n search?: (isInverted?: boolean) => React.ReactNode;\n onCloseClick?: () => void;\n className?: string;\n}> = ({\n isOpen = false,\n isLarge = false,\n isInverted = false,\n toggleIcon,\n logo,\n primaryAction,\n secondaryAction,\n search,\n onCloseClick,\n className,\n children,\n}) => {\n const theme = useContext(ThemeContext);\n const mqs: FlyoutMq[] = ['semilarge', 'large'];\n const currentMq = useMediaQuery(mqs) as FlyoutMq | undefined;\n\n return (\n <View isOpen={isOpen} className={className}>\n <StyledWrapper clampWidth={isLarge ? 'large' : 'normal'}>\n <Stage\n isOpen={isOpen}\n isLarge={isLarge}\n isInverted={isInverted}\n >\n <Content isLarge={isLarge}>\n <Header>\n <LeftCol>\n <ToggleContainer\n onClick={onCloseClick}\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n >\n {toggleIcon ? (\n toggleIcon(isInverted)\n ) : (\n <StyledMenuClose\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n />\n )}\n </ToggleContainer>\n {search && (\n <SearchContainer isLarge={isLarge}>\n {search(isInverted)}\n </SearchContainer>\n )}\n </LeftCol>\n {isLarge &&\n (currentMq === 'semilarge' ||\n currentMq === 'large') && (\n <>\n <CenterCol>\n {logo && (\n <LogoLink href={logo.link}>\n {logo.icon &&\n logo.icon({\n isInverted: isInverted,\n name: 'menu_logo',\n size:\n currentMq !==\n 'large'\n ? 'small'\n : 'full',\n })}\n </LogoLink>\n )}\n </CenterCol>\n <RightCol>\n {secondaryAction &&\n secondaryAction({\n isInverted,\n name: 'menu_secondaryCta',\n size:\n currentMq === 'large'\n ? 'desktop'\n : 'mobile',\n })}\n {primaryAction &&\n primaryAction({\n isInverted,\n name: 'menu_primaryCta',\n size:\n currentMq === 'large'\n ? 'desktop'\n : 'mobile',\n })}\n </RightCol>\n </>\n )}\n </Header>\n <ScrollArea>{children}</ScrollArea>\n </Content>\n </Stage>\n </StyledWrapper>\n </View>\n );\n};\n\nexport interface NavGroup {\n id: string;\n name?: string;\n isSmall?: boolean;\n items?: NavItem[];\n}\n\nexport interface NavItem {\n id?: string;\n label?: string;\n link?: LinkProps;\n onClick?: (id?: string, fullId?: string) => void;\n}\n\nconst NavListView = styled.ul<{ isLarge?: boolean }>`\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n\n list-style: none;\n padding: 0;\n margin: 0;\n\n & > * {\n ${withRange([spacings.nudge * 3, spacings.spacer], 'margin-top')};\n }\n\n @media ${mq.medium} {\n flex-direction: ${({ isLarge }) => (isLarge ? 'row' : 'column')};\n\n & > * {\n flex: ${({ isLarge }) => (isLarge ? '1 0 260px' : '1')};\n }\n }\n`;\n\nconst Nav = styled.nav<{ isInverted?: boolean }>`\n display: block;\n width: calc(100% + ${spacings.spacer}px);\n margin-left: -${spacings.spacer}px;\n padding-left: ${spacings.spacer}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n`;\n\nconst Group = styled.li`\n flex: 1 1 auto;\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: 300;\n line-height: ${({ theme }) => font(theme).copy.medium.lineHeight};\n\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-right')};\n\n hyphens: auto;\n overflow-wrap: break-word;\n\n &:not(:last-child) {\n ${withRange([spacings.nudge * 3, spacings.spacer], 'margin-bottom')};\n }\n`;\n\nconst GroupLabel = styled.label`\n display: block;\n height: 30px;\n padding-bottom: ${spacings.nudge * 2}px;\n`;\n\nconst GroupLabelSpacer = styled.label`\n display: none;\n height: 30px;\n\n @media ${mq.medium} {\n display: block;\n }\n`;\n\nconst ItemContainer = styled.ul`\n list-style: none;\n margin: 0;\n padding: 0;\n color: inherit;\n`;\n\nconst NavItem = styled.li<{ isSmall?: boolean }>`\n position: relative;\n margin: 0;\n padding-bottom: ${spacings.nudge}px;\n\n font-family: ${({ theme }) => font(theme)['heading-3'].family};\n ${({ theme, isSmall }) =>\n withRange(\n isSmall\n ? font(theme)['heading-4'].size\n : font(theme)['heading-3'].size,\n 'font-size'\n )}\n font-weight: 700;\n line-height: ${({ theme, isSmall }) =>\n isSmall\n ? font(theme)['heading-4'].lineHeight\n : font(theme)['heading-3'].lineHeight};\n\n color: inherit;\n hyphens: auto;\n overflow-wrap: break-word;\n cursor: pointer;\n user-select: none;\n\n & + & {\n padding-top: ${spacings.nudge}px;\n }\n\n & > li {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n`;\n\nconst ItemLink = styled(Link)`\n display: inline-block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n`;\n\nconst ItemLabel = styled.label<{ isActive?: boolean; isInverted?: boolean }>`\n display: inline-block;\n position: relative;\n border-bottom: solid 2px transparent;\n pointer-events: none;\n\n transition: border 0.2s ease-in-out;\n\n ${ItemLink}:hover + & {\n border-bottom: solid 2px ${({ theme }) => color(theme).primary.medium};\n }\n\n &:before {\n content: ${({ isActive }) => (isActive ? `\"\"` : undefined)};\n position: absolute;\n left: -13px;\n top: 50%;\n height: 6px;\n width: 6px;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 4px;\n\n transform: translateY(-50%);\n }\n`;\n\nconst NavList: FC<{\n isInverted?: boolean;\n activeNavItem?: string;\n navGroups?: NavGroup[];\n isLarge?: boolean;\n className?: string;\n}> = ({\n isInverted = false,\n activeNavItem,\n navGroups,\n isLarge = false,\n className,\n}) => {\n const [activeGroup, activeItem] = activeNavItem\n ? activeNavItem?.split('.')\n : [];\n\n return (\n <Nav isInverted={isInverted}>\n <NavListView isLarge={isLarge} className={className}>\n {navGroups &&\n navGroups.map((group, i) => (\n <Group key={i}>\n {group.name ? (\n <GroupLabel>{group.name}</GroupLabel>\n ) : (\n isLarge && <GroupLabelSpacer />\n )}\n <ItemContainer>\n {group.items &&\n group.items\n .filter((item) => {\n return item.label && item.link;\n })\n .map((item, itemIndex) => (\n <NavItem\n key={itemIndex}\n isSmall={group.isSmall}\n onClick={() =>\n item.onClick &&\n item.onClick(\n item.id,\n group.id + '.' + item.id\n )\n }\n >\n <ItemLink {...item.link} />\n <ItemLabel\n isActive={\n activeGroup ===\n group.id &&\n activeItem === item.id\n }\n isInverted={isInverted}\n >\n {item.label}\n </ItemLabel>\n </NavItem>\n ))}\n </ItemContainer>\n </Group>\n ))}\n </NavListView>\n </Nav>\n );\n};\n\nexport default {\n View: Flyout,\n NavList: NavList,\n};\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { mq, spacings } from 'utils/styles';\nimport Flyout, { NavGroup } from './Flyout';\nimport SocialList from 'components/blocks/SocialList';\nimport { LogoProps } from '../Navigation';\n\nconst View = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n width: 100%;\n z-index: 10;\n`;\n\nconst Backdrop = styled.div<{ isVisible?: boolean; opacity?: number }>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100vh;\n background-color: rgba(\n 0,\n 0,\n 0,\n ${({ isVisible, opacity }) => (isVisible ? opacity : 0)}\n );\n\n pointer-events: ${({ isVisible }) => !isVisible && 'none'};\n transition: background-color 0.2s ease-in-out;\n`;\n\nconst SocialContainer = styled.div<{ isLarge?: boolean }>`\n display: flex;\n justify-content: flex-start;\n padding-top: ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n justify-content: ${({ isLarge }) =>\n isLarge ? 'flex-end' : 'flex-start'};\n }\n\n @media ${mq.xlarge} {\n padding-right: ${({ isLarge }) => isLarge && spacings.spacer}px;\n }\n`;\ninterface MenuProps {\n isOpen?: boolean;\n size?: 'small' | 'full';\n isInverted?: boolean;\n backdropOpacity?: number;\n toggleIcon?: (isInverted?: boolean) => React.ReactNode;\n logo?: LogoProps;\n primaryAction?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n secondaryAction?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n search?: (isInverted?: boolean) => React.ReactNode;\n activeNavItem?: string;\n navItems?: NavGroup[];\n socials?: Array<{ icon: React.ReactNode; href: string }>;\n onCloseClick?: () => void;\n}\n\nconst Menu: FC<MenuProps> = ({\n isOpen = false,\n size = 'small',\n isInverted = false,\n backdropOpacity = 0.4,\n toggleIcon,\n logo,\n primaryAction,\n secondaryAction,\n search,\n activeNavItem,\n navItems,\n socials,\n onCloseClick,\n}) => {\n return (\n <View>\n <Backdrop\n isVisible={isOpen}\n opacity={backdropOpacity}\n onClick={onCloseClick}\n />\n <Flyout.View\n isOpen={isOpen}\n isLarge={size === 'full'}\n isInverted={isInverted}\n onCloseClick={onCloseClick}\n toggleIcon={toggleIcon}\n logo={logo}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n search={search}\n >\n {navItems && (\n <Flyout.NavList\n activeNavItem={activeNavItem}\n navGroups={navItems}\n isLarge={size === 'full'}\n isInverted={isInverted}\n />\n )}\n {socials && (\n <SocialContainer isLarge={size === 'full'}>\n <SocialList\n isInverted={isInverted}\n items={socials.map((item) => {\n return {\n href: item.href,\n icon: item.icon,\n };\n })}\n />\n </SocialContainer>\n )}\n </Flyout.View>\n </View>\n );\n};\n\nexport default Menu;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst MenuBurger: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"31\"\n height=\"37\"\n viewBox=\"0 0 31 37\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fill={iconColor}\n d=\"M3.89556 33.59887c.05495.10804.10504.22107.15029.33926.04848.11472.09534.23122.14059.34932a11.78855 11.78855 0 01.1406-.35946c.04847-.1181.10018-.23122.15513-.33917l2.0749-4.0556c.02587-.05064.05172-.09113.07758-.12147.02909-.03035.0598-.05234.0921-.06587.03557-.01343.07435-.02189.11637-.02527s.0921-.00507.15028-.00507h.98413v7.32121H6.8286V31.9078c0-.08775.00162-.18396.00485-.28853a11.4408 11.4408 0 01.02423-.31897L4.73916 35.452c-.04848.09452-.1115.16874-.18907.22277-.07757.05064-.16806.0759-.2715.0759h-.17936c-.10343 0-.19392-.02526-.2715-.0759-.07755-.05403-.14059-.12825-.18906-.22277l-2.1476-4.16692c.01292.11143.021.22107.02423.32912.00647.10457.0097.20247.0097.2936v4.72895H.37607v-7.32121h.98413c.05817 0 .10827.00169.15028.00507s.07918.01184.11151.02527c.03555.01353.06787.03552.09696.06587s.05655.07083.08241.12147zM14.68715 29.31574v1.08346H11.5796v2.03034h2.44823v1.04805h-2.44823v2.07082h3.10754v1.08854h-4.42137v-7.32121zM17.37336 29.31574c.05815 0 .10665.00338.14539.01014.03883.00339.07279.01353.10186.03035.0323.01353.06304.03542.09211.06586.02908.02696.06138.06408.097.11133l3.6796 4.896a6.80536 6.80536 0 01-.02917-.34424c-.00322-.11481-.00478-.22107-.00478-.31897v-4.45047h1.14893v7.32121h-.67384c-.10343 0-.1891-.01691-.25692-.05064-.0679-.03373-.13416-.09452-.19875-.18227l-3.66508-4.8757c.00966.10795.0161.216.01932.32404.00654.10457.00976.20078.00976.28853v4.49604h-1.14903v-7.32121zM27.71523 35.53797c.25213 0 .47675-.04388.67385-.13163.20041-.08775.36843-.21103.50416-.36962.13904-.15869.24403-.351.31516-.57725.07436-.22614.11153-.47925.11153-.75942v-4.38461h1.30408v4.3846c0 .43549-.06791.83883-.20364 1.21013-.1325.36792-.32482.6869-.57686.95691-.25213.26664-.55753.47587-.91631.6278-.35869.14854-.76274.22276-1.21197.22276s-.85329-.07422-1.21197-.22276c-.35878-.15193-.66418-.36116-.91632-.6278-.2488-.27002-.44113-.58899-.57685-.9569-.1325-.37131-.19876-.77465-.19876-1.21013v-4.38461h1.30408v4.37954c0 .28016.03551.53337.10664.75952.07436.22614.17935.42015.31507.58222.13582.1586.30219.28187.49938.36962.20042.08775.4266.13163.67873.13163z\"\n />\n <path\n fill={iconColor}\n d=\"M.37597 1.2769h30.24794M7.25006 11.0904H30.6239M.37597 20.90398h30.24794M.37597.28198v1.98984h30.24794V.28198zm6.874 9.8132V12.085H30.6238v-1.98984zm-6.874 9.81319v1.98984h30.24794v-1.98984z\"\n />\n </SVG>\n);\n\nexport default MenuBurger;\n","import MenuBurger from 'components/base/icons/MenuBurger';\nimport Wrapper from 'components/base/Wrapper';\nimport Link from 'components/typography/Link';\nimport React, { FC, useContext, useEffect, useRef, useState } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { spacings, getColors as color, mq, withRange } from 'utils/styles';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { ScrollDirection, useScroll } from 'utils/useScroll';\nimport { LogoProps } from './Navigation';\n\nconst TopWhitespace = styled.div<{ logoHeight?: number; showLarge?: boolean }>`\n width: 100%;\n height: ${({ logoHeight, showLarge }) =>\n logoHeight ? logoHeight + (showLarge ? 25 : 10) + 'px' : '140px'};\n\n @media ${mq.semilarge} {\n height: ${({ logoHeight, showLarge }) =>\n logoHeight ? logoHeight + (showLarge ? 50 : 30) + 'px' : '140px'};\n }\n`;\n\nconst View = styled.div<{\n isVisible?: boolean;\n isLarge?: boolean;\n showLarge?: boolean;\n isOpen?: boolean;\n isInverted?: boolean;\n animated?: boolean;\n allowOffset?: boolean;\n isBackVisible?: boolean;\n}>`\n position: ${({ isLarge }) => (isLarge ? 'absolute' : 'fixed')};\n top: 0;\n left: 0;\n right: 0;\n width: 100%;\n z-index: 10;\n max-width: ${spacings.wrapperLarge}px;\n padding: ${({ showLarge, isOpen }) =>\n !showLarge && isOpen ? spacings.nudge : spacings.spacer}px\n 0 ${spacings.nudge}px 0;\n margin: 0 auto;\n overflow: hidden;\n\n background-color: ${({\n theme,\n isInverted,\n isLarge,\n isBackVisible,\n allowOffset,\n }) =>\n isBackVisible\n ? isInverted\n ? (!isLarge || !allowOffset) &&\n `rgba(0, 0, 0, ${!isLarge ? 0.3 : 0})`\n : (!isLarge || !allowOffset) && color(theme).light\n : 'transparent'};\n\n box-shadow: 0px 4px 4px\n ${({ isInverted, isLarge, isOpen, isBackVisible }) =>\n isInverted || !isBackVisible\n ? `transparent`\n : isOpen && !isLarge\n ? `rgba(0, 0, 0, 0.13)`\n : 'transparent'};\n\n opacity: ${({ isVisible }) => (isVisible ? 1 : 0)};\n pointer-events: ${({ isVisible }) => (isVisible ? 'all' : 'none')};\n\n transform: translate(0, ${({ isOpen }) => (!isOpen ? '-100%' : '0')});\n\n transition: ${({ animated }) =>\n animated ? 'transform 0.3s cubic-bezier(.71,0,.29,1),' : ''}\n height 0.2s ease-in-out,\n background-color 0.3s ease-in-out, padding 0.2s ease-in-out,\n box-shadow 0.2s ease-in-out, opacity 0.2s ease-in-out;\n will-change: transform, background-color, padding, height, box-shadow,\n opacity;\n\n @media ${mq.semilarge} {\n padding: ${({ showLarge, isOpen }) =>\n !showLarge && isOpen\n ? spacings.nudge * 3\n : spacings.nudge * 7}px\n 0 ${spacings.nudge * 3}px 0;\n }\n`;\n\nconst Content = styled(Wrapper)`\n position: relative;\n display: flex;\n flex-direction: row;\n width: 100%;\n height: 100%;\n\n padding: 0 ${({ addWhitespace }) => (addWhitespace ? spacings.spacer : 0)}px;\n\n @media ${mq.semilarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * 100 : 0}%;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * spacings.wrapper : 0}px;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n`;\n\nconst Column = styled.div<{\n isTop?: boolean;\n}>`\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n position: relative;\n color: ${({ theme }) => color(theme).light};\n\n transition: padding-top 0.2s ease-in-out;\n`;\n\nconst LeftCol = styled(Column)`\n flex: 1;\n justify-content: flex-start;\n align-self: ${({ isTop }) => (isTop ? 'flex-start' : 'center')};\n text-align: left;\n\n ${({ isTop }) =>\n isTop &&\n withRange([spacings.nudge, spacings.nudge * 1.5], 'padding-top')}\n`;\n\nconst CenterCol = styled(Column)`\n display: flex;\n align-self: ${({ isTop }) => (isTop ? 'flex-start' : 'center')};\n padding: 0 ${spacings.nudge * 2}px;\n text-align: center;\n`;\n\nconst RightCol = styled(Column)`\n flex: 1;\n justify-content: flex-end;\n align-self: ${({ isTop }) => (isTop ? 'flex-start' : 'center')};\n text-align: right;\n\n ${({ isTop }) =>\n isTop &&\n withRange([spacings.nudge, spacings.nudge * 1.5], 'padding-top')}\n\n & > * {\n min-width: auto;\n }\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.semilarge} {\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n }\n`;\n\nconst ToggleContainer = styled.div<{ iconColor?: string }>`\n cursor: pointer;\n padding: ${spacings.nudge * 2}px;\n margin: -${spacings.nudge * 2}px;\n\n color: ${({ iconColor }) => iconColor && iconColor};\n`;\n\nconst StyledMenuBurger = styled(MenuBurger)`\n margin-top: ${spacings.nudge}px;\n`;\n\nconst LogoLink = styled(Link)<{ logoHeight?: number }>`\n display: flex;\n justify-content: center;\n position: relative;\n height: ${({ logoHeight }) => logoHeight && logoHeight + 'px'};\n width: auto;\n\n color: ${({ theme }) => color(theme).light};\n transition: height 0.2s ease-in-out, width 0.2s ease-in-out;\n will-change: height, width;\n\n & > * {\n max-height: 100%;\n height: 100%;\n }\n`;\n\nconst clampValue = (num: number, min: number, max: number) => {\n return Math.min(Math.max(num, min), max);\n};\n\ntype TopBarMq = 'semilarge' | 'large';\n\nconst TopBar: FC<{\n isVisible?: boolean;\n isBackVisible?: boolean;\n isInverted?: boolean;\n allowTopOverlow?: boolean;\n isLargeOnPageTop?: boolean;\n onToggleClick?: () => void;\n toggleIcon?: (isInverted?: boolean) => React.ReactNode;\n logo?: LogoProps;\n primaryAction?: (props: {\n isInverted?: boolean;\n size?: 'mobile' | 'desktop';\n name?: string;\n }) => React.ReactNode;\n secondaryAction?: (props: {\n isInverted?: boolean;\n size?: 'mobile' | 'desktop';\n name?: string;\n }) => React.ReactNode;\n className?: string;\n}> = ({\n isVisible = true,\n isInverted = false,\n isBackVisible = true,\n allowTopOverlow = true,\n isLargeOnPageTop = true,\n onToggleClick,\n toggleIcon,\n logo,\n primaryAction,\n secondaryAction,\n className,\n}) => {\n const theme = useContext(ThemeContext);\n const viewRef = useRef<HTMLDivElement | null>(null);\n const [isOpen, setIsOpen] = useState(true);\n const [isLarge, setIsLarge] = useState(true);\n const [isAnimated, setIsAnimated] = useState(false);\n const defaultLogoScale: Pick<\n LogoProps,\n 'pageTopScale' | 'scrolledScale'\n > = {\n pageTopScale: {\n mobile: 1,\n desktop: 1,\n ...logo?.pageTopScale,\n },\n scrolledScale: {\n mobile: 0.6,\n desktop: 0.6,\n ...logo?.scrolledScale,\n },\n };\n\n const mqs: TopBarMq[] = ['semilarge', 'large'];\n const currentMq = useMediaQuery(mqs) as TopBarMq | undefined;\n\n const { isTop, isInOffset, scrollDirection, setTopOffset } = useScroll({});\n\n useEffect(() => {\n if (!isInOffset) {\n if (scrollDirection === ScrollDirection.UP) {\n setIsOpen(true);\n setIsAnimated(true);\n } else if (scrollDirection === ScrollDirection.DOWN) {\n setIsOpen(false);\n }\n }\n }, [isInOffset, scrollDirection]);\n\n useEffect(() => {\n if (!isInOffset && !isTop) {\n setIsLarge((prev) => {\n if (prev) setIsAnimated(false);\n return false;\n });\n }\n }, [isInOffset, isLarge, isTop]);\n\n useEffect(() => {\n if (isTop) setIsLarge(true);\n }, [isTop]);\n\n // check if top bar is inverted\n const isBarInverted =\n (isLarge && allowTopOverlow) || isInverted || !isBackVisible;\n\n // get scale factor of topbar logo\n let logoScale = 1;\n // get scale for current media query\n const scalePageTop =\n defaultLogoScale.pageTopScale?.[\n currentMq === 'large' ? 'desktop' : 'mobile'\n ];\n const scaleScrolled =\n defaultLogoScale.scrolledScale?.[\n currentMq === 'large' ? 'desktop' : 'mobile'\n ];\n\n const scale = (isLargeOnPageTop ? isLarge : false)\n ? scalePageTop\n : scaleScrolled;\n if (scale !== undefined) logoScale = scale;\n\n // calc logo height\n const logoHeight = clampValue(115 * logoScale, 60, 300);\n const logoTopHeight =\n scalePageTop &&\n scaleScrolled &&\n clampValue(\n 115 * (isLargeOnPageTop ? scalePageTop : scaleScrolled),\n 60,\n 300\n );\n\n // calculate top scroll offset\n useEffect(() => {\n const showLarge = isLargeOnPageTop ? isLarge : false;\n\n if (currentMq === 'large') {\n setTopOffset(logoHeight + (showLarge ? 25 : 10));\n } else {\n setTopOffset(logoHeight + (showLarge ? 50 : 30));\n }\n }, [setTopOffset, currentMq, isLargeOnPageTop, isLarge, logoHeight]);\n\n return (\n <>\n {!allowTopOverlow && (\n <TopWhitespace\n showLarge={isLargeOnPageTop}\n logoHeight={logoTopHeight}\n />\n )}\n <View\n ref={viewRef}\n isInverted={isInverted}\n isVisible={isVisible}\n isBackVisible={isBackVisible}\n isOpen={isOpen}\n isLarge={isLarge}\n showLarge={isLargeOnPageTop ? isLarge : false}\n animated={isAnimated}\n allowOffset={allowTopOverlow}\n className={className}\n >\n <Content clampWidth=\"normal\" addWhitespace>\n <LeftCol isTop={isLargeOnPageTop ? isLarge : false}>\n <ToggleContainer\n onClick={onToggleClick}\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n >\n {toggleIcon ? (\n toggleIcon(isBarInverted)\n ) : (\n <StyledMenuBurger\n iconColor={\n isBarInverted\n ? color(theme).light\n : color(theme).dark\n }\n />\n )}\n </ToggleContainer>\n </LeftCol>\n <CenterCol isTop={isLargeOnPageTop ? isLarge : false}>\n {logo && (\n <LogoLink href={logo.link} logoHeight={logoHeight}>\n {logo.icon &&\n logo.icon({\n isInverted: isBarInverted,\n name: 'topbar_logo',\n size:\n currentMq !== 'large' ||\n !(isLargeOnPageTop\n ? isLarge\n : false)\n ? 'small'\n : 'full',\n })}\n </LogoLink>\n )}\n </CenterCol>\n <RightCol isTop={isLargeOnPageTop ? isLarge : false}>\n {secondaryAction &&\n secondaryAction({\n isInverted: isBarInverted,\n name: 'topbar_secondaryCta',\n size:\n currentMq === 'large'\n ? 'desktop'\n : 'mobile',\n })}\n {primaryAction &&\n primaryAction({\n isInverted: isBarInverted,\n name: 'topbar_primaryCta',\n size:\n currentMq === 'large'\n ? 'desktop'\n : 'mobile',\n })}\n </RightCol>\n </Content>\n </View>\n </>\n );\n};\n\nexport default TopBar;\n","import React, { FC, useEffect, useState } from 'react';\nimport { NavGroup } from './menu/Flyout';\nimport Menu from './menu/Menu';\n\nimport TopBar from './TopBar';\n\nexport interface LogoProps {\n icon?: (props: {\n isInverted?: boolean;\n size?: 'full' | 'small';\n name?: string;\n }) => React.ReactNode;\n link?: string;\n pageTopScale?: {\n // icon scale factor\n mobile?: number;\n desktop?: number;\n };\n /** Logo scale if is shown from scroll up */\n scrolledScale?: {\n /** Default is 0.6 */\n mobile?: number;\n desktop?: number;\n };\n}\n\nexport interface NavProps {\n isLargeMenu?: boolean;\n isMenuInverted?: boolean;\n isTopbarInverted?: boolean;\n activeNavItem?: string;\n navItems?: NavGroup[];\n backdropOpacity?: number;\n socials?: Array<{ icon: React.ReactNode; href: string }>;\n logo?: LogoProps;\n /** Allow overflow of topbar over content if page is on top */\n allowTopbarOverflow?: boolean;\n /** Hide topbar background if menu overlay is open */\n hideTopbarBackUnderMenu?: boolean;\n isTopbarLargeOnPageTop?: boolean;\n primaryCta?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n secondaryCta?: (props: {\n isInverted?: boolean;\n size?: 'desktop' | 'mobile';\n name?: string;\n }) => React.ReactNode;\n search?: (isInverted?: boolean) => React.ReactNode;\n openMenuIcon?: (isInverted?: boolean) => React.ReactNode;\n closeMenuIcon?: (isInverted?: boolean) => React.ReactNode;\n}\n\nconst Navigation: FC<NavProps> = ({\n isMenuInverted,\n isLargeMenu,\n activeNavItem,\n navItems,\n socials,\n search,\n logo,\n backdropOpacity,\n primaryCta,\n secondaryCta,\n isTopbarInverted,\n allowTopbarOverflow,\n hideTopbarBackUnderMenu,\n isTopbarLargeOnPageTop,\n openMenuIcon,\n closeMenuIcon,\n}) => {\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n\n const sharedProps = {\n logo: logo,\n primaryAction: primaryCta,\n secondaryAction: secondaryCta,\n };\n\n useEffect(() => {\n document.body.style.overflow = isMenuOpen ? 'hidden' : 'visible';\n }, [isMenuOpen]);\n\n return (\n <>\n <TopBar\n isBackVisible={hideTopbarBackUnderMenu ? !isMenuOpen : true}\n isInverted={isTopbarInverted}\n allowTopOverlow={allowTopbarOverflow}\n isLargeOnPageTop={isTopbarLargeOnPageTop}\n toggleIcon={openMenuIcon}\n onToggleClick={() => setIsMenuOpen(true)}\n {...sharedProps}\n />\n <Menu\n isOpen={isMenuOpen}\n backdropOpacity={backdropOpacity}\n size={isLargeMenu ? 'full' : 'small'}\n isInverted={isMenuInverted}\n activeNavItem={activeNavItem}\n navItems={navItems}\n socials={socials}\n search={search}\n onCloseClick={() => setIsMenuOpen(false)}\n toggleIcon={closeMenuIcon}\n {...sharedProps}\n />\n </>\n );\n};\n\nexport default Navigation;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowRight: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"18\"\n height=\"13\"\n viewBox=\"0 0 18 13\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M1.85397 7.42546H14.5657L10.533 11.4322c-.1753.1887-.263.4064-.263.6532 0 .2468.0877.4646.263.6533.1899.1742.4091.2613.6575.2613.2484 0 .4676-.0871.6575-.2613l5.6107-5.57454c.0438-.05807.0876-.10888.1315-.15243.0438-.04356.0657-.08711.0657-.13066.0439-.10162.0658-.21775.0658-.34841 0-.13065-.0219-.2613-.0658-.39196-.0438-.05806-.0767-.10887-.0986-.15242-.0219-.04356-.0548-.08711-.0986-.13066L11.848.28308c-.0877-.10162-.1826-.1742-.2849-.21775C11.4608.02178 11.3366 0 11.1905 0c-.1315 0-.2484.02178-.3507.06533s-.2045.11613-.3068.21775c-.1753.18873-.263.40648-.263.65327s.0877.46454.263.65327l4.0327 3.98492H1.85397c-.29223 0-.52235.08347-.69038.25042s-.25204.39559-.25204.68593c0 .27582.08401.49721.25204.66415.16803.16695.39815.25042.69038.25042z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default ArrowRight;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst CrossSmall: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 35 35\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M35 2.77995L32.2201 0 17.5 14.7201 2.77995 0 0 2.77995 14.7201 17.5 0 32.2201 2.77995 35 17.5 20.2799 32.2201 35 35 32.2201 20.2799 17.5 35 2.77995z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default CrossSmall;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Magnifier: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M19.6955 18.267l-4.4964-4.4965c.5464-.687.9836-1.491 1.3114-2.4122.3279-.9211.4918-1.88132.4918-2.88055 0-1.17096-.2263-2.27165-.6791-3.3021-.4372-1.03045-1.0422-1.92818-1.815-2.69321-.7728-.76504-1.6745-1.37393-2.7049-1.8267C10.7728.21858 9.67214 0 8.50117 0S6.22951.21858 5.19906.65574c-1.03045.45277-1.93208 1.06166-2.70492 1.8267-.77283.76503-1.37782 1.66276-1.81498 2.69321C.22638 6.2061 0 7.30679 0 8.47775c0 1.18658.22638 2.29505.67916 3.32555.43716 1.0304 1.04215 1.9282 1.81498 2.6932.77284.765 1.67447 1.3739 2.70492 1.8267 1.03045.4371 2.13114.6557 3.30211.6557.99922 0 1.94383-.1639 2.83373-.4918.8899-.3278 1.7096-.765 2.459-1.3115l4.4965 4.4965c.1093.1093.2303.1874.363.2342.1327.0469.2459.0703.3396.0703s.2068-.0234.3396-.0703c.1327-.0468.2537-.1249.3629-.2342.203-.2029.3045-.4371.3045-.7025 0-.2655-.1015-.4996-.3045-.7026zM2.01405 8.47775c0-.88993.16393-1.73301.4918-2.52927.34349-.78065.80796-1.4676 1.39345-2.06089.58548-.59329 1.27634-1.05386 2.0726-1.38173.78064-.34349 1.62372-.51523 2.52927-.51523.90555 0 1.74863.17174 2.52923.51523.7963.32787 1.4872.78844 2.0726 1.38173.5855.59329 1.05 1.28024 1.3935 2.06089.3279.79626.4918 1.63934.4918 2.52927 0 .90555-.1639 1.74865-.4918 2.52925-.3279.7807-.7963 1.4754-1.4052 2.0843-.5933.5933-1.2802 1.0578-2.0609 1.3935-.7806.3357-1.62368.5035-2.52923.5035-.90555 0-1.74863-.1717-2.52927-.5152-.79626-.3435-1.48712-.808-2.0726-1.3935-.58549-.5855-1.04996-1.2763-1.39345-2.0726-.32787-.7806-.4918-1.6237-.4918-2.52925z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Magnifier;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst FlyTo: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"52\"\n height=\"52\"\n viewBox=\"0 0 52 52\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M26 31.8229c1.5347 0 2.8889-.5868 4.0625-1.7604S31.8229 27.5347 31.8229 26s-.5868-2.8889-1.7604-4.0625S27.5347 20.1771 26 20.1771s-2.8889.5868-4.0625 1.7604S20.1771 24.4653 20.1771 26s.5868 2.8889 1.7604 4.0625S24.4653 31.8229 26 31.8229zm0-17.3333c3.1597 0 5.868 1.1284 8.125 3.3854 2.257 2.257 3.3854 4.9653 3.3854 8.125s-1.1284 5.868-3.3854 8.125c-2.257 2.257-4.9653 3.3854-8.125 3.3854s-5.868-1.1284-8.125-3.3854c-2.257-2.257-3.3854-4.9653-3.3854-8.125s1.1284-5.868 3.3854-8.125c2.257-2.257 4.9653-3.3854 8.125-3.3854zm20.1771 31.6875V34.6667H52v11.5104c0 1.5347-.5868 2.8889-1.7604 4.0625S47.7118 52 46.1771 52H34.6667v-5.8229h11.5104zm0-46.1771c1.5347 0 2.8889.5868 4.0625 1.76042C51.4132 2.93403 52 4.28819 52 5.82292V17.3333h-5.8229V5.82292H34.6667V0h11.5104zM5.82292 5.82292V17.3333H0V5.82292c0-1.53473.5868-2.88889 1.76042-4.0625C2.93403.5868 4.28819 0 5.82292 0H17.3333v5.82292H5.82292zm0 28.84378v11.5104H17.3333V52H5.82292c-1.53473 0-2.88889-.5868-4.0625-1.7604C.5868 49.066 0 47.7118 0 46.1771V34.6667h5.82292z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default FlyTo;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Star: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"34\"\n height=\"32\"\n viewBox=\"0 0 34 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M33.9231 12.1154l-11.8504-1.5523L16.9615 0l-5.1111 10.5631L0 12.1154l8.70793 7.9128L6.47416 31.5l10.48734-5.6412L27.4489 31.5l-2.2338-11.4718 8.708-7.9128z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Star;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst StarGhost: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"33\"\n height=\"31\"\n viewBox=\"0 0 33 31\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M32.0408 11.6671c-.0682-.2762-.2045-.4948-.409-.6559-.2045-.161-.4544-.2876-.7498-.3797l-9.3041-1.31165L17.3518.79391C17.1474.26463 16.7157 0 16.0568 0c-.6589 0-1.0906.26464-1.2951.79391l-4.2261 8.38787-9.16781 1.44972c-.29537 0-.55098.1036-.76683.3107-.21584.2071-.39193.4487-.52825.7249-.09089.2991-.09657.5868-.01704.8629.07952.2762.22152.4833.42601.6214l6.71398 6.6274-1.60181 9.4234c-.06816.2992-.04544.5811.06816.8457.11361.2646.28401.4775.51122.6386.20449.1381.44873.2301.73274.2761.28401.0461.5737 0 .86907-.138l8.28176-4.4183 8.2817 4.4183h.7498c.1363 0 .2783-.0288.426-.0863.1477-.0576.2897-.1324.426-.2244.2272-.1381.3976-.3394.5112-.6041.1136-.2646.1363-.5465.0682-.8457l-1.6019-9.4234 6.714-6.6274c.2045-.1611.3465-.3682.426-.6213.0796-.2532.0739-.4948-.017-.7249zm-9.7472 6.4894c-.1363.2301-.2386.4544-.3067.6731-.0682.2186-.1023.4314-.1023.6385l1.1588 7.2488-6.4073-3.4173c-.2272-.138-.4487-.2071-.6645-.2071-.2159 0-.4261.0691-.6305.2071l-6.4073 3.4173 1.2951-7.2488c0-.2071-.0341-.4199-.1023-.6385-.0681-.2187-.17037-.443-.30669-.6731l-5.2485-5.0051 7.12299-1.0356c.2272 0 .443-.0863.6475-.2589.2045-.1726.3749-.3279.5112-.466l3.2037-6.62742 3.2036 6.48942c.0681.2071.2045.3797.409.5177.2044.1381.4544.2071.7497.2071l7.123 1.0356-5.2485 5.1432z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default StarGhost;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Mail: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"25\"\n height=\"25\"\n viewBox=\"0 0 25 25\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fill={iconColor}\n d=\"M22.3988 2.6786c.61982 0 1.16669.24181 1.64061.72545.47402.48363.71098 1.0417.71098 1.6741v14.844c0 .6324-.23696 1.1905-.71098 1.6741-.47392.4836-1.0208.7255-1.64061.7255H2.60173c-.61979 0-1.16669-.2419-1.64061-.7255s-.71094-1.0417-.71094-1.6741v-14.844c0-.63244.23698-1.1905.71094-1.6741.47396-.48363 1.0208-.72545 1.64061-.72545zm-.27349 5.0781V5.3571l-9.62495 6.529-9.62504-6.529v2.3996l9.62504 6.529z\"\n />\n </SVG>\n);\n\nexport default Mail;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Phone: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"25\"\n height=\"25\"\n viewBox=\"0 0 25 25\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fill={iconColor}\n d=\"M23.92962 18.18155c1.4269 1.42053 1.4269 2.98303 0 4.6876-.57072.66283-1.12955 1.16-1.6765 1.49142-.54693.33151-.99875.52086-1.35545.56825-.3567.04729-.86797.07098-1.53382.07098-1.85494 0-4.06648-.94696-6.63472-2.84087-2.04518-1.46783-3.90002-3.05402-5.56462-4.75858-2.1402-2.22543-4.01882-4.75858-5.63596-7.59946C.10175 7.14937-.3263 4.97133.24443 3.26676c.28537-.89961.9512-1.68086 1.99752-2.3438l.07134-.07102c.8561-.56818 1.61704-.85227 2.28288-.85227.90366 0 1.71216.42613 2.42556 1.27837l.07134.07103C8.18695 2.7695 8.94791 3.88222 9.37595 4.6871c.7134 1.46782.68962 2.7225-.07134 3.76424-.57072.75758-.85608 1.30206-.85608 1.63348 0 .14206.30914.56825.92742 1.27847l.07134.07098c1.14144 1.27848 1.75972 1.965 1.85484 2.05968.04756 0 .09512.02369.14268.07108.04756.04729.09512.09467.14278.14196l.14268.14207c.9512.94705 1.64082 1.60988 2.06886 1.98869l.07134.07098c.42804.3788.7134.56825.85608.56825.2378 0 .92742-.3551 2.06886-1.06542.33292-.23674.73718-.35511 1.21288-.35511.85608 0 1.89052.3551 3.1033 1.06542 1.21278.71022 2.15209 1.39675 2.81793 2.05958z\"\n />\n </SVG>\n);\n\nexport default Phone;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Route: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"29\"\n height=\"30\"\n viewBox=\"0 0 29 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M28.629 13.5725L15.4275.371C15.1802.12367 14.871 0 14.5 0s-.6802.12367-.9275.371L.371 13.5725c-.24733.2679-.371.5823-.371.943 0 .3607.12367.6647.371.912L13.5725 28.629c.2473.2679.5565.4019.9275.4019s.6802-.134.9275-.4019L28.629 15.4275c.2473-.2473.371-.5513.371-.912s-.1237-.6751-.371-.943zm-11.5011 4.2356V14.5h-6.5853v3.9574H7.91471v-5.2559c0-.371.12882-.6853.38646-.943.25765-.2576.56166-.3864.91205-.3864h7.91468V8.56397l4.6376 4.63753-4.6376 4.6066z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Route;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Facebook: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M26.6012 0H3.32515C1.48872 0 0 1.48872 0 3.32515V26.6012c0 1.8364 1.48872 3.3252 3.32515 3.3252H14.9832v.0053h4.9877v-.0053h6.6303c1.8364 0 3.3252-1.4888 3.3252-3.3252V3.32515C29.9264 1.48872 28.4376 0 26.6012 0zm-6.6303 29.9264V18.2937h4.9877V13.306h-4.9877V9.98081c0-.91821.7444-1.66257 1.6626-1.66257h3.3251V3.33051h-4.1564c-3.2138 0-5.819 2.60526-5.819 5.81902V13.306H11.658v4.9877h3.3252v11.6327h4.9877z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Facebook;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst LinkedIn: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M29.9752 3.32515C29.9752 1.48872 28.4865 0 26.65 0H3.37398C1.53755 0 .04883 1.48872.04883 3.32515V26.6012c0 1.8364 1.48872 3.3252 3.32515 3.3252H26.65c1.8365 0 3.3252-1.4888 3.3252-3.3252V3.32515zM25.7835 16.9523v8.8116h-4.6386v-8.1965c0-1.2855-1.0421-2.3276-2.3276-2.3276-1.2802 0-2.311 1.0475-2.311 2.3276v8.1965h-4.6386V11.8482h4.6386v1.8454c.7981-1.2968 2.444-2.1613 3.8572-2.1613 2.9934 0 5.42 2.4266 5.42 5.42zM6.487 9.24675c1.54261 0 2.79313-1.25053 2.79313-2.79313 0-1.54619-1.24693-2.80975-2.79313-2.80975-1.55178 0-2.80975 1.25797-2.80975 2.80975 0 1.5462 1.26356 2.79313 2.80975 2.79313zM8.77571 11.855v13.9157H4.17037V11.855h4.60534z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default LinkedIn;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Twitter: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M26.6735 0H3.39742C1.56099 0 .07227 1.48872.07227 3.32515V26.6012c0 1.8364 1.48872 3.3252 3.32515 3.3252H26.6735c1.8364 0 3.3251-1.4888 3.3251-3.3252V3.32515C29.9986 1.48872 28.5099 0 26.6735 0zm.0131 8.17421c-.4157.88117-1.3467 1.6792-2.1448 2.34419-.1163 7.6811-5.0209 12.9349-12.3529 13.2674-3.02588.133-5.20385-.8313-7.11582-2.045 2.22785.3492 4.98772-.532 6.48402-1.7956-2.19457-.2327-3.47475-1.3466-4.08991-3.1256.63178.0998 1.29681.0665 1.89534-.0499-1.97847-.665-3.39166-1.8953-3.45816-4.4557.54865.266 1.13055.4988 1.89534.5487-1.4797-.8479-2.56037-3.9237-1.31344-5.95204 2.1946 2.41073 4.83813 4.37254 9.17743 4.63854-1.0973-4.65517 5.0708-7.18228 7.6478-4.07327 1.0973-.19951 1.9785-.59853 2.843-1.06405-.3491 1.06405-1.0308 1.84546-1.862 2.44399.8978-.11638 1.7124-.33252 2.3941-.68166z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Twitter;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Xing: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.04732 0C1.38475 0 .05469 1.33006.05469 2.99264V26.9337c0 1.6626 1.33006 2.9927 2.99263 2.9927H26.9884c1.6626 0 2.9926-1.3301 2.9926-2.9927V2.99264C29.981 1.33006 28.651 0 26.9884 0H3.04732zM21.782 3.33051h3.3917c.1995 0 .3657.06651.4323.21614.0997.14963.0997.33251 0 .5154L18.1742 17.2296l4.7384 8.6454c.0997.1829.0997.3658 0 .5154-.0831.133-.2328.2162-.4157.2162h-3.375c-.5154 0-.7814-.3492-.931-.6484l-4.7716-8.7452c.2327-.4156 7.4649-13.23408 7.4649-13.23408.1829-.33252.3991-.64841.8978-.64841zM10.1943 7.91799H6.85251c-.21613 0-.38239.08313-.46552.21614-.09975.18288-.0665.33251.01663.5154l2.2611 3.94027-3.55791 6.3012c-.0665.1829-.0665.3824 0 .5154.08313.1496.23276.2327.43227.2327h3.3584c.5154 0 .74816-.3325.93104-.6484 0 0 3.47478-6.1681 3.62438-6.4009L11.142 8.5664c-.1663-.31589-.4323-.64841-.9477-.64841z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Xing;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Instagram: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M25.6051 4.3945C22.67541 1.46476 19.1403 0 14.99951 0S7.32378 1.46486 4.39391 4.3945C1.46424 7.3242-.00061 10.85933-.00061 14.99987s1.46485 7.67574 4.39454 10.60538c2.92969 2.92972 6.4648 4.39458 10.6056 4.39458s7.67572-1.46486 10.60558-4.39458c2.9297-2.92964 4.39454-6.46476 4.39454-10.60538S28.5348 7.32413 25.6051 4.39449zm-1.23745 14.4139c0 1.56243-.53708 2.8808-1.61126 3.955-1.07426 1.0742-2.3926 1.61136-3.95511 1.61136h-7.61715c-1.52343 0-2.81252-.52735-3.8672-1.58204-1.05467-1.0547-1.6211-2.34374-1.69917-3.86715v-7.85156c.03906-1.5234.60546-2.81245 1.69917-3.86715 1.09376-1.05469 2.38277-1.58204 3.8672-1.58204h7.61715c1.56251 0 2.88085.5371 3.95511 1.61136 1.07418 1.0742 1.61126 2.39257 1.61126 3.9551zM18.81568 7.49976h-7.61714c-1.01568 0-1.88477.36132-2.60744 1.084-.72265.72268-1.08401 1.59176-1.08401 2.60742v7.6172c0 1.01558.36133 1.88474 1.084 2.60742.72268.72258 1.59177 1.08392 2.60745 1.08392h7.61714c1.01568 0 1.88477-.36134 2.60744-1.08392.72267-.72268 1.08392-1.59184 1.08392-2.60742v-7.6172c0-.97655-.37108-1.83591-1.11326-2.5781-.74217-.7422-1.6015-1.11332-2.5781-1.11332zm-.12235 11.19256c-.9766.97655-2.12885 1.46477-3.45703 1.46477-1.32809 0-2.48043-.48822-3.45702-1.46477-.9765-.97663-1.46485-2.1289-1.46485-3.45707 0-1.32808.48834-2.48043 1.46485-3.45698.97659-.97663 2.12893-1.46485 3.45702-1.46485 1.32818 0 2.48044.48822 3.45703 1.46485.9766.97655 1.46485 2.1289 1.46485 3.45698 0 1.32817-.48825 2.48044-1.46485 3.45707zm2.05094-7.79465c-.23442.23436-.50783.35154-.82034.35154s-.58592-.11718-.82034-.35154c-.23433-.23444-.3515-.50783-.3515-.82033s.11717-.58598.3515-.82034c.23442-.23435.50784-.35153.82034-.35153s.58592.11718.82034.35153c.23434.23436.3515.50783.3515.82034s-.11716.5859-.3515.82033zm-3.39449 2.22734c-.58592-.58598-1.289-.87897-2.10935-.87897s-1.52343.293-2.10935.87897c-.58592.5859-.87892 1.28905-.87892 2.1093 0 .82033.293 1.5235.87892 2.10938.58592.58598 1.28901.87889 2.10935.87889s1.52343-.2929 2.10935-.87889c.58601-.58589.87893-1.28905.87893-2.10938 0-.82025-.29292-1.5234-.87893-2.1093z\"\n clipRule=\"evenodd\"\n fillRule=\"evenodd\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Instagram;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Youtube: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"43\"\n height=\"30\"\n viewBox=\"0 0 43 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M17.19523 20.52408l11.27986-5.95252-11.27986-6.02397zM21.49983 0c2.61017 0 5.13098.03571 7.56251.10715 2.43154.07142 4.21437.14682 5.34859.22619l1.70128.09523c.01554 0 .14756.0119.39616.03572.2486.0238.42723.04762.53599.07142.10876.02382.29134.05953.54766.10715.25641.04762.4778.11111.66424.19048s.40397.18253.65257.30952c.2486.12698.48937.28174.72243.46428s.4583.39286.67583.63095c.09322.09524.21366.24206.36122.44047.14765.19841.3729.6627.67591 1.39282.30293.73016.50878 1.5317.61754 2.40476.1243 1.0159.22138 2.0992.29135 3.25.06987 1.15082.11262 2.05163.12816 2.70235v4.19049c.01553 2.30161-.1243 4.60314-.4195 6.90476-.10877.87298-.30294 1.66266-.58261 2.36903s-.52827 1.19444-.74579 1.46428l-.32628.40476c-.21752.23806-.44277.44838-.67583.63097-.23306.1825-.47384.3333-.72243.45233s-.46612.21823-.65257.29767c-.18644.07935-.40783.14282-.66424.1904-.25632.04766-.44276.08339-.55925.10718-.11657.02378-.2952.04766-.53608.07145-.24078.02379-.36894.03573-.38448.03573-3.89976.30152-8.77055.45233-14.61202.45233-3.21612-.03177-6.00888-.0833-8.37826-.15476s-3.92688-.13097-4.67267-.17854l-1.14195-.09524-.83899-.09525c-.55932-.07935-.9827-.1587-1.2701-.23815-.28744-.07935-.68362-.24596-1.18856-.49991-.50495-.25404-.94382-.57944-1.31671-.97621-.09323-.09524-.21363-.2421-.36123-.44049-.1476-.19838-.37288-.66266-.67585-1.39282s-.50883-1.53178-.6176-2.40476c-.1243-1.01589-.2214-2.0992-.2913-3.25-.06992-1.15081-.11264-2.05162-.12818-2.70234V13.3809c-.01554-2.30162.12429-4.60315.4195-6.90477.10876-.87302.30296-1.66266.58263-2.36903.27966-.70635.52825-1.19444.74576-1.46427l.32628-.40477c.21752-.23809.4428-.4484.67585-.63094s.47387-.33731.72246-.46429c.24859-.12699.4661-.23016.65255-.30952.18644-.07937.40784-.14286.6642-.19048.25635-.04762.4389-.08333.54767-.10714.10876-.02381.28743-.04762.53602-.07143.24858-.02381.38065-.03571.39619-.03571 3.89976-.28572 8.77046-.42857 14.61202-.42857z\"\n clipRule=\"evenodd\"\n fillRule=\"evenodd\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Youtube;\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","Symbol","iterator","v","op","TypeError","pop","push","__spreadArray","to","from","il","j","__makeTemplateObject","cooked","raw","defineProperty","ScrollDirection","mq","medium","semilarge","large","xlarge","xxlarge","xxxLarge","spacings","nudge","spacer","wrapperSmall","wrapper","wrapperLarge","withRange","range","property","getSizeByRange","styleTextColor","fallbackColor","gradient","css","defaultColors","dark","light","mono","primary","secondary","tertiary","copyBase","family","weight","style","lineHeight","letterSpacing","size","textTransform","color","colorInverted","headingBase","defaultFonts","copy","small","big","copy-i","copy-b","super","heading-1","heading-2","heading-3","heading-4","callout","defaultGlobalSettings","sections","plainSeperation","imageTextGradient","newsDateFormat","newsTimeFormat","newsLocaleKey","getBaseTheme","colors","fonts","types","globalSettings","getColors","theme","getFonts","getGlobalSettings","isBrowser","window","document","checkMq","cmq","checkMqs","matchMedia","matches","getMediaQuery","useMediaQuery","mqs","_a","useState","mediaQuery","setMediaQuery","useEffect","handleResize","newMediaQuery","addEventListener","removeEventListener","useEqualSheetHeight","props","defaultResponsive","responsive","currentMq","itemsPerRow","sheetRefs","setSheetRefs","makeRows","index","arr","slice","resize","refs","identifierSizes","Map","identifiers","set","filter","ref","current","forEach","id","element","querySelector","removeAttribute","prevHeights","get","scrollHeight","key","heights","selector","reduce","rowHeights","highest","sort","vA","vB","x_1","el","setAttribute","setHeights","resizeHandler","Array","listLength","fill","map","createRef","triggerCalculation","setCookie","name","data","_b","days","_c","path","cookieString","valueString","dataKeys","keys","encodeURIComponent","substr","date","Date","setTime","getTime","toUTCString","cookie","getCookie","undefined","b","match","cookieValue","decodeURIComponent","valueArray","split","keyValueArray","cookieData","isNaN","Number","isBoolean","stringToBoolean","deleteCookie","useIE","initialValue","isIE","setIE","msTouchAction","useItemHeight","setElement","height","setHeight","calcHeight","offsetHeight","useScroll","initialTopOffset","onLeftOffset","onEnterOffset","topOffset","setTopOffset","_d","isTop","setIsTop","_e","isInOffset","setIsInOffset","_f","DOWN","scrollDirection","setScrollDirection","lastScrollPos","useRef","handleScroll","pageYOffset","prev","UP","useScrollTo","fallbackScrollDuration","startTime","firstPos","targetPos","setTargetPos","documentElement","scroll","top","left","behavior","animate_1","timestamp","elapsed","easeProgress","toFixed","newPos","scrollTo","cancelAnimationFrame","requestAnimationFrame","scrollTop","canUseWebP","elem","createElement","getContext","toDataURL","usePoster","posterImage","currentImage","setCurrentImage","workingImage","webp","useInterval","callback","delay","savedCallback","id_1","setInterval","clearInterval","useTouch","canTouch","setCanTouch","navigator","maxTouchPoints","msMaxTouchPoints","useImgPreload","imageUrls","isReady","setReady","isLoaded","setLoaded","loadedImages","setLoadedImages","items","requestedImages","img","src","res","Image","onload","url","preloadImages","item","x","find","image","items_1","_i","imgCount","hexToRgba","hex","alpha","rgb","parseInt","assignTo","target","source","output","sourceVal","targetVal","LibThemeProvider","children","combinedBaseTheme","tKey","isArray","sKey","assignFontBase","base","combinedTheme","React","ThemeProvider","View","styled","section","indent","Back","div","bgColor","bgMode","mode","bgValue","getBackground","Section","as","addSeperation","className","useContext","ThemeContext","React.createElement","addPlainSeperation","settings","clampWidth","Wrapper","addWhitespace","Img","Picture","picture","alt","coverSpace","onClick","srcSet","media","loading","BaseStyles","h1","textColor","textGradient","hyphens","type","font","Heading","isInverted","hasShadow","innerHTML","rest","React.useContext","tag","fontSettings","colorGradientInverted","colorGradient","dangerouslySetInnerHTML","__html","defaultProps","Title","colorMode","superTitle","superTitleAs","title","titleAs","isCentered","Copy","columns","isMirrored","Actions","StyledTitle","ContentBlock","StyledActions","Intro","text","primaryAction","secondaryAction","clampTitle","clampText","StyledIntro","ImgContainer","ImgWrapper","Gallery","hasBack","images","array","isFull","currentIndex","newIndex","isNextImgFull","gridSettings","cols","gutter","StyledCol","mediumSpan","span","semilargeSpan","largeSpan","xlargeSpan","mediumMove","move","semilargeMove","largeMove","xlargeMove","StyledGrid","Grid","valign","React.Children","comp","Row","Col","React.Fragment","StyledImage","ImgDescDesktop","ImgDescMobile","InfoWrapper","SubTextBlock","Teaser","intro","subText","getSectionBgMode","description","WideImage","TeaserWide","a","inverted","Pointer","React.forwardRef","isDisabled","disable","href","isExternal","rel","displayName","CursorState","Icon","Label","StyledSection","ListContainer","ItemContainer","ShowMore","itemCount","Items","ActionsWrapper","Item","ListFooter","IconList","showLessText","showMoreText","React.useState","showMore","setShowMore","isVisible","Content","ContentText","Article","asideText","withAsideText","isAside","ImageContainer","ArticleContent","Desc","Feature","ContentContainer","FeatureList","features","featureCount","cardRefs","isHalf","feature","global","LinkHelper","IntroContainer","PromotionCard","clickable","FlexGrid","FlexGridCol","PosterContainer","CrossPromotion","main","aside","card","Poster","hasContent","SVG","svg","Play","iconColor","width","viewBox","xmlns","d","bgImage","isActive","VideoControls","Iframe","iframe","VideoCard","embedId","playIcon","setIsActive","allow","Video","ContactView","Avatar","Info","Address","Decorator","AddressLabel","StyledContactBox","addresses","avatar","address","decorator","NewsletterWrapper","Badge","CallToAction","contact","badge","newsForm","FactsContainer","ul","FactsItem","li","Text","FactList","facts","icon","hasText","Fact","subTitle","FactFill","FactGrid","factCount","fact","TableContainer","TableBody","table","TableHead","th","TableData","td","TableBlock","row","tableTitle","rowTitle","ii","itemText","TableWrapper","Table","tableItems","withSeperation","ArrowLeftGhost","transform","ArrowRightGhost","MapContainer","FylToCtrlContainer","SliderContext","createContext","steps","currentStep","slickSettings","clickSideOffset","goToStep","nextStep","previousStep","isOnFirstStep","isOnLastStep","SlidesView","cursorPath","sameHeight","fullHeight","StyledSlider","SlickSlider","leftMargin","min","max","SlideView","spacing","ControlView","button","DotGroupView","initialStep","slideSpacing","cursorPaths","beforeChange","afterChange","onInit","slideCount","setSlideCount","sliderRef","setSliderRef","setCurrentStep","_g","visibleSlides","setVisibleSlides","_h","setSteps","dots","arrows","infinite","speed","slidesToScroll","slidesToShow","variableWidth","fade","swipe","cBreakpoint","state","breakpoint","itemsPerSlide","Math","floor","slides","Provider","setSlider","intNum","slickGoTo","context","cursor","setCursor","viewRef","setViewRef","mousePos","setMousePos","getCursorPath","NEXT","PREV","handleClick","ev","stopPropagation","isSlideControl","classList","contains","isAnchor","HTMLAnchorElement","parentElement","rect","getBoundingClientRect","relMouseX","Children","count","Consumer","values","onMouseMove","clientX","disabled","stepsArray","setStepsArray","containerRef","onReady","attribution","activeMarkerId","markers","center","zoom","touchZoom","scrollWheelZoom","onlyScrollOnFocus","fitBoundsPadding","onMarkerClick","onFlyToClick","flyToControl","onActiveMarkerChanged","cRef","prevMarkerId","_j","L","setLeaflet","_k","setMap","_l","markersLayer","setMarkersLayer","_m","cElement","mapContainerRef","import","leaflet","map_1","once","enable","tileLayer","addTo","markersLayer_1","FeatureGroup","showAllMarkers","fitBounds","getBounds","padding","point","flyToPosition","position","flyTo","flyToActive","marker","m","clearLayers","markerIcon","iconUrl","iconSize","sizeActive","iconAnchor","anchorActive","anchor","riseOnHover","on","addLayer","markerId","goTo","showAll","CardWrapper","SliderWrapper","InfoCardView","CardHeader","ContactList","ContactListLabel","LocationInfoCard","location","meta","c","Controls","StyledDotGroup","Slider","DotWrapper","Dot","StyledControl","flyToZoom","initialLocation","locations","allMarkersOnInit","controlNext","controlPrev","dot","activeLocation","setActiveLocation","locIndex","findIndex","loc","FieldHead","Field","input","InfoMessage","ErrorMessage","Textfield","lightBg","errorMessage","infoMessage","placeholder","isRequired","tabIndex","ariaHidden","onChange","hasError","required","Area","textarea","Textarea","CheckboxContainer","Original","Box","isSelected","StyledCheck","stroke","Checkbox","checked","FieldsContainer","FlexContainer","HpFieldContainer","ActionWrapper","Form","submitAction","onSubmit","formFields","checkbox","yupValidationSchema","validation","honeypotFieldName","Formik","initialValues","surname","phone","area","mail","check","validate","errors","validationSchema","hpField","getElementsByName","console","warn","obj","handleSubmit","setFieldValue","isValid","dirty","preventDefault","constructor","additionalProps","ArrowLeftRight","fillRule","clipRule","clamp","num","Images","BackgroundImg","ForegroundContainer","hasAnim","initalValue","ForegroundImg","ForegroundOverlay","ImageLabel","ForegroundLabel","BackgroundLabel","ControlContainer","Control","ComparisonSlider","foregroundImg","backgroundImg","foregroundLabel","backgroundLabel","overlayColor","labelColor","dragControl","enableControlAnim","slideValue","setSlideValue","isHolding","setIsHolding","isDragging","setIsDragging","interacted","setInteracted","sideOffset","setSideOffset","controlRef","offsetWidth","handleInitalLoad","observer","IntersectionObserver","entries","isIntersecting","unobserve","rootMargin","threshold","observe","readyState","setCurrentPos","relativeClientX","percentage","currentTarget","onMouseDown","onMouseUp","onMouseLeave","onTouchMove","touches","onTouchStart","onTouchEnd","hasTransition","Head","IntroBlock","TopControls","StyledSlides","Footer","CtrlWrapper","CtrlWrapperLeft","CtrlWrapperRight","CarouselBase","variableWidths","child","ImageCarousel","imageCount","FullWidthImg","StyledWrapper","FeatureCarousel","PromotionCarousel","promotions","promotionCount","promotion","VideoCarousel","videos","videoCount","video","Link","Bdot","IconItemView","StyledLink","SocialList","MainView","topSpace","hAlign","LogoLink","ContactData","SiteLinksView","SiteLink","LinkWrapper","BottomWrapper","BottomView","logo","columnTopSpace","contactData","siteLinks","newsTitle","newsText","socials","bottomLinks","brandIcon","siteLinksColLeft","ceil","siteLinksColRight","link","direction","getBgImage","AnimationContainer","PosterImage","AnimationImage","scale","opacity","AnimationImages","intervalRef","activeImg","setActiveImg","changeImage","setTimeout","backgroundImage","zIndex","HeaderKenBurns","React.useEffect","loadedForMq","useWebp_1","PosterView","HeaderPoster","Callout","PlaceholderImg","AutoplayVideo","HeaderVideo","placeholderImg","videoUrl","isMobile","muted","autoPlay","loop","onCanPlayThrough","header","HeaderWrapper","PosterContent","PosterContentMobile","StyledPoster","Header","sizeScale","primaryCta","secondaryCta","withTopGradient","customTopGradient","customBottomGradient","topGradient","bottomGradient","content","showOnMobile","Seperator","ContentFlex","Author","StyledCopy","NewsAuthorCard","author","Tag","dateFormat","timeFormat","localeKey","dddd","weekDays","_this","long","getDay","DDDD","ddd","short","DDD","dd","DD","MMMM","monthNames","getMonth","mmmm","MMM","mmm","mm","MM","yyyy","getYear","YYYY","yy","YY","hh","getHours","HH","hs","getHours12h","HS","getMinutes","ss","getSeconds","SS","ap","AP","StatusFormatter","placeholders","%DATE%","getFormattedDate","%TIME%","getFormattedTime","replace","foundString","dateReplacements","formattedDate","RegExp","timeReplacements","formattedTime","toString","getDoubleDigitString","getDate","getFullYear","hours","de","en","ImageLink","TitleLink","Main","NewsCard","onTagClick","publishDate","publishedAt","NewsFooter","news","newsCount","setItemsPerRow","visibleRows","setVisibleRows","ImageFlex","NewsImages","imageStyle","isSingleHalf","IntroHead","HeadTag","MetaBlock","NewsIntro","tags","News","NewsList","NewsTable","NewsText","NewsVideo","TagContainer","TagWrapper","List","NewsOverview","activeTag","queryParams","selected","decodeURI","selectedTag","setSelectedTag","targetRef","observerSupported","inital","setObserverSupport","IntersectionObserverEntry","useObserverSupport","setNewPos","entry","disconnect","Button","ButtonGhost","form","InputField","backColor","SubmitBtn","CompactForm","method","action","buttonIcon","onBlur","onFocus","backgroundStyle","ControlBtn","ClearBtn","SearchInput","submitIcon","clearIcon","onClear","hasLeftIcon","hasRightIcon","onKeyDown","keyCode","activateTrackingScripts","scriptElements","querySelectorAll","newScriptElements","newScriptElement","hasAttribute","getAttribute","async","parentNode","removeChild","appendChild","Stage","CookieConsent","cookieName","urlWhitelist","consentAcceptStatusMsg","consentDeclineStatusMsg","noCookieStatusMsg","lifetime","overlayOpacity","_o","setIsVisible","allConsentButtons","len","bindConsentButtons","urlString","whitelist","isInWhiteList","isUrlInWhitelist","pathname","consent","status","allConsentStatusElements","formatter","updatedAt","getFormattedStatus","updateConsentStatusElements","bgOpacity","handleDecline","log","handleAccept","additionalAcceptProps","additionalDeclineProps","CookieIcon","TitleView","CookieTitle","TextView","CookieText","CookieActions","Cross","HeaderCol","LeftCol","CenterCol","RightCol","ToggleContainer","StyledMenuClose","SearchContainer","ScrollArea","NavListView","Nav","nav","Group","GroupLabel","GroupLabelSpacer","NavItem","isSmall","ItemLink","ItemLabel","isOpen","isLarge","toggleIcon","search","onCloseClick","activeNavItem","navGroups","activeGroup","activeItem","group","itemIndex","Backdrop","SocialContainer","Menu","backdropOpacity","navItems","Flyout","MenuBurger","TopWhitespace","logoHeight","showLarge","isBackVisible","allowOffset","Column","StyledMenuBurger","clampValue","TopBar","allowTopOverlow","isLargeOnPageTop","onToggleClick","setIsOpen","setIsLarge","isAnimated","setIsAnimated","defaultLogoScale","pageTopScale","mobile","desktop","scrolledScale","isBarInverted","logoScale","scalePageTop","scaleScrolled","logoTopHeight","animated","Navigation","isMenuInverted","isLargeMenu","isTopbarInverted","allowTopbarOverflow","hideTopbarBackUnderMenu","isTopbarLargeOnPageTop","openMenuIcon","closeMenuIcon","isMenuOpen","setIsMenuOpen","sharedProps","overflow","ArrowRight","CrossSmall","Magnifier","FlyTo","Star","StarGhost","Mail","Phone","Route","Facebook","LinkedIn","Twitter","Xing","Instagram","Youtube"],"mappings":"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"}