(function enforceAnalyticsDelayGateEarly() { if (window.__p72AnalyticsDelayGateInstalled) { return; } window.__p72AnalyticsDelayGateInstalled = true; const ANALYTICS_DELAY_MS = 10000; const releaseAt = Date.now() + ANALYTICS_DELAY_MS; let gateOpen = false; const queuedScripts = []; const pendingScriptSrc = new WeakMap(); const pendingConnectedScripts = []; function isAnalyticsUrl(url) { if (!url) { return false; } try { const parsed = new URL(url, window.location.href); const host = parsed.hostname.toLowerCase(); return host === "www.googletagmanager.com" || host === "googletagmanager.com" || host === "www.google-analytics.com" || host === "google-analytics.com"; } catch (error) { return false; } } function queueScript(parent, node, referenceNode, mode) { queuedScripts.push({ parent, node, referenceNode, mode, }); } function rememberDeferredSrc(scriptNode, srcValue) { pendingScriptSrc.set(scriptNode, srcValue); if (scriptNode.isConnected) { pendingConnectedScripts.push(scriptNode); } } function getScriptSrc(scriptNode) { if (!scriptNode || scriptNode.tagName !== "SCRIPT") { return ""; } return pendingScriptSrc.get(scriptNode) || scriptNode.getAttribute("src") || scriptNode.src || ""; } const originalAppendChild = Node.prototype.appendChild; const originalInsertBefore = Node.prototype.insertBefore; const originalSetAttribute = Element.prototype.setAttribute; const originalScriptSrcDescriptor = Object.getOwnPropertyDescriptor(HTMLScriptElement.prototype, "src"); function applyPendingSrc(scriptNode) { if (!scriptNode || scriptNode.tagName !== "SCRIPT") { return; } const deferredSrc = pendingScriptSrc.get(scriptNode); if (!deferredSrc) { return; } pendingScriptSrc.delete(scriptNode); if (originalScriptSrcDescriptor && typeof originalScriptSrcDescriptor.set === "function") { originalScriptSrcDescriptor.set.call(scriptNode, deferredSrc); } else { originalSetAttribute.call(scriptNode, "src", deferredSrc); } } Node.prototype.appendChild = function patchedAppendChild(node) { const src = getScriptSrc(node); if (!gateOpen && src && isAnalyticsUrl(src)) { queueScript(this, node, null, "append"); return node; } return originalAppendChild.call(this, node); }; Node.prototype.insertBefore = function patchedInsertBefore(node, referenceNode) { const src = getScriptSrc(node); if (!gateOpen && src && isAnalyticsUrl(src)) { queueScript(this, node, referenceNode, "insert"); return node; } return originalInsertBefore.call(this, node, referenceNode); }; Element.prototype.setAttribute = function patchedSetAttribute(name, value) { if (!gateOpen && this.tagName === "SCRIPT" && typeof name === "string" && name.toLowerCase() === "src") { const src = String(value || ""); if (src && isAnalyticsUrl(src)) { rememberDeferredSrc(this, src); return; } } return originalSetAttribute.call(this, name, value); }; if (originalScriptSrcDescriptor && typeof originalScriptSrcDescriptor.get === "function" && typeof originalScriptSrcDescriptor.set === "function") { Object.defineProperty(HTMLScriptElement.prototype, "src", { configurable: true, enumerable: originalScriptSrcDescriptor.enumerable, get: function patchedScriptSrcGet() { if (pendingScriptSrc.has(this)) { return pendingScriptSrc.get(this); } return originalScriptSrcDescriptor.get.call(this); }, set: function patchedScriptSrcSet(value) { const src = String(value || ""); if (!gateOpen && src && isAnalyticsUrl(src)) { rememberDeferredSrc(this, src); return src; } pendingScriptSrc.delete(this); return originalScriptSrcDescriptor.set.call(this, src); }, }); } function flushQueuedScripts() { gateOpen = true; if (pendingConnectedScripts.length > 0) { const uniqueConnectedScripts = Array.from(new Set(pendingConnectedScripts)); uniqueConnectedScripts.forEach((scriptNode) => { try { applyPendingSrc(scriptNode); } catch (error) { // Ignore failures from stale nodes; other script paths may retry safely. } }); } while (queuedScripts.length > 0) { const item = queuedScripts.shift(); try { if (!item || !item.parent || !item.node) { continue; } applyPendingSrc(item.node); if (item.mode === "insert" && item.referenceNode && item.referenceNode.parentNode === item.parent) { originalInsertBefore.call(item.parent, item.node, item.referenceNode); } else { originalAppendChild.call(item.parent, item.node); } } catch (error) { // Ignore failures from stale nodes; other script paths may retry safely. } } } const remainingDelay = Math.max(releaseAt - Date.now(), 0); window.setTimeout(flushQueuedScripts, remainingDelay); })();
P72 Careers - Header
.c-cookie-consent{ opacity:1; position:relative; top:0; transform:translateY(0); transition:transform .4s cubic-bezier(.65,0,.35,1); transition:transform var(--p72-animation-duration) var(--p72-animation-timing); } .c-cookie-consent__container{ align-items:flex-start; display:flex;gap:1rem; gap:var(--p72-space); padding-bottom: .5rem; padding-bottom:var(--p72-space-xs); padding-top:.5rem; padding-top:var(--p72-space-xs) } .c-cookie-consent__content>:last-child{ /* margin-bottom:0*/ } /* .c-cookie-consent__content a{ -webkit-text-decoration:underline; text-decoration:underline }*/ .c-cookie-consent__close{ position:relative; right:-.75rem; right:calc(var(--p72-space-sm)*-1); top:-.75rem; top:calc(var(--p72-space-sm)*-1) } .c-cookie-consent.is-hidden{ opacity:0;transform:translateY(-100%) } .c-menu-mobile__menu-item > a, .c-menu-mobile__menu-item > a span { color: #18181a; /* matches your current inline color */ } .c-menu-mobile__button:hover { background: #f5f4ee !important; border-color: #18181a !important; color: #18181a !important; } .c-menu-mega-careers ul a:focus, .c-menu-mega-careers ul a:hover { color: #b08725 !important; color: var(--p72-color-content-stronger) !important; } li.c-menu-mobile__menu-item > a.c-menu-mobile__link, li.c-menu-mobile__menu-item > a.c-menu-mobile__link span { color: #18181a !important; } li.c-menu-mobile__menu-item > a.c-menu-mobile__link:hover, li.c-menu-mobile__menu-item > a.c-menu-mobile__link:hover span { color: var(--p72-color-content-stronger, #b08725) !important; } li.c-menu-mobile__menu-item > a.c-menu-mobile__link, li.c-menu-mobile__menu-item > a.c-menu-mobile__link span { color: #18181a !important; } li.o-icon > a.o-icon:hover, li.o-icon > a.o-icon:hover span { color: var(--p72-color-content-stronger, #b08725) !important; } .o-button--outlined { background-color: transparent; color: black; border: 1px solid black; transition: all 0.3s ease; } .o-button--outlined:focus, .o-button--outlined:hover { background-color: var(--p72-color-button-background, #b08725); border-color: var(--p72-color-button-background, #b08725); color: var(--p72-color-button-text, #f5f4ee); } .c-menu-mega { opacity: 0; visibility: hidden; transform: translateY(5px); transition: opacity 0.15s ease-out, transform 0.15s ease-out; will-change: opacity, transform; } body.header-scrolled .c-header { top: var(--p72-cookie-consent-height, 0px) !important; } body.header-scrolled .c-menu-mobile { /*top: 0 !important;*/ } /* Header common style */ .c-header, .c-header.l-wrap, .c-header .l-wrap { transition: none !important; will-change: auto; } /* Optional: reset header when scrolled */ body.header-scrolled .c-header, body.header-scrolled .c-header.l-wrap, body.header-scrolled .c-header .l-wrap { top: 0 !important; } @media only screen and (max-width:768px) { .c-cookie-consent__container { padding: 8px 10px !important; } body.header-scrolled .c-header, body.header-scrolled .c-header.l-wrap { padding-top: 13px; !important; } body.header-scrolled .c-header .l-wrap { padding-top: 13px; !important; } .c-cookie-consent__content p,.c-cookie-consent__content a { max-width: 100% !important; font-family:"Aptos", sans-serif; font-size:14px !important; line-height:18.2px !important; } } /* ========================================================= Combined CSS: c-menu-mobile + u-hide-after--md + u-spacing--lg Includes required variables + hamburger related CSS ========================================================= */ /* ========================================================= Required Variables ========================================================= */ :root { --p72-header-height: 100px; --p72-space-xxs: 0.25rem; --p72-space-xs: 0.5rem; --p72-space-sm: 0.75rem; --p72-space: 1rem; --p72-space-md: 1.5rem; --p72-space-lg: 2rem; --p72-animation-duration: 0.4s; --p72-animation-duration-long: 0.6s; --p72-animation-timing: cubic-bezier(0.65, 0, 0.35, 1); --p72-z-index-5: 5; --p72-border-width: 1px; --p72-font-family-secondary: Aptos, sans-serif; --p72-font-weight-bold: 700; --p72-font-size-heading-xs: 1.25rem; --p72-line-height-tight: 1.1; --p72-letter-spacing-wide: 0.06em; --p72-typography-heading-xs: var(--p72-font-weight-bold) var(--p72-font-size-heading-xs) / var(--p72-line-height-tight) var(--p72-font-family-secondary); --p72-color-brand-cream: #f5f4ee; --p72-color-brand-gold: #b08725; --p72-color-brand-slate: #505a6b; --p72-color-brand-charcoal: #18181a; --p72-color-background: var(--p72-color-brand-charcoal); --p72-color-content: var(--p72-color-brand-cream); --p72-color-content-stronger: var(--p72-color-brand-gold); --p72-color-border: var(--p72-color-brand-slate); --p72-cookie-consent-height: 0px; --p72-icon-size-sm: 0.9375rem; } /* ========================================================= Utility: u-hide-after--md Hidden after medium breakpoint ========================================================= */ @media (min-width: 769px) { .u-hide-after--md { display: none !important; } } /* ========================================================= Utility: u-spacing--lg Adds large vertical spacing between direct children ========================================================= */ .u-spacing--lg > * + * { margin-top: 2rem; margin-top: var(--p72-space-lg); } /* ========================================================= Mobile Menu Container ========================================================= */ .c-menu-mobile { bottom: 0; height: calc(100% - var(--p72-cookie-consent-height)); overflow-y: scroll; padding: calc(100px + 1.5rem) 1.5rem 1.5rem; padding: calc(var(--p72-header-height) + var(--p72-space-md)) var(--p72-space-md) var(--p72-space-md) var(--p72-space-md); position: fixed; right: 0; top: var(--p72-cookie-consent-height) !important; transform: translate3d(100%, 0, 0); transition: all 0.6s cubic-bezier(0.65, 0, 0.35, 1); transition: all var(--p72-animation-duration-long) var(--p72-animation-timing); visibility: hidden; width: 100%; z-index: 5; z-index: var(--p72-z-index-5); background-color: var(--p72-color-background); color: var(--p72-color-content); } /* ========================================================= Mobile Menu Open State Add class c-menu-mobile-is-active to body or parent ========================================================= */ @media (max-width: 767px) { .c-menu-mobile-is-active .c-menu-mobile { transform: translateZ(0); visibility: visible; } body.c-menu-mobile-is-active { overflow: hidden; } } /* ========================================================= Mobile Menu Item ========================================================= */ .c-menu-mobile__menu-item { border-bottom: 1px solid #505a6b; border-bottom: var(--p72-border-width) solid var(--p72-color-border); display: flex; flex-flow: column nowrap; gap: 0.25rem; gap: var(--p72-space-xxs); overflow: hidden; width: 100%; } /* ========================================================= Mobile Menu Link / Button ========================================================= */ .c-menu-mobile__link { align-items: center; background: transparent; border: none; color: #f5f4ee; color: var(--p72-color-content); cursor: pointer; display: flex; font: 700 1.25rem/1.1 Aptos, sans-serif; font: var(--p72-typography-heading-xs); gap: 0.25rem; gap: var(--p72-space-xxs); justify-content: space-between; letter-spacing: 0.06em; letter-spacing: var(--p72-letter-spacing-wide); padding: 0.75rem 0; padding: var(--p72-space-sm) 0; text-transform: uppercase; transition: color 0.4s cubic-bezier(0.65, 0, 0.35, 1); transition: color var(--p72-animation-duration) var(--p72-animation-timing); width: 100%; text-align: left; } @media (max-width: 768px) { .c-menu-mobile__link { font-size: 1.0625rem; } } .c-menu-mobile__link:focus, .c-menu-mobile__link:hover { color: #b08725; color: var(--p72-color-content-stronger); } .c-menu-mobile__link svg { height: var(--p72-icon-size-sm); min-width: var(--p72-icon-size-sm); width: var(--p72-icon-size-sm); } /* ========================================================= Mobile Sub Menu ========================================================= */ .c-menu-mobile--sub-menu { display: none; } .c-menu-mobile--sub-menu ul { display: flex; flex-direction: column; gap: 0.25rem; gap: var(--p72-space-xxs); margin-bottom: 0.75rem; margin-bottom: var(--p72-space-sm); list-style: none; padding: 0; } .c-menu-mobile--sub-menu a { color: #f5f4ee; color: var(--p72-color-content); text-decoration: none; } @media (max-width: 768px) { .c-menu-mobile--sub-menu a { font-size: 0.875rem; } } .c-menu-mobile--sub-menu a:focus, .c-menu-mobile--sub-menu a:hover { color: #b08725; color: var(--p72-color-content-stronger); } /* Show submenu when menu item is active */ .c-menu-mobile__menu-item.this-is-active .c-menu-mobile--sub-menu { display: block; } /* ========================================================= Header Style When Mobile Menu Is Active ========================================================= */ .c-menu-mobile-is-active .c-header { backdrop-filter: blur(0); border-color: #505a6b; border-color: var(--p72-color-border); } /* ========================================================= Hamburger Button Base ========================================================= */ .o-button-hamburger { align-items: center; -webkit-appearance: none; -moz-appearance: none; appearance: none; background: transparent; border: none; color: #f5f4ee; color: var(--p72-color-content); cursor: pointer; display: flex; height: 50px; padding: 0; --p72-hamburger-line-height: 1px; --p72-hamburger-line-spacing: 6px; --p72-hamburger-line-width: 25px; --p72-hamburger-lines-total-height: calc( var(--p72-hamburger-line-spacing) * 2 + var(--p72-hamburger-line-height) * 3 ); } .o-button-hamburger__label { font: 700 1rem/1.1 Aptos, sans-serif; letter-spacing: 0.06em; letter-spacing: var(--p72-letter-spacing-wide); text-transform: uppercase; } .o-button-hamburger__lines { height: var(--p72-hamburger-lines-total-height); margin-left: 0.25rem; margin-left: var(--p72-space-xxs); position: relative; transition: transform 0.5s ease-in-out; width: var(--p72-hamburger-line-width); } .o-button-hamburger__line { background-color: currentcolor; height: var(--p72-hamburger-line-height); left: 0; position: absolute; transition: transform 0.3s ease, top 0.3s ease, opacity 0.3s ease; width: 100%; } .o-button-hamburger__line:first-child { top: 0; } .o-button-hamburger__line:nth-child(2) { top: calc( var(--p72-hamburger-line-spacing) + var(--p72-hamburger-line-height) ); } .o-button-hamburger__line:nth-child(3) { top: calc( (var(--p72-hamburger-line-spacing) + var(--p72-hamburger-line-height)) * 2 ); } /* ========================================================= Hamburger Active Animation Triggered by .c-menu-mobile-is-active ========================================================= */ .c-menu-mobile-is-active .o-button-hamburger__line:first-child { top: 50%; transform: rotate(45deg); } .c-menu-mobile-is-active .o-button-hamburger__line:nth-child(2) { opacity: 0; } .c-menu-mobile-is-active .o-button-hamburger__line:nth-child(3) { top: 50%; transform: rotate(-45deg); } /** * Extracted scroll-related functionality from the bundled app. * * Requires: * - GSAP * - ScrollTrigger * - Optional: jQuery if using the jQuery-based class add below * * If you are using ES modules: * * import gsap from "gsap"; * import ScrollTrigger from "gsap/ScrollTrigger"; * * gsap.registerPlugin(ScrollTrigger); */ /* ========================================================================== Cookie consent scroll/resize height tracking ========================================================================== */ const COOKIE_NOTICE_KEY = "p72_cookie_notice_dismissed"; /** * Global analytics gate: defer GA/GTM script injection attempts until 10s. * This catches third-party code paths that try to load tags before our * CookieConsentTracking delay executes. */ (function enforceAnalyticsDelayGate() { if (window.__p72AnalyticsDelayGateInstalled) { return; } window.__p72AnalyticsDelayGateInstalled = true; const ANALYTICS_DELAY_MS = 10000; const releaseAt = Date.now() + ANALYTICS_DELAY_MS; let gateOpen = false; const queuedScripts = []; function isAnalyticsUrl(url) { if (!url) { return false; } try { const parsed = new URL(url, window.location.href); const host = parsed.hostname.toLowerCase(); return host === "www.googletagmanager.com" || host === "googletagmanager.com" || host === "www.google-analytics.com" || host === "google-analytics.com"; } catch (error) { return false; } } function queueScript(parent, node, referenceNode, mode) { queuedScripts.push({ parent, node, referenceNode, mode, }); } const originalAppendChild = Node.prototype.appendChild; const originalInsertBefore = Node.prototype.insertBefore; Node.prototype.appendChild = function patchedAppendChild(node) { const src = node && node.tagName === "SCRIPT" ? node.src : ""; if (!gateOpen && src && isAnalyticsUrl(src)) { queueScript(this, node, null, "append"); return node; } return originalAppendChild.call(this, node); }; Node.prototype.insertBefore = function patchedInsertBefore(node, referenceNode) { const src = node && node.tagName === "SCRIPT" ? node.src : ""; if (!gateOpen && src && isAnalyticsUrl(src)) { queueScript(this, node, referenceNode, "insert"); return node; } return originalInsertBefore.call(this, node, referenceNode); }; function flushQueuedScripts() { gateOpen = true; while (queuedScripts.length > 0) { const item = queuedScripts.shift(); try { if (!item || !item.parent || !item.node) { continue; } if (item.mode === "insert" && item.referenceNode && item.referenceNode.parentNode === item.parent) { originalInsertBefore.call(item.parent, item.node, item.referenceNode); } else { originalAppendChild.call(item.parent, item.node); } } catch (error) { // Ignore failures from stale nodes; other script paths may retry safely. } } } const remainingDelay = Math.max(releaseAt - Date.now(), 0); window.setTimeout(flushQueuedScripts, remainingDelay); })(); const cookieConsentScroll = { _raf: null, _scrollBound: false, _onScroll: null, isDismissed() { try { return sessionStorage.getItem(COOKIE_NOTICE_KEY) === "1"; } catch (error) { return false; } }, setDismissed() { try { sessionStorage.setItem(COOKIE_NOTICE_KEY, "1"); } catch (error) {} }, showBanner() { const banner = document.querySelector(".js-cookie-consent"); if (banner) { banner.classList.remove("is-hidden"); banner.classList.add("is-visible"); this.updateHeightVar(); this.bindScroll(); } }, hideBanner() { const banner = document.querySelector(".js-cookie-consent"); if (banner) { banner.classList.remove("is-visible"); banner.classList.add("is-hidden"); this.unbindScroll(); this.updateHeightVar(); } }, updateHeightVar() { const banner = document.querySelector(".js-cookie-consent"); let height = 0; if (banner && !banner.classList.contains("is-hidden")) { const rect = banner.getBoundingClientRect(); height = Math.min( Math.max(rect.bottom, 0), banner.offsetHeight ); } document.documentElement.style.setProperty( "--p72-cookie-consent-height", `${height}px` ); }, onScroll() { if (!this._raf) { this._raf = window.requestAnimationFrame(() => { this._raf = null; this.updateHeightVar(); }); } }, bindScroll() { if (!this._scrollBound) { this._scrollBound = true; this._onScroll = this.onScroll.bind(this); window.addEventListener("scroll", this._onScroll, { passive: true, }); window.addEventListener("resize", this._onScroll, { passive: true, }); } }, unbindScroll() { if (this._scrollBound) { this._scrollBound = false; window.removeEventListener("scroll", this._onScroll); window.removeEventListener("resize", this._onScroll); } }, observeHeight() { const banner = document.querySelector(".js-cookie-consent"); if (!banner || typeof ResizeObserver === "undefined") return; new ResizeObserver(() => this.updateHeightVar()).observe(banner); }, handleClose() { this.setDismissed(); this.hideBanner(); }, init() { const banner = document.querySelector(".js-cookie-consent"); if (banner) { if (this.isDismissed()) { this.updateHeightVar(); } else { this.showBanner(); } this.observeHeight(); } else { document.documentElement.style.setProperty( "--p72-cookie-consent-height", "0px" ); } }, }; const CookieConsentTracking = { gaConfig: null, getGAConfig() { if (this.gaConfig !== null) { return this.gaConfig; } const cookieConsentEl = document.querySelector(".js-cookie-consent"); const gaConfigRaw = cookieConsentEl && (cookieConsentEl.dataset.p72GaConfig || cookieConsentEl.dataset.gaConfig); if (gaConfigRaw) { try { const config = JSON.parse(gaConfigRaw); this.gaConfig = Array.isArray(config) ? config.filter((item) => item.tracking_id && item.tag_type) : []; } catch (error) { console.warn("Cookie Consent: Invalid GA config", error); this.gaConfig = []; } } else { this.gaConfig = []; } return this.gaConfig; }, isDismissed() { try { return sessionStorage.getItem(COOKIE_NOTICE_KEY) === "1"; } catch (error) { return false; } }, setDismissed() { try { sessionStorage.setItem(COOKIE_NOTICE_KEY, "1"); } catch (error) { // Ignore sessionStorage errors } }, loadGTM(trackingId) , loadGtagAnalytics(configs) { if (configs.length === 0) { return; } window.dataLayer = window.dataLayer || []; function gtag() { window.dataLayer.push(arguments); } window.gtag = gtag; const primaryConfig = configs.find((item) => item.tag_type === "ga4") || configs[0]; const script = document.createElement("script"); script.async = true; script.src = `https://www.googletagmanager.com/gtag/js?id=${primaryConfig.tracking_id}`; document.head.appendChild(script); gtag("js", new Date()); configs.forEach((item) => { gtag("config", item.tracking_id); }); }, loadCustomScripts() { const template = document.querySelector("template.js-tracking-scripts"); if (!template) { return; } const clonedContent = template.content.cloneNode(true); clonedContent.querySelectorAll("script").forEach((script) => { const newScript = document.createElement("script"); for (const attr of script.attributes) { newScript.setAttribute(attr.name, attr.value); } if (script.textContent) { newScript.textContent = script.textContent; } script.parentNode.replaceChild(newScript, script); }); document.body.appendChild(clonedContent); }, loadTrackingPixels() { if (window.p72PixelsLoaded) { return; } window.p72PixelsLoaded = true; const gaConfig = this.getGAConfig(); const gtmConfigs = gaConfig.filter((item) => item.tag_type === "gtm"); const analyticsConfigs = gaConfig.filter( (item) => item.tag_type === "ga4" || item.tag_type === "ua" ); gtmConfigs.forEach((item) => { this.loadGTM(item.tracking_id); }); this.loadGtagAnalytics(analyticsConfigs); this.loadCustomScripts(); }, scheduleTrackingPixels() { if (window.p72PixelsScheduled) { return; } window.p72PixelsScheduled = true; window.setTimeout(() => { this.loadTrackingPixels(); }, 10000); }, updateHeightVar() { const cookieConsentEl = document.querySelector(".js-cookie-consent"); let height = 0; if (cookieConsentEl && !cookieConsentEl.classList.contains("is-hidden")) { const rect = cookieConsentEl.getBoundingClientRect(); height = Math.min(Math.max(rect.bottom, 0), cookieConsentEl.offsetHeight); } document.documentElement.style.setProperty( "--p72-cookie-consent-height", `${height}px` ); }, showBanner() { const cookieConsentEl = document.querySelector(".js-cookie-consent"); if (!cookieConsentEl) { return; } cookieConsentEl.classList.remove("is-hidden"); cookieConsentEl.classList.add("is-visible"); this.updateHeightVar(); this.bindScroll(); }, hideBanner() { const cookieConsentEl = document.querySelector(".js-cookie-consent"); if (!cookieConsentEl) { return; } cookieConsentEl.classList.remove("is-visible"); cookieConsentEl.classList.add("is-hidden"); this.unbindScroll(); this.updateHeightVar(); }, onScroll() { if (this._raf) { return; } this._raf = window.requestAnimationFrame(() => { this._raf = null; this.updateHeightVar(); }); }, bindScroll() { if (this._scrollBound) { return; } this._scrollBound = true; this._onScroll = this.onScroll.bind(this); window.addEventListener("scroll", this._onScroll, { passive: true }); window.addEventListener("resize", this._onScroll, { passive: true }); }, unbindScroll() { if (!this._scrollBound) { return; } this._scrollBound = false; window.removeEventListener("scroll", this._onScroll); window.removeEventListener("resize", this._onScroll); }, observeHeight() { const cookieConsentEl = document.querySelector(".js-cookie-consent"); if (!cookieConsentEl || typeof ResizeObserver === "undefined") { return; } new ResizeObserver(() => { this.updateHeightVar(); }).observe(cookieConsentEl); }, handleClose() { this.setDismissed(); this.hideBanner(); }, init() { const cookieConsentEl = document.querySelector(".js-cookie-consent"); if (cookieConsentEl) { this.scheduleTrackingPixels(); if (this.isDismissed()) { this.updateHeightVar(); } else { this.showBanner(); } this.observeHeight(); } else { document.documentElement.style.setProperty( "--p72-cookie-consent-height", "0px" ); } }, }; /* ========================================================================== Smooth anchor scrolling with header offset ========================================================================== */ function getAnchorTarget(hash) { if (!hash || hash === "#") return null; const id = hash.startsWith("#") ? hash.substring(1) : hash; let target = document.getElementById(id); if (!target) { try { target = document.querySelector(hash); } catch (error) { return null; } } return target; } function scrollToElementWithHeaderOffset(element) { const headerHeight = parseInt( getComputedStyle(document.documentElement) .getPropertyValue("--p72-header-height") ) || 0; const top = element.getBoundingClientRect().top + window.pageYOffset - headerHeight; window.scrollTo({ top, behavior: "smooth", }); } function initSmoothAnchorScrolling() { document.addEventListener("click", function (event) { const link = event.target.closest( 'a[href^="#"]:not([href="#"])' ); if (!link) return; const href = link.getAttribute("href"); const target = getAnchorTarget(href); if (target) { event.preventDefault(); scrollToElementWithHeaderOffset(target); if (history.pushState) { history.pushState(null, null, href); } } }); if (window.location.hash) { setTimeout(() => { const target = getAnchorTarget(window.location.hash); if (target) { scrollToElementWithHeaderOffset(target); } }, 100); } } /* ========================================================================== GSAP ScrollTrigger animations ========================================================================== */ function initGsapScrollAnimations() { if (typeof gsap === "undefined" || typeof ScrollTrigger === "undefined") { console.warn("GSAP or ScrollTrigger is not available."); return; } gsap.registerPlugin(ScrollTrigger); document.querySelectorAll(".js-gsap-trigger").forEach((trigger) => { /** * Fade in on scroll */ const fadeItems = trigger.querySelectorAll(".js-gsap-fade-in"); if (fadeItems.length > 0) { fadeItems.forEach((item, index) => { gsap.to(item, { opacity: 1, duration: 0.8, ease: "power1.in", scrollTrigger: item, delay: 0.1 * index, }); }); } /** * Scale in on scroll */ const scaleItems = trigger.querySelectorAll(".js-gsap-scale-in"); if (scaleItems.length > 0) { scaleItems.forEach((item, index) => { gsap.to(item, { scale: 1, opacity: 1, duration: 0.8, ease: "power1.in", scrollTrigger: item, delay: 0.1 * index, transformOrigin: "center center", }); }); } /** * Slide up on scroll */ const slideUpItems = trigger.querySelectorAll(".js-gsap-slide-in-up"); if (slideUpItems.length > 0) { slideUpItems.forEach((item, index) => { gsap.to(item, { opacity: 1, y: 0, duration: 0.8, ease: "power1.in", scrollTrigger: item, delay: 0.1 * index, }); }); } /** * Card entrance animation * * Note: * In the original bundle this is inside `.js-gsap-trigger`, * but it is not actually tied to ScrollTrigger. It runs immediately. */ const cards = trigger.querySelectorAll(".js-card-animate"); if (cards.length > 0) { console.log("Found cards to animate:", cards.length); gsap.set(cards, { opacity: 0, y: 12, filter: "blur(0.5px)", clearProps: "none", }); gsap.to(cards, { opacity: 1, y: 0, filter: "blur(0px)", duration: 0.3, ease: "power2.out", stagger: 0.03, delay: 0.05, }); } }); /** * Generic scroll class trigger */ gsap.utils.toArray(".u-scroll-animation").forEach((element) => { ScrollTrigger.create({ trigger: element, start: "top 90%", onEnter: () => { element.classList.add("u-scroll-animate"); }, }); }); } /* ========================================================================== Load-more card animation ========================================================================== */ function initLoadMoreScrollRelatedAnimation() { if (typeof jQuery === "undefined") { console.warn("jQuery is not available."); return; } if (typeof gsap === "undefined") { console.warn("GSAP is not available."); return; } const $ = jQuery; $(".js-button-load-more").on("click", () => { const hiddenItems = $(".js-filter-item.u-display--none").not(".ft-hidden"); const itemsToShow = hiddenItems.slice(0, 8); if (itemsToShow.length > 0) { const animatedCards = itemsToShow.find(".js-card-animate").get(); if (animatedCards.length > 0) { gsap.set(animatedCards, { opacity: 0, y: 12, filter: "blur(0.5px)", }); } itemsToShow.removeClass("u-display--none"); const filterContainer = $(".js-filter-container"); try { if (filterContainer.data("isotope")) { filterContainer.isotope("layout"); } } catch (error) {} if (animatedCards.length > 0) { gsap.to(animatedCards, { opacity: 1, y: 0, filter: "blur(0px)", duration: 0.4, ease: "power2.out", stagger: 0.04, }); } $(".js-button-load-more") .blur() .removeClass("active focus"); if (hiddenItems.length <= 8) { $(".js-button-load-more").hide(); } } }); } /* ========================================================================== Optional: Swiper timeline with horizontal scroll/drag behavior ========================================================================== */ /** * The bundle initializes a horizontal Swiper timeline. * * Requires Swiper and Navigation module. * * In the original minified code: * - fl = Swiper * - ml = Navigation module */ function initTimelineSwiper() { if (typeof Swiper === "undefined") { console.warn("Swiper is not available."); return; } // If using Swiper modules globally, adjust as needed. // Swiper.use([Navigation]); new Swiper(".js-timeline", { slidesPerView: 1, spaceBetween: "-10%", breakpoints: { 640: { slidesPerView: 2, }, 768: { slidesPerView: 3, }, 1024: { slidesPerView: 4, }, 1200: { slidesPerView: 5, }, }, direction: "horizontal", freeMode: true, navigation: { nextEl: ".swiper-button-next", prevEl: ".swiper-button-prev", }, }); } /* ========================================================================== Optional: Posts slider horizontal drag/scroll behavior ========================================================================== */ class PostsSlider { constructor() { this.sliders = document.querySelectorAll(".js-posts-slider"); this.swiperInstances = []; this.init(); } init() { if (!this.sliders.length) return; if (typeof Swiper === "undefined") { console.warn("Swiper is not available."); return; } // If using Swiper modules globally, adjust as needed. // Swiper.use([Navigation]); this.sliders.forEach((slider) => { const container = slider.querySelector(".js-posts-slider-container"); if (!container) return; const prevButton = slider.querySelector(".js-posts-slider-prev"); const nextButton = slider.querySelector(".js-posts-slider-next"); const swiper = new Swiper(container, { slidesPerView: "auto", spaceBetween: 0, grabCursor: true, watchSlidesProgress: true, wrapperClass: "js-posts-slider-wrapper", slideClass: "js-posts-slider-card", navigation: { nextEl: nextButton, prevEl: prevButton, }, on: { init: function () { if (prevButton) { prevButton.classList.add("swiper-button-disabled"); prevButton.setAttribute("disabled", "disabled"); } }, slideChange: function () { if (prevButton) { if (this.isBeginning) { prevButton.classList.add("swiper-button-disabled"); prevButton.setAttribute("disabled", "disabled"); } else { prevButton.classList.remove("swiper-button-disabled"); prevButton.removeAttribute("disabled"); } } if (nextButton) { if (this.isEnd) { nextButton.classList.add("swiper-button-disabled"); nextButton.setAttribute("disabled", "disabled"); } else { nextButton.classList.remove("swiper-button-disabled"); nextButton.removeAttribute("disabled"); } } }, }, }); this.swiperInstances.push(swiper); }); } } /* ========================================================================== Main initializer ========================================================================== */ function initExtractedScrollFunctionality() { cookieConsentScroll.init(); CookieConsentTracking.init(); initSmoothAnchorScrolling(); initGsapScrollAnimations(); initLoadMoreScrollRelatedAnimation(); initTimelineSwiper(); new PostsSlider(); } /* ========================================================================== DOM ready ========================================================================== */ document.addEventListener("DOMContentLoaded", () => { initExtractedScrollFunctionality(); });
Point72, L.P. and its affiliates and our third-party partners use cookies and similar technologies to view and retain your site interactions to perform analytics, enable site functionality and assist our marketing efforts exclusively for recruiting purposes. By continuing to use our site, you consent to these data practices, as described in our Privacy Policy.
- About Us
- Careers
- Perspectives
Browse Open Roles
-
About Us
- What We Do
- Our Values
- Leadership
- Locations
-
Careers
- Working Here
- Students & Early-Career
- Point72 Academy
- Fundamental Equities
- Cubist Systematic
- Point72 LaunchPoint
- Global Macro
- Private Investments
- Investment Services
- Proprietary Research
- Perspectives
Browse Open Roles
if (window.innerWidth > 768) { document.write(' /* rules */ <\/script>'); } /* rules */ !function(){"use strict";var r,n={},e={};function t(r){var o=e[r];if(void 0!==o)return o.exports;var u=e[r]={exports:{}};return n[r].call(u.exports,u,u.exports,t),u.exports}t.m=n,r=[],t.O=function(n,e,o,u){if(!e){var i=1/0;for(s=0;s=u)&&Object.keys(t.O).every(function(r){return t.O[r](e[a])})?e.splice(a--,1):(f=!1,u0&&r[s-1][2]>u;s--)r[s]=r[s-1];r[s]=[e,o,u]},t.n=function(r){var n=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(n,{a:n}),n},t.d=function(r,n){for(var e in n)t.o(n,e)&&!t.o(r,e)&&Object.defineProperty(r,e,{enumerable:!0,get:n[e]})},t.o=function(r,n){return Object.prototype.hasOwnProperty.call(r,n)},function(){var r={666:0};t.O.j=function(n){return 0===r[n]};var n=function(n,e){var o,u,i=e[0],f=e[1],a=e[2],c=0;if(i.some(function(n){return 0!==r[n]})){for(o in f)t.o(f,o)&&(t.m[o]=f[o]);if(a)var s=a(t)}for(n&&n(e);c console.log("Custom tracking script loaded after consent tracking delay");