/** Deferred first-party analytics beacon (shipped as beacon.js). */ export declare const beaconJs = "(() => {\n const kernel = document.documentElement.getAttribute(\"data-backend\") || document.documentElement.getAttribute(\"data-kernel\");\n if (!kernel) return;\n\n const endpoint = kernel.replace(/\\/$/, \"\") + \"/api/t\";\n const gpc = navigator.globalPrivacyControl === true\n || navigator.doNotTrack === \"1\"\n || window.doNotTrack === \"1\";\n const preview = location.pathname.match(/^\\/preview\\/([^/]+)/);\n const src = preview ? \"preview\" : \"live\";\n const path = location.pathname || \"/\";\n const params = new URLSearchParams(location.search);\n const started = Date.now();\n let maxScroll = 0;\n let engageCount = 0;\n let left = false;\n let pingTimer = 0;\n\n const uuid = () => (crypto.randomUUID ? crypto.randomUUID() : \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n return (c === \"x\" ? r : (r & 0x3) | 0x8).toString(16);\n }));\n\n const readCookie = (name) => {\n const parts = document.cookie.split(\"; \");\n for (const part of parts) {\n const i = part.indexOf(\"=\");\n if (i === -1) continue;\n if (part.slice(0, i) === name) return decodeURIComponent(part.slice(i + 1));\n }\n return \"\";\n };\n\n const writeCookie = (name, value, days) => {\n const maxAge = Math.floor(days * 86400);\n const secure = location.protocol === \"https:\" ? \"; Secure\" : \"\";\n document.cookie = name + \"=\" + encodeURIComponent(value)\n + \"; Path=/; Max-Age=\" + maxAge + \"; SameSite=Lax\" + secure;\n };\n\n const clearCookie = (name) => {\n const secure = location.protocol === \"https:\" ? \"; Secure\" : \"\";\n document.cookie = name + \"=; Path=/; Max-Age=0; SameSite=Lax\" + secure;\n };\n\n const privacyHref = () => {\n if (preview) return \"/preview/\" + preview[1] + \"/cookie-compliance\";\n return \"/cookie-compliance\";\n };\n\n let consent = gpc ? \"0\" : (readCookie(\"vitris_cc\") || \"\");\n let allowCookie = !gpc && consent !== \"0\";\n\n const uuidRe = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n let vid = \"\";\n\n const ensureVid = () => {\n if (!allowCookie) {\n vid = \"\";\n return;\n }\n vid = readCookie(\"vitris_vid\");\n if (!uuidRe.test(vid)) vid = uuid();\n writeCookie(\"vitris_vid\", vid, 395);\n };\n ensureVid();\n\n const sidKey = \"vitris_sid\";\n const sidAtKey = \"vitris_sid_at\";\n let sid = \"\";\n try {\n const last = Number(sessionStorage.getItem(sidAtKey) || \"0\");\n sid = sessionStorage.getItem(sidKey) || \"\";\n if (!sid || !last || Date.now() - last > 30 * 60 * 1000) sid = uuid();\n sessionStorage.setItem(sidKey, sid);\n sessionStorage.setItem(sidAtKey, String(Date.now()));\n } catch {\n sid = uuid();\n }\n\n const touchSid = () => {\n try { sessionStorage.setItem(sidAtKey, String(Date.now())); } catch (_) {}\n };\n\n const syncVidFields = () => {\n document.querySelectorAll('form[data-lead-form] input[name=\"vid\"]').forEach((el) => {\n el.value = vid || \"\";\n });\n };\n syncVidFields();\n\n const send = (payload) => {\n const body = new URLSearchParams();\n for (const [k, v] of Object.entries(payload)) {\n if (v == null || v === \"\") continue;\n body.set(k, String(v));\n }\n if (preview) body.set(\"slug\", preview[1]);\n if (vid) body.set(\"vid\", vid);\n body.set(\"sid\", sid);\n body.set(\"src\", src);\n body.set(\"path\", path);\n if (navigator.sendBeacon && navigator.sendBeacon(endpoint, body)) return;\n try {\n fetch(endpoint, { method: \"POST\", body, keepalive: true, credentials: \"omit\", mode: \"cors\" }).catch(() => {});\n } catch (_) {}\n };\n\n let referrerHost = \"\";\n try {\n if (document.referrer) referrerHost = new URL(document.referrer).hostname.replace(/^www\\./, \"\");\n } catch (_) {}\n\n send({\n kind: \"pageview\",\n referrer: referrerHost,\n utm_medium: params.get(\"utm_medium\") || \"\",\n utm_source: params.get(\"utm_source\") || \"\",\n hour: String(new Date().getHours()),\n });\n\n const measureScroll = () => {\n const doc = document.documentElement;\n const bodyEl = document.body;\n const height = Math.max(doc.scrollHeight, bodyEl ? bodyEl.scrollHeight : 0, 1);\n const view = window.innerHeight || doc.clientHeight || 0;\n const top = window.scrollY || doc.scrollTop || 0;\n const pct = Math.min(100, Math.round(((top + view) / height) * 100));\n if (pct > maxScroll) maxScroll = pct;\n };\n measureScroll();\n let scrollRaf = 0;\n window.addEventListener(\"scroll\", () => {\n if (scrollRaf) return;\n scrollRaf = requestAnimationFrame(() => {\n scrollRaf = 0;\n measureScroll();\n touchSid();\n });\n }, { passive: true });\n\n const leave = () => {\n if (left) return;\n left = true;\n measureScroll();\n const duration = Math.min(30 * 60 * 1000, Math.max(0, Date.now() - started));\n send({ kind: \"leave\", duration_ms: String(duration), scroll_pct: String(maxScroll) });\n stopPing();\n };\n\n document.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === \"hidden\") leave();\n else if (allowCookie) {\n startPing();\n sendPing();\n }\n });\n window.addEventListener(\"pagehide\", leave);\n\n const isMaps = (href) => {\n const h = (href || \"\").toLowerCase();\n return h.includes(\"google.com/maps\") || h.includes(\"maps.google.\")\n || h.includes(\"maps.apple.com\") || h.includes(\"bing.com/maps\") || h.includes(\"goo.gl/maps\");\n };\n\n const labelOf = (el) => {\n if (!el) return \"\";\n const raw = (el.getAttribute(\"aria-label\") || el.getAttribute(\"alt\") || el.textContent || \"\")\n .replace(/\\s+/g, \" \").trim();\n return raw.slice(0, 40);\n };\n\n const hrefPath = (href) => {\n try { return new URL(href, location.href).pathname.slice(0, 200); }\n catch (_) { return \"\"; }\n };\n\n document.addEventListener(\"click\", (event) => {\n const t = event.target;\n if (!(t instanceof Element)) return;\n\n if (t.closest(\"[data-cookie-accept]\")) {\n event.preventDefault();\n acceptCookies();\n return;\n }\n if (t.closest(\"[data-cookie-reject]\")) {\n event.preventDefault();\n rejectCookies();\n return;\n }\n\n touchSid();\n\n const a = t.closest(\"a[href]\");\n if (a) {\n const href = a.getAttribute(\"href\") || \"\";\n const low = href.toLowerCase();\n if (low.startsWith(\"tel:\")) {\n send({ kind: \"convert\", goal: \"tel\", label: labelOf(a) });\n return;\n }\n if (low.startsWith(\"mailto:\")) {\n send({ kind: \"convert\", goal: \"mailto\", label: labelOf(a) });\n return;\n }\n if (isMaps(href)) {\n send({ kind: \"convert\", goal: \"maps\", label: labelOf(a), href: hrefPath(href) });\n return;\n }\n }\n\n if (engageCount >= 25) return;\n\n const carousel = t.closest(\"[data-quotes-prev], [data-quotes-next], [data-stage-prev], [data-stage-next]\");\n if (carousel) {\n engageCount += 1;\n send({ kind: \"engage\", action: \"carousel\", label: labelOf(carousel) });\n return;\n }\n\n const navA = t.closest(\"[data-nav] a, .c-header__nav a, nav[aria-label='Primary'] a\");\n if (navA) {\n engageCount += 1;\n send({ kind: \"engage\", action: \"nav\", label: labelOf(navA), href: hrefPath(navA.getAttribute(\"href\") || \"\") });\n return;\n }\n\n const btn = t.closest(\"a.btn, button.btn, .btn-outline, .btn-arrow, .c-header__cta\");\n if (btn) {\n if (btn.closest(\"form[data-lead-form]\") && (btn.matches(\"button, [type='submit']\"))) return;\n engageCount += 1;\n send({ kind: \"engage\", action: \"btn\", label: labelOf(btn), href: hrefPath(btn.getAttribute(\"href\") || \"\") });\n return;\n }\n\n if (t.closest(\"img\") || (a && a.querySelector(\"img\"))) {\n const img = t.closest(\"img\") || (a && a.querySelector(\"img\"));\n const link = (img && img.closest(\"a\")) || a;\n engageCount += 1;\n send({\n kind: \"engage\",\n action: \"img\",\n label: labelOf(img || link),\n href: hrefPath(link && link.getAttribute ? link.getAttribute(\"href\") || \"\" : \"\"),\n });\n }\n }, true);\n\n const sendPing = () => {\n if (!allowCookie || document.visibilityState !== \"visible\") return;\n send({ kind: \"ping\" });\n };\n const startPing = () => {\n if (!allowCookie || pingTimer) return;\n pingTimer = window.setInterval(sendPing, 15000);\n };\n const stopPing = () => {\n if (!pingTimer) return;\n clearInterval(pingTimer);\n pingTimer = 0;\n };\n if (allowCookie) {\n sendPing();\n startPing();\n }\n\n const removeBanner = () => {\n const el = document.getElementById(\"vitris-cookie-banner\");\n if (el) el.remove();\n };\n\n const acceptCookies = () => {\n if (gpc) return;\n consent = \"1\";\n writeCookie(\"vitris_cc\", \"1\", 395);\n allowCookie = true;\n ensureVid();\n syncVidFields();\n removeBanner();\n if (document.visibilityState === \"visible\") {\n startPing();\n sendPing();\n }\n };\n\n const rejectCookies = () => {\n consent = \"0\";\n writeCookie(\"vitris_cc\", \"0\", 395);\n clearCookie(\"vitris_vid\");\n vid = \"\";\n allowCookie = false;\n syncVidFields();\n stopPing();\n removeBanner();\n };\n\n if (!gpc && !consent) {\n const banner = document.createElement(\"div\");\n banner.id = \"vitris-cookie-banner\";\n banner.className = \"c-cookie-banner\";\n banner.setAttribute(\"role\", \"dialog\");\n banner.setAttribute(\"aria-modal\", \"false\");\n banner.setAttribute(\"aria-labelledby\", \"vitris-cookie-title\");\n banner.setAttribute(\"aria-describedby\", \"vitris-cookie-desc\");\n banner.innerHTML = '\";\n const mount = () => {\n if (!document.body || document.getElementById(\"vitris-cookie-banner\")) return;\n document.body.prepend(banner);\n };\n if (document.body) mount();\n else document.addEventListener(\"DOMContentLoaded\", mount);\n }\n})();\n";