@blateral/b.kit 0.10.24-patch.3 → 0.10.24-patch.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.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/useScrollTo.ts","../src/utils/usePoster.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/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/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/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","../src/components/sections/navigation/Navigation.tsx","../src/utils/useObserverSupport.ts","../src/components/sections/carousel/PromotionCarousel.tsx","../src/components/sections/carousel/VideoCarousel.tsx","../src/utils/useImgPreload.ts","../src/utils/useInterval.ts","../src/utils/useItemHeight.ts","../src/utils/useTouch.ts"],"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, 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","// 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 <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 </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?.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\"\n size=\"big\"\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","/* 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 &: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 /* 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 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 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 * 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 while (i--) {\n // create new script element to call it\n const newScriptElement = document.createElement('script');\n newScriptElement.type = 'text/javascript';\n newScriptElement.innerHTML = scriptElements[i].innerHTML;\n\n // append / activate script\n document.body.appendChild(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\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: 0;\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 CloseBtn = styled.button`\n display: block;\n border: none;\n background: none;\n margin-top: ${spacings.nudge}px;\n\n cursor: pointer;\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?: (props: {\n isInverted?: boolean;\n clickHandler?: () => void;\n }) => 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({\n isInverted,\n clickHandler: onCloseClick,\n })\n ) : (\n <CloseBtn\n onClick={onCloseClick}\n aria-haspopup=\"menu\"\n >\n <Cross\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n />\n </CloseBtn>\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?: (props: {\n isInverted?: boolean;\n clickHandler?: () => void;\n }) => 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 MenuBtn = styled.button`\n margin: 0;\n border: 0;\n background: none;\n margin-top: ${spacings.nudge}px;\n\n cursor: pointer;\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?: (props: {\n isInverted?: boolean;\n clickHandler?: () => void;\n }) => 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({\n isInverted: isBarInverted,\n clickHandler: onToggleClick,\n })\n ) : (\n <MenuBtn\n onClick={onToggleClick}\n aria-haspopup=\"menu\"\n >\n <MenuBurger\n iconColor={\n isBarInverted\n ? color(theme).light\n : color(theme).dark\n }\n />\n </MenuBtn>\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 * 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","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?: (props: {\n isInverted?: boolean;\n clickHandler?: () => void;\n }) => React.ReactNode;\n closeMenuIcon?: (props: {\n isInverted?: boolean;\n clickHandler?: () => void;\n }) => 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 toggleIcon={closeMenuIcon}\n onCloseClick={() => setIsMenuOpen(false)}\n {...sharedProps}\n />\n </>\n );\n};\n\nexport default Navigation;\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 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","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","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 { 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 { 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"],"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","useIE","initialValue","isIE","setIE","msTouchAction","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","hexToRgba","hex","alpha","rgb","x","parseInt","assignTo","target","source","output","sourceVal","targetVal","View","styled","section","indent","Back","div","bgColor","bgMode","mode","bgValue","getBackground","Section","as","addSeperation","className","children","useContext","ThemeContext","React.createElement","addPlainSeperation","settings","clampWidth","Wrapper","addWhitespace","Img","img","Picture","picture","Image","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","React","Copy","columns","isMirrored","Actions","StyledTitle","ContentBlock","StyledActions","Intro","text","primaryAction","secondaryAction","clampTitle","clampText","StyledIntro","ImgContainer","ImgWrapper","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","WideImage","a","inverted","Pointer","React.forwardRef","isDisabled","disable","href","isExternal","rel","displayName","CursorState","Icon","Label","StyledSection","ListContainer","ItemContainer","ShowMore","itemCount","Items","ActionsWrapper","Item","ListFooter","Content","ContentText","ImageContainer","ArticleContent","Desc","Feature","description","intro","image","ContentContainer","global","LinkHelper","IntroContainer","PromotionCard","clickable","FlexGrid","FlexGridCol","PosterContainer","SVG","svg","Play","iconColor","width","height","viewBox","xmlns","d","bgImage","isActive","VideoControls","Iframe","iframe","VideoCard","embedId","playIcon","setIsActive","src","allow","ContactView","Avatar","Info","Address","Decorator","AddressLabel","StyledContactBox","addresses","avatar","address","decorator","NewsletterWrapper","Badge","FactsContainer","ul","FactsItem","li","Text","Fact","subTitle","FactFill","TableContainer","TableBody","table","TableHead","th","TableData","td","TableBlock","row","tableTitle","rowTitle","item","ii","itemText","TableWrapper","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","url","attribution","activeMarkerId","markers","center","zoom","touchZoom","scrollWheelZoom","onlyScrollOnFocus","fitBoundsPadding","onMarkerClick","onFlyToClick","flyToControl","onActiveMarkerChanged","cRef","prevMarkerId","_j","L","setLeaflet","_k","setMap","_l","markersLayer","setMarkersLayer","_m","isLoaded","setLoaded","cElement","mapContainerRef","leaflet","map_1","once","enable","tileLayer","addTo","markersLayer_1","FeatureGroup","showAllMarkers","fitBounds","getBounds","padding","point","flyToPosition","position","flyTo","flyToActive","marker","find","m","clearLayers","icon","markerIcon","iconUrl","iconSize","sizeActive","iconAnchor","anchorActive","anchor","riseOnHover","on","addLayer","markerId","goTo","showAll","CardWrapper","SliderWrapper","InfoCardView","CardHeader","ContactList","ContactListLabel","LocationInfoCard","location","meta","contact","c","Controls","StyledDotGroup","Slider","DotWrapper","Dot","StyledControl","FieldHead","Field","input","hasBack","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","ArrowLeftRight","fillRule","clipRule","clamp","num","Images","BackgroundImg","ForegroundContainer","hasAnim","initalValue","ForegroundImg","ForegroundOverlay","ImageLabel","ForegroundLabel","BackgroundLabel","ControlContainer","Control","Head","IntroBlock","TopControls","StyledSlides","Footer","CtrlWrapper","CtrlWrapperLeft","CtrlWrapperRight","CarouselBase","variableWidths","controlNext","controlPrev","dot","child","FullWidthImg","StyledWrapper","Link","Bdot","IconItemView","StyledLink","SocialList","items","MainView","topSpace","hAlign","LogoLink","ContactData","SiteLinksView","SiteLink","LinkWrapper","BottomWrapper","BottomView","getBgImage","AnimationContainer","PosterImage","AnimationImage","scale","opacity","AnimationImages","images","intervalRef","activeImg","setActiveImg","changeImage","setTimeout","clearInterval","setInterval","backgroundImage","zIndex","HeaderKenBurns","React.useState","loadedImages","setLoadedImages","React.useEffect","loadedForMq","useWebp_1","requestedImages","res","onload","items_1","_i","PosterView","HeaderPoster","Callout","PlaceholderImg","AutoplayVideo","video","HeaderVideo","placeholderImg","videoUrl","isMobile","isVisible","muted","autoPlay","loop","onCanPlayThrough","header","HeaderWrapper","PosterContent","PosterContentMobile","StyledPoster","Seperator","ContentFlex","Author","StyledCopy","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","link","publishedAt","ImageFlex","IntroHead","HeadTag","MetaBlock","News","TagContainer","TagWrapper","List","Button","ButtonGhost","form","InputField","backColor","SubmitBtn","ControlBtn","ClearBtn","activateTrackingScripts","scriptElements","querySelectorAll","newScriptElement","appendChild","parentNode","removeChild","Stage","CookieIcon","TitleView","TextView","CookieActions","Cross","Header","HeaderCol","LeftCol","CenterCol","RightCol","ToggleContainer","CloseBtn","SearchContainer","ScrollArea","NavListView","Nav","nav","Group","GroupLabel","GroupLabelSpacer","NavItem","isSmall","ItemLink","ItemLabel","isOpen","isLarge","toggleIcon","logo","search","onCloseClick","clickHandler","activeNavItem","navGroups","activeGroup","activeItem","group","itemIndex","Backdrop","SocialContainer","Menu","backdropOpacity","navItems","socials","Flyout","MenuBurger","TopWhitespace","logoHeight","showLarge","isBackVisible","allowOffset","Column","MenuBtn","clampValue","TopBar","allowTopOverlow","isLargeOnPageTop","onToggleClick","setIsOpen","setIsLarge","isAnimated","setIsAnimated","defaultLogoScale","pageTopScale","mobile","desktop","scrolledScale","isBarInverted","logoScale","scalePageTop","scaleScrolled","logoTopHeight","animated","asideText","getSectionBgMode","withAsideText","isAside","badge","newsForm","method","action","buttonIcon","onSubmit","onBlur","onFocus","backgroundStyle","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","cookieName","urlWhitelist","consentAcceptStatusMsg","consentDeclineStatusMsg","noCookieStatusMsg","lifetime","overlayOpacity","_o","setIsVisible","callback","allConsentButtons","len","bindConsentButtons","urlString","whitelist","isInWhiteList","isUrlInWhitelist","pathname","consent","status","allConsentStatusElements","formatter","updatedAt","getFormattedStatus","updateConsentStatusElements","bgOpacity","handleDecline","console","log","handleAccept","additionalAcceptProps","additionalDeclineProps","main","aside","card","facts","factCount","cardRefs","fact","hasText","features","featureCount","feature","isHalf","columnTopSpace","contactData","siteLinks","newsTitle","newsText","bottomLinks","brandIcon","siteLinksColLeft","ceil","siteLinksColRight","direction","submitAction","formFields","checkbox","yupValidationSchema","validation","Formik","initialValues","surname","phone","area","mail","check","validate","errors","validationSchema","obj","handleSubmit","setFieldValue","isValid","dirty","preventDefault","constructor","additionalProps","array","isFull","currentIndex","newIndex","isNextImgFull","sizeScale","primaryCta","secondaryCta","withTopGradient","customTopGradient","customBottomGradient","topGradient","bottomGradient","content","showOnMobile","showLessText","showMoreText","showMore","setShowMore","imageCount","combinedBaseTheme","tKey","isArray","sKey","assignFontBase","base","combinedTheme","ThemeProvider","flyToZoom","initialLocation","locations","allMarkersOnInit","activeLocation","setActiveLocation","locIndex","findIndex","loc","isMenuInverted","isLargeMenu","isTopbarInverted","allowTopbarOverflow","hideTopbarBackUnderMenu","isTopbarLargeOnPageTop","openMenuIcon","closeMenuIcon","isMenuOpen","setIsMenuOpen","sharedProps","overflow","author","news","newsCount","setItemsPerRow","visibleRows","setVisibleRows","imageStyle","isSingleHalf","tags","activeTag","queryParams","selected","decodeURI","selectedTag","setSelectedTag","targetRef","observerSupported","inital","setObserverSupport","IntersectionObserverEntry","useObserverSupport","setNewPos","entry","disconnect","tableItems","hasContent","promotions","promotionCount","promotion","submitIcon","clearIcon","onClear","hasLeftIcon","hasRightIcon","onKeyDown","keyCode","withSeperation","subText","videos","videoCount","imageUrls","isReady","setReady","preloadImages","imgCount","delay","savedCallback","id_1","setElement","setHeight","calcHeight","offsetHeight","canTouch","setCanTouch","navigator","maxTouchPoints","msMaxTouchPoints"],"mappings":"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"}
1
+ {"version":3,"file":"index.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/useScrollTo.ts","../src/utils/usePoster.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/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/buttons/ButtonGhost.tsx","../src/components/blocks/Slider.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/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/components/buttons/Button.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/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","../src/components/sections/carousel/FeatureCarousel.tsx","../src/components/sections/navigation/Navigation.tsx","../src/utils/useObserverSupport.ts","../src/components/sections/carousel/PromotionCarousel.tsx","../src/components/sections/carousel/VideoCarousel.tsx","../src/utils/useImgPreload.ts","../src/utils/useInterval.ts","../src/utils/useItemHeight.ts","../src/utils/useTouch.ts"],"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}\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 as any);\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, 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","// 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 getColors,\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 markerInverted?: boolean;\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 ul li {\n list-style-type: '+';\n\n padding-inline-start: 1ch;\n\n &::marker {\n color: ${({ theme, markerInverted }) =>\n markerInverted\n ? getColors(theme).secondary.light\n : getColors(theme).primary.dark};\n font-weight: 700;\n }\n }\n\n ${({ size }) =>\n size === 'big' &&\n css`\n ul {\n li + li {\n margin-top: ${spacings.spacer}px;\n }\n }\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 markerDefault?: 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 markerInverted={isInverted}\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\"\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 size=\"big\"\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 * 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 @media ${mq.large} {\n display: flex;\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: block;\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 @media ${mq.large} {\n display: none;\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\"\n size=\"big\"\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 & > * {\n width: 100%;\n }\n`;\n\nconst StyledImage = styled(Image)`\n width: 100%;\n\n @media ${mq.medium} {\n width: auto;\n }\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 {(title || description) && (\n <Content addWhitespace={addWhitespace} isCentered={isCentered}>\n {title && (\n <ContentBlock\n type=\"copy-b\"\n size=\"big\"\n isInverted={isInverted}\n data-sheet=\"title\"\n >\n {title}\n </ContentBlock>\n )}\n {description && (\n <ContentBlock\n size=\"small\"\n isInverted={isInverted}\n data-sheet=\"desc\"\n >\n <Desc\n dangerouslySetInnerHTML={{\n __html: description,\n }}\n />\n </ContentBlock>\n )}\n </Content>\n )}\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<{\n iconColor?: string;\n className?: string;\n ariaHidden?: boolean;\n}> = ({ iconColor = 'currentColor', className, ariaHidden = true }) => (\n <SVG\n viewBox=\"0 0 80 80\"\n width=\"80\"\n height=\"80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden={ariaHidden}\n className={className}\n >\n <g>\n <path\n d=\"M31.925 58.028 55.962 40 31.925 21.972v36.056ZM40 0c11.017 0 20.438 3.912 28.263 11.737C76.088 19.562 80 28.983 80 40c0 11.017-3.912 20.438-11.737 28.263C60.438 76.088 51.017 80 40 80c-11.017 0-20.438-3.912-28.263-11.737C3.912 60.438 0 51.017 0 40c0-11.017 3.912-20.438 11.737-28.263C19.562 3.912 28.983 0 40 0Z\"\n fill={iconColor}\n />\n <path\n d=\"M31.925 58.028 55.962 40 31.925 21.972v36.056Z\"\n fill=\"#fff\"\n />\n </g>\n </SVG>\n);\n\nexport default Play;\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, 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 <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 </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?.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 React, { FC, useState } from 'react';\nimport styled from 'styled-components';\n\nimport { ImageProps } from 'components/blocks/Image';\nimport { mq, getColors as color, spacings } from 'utils/styles';\nimport Play from 'components/base/icons/Play';\nimport Copy from 'components/typography/Copy';\nimport ButtonGhost from 'components/buttons/ButtonGhost';\n\nconst View = styled.div<{\n bgImage?: ImageProps;\n isActive?: boolean;\n onClick?: () => void;\n}>`\n text-align: center;\n\n cursor: ${({ onClick }) => onClick && '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 overflow: hidden;\n\n @media ${mq.medium} {\n text-align: left;\n\n background-image: ${({ bgImage }) =>\n bgImage?.medium && `url(\"${bgImage.medium}\")`};\n }\n\n @media ${mq.semilarge} {\n background-image: ${({ bgImage }) =>\n bgImage?.semilarge && `url(\"${bgImage.semilarge}\")`};\n }\n\n @media ${mq.large} {\n background-image: ${({ bgImage }) =>\n bgImage?.large && `url(\"${bgImage.large}\")`};\n }\n\n @media ${mq.xlarge} {\n background-image: ${({ bgImage }) =>\n bgImage?.xlarge && `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).dark};\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.button`\n display: block;\n border: none;\n background: none;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n color: ${({ theme }) => color(theme).light};\n z-index: 1;\n padding: 0;\n\n cursor: pointer;\n\n & > * {\n opacity: 0.8;\n transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out;\n height: 80px;\n width: 80px;\n\n color: ${({ theme }) => color(theme).dark};\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 &:focus {\n outline: 2px solid ${({ theme }) => color(theme).primary.medium};\n border-radius: 50%;\n opacity: 1;\n\n & > * {\n color: ${({ theme }) => color(theme).primary.medium};\n }\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n box-shadow: none;\n }\n`;\n\nconst ConsentOverlay = styled.div<{ isVisible?: boolean }>`\n display: ${({ isVisible }) => (isVisible ? 'flex' : 'none')};\n justify-content: center;\n align-items: center;\n\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n background-color: rgba(0, 0, 0, 0.6);\n pointer-events: ${({ isVisible }) => (isVisible ? 'all' : 'none')};\n`;\n\nconst ConsentContent = styled.div`\n max-width: 330px;\n text-align: center;\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst ConsentText = styled(Copy)``;\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.ReactNode;\n consentText?: string;\n consentAction?: (props: { handleClick?: () => void }) => React.ReactNode;\n /**\n * Custom handler for play button click\n * @returns true if video should be played\n */\n onPlayClick?: () => Promise<boolean>;\n}\n\nconst VideoCard: FC<VideoCardProps & { className?: string }> = ({\n bgImage,\n embedId,\n playIcon,\n consentText = 'Für die Wiedergabe von Videos muss der Nutzung von Cookies & Daten zugestimmt werden.',\n consentAction,\n onPlayClick,\n className,\n}) => {\n const [isActive, setIsActive] = useState(false);\n const [showConsent, setShowConsent] = useState(false);\n\n const handlePlayClick = async () => {\n let isAccepted = false;\n\n if (onPlayClick) {\n isAccepted = await onPlayClick();\n }\n\n if (isAccepted) {\n setIsActive(true);\n setShowConsent(false);\n } else {\n setShowConsent(true);\n }\n };\n\n const handleConsentActionClick = () => {\n setShowConsent(false);\n };\n\n return (\n <View\n onClick={!showConsent ? handlePlayClick : undefined}\n bgImage={isActive ? undefined : bgImage}\n isActive={isActive}\n className={className}\n >\n {!isActive && !showConsent && (\n <VideoControls>\n {playIcon || <Play iconColor=\"#000\" />}\n </VideoControls>\n )}\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 <ConsentOverlay isVisible={showConsent}>\n <ConsentContent>\n {consentText && (\n <ConsentText isInverted>{consentText}</ConsentText>\n )}\n {consentAction ? (\n consentAction({\n handleClick: handleConsentActionClick,\n })\n ) : (\n <ButtonGhost.View\n as=\"button\"\n isInverted\n onClick={handleConsentActionClick}\n >\n <ButtonGhost.Label>\n Zustimmung ändern\n </ButtonGhost.Label>\n </ButtonGhost.View>\n )}\n </ConsentContent>\n </ConsentOverlay>\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 consentText?: string;\n consentAction?: (props: {\n label: string;\n handleClick?: () => void;\n consentProps: Record<string, string>;\n }) => React.ReactNode;\n /**\n * Custom handler for play button click\n * @returns true if video should be played\n */\n onPlayClick?: () => Promise<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 consentText,\n consentAction,\n onPlayClick,\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 consentText={consentText}\n consentAction={consentAction}\n onPlayClick={onPlayClick}\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 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.div`\n position: relative;\n width: 100%;\n\n @media ${mq.xlarge} {\n padding: 0;\n }\n`;\n\nconst Head = styled.div`\n display: flex;\n flex-direction: row;\n margin-left: 0;\n\n @media ${mq.xlarge} {\n margin-left: auto;\n }\n\n @media ${mq.xxxLarge} {\n margin-left: auto;\n }\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 width: 100%;\n /* max-width: ${spacings.wrapperLarge -\n (spacings.wrapperLarge - spacings.wrapper) / 2}px; */\n max-width: ${spacings.wrapper}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 text-align: 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 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>\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 <StyledSlides>\n {React.Children.map(children, (child, i) => (\n <Slider.Slide key={i}>{child}</Slider.Slide>\n ))}\n </StyledSlides>\n\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';\nimport Wrapper from 'components/base/Wrapper';\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 <Wrapper addWhitespace>\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) => (\n <FullWidthImg key={i} {...img} />\n ))}\n </CarouselBase>\n </Wrapper>\n </Section>\n );\n};\n\nconst FullWidthImg = styled(Image)`\n width: 100%;\n`;\n\nexport default ImageCarousel;\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 &: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 /* 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 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 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 : '#434F55'};\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 : '#434F55')};\n color: ${({ isActive, isInverted, theme }) =>\n isActive &&\n (isInverted ? color(theme).primary.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 : '#434F55')};\n color: ${({ theme, isInverted, onClick }) =>\n onClick &&\n (isInverted ? color(theme).primary.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 consentText?: string;\n consentAction?: (props: {\n label: string;\n handleClick?: () => void;\n consentProps: Record<string, string>;\n }) => React.ReactNode;\n /**\n * Custom handler for play button click\n * @returns true if video should be played\n */\n onPlayClick?: () => Promise<boolean>;\n}> = ({\n bgImage,\n embedId,\n playIcon,\n primaryAction,\n secondaryAction,\n isInverted = false,\n hasBack = false,\n consentText,\n consentAction,\n onPlayClick,\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 consentText={consentText}\n consentAction={consentAction}\n onPlayClick={onPlayClick}\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 * 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 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 while (i--) {\n // create new script element to call it\n const newScriptElement = document.createElement('script');\n newScriptElement.type = 'text/javascript';\n newScriptElement.innerHTML = scriptElements[i].innerHTML;\n\n // append / activate script\n document.body.appendChild(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\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: 0;\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: center;\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 align-self: center;\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 CloseBtn = styled.button`\n display: block;\n border: none;\n background: none;\n margin-top: ${spacings.nudge}px;\n\n cursor: pointer;\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?: (props: {\n isInverted?: boolean;\n clickHandler?: () => void;\n }) => 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({\n isInverted,\n clickHandler: onCloseClick,\n })\n ) : (\n <CloseBtn\n onClick={onCloseClick}\n aria-haspopup=\"menu\"\n >\n <Cross\n iconColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n />\n </CloseBtn>\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?: (props: {\n isInverted?: boolean;\n clickHandler?: () => void;\n }) => 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 align-self: 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 align-self: 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 align-self: 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 MenuBtn = styled.button`\n margin: 0;\n border: 0;\n background: none;\n /* margin-top: ${spacings.nudge}px; */\n\n cursor: pointer;\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?: (props: {\n isInverted?: boolean;\n clickHandler?: () => void;\n }) => 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, 50, 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({\n isInverted: isBarInverted,\n clickHandler: onToggleClick,\n })\n ) : (\n <MenuBtn\n onClick={onToggleClick}\n aria-haspopup=\"menu\"\n >\n <MenuBurger\n iconColor={\n isBarInverted\n ? color(theme).light\n : color(theme).dark\n }\n />\n </MenuBtn>\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 * 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","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 Feature, { FeatureProps } from 'components/blocks/Feature';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport Wrapper from 'components/base/Wrapper';\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 <Wrapper addWhitespace>\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: 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 </Wrapper>\n </Section>\n );\n};\n\nexport default FeatureCarousel;\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?: (props: {\n isInverted?: boolean;\n clickHandler?: () => void;\n }) => React.ReactNode;\n closeMenuIcon?: (props: {\n isInverted?: boolean;\n clickHandler?: () => void;\n }) => 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 toggleIcon={closeMenuIcon}\n onCloseClick={() => setIsMenuOpen(false)}\n {...sharedProps}\n />\n </>\n );\n};\n\nexport default Navigation;\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 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';\nimport Wrapper from 'components/base/Wrapper';\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 <Wrapper addWhitespace>\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 </Wrapper>\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';\nimport Wrapper from 'components/base/Wrapper';\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 <Wrapper addWhitespace>\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) => (\n <VideoCard key={i} {...video} />\n ))}\n </CarouselBase>\n </Wrapper>\n </Section>\n );\n};\n\nexport default VideoCarousel;\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","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 { 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 { 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"],"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","useIE","initialValue","isIE","setIE","msTouchAction","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","hexToRgba","hex","alpha","rgb","x","parseInt","assignTo","target","source","output","sourceVal","targetVal","View","styled","section","indent","Back","div","bgColor","bgMode","mode","bgValue","getBackground","Section","as","addSeperation","className","children","useContext","ThemeContext","React.createElement","addPlainSeperation","settings","clampWidth","Wrapper","addWhitespace","Img","img","Picture","picture","Image","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","React","Copy","columns","markerInverted","isMirrored","Actions","StyledTitle","ContentBlock","StyledActions","Intro","text","primaryAction","secondaryAction","clampTitle","clampText","StyledIntro","ImgContainer","ImgWrapper","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","WideImage","a","inverted","Pointer","React.forwardRef","isDisabled","disable","href","isExternal","rel","displayName","Icon","Label","StyledSection","ListContainer","ItemContainer","ShowMore","itemCount","Items","ActionsWrapper","Item","ListFooter","Content","ContentText","ImageContainer","ArticleContent","Desc","Feature","description","intro","image","ContentContainer","global","LinkHelper","IntroContainer","PromotionCard","clickable","FlexGrid","FlexGridCol","PosterContainer","SVG","svg","Play","iconColor","ariaHidden","viewBox","width","height","xmlns","d","ButtonGhost","CursorState","bgImage","isActive","VideoControls","button","ConsentOverlay","ConsentContent","ConsentText","Iframe","iframe","VideoCard","embedId","playIcon","consentText","consentAction","onPlayClick","setIsActive","showConsent","setShowConsent","handleConsentActionClick","isAccepted","src","allow","isVisible","handleClick","ContactView","Avatar","Info","Address","Decorator","AddressLabel","StyledContactBox","addresses","avatar","address","decorator","NewsletterWrapper","Badge","FactsContainer","ul","FactsItem","li","Text","Fact","subTitle","FactFill","TableContainer","TableBody","table","TableHead","th","TableData","td","TableBlock","row","tableTitle","rowTitle","item","ii","itemText","TableWrapper","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","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","ev","stopPropagation","isSlideControl","classList","contains","isAnchor","HTMLAnchorElement","parentElement","rect","getBoundingClientRect","relMouseX","Children","count","Consumer","values","onMouseMove","clientX","disabled","stepsArray","setStepsArray","containerRef","onReady","url","attribution","activeMarkerId","markers","center","zoom","touchZoom","scrollWheelZoom","onlyScrollOnFocus","fitBoundsPadding","onMarkerClick","onFlyToClick","flyToControl","onActiveMarkerChanged","cRef","prevMarkerId","_j","L","setLeaflet","_k","setMap","_l","markersLayer","setMarkersLayer","_m","isLoaded","setLoaded","cElement","mapContainerRef","leaflet","map_1","once","enable","tileLayer","addTo","markersLayer_1","FeatureGroup","showAllMarkers","fitBounds","getBounds","padding","point","flyToPosition","position","flyTo","flyToActive","marker","find","m","clearLayers","icon","markerIcon","iconUrl","iconSize","sizeActive","iconAnchor","anchorActive","anchor","riseOnHover","on","addLayer","markerId","goTo","showAll","CardWrapper","SliderWrapper","InfoCardView","CardHeader","ContactList","ContactListLabel","LocationInfoCard","location","meta","contact","c","Controls","StyledDotGroup","Slider","DotWrapper","Dot","StyledControl","FieldHead","Field","input","hasBack","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","ArrowLeftRight","fillRule","clipRule","clamp","num","Images","BackgroundImg","ForegroundContainer","hasAnim","initalValue","ForegroundImg","ForegroundOverlay","ImageLabel","ForegroundLabel","BackgroundLabel","ControlContainer","Control","Head","IntroBlock","TopControls","StyledSlides","Footer","CtrlWrapper","CtrlWrapperLeft","CtrlWrapperRight","CarouselBase","variableWidths","controlNext","controlPrev","dot","child","FullWidthImg","Link","Bdot","IconItemView","StyledLink","SocialList","items","MainView","topSpace","hAlign","LogoLink","ContactData","SiteLinksView","SiteLink","LinkWrapper","BottomWrapper","BottomView","getBgImage","AnimationContainer","PosterImage","AnimationImage","scale","opacity","AnimationImages","images","intervalRef","activeImg","setActiveImg","changeImage","setTimeout","clearInterval","setInterval","backgroundImage","zIndex","HeaderKenBurns","React.useState","loadedImages","setLoadedImages","React.useEffect","loadedForMq","useWebp_1","requestedImages","res","onload","items_1","_i","PosterView","HeaderPoster","Callout","PlaceholderImg","AutoplayVideo","video","HeaderVideo","placeholderImg","videoUrl","isMobile","muted","autoPlay","loop","onCanPlayThrough","header","HeaderWrapper","PosterContent","PosterContentMobile","StyledPoster","Seperator","ContentFlex","Author","StyledCopy","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","link","publishedAt","ImageFlex","IntroHead","HeadTag","MetaBlock","News","TagContainer","TagWrapper","List","Button","form","InputField","backColor","SubmitBtn","ControlBtn","ClearBtn","activateTrackingScripts","scriptElements","querySelectorAll","newScriptElement","appendChild","parentNode","removeChild","Stage","CookieIcon","TitleView","TextView","CookieActions","Cross","StyledWrapper","Header","HeaderCol","LeftCol","CenterCol","RightCol","ToggleContainer","CloseBtn","SearchContainer","ScrollArea","NavListView","Nav","nav","Group","GroupLabel","GroupLabelSpacer","NavItem","isSmall","ItemLink","ItemLabel","isOpen","isLarge","toggleIcon","logo","search","onCloseClick","clickHandler","activeNavItem","navGroups","activeGroup","activeItem","group","itemIndex","Backdrop","SocialContainer","Menu","backdropOpacity","navItems","socials","Flyout","MenuBurger","TopWhitespace","logoHeight","showLarge","isBackVisible","allowOffset","Column","MenuBtn","clampValue","TopBar","allowTopOverlow","isLargeOnPageTop","onToggleClick","setIsOpen","setIsLarge","isAnimated","setIsAnimated","defaultLogoScale","pageTopScale","mobile","desktop","scrolledScale","isBarInverted","logoScale","scalePageTop","scaleScrolled","logoTopHeight","animated","asideText","getSectionBgMode","withAsideText","isAside","badge","newsForm","method","action","buttonIcon","onSubmit","onBlur","onFocus","backgroundStyle","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","cookieName","urlWhitelist","consentAcceptStatusMsg","consentDeclineStatusMsg","noCookieStatusMsg","lifetime","overlayOpacity","_o","setIsVisible","callback","allConsentButtons","len","bindConsentButtons","urlString","whitelist","isInWhiteList","isUrlInWhitelist","pathname","consent","status","allConsentStatusElements","formatter","updatedAt","getFormattedStatus","updateConsentStatusElements","bgOpacity","handleDecline","console","log","handleAccept","additionalAcceptProps","additionalDeclineProps","main","aside","card","facts","factCount","cardRefs","fact","hasText","features","featureCount","feature","isHalf","columnTopSpace","contactData","siteLinks","newsTitle","newsText","bottomLinks","brandIcon","siteLinksColLeft","ceil","siteLinksColRight","direction","submitAction","formFields","checkbox","yupValidationSchema","validation","Formik","initialValues","surname","phone","area","mail","check","validate","errors","validationSchema","obj","handleSubmit","setFieldValue","isValid","dirty","preventDefault","constructor","additionalProps","array","isFull","currentIndex","newIndex","isNextImgFull","sizeScale","primaryCta","secondaryCta","withTopGradient","customTopGradient","customBottomGradient","topGradient","bottomGradient","content","showOnMobile","showLessText","showMoreText","showMore","setShowMore","imageCount","combinedBaseTheme","tKey","isArray","sKey","assignFontBase","base","combinedTheme","ThemeProvider","flyToZoom","initialLocation","locations","allMarkersOnInit","activeLocation","setActiveLocation","locIndex","findIndex","loc","isMenuInverted","isLargeMenu","isTopbarInverted","allowTopbarOverflow","hideTopbarBackUnderMenu","isTopbarLargeOnPageTop","openMenuIcon","closeMenuIcon","isMenuOpen","setIsMenuOpen","sharedProps","overflow","author","news","newsCount","setItemsPerRow","visibleRows","setVisibleRows","imageStyle","isSingleHalf","tags","activeTag","queryParams","selected","decodeURI","selectedTag","setSelectedTag","targetRef","observerSupported","inital","setObserverSupport","IntersectionObserverEntry","useObserverSupport","setNewPos","entry","disconnect","tableItems","hasContent","promotions","promotionCount","promotion","submitIcon","clearIcon","onClear","hasLeftIcon","hasRightIcon","onKeyDown","keyCode","withSeperation","subText","videos","videoCount","imageUrls","isReady","setReady","preloadImages","imgCount","delay","savedCallback","id_1","setElement","setHeight","calcHeight","offsetHeight","canTouch","setCanTouch","navigator","maxTouchPoints","msMaxTouchPoints"],"mappings":"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"}