@blateral/b.kit 0.10.24-patch.5 → 0.10.24-patch.7
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/components/typography/Copy.d.ts.map +1 -1
- package/lib/index.es.js +1 -1
- package/lib/index.es.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
package/lib/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../node_modules/tslib/tslib.es6.js","../src/utils/useScroll.ts","../src/utils/styles.ts","../src/utils/useMediaQuery.ts","../src/utils/useEqualSheetHeight.ts","../src/utils/cookie-consent/cookie.ts","../src/utils/useIE.ts","../src/utils/useItemHeight.ts","../src/utils/useScrollTo.ts","../src/utils/usePoster.ts","../src/utils/useInterval.ts","../src/utils/useTouch.ts","../src/utils/useImgPreload.ts","../src/utils/hexRgbConverter.ts","../src/utils/LibThemeProvider.tsx","../src/components/base/Section.tsx","../src/components/base/Wrapper.tsx","../src/components/blocks/Image.tsx","../src/components/typography/Heading.tsx","../src/components/blocks/Title.tsx","../src/components/typography/Copy.tsx","../src/components/blocks/Actions.tsx","../src/components/blocks/Intro.tsx","../src/components/sections/Gallery.tsx","../src/components/base/Grid.tsx","../src/components/sections/Teaser.tsx","../src/components/sections/TeaserWide.tsx","../src/components/buttons/Pointer.tsx","../src/components/blocks/Slider.tsx","../src/components/sections/IconList.tsx","../src/components/sections/Article.tsx","../src/components/blocks/Feature.tsx","../src/components/sections/FeatureList.tsx","../src/components/blocks/PromotionCard.tsx","../src/components/sections/CrossPromotion.tsx","../src/components/sections/Poster.tsx","../src/components/base/icons/Play.tsx","../src/components/blocks/VideoCard.tsx","../src/components/sections/Video.tsx","../src/components/sections/CallToAction.tsx","../src/components/sections/FactList.tsx","../src/components/blocks/Fact.tsx","../src/components/sections/FactGrid.tsx","../src/components/sections/Table.tsx","../src/components/base/icons/ArrowLeftGhost.tsx","../src/components/base/icons/ArrowRightGhost.tsx","../src/components/blocks/LeafletMap.tsx","../src/components/sections/Map.tsx","../src/components/fields/Textfield.tsx","../src/components/fields/Textarea.tsx","../src/components/base/icons/Check.tsx","../src/components/fields/Checkbox.tsx","../src/components/sections/Form.tsx","../src/components/base/icons/ArrowLeftRight.tsx","../src/components/sections/ComparisonSlider.tsx","../src/components/sections/carousel/CarouselBase.tsx","../src/components/sections/carousel/ImageCarousel.tsx","../src/components/sections/carousel/FeatureCarousel.tsx","../src/components/sections/carousel/PromotionCarousel.tsx","../src/components/sections/carousel/VideoCarousel.tsx","../src/components/typography/Link.tsx","../src/components/blocks/Bdot.tsx","../src/components/blocks/SocialList.tsx","../src/components/sections/Footer.tsx","../src/utils/backgroundImage.ts","../src/components/sections/header/HeaderKenBurns.tsx","../src/components/sections/header/HeaderPoster.tsx","../src/components/typography/Callout.tsx","../src/components/sections/header/HeaderVideo.tsx","../src/components/sections/header/Header.tsx","../src/components/sections/news/NewsAuthorCard.tsx","../src/components/blocks/Tag.tsx","../src/utils/statusFormatter.ts","../src/components/blocks/NewsCard.tsx","../src/components/sections/news/NewsFooter.tsx","../src/components/sections/news/NewsImages.tsx","../src/components/sections/news/NewsIntro.tsx","../src/components/sections/news/NewsList.tsx","../src/components/sections/news/NewsTable.tsx","../src/components/sections/news/NewsText.tsx","../src/components/sections/news/NewsVideo.tsx","../src/components/sections/news/NewsOverview.tsx","../src/utils/useObserverSupport.ts","../src/components/buttons/Button.tsx","../src/components/buttons/ButtonGhost.tsx","../src/components/fields/CompactForm.tsx","../src/components/fields/SearchInput.tsx","../src/utils/cookie-consent/mutations.ts","../src/components/blocks/CookieConsent.tsx","../src/components/base/icons/Cross.tsx","../src/components/sections/navigation/menu/Flyout.tsx","../src/components/sections/navigation/menu/Menu.tsx","../src/components/base/icons/MenuBurger.tsx","../src/components/sections/navigation/TopBar.tsx","../src/components/sections/navigation/Navigation.tsx","../src/components/base/icons/ArrowRight.tsx","../src/components/base/icons/CrossSmall.tsx","../src/components/base/icons/Magnifier.tsx","../src/components/base/icons/FlyTo.tsx","../src/components/base/icons/Star.tsx","../src/components/base/icons/StarGhost.tsx","../src/components/base/icons/Mail.tsx","../src/components/base/icons/Phone.tsx","../src/components/base/icons/Route.tsx","../src/components/base/icons/socials/Facebook.tsx","../src/components/base/icons/socials/LinkedIn.tsx","../src/components/base/icons/socials/Twitter.tsx","../src/components/base/icons/socials/Xing.tsx","../src/components/base/icons/socials/Instagram.tsx","../src/components/base/icons/socials/Youtube.tsx"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { useEffect, useRef, useState } from 'react';\n\nexport enum ScrollDirection {\n UP,\n DOWN,\n}\n\nexport const useScroll = ({\n initialTopOffset = 0,\n onLeftOffset,\n onEnterOffset,\n}: {\n initialTopOffset?: number;\n onLeftOffset?: () => void;\n onEnterOffset?: () => void;\n}) => {\n const [topOffset, setTopOffset] = useState<number>(initialTopOffset);\n const [isTop, setIsTop] = useState<boolean>(true);\n const [isInOffset, setIsInOffset] = useState<boolean>(true);\n const [scrollDirection, setScrollDirection] = useState<ScrollDirection>(\n ScrollDirection.DOWN\n );\n const lastScrollPos = useRef<number>(0);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const handleScroll = () => {\n setIsTop(window.pageYOffset <= 1);\n setIsInOffset(window.pageYOffset <= 1 + topOffset);\n\n if (lastScrollPos.current) {\n // check if top offset is left\n if (\n window.pageYOffset > 1 + topOffset &&\n lastScrollPos.current <= 1 + topOffset\n ) {\n onLeftOffset && onLeftOffset();\n }\n\n // check if top offset was joined\n if (\n window.pageYOffset <= 1 + topOffset &&\n lastScrollPos.current > 1 + topOffset\n ) {\n onEnterOffset && onEnterOffset();\n }\n\n setScrollDirection((prev) => {\n if (window.pageYOffset <= 1) return ScrollDirection.DOWN;\n return window.pageYOffset > lastScrollPos.current\n ? ScrollDirection.DOWN\n : window.pageYOffset < lastScrollPos.current\n ? ScrollDirection.UP\n : prev;\n });\n }\n lastScrollPos.current = window.pageYOffset;\n };\n\n handleScroll();\n window.addEventListener('scroll', handleScroll);\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n };\n }, [\n lastScrollPos,\n onLeftOffset,\n onEnterOffset,\n scrollDirection,\n topOffset,\n ]);\n\n return {\n isTop,\n isInOffset,\n scrollDirection,\n setTopOffset,\n topOffset,\n };\n};\n","import { css, DefaultTheme } from 'styled-components';\n\nexport type MediaQueryType =\n | 'small'\n | 'medium'\n | 'semilarge'\n | 'large'\n | 'xlarge'\n | 'xxlarge'\n | 'xxxLarge';\n\nexport const mq: { [key in Exclude<MediaQueryType, 'small'>]: string } = {\n medium: '(min-width: 40em)', // 640 px\n semilarge: '(min-width: 52em)', // 832 px\n large: '(min-width: 64em)', // 1024 px\n xlarge: '(min-width: 90em)', // 1440 px\n xxlarge: '(min-width: 105em)', // 1680 px\n xxxLarge: '(min-width: 150em)', // 2400 px\n};\n\nexport const spacings = {\n nudge: 5,\n spacer: 20,\n wrapperSmall: 1000,\n wrapper: 1440,\n wrapperLarge: 2400,\n};\n\n/***** Range Helper *****/\nexport const getSizeByRange = (range: [number, number]): string =>\n `calc(${range[0]}px + (${range[1]} - ${range[0]}) * ((100vw - 300px) / (${spacings.wrapperLarge} - 320)));`;\n\nexport const withRange = (\n range: [number, number],\n property: string\n): string => {\n if (!property) return '';\n\n return `\n ${property}: ${range[0]}px;\n ${property}: ${getSizeByRange(range)};\n\n @media ${mq.xxlarge} {\n ${property}: ${range[1]}px;\n }\n `;\n};\n\n/**\n * Generate css attributes to style text color with plain color or gradient\n * @param fallbackColor\n * @param gradient\n */\nexport const styleTextColor = (fallbackColor?: string, gradient?: string) => {\n if (gradient) {\n return css`\n color: ${fallbackColor};\n\n @supports (-webkit-text-stroke: thin) {\n padding-top: 2px;\n background: ${gradient};\n background-clip: text;\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n `;\n } else {\n return css`\n color: ${fallbackColor};\n `;\n }\n};\n\n/***** Color Types *****/\ninterface ColorOptions {\n light: string;\n medium: string;\n dark: string;\n}\n\nexport type ColorOptionsType = keyof ColorOptions;\n\nexport interface Colors {\n dark: string;\n light: string;\n mono: ColorOptions;\n primary: ColorOptions;\n secondary: ColorOptions;\n tertiary: ColorOptions;\n}\n\nexport type ColorType = keyof Colors;\n\n/***** Font Types *****/\nexport interface FontProps {\n family: string;\n weight?: string;\n style?: string;\n lineHeight?: string;\n letterSpacing?: string;\n size: [number, number];\n textTransform?: string;\n color?: string;\n colorInverted?: string;\n colorGradient?: string;\n colorGradientInverted?: string;\n}\n\nexport type FontPropsType = keyof FontProps;\n\nexport interface FontOptions {\n small: FontProps;\n medium: FontProps;\n big: FontProps;\n \n}\n\nexport type FontOptionType = keyof FontOptions;\n\nexport interface Fonts {\n copy: FontOptions;\n 'copy-i': FontOptions;\n 'copy-b': FontOptions;\n super: FontProps;\n 'heading-1': FontProps;\n 'heading-2': FontProps;\n 'heading-3': FontProps;\n 'heading-4': FontProps;\n label: FontOptions;\n callout: FontOptions;\n}\n\nexport type FontType = keyof Fonts;\n\n/**\n * Base font styles for all font types\n */\nexport type FontBase = FontProps;\n\n/***** Colors *****/\nconst defaultColors: Colors = {\n dark: '#000000',\n light: '#ffffff',\n mono: {\n light: '#F0F0F0',\n medium: '#C8C8C8',\n dark: '#A5A5A5',\n },\n primary: {\n light: '#DD8AA3',\n medium: '#98012E',\n dark: '#59011B',\n },\n secondary: {\n light: '#5A7384',\n medium: '#35444E',\n dark: '#222A30',\n },\n tertiary: {\n light: '#F2F5FA',\n medium: '#C9CED7',\n dark: '#A8ABB4',\n },\n};\n\n/***** Fonts *****/\nconst copyBase: FontProps = {\n family: 'Roboto',\n weight: '400',\n style: 'normal',\n lineHeight: '1.53',\n letterSpacing: '0',\n size: [10, 13],\n textTransform: '',\n color: defaultColors.dark,\n colorInverted: defaultColors.light,\n};\n\nconst headingBase: FontProps = {\n family: 'Roboto',\n weight: '700',\n style: 'normal',\n lineHeight: '1.1',\n letterSpacing: '0',\n size: [38, 40],\n color: defaultColors.dark,\n colorInverted: defaultColors.light,\n};\n\nconst defaultFonts: Fonts = {\n copy: {\n small: {\n ...copyBase,\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n 'copy-i': {\n small: {\n ...copyBase,\n style: 'italic',\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n style: 'italic',\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n style: 'italic',\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n 'copy-b': {\n small: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n super: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.43',\n size: [14, 16],\n },\n 'heading-1': headingBase,\n 'heading-2': {\n ...headingBase,\n size: [32, 35],\n lineHeight: '1.14',\n },\n 'heading-3': {\n ...headingBase,\n size: [19, 22],\n lineHeight: '1.14',\n },\n 'heading-4': {\n ...headingBase,\n size: [16, 19],\n lineHeight: '1.5',\n },\n label: {\n small: {\n ...copyBase,\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n callout: {\n small: {\n ...headingBase,\n lineHeight: '1.14',\n size: [33, 35],\n },\n medium: {\n ...headingBase,\n lineHeight: '1.18',\n size: [50, 55],\n },\n big: {\n ...headingBase,\n lineHeight: '1.18',\n size: [60, 62],\n },\n },\n};\n\n/***** Global Settings *****/\nexport interface GlobalSettings {\n sections: {\n /** Add seperation around sections with background attribute 'plain' (e.g. Teaser) */\n plainSeperation: boolean;\n /** Customnize gradient for all text on image background gradients */\n imageTextGradient: string;\n /** Date and Time Formats for all news sections */\n newsDateFormat: string;\n newsTimeFormat: string;\n newsLocaleKey: 'de' | 'en';\n };\n}\n\nconst defaultGlobalSettings: GlobalSettings = {\n sections: {\n plainSeperation: false,\n imageTextGradient: `\n linear-gradient(\n 0deg,\n rgba(0, 0, 0, 0.6) 0%,\n rgba(0, 0, 0, 0.4) 30%,\n rgba(0, 0, 0, 0.1) 60%,\n rgba(0, 0, 0, 0) 100%\n );\n `,\n newsDateFormat: 'dd/mm/yy',\n newsTimeFormat: 'hh:mm',\n newsLocaleKey: 'en',\n },\n};\n\n/***** Theme Helper *****/\nexport const getBaseTheme = () => {\n return {\n colors: { ...defaultColors },\n fonts: { types: { ...defaultFonts } },\n globalSettings: { ...defaultGlobalSettings },\n } as DefaultTheme;\n};\n\nexport const getTheme = (theme?: DefaultTheme) => {\n return (\n (theme && theme.colors && theme.fonts && theme.globalSettings) ||\n getBaseTheme()\n );\n};\n\nexport const getColors = (theme?: DefaultTheme) => {\n return theme && theme.colors ? theme.colors : getBaseTheme().colors;\n};\n\nexport const getFonts = (theme?: DefaultTheme) => {\n return theme && theme.fonts?.types\n ? theme.fonts.types\n : getBaseTheme().fonts.types;\n};\n\nexport const getGlobalSettings = (theme?: DefaultTheme) => {\n return theme && theme.globalSettings\n ? theme.globalSettings\n : getBaseTheme().globalSettings;\n};\n","import { useEffect, useState } from 'react';\nimport { MediaQueryType, mq } from './styles';\n\nexport const isBrowser =\n typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\n// *****************\n// useBreakpoint\n// *****************\nconst checkMq = (cmq: MediaQueryType, checkMqs: MediaQueryType[]) => {\n return (\n isBrowser &&\n (checkMqs.length <= 0 || checkMqs.indexOf(cmq) > -1) &&\n (cmq !== 'small' ? window.matchMedia(mq[cmq]).matches : true)\n );\n};\n\nexport const getMediaQuery = (checkMqs: MediaQueryType[]): MediaQueryType => {\n if (checkMq('xxxLarge', checkMqs)) {\n return 'xxxLarge';\n } else if (checkMq('xxlarge', checkMqs)) {\n return 'xxlarge';\n } else if (checkMq('xlarge', checkMqs)) {\n return 'xlarge';\n } else if (checkMq('large', checkMqs)) {\n return 'large';\n } else if (checkMq('semilarge', checkMqs)) {\n return 'semilarge';\n } else if (checkMq('medium', checkMqs)) {\n return 'medium';\n } else {\n return 'small';\n }\n};\n\nexport const useMediaQuery = (mqs?: MediaQueryType[]) => {\n const checkMqs = mqs || [];\n const [mediaQuery, setMediaQuery] = useState<MediaQueryType | undefined>();\n\n useEffect(() => {\n const handleResize = () => {\n const newMediaQuery = getMediaQuery(checkMqs);\n\n if (newMediaQuery !== mediaQuery) {\n setMediaQuery(newMediaQuery);\n }\n };\n\n window.addEventListener('resize', handleResize);\n setMediaQuery(getMediaQuery(checkMqs));\n\n return () => window.removeEventListener('resize', handleResize);\n }, [checkMqs, mediaQuery]);\n\n return mediaQuery;\n};\n","import { useEffect, useState, MutableRefObject, createRef } from 'react';\nimport { useMediaQuery } from './useMediaQuery';\n\ninterface ItemsPerRow {\n small?: number;\n medium?: number;\n semilarge?: number;\n large?: number;\n xlarge?: number;\n}\n\ntype Mq = keyof ItemsPerRow;\n\n// ********************\n// useEqualSheetHeight\n// ********************\n\nexport const useEqualSheetHeight = (props: {\n listLength: number;\n identifiers: string[];\n responsive?: ItemsPerRow;\n}) => {\n const defaultResponsive = {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: 3,\n xlarge: 3,\n ...props.responsive,\n };\n const mqs: Mq[] = ['small', 'medium', 'semilarge', 'large', 'xlarge'];\n const currentMq = useMediaQuery(mqs) as Mq | undefined;\n const itemsPerRow = currentMq\n ? defaultResponsive[currentMq]\n : defaultResponsive.small;\n\n const [sheetRefs, setSheetRefs] = useState<\n MutableRefObject<HTMLDivElement>[]\n >([]);\n\n const makeRows = (\n result: Array<number>[],\n _: number,\n index: number,\n arr: number[]\n ) => {\n // make new row after 3 items\n if (index % itemsPerRow === 0)\n result.push(arr.slice(index, index + itemsPerRow) as Array<number>);\n return result;\n };\n\n const setHeights = (\n heights: (number | null)[],\n selector: string,\n refs: MutableRefObject<HTMLDivElement>[]\n ) => {\n const x = heights.reduce(makeRows, []);\n\n x.forEach((rowHeights, y) => {\n const highest = rowHeights.slice().sort((vA, vB) => {\n if (vA && vB) {\n if (vA > vB) return -1;\n return 1;\n } else return 0;\n })[0];\n\n // set height of all items in row to the highest value\n if (rowHeights.length > 1 && highest) {\n for (let x = 0; x < rowHeights.length; x++) {\n const index = x + y * itemsPerRow;\n const el = refs[index].current.querySelector(selector);\n\n if (el) {\n el.setAttribute('style', `height: ${highest}px`);\n }\n }\n }\n });\n };\n\n const resize = (refs: MutableRefObject<HTMLDivElement>[]) => () => {\n const identifierSizes = new Map<string, Array<number | null>>();\n\n // create identifier map\n for (let i = 0; i < props.identifiers.length; i++) {\n identifierSizes.set(props.identifiers[i], []);\n }\n\n // set height values\n refs.filter((ref) => ref.current).forEach(({ current }) => {\n // get height for each element\n props.identifiers.forEach((id) => {\n const element = current.querySelector(id);\n element?.removeAttribute('style');\n\n const prevHeights = identifierSizes.get(id);\n if (prevHeights)\n identifierSizes.set(id, [\n ...prevHeights,\n element ? element.scrollHeight : null,\n ]);\n });\n });\n\n // set heights for each identifier\n identifierSizes.forEach((value, key) => {\n setHeights(value, key, refs);\n });\n };\n\n useEffect(() => {\n const resizeHandler = resize(sheetRefs);\n resizeHandler();\n\n window.addEventListener('resize', resizeHandler);\n\n return () => {\n window.removeEventListener('resize', resizeHandler);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sheetRefs, currentMq]);\n\n const triggerCalculation = () => {\n setSheetRefs(() =>\n Array(props.listLength)\n .fill(null)\n .map((_, i) => sheetRefs[i] || createRef())\n );\n };\n\n useEffect(() => {\n setSheetRefs(() =>\n Array(props.listLength)\n .fill(null)\n .map((_, i) => sheetRefs[i] || createRef())\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.listLength]);\n\n return {\n sheetRefs,\n triggerCalculation,\n };\n};\n","export interface Cookie<T> {\n name: string;\n data: T;\n}\n\nexport const setCookie = <T>({\n name,\n data,\n days = -1,\n path = '/',\n}: {\n name: string;\n data: T;\n days?: number;\n path?: string;\n}) => {\n let cookieString = `${name}=`;\n\n // set cookie value\n let valueString = '';\n const dataKeys = Object.keys(data);\n for (let i = 0; i < dataKeys.length; i++) {\n valueString += `${dataKeys[i]}:${data[dataKeys[i]]}|`;\n }\n\n cookieString += encodeURIComponent(\n valueString.substr(0, valueString.length - 1)\n );\n\n // specify path\n cookieString += `; path=${path};`;\n\n // check if cookie should have lifetime\n if (days >= 0) {\n const date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n cookieString += ` expires=${date.toUTCString()};`;\n }\n document.cookie = cookieString;\n};\n\nexport const getCookie = <T>(name: string): Cookie<T> | undefined => {\n let cookie = undefined;\n\n // get cookie value\n const b = document.cookie.match('(^|;)\\\\s*' + name + '\\\\s*=\\\\s*([^;]+)');\n let cookieValue = b ? b.pop() : '';\n cookieValue = cookieValue ? decodeURIComponent(cookieValue) : '';\n\n if (cookieValue) {\n const valueArray = cookieValue.split('|').map((el) => {\n const keyValueArray = el.split(':');\n return {\n key: keyValueArray[0],\n value: keyValueArray[1],\n };\n });\n\n const cookieData: { [k: string]: any } = {};\n for (let i = 0; i < valueArray.length; i++) {\n const value: any = valueArray[i].value;\n\n // checking for right types\n if (!isNaN(Number(value)))\n cookieData[valueArray[i].key] = Number(value) as number;\n else if (isBoolean(value))\n cookieData[valueArray[i].key] = stringToBoolean(\n value\n ) as boolean;\n else cookieData[valueArray[i].key] = value as string;\n }\n\n cookie = {\n name: name,\n data: cookieData as T,\n } as Cookie<T>;\n }\n return cookie;\n};\n\nexport const deleteCookie = (name: string) => {\n setCookie<any>({ name, data: {} });\n};\n\nconst stringToBoolean = (value: string | number | boolean) => {\n return [true, 'true', 'True', 'TRUE', '1', 1].indexOf(value) > -1;\n};\n\nconst isBoolean = (value: string | number | boolean) => {\n return value === 'true' || value === 'false';\n};\n\nconst isNaN = (value: number) => {\n if (Number.isNaN !== undefined) return Number.isNaN(value);\n else return value !== value;\n};\n","import { useState, useEffect } from 'react';\n\nconst useIE = (initialValue?: boolean) => {\n const [isIE, setIE] = useState(initialValue || false);\n\n useEffect(() => {\n setIE((document.body.style as any).msTouchAction !== undefined);\n }, []);\n return isIE;\n};\n\nexport default useIE;\n","import { useEffect, useState } from 'react';\n\nexport const useItemHeight = () => {\n const [element, setElement] = useState<HTMLElement | null>(null);\n const [height, setHeight] = useState<number>(0);\n\n useEffect(() => {\n const calcHeight = () => {\n if (element) setHeight(element.offsetHeight);\n };\n\n if (element) {\n calcHeight();\n window.addEventListener('resize', calcHeight);\n }\n\n return () => {\n window.removeEventListener('resize', calcHeight);\n };\n }, [element]);\n\n return {\n setElement,\n height,\n };\n};\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useScrollTo = (fallbackScrollDuration: number) => {\n const startTime = useRef<number>(-1);\n const firstPos = useRef<number>(0);\n const [targetPos, setTargetPos] = useState<number | undefined>(undefined);\n\n const outQuad = (n: number) => {\n return n * (2 - n);\n };\n\n useEffect(() => {\n if (targetPos === undefined) return;\n if ('scrollBehavior' in document.documentElement.style) {\n window.scroll({\n top: targetPos,\n left: 0,\n behavior: 'smooth',\n });\n setTargetPos(undefined);\n } else {\n const animate = (timestamp: number) => {\n if (startTime.current === -1) {\n startTime.current = timestamp || new Date().getTime();\n }\n\n const elapsed = timestamp - startTime.current;\n const progress = elapsed / fallbackScrollDuration;\n const easeProgress = +outQuad(progress).toFixed(2);\n\n const newPos =\n targetPos === 0\n ? firstPos.current - firstPos.current * easeProgress\n : firstPos.current + targetPos * easeProgress;\n\n // scroll to new position\n window.scrollTo(0, newPos);\n\n if (\n (targetPos > 0 && newPos >= firstPos.current + targetPos) ||\n (targetPos < 0 && newPos <= firstPos.current + targetPos) ||\n (targetPos === 0 && newPos <= 0)\n ) {\n cancelAnimationFrame(startTime.current);\n startTime.current = -1;\n setTargetPos(undefined);\n } else {\n window.requestAnimationFrame(animate);\n }\n };\n\n cancelAnimationFrame(startTime.current);\n startTime.current = -1;\n firstPos.current =\n window.pageYOffset || document.documentElement.scrollTop;\n window.requestAnimationFrame(animate);\n }\n }, [targetPos, fallbackScrollDuration]);\n\n return setTargetPos;\n};\n","import { useEffect, useState } from 'react';\nimport { isBrowser, useMediaQuery } from './useMediaQuery';\n\n// *****************\n// usePoster\n// *****************\n\ninterface PosterImage {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n}\n\nexport const canUseWebP = () => {\n if (!isBrowser) return false;\n\n const elem = document.createElement('canvas');\n\n if (!(elem.getContext && elem.getContext('2d'))) {\n // was able or not to get WebP representation\n return elem.toDataURL('image/webp').indexOf('data:image/webp') == 0;\n }\n\n // very old browser like IE 8, canvas not supported\n return false;\n};\n\nexport type PosterMq = 'small' | 'medium' | 'semilarge' | 'large' | 'xlarge';\n\nexport const usePoster = (\n posterImage: PosterImage & {\n webp?: PosterImage;\n },\n mqs?: PosterMq[]\n) => {\n const [currentImage, setCurrentImage] = useState<string | undefined>();\n\n const workingImage =\n posterImage.webp && canUseWebP() ? posterImage.webp : posterImage;\n const currentMq = useMediaQuery(\n mqs || ['small', 'medium', 'semilarge', 'large', 'xlarge']\n ) as PosterMq | undefined;\n\n useEffect(() => {\n if (\n currentMq &&\n workingImage[currentMq] &&\n workingImage[currentMq] !== currentImage\n ) {\n setCurrentImage(workingImage[currentMq]);\n }\n }, [currentImage, currentMq, workingImage]);\n\n return currentImage;\n};\n","import { useEffect, useRef } from 'react';\n\nexport default function useInterval(callback: any, delay?: number) {\n const savedCallback: any = useRef();\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n useEffect(() => {\n function tick() {\n savedCallback.current();\n }\n if (delay !== null) {\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n}\n","import { useState, useEffect } from 'react';\n\nconst useTouch = () => {\n const [canTouch, setCanTouch] = useState(false);\n\n useEffect(() => {\n setCanTouch(\n 'ontouchstart' in window ||\n navigator.maxTouchPoints > 0 ||\n navigator.msMaxTouchPoints > 0\n );\n }, []);\n return canTouch;\n};\n\nexport default useTouch;\n","import { ImageProps } from 'components/blocks/Image';\nimport { useEffect, useState } from 'react';\nimport { MediaQueryType } from './styles';\nimport { useMediaQuery } from './useMediaQuery';\n\nexport const useImgPreload = (\n imageUrls: ImageProps[],\n mqs: MediaQueryType[] = ['semilarge', 'large']\n) => {\n const [isReady, setReady] = useState(false);\n const [isLoaded, setLoaded] = useState(false);\n const currentMq = useMediaQuery(mqs as MediaQueryType[]);\n const [loadedImages, setLoadedImages] = useState<{\n [key: string]: { id: number | string; image: string }[];\n }>({\n small: [],\n medium: [],\n semilarge: [],\n large: [],\n xlarge: [],\n xxlarge: [],\n xxxLarge: [],\n });\n\n const preloadImages = (imageUrls: (string | undefined)[]) => {\n const images = (imageUrls.filter((img) => img) as string[]).map(\n (src, i) => {\n return new Promise((res) => {\n const img = new window.Image();\n img.src = src;\n img.onload = () => res({ url: src, i });\n });\n }\n );\n\n return images;\n };\n\n useEffect(() => {\n if (isReady && loadedImages && currentMq) {\n const loadedForMq = loadedImages[currentMq];\n\n if (loadedForMq.length < imageUrls.length && imageUrls.length > 0) {\n const requestedImages = imageUrls.map((img) => img[currentMq]);\n\n const resolve = async (items: any) => {\n for (const item of items) {\n const x = await item;\n\n setLoadedImages((prev) => {\n // check if image id already exists in array\n if (!prev[currentMq].find((e) => e.id === x.i)) {\n return {\n ...prev,\n [currentMq]: [\n ...prev[currentMq],\n {\n id: x.i,\n image: x.url,\n },\n ],\n };\n } else return prev;\n });\n }\n };\n\n resolve(preloadImages(requestedImages));\n }\n }\n }, [currentMq, imageUrls, isReady, loadedImages]);\n\n useEffect(() => {\n if (loadedImages && currentMq) {\n const imgCount = imageUrls.filter((img) => img[currentMq]).length;\n setLoaded(loadedImages[currentMq].length >= imgCount);\n }\n }, [currentMq, imageUrls, loadedImages]);\n\n return {\n loadedImages: currentMq && loadedImages[currentMq],\n isLoaded,\n setReady,\n };\n};\n","// converting 6 character hex color code to rgba string\nexport const hexToRgba = (hex: string, alpha = 1) => {\n const rgb = hex.match(/\\w\\w/g)?.map((x) => parseInt(x, 16));\n return rgb && `rgba(${rgb[0]},${rgb[1]},${rgb[2]},${alpha})`;\n};\n","import React, { FC } from 'react';\nimport { DefaultTheme, ThemeProvider } from 'styled-components';\n\nimport { FontBase, getBaseTheme } from 'utils/styles';\n\ntype RecursivePartial<T> = {\n [P in keyof T]?: RecursivePartial<T[P]>;\n};\n\nexport type Theme = RecursivePartial<DefaultTheme>;\n\n/**\n * Assigning font base key values to theme. Searches for each font base object key inside target theme object and replacing the values\n * @param target Combined result object\n * @param source FontBase object with properties that should by overritten.\n */\nconst assignFontBase = (\n target: DefaultTheme,\n source?: RecursivePartial<FontBase>\n) => {\n if (!source) return target;\n // deep iterate through target and search matching key\n const assign = (target: any, key: string, value: string) => {\n Object.keys(target).forEach((tKey) => {\n // check if target value is an object and no array\n if (\n target[tKey] &&\n typeof target[tKey] === 'object' &&\n !Array.isArray(target[tKey])\n ) {\n target[tKey] = assign(target[tKey], key, value);\n } else if (key === tKey) {\n target[tKey] = value;\n }\n });\n return target;\n };\n\n // search each base key and replace values\n Object.keys(source).forEach((sKey) => {\n if (source[sKey])\n target.fonts.types = assign(target.fonts.types, sKey, source[sKey]);\n });\n return target;\n};\n\n/**\n * Comnbining Theme objects\n * @param target Result theme object\n * @param source Theme object that should be assigned to target\n */\nconst assignTo = (target: DefaultTheme, source: Theme) => {\n const output = { ...target };\n\n Object.keys(source).forEach((key) => {\n const sourceVal = source[key];\n const targetVal = target[key];\n output[key] =\n targetVal &&\n sourceVal &&\n typeof targetVal === 'object' &&\n typeof sourceVal === 'object'\n ? assignTo(targetVal, sourceVal)\n : sourceVal;\n });\n return output;\n};\n\nexport const LibThemeProvider: FC<{\n theme: Theme;\n}> = ({ theme, children }) => {\n const combinedBaseTheme = assignFontBase(getBaseTheme(), theme.fonts?.base);\n const combinedTheme = assignTo(combinedBaseTheme, theme);\n return <ThemeProvider theme={combinedTheme}>{children}</ThemeProvider>;\n};\n","import * as React from 'react';\nimport { useContext } from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as settings,\n} from 'utils/styles';\n\nexport type BgMode =\n | 'full'\n | 'half-left'\n | 'half-right'\n | 'larger-left'\n | 'larger-right';\n\nconst getBackground = (mode: BgMode, bgColor: string) => {\n let bgValue = undefined;\n\n switch (mode) {\n case 'full':\n bgValue = bgColor;\n break;\n\n case 'half-left':\n bgValue = `linear-gradient(to left, transparent 50%, ${bgColor} 50%)`;\n break;\n\n case 'half-right':\n bgValue = `linear-gradient(to right, transparent 50%, ${bgColor} 50%)`;\n break;\n\n case 'larger-left':\n bgValue = `linear-gradient(to left, transparent 40%, ${bgColor} 40%)`;\n break;\n\n case 'larger-right':\n bgValue = `linear-gradient(to right, transparent 40%, ${bgColor} 40%)`;\n break;\n }\n return bgValue;\n};\n\nconst View = styled.section<{\n indent: string;\n addSeperation?: boolean;\n addPlainSeperation?: boolean;\n}>`\n position: relative;\n overflow: hidden;\n\n ${({ addSeperation }) =>\n addSeperation &&\n withRange([spacings.spacer * 2, spacings.spacer * 4], 'padding-top')}\n ${({ addSeperation }) =>\n addSeperation &&\n withRange([spacings.spacer * 2, spacings.spacer * 4], 'padding-bottom')}\n\n ${({ indent }) =>\n indent !== 'plain' &&\n css`\n &[data-ident='${indent}'] + &[data-ident='${indent}'] {\n padding-top: 0;\n }\n `}\n\n ${({ indent, addPlainSeperation }) =>\n addPlainSeperation &&\n indent &&\n css`\n &[data-ident='plain'] {\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4],\n 'margin-top'\n )}\n }\n\n &[data-ident='plain'] + & {\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4],\n 'margin-top'\n )}\n }\n\n &[data-ident='plain'] + &[data-ident='transparent'] {\n margin-top: 0;\n }\n\n &[data-ident='transparent'] + &[data-ident='plain'] {\n margin-top: 0;\n }\n `}\n`;\n\nconst Back = styled.div<{\n bgColor?: string;\n bgMode?: BgMode;\n}>`\n display: ${({ bgColor, bgMode }) => (bgColor && bgMode ? 'block' : 'none')};\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n max-width: ${({ bgMode }) =>\n (bgMode === 'full' ? spacings.wrapperLarge : spacings.wrapper) + 'px'};\n\n background: ${({ bgColor }) => bgColor || undefined};\n\n margin: 0 auto;\n\n @media ${mq.semilarge} {\n background: ${({ bgColor, bgMode }) =>\n bgColor && bgMode && bgMode !== 'full'\n ? getBackground(bgMode, bgColor)\n : undefined};\n }\n\n @media ${mq.xlarge} {\n :before {\n content: ${({ bgMode }) =>\n bgMode === 'half-left' || bgMode === 'larger-left'\n ? `\"\"`\n : undefined};\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: ${(spacings.wrapperLarge - spacings.wrapper) / 2}px;\n background-color: ${({ bgColor }) => bgColor && bgColor};\n\n transform: translateX(-100%);\n }\n\n :after {\n content: ${({ bgMode }) =>\n bgMode === 'half-right' || bgMode === 'larger-right'\n ? `\"\"`\n : undefined};\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: ${(spacings.wrapperLarge - spacings.wrapper) / 2}px;\n background-color: ${({ bgColor }) => bgColor && bgColor};\n\n transform: translateX(100%);\n }\n }\n`;\n\nconst Section: React.FC<{\n as?: 'header' | 'footer';\n bgColor?: string;\n bgMode?: BgMode;\n addSeperation?: boolean;\n className?: string;\n}> = ({\n as,\n bgColor,\n bgMode = 'full',\n addSeperation = false,\n className,\n children,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <View\n as={as}\n data-ident={bgColor && bgMode === 'full' ? bgColor : 'plain'}\n indent={bgColor && bgMode === 'full' ? bgColor : 'plain'}\n addSeperation={addSeperation}\n addPlainSeperation={settings(theme).sections.plainSeperation}\n className={className}\n >\n {bgColor && bgMode && <Back bgColor={bgColor} bgMode={bgMode} />}\n {children}\n </View>\n );\n};\n\nexport default Section;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings } from 'utils/styles';\n\nexport type ClampWidthType = 'small' | 'normal' | 'large';\n\nconst View = styled.div<{\n clampWidth?: ClampWidthType;\n addWhitespace?: boolean;\n}>`\n position: relative;\n width: 100%;\n max-width: ${({ clampWidth }) =>\n clampWidth === 'large'\n ? spacings.wrapperLarge\n : clampWidth === 'small'\n ? spacings.wrapperSmall\n : spacings.wrapper}px;\n margin-left: auto;\n margin-right: auto;\n padding: 0\n ${({ addWhitespace }) => (addWhitespace ? spacings.nudge * 2 : 0)}px;\n\n @media ${mq.medium} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n\n @media ${mq.semilarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * 100 : 0}%;\n padding-left: ${({ addWhitespace }) =>\n addWhitespace\n ? `\n max(\n ${spacings.spacer}px,\n ${(1 / 28) * 100}%\n );\n `\n : 0};\n\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * spacings.wrapper : 0}px;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n`;\n\nconst Wrapper: React.FC<{\n addWhitespace?: boolean;\n clampWidth?: ClampWidthType;\n className?: string;\n}> = ({\n addWhitespace = false,\n clampWidth = 'normal',\n className,\n children,\n}) => {\n return (\n <View\n className={className}\n addWhitespace={addWhitespace}\n clampWidth={clampWidth}\n >\n {children}\n </View>\n );\n};\n\nexport default Wrapper;\n","import * as React from 'react';\nimport styled, { css } from 'styled-components';\nimport { mq } from 'utils/styles';\n\nexport interface ImageProps {\n alt?: string;\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n coverSpace?: boolean;\n}\n\nconst Img = styled.img<{ coverSpace?: boolean }>`\n max-width: 100%;\n display: block;\n align-self: flex-start;\n ${({ coverSpace }) =>\n coverSpace &&\n css`\n width: 100%;\n object-fit: cover;\n object-position: center;\n `}\n`;\n\nconst Picture = styled.picture<{ coverSpace?: boolean }>`\n ${({ coverSpace }) =>\n coverSpace &&\n `\n display: flex;\n height: 100%;\n width: 100%;\n`}\n`;\n\nconst Image: React.FC<\n { className?: string; onClick?: () => void } & ImageProps\n> = ({\n className,\n small,\n medium,\n semilarge,\n large,\n xlarge,\n alt,\n coverSpace,\n onClick,\n}) => {\n return (\n <Picture coverSpace={coverSpace} onClick={onClick}>\n {xlarge && <source srcSet={xlarge} media={mq.xlarge} />}\n {large && <source srcSet={large} media={mq.large} />}\n {semilarge && <source srcSet={semilarge} media={mq.semilarge} />}\n {medium && <source srcSet={medium} media={mq.medium} />}\n <Img\n srcSet={small}\n alt={alt || ''}\n coverSpace={coverSpace}\n loading=\"lazy\"\n className={className}\n />\n </Picture>\n );\n};\n\nexport default Image;\n","import * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n styleTextColor,\n FontType,\n getFonts as font,\n mq,\n withRange,\n} from 'utils/styles';\n\ntype HeadingType = Exclude<\n FontType,\n 'copy' | 'copy-i' | 'copy-b' | 'label' | 'callout'\n>;\n\n// Styles\nconst BaseStyles = styled.h1<{\n hyphens?: boolean;\n hasShadow?: boolean;\n textColor?: string;\n textGradient?: string;\n type: HeadingType;\n}>`\n display: inline-block;\n margin: 0;\n padding: 0;\n ${({ textColor, textGradient }) => styleTextColor(textColor, textGradient)}\n\n hyphens: auto;\n /* overflow-wrap: break-word; */\n\n ${(props: { hyphens?: boolean }) =>\n !props.hyphens &&\n css`\n @media ${mq.large} {\n hyphens: none;\n }\n `}\n\n text-shadow: ${({ hasShadow }) =>\n hasShadow && '1px 2px 8px rgba(0, 0, 0, 0.25)'};\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin: 0;\n padding: 0;\n border: 0;\n outline: 0;\n font-weight: inherit;\n font-style: inherit;\n font-size: 100%;\n font-family: inherit;\n vertical-align: baseline;\n }\n`;\n\nconst View = styled(BaseStyles)`\n font-family: ${({ type, theme }) => font(theme)[type].family};\n font-weight: ${({ type, theme }) => font(theme)[type].weight};\n font-style: ${({ type, theme }) => font(theme)[type].style};\n ${({ type, theme }) => withRange(font(theme)[type].size, 'font-size')}\n line-height: ${({ type, theme }) => font(theme)[type].lineHeight};\n letter-spacing: ${({ type, theme }) => font(theme)[type].letterSpacing};\n text-transform: ${({ type, theme }) => font(theme)[type].textTransform};\n`;\n\nexport type HeadlineTag =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'span'\n | 'div';\n\nconst Heading: React.FC<{\n as?: HeadlineTag;\n isInverted?: boolean;\n size?: HeadingType;\n textColor?: string;\n textGradient?: string;\n hyphens?: boolean;\n hasShadow?: boolean;\n innerHTML?: string;\n\n className?: string;\n}> = ({\n as,\n isInverted,\n className,\n size = 'heading-2',\n textColor,\n textGradient,\n hyphens = false,\n hasShadow = false,\n innerHTML,\n children,\n ...rest\n}) => {\n const theme = React.useContext(ThemeContext);\n let tag: HeadlineTag = 'h2';\n\n switch (size) {\n default:\n case 'heading-1':\n tag = 'h1';\n break;\n case 'heading-2':\n tag = 'h2';\n break;\n case 'heading-3':\n tag = 'h3';\n break;\n case 'heading-4':\n tag = 'h4';\n break;\n case 'super':\n tag = 'div';\n break;\n }\n\n // get font settings from global context\n const fontSettings = font(theme)?.[size];\n\n return (\n <View\n as={as || tag}\n type={size}\n textColor={\n textColor ||\n (isInverted ? fontSettings.colorInverted : fontSettings.color)\n }\n textGradient={\n textGradient ||\n (!textColor\n ? isInverted\n ? fontSettings.colorGradientInverted\n : fontSettings.colorGradient\n : undefined)\n }\n hyphens={hyphens}\n hasShadow={hasShadow}\n dangerouslySetInnerHTML={\n innerHTML && !children ? { __html: innerHTML } : undefined\n }\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n};\n\nHeading.defaultProps = {\n as: 'h2',\n size: 'heading-2',\n};\n\nexport default Heading;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport Heading, { HeadlineTag } from 'components/typography/Heading';\nimport { spacings, withRange } from 'utils/styles';\n\nconst View = styled.div<{ isCentered?: boolean }>`\n display: block;\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n margin: ${({ isCentered }) => isCentered && '0 auto'};\n\n & > * + * {\n ${withRange([spacings.nudge * 2, spacings.nudge * 3], 'padding-top')};\n }\n`;\n\nconst Title: FC<{\n colorMode?: 'default' | 'inverted' | 'onImage';\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n title?: string;\n titleAs?: HeadlineTag;\n isCentered?: boolean;\n className?: string;\n}> = ({\n colorMode = 'default',\n superTitle,\n superTitleAs,\n title,\n titleAs,\n isCentered = false,\n className,\n}) => {\n return (\n <View isCentered={isCentered} className={className}>\n {superTitle && (\n <div>\n <Heading\n as={superTitleAs || 'h2'}\n size=\"super\"\n textColor={colorMode === 'onImage' ? '#fff' : undefined}\n isInverted={colorMode === 'inverted'}\n innerHTML={superTitle}\n />\n </div>\n )}\n {title && (\n <div>\n <Heading\n as={titleAs || 'h3'}\n size=\"heading-2\"\n textColor={colorMode === 'onImage' ? '#fff' : undefined}\n isInverted={colorMode === 'inverted'}\n innerHTML={title}\n />\n </div>\n )}\n </View>\n );\n};\n\nexport default Title;\n","import * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n FontType,\n mq,\n spacings,\n withRange,\n FontOptionType,\n getFonts as font,\n styleTextColor,\n 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 ${({ 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-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 = '© <a href=\"http://osm.org/copyright\">OpenStreetMap</a> contributors',\n activeMarkerId,\n markers,\n center,\n zoom = 2.5,\n touchZoom = false,\n scrollWheelZoom = false,\n onlyScrollOnFocus = true,\n fitBoundsPadding = [20, 20], // 0 = TopLeft, 1 = BottomRight\n onMarkerClick,\n onFlyToClick,\n flyToControl,\n onActiveMarkerChanged,\n className,\n}) => {\n const cRef = useRef<HTMLDivElement | null>(null);\n const prevMarkerId = useRef<string | null>(null);\n\n // leaflet ref\n const [L, setLeaflet] = useState<any>(null);\n const [map, setMap] = useState<Map | null>(null);\n const [markersLayer, setMarkersLayer] = useState<FeatureGroup<any> | null>(\n null\n );\n const [isLoaded, setLoaded] = useState<boolean>(false);\n\n useEffect(() => {\n const initLeaflet = async (cElement: HTMLDivElement) => {\n const leaflet = await import('leaflet');\n if (leaflet) {\n // set leaflet state\n setLeaflet(leaflet);\n\n // setup map\n const map = leaflet.map(cElement, {\n center: center,\n zoom: zoom,\n touchZoom: touchZoom,\n scrollWheelZoom: scrollWheelZoom,\n });\n\n // activate map scrolling on focus\n map.once('focus', () => {\n if (onlyScrollOnFocus) map.scrollWheelZoom.enable();\n });\n\n // deactivate map scrolling on focus is lost\n map.once('blur', () => {\n if (onlyScrollOnFocus) map.scrollWheelZoom.disable();\n });\n\n // set map state\n setMap(map);\n\n // add map layer from map provider\n leaflet\n .tileLayer(url, {\n attribution: attribution,\n })\n .addTo(map);\n\n // setup layer for markers\n const markersLayer = new leaflet.FeatureGroup();\n markersLayer.addTo(map);\n setMarkersLayer(markersLayer);\n }\n };\n\n // load leaflet\n const mapContainerRef = containerRef || cRef;\n if (!isLoaded && mapContainerRef?.current)\n initLeaflet(mapContainerRef.current);\n }, [\n attribution,\n center,\n containerRef,\n isLoaded,\n onlyScrollOnFocus,\n scrollWheelZoom,\n touchZoom,\n url,\n zoom,\n ]);\n\n // setup markers\n useEffect(() => {\n /**\n * Adjust zoom to show all markers\n */\n const showAllMarkers = () => {\n if (map && markersLayer) {\n map.fitBounds(markersLayer.getBounds(), {\n padding: L.point(fitBoundsPadding),\n });\n }\n };\n\n /**\n * Pan and zoom to marker position on map\n * @param position\n * @param zoom\n */\n const flyToPosition = (position?: [number, number], zoom?: number) => {\n if (position) map?.flyTo(position, zoom);\n else flyToActive(zoom);\n };\n\n /**\n * Pan and zoom to active marker position on map\n * @param zoom\n */\n const flyToActive = (zoom?: number) => {\n const marker = markers?.find((m) => m.id === activeMarkerId);\n if (marker) map?.flyTo(marker.position, zoom);\n };\n\n // setup markers\n if (markersLayer) {\n markersLayer.clearLayers();\n\n markers?.forEach(({ position, icon, id }) => {\n if (!icon?.url || !icon?.size || !position) return;\n const isActive = id === activeMarkerId;\n\n const markerIcon = L.icon({\n iconUrl: icon.url,\n\n iconSize: isActive ? icon.sizeActive : icon.size, // size of the icon\n // shadowSize: [50, 64], // size of the shadow\n iconAnchor: isActive ? icon.anchorActive : icon?.anchor, // point of the icon which will correspond to marker's location\n // shadowAnchor: [4, 62], // the same for the shadow\n // popupAnchor: [0, -16], // point from which the popup should open relative to the iconAnchor\n });\n\n const marker: Marker = L.marker(position, {\n icon: markerIcon,\n riseOnHover: true,\n } as MarkerOptions).addTo(map);\n\n marker.on('click', () => {\n onMarkerClick && onMarkerClick(id);\n });\n\n // add marker to markers layer\n markersLayer.addLayer(marker);\n\n if (L && map && markersLayer) {\n if (!isLoaded) {\n // on first load\n onReady &&\n onReady({\n goTo: flyToPosition,\n showAll: showAllMarkers,\n });\n setLoaded(true);\n if (activeMarkerId)\n prevMarkerId.current = activeMarkerId;\n } else {\n // check if active marker changed\n if (\n activeMarkerId &&\n activeMarkerId !== prevMarkerId?.current\n ) {\n prevMarkerId.current = activeMarkerId;\n activeMarkerId &&\n onActiveMarkerChanged &&\n onActiveMarkerChanged({\n markerId: activeMarkerId,\n goTo: flyToActive,\n });\n }\n }\n }\n });\n }\n }, [\n L,\n fitBoundsPadding,\n isLoaded,\n map,\n markers,\n markersLayer,\n onMarkerClick,\n activeMarkerId,\n onActiveMarkerChanged,\n onReady,\n ]);\n\n return (\n <MapContainer ref={cRef} className={className}>\n {flyToControl && (\n <FylToCtrlContainer\n onClick={(ev) => {\n ev.stopPropagation();\n if (map && onFlyToClick) {\n onFlyToClick((zoom) => {\n // fly to active marker\n const marker = markers?.find(\n (m) => m.id === activeMarkerId\n );\n if (marker) {\n map.flyTo(marker.position, zoom);\n }\n });\n }\n }}\n >\n {flyToControl}\n </FylToCtrlContainer>\n )}\n </MapContainer>\n );\n};\n\nexport default LeafletMap;\n","import Grid from 'components/base/Grid';\nimport ArrowLeftGhost from 'components/base/icons/ArrowLeftGhost';\nimport ArrowRightGhost from 'components/base/icons/ArrowRightGhost';\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\nimport Intro from 'components/blocks/Intro';\nimport LeafletMap from 'components/blocks/LeafletMap';\nimport Slider, { SliderContext } from 'components/blocks/Slider';\nimport Copy from 'components/typography/Copy';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport React, { FC, useContext, useState } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { mq, spacings, getColors as color, withRange } from 'utils/styles';\n\nconst StyledSection = styled(Section)`\n position: relative;\n min-height: 500px;\n z-index: 0;\n`;\n\nconst MapContainer = styled(LeafletMap)<{ isMirrored?: boolean }>`\n position: relative;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n min-height: 500px;\n\n @media ${mq.semilarge} {\n position: absolute;\n width: 50%;\n height: 100%;\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '50%')};\n right: ${({ isMirrored }) => (isMirrored ? '50%' : 'auto')};\n\n transform: translateX(\n ${({ isMirrored }) => (isMirrored ? '100%' : '-100%')}\n );\n }\n\n @media ${mq.xlarge} {\n max-width: ${spacings.wrapperLarge / 2}px;\n }\n`;\n\nconst CardWrapper = styled(Wrapper)`\n pointer-events: none;\n`;\n\nconst SliderWrapper = styled.div<{ isMirrored?: boolean }>`\n display: flex;\n flex-direction: column;\n position: relative;\n width: 100%;\n pointer-events: all;\n\n padding: ${spacings.nudge * 3}px ${spacings.nudge * 3}px\n ${spacings.spacer * 2}px ${spacings.nudge * 3}px;\n\n @media ${mq.medium} {\n padding: ${spacings.nudge * 3}px ${spacings.spacer}px\n ${spacings.spacer * 2}px ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n flex-direction: row;\n ${withRange([spacings.spacer * 3, spacings.spacer * 5], 'padding-top')};\n ${withRange(\n [spacings.spacer * 3, spacings.spacer * 5],\n 'padding-bottom'\n )};\n ${({ isMirrored }) =>\n isMirrored\n ? withRange(\n [spacings.spacer, spacings.spacer * 4],\n 'padding-right'\n )\n : `padding-right: ${spacings.spacer}px`};\n ${({ isMirrored }) =>\n !isMirrored\n ? withRange(\n [spacings.spacer, spacings.spacer * 4],\n 'padding-left'\n )\n : `padding-left: ${(1 / 28) * 100}vw`};\n }\n\n @media ${mq.xlarge} {\n ${({ isMirrored }) =>\n !isMirrored\n ? withRange(\n [spacings.spacer, spacings.spacer * 4],\n 'padding-left'\n )\n : `padding-left: ${(1 / 28) * spacings.wrapper}px`};\n }\n\n .slick-slide div {\n outline: none;\n }\n\n .slick-initialized .slick-slide.slick-active {\n z-index: 1;\n }\n`;\n\nconst InfoCardView = styled.div`\n min-height: 100px;\n pointer-events: all;\n\n & > * + * {\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')}\n }\n`;\n\nconst CardHeader = styled.div`\n display: flex;\n`;\n\nconst StyledActions = styled(Actions)`\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n padding-bottom: ${spacings.nudge}px;\n\n @media ${mq.medium} {\n & > * {\n max-width: calc(50% - ${spacings.spacer}px);\n }\n }\n`;\n\nconst ContactList = styled.ul<{ isInverted?: boolean }>`\n padding: 0;\n list-style-type: none;\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n\n a {\n color: inherit;\n }\n\n li {\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0;\n margin: 0;\n }\n\n li + li {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n span:first-child {\n flex: 0 0 30px;\n max-width: 30px;\n\n & > * {\n max-width: 100%;\n }\n }\n`;\n\nconst ContactListLabel = styled(Copy)`\n margin-left: ${spacings.nudge * 2.5}px;\n\n * {\n margin: 0;\n padding: 0;\n }\n`;\n\nconst LocationInfoCard: FC<{\n isInverted?: boolean;\n location: MapLocation;\n}> = ({ isInverted, location }) => {\n return (\n <InfoCardView>\n {location.meta?.title && (\n <CardHeader>\n <Intro\n colorMode={isInverted ? 'inverted' : 'default'}\n title={location.meta.title}\n titleAs={location.meta.titleAs}\n superTitle={location.meta?.superTitle}\n superTitleAs={location.meta?.superTitleAs}\n />\n </CardHeader>\n )}\n {location.meta?.contact && location.meta.contact.length > 0 && (\n <ContactList isInverted={isInverted}>\n {location.meta?.contact\n ?.filter((c) => c.label)\n .map((contact, i) => (\n <li key={i}>\n <span>{contact.icon}</span>\n <ContactListLabel\n isInverted={isInverted}\n innerHTML={contact.label}\n />\n </li>\n ))}\n </ContactList>\n )}\n {(location?.meta?.primaryAction ||\n location?.meta?.secondaryAction) && (\n <StyledActions\n primary={\n location?.meta?.primaryAction &&\n location.meta.primaryAction(isInverted)\n }\n secondary={\n location?.meta?.secondaryAction &&\n location.meta.secondaryAction(isInverted)\n }\n />\n )}\n </InfoCardView>\n );\n};\n\nconst Controls = styled.div`\n display: flex;\n flex-direction: row;\n align-self: center;\n text-align: center;\n\n @media ${mq.semilarge} {\n flex-direction: column;\n align-self: flex-start;\n margin-left: auto;\n text-align: right;\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n }\n`;\n\nconst StyledDotGroup = styled(Slider.DotGroup)`\n display: flex;\n flex-direction: row;\n padding-top: ${spacings.spacer * 1.5}px;\n padding-left: ${spacings.spacer * 1.5}px;\n padding-right: ${spacings.spacer * 1.5}px;\n\n @media ${mq.semilarge} {\n display: none;\n padding: 0;\n }\n`;\n\nconst DotWrapper = styled.button`\n border: none;\n outline: none;\n background: none;\n cursor: pointer;\n\n padding: ${spacings.nudge * 2}px;\n margin: -${spacings.nudge * 2}px;\n\n & + & {\n margin-left: ${spacings.nudge * 1.5}px;\n }\n`;\n\nconst Dot = styled.div<{ isActive?: boolean; isInverted?: boolean }>`\n height: 14px;\n width: 14px;\n border: solid 1px\n ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 14px;\n\n transition: background-color 0.2s ease-in-out;\n\n background-color: ${({ isActive, isInverted, theme }) =>\n isActive\n ? isInverted\n ? color(theme).light\n : color(theme).dark\n : 'transparent'};\n`;\n\nconst StyledControl = styled(Slider.Control)<{ isInverted?: boolean }>`\n display: none;\n border: none;\n outline: none;\n background: none;\n padding: 0 ${spacings.nudge * 3}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n transition: color 0.2s ease-in-out, transform 0.2s ease-in-out;\n\n &:enabled {\n cursor: pointer;\n }\n\n &:enabled:hover {\n transform: scale(1.05);\n }\n\n &:enabled:active {\n transform: scale(0.95);\n }\n\n &:disabled {\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).mono.dark : color(theme).mono.medium};\n }\n\n @media ${mq.semilarge} {\n display: block;\n }\n`;\n\nexport interface LocationIcon {\n url: string;\n size: [number, number];\n anchor: [number, number];\n\n sizeActive: [number, number];\n anchorActive: [number, number];\n}\n\nexport interface MapLocation {\n id: string;\n position: [number, number];\n icon?: LocationIcon;\n meta?: {\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n contact?: Array<{ icon?: React.ReactNode; label?: string }>;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n };\n}\n\nconst Map: FC<{\n isInverted?: boolean;\n isMirrored?: boolean;\n center?: [number, number];\n zoom?: number;\n flyToZoom?: number;\n initialLocation?: string;\n locations?: Array<MapLocation>;\n /** Show all markers on first load */\n allMarkersOnInit?: boolean;\n /** Map container padding for show all markers */\n fitBoundsPadding?: [number, number];\n flyToControl?: React.ReactNode;\n controlNext?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n controlPrev?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n dot?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n index?: number;\n }) => React.ReactNode;\n}> = ({\n isInverted = false,\n isMirrored = false,\n center = [51.505, -0.09],\n zoom = 5,\n flyToZoom,\n initialLocation,\n locations,\n allMarkersOnInit = false,\n fitBoundsPadding,\n flyToControl,\n controlNext,\n controlPrev,\n dot,\n}) => {\n const theme = useContext(ThemeContext);\n const [activeLocation, setActiveLocation] = useState<string>(\n initialLocation || ''\n );\n\n return (\n <StyledSection\n bgColor={isInverted ? color(theme).dark : color(theme).mono.light}\n >\n <Slider.Provider\n fade={true}\n swipe={false}\n slidesToShow={1}\n variableWidth={false}\n sameHeight={true}\n clickSideOffset={0}\n responsive={[\n {\n breakpoint: 832,\n settings: {\n fade: false,\n swipe: true,\n },\n },\n ]}\n beforeChange={({ nextStep }) => {\n if (locations && locations[nextStep]) {\n setActiveLocation(locations[nextStep].id);\n }\n }}\n >\n <SliderContext.Consumer>\n {({ goToStep }) => (\n <MapContainer\n onReady={({ showAll, goTo }) => {\n if (allMarkersOnInit) showAll();\n else goTo();\n }}\n center={center}\n zoom={zoom}\n isMirrored={isMirrored}\n activeMarkerId={activeLocation}\n onMarkerClick={(markerId) => {\n setActiveLocation(markerId);\n\n // move slider to step\n const locIndex = locations?.findIndex(\n (loc) => loc.id === markerId\n );\n\n if (locIndex !== undefined && locIndex !== -1)\n goToStep(locIndex);\n }}\n flyToControl={flyToControl}\n onFlyToClick={(goTo) => {\n // pan and zoom to active location\n goTo(flyToZoom);\n }}\n fitBoundsPadding={fitBoundsPadding}\n markers={locations?.map(\n ({ id, position, icon }) => {\n return {\n id,\n position,\n icon,\n };\n }\n )}\n onActiveMarkerChanged={({ goTo }) => goTo()}\n />\n )}\n </SliderContext.Consumer>\n\n <CardWrapper clampWidth=\"normal\">\n <Grid.Row gutter={spacings.spacer}>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? 14 : 0) / 28,\n }}\n ></Grid.Col>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? -14 : 0) / 28,\n }}\n >\n <SliderWrapper isMirrored={isMirrored}>\n {locations && locations.length > 1 && (\n <>\n <Slider.Slides>\n {locations?.map((location, i) => (\n <LocationInfoCard\n key={i}\n isInverted={isInverted}\n location={location}\n />\n ))}\n </Slider.Slides>\n <Controls>\n <StyledControl\n type=\"next\"\n isInverted={isInverted}\n >\n {(isActive) =>\n controlNext ? (\n controlNext({\n isInverted,\n isActive,\n name:\n 'control_next_head',\n })\n ) : (\n <ArrowRightGhost />\n )\n }\n </StyledControl>\n <StyledControl\n type=\"prev\"\n isInverted={isInverted}\n >\n {(isActive) =>\n controlPrev ? (\n controlPrev({\n isInverted,\n isActive,\n name:\n 'control_prev_head',\n })\n ) : (\n <ArrowLeftGhost />\n )\n }\n </StyledControl>\n <StyledDotGroup>\n {(i, isActive, onClick) => (\n <DotWrapper\n key={i}\n onClick={onClick}\n >\n {dot ? (\n dot({\n isInverted,\n isActive,\n index: i,\n })\n ) : (\n <Dot\n isActive={\n isActive\n }\n isInverted={\n isInverted\n }\n />\n )}\n </DotWrapper>\n )}\n </StyledDotGroup>\n </Controls>\n </>\n )}\n {locations && locations.length === 1 && (\n <LocationInfoCard\n isInverted={isInverted}\n location={locations[0]}\n />\n )}\n </SliderWrapper>\n </Grid.Col>\n </Grid.Row>\n </CardWrapper>\n </Slider.Provider>\n </StyledSection>\n );\n};\n\nexport default Map;\n","import Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors as color, spacings } from 'utils/styles';\n\nconst View = styled.div``;\n\nconst FieldHead = styled.div`\n display: flex;\n flex-direction: row;\n align-items: top;\n justify-content: space-between;\n padding-bottom: ${spacings.nudge * 3}px;\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n`;\n\nconst Field = styled.input<{\n isInverted?: boolean;\n hasError?: boolean;\n isDisabled?: boolean;\n hasBack?: boolean;\n}>`\n display: block;\n outline: none;\n width: 100%;\n min-height: 60px;\n box-shadow: none;\n border: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n padding: ${spacings.nudge * 2}px ${spacings.spacer}px;\n border: ${({ hasError }) =>\n hasError ? '2px solid #ff0000' : '2px solid transparent'};\n background-color: ${({ isInverted, hasBack, theme }) =>\n isInverted || !hasBack ? color(theme).light : color(theme).mono.light};\n\n font-weight: inherit;\n font-family: inherit;\n font-size: inherit;\n color: ${({ hasError }) => (hasError ? '#ff0000' : 'inherit')};\n\n pointer-events: ${({ isDisabled }) => isDisabled && 'none'};\n\n &:active {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n &:focus {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n ::placeholder {\n color: ${({ theme }) => color(theme).secondary.light};\n }\n`;\n\nconst InfoMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst ErrorMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nexport type FormProps = {\n label?: string;\n errorMessage?: string;\n infoMessage?: string;\n\n value?: string;\n name?: string;\n placeholder?: string;\n isRequired?: boolean;\n isDisabled?: boolean;\n};\n\nconst Textfield: React.FC<\n FormProps & {\n type?: 'text' | 'email' | 'tel';\n isInverted?: boolean;\n lightBg?: boolean;\n onChange?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n }\n> = ({\n lightBg,\n type = 'text',\n label,\n errorMessage,\n infoMessage,\n placeholder,\n value,\n name,\n isInverted,\n isDisabled,\n isRequired,\n onChange,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <View>\n <FieldHead>\n {label && (\n <Copy\n isInverted={isInverted}\n textColor={\n isDisabled ? color(theme).mono.dark : undefined\n }\n >\n {`${label}${isRequired ? ' *' : ''}`}\n </Copy>\n )}\n </FieldHead>\n <Copy textColor={color(theme).secondary.dark} type=\"copy-b\">\n <Field\n hasBack={!lightBg}\n placeholder={placeholder}\n hasError={!!errorMessage}\n type={type}\n isInverted={isInverted}\n isDisabled={isDisabled}\n name={name}\n value={value}\n required={isRequired}\n onChange={onChange}\n />\n </Copy>\n {infoMessage && (\n <InfoMessage textColor={color(theme).mono.dark} size=\"small\">\n {infoMessage}\n </InfoMessage>\n )}\n {errorMessage && (\n <ErrorMessage textColor=\"#ff0000\" size=\"small\" type=\"copy-i\">\n {errorMessage\n ? errorMessage\n : 'Bitte geben Sie einen gültigen Text ein'}\n </ErrorMessage>\n )}\n </View>\n );\n};\n\nexport default Textfield;\n","import Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport { FormProps } from './Textfield';\n\nconst FieldHead = styled.div`\n display: flex;\n flex-direction: row;\n align-items: top;\n justify-content: space-between;\n padding-bottom: ${spacings.nudge * 3}px;\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n`;\n\nconst Area = styled.textarea<{\n isInverted?: boolean;\n hasError?: boolean;\n isDisabled?: boolean;\n hasBack?: boolean;\n}>`\n display: block;\n outline: none;\n width: 100%;\n min-height: 60px;\n box-shadow: none;\n border: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n resize: none;\n width: 100%;\n min-height: 120px;\n\n @media ${mq.semilarge} {\n min-height: 185px;\n }\n\n padding: ${spacings.nudge * 2}px ${spacings.spacer}px;\n\n /* border: ${({ isInverted, theme }) =>\n isInverted\n ? '2px solid transparent'\n : `2px solid ${color(theme).mono.medium}`}; */\n border: ${({ hasError }) =>\n hasError ? '2px solid #ff0000' : '2px solid transparent'};\n background-color: ${({ isInverted, hasBack, theme }) =>\n isInverted || !hasBack ? color(theme).light : color(theme).mono.light};\n\n font-weight: inherit;\n font-family: inherit;\n font-size: inherit;\n color: ${({ hasError }) => (hasError ? '#ff0000' : 'inherit')};\n\n pointer-events: ${({ isDisabled }) => isDisabled && 'none'};\n\n &:active {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n &:focus {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n ::placeholder {\n color: ${({ theme }) => color(theme).secondary.light};\n }\n`;\n\nconst InfoMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n`;\n\nconst ErrorMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n`;\n\nconst Textarea: React.FC<\n FormProps & {\n isInverted?: boolean;\n lightBg?: boolean;\n onChange?: (ev: React.SyntheticEvent<HTMLTextAreaElement>) => void;\n }\n> = ({\n lightBg,\n label,\n errorMessage,\n infoMessage,\n placeholder,\n value,\n name,\n isInverted,\n isDisabled,\n isRequired,\n onChange,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <div>\n <FieldHead>\n {label && (\n <Copy\n isInverted={isInverted}\n textColor={\n isDisabled ? color(theme).mono.dark : undefined\n }\n >\n {`${label}${isRequired ? ' *' : ''}`}\n </Copy>\n )}\n </FieldHead>\n <Copy type=\"copy-b\">\n <Area\n value={value}\n name={name}\n placeholder={placeholder}\n hasError={!!errorMessage}\n isDisabled={isDisabled}\n isInverted={isInverted}\n required={isRequired}\n hasBack={!lightBg}\n onChange={onChange}\n />\n </Copy>\n {infoMessage && (\n <InfoMessage textColor={color(theme).mono.dark} size=\"small\">\n {infoMessage}\n </InfoMessage>\n )}\n {errorMessage && (\n <ErrorMessage textColor=\"#ff0000\" size=\"small\" type=\"copy-i\">\n {errorMessage\n ? errorMessage\n : 'Bitte geben Sie einen gültigen Text ein'}\n </ErrorMessage>\n )}\n </div>\n );\n};\n\nexport default Textarea;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Check: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"12\"\n height=\"9\"\n viewBox=\"0 0 12 9\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M10.833 1.162A.512.512 0 0010.444 1a.512.512 0 00-.388.162L4.333 6.708 1.944 4.392a.512.512 0 00-.388-.161.512.512 0 00-.39.161A.482.482 0 001 4.77c0 .162.056.27.167.377l2.777 2.692c.056.054.112.108.167.108.056.054.167.054.222.054.111 0 .167 0 .223-.054.055 0 .11-.054.166-.108l6.111-5.923A.482.482 0 0011 1.538a.482.482 0 00-.167-.376z\"\n fill=\"#fff\"\n stroke=\"#fff\"\n />\n </SVG>\n);\n\nexport default Check;\n","import Check from 'components/base/icons/Check';\nimport Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors, spacings } from 'utils/styles';\n\nconst View = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n\n & > * + * {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Label = styled(Copy)`\n display: flex;\n\n & > * {\n margin: 0;\n }\n`;\n\nconst CheckboxContainer = styled.div<{ isDisabled?: boolean }>`\n cursor: ${({ isDisabled }) => (isDisabled ? 'default' : 'pointer')};\n pointer-events: ${({ isDisabled }) => (isDisabled ? 'none' : 'all')};\n`;\n\nconst Original = styled.input`\n position: absolute;\n left: -9999px;\n opacity: 0;\n`;\n\nconst Box = styled.span<{ isSelected?: boolean; isInverted?: boolean }>`\n width: 20px;\n min-width: 20px;\n height: 20px;\n display: block;\n position: relative;\n\n border: 2px solid\n ${({ isInverted, theme }) =>\n isInverted ? '#fff' : getColors(theme).mono.medium};\n\n background-color: ${({ isSelected, theme }) =>\n isSelected ? getColors(theme).primary.medium : '#fff'};\n`;\n\nconst StyledCheck = styled(Check)`\n width: 80%;\n height: 80%;\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n`;\n\nconst Checkbox: React.FC<{\n label?: string;\n\n onChange?: (e: React.SyntheticEvent<HTMLInputElement>) => void;\n onClick?: () => void;\n\n name?: string;\n value?: string;\n\n isDisabled?: boolean;\n isSelected?: boolean;\n isInverted?: boolean;\n isRequired?: boolean;\n}> = ({\n label,\n isDisabled,\n isSelected,\n isInverted,\n onChange,\n onClick,\n name,\n value,\n isRequired,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <View>\n <CheckboxContainer isDisabled={isDisabled} onClick={onClick}>\n <Box isSelected={isSelected} isInverted={isInverted}>\n {isSelected && <StyledCheck />}\n </Box>\n <Original\n type=\"checkbox\"\n name={name}\n value={value}\n disabled\n checked={isSelected}\n required={isRequired}\n onChange={onChange}\n />\n </CheckboxContainer>\n {label && (\n <Label\n size=\"small\"\n type=\"copy-b\"\n isInverted={isInverted}\n textColor={\n isDisabled ? getColors(theme).mono.dark : undefined\n }\n innerHTML={`${label}${isRequired ? '<span> *</span>' : ''}`}\n />\n )}\n </View>\n );\n};\n\nexport default Checkbox;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport Section, { BgMode } from 'components/base/Section';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport { spacings, mq, getColors as color, withRange } from 'utils/styles';\nimport Textfield, { FormProps } from 'components/fields/Textfield';\nimport Textarea from 'components/fields/Textarea';\nimport Checkbox from 'components/fields/Checkbox';\nimport Wrapper from 'components/base/Wrapper';\nimport Intro from 'components/blocks/Intro';\nimport { Field, Formik } from 'formik';\nimport { FormEvent } from 'react';\nimport Actions from 'components/blocks/Actions';\n\nconst StyledIntro = styled(Intro)`\n ${withRange([spacings.spacer * 2, spacings.spacer * 3], 'padding-bottom')}\n`;\n\nconst FieldsContainer = styled.div`\n padding-bottom: 30px;\n max-width: 1150px;\n\n & > * > * + * {\n padding-top: 30px;\n }\n\n @media ${mq.medium} {\n display: flex;\n flex-direction: row;\n align-items: top;\n }\n`;\n\nconst FlexContainer = styled.div`\n flex: 0 1 50%;\n width: 100%;\n max-width: 650px;\n\n & + & {\n padding-top: 30px;\n }\n\n @media ${mq.medium} {\n & + & {\n padding-top: 0;\n margin-left: 30px;\n }\n }\n`;\n\nconst ActionWrapper = styled(Actions)`\n margin-top: ${spacings.spacer * 3}px;\n`;\n\nexport interface FormData {\n name?: string;\n surname?: string;\n mail?: string;\n phone?: string;\n area?: string;\n check?: boolean;\n}\n\nexport type FormFieldProps = Omit<FormProps, 'value' | 'name' | 'errorMessage'>;\nexport type FormDataErrors = { [key in keyof FormData]: string };\n\nconst Form: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n intro?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n submitAction?: (props: {\n isInverted?: boolean;\n additionalProps: { type: 'submit'; as: 'button' | 'a' };\n isDisabled?: boolean;\n }) => React.ReactNode;\n onSubmit?: (data: FormData) => void;\n validation?: (values: FormData, errors: FormDataErrors) => FormDataErrors;\n yupValidationSchema?: any;\n\n isInverted?: boolean;\n bgMode?: 'full';\n\n formFields: {\n name?: FormFieldProps;\n surname?: FormFieldProps;\n mail?: FormFieldProps;\n phone?: FormFieldProps;\n area?: FormFieldProps;\n };\n\n checkbox?: {\n label?: string;\n name?: string;\n value?: string;\n isDisabled?: boolean;\n };\n}> = ({\n bgMode,\n isInverted = false,\n title,\n titleAs,\n superTitle,\n superTitleAs,\n intro,\n primaryAction,\n secondaryAction,\n submitAction,\n onSubmit,\n formFields,\n checkbox,\n yupValidationSchema,\n validation,\n}) => {\n const theme = React.useContext(ThemeContext);\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n default:\n return undefined;\n }\n };\n\n const isEmpty = (obj: any) => {\n return (\n obj && Object.keys(obj).length === 0 && obj.constructor === Object\n );\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {title && (\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={intro}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n )}\n <Formik\n initialValues={\n {\n name: '',\n surname: '',\n phone: '',\n area: '',\n mail: '',\n check: false,\n } as FormData\n }\n validate={(values) => {\n let errors: FormDataErrors = {};\n if (validation)\n errors = validation(\n values,\n errors\n ) as FormDataErrors;\n return errors;\n }}\n validationSchema={yupValidationSchema}\n onSubmit={async (values) => {\n onSubmit && onSubmit(values);\n }}\n >\n {({\n handleSubmit,\n setFieldValue,\n values,\n errors,\n isValid,\n dirty,\n }) => (\n <form\n onSubmit={(e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n handleSubmit(e);\n }}\n >\n <FieldsContainer>\n <FlexContainer>\n {formFields.name && (\n <Field\n label={\n formFields.name?.label ||\n 'Vorname'\n }\n placeholder={\n formFields.name?.placeholder\n }\n infoMessage={\n formFields.name?.infoMessage\n }\n as={Textfield}\n name=\"name\"\n isRequired={\n formFields.name?.isRequired\n }\n errorMessage={errors.name}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n )}\n {formFields.surname && (\n <Field\n label={\n formFields.surname?.label ||\n 'Nachname'\n }\n placeholder={\n formFields.surname?.placeholder\n }\n infoMessage={\n formFields.surname?.infoMessage\n }\n as={Textfield}\n name=\"surname\"\n isRequired={\n formFields.surname?.isRequired\n }\n errorMessage={errors.surname}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n )}\n {formFields.mail && (\n <Field\n type=\"email\"\n label={\n formFields.mail?.label ||\n 'E-Mail'\n }\n placeholder={\n formFields.mail?.placeholder\n }\n infoMessage={\n formFields.mail?.infoMessage\n }\n as={Textfield}\n name=\"mail\"\n isRequired={\n formFields.mail?.isRequired\n }\n errorMessage={errors.mail}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n )}\n {formFields.phone && (\n <Field\n type=\"tel\"\n label={\n formFields.phone?.label ||\n 'Telefon'\n }\n placeholder={\n formFields.phone?.placeholder\n }\n infoMessage={\n formFields.phone?.infoMessage\n }\n as={Textfield}\n name=\"phone\"\n isRequired={\n formFields.phone?.isRequired\n }\n errorMessage={errors.phone}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n )}\n </FlexContainer>\n {formFields.area && (\n <FlexContainer>\n <Field\n label={\n formFields.area?.label ||\n 'Textfeld'\n }\n placeholder={\n formFields.area?.placeholder\n }\n infoMessage={\n formFields.area?.infoMessage\n }\n name=\"area\"\n as={Textarea}\n isRequired={\n formFields.area?.isRequired\n }\n errorMessage={errors.area}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n </FlexContainer>\n )}\n </FieldsContainer>\n {checkbox && (\n <Field\n onClick={() => {\n setFieldValue('check', !values.check);\n }}\n value={values.check}\n isSelected={values.check}\n isDisabled={checkbox.isDisabled}\n name=\"check\"\n as={Checkbox}\n label={\n checkbox.label ||\n 'Ich habe die Datenschutzbestimmungen zu Kenntnis genommen und aktzeptiere.'\n }\n isInverted={isInverted}\n isRequired\n />\n )}\n {submitAction && (\n <ActionWrapper\n primary={\n submitAction &&\n submitAction({\n isInverted,\n isDisabled:\n !dirty ||\n !isValid ||\n !isEmpty(errors),\n additionalProps: {\n type: 'submit',\n as: 'button',\n },\n })\n }\n />\n )}\n </form>\n )}\n </Formik>\n </Wrapper>\n </Section>\n );\n};\n\nexport default Form;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowLeftRight: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"36\"\n height=\"17\"\n viewBox=\"0 0 36 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.06818 7.42108H32.7534l-6.3638-5.86523c-.3753-.34588-.3753-.71337 0-1.10248.1641-.17293.3635-.2594.598-.2594.2346 0 .4457.08647.6333.2594l7.8808 7.29576c.1642.12971.2463.31345.2463.55124 0 .21617-.0821.39991-.2463.55123l-7.8808 7.2309c-.1642.1729-.3694.2594-.6157.2594-.2462 0-.4515-.0864-.6156-.2594-.3753-.3459-.3753-.7133 0-1.1025l6.3663-5.86748H3.0657L9.43204 14.98c.37527.3459.37527.7134 0 1.1025-.16419.1729-.36355.2594-.5981.2594-.23455 0-.44564-.0865-.63328-.2594L.31986 8.78675c-.1642-.1297-.24628-.31344-.24628-.55123 0-.21617.08209-.39992.24627-.55124L8.20066.45338c.16419-.17294.36942-.25941.61569-.25941.24628 0 .4515.08647.61569.2594.37528.34588.37528.71337 0 1.10248L3.06818 7.42108z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default ArrowLeftRight;\n","import React, { FC, useContext, useEffect, useRef, useState } from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\n\nimport Section, { BgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport { getColors as color, spacings } from 'utils/styles';\nimport ArrowLeftRight from 'components/base/icons/ArrowLeftRight';\nimport Copy from 'components/typography/Copy';\nimport useIE from 'utils/useIE';\n\nconst clamp = (num: number, min: number, max: number) => {\n return Math.min(Math.max(num, min), max);\n};\n\nconst Images = styled.div`\n position: relative;\n cursor: col-resize;\n\n & > * {\n pointer-events: none;\n user-select: none;\n }\n`;\n\nconst BackgroundImg = styled(Image)`\n position: relative;\n display: block;\n width: 100%;\n`;\n\nconst ForegroundContainer = styled.div<{\n hasTransition?: boolean;\n initalValue?: number;\n hasAnim?: boolean;\n}>`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 50%;\n overflow: hidden;\n\n transition: width ${({ hasTransition }) => (hasTransition ? 0.1 : 0)}s\n ease-in-out;\n\n ${({ hasAnim, initalValue }) =>\n hasAnim &&\n css`\n animation-name: ForegroundAnim;\n animation-duration: 5s;\n animation-iteration-count: 1;\n animation-play-state: ${hasAnim && 'running'};\n animation-timing-function: ease-in-out;\n\n @keyframes ForegroundAnim {\n 0% {\n width: ${initalValue\n ? clamp(initalValue * 100, 0, 100) + '%'\n : '50%'};\n }\n 33% {\n width: ${initalValue\n ? clamp(initalValue * 100 + 10, 0, 100) + '%'\n : '60%'};\n }\n 66% {\n width: ${initalValue\n ? clamp(initalValue * 100 - 10, 0, 100) + '%'\n : '40%'};\n }\n 100% {\n width: ${initalValue ? initalValue * 100 + '%' : '50%'};\n }\n }\n `}\n`;\n\nconst ForegroundImg = styled(Image)`\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n max-width: none;\n object-fit: cover;\n`;\n\nconst ForegroundOverlay = styled.div<{ color: string }>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: ${({ color }) => color};\n`;\n\nconst ImageLabel = styled(Copy)<{ bgColor?: string }>`\n height: ${spacings.spacer * 1.5}px;\n padding: ${spacings.nudge}px ${spacings.spacer}px ${spacings.nudge * 2}px\n ${spacings.spacer}px;\n background: ${({ bgColor }) => bgColor && bgColor};\n`;\n\nconst ForegroundLabel = styled(ImageLabel)`\n position: absolute;\n bottom: ${spacings.spacer * 1.5}px;\n left: ${spacings.spacer}px;\n pointer-events: none;\n`;\n\nconst BackgroundLabel = styled(ImageLabel)`\n position: absolute;\n bottom: ${spacings.spacer * 1.5}px;\n right: ${spacings.spacer}px;\n pointer-events: none;\n`;\n\nconst ControlContainer = styled.div<{\n hasTransition?: boolean;\n hasAnim?: boolean;\n initalValue?: number;\n}>`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n transition: left ${({ hasTransition }) => (hasTransition ? 0.1 : 0)}s\n ease-in-out;\n\n ${({ hasAnim, initalValue }) =>\n hasAnim &&\n css`\n animation-name: ControlAnim;\n animation-duration: 5s;\n animation-iteration-count: 1;\n animation-play-state: ${hasAnim && 'running'};\n animation-timing-function: ease-in-out;\n\n @keyframes ControlAnim {\n 0% {\n left: ${initalValue\n ? clamp(initalValue * 100, 0, 100) + '%'\n : '50%'};\n }\n 33% {\n left: ${initalValue\n ? clamp(initalValue * 100 + 10, 0, 100) + '%'\n : '60%'};\n }\n 66% {\n left: ${initalValue\n ? clamp(initalValue * 100 - 10, 0, 100) + '%'\n : '40%'};\n }\n 100% {\n left: ${initalValue ? initalValue * 100 + '%' : '50%'};\n }\n }\n `}\n`;\n\nconst Control = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n height: 54px;\n width: 54px;\n border: solid 2px ${({ theme }) => color(theme).light};\n border-radius: 50%;\n background-color: ${({ theme }) => color(theme).primary.medium};\n`;\n\nconst ComparisonSlider: FC<{\n isInverted?: boolean;\n bgMode?: BgMode;\n initialValue?: number;\n foregroundImg?: ImageProps;\n backgroundImg?: ImageProps;\n foregroundLabel?: string;\n backgroundLabel?: string;\n overlayColor?: string;\n labelColor?: string;\n dragControl?: React.ReactNode;\n enableControlAnim?: boolean;\n}> = ({\n isInverted,\n bgMode,\n initialValue,\n foregroundImg,\n backgroundImg,\n foregroundLabel,\n backgroundLabel,\n overlayColor = 'rgba(0, 0 , 0, 0.2)',\n labelColor = 'rgba(0, 0 , 0, 0.3)',\n dragControl,\n enableControlAnim,\n}) => {\n const isIE = useIE(true);\n const [slideValue, setSlideValue] = useState<number>(\n initialValue ? Math.min(Math.max(initialValue, 0), 1) : 0.5\n );\n const [isHolding, setIsHolding] = useState<boolean>(false);\n const [isDragging, setIsDragging] = useState<boolean>(false);\n const [interacted, setInteracted] = useState<boolean>(true);\n const [sideOffset, setSideOffset] = useState<number>(0);\n const controlRef = useRef<HTMLDivElement | null>(null);\n const theme = useContext(ThemeContext);\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'half-right':\n return 'half-right';\n case 'half-left':\n return 'half-left';\n case 'larger-right':\n return 'larger-right';\n case 'larger-left':\n return 'larger-left';\n default:\n return undefined;\n }\n };\n\n useEffect(() => {\n if (controlRef.current) {\n setSideOffset(controlRef.current.offsetWidth / 2);\n }\n }, []);\n\n useEffect(() => {\n const handleInitalLoad = () => {\n const options = {\n rootMargin: '0px',\n threshold: 1.0,\n };\n\n const observer = new IntersectionObserver((entries, observer) => {\n if (enableControlAnim && entries[0]?.isIntersecting) {\n // if control is first fully visible\n observer.unobserve(entries[0]?.target);\n setInteracted(false);\n }\n }, options);\n if (controlRef.current) observer.observe(controlRef.current);\n window.removeEventListener('load', handleInitalLoad);\n };\n\n // wait unitl user has scrolled once\n if (!isIE) {\n if (document.readyState === 'complete') handleInitalLoad();\n else window.addEventListener('load', handleInitalLoad);\n }\n\n return () => {\n window.removeEventListener('load', handleInitalLoad);\n };\n }, [enableControlAnim, isIE]);\n\n const setCurrentPos = (target: EventTarget & Element, clientX: number) => {\n if (target && clientX) {\n const relativeClientX = clientX - target.getBoundingClientRect().x;\n\n // check side offset\n if (\n relativeClientX >= sideOffset &&\n relativeClientX <=\n target.getBoundingClientRect().width - sideOffset\n ) {\n let percentage =\n relativeClientX / target.getBoundingClientRect().width;\n percentage = Math.min(Math.max(percentage, 0), 1);\n\n setSlideValue(percentage);\n }\n }\n };\n\n const handleClick = (ev: React.MouseEvent) => {\n const target = ev.currentTarget;\n if (target && ev.clientX) {\n setCurrentPos(target, ev.clientX);\n setInteracted(true);\n }\n };\n\n const handleMouseMove = (ev: React.MouseEvent) => {\n const target = ev.currentTarget;\n if (target && ev.clientX && isHolding) {\n setIsDragging(true);\n setInteracted(true);\n if (isDragging) setCurrentPos(target, ev.clientX);\n }\n };\n\n const handleTouchMove = (ev: React.TouchEvent<HTMLDivElement>) => {\n const target = ev.currentTarget;\n if (target && ev.touches[0]?.clientX) {\n setInteracted(true);\n setCurrentPos(target, ev.touches[0]?.clientX);\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <Wrapper>\n {backgroundImg && foregroundImg && (\n <Images\n onClick={handleClick}\n onMouseMove={handleMouseMove}\n onMouseDown={() => {\n setIsDragging(false);\n setIsHolding(true);\n }}\n onMouseUp={() => {\n setIsDragging(false);\n setIsHolding(false);\n }}\n onMouseLeave={() => {\n setIsHolding(false);\n setIsDragging(false);\n }}\n onTouchMove={handleTouchMove}\n onTouchStart={() => setIsHolding(true)}\n onTouchEnd={() => setIsHolding(false)}\n >\n <BackgroundImg {...backgroundImg} />\n {backgroundLabel && (\n <BackgroundLabel\n textColor={color(theme).light}\n bgColor={labelColor}\n >\n {backgroundLabel}\n </BackgroundLabel>\n )}\n <ForegroundContainer\n hasTransition={!isHolding}\n hasAnim={!interacted}\n initalValue={initialValue}\n style={{ width: slideValue * 100 + '%' }}\n >\n <ForegroundImg {...foregroundImg} />\n {foregroundLabel && (\n <ForegroundLabel\n textColor={color(theme).light}\n bgColor={labelColor}\n >\n {foregroundLabel}\n </ForegroundLabel>\n )}\n <ForegroundOverlay color={overlayColor} />\n </ForegroundContainer>\n <ControlContainer\n ref={controlRef}\n hasTransition={!isHolding}\n hasAnim={!interacted}\n initalValue={initialValue}\n style={{ left: slideValue * 100 + '%' }}\n >\n {dragControl ? (\n dragControl\n ) : (\n <Control>\n <ArrowLeftRight\n iconColor={color(theme).light}\n />\n </Control>\n )}\n </ControlContainer>\n </Images>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default ComparisonSlider;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings, getColors as color, withRange } from 'utils/styles';\nimport Wrapper from 'components/base/Wrapper';\nimport ArrowLeftGhost from 'components/base/icons/ArrowLeftGhost';\nimport ArrowRightGhost from 'components/base/icons/ArrowRightGhost';\nimport Slider from 'components/blocks/Slider';\nimport { ResponsiveObject } from 'react-slick';\nimport Intro from 'components/blocks/Intro';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst View = styled(Wrapper)`\n position: relative;\n width: 100%;\n overflow: hidden;\n\n @media ${mq.xlarge} {\n padding: 0;\n }\n`;\n\nconst Head = styled(Wrapper)`\n display: flex;\n flex-direction: row;\n`;\n\nconst IntroBlock = styled.div`\n flex: 1;\n ${withRange([spacings.spacer * 2, spacings.spacer * 3], 'padding-bottom')}\n`;\n\nconst TopControls = styled.div`\n display: none;\n text-align: right;\n max-width: ${spacings.wrapper}px;\n margin-left: auto;\n ${withRange(\n [spacings.spacer * 0.5, spacings.spacer * 1.5],\n 'margin-bottom'\n )};\n\n @media ${mq.semilarge} {\n display: flex;\n flex-direction: row;\n align-self: flex-end;\n }\n`;\n\nconst StyledControl = styled(Slider.Control)<{ isInverted?: boolean }>`\n border: none;\n outline: none;\n background: none;\n padding: 0 ${spacings.nudge * 3}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n transition: color 0.2s ease-in-out, transform 0.2s ease-in-out;\n\n &:enabled {\n cursor: pointer;\n }\n\n &:enabled:hover {\n transform: scale(1.05);\n }\n\n &:enabled:active {\n transform: scale(0.95);\n }\n\n &:disabled {\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).mono.dark : color(theme).mono.medium};\n }\n`;\n\nconst StyledSlides = styled(Slider.Slides)`\n margin-bottom: ${spacings.spacer}px;\n\n @media ${mq.xlarge} {\n margin-left: auto;\n width: 100%;\n max-width: ${spacings.wrapperLarge -\n (spacings.wrapperLarge - spacings.wrapper) / 2}px;\n }\n`;\n\nconst Footer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n`;\n\nconst CtrlWrapper = styled.div`\n display: block;\n\n @media ${mq.semilarge} {\n display: none;\n }\n`;\n\nconst CtrlWrapperLeft = styled(CtrlWrapper)`\n flex: 1;\n text-align: left;\n`;\n\nconst CtrlWrapperRight = styled(CtrlWrapper)`\n flex: 1;\n text-align: right;\n`;\n\nconst StyledDotGroup = styled(Slider.DotGroup)`\n display: inline-block;\n align-self: center;\n padding: ${spacings.nudge * 2}px 0;\n`;\n\nconst DotWrapper = styled.button`\n border: none;\n outline: none;\n background: none;\n cursor: pointer;\n\n padding: ${spacings.nudge * 2}px;\n margin: -${spacings.nudge * 2}px;\n\n & + & {\n margin-left: ${spacings.nudge * 1.5}px;\n }\n`;\n\nconst Dot = styled.div<{ isActive?: boolean; isInverted?: boolean }>`\n height: 14px;\n width: 14px;\n border: solid 1px\n ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 14px;\n\n transition: background-color 0.2s ease-in-out;\n\n background-color: ${({ isActive, isInverted, theme }) =>\n isActive\n ? isInverted\n ? color(theme).light\n : color(theme).dark\n : 'transparent'};\n`;\n\nexport interface CarouselProps {\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n spacing?: 'normal' | 'large';\n variableWidths?: boolean;\n isInverted?: boolean;\n controlNext?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n controlPrev?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n dot?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n index?: number;\n }) => React.ReactNode;\n beforeChange?: (props: { currentStep: number; nextStep: number }) => void;\n afterChange?: (currentStep: number) => void;\n onInit?: (steps: number) => void;\n responsive?: ResponsiveObject[];\n slidesToShow?: number;\n}\n\nconst CarouselBase: FC<CarouselProps & { className?: string }> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n spacing,\n variableWidths,\n isInverted,\n controlNext,\n controlPrev,\n dot,\n beforeChange,\n afterChange,\n onInit,\n slidesToShow,\n responsive,\n children,\n className,\n}) => {\n return (\n <View clampWidth=\"large\" className={className}>\n <Slider.Provider\n variableWidth={variableWidths}\n sameHeight={variableWidths}\n slideSpacing={\n spacing === 'large'\n ? { min: 30, max: 60 }\n : { min: 20, max: 30 }\n }\n slidesToShow={slidesToShow}\n responsive={responsive}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n >\n <Head clampWidth=\"normal\" addWhitespace>\n {title && (\n <IntroBlock>\n <Intro\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n secondaryAction={secondaryAction}\n primaryAction={primaryAction}\n />\n </IntroBlock>\n )}\n {React.Children.count(children) > 1 && (\n <TopControls>\n <StyledControl type=\"prev\" isInverted={isInverted}>\n {(isActive) =>\n controlPrev ? (\n controlPrev({\n isInverted,\n isActive,\n name: 'control_prev_head',\n })\n ) : (\n <ArrowLeftGhost />\n )\n }\n </StyledControl>\n <StyledControl type=\"next\" isInverted={isInverted}>\n {(isActive) =>\n controlNext ? (\n controlNext({\n isInverted,\n isActive,\n name: 'control_next_head',\n })\n ) : (\n <ArrowRightGhost />\n )\n }\n </StyledControl>\n </TopControls>\n )}\n </Head>\n\n <StyledSlides>\n {React.Children.map(children, (child, i) => (\n <Slider.Slide key={i}>{child}</Slider.Slide>\n ))}\n </StyledSlides>\n {React.Children.count(children) > 1 && (\n <Footer>\n <CtrlWrapperLeft>\n <StyledControl type=\"prev\" isInverted={isInverted}>\n {(isActive) =>\n controlPrev ? (\n controlPrev({\n isInverted,\n isActive,\n name: 'control_prev_footer',\n })\n ) : (\n <ArrowLeftGhost />\n )\n }\n </StyledControl>\n </CtrlWrapperLeft>\n <StyledDotGroup>\n {(i, isActive, onClick) => (\n <DotWrapper key={i} onClick={onClick}>\n {dot ? (\n dot({ isInverted, isActive, index: i })\n ) : (\n <Dot\n isActive={isActive}\n isInverted={isInverted}\n />\n )}\n </DotWrapper>\n )}\n </StyledDotGroup>\n <CtrlWrapperRight>\n <StyledControl type=\"next\" isInverted={isInverted}>\n {(isActive) =>\n controlNext ? (\n controlNext({\n isInverted,\n isActive,\n name: 'control_next_footer',\n })\n ) : (\n <ArrowRightGhost />\n )\n }\n </StyledControl>\n </CtrlWrapperRight>\n </Footer>\n )}\n </Slider.Provider>\n </View>\n );\n};\n\nexport default CarouselBase;\n","import React, { FC } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color } from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Section, { BgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\n\nconst ImageCarousel: FC<\n Omit<CarouselProps, 'variableWidths'> & {\n bgMode?: 'full' | 'splitted';\n images?: ImageProps[];\n }\n> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n bgMode,\n spacing = 'normal',\n images,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const imageCount = images?.length || 0;\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'splitted':\n return 'half-right';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <CarouselBase\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n variableWidths\n spacing={spacing}\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={imageCount > 1 ? 2.75 : 1}\n responsive={[\n {\n breakpoint: 832,\n settings: {\n slidesToShow: imageCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: imageCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {images &&\n images.map((img, i) => <FullWidthImg key={i} {...img} />)}\n </CarouselBase>\n </Section>\n );\n};\n\nconst FullWidthImg = styled(Image)`\n width: 100%;\n`;\n\nexport default ImageCarousel;\n","import React, { FC } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings, mq } from 'utils/styles';\nimport Section, { BgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\nimport Feature, { FeatureProps } from 'components/blocks/Feature';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\n\nconst StyledWrapper = styled.div`\n padding-left: ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n padding-left: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n padding-left: ${(1 / 28) * 100}%;\n\n padding-left: ${`\n max(\n ${spacings.spacer}px,\n ${(1 / 28) * 100}%\n );\n `};\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst FeatureCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'spacing'> & {\n bgMode?: 'full' | 'splitted';\n features?: FeatureProps[];\n }\n> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n bgMode,\n features,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const featureCount = features?.length || 0;\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\n listLength: featureCount,\n identifiers: [\n '[data-sheet=\"title\"]',\n '[data-sheet=\"desc\"]',\n '[data-sheet=\"intro\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: featureCount,\n medium: featureCount,\n semilarge: featureCount,\n large: featureCount,\n xlarge: featureCount,\n },\n });\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'splitted':\n return 'half-right';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <StyledWrapper>\n <CarouselBase\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n spacing=\"normal\"\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={featureCount > 1 ? 3 : 1}\n responsive={[\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: featureCount > 1 ? 3 : 1,\n },\n },\n {\n breakpoint: 832,\n settings: {\n slidesToShow: featureCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: featureCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {features &&\n features.map((feature, i) => (\n <div key={i} ref={cardRefs[i]}>\n <Feature\n key={i}\n addWhitespace\n isInverted={isInverted}\n {...feature}\n />\n </div>\n ))}\n </CarouselBase>\n </StyledWrapper>\n </Section>\n );\n};\n\nexport default FeatureCarousel;\n","import React, { FC } from 'react';\nimport { ThemeContext } from 'styled-components';\n\nimport { getColors as color } from 'utils/styles';\nimport Section, { BgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\nimport PromotionCard, {\n PromotionCardProps,\n} from 'components/blocks/PromotionCard';\n\nexport type PromotionCarouselItem = Omit<\n PromotionCardProps,\n 'text' | 'superTitle' | 'text' | 'primaryAction' | 'secondaryAction'\n>;\n\nconst PromotionCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'spacing'> & {\n bgMode?: BgMode;\n promotions?: PromotionCarouselItem[];\n }\n> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n bgMode,\n promotions,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const promotionCount = promotions?.length || 0;\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'half-right':\n return 'half-right';\n case 'half-left':\n return 'half-left';\n case 'larger-right':\n return 'larger-right';\n case 'larger-left':\n return 'larger-left';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <CarouselBase\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n spacing=\"normal\"\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={promotionCount > 1 ? 2.75 : 1}\n responsive={[\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: promotionCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 832,\n settings: {\n slidesToShow: promotionCount > 1 ? 1.15 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: promotionCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {promotions &&\n promotions.map((promotion, i) => (\n <PromotionCard key={i} {...promotion} />\n ))}\n </CarouselBase>\n </Section>\n );\n};\n\nexport default PromotionCarousel;\n","import React, { FC } from 'react';\nimport { ThemeContext } from 'styled-components';\n\nimport { getColors as color } from 'utils/styles';\nimport Section, { BgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\nimport VideoCard, { VideoCardProps } from 'components/blocks/VideoCard';\n\nconst VideoCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'spacing'> & {\n bgMode?: 'full' | 'splitted';\n videos?: VideoCardProps[];\n }\n> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n bgMode,\n videos,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const videoCount = videos?.length || 0;\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'splitted':\n return 'half-right';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <CarouselBase\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n spacing=\"normal\"\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={videoCount > 1 ? 2.75 : 1}\n responsive={[\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: videoCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 832,\n settings: {\n slidesToShow: videoCount > 1 ? 1.15 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: videoCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {videos &&\n videos.map((video, i) => <VideoCard key={i} {...video} />)}\n </CarouselBase>\n </Section>\n );\n};\n\nexport default VideoCarousel;\n","/* eslint-disable react/jsx-no-target-blank */\nimport React, { FC } from 'react';\n\nexport interface LinkProps {\n isExternal?: boolean;\n href?: string;\n}\n\nconst Link: FC<\n LinkProps & {\n className?: string;\n }\n> = ({ isExternal = false, href, children, className }) => {\n return (\n <a\n href={href}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n className={className}\n >\n {children}\n </a>\n );\n};\n\nexport default Link;\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport Link from 'components/typography/Link';\n\nconst bdotColor = '#1fc2f4';\n\nconst Dot = styled(Link)`\n width: 11px;\n height: 11px;\n\n display: inline-block;\n vertical-align: middle;\n border-radius: 50%;\n\n background: ${bdotColor};\n color: ${bdotColor};\n text-decoration: none;\n\n span {\n visibility: hidden;\n font-size: 0;\n color: transparent;\n }\n`;\n\nconst Bdot: React.FC<{ className?: string }> = ({ className }) => {\n return (\n <Dot className={className} href=\"https://blateral.com\" isExternal>\n <span>b.lateral - creative agency</span>\n </Dot>\n );\n};\n\nexport default Bdot;\n","import React, { FC } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings } from 'utils/styles';\nimport Link from 'components/typography/Link';\n\nconst View = styled.div`\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n // padding: ${spacings.nudge * 2}px 0;\n // overflow: hidden;\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n`;\n\nconst IconItemView = styled.div`\n transition: all ease-in-out 0.2s;\n\n &:hover {\n transform: scale(1.1);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst StyledLink = styled(Link)<{ textColor?: string }>`\n display: block;\n padding: ${spacings.nudge * 2}px ${spacings.nudge * 1.5}px;\n margin: -${spacings.nudge * 2}px -${spacings.nudge * 1.5}px;\n color: ${({ theme, textColor }) => textColor || color(theme).dark};\n`;\n\nconst SocialList: FC<{\n isInverted?: boolean;\n items?: { href: string; icon: React.ReactNode }[];\n className?: string;\n}> = ({ isInverted = false, items, className }) => {\n const theme = React.useContext(ThemeContext);\n\n return (\n <View className={className}>\n {items &&\n items.map((item, i) => (\n <IconItemView key={i}>\n <StyledLink\n isExternal\n href={item.href}\n textColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n >\n {item.icon}\n </StyledLink>\n </IconItemView>\n ))}\n </View>\n );\n};\n\nexport default SocialList;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\n} from 'utils/styles';\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport Bdot from 'components/blocks/Bdot';\nimport SocialList from 'components/blocks/SocialList';\n\nconst MainView = styled(Wrapper)<{ isInverted?: boolean }>`\n background-color: ${({ theme, isInverted }) =>\n isInverted && color(theme).dark};\n`;\n\nconst StyledLink = styled(Link)`\n display: inline-block;\n padding: ${spacings.nudge * 0.5}px 0;\n color: inherit;\n text-decoration: underline;\n`;\n\n/**** MAIN FOOTER CONTENT ****/\nconst Content = styled.div<{ isInverted?: boolean }>`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n margin-left: -${spacings.spacer}px;\n margin-right: -${spacings.spacer}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n\n & > * {\n flex: 1;\n }\n\n & > *:last-child {\n flex: 1 1 100%;\n }\n\n @media ${mq.medium} {\n flex-direction: row;\n flex-wrap: wrap;\n padding-top: ${spacings.spacer}px;\n padding-bottom: ${spacings.spacer}px;\n\n & > *:last-child {\n max-width: 600px;\n }\n }\n\n @media ${mq.large} {\n & > *:last-child {\n flex: 1;\n max-width: 100%;\n }\n }\n`;\n\nconst ContentBlock = styled.div<{\n direction?: 'row' | 'column';\n topSpace?: string;\n hAlign?: 'left' | 'center' | 'right';\n}>`\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n\n padding: ${spacings.spacer}px;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n flex-direction: ${({ direction }) => direction || 'column'};\n align-items: flex-start;\n padding-top: ${({ topSpace }) => topSpace && topSpace};\n text-align: left;\n min-width: 330px;\n }\n\n @media ${mq.large} {\n align-items: ${({ hAlign }) =>\n hAlign === 'right'\n ? 'flex-end'\n : hAlign === 'center'\n ? 'center'\n : 'flex-start'};\n text-align: ${({ hAlign }) => hAlign && hAlign};\n }\n`;\n\nconst LogoLink = styled(Link)`\n display: inline-block;\n color: inherit;\n`;\n\nconst ContactData = styled(Copy)`\n text-align: center;\n\n p {\n margin: 0;\n padding: 0;\n }\n\n @media ${mq.medium} {\n text-align: left;\n margin-top: auto;\n padding: ${spacings.nudge * 2}px 0;\n }\n`;\n\nconst SiteLinksView = styled.div`\n flex: 50%;\n display: flex;\n flex-direction: column;\n text-align: center;\n\n margin: 0;\n\n & + & {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n\n @media ${mq.medium} {\n padding: 0 ${spacings.nudge * 3}px;\n text-align: left;\n\n & + & {\n padding-top: 0;\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n }\n`;\n\nconst SiteLink = styled(StyledLink)`\n font-weight: ${({ theme }) => font(theme)['copy-b'].medium.weight};\n font-family: ${({ theme }) => font(theme)['copy-b'].medium.family};\n ${({ theme }) => withRange(font(theme)['copy-b'].medium.size, 'font-size')}\n line-height: ${({ theme }) => font(theme)['copy-b'].medium.lineHeight};\n`;\n\nconst LinkWrapper = styled(Copy)<{ isActive?: boolean; isInverted?: boolean }>`\n display: inline-block;\n position: relative;\n padding-bottom: 3px;\n\n &:before {\n content: ${({ isActive }) => (isActive ? `\"\"` : undefined)};\n position: absolute;\n left: -12px;\n top: 50%;\n height: 4px;\n width: 4px;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 4px;\n\n transform: translateY(-100%);\n }\n\n &:after {\n content: '';\n position: absolute;\n left: 0;\n bottom: 0;\n right: 0;\n height: 1px;\n background-color: ${({ theme }) => color(theme).primary.medium};\n margin-top: ${spacings.nudge * 10}px;\n opacity: 0;\n\n transition: opacity 0.2s ease-in-out;\n\n ${SiteLink}:hover > & {\n opacity: 1;\n }\n }\n`;\n\n/**** BOTTOM FOOTER CONTENT ****/\nconst BottomWrapper = styled(Wrapper)`\n background-color: ${({ theme }) => color(theme).mono.light};\n`;\n\nconst BottomView = styled(Wrapper)`\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 100%;\n min-height: 41px;\n\n padding-top: ${spacings.nudge * 1.5}px;\n padding-bottom: ${spacings.nudge * 1.5}px;\n\n color: ${({ theme }) => color(theme).dark};\n\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n justify-content: flex-end;\n }\n`;\n\n/**** FOOTER SECTION ****/\nconst Footer: FC<{\n isInverted?: boolean;\n logo?: {\n img?: string;\n link?: string;\n };\n columnTopSpace?: string;\n contactData?: string;\n siteLinks?: Array<LinkProps & { label?: string; isActive?: boolean }>;\n newsTitle?: string;\n newsText?: string;\n newsForm?: (isInverted?: boolean) => React.ReactNode;\n socials?: Array<{ icon: React.ReactNode; href: string }>;\n bottomLinks?: { href: string; label?: string; isExternal?: boolean }[];\n brandIcon?: React.ReactNode;\n}> = ({\n isInverted = false,\n logo,\n columnTopSpace,\n contactData,\n siteLinks,\n newsTitle,\n newsText,\n newsForm,\n socials,\n bottomLinks,\n brandIcon,\n}) => {\n // setup siteLinks columns\n const siteLinksColLeft =\n siteLinks && siteLinks.length > 6\n ? siteLinks?.slice(0, Math.ceil(siteLinks.length / 2))\n : siteLinks;\n const siteLinksColRight =\n siteLinks && siteLinks.length > 6\n ? siteLinks?.slice(Math.ceil(siteLinks.length / 2))\n : undefined;\n\n return (\n <Section as=\"footer\" bgMode=\"full\" bgColor=\"transparent\">\n <MainView clampWidth=\"large\" isInverted={isInverted}>\n <Wrapper addWhitespace>\n <Content isInverted={isInverted}>\n <ContentBlock>\n {logo?.img && (\n <LogoLink href={logo?.link}>\n <img src={logo?.img} />\n </LogoLink>\n )}\n {contactData && (\n <ContactData\n size=\"small\"\n isInverted={isInverted}\n innerHTML={contactData}\n />\n )}\n </ContentBlock>\n <ContentBlock\n direction=\"row\"\n topSpace={logo && columnTopSpace}\n >\n {siteLinksColLeft && (\n <SiteLinksView>\n {siteLinksColLeft.map((link, i) => (\n <SiteLink key={i} href={link.href}>\n <LinkWrapper\n type=\"copy\"\n isActive={link.isActive}\n isInverted={isInverted}\n >\n {link.label || link.href}\n </LinkWrapper>\n </SiteLink>\n ))}\n </SiteLinksView>\n )}\n {siteLinksColRight && (\n <SiteLinksView>\n {siteLinksColRight.map((link, i) => (\n <SiteLink key={i} href={link.href}>\n <LinkWrapper\n type=\"copy\"\n isActive={link.isActive}\n isInverted={isInverted}\n >\n {link.label || link.href}\n </LinkWrapper>\n </SiteLink>\n ))}\n </SiteLinksView>\n )}\n </ContentBlock>\n <ContentBlock\n topSpace={logo && columnTopSpace}\n hAlign={\n !newsTitle && !newsText && !newsForm\n ? 'right'\n : 'left'\n }\n >\n {newsTitle && (\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {newsTitle}\n </Copy>\n )}\n {newsText && (\n <Copy\n size=\"small\"\n isInverted={isInverted}\n innerHTML={newsText}\n />\n )}\n {newsForm && newsForm(isInverted)}\n {socials && (\n <SocialList\n isInverted={isInverted}\n items={socials.map((item) => {\n return {\n href: item.href,\n icon: item.icon,\n };\n })}\n />\n )}\n </ContentBlock>\n </Content>\n </Wrapper>\n </MainView>\n\n {bottomLinks && (\n <BottomWrapper clampWidth=\"large\">\n <BottomView addWhitespace>\n {bottomLinks.map((link, i) => {\n if (link.href) {\n return (\n <StyledLink\n key={i}\n isExternal={link.isExternal}\n href={link.href}\n >\n <Copy size=\"small\">\n {link.label || link.href}\n </Copy>\n </StyledLink>\n );\n } else return null;\n })}\n {brandIcon ? brandIcon : <Bdot />}\n </BottomView>\n </BottomWrapper>\n )}\n </Section>\n );\n};\n\nexport default Footer;\n","export const getBgImage = (\n bgImage: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n },\n mq?: 'small' | 'medium' | 'semilarge' | 'large' | 'xlarge'\n): string => {\n switch (mq) {\n default:\n case 'small':\n return bgImage.small;\n\n case 'medium':\n return (\n bgImage.medium ||\n bgImage.semilarge ||\n bgImage.large ||\n bgImage.xlarge ||\n bgImage.small\n );\n\n case 'semilarge':\n return (\n bgImage.semilarge ||\n bgImage.large ||\n bgImage.xlarge ||\n bgImage.medium ||\n bgImage.small\n );\n\n case 'large':\n return (\n bgImage.large ||\n bgImage.xlarge ||\n bgImage.semilarge ||\n bgImage.medium ||\n bgImage.small\n );\n\n case 'xlarge':\n return (\n bgImage.xlarge ||\n bgImage.large ||\n bgImage.semilarge ||\n bgImage.medium ||\n bgImage.small\n );\n }\n};\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { getBgImage } from 'utils/backgroundImage';\nimport { canUseWebP } from 'utils/usePoster';\nimport { FC, useEffect, useRef, useState } from 'react';\n\nexport interface HeaderKenBurnsImageProps {\n small: string;\n medium: string;\n large: string;\n xlarge: string;\n webp?: {\n small: string;\n medium: string;\n large: string;\n xlarge: string;\n };\n}\n\nconst AnimationContainer = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n overflow: hidden;\n`;\n\nconst PosterImage = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n`;\n\nconst AnimationImage = styled.div<{ scale?: number; opacity?: number }>`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n transition-property: opacity, transform;\n transition-duration: ${({ scale }) => `2s, ${scale === 1 ? '0s' : '13s'}`};\n transition-delay: ${({ scale }) =>\n `${scale === 1 ? '1s' : '0s'}, ${scale === 1 ? '3s' : '0s'}`};\n\n opacity: ${({ opacity }) => opacity && opacity};\n transform: scale(${({ scale }) => scale || 1})\n rotate(${({ scale }) => (scale !== 1 ? 0.04 : 0)}deg);\n\n will-change: transform, opacity;\n`;\n\nconst AnimationImages: FC<{\n zoom?: number;\n images: { id: number | string; image: string }[];\n}> = ({ zoom = 1.08, images }) => {\n const intervalRef = useRef<number | null>();\n const [activeImg, setActiveImg] = useState<number>(-1);\n\n useEffect(() => {\n const changeImage = () => {\n setActiveImg((prev) => {\n return (prev + 1) % images.length;\n });\n };\n\n // changeImage();\n window.setTimeout(changeImage, 200);\n if (intervalRef.current) window.clearInterval(intervalRef.current);\n intervalRef.current = window.setInterval(changeImage, 10000);\n\n return () => {\n if (intervalRef.current) window.clearInterval(intervalRef.current);\n };\n }, [images]);\n\n return (\n <>\n {images.map((img, i) => (\n <AnimationImage\n key={i}\n style={{\n backgroundImage: `url(${img.image})`,\n zIndex: i === activeImg ? 1 : 0,\n }}\n scale={i === activeImg ? zoom : 1}\n opacity={i === activeImg ? 1 : 0}\n />\n ))}\n </>\n );\n};\n\nconst preloadImages = (imageUrls: string[]) => {\n const images = imageUrls.map((src, i) => {\n return new Promise((res) => {\n const img = new Image();\n img.src = src;\n img.onload = () => res({ url: src, i });\n });\n });\n\n return images;\n};\n\ntype KenBurnsMq = 'small' | 'medium' | 'large' | 'xlarge';\n\nconst HeaderKenBurns: React.FC<{\n images: HeaderKenBurnsImageProps[];\n className?: string;\n}> = ({ images, className, children }) => {\n const mqs: KenBurnsMq[] = ['small', 'medium', 'large', 'xlarge'];\n const currentMq = useMediaQuery(mqs) as KenBurnsMq | undefined;\n\n const [loadedImages, setLoadedImages] = React.useState<{\n [key: string]: { id: number | string; image: string }[];\n }>({\n small: [],\n medium: [],\n large: [],\n xlarge: [],\n });\n\n React.useEffect(() => {\n if (currentMq) {\n const loadedForMq = loadedImages[currentMq];\n const useWebp = canUseWebP();\n\n if (loadedForMq.length < images.length && images.length >= 2) {\n const requestedImages = images.map((img) =>\n img.webp && useWebp ? img.webp[currentMq] : img[currentMq]\n );\n\n const resolve = async (items: any) => {\n for (const item of items) {\n const x = await item;\n\n setLoadedImages((prev) => {\n // check if image id already exists in array\n if (!prev[currentMq].find((e) => e.id === x.i)) {\n return {\n ...prev,\n [currentMq]: [\n ...prev[currentMq],\n {\n id: x.i,\n image: x.url,\n },\n ],\n };\n } else return prev;\n });\n }\n };\n\n resolve(preloadImages(requestedImages));\n }\n }\n }, [currentMq, images, loadedImages]);\n\n return (\n <AnimationContainer className={className}>\n {currentMq && loadedImages[currentMq].length >= images.length ? (\n <AnimationImages images={loadedImages[currentMq]} />\n ) : (\n <PosterImage\n style={{\n backgroundImage: `url(${getBgImage(\n images[0],\n currentMq\n )})`,\n }}\n />\n )}\n {children}\n </AnimationContainer>\n );\n};\n\nexport default HeaderKenBurns;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { usePoster } from 'utils/usePoster';\n\ninterface HeaderPosterImageProps {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n webp?: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n };\n}\n\nconst PosterView = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n min-height: 200px;\n display: block;\n flex: 1 0 0px;\n }\n`;\n\nconst HeaderPoster: React.FC<{\n bgImage: HeaderPosterImageProps;\n className?: string;\n}> = ({ bgImage, className, children }) => {\n const currentImage = usePoster(bgImage);\n return (\n <PosterView\n style={\n currentImage ? { backgroundImage: `url(${currentImage})` } : {}\n }\n className={className}\n >\n {children}\n </PosterView>\n );\n};\n\nexport default HeaderPoster;\n","import * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n FontOptionType,\n getFonts as font,\n mq,\n styleTextColor,\n withRange,\n} from 'utils/styles';\n\n// Styles\nconst BaseStyles = styled.h1<{\n size: FontOptionType;\n hyphens?: boolean;\n hasShadow?: boolean;\n textColor?: string;\n textGradient?: string;\n}>`\n margin: 0;\n padding: 0;\n ${({ textColor, textGradient }) => styleTextColor(textColor, textGradient)}\n\n hyphens: auto;\n /* -webkit-hyphens: auto; */\n /* overflow-wrap: break-word; */\n\n ${(props: { hyphens?: boolean }) =>\n !props.hyphens &&\n css`\n @media ${mq.large} {\n hyphens: none;\n }\n `}\n\n text-shadow: ${({ hasShadow }) =>\n hasShadow && '1px 2px 8px rgba(0, 0, 0, 0.25)'};\n`;\n\nconst View = styled(BaseStyles)`\n font-family: ${({ theme, size }) => font(theme).callout[size].family};\n font-weight: ${({ theme, size }) => font(theme).callout[size].weight};\n font-style: ${({ theme, size }) => font(theme).callout[size].style};\n ${({ theme, size }) =>\n withRange(font(theme).callout[size].size, 'font-size')}\n line-height: ${({ theme, size }) => font(theme).callout[size].lineHeight};\n letter-spacing: ${({ theme, size }) =>\n font(theme).callout[size].letterSpacing};\n text-transform: ${({ theme, size }) =>\n font(theme).callout[size].textTransform};\n`;\n\nexport type CalloutTag =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'span'\n | 'div';\n\nconst Callout: React.FC<{\n isInverted?: boolean;\n as?: CalloutTag;\n size?: FontOptionType;\n textColor?: string;\n textGradient?: string;\n hyphens?: boolean;\n hasShadow?: boolean;\n innerHTML?: string;\n\n className?: string;\n}> = ({\n isInverted,\n as = 'h2',\n className,\n size = 'medium',\n textColor,\n textGradient,\n hyphens = false,\n hasShadow = false,\n innerHTML,\n children,\n}) => {\n const theme = React.useContext(ThemeContext);\n const fontSettings = font(theme)?.callout?.[size];\n\n return (\n <View\n as={as}\n size={size}\n textColor={\n textColor ||\n (isInverted ? fontSettings.colorInverted : fontSettings.color)\n }\n textGradient={\n textGradient ||\n (!textColor\n ? isInverted\n ? fontSettings.colorGradientInverted\n : fontSettings.colorGradient\n : undefined)\n }\n hyphens={hyphens}\n hasShadow={hasShadow}\n dangerouslySetInnerHTML={\n innerHTML && !children ? { __html: innerHTML } : undefined\n }\n className={className}\n >\n {children}\n </View>\n );\n};\n\nexport default Callout;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { useState, useEffect } from 'react';\nimport Image from 'components/blocks/Image';\nimport { useMediaQuery } from 'utils/useMediaQuery';\n\ninterface HeaderVideoImageProps {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n webp?: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n };\n}\n\nconst PosterView = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n min-height: 200px;\n display: block;\n flex: 1 0 0px;\n }\n`;\n\nconst PlaceholderImg = styled(Image)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n z-index: 0;\n`;\n\nconst AutoplayVideo = styled.video<{ isVisible?: boolean }>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n object-position: center;\n opacity: ${({ isVisible }) => (isVisible ? 1 : 0)};\n pointer-events: none;\n z-index: 1;\n\n transition: opacity 0.3s ease-in-out;\n`;\n\ntype HeaderVideoMq = 'small' | 'medium' | 'semilarge' | 'large' | 'xlarge';\n\nconst HeaderVideo: React.FC<{\n placeholderImg?: HeaderVideoImageProps;\n videoUrl?: string;\n className?: string;\n}> = ({ placeholderImg, videoUrl, className, children }) => {\n const [isLoaded, setLoaded] = useState<boolean>(false);\n const currentMq = useMediaQuery([\n 'small',\n 'medium',\n 'semilarge',\n 'large',\n 'xlarge',\n ]) as HeaderVideoMq | undefined;\n\n const isMobile = currentMq === undefined || currentMq === 'small';\n\n useEffect(() => {\n if (isMobile) setLoaded(false);\n }, [isMobile]);\n\n return (\n <PosterView className={className}>\n {placeholderImg?.small && !isLoaded && (\n <PlaceholderImg coverSpace {...placeholderImg} />\n )}\n {videoUrl && !isMobile && (\n <AutoplayVideo\n isVisible={isLoaded}\n src={videoUrl}\n muted\n autoPlay\n loop\n onCanPlayThrough={() => setLoaded(true)}\n />\n )}\n {children}\n </PosterView>\n );\n};\n\nexport default HeaderVideo;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { CalloutTag } from 'components/typography/Callout';\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Grid from 'components/base/Grid';\nimport Wrapper from 'components/base/Wrapper';\nimport HeaderKenBurns, { HeaderKenBurnsImageProps } from './HeaderKenBurns';\nimport HeaderPoster from './HeaderPoster';\nimport Actions from 'components/blocks/Actions';\nimport Callout from 'components/typography/Callout';\nimport HeaderVideo from './HeaderVideo';\n\ninterface HeaderImageProps {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n webp?: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n };\n}\n\nconst View = styled.header`\n position: relative;\n`;\n\nconst HeaderWrapper = styled(Wrapper)`\n display: flex;\n flex-direction: column;\n height: 100%;\n`;\n\nconst PosterContent = styled.div`\n position: relative;\n display: none;\n width: 100%;\n margin: auto;\n z-index: 3;\n text-align: center;\n padding: 0 ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n display: block;\n max-width: none;\n margin-left: 0;\n text-align: left;\n padding-left: ${(1 / 28) * 100}%;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst PosterContentMobile = styled(PosterContent)`\n display: block;\n padding-top: ${spacings.spacer * 2}px;\n ${withRange([spacings.spacer * 2, spacings.spacer * 4], 'padding-bottom')}\n\n @media ${mq.semilarge} {\n display: none;\n }\n`;\n\nconst Badge = styled.div<{ showOnMobile?: boolean }>`\n display: ${({ showOnMobile }) => (showOnMobile ? 'block' : 'none')};\n position: relative;\n height: 234px;\n width: 234px;\n margin-left: auto;\n margin-right: ${spacings.spacer}px;\n margin-top: -173px;\n z-index: 3;\n\n @media ${mq.semilarge} {\n display: block;\n margin-right: ${spacings.spacer * 4}px;\n }\n\n @media ${mq.xlarge} {\n width: 392px;\n height: 392px;\n margin-left: 0;\n margin-top: -300px;\n\n right: -50%;\n transform: translate(\n ${spacings.wrapper / 2 - (392 + spacings.spacer * 3)}px\n );\n }\n`;\n\nconst Poster: FC<{\n videoUrl?: string;\n images?: HeaderImageProps[];\n className?: string;\n}> = ({ videoUrl, images, className, children }) => {\n if (!videoUrl) {\n if (!images || images.length === 0) return <div>{children}</div>;\n else if (images.length === 1)\n return (\n <HeaderPoster bgImage={images[0]} className={className}>\n {children}\n </HeaderPoster>\n );\n else\n return (\n <HeaderKenBurns\n images={images.map((img) => {\n return {\n ...img,\n } as HeaderKenBurnsImageProps;\n })}\n className={className}\n >\n {children}\n </HeaderKenBurns>\n );\n } else {\n return (\n <HeaderVideo\n videoUrl={videoUrl}\n placeholderImg={images?.[0]}\n className={className}\n >\n {children}\n </HeaderVideo>\n );\n }\n};\n\nconst StyledPoster = styled(Poster)<{ gradient?: string; size?: number }>`\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-end;\n height: ${({ size }) => (size ? size * 100 + 'vh' : '100vh')};\n max-height: 1100px;\n\n ${withRange([spacings.spacer * 7, spacings.spacer * 8], 'padding-top')};\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4.5],\n 'padding-bottom'\n )};\n\n &: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 bgImage,\n embedId,\n playIcon,\n primaryAction,\n secondaryAction,\n isInverted = false,\n hasBack = false,\n}) => {\n const theme = useContext(ThemeContext);\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper addWhitespace clampWidth=\"small\">\n <div>\n {embedId && bgImage && (\n <VideoCard\n bgImage={bgImage}\n embedId={embedId}\n playIcon={playIcon}\n />\n )}\n </div>\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsVideo;\n","import React, { useContext, useEffect, useRef, useState } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\n\nimport NewsCard, { NewsCardProps } from 'components/blocks/NewsCard';\nimport { getColors, mq, spacings, withRange } from 'utils/styles';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Intro from 'components/blocks/Intro';\nimport Tag from 'components/blocks/Tag';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport { useObserverSupport } from 'utils/useObserverSupport';\nimport Copy from 'components/typography/Copy';\nimport { useScrollTo } from 'utils/useScrollTo';\nimport Pointer from 'components/buttons/Pointer';\n\nconst StyledIntro = styled(Intro)`\n ${withRange([spacings.spacer * 1.5, spacings.spacer * 3], 'margin-bottom')};\n`;\n\nconst TagContainer = styled.div`\n margin: -${spacings.nudge}px;\n ${withRange([spacings.spacer * 1.5, spacings.spacer * 3], 'margin-bottom')};\n\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n`;\n\nconst TagWrapper = styled.div`\n padding: ${spacings.nudge}px;\n`;\n\nconst List = styled.div`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: 'flex-start';\n align-items: flex-start;\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n padding-left: 20px;\n padding-top: 40px;\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n\n @media ${mq.large} {\n & > * {\n flex: 1 0 33.33%;\n max-width: 33.33%;\n }\n }\n`;\n\nconst ListFooter = styled.div`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n text-align: center;\n\n @media ${mq.medium} {\n text-align: left;\n }\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 2 ? 'block' : 'none'};\n`;\n\ntype NewsOverviewMq = 'small' | 'semilarge' | 'large';\n\nconst NewsOverview: React.FC<{\n title: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n news: NewsCardProps[];\n activeTag?: string;\n tags?: string[];\n queryParams?: Record<string, any>;\n onTagClick?: (tag: string, insideList?: boolean) => void;\n showMoreText?: string;\n\n isInverted?: boolean;\n hasBack?: boolean;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n\n news,\n activeTag,\n tags,\n queryParams,\n onTagClick,\n showMoreText,\n\n isInverted,\n hasBack,\n}) => {\n const theme = useContext(ThemeContext);\n\n activeTag = queryParams?.selected\n ? decodeURI(queryParams.selected)\n : activeTag;\n const [selectedTag, setSelectedTag] = useState<string | undefined>(\n activeTag || undefined\n );\n\n const mqs: NewsOverviewMq[] = ['small', 'semilarge', 'large'];\n const currentMq = useMediaQuery(mqs) as NewsOverviewMq | undefined;\n const [itemsPerRow, setItemsPerRow] = useState(3);\n const [visibleRows, setVisibleRows] = useState(3);\n\n const targetRef = useRef<HTMLDivElement>(null);\n const observerSupported = useObserverSupport();\n\n const newsCount = news?.length || 0;\n\n const setNewPos = useScrollTo(800);\n const { sheetRefs: cardRefs, triggerCalculation } = useEqualSheetHeight({\n listLength: Math.min(visibleRows * itemsPerRow, newsCount),\n identifiers: [\n '[data-sheet=\"head\"]',\n '[data-sheet=\"title\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: 3,\n xlarge: 3,\n },\n });\n\n useEffect(() => {\n switch (currentMq) {\n case 'large':\n setItemsPerRow(3);\n break;\n\n case 'semilarge':\n setItemsPerRow(2);\n break;\n\n case 'small':\n setItemsPerRow(1);\n if (visibleRows < 3) setVisibleRows(3);\n break;\n\n default:\n setItemsPerRow(1);\n }\n }, [currentMq, visibleRows]);\n\n useEffect(() => {\n setSelectedTag(activeTag);\n }, [activeTag]);\n\n useEffect(() => {\n // if new tag is selected reset list rows to three visible item rows\n setVisibleRows(3);\n triggerCalculation();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedTag]);\n\n useEffect(() => {\n // cancel if intersection observers are not supported\n if (!observerSupported) return;\n\n const element = targetRef.current;\n let observer: IntersectionObserver;\n\n if (element) {\n const options = {\n rootMargin: '0px 0px 100px 0px',\n threshold: 0,\n };\n\n observer = new IntersectionObserver((entries) => {\n const entry = entries[0];\n if (entry?.isIntersecting) {\n // on bottom of the wrapper load more news\n if (visibleRows < Math.ceil(newsCount / itemsPerRow)) {\n setVisibleRows((prev) => prev + 1);\n }\n }\n }, options);\n observer.observe(element);\n }\n\n return () => {\n if (observer) observer.disconnect();\n };\n }, [itemsPerRow, newsCount, visibleRows, observerSupported]);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? getColors(theme).dark\n : hasBack\n ? getColors(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper addWhitespace>\n {title && (\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n )}\n {tags && (\n <TagContainer>\n {tags.sort().map((tag, i) => {\n return (\n <TagWrapper key={'tag_' + i}>\n <Tag\n isInverted={isInverted}\n onClick={() => {\n if (!onTagClick) {\n // if no callback is defined handle filtering on client side inside the component\n setSelectedTag(\n selectedTag === tag\n ? undefined\n : tag\n );\n } else onTagClick(tag, false);\n }}\n isActive={selectedTag === tag}\n >\n {tag}\n </Tag>\n </TagWrapper>\n );\n })}\n </TagContainer>\n )}\n <List>\n {news &&\n news\n .filter((item) =>\n selectedTag ? item.tag === selectedTag : true\n )\n .filter((_, i) => i < visibleRows * itemsPerRow)\n .map((item, i) => {\n return (\n <div key={i} ref={cardRefs[i]}>\n <NewsCard\n isInverted={isInverted}\n onTagClick={(name) => {\n // scroll back to top\n setNewPos(0);\n if (!onTagClick) {\n // if no callback is defined handle filtering on client side inside the component\n setSelectedTag(\n selectedTag === name\n ? undefined\n : name\n );\n } else {\n onTagClick(name, true);\n }\n }}\n {...item}\n />\n </div>\n );\n })}\n </List>\n <div ref={targetRef} />\n {!observerSupported && (\n <ListFooter>\n {news && news.length > 0 && (\n <Copy\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n >\n <ShowMore\n itemCount={news.length}\n onClick={(ev) => {\n ev.preventDefault();\n if (\n visibleRows <\n Math.ceil(newsCount / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows < newsCount / itemsPerRow && (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMoreText ||\n 'mehr anzeigen'}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n </Copy>\n )}\n </ListFooter>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsOverview;\n","import { useEffect, useState } from 'react';\n\nexport const useObserverSupport = (inital?: boolean) => {\n const [observerSupported, setObserverSupport] = useState(inital || false);\n\n useEffect(() => {\n if (\n !('IntersectionObserver' in window) ||\n !('IntersectionObserverEntry' in window) ||\n !('intersectionRatio' in window.IntersectionObserverEntry.prototype)\n ) {\n setObserverSupport(false);\n } else {\n setObserverSupport(true);\n }\n }, []);\n\n return observerSupported;\n};\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.a<{ inverted?: boolean; disable?: boolean }>`\n min-height: 3em;\n height: 3.65em;\n min-width: 210px;\n padding: 0.1em 1.2em;\n\n display: inline-block;\n display: inline-flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: ${({ theme }) => font(theme).copy.medium.weight};\n text-align: center;\n text-decoration: none;\n line-height: 1;\n letter-spacing: ${({ theme }) => font(theme).copy.medium.letterSpacing};\n\n perspective: 1000;\n -webkit-font-smoothing: subpixel-antialiased;\n -webkit-perspective: 1000;\n -moz-osx-font-smoothing: grayscale;\n will-change: auto;\n\n outline: none;\n border: none;\n user-select: none;\n cursor: pointer;\n\n pointer-events: ${({ disable }) => (disable ? 'none' : 'all')};\n\n // will-change: transform;\n\n background-color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).light\n : inverted\n ? color(theme).dark\n : color(theme).light};\n text-align: left;\n\n transition: all ease-in-out 0.2s;\n\n & > * {\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).light\n : inverted\n ? color(theme).dark\n : color(theme).light};\n }\n\n & > :not(:last-child) {\n padding-right: ${spacings.nudge}px;\n }\n\n &:hover {\n transform: scale(1.02);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\ninterface Props {\n isInverted?: boolean;\n isDisabled?: boolean;\n onClick?: () => void;\n className?: string;\n}\n\nexport type BtnProps = Props & {\n as?: 'button';\n};\n\nexport type LinkProps = Props & {\n as?: 'a';\n href?: string;\n isExternal?: boolean;\n};\n\nconst Button: React.FC<BtnProps | LinkProps> = React.forwardRef(\n (\n { as, isInverted, isDisabled, onClick, className, children, ...rest },\n ref\n ) => {\n if (as === 'button') {\n return (\n <View\n ref={ref}\n as={as as any}\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n } else {\n return (\n <View\n ref={ref}\n as={as as any}\n href={(rest as LinkProps).href}\n target={\n (rest as LinkProps).isExternal ? '_blank' : undefined\n }\n rel={\n (rest as LinkProps).isExternal\n ? 'noopener noreferrer'\n : undefined\n }\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n }\n }\n);\n\nButton.displayName = 'Button';\n\nconst Icon = styled.div<{ iconColor?: string }>`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n width: 35px;\n height: 35px;\n\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).primary.medium};\n\n transition: transform 0.2s ease-in-out;\n\n ${View}:hover > & {\n transform: translateX(3px);\n }\n`;\n\nconst Label = styled.span`\n display: inline-block;\n`;\n\nexport default { View: Button, Label: Label, Icon: Icon };\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.a<{ inverted?: boolean; disable?: boolean }>`\n min-height: 3em;\n height: 3.65em;\n min-width: 210px;\n padding: 0.1em 1.2em;\n\n display: inline-block;\n display: inline-flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: ${({ theme }) => font(theme).copy.medium.weight};\n text-align: center;\n text-decoration: none;\n line-height: 1;\n letter-spacing: ${({ theme }) => font(theme).copy.medium.letterSpacing};\n\n perspective: 1000;\n -webkit-font-smoothing: subpixel-antialiased;\n -webkit-perspective: 1000;\n -moz-osx-font-smoothing: grayscale;\n will-change: auto;\n\n outline: none;\n box-shadow: none;\n border: solid 1px\n ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n user-select: none;\n cursor: pointer;\n\n pointer-events: ${({ disable }) => (disable ? 'none' : 'all')};\n\n // will-change: transform;\n\n background-color: transparent;\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n text-align: center;\n\n transition: all ease-in-out 0.2s;\n\n & > * {\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n }\n\n & > :not(:last-child) {\n padding-right: ${spacings.nudge}px;\n }\n\n &:hover {\n transform: scale(1.04);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\ninterface Props {\n isInverted?: boolean;\n isDisabled?: boolean;\n onClick?: () => void;\n className?: string;\n}\n\nexport type BtnProps = Props & {\n as?: 'button';\n};\n\nexport type LinkProps = Props & {\n as?: 'a';\n href?: string;\n isExternal?: boolean;\n};\n\nconst ButtonGhost: React.FC<BtnProps | LinkProps> = React.forwardRef(\n (\n { as, isInverted, isDisabled, onClick, className, children, ...rest },\n ref\n ) => {\n if (as === 'button') {\n return (\n <View\n ref={ref}\n as={as as any}\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n } else {\n return (\n <View\n ref={ref}\n as={as as any}\n href={(rest as LinkProps).href}\n target={\n (rest as LinkProps).isExternal ? '_blank' : undefined\n }\n rel={\n (rest as LinkProps).isExternal\n ? 'noopener noreferrer'\n : undefined\n }\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n }\n }\n);\n\nButtonGhost.displayName = 'Button Ghost';\n\nconst Icon = styled.div<{ iconColor?: string }>`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n width: 35px;\n height: 35px;\n\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).primary.medium};\n\n transition: transform 0.2s ease-in-out;\n\n ${View}:hover > & {\n transform: translateX(3px);\n }\n`;\n\nconst Label = styled.span`\n display: inline-block;\n`;\n\nexport default { View: ButtonGhost, Label: Label, Icon: Icon };\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.form`\n width: 100%;\n display: flex;\n flex-direction: column;\n\n color: ${({ theme }) => color(theme).mono.dark};\n\n @media ${mq.medium} {\n flex-direction: row;\n }\n`;\n\nconst InputField = styled.input<{ backColor?: string }>`\n display: block;\n width: 100%;\n height: 100%;\n max-height: 49px;\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 3.5}px;\n color: inherit;\n\n background-color: ${({ backColor }) => backColor && backColor};\n box-shadow: none;\n border: none;\n border-right: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n font-family: ${({ theme }) => font(theme).copy.small.family};\n font-weight: ${({ theme }) => font(theme).copy.small.weight};\n ${({ theme }) => withRange(font(theme).copy.small.size, 'font-size')}\n line-height: ${({ theme }) => font(theme).copy.small.lineHeight};\n\n &::placeholder {\n color: inherit;\n }\n`;\n\nconst SubmitBtn = styled.button<{ isInverted?: boolean }>`\n display: inline-flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 49px;\n\n margin-top: ${spacings.spacer * 0.5}px;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).dark : color(theme).light};\n\n outline: none;\n border: none;\n user-select: none;\n cursor: pointer;\n transition: all ease-in-out 0.2s;\n\n @media ${mq.medium} {\n width: 100px;\n margin-top: 0;\n }\n\n &:hover {\n transform: scale(1.05);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst CompactForm: FC<{\n isInverted?: boolean;\n value?: string;\n placeholder?: string;\n method?: string;\n action?: string;\n buttonIcon?: React.ReactNode;\n onSubmit?: (ev: React.SyntheticEvent<HTMLFormElement>) => void;\n onClick?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onFocus?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onBlur?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n backgroundStyle?: 'white' | 'grey';\n className?: string;\n}> = ({\n isInverted = false,\n value,\n placeholder,\n method,\n action,\n buttonIcon,\n onSubmit,\n onClick,\n onBlur,\n onFocus,\n backgroundStyle = 'grey',\n className,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <View\n onSubmit={onSubmit}\n method={method}\n action={action}\n className={className}\n >\n <InputField\n placeholder={placeholder}\n value={value}\n onClick={onClick}\n onBlur={onBlur}\n onFocus={onFocus}\n backColor={\n backgroundStyle === 'grey' || isInverted\n ? color(theme).mono.light\n : color(theme).light\n }\n />\n {buttonIcon && (\n <SubmitBtn isInverted={isInverted}>{buttonIcon}</SubmitBtn>\n )}\n </View>\n );\n};\n\nexport default CompactForm;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.div<{ isInverted?: boolean }>`\n position: relative;\n width: 100%;\n display: flex;\n flex-direction: row;\n\n color: ${({ theme }) => color(theme).dark};\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).mono.light};\n`;\n\nconst InputField = styled.input<{\n hasLeftIcon?: boolean;\n hasRightIcon?: boolean;\n}>`\n display: block;\n width: 100%;\n height: 100%;\n padding: ${spacings.nudge * 3}px ${spacings.nudge * 3.5}px;\n padding-left: ${({ hasLeftIcon }) =>\n hasLeftIcon && spacings.spacer * 2.5 + 'px'};\n padding-right: ${({ hasRightIcon }) =>\n hasRightIcon && spacings.spacer * 2.5 + 'px'};\n color: inherit;\n\n background-color: transparent;\n box-shadow: none;\n border: none;\n border-right: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n font-family: ${({ theme }) => font(theme).copy.small.family};\n font-weight: 400;\n ${({ theme }) => withRange(font(theme).copy.small.size, 'font-size')}\n line-height: 1.25;\n\n &::placeholder {\n color: inherit;\n }\n`;\n\nconst ControlBtn = styled.button<{ isInverted?: boolean }>`\n display: inline-flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 53px;\n\n margin: -2px;\n background-color: transparent;\n color: ${({ theme }) => color(theme).dark};\n\n outline: none;\n border: none;\n user-select: none;\n cursor: pointer;\n /* transition: all ease-in-out 0.2s; */\n\n &:hover {\n transform: scale(1.02);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst SubmitBtn = styled(ControlBtn)`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n`;\n\nconst ClearBtn = styled(ControlBtn)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n`;\n\nconst SearchInput: FC<{\n isInverted?: boolean;\n value?: string;\n placeholder?: string;\n submitIcon?: React.ReactNode;\n clearIcon?: React.ReactNode;\n onSubmit?: () => void;\n onClear?: () => void;\n onClick?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onBlur?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onFocus?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n className?: string;\n}> = ({\n isInverted = false,\n value,\n placeholder,\n submitIcon,\n clearIcon,\n onSubmit,\n onClick,\n onClear,\n onBlur,\n onFocus,\n className,\n}) => {\n const handleKeyDown = (ev: React.KeyboardEvent<HTMLInputElement>) => {\n if (ev.keyCode === 13) {\n onSubmit && onSubmit();\n ev.preventDefault();\n }\n };\n\n return (\n <View isInverted={isInverted} className={className}>\n {submitIcon && (\n <SubmitBtn\n isInverted={isInverted}\n onClick={() => onSubmit && onSubmit()}\n >\n {submitIcon}\n </SubmitBtn>\n )}\n <InputField\n hasLeftIcon={submitIcon !== undefined}\n hasRightIcon={clearIcon !== undefined}\n placeholder={placeholder}\n value={value}\n onClick={onClick}\n onBlur={onBlur}\n onFocus={onFocus}\n onKeyDown={handleKeyDown}\n />\n {clearIcon && (\n <ClearBtn\n isInverted={isInverted}\n onClick={() => onClear && onClear()}\n >\n {clearIcon}\n </ClearBtn>\n )}\n </View>\n );\n};\n\nexport default SearchInput;\n","import { CookieConsentData } from 'components/blocks/CookieConsent';\nimport { Cookie } from './cookie';\nimport StatusFormatter from '../statusFormatter';\n\nexport const isUrlInWhitelist = (\n urlString: string,\n whitelist: string[] = []\n) => {\n let isInWhiteList = false;\n for (let i = 0; i < whitelist.length; i++) {\n if (urlString.indexOf(whitelist[i]) > -1) {\n isInWhiteList = true;\n break;\n }\n }\n return isInWhiteList;\n};\n\nexport const bindConsentButtons = (callback: () => void) => {\n const allConsentButtons = document.querySelectorAll(\n '[data-consent-button], .cookie-consent-button'\n );\n\n for (let i = 0, len = allConsentButtons.length; i < len; i++) {\n allConsentButtons[i].addEventListener('click', callback);\n }\n};\n\nexport const activateTrackingScripts = () => {\n const scriptElements = document.querySelectorAll(\n \"script[type='text/consent_banner_script'], script[type='text/cookie-consent-script']\"\n );\n\n let i = scriptElements.length;\n 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 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 * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowRight: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"18\"\n height=\"13\"\n viewBox=\"0 0 18 13\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M1.85397 7.42546H14.5657L10.533 11.4322c-.1753.1887-.263.4064-.263.6532 0 .2468.0877.4646.263.6533.1899.1742.4091.2613.6575.2613.2484 0 .4676-.0871.6575-.2613l5.6107-5.57454c.0438-.05807.0876-.10888.1315-.15243.0438-.04356.0657-.08711.0657-.13066.0439-.10162.0658-.21775.0658-.34841 0-.13065-.0219-.2613-.0658-.39196-.0438-.05806-.0767-.10887-.0986-.15242-.0219-.04356-.0548-.08711-.0986-.13066L11.848.28308c-.0877-.10162-.1826-.1742-.2849-.21775C11.4608.02178 11.3366 0 11.1905 0c-.1315 0-.2484.02178-.3507.06533s-.2045.11613-.3068.21775c-.1753.18873-.263.40648-.263.65327s.0877.46454.263.65327l4.0327 3.98492H1.85397c-.29223 0-.52235.08347-.69038.25042s-.25204.39559-.25204.68593c0 .27582.08401.49721.25204.66415.16803.16695.39815.25042.69038.25042z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default ArrowRight;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst CrossSmall: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 35 35\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M35 2.77995L32.2201 0 17.5 14.7201 2.77995 0 0 2.77995 14.7201 17.5 0 32.2201 2.77995 35 17.5 20.2799 32.2201 35 35 32.2201 20.2799 17.5 35 2.77995z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default CrossSmall;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Magnifier: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M19.6955 18.267l-4.4964-4.4965c.5464-.687.9836-1.491 1.3114-2.4122.3279-.9211.4918-1.88132.4918-2.88055 0-1.17096-.2263-2.27165-.6791-3.3021-.4372-1.03045-1.0422-1.92818-1.815-2.69321-.7728-.76504-1.6745-1.37393-2.7049-1.8267C10.7728.21858 9.67214 0 8.50117 0S6.22951.21858 5.19906.65574c-1.03045.45277-1.93208 1.06166-2.70492 1.8267-.77283.76503-1.37782 1.66276-1.81498 2.69321C.22638 6.2061 0 7.30679 0 8.47775c0 1.18658.22638 2.29505.67916 3.32555.43716 1.0304 1.04215 1.9282 1.81498 2.6932.77284.765 1.67447 1.3739 2.70492 1.8267 1.03045.4371 2.13114.6557 3.30211.6557.99922 0 1.94383-.1639 2.83373-.4918.8899-.3278 1.7096-.765 2.459-1.3115l4.4965 4.4965c.1093.1093.2303.1874.363.2342.1327.0469.2459.0703.3396.0703s.2068-.0234.3396-.0703c.1327-.0468.2537-.1249.3629-.2342.203-.2029.3045-.4371.3045-.7025 0-.2655-.1015-.4996-.3045-.7026zM2.01405 8.47775c0-.88993.16393-1.73301.4918-2.52927.34349-.78065.80796-1.4676 1.39345-2.06089.58548-.59329 1.27634-1.05386 2.0726-1.38173.78064-.34349 1.62372-.51523 2.52927-.51523.90555 0 1.74863.17174 2.52923.51523.7963.32787 1.4872.78844 2.0726 1.38173.5855.59329 1.05 1.28024 1.3935 2.06089.3279.79626.4918 1.63934.4918 2.52927 0 .90555-.1639 1.74865-.4918 2.52925-.3279.7807-.7963 1.4754-1.4052 2.0843-.5933.5933-1.2802 1.0578-2.0609 1.3935-.7806.3357-1.62368.5035-2.52923.5035-.90555 0-1.74863-.1717-2.52927-.5152-.79626-.3435-1.48712-.808-2.0726-1.3935-.58549-.5855-1.04996-1.2763-1.39345-2.0726-.32787-.7806-.4918-1.6237-.4918-2.52925z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Magnifier;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst FlyTo: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"52\"\n height=\"52\"\n viewBox=\"0 0 52 52\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M26 31.8229c1.5347 0 2.8889-.5868 4.0625-1.7604S31.8229 27.5347 31.8229 26s-.5868-2.8889-1.7604-4.0625S27.5347 20.1771 26 20.1771s-2.8889.5868-4.0625 1.7604S20.1771 24.4653 20.1771 26s.5868 2.8889 1.7604 4.0625S24.4653 31.8229 26 31.8229zm0-17.3333c3.1597 0 5.868 1.1284 8.125 3.3854 2.257 2.257 3.3854 4.9653 3.3854 8.125s-1.1284 5.868-3.3854 8.125c-2.257 2.257-4.9653 3.3854-8.125 3.3854s-5.868-1.1284-8.125-3.3854c-2.257-2.257-3.3854-4.9653-3.3854-8.125s1.1284-5.868 3.3854-8.125c2.257-2.257 4.9653-3.3854 8.125-3.3854zm20.1771 31.6875V34.6667H52v11.5104c0 1.5347-.5868 2.8889-1.7604 4.0625S47.7118 52 46.1771 52H34.6667v-5.8229h11.5104zm0-46.1771c1.5347 0 2.8889.5868 4.0625 1.76042C51.4132 2.93403 52 4.28819 52 5.82292V17.3333h-5.8229V5.82292H34.6667V0h11.5104zM5.82292 5.82292V17.3333H0V5.82292c0-1.53473.5868-2.88889 1.76042-4.0625C2.93403.5868 4.28819 0 5.82292 0H17.3333v5.82292H5.82292zm0 28.84378v11.5104H17.3333V52H5.82292c-1.53473 0-2.88889-.5868-4.0625-1.7604C.5868 49.066 0 47.7118 0 46.1771V34.6667h5.82292z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default FlyTo;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Star: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"34\"\n height=\"32\"\n viewBox=\"0 0 34 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M33.9231 12.1154l-11.8504-1.5523L16.9615 0l-5.1111 10.5631L0 12.1154l8.70793 7.9128L6.47416 31.5l10.48734-5.6412L27.4489 31.5l-2.2338-11.4718 8.708-7.9128z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Star;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst StarGhost: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"33\"\n height=\"31\"\n viewBox=\"0 0 33 31\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M32.0408 11.6671c-.0682-.2762-.2045-.4948-.409-.6559-.2045-.161-.4544-.2876-.7498-.3797l-9.3041-1.31165L17.3518.79391C17.1474.26463 16.7157 0 16.0568 0c-.6589 0-1.0906.26464-1.2951.79391l-4.2261 8.38787-9.16781 1.44972c-.29537 0-.55098.1036-.76683.3107-.21584.2071-.39193.4487-.52825.7249-.09089.2991-.09657.5868-.01704.8629.07952.2762.22152.4833.42601.6214l6.71398 6.6274-1.60181 9.4234c-.06816.2992-.04544.5811.06816.8457.11361.2646.28401.4775.51122.6386.20449.1381.44873.2301.73274.2761.28401.0461.5737 0 .86907-.138l8.28176-4.4183 8.2817 4.4183h.7498c.1363 0 .2783-.0288.426-.0863.1477-.0576.2897-.1324.426-.2244.2272-.1381.3976-.3394.5112-.6041.1136-.2646.1363-.5465.0682-.8457l-1.6019-9.4234 6.714-6.6274c.2045-.1611.3465-.3682.426-.6213.0796-.2532.0739-.4948-.017-.7249zm-9.7472 6.4894c-.1363.2301-.2386.4544-.3067.6731-.0682.2186-.1023.4314-.1023.6385l1.1588 7.2488-6.4073-3.4173c-.2272-.138-.4487-.2071-.6645-.2071-.2159 0-.4261.0691-.6305.2071l-6.4073 3.4173 1.2951-7.2488c0-.2071-.0341-.4199-.1023-.6385-.0681-.2187-.17037-.443-.30669-.6731l-5.2485-5.0051 7.12299-1.0356c.2272 0 .443-.0863.6475-.2589.2045-.1726.3749-.3279.5112-.466l3.2037-6.62742 3.2036 6.48942c.0681.2071.2045.3797.409.5177.2044.1381.4544.2071.7497.2071l7.123 1.0356-5.2485 5.1432z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default StarGhost;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Mail: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"25\"\n height=\"25\"\n viewBox=\"0 0 25 25\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fill={iconColor}\n d=\"M22.3988 2.6786c.61982 0 1.16669.24181 1.64061.72545.47402.48363.71098 1.0417.71098 1.6741v14.844c0 .6324-.23696 1.1905-.71098 1.6741-.47392.4836-1.0208.7255-1.64061.7255H2.60173c-.61979 0-1.16669-.2419-1.64061-.7255s-.71094-1.0417-.71094-1.6741v-14.844c0-.63244.23698-1.1905.71094-1.6741.47396-.48363 1.0208-.72545 1.64061-.72545zm-.27349 5.0781V5.3571l-9.62495 6.529-9.62504-6.529v2.3996l9.62504 6.529z\"\n />\n </SVG>\n);\n\nexport default Mail;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Phone: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"25\"\n height=\"25\"\n viewBox=\"0 0 25 25\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fill={iconColor}\n d=\"M23.92962 18.18155c1.4269 1.42053 1.4269 2.98303 0 4.6876-.57072.66283-1.12955 1.16-1.6765 1.49142-.54693.33151-.99875.52086-1.35545.56825-.3567.04729-.86797.07098-1.53382.07098-1.85494 0-4.06648-.94696-6.63472-2.84087-2.04518-1.46783-3.90002-3.05402-5.56462-4.75858-2.1402-2.22543-4.01882-4.75858-5.63596-7.59946C.10175 7.14937-.3263 4.97133.24443 3.26676c.28537-.89961.9512-1.68086 1.99752-2.3438l.07134-.07102c.8561-.56818 1.61704-.85227 2.28288-.85227.90366 0 1.71216.42613 2.42556 1.27837l.07134.07103C8.18695 2.7695 8.94791 3.88222 9.37595 4.6871c.7134 1.46782.68962 2.7225-.07134 3.76424-.57072.75758-.85608 1.30206-.85608 1.63348 0 .14206.30914.56825.92742 1.27847l.07134.07098c1.14144 1.27848 1.75972 1.965 1.85484 2.05968.04756 0 .09512.02369.14268.07108.04756.04729.09512.09467.14278.14196l.14268.14207c.9512.94705 1.64082 1.60988 2.06886 1.98869l.07134.07098c.42804.3788.7134.56825.85608.56825.2378 0 .92742-.3551 2.06886-1.06542.33292-.23674.73718-.35511 1.21288-.35511.85608 0 1.89052.3551 3.1033 1.06542 1.21278.71022 2.15209 1.39675 2.81793 2.05958z\"\n />\n </SVG>\n);\n\nexport default Phone;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Route: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"29\"\n height=\"30\"\n viewBox=\"0 0 29 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M28.629 13.5725L15.4275.371C15.1802.12367 14.871 0 14.5 0s-.6802.12367-.9275.371L.371 13.5725c-.24733.2679-.371.5823-.371.943 0 .3607.12367.6647.371.912L13.5725 28.629c.2473.2679.5565.4019.9275.4019s.6802-.134.9275-.4019L28.629 15.4275c.2473-.2473.371-.5513.371-.912s-.1237-.6751-.371-.943zm-11.5011 4.2356V14.5h-6.5853v3.9574H7.91471v-5.2559c0-.371.12882-.6853.38646-.943.25765-.2576.56166-.3864.91205-.3864h7.91468V8.56397l4.6376 4.63753-4.6376 4.6066z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Route;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Facebook: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M26.6012 0H3.32515C1.48872 0 0 1.48872 0 3.32515V26.6012c0 1.8364 1.48872 3.3252 3.32515 3.3252H14.9832v.0053h4.9877v-.0053h6.6303c1.8364 0 3.3252-1.4888 3.3252-3.3252V3.32515C29.9264 1.48872 28.4376 0 26.6012 0zm-6.6303 29.9264V18.2937h4.9877V13.306h-4.9877V9.98081c0-.91821.7444-1.66257 1.6626-1.66257h3.3251V3.33051h-4.1564c-3.2138 0-5.819 2.60526-5.819 5.81902V13.306H11.658v4.9877h3.3252v11.6327h4.9877z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Facebook;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst LinkedIn: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M29.9752 3.32515C29.9752 1.48872 28.4865 0 26.65 0H3.37398C1.53755 0 .04883 1.48872.04883 3.32515V26.6012c0 1.8364 1.48872 3.3252 3.32515 3.3252H26.65c1.8365 0 3.3252-1.4888 3.3252-3.3252V3.32515zM25.7835 16.9523v8.8116h-4.6386v-8.1965c0-1.2855-1.0421-2.3276-2.3276-2.3276-1.2802 0-2.311 1.0475-2.311 2.3276v8.1965h-4.6386V11.8482h4.6386v1.8454c.7981-1.2968 2.444-2.1613 3.8572-2.1613 2.9934 0 5.42 2.4266 5.42 5.42zM6.487 9.24675c1.54261 0 2.79313-1.25053 2.79313-2.79313 0-1.54619-1.24693-2.80975-2.79313-2.80975-1.55178 0-2.80975 1.25797-2.80975 2.80975 0 1.5462 1.26356 2.79313 2.80975 2.79313zM8.77571 11.855v13.9157H4.17037V11.855h4.60534z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default LinkedIn;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Twitter: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M26.6735 0H3.39742C1.56099 0 .07227 1.48872.07227 3.32515V26.6012c0 1.8364 1.48872 3.3252 3.32515 3.3252H26.6735c1.8364 0 3.3251-1.4888 3.3251-3.3252V3.32515C29.9986 1.48872 28.5099 0 26.6735 0zm.0131 8.17421c-.4157.88117-1.3467 1.6792-2.1448 2.34419-.1163 7.6811-5.0209 12.9349-12.3529 13.2674-3.02588.133-5.20385-.8313-7.11582-2.045 2.22785.3492 4.98772-.532 6.48402-1.7956-2.19457-.2327-3.47475-1.3466-4.08991-3.1256.63178.0998 1.29681.0665 1.89534-.0499-1.97847-.665-3.39166-1.8953-3.45816-4.4557.54865.266 1.13055.4988 1.89534.5487-1.4797-.8479-2.56037-3.9237-1.31344-5.95204 2.1946 2.41073 4.83813 4.37254 9.17743 4.63854-1.0973-4.65517 5.0708-7.18228 7.6478-4.07327 1.0973-.19951 1.9785-.59853 2.843-1.06405-.3491 1.06405-1.0308 1.84546-1.862 2.44399.8978-.11638 1.7124-.33252 2.3941-.68166z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Twitter;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Xing: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.04732 0C1.38475 0 .05469 1.33006.05469 2.99264V26.9337c0 1.6626 1.33006 2.9927 2.99263 2.9927H26.9884c1.6626 0 2.9926-1.3301 2.9926-2.9927V2.99264C29.981 1.33006 28.651 0 26.9884 0H3.04732zM21.782 3.33051h3.3917c.1995 0 .3657.06651.4323.21614.0997.14963.0997.33251 0 .5154L18.1742 17.2296l4.7384 8.6454c.0997.1829.0997.3658 0 .5154-.0831.133-.2328.2162-.4157.2162h-3.375c-.5154 0-.7814-.3492-.931-.6484l-4.7716-8.7452c.2327-.4156 7.4649-13.23408 7.4649-13.23408.1829-.33252.3991-.64841.8978-.64841zM10.1943 7.91799H6.85251c-.21613 0-.38239.08313-.46552.21614-.09975.18288-.0665.33251.01663.5154l2.2611 3.94027-3.55791 6.3012c-.0665.1829-.0665.3824 0 .5154.08313.1496.23276.2327.43227.2327h3.3584c.5154 0 .74816-.3325.93104-.6484 0 0 3.47478-6.1681 3.62438-6.4009L11.142 8.5664c-.1663-.31589-.4323-.64841-.9477-.64841z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Xing;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Instagram: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M25.6051 4.3945C22.67541 1.46476 19.1403 0 14.99951 0S7.32378 1.46486 4.39391 4.3945C1.46424 7.3242-.00061 10.85933-.00061 14.99987s1.46485 7.67574 4.39454 10.60538c2.92969 2.92972 6.4648 4.39458 10.6056 4.39458s7.67572-1.46486 10.60558-4.39458c2.9297-2.92964 4.39454-6.46476 4.39454-10.60538S28.5348 7.32413 25.6051 4.39449zm-1.23745 14.4139c0 1.56243-.53708 2.8808-1.61126 3.955-1.07426 1.0742-2.3926 1.61136-3.95511 1.61136h-7.61715c-1.52343 0-2.81252-.52735-3.8672-1.58204-1.05467-1.0547-1.6211-2.34374-1.69917-3.86715v-7.85156c.03906-1.5234.60546-2.81245 1.69917-3.86715 1.09376-1.05469 2.38277-1.58204 3.8672-1.58204h7.61715c1.56251 0 2.88085.5371 3.95511 1.61136 1.07418 1.0742 1.61126 2.39257 1.61126 3.9551zM18.81568 7.49976h-7.61714c-1.01568 0-1.88477.36132-2.60744 1.084-.72265.72268-1.08401 1.59176-1.08401 2.60742v7.6172c0 1.01558.36133 1.88474 1.084 2.60742.72268.72258 1.59177 1.08392 2.60745 1.08392h7.61714c1.01568 0 1.88477-.36134 2.60744-1.08392.72267-.72268 1.08392-1.59184 1.08392-2.60742v-7.6172c0-.97655-.37108-1.83591-1.11326-2.5781-.74217-.7422-1.6015-1.11332-2.5781-1.11332zm-.12235 11.19256c-.9766.97655-2.12885 1.46477-3.45703 1.46477-1.32809 0-2.48043-.48822-3.45702-1.46477-.9765-.97663-1.46485-2.1289-1.46485-3.45707 0-1.32808.48834-2.48043 1.46485-3.45698.97659-.97663 2.12893-1.46485 3.45702-1.46485 1.32818 0 2.48044.48822 3.45703 1.46485.9766.97655 1.46485 2.1289 1.46485 3.45698 0 1.32817-.48825 2.48044-1.46485 3.45707zm2.05094-7.79465c-.23442.23436-.50783.35154-.82034.35154s-.58592-.11718-.82034-.35154c-.23433-.23444-.3515-.50783-.3515-.82033s.11717-.58598.3515-.82034c.23442-.23435.50784-.35153.82034-.35153s.58592.11718.82034.35153c.23434.23436.3515.50783.3515.82034s-.11716.5859-.3515.82033zm-3.39449 2.22734c-.58592-.58598-1.289-.87897-2.10935-.87897s-1.52343.293-2.10935.87897c-.58592.5859-.87892 1.28905-.87892 2.1093 0 .82033.293 1.5235.87892 2.10938.58592.58598 1.28901.87889 2.10935.87889s1.52343-.2929 2.10935-.87889c.58601-.58589.87893-1.28905.87893-2.10938 0-.82025-.29292-1.5234-.87893-2.1093z\"\n clipRule=\"evenodd\"\n fillRule=\"evenodd\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Instagram;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Youtube: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"43\"\n height=\"30\"\n viewBox=\"0 0 43 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M17.19523 20.52408l11.27986-5.95252-11.27986-6.02397zM21.49983 0c2.61017 0 5.13098.03571 7.56251.10715 2.43154.07142 4.21437.14682 5.34859.22619l1.70128.09523c.01554 0 .14756.0119.39616.03572.2486.0238.42723.04762.53599.07142.10876.02382.29134.05953.54766.10715.25641.04762.4778.11111.66424.19048s.40397.18253.65257.30952c.2486.12698.48937.28174.72243.46428s.4583.39286.67583.63095c.09322.09524.21366.24206.36122.44047.14765.19841.3729.6627.67591 1.39282.30293.73016.50878 1.5317.61754 2.40476.1243 1.0159.22138 2.0992.29135 3.25.06987 1.15082.11262 2.05163.12816 2.70235v4.19049c.01553 2.30161-.1243 4.60314-.4195 6.90476-.10877.87298-.30294 1.66266-.58261 2.36903s-.52827 1.19444-.74579 1.46428l-.32628.40476c-.21752.23806-.44277.44838-.67583.63097-.23306.1825-.47384.3333-.72243.45233s-.46612.21823-.65257.29767c-.18644.07935-.40783.14282-.66424.1904-.25632.04766-.44276.08339-.55925.10718-.11657.02378-.2952.04766-.53608.07145-.24078.02379-.36894.03573-.38448.03573-3.89976.30152-8.77055.45233-14.61202.45233-3.21612-.03177-6.00888-.0833-8.37826-.15476s-3.92688-.13097-4.67267-.17854l-1.14195-.09524-.83899-.09525c-.55932-.07935-.9827-.1587-1.2701-.23815-.28744-.07935-.68362-.24596-1.18856-.49991-.50495-.25404-.94382-.57944-1.31671-.97621-.09323-.09524-.21363-.2421-.36123-.44049-.1476-.19838-.37288-.66266-.67585-1.39282s-.50883-1.53178-.6176-2.40476c-.1243-1.01589-.2214-2.0992-.2913-3.25-.06992-1.15081-.11264-2.05162-.12818-2.70234V13.3809c-.01554-2.30162.12429-4.60315.4195-6.90477.10876-.87302.30296-1.66266.58263-2.36903.27966-.70635.52825-1.19444.74576-1.46427l.32628-.40477c.21752-.23809.4428-.4484.67585-.63094s.47387-.33731.72246-.46429c.24859-.12699.4661-.23016.65255-.30952.18644-.07937.40784-.14286.6642-.19048.25635-.04762.4389-.08333.54767-.10714.10876-.02381.28743-.04762.53602-.07143.24858-.02381.38065-.03571.39619-.03571 3.89976-.28572 8.77046-.42857 14.61202-.42857z\"\n clipRule=\"evenodd\"\n fillRule=\"evenodd\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Youtube;\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","Symbol","iterator","v","op","TypeError","pop","push","__spreadArray","to","from","il","j","__makeTemplateObject","cooked","raw","defineProperty","ScrollDirection","mq","medium","semilarge","large","xlarge","xxlarge","xxxLarge","spacings","nudge","spacer","wrapperSmall","wrapper","wrapperLarge","withRange","range","property","getSizeByRange","styleTextColor","fallbackColor","gradient","css","defaultColors","dark","light","mono","primary","secondary","tertiary","copyBase","family","weight","style","lineHeight","letterSpacing","size","textTransform","color","colorInverted","headingBase","defaultFonts","copy","small","big","copy-i","copy-b","super","heading-1","heading-2","heading-3","heading-4","callout","defaultGlobalSettings","sections","plainSeperation","imageTextGradient","newsDateFormat","newsTimeFormat","newsLocaleKey","getBaseTheme","colors","fonts","types","globalSettings","getColors","theme","getFonts","getGlobalSettings","isBrowser","window","document","checkMq","cmq","checkMqs","matchMedia","matches","getMediaQuery","useMediaQuery","mqs","_a","useState","mediaQuery","setMediaQuery","useEffect","handleResize","newMediaQuery","addEventListener","removeEventListener","useEqualSheetHeight","props","defaultResponsive","responsive","currentMq","itemsPerRow","sheetRefs","setSheetRefs","makeRows","index","arr","slice","resize","refs","identifierSizes","Map","identifiers","set","filter","ref","current","forEach","id","element","querySelector","removeAttribute","prevHeights","get","scrollHeight","key","heights","selector","reduce","rowHeights","highest","sort","vA","vB","x_1","el","setAttribute","setHeights","resizeHandler","Array","listLength","fill","map","createRef","triggerCalculation","setCookie","name","data","_b","days","_c","path","cookieString","valueString","dataKeys","keys","encodeURIComponent","substr","date","Date","setTime","getTime","toUTCString","cookie","getCookie","undefined","b","match","cookieValue","decodeURIComponent","valueArray","split","keyValueArray","cookieData","isNaN","Number","isBoolean","stringToBoolean","deleteCookie","useIE","initialValue","isIE","setIE","msTouchAction","useItemHeight","setElement","height","setHeight","calcHeight","offsetHeight","useScroll","initialTopOffset","onLeftOffset","onEnterOffset","topOffset","setTopOffset","_d","isTop","setIsTop","_e","isInOffset","setIsInOffset","_f","DOWN","scrollDirection","setScrollDirection","lastScrollPos","useRef","handleScroll","pageYOffset","prev","UP","useScrollTo","fallbackScrollDuration","startTime","firstPos","targetPos","setTargetPos","documentElement","scroll","top","left","behavior","animate_1","timestamp","elapsed","easeProgress","toFixed","newPos","scrollTo","cancelAnimationFrame","requestAnimationFrame","scrollTop","canUseWebP","elem","createElement","getContext","toDataURL","usePoster","posterImage","currentImage","setCurrentImage","workingImage","webp","useInterval","callback","delay","savedCallback","id_1","setInterval","clearInterval","useTouch","canTouch","setCanTouch","navigator","maxTouchPoints","msMaxTouchPoints","useImgPreload","imageUrls","isReady","setReady","isLoaded","setLoaded","loadedImages","setLoadedImages","items","requestedImages","img","src","res","Image","onload","url","preloadImages","item","x","find","image","items_1","_i","imgCount","hexToRgba","hex","alpha","rgb","parseInt","assignTo","target","source","output","sourceVal","targetVal","LibThemeProvider","children","combinedBaseTheme","tKey","isArray","sKey","assignFontBase","base","combinedTheme","React","ThemeProvider","View","styled","section","indent","Back","div","bgColor","bgMode","mode","bgValue","getBackground","Section","as","addSeperation","className","useContext","ThemeContext","React.createElement","addPlainSeperation","settings","clampWidth","Wrapper","addWhitespace","Img","Picture","picture","alt","coverSpace","onClick","srcSet","media","loading","BaseStyles","h1","textColor","textGradient","hyphens","type","font","Heading","isInverted","hasShadow","innerHTML","rest","React.useContext","tag","fontSettings","colorGradientInverted","colorGradient","dangerouslySetInnerHTML","__html","defaultProps","Title","colorMode","superTitle","superTitleAs","title","titleAs","isCentered","Copy","columns","markerInverted","isMirrored","Actions","StyledTitle","ContentBlock","StyledActions","Intro","text","primaryAction","secondaryAction","clampTitle","clampText","StyledIntro","ImgContainer","ImgWrapper","Gallery","hasBack","images","array","isFull","currentIndex","newIndex","isNextImgFull","gridSettings","cols","gutter","StyledCol","mediumSpan","span","semilargeSpan","largeSpan","xlargeSpan","mediumMove","move","semilargeMove","largeMove","xlargeMove","StyledGrid","Grid","valign","React.Children","comp","Row","Col","React.Fragment","StyledImage","ImgDescDesktop","ImgDescMobile","InfoWrapper","SubTextBlock","Teaser","intro","subText","getSectionBgMode","description","WideImage","TeaserWide","a","inverted","Pointer","React.forwardRef","isDisabled","disable","href","isExternal","rel","displayName","CursorState","Icon","Label","StyledSection","ListContainer","ItemContainer","ShowMore","itemCount","Items","ActionsWrapper","Item","ListFooter","IconList","showLessText","showMoreText","React.useState","showMore","setShowMore","isVisible","Content","ContentText","Article","asideText","withAsideText","isAside","ImageContainer","ArticleContent","Desc","Feature","ContentContainer","FeatureList","features","featureCount","cardRefs","isHalf","feature","global","LinkHelper","IntroContainer","PromotionCard","clickable","FlexGrid","FlexGridCol","PosterContainer","CrossPromotion","main","aside","card","Poster","hasContent","SVG","svg","Play","iconColor","width","viewBox","xmlns","d","bgImage","isActive","VideoControls","Iframe","iframe","VideoCard","embedId","playIcon","setIsActive","allow","Video","ContactView","Avatar","Info","Address","Decorator","AddressLabel","StyledContactBox","addresses","avatar","address","decorator","NewsletterWrapper","Badge","CallToAction","contact","badge","newsForm","FactsContainer","ul","FactsItem","li","Text","FactList","facts","icon","hasText","Fact","subTitle","FactFill","FactGrid","factCount","fact","TableContainer","TableBody","table","TableHead","th","TableData","td","TableBlock","row","tableTitle","rowTitle","ii","itemText","TableWrapper","Table","tableItems","withSeperation","ArrowLeftGhost","transform","ArrowRightGhost","MapContainer","FylToCtrlContainer","SliderContext","createContext","steps","currentStep","slickSettings","clickSideOffset","goToStep","nextStep","previousStep","isOnFirstStep","isOnLastStep","SlidesView","cursorPath","sameHeight","fullHeight","StyledSlider","SlickSlider","leftMargin","min","max","SlideView","spacing","ControlView","button","DotGroupView","initialStep","slideSpacing","cursorPaths","beforeChange","afterChange","onInit","slideCount","setSlideCount","sliderRef","setSliderRef","setCurrentStep","_g","visibleSlides","setVisibleSlides","_h","setSteps","dots","arrows","infinite","speed","slidesToScroll","slidesToShow","variableWidth","fade","swipe","cBreakpoint","state","breakpoint","itemsPerSlide","Math","floor","slides","Provider","setSlider","intNum","slickGoTo","context","cursor","setCursor","viewRef","setViewRef","mousePos","setMousePos","getCursorPath","NEXT","PREV","handleClick","ev","stopPropagation","isSlideControl","classList","contains","isAnchor","HTMLAnchorElement","parentElement","rect","getBoundingClientRect","relMouseX","Children","count","Consumer","values","onMouseMove","clientX","disabled","stepsArray","setStepsArray","containerRef","onReady","attribution","activeMarkerId","markers","center","zoom","touchZoom","scrollWheelZoom","onlyScrollOnFocus","fitBoundsPadding","onMarkerClick","onFlyToClick","flyToControl","onActiveMarkerChanged","cRef","prevMarkerId","_j","L","setLeaflet","_k","setMap","_l","markersLayer","setMarkersLayer","_m","cElement","mapContainerRef","import","leaflet","map_1","once","enable","tileLayer","addTo","markersLayer_1","FeatureGroup","showAllMarkers","fitBounds","getBounds","padding","point","flyToPosition","position","flyTo","flyToActive","marker","m","clearLayers","markerIcon","iconUrl","iconSize","sizeActive","iconAnchor","anchorActive","anchor","riseOnHover","on","addLayer","markerId","goTo","showAll","CardWrapper","SliderWrapper","InfoCardView","CardHeader","ContactList","ContactListLabel","LocationInfoCard","location","meta","c","Controls","StyledDotGroup","Slider","DotWrapper","Dot","StyledControl","flyToZoom","initialLocation","locations","allMarkersOnInit","controlNext","controlPrev","dot","activeLocation","setActiveLocation","locIndex","findIndex","loc","FieldHead","Field","input","InfoMessage","ErrorMessage","Textfield","lightBg","errorMessage","infoMessage","placeholder","isRequired","onChange","hasError","required","Area","textarea","Textarea","CheckboxContainer","Original","Box","isSelected","StyledCheck","stroke","Checkbox","checked","FieldsContainer","FlexContainer","ActionWrapper","Form","submitAction","onSubmit","formFields","checkbox","yupValidationSchema","validation","Formik","initialValues","surname","phone","area","mail","check","validate","errors","validationSchema","obj","handleSubmit","setFieldValue","isValid","dirty","preventDefault","constructor","additionalProps","ArrowLeftRight","fillRule","clipRule","clamp","num","Images","BackgroundImg","ForegroundContainer","hasAnim","initalValue","ForegroundImg","ForegroundOverlay","ImageLabel","ForegroundLabel","BackgroundLabel","ControlContainer","Control","ComparisonSlider","foregroundImg","backgroundImg","foregroundLabel","backgroundLabel","overlayColor","labelColor","dragControl","enableControlAnim","slideValue","setSlideValue","isHolding","setIsHolding","isDragging","setIsDragging","interacted","setInteracted","sideOffset","setSideOffset","controlRef","offsetWidth","handleInitalLoad","observer","IntersectionObserver","entries","isIntersecting","unobserve","rootMargin","threshold","observe","readyState","setCurrentPos","relativeClientX","percentage","currentTarget","onMouseDown","onMouseUp","onMouseLeave","onTouchMove","touches","onTouchStart","onTouchEnd","hasTransition","Head","IntroBlock","TopControls","StyledSlides","Footer","CtrlWrapper","CtrlWrapperLeft","CtrlWrapperRight","CarouselBase","variableWidths","child","ImageCarousel","imageCount","FullWidthImg","StyledWrapper","FeatureCarousel","PromotionCarousel","promotions","promotionCount","promotion","VideoCarousel","videos","videoCount","video","Link","Bdot","IconItemView","StyledLink","SocialList","MainView","topSpace","hAlign","LogoLink","ContactData","SiteLinksView","SiteLink","LinkWrapper","BottomWrapper","BottomView","logo","columnTopSpace","contactData","siteLinks","newsTitle","newsText","socials","bottomLinks","brandIcon","siteLinksColLeft","ceil","siteLinksColRight","link","direction","getBgImage","AnimationContainer","PosterImage","AnimationImage","scale","opacity","AnimationImages","intervalRef","activeImg","setActiveImg","changeImage","setTimeout","backgroundImage","zIndex","HeaderKenBurns","React.useEffect","loadedForMq","useWebp_1","PosterView","HeaderPoster","Callout","PlaceholderImg","AutoplayVideo","HeaderVideo","placeholderImg","videoUrl","isMobile","muted","autoPlay","loop","onCanPlayThrough","header","HeaderWrapper","PosterContent","PosterContentMobile","StyledPoster","Header","sizeScale","primaryCta","secondaryCta","withTopGradient","customTopGradient","customBottomGradient","topGradient","bottomGradient","content","showOnMobile","Seperator","ContentFlex","Author","StyledCopy","NewsAuthorCard","author","Tag","dateFormat","timeFormat","localeKey","dddd","weekDays","_this","long","getDay","DDDD","ddd","short","DDD","dd","DD","MMMM","monthNames","getMonth","mmmm","MMM","mmm","mm","MM","yyyy","getYear","YYYY","yy","YY","hh","getHours","HH","hs","getHours12h","HS","getMinutes","ss","getSeconds","SS","ap","AP","StatusFormatter","placeholders","%DATE%","getFormattedDate","%TIME%","getFormattedTime","replace","foundString","dateReplacements","formattedDate","RegExp","timeReplacements","formattedTime","toString","getDoubleDigitString","getDate","getFullYear","hours","de","en","ImageLink","TitleLink","Main","NewsCard","onTagClick","publishDate","publishedAt","NewsFooter","news","newsCount","setItemsPerRow","visibleRows","setVisibleRows","ImageFlex","NewsImages","imageStyle","isSingleHalf","IntroHead","HeadTag","MetaBlock","NewsIntro","tags","News","NewsList","NewsTable","NewsText","NewsVideo","TagContainer","TagWrapper","List","NewsOverview","activeTag","queryParams","selected","decodeURI","selectedTag","setSelectedTag","targetRef","observerSupported","inital","setObserverSupport","IntersectionObserverEntry","useObserverSupport","setNewPos","entry","disconnect","Button","ButtonGhost","form","InputField","backColor","SubmitBtn","CompactForm","method","action","buttonIcon","onBlur","onFocus","backgroundStyle","ControlBtn","ClearBtn","SearchInput","submitIcon","clearIcon","onClear","hasLeftIcon","hasRightIcon","onKeyDown","keyCode","activateTrackingScripts","scriptElements","querySelectorAll","newScriptElement","appendChild","parentNode","removeChild","Stage","CookieConsent","cookieName","urlWhitelist","consentAcceptStatusMsg","consentDeclineStatusMsg","noCookieStatusMsg","lifetime","overlayOpacity","_o","setIsVisible","allConsentButtons","len","bindConsentButtons","urlString","whitelist","isInWhiteList","isUrlInWhitelist","pathname","consent","status","allConsentStatusElements","formatter","updatedAt","getFormattedStatus","updateConsentStatusElements","bgOpacity","handleDecline","console","log","handleAccept","additionalAcceptProps","additionalDeclineProps","CookieIcon","TitleView","CookieTitle","TextView","CookieText","CookieActions","Cross","HeaderCol","LeftCol","CenterCol","RightCol","ToggleContainer","CloseBtn","SearchContainer","ScrollArea","NavListView","Nav","nav","Group","GroupLabel","GroupLabelSpacer","NavItem","isSmall","ItemLink","ItemLabel","isOpen","isLarge","toggleIcon","search","onCloseClick","clickHandler","activeNavItem","navGroups","activeGroup","activeItem","group","itemIndex","Backdrop","SocialContainer","Menu","backdropOpacity","navItems","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","Navigation","isMenuInverted","isLargeMenu","isTopbarInverted","allowTopbarOverflow","hideTopbarBackUnderMenu","isTopbarLargeOnPageTop","openMenuIcon","closeMenuIcon","isMenuOpen","setIsMenuOpen","sharedProps","overflow","ArrowRight","CrossSmall","Magnifier","FlyTo","Star","StarGhost","Mail","Phone","Route","Facebook","LinkedIn","Twitter","Xing","Instagram","Youtube"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../node_modules/tslib/tslib.es6.js","../src/utils/useScroll.ts","../src/utils/styles.ts","../src/utils/useMediaQuery.ts","../src/utils/useEqualSheetHeight.ts","../src/utils/cookie-consent/cookie.ts","../src/utils/useIE.ts","../src/utils/useItemHeight.ts","../src/utils/useScrollTo.ts","../src/utils/usePoster.ts","../src/utils/useInterval.ts","../src/utils/useTouch.ts","../src/utils/useImgPreload.ts","../src/utils/hexRgbConverter.ts","../src/utils/LibThemeProvider.tsx","../src/components/base/Section.tsx","../src/components/base/Wrapper.tsx","../src/components/blocks/Image.tsx","../src/components/typography/Heading.tsx","../src/components/blocks/Title.tsx","../src/components/typography/Copy.tsx","../src/components/blocks/Actions.tsx","../src/components/blocks/Intro.tsx","../src/components/sections/Gallery.tsx","../src/components/base/Grid.tsx","../src/components/sections/Teaser.tsx","../src/components/sections/TeaserWide.tsx","../src/components/buttons/Pointer.tsx","../src/components/blocks/Slider.tsx","../src/components/sections/IconList.tsx","../src/components/sections/Article.tsx","../src/components/blocks/Feature.tsx","../src/components/sections/FeatureList.tsx","../src/components/blocks/PromotionCard.tsx","../src/components/sections/CrossPromotion.tsx","../src/components/sections/Poster.tsx","../src/components/base/icons/Play.tsx","../src/components/blocks/VideoCard.tsx","../src/components/sections/Video.tsx","../src/components/sections/CallToAction.tsx","../src/components/sections/FactList.tsx","../src/components/blocks/Fact.tsx","../src/components/sections/FactGrid.tsx","../src/components/sections/Table.tsx","../src/components/base/icons/ArrowLeftGhost.tsx","../src/components/base/icons/ArrowRightGhost.tsx","../src/components/blocks/LeafletMap.tsx","../src/components/sections/Map.tsx","../src/components/fields/Textfield.tsx","../src/components/fields/Textarea.tsx","../src/components/base/icons/Check.tsx","../src/components/fields/Checkbox.tsx","../src/components/sections/Form.tsx","../src/components/base/icons/ArrowLeftRight.tsx","../src/components/sections/ComparisonSlider.tsx","../src/components/sections/carousel/CarouselBase.tsx","../src/components/sections/carousel/ImageCarousel.tsx","../src/components/sections/carousel/FeatureCarousel.tsx","../src/components/sections/carousel/PromotionCarousel.tsx","../src/components/sections/carousel/VideoCarousel.tsx","../src/components/typography/Link.tsx","../src/components/blocks/Bdot.tsx","../src/components/blocks/SocialList.tsx","../src/components/sections/Footer.tsx","../src/utils/backgroundImage.ts","../src/components/sections/header/HeaderKenBurns.tsx","../src/components/sections/header/HeaderPoster.tsx","../src/components/typography/Callout.tsx","../src/components/sections/header/HeaderVideo.tsx","../src/components/sections/header/Header.tsx","../src/components/sections/news/NewsAuthorCard.tsx","../src/components/blocks/Tag.tsx","../src/utils/statusFormatter.ts","../src/components/blocks/NewsCard.tsx","../src/components/sections/news/NewsFooter.tsx","../src/components/sections/news/NewsImages.tsx","../src/components/sections/news/NewsIntro.tsx","../src/components/sections/news/NewsList.tsx","../src/components/sections/news/NewsTable.tsx","../src/components/sections/news/NewsText.tsx","../src/components/sections/news/NewsVideo.tsx","../src/components/sections/news/NewsOverview.tsx","../src/utils/useObserverSupport.ts","../src/components/buttons/Button.tsx","../src/components/buttons/ButtonGhost.tsx","../src/components/fields/CompactForm.tsx","../src/components/fields/SearchInput.tsx","../src/utils/cookie-consent/mutations.ts","../src/components/blocks/CookieConsent.tsx","../src/components/base/icons/Cross.tsx","../src/components/sections/navigation/menu/Flyout.tsx","../src/components/sections/navigation/menu/Menu.tsx","../src/components/base/icons/MenuBurger.tsx","../src/components/sections/navigation/TopBar.tsx","../src/components/sections/navigation/Navigation.tsx","../src/components/base/icons/ArrowRight.tsx","../src/components/base/icons/CrossSmall.tsx","../src/components/base/icons/Magnifier.tsx","../src/components/base/icons/FlyTo.tsx","../src/components/base/icons/Star.tsx","../src/components/base/icons/StarGhost.tsx","../src/components/base/icons/Mail.tsx","../src/components/base/icons/Phone.tsx","../src/components/base/icons/Route.tsx","../src/components/base/icons/socials/Facebook.tsx","../src/components/base/icons/socials/LinkedIn.tsx","../src/components/base/icons/socials/Twitter.tsx","../src/components/base/icons/socials/Xing.tsx","../src/components/base/icons/socials/Instagram.tsx","../src/components/base/icons/socials/Youtube.tsx"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { useEffect, useRef, useState } from 'react';\n\nexport enum ScrollDirection {\n UP,\n DOWN,\n}\n\nexport const useScroll = ({\n initialTopOffset = 0,\n onLeftOffset,\n onEnterOffset,\n}: {\n initialTopOffset?: number;\n onLeftOffset?: () => void;\n onEnterOffset?: () => void;\n}) => {\n const [topOffset, setTopOffset] = useState<number>(initialTopOffset);\n const [isTop, setIsTop] = useState<boolean>(true);\n const [isInOffset, setIsInOffset] = useState<boolean>(true);\n const [scrollDirection, setScrollDirection] = useState<ScrollDirection>(\n ScrollDirection.DOWN\n );\n const lastScrollPos = useRef<number>(0);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const handleScroll = () => {\n setIsTop(window.pageYOffset <= 1);\n setIsInOffset(window.pageYOffset <= 1 + topOffset);\n\n if (lastScrollPos.current) {\n // check if top offset is left\n if (\n window.pageYOffset > 1 + topOffset &&\n lastScrollPos.current <= 1 + topOffset\n ) {\n onLeftOffset && onLeftOffset();\n }\n\n // check if top offset was joined\n if (\n window.pageYOffset <= 1 + topOffset &&\n lastScrollPos.current > 1 + topOffset\n ) {\n onEnterOffset && onEnterOffset();\n }\n\n setScrollDirection((prev) => {\n if (window.pageYOffset <= 1) return ScrollDirection.DOWN;\n return window.pageYOffset > lastScrollPos.current\n ? ScrollDirection.DOWN\n : window.pageYOffset < lastScrollPos.current\n ? ScrollDirection.UP\n : prev;\n });\n }\n lastScrollPos.current = window.pageYOffset;\n };\n\n handleScroll();\n window.addEventListener('scroll', handleScroll);\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n };\n }, [\n lastScrollPos,\n onLeftOffset,\n onEnterOffset,\n scrollDirection,\n topOffset,\n ]);\n\n return {\n isTop,\n isInOffset,\n scrollDirection,\n setTopOffset,\n topOffset,\n };\n};\n","import { css, DefaultTheme } from 'styled-components';\n\nexport type MediaQueryType =\n | 'small'\n | 'medium'\n | 'semilarge'\n | 'large'\n | 'xlarge'\n | 'xxlarge'\n | 'xxxLarge';\n\nexport const mq: { [key in Exclude<MediaQueryType, 'small'>]: string } = {\n medium: '(min-width: 40em)', // 640 px\n semilarge: '(min-width: 52em)', // 832 px\n large: '(min-width: 64em)', // 1024 px\n xlarge: '(min-width: 90em)', // 1440 px\n xxlarge: '(min-width: 105em)', // 1680 px\n xxxLarge: '(min-width: 150em)', // 2400 px\n};\n\nexport const spacings = {\n nudge: 5,\n spacer: 20,\n wrapperSmall: 1000,\n wrapper: 1440,\n wrapperLarge: 2400,\n};\n\n/***** Range Helper *****/\nexport const getSizeByRange = (range: [number, number]): string =>\n `calc(${range[0]}px + (${range[1]} - ${range[0]}) * ((100vw - 300px) / (${spacings.wrapperLarge} - 320)));`;\n\nexport const withRange = (\n range: [number, number],\n property: string\n): string => {\n if (!property) return '';\n\n return `\n ${property}: ${range[0]}px;\n ${property}: ${getSizeByRange(range)};\n\n @media ${mq.xxlarge} {\n ${property}: ${range[1]}px;\n }\n `;\n};\n\n/**\n * Generate css attributes to style text color with plain color or gradient\n * @param fallbackColor\n * @param gradient\n */\nexport const styleTextColor = (fallbackColor?: string, gradient?: string) => {\n if (gradient) {\n return css`\n color: ${fallbackColor};\n\n @supports (-webkit-text-stroke: thin) {\n padding-top: 2px;\n background: ${gradient};\n background-clip: text;\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n `;\n } else {\n return css`\n color: ${fallbackColor};\n `;\n }\n};\n\n/***** Color Types *****/\ninterface ColorOptions {\n light: string;\n medium: string;\n dark: string;\n}\n\nexport type ColorOptionsType = keyof ColorOptions;\n\nexport interface Colors {\n dark: string;\n light: string;\n mono: ColorOptions;\n primary: ColorOptions;\n secondary: ColorOptions;\n tertiary: ColorOptions;\n}\n\nexport type ColorType = keyof Colors;\n\n/***** Font Types *****/\nexport interface FontProps {\n family: string;\n weight?: string;\n style?: string;\n lineHeight?: string;\n letterSpacing?: string;\n size: [number, number];\n textTransform?: string;\n color?: string;\n colorInverted?: string;\n colorGradient?: string;\n colorGradientInverted?: string;\n}\n\nexport type FontPropsType = keyof FontProps;\n\nexport interface FontOptions {\n small: FontProps;\n medium: FontProps;\n big: FontProps;\n \n}\n\nexport type FontOptionType = keyof FontOptions;\n\nexport interface Fonts {\n copy: FontOptions;\n 'copy-i': FontOptions;\n 'copy-b': FontOptions;\n super: FontProps;\n 'heading-1': FontProps;\n 'heading-2': FontProps;\n 'heading-3': FontProps;\n 'heading-4': FontProps;\n label: FontOptions;\n callout: FontOptions;\n}\n\nexport type FontType = keyof Fonts;\n\n/**\n * Base font styles for all font types\n */\nexport type FontBase = FontProps;\n\n/***** Colors *****/\nconst defaultColors: Colors = {\n dark: '#000000',\n light: '#ffffff',\n mono: {\n light: '#F0F0F0',\n medium: '#C8C8C8',\n dark: '#A5A5A5',\n },\n primary: {\n light: '#DD8AA3',\n medium: '#98012E',\n dark: '#59011B',\n },\n secondary: {\n light: '#5A7384',\n medium: '#35444E',\n dark: '#222A30',\n },\n tertiary: {\n light: '#F2F5FA',\n medium: '#C9CED7',\n dark: '#A8ABB4',\n },\n};\n\n/***** Fonts *****/\nconst copyBase: FontProps = {\n family: 'Roboto',\n weight: '400',\n style: 'normal',\n lineHeight: '1.53',\n letterSpacing: '0',\n size: [10, 13],\n textTransform: '',\n color: defaultColors.dark,\n colorInverted: defaultColors.light,\n};\n\nconst headingBase: FontProps = {\n family: 'Roboto',\n weight: '700',\n style: 'normal',\n lineHeight: '1.1',\n letterSpacing: '0',\n size: [38, 40],\n color: defaultColors.dark,\n colorInverted: defaultColors.light,\n};\n\nconst defaultFonts: Fonts = {\n copy: {\n small: {\n ...copyBase,\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n 'copy-i': {\n small: {\n ...copyBase,\n style: 'italic',\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n style: 'italic',\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n style: 'italic',\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n 'copy-b': {\n small: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n super: {\n ...copyBase,\n weight: '700',\n lineHeight: '1.43',\n size: [14, 16],\n },\n 'heading-1': headingBase,\n 'heading-2': {\n ...headingBase,\n size: [32, 35],\n lineHeight: '1.14',\n },\n 'heading-3': {\n ...headingBase,\n size: [19, 22],\n lineHeight: '1.14',\n },\n 'heading-4': {\n ...headingBase,\n size: [16, 19],\n lineHeight: '1.5',\n },\n label: {\n small: {\n ...copyBase,\n lineHeight: '1.53',\n size: [11, 13],\n },\n medium: {\n ...copyBase,\n lineHeight: '1.43',\n size: [14, 16],\n },\n big: {\n ...copyBase,\n lineHeight: '1.18',\n size: [20, 22],\n },\n },\n callout: {\n small: {\n ...headingBase,\n lineHeight: '1.14',\n size: [33, 35],\n },\n medium: {\n ...headingBase,\n lineHeight: '1.18',\n size: [50, 55],\n },\n big: {\n ...headingBase,\n lineHeight: '1.18',\n size: [60, 62],\n },\n },\n};\n\n/***** Global Settings *****/\nexport interface GlobalSettings {\n sections: {\n /** Add seperation around sections with background attribute 'plain' (e.g. Teaser) */\n plainSeperation: boolean;\n /** Customnize gradient for all text on image background gradients */\n imageTextGradient: string;\n /** Date and Time Formats for all news sections */\n newsDateFormat: string;\n newsTimeFormat: string;\n newsLocaleKey: 'de' | 'en';\n };\n}\n\nconst defaultGlobalSettings: GlobalSettings = {\n sections: {\n plainSeperation: false,\n imageTextGradient: `\n linear-gradient(\n 0deg,\n rgba(0, 0, 0, 0.6) 0%,\n rgba(0, 0, 0, 0.4) 30%,\n rgba(0, 0, 0, 0.1) 60%,\n rgba(0, 0, 0, 0) 100%\n );\n `,\n newsDateFormat: 'dd/mm/yy',\n newsTimeFormat: 'hh:mm',\n newsLocaleKey: 'en',\n },\n};\n\n/***** Theme Helper *****/\nexport const getBaseTheme = () => {\n return {\n colors: { ...defaultColors },\n fonts: { types: { ...defaultFonts } },\n globalSettings: { ...defaultGlobalSettings },\n } as DefaultTheme;\n};\n\nexport const getTheme = (theme?: DefaultTheme) => {\n return (\n (theme && theme.colors && theme.fonts && theme.globalSettings) ||\n getBaseTheme()\n );\n};\n\nexport const getColors = (theme?: DefaultTheme) => {\n return theme && theme.colors ? theme.colors : getBaseTheme().colors;\n};\n\nexport const getFonts = (theme?: DefaultTheme) => {\n return theme && theme.fonts?.types\n ? theme.fonts.types\n : getBaseTheme().fonts.types;\n};\n\nexport const getGlobalSettings = (theme?: DefaultTheme) => {\n return theme && theme.globalSettings\n ? theme.globalSettings\n : getBaseTheme().globalSettings;\n};\n","import { useEffect, useState } from 'react';\nimport { MediaQueryType, mq } from './styles';\n\nexport const isBrowser =\n typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\n// *****************\n// useBreakpoint\n// *****************\nconst checkMq = (cmq: MediaQueryType, checkMqs: MediaQueryType[]) => {\n return (\n isBrowser &&\n (checkMqs.length <= 0 || checkMqs.indexOf(cmq) > -1) &&\n (cmq !== 'small' ? window.matchMedia(mq[cmq]).matches : true)\n );\n};\n\nexport const getMediaQuery = (checkMqs: MediaQueryType[]): MediaQueryType => {\n if (checkMq('xxxLarge', checkMqs)) {\n return 'xxxLarge';\n } else if (checkMq('xxlarge', checkMqs)) {\n return 'xxlarge';\n } else if (checkMq('xlarge', checkMqs)) {\n return 'xlarge';\n } else if (checkMq('large', checkMqs)) {\n return 'large';\n } else if (checkMq('semilarge', checkMqs)) {\n return 'semilarge';\n } else if (checkMq('medium', checkMqs)) {\n return 'medium';\n } else {\n return 'small';\n }\n};\n\nexport const useMediaQuery = (mqs?: MediaQueryType[]) => {\n const checkMqs = mqs || [];\n const [mediaQuery, setMediaQuery] = useState<MediaQueryType | undefined>();\n\n useEffect(() => {\n const handleResize = () => {\n const newMediaQuery = getMediaQuery(checkMqs);\n\n if (newMediaQuery !== mediaQuery) {\n setMediaQuery(newMediaQuery);\n }\n };\n\n window.addEventListener('resize', handleResize);\n setMediaQuery(getMediaQuery(checkMqs));\n\n return () => window.removeEventListener('resize', handleResize);\n }, [checkMqs, mediaQuery]);\n\n return mediaQuery;\n};\n","import { useEffect, useState, MutableRefObject, createRef } from 'react';\nimport { useMediaQuery } from './useMediaQuery';\n\ninterface ItemsPerRow {\n small?: number;\n medium?: number;\n semilarge?: number;\n large?: number;\n xlarge?: number;\n}\n\ntype Mq = keyof ItemsPerRow;\n\n// ********************\n// useEqualSheetHeight\n// ********************\n\nexport const useEqualSheetHeight = (props: {\n listLength: number;\n identifiers: string[];\n responsive?: ItemsPerRow;\n}) => {\n const defaultResponsive = {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: 3,\n xlarge: 3,\n ...props.responsive,\n };\n const mqs: Mq[] = ['small', 'medium', 'semilarge', 'large', 'xlarge'];\n const currentMq = useMediaQuery(mqs) as Mq | undefined;\n const itemsPerRow = currentMq\n ? defaultResponsive[currentMq]\n : defaultResponsive.small;\n\n const [sheetRefs, setSheetRefs] = useState<\n MutableRefObject<HTMLDivElement>[]\n >([]);\n\n const makeRows = (\n result: Array<number>[],\n _: number,\n index: number,\n arr: number[]\n ) => {\n // make new row after 3 items\n if (index % itemsPerRow === 0)\n result.push(arr.slice(index, index + itemsPerRow) as Array<number>);\n return result;\n };\n\n const setHeights = (\n heights: (number | null)[],\n selector: string,\n refs: MutableRefObject<HTMLDivElement>[]\n ) => {\n const x = heights.reduce(makeRows, []);\n\n x.forEach((rowHeights, y) => {\n const highest = rowHeights.slice().sort((vA, vB) => {\n if (vA && vB) {\n if (vA > vB) return -1;\n return 1;\n } else return 0;\n })[0];\n\n // set height of all items in row to the highest value\n if (rowHeights.length > 1 && highest) {\n for (let x = 0; x < rowHeights.length; x++) {\n const index = x + y * itemsPerRow;\n const el = refs[index].current.querySelector(selector);\n\n if (el) {\n el.setAttribute('style', `height: ${highest}px`);\n }\n }\n }\n });\n };\n\n const resize = (refs: MutableRefObject<HTMLDivElement>[]) => () => {\n const identifierSizes = new Map<string, Array<number | null>>();\n\n // create identifier map\n for (let i = 0; i < props.identifiers.length; i++) {\n identifierSizes.set(props.identifiers[i], []);\n }\n\n // set height values\n refs.filter((ref) => ref.current).forEach(({ current }) => {\n // get height for each element\n props.identifiers.forEach((id) => {\n const element = current.querySelector(id);\n element?.removeAttribute('style');\n\n const prevHeights = identifierSizes.get(id);\n if (prevHeights)\n identifierSizes.set(id, [\n ...prevHeights,\n element ? element.scrollHeight : null,\n ]);\n });\n });\n\n // set heights for each identifier\n identifierSizes.forEach((value, key) => {\n setHeights(value, key, refs);\n });\n };\n\n useEffect(() => {\n const resizeHandler = resize(sheetRefs);\n resizeHandler();\n\n window.addEventListener('resize', resizeHandler);\n\n return () => {\n window.removeEventListener('resize', resizeHandler);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sheetRefs, currentMq]);\n\n const triggerCalculation = () => {\n setSheetRefs(() =>\n Array(props.listLength)\n .fill(null)\n .map((_, i) => sheetRefs[i] || createRef())\n );\n };\n\n useEffect(() => {\n setSheetRefs(() =>\n Array(props.listLength)\n .fill(null)\n .map((_, i) => sheetRefs[i] || createRef())\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.listLength]);\n\n return {\n sheetRefs,\n triggerCalculation,\n };\n};\n","export interface Cookie<T> {\n name: string;\n data: T;\n}\n\nexport const setCookie = <T>({\n name,\n data,\n days = -1,\n path = '/',\n}: {\n name: string;\n data: T;\n days?: number;\n path?: string;\n}) => {\n let cookieString = `${name}=`;\n\n // set cookie value\n let valueString = '';\n const dataKeys = Object.keys(data);\n for (let i = 0; i < dataKeys.length; i++) {\n valueString += `${dataKeys[i]}:${data[dataKeys[i]]}|`;\n }\n\n cookieString += encodeURIComponent(\n valueString.substr(0, valueString.length - 1)\n );\n\n // specify path\n cookieString += `; path=${path};`;\n\n // check if cookie should have lifetime\n if (days >= 0) {\n const date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n cookieString += ` expires=${date.toUTCString()};`;\n }\n document.cookie = cookieString;\n};\n\nexport const getCookie = <T>(name: string): Cookie<T> | undefined => {\n let cookie = undefined;\n\n // get cookie value\n const b = document.cookie.match('(^|;)\\\\s*' + name + '\\\\s*=\\\\s*([^;]+)');\n let cookieValue = b ? b.pop() : '';\n cookieValue = cookieValue ? decodeURIComponent(cookieValue) : '';\n\n if (cookieValue) {\n const valueArray = cookieValue.split('|').map((el) => {\n const keyValueArray = el.split(':');\n return {\n key: keyValueArray[0],\n value: keyValueArray[1],\n };\n });\n\n const cookieData: { [k: string]: any } = {};\n for (let i = 0; i < valueArray.length; i++) {\n const value: any = valueArray[i].value;\n\n // checking for right types\n if (!isNaN(Number(value)))\n cookieData[valueArray[i].key] = Number(value) as number;\n else if (isBoolean(value))\n cookieData[valueArray[i].key] = stringToBoolean(\n value\n ) as boolean;\n else cookieData[valueArray[i].key] = value as string;\n }\n\n cookie = {\n name: name,\n data: cookieData as T,\n } as Cookie<T>;\n }\n return cookie;\n};\n\nexport const deleteCookie = (name: string) => {\n setCookie<any>({ name, data: {} });\n};\n\nconst stringToBoolean = (value: string | number | boolean) => {\n return [true, 'true', 'True', 'TRUE', '1', 1].indexOf(value) > -1;\n};\n\nconst isBoolean = (value: string | number | boolean) => {\n return value === 'true' || value === 'false';\n};\n\nconst isNaN = (value: number) => {\n if (Number.isNaN !== undefined) return Number.isNaN(value);\n else return value !== value;\n};\n","import { useState, useEffect } from 'react';\n\nconst useIE = (initialValue?: boolean) => {\n const [isIE, setIE] = useState(initialValue || false);\n\n useEffect(() => {\n setIE((document.body.style as any).msTouchAction !== undefined);\n }, []);\n return isIE;\n};\n\nexport default useIE;\n","import { useEffect, useState } from 'react';\n\nexport const useItemHeight = () => {\n const [element, setElement] = useState<HTMLElement | null>(null);\n const [height, setHeight] = useState<number>(0);\n\n useEffect(() => {\n const calcHeight = () => {\n if (element) setHeight(element.offsetHeight);\n };\n\n if (element) {\n calcHeight();\n window.addEventListener('resize', calcHeight);\n }\n\n return () => {\n window.removeEventListener('resize', calcHeight);\n };\n }, [element]);\n\n return {\n setElement,\n height,\n };\n};\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useScrollTo = (fallbackScrollDuration: number) => {\n const startTime = useRef<number>(-1);\n const firstPos = useRef<number>(0);\n const [targetPos, setTargetPos] = useState<number | undefined>(undefined);\n\n const outQuad = (n: number) => {\n return n * (2 - n);\n };\n\n useEffect(() => {\n if (targetPos === undefined) return;\n if ('scrollBehavior' in document.documentElement.style) {\n window.scroll({\n top: targetPos,\n left: 0,\n behavior: 'smooth',\n });\n setTargetPos(undefined);\n } else {\n const animate = (timestamp: number) => {\n if (startTime.current === -1) {\n startTime.current = timestamp || new Date().getTime();\n }\n\n const elapsed = timestamp - startTime.current;\n const progress = elapsed / fallbackScrollDuration;\n const easeProgress = +outQuad(progress).toFixed(2);\n\n const newPos =\n targetPos === 0\n ? firstPos.current - firstPos.current * easeProgress\n : firstPos.current + targetPos * easeProgress;\n\n // scroll to new position\n window.scrollTo(0, newPos);\n\n if (\n (targetPos > 0 && newPos >= firstPos.current + targetPos) ||\n (targetPos < 0 && newPos <= firstPos.current + targetPos) ||\n (targetPos === 0 && newPos <= 0)\n ) {\n cancelAnimationFrame(startTime.current);\n startTime.current = -1;\n setTargetPos(undefined);\n } else {\n window.requestAnimationFrame(animate);\n }\n };\n\n cancelAnimationFrame(startTime.current);\n startTime.current = -1;\n firstPos.current =\n window.pageYOffset || document.documentElement.scrollTop;\n window.requestAnimationFrame(animate);\n }\n }, [targetPos, fallbackScrollDuration]);\n\n return setTargetPos;\n};\n","import { useEffect, useState } from 'react';\nimport { isBrowser, useMediaQuery } from './useMediaQuery';\n\n// *****************\n// usePoster\n// *****************\n\ninterface PosterImage {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n}\n\nexport const canUseWebP = () => {\n if (!isBrowser) return false;\n\n const elem = document.createElement('canvas');\n\n if (!(elem.getContext && elem.getContext('2d'))) {\n // was able or not to get WebP representation\n return elem.toDataURL('image/webp').indexOf('data:image/webp') == 0;\n }\n\n // very old browser like IE 8, canvas not supported\n return false;\n};\n\nexport type PosterMq = 'small' | 'medium' | 'semilarge' | 'large' | 'xlarge';\n\nexport const usePoster = (\n posterImage: PosterImage & {\n webp?: PosterImage;\n },\n mqs?: PosterMq[]\n) => {\n const [currentImage, setCurrentImage] = useState<string | undefined>();\n\n const workingImage =\n posterImage.webp && canUseWebP() ? posterImage.webp : posterImage;\n const currentMq = useMediaQuery(\n mqs || ['small', 'medium', 'semilarge', 'large', 'xlarge']\n ) as PosterMq | undefined;\n\n useEffect(() => {\n if (\n currentMq &&\n workingImage[currentMq] &&\n workingImage[currentMq] !== currentImage\n ) {\n setCurrentImage(workingImage[currentMq]);\n }\n }, [currentImage, currentMq, workingImage]);\n\n return currentImage;\n};\n","import { useEffect, useRef } from 'react';\n\nexport default function useInterval(callback: any, delay?: number) {\n const savedCallback: any = useRef();\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n useEffect(() => {\n function tick() {\n savedCallback.current();\n }\n if (delay !== null) {\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n}\n","import { useState, useEffect } from 'react';\n\nconst useTouch = () => {\n const [canTouch, setCanTouch] = useState(false);\n\n useEffect(() => {\n setCanTouch(\n 'ontouchstart' in window ||\n navigator.maxTouchPoints > 0 ||\n navigator.msMaxTouchPoints > 0\n );\n }, []);\n return canTouch;\n};\n\nexport default useTouch;\n","import { ImageProps } from 'components/blocks/Image';\nimport { useEffect, useState } from 'react';\nimport { MediaQueryType } from './styles';\nimport { useMediaQuery } from './useMediaQuery';\n\nexport const useImgPreload = (\n imageUrls: ImageProps[],\n mqs: MediaQueryType[] = ['semilarge', 'large']\n) => {\n const [isReady, setReady] = useState(false);\n const [isLoaded, setLoaded] = useState(false);\n const currentMq = useMediaQuery(mqs as MediaQueryType[]);\n const [loadedImages, setLoadedImages] = useState<{\n [key: string]: { id: number | string; image: string }[];\n }>({\n small: [],\n medium: [],\n semilarge: [],\n large: [],\n xlarge: [],\n xxlarge: [],\n xxxLarge: [],\n });\n\n const preloadImages = (imageUrls: (string | undefined)[]) => {\n const images = (imageUrls.filter((img) => img) as string[]).map(\n (src, i) => {\n return new Promise((res) => {\n const img = new window.Image();\n img.src = src;\n img.onload = () => res({ url: src, i });\n });\n }\n );\n\n return images;\n };\n\n useEffect(() => {\n if (isReady && loadedImages && currentMq) {\n const loadedForMq = loadedImages[currentMq];\n\n if (loadedForMq.length < imageUrls.length && imageUrls.length > 0) {\n const requestedImages = imageUrls.map((img) => img[currentMq]);\n\n const resolve = async (items: any) => {\n for (const item of items) {\n const x = await item;\n\n setLoadedImages((prev) => {\n // check if image id already exists in array\n if (!prev[currentMq].find((e) => e.id === x.i)) {\n return {\n ...prev,\n [currentMq]: [\n ...prev[currentMq],\n {\n id: x.i,\n image: x.url,\n },\n ],\n };\n } else return prev;\n });\n }\n };\n\n resolve(preloadImages(requestedImages));\n }\n }\n }, [currentMq, imageUrls, isReady, loadedImages]);\n\n useEffect(() => {\n if (loadedImages && currentMq) {\n const imgCount = imageUrls.filter((img) => img[currentMq]).length;\n setLoaded(loadedImages[currentMq].length >= imgCount);\n }\n }, [currentMq, imageUrls, loadedImages]);\n\n return {\n loadedImages: currentMq && loadedImages[currentMq],\n isLoaded,\n setReady,\n };\n};\n","// converting 6 character hex color code to rgba string\nexport const hexToRgba = (hex: string, alpha = 1) => {\n const rgb = hex.match(/\\w\\w/g)?.map((x) => parseInt(x, 16));\n return rgb && `rgba(${rgb[0]},${rgb[1]},${rgb[2]},${alpha})`;\n};\n","import React, { FC } from 'react';\nimport { DefaultTheme, ThemeProvider } from 'styled-components';\n\nimport { FontBase, getBaseTheme } from 'utils/styles';\n\ntype RecursivePartial<T> = {\n [P in keyof T]?: RecursivePartial<T[P]>;\n};\n\nexport type Theme = RecursivePartial<DefaultTheme>;\n\n/**\n * Assigning font base key values to theme. Searches for each font base object key inside target theme object and replacing the values\n * @param target Combined result object\n * @param source FontBase object with properties that should by overritten.\n */\nconst assignFontBase = (\n target: DefaultTheme,\n source?: RecursivePartial<FontBase>\n) => {\n if (!source) return target;\n // deep iterate through target and search matching key\n const assign = (target: any, key: string, value: string) => {\n Object.keys(target).forEach((tKey) => {\n // check if target value is an object and no array\n if (\n target[tKey] &&\n typeof target[tKey] === 'object' &&\n !Array.isArray(target[tKey])\n ) {\n target[tKey] = assign(target[tKey], key, value);\n } else if (key === tKey) {\n target[tKey] = value;\n }\n });\n return target;\n };\n\n // search each base key and replace values\n Object.keys(source).forEach((sKey) => {\n if (source[sKey])\n target.fonts.types = assign(target.fonts.types, sKey, source[sKey]);\n });\n return target;\n};\n\n/**\n * Comnbining Theme objects\n * @param target Result theme object\n * @param source Theme object that should be assigned to target\n */\nconst assignTo = (target: DefaultTheme, source: Theme) => {\n const output = { ...target };\n\n Object.keys(source).forEach((key) => {\n const sourceVal = source[key];\n const targetVal = target[key];\n output[key] =\n targetVal &&\n sourceVal &&\n typeof targetVal === 'object' &&\n typeof sourceVal === 'object'\n ? assignTo(targetVal, sourceVal)\n : sourceVal;\n });\n return output;\n};\n\nexport const LibThemeProvider: FC<{\n theme: Theme;\n}> = ({ theme, children }) => {\n const combinedBaseTheme = assignFontBase(getBaseTheme(), theme.fonts?.base);\n const combinedTheme = assignTo(combinedBaseTheme, theme);\n return <ThemeProvider theme={combinedTheme}>{children}</ThemeProvider>;\n};\n","import * as React from 'react';\nimport { useContext } from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as settings,\n} from 'utils/styles';\n\nexport type BgMode =\n | 'full'\n | 'half-left'\n | 'half-right'\n | 'larger-left'\n | 'larger-right';\n\nconst getBackground = (mode: BgMode, bgColor: string) => {\n let bgValue = undefined;\n\n switch (mode) {\n case 'full':\n bgValue = bgColor;\n break;\n\n case 'half-left':\n bgValue = `linear-gradient(to left, transparent 50%, ${bgColor} 50%)`;\n break;\n\n case 'half-right':\n bgValue = `linear-gradient(to right, transparent 50%, ${bgColor} 50%)`;\n break;\n\n case 'larger-left':\n bgValue = `linear-gradient(to left, transparent 40%, ${bgColor} 40%)`;\n break;\n\n case 'larger-right':\n bgValue = `linear-gradient(to right, transparent 40%, ${bgColor} 40%)`;\n break;\n }\n return bgValue;\n};\n\nconst View = styled.section<{\n indent: string;\n addSeperation?: boolean;\n addPlainSeperation?: boolean;\n}>`\n position: relative;\n overflow: hidden;\n\n ${({ addSeperation }) =>\n addSeperation &&\n withRange([spacings.spacer * 2, spacings.spacer * 4], 'padding-top')}\n ${({ addSeperation }) =>\n addSeperation &&\n withRange([spacings.spacer * 2, spacings.spacer * 4], 'padding-bottom')}\n\n ${({ indent }) =>\n indent !== 'plain' &&\n css`\n &[data-ident='${indent}'] + &[data-ident='${indent}'] {\n padding-top: 0;\n }\n `}\n\n ${({ indent, addPlainSeperation }) =>\n addPlainSeperation &&\n indent &&\n css`\n &[data-ident='plain'] {\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4],\n 'margin-top'\n )}\n }\n\n &[data-ident='plain'] + & {\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4],\n 'margin-top'\n )}\n }\n\n &[data-ident='plain'] + &[data-ident='transparent'] {\n margin-top: 0;\n }\n\n &[data-ident='transparent'] + &[data-ident='plain'] {\n margin-top: 0;\n }\n `}\n`;\n\nconst Back = styled.div<{\n bgColor?: string;\n bgMode?: BgMode;\n}>`\n display: ${({ bgColor, bgMode }) => (bgColor && bgMode ? 'block' : 'none')};\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n max-width: ${({ bgMode }) =>\n (bgMode === 'full' ? spacings.wrapperLarge : spacings.wrapper) + 'px'};\n\n background: ${({ bgColor }) => bgColor || undefined};\n\n margin: 0 auto;\n\n @media ${mq.semilarge} {\n background: ${({ bgColor, bgMode }) =>\n bgColor && bgMode && bgMode !== 'full'\n ? getBackground(bgMode, bgColor)\n : undefined};\n }\n\n @media ${mq.xlarge} {\n :before {\n content: ${({ bgMode }) =>\n bgMode === 'half-left' || bgMode === 'larger-left'\n ? `\"\"`\n : undefined};\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: ${(spacings.wrapperLarge - spacings.wrapper) / 2}px;\n background-color: ${({ bgColor }) => bgColor && bgColor};\n\n transform: translateX(-100%);\n }\n\n :after {\n content: ${({ bgMode }) =>\n bgMode === 'half-right' || bgMode === 'larger-right'\n ? `\"\"`\n : undefined};\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: ${(spacings.wrapperLarge - spacings.wrapper) / 2}px;\n background-color: ${({ bgColor }) => bgColor && bgColor};\n\n transform: translateX(100%);\n }\n }\n`;\n\nconst Section: React.FC<{\n as?: 'header' | 'footer';\n bgColor?: string;\n bgMode?: BgMode;\n addSeperation?: boolean;\n className?: string;\n}> = ({\n as,\n bgColor,\n bgMode = 'full',\n addSeperation = false,\n className,\n children,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <View\n as={as}\n data-ident={bgColor && bgMode === 'full' ? bgColor : 'plain'}\n indent={bgColor && bgMode === 'full' ? bgColor : 'plain'}\n addSeperation={addSeperation}\n addPlainSeperation={settings(theme).sections.plainSeperation}\n className={className}\n >\n {bgColor && bgMode && <Back bgColor={bgColor} bgMode={bgMode} />}\n {children}\n </View>\n );\n};\n\nexport default Section;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings } from 'utils/styles';\n\nexport type ClampWidthType = 'small' | 'normal' | 'large';\n\nconst View = styled.div<{\n clampWidth?: ClampWidthType;\n addWhitespace?: boolean;\n}>`\n position: relative;\n width: 100%;\n max-width: ${({ clampWidth }) =>\n clampWidth === 'large'\n ? spacings.wrapperLarge\n : clampWidth === 'small'\n ? spacings.wrapperSmall\n : spacings.wrapper}px;\n margin-left: auto;\n margin-right: auto;\n padding: 0\n ${({ addWhitespace }) => (addWhitespace ? spacings.nudge * 2 : 0)}px;\n\n @media ${mq.medium} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n\n @media ${mq.semilarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * 100 : 0}%;\n padding-left: ${({ addWhitespace }) =>\n addWhitespace\n ? `\n max(\n ${spacings.spacer}px,\n ${(1 / 28) * 100}%\n );\n `\n : 0};\n\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${({ addWhitespace }) =>\n addWhitespace ? (1 / 28) * spacings.wrapper : 0}px;\n padding-right: ${({ addWhitespace }) =>\n addWhitespace ? spacings.spacer : 0}px;\n }\n`;\n\nconst Wrapper: React.FC<{\n addWhitespace?: boolean;\n clampWidth?: ClampWidthType;\n className?: string;\n}> = ({\n addWhitespace = false,\n clampWidth = 'normal',\n className,\n children,\n}) => {\n return (\n <View\n className={className}\n addWhitespace={addWhitespace}\n clampWidth={clampWidth}\n >\n {children}\n </View>\n );\n};\n\nexport default Wrapper;\n","import * as React from 'react';\nimport styled, { css } from 'styled-components';\nimport { mq } from 'utils/styles';\n\nexport interface ImageProps {\n alt?: string;\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n coverSpace?: boolean;\n}\n\nconst Img = styled.img<{ coverSpace?: boolean }>`\n max-width: 100%;\n display: block;\n align-self: flex-start;\n ${({ coverSpace }) =>\n coverSpace &&\n css`\n width: 100%;\n object-fit: cover;\n object-position: center;\n `}\n`;\n\nconst Picture = styled.picture<{ coverSpace?: boolean }>`\n ${({ coverSpace }) =>\n coverSpace &&\n `\n display: flex;\n height: 100%;\n width: 100%;\n`}\n`;\n\nconst Image: React.FC<\n { className?: string; onClick?: () => void } & ImageProps\n> = ({\n className,\n small,\n medium,\n semilarge,\n large,\n xlarge,\n alt,\n coverSpace,\n onClick,\n}) => {\n return (\n <Picture coverSpace={coverSpace} onClick={onClick}>\n {xlarge && <source srcSet={xlarge} media={mq.xlarge} />}\n {large && <source srcSet={large} media={mq.large} />}\n {semilarge && <source srcSet={semilarge} media={mq.semilarge} />}\n {medium && <source srcSet={medium} media={mq.medium} />}\n <Img\n srcSet={small}\n alt={alt || ''}\n coverSpace={coverSpace}\n loading=\"lazy\"\n className={className}\n />\n </Picture>\n );\n};\n\nexport default Image;\n","import * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n styleTextColor,\n FontType,\n getFonts as font,\n mq,\n withRange,\n} from 'utils/styles';\n\ntype HeadingType = Exclude<\n FontType,\n 'copy' | 'copy-i' | 'copy-b' | 'label' | 'callout'\n>;\n\n// Styles\nconst BaseStyles = styled.h1<{\n hyphens?: boolean;\n hasShadow?: boolean;\n textColor?: string;\n textGradient?: string;\n type: HeadingType;\n}>`\n display: inline-block;\n margin: 0;\n padding: 0;\n ${({ textColor, textGradient }) => styleTextColor(textColor, textGradient)}\n\n hyphens: auto;\n /* overflow-wrap: break-word; */\n\n ${(props: { hyphens?: boolean }) =>\n !props.hyphens &&\n css`\n @media ${mq.large} {\n hyphens: none;\n }\n `}\n\n text-shadow: ${({ hasShadow }) =>\n hasShadow && '1px 2px 8px rgba(0, 0, 0, 0.25)'};\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin: 0;\n padding: 0;\n border: 0;\n outline: 0;\n font-weight: inherit;\n font-style: inherit;\n font-size: 100%;\n font-family: inherit;\n vertical-align: baseline;\n }\n`;\n\nconst View = styled(BaseStyles)`\n font-family: ${({ type, theme }) => font(theme)[type].family};\n font-weight: ${({ type, theme }) => font(theme)[type].weight};\n font-style: ${({ type, theme }) => font(theme)[type].style};\n ${({ type, theme }) => withRange(font(theme)[type].size, 'font-size')}\n line-height: ${({ type, theme }) => font(theme)[type].lineHeight};\n letter-spacing: ${({ type, theme }) => font(theme)[type].letterSpacing};\n text-transform: ${({ type, theme }) => font(theme)[type].textTransform};\n`;\n\nexport type HeadlineTag =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'span'\n | 'div';\n\nconst Heading: React.FC<{\n as?: HeadlineTag;\n isInverted?: boolean;\n size?: HeadingType;\n textColor?: string;\n textGradient?: string;\n hyphens?: boolean;\n hasShadow?: boolean;\n innerHTML?: string;\n\n className?: string;\n}> = ({\n as,\n isInverted,\n className,\n size = 'heading-2',\n textColor,\n textGradient,\n hyphens = false,\n hasShadow = false,\n innerHTML,\n children,\n ...rest\n}) => {\n const theme = React.useContext(ThemeContext);\n let tag: HeadlineTag = 'h2';\n\n switch (size) {\n default:\n case 'heading-1':\n tag = 'h1';\n break;\n case 'heading-2':\n tag = 'h2';\n break;\n case 'heading-3':\n tag = 'h3';\n break;\n case 'heading-4':\n tag = 'h4';\n break;\n case 'super':\n tag = 'div';\n break;\n }\n\n // get font settings from global context\n const fontSettings = font(theme)?.[size];\n\n return (\n <View\n as={as || tag}\n type={size}\n textColor={\n textColor ||\n (isInverted ? fontSettings.colorInverted : fontSettings.color)\n }\n textGradient={\n textGradient ||\n (!textColor\n ? isInverted\n ? fontSettings.colorGradientInverted\n : fontSettings.colorGradient\n : undefined)\n }\n hyphens={hyphens}\n hasShadow={hasShadow}\n dangerouslySetInnerHTML={\n innerHTML && !children ? { __html: innerHTML } : undefined\n }\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n};\n\nHeading.defaultProps = {\n as: 'h2',\n size: 'heading-2',\n};\n\nexport default Heading;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport Heading, { HeadlineTag } from 'components/typography/Heading';\nimport { spacings, withRange } from 'utils/styles';\n\nconst View = styled.div<{ isCentered?: boolean }>`\n display: block;\n text-align: ${({ isCentered }) => (isCentered ? 'center' : 'left')};\n margin: ${({ isCentered }) => isCentered && '0 auto'};\n\n & > * + * {\n ${withRange([spacings.nudge * 2, spacings.nudge * 3], 'padding-top')};\n }\n`;\n\nconst Title: FC<{\n colorMode?: 'default' | 'inverted' | 'onImage';\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n title?: string;\n titleAs?: HeadlineTag;\n isCentered?: boolean;\n className?: string;\n}> = ({\n colorMode = 'default',\n superTitle,\n superTitleAs,\n title,\n titleAs,\n isCentered = false,\n className,\n}) => {\n return (\n <View isCentered={isCentered} className={className}>\n {superTitle && (\n <div>\n <Heading\n as={superTitleAs || 'h2'}\n size=\"super\"\n textColor={colorMode === 'onImage' ? '#fff' : undefined}\n isInverted={colorMode === 'inverted'}\n innerHTML={superTitle}\n />\n </div>\n )}\n {title && (\n <div>\n <Heading\n as={titleAs || 'h3'}\n size=\"heading-2\"\n textColor={colorMode === 'onImage' ? '#fff' : undefined}\n isInverted={colorMode === 'inverted'}\n innerHTML={title}\n />\n </div>\n )}\n </View>\n );\n};\n\nexport default Title;\n","import * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n FontType,\n mq,\n spacings,\n withRange,\n FontOptionType,\n getFonts as font,\n styleTextColor,\n 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-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 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 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 = '© <a href=\"http://osm.org/copyright\">OpenStreetMap</a> contributors',\n activeMarkerId,\n markers,\n center,\n zoom = 2.5,\n touchZoom = false,\n scrollWheelZoom = false,\n onlyScrollOnFocus = true,\n fitBoundsPadding = [20, 20], // 0 = TopLeft, 1 = BottomRight\n onMarkerClick,\n onFlyToClick,\n flyToControl,\n onActiveMarkerChanged,\n className,\n}) => {\n const cRef = useRef<HTMLDivElement | null>(null);\n const prevMarkerId = useRef<string | null>(null);\n\n // leaflet ref\n const [L, setLeaflet] = useState<any>(null);\n const [map, setMap] = useState<Map | null>(null);\n const [markersLayer, setMarkersLayer] = useState<FeatureGroup<any> | null>(\n null\n );\n const [isLoaded, setLoaded] = useState<boolean>(false);\n\n useEffect(() => {\n const initLeaflet = async (cElement: HTMLDivElement) => {\n const leaflet = await import('leaflet');\n if (leaflet) {\n // set leaflet state\n setLeaflet(leaflet);\n\n // setup map\n const map = leaflet.map(cElement, {\n center: center,\n zoom: zoom,\n touchZoom: touchZoom,\n scrollWheelZoom: scrollWheelZoom,\n });\n\n // activate map scrolling on focus\n map.once('focus', () => {\n if (onlyScrollOnFocus) map.scrollWheelZoom.enable();\n });\n\n // deactivate map scrolling on focus is lost\n map.once('blur', () => {\n if (onlyScrollOnFocus) map.scrollWheelZoom.disable();\n });\n\n // set map state\n setMap(map);\n\n // add map layer from map provider\n leaflet\n .tileLayer(url, {\n attribution: attribution,\n })\n .addTo(map);\n\n // setup layer for markers\n const markersLayer = new leaflet.FeatureGroup();\n markersLayer.addTo(map);\n setMarkersLayer(markersLayer);\n }\n };\n\n // load leaflet\n const mapContainerRef = containerRef || cRef;\n if (!isLoaded && mapContainerRef?.current)\n initLeaflet(mapContainerRef.current);\n }, [\n attribution,\n center,\n containerRef,\n isLoaded,\n onlyScrollOnFocus,\n scrollWheelZoom,\n touchZoom,\n url,\n zoom,\n ]);\n\n // setup markers\n useEffect(() => {\n /**\n * Adjust zoom to show all markers\n */\n const showAllMarkers = () => {\n if (map && markersLayer) {\n map.fitBounds(markersLayer.getBounds(), {\n padding: L.point(fitBoundsPadding),\n });\n }\n };\n\n /**\n * Pan and zoom to marker position on map\n * @param position\n * @param zoom\n */\n const flyToPosition = (position?: [number, number], zoom?: number) => {\n if (position) map?.flyTo(position, zoom);\n else flyToActive(zoom);\n };\n\n /**\n * Pan and zoom to active marker position on map\n * @param zoom\n */\n const flyToActive = (zoom?: number) => {\n const marker = markers?.find((m) => m.id === activeMarkerId);\n if (marker) map?.flyTo(marker.position, zoom);\n };\n\n // setup markers\n if (markersLayer) {\n markersLayer.clearLayers();\n\n markers?.forEach(({ position, icon, id }) => {\n if (!icon?.url || !icon?.size || !position) return;\n const isActive = id === activeMarkerId;\n\n const markerIcon = L.icon({\n iconUrl: icon.url,\n\n iconSize: isActive ? icon.sizeActive : icon.size, // size of the icon\n // shadowSize: [50, 64], // size of the shadow\n iconAnchor: isActive ? icon.anchorActive : icon?.anchor, // point of the icon which will correspond to marker's location\n // shadowAnchor: [4, 62], // the same for the shadow\n // popupAnchor: [0, -16], // point from which the popup should open relative to the iconAnchor\n });\n\n const marker: Marker = L.marker(position, {\n icon: markerIcon,\n riseOnHover: true,\n } as MarkerOptions).addTo(map);\n\n marker.on('click', () => {\n onMarkerClick && onMarkerClick(id);\n });\n\n // add marker to markers layer\n markersLayer.addLayer(marker);\n\n if (L && map && markersLayer) {\n if (!isLoaded) {\n // on first load\n onReady &&\n onReady({\n goTo: flyToPosition,\n showAll: showAllMarkers,\n });\n setLoaded(true);\n if (activeMarkerId)\n prevMarkerId.current = activeMarkerId;\n } else {\n // check if active marker changed\n if (\n activeMarkerId &&\n activeMarkerId !== prevMarkerId?.current\n ) {\n prevMarkerId.current = activeMarkerId;\n activeMarkerId &&\n onActiveMarkerChanged &&\n onActiveMarkerChanged({\n markerId: activeMarkerId,\n goTo: flyToActive,\n });\n }\n }\n }\n });\n }\n }, [\n L,\n fitBoundsPadding,\n isLoaded,\n map,\n markers,\n markersLayer,\n onMarkerClick,\n activeMarkerId,\n onActiveMarkerChanged,\n onReady,\n ]);\n\n return (\n <MapContainer ref={cRef} className={className}>\n {flyToControl && (\n <FylToCtrlContainer\n onClick={(ev) => {\n ev.stopPropagation();\n if (map && onFlyToClick) {\n onFlyToClick((zoom) => {\n // fly to active marker\n const marker = markers?.find(\n (m) => m.id === activeMarkerId\n );\n if (marker) {\n map.flyTo(marker.position, zoom);\n }\n });\n }\n }}\n >\n {flyToControl}\n </FylToCtrlContainer>\n )}\n </MapContainer>\n );\n};\n\nexport default LeafletMap;\n","import Grid from 'components/base/Grid';\nimport ArrowLeftGhost from 'components/base/icons/ArrowLeftGhost';\nimport ArrowRightGhost from 'components/base/icons/ArrowRightGhost';\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Actions from 'components/blocks/Actions';\nimport Intro from 'components/blocks/Intro';\nimport LeafletMap from 'components/blocks/LeafletMap';\nimport Slider, { SliderContext } from 'components/blocks/Slider';\nimport Copy from 'components/typography/Copy';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport React, { FC, useContext, useState } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { mq, spacings, getColors as color, withRange } from 'utils/styles';\n\nconst StyledSection = styled(Section)`\n position: relative;\n min-height: 500px;\n z-index: 0;\n`;\n\nconst MapContainer = styled(LeafletMap)<{ isMirrored?: boolean }>`\n position: relative;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n min-height: 500px;\n\n @media ${mq.semilarge} {\n position: absolute;\n width: 50%;\n height: 100%;\n left: ${({ isMirrored }) => (isMirrored ? 'auto' : '50%')};\n right: ${({ isMirrored }) => (isMirrored ? '50%' : 'auto')};\n\n transform: translateX(\n ${({ isMirrored }) => (isMirrored ? '100%' : '-100%')}\n );\n }\n\n @media ${mq.xlarge} {\n max-width: ${spacings.wrapperLarge / 2}px;\n }\n`;\n\nconst CardWrapper = styled(Wrapper)`\n pointer-events: none;\n`;\n\nconst SliderWrapper = styled.div<{ isMirrored?: boolean }>`\n display: flex;\n flex-direction: column;\n position: relative;\n width: 100%;\n pointer-events: all;\n\n padding: ${spacings.nudge * 3}px ${spacings.nudge * 3}px\n ${spacings.spacer * 2}px ${spacings.nudge * 3}px;\n\n @media ${mq.medium} {\n padding: ${spacings.nudge * 3}px ${spacings.spacer}px\n ${spacings.spacer * 2}px ${spacings.spacer}px;\n }\n\n @media ${mq.semilarge} {\n flex-direction: row;\n ${withRange([spacings.spacer * 3, spacings.spacer * 5], 'padding-top')};\n ${withRange(\n [spacings.spacer * 3, spacings.spacer * 5],\n 'padding-bottom'\n )};\n ${({ isMirrored }) =>\n isMirrored\n ? withRange(\n [spacings.spacer, spacings.spacer * 4],\n 'padding-right'\n )\n : `padding-right: ${spacings.spacer}px`};\n ${({ isMirrored }) =>\n !isMirrored\n ? withRange(\n [spacings.spacer, spacings.spacer * 4],\n 'padding-left'\n )\n : `padding-left: ${(1 / 28) * 100}vw`};\n }\n\n @media ${mq.xlarge} {\n ${({ isMirrored }) =>\n !isMirrored\n ? withRange(\n [spacings.spacer, spacings.spacer * 4],\n 'padding-left'\n )\n : `padding-left: ${(1 / 28) * spacings.wrapper}px`};\n }\n\n .slick-slide div {\n outline: none;\n }\n\n .slick-initialized .slick-slide.slick-active {\n z-index: 1;\n }\n`;\n\nconst InfoCardView = styled.div`\n min-height: 100px;\n pointer-events: all;\n\n & > * + * {\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')}\n }\n`;\n\nconst CardHeader = styled.div`\n display: flex;\n`;\n\nconst StyledActions = styled(Actions)`\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n padding-bottom: ${spacings.nudge}px;\n\n @media ${mq.medium} {\n & > * {\n max-width: calc(50% - ${spacings.spacer}px);\n }\n }\n`;\n\nconst ContactList = styled.ul<{ isInverted?: boolean }>`\n padding: 0;\n list-style-type: none;\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n\n a {\n color: inherit;\n }\n\n li {\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0;\n margin: 0;\n }\n\n li + li {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n span:first-child {\n flex: 0 0 30px;\n max-width: 30px;\n\n & > * {\n max-width: 100%;\n }\n }\n`;\n\nconst ContactListLabel = styled(Copy)`\n margin-left: ${spacings.nudge * 2.5}px;\n\n * {\n margin: 0;\n padding: 0;\n }\n`;\n\nconst LocationInfoCard: FC<{\n isInverted?: boolean;\n location: MapLocation;\n}> = ({ isInverted, location }) => {\n return (\n <InfoCardView>\n {location.meta?.title && (\n <CardHeader>\n <Intro\n colorMode={isInverted ? 'inverted' : 'default'}\n title={location.meta.title}\n titleAs={location.meta.titleAs}\n superTitle={location.meta?.superTitle}\n superTitleAs={location.meta?.superTitleAs}\n />\n </CardHeader>\n )}\n {location.meta?.contact && location.meta.contact.length > 0 && (\n <ContactList isInverted={isInverted}>\n {location.meta?.contact\n ?.filter((c) => c.label)\n .map((contact, i) => (\n <li key={i}>\n <span>{contact.icon}</span>\n <ContactListLabel\n isInverted={isInverted}\n innerHTML={contact.label}\n />\n </li>\n ))}\n </ContactList>\n )}\n {(location?.meta?.primaryAction ||\n location?.meta?.secondaryAction) && (\n <StyledActions\n primary={\n location?.meta?.primaryAction &&\n location.meta.primaryAction(isInverted)\n }\n secondary={\n location?.meta?.secondaryAction &&\n location.meta.secondaryAction(isInverted)\n }\n />\n )}\n </InfoCardView>\n );\n};\n\nconst Controls = styled.div`\n display: flex;\n flex-direction: row;\n align-self: center;\n text-align: center;\n\n @media ${mq.semilarge} {\n flex-direction: column;\n align-self: flex-start;\n margin-left: auto;\n text-align: right;\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n }\n`;\n\nconst StyledDotGroup = styled(Slider.DotGroup)`\n display: flex;\n flex-direction: row;\n padding-top: ${spacings.spacer * 1.5}px;\n padding-left: ${spacings.spacer * 1.5}px;\n padding-right: ${spacings.spacer * 1.5}px;\n\n @media ${mq.semilarge} {\n display: none;\n padding: 0;\n }\n`;\n\nconst DotWrapper = styled.button`\n border: none;\n outline: none;\n background: none;\n cursor: pointer;\n\n padding: ${spacings.nudge * 2}px;\n margin: -${spacings.nudge * 2}px;\n\n & + & {\n margin-left: ${spacings.nudge * 1.5}px;\n }\n`;\n\nconst Dot = styled.div<{ isActive?: boolean; isInverted?: boolean }>`\n height: 14px;\n width: 14px;\n border: solid 1px\n ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 14px;\n\n transition: background-color 0.2s ease-in-out;\n\n background-color: ${({ isActive, isInverted, theme }) =>\n isActive\n ? isInverted\n ? color(theme).light\n : color(theme).dark\n : 'transparent'};\n`;\n\nconst StyledControl = styled(Slider.Control)<{ isInverted?: boolean }>`\n display: none;\n border: none;\n outline: none;\n background: none;\n padding: 0 ${spacings.nudge * 3}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n transition: color 0.2s ease-in-out, transform 0.2s ease-in-out;\n\n &:enabled {\n cursor: pointer;\n }\n\n &:enabled:hover {\n transform: scale(1.05);\n }\n\n &:enabled:active {\n transform: scale(0.95);\n }\n\n &:disabled {\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).mono.dark : color(theme).mono.medium};\n }\n\n @media ${mq.semilarge} {\n display: block;\n }\n`;\n\nexport interface LocationIcon {\n url: string;\n size: [number, number];\n anchor: [number, number];\n\n sizeActive: [number, number];\n anchorActive: [number, number];\n}\n\nexport interface MapLocation {\n id: string;\n position: [number, number];\n icon?: LocationIcon;\n meta?: {\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n contact?: Array<{ icon?: React.ReactNode; label?: string }>;\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n };\n}\n\nconst Map: FC<{\n isInverted?: boolean;\n isMirrored?: boolean;\n center?: [number, number];\n zoom?: number;\n flyToZoom?: number;\n initialLocation?: string;\n locations?: Array<MapLocation>;\n /** Show all markers on first load */\n allMarkersOnInit?: boolean;\n /** Map container padding for show all markers */\n fitBoundsPadding?: [number, number];\n flyToControl?: React.ReactNode;\n controlNext?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n controlPrev?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n dot?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n index?: number;\n }) => React.ReactNode;\n}> = ({\n isInverted = false,\n isMirrored = false,\n center = [51.505, -0.09],\n zoom = 5,\n flyToZoom,\n initialLocation,\n locations,\n allMarkersOnInit = false,\n fitBoundsPadding,\n flyToControl,\n controlNext,\n controlPrev,\n dot,\n}) => {\n const theme = useContext(ThemeContext);\n const [activeLocation, setActiveLocation] = useState<string>(\n initialLocation || ''\n );\n\n return (\n <StyledSection\n bgColor={isInverted ? color(theme).dark : color(theme).mono.light}\n >\n <Slider.Provider\n fade={true}\n swipe={false}\n slidesToShow={1}\n variableWidth={false}\n sameHeight={true}\n clickSideOffset={0}\n responsive={[\n {\n breakpoint: 832,\n settings: {\n fade: false,\n swipe: true,\n },\n },\n ]}\n beforeChange={({ nextStep }) => {\n if (locations && locations[nextStep]) {\n setActiveLocation(locations[nextStep].id);\n }\n }}\n >\n <SliderContext.Consumer>\n {({ goToStep }) => (\n <MapContainer\n onReady={({ showAll, goTo }) => {\n if (allMarkersOnInit) showAll();\n else goTo();\n }}\n center={center}\n zoom={zoom}\n isMirrored={isMirrored}\n activeMarkerId={activeLocation}\n onMarkerClick={(markerId) => {\n setActiveLocation(markerId);\n\n // move slider to step\n const locIndex = locations?.findIndex(\n (loc) => loc.id === markerId\n );\n\n if (locIndex !== undefined && locIndex !== -1)\n goToStep(locIndex);\n }}\n flyToControl={flyToControl}\n onFlyToClick={(goTo) => {\n // pan and zoom to active location\n goTo(flyToZoom);\n }}\n fitBoundsPadding={fitBoundsPadding}\n markers={locations?.map(\n ({ id, position, icon }) => {\n return {\n id,\n position,\n icon,\n };\n }\n )}\n onActiveMarkerChanged={({ goTo }) => goTo()}\n />\n )}\n </SliderContext.Consumer>\n\n <CardWrapper clampWidth=\"normal\">\n <Grid.Row gutter={spacings.spacer}>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? 14 : 0) / 28,\n }}\n ></Grid.Col>\n <Grid.Col\n semilarge={{\n span: 14 / 28,\n move: (isMirrored ? -14 : 0) / 28,\n }}\n >\n <SliderWrapper isMirrored={isMirrored}>\n {locations && locations.length > 1 && (\n <>\n <Slider.Slides>\n {locations?.map((location, i) => (\n <LocationInfoCard\n key={i}\n isInverted={isInverted}\n location={location}\n />\n ))}\n </Slider.Slides>\n <Controls>\n <StyledControl\n type=\"next\"\n isInverted={isInverted}\n >\n {(isActive) =>\n controlNext ? (\n controlNext({\n isInverted,\n isActive,\n name:\n 'control_next_head',\n })\n ) : (\n <ArrowRightGhost />\n )\n }\n </StyledControl>\n <StyledControl\n type=\"prev\"\n isInverted={isInverted}\n >\n {(isActive) =>\n controlPrev ? (\n controlPrev({\n isInverted,\n isActive,\n name:\n 'control_prev_head',\n })\n ) : (\n <ArrowLeftGhost />\n )\n }\n </StyledControl>\n <StyledDotGroup>\n {(i, isActive, onClick) => (\n <DotWrapper\n key={i}\n onClick={onClick}\n >\n {dot ? (\n dot({\n isInverted,\n isActive,\n index: i,\n })\n ) : (\n <Dot\n isActive={\n isActive\n }\n isInverted={\n isInverted\n }\n />\n )}\n </DotWrapper>\n )}\n </StyledDotGroup>\n </Controls>\n </>\n )}\n {locations && locations.length === 1 && (\n <LocationInfoCard\n isInverted={isInverted}\n location={locations[0]}\n />\n )}\n </SliderWrapper>\n </Grid.Col>\n </Grid.Row>\n </CardWrapper>\n </Slider.Provider>\n </StyledSection>\n );\n};\n\nexport default Map;\n","import Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors as color, spacings } from 'utils/styles';\n\nconst View = styled.div``;\n\nconst FieldHead = styled.div`\n display: flex;\n flex-direction: row;\n align-items: top;\n justify-content: space-between;\n padding-bottom: ${spacings.nudge * 3}px;\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n`;\n\nconst Field = styled.input<{\n isInverted?: boolean;\n hasError?: boolean;\n isDisabled?: boolean;\n hasBack?: boolean;\n}>`\n display: block;\n outline: none;\n width: 100%;\n min-height: 60px;\n box-shadow: none;\n border: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n padding: ${spacings.nudge * 2}px ${spacings.spacer}px;\n border: ${({ hasError }) =>\n hasError ? '2px solid #ff0000' : '2px solid transparent'};\n background-color: ${({ isInverted, hasBack, theme }) =>\n isInverted || !hasBack ? color(theme).light : color(theme).mono.light};\n\n font-weight: inherit;\n font-family: inherit;\n font-size: inherit;\n color: ${({ hasError }) => (hasError ? '#ff0000' : 'inherit')};\n\n pointer-events: ${({ isDisabled }) => isDisabled && 'none'};\n\n &:active {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n &:focus {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n ::placeholder {\n color: ${({ theme }) => color(theme).secondary.light};\n }\n`;\n\nconst InfoMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst ErrorMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nexport type FormProps = {\n label?: string;\n errorMessage?: string;\n infoMessage?: string;\n\n value?: string;\n name?: string;\n placeholder?: string;\n isRequired?: boolean;\n isDisabled?: boolean;\n};\n\nconst Textfield: React.FC<\n FormProps & {\n type?: 'text' | 'email' | 'tel';\n isInverted?: boolean;\n lightBg?: boolean;\n onChange?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n }\n> = ({\n lightBg,\n type = 'text',\n label,\n errorMessage,\n infoMessage,\n placeholder,\n value,\n name,\n isInverted,\n isDisabled,\n isRequired,\n onChange,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <View>\n <FieldHead>\n {label && (\n <Copy\n isInverted={isInverted}\n textColor={\n isDisabled ? color(theme).mono.dark : undefined\n }\n >\n {`${label}${isRequired ? ' *' : ''}`}\n </Copy>\n )}\n </FieldHead>\n <Copy textColor={color(theme).secondary.dark} type=\"copy-b\">\n <Field\n hasBack={!lightBg}\n placeholder={placeholder}\n hasError={!!errorMessage}\n type={type}\n isInverted={isInverted}\n isDisabled={isDisabled}\n name={name}\n value={value}\n required={isRequired}\n onChange={onChange}\n />\n </Copy>\n {infoMessage && (\n <InfoMessage textColor={color(theme).mono.dark} size=\"small\">\n {infoMessage}\n </InfoMessage>\n )}\n {errorMessage && (\n <ErrorMessage textColor=\"#ff0000\" size=\"small\" type=\"copy-i\">\n {errorMessage\n ? errorMessage\n : 'Bitte geben Sie einen gültigen Text ein'}\n </ErrorMessage>\n )}\n </View>\n );\n};\n\nexport default Textfield;\n","import Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport { FormProps } from './Textfield';\n\nconst FieldHead = styled.div`\n display: flex;\n flex-direction: row;\n align-items: top;\n justify-content: space-between;\n padding-bottom: ${spacings.nudge * 3}px;\n padding-left: ${spacings.nudge}px;\n padding-right: ${spacings.nudge}px;\n`;\n\nconst Area = styled.textarea<{\n isInverted?: boolean;\n hasError?: boolean;\n isDisabled?: boolean;\n hasBack?: boolean;\n}>`\n display: block;\n outline: none;\n width: 100%;\n min-height: 60px;\n box-shadow: none;\n border: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n resize: none;\n width: 100%;\n min-height: 120px;\n\n @media ${mq.semilarge} {\n min-height: 185px;\n }\n\n padding: ${spacings.nudge * 2}px ${spacings.spacer}px;\n\n /* border: ${({ isInverted, theme }) =>\n isInverted\n ? '2px solid transparent'\n : `2px solid ${color(theme).mono.medium}`}; */\n border: ${({ hasError }) =>\n hasError ? '2px solid #ff0000' : '2px solid transparent'};\n background-color: ${({ isInverted, hasBack, theme }) =>\n isInverted || !hasBack ? color(theme).light : color(theme).mono.light};\n\n font-weight: inherit;\n font-family: inherit;\n font-size: inherit;\n color: ${({ hasError }) => (hasError ? '#ff0000' : 'inherit')};\n\n pointer-events: ${({ isDisabled }) => isDisabled && 'none'};\n\n &:active {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n &:focus {\n border: ${({ theme }) => `2px solid ${color(theme).primary.medium}`};\n }\n\n ::placeholder {\n color: ${({ theme }) => color(theme).secondary.light};\n }\n`;\n\nconst InfoMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n`;\n\nconst ErrorMessage = styled(Copy)`\n margin-top: ${spacings.nudge * 2}px;\n`;\n\nconst Textarea: React.FC<\n FormProps & {\n isInverted?: boolean;\n lightBg?: boolean;\n onChange?: (ev: React.SyntheticEvent<HTMLTextAreaElement>) => void;\n }\n> = ({\n lightBg,\n label,\n errorMessage,\n infoMessage,\n placeholder,\n value,\n name,\n isInverted,\n isDisabled,\n isRequired,\n onChange,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <div>\n <FieldHead>\n {label && (\n <Copy\n isInverted={isInverted}\n textColor={\n isDisabled ? color(theme).mono.dark : undefined\n }\n >\n {`${label}${isRequired ? ' *' : ''}`}\n </Copy>\n )}\n </FieldHead>\n <Copy type=\"copy-b\">\n <Area\n value={value}\n name={name}\n placeholder={placeholder}\n hasError={!!errorMessage}\n isDisabled={isDisabled}\n isInverted={isInverted}\n required={isRequired}\n hasBack={!lightBg}\n onChange={onChange}\n />\n </Copy>\n {infoMessage && (\n <InfoMessage textColor={color(theme).mono.dark} size=\"small\">\n {infoMessage}\n </InfoMessage>\n )}\n {errorMessage && (\n <ErrorMessage textColor=\"#ff0000\" size=\"small\" type=\"copy-i\">\n {errorMessage\n ? errorMessage\n : 'Bitte geben Sie einen gültigen Text ein'}\n </ErrorMessage>\n )}\n </div>\n );\n};\n\nexport default Textarea;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Check: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"12\"\n height=\"9\"\n viewBox=\"0 0 12 9\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M10.833 1.162A.512.512 0 0010.444 1a.512.512 0 00-.388.162L4.333 6.708 1.944 4.392a.512.512 0 00-.388-.161.512.512 0 00-.39.161A.482.482 0 001 4.77c0 .162.056.27.167.377l2.777 2.692c.056.054.112.108.167.108.056.054.167.054.222.054.111 0 .167 0 .223-.054.055 0 .11-.054.166-.108l6.111-5.923A.482.482 0 0011 1.538a.482.482 0 00-.167-.376z\"\n fill=\"#fff\"\n stroke=\"#fff\"\n />\n </SVG>\n);\n\nexport default Check;\n","import Check from 'components/base/icons/Check';\nimport Copy from 'components/typography/Copy';\nimport * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport { getColors, spacings } from 'utils/styles';\n\nconst View = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n\n & > * + * {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst Label = styled(Copy)`\n display: flex;\n\n & > * {\n margin: 0;\n }\n`;\n\nconst CheckboxContainer = styled.div<{ isDisabled?: boolean }>`\n cursor: ${({ isDisabled }) => (isDisabled ? 'default' : 'pointer')};\n pointer-events: ${({ isDisabled }) => (isDisabled ? 'none' : 'all')};\n`;\n\nconst Original = styled.input`\n position: absolute;\n left: -9999px;\n opacity: 0;\n`;\n\nconst Box = styled.span<{ isSelected?: boolean; isInverted?: boolean }>`\n width: 20px;\n min-width: 20px;\n height: 20px;\n display: block;\n position: relative;\n\n border: 2px solid\n ${({ isInverted, theme }) =>\n isInverted ? '#fff' : getColors(theme).mono.medium};\n\n background-color: ${({ isSelected, theme }) =>\n isSelected ? getColors(theme).primary.medium : '#fff'};\n`;\n\nconst StyledCheck = styled(Check)`\n width: 80%;\n height: 80%;\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n`;\n\nconst Checkbox: React.FC<{\n label?: string;\n\n onChange?: (e: React.SyntheticEvent<HTMLInputElement>) => void;\n onClick?: () => void;\n\n name?: string;\n value?: string;\n\n isDisabled?: boolean;\n isSelected?: boolean;\n isInverted?: boolean;\n isRequired?: boolean;\n}> = ({\n label,\n isDisabled,\n isSelected,\n isInverted,\n onChange,\n onClick,\n name,\n value,\n isRequired,\n}) => {\n const theme = React.useContext(ThemeContext);\n return (\n <View>\n <CheckboxContainer isDisabled={isDisabled} onClick={onClick}>\n <Box isSelected={isSelected} isInverted={isInverted}>\n {isSelected && <StyledCheck />}\n </Box>\n <Original\n type=\"checkbox\"\n name={name}\n value={value}\n disabled\n checked={isSelected}\n required={isRequired}\n onChange={onChange}\n />\n </CheckboxContainer>\n {label && (\n <Label\n size=\"small\"\n type=\"copy-b\"\n isInverted={isInverted}\n textColor={\n isDisabled ? getColors(theme).mono.dark : undefined\n }\n innerHTML={`${label}${isRequired ? '<span> *</span>' : ''}`}\n />\n )}\n </View>\n );\n};\n\nexport default Checkbox;\n","import * as React from 'react';\nimport styled, { ThemeContext } from 'styled-components';\nimport Section, { BgMode } from 'components/base/Section';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport { spacings, mq, getColors as color, withRange } from 'utils/styles';\nimport Textfield, { FormProps } from 'components/fields/Textfield';\nimport Textarea from 'components/fields/Textarea';\nimport Checkbox from 'components/fields/Checkbox';\nimport Wrapper from 'components/base/Wrapper';\nimport Intro from 'components/blocks/Intro';\nimport { Field, Formik } from 'formik';\nimport { FormEvent } from 'react';\nimport Actions from 'components/blocks/Actions';\n\nconst StyledIntro = styled(Intro)`\n ${withRange([spacings.spacer * 2, spacings.spacer * 3], 'padding-bottom')}\n`;\n\nconst FieldsContainer = styled.div`\n padding-bottom: 30px;\n max-width: 1150px;\n\n & > * > * + * {\n padding-top: 30px;\n }\n\n @media ${mq.medium} {\n display: flex;\n flex-direction: row;\n align-items: top;\n }\n`;\n\nconst FlexContainer = styled.div`\n flex: 0 1 50%;\n width: 100%;\n max-width: 650px;\n\n & + & {\n padding-top: 30px;\n }\n\n @media ${mq.medium} {\n & + & {\n padding-top: 0;\n margin-left: 30px;\n }\n }\n`;\n\nconst ActionWrapper = styled(Actions)`\n margin-top: ${spacings.spacer * 3}px;\n`;\n\nexport interface FormData {\n name?: string;\n surname?: string;\n mail?: string;\n phone?: string;\n area?: string;\n check?: boolean;\n}\n\nexport type FormFieldProps = Omit<FormProps, 'value' | 'name' | 'errorMessage'>;\nexport type FormDataErrors = { [key in keyof FormData]: string };\n\nconst Form: React.FC<{\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n intro?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n submitAction?: (props: {\n isInverted?: boolean;\n additionalProps: { type: 'submit'; as: 'button' | 'a' };\n isDisabled?: boolean;\n }) => React.ReactNode;\n onSubmit?: (data: FormData) => void;\n validation?: (values: FormData, errors: FormDataErrors) => FormDataErrors;\n yupValidationSchema?: any;\n\n isInverted?: boolean;\n bgMode?: 'full';\n\n formFields: {\n name?: FormFieldProps;\n surname?: FormFieldProps;\n mail?: FormFieldProps;\n phone?: FormFieldProps;\n area?: FormFieldProps;\n };\n\n checkbox?: {\n label?: string;\n name?: string;\n value?: string;\n isDisabled?: boolean;\n };\n}> = ({\n bgMode,\n isInverted = false,\n title,\n titleAs,\n superTitle,\n superTitleAs,\n intro,\n primaryAction,\n secondaryAction,\n submitAction,\n onSubmit,\n formFields,\n checkbox,\n yupValidationSchema,\n validation,\n}) => {\n const theme = React.useContext(ThemeContext);\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n default:\n return undefined;\n }\n };\n\n const isEmpty = (obj: any) => {\n return (\n obj && Object.keys(obj).length === 0 && obj.constructor === Object\n );\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <Wrapper clampWidth=\"normal\" addWhitespace>\n {title && (\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={intro}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n )}\n <Formik\n initialValues={\n {\n name: '',\n surname: '',\n phone: '',\n area: '',\n mail: '',\n check: false,\n } as FormData\n }\n validate={(values) => {\n let errors: FormDataErrors = {};\n if (validation)\n errors = validation(\n values,\n errors\n ) as FormDataErrors;\n return errors;\n }}\n validationSchema={yupValidationSchema}\n onSubmit={async (values) => {\n onSubmit && onSubmit(values);\n }}\n >\n {({\n handleSubmit,\n setFieldValue,\n values,\n errors,\n isValid,\n dirty,\n }) => (\n <form\n onSubmit={(e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n handleSubmit(e);\n }}\n >\n <FieldsContainer>\n <FlexContainer>\n {formFields.name && (\n <Field\n label={\n formFields.name?.label ||\n 'Vorname'\n }\n placeholder={\n formFields.name?.placeholder\n }\n infoMessage={\n formFields.name?.infoMessage\n }\n as={Textfield}\n name=\"name\"\n isRequired={\n formFields.name?.isRequired\n }\n errorMessage={errors.name}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n )}\n {formFields.surname && (\n <Field\n label={\n formFields.surname?.label ||\n 'Nachname'\n }\n placeholder={\n formFields.surname?.placeholder\n }\n infoMessage={\n formFields.surname?.infoMessage\n }\n as={Textfield}\n name=\"surname\"\n isRequired={\n formFields.surname?.isRequired\n }\n errorMessage={errors.surname}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n )}\n {formFields.mail && (\n <Field\n type=\"email\"\n label={\n formFields.mail?.label ||\n 'E-Mail'\n }\n placeholder={\n formFields.mail?.placeholder\n }\n infoMessage={\n formFields.mail?.infoMessage\n }\n as={Textfield}\n name=\"mail\"\n isRequired={\n formFields.mail?.isRequired\n }\n errorMessage={errors.mail}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n )}\n {formFields.phone && (\n <Field\n type=\"tel\"\n label={\n formFields.phone?.label ||\n 'Telefon'\n }\n placeholder={\n formFields.phone?.placeholder\n }\n infoMessage={\n formFields.phone?.infoMessage\n }\n as={Textfield}\n name=\"phone\"\n isRequired={\n formFields.phone?.isRequired\n }\n errorMessage={errors.phone}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n )}\n </FlexContainer>\n {formFields.area && (\n <FlexContainer>\n <Field\n label={\n formFields.area?.label ||\n 'Textfeld'\n }\n placeholder={\n formFields.area?.placeholder\n }\n infoMessage={\n formFields.area?.infoMessage\n }\n name=\"area\"\n as={Textarea}\n isRequired={\n formFields.area?.isRequired\n }\n errorMessage={errors.area}\n isInverted={isInverted}\n lightBg={bgMode === 'full'}\n />\n </FlexContainer>\n )}\n </FieldsContainer>\n {checkbox && (\n <Field\n onClick={() => {\n setFieldValue('check', !values.check);\n }}\n value={values.check}\n isSelected={values.check}\n isDisabled={checkbox.isDisabled}\n name=\"check\"\n as={Checkbox}\n label={\n checkbox.label ||\n 'Ich habe die Datenschutzbestimmungen zu Kenntnis genommen und aktzeptiere.'\n }\n isInverted={isInverted}\n isRequired\n />\n )}\n {submitAction && (\n <ActionWrapper\n primary={\n submitAction &&\n submitAction({\n isInverted,\n isDisabled:\n !dirty ||\n !isValid ||\n !isEmpty(errors),\n additionalProps: {\n type: 'submit',\n as: 'button',\n },\n })\n }\n />\n )}\n </form>\n )}\n </Formik>\n </Wrapper>\n </Section>\n );\n};\n\nexport default Form;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowLeftRight: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"36\"\n height=\"17\"\n viewBox=\"0 0 36 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.06818 7.42108H32.7534l-6.3638-5.86523c-.3753-.34588-.3753-.71337 0-1.10248.1641-.17293.3635-.2594.598-.2594.2346 0 .4457.08647.6333.2594l7.8808 7.29576c.1642.12971.2463.31345.2463.55124 0 .21617-.0821.39991-.2463.55123l-7.8808 7.2309c-.1642.1729-.3694.2594-.6157.2594-.2462 0-.4515-.0864-.6156-.2594-.3753-.3459-.3753-.7133 0-1.1025l6.3663-5.86748H3.0657L9.43204 14.98c.37527.3459.37527.7134 0 1.1025-.16419.1729-.36355.2594-.5981.2594-.23455 0-.44564-.0865-.63328-.2594L.31986 8.78675c-.1642-.1297-.24628-.31344-.24628-.55123 0-.21617.08209-.39992.24627-.55124L8.20066.45338c.16419-.17294.36942-.25941.61569-.25941.24628 0 .4515.08647.61569.2594.37528.34588.37528.71337 0 1.10248L3.06818 7.42108z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default ArrowLeftRight;\n","import React, { FC, useContext, useEffect, useRef, useState } from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\n\nimport Section, { BgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport { getColors as color, spacings } from 'utils/styles';\nimport ArrowLeftRight from 'components/base/icons/ArrowLeftRight';\nimport Copy from 'components/typography/Copy';\nimport useIE from 'utils/useIE';\n\nconst clamp = (num: number, min: number, max: number) => {\n return Math.min(Math.max(num, min), max);\n};\n\nconst Images = styled.div`\n position: relative;\n cursor: col-resize;\n\n & > * {\n pointer-events: none;\n user-select: none;\n }\n`;\n\nconst BackgroundImg = styled(Image)`\n position: relative;\n display: block;\n width: 100%;\n`;\n\nconst ForegroundContainer = styled.div<{\n hasTransition?: boolean;\n initalValue?: number;\n hasAnim?: boolean;\n}>`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 50%;\n overflow: hidden;\n\n transition: width ${({ hasTransition }) => (hasTransition ? 0.1 : 0)}s\n ease-in-out;\n\n ${({ hasAnim, initalValue }) =>\n hasAnim &&\n css`\n animation-name: ForegroundAnim;\n animation-duration: 5s;\n animation-iteration-count: 1;\n animation-play-state: ${hasAnim && 'running'};\n animation-timing-function: ease-in-out;\n\n @keyframes ForegroundAnim {\n 0% {\n width: ${initalValue\n ? clamp(initalValue * 100, 0, 100) + '%'\n : '50%'};\n }\n 33% {\n width: ${initalValue\n ? clamp(initalValue * 100 + 10, 0, 100) + '%'\n : '60%'};\n }\n 66% {\n width: ${initalValue\n ? clamp(initalValue * 100 - 10, 0, 100) + '%'\n : '40%'};\n }\n 100% {\n width: ${initalValue ? initalValue * 100 + '%' : '50%'};\n }\n }\n `}\n`;\n\nconst ForegroundImg = styled(Image)`\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n max-width: none;\n object-fit: cover;\n`;\n\nconst ForegroundOverlay = styled.div<{ color: string }>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: ${({ color }) => color};\n`;\n\nconst ImageLabel = styled(Copy)<{ bgColor?: string }>`\n height: ${spacings.spacer * 1.5}px;\n padding: ${spacings.nudge}px ${spacings.spacer}px ${spacings.nudge * 2}px\n ${spacings.spacer}px;\n background: ${({ bgColor }) => bgColor && bgColor};\n`;\n\nconst ForegroundLabel = styled(ImageLabel)`\n position: absolute;\n bottom: ${spacings.spacer * 1.5}px;\n left: ${spacings.spacer}px;\n pointer-events: none;\n`;\n\nconst BackgroundLabel = styled(ImageLabel)`\n position: absolute;\n bottom: ${spacings.spacer * 1.5}px;\n right: ${spacings.spacer}px;\n pointer-events: none;\n`;\n\nconst ControlContainer = styled.div<{\n hasTransition?: boolean;\n hasAnim?: boolean;\n initalValue?: number;\n}>`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n transition: left ${({ hasTransition }) => (hasTransition ? 0.1 : 0)}s\n ease-in-out;\n\n ${({ hasAnim, initalValue }) =>\n hasAnim &&\n css`\n animation-name: ControlAnim;\n animation-duration: 5s;\n animation-iteration-count: 1;\n animation-play-state: ${hasAnim && 'running'};\n animation-timing-function: ease-in-out;\n\n @keyframes ControlAnim {\n 0% {\n left: ${initalValue\n ? clamp(initalValue * 100, 0, 100) + '%'\n : '50%'};\n }\n 33% {\n left: ${initalValue\n ? clamp(initalValue * 100 + 10, 0, 100) + '%'\n : '60%'};\n }\n 66% {\n left: ${initalValue\n ? clamp(initalValue * 100 - 10, 0, 100) + '%'\n : '40%'};\n }\n 100% {\n left: ${initalValue ? initalValue * 100 + '%' : '50%'};\n }\n }\n `}\n`;\n\nconst Control = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n height: 54px;\n width: 54px;\n border: solid 2px ${({ theme }) => color(theme).light};\n border-radius: 50%;\n background-color: ${({ theme }) => color(theme).primary.medium};\n`;\n\nconst ComparisonSlider: FC<{\n isInverted?: boolean;\n bgMode?: BgMode;\n initialValue?: number;\n foregroundImg?: ImageProps;\n backgroundImg?: ImageProps;\n foregroundLabel?: string;\n backgroundLabel?: string;\n overlayColor?: string;\n labelColor?: string;\n dragControl?: React.ReactNode;\n enableControlAnim?: boolean;\n}> = ({\n isInverted,\n bgMode,\n initialValue,\n foregroundImg,\n backgroundImg,\n foregroundLabel,\n backgroundLabel,\n overlayColor = 'rgba(0, 0 , 0, 0.2)',\n labelColor = 'rgba(0, 0 , 0, 0.3)',\n dragControl,\n enableControlAnim,\n}) => {\n const isIE = useIE(true);\n const [slideValue, setSlideValue] = useState<number>(\n initialValue ? Math.min(Math.max(initialValue, 0), 1) : 0.5\n );\n const [isHolding, setIsHolding] = useState<boolean>(false);\n const [isDragging, setIsDragging] = useState<boolean>(false);\n const [interacted, setInteracted] = useState<boolean>(true);\n const [sideOffset, setSideOffset] = useState<number>(0);\n const controlRef = useRef<HTMLDivElement | null>(null);\n const theme = useContext(ThemeContext);\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'half-right':\n return 'half-right';\n case 'half-left':\n return 'half-left';\n case 'larger-right':\n return 'larger-right';\n case 'larger-left':\n return 'larger-left';\n default:\n return undefined;\n }\n };\n\n useEffect(() => {\n if (controlRef.current) {\n setSideOffset(controlRef.current.offsetWidth / 2);\n }\n }, []);\n\n useEffect(() => {\n const handleInitalLoad = () => {\n const options = {\n rootMargin: '0px',\n threshold: 1.0,\n };\n\n const observer = new IntersectionObserver((entries, observer) => {\n if (enableControlAnim && entries[0]?.isIntersecting) {\n // if control is first fully visible\n observer.unobserve(entries[0]?.target);\n setInteracted(false);\n }\n }, options);\n if (controlRef.current) observer.observe(controlRef.current);\n window.removeEventListener('load', handleInitalLoad);\n };\n\n // wait unitl user has scrolled once\n if (!isIE) {\n if (document.readyState === 'complete') handleInitalLoad();\n else window.addEventListener('load', handleInitalLoad);\n }\n\n return () => {\n window.removeEventListener('load', handleInitalLoad);\n };\n }, [enableControlAnim, isIE]);\n\n const setCurrentPos = (target: EventTarget & Element, clientX: number) => {\n if (target && clientX) {\n const relativeClientX = clientX - target.getBoundingClientRect().x;\n\n // check side offset\n if (\n relativeClientX >= sideOffset &&\n relativeClientX <=\n target.getBoundingClientRect().width - sideOffset\n ) {\n let percentage =\n relativeClientX / target.getBoundingClientRect().width;\n percentage = Math.min(Math.max(percentage, 0), 1);\n\n setSlideValue(percentage);\n }\n }\n };\n\n const handleClick = (ev: React.MouseEvent) => {\n const target = ev.currentTarget;\n if (target && ev.clientX) {\n setCurrentPos(target, ev.clientX);\n setInteracted(true);\n }\n };\n\n const handleMouseMove = (ev: React.MouseEvent) => {\n const target = ev.currentTarget;\n if (target && ev.clientX && isHolding) {\n setIsDragging(true);\n setInteracted(true);\n if (isDragging) setCurrentPos(target, ev.clientX);\n }\n };\n\n const handleTouchMove = (ev: React.TouchEvent<HTMLDivElement>) => {\n const target = ev.currentTarget;\n if (target && ev.touches[0]?.clientX) {\n setInteracted(true);\n setCurrentPos(target, ev.touches[0]?.clientX);\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <Wrapper>\n {backgroundImg && foregroundImg && (\n <Images\n onClick={handleClick}\n onMouseMove={handleMouseMove}\n onMouseDown={() => {\n setIsDragging(false);\n setIsHolding(true);\n }}\n onMouseUp={() => {\n setIsDragging(false);\n setIsHolding(false);\n }}\n onMouseLeave={() => {\n setIsHolding(false);\n setIsDragging(false);\n }}\n onTouchMove={handleTouchMove}\n onTouchStart={() => setIsHolding(true)}\n onTouchEnd={() => setIsHolding(false)}\n >\n <BackgroundImg {...backgroundImg} />\n {backgroundLabel && (\n <BackgroundLabel\n textColor={color(theme).light}\n bgColor={labelColor}\n >\n {backgroundLabel}\n </BackgroundLabel>\n )}\n <ForegroundContainer\n hasTransition={!isHolding}\n hasAnim={!interacted}\n initalValue={initialValue}\n style={{ width: slideValue * 100 + '%' }}\n >\n <ForegroundImg {...foregroundImg} />\n {foregroundLabel && (\n <ForegroundLabel\n textColor={color(theme).light}\n bgColor={labelColor}\n >\n {foregroundLabel}\n </ForegroundLabel>\n )}\n <ForegroundOverlay color={overlayColor} />\n </ForegroundContainer>\n <ControlContainer\n ref={controlRef}\n hasTransition={!isHolding}\n hasAnim={!interacted}\n initalValue={initialValue}\n style={{ left: slideValue * 100 + '%' }}\n >\n {dragControl ? (\n dragControl\n ) : (\n <Control>\n <ArrowLeftRight\n iconColor={color(theme).light}\n />\n </Control>\n )}\n </ControlContainer>\n </Images>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default ComparisonSlider;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { mq, spacings, getColors as color, withRange } from 'utils/styles';\nimport Wrapper from 'components/base/Wrapper';\nimport ArrowLeftGhost from 'components/base/icons/ArrowLeftGhost';\nimport ArrowRightGhost from 'components/base/icons/ArrowRightGhost';\nimport Slider from 'components/blocks/Slider';\nimport { ResponsiveObject } from 'react-slick';\nimport Intro from 'components/blocks/Intro';\nimport { HeadlineTag } from 'components/typography/Heading';\n\nconst View = styled(Wrapper)`\n position: relative;\n width: 100%;\n overflow: hidden;\n\n @media ${mq.xlarge} {\n padding: 0;\n }\n`;\n\nconst Head = styled(Wrapper)`\n display: flex;\n flex-direction: row;\n`;\n\nconst IntroBlock = styled.div`\n flex: 1;\n ${withRange([spacings.spacer * 2, spacings.spacer * 3], 'padding-bottom')}\n`;\n\nconst TopControls = styled.div`\n display: none;\n text-align: right;\n max-width: ${spacings.wrapper}px;\n margin-left: auto;\n ${withRange(\n [spacings.spacer * 0.5, spacings.spacer * 1.5],\n 'margin-bottom'\n )};\n\n @media ${mq.semilarge} {\n display: flex;\n flex-direction: row;\n align-self: flex-end;\n }\n`;\n\nconst StyledControl = styled(Slider.Control)<{ isInverted?: boolean }>`\n border: none;\n outline: none;\n background: none;\n padding: 0 ${spacings.nudge * 3}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n transition: color 0.2s ease-in-out, transform 0.2s ease-in-out;\n\n &:enabled {\n cursor: pointer;\n }\n\n &:enabled:hover {\n transform: scale(1.05);\n }\n\n &:enabled:active {\n transform: scale(0.95);\n }\n\n &:disabled {\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).mono.dark : color(theme).mono.medium};\n }\n`;\n\nconst StyledSlides = styled(Slider.Slides)`\n margin-bottom: ${spacings.spacer}px;\n\n @media ${mq.xlarge} {\n margin-left: auto;\n width: 100%;\n max-width: ${spacings.wrapperLarge -\n (spacings.wrapperLarge - spacings.wrapper) / 2}px;\n }\n`;\n\nconst Footer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n`;\n\nconst CtrlWrapper = styled.div`\n display: block;\n\n @media ${mq.semilarge} {\n display: none;\n }\n`;\n\nconst CtrlWrapperLeft = styled(CtrlWrapper)`\n flex: 1;\n text-align: left;\n`;\n\nconst CtrlWrapperRight = styled(CtrlWrapper)`\n flex: 1;\n text-align: right;\n`;\n\nconst StyledDotGroup = styled(Slider.DotGroup)`\n display: inline-block;\n align-self: center;\n padding: ${spacings.nudge * 2}px 0;\n`;\n\nconst DotWrapper = styled.button`\n border: none;\n outline: none;\n background: none;\n cursor: pointer;\n\n padding: ${spacings.nudge * 2}px;\n margin: -${spacings.nudge * 2}px;\n\n & + & {\n margin-left: ${spacings.nudge * 1.5}px;\n }\n`;\n\nconst Dot = styled.div<{ isActive?: boolean; isInverted?: boolean }>`\n height: 14px;\n width: 14px;\n border: solid 1px\n ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 14px;\n\n transition: background-color 0.2s ease-in-out;\n\n background-color: ${({ isActive, isInverted, theme }) =>\n isActive\n ? isInverted\n ? color(theme).light\n : color(theme).dark\n : 'transparent'};\n`;\n\nexport interface CarouselProps {\n title?: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n primaryAction?: (isInverted?: boolean) => React.ReactNode;\n secondaryAction?: (isInverted?: boolean) => React.ReactNode;\n\n spacing?: 'normal' | 'large';\n variableWidths?: boolean;\n isInverted?: boolean;\n controlNext?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n controlPrev?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n name?: string;\n }) => React.ReactNode;\n dot?: (props: {\n isInverted?: boolean;\n isActive?: boolean;\n index?: number;\n }) => React.ReactNode;\n beforeChange?: (props: { currentStep: number; nextStep: number }) => void;\n afterChange?: (currentStep: number) => void;\n onInit?: (steps: number) => void;\n responsive?: ResponsiveObject[];\n slidesToShow?: number;\n}\n\nconst CarouselBase: FC<CarouselProps & { className?: string }> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n spacing,\n variableWidths,\n isInverted,\n controlNext,\n controlPrev,\n dot,\n beforeChange,\n afterChange,\n onInit,\n slidesToShow,\n responsive,\n children,\n className,\n}) => {\n return (\n <View clampWidth=\"large\" className={className}>\n <Slider.Provider\n variableWidth={variableWidths}\n sameHeight={variableWidths}\n slideSpacing={\n spacing === 'large'\n ? { min: 30, max: 60 }\n : { min: 20, max: 30 }\n }\n slidesToShow={slidesToShow}\n responsive={responsive}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n >\n <Head clampWidth=\"normal\" addWhitespace>\n {title && (\n <IntroBlock>\n <Intro\n colorMode={isInverted ? 'inverted' : 'default'}\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n secondaryAction={secondaryAction}\n primaryAction={primaryAction}\n />\n </IntroBlock>\n )}\n {React.Children.count(children) > 1 && (\n <TopControls>\n <StyledControl type=\"prev\" isInverted={isInverted}>\n {(isActive) =>\n controlPrev ? (\n controlPrev({\n isInverted,\n isActive,\n name: 'control_prev_head',\n })\n ) : (\n <ArrowLeftGhost />\n )\n }\n </StyledControl>\n <StyledControl type=\"next\" isInverted={isInverted}>\n {(isActive) =>\n controlNext ? (\n controlNext({\n isInverted,\n isActive,\n name: 'control_next_head',\n })\n ) : (\n <ArrowRightGhost />\n )\n }\n </StyledControl>\n </TopControls>\n )}\n </Head>\n\n <StyledSlides>\n {React.Children.map(children, (child, i) => (\n <Slider.Slide key={i}>{child}</Slider.Slide>\n ))}\n </StyledSlides>\n {React.Children.count(children) > 1 && (\n <Footer>\n <CtrlWrapperLeft>\n <StyledControl type=\"prev\" isInverted={isInverted}>\n {(isActive) =>\n controlPrev ? (\n controlPrev({\n isInverted,\n isActive,\n name: 'control_prev_footer',\n })\n ) : (\n <ArrowLeftGhost />\n )\n }\n </StyledControl>\n </CtrlWrapperLeft>\n <StyledDotGroup>\n {(i, isActive, onClick) => (\n <DotWrapper key={i} onClick={onClick}>\n {dot ? (\n dot({ isInverted, isActive, index: i })\n ) : (\n <Dot\n isActive={isActive}\n isInverted={isInverted}\n />\n )}\n </DotWrapper>\n )}\n </StyledDotGroup>\n <CtrlWrapperRight>\n <StyledControl type=\"next\" isInverted={isInverted}>\n {(isActive) =>\n controlNext ? (\n controlNext({\n isInverted,\n isActive,\n name: 'control_next_footer',\n })\n ) : (\n <ArrowRightGhost />\n )\n }\n </StyledControl>\n </CtrlWrapperRight>\n </Footer>\n )}\n </Slider.Provider>\n </View>\n );\n};\n\nexport default CarouselBase;\n","import React, { FC } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color } from 'utils/styles';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport Section, { BgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\n\nconst ImageCarousel: FC<\n Omit<CarouselProps, 'variableWidths'> & {\n bgMode?: 'full' | 'splitted';\n images?: ImageProps[];\n }\n> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n bgMode,\n spacing = 'normal',\n images,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const imageCount = images?.length || 0;\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'splitted':\n return 'half-right';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <CarouselBase\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n variableWidths\n spacing={spacing}\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={imageCount > 1 ? 2.75 : 1}\n responsive={[\n {\n breakpoint: 832,\n settings: {\n slidesToShow: imageCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: imageCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {images &&\n images.map((img, i) => <FullWidthImg key={i} {...img} />)}\n </CarouselBase>\n </Section>\n );\n};\n\nconst FullWidthImg = styled(Image)`\n width: 100%;\n`;\n\nexport default ImageCarousel;\n","import React, { FC } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings, mq } from 'utils/styles';\nimport Section, { BgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\nimport Feature, { FeatureProps } from 'components/blocks/Feature';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\n\nconst StyledWrapper = styled.div`\n padding-left: ${spacings.nudge * 2}px;\n\n @media ${mq.medium} {\n padding-left: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n padding-left: ${(1 / 28) * 100}%;\n\n padding-left: ${`\n max(\n ${spacings.spacer}px,\n ${(1 / 28) * 100}%\n );\n `};\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst FeatureCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'spacing'> & {\n bgMode?: 'full' | 'splitted';\n features?: FeatureProps[];\n }\n> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n bgMode,\n features,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const featureCount = features?.length || 0;\n const { sheetRefs: cardRefs } = useEqualSheetHeight({\n listLength: featureCount,\n identifiers: [\n '[data-sheet=\"title\"]',\n '[data-sheet=\"desc\"]',\n '[data-sheet=\"intro\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: featureCount,\n medium: featureCount,\n semilarge: featureCount,\n large: featureCount,\n xlarge: featureCount,\n },\n });\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'splitted':\n return 'half-right';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <StyledWrapper>\n <CarouselBase\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n spacing=\"normal\"\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={featureCount > 1 ? 3 : 1}\n responsive={[\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: featureCount > 1 ? 3 : 1,\n },\n },\n {\n breakpoint: 832,\n settings: {\n slidesToShow: featureCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: featureCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {features &&\n features.map((feature, i) => (\n <div key={i} ref={cardRefs[i]}>\n <Feature\n key={i}\n addWhitespace\n isInverted={isInverted}\n {...feature}\n />\n </div>\n ))}\n </CarouselBase>\n </StyledWrapper>\n </Section>\n );\n};\n\nexport default FeatureCarousel;\n","import React, { FC } from 'react';\nimport { ThemeContext } from 'styled-components';\n\nimport { getColors as color } from 'utils/styles';\nimport Section, { BgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\nimport PromotionCard, {\n PromotionCardProps,\n} from 'components/blocks/PromotionCard';\n\nexport type PromotionCarouselItem = Omit<\n PromotionCardProps,\n 'text' | 'superTitle' | 'text' | 'primaryAction' | 'secondaryAction'\n>;\n\nconst PromotionCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'spacing'> & {\n bgMode?: BgMode;\n promotions?: PromotionCarouselItem[];\n }\n> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n bgMode,\n promotions,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const promotionCount = promotions?.length || 0;\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'half-right':\n return 'half-right';\n case 'half-left':\n return 'half-left';\n case 'larger-right':\n return 'larger-right';\n case 'larger-left':\n return 'larger-left';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <CarouselBase\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n spacing=\"normal\"\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={promotionCount > 1 ? 2.75 : 1}\n responsive={[\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: promotionCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 832,\n settings: {\n slidesToShow: promotionCount > 1 ? 1.15 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: promotionCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {promotions &&\n promotions.map((promotion, i) => (\n <PromotionCard key={i} {...promotion} />\n ))}\n </CarouselBase>\n </Section>\n );\n};\n\nexport default PromotionCarousel;\n","import React, { FC } from 'react';\nimport { ThemeContext } from 'styled-components';\n\nimport { getColors as color } from 'utils/styles';\nimport Section, { BgMode } from 'components/base/Section';\nimport CarouselBase, { CarouselProps } from './CarouselBase';\nimport VideoCard, { VideoCardProps } from 'components/blocks/VideoCard';\n\nconst VideoCarousel: FC<\n Omit<CarouselProps, 'variableWidths' | 'spacing'> & {\n bgMode?: 'full' | 'splitted';\n videos?: VideoCardProps[];\n }\n> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n primaryAction,\n secondaryAction,\n isInverted = false,\n bgMode,\n videos,\n controlNext,\n controlPrev,\n beforeChange,\n afterChange,\n onInit,\n dot,\n}) => {\n const theme = React.useContext(ThemeContext);\n const videoCount = videos?.length || 0;\n\n const getSectionBgMode = (): BgMode | undefined => {\n switch (bgMode) {\n case 'full':\n return 'full';\n case 'splitted':\n return 'half-right';\n default:\n return undefined;\n }\n };\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : bgMode\n ? color(theme).mono.light\n : 'transparent'\n }\n bgMode={!isInverted ? getSectionBgMode() : undefined}\n >\n <CarouselBase\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n primaryAction={primaryAction}\n secondaryAction={secondaryAction}\n spacing=\"normal\"\n isInverted={isInverted}\n controlNext={controlNext}\n controlPrev={controlPrev}\n dot={dot}\n beforeChange={beforeChange}\n afterChange={afterChange}\n onInit={onInit}\n slidesToShow={videoCount > 1 ? 2.75 : 1}\n responsive={[\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: videoCount > 1 ? 2.25 : 1,\n },\n },\n {\n breakpoint: 832,\n settings: {\n slidesToShow: videoCount > 1 ? 1.15 : 1,\n },\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: videoCount > 1 ? 1.15 : 1,\n },\n },\n ]}\n >\n {videos &&\n videos.map((video, i) => <VideoCard key={i} {...video} />)}\n </CarouselBase>\n </Section>\n );\n};\n\nexport default VideoCarousel;\n","/* eslint-disable react/jsx-no-target-blank */\nimport React, { FC } from 'react';\n\nexport interface LinkProps {\n isExternal?: boolean;\n href?: string;\n}\n\nconst Link: FC<\n LinkProps & {\n className?: string;\n }\n> = ({ isExternal = false, href, children, className }) => {\n return (\n <a\n href={href}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n className={className}\n >\n {children}\n </a>\n );\n};\n\nexport default Link;\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport Link from 'components/typography/Link';\n\nconst bdotColor = '#1fc2f4';\n\nconst Dot = styled(Link)`\n width: 11px;\n height: 11px;\n\n display: inline-block;\n vertical-align: middle;\n border-radius: 50%;\n\n background: ${bdotColor};\n color: ${bdotColor};\n text-decoration: none;\n\n span {\n visibility: hidden;\n font-size: 0;\n color: transparent;\n }\n`;\n\nconst Bdot: React.FC<{ className?: string }> = ({ className }) => {\n return (\n <Dot className={className} href=\"https://blateral.com\" isExternal>\n <span>b.lateral - creative agency</span>\n </Dot>\n );\n};\n\nexport default Bdot;\n","import React, { FC } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { getColors as color, spacings } from 'utils/styles';\nimport Link from 'components/typography/Link';\n\nconst View = styled.div`\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n // padding: ${spacings.nudge * 2}px 0;\n // overflow: hidden;\n\n & > * + * {\n margin-left: ${spacings.nudge * 3}px;\n }\n`;\n\nconst IconItemView = styled.div`\n transition: all ease-in-out 0.2s;\n\n &:hover {\n transform: scale(1.1);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst StyledLink = styled(Link)<{ textColor?: string }>`\n display: block;\n padding: ${spacings.nudge * 2}px ${spacings.nudge * 1.5}px;\n margin: -${spacings.nudge * 2}px -${spacings.nudge * 1.5}px;\n color: ${({ theme, textColor }) => textColor || color(theme).dark};\n`;\n\nconst SocialList: FC<{\n isInverted?: boolean;\n items?: { href: string; icon: React.ReactNode }[];\n className?: string;\n}> = ({ isInverted = false, items, className }) => {\n const theme = React.useContext(ThemeContext);\n\n return (\n <View className={className}>\n {items &&\n items.map((item, i) => (\n <IconItemView key={i}>\n <StyledLink\n isExternal\n href={item.href}\n textColor={\n isInverted\n ? color(theme).light\n : color(theme).dark\n }\n >\n {item.icon}\n </StyledLink>\n </IconItemView>\n ))}\n </View>\n );\n};\n\nexport default SocialList;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\n} from 'utils/styles';\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport Copy from 'components/typography/Copy';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport Bdot from 'components/blocks/Bdot';\nimport SocialList from 'components/blocks/SocialList';\n\nconst MainView = styled(Wrapper)<{ isInverted?: boolean }>`\n background-color: ${({ theme, isInverted }) =>\n isInverted && color(theme).dark};\n`;\n\nconst StyledLink = styled(Link)`\n display: inline-block;\n padding: ${spacings.nudge * 0.5}px 0;\n color: inherit;\n text-decoration: underline;\n`;\n\n/**** MAIN FOOTER CONTENT ****/\nconst Content = styled.div<{ isInverted?: boolean }>`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n margin-left: -${spacings.spacer}px;\n margin-right: -${spacings.spacer}px;\n\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n\n & > * {\n flex: 1;\n }\n\n & > *:last-child {\n flex: 1 1 100%;\n }\n\n @media ${mq.medium} {\n flex-direction: row;\n flex-wrap: wrap;\n padding-top: ${spacings.spacer}px;\n padding-bottom: ${spacings.spacer}px;\n\n & > *:last-child {\n max-width: 600px;\n }\n }\n\n @media ${mq.large} {\n & > *:last-child {\n flex: 1;\n max-width: 100%;\n }\n }\n`;\n\nconst ContentBlock = styled.div<{\n direction?: 'row' | 'column';\n topSpace?: string;\n hAlign?: 'left' | 'center' | 'right';\n}>`\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n\n padding: ${spacings.spacer}px;\n\n & > * + * {\n margin-top: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n flex-direction: ${({ direction }) => direction || 'column'};\n align-items: flex-start;\n padding-top: ${({ topSpace }) => topSpace && topSpace};\n text-align: left;\n min-width: 330px;\n }\n\n @media ${mq.large} {\n align-items: ${({ hAlign }) =>\n hAlign === 'right'\n ? 'flex-end'\n : hAlign === 'center'\n ? 'center'\n : 'flex-start'};\n text-align: ${({ hAlign }) => hAlign && hAlign};\n }\n`;\n\nconst LogoLink = styled(Link)`\n display: inline-block;\n color: inherit;\n`;\n\nconst ContactData = styled(Copy)`\n text-align: center;\n\n p {\n margin: 0;\n padding: 0;\n }\n\n @media ${mq.medium} {\n text-align: left;\n margin-top: auto;\n padding: ${spacings.nudge * 2}px 0;\n }\n`;\n\nconst SiteLinksView = styled.div`\n flex: 50%;\n display: flex;\n flex-direction: column;\n text-align: center;\n\n margin: 0;\n\n & + & {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 2}px;\n }\n\n @media ${mq.medium} {\n padding: 0 ${spacings.nudge * 3}px;\n text-align: left;\n\n & + & {\n padding-top: 0;\n }\n\n & > * + * {\n margin-top: ${spacings.nudge * 3}px;\n }\n }\n`;\n\nconst SiteLink = styled(StyledLink)`\n font-weight: ${({ theme }) => font(theme)['copy-b'].medium.weight};\n font-family: ${({ theme }) => font(theme)['copy-b'].medium.family};\n ${({ theme }) => withRange(font(theme)['copy-b'].medium.size, 'font-size')}\n line-height: ${({ theme }) => font(theme)['copy-b'].medium.lineHeight};\n`;\n\nconst LinkWrapper = styled(Copy)<{ isActive?: boolean; isInverted?: boolean }>`\n display: inline-block;\n position: relative;\n padding-bottom: 3px;\n\n &:before {\n content: ${({ isActive }) => (isActive ? `\"\"` : undefined)};\n position: absolute;\n left: -12px;\n top: 50%;\n height: 4px;\n width: 4px;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n border-radius: 4px;\n\n transform: translateY(-100%);\n }\n\n &:after {\n content: '';\n position: absolute;\n left: 0;\n bottom: 0;\n right: 0;\n height: 1px;\n background-color: ${({ theme }) => color(theme).primary.medium};\n margin-top: ${spacings.nudge * 10}px;\n opacity: 0;\n\n transition: opacity 0.2s ease-in-out;\n\n ${SiteLink}:hover > & {\n opacity: 1;\n }\n }\n`;\n\n/**** BOTTOM FOOTER CONTENT ****/\nconst BottomWrapper = styled(Wrapper)`\n background-color: ${({ theme }) => color(theme).mono.light};\n`;\n\nconst BottomView = styled(Wrapper)`\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 100%;\n min-height: 41px;\n\n padding-top: ${spacings.nudge * 1.5}px;\n padding-bottom: ${spacings.nudge * 1.5}px;\n\n color: ${({ theme }) => color(theme).dark};\n\n & > * + * {\n margin-left: ${spacings.spacer}px;\n }\n\n @media ${mq.medium} {\n justify-content: flex-end;\n }\n`;\n\n/**** FOOTER SECTION ****/\nconst Footer: FC<{\n isInverted?: boolean;\n logo?: {\n img?: string;\n link?: string;\n };\n columnTopSpace?: string;\n contactData?: string;\n siteLinks?: Array<LinkProps & { label?: string; isActive?: boolean }>;\n newsTitle?: string;\n newsText?: string;\n newsForm?: (isInverted?: boolean) => React.ReactNode;\n socials?: Array<{ icon: React.ReactNode; href: string }>;\n bottomLinks?: { href: string; label?: string; isExternal?: boolean }[];\n brandIcon?: React.ReactNode;\n}> = ({\n isInverted = false,\n logo,\n columnTopSpace,\n contactData,\n siteLinks,\n newsTitle,\n newsText,\n newsForm,\n socials,\n bottomLinks,\n brandIcon,\n}) => {\n // setup siteLinks columns\n const siteLinksColLeft =\n siteLinks && siteLinks.length > 6\n ? siteLinks?.slice(0, Math.ceil(siteLinks.length / 2))\n : siteLinks;\n const siteLinksColRight =\n siteLinks && siteLinks.length > 6\n ? siteLinks?.slice(Math.ceil(siteLinks.length / 2))\n : undefined;\n\n return (\n <Section as=\"footer\" bgMode=\"full\" bgColor=\"transparent\">\n <MainView clampWidth=\"large\" isInverted={isInverted}>\n <Wrapper addWhitespace>\n <Content isInverted={isInverted}>\n <ContentBlock>\n {logo?.img && (\n <LogoLink href={logo?.link}>\n <img src={logo?.img} />\n </LogoLink>\n )}\n {contactData && (\n <ContactData\n size=\"small\"\n isInverted={isInverted}\n innerHTML={contactData}\n />\n )}\n </ContentBlock>\n <ContentBlock\n direction=\"row\"\n topSpace={logo && columnTopSpace}\n >\n {siteLinksColLeft && (\n <SiteLinksView>\n {siteLinksColLeft.map((link, i) => (\n <SiteLink key={i} href={link.href}>\n <LinkWrapper\n type=\"copy\"\n isActive={link.isActive}\n isInverted={isInverted}\n >\n {link.label || link.href}\n </LinkWrapper>\n </SiteLink>\n ))}\n </SiteLinksView>\n )}\n {siteLinksColRight && (\n <SiteLinksView>\n {siteLinksColRight.map((link, i) => (\n <SiteLink key={i} href={link.href}>\n <LinkWrapper\n type=\"copy\"\n isActive={link.isActive}\n isInverted={isInverted}\n >\n {link.label || link.href}\n </LinkWrapper>\n </SiteLink>\n ))}\n </SiteLinksView>\n )}\n </ContentBlock>\n <ContentBlock\n topSpace={logo && columnTopSpace}\n hAlign={\n !newsTitle && !newsText && !newsForm\n ? 'right'\n : 'left'\n }\n >\n {newsTitle && (\n <Copy type=\"copy-b\" isInverted={isInverted}>\n {newsTitle}\n </Copy>\n )}\n {newsText && (\n <Copy\n size=\"small\"\n isInverted={isInverted}\n innerHTML={newsText}\n />\n )}\n {newsForm && newsForm(isInverted)}\n {socials && (\n <SocialList\n isInverted={isInverted}\n items={socials.map((item) => {\n return {\n href: item.href,\n icon: item.icon,\n };\n })}\n />\n )}\n </ContentBlock>\n </Content>\n </Wrapper>\n </MainView>\n\n {bottomLinks && (\n <BottomWrapper clampWidth=\"large\">\n <BottomView addWhitespace>\n {bottomLinks.map((link, i) => {\n if (link.href) {\n return (\n <StyledLink\n key={i}\n isExternal={link.isExternal}\n href={link.href}\n >\n <Copy size=\"small\">\n {link.label || link.href}\n </Copy>\n </StyledLink>\n );\n } else return null;\n })}\n {brandIcon ? brandIcon : <Bdot />}\n </BottomView>\n </BottomWrapper>\n )}\n </Section>\n );\n};\n\nexport default Footer;\n","export const getBgImage = (\n bgImage: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n },\n mq?: 'small' | 'medium' | 'semilarge' | 'large' | 'xlarge'\n): string => {\n switch (mq) {\n default:\n case 'small':\n return bgImage.small;\n\n case 'medium':\n return (\n bgImage.medium ||\n bgImage.semilarge ||\n bgImage.large ||\n bgImage.xlarge ||\n bgImage.small\n );\n\n case 'semilarge':\n return (\n bgImage.semilarge ||\n bgImage.large ||\n bgImage.xlarge ||\n bgImage.medium ||\n bgImage.small\n );\n\n case 'large':\n return (\n bgImage.large ||\n bgImage.xlarge ||\n bgImage.semilarge ||\n bgImage.medium ||\n bgImage.small\n );\n\n case 'xlarge':\n return (\n bgImage.xlarge ||\n bgImage.large ||\n bgImage.semilarge ||\n bgImage.medium ||\n bgImage.small\n );\n }\n};\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { getBgImage } from 'utils/backgroundImage';\nimport { canUseWebP } from 'utils/usePoster';\nimport { FC, useEffect, useRef, useState } from 'react';\n\nexport interface HeaderKenBurnsImageProps {\n small: string;\n medium: string;\n large: string;\n xlarge: string;\n webp?: {\n small: string;\n medium: string;\n large: string;\n xlarge: string;\n };\n}\n\nconst AnimationContainer = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n overflow: hidden;\n`;\n\nconst PosterImage = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n`;\n\nconst AnimationImage = styled.div<{ scale?: number; opacity?: number }>`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n transition-property: opacity, transform;\n transition-duration: ${({ scale }) => `2s, ${scale === 1 ? '0s' : '13s'}`};\n transition-delay: ${({ scale }) =>\n `${scale === 1 ? '1s' : '0s'}, ${scale === 1 ? '3s' : '0s'}`};\n\n opacity: ${({ opacity }) => opacity && opacity};\n transform: scale(${({ scale }) => scale || 1})\n rotate(${({ scale }) => (scale !== 1 ? 0.04 : 0)}deg);\n\n will-change: transform, opacity;\n`;\n\nconst AnimationImages: FC<{\n zoom?: number;\n images: { id: number | string; image: string }[];\n}> = ({ zoom = 1.08, images }) => {\n const intervalRef = useRef<number | null>();\n const [activeImg, setActiveImg] = useState<number>(-1);\n\n useEffect(() => {\n const changeImage = () => {\n setActiveImg((prev) => {\n return (prev + 1) % images.length;\n });\n };\n\n // changeImage();\n window.setTimeout(changeImage, 200);\n if (intervalRef.current) window.clearInterval(intervalRef.current);\n intervalRef.current = window.setInterval(changeImage, 10000);\n\n return () => {\n if (intervalRef.current) window.clearInterval(intervalRef.current);\n };\n }, [images]);\n\n return (\n <>\n {images.map((img, i) => (\n <AnimationImage\n key={i}\n style={{\n backgroundImage: `url(${img.image})`,\n zIndex: i === activeImg ? 1 : 0,\n }}\n scale={i === activeImg ? zoom : 1}\n opacity={i === activeImg ? 1 : 0}\n />\n ))}\n </>\n );\n};\n\nconst preloadImages = (imageUrls: string[]) => {\n const images = imageUrls.map((src, i) => {\n return new Promise((res) => {\n const img = new Image();\n img.src = src;\n img.onload = () => res({ url: src, i });\n });\n });\n\n return images;\n};\n\ntype KenBurnsMq = 'small' | 'medium' | 'large' | 'xlarge';\n\nconst HeaderKenBurns: React.FC<{\n images: HeaderKenBurnsImageProps[];\n className?: string;\n}> = ({ images, className, children }) => {\n const mqs: KenBurnsMq[] = ['small', 'medium', 'large', 'xlarge'];\n const currentMq = useMediaQuery(mqs) as KenBurnsMq | undefined;\n\n const [loadedImages, setLoadedImages] = React.useState<{\n [key: string]: { id: number | string; image: string }[];\n }>({\n small: [],\n medium: [],\n large: [],\n xlarge: [],\n });\n\n React.useEffect(() => {\n if (currentMq) {\n const loadedForMq = loadedImages[currentMq];\n const useWebp = canUseWebP();\n\n if (loadedForMq.length < images.length && images.length >= 2) {\n const requestedImages = images.map((img) =>\n img.webp && useWebp ? img.webp[currentMq] : img[currentMq]\n );\n\n const resolve = async (items: any) => {\n for (const item of items) {\n const x = await item;\n\n setLoadedImages((prev) => {\n // check if image id already exists in array\n if (!prev[currentMq].find((e) => e.id === x.i)) {\n return {\n ...prev,\n [currentMq]: [\n ...prev[currentMq],\n {\n id: x.i,\n image: x.url,\n },\n ],\n };\n } else return prev;\n });\n }\n };\n\n resolve(preloadImages(requestedImages));\n }\n }\n }, [currentMq, images, loadedImages]);\n\n return (\n <AnimationContainer className={className}>\n {currentMq && loadedImages[currentMq].length >= images.length ? (\n <AnimationImages images={loadedImages[currentMq]} />\n ) : (\n <PosterImage\n style={{\n backgroundImage: `url(${getBgImage(\n images[0],\n currentMq\n )})`,\n }}\n />\n )}\n {children}\n </AnimationContainer>\n );\n};\n\nexport default HeaderKenBurns;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { usePoster } from 'utils/usePoster';\n\ninterface HeaderPosterImageProps {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n webp?: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n };\n}\n\nconst PosterView = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n min-height: 200px;\n display: block;\n flex: 1 0 0px;\n }\n`;\n\nconst HeaderPoster: React.FC<{\n bgImage: HeaderPosterImageProps;\n className?: string;\n}> = ({ bgImage, className, children }) => {\n const currentImage = usePoster(bgImage);\n return (\n <PosterView\n style={\n currentImage ? { backgroundImage: `url(${currentImage})` } : {}\n }\n className={className}\n >\n {children}\n </PosterView>\n );\n};\n\nexport default HeaderPoster;\n","import * as React from 'react';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n FontOptionType,\n getFonts as font,\n mq,\n styleTextColor,\n withRange,\n} from 'utils/styles';\n\n// Styles\nconst BaseStyles = styled.h1<{\n size: FontOptionType;\n hyphens?: boolean;\n hasShadow?: boolean;\n textColor?: string;\n textGradient?: string;\n}>`\n margin: 0;\n padding: 0;\n ${({ textColor, textGradient }) => styleTextColor(textColor, textGradient)}\n\n hyphens: auto;\n /* -webkit-hyphens: auto; */\n /* overflow-wrap: break-word; */\n\n ${(props: { hyphens?: boolean }) =>\n !props.hyphens &&\n css`\n @media ${mq.large} {\n hyphens: none;\n }\n `}\n\n text-shadow: ${({ hasShadow }) =>\n hasShadow && '1px 2px 8px rgba(0, 0, 0, 0.25)'};\n`;\n\nconst View = styled(BaseStyles)`\n font-family: ${({ theme, size }) => font(theme).callout[size].family};\n font-weight: ${({ theme, size }) => font(theme).callout[size].weight};\n font-style: ${({ theme, size }) => font(theme).callout[size].style};\n ${({ theme, size }) =>\n withRange(font(theme).callout[size].size, 'font-size')}\n line-height: ${({ theme, size }) => font(theme).callout[size].lineHeight};\n letter-spacing: ${({ theme, size }) =>\n font(theme).callout[size].letterSpacing};\n text-transform: ${({ theme, size }) =>\n font(theme).callout[size].textTransform};\n`;\n\nexport type CalloutTag =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'span'\n | 'div';\n\nconst Callout: React.FC<{\n isInverted?: boolean;\n as?: CalloutTag;\n size?: FontOptionType;\n textColor?: string;\n textGradient?: string;\n hyphens?: boolean;\n hasShadow?: boolean;\n innerHTML?: string;\n\n className?: string;\n}> = ({\n isInverted,\n as = 'h2',\n className,\n size = 'medium',\n textColor,\n textGradient,\n hyphens = false,\n hasShadow = false,\n innerHTML,\n children,\n}) => {\n const theme = React.useContext(ThemeContext);\n const fontSettings = font(theme)?.callout?.[size];\n\n return (\n <View\n as={as}\n size={size}\n textColor={\n textColor ||\n (isInverted ? fontSettings.colorInverted : fontSettings.color)\n }\n textGradient={\n textGradient ||\n (!textColor\n ? isInverted\n ? fontSettings.colorGradientInverted\n : fontSettings.colorGradient\n : undefined)\n }\n hyphens={hyphens}\n hasShadow={hasShadow}\n dangerouslySetInnerHTML={\n innerHTML && !children ? { __html: innerHTML } : undefined\n }\n className={className}\n >\n {children}\n </View>\n );\n};\n\nexport default Callout;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport { useState, useEffect } from 'react';\nimport Image from 'components/blocks/Image';\nimport { useMediaQuery } from 'utils/useMediaQuery';\n\ninterface HeaderVideoImageProps {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n webp?: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n };\n}\n\nconst PosterView = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n\n /* required to align items at flex-end in ie11 */\n &:before {\n content: '';\n min-height: 200px;\n display: block;\n flex: 1 0 0px;\n }\n`;\n\nconst PlaceholderImg = styled(Image)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n z-index: 0;\n`;\n\nconst AutoplayVideo = styled.video<{ isVisible?: boolean }>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n object-position: center;\n opacity: ${({ isVisible }) => (isVisible ? 1 : 0)};\n pointer-events: none;\n z-index: 1;\n\n transition: opacity 0.3s ease-in-out;\n`;\n\ntype HeaderVideoMq = 'small' | 'medium' | 'semilarge' | 'large' | 'xlarge';\n\nconst HeaderVideo: React.FC<{\n placeholderImg?: HeaderVideoImageProps;\n videoUrl?: string;\n className?: string;\n}> = ({ placeholderImg, videoUrl, className, children }) => {\n const [isLoaded, setLoaded] = useState<boolean>(false);\n const currentMq = useMediaQuery([\n 'small',\n 'medium',\n 'semilarge',\n 'large',\n 'xlarge',\n ]) as HeaderVideoMq | undefined;\n\n const isMobile = currentMq === undefined || currentMq === 'small';\n\n useEffect(() => {\n if (isMobile) setLoaded(false);\n }, [isMobile]);\n\n return (\n <PosterView className={className}>\n {placeholderImg?.small && !isLoaded && (\n <PlaceholderImg coverSpace {...placeholderImg} />\n )}\n {videoUrl && !isMobile && (\n <AutoplayVideo\n isVisible={isLoaded}\n src={videoUrl}\n muted\n autoPlay\n loop\n onCanPlayThrough={() => setLoaded(true)}\n />\n )}\n {children}\n </PosterView>\n );\n};\n\nexport default HeaderVideo;\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport { CalloutTag } from 'components/typography/Callout';\nimport {\n mq,\n spacings,\n withRange,\n getGlobalSettings as global,\n} from 'utils/styles';\nimport Grid from 'components/base/Grid';\nimport Wrapper from 'components/base/Wrapper';\nimport HeaderKenBurns, { HeaderKenBurnsImageProps } from './HeaderKenBurns';\nimport HeaderPoster from './HeaderPoster';\nimport Actions from 'components/blocks/Actions';\nimport Callout from 'components/typography/Callout';\nimport HeaderVideo from './HeaderVideo';\n\ninterface HeaderImageProps {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n webp?: {\n small: string;\n medium?: string;\n semilarge?: string;\n large?: string;\n xlarge?: string;\n };\n}\n\nconst View = styled.header`\n position: relative;\n`;\n\nconst HeaderWrapper = styled(Wrapper)`\n display: flex;\n flex-direction: column;\n height: 100%;\n`;\n\nconst PosterContent = styled.div`\n position: relative;\n display: none;\n width: 100%;\n margin: auto;\n z-index: 3;\n text-align: center;\n padding: 0 ${spacings.spacer}px;\n\n @media ${mq.semilarge} {\n display: block;\n max-width: none;\n margin-left: 0;\n text-align: left;\n padding-left: ${(1 / 28) * 100}%;\n }\n\n @media ${mq.xlarge} {\n padding-left: ${(1 / 28) * spacings.wrapper}px;\n }\n`;\n\nconst PosterContentMobile = styled(PosterContent)`\n display: block;\n padding-top: ${spacings.spacer * 2}px;\n ${withRange([spacings.spacer * 2, spacings.spacer * 4], 'padding-bottom')}\n\n @media ${mq.semilarge} {\n display: none;\n }\n`;\n\nconst Badge = styled.div<{ showOnMobile?: boolean }>`\n display: ${({ showOnMobile }) => (showOnMobile ? 'block' : 'none')};\n position: relative;\n height: 234px;\n width: 234px;\n margin-left: auto;\n margin-right: ${spacings.spacer}px;\n margin-top: -173px;\n z-index: 3;\n\n @media ${mq.semilarge} {\n display: block;\n margin-right: ${spacings.spacer * 4}px;\n }\n\n @media ${mq.xlarge} {\n width: 392px;\n height: 392px;\n margin-left: 0;\n margin-top: -300px;\n\n right: -50%;\n transform: translate(\n ${spacings.wrapper / 2 - (392 + spacings.spacer * 3)}px\n );\n }\n`;\n\nconst Poster: FC<{\n videoUrl?: string;\n images?: HeaderImageProps[];\n className?: string;\n}> = ({ videoUrl, images, className, children }) => {\n if (!videoUrl) {\n if (!images || images.length === 0) return <div>{children}</div>;\n else if (images.length === 1)\n return (\n <HeaderPoster bgImage={images[0]} className={className}>\n {children}\n </HeaderPoster>\n );\n else\n return (\n <HeaderKenBurns\n images={images.map((img) => {\n return {\n ...img,\n } as HeaderKenBurnsImageProps;\n })}\n className={className}\n >\n {children}\n </HeaderKenBurns>\n );\n } else {\n return (\n <HeaderVideo\n videoUrl={videoUrl}\n placeholderImg={images?.[0]}\n className={className}\n >\n {children}\n </HeaderVideo>\n );\n }\n};\n\nconst StyledPoster = styled(Poster)<{ gradient?: string; size?: number }>`\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-end;\n height: ${({ size }) => (size ? size * 100 + 'vh' : '100vh')};\n max-height: 1100px;\n\n ${withRange([spacings.spacer * 7, spacings.spacer * 8], 'padding-top')};\n ${withRange(\n [spacings.spacer * 2, spacings.spacer * 4.5],\n 'padding-bottom'\n )};\n\n &: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 bgImage,\n embedId,\n playIcon,\n primaryAction,\n secondaryAction,\n isInverted = false,\n hasBack = false,\n}) => {\n const theme = useContext(ThemeContext);\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? color(theme).dark\n : hasBack\n ? color(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper addWhitespace clampWidth=\"small\">\n <div>\n {embedId && bgImage && (\n <VideoCard\n bgImage={bgImage}\n embedId={embedId}\n playIcon={playIcon}\n />\n )}\n </div>\n {(primaryAction || secondaryAction) && (\n <StyledActions\n primary={primaryAction && primaryAction(isInverted)}\n secondary={\n secondaryAction && secondaryAction(isInverted)\n }\n />\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsVideo;\n","import React, { useContext, useEffect, useRef, useState } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport Section from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\n\nimport NewsCard, { NewsCardProps } from 'components/blocks/NewsCard';\nimport { getColors, mq, spacings, withRange } from 'utils/styles';\nimport { HeadlineTag } from 'components/typography/Heading';\nimport Intro from 'components/blocks/Intro';\nimport Tag from 'components/blocks/Tag';\nimport { useMediaQuery } from 'utils/useMediaQuery';\nimport { useEqualSheetHeight } from 'utils/useEqualSheetHeight';\nimport { useObserverSupport } from 'utils/useObserverSupport';\nimport Copy from 'components/typography/Copy';\nimport { useScrollTo } from 'utils/useScrollTo';\nimport Pointer from 'components/buttons/Pointer';\n\nconst StyledIntro = styled(Intro)`\n ${withRange([spacings.spacer * 1.5, spacings.spacer * 3], 'margin-bottom')};\n`;\n\nconst TagContainer = styled.div`\n margin: -${spacings.nudge}px;\n ${withRange([spacings.spacer * 1.5, spacings.spacer * 3], 'margin-bottom')};\n\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n`;\n\nconst TagWrapper = styled.div`\n padding: ${spacings.nudge}px;\n`;\n\nconst List = styled.div`\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n & > * + * {\n padding-top: ${spacings.spacer * 2}px;\n }\n\n @media ${mq.semilarge} {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: 'flex-start';\n align-items: flex-start;\n\n margin-left: -20px;\n margin-top: -40px;\n\n & > * {\n padding-left: 20px;\n padding-top: 40px;\n flex: 1 0 50%;\n max-width: 50%;\n }\n }\n\n @media ${mq.large} {\n & > * {\n flex: 1 0 33.33%;\n max-width: 33.33%;\n }\n }\n`;\n\nconst ListFooter = styled.div`\n ${withRange([spacings.spacer, spacings.spacer * 2], 'margin-top')};\n text-align: center;\n\n @media ${mq.medium} {\n text-align: left;\n }\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 2 ? 'block' : 'none'};\n`;\n\ntype NewsOverviewMq = 'small' | 'semilarge' | 'large';\n\nconst NewsOverview: React.FC<{\n title: string;\n titleAs?: HeadlineTag;\n superTitle?: string;\n superTitleAs?: HeadlineTag;\n text?: string;\n\n news: NewsCardProps[];\n activeTag?: string;\n tags?: string[];\n queryParams?: Record<string, any>;\n onTagClick?: (tag: string, insideList?: boolean) => void;\n showMoreText?: string;\n\n isInverted?: boolean;\n hasBack?: boolean;\n}> = ({\n title,\n titleAs,\n superTitle,\n superTitleAs,\n text,\n\n news,\n activeTag,\n tags,\n queryParams,\n onTagClick,\n showMoreText,\n\n isInverted,\n hasBack,\n}) => {\n const theme = useContext(ThemeContext);\n\n activeTag = queryParams?.selected\n ? decodeURI(queryParams.selected)\n : activeTag;\n const [selectedTag, setSelectedTag] = useState<string | undefined>(\n activeTag || undefined\n );\n\n const mqs: NewsOverviewMq[] = ['small', 'semilarge', 'large'];\n const currentMq = useMediaQuery(mqs) as NewsOverviewMq | undefined;\n const [itemsPerRow, setItemsPerRow] = useState(3);\n const [visibleRows, setVisibleRows] = useState(3);\n\n const targetRef = useRef<HTMLDivElement>(null);\n const observerSupported = useObserverSupport();\n\n const newsCount = news?.length || 0;\n\n const setNewPos = useScrollTo(800);\n const { sheetRefs: cardRefs, triggerCalculation } = useEqualSheetHeight({\n listLength: Math.min(visibleRows * itemsPerRow, newsCount),\n identifiers: [\n '[data-sheet=\"head\"]',\n '[data-sheet=\"title\"]',\n '[data-sheet=\"text\"]',\n ],\n responsive: {\n small: 1,\n medium: 1,\n semilarge: 2,\n large: 3,\n xlarge: 3,\n },\n });\n\n useEffect(() => {\n switch (currentMq) {\n case 'large':\n setItemsPerRow(3);\n break;\n\n case 'semilarge':\n setItemsPerRow(2);\n break;\n\n case 'small':\n setItemsPerRow(1);\n if (visibleRows < 3) setVisibleRows(3);\n break;\n\n default:\n setItemsPerRow(1);\n }\n }, [currentMq, visibleRows]);\n\n useEffect(() => {\n setSelectedTag(activeTag);\n }, [activeTag]);\n\n useEffect(() => {\n // if new tag is selected reset list rows to three visible item rows\n setVisibleRows(3);\n triggerCalculation();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedTag]);\n\n useEffect(() => {\n // cancel if intersection observers are not supported\n if (!observerSupported) return;\n\n const element = targetRef.current;\n let observer: IntersectionObserver;\n\n if (element) {\n const options = {\n rootMargin: '0px 0px 100px 0px',\n threshold: 0,\n };\n\n observer = new IntersectionObserver((entries) => {\n const entry = entries[0];\n if (entry?.isIntersecting) {\n // on bottom of the wrapper load more news\n if (visibleRows < Math.ceil(newsCount / itemsPerRow)) {\n setVisibleRows((prev) => prev + 1);\n }\n }\n }, options);\n observer.observe(element);\n }\n\n return () => {\n if (observer) observer.disconnect();\n };\n }, [itemsPerRow, newsCount, visibleRows, observerSupported]);\n\n return (\n <Section\n addSeperation\n bgColor={\n isInverted\n ? getColors(theme).dark\n : hasBack\n ? getColors(theme).mono.light\n : 'transparent'\n }\n >\n <Wrapper addWhitespace>\n {title && (\n <StyledIntro\n title={title}\n titleAs={titleAs}\n superTitle={superTitle}\n superTitleAs={superTitleAs}\n text={text}\n colorMode={isInverted ? 'inverted' : 'default'}\n />\n )}\n {tags && (\n <TagContainer>\n {tags.sort().map((tag, i) => {\n return (\n <TagWrapper key={'tag_' + i}>\n <Tag\n isInverted={isInverted}\n onClick={() => {\n if (!onTagClick) {\n // if no callback is defined handle filtering on client side inside the component\n setSelectedTag(\n selectedTag === tag\n ? undefined\n : tag\n );\n } else onTagClick(tag, false);\n }}\n isActive={selectedTag === tag}\n >\n {tag}\n </Tag>\n </TagWrapper>\n );\n })}\n </TagContainer>\n )}\n <List>\n {news &&\n news\n .filter((item) =>\n selectedTag ? item.tag === selectedTag : true\n )\n .filter((_, i) => i < visibleRows * itemsPerRow)\n .map((item, i) => {\n return (\n <div key={i} ref={cardRefs[i]}>\n <NewsCard\n isInverted={isInverted}\n onTagClick={(name) => {\n // scroll back to top\n setNewPos(0);\n if (!onTagClick) {\n // if no callback is defined handle filtering on client side inside the component\n setSelectedTag(\n selectedTag === name\n ? undefined\n : name\n );\n } else {\n onTagClick(name, true);\n }\n }}\n {...item}\n />\n </div>\n );\n })}\n </List>\n <div ref={targetRef} />\n {!observerSupported && (\n <ListFooter>\n {news && news.length > 0 && (\n <Copy\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n >\n <ShowMore\n itemCount={news.length}\n onClick={(ev) => {\n ev.preventDefault();\n if (\n visibleRows <\n Math.ceil(newsCount / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows < newsCount / itemsPerRow && (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMoreText ||\n 'mehr anzeigen'}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n </Copy>\n )}\n </ListFooter>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport default NewsOverview;\n","import { useEffect, useState } from 'react';\n\nexport const useObserverSupport = (inital?: boolean) => {\n const [observerSupported, setObserverSupport] = useState(inital || false);\n\n useEffect(() => {\n if (\n !('IntersectionObserver' in window) ||\n !('IntersectionObserverEntry' in window) ||\n !('intersectionRatio' in window.IntersectionObserverEntry.prototype)\n ) {\n setObserverSupport(false);\n } else {\n setObserverSupport(true);\n }\n }, []);\n\n return observerSupported;\n};\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.a<{ inverted?: boolean; disable?: boolean }>`\n min-height: 3em;\n height: 3.65em;\n min-width: 210px;\n padding: 0.1em 1.2em;\n\n display: inline-block;\n display: inline-flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: ${({ theme }) => font(theme).copy.medium.weight};\n text-align: center;\n text-decoration: none;\n line-height: 1;\n letter-spacing: ${({ theme }) => font(theme).copy.medium.letterSpacing};\n\n perspective: 1000;\n -webkit-font-smoothing: subpixel-antialiased;\n -webkit-perspective: 1000;\n -moz-osx-font-smoothing: grayscale;\n will-change: auto;\n\n outline: none;\n border: none;\n user-select: none;\n cursor: pointer;\n\n pointer-events: ${({ disable }) => (disable ? 'none' : 'all')};\n\n // will-change: transform;\n\n background-color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).light\n : inverted\n ? color(theme).dark\n : color(theme).light};\n text-align: left;\n\n transition: all ease-in-out 0.2s;\n\n & > * {\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).light\n : inverted\n ? color(theme).dark\n : color(theme).light};\n }\n\n & > :not(:last-child) {\n padding-right: ${spacings.nudge}px;\n }\n\n &:hover {\n transform: scale(1.02);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\ninterface Props {\n isInverted?: boolean;\n isDisabled?: boolean;\n onClick?: () => void;\n className?: string;\n}\n\nexport type BtnProps = Props & {\n as?: 'button';\n};\n\nexport type LinkProps = Props & {\n as?: 'a';\n href?: string;\n isExternal?: boolean;\n};\n\nconst Button: React.FC<BtnProps | LinkProps> = React.forwardRef(\n (\n { as, isInverted, isDisabled, onClick, className, children, ...rest },\n ref\n ) => {\n if (as === 'button') {\n return (\n <View\n ref={ref}\n as={as as any}\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n } else {\n return (\n <View\n ref={ref}\n as={as as any}\n href={(rest as LinkProps).href}\n target={\n (rest as LinkProps).isExternal ? '_blank' : undefined\n }\n rel={\n (rest as LinkProps).isExternal\n ? 'noopener noreferrer'\n : undefined\n }\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n }\n }\n);\n\nButton.displayName = 'Button';\n\nconst Icon = styled.div<{ iconColor?: string }>`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n width: 35px;\n height: 35px;\n\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).primary.medium};\n\n transition: transform 0.2s ease-in-out;\n\n ${View}:hover > & {\n transform: translateX(3px);\n }\n`;\n\nconst Label = styled.span`\n display: inline-block;\n`;\n\nexport default { View: Button, Label: Label, Icon: Icon };\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.a<{ inverted?: boolean; disable?: boolean }>`\n min-height: 3em;\n height: 3.65em;\n min-width: 210px;\n padding: 0.1em 1.2em;\n\n display: inline-block;\n display: inline-flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n\n font-family: ${({ theme }) => font(theme).copy.medium.family};\n ${({ theme }) => withRange(font(theme).copy.medium.size, 'font-size')}\n font-weight: ${({ theme }) => font(theme).copy.medium.weight};\n text-align: center;\n text-decoration: none;\n line-height: 1;\n letter-spacing: ${({ theme }) => font(theme).copy.medium.letterSpacing};\n\n perspective: 1000;\n -webkit-font-smoothing: subpixel-antialiased;\n -webkit-perspective: 1000;\n -moz-osx-font-smoothing: grayscale;\n will-change: auto;\n\n outline: none;\n box-shadow: none;\n border: solid 1px\n ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n user-select: none;\n cursor: pointer;\n\n pointer-events: ${({ disable }) => (disable ? 'none' : 'all')};\n\n // will-change: transform;\n\n background-color: transparent;\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n text-align: center;\n\n transition: all ease-in-out 0.2s;\n\n & > * {\n color: ${({ theme, inverted, disable }) =>\n disable\n ? color(theme).mono.medium\n : inverted\n ? color(theme).light\n : color(theme).dark};\n }\n\n & > :not(:last-child) {\n padding-right: ${spacings.nudge}px;\n }\n\n &:hover {\n transform: scale(1.04);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\ninterface Props {\n isInverted?: boolean;\n isDisabled?: boolean;\n onClick?: () => void;\n className?: string;\n}\n\nexport type BtnProps = Props & {\n as?: 'button';\n};\n\nexport type LinkProps = Props & {\n as?: 'a';\n href?: string;\n isExternal?: boolean;\n};\n\nconst ButtonGhost: React.FC<BtnProps | LinkProps> = React.forwardRef(\n (\n { as, isInverted, isDisabled, onClick, className, children, ...rest },\n ref\n ) => {\n if (as === 'button') {\n return (\n <View\n ref={ref}\n as={as as any}\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n } else {\n return (\n <View\n ref={ref}\n as={as as any}\n href={(rest as LinkProps).href}\n target={\n (rest as LinkProps).isExternal ? '_blank' : undefined\n }\n rel={\n (rest as LinkProps).isExternal\n ? 'noopener noreferrer'\n : undefined\n }\n inverted={isInverted}\n disable={isDisabled}\n onClick={onClick}\n className={className}\n {...rest}\n >\n {children}\n </View>\n );\n }\n }\n);\n\nButtonGhost.displayName = 'Button Ghost';\n\nconst Icon = styled.div<{ iconColor?: string }>`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n width: 35px;\n height: 35px;\n\n color: ${({ theme, iconColor }) =>\n iconColor || color(theme).primary.medium};\n\n transition: transform 0.2s ease-in-out;\n\n ${View}:hover > & {\n transform: translateX(3px);\n }\n`;\n\nconst Label = styled.span`\n display: inline-block;\n`;\n\nexport default { View: ButtonGhost, Label: Label, Icon: Icon };\n","import React, { FC, useContext } from 'react';\nimport styled, { ThemeContext } from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n mq,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.form`\n width: 100%;\n display: flex;\n flex-direction: column;\n\n color: ${({ theme }) => color(theme).mono.dark};\n\n @media ${mq.medium} {\n flex-direction: row;\n }\n`;\n\nconst InputField = styled.input<{ backColor?: string }>`\n display: block;\n width: 100%;\n height: 100%;\n max-height: 49px;\n padding: ${spacings.nudge * 3.5}px ${spacings.nudge * 3.5}px;\n color: inherit;\n\n background-color: ${({ backColor }) => backColor && backColor};\n box-shadow: none;\n border: none;\n border-right: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n font-family: ${({ theme }) => font(theme).copy.small.family};\n font-weight: ${({ theme }) => font(theme).copy.small.weight};\n ${({ theme }) => withRange(font(theme).copy.small.size, 'font-size')}\n line-height: ${({ theme }) => font(theme).copy.small.lineHeight};\n\n &::placeholder {\n color: inherit;\n }\n`;\n\nconst SubmitBtn = styled.button<{ isInverted?: boolean }>`\n display: inline-flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 49px;\n\n margin-top: ${spacings.spacer * 0.5}px;\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).dark};\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).dark : color(theme).light};\n\n outline: none;\n border: none;\n user-select: none;\n cursor: pointer;\n transition: all ease-in-out 0.2s;\n\n @media ${mq.medium} {\n width: 100px;\n margin-top: 0;\n }\n\n &:hover {\n transform: scale(1.05);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst CompactForm: FC<{\n isInverted?: boolean;\n value?: string;\n placeholder?: string;\n method?: string;\n action?: string;\n buttonIcon?: React.ReactNode;\n onSubmit?: (ev: React.SyntheticEvent<HTMLFormElement>) => void;\n onClick?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onFocus?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onBlur?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n backgroundStyle?: 'white' | 'grey';\n className?: string;\n}> = ({\n isInverted = false,\n value,\n placeholder,\n method,\n action,\n buttonIcon,\n onSubmit,\n onClick,\n onBlur,\n onFocus,\n backgroundStyle = 'grey',\n className,\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n <View\n onSubmit={onSubmit}\n method={method}\n action={action}\n className={className}\n >\n <InputField\n placeholder={placeholder}\n value={value}\n onClick={onClick}\n onBlur={onBlur}\n onFocus={onFocus}\n backColor={\n backgroundStyle === 'grey' || isInverted\n ? color(theme).mono.light\n : color(theme).light\n }\n />\n {buttonIcon && (\n <SubmitBtn isInverted={isInverted}>{buttonIcon}</SubmitBtn>\n )}\n </View>\n );\n};\n\nexport default CompactForm;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport {\n getColors as color,\n getFonts as font,\n spacings,\n withRange,\n} from 'utils/styles';\n\nconst View = styled.div<{ isInverted?: boolean }>`\n position: relative;\n width: 100%;\n display: flex;\n flex-direction: row;\n\n color: ${({ theme }) => color(theme).dark};\n\n background-color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).light : color(theme).mono.light};\n`;\n\nconst InputField = styled.input<{\n hasLeftIcon?: boolean;\n hasRightIcon?: boolean;\n}>`\n display: block;\n width: 100%;\n height: 100%;\n padding: ${spacings.nudge * 3}px ${spacings.nudge * 3.5}px;\n padding-left: ${({ hasLeftIcon }) =>\n hasLeftIcon && spacings.spacer * 2.5 + 'px'};\n padding-right: ${({ hasRightIcon }) =>\n hasRightIcon && spacings.spacer * 2.5 + 'px'};\n color: inherit;\n\n background-color: transparent;\n box-shadow: none;\n border: none;\n border-right: none;\n border-radius: 0px;\n outline: none;\n -webkit-appearance: none;\n\n font-family: ${({ theme }) => font(theme).copy.small.family};\n font-weight: 400;\n ${({ theme }) => withRange(font(theme).copy.small.size, 'font-size')}\n line-height: 1.25;\n\n &::placeholder {\n color: inherit;\n }\n`;\n\nconst ControlBtn = styled.button<{ isInverted?: boolean }>`\n display: inline-flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 53px;\n\n margin: -2px;\n background-color: transparent;\n color: ${({ theme }) => color(theme).dark};\n\n outline: none;\n border: none;\n user-select: none;\n cursor: pointer;\n /* transition: all ease-in-out 0.2s; */\n\n &:hover {\n transform: scale(1.02);\n }\n\n &:focus {\n text-decoration: underline;\n transform: scale(1.012);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst SubmitBtn = styled(ControlBtn)`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n`;\n\nconst ClearBtn = styled(ControlBtn)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n`;\n\nconst SearchInput: FC<{\n isInverted?: boolean;\n value?: string;\n placeholder?: string;\n submitIcon?: React.ReactNode;\n clearIcon?: React.ReactNode;\n onSubmit?: () => void;\n onClear?: () => void;\n onClick?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onBlur?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n onFocus?: (ev: React.SyntheticEvent<HTMLInputElement>) => void;\n className?: string;\n}> = ({\n isInverted = false,\n value,\n placeholder,\n submitIcon,\n clearIcon,\n onSubmit,\n onClick,\n onClear,\n onBlur,\n onFocus,\n className,\n}) => {\n const handleKeyDown = (ev: React.KeyboardEvent<HTMLInputElement>) => {\n if (ev.keyCode === 13) {\n onSubmit && onSubmit();\n ev.preventDefault();\n }\n };\n\n return (\n <View isInverted={isInverted} className={className}>\n {submitIcon && (\n <SubmitBtn\n isInverted={isInverted}\n onClick={() => onSubmit && onSubmit()}\n >\n {submitIcon}\n </SubmitBtn>\n )}\n <InputField\n hasLeftIcon={submitIcon !== undefined}\n hasRightIcon={clearIcon !== undefined}\n placeholder={placeholder}\n value={value}\n onClick={onClick}\n onBlur={onBlur}\n onFocus={onFocus}\n onKeyDown={handleKeyDown}\n />\n {clearIcon && (\n <ClearBtn\n isInverted={isInverted}\n onClick={() => onClear && onClear()}\n >\n {clearIcon}\n </ClearBtn>\n )}\n </View>\n );\n};\n\nexport default SearchInput;\n","import { CookieConsentData } from 'components/blocks/CookieConsent';\nimport { Cookie } from './cookie';\nimport StatusFormatter from '../statusFormatter';\n\nexport const isUrlInWhitelist = (\n urlString: string,\n whitelist: string[] = []\n) => {\n let isInWhiteList = false;\n for (let i = 0; i < whitelist.length; i++) {\n if (urlString.indexOf(whitelist[i]) > -1) {\n isInWhiteList = true;\n break;\n }\n }\n return isInWhiteList;\n};\n\nexport const bindConsentButtons = (callback: () => void) => {\n const allConsentButtons = document.querySelectorAll(\n '[data-consent-button], .cookie-consent-button'\n );\n\n for (let i = 0, len = allConsentButtons.length; i < len; i++) {\n allConsentButtons[i].addEventListener('click', callback);\n }\n};\n\nexport const activateTrackingScripts = () => {\n const scriptElements = document.querySelectorAll(\n \"script[type='text/consent_banner_script'], script[type='text/cookie-consent-script']\"\n );\n\n let i = scriptElements.length;\n 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 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 * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst ArrowRight: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"18\"\n height=\"13\"\n viewBox=\"0 0 18 13\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M1.85397 7.42546H14.5657L10.533 11.4322c-.1753.1887-.263.4064-.263.6532 0 .2468.0877.4646.263.6533.1899.1742.4091.2613.6575.2613.2484 0 .4676-.0871.6575-.2613l5.6107-5.57454c.0438-.05807.0876-.10888.1315-.15243.0438-.04356.0657-.08711.0657-.13066.0439-.10162.0658-.21775.0658-.34841 0-.13065-.0219-.2613-.0658-.39196-.0438-.05806-.0767-.10887-.0986-.15242-.0219-.04356-.0548-.08711-.0986-.13066L11.848.28308c-.0877-.10162-.1826-.1742-.2849-.21775C11.4608.02178 11.3366 0 11.1905 0c-.1315 0-.2484.02178-.3507.06533s-.2045.11613-.3068.21775c-.1753.18873-.263.40648-.263.65327s.0877.46454.263.65327l4.0327 3.98492H1.85397c-.29223 0-.52235.08347-.69038.25042s-.25204.39559-.25204.68593c0 .27582.08401.49721.25204.66415.16803.16695.39815.25042.69038.25042z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default ArrowRight;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst CrossSmall: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 35 35\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M35 2.77995L32.2201 0 17.5 14.7201 2.77995 0 0 2.77995 14.7201 17.5 0 32.2201 2.77995 35 17.5 20.2799 32.2201 35 35 32.2201 20.2799 17.5 35 2.77995z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default CrossSmall;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Magnifier: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M19.6955 18.267l-4.4964-4.4965c.5464-.687.9836-1.491 1.3114-2.4122.3279-.9211.4918-1.88132.4918-2.88055 0-1.17096-.2263-2.27165-.6791-3.3021-.4372-1.03045-1.0422-1.92818-1.815-2.69321-.7728-.76504-1.6745-1.37393-2.7049-1.8267C10.7728.21858 9.67214 0 8.50117 0S6.22951.21858 5.19906.65574c-1.03045.45277-1.93208 1.06166-2.70492 1.8267-.77283.76503-1.37782 1.66276-1.81498 2.69321C.22638 6.2061 0 7.30679 0 8.47775c0 1.18658.22638 2.29505.67916 3.32555.43716 1.0304 1.04215 1.9282 1.81498 2.6932.77284.765 1.67447 1.3739 2.70492 1.8267 1.03045.4371 2.13114.6557 3.30211.6557.99922 0 1.94383-.1639 2.83373-.4918.8899-.3278 1.7096-.765 2.459-1.3115l4.4965 4.4965c.1093.1093.2303.1874.363.2342.1327.0469.2459.0703.3396.0703s.2068-.0234.3396-.0703c.1327-.0468.2537-.1249.3629-.2342.203-.2029.3045-.4371.3045-.7025 0-.2655-.1015-.4996-.3045-.7026zM2.01405 8.47775c0-.88993.16393-1.73301.4918-2.52927.34349-.78065.80796-1.4676 1.39345-2.06089.58548-.59329 1.27634-1.05386 2.0726-1.38173.78064-.34349 1.62372-.51523 2.52927-.51523.90555 0 1.74863.17174 2.52923.51523.7963.32787 1.4872.78844 2.0726 1.38173.5855.59329 1.05 1.28024 1.3935 2.06089.3279.79626.4918 1.63934.4918 2.52927 0 .90555-.1639 1.74865-.4918 2.52925-.3279.7807-.7963 1.4754-1.4052 2.0843-.5933.5933-1.2802 1.0578-2.0609 1.3935-.7806.3357-1.62368.5035-2.52923.5035-.90555 0-1.74863-.1717-2.52927-.5152-.79626-.3435-1.48712-.808-2.0726-1.3935-.58549-.5855-1.04996-1.2763-1.39345-2.0726-.32787-.7806-.4918-1.6237-.4918-2.52925z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Magnifier;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst FlyTo: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"52\"\n height=\"52\"\n viewBox=\"0 0 52 52\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M26 31.8229c1.5347 0 2.8889-.5868 4.0625-1.7604S31.8229 27.5347 31.8229 26s-.5868-2.8889-1.7604-4.0625S27.5347 20.1771 26 20.1771s-2.8889.5868-4.0625 1.7604S20.1771 24.4653 20.1771 26s.5868 2.8889 1.7604 4.0625S24.4653 31.8229 26 31.8229zm0-17.3333c3.1597 0 5.868 1.1284 8.125 3.3854 2.257 2.257 3.3854 4.9653 3.3854 8.125s-1.1284 5.868-3.3854 8.125c-2.257 2.257-4.9653 3.3854-8.125 3.3854s-5.868-1.1284-8.125-3.3854c-2.257-2.257-3.3854-4.9653-3.3854-8.125s1.1284-5.868 3.3854-8.125c2.257-2.257 4.9653-3.3854 8.125-3.3854zm20.1771 31.6875V34.6667H52v11.5104c0 1.5347-.5868 2.8889-1.7604 4.0625S47.7118 52 46.1771 52H34.6667v-5.8229h11.5104zm0-46.1771c1.5347 0 2.8889.5868 4.0625 1.76042C51.4132 2.93403 52 4.28819 52 5.82292V17.3333h-5.8229V5.82292H34.6667V0h11.5104zM5.82292 5.82292V17.3333H0V5.82292c0-1.53473.5868-2.88889 1.76042-4.0625C2.93403.5868 4.28819 0 5.82292 0H17.3333v5.82292H5.82292zm0 28.84378v11.5104H17.3333V52H5.82292c-1.53473 0-2.88889-.5868-4.0625-1.7604C.5868 49.066 0 47.7118 0 46.1771V34.6667h5.82292z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default FlyTo;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Star: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"34\"\n height=\"32\"\n viewBox=\"0 0 34 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M33.9231 12.1154l-11.8504-1.5523L16.9615 0l-5.1111 10.5631L0 12.1154l8.70793 7.9128L6.47416 31.5l10.48734-5.6412L27.4489 31.5l-2.2338-11.4718 8.708-7.9128z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Star;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst StarGhost: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"33\"\n height=\"31\"\n viewBox=\"0 0 33 31\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M32.0408 11.6671c-.0682-.2762-.2045-.4948-.409-.6559-.2045-.161-.4544-.2876-.7498-.3797l-9.3041-1.31165L17.3518.79391C17.1474.26463 16.7157 0 16.0568 0c-.6589 0-1.0906.26464-1.2951.79391l-4.2261 8.38787-9.16781 1.44972c-.29537 0-.55098.1036-.76683.3107-.21584.2071-.39193.4487-.52825.7249-.09089.2991-.09657.5868-.01704.8629.07952.2762.22152.4833.42601.6214l6.71398 6.6274-1.60181 9.4234c-.06816.2992-.04544.5811.06816.8457.11361.2646.28401.4775.51122.6386.20449.1381.44873.2301.73274.2761.28401.0461.5737 0 .86907-.138l8.28176-4.4183 8.2817 4.4183h.7498c.1363 0 .2783-.0288.426-.0863.1477-.0576.2897-.1324.426-.2244.2272-.1381.3976-.3394.5112-.6041.1136-.2646.1363-.5465.0682-.8457l-1.6019-9.4234 6.714-6.6274c.2045-.1611.3465-.3682.426-.6213.0796-.2532.0739-.4948-.017-.7249zm-9.7472 6.4894c-.1363.2301-.2386.4544-.3067.6731-.0682.2186-.1023.4314-.1023.6385l1.1588 7.2488-6.4073-3.4173c-.2272-.138-.4487-.2071-.6645-.2071-.2159 0-.4261.0691-.6305.2071l-6.4073 3.4173 1.2951-7.2488c0-.2071-.0341-.4199-.1023-.6385-.0681-.2187-.17037-.443-.30669-.6731l-5.2485-5.0051 7.12299-1.0356c.2272 0 .443-.0863.6475-.2589.2045-.1726.3749-.3279.5112-.466l3.2037-6.62742 3.2036 6.48942c.0681.2071.2045.3797.409.5177.2044.1381.4544.2071.7497.2071l7.123 1.0356-5.2485 5.1432z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default StarGhost;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Mail: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"25\"\n height=\"25\"\n viewBox=\"0 0 25 25\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fill={iconColor}\n d=\"M22.3988 2.6786c.61982 0 1.16669.24181 1.64061.72545.47402.48363.71098 1.0417.71098 1.6741v14.844c0 .6324-.23696 1.1905-.71098 1.6741-.47392.4836-1.0208.7255-1.64061.7255H2.60173c-.61979 0-1.16669-.2419-1.64061-.7255s-.71094-1.0417-.71094-1.6741v-14.844c0-.63244.23698-1.1905.71094-1.6741.47396-.48363 1.0208-.72545 1.64061-.72545zm-.27349 5.0781V5.3571l-9.62495 6.529-9.62504-6.529v2.3996l9.62504 6.529z\"\n />\n </SVG>\n);\n\nexport default Mail;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Phone: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"25\"\n height=\"25\"\n viewBox=\"0 0 25 25\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fill={iconColor}\n d=\"M23.92962 18.18155c1.4269 1.42053 1.4269 2.98303 0 4.6876-.57072.66283-1.12955 1.16-1.6765 1.49142-.54693.33151-.99875.52086-1.35545.56825-.3567.04729-.86797.07098-1.53382.07098-1.85494 0-4.06648-.94696-6.63472-2.84087-2.04518-1.46783-3.90002-3.05402-5.56462-4.75858-2.1402-2.22543-4.01882-4.75858-5.63596-7.59946C.10175 7.14937-.3263 4.97133.24443 3.26676c.28537-.89961.9512-1.68086 1.99752-2.3438l.07134-.07102c.8561-.56818 1.61704-.85227 2.28288-.85227.90366 0 1.71216.42613 2.42556 1.27837l.07134.07103C8.18695 2.7695 8.94791 3.88222 9.37595 4.6871c.7134 1.46782.68962 2.7225-.07134 3.76424-.57072.75758-.85608 1.30206-.85608 1.63348 0 .14206.30914.56825.92742 1.27847l.07134.07098c1.14144 1.27848 1.75972 1.965 1.85484 2.05968.04756 0 .09512.02369.14268.07108.04756.04729.09512.09467.14278.14196l.14268.14207c.9512.94705 1.64082 1.60988 2.06886 1.98869l.07134.07098c.42804.3788.7134.56825.85608.56825.2378 0 .92742-.3551 2.06886-1.06542.33292-.23674.73718-.35511 1.21288-.35511.85608 0 1.89052.3551 3.1033 1.06542 1.21278.71022 2.15209 1.39675 2.81793 2.05958z\"\n />\n </SVG>\n);\n\nexport default Phone;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Route: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"29\"\n height=\"30\"\n viewBox=\"0 0 29 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M28.629 13.5725L15.4275.371C15.1802.12367 14.871 0 14.5 0s-.6802.12367-.9275.371L.371 13.5725c-.24733.2679-.371.5823-.371.943 0 .3607.12367.6647.371.912L13.5725 28.629c.2473.2679.5565.4019.9275.4019s.6802-.134.9275-.4019L28.629 15.4275c.2473-.2473.371-.5513.371-.912s-.1237-.6751-.371-.943zm-11.5011 4.2356V14.5h-6.5853v3.9574H7.91471v-5.2559c0-.371.12882-.6853.38646-.943.25765-.2576.56166-.3864.91205-.3864h7.91468V8.56397l4.6376 4.63753-4.6376 4.6066z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Route;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Facebook: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M26.6012 0H3.32515C1.48872 0 0 1.48872 0 3.32515V26.6012c0 1.8364 1.48872 3.3252 3.32515 3.3252H14.9832v.0053h4.9877v-.0053h6.6303c1.8364 0 3.3252-1.4888 3.3252-3.3252V3.32515C29.9264 1.48872 28.4376 0 26.6012 0zm-6.6303 29.9264V18.2937h4.9877V13.306h-4.9877V9.98081c0-.91821.7444-1.66257 1.6626-1.66257h3.3251V3.33051h-4.1564c-3.2138 0-5.819 2.60526-5.819 5.81902V13.306H11.658v4.9877h3.3252v11.6327h4.9877z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Facebook;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst LinkedIn: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M29.9752 3.32515C29.9752 1.48872 28.4865 0 26.65 0H3.37398C1.53755 0 .04883 1.48872.04883 3.32515V26.6012c0 1.8364 1.48872 3.3252 3.32515 3.3252H26.65c1.8365 0 3.3252-1.4888 3.3252-3.3252V3.32515zM25.7835 16.9523v8.8116h-4.6386v-8.1965c0-1.2855-1.0421-2.3276-2.3276-2.3276-1.2802 0-2.311 1.0475-2.311 2.3276v8.1965h-4.6386V11.8482h4.6386v1.8454c.7981-1.2968 2.444-2.1613 3.8572-2.1613 2.9934 0 5.42 2.4266 5.42 5.42zM6.487 9.24675c1.54261 0 2.79313-1.25053 2.79313-2.79313 0-1.54619-1.24693-2.80975-2.79313-2.80975-1.55178 0-2.80975 1.25797-2.80975 2.80975 0 1.5462 1.26356 2.79313 2.80975 2.79313zM8.77571 11.855v13.9157H4.17037V11.855h4.60534z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default LinkedIn;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Twitter: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M26.6735 0H3.39742C1.56099 0 .07227 1.48872.07227 3.32515V26.6012c0 1.8364 1.48872 3.3252 3.32515 3.3252H26.6735c1.8364 0 3.3251-1.4888 3.3251-3.3252V3.32515C29.9986 1.48872 28.5099 0 26.6735 0zm.0131 8.17421c-.4157.88117-1.3467 1.6792-2.1448 2.34419-.1163 7.6811-5.0209 12.9349-12.3529 13.2674-3.02588.133-5.20385-.8313-7.11582-2.045 2.22785.3492 4.98772-.532 6.48402-1.7956-2.19457-.2327-3.47475-1.3466-4.08991-3.1256.63178.0998 1.29681.0665 1.89534-.0499-1.97847-.665-3.39166-1.8953-3.45816-4.4557.54865.266 1.13055.4988 1.89534.5487-1.4797-.8479-2.56037-3.9237-1.31344-5.95204 2.1946 2.41073 4.83813 4.37254 9.17743 4.63854-1.0973-4.65517 5.0708-7.18228 7.6478-4.07327 1.0973-.19951 1.9785-.59853 2.843-1.06405-.3491 1.06405-1.0308 1.84546-1.862 2.44399.8978-.11638 1.7124-.33252 2.3941-.68166z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Twitter;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Xing: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.04732 0C1.38475 0 .05469 1.33006.05469 2.99264V26.9337c0 1.6626 1.33006 2.9927 2.99263 2.9927H26.9884c1.6626 0 2.9926-1.3301 2.9926-2.9927V2.99264C29.981 1.33006 28.651 0 26.9884 0H3.04732zM21.782 3.33051h3.3917c.1995 0 .3657.06651.4323.21614.0997.14963.0997.33251 0 .5154L18.1742 17.2296l4.7384 8.6454c.0997.1829.0997.3658 0 .5154-.0831.133-.2328.2162-.4157.2162h-3.375c-.5154 0-.7814-.3492-.931-.6484l-4.7716-8.7452c.2327-.4156 7.4649-13.23408 7.4649-13.23408.1829-.33252.3991-.64841.8978-.64841zM10.1943 7.91799H6.85251c-.21613 0-.38239.08313-.46552.21614-.09975.18288-.0665.33251.01663.5154l2.2611 3.94027-3.55791 6.3012c-.0665.1829-.0665.3824 0 .5154.08313.1496.23276.2327.43227.2327h3.3584c.5154 0 .74816-.3325.93104-.6484 0 0 3.47478-6.1681 3.62438-6.4009L11.142 8.5664c-.1663-.31589-.4323-.64841-.9477-.64841z\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Xing;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Instagram: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M25.6051 4.3945C22.67541 1.46476 19.1403 0 14.99951 0S7.32378 1.46486 4.39391 4.3945C1.46424 7.3242-.00061 10.85933-.00061 14.99987s1.46485 7.67574 4.39454 10.60538c2.92969 2.92972 6.4648 4.39458 10.6056 4.39458s7.67572-1.46486 10.60558-4.39458c2.9297-2.92964 4.39454-6.46476 4.39454-10.60538S28.5348 7.32413 25.6051 4.39449zm-1.23745 14.4139c0 1.56243-.53708 2.8808-1.61126 3.955-1.07426 1.0742-2.3926 1.61136-3.95511 1.61136h-7.61715c-1.52343 0-2.81252-.52735-3.8672-1.58204-1.05467-1.0547-1.6211-2.34374-1.69917-3.86715v-7.85156c.03906-1.5234.60546-2.81245 1.69917-3.86715 1.09376-1.05469 2.38277-1.58204 3.8672-1.58204h7.61715c1.56251 0 2.88085.5371 3.95511 1.61136 1.07418 1.0742 1.61126 2.39257 1.61126 3.9551zM18.81568 7.49976h-7.61714c-1.01568 0-1.88477.36132-2.60744 1.084-.72265.72268-1.08401 1.59176-1.08401 2.60742v7.6172c0 1.01558.36133 1.88474 1.084 2.60742.72268.72258 1.59177 1.08392 2.60745 1.08392h7.61714c1.01568 0 1.88477-.36134 2.60744-1.08392.72267-.72268 1.08392-1.59184 1.08392-2.60742v-7.6172c0-.97655-.37108-1.83591-1.11326-2.5781-.74217-.7422-1.6015-1.11332-2.5781-1.11332zm-.12235 11.19256c-.9766.97655-2.12885 1.46477-3.45703 1.46477-1.32809 0-2.48043-.48822-3.45702-1.46477-.9765-.97663-1.46485-2.1289-1.46485-3.45707 0-1.32808.48834-2.48043 1.46485-3.45698.97659-.97663 2.12893-1.46485 3.45702-1.46485 1.32818 0 2.48044.48822 3.45703 1.46485.9766.97655 1.46485 2.1289 1.46485 3.45698 0 1.32817-.48825 2.48044-1.46485 3.45707zm2.05094-7.79465c-.23442.23436-.50783.35154-.82034.35154s-.58592-.11718-.82034-.35154c-.23433-.23444-.3515-.50783-.3515-.82033s.11717-.58598.3515-.82034c.23442-.23435.50784-.35153.82034-.35153s.58592.11718.82034.35153c.23434.23436.3515.50783.3515.82034s-.11716.5859-.3515.82033zm-3.39449 2.22734c-.58592-.58598-1.289-.87897-2.10935-.87897s-1.52343.293-2.10935.87897c-.58592.5859-.87892 1.28905-.87892 2.1093 0 .82033.293 1.5235.87892 2.10938.58592.58598 1.28901.87889 2.10935.87889s1.52343-.2929 2.10935-.87889c.58601-.58589.87893-1.28905.87893-2.10938 0-.82025-.29292-1.5234-.87893-2.1093z\"\n clipRule=\"evenodd\"\n fillRule=\"evenodd\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Instagram;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst SVG = styled.svg`\n display: block;\n`;\n\nconst Youtube: React.FC<{ iconColor?: string; className?: string }> = ({\n iconColor = 'currentColor',\n className,\n}) => (\n <SVG\n width=\"43\"\n height=\"30\"\n viewBox=\"0 0 43 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M17.19523 20.52408l11.27986-5.95252-11.27986-6.02397zM21.49983 0c2.61017 0 5.13098.03571 7.56251.10715 2.43154.07142 4.21437.14682 5.34859.22619l1.70128.09523c.01554 0 .14756.0119.39616.03572.2486.0238.42723.04762.53599.07142.10876.02382.29134.05953.54766.10715.25641.04762.4778.11111.66424.19048s.40397.18253.65257.30952c.2486.12698.48937.28174.72243.46428s.4583.39286.67583.63095c.09322.09524.21366.24206.36122.44047.14765.19841.3729.6627.67591 1.39282.30293.73016.50878 1.5317.61754 2.40476.1243 1.0159.22138 2.0992.29135 3.25.06987 1.15082.11262 2.05163.12816 2.70235v4.19049c.01553 2.30161-.1243 4.60314-.4195 6.90476-.10877.87298-.30294 1.66266-.58261 2.36903s-.52827 1.19444-.74579 1.46428l-.32628.40476c-.21752.23806-.44277.44838-.67583.63097-.23306.1825-.47384.3333-.72243.45233s-.46612.21823-.65257.29767c-.18644.07935-.40783.14282-.66424.1904-.25632.04766-.44276.08339-.55925.10718-.11657.02378-.2952.04766-.53608.07145-.24078.02379-.36894.03573-.38448.03573-3.89976.30152-8.77055.45233-14.61202.45233-3.21612-.03177-6.00888-.0833-8.37826-.15476s-3.92688-.13097-4.67267-.17854l-1.14195-.09524-.83899-.09525c-.55932-.07935-.9827-.1587-1.2701-.23815-.28744-.07935-.68362-.24596-1.18856-.49991-.50495-.25404-.94382-.57944-1.31671-.97621-.09323-.09524-.21363-.2421-.36123-.44049-.1476-.19838-.37288-.66266-.67585-1.39282s-.50883-1.53178-.6176-2.40476c-.1243-1.01589-.2214-2.0992-.2913-3.25-.06992-1.15081-.11264-2.05162-.12818-2.70234V13.3809c-.01554-2.30162.12429-4.60315.4195-6.90477.10876-.87302.30296-1.66266.58263-2.36903.27966-.70635.52825-1.19444.74576-1.46427l.32628-.40477c.21752-.23809.4428-.4484.67585-.63094s.47387-.33731.72246-.46429c.24859-.12699.4661-.23016.65255-.30952.18644-.07937.40784-.14286.6642-.19048.25635-.04762.4389-.08333.54767-.10714.10876-.02381.28743-.04762.53602-.07143.24858-.02381.38065-.03571.39619-.03571 3.89976-.28572 8.77046-.42857 14.61202-.42857z\"\n clipRule=\"evenodd\"\n fillRule=\"evenodd\"\n fill={iconColor}\n />\n </SVG>\n);\n\nexport default Youtube;\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","Symbol","iterator","v","op","TypeError","pop","push","__spreadArray","to","from","il","j","__makeTemplateObject","cooked","raw","defineProperty","ScrollDirection","mq","medium","semilarge","large","xlarge","xxlarge","xxxLarge","spacings","nudge","spacer","wrapperSmall","wrapper","wrapperLarge","withRange","range","property","getSizeByRange","styleTextColor","fallbackColor","gradient","css","defaultColors","dark","light","mono","primary","secondary","tertiary","copyBase","family","weight","style","lineHeight","letterSpacing","size","textTransform","color","colorInverted","headingBase","defaultFonts","copy","small","big","copy-i","copy-b","super","heading-1","heading-2","heading-3","heading-4","callout","defaultGlobalSettings","sections","plainSeperation","imageTextGradient","newsDateFormat","newsTimeFormat","newsLocaleKey","getBaseTheme","colors","fonts","types","globalSettings","getColors","theme","getFonts","getGlobalSettings","isBrowser","window","document","checkMq","cmq","checkMqs","matchMedia","matches","getMediaQuery","useMediaQuery","mqs","_a","useState","mediaQuery","setMediaQuery","useEffect","handleResize","newMediaQuery","addEventListener","removeEventListener","useEqualSheetHeight","props","defaultResponsive","responsive","currentMq","itemsPerRow","sheetRefs","setSheetRefs","makeRows","index","arr","slice","resize","refs","identifierSizes","Map","identifiers","set","filter","ref","current","forEach","id","element","querySelector","removeAttribute","prevHeights","get","scrollHeight","key","heights","selector","reduce","rowHeights","highest","sort","vA","vB","x_1","el","setAttribute","setHeights","resizeHandler","Array","listLength","fill","map","createRef","triggerCalculation","setCookie","name","data","_b","days","_c","path","cookieString","valueString","dataKeys","keys","encodeURIComponent","substr","date","Date","setTime","getTime","toUTCString","cookie","getCookie","undefined","b","match","cookieValue","decodeURIComponent","valueArray","split","keyValueArray","cookieData","isNaN","Number","isBoolean","stringToBoolean","deleteCookie","useIE","initialValue","isIE","setIE","msTouchAction","useItemHeight","setElement","height","setHeight","calcHeight","offsetHeight","useScroll","initialTopOffset","onLeftOffset","onEnterOffset","topOffset","setTopOffset","_d","isTop","setIsTop","_e","isInOffset","setIsInOffset","_f","DOWN","scrollDirection","setScrollDirection","lastScrollPos","useRef","handleScroll","pageYOffset","prev","UP","useScrollTo","fallbackScrollDuration","startTime","firstPos","targetPos","setTargetPos","documentElement","scroll","top","left","behavior","animate_1","timestamp","elapsed","easeProgress","toFixed","newPos","scrollTo","cancelAnimationFrame","requestAnimationFrame","scrollTop","canUseWebP","elem","createElement","getContext","toDataURL","usePoster","posterImage","currentImage","setCurrentImage","workingImage","webp","useInterval","callback","delay","savedCallback","id_1","setInterval","clearInterval","useTouch","canTouch","setCanTouch","navigator","maxTouchPoints","msMaxTouchPoints","useImgPreload","imageUrls","isReady","setReady","isLoaded","setLoaded","loadedImages","setLoadedImages","items","requestedImages","img","src","res","Image","onload","url","preloadImages","item","x","find","image","items_1","_i","imgCount","hexToRgba","hex","alpha","rgb","parseInt","assignTo","target","source","output","sourceVal","targetVal","LibThemeProvider","children","combinedBaseTheme","tKey","isArray","sKey","assignFontBase","base","combinedTheme","React","ThemeProvider","View","styled","section","indent","Back","div","bgColor","bgMode","mode","bgValue","getBackground","Section","as","addSeperation","className","useContext","ThemeContext","React.createElement","addPlainSeperation","settings","clampWidth","Wrapper","addWhitespace","Img","Picture","picture","alt","coverSpace","onClick","srcSet","media","loading","BaseStyles","h1","textColor","textGradient","hyphens","type","font","Heading","isInverted","hasShadow","innerHTML","rest","React.useContext","tag","fontSettings","colorGradientInverted","colorGradient","dangerouslySetInnerHTML","__html","defaultProps","Title","colorMode","superTitle","superTitleAs","title","titleAs","isCentered","Copy","columns","markerInverted","isMirrored","Actions","StyledTitle","ContentBlock","StyledActions","Intro","text","primaryAction","secondaryAction","clampTitle","clampText","StyledIntro","ImgContainer","ImgWrapper","Gallery","hasBack","images","array","isFull","currentIndex","newIndex","isNextImgFull","gridSettings","cols","gutter","StyledCol","mediumSpan","span","semilargeSpan","largeSpan","xlargeSpan","mediumMove","move","semilargeMove","largeMove","xlargeMove","StyledGrid","Grid","valign","React.Children","comp","Row","Col","React.Fragment","StyledImage","ImgDescDesktop","ImgDescMobile","InfoWrapper","SubTextBlock","Teaser","intro","subText","getSectionBgMode","description","WideImage","TeaserWide","a","inverted","Pointer","React.forwardRef","isDisabled","disable","href","isExternal","rel","displayName","CursorState","Icon","Label","StyledSection","ListContainer","ItemContainer","ShowMore","itemCount","Items","ActionsWrapper","Item","ListFooter","IconList","showLessText","showMoreText","React.useState","showMore","setShowMore","isVisible","Content","ContentText","Article","asideText","withAsideText","isAside","ImageContainer","ArticleContent","Desc","Feature","ContentContainer","FeatureList","features","featureCount","cardRefs","isHalf","feature","global","LinkHelper","IntroContainer","PromotionCard","clickable","FlexGrid","FlexGridCol","PosterContainer","CrossPromotion","main","aside","card","Poster","hasContent","SVG","svg","Play","iconColor","width","viewBox","xmlns","d","bgImage","isActive","VideoControls","Iframe","iframe","VideoCard","embedId","playIcon","setIsActive","allow","Video","ContactView","Avatar","Info","Address","Decorator","AddressLabel","StyledContactBox","addresses","avatar","address","decorator","NewsletterWrapper","Badge","CallToAction","contact","badge","newsForm","FactsContainer","ul","FactsItem","li","Text","FactList","facts","icon","hasText","Fact","subTitle","FactFill","FactGrid","factCount","fact","TableContainer","TableBody","table","TableHead","th","TableData","td","TableBlock","row","tableTitle","rowTitle","ii","itemText","TableWrapper","Table","tableItems","withSeperation","ArrowLeftGhost","transform","ArrowRightGhost","MapContainer","FylToCtrlContainer","SliderContext","createContext","steps","currentStep","slickSettings","clickSideOffset","goToStep","nextStep","previousStep","isOnFirstStep","isOnLastStep","SlidesView","cursorPath","sameHeight","fullHeight","StyledSlider","SlickSlider","leftMargin","min","max","SlideView","spacing","ControlView","button","DotGroupView","initialStep","slideSpacing","cursorPaths","beforeChange","afterChange","onInit","slideCount","setSlideCount","sliderRef","setSliderRef","setCurrentStep","_g","visibleSlides","setVisibleSlides","_h","setSteps","dots","arrows","infinite","speed","slidesToScroll","slidesToShow","variableWidth","fade","swipe","cBreakpoint","state","breakpoint","itemsPerSlide","Math","floor","slides","Provider","setSlider","intNum","slickGoTo","context","cursor","setCursor","viewRef","setViewRef","mousePos","setMousePos","getCursorPath","NEXT","PREV","handleClick","ev","stopPropagation","isSlideControl","classList","contains","isAnchor","HTMLAnchorElement","parentElement","rect","getBoundingClientRect","relMouseX","Children","count","Consumer","values","onMouseMove","clientX","disabled","stepsArray","setStepsArray","containerRef","onReady","attribution","activeMarkerId","markers","center","zoom","touchZoom","scrollWheelZoom","onlyScrollOnFocus","fitBoundsPadding","onMarkerClick","onFlyToClick","flyToControl","onActiveMarkerChanged","cRef","prevMarkerId","_j","L","setLeaflet","_k","setMap","_l","markersLayer","setMarkersLayer","_m","cElement","mapContainerRef","import","leaflet","map_1","once","enable","tileLayer","addTo","markersLayer_1","FeatureGroup","showAllMarkers","fitBounds","getBounds","padding","point","flyToPosition","position","flyTo","flyToActive","marker","m","clearLayers","markerIcon","iconUrl","iconSize","sizeActive","iconAnchor","anchorActive","anchor","riseOnHover","on","addLayer","markerId","goTo","showAll","CardWrapper","SliderWrapper","InfoCardView","CardHeader","ContactList","ContactListLabel","LocationInfoCard","location","meta","c","Controls","StyledDotGroup","Slider","DotWrapper","Dot","StyledControl","flyToZoom","initialLocation","locations","allMarkersOnInit","controlNext","controlPrev","dot","activeLocation","setActiveLocation","locIndex","findIndex","loc","FieldHead","Field","input","InfoMessage","ErrorMessage","Textfield","lightBg","errorMessage","infoMessage","placeholder","isRequired","onChange","hasError","required","Area","textarea","Textarea","CheckboxContainer","Original","Box","isSelected","StyledCheck","stroke","Checkbox","checked","FieldsContainer","FlexContainer","ActionWrapper","Form","submitAction","onSubmit","formFields","checkbox","yupValidationSchema","validation","Formik","initialValues","surname","phone","area","mail","check","validate","errors","validationSchema","obj","handleSubmit","setFieldValue","isValid","dirty","preventDefault","constructor","additionalProps","ArrowLeftRight","fillRule","clipRule","clamp","num","Images","BackgroundImg","ForegroundContainer","hasAnim","initalValue","ForegroundImg","ForegroundOverlay","ImageLabel","ForegroundLabel","BackgroundLabel","ControlContainer","Control","ComparisonSlider","foregroundImg","backgroundImg","foregroundLabel","backgroundLabel","overlayColor","labelColor","dragControl","enableControlAnim","slideValue","setSlideValue","isHolding","setIsHolding","isDragging","setIsDragging","interacted","setInteracted","sideOffset","setSideOffset","controlRef","offsetWidth","handleInitalLoad","observer","IntersectionObserver","entries","isIntersecting","unobserve","rootMargin","threshold","observe","readyState","setCurrentPos","relativeClientX","percentage","currentTarget","onMouseDown","onMouseUp","onMouseLeave","onTouchMove","touches","onTouchStart","onTouchEnd","hasTransition","Head","IntroBlock","TopControls","StyledSlides","Footer","CtrlWrapper","CtrlWrapperLeft","CtrlWrapperRight","CarouselBase","variableWidths","child","ImageCarousel","imageCount","FullWidthImg","StyledWrapper","FeatureCarousel","PromotionCarousel","promotions","promotionCount","promotion","VideoCarousel","videos","videoCount","video","Link","Bdot","IconItemView","StyledLink","SocialList","MainView","topSpace","hAlign","LogoLink","ContactData","SiteLinksView","SiteLink","LinkWrapper","BottomWrapper","BottomView","logo","columnTopSpace","contactData","siteLinks","newsTitle","newsText","socials","bottomLinks","brandIcon","siteLinksColLeft","ceil","siteLinksColRight","link","direction","getBgImage","AnimationContainer","PosterImage","AnimationImage","scale","opacity","AnimationImages","intervalRef","activeImg","setActiveImg","changeImage","setTimeout","backgroundImage","zIndex","HeaderKenBurns","React.useEffect","loadedForMq","useWebp_1","PosterView","HeaderPoster","Callout","PlaceholderImg","AutoplayVideo","HeaderVideo","placeholderImg","videoUrl","isMobile","muted","autoPlay","loop","onCanPlayThrough","header","HeaderWrapper","PosterContent","PosterContentMobile","StyledPoster","Header","sizeScale","primaryCta","secondaryCta","withTopGradient","customTopGradient","customBottomGradient","topGradient","bottomGradient","content","showOnMobile","Seperator","ContentFlex","Author","StyledCopy","NewsAuthorCard","author","Tag","dateFormat","timeFormat","localeKey","dddd","weekDays","_this","long","getDay","DDDD","ddd","short","DDD","dd","DD","MMMM","monthNames","getMonth","mmmm","MMM","mmm","mm","MM","yyyy","getYear","YYYY","yy","YY","hh","getHours","HH","hs","getHours12h","HS","getMinutes","ss","getSeconds","SS","ap","AP","StatusFormatter","placeholders","%DATE%","getFormattedDate","%TIME%","getFormattedTime","replace","foundString","dateReplacements","formattedDate","RegExp","timeReplacements","formattedTime","toString","getDoubleDigitString","getDate","getFullYear","hours","de","en","ImageLink","TitleLink","Main","NewsCard","onTagClick","publishDate","publishedAt","NewsFooter","news","newsCount","setItemsPerRow","visibleRows","setVisibleRows","ImageFlex","NewsImages","imageStyle","isSingleHalf","IntroHead","HeadTag","MetaBlock","NewsIntro","tags","News","NewsList","NewsTable","NewsText","NewsVideo","TagContainer","TagWrapper","List","NewsOverview","activeTag","queryParams","selected","decodeURI","selectedTag","setSelectedTag","targetRef","observerSupported","inital","setObserverSupport","IntersectionObserverEntry","useObserverSupport","setNewPos","entry","disconnect","Button","ButtonGhost","form","InputField","backColor","SubmitBtn","CompactForm","method","action","buttonIcon","onBlur","onFocus","backgroundStyle","ControlBtn","ClearBtn","SearchInput","submitIcon","clearIcon","onClear","hasLeftIcon","hasRightIcon","onKeyDown","keyCode","activateTrackingScripts","scriptElements","querySelectorAll","newScriptElement","appendChild","parentNode","removeChild","Stage","CookieConsent","cookieName","urlWhitelist","consentAcceptStatusMsg","consentDeclineStatusMsg","noCookieStatusMsg","lifetime","overlayOpacity","_o","setIsVisible","allConsentButtons","len","bindConsentButtons","urlString","whitelist","isInWhiteList","isUrlInWhitelist","pathname","consent","status","allConsentStatusElements","formatter","updatedAt","getFormattedStatus","updateConsentStatusElements","bgOpacity","handleDecline","console","log","handleAccept","additionalAcceptProps","additionalDeclineProps","CookieIcon","TitleView","CookieTitle","TextView","CookieText","CookieActions","Cross","HeaderCol","LeftCol","CenterCol","RightCol","ToggleContainer","CloseBtn","SearchContainer","ScrollArea","NavListView","Nav","nav","Group","GroupLabel","GroupLabelSpacer","NavItem","isSmall","ItemLink","ItemLabel","isOpen","isLarge","toggleIcon","search","onCloseClick","clickHandler","activeNavItem","navGroups","activeGroup","activeItem","group","itemIndex","Backdrop","SocialContainer","Menu","backdropOpacity","navItems","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","Navigation","isMenuInverted","isLargeMenu","isTopbarInverted","allowTopbarOverflow","hideTopbarBackUnderMenu","isTopbarLargeOnPageTop","openMenuIcon","closeMenuIcon","isMenuOpen","setIsMenuOpen","sharedProps","overflow","ArrowRight","CrossSmall","Magnifier","FlyTo","Star","StarGhost","Mail","Phone","Route","Facebook","LinkedIn","Twitter","Xing","Instagram","Youtube"],"mappings":"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"}
|