{"version":3,"file":"scripts.min.js","sources":["../../../node_modules/headroom.js/dist/headroom.js","../../../assets/js/base/_dropdownEvent.js","../../../assets/js/base/_traverse.js","../../../assets/js/modules/_masthead.js","../../../assets/js/modules/_section-nav.js","../../../assets/js/modules/animations/_util.js","../../../assets/js/modules/animations/_lines.js","../../../assets/js/modules/animations/_words.js","../../../assets/js/modules/animations/_letters.js","../../../assets/js/modules/_animations.js","../../../assets/js/modules/animations/_ken-burns.js","../../../assets/js/modules/animations/_image.js","../../../assets/js/modules/animations/_block.js","../../../assets/js/modules/animations/_fade.js","../../../assets/js/modules/animations/_scale.js","../../../assets/js/modules/animations/_reveal.js","../../../assets/js/base/_object-fit-cover.js","../../../assets/js/base/_share.js","../../../assets/js/modules/_announcement.js","../../../assets/js/scripts.js","../../../assets/js/base/_throttle.js","../../../assets/js/base/_fitvid.js"],"sourcesContent":["/*!\n * headroom.js v0.12.0 - Give your page some headroom. Hide your header until you need it\n * Copyright (c) 2020 Nick Williams - http://wicky.nillia.ms/headroom.js\n * License: MIT\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.Headroom = factory());\n}(this, function () { 'use strict';\n\n function isBrowser() {\n return typeof window !== \"undefined\";\n }\n\n /**\n * Used to detect browser support for adding an event listener with options\n * Credit: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n */\n function passiveEventsSupported() {\n var supported = false;\n\n try {\n var options = {\n // eslint-disable-next-line getter-return\n get passive() {\n supported = true;\n }\n };\n window.addEventListener(\"test\", options, options);\n window.removeEventListener(\"test\", options, options);\n } catch (err) {\n supported = false;\n }\n\n return supported;\n }\n\n function isSupported() {\n return !!(\n isBrowser() &&\n function() {}.bind &&\n \"classList\" in document.documentElement &&\n Object.assign &&\n Object.keys &&\n requestAnimationFrame\n );\n }\n\n function isDocument(obj) {\n return obj.nodeType === 9; // Node.DOCUMENT_NODE === 9\n }\n\n function isWindow(obj) {\n // `obj === window` or `obj instanceof Window` is not sufficient,\n // as the obj may be the window of an iframe.\n return obj && obj.document && isDocument(obj.document);\n }\n\n function windowScroller(win) {\n var doc = win.document;\n var body = doc.body;\n var html = doc.documentElement;\n\n return {\n /**\n * @see http://james.padolsey.com/javascript/get-document-height-cross-browser/\n * @return {Number} the scroll height of the document in pixels\n */\n scrollHeight: function() {\n return Math.max(\n body.scrollHeight,\n html.scrollHeight,\n body.offsetHeight,\n html.offsetHeight,\n body.clientHeight,\n html.clientHeight\n );\n },\n\n /**\n * @see http://andylangton.co.uk/blog/development/get-viewport-size-width-and-height-javascript\n * @return {Number} the height of the viewport in pixels\n */\n height: function() {\n return win.innerHeight || html.clientHeight || body.clientHeight;\n },\n\n /**\n * Gets the Y scroll position\n * @return {Number} pixels the page has scrolled along the Y-axis\n */\n scrollY: function() {\n if (win.pageYOffset !== undefined) {\n return win.pageYOffset;\n }\n\n return (html || body.parentNode || body).scrollTop;\n }\n };\n }\n\n function elementScroller(element) {\n return {\n /**\n * @return {Number} the scroll height of the element in pixels\n */\n scrollHeight: function() {\n return Math.max(\n element.scrollHeight,\n element.offsetHeight,\n element.clientHeight\n );\n },\n\n /**\n * @return {Number} the height of the element in pixels\n */\n height: function() {\n return Math.max(element.offsetHeight, element.clientHeight);\n },\n\n /**\n * Gets the Y scroll position\n * @return {Number} pixels the element has scrolled along the Y-axis\n */\n scrollY: function() {\n return element.scrollTop;\n }\n };\n }\n\n function createScroller(element) {\n return isWindow(element) ? windowScroller(element) : elementScroller(element);\n }\n\n /**\n * @param element EventTarget\n */\n function trackScroll(element, options, callback) {\n var isPassiveSupported = passiveEventsSupported();\n var rafId;\n var scrolled = false;\n var scroller = createScroller(element);\n var lastScrollY = scroller.scrollY();\n var details = {};\n\n function update() {\n var scrollY = Math.round(scroller.scrollY());\n var height = scroller.height();\n var scrollHeight = scroller.scrollHeight();\n\n // reuse object for less memory churn\n details.scrollY = scrollY;\n details.lastScrollY = lastScrollY;\n details.direction = scrollY > lastScrollY ? \"down\" : \"up\";\n details.distance = Math.abs(scrollY - lastScrollY);\n details.isOutOfBounds = scrollY < 0 || scrollY + height > scrollHeight;\n details.top = scrollY <= options.offset[details.direction];\n details.bottom = scrollY + height >= scrollHeight;\n details.toleranceExceeded =\n details.distance > options.tolerance[details.direction];\n\n callback(details);\n\n lastScrollY = scrollY;\n scrolled = false;\n }\n\n function handleScroll() {\n if (!scrolled) {\n scrolled = true;\n rafId = requestAnimationFrame(update);\n }\n }\n\n var eventOptions = isPassiveSupported\n ? { passive: true, capture: false }\n : false;\n\n element.addEventListener(\"scroll\", handleScroll, eventOptions);\n update();\n\n return {\n destroy: function() {\n cancelAnimationFrame(rafId);\n element.removeEventListener(\"scroll\", handleScroll, eventOptions);\n }\n };\n }\n\n function normalizeUpDown(t) {\n return t === Object(t) ? t : { down: t, up: t };\n }\n\n /**\n * UI enhancement for fixed headers.\n * Hides header when scrolling down\n * Shows header when scrolling up\n * @constructor\n * @param {DOMElement} elem the header element\n * @param {Object} options options for the widget\n */\n function Headroom(elem, options) {\n options = options || {};\n Object.assign(this, Headroom.options, options);\n this.classes = Object.assign({}, Headroom.options.classes, options.classes);\n\n this.elem = elem;\n this.tolerance = normalizeUpDown(this.tolerance);\n this.offset = normalizeUpDown(this.offset);\n this.initialised = false;\n this.frozen = false;\n }\n Headroom.prototype = {\n constructor: Headroom,\n\n /**\n * Start listening to scrolling\n * @public\n */\n init: function() {\n if (Headroom.cutsTheMustard && !this.initialised) {\n this.addClass(\"initial\");\n this.initialised = true;\n\n // defer event registration to handle browser\n // potentially restoring previous scroll position\n setTimeout(\n function(self) {\n self.scrollTracker = trackScroll(\n self.scroller,\n { offset: self.offset, tolerance: self.tolerance },\n self.update.bind(self)\n );\n },\n 100,\n this\n );\n }\n\n return this;\n },\n\n /**\n * Destroy the widget, clearing up after itself\n * @public\n */\n destroy: function() {\n this.initialised = false;\n Object.keys(this.classes).forEach(this.removeClass, this);\n this.scrollTracker.destroy();\n },\n\n /**\n * Unpin the element\n * @public\n */\n unpin: function() {\n if (this.hasClass(\"pinned\") || !this.hasClass(\"unpinned\")) {\n this.addClass(\"unpinned\");\n this.removeClass(\"pinned\");\n\n if (this.onUnpin) {\n this.onUnpin.call(this);\n }\n }\n },\n\n /**\n * Pin the element\n * @public\n */\n pin: function() {\n if (this.hasClass(\"unpinned\")) {\n this.addClass(\"pinned\");\n this.removeClass(\"unpinned\");\n\n if (this.onPin) {\n this.onPin.call(this);\n }\n }\n },\n\n /**\n * Freezes the current state of the widget\n * @public\n */\n freeze: function() {\n this.frozen = true;\n this.addClass(\"frozen\");\n },\n\n /**\n * Re-enables the default behaviour of the widget\n * @public\n */\n unfreeze: function() {\n this.frozen = false;\n this.removeClass(\"frozen\");\n },\n\n top: function() {\n if (!this.hasClass(\"top\")) {\n this.addClass(\"top\");\n this.removeClass(\"notTop\");\n\n if (this.onTop) {\n this.onTop.call(this);\n }\n }\n },\n\n notTop: function() {\n if (!this.hasClass(\"notTop\")) {\n this.addClass(\"notTop\");\n this.removeClass(\"top\");\n\n if (this.onNotTop) {\n this.onNotTop.call(this);\n }\n }\n },\n\n bottom: function() {\n if (!this.hasClass(\"bottom\")) {\n this.addClass(\"bottom\");\n this.removeClass(\"notBottom\");\n\n if (this.onBottom) {\n this.onBottom.call(this);\n }\n }\n },\n\n notBottom: function() {\n if (!this.hasClass(\"notBottom\")) {\n this.addClass(\"notBottom\");\n this.removeClass(\"bottom\");\n\n if (this.onNotBottom) {\n this.onNotBottom.call(this);\n }\n }\n },\n\n shouldUnpin: function(details) {\n var scrollingDown = details.direction === \"down\";\n\n return scrollingDown && !details.top && details.toleranceExceeded;\n },\n\n shouldPin: function(details) {\n var scrollingUp = details.direction === \"up\";\n\n return (scrollingUp && details.toleranceExceeded) || details.top;\n },\n\n addClass: function(className) {\n this.elem.classList.add.apply(\n this.elem.classList,\n this.classes[className].split(\" \")\n );\n },\n\n removeClass: function(className) {\n this.elem.classList.remove.apply(\n this.elem.classList,\n this.classes[className].split(\" \")\n );\n },\n\n hasClass: function(className) {\n return this.classes[className].split(\" \").every(function(cls) {\n return this.classList.contains(cls);\n }, this.elem);\n },\n\n update: function(details) {\n if (details.isOutOfBounds) {\n // Ignore bouncy scrolling in OSX\n return;\n }\n\n if (this.frozen === true) {\n return;\n }\n\n if (details.top) {\n this.top();\n } else {\n this.notTop();\n }\n\n if (details.bottom) {\n this.bottom();\n } else {\n this.notBottom();\n }\n\n if (this.shouldUnpin(details)) {\n this.unpin();\n } else if (this.shouldPin(details)) {\n this.pin();\n }\n }\n };\n\n /**\n * Default options\n * @type {Object}\n */\n Headroom.options = {\n tolerance: {\n up: 0,\n down: 0\n },\n offset: 0,\n scroller: isBrowser() ? window : null,\n classes: {\n frozen: \"headroom--frozen\",\n pinned: \"headroom--pinned\",\n unpinned: \"headroom--unpinned\",\n top: \"headroom--top\",\n notTop: \"headroom--not-top\",\n bottom: \"headroom--bottom\",\n notBottom: \"headroom--not-bottom\",\n initial: \"headroom\"\n }\n };\n\n Headroom.cutsTheMustard = isSupported();\n\n return Headroom;\n\n}));\n","/**\n * This class fires events for dropdown menus\n *\n * - supports PointerEvents\n * - supports HoverIntent\n * - prevents following the first link on touch/keyboard click unless already opened\n * - deactivates when blurred for any event\n *\n * Use this by either passing callbacks.activate, callbacks:deactivate, * or by\n * listening for the dropdown:activate or dropdown:deactivate events on the\n * passed node\n *\n * Events Example:\n * ```\n * dropdownEvent(node);\n * node.addEventListener('dropdown:activate', () => {\n * // add dropdown classes\n * });\n * node.addEventListener('dropdown:deactivate', () => {\n * // remove dropdown classes\n * });\n * ```\n\n * Callbacks Example:\n * ```\n * dropdownEvent(node, {\n * activate: function() {\n * // add dropdown classes\n * },\n * deactivate: function() {\n * // remove dropdown classes\n * },\n * });\n * ```\n *\n * jQuery events example\n * ```\n * jQuery('selector').dropdownEvent().on('dropdown:activate', function() {\n * // add dropdown classes\n * }).on('dropdown:deactivate', function() {\n * // remove dropdown classes\n * });\n * ```\n *\n * jQuery callbacks example\n * ```\n * jQuery('selector').dropdownEvent({\n * activate: function() {\n * // add dropdown classes\n * },\n * deactivate: function() {\n * // remove dropdown classes\n * }\n * });\n * ```\n *\n * @class\n */\nimport { focusable } from \"./_traverse\";\n\nexport class DropdownEvent {\n\t/**\n\t *\n\t * @param HTMLElement node\n\t * @param {Object} opts\n\t * @param {Integer} [opts.delay=200] - the hover intent delay on mouse events\n\t * @param {Function} opts.activate - the callback function for activate\n\t * @param {Function} opts.deactivate - the callback function for deactivate\n\t * @param {String} [opts.activateEvent=dropdown:activate] - the name of the activate event to listen to\n\t * @param {String} [opts.deactivateEvent=dropdown:deactivate] - the name of the deactivate event to listen to\n\t */\n\tconstructor(node, opts = {}) {\n\t\tthis.node = node;\n\t\tthis.opts = {\n\t\t\tdelay: 200,\n\t\t\tactivate: () => {},\n\t\t\tdeactivate: () => {},\n\t\t\tactivateEvent: 'dropdown:activate',\n\t\t\tdeactivateEvent: 'dropdown:deactivate',\n\t\t};\n\n\t\tfor (let opt in opts) {\n\t\t\tif (opts.hasOwnProperty(opt)) {\n\t\t\t\tthis.opts[opt] = opts[opt];\n\t\t\t}\n\t\t}\n\n\t\tthis.active = false;\n\t\tthis.enterTimeout = null;\n\t\tthis.leaveTimeout = null;\n\n\t\t// prevents the click event from following links (used by touch/keyboard handlers)\n\t\tconst preventClickEvent = function(e) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tthis.removeEventListener('click', preventClickEvent);\n\t\t}\n\n\t\t// activate if the event target is a child link\n\t\tconst maybeActivate = (e, focus = false) => {\n\t\t\tif (this.active) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tlet target = e.target;\n\t\t\twhile(target.parentNode && target !== this.node) {\n\t\t\t\tif (target.tagName === 'A') {\n\t\t\t\t\ttarget.addEventListener('click', preventClickEvent);\n\t\t\t\t}\n\n\t\t\t\ttarget = target.parentNode;\n\t\t\t}\n\n\t\t\tthis.activate(e, focus);\n\t\t\treturn true;\n\t\t}\n\n\t\t// activate on mouse enter and apply delay\n\t\tconst mouseenter = (e) => {\n\t\t\tif (typeof this.leaveTimeout === 'number') {\n\t\t\t\treturn window.clearTimeout(this.leaveTimeout);\n\t\t\t}\n\n\t\t\tthis.enterTimeout = setTimeout(() => {\n\t\t\t\tthis.activate(e);\n\t\t\t}, this.opts.delay);\n\t\t}\n\n\t\t// deactivate on mouse leave and apply delay\n\t\tconst mouseleave = (e) => {\n\t\t\tif (typeof this.enterTimeout === 'number') {\n\t\t\t\treturn window.clearTimeout(this.enterTimeout);\n\t\t\t}\n\n\t\t\tthis.leaveTimeout = window.setTimeout(() => {\n\t\t\t\tthis.deactivate(e);\n\t\t\t}, this.opts.delay);\n\t\t}\n\n\t\t// handle the touch start event\n\t\tconst touchstart = (e) => {\n\t\t\treturn maybeActivate(e, true);\n\t\t}\n\n\t\t// handle the keypress event\n\t\tconst keypress = (e) => {\n\t\t\tif ( 'enter' === e.key.toLowerCase() ) {\n\t\t\t\treturn maybeActivate(e);\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\t// handle the pointer enter and route to touch/mouse event ( treats pen events as mouse )\n\t\tconst pointerenter = (e) => {\n\t\t\treturn 'touch' === e.pointerType ? touchstart(e) : mouseenter(e);\n\t\t}\n\n\t\t// handle the pointer leave and route to touch/mouse event ( treats pen events as mouse )\n\t\tconst pointerleave = (e) => {\n\t\t\treturn 'touch' === e.pointerType ? touchstart(e) : mouseleave(e);\n\t\t}\n\n\t\t// on captured blur detect if the event target is a child of this.node, if not, deactivate\n\t\tconst blur = () => {\n\t\t\tif ( ! this.active ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.setTimeout(() => {\n\t\t\t\tlet target = document.activeElement;\n\t\t\t\twhile ( target && target.parentNode ) {\n\t\t\t\t\tif ( target === this.node ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget = target.parentNode;\n\t\t\t\t}\n\n\t\t\t\tthis.deactivate();\n\t\t\t}, 0);\n\t\t}\n\n\t\tif ( window.PointerEvent ) {\n\t\t\t// add pointer events\n\t\t\tthis.node.addEventListener('pointerenter', pointerenter);\n\t\t\tthis.node.addEventListener('pointerleave', pointerleave);\n\t\t} else {\n\t\t\t// no pointer events - use mouse/touch events directly\n\t\t\tthis.node.addEventListener('touchstart', touchstart);\n\t\t\tthis.node.addEventListener('mouseenter', mouseenter);\n\t\t\tthis.node.addEventListener('mouseleave', mouseleave);\n\t\t}\n\n\t\t// add keypress/blur events\n\t\tthis.node.addEventListener('keypress', keypress);\n\t\tthis.node.addEventListener('blur', blur, true); // capture\n\t}\n\n\t/**\n\t* Activates the dropdown and fires the callback/event\n\t*\n\t* @param {Object} e - passed along to the callback/event as detail\n\t* @param {boolean} focus - should the first focusable element be focused\n\t*/\n\tactivate(e = {}, focus = false) {\n\t\tthis.active = true;\n\n\t\tif (typeof this.enterTimeout === 'number') {\n\t\t\twindow.clearTimeout(this.enterTimeout);\n\t\t\tthis.enterTimeout = null;\n\t\t}\n\n\t\tif (focus) {\n\t\t\tfocusable(this.node);\n\t\t}\n\n\t\tif (typeof this.opts.activate === 'function') {\n\t\t\tthis.opts.activate.call(this.node, e);\n\t\t}\n\n\t\tif (typeof this.opts.activateEvent === 'string') {\n\t\t\tthis.dispatchEvent(this.opts.activateEvent);\n\t\t}\n\t}\n\n\t/**\n\t * Deactivates the dropdown and fires the callback/event\n\t *\n\t * @param {Object} e - passed along to the callback/event as detail\n\t */\n\tdeactivate(e = {}) {\n\t\tthis.active = false;\n\n\t\tif (typeof this.leaveTimeout === 'number') {\n\t\t\twindow.clearTimeout(this.leaveTimeout);\n\t\t\tthis.leaveTimeout = null;\n\t\t}\n\n\t\tif (typeof this.opts.deactivate === 'function') {\n\t\t\tthis.opts.deactivate.call(this.node, e);\n\t\t}\n\n\t\tif (typeof this.opts.deactivateEvent === 'string') {\n\t\t\tthis.dispatchEvent(this.opts.deactivateEvent);\n\t\t}\n\t}\n\n\tdispatchEvent(eventName, node = this.node) {\n\t\tlet event;\n\t\tif (typeof window.Event === 'function') {\n\t\t\tevent = new Event(eventName);\n\t\t} else {\n\t\t\tevent = document.createEvent('Event');\n\t\t\tevent.initEvent(eventName, true, false);\n\t\t}\n\n\t\tnode.dispatchEvent(event);\n\t}\n}\n\n/**\n * This is a factory for the DropdownEvent class that supports nodelists/arrays/selectors\n *\n * @param {HTMLElement|String|NodeList|Array} node\n * @param {opts} opts - see DropdownEvent\n * @return mixed DropdownEvent|Array|false\n *\n * @uses DropdownEvent\n * @uses Array.from\n * @uses Array.isArray\n */\nexport function dropdownEvent(node, opts = {}) {\n\tif (node instanceof HTMLElement) {\n\t\treturn new DropdownEvent(node, opts);\n\t}\n\n\tconst nodes = (typeof node === 'string') ? Array.from(document.querySelectorAll(node)) : (node.length) ? Array.from(node) : [];\n\n\tif (Array.isArray(nodes)) {\n\t\treturn nodes.map((n) => new DropdownEvent(n, opts));\n\t}\n\n\treturn false;\n}\n\n/**\n * Add a jQuery function for those who prefer that way\n */\nif (typeof window.jQuery === 'function') {\n\twindow.jQuery.fn.dropdownEvent = function(opts) {\n\t\treturn this.each(function() {\n\t\t\tconst $this = window.jQuery(this);\n\t\t\t$this.data('dropdownEvent', new DropdownEvent(this, opts));\n\t\t});\n\t};\n}\n\nexport default dropdownEvent;\n","export function children( node, selector = null ) {\n\tlet children = Array.from( node.children );\n\n\tif ( selector ) {\n\t\tchildren = children.filter( child => child.matches( selector ) );\n\t}\n\n\treturn children;\n}\n\nexport function focusable( node ) {\n\tconst focusableNode = node.querySelector( [\n\t\t'a[href]',\n\t\t'[contenteditable]',\n\t\t'input:not([disabled])',\n\t\t'select:not([disabled])',\n\t\t'button:not([disabled])',\n\t\t'textarea:not([disabled])',\n\t\t'[tabIndex]:not([tabIndex=\"-1\"])',\n\t].join(', ') );\n\n\tif ( focusableNode ) {\n\t\tfocusableNode.focus();\n\t}\n\n\treturn focusableNode;\n}\n","import Headroom from 'headroom.js';\nimport dropdownEvent from '../base/_dropdownEvent.js';\n\nexport default class Masthead {\n\tconstructor( node = '.masthead' ) {\n\t\tthis.node = typeof node === 'string' ? document.querySelector( node ) : node;\n\n\t\tif ( ! this.node instanceof HTMLElement ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.menu = this.node.querySelector('.masthead__menu');\n\t\tthis.items = this.node.querySelector('.masthead__items');\n\t\tthis.back = this.node.querySelector('.masthead__back');\n\t\tthis.searchToggler = this.node.querySelector('.masthead__search-toggler');\n\t\tthis.search = this.node.querySelector('.masthead__search');\n\t\tthis.searchInput = this.search.querySelector('.masthead__search-input');\n\t\tthis.searchForm = this.search.querySelector('.masthead__search-form');\n\t\tthis.searchCloser = this.search.querySelector('.masthead__search-closer');\n\t\tthis.searchOpenClass = 'masthead__search--opened';\n\t\tthis.opened = false;\n\n\t\t// headroom\n\t\tthis.headroom = new Headroom(\n\t\t\tthis.node,\n\t\t\t{\n\t\t\t\ttolerance: {\n\t\t\t\t\tup: 7,\n\t\t\t\t\tdown: 5\n\t\t\t\t},\n\t\t\t\tclasses: {\n\t\t\t\t\tinitial : 'masthead',\n\t\t\t\t\tpinned : 'masthead--pinned',\n\t\t\t\t\tunpinned : 'masthead--unpinned',\n\t\t\t\t\ttop : 'masthead--top',\n\t\t\t\t\tnotTop : 'masthead--not-top',\n\t\t\t\t\tbottom : 'masthead--bottom',\n\t\t\t\t\tnotBottom: 'masthead--not-bottom',\n\t\t\t\t\tfrozen : 'masthead--frozen',\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\tthis.headroom.init();\n\t\tthis.headroom.update(this.headroom);\n\n\t\t// dropdowns\n\t\tconst intentActivate = (e) => {\n\t\t\tif ( this.isDesktop() ) {\n\t\t\t\te.target.classList.add( 'masthead__item--active' );\n\n\t\t\t\tconst mega = e.target.querySelector('.masthead__mega');\n\n\t\t\t\tif ( mega ) {\n\t\t\t\t\tmega.classList.add('masthead__mega--active');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst intentDeactivate = (e) => {\n\t\t\tif ( this.isDesktop() ) {\n\t\t\t\te.target.classList.remove( 'masthead__item--active' );\n\n\t\t\t\tconst mega = e.target.querySelector('.masthead__mega');\n\n\t\t\t\tif ( mega ) {\n\t\t\t\t\tmega.classList.remove('masthead__mega--active');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst mobileActivate = (e) => {\n\t\t\tif ( this.isDesktop() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( ! e.target.matches( '.masthead__item--mega > .masthead__link' ) && ! e.target.closest( '.masthead__item--mega > .masthead__link' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t\te.target.closest('.masthead__item--mega').querySelector('.masthead__mega').classList.add('masthead__mega--active');\n\t\t\tthis.back.classList.add( 'masthead__back--active' );\n\t\t\tthis.items.classList.add( 'masthead__items--active' );\n\t\t}\n\n\t\tthis.node.querySelectorAll( '.masthead__item--mega' ).forEach( node => {\n\t\t\tdropdownEvent( node );\n\n\t\t\tnode.addEventListener( 'click', mobileActivate );\n\t\t\tnode.addEventListener( 'dropdown:activate', intentActivate );\n\t\t\tnode.addEventListener( 'dropdown:deactivate', intentDeactivate );\n\t\t} );\n\n\t\tthis.back.addEventListener( 'click', (e) => {\n\t\t\tif ( ! this.isDesktop() ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.back.classList.remove( 'masthead__back--active' );\n\t\t\t\tthis.items.classList.remove( 'masthead__items--active' );\n\t\t\t\tthis.node.querySelectorAll('.masthead__mega--active').forEach( n => n.classList.remove('masthead__mega--active') );\n\t\t\t}\n\t\t});\n\n\t\t// search\n\t\tthis.searchToggler.addEventListener( 'click', (e) => {\n\t\t\te.preventDefault();\n\n\t\t\tif ( this.node.classList.contains( 'masthead--search-open' ) ) {\n\t\t\t\tthis.close();\n\t\t\t\tthis.node.classList.remove( 'masthead--search-open' );\n\t\t\t} else {\n\t\t\t\tthis.open();\n\t\t\t\tthis.node.classList.toggle( 'masthead--search-open' );\n\t\t\t}\n\t\t} );\n\n\t\t// menu\n\t\tthis.menu.addEventListener('click', (e) => {\n\t\t\te.preventDefault();\n\n\t\t\tif ( this.node.classList.contains( 'masthead--search-open' ) ) {\n\t\t\t\tthis.node.classList.remove( 'masthead--search-open' );\n\t\t\t} else {\n\t\t\t\tthis.toggle();\n\t\t\t}\n\t\t});\n\n\t\t// animate the masthead in when it's immersive\n\t\tif ( this.node.classList.contains( 'masthead--immersive' ) ) {\n\t\t\tsetTimeout( () => this.node.classList.add( 'masthead--immersive-in' ), 1750 );\n\t\t}\n\t}\n\n\tisDesktop() {\n\t\treturn window.matchMedia( '(min-width:62em)' ).matches ? true : false;\n\t}\n\n\topen() {\n\t\tthis.node.classList.add( 'masthead--menu-open' );\n\t\tdocument.body.classList.add( 'masthead-fixed' );\n\t\tthis.opened = true;\n\t}\n\n\tclose() {\n\t\tthis.node.classList.remove( 'masthead--menu-open' );\n\t\tdocument.body.classList.remove( 'masthead-fixed' );\n\t\tthis.opened = false;\n\t}\n\n\ttoggle() {\n\t\treturn this.opened ? this.close() : this.open();\n\t}\n}\n","export default class SectionNav {\n\tconstructor() {\n\n\t\tdocument.addEventListener( 'DOMContentLoaded', this.ready() );\n\t}\n\n\tready() {\n\t\tconst node = document.querySelector('.section-nav');\n\t\tthis.node = node;\n\n\t\tif (!node) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.opts = {\n\t\t\tprev: node.querySelector('.section-nav__link--prev'),\n\t\t\tnext: node.querySelector('.section-nav__link--next'),\n\t\t\tlink: node.querySelector('.section-nav__link'),\n\t\t\t// container: node.querySelector('.section-nav__inner'),\n\t\t\tcontainer: node.querySelector('.section-nav__body'),\n\t\t\tnavs: node.querySelectorAll('.section-nav__nav'),\n\t\t\tprimaryNav: document.querySelector('.masthead'),\n\t\t\tlistPadding: 100,\n\t\t\tclasses: {\n\t\t\t\tnavActive: 'section-nav__nav--active',\n\t\t\t\tpinned: 'section-nav--pinned',\n\t\t\t\tactiveLink: 'section-nav__link--active',\n\t\t\t\tanimationActive: 'animated-block--active'\n\t\t\t}\n\t\t};\n\n\t\tif(!this.opts.container) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.previousY = 0;\n\t\tthis.list = this.opts.container.querySelector('ul');\n\n\t\tif (!this.list) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.navStartPosition = 0;\n\t\tthis.touchPreviousX = 0;\n\t\tthis.passed = false;\n\t\tthis.buffer = 5;\n\n\t\tthis.opts.prev.addEventListener('mousedown', (event) => this.reverse(event));\n\t\tthis.opts.prev.addEventListener('touchstart', (event) => this.reverse(event));\n\n\t\tthis.opts.next.addEventListener('mousedown', (event) => this.forward(event));\n\t\tthis.opts.next.addEventListener('touchstart', (event) => this.forward(event));\n\n\t\tthis.opts.prev.addEventListener('mouseup', () => this.stop());\n\t\tthis.opts.prev.addEventListener('touchend', () => this.stop());\n\t\tthis.opts.prev.addEventListener('touchcancel', () => this.stop());\n\n\t\tthis.opts.next.addEventListener('mouseup', () => this.stop());\n\t\tthis.opts.next.addEventListener('touchend', () => this.stop());\n\t\tthis.opts.next.addEventListener('touchcancel', () => this.stop());\n\n\t\t// this.opts.container.addEventListener('touchmove', (event) => this.drag(event));\n\n\t\t// hide navigation arrows if not needed.\n\t\tthis.maybeHideNav();\n\t\taddEventListener('resize', () => this.maybeHideNav());\n\n\t\tthis.menuLinks = this.list.querySelectorAll('button');\n\t\tthis.menuLinks.forEach((link) => {\n\t\t\tlink.addEventListener('click', (event) => {\n\t\t\t\tconst panel = document.getElementById(event.target.dataset.href);\n\t\t\t\tpanel.scrollIntoView({\n\t\t\t\t\tbehavior: 'smooth',\n\t\t\t\t\tblock: 'center'\n\t\t\t\t});\n\t\t\t});\n\t\t})\n\t\tconst ids = [...this.menuLinks].map((button) => button.dataset.href);\n\t\tconst sectionIds = [...ids].filter((id) => document.getElementById(id));\n\t\tconst sections = sectionIds.map((id) => document.getElementById(id));\n\t\tthis.observers = {\n\t\t\tsectionNavInView: new IntersectionObserver(\n\t\t\t\t(entries) => this.sectionNavInView(entries),\n\t\t\t\t{\n\t\t\t\t\tthreshold: [0.1, 0.13, 0.14, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.99, 1],\n\t\t\t\t}\n\t\t\t),\n\t\t\tsectionInView: new IntersectionObserver(\n\t\t\t\t(entries) => this.sectionInView(entries),\n\t\t\t\t{\n\t\t\t\t\tthreshold: 1,\n\t\t\t\t}\n\t\t\t),\n\t\t};\n\n\t\tsections.forEach((section) => {\n\t\t\tthis.observers.sectionInView.observe(section);\n\t\t});\n\n\t\tthis.observers.sectionNavInView.observe(this.node);\n\n\t\t// trigger reveal animation.\n\t\tsetTimeout( () => {\n\t\t\tthis.node.classList.add(this.opts.classes.animationActive);\n\t\t}, 1750);\n\t}\n\n\tsectionInView(entries) {\n\n\t\tentries.forEach((entry) => {\n\t\t\tconst matchingLink = this.list.querySelector(`[data-href=\"${entry.target.id}\"]`);\n\t\t\tif (entry.isIntersecting) {\n\t\t\t\tif (!matchingLink) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.menuLinks.forEach((link) => {\n\t\t\t\t\tlink.classList.remove(this.opts.classes.activeLink);\n\t\t\t\t});\n\t\t\t\tmatchingLink.classList.add(this.opts.classes.activeLink);\n\t\t\t} else {\n\t\t\t\tmatchingLink.classList.remove(this.opts.classes.activeLink);\n\t\t\t}\n\t\t});\n\t}\n\n\tshow() {\n\t\tthis.opts.primaryNav.style.setProperty('transform', 'translateY(-100%)');\n\t\tthis.node.classList.add(this.opts.classes.pinned);\n\t}\n\n\thide() {\n\t\tthis.node.classList.remove(this.opts.classes.pinned);\n\t\tthis.opts.primaryNav.style.setProperty('transform', 'translateY(0)');\n\t}\n\n\tsectionNavInView(entries) {\n\n\t\tentries.forEach((entry) => {\n\n\t\t\tif ( entry.isIntersecting ) {\n\t\t\t\tthis.interval = setInterval(() => {\n\n\t\t\t\t\tconst distanceFromTopOfViewport = this.node.getBoundingClientRect().y;\n\n\t\t\t\t\tif ( window.scrollY < this.previousY) {\n\t\t\t\t\t\tthis.hide();\n\n\t\t\t\t\t} else if (distanceFromTopOfViewport < this.buffer && window.scrollY > this.previousY ) {\n\t\t\t\t\t\tif (!this.navStartPosition) {\n\t\t\t\t\t\t\tthis.navStartPosition = window.scrollY;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.show();\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this.navStartPosition ) {\n\t\t\t\t\t\tif (window.scrollY - this.navStartPosition <= this.buffer) {\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.previousY = window.scrollY;\n\t\t\t\t}, 333);\n\n\t\t\t} else {\n\t\t\t\twindow.onscroll = false;\n\t\t\t\tclearInterval(this.interval);\n\t\t\t}\n\t\t});\n\t}\n\n\tmaybeHideNav() {\n\n\t\tif (this.list.offsetWidth - this.opts.listPadding > this.opts.container.offsetWidth) {\n\t\t\t[ ...this.opts.navs].forEach((nav) => nav.classList.add(this.opts.classes.navActive));\n\t\t} else {\n\t\t\t[ ...this.opts.navs].forEach((nav) => nav.classList.remove(this.opts.classes.navActive));\n\t\t}\n\t}\n\n\treverse() {\n\t\tthis.interval = setInterval( () => {\n\t\t\tthis.opts.container.scrollLeft -= 10;\n\t\t\tif (this.opts.container.scrollLeft <= 5) {\n\t\t\t\tthis.stop();\n\t\t\t}\n\t\t}, 10);\n\t\tthis.maybeDisable();\n\t}\n\n\tforward() {\n\t\tthis.interval = setInterval( () => {\n\t\t\tthis.opts.container.scrollLeft += 3;\n\t\t}, 5);\n\t\tthis.opts.prev.disabled = false;\n\t\tthis.maybeDisable();\n\t}\n\n\tstop() {\n\t\tclearInterval( this.interval );\n\t\tthis.maybeDisable();\n\t}\n\n\tmaybeDisable() {\n\t\tconst scrollLeft = this.opts.container.scrollLeft;\n\n\t\t// reached beginning of list\n\t\tif ( scrollLeft <= 30 ) {\n\t\t\tthis.opts.prev.disabled = true;\n\t\t\tthis.opts.next.disabled = false;\n\t\t} else {\n\t\t\tthis.opts.prev.disabled = false;\n\t\t}\n\t}\n}\n\n\n","/**\n * Basic dom node selector\n *\n * @param {String|Array|NodeList|HTMLElement} selector what nodes to select\n * @returns {Array[HTMLElement]}\n */\nexport function select( selector ) {\n\tlet nodes = [];\n\n\tif ( Array.isArray( selector ) ) {\n\t\tnodes = selector;\n\t} else if ( selector instanceof NodeList ) {\n\t\tnodes = Array.from( selector );\n\t} else if ( selector instanceof HTMLElement ) {\n\t\tnodes = [ selector ];\n\t} else if ( typeof selector === 'string' ) {\n\t\tnodes = Array.from( document.querySelectorAll( selector ) );\n\t} else {\n\t\tconsole.error( \"Invalid node selector\", selector );\n\t}\n\n\tnodes = nodes.filter( node => node instanceof HTMLElement );\n\n\treturn nodes;\n}\n\n/**\n * Observe an elements scroll position and resolve a promise after it's passed it's threshold visibility\n *\n * @param {HTMLElement} node the element to observe it's scroll position\n * @param {Object} opts\n * @returns {Promise}\n */\nexport function observe( node, opts = { threshold: 50 } ) {\n\treturn new Promise(( resolve, reject ) => {\n\t\tlet threshold = parseFloat( opts.threshold );\n\n\t\tif ( isNaN( threshold ) ) {\n\t\t\tthreshold = 50;\n\t\t}\n\n\t\tthreshold = Math.min( 100, Math.max( 0, threshold ) ) / 100;\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tentries.forEach( entry => {\n\t\t\t\t\tif ( entry.isIntersecting ) {\n\t\t\t\t\t\tresolve( entry );\n\t\t\t\t\t\tobserver.disconnect();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\t{\n\t\t\t\tthreshold,\n\t\t\t}\n\t\t);\n\n\t\tobserver.observe( node );\n\t});\n}\n\n/**\n * Normalize a duration variable that defaults to ms without a time unit\n *\n * @param {Number|String} duration\n * @returns {String}\n */\nexport function parseDuration( duration ) {\n\tif ( Number.isInteger( duration ) || ! isNaN( parseFloat( duration ) ) ) {\n\t\treturn `${duration}ms`;\n\t}\n\n\treturn duration;\n}\n\n","import { select, observe } from './_util.js';\n\nclass Lines {\n\tconstructor( node, opts = {} ) {\n\t\tthis.node = node;\n\t\tthis.opts = {\n\t\t\tdelay: 1,\n\t\t\tduration: null,\n\t\t\tinterval: 125,\n\t\t\tthreshold: 50,\n\t\t\t...opts\n\t\t}\n\n\t\tthis.node.classList.add( 'animated-lines' );\n\n\t\tthis.words = this.node.textContent.split( ' ' );\n\t\tthis.wordQueue = [];\n\n\t\tthis.placeholder = document.createElement( 'span' );\n\t\tthis.placeholder.classList.add( 'animated-lines__placeholder' );\n\n\t\tArray.from( this.node.childNodes ).forEach( childNode => this.placeholder.appendChild( childNode ) );\n\t\tthis.node.appendChild( this.placeholder );\n\n\t\tconst computedStyle = getComputedStyle( this.node );\n\n\t\tthis.lines = document.createElement('span');\n\t\tthis.lines.classList.add( 'animated-lines__lines' );\n\t\tthis.lines.setAttribute( 'aria-hidden', true );\n\n\t\t[\n\t\t\t'paddingTop',\n\t\t\t'paddingBottom',\n\t\t\t'borderTopWidth',\n\t\t\t'borderBottomWidth',\n\t\t].forEach( prop => {\n\t\t\tif ( parseInt( computedStyle[ prop ], 10 ) > 0 ) {\n\t\t\t\tthis.lines.style[ prop ] = computedStyle[ prop ];\n\t\t\t}\n\t\t} );\n\n\t\tthis.node.appendChild( this.lines );\n\n\t\tobserve( this.node, { threshold: this.opts.threshold } ).then( () => {\n\t\t\tthis.prepare().then( () => {\n\t\t\t\tsetTimeout( () => this.animate(), this.opts.delay );\n\t\t\t} );\n\t\t} );\n\t}\n\n\tlineItems() {\n\t\treturn this.node.querySelectorAll('.animated-lines__line');\n\t}\n\n\tprepare() {\n\t\tconst wordQueue = [ ...this.words ];\n\n\t\t// empty the lines node\n\t\twhile ( this.lines.firstChild ) {\n\t\t\tthis.lines.removeChild( this.lines.firstChild );\n\t\t}\n\n\t\tconst processWords = () => {\n\t\t\treturn new Promise(( resolve, reject ) => {\n\t\t\t\tconst word = wordQueue.shift();\n\n\t\t\t\tconst wordNode = document.createElement( 'span' );\n\t\t\t\twordNode.classList.add( 'animated-lines__word' );\n\t\t\t\twordNode.appendChild( document.createTextNode( word ) );\n\n\t\t\t\t// add a slight delay to the measurements so they're more accurate\n\t\t\t\tsetTimeout( () => {\n\t\t\t\t\tif ( ! this.lines.lastElementChild ) {\n\t\t\t\t\t\tthis.appendLine();\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.lines.lastElementChild.appendChild( document.createTextNode( ' ' ) );\n\t\t\t\t\tthis.lines.lastElementChild.appendChild( wordNode );\n\n\t\t\t\t\t// append each word to a 'line' and if the offsetTop doesn't match the previous word, move it to the next 'line'\n\t\t\t\t\tif ( wordNode.offsetParent && wordNode.offsetLeft + wordNode.offsetWidth > wordNode.offsetParent.offsetWidth ) {\n\t\t\t\t\t\tthis.appendLine();\n\t\t\t\t\t\tthis.lines.lastElementChild.appendChild( wordNode );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( wordQueue.length ) {\n\t\t\t\t\t\tresolve( processWords() );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}\n\t\t\t\t}, 1);\n\t\t\t});\n\t\t}\n\n\t\treturn processWords();\n\t}\n\n\tappendLine() {\n\t\tconst newLine = document.createElement( 'span' );\n\t\tnewLine.classList.add( 'animated-lines__line' );\n\t\tthis.lines.appendChild( newLine );\n\t}\n\n\treset() {\n\t\tconst linesNode = this.node.querySelector( '.animated-lines__lines' );\n\n\t\tif ( linesNode ) {\n\t\t\tlinesNode.parentNode.removeChild( linesNode );\n\t\t}\n\n\t\tif ( this.placeholder && this.placeholder.parentNode ) {\n\t\t\tthis.placeholder.childNodes.forEach( childNode => this.node.appendChild( childNode ) );\n\t\t\tthis.placeholder.parentNode.removeChild( this.placeholder );\n\t\t}\n\n\t\tthis.node.classList.remove( 'animated-lines' );\n\n\t\tthis.node.dataset.animated = true;\n\n\t\treturn this;\n\t}\n\n\tanimate() {\n\t\treturn new Promise( ( resolve ) => {\n\t\t\tthis.lineItems().forEach( ( line, lineIndex, lines ) => {\n\t\t\t\tsetTimeout(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tline.classList.add( 'animated-lines__line--active' );\n\n\t\t\t\t\t\tif ( lineIndex === lines.length - 1 ) {\n\t\t\t\t\t\t\tlet duration = this.opts.duration;\n\n\t\t\t\t\t\t\tif ( ! duration ) {\n\t\t\t\t\t\t\t\tduration = parseFloat( getComputedStyle( line ).animationDuration ) * 1000;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tsetTimeout( () => resolve( this.reset() ), duration * 2 );\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tthis.opts.interval * ( lineIndex + 1 )\n\t\t\t\t);\n\t\t\t} );\n\t\t});\n\t}\n}\n\n/**\n * Animate each line of a textNode in individually\n *\n * @param {String|Array|NodeList|HTMLElement} selector\n * @param {Object} opts\n * @returns {Array}\n */\nexport function lines( selector, opts = {} ) {\n\treturn select( selector ).map( node => new Lines( node, opts ) );\n}\n","import { select, observe, parseDuration } from './_util.js';\n\n/**\n * Parse text nodes and wrap each word with a span\n *\n * @param {HTMLElement} node\n */\nfunction prepare( node ) {\n\tnode.classList.add( 'animated-words' );\n\tnode.childNodes.forEach( child => {\n\t\tswitch ( child.nodeType ) {\n\t\t\tcase 3: // Text\n\t\t\t\tconst masks = child.textContent.split( ' ' ).reduce(\n\t\t\t\t\t( masks, word, wordIndex ) => {\n\t\t\t\t\t\tif ( wordIndex > 0 ) {\n\t\t\t\t\t\t\tmasks.push( document.createTextNode( ' ' ) );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst mask = document.createElement( 'span' );\n\t\t\t\t\t\tmask.classList.add( 'animated-words__mask' );\n\n\t\t\t\t\t\tconst wordNode = document.createElement( 'span' );\n\t\t\t\t\t\twordNode.classList.add( 'animated-words__word' );\n\t\t\t\t\t\twordNode.appendChild( document.createTextNode( word ) );\n\n\t\t\t\t\t\tmask.appendChild( wordNode );\n\t\t\t\t\t\tmasks.push( mask );\n\n\t\t\t\t\t\treturn masks;\n\t\t\t\t\t},\n\t\t\t\t\t[]\n\t\t\t\t);\n\n\t\t\t\tnode.removeChild( child );\n\t\t\t\tmasks.forEach( mask => node.appendChild( mask ) );\n\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tprepareWordsNode( child );\n\t\t\tbreak;\n\t\t}\n\t} );\n}\n\n/**\n * Animate each word of a node in individually\n *\n * @param {String|Array|NodeList|HTMLElement} selector\n * @param {Object} opts\n * @returns {Array}\n */\nexport function words( selector, opts = {} ) {\n\topts = {\n\t\tdelay: 200,\n\t\tinterval: 100,\n\t\tduration: null,\n\t\tthreshold: 50,\n\t\t...opts\n\t};\n\n\treturn select( selector ).map( ( node ) => {\n\t\tprepare( node );\n\n\t\tconst words = node.querySelectorAll( '.animated-words__word' );\n\n\t\tif ( opts.duration ) {\n\t\t\topts.duration = parseDuration( opts.duration );\n\t\t\twords.forEach( word => word.style.animationDuration = opts.duration );\n\t\t}\n\n\t\treturn observe( node, { threshold: opts.threshold } ).then( () => {\n\t\t\tsetTimeout(\n\t\t\t\t() => {\n\t\t\t\t\twords.forEach( ( word, i ) => {\n\t\t\t\t\t\tsetTimeout(\n\t\t\t\t\t\t\t() => word.classList.add( 'animated-words__word--visible' ),\n\t\t\t\t\t\t\topts.interval * ( i + 1 )\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t},\n\t\t\t\topts.delay\n\t\t\t)\n\t\t} );\n\t} );\n}\n","import { select, observe, parseDuration } from './_util.js';\n\n/**\n * Parse text nodes and wrap each letter with a span\n *\n * @param {HTMLElement} node\n */\nfunction prepare( node ) {\n\tnode.classList.add( 'animated-letters' );\n\tnode.childNodes.forEach( child => {\n\t\tswitch ( child.nodeType ) {\n\t\t\tcase 3: // Text\n\t\t\t\tconst masks = child.textContent.split( ' ' ).reduce(\n\t\t\t\t\t( masks, word, wordIndex ) => {\n\t\t\t\t\t\tif ( wordIndex > 0 ) {\n\t\t\t\t\t\t\tmasks.push( document.createTextNode( ' ' ) );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst wordNode = document.createElement('span');\n\t\t\t\t\t\twordNode.classList.add( 'animated-letters__word' );\n\n\t\t\t\t\t\tword.split( '' ).forEach( letter => {\n\t\t\t\t\t\t\tconst mask = document.createElement( 'span' );\n\t\t\t\t\t\t\tmask.classList.add( 'animated-letters__mask' );\n\n\t\t\t\t\t\t\tconst letterNode = document.createElement( 'span' );\n\t\t\t\t\t\t\tletterNode.classList.add( 'animated-letters__letter' );\n\t\t\t\t\t\t\tletterNode.appendChild( document.createTextNode( letter ) );\n\n\t\t\t\t\t\t\tmask.appendChild( letterNode );\n\t\t\t\t\t\t\twordNode.appendChild( mask );\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tmasks.push( wordNode );\n\n\t\t\t\t\t\treturn masks;\n\t\t\t\t\t},\n\t\t\t\t\t[]\n\t\t\t\t);\n\n\t\t\t\tnode.removeChild( child );\n\t\t\t\tmasks.forEach( mask => node.appendChild( mask ) );\n\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tprepare( child );\n\t\t\tbreak;\n\t\t}\n\t} );\n}\n\n/**\n * Animate each letter of a node in individually\n *\n * @param {String|Array|NodeList|HTMLElement} selector\n * @param {Object} opts\n * @returns {Array}\n */\nexport function letters( selector, opts = {} ) {\n\topts = {\n\t\tdelay: 100,\n\t\tinterval: 50,\n\t\tduration: null,\n\t\tthreshold: 50,\n\t\t...opts\n\t};\n\n\treturn select( selector ).forEach( ( node ) => {\n\t\tprepare( node );\n\n\t\tconst letters = node.querySelectorAll( '.animated-letters__letter' );\n\n\t\tif ( opts.duration ) {\n\t\t\topts.duration = parseDuration( opts.duration );\n\t\t\tletters.forEach( letter => letter.style.animationDuration = opts.duration );\n\t\t}\n\n\t\tobserve( node, { threshold: opts.threshold } ).then( () => {\n\t\t\tsetTimeout(\n\t\t\t\t() => {\n\t\t\t\t\tletters.forEach( ( word, i ) => {\n\t\t\t\t\t\tsetTimeout(\n\t\t\t\t\t\t\t() => word.classList.add( 'animated-letters__letter--visible' ),\n\t\t\t\t\t\t\topts.interval * ( i + 1 )\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t},\n\t\t\t\topts.delay\n\t\t\t)\n\t\t} );\n\t} );\n}\n","import { select, observe } from './animations/_util.js';\nimport { lines } from './animations/_lines.js';\nimport { words } from './animations/_words.js';\nimport { block } from './animations/_block.js';\nimport { kenBurns } from './animations/_ken-burns.js';\nimport { letters } from './animations/_letters.js';\nimport { image } from './animations/_image.js';\nimport { fade } from './animations/_fade.js';\nimport { scale } from './animations/_scale.js';\nimport { reveal } from './animations/_reveal.js';\n\n/**\n * Auto animate a node based on it's data attributes\n *\n * @param {HTMLElement} node\n * @param {object} opts\n * @returns {HTMLElement}\n */\nfunction animate( node, opts = {} ) {\n\tif ( ! node.dataset.animation ) {\n\t\treturn;\n\t}\n\n\tif ( ! opts.delay && node.dataset.animationDelay ) {\n\t\topts.delay = node.dataset.animationDelay;\n\t}\n\n\tif ( ! opts.duration && node.dataset.animationDuration ) {\n\t\topts.duration = node.dataset.animationDuration;\n\t}\n\n\tif ( ! opts.threshold && node.dataset.animationThreshold ) {\n\t\topts.threshold = node.dataset.animationThreshold;\n\t}\n\n\tswitch ( node.dataset.animation ) {\n\t\tcase 'ken-burns':\n\t\t\tkenBurns( node, opts );\n\t\tbreak;\n\t\tcase 'lines':\n\t\t\tlines( node, opts );\n\t\tbreak;\n\t\tcase 'letters':\n\t\t\tletters( node, opts );\n\t\tbreak;\n\t\tcase 'words':\n\t\t\twords( node, opts );\n\t\tbreak;\n\t\tcase 'image':\n\t\t\timage( node, opts );\n\t\tbreak;\n\t\tcase 'block':\n\t\t\tblock( node, opts );\n\t\tbreak;\n\t\tcase 'fade':\n\t\t\tfade( node, opts );\n\t\tbreak;\n\t\tcase 'scale':\n\t\t\tscale( node, opts );\n\t\tbreak;\n\t\tcase 'reveal':\n\t\t\treveal( node, opts );\n\t\tbreak;\n\t}\n\n\n\treturn node;\n}\n\nexport {\n\tanimate,\n\tblock,\n\tkenBurns,\n\tletters,\n\tlines,\n\tobserve,\n\tselect,\n\twords,\n\timage,\n\tscale,\n\tfade,\n\treveal,\n}\n","import { select, observe, parseDuration } from './_util.js';\n\n/**\n * Add a ken burns animation effect to an image when visible\n *\n * @param {String|Array|NodeList|HTMLElement} selector this is the figure or wrapping node that contains an image\n * @param {object} opts\n * @returns {Array}\n */\nexport function kenBurns( selector, opts = {} ) {\n\treturn select( selector ).forEach( ( node ) => {\n\t\tnode.classList.add( 'animated-ken-burns' );\n\n\t\tif ( opts.duration ) {\n\t\t\tnode.style.animationDuration = parseDuration( opts.duration );\n\t\t}\n\n\t\tobserve( node, { threshold: opts.threshold } ).then( () => setTimeout( () => node.classList.add( 'animated-ken-burns--active' ), opts.delay ) );\n\t} );\n}\n","import { select, observe, parseDuration } from './_util.js';\n\n/**\n * Animate an image using the slide up color wash\n *\n * @param {String|Array|NodeList|HTMLElement} selector\n * @param {object} opts\n * @returns {Array}\n */\nexport function image( selector, opts = {} ) {\n\topts = {\n\t\tdelay: 1,\n\t\tduration: null,\n\t\t...opts\n\t}\n\n\treturn select( selector ).forEach( ( node ) => {\n\t\tnode.classList.add( 'animated-image' );\n\n\t\tlet wash = node.querySelector( '.animated-image__wash' );\n\n\t\tif ( ! wash ) {\n\t\t\twash = document.createElement( 'div' );\n\t\t\twash.classList.add( 'animated-image__wash' );\n\t\t\tnode.appendChild( wash );\n\t\t}\n\n\t\tif ( opts.duration ) {\n\t\t\tnode.style.animationDuration = parseDuration( opts.duration );\n\t\t}\n\n\t\tobserve( node ).then( () => setTimeout( () => node.classList.add( 'animated-image--active' ), opts.delay ) );\n\t} );\n}\n","import { select, observe, parseDuration } from './_util.js';\n\n/**\n * Reveal an entire block when visible\n *\n * @param {String|Array|NodeList|HTMLElement} selector\n * @param {object} opts\n * @returns {Array}\n */\nexport function block( selector, opts = {} ) {\n\topts = {\n\t\tdelay: 10,\n\t\tduration: null,\n\t\t...opts\n\t}\n\n\treturn select( selector ).forEach( ( node ) => {\n\t\tnode.classList.add('animated-block');\n\n\t\tif ( opts.duration ) {\n\t\t\tnode.style.animationDuration = parseDuration( opts.duration );\n\t\t}\n\n\t\tobserve( node ).then( () => setTimeout( () => node.classList.add('animated-block--active'), opts.delay ) );\n\t} );\n}\n","import { select, observe, parseDuration } from './_util.js';\n\n/**\n * Animate an image using the slide up color wash\n *\n * @param {String|Array|NodeList|HTMLElement} selector\n * @param {object} opts\n * @returns {Array}\n */\nexport function fade( selector, opts = {} ) {\n\topts = {\n\t\tdelay: 1,\n\t\tduration: null,\n\t\t...opts\n\t}\n\n\treturn select( selector ).forEach( ( node ) => {\n\t\tnode.classList.add( 'animated-fade' );\n\n\t\tif ( opts.duration ) {\n\t\t\tnode.style.animationDuration = parseDuration( opts.duration );\n\t\t}\n\n\t\tobserve( node ).then( () => setTimeout( () => node.classList.add( 'animated-fade--active' ), opts.delay ) );\n\t} );\n}\n","import { select, observe, parseDuration } from './_util.js';\n\n/**\n * Animate an image using the slide up color wash\n *\n * @param {String|Array|NodeList|HTMLElement} selector\n * @param {object} opts\n * @returns {Array}\n */\nexport function scale( selector, opts = {} ) {\n\topts = {\n\t\tdelay: 1,\n\t\tduration: null,\n\t\t...opts\n\t}\n\n\treturn select( selector ).forEach( ( node ) => {\n\t\tnode.classList.add( 'animated-scale' );\n\n\t\tif ( opts.duration ) {\n\t\t\tnode.style.animationDuration = parseDuration( opts.duration );\n\t\t}\n\n\t\tobserve( node ).then( () => setTimeout( () => node.classList.add( 'animated-scale--active' ), opts.delay ) );\n\t} );\n}\n","import { select, observe, parseDuration } from './_util.js';\n\n/**\n * Reveal an entire block when visible\n *\n * @param {String|Array|NodeList|HTMLElement} selector\n * @param {object} opts\n * @returns {Array}\n */\nexport function reveal( selector, opts = {} ) {\n\topts = {\n\t\tdelay: 10,\n\t\tduration: null,\n\t\t...opts\n\t}\n\n\treturn select( selector ).forEach( ( node ) => {\n\t\tnode.classList.add('animated-reveal');\n\n\t\tif ( opts.duration ) {\n\t\t\tnode.style.animationDuration = parseDuration( opts.duration );\n\t\t}\n\n\t\tif ( opts.threshold ) {\n\t\t\tnode.style.animationDuration = parseDuration( opts.threshold );\n\t\t}\n\n\t\tobserve( node ).then( () => setTimeout( () => node.classList.add('animated-reveal--active'), opts.delay ) );\n\t} );\n}\n","/**\n * IE11 Fix to convert object-fit: cover to background-size: cover\n *\n * @param {string|NodeList|Array} nodes\n * @param {string} img the img selector\n * @param {string} position the background position to use\n */\nexport default function objectFitCover( nodes = '.object-fit-cover', img = 'img', position = 'center' ) {\n\tif ( typeof nodes === 'string' ) {\n\t\tnodes = Array.from( document.querySelectorAll( nodes ) );\n\t}\n\n\tif ( ! nodes.length ) {\n\t\treturn;\n\t}\n\n\tfor ( let i = 0, nodesLength = nodes.length; i < nodesLength; i++ ) {\n\t\tlet imgNode = nodes[i].querySelector( img );\n\n\t\tif ( ! imgNode ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tnodes[i].style.backgroundPosition = position;\n\t\tnodes[i].style.backgroundSize = 'cover';\n\t\tnodes[i].style.backgroundImage = `url(${imgNode.currentSrc || imgNode.src})`;\n\t\timgNode.style.display = 'none';\n\t}\n}\n\nif ( document.readyState.match(/complete|loaded/) ) {\n\tobjectFitCover();\n} else {\n\tdocument.addEventListener('DOMContentLoaded', objectFitCover);\n}\n","function copyShareUrl(node) {\n\tconst url = node.dataset.href || window.location;\n\n\ttry {\n\t\tnavigator.clipboard.writeText( url );\n\n\t\tconst confirm = document.createElement('div');\n\t\tconfirm.classList.add('share__confirm');\n\t\tconfirm.appendChild( document.createTextNode( 'Copied!' ) );\n\n\t\tnode.classList.add('share__link--copied');\n\t\tnode.appendChild( confirm );\n\n\t\tsetTimeout( () => {\n\t\t\tnode.classList.remove('share__link--copied');\n\t\t\tconfirm.parentNode.removeChild( confirm );\n\t\t}, 4000 );\n\t} catch ( fault ) {\n\t\tconsole.error( fault );\n\t}\n}\n\nfunction init( selector = '.share__link--copy' ) {\n\tconst nodes = document.querySelectorAll(selector);\n\n\tnodes.forEach(node => node.addEventListener('click', (e) => {\n\t\te.preventDefault();\n\t\tcopyShareUrl(node);\n\t}));\n}\n\nexport default init();\n","class Announcement {\n\tconstructor( node ) {\n\t\tthis.node = node;\n\t\tthis.sessionStorageKey = `announcement${ this.node.dataset.key }`;\n\n\t\tif ( ! this.node || sessionStorage.getItem( this.sessionStorageKey ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.closer = this.node.querySelector( '.announcement__close' );\n\t\tthis.display = this.node.dataset.display || 'immediate';\n\t\tthis.delay = parseInt( this.node.dataset.delay, 10 ) || 8;\n\t\tthis.scroll = parseInt( this.node.dataset.scroll, 10 ) || 30;\n\n\t\tif ( 'immediate' === this.display ) {\n\t\t\tthis.open();\n\t\t} else if ( 'delay' === this.display ) {\n\t\t\tsetTimeout( () => this.open(), this.delay * 1000 );\n\t\t} else if ( 'scroll' === this.display ) {\n\t\t\tconst onScroll = () => {\n\t\t\t\tconst percentage = Math.round( document.documentElement.scrollTop / document.documentElement.scrollHeight * 100 );\n\n\t\t\t\tif ( percentage >= this.scroll ) {\n\t\t\t\t\tthis.open();\n\t\t\t\t\twindow.removeEventListener( 'scroll', onScroll );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twindow.addEventListener( 'scroll', onScroll );\n\t\t\tonScroll();\n\t\t}\n\n\t\tthis.closer.addEventListener( 'click', () => this.close() );\n\n\t\tthis.node.addEventListener( 'click', (e) => {\n\t\t\tlet node = e.target;\n\n\t\t\twhile ( node && node !== this.node ) {\n\t\t\t\tif ( node.matches( 'a' ) ) {\n\t\t\t\t\tthis.close();\n\t\t\t\t}\n\n\t\t\t\tnode = node.parentNode;\n\t\t\t}\n\t\t} );\n\n\t\t// if you've been on the page for a few seconds, you've seen the popup. No need to show again.\n\t\tsetTimeout(() => {\n\t\t\tconsole.log('Time limit reached. No longer showing Global or Premium Announcements.');\n\t\t\tsessionStorage.setItem( this.sessionStorageKey, '1');\n\t\t}, 7000);\n\t}\n\n\topen() {\n\t\tthis.node.removeAttribute( 'hidden' );\n\t\trequestAnimationFrame( () => requestAnimationFrame( () => this.node.classList.add( 'announcement--open' ) ) );\n\t}\n\n\tclose() {\n\t\tconst onTransitionEnd = () => {\n\t\t\tthis.node.removeEventListener( 'transitionend', onTransitionEnd );\n\t\t\tthis.node.parentNode.removeChild( this.node );\n\t\t}\n\n\t\tthis.node.addEventListener( 'transitionend', onTransitionEnd );\n\t\tthis.node.classList.remove( 'announcement--open' );\n\t\tsessionStorage.setItem( this.sessionStorageKey, '1');\n\t}\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n\tdocument.querySelectorAll('.announcements > .announcement').forEach( node => {\n\t\tnew Announcement( node );\n\t})\n});\n","import throttle from './base/_throttle.js';\nimport Masthead from './modules/_masthead.js';\nimport SectionNav from './modules/_section-nav.js';\nimport { animate } from './modules/_animations.js';\n\nimport './base/_share.js';\nimport './base/_object-fit-cover.js';\nimport fitvid from './base/_fitvid.js';\nimport './modules/_announcement.js';\n\nclass Scripts {\n\tconstructor() {\n\t\tdocument.addEventListener( 'DOMContentLoaded', this.ready.bind( this ) );\n\t\twindow.addEventListener( 'resize', throttle( this.resize.bind( this ), 25 ) );\n\t\tthis.resize();\n\t}\n\n\tready() {\n\t\tthis.sectionnav = new SectionNav();\n\t\tthis.masthead = new Masthead();\n\n\t\tthis.prepareFeaturedCaseStudy();\n\t\tdocument.querySelectorAll('[data-animation]').forEach( node => {\n\t\t\tanimate( node )\n\t\t});\n\n\t\tfitvid();\n\t}\n\n\tresize() {\n\t\tif ( ! document.body ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// using this to allow css to know if it should exclude the scroll bar in calc's\n\t\tif ( window.innerWidth === document.body.clientWidth ) {\n\t\t\tdocument.documentElement.classList.remove( 'has-scrollbar' );\n\t\t} else {\n\t\t\tdocument.documentElement.classList.add( 'has-scrollbar' );\n\t\t}\n\t}\n\n\tprepareFeaturedCaseStudy() {\n\t\tdocument.querySelectorAll('.featured-case-study').forEach( node => {\n\t\t\tconst heading = node.querySelector( '.featured-case-study__column-left .wp-block-heading:first-child' );\n\t\t\tconst excerpts = node.querySelectorAll( '.featured-case-study__column-left .excerpt' );\n\n\t\t\tif ( heading ) {\n\t\t\t\theading.dataset.animation = 'block';\n\t\t\t}\n\n\t\t\tlet animationCount = 0;\n\t\t\tconst animationDelay = 150;\n\n\t\t\texcerpts.forEach( excerpt => {\n\t\t\t\tconst image = excerpt.querySelector( '.excerpt__image' );\n\t\t\t\tconst types = excerpt.querySelector( '.excerpt__types' );\n\t\t\t\tconst title = excerpt.querySelector( '.excerpt__title a' );\n\t\t\t\tconst footer = excerpt.querySelector( '.excerpt__footer' );\n\n\t\t\t\tif ( image ) {\n\t\t\t\t\timage.dataset.animation = 'image';\n\t\t\t\t\timage.dataset.animationDelay = animationCount * animationDelay;\n\t\t\t\t\tanimationCount++;\n\t\t\t\t}\n\n\t\t\t\tif ( types ) {\n\t\t\t\t\ttypes.dataset.animation = 'block';\n\t\t\t\t\ttypes.dataset.animationDelay = animationCount * animationDelay;\n\t\t\t\t\tanimationCount++;\n\t\t\t\t}\n\n\t\t\t\tif ( title ) {\n\t\t\t\t\ttitle.dataset.animation = 'lines';\n\t\t\t\t\ttitle.dataset.animationDelay = animationCount * animationDelay;\n\t\t\t\t\tanimationCount++;\n\t\t\t\t}\n\n\t\t\t\tif ( footer ) {\n\t\t\t\t\tfooter.dataset.animation = 'block';\n\t\t\t\t\tfooter.dataset.animationDelay = animationCount * animationDelay;\n\t\t\t\t\tanimationCount++;\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n}\n\nexport default new Scripts;\n","export default function (fn, time = 50) {\n\tlet timer = null;\n\n\tfunction throttledFn(...args) {\n\t\tif (!timer) {\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tfn(...args);\n\t\t\t\ttimer = null;\n\t\t\t}, time)\n\t\t}\n\t}\n\n\tthrottledFn.cancel = () => {\n\t\tclearTimeout(timer);\n\t\ttimer = null;\n\t}\n\n\treturn throttledFn;\n}\n","/**\n * this implementation of fitvid doesn't force items to 16/9. It measures them and then keeps the ratio unique per embed\n *\n * @var selectors (string|array) additional selectors search for in the DOM\n * @return nodes - array of matched items\n */\n\nexport default function(selectors) {\n\tconst config = {\n\t\tselectors: [\n\t\t\t'iframe[src*=\"player.vimeo.com\"]',\n\t\t\t'iframe[src*=\"youtube.com\"]',\n\t\t\t'iframe[src*=\"youtube-nocookie.com\"]',\n\t\t\t'object',\n\t\t\t'embed'\n\t\t]\n\t};\n\n\tif ( selectors ) {\n\t\tif ( !Array.isArray(selectors) ) {\n\t\t\tselectors = [selectors];\n\t\t}\n\t\tconfig.selectors = config.selectors.concat(opts.selectors).filter(( val, index, arr ) => arr.indexOf(val) === index );\n\t}\n\tconst apply = document.querySelectorAll( config.selectors.join(',') );\n\n\t// do not apply fitvid to Tableau - create denylist if more exclusions are necessary.\n\tconst filtered = [...apply].filter((b) => ! b.classList.contains('tableauViz'));\n\n\tconst nodes = Array.prototype.slice.call( filtered );\n\n\tif ( nodes.length > 0 ) {\n\t\tnodes.forEach((node) => {\n\t\t\tif ( node.getAttribute('data-fitvid' ) || ( node.parentNode && node.parentNode.classList.contains( 'wp-block-embed__wrapper' ) ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst wrapper = document.createElement('div');\n\t\t\tconst computed = window.getComputedStyle(node);\n\t\t\tconst ratio = ( (computed.height > 0 && computed.width > 0) ? computed.height / computed.width : 9 / 16 ) * 100;\n\n\t\t\twrapper.className = 'fitvid';\n\t\t\twrapper.style.width = '100%';\n\t\t\twrapper.style.height = 0;\n\t\t\twrapper.style.position = 'relative';\n\t\t\twrapper.style.paddingTop = `${ratio}%`;\n\n\t\t\tnode.style.position = 'absolute';\n\t\t\tnode.style.top = 0;\n\t\t\tnode.style.left = 0;\n\t\t\tnode.style.width = '100%';\n\t\t\tnode.style.height = '100%';\n\t\t\tnode.setAttribute('data-fitvid', ratio);\n\t\t\tnode.parentNode.insertBefore(wrapper, node);\n\n\t\t\twrapper.appendChild(node);\n\t\t});\n\t}\n\n\treturn nodes;\n}\n"],"names":["exports","isBrowser","window","passiveEventsSupported","supported","options","passive","addEventListener","removeEventListener","err","isSupported","bind","document","documentElement","Object","assign","keys","requestAnimationFrame","isDocument","obj","nodeType","isWindow","windowScroller","win","doc","body","html","scrollHeight","Math","max","offsetHeight","clientHeight","height","innerHeight","scrollY","undefined","pageYOffset","parentNode","scrollTop","elementScroller","element","createScroller","trackScroll","callback","rafId","isPassiveSupported","scrolled","scroller","lastScrollY","details","update","round","direction","distance","abs","isOutOfBounds","top","offset","bottom","toleranceExceeded","tolerance","handleScroll","eventOptions","capture","destroy","cancelAnimationFrame","normalizeUpDown","t","down","up","Headroom","elem","this","classes","initialised","frozen","prototype","constructor","init","cutsTheMustard","addClass","setTimeout","self","scrollTracker","forEach","removeClass","unpin","hasClass","onUnpin","call","pin","onPin","freeze","unfreeze","onTop","notTop","onNotTop","onBottom","notBottom","onNotBottom","shouldUnpin","shouldPin","className","classList","add","apply","split","remove","every","cls","contains","pinned","unpinned","initial","factory","DropdownEvent","node","opts","delay","activate","deactivate","activateEvent","deactivateEvent","opt","hasOwnProperty","active","enterTimeout","leaveTimeout","preventClickEvent","e","preventDefault","stopPropagation","maybeActivate","focus","target","tagName","mouseenter","clearTimeout","mouseleave","touchstart","pointerenter","pointerType","pointerleave","PointerEvent","key","toLowerCase","blur","activeElement","focusableNode","querySelector","join","focusable","dispatchEvent","eventName","event","Event","createEvent","initEvent","jQuery","fn","dropdownEvent","each","data","Masthead","HTMLElement","menu","items","back","searchToggler","search","searchInput","searchForm","searchCloser","searchOpenClass","opened","headroom","intentActivate","isDesktop","mega","intentDeactivate","mobileActivate","matches","closest","querySelectorAll","nodes","Array","from","length","isArray","map","n","close","open","toggle","matchMedia","SectionNav","ready","prev","next","link","container","navs","primaryNav","listPadding","navActive","activeLink","animationActive","previousY","list","navStartPosition","touchPreviousX","passed","buffer","reverse","forward","stop","maybeHideNav","menuLinks","getElementById","dataset","href","scrollIntoView","behavior","block","sections","button","filter","id","observers","sectionNavInView","IntersectionObserver","entries","threshold","sectionInView","section","observe","entry","matchingLink","isIntersecting","show","style","setProperty","hide","interval","setInterval","distanceFromTopOfViewport","getBoundingClientRect","y","onscroll","clearInterval","offsetWidth","nav","scrollLeft","maybeDisable","disabled","select","selector","NodeList","console","error","Promise","resolve","reject","parseFloat","isNaN","min","observer","disconnect","parseDuration","duration","Number","isInteger","Lines","words","textContent","wordQueue","placeholder","createElement","childNodes","childNode","appendChild","computedStyle","getComputedStyle","lines","setAttribute","prop","parseInt","then","prepare","animate","lineItems","firstChild","removeChild","processWords","word","shift","wordNode","createTextNode","lastElementChild","appendLine","offsetParent","offsetLeft","newLine","reset","linesNode","animated","line","lineIndex","animationDuration","child","masks","reduce","wordIndex","push","mask","prepareWordsNode","i","letter","letterNode","letters","animation","animationDelay","animationThreshold","kenBurns","wash","image","fade","scale","reveal","objectFitCover","img","position","nodesLength","imgNode","backgroundPosition","backgroundSize","backgroundImage","currentSrc","src","display","url","location","navigator","clipboard","writeText","confirm","fault","copyShareUrl","readyState","match","Announcement","sessionStorageKey","sessionStorage","getItem","closer","scroll","onScroll","log","setItem","removeAttribute","onTransitionEnd","scripts","time","timer","throttledFn","args","cancel","throttle","resize","sectionnav","masthead","prepareFeaturedCaseStudy","selectors","config","concat","val","index","arr","indexOf","filtered","b","slice","getAttribute","wrapper","computed","ratio","width","paddingTop","left","insertBefore","fitvid","innerWidth","clientWidth","heading","excerpts","animationCount","excerpt","types","title","footer"],"mappings":"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","x_google_ignoreList":[0]}