{
  "version": 3,
  "sources": ["/cdn/shop/t/46/assets/chat.js?bm=20260509fr"],
  "sourcesContent": ["/* CDN cache-bust 2026-05-21: forcing edge refresh after WABA fix */\n(function () {\n  const IDS = {\n    widget: \"custom-chat-widget\",\n    closeBtn: \"chat-close-btn\",\n    toggleBtn: \"chat-toggle-btn\",\n    chatBox: \"chat-box\",\n    minimizedIcon: \"minimized-widget-icon\",\n    salesBtn: \"chatWa\",\n    languageSwitch: \"language-switch\",\n  };\n  const STORAGE_KEYS = {\n    minimized: \"euChatWidgetMinimized\",\n    mobileOpen: \"euChatWidgetMobileOpen\",\n    language: \"euChatWidgetLang\",            // legacy \u2014 kept for fallback compatibility\n    languageOverride: \"euChatWidgetLangOverride\", // ONLY set when user explicitly chooses from dropdown\n  };\n  const waTranslations = {\n  \"en\": {\n    \"greeting\": \"Hi, I'm Jordan \uD83D\uDC4B\",\n    \"hookHeader\": \"Have any questions? I'm here to help!\",\n    \"bookDemo\": \"\uD83D\uDCDE Book a Demo With Me\",\n    \"chatWa\": \"\uD83D\uDCAC Chat on WhatsApp\",\n    \"support\": \"\uD83D\uDEDF Get Support\",\n    \"role\": \"Product Specialist\",\n    \"chatWith\": \"Chat With Jordan\",\n    \"image\": \"https://storage.googleapis.com/msgsndr/gs8BnQHT0c6ZesS8QkWf/media/689c9db41f951e79f66a960c.jpeg\",\n    \"bookDemoUrl\": \"https://speediance.eu/pages/demo-speediance\",\n    \"supportUrl\": \"https://speediance.eu/pages/contact\"\n  },\n  \"de\": {\n    \"greeting\": \"Hallo, ich bin Marco \uD83D\uDC4B\",\n    \"hookHeader\": \"Hast du Fragen? Ich bin hier, um zu helfen!\",\n    \"bookDemo\": \"\uD83D\uDCDE Demo mit mir buchen\",\n    \"chatWa\": \"\uD83D\uDCAC Chat auf WhatsApp\",\n    \"support\": \"\uD83D\uDEDF Support erhalten\",\n    \"role\": \"Produktspezialist\",\n    \"chatWith\": \"Chatte mit Marco\",\n    \"image\": \"https://storage.googleapis.com/msgsndr/qO7EpNj95iLIcx6VzjRK/media/6834c222016c699e4af78224.jpeg\",\n    \"bookDemoUrl\": \"https://speediance.eu/pages/demo-speediance\",\n    \"supportUrl\": \"https://speediance.eu/pages/contact\"\n  },\n  \"fr\": {\n    \"greeting\": \"Bonjour, je suis Melissa \uD83D\uDC4B\",\n    \"hookHeader\": \"Vous avez des questions ? Je suis l\u00E0 pour vous aider !\",\n    \"bookDemo\": \"\uD83D\uDCDE R\u00E9server une d\u00E9mo avec moi\",\n    \"chatWa\": \"\uD83D\uDCAC Discuter sur WhatsApp\",\n    \"support\": \"\uD83D\uDEDF Obtenir de l'aide\",\n    \"role\": \"Sp\u00E9cialiste Produit\",\n    \"chatWith\": \"Discuter avec Melissa\",\n    \"image\": \"https://ca.slack-edge.com/T07RVMBGA2V-U0ALF3NG2R3-b86b134adc5f-512\",\n    \"bookDemoUrl\": \"https://cal.futuremvmt.com/melissa/full-demo\",\n    \"supportUrl\": \"https://speediance.eu/pages/contact\"\n  },\n  \"nl\": {\n    \"greeting\": \"Hallo, ik ben Jordan \uD83D\uDC4B\",\n    \"hookHeader\": \"Heb je vragen? Ik ben er om te helpen!\",\n    \"bookDemo\": \"\uD83D\uDCDE Boek een demo met mij\",\n    \"chatWa\": \"\uD83D\uDCAC Chat op WhatsApp\",\n    \"support\": \"\uD83D\uDEDF Hulp krijgen\",\n    \"role\": \"Productspecialist\",\n    \"chatWith\": \"Chat met Jordan\",\n    \"image\": \"https://storage.googleapis.com/msgsndr/gs8BnQHT0c6ZesS8QkWf/media/689c9db41f951e79f66a960c.jpeg\",\n    \"bookDemoUrl\": \"https://speediance.eu/pages/demo-speediance\",\n    \"supportUrl\": \"https://speediance.eu/pages/contact\"\n  }\n};\n  // Page-aware hook copy. If a (pageType, lang) combo is present, it overrides\n  // the default hookHeader from waTranslations. Add new page types as needed.\n  const pageHooks = {\n    home: {\n      en: \"Want a personal recommendation? I\\u2019ll find the right model for you.\",\n      de: \"M\\u00f6chtest du eine pers\\u00f6nliche Empfehlung? Ich finde das passende Modell f\\u00fcr dich.\",\n      fr: \"Vous voulez une recommandation personnalis\\u00e9e\\u202f? Je trouverai le mod\\u00e8le qui vous convient.\",\n      nl: \"Wil je een persoonlijke aanbeveling? Ik vind het juiste model voor je.\",\n    },\n    gm2: {\n      en: \"Questions about the Gym Monster 2? I can help with sizing, financing, or Mid-Year savings.\",\n      de: \"Fragen zum Gym Monster 2? Ich helfe gerne bei Gr\\u00f6\\u00dfe, Finanzierung oder Jahresmitte-Spar-Aktionen.\",\n      fr: \"Des questions sur le Gym Monster 2\\u202f? Je peux vous aider sur la taille, le financement, ou les Soldes de Mi-Ann\\u00e9e.\",\n      nl: \"Vragen over de Gym Monster 2? Ik help met afmetingen, financiering of Midjaar-aanbiedingen.\",\n    },\n    cart: {\n      en: \"Stuck on something? I can apply a code or arrange Klarna finance.\",\n      de: \"H\\u00e4ngst du irgendwo fest? Ich kann einen Code anwenden oder Klarna-Finanzierung einrichten.\",\n      fr: \"Bloqu\\u00e9 quelque part\\u202f? Je peux appliquer un code ou organiser un financement Klarna.\",\n      nl: \"Ergens vastgelopen? Ik kan een code toepassen of Klarna-financiering regelen.\",\n    },\n    demo: {\n      en: \"Ready to book? Let\\u2019s pick a time.\",\n      de: \"Bereit zu buchen? Lass uns einen Termin finden.\",\n      fr: \"Pr\\u00eat \\u00e0 r\\u00e9server\\u202f? Choisissons une date.\",\n      nl: \"Klaar om te boeken? Laten we een tijd kiezen.\",\n    },\n    blog: {\n      en: \"Reading up on Speediance? Drop a question if anything piques your interest.\",\n      de: \"Liest du unseren Blog? Frag gerne, wenn dich etwas interessiert.\",\n      fr: \"Vous lisez notre blog\\u202f? N\\u2019h\\u00e9sitez pas si quelque chose vous int\\u00e9resse.\",\n      nl: \"Onze blog aan het lezen? Stel gerust een vraag als iets je interesse wekt.\",\n    },\n  };\n\n  function detectPageType() {\n    const path = (location.pathname || \"\").toLowerCase();\n    if (path.includes(\"/products/speediance-gym-monster-2\")) return \"gm2\";\n    // Homepage: \"/\" OR locale-prefixed root like \"/fr\", \"/fr/\", \"/pt-pt/\", \"/de\"\n    if (path === \"/\" || /^\\/[a-z]{2}(-[a-z]{2})?\\/?$/.test(path)) return \"home\";\n    if (path === \"/cart\" || path.startsWith(\"/cart/\") || path === \"/cart/\") return \"cart\";\n    if (path.includes(\"/pages/demo\") || path.includes(\"/pages/book-a-demo\") || path.includes(\"/pages/book-demo\")) return \"demo\";\n    if (path.includes(\"/blogs/\") || path.includes(\"/articles/\")) return \"blog\";\n    return null;\n  }\n\n  let resizeTimer = null;\n\n  function getElement(id) {\n    return document.getElementById(id);\n  }\n\n  function isMobileViewport() {\n    return window.matchMedia(\"(max-width: 767px)\").matches;\n  }\n\n  function setAriaExpanded(expanded) {\n    const toggleBtn = getElement(IDS.toggleBtn);\n    if (toggleBtn) {\n      toggleBtn.setAttribute(\"aria-expanded\", expanded ? \"true\" : \"false\");\n    }\n  }\n\n  function trackWidgetEvent(action, href) {\n    const widget = getElement(IDS.widget);\n    const payload = {\n      event: \"chat_widget_click\",\n      chat_widget_action: action,\n      chat_widget_agent: widget?.dataset.agentName || \"Jordan\",\n      chat_widget_region: widget?.dataset.region || \"EU\",\n      chat_widget_href: href || \"\",\n    };\n    if (Array.isArray(window.dataLayer)) {\n      window.dataLayer.push(payload);\n    }\n    if (typeof window.gtag === \"function\") {\n      window.gtag(\"event\", \"chat_widget_click\", {\n        action,\n        agent: payload.chat_widget_agent,\n        region: payload.chat_widget_region,\n        href: payload.chat_widget_href,\n      });\n    }\n  }\n\n  function showMinimizedState() {\n    const widget = getElement(IDS.widget);\n    const minimizedIcon = getElement(IDS.minimizedIcon);\n    const chatBox = getElement(IDS.chatBox);\n    if (widget) widget.style.display = \"none\";\n    if (minimizedIcon) minimizedIcon.style.display = \"block\";\n    if (chatBox) chatBox.style.display = \"none\";\n    setAriaExpanded(false);\n  }\n\n  function detectPreferredLangFromShopify() {\n    const fromLiquid = (window.SHOP_LOCALE || \"\").toLowerCase();\n    const fromHtml = (document.documentElement.lang || \"\").toLowerCase();\n    const raw = fromLiquid || fromHtml || \"en\";\n    const base = raw.split(\"-\")[0];\n    // Direct supported locales\n    const direct = { en: \"en\", de: \"de\", fr: \"fr\", nl: \"nl\" };\n    if (direct[base]) return direct[base];\n    // Regional/related fallbacks for unsupported locales \u2014 map to closest supported language\n    // so a Luxembourgish, Italian, Spanish, etc. visitor lands on something useful.\n    const fallback = {\n      lb: \"de\",  // Luxembourgish speakers fluent in German\n      it: \"en\",  // Italian \u2014 fall back to English (could add IT translations later)\n      es: \"en\", \"pt-pt\": \"en\", pt: \"en\",\n      el: \"en\", bg: \"en\", tr: \"en\", hr: \"en\", sl: \"en\",\n      lt: \"en\", lv: \"en\", et: \"en\", mt: \"en\", ro: \"en\",\n      sv: \"en\", da: \"en\", no: \"en\", fi: \"en\",\n    };\n    return fallback[raw] || fallback[base] || \"en\";\n  }\n\n\n  function isFranceMarket() {\n    const shopCountry = ((window.Shopify && window.Shopify.country) || window.SHOP_COUNTRY || \"\").toUpperCase();\n    const host = ((window.SHOP_HOST || location.hostname || \"\") + \"\").toLowerCase();\n    return shopCountry === \"FR\" || host === \"speediance.fr\" || host.endsWith(\".speediance.fr\");\n  }\n\n  function getSalesWaNumber() {\n    return isFranceMarket() ? \"3197010205575\" : \"3197010205575\";\n  }\n\n  function applyMarketAgentOverride(translation, currentLang) {\n    if (!isFranceMarket()) return translation;\n    const languageBits = {\n      en: { greeting: \"Hi, I'm Melissa \uD83D\uDC4B\", chatWith: \"Chat With Melissa\" },\n      de: { greeting: \"Hallo, ich bin Melissa \uD83D\uDC4B\", chatWith: \"Chatte mit Melissa\" },\n      fr: { greeting: \"Bonjour, je suis Melissa \uD83D\uDC4B\", chatWith: \"Discuter avec Melissa\" },\n      nl: { greeting: \"Hallo, ik ben Melissa \uD83D\uDC4B\", chatWith: \"Chat met Melissa\" },\n    };\n    const bits = languageBits[currentLang] || languageBits.en;\n    return {\n      ...translation,\n      ...bits,\n      image: \"https://ca.slack-edge.com/T07RVMBGA2V-U0ALF3NG2R3-b86b134adc5f-512\",\n      bookDemoUrl: \"https://cal.futuremvmt.com/melissa/full-demo\",\n      supportUrl: \"https://speediance.fr/pages/contact\",\n    };\n  }\n\n  function updateLanguage(lang) {\n    const currentLang = Object.prototype.hasOwnProperty.call(waTranslations, lang) ? lang : \"en\";\n    const t = applyMarketAgentOverride(waTranslations[currentLang], currentLang);\n    const chatWaHref = \"https://wa.me/\" + getSalesWaNumber() + \"?text=\" + encodeURIComponent(isFranceMarket() ? \"Hi Melissa, I'm interested in Speediance\" : \"Hi, I'm interested in Speediance\");\n    const widget = getElement(IDS.widget);\n    const selector = getElement(IDS.languageSwitch);\n    const dn = getElement(\"dynamic-name\");\n    const hh = getElement(\"hookHeader\");\n    const bd = getElement(\"bookDemo\");\n    const cw = getElement(\"chatWa\");\n    const sp = getElement(\"supportBtn\");\n    const rl = getElement(\"roleLabel\");\n    const cl = getElement(\"chatWithLabel\");\n    const ai = getElement(\"agent-image\");\n    const ab = getElement(\"agent-image-box\");\n\n    if (dn) dn.innerText = t.greeting;\n    if (hh) {\n      const pageType = detectPageType();\n      const pageHook = pageType && pageHooks[pageType] && pageHooks[pageType][currentLang];\n      hh.innerText = pageHook || t.hookHeader;\n    }\n    if (bd) { bd.innerText = t.bookDemo; bd.href = t.bookDemoUrl; }\n    if (cw) { cw.innerText = t.chatWa; cw.href = chatWaHref; }\n    if (sp) { sp.innerText = t.support; sp.href = t.supportUrl; }\n    if (rl) rl.innerText = t.role;\n    if (cl) cl.innerText = t.chatWith;\n    if (ai) ai.src = t.image;\n    if (ab) ab.src = t.image;\n    if (widget) widget.dataset.agentName = t.chatWith.replace(/^Chat(?:te| met| With| Discuter avec)\\s+/i, \"\").trim() || \"Jordan\";\n    if (selector) selector.value = currentLang;\n    localStorage.setItem(STORAGE_KEYS.language, currentLang);\n  }\n\n  function applyResponsiveState() {\n    const widget = getElement(IDS.widget);\n    const toggleBtn = getElement(IDS.toggleBtn);\n    const chatBox = getElement(IDS.chatBox);\n    const minimizedIcon = getElement(IDS.minimizedIcon);\n    const isMinimized = sessionStorage.getItem(STORAGE_KEYS.minimized) === \"1\";\n    const isMobile = isMobileViewport();\n    if (!widget || !toggleBtn || !chatBox || !minimizedIcon) return;\n\n    if (isMinimized) {\n      showMinimizedState();\n      return;\n    }\n\n    widget.style.display = \"block\";\n    minimizedIcon.style.display = \"none\";\n    widget.classList.add(\"widget-ready\");\n\n    if (isMobile) {\n      toggleBtn.style.display = \"flex\";\n      const shouldOpen = sessionStorage.getItem(STORAGE_KEYS.mobileOpen) === \"1\";\n      chatBox.style.display = shouldOpen ? \"block\" : \"none\";\n      setAriaExpanded(shouldOpen);\n      return;\n    }\n\n    toggleBtn.style.display = \"none\";\n    chatBox.style.display = \"block\";\n    sessionStorage.removeItem(STORAGE_KEYS.mobileOpen);\n    setAriaExpanded(true);\n  }\n\n  function toggleChatBox() {\n    if (!isMobileViewport()) return;\n    const chatBox = getElement(IDS.chatBox);\n    if (!chatBox) return;\n    const shouldOpen = chatBox.style.display !== \"block\";\n    chatBox.style.display = shouldOpen ? \"block\" : \"none\";\n    setAriaExpanded(shouldOpen);\n    if (shouldOpen) {\n      sessionStorage.setItem(STORAGE_KEYS.mobileOpen, \"1\");\n      trackWidgetEvent(\"toggle_open\");\n      return;\n    }\n    sessionStorage.removeItem(STORAGE_KEYS.mobileOpen);\n    trackWidgetEvent(\"toggle_close\");\n  }\n\n  function minimizeChatWidget() {\n    sessionStorage.setItem(STORAGE_KEYS.minimized, \"1\");\n    sessionStorage.removeItem(STORAGE_KEYS.mobileOpen);\n    showMinimizedState();\n    trackWidgetEvent(\"minimize\");\n  }\n\n  function restoreChatWidget() {\n    sessionStorage.removeItem(STORAGE_KEYS.minimized);\n    applyResponsiveState();\n    trackWidgetEvent(\"restore\");\n  }\n\n  function handleTrackedClick(event) {\n    const target = event.currentTarget;\n    const action = target?.dataset.chatAction;\n    if (!action) return;\n    trackWidgetEvent(action, target.href || \"\");\n  }\n\n  function handleSalesClick(event) {\n    handleTrackedClick(event);\n    minimizeChatWidget();\n  }\n\n  function init() {\n    if (document.body?.dataset.chatWidgetInitialized === \"true\") return;\n    document.body.dataset.chatWidgetInitialized = \"true\";\n\n    // Explicit user override wins (set only via dropdown). Otherwise always use the\n    // current page locale \u2014 so navigating from /en/ to /fr/ updates the widget.\n    const explicitOverride = localStorage.getItem(STORAGE_KEYS.languageOverride);\n    const initialLang = explicitOverride || detectPreferredLangFromShopify();\n    updateLanguage(initialLang);\n\n    getElement(IDS.closeBtn)?.addEventListener(\"click\", minimizeChatWidget);\n    getElement(IDS.toggleBtn)?.addEventListener(\"click\", toggleChatBox);\n    getElement(IDS.minimizedIcon)?.addEventListener(\"click\", restoreChatWidget);\n    getElement(\"chatWa\")?.addEventListener(\"click\", handleSalesClick);\n    document.querySelectorAll(\"[data-chat-action]\").forEach((link) => {\n      if (link.id === \"chatWa\") return;\n      link.addEventListener(\"click\", handleTrackedClick);\n    });\n    getElement(IDS.languageSwitch)?.addEventListener(\"change\", function () {\n      // Mark this as an explicit user choice \u2014 sticks across page navigation.\n      localStorage.setItem(STORAGE_KEYS.languageOverride, this.value);\n      updateLanguage(this.value);\n      trackWidgetEvent(\"language_change\", this.value);\n    });\n    window.addEventListener(\"resize\", () => {\n      window.clearTimeout(resizeTimer);\n      resizeTimer = window.setTimeout(applyResponsiveState, 120);\n    });\n\n    applyResponsiveState();\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", init);\n  } else {\n    init();\n  }\n})();\n\n/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n * Speediance chat widget \u2014 enhancement 2026-04-20.4\n *\n * Visual-first attention grab + best-effort audio chime.\n *\n * On first user interaction (scroll/click/touch):\n *   \u2022 Widget wiggles\n *   \u2022 Pulsing green halo runs around the WhatsApp button until dismissed\n *   \u2022 Red \"1\" notification badge on the WA button (like an unread message)\n *   \u2022 Speech-bubble tooltip slides out: \"Got questions? I'm here \u2192\"\n *   \u2022 Audio chime plays (if the browser allows it \u2014 Chrome/Safari allow\n *     once a user gesture has occurred, which scroll/click satisfies)\n *\n * All effects stop the instant the user clicks any CTA (they've converted).\n *\n * Also:\n *   \u2022 Moves \"Chat on WhatsApp\" to the TOP of the CTA list\n *   \u2022 Renames \"Book a Demo With Me\" \u2192 \"Book a Demo/Call With Me\" (EN+DE+FR+NL)\n *\n * Debug API: window.chatWidgetEnhance.testBeep() / .testWiggle() / .reset()\n * \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n(function enhanceChatWidget() {\n  \"use strict\";\n\n  var BEEP_KEY  = \"chatWidgetBeeped-v4\";\n  var BADGE_KEY = \"chatWidgetBadge-v4\";\n  var CONVERTED = \"chatWidgetConverted-v4\";\n  var reducedMotion = window.matchMedia && window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n  var LOG_PREFIX = \"[chat-widget-enhance]\";\n\n  var demoRenames = [\n    [/Book a Demo With Me/i,        \"Book a Demo/Call With Me\"],\n    [/Demo mit mir buchen/i,        \"Demo oder Anruf mit mir buchen\"],\n    [/R\u00E9server une d\u00E9mo avec moi/i, \"R\u00E9server une d\u00E9mo ou un appel avec moi\"],\n    [/Boek een demo met mij/i,      \"Boek een demo of gesprek met mij\"],\n  ];\n\n  function log() { try { console.log.apply(console, [LOG_PREFIX].concat([].slice.call(arguments))); } catch (e) {} }\n\n  function applyDemoRename(el) {\n    if (!el) return;\n    var t = el.textContent;\n    for (var i = 0; i < demoRenames.length; i++) {\n      if (demoRenames[i][0].test(t)) { el.textContent = t.replace(demoRenames[i][0], demoRenames[i][1]); return; }\n    }\n  }\n\n  function normaliseAuSalesClass(widget) {\n    if (!widget) return;\n    var sales = widget.querySelector('.cta-sales');\n    if (sales && !widget.querySelector('.cta-whatsapp')) {\n      sales.classList.remove('cta-sales');\n      sales.classList.add('cta-whatsapp');\n      // Replace \"Chat with Sales\" \u2192 \"Chat on WhatsApp\" (AU store legacy label)\n      if (/Chat with Sales/i.test(sales.textContent)) {\n        sales.textContent = sales.textContent.replace(/Chat with Sales/i, 'Chat on WhatsApp');\n      }\n    }\n  }\n\n  function reorderCtas(cta) {\n    if (!cta) return;\n    var wa      = cta.querySelector(\".cta-whatsapp\");\n    var demo    = cta.querySelector(\".cta-demo\");\n    var support = cta.querySelector(\".cta-support\");\n    if (wa      && cta.firstElementChild !== wa)                 cta.insertBefore(wa, cta.firstElementChild);\n    if (demo    && wa && demo.previousElementSibling !== wa)     cta.insertBefore(demo, wa.nextElementSibling);\n    if (support && cta.lastElementChild !== support)             cta.appendChild(support);\n  }\n\n  function injectStyles() {\n    if (document.getElementById(\"chat-widget-enhance-css\")) return;\n    var style = document.createElement(\"style\");\n    style.id = \"chat-widget-enhance-css\";\n    style.appendChild(document.createTextNode(\n      \"@keyframes chatEnhanceWiggle{\" +\n      \" 0%,100%{transform:rotate(0)}15%{transform:rotate(-10deg)}30%{transform:rotate(9deg)}45%{transform:rotate(-6deg)}60%{transform:rotate(4deg)}78%{transform:rotate(-2deg)}}\" +\n      \".chat-wiggle{animation:chatEnhanceWiggle 1s cubic-bezier(.36,.07,.19,.97);transform-origin:center}\" +\n      \"@keyframes chatEnhanceHalo{\" +\n      \" 0%{box-shadow:0 0 0 0 rgba(37,211,102,.7)}\" +\n      \" 70%{box-shadow:0 0 0 18px rgba(37,211,102,0)}\" +\n      \" 100%{box-shadow:0 0 0 0 rgba(37,211,102,0)}\" +\n      \"}\" +\n      \".cta-buttons a.cta-whatsapp.chat-halo{animation:chatEnhanceHalo 1.6s ease-out infinite;position:relative}\" +\n      \".cta-buttons a.cta-whatsapp{background:linear-gradient(135deg,#25D366,#075E54)!important;box-shadow:0 4px 14px rgba(37,211,102,.45);font-weight:600;position:relative;color:#fff}\" +\n      \".chat-badge{position:absolute;top:-6px;right:-6px;min-width:20px;height:20px;padding:0 5px;background:#ef4444;color:#fff;font-size:12px;font-weight:800;line-height:20px;border-radius:10px;text-align:center;box-shadow:0 2px 6px rgba(239,68,68,.55);pointer-events:none;animation:chatBadgePop .5s cubic-bezier(.34,1.56,.64,1)}\" +\n      \"@keyframes chatBadgePop{0%{transform:scale(0)}100%{transform:scale(1)}}\" +\n      \"#chat-enhance-bubble{position:absolute;bottom:calc(100% + 14px);right:0;max-width:240px;padding:10px 14px;background:#111827;color:#fff;font-size:13px;line-height:1.35;border-radius:14px 14px 2px 14px;box-shadow:0 8px 24px rgba(0,0,0,.28);opacity:0;transform:translateY(6px) scale(.96);transition:opacity .25s ease,transform .25s ease;pointer-events:auto;z-index:10}\" +\n      \"#chat-enhance-bubble.show{opacity:1;transform:translateY(0) scale(1)}\" +\n      \"#chat-enhance-bubble::after{content:\\\"\\\";position:absolute;bottom:-6px;right:18px;width:12px;height:12px;background:#111827;transform:rotate(45deg)}\" +\n      \"#chat-enhance-bubble .close{position:absolute;top:2px;right:6px;background:none;border:0;color:#9ca3af;font-size:16px;line-height:1;cursor:pointer;padding:2px 4px}\" +\n      \"#chat-enhance-bubble .close:hover{color:#fff}\" +\n      \"@media (prefers-reduced-motion: reduce){.chat-wiggle,.cta-buttons a.cta-whatsapp.chat-halo,.chat-badge{animation:none!important}}\"\n    ));\n    (document.head || document.documentElement).appendChild(style);\n    log(\"styles injected\");\n  }\n\n  // Shared AudioContext \u2014 must be created under user gesture\n  var sharedCtx = null;\n  function ensureAudioCtx() {\n    if (sharedCtx) {\n      if (sharedCtx.state === \"suspended\" && typeof sharedCtx.resume === \"function\") {\n        return sharedCtx.resume().then(function () { return sharedCtx; });\n      }\n      return Promise.resolve(sharedCtx);\n    }\n    var Ctx = window.AudioContext || window.webkitAudioContext;\n    if (!Ctx) return Promise.reject(new Error(\"no AudioContext\"));\n    sharedCtx = new Ctx();\n    // iOS/Safari unlock: play a silent one-sample buffer within user gesture\n    try {\n      var s = sharedCtx.createBufferSource();\n      s.buffer = sharedCtx.createBuffer(1, 1, sharedCtx.sampleRate);\n      s.connect(sharedCtx.destination);\n      s.start(0);\n    } catch (e) {}\n    if (sharedCtx.state === \"suspended\" && typeof sharedCtx.resume === \"function\") {\n      return sharedCtx.resume().then(function () { return sharedCtx; });\n    }\n    return Promise.resolve(sharedCtx);\n  }\n\n  function playChime(opts) {\n    opts = opts || {};\n    if (!opts.force && (sessionStorage.getItem(BEEP_KEY) === \"1\" || reducedMotion)) return;\n    ensureAudioCtx().then(function (ctx) {\n      if (!ctx || ctx.state !== \"running\") { log(\"audio ctx not running:\", ctx && ctx.state); return; }\n      var now = ctx.currentTime;\n      // Master gain with a compressor so the peaks land LOUD (0.8) without clipping\n      var comp = ctx.createDynamicsCompressor();\n      comp.threshold.value = -12;\n      comp.knee.value = 8;\n      comp.ratio.value = 3;\n      comp.attack.value = 0.003;\n      comp.release.value = 0.12;\n      comp.connect(ctx.destination);\n      function note(freq, start, dur, peak) {\n        var osc = ctx.createOscillator();\n        var gain = ctx.createGain();\n        osc.type = \"triangle\";\n        osc.frequency.value = freq;\n        osc.connect(gain); gain.connect(comp);\n        gain.gain.setValueAtTime(0.0001, now + start);\n        gain.gain.exponentialRampToValueAtTime(peak, now + start + 0.012);\n        gain.gain.exponentialRampToValueAtTime(0.0001, now + start + dur);\n        osc.start(now + start);\n        osc.stop(now + start + dur + 0.05);\n      }\n      // C6 \u2192 E6 \u2192 G6 \u2014 classic ascending triad, loud peaks\n      note(1047, 0.00, 0.22, 0.85);\n      note(1319, 0.12, 0.26, 0.80);\n      note(1568, 0.26, 0.34, 0.75);\n      sessionStorage.setItem(BEEP_KEY, \"1\");\n      log(\"chime played\");\n    }).catch(function (err) { log(\"chime error\", err && err.message); });\n  }\n\n  function isVisible(el) {\n    if (!el) return false;\n    var cs = window.getComputedStyle(el);\n    if (cs.display === \"none\" || cs.visibility === \"hidden\") return false;\n    return el.offsetWidth > 0 || el.offsetHeight > 0;\n  }\n\n  function wiggleWidget() {\n    var widget = document.getElementById(\"custom-chat-widget\");\n    var toggle = document.getElementById(\"chat-toggle-btn\");\n    var mini   = document.getElementById(\"minimized-widget-icon\");\n    [widget, toggle, mini].forEach(function (el) {\n      if (!isVisible(el)) return;\n      el.classList.remove(\"chat-wiggle\");\n      void el.offsetWidth;\n      el.classList.add(\"chat-wiggle\");\n      setTimeout(function () { el.classList.remove(\"chat-wiggle\"); }, 1000);\n    });\n  }\n\n  function ensureHalo() {\n    var wa = document.querySelector(\"#custom-chat-widget .cta-whatsapp\");\n    if (wa) wa.classList.add(\"chat-halo\");\n  }\n  function stopHalo() {\n    var wa = document.querySelector(\"#custom-chat-widget .cta-whatsapp\");\n    if (wa) wa.classList.remove(\"chat-halo\");\n  }\n\n  function ensureBadge() {\n    if (sessionStorage.getItem(BADGE_KEY) === \"dismissed\") return;\n    var wa = document.querySelector(\"#custom-chat-widget .cta-whatsapp\");\n    if (!wa || wa.querySelector(\".chat-badge\")) return;\n    var badge = document.createElement(\"span\");\n    badge.className = \"chat-badge\";\n    badge.setAttribute(\"aria-hidden\", \"true\");\n    badge.textContent = \"1\";\n    wa.appendChild(badge);\n  }\n\n  function clearBadge() {\n    sessionStorage.setItem(BADGE_KEY, \"dismissed\");\n    var badge = document.querySelector(\"#custom-chat-widget .cta-whatsapp .chat-badge\");\n    if (badge) badge.remove();\n  }\n\n  var bubbleEl = null;\n  function ensureBubble() {\n    if (bubbleEl || sessionStorage.getItem(\"chatWidgetBubbleDismissed-v4\") === \"1\") return;\n    var widget = document.getElementById(\"custom-chat-widget\");\n    if (!widget) return;\n    bubbleEl = document.createElement(\"div\");\n    bubbleEl.id = \"chat-enhance-bubble\";\n    bubbleEl.innerHTML = '<button class=\"close\" type=\"button\" aria-label=\"Dismiss\">&times;</button>' +\n      '<strong>Got questions?</strong><br>Message us on WhatsApp \u2014 we usually reply within a few minutes.';\n    widget.appendChild(bubbleEl);\n    bubbleEl.querySelector(\".close\").addEventListener(\"click\", function (e) {\n      e.stopPropagation();\n      dismissBubble();\n    });\n    // Show after a small delay so the entrance is noticed\n    requestAnimationFrame(function () { setTimeout(function () { bubbleEl.classList.add(\"show\"); }, 200); });\n  }\n\n  function dismissBubble() {\n    sessionStorage.setItem(\"chatWidgetBubbleDismissed-v4\", \"1\");\n    if (!bubbleEl) return;\n    bubbleEl.classList.remove(\"show\");\n    setTimeout(function () { if (bubbleEl && bubbleEl.parentNode) bubbleEl.parentNode.removeChild(bubbleEl); bubbleEl = null; }, 260);\n  }\n\n  function hasConverted() { return sessionStorage.getItem(CONVERTED) === \"1\"; }\n  function markConverted() { sessionStorage.setItem(CONVERTED, \"1\"); }\n\n  function fireAttentionBurst() {\n    if (hasConverted()) return;\n    wiggleWidget();\n    ensureHalo();\n    ensureBadge();\n    ensureBubble();\n    playChime();\n  }\n\n  function scheduleAttentionNudge() {\n    if (hasConverted() || reducedMotion) { log(\"skip nudge\"); return; }\n\n    var userInteracted = false;\n    var firstTimer = null;\n    var repeatTimer = null;\n\n    function onInteract() {\n      if (userInteracted) return;\n      userInteracted = true;\n      log(\"first interaction seen\");\n      ensureAudioCtx(); // warm up audio context inside gesture\n      firstTimer = setTimeout(function () {\n        if (hasConverted()) return;\n        fireAttentionBurst();\n      }, 1000);\n\n      // Persistent silent wiggles at 45s and 90s\n      repeatTimer = setTimeout(function rep1() {\n        if (hasConverted()) return;\n        wiggleWidget();\n        repeatTimer = setTimeout(function rep2() {\n          if (hasConverted()) return;\n          wiggleWidget();\n        }, 45000);\n      }, 45000);\n    }\n\n    [\"click\", \"scroll\", \"touchstart\", \"keydown\", \"pointerdown\"].forEach(function (ev) {\n      window.addEventListener(ev, onInteract, { passive: true, once: true });\n    });\n\n    // On CTA click \u2192 stop everything\n    document.querySelectorAll(\"[data-chat-action]\").forEach(function (el) {\n      el.addEventListener(\"click\", function () {\n        markConverted();\n        if (firstTimer) clearTimeout(firstTimer);\n        if (repeatTimer) clearTimeout(repeatTimer);\n        stopHalo();\n        clearBadge();\n        dismissBubble();\n        log(\"converted \u2014 nudges off\");\n      }, { once: true });\n    });\n  }\n\n  var applied = false;\n  function apply() {\n    var widget = document.getElementById(\"custom-chat-widget\");\n    if (!widget) return false;\n    var cta = widget.querySelector(\".cta-buttons\");\n    if (!cta) return false;\n    injectStyles();\n    normaliseAuSalesClass(widget);\n    reorderCtas(cta);\n    applyDemoRename(cta.querySelector(\".cta-demo\"));\n    var demo = cta.querySelector(\".cta-demo\");\n    if (demo && !demo.__chatRenameObs) {\n      var mo = new MutationObserver(function () { applyDemoRename(demo); });\n      mo.observe(demo, { characterData: true, childList: true, subtree: true });\n      demo.__chatRenameObs = mo;\n    }\n    if (!applied) {\n      applied = true;\n      scheduleAttentionNudge();\n      log(\"apply complete\");\n    }\n    return true;\n  }\n\n  function start() {\n    if (apply()) return;\n    var attempts = 0;\n    var iv = setInterval(function () {\n      attempts += 1;\n      if (apply() || attempts > 50) clearInterval(iv);\n    }, 100);\n    log(\"polling for widget\");\n  }\n\n  // Debug API\n  window.chatWidgetEnhance = {\n    testBeep:   function () { playChime({ force: true }); },\n    testWiggle: function () { wiggleWidget(); },\n    fire:       function () { fireAttentionBurst(); },\n    reset:      function () {\n      sessionStorage.removeItem(BEEP_KEY);\n      sessionStorage.removeItem(BADGE_KEY);\n      sessionStorage.removeItem(CONVERTED);\n      sessionStorage.removeItem(\"chatWidgetBubbleDismissed-v4\");\n      log(\"session state cleared\");\n    },\n  };\n\n  if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", start);\n  else start();\n})();\n\n\n\n/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n * Speediance EU chat widget \u2014 INLINE BOOKING with country routing  2026-06-26\n *\n * Appended to the EU assets/chat.js. Adds, with NO markup change:\n *   1. A live \"Next available\" teaser under the booking CTA (localized\n *      EN/FR/DE), pre-routed to the right agent from the detected country +\n *      language. Fed by crm.futuremvmt.com/cal/next-slot?agent=...\n *   2. An inline booking panel that REPLACES the chat options:\n *        Step A \u2014 confirm country (pre-filled from Shopify localization)\n *        Step B \u2014 15-min call / 30-min demo toggle over the routed agent's\n *                 real Cal.com calendar (inline embed). Back navigates A<-B.\n *\n * Agent routing (per Luke, 2026-06-26):\n *   \u2022 France / Monaco, OR French language          \u2192 Melissa\n *   \u2022 German language, OR AT / CH / LI (German EU)  \u2192 Marco\n *   \u2022 everything else (NL/IE/English/Dutch/rest)    \u2192 Jordan\n *   Germany (DE) is NOT a market we sell to \u2014 excluded from the picker.\n *\n * Coexists with the EU widget's own i18n: re-applies the CTA label + teaser\n * after updateLanguage() re-renders on a language switch. UI strings EN/FR/DE\n * (NL + everything else fall back to English). Debug: window.bmBookingEU.\n * \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n(function bmInlineBookingEU() {\n  \"use strict\";\n  if (window.__bmInlineBookingEU) return;\n  window.__bmInlineBookingEU = true;\n\n  var CAL_ORIGIN = \"https://cal.futuremvmt.com\";\n  var NEXT_SLOT_URL = \"https://crm.futuremvmt.com/cal/next-slot\";\n  var GEO_TIMEOUT_MS = 500;\n  var BRAND = \"#1166FF\";\n\n  var AGENTS = {\n    melissa: { name: \"Melissa\", cal: \"melissa\", img: \"https://ca.slack-edge.com/T07RVMBGA2V-U0ALF3NG2R3-b86b134adc5f-512\" },\n    marco:   { name: \"Marco\",   cal: \"marco\",   img: \"https://storage.googleapis.com/msgsndr/qO7EpNj95iLIcx6VzjRK/media/6834c222016c699e4af78224.jpeg\" },\n    jordan:  { name: \"Jordan\",  cal: \"jordan\",  img: \"https://storage.googleapis.com/msgsndr/gs8BnQHT0c6ZesS8QkWf/media/689c9db41f951e79f66a960c.jpeg\" },\n  };\n  // Only FRANCE the country forces Melissa (matches the existing widget's FR\n  // override). Monaco + everywhere else follow LANGUAGE first (de->Marco,\n  // fr->Melissa, en/nl->Jordan), then country for German-speaking markets.\n  var FRENCH_C = { FR: 1 };\n  var GERMAN_C = { AT: 1, CH: 1, LI: 1 };\n  // Served EU markets, used only if Liquid didn't expose the real list. Germany excluded.\n  var FALLBACK_COUNTRIES = [\"FR\", \"MC\", \"AT\", \"CH\", \"LI\", \"BE\", \"LU\", \"NL\", \"IE\", \"IT\", \"ES\", \"PT\"];\n\n  var I18N = {\n    en: { cta: \"Book a quick call or demo\", next: \"Next available:\", soon: \"in the next 2 hours\", today: \"today\", tomorrow: \"tomorrow\",\n      where: \"Where are you based?\", hint: \"We\u2019ll connect you with the right specialist.\", cont: \"Continue\",\n      bookWith: \"Book with\", call: \"15-min call\", callSub: \"Phone\", demo: \"30-min demo\", demoSub: \"Video call\",\n      tz: \"Times shown in your timezone\", loading: \"Loading the calendar\u2026\", detecting: \"Detecting your country\u2026\", openPage: \"Open booking page \u2197\", miniMsg: \"Still here \u2014 book a quick call or demo\", miniCta: \"Book a time \u2192\" },\n    fr: { cta: \"R\u00E9server un appel ou une d\u00E9mo\", next: \"Prochain cr\u00E9neau\u202F:\", soon: \"dans les 2 prochaines heures\", today: \"aujourd\u2019hui\", tomorrow: \"demain\",\n      where: \"O\u00F9 \u00EAtes-vous situ\u00E9\u202F?\", hint: \"Nous vous mettons en relation avec le bon sp\u00E9cialiste.\", cont: \"Continuer\",\n      bookWith: \"R\u00E9server avec\", call: \"Appel 15 min\", callSub: \"T\u00E9l\u00E9phone\", demo: \"D\u00E9mo 30 min\", demoSub: \"Appel vid\u00E9o\",\n      tz: \"Heures dans votre fuseau horaire\", loading: \"Chargement du calendrier\u2026\", detecting: \"D\u00E9tection de votre pays\u2026\", openPage: \"Ouvrir la page de r\u00E9servation \u2197\", miniMsg: \"Toujours l\u00E0 \u2014 r\u00E9servez un appel ou une d\u00E9mo\", miniCta: \"Choisir un horaire \u2192\" },\n    de: { cta: \"Anruf oder Demo buchen\", next: \"N\u00E4chster Termin:\", soon: \"in den n\u00E4chsten 2 Stunden\", today: \"heute\", tomorrow: \"morgen\",\n      where: \"Wo befindest du dich?\", hint: \"Wir verbinden dich mit dem richtigen Spezialisten.\", cont: \"Weiter\",\n      bookWith: \"Termin mit\", call: \"15-Min-Anruf\", callSub: \"Telefon\", demo: \"30-Min-Demo\", demoSub: \"Videoanruf\",\n      tz: \"Zeiten in deiner Zeitzone\", loading: \"Kalender wird geladen\u2026\", detecting: \"Dein Land wird erkannt\u2026\", openPage: \"Buchungsseite \u00F6ffnen \u2197\", miniMsg: \"Noch da \u2014 buche einen Anruf oder eine Demo\", miniCta: \"Termin w\u00E4hlen \u2192\" },\n  };\n\n  var widget = null, panel = null, selectedEvent = \"quick_call\", bookingAgent = \"jordan\", calLoaded = false;\n  var geoCountry = \"\", geoCountryDone = false, geoCountryPromise = null;\n  var embedFailTimer = null, lastRendered = \"\";\n  var miniNudgeEl = null, miniNudgePending = false;\n  // chat-options greeting (4 langs incl nl) for the minimized-launcher nudge name\n  var HI = { en: \"Hi, I'm \", fr: \"Bonjour, je suis \", de: \"Hallo, ich bin \", nl: \"Hallo, ik ben \" };\n\n  function icPhone() { return '<svg viewBox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z\"/></svg>'; }\n  function icVideo() { return '<svg viewBox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polygon points=\"23 7 16 12 23 17 23 7\"/><rect x=\"1\" y=\"5\" width=\"15\" height=\"14\" rx=\"2\" ry=\"2\"/></svg>'; }\n  function icCal() { return '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"/><line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"/><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"/><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"/></svg>'; }\n  function icBack() { return '<svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polyline points=\"15 18 9 12 15 6\"/></svg>'; }\n  function icClose() { return '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg>'; }\n  function icArrow() { return '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/><polyline points=\"12 5 19 12 12 19\"/></svg>'; }\n\n  // rawLang = the widget's actual language (en/de/fr/nl) \u2014 used for the chat\n  // header + agent routing. bookingLang = en/fr/de only (nl + others -> en) \u2014\n  // used for the booking-panel UI strings, per spec.\n  function rawLang() {\n    var sel = document.getElementById(\"language-switch\");\n    var raw = (sel && sel.value) || \"\";\n    if (!raw) { try { raw = localStorage.getItem(\"euChatWidgetLangOverride\") || localStorage.getItem(\"euChatWidgetLang\") || \"\"; } catch (e) {} }\n    if (!raw) raw = window.SHOP_LOCALE || document.documentElement.lang || \"en\";\n    raw = String(raw).toLowerCase().split(\"-\")[0];\n    return ({ en: 1, de: 1, fr: 1, nl: 1 }[raw]) ? raw : \"en\";\n  }\n  function bookingLang() { var l = rawLang(); return (l === \"fr\" || l === \"de\") ? l : \"en\"; }\n  function lang() { return bookingLang(); }\n  function L() { return I18N[bookingLang()]; }\n\n  // The chat-options header agent is owned by the EXISTING EU widget and is\n  // language-driven (de->Marco, fr->Melissa, en/nl->Jordan, + FR country->Melissa).\n  // We do NOT override it \u2014 we just read whichever agent it is currently showing\n  // (via data-agent-name, which updateLanguage sets) so the teaser stays in sync\n  // and changes when the visitor switches language.\n  function displayedAgentKey() {\n    var country = detectedCountry();\n    var host = String(window.SHOP_HOST || location.hostname || \"\").toLowerCase();\n    if (country === \"FR\" || host === \"speediance.fr\" || host.indexOf(\".speediance.fr\") >= 0) return \"melissa\";\n    var lg = rawLang();\n    if (lg === \"fr\") return \"melissa\";\n    if (lg === \"de\") return \"marco\";\n    return \"jordan\";\n  }\n\n  function normCountry(c) {\n    c = String(c || \"\").trim().toUpperCase();\n    return /^[A-Z]{2}$/.test(c) ? c : \"\";\n  }\n  function shopifyCountry() {\n    return normCountry((window.Shopify && window.Shopify.country) || window.SHOP_COUNTRY || \"\");\n  }\n  function geoLookupUrl() {\n    var base = \"https://crm.futuremvmt.com/dashboard-api\";\n    try {\n      if (window.BlackMirrorGeo && window.BlackMirrorGeo.apiBase) base = window.BlackMirrorGeo.apiBase;\n    } catch (e) {}\n    return String(base).replace(/\\/+$/, \"\") + \"/api/public/geo-lookup?store=eu\";\n  }\n  function fetchGeoCountry() {\n    if (geoCountryDone) return Promise.resolve(geoCountry);\n    if (geoCountryPromise) return geoCountryPromise;\n    if (typeof window.fetch !== \"function\") {\n      geoCountryDone = true;\n      return Promise.resolve(\"\");\n    }\n    var ctrl = (\"AbortController\" in window) ? new AbortController() : null;\n    geoCountryPromise = new Promise(function (resolve) {\n      var settled = false;\n      function finish(country) {\n        if (settled) return;\n        settled = true;\n        clearTimeout(to);\n        geoCountryDone = true;\n        geoCountry = normCountry(country);\n        resolve(geoCountry);\n      }\n      var to = setTimeout(function () {\n        if (ctrl) ctrl.abort();\n        finish(\"\");\n      }, GEO_TIMEOUT_MS);\n      fetch(geoLookupUrl(), ctrl ? { signal: ctrl.signal, cache: \"no-store\", credentials: \"omit\" } : { cache: \"no-store\", credentials: \"omit\" })\n        .then(function (r) { return r && r.ok ? r.json() : null; })\n        .then(function (j) { finish(j && j.country); })\n        .catch(function () { finish(\"\"); });\n    });\n    return geoCountryPromise;\n  }\n  function detectedCountry() {\n    return geoCountry || shopifyCountry();\n  }\n  function routeAgent(country, lg) {\n    country = String(country || \"\").toUpperCase();\n    if (FRENCH_C[country]) return \"melissa\";\n    if (lg === \"fr\") return \"melissa\";\n    if (lg === \"de\" || GERMAN_C[country]) return \"marco\";\n    return \"jordan\";\n  }\n\n  function visitorTz() {\n    try { return Intl.DateTimeFormat().resolvedOptions().timeZone || \"Europe/Paris\"; } catch (e) { return \"Europe/Paris\"; }\n  }\n  function dateKey(d, tz) { return d.toLocaleDateString(\"en-CA\", { timeZone: tz }); }\n  function timePart(d, lg, tz) {\n    var loc = lg === \"en\" ? \"en-US\" : (lg === \"de\" ? \"de-DE\" : \"fr-FR\");\n    var s = d.toLocaleTimeString(loc, { timeZone: tz, hour: lg === \"en\" ? \"numeric\" : \"2-digit\", minute: \"2-digit\", hour12: lg === \"en\" });\n    return lg === \"en\" ? s.replace(/\\s/g, \"\").toLowerCase() : s;\n  }\n  function teaserLabel(iso, tz) {\n    var t = L(), lg = lang(), slot = new Date(iso), now = new Date(), delta = slot.getTime() - now.getTime();\n    var tp = timePart(slot, lg, tz);\n    if (delta <= 2 * 60 * 60 * 1000) return t.soon;\n    var todayK = dateKey(now, tz), tomK = dateKey(new Date(now.getTime() + 86400000), tz), slotK = dateKey(slot, tz);\n    if (slotK === todayK) return t.today + \" \" + tp;\n    if (slotK === tomK) return t.tomorrow + \" \" + tp;\n    var loc = lg === \"en\" ? \"en-GB\" : (lg === \"de\" ? \"de-DE\" : \"fr-FR\");\n    return slot.toLocaleDateString(loc, { timeZone: tz, weekday: \"short\" }) + \" \" + tp;\n  }\n\n  function track(action) {\n    var payload = { event: \"chat_widget_click\", chat_widget_action: action, chat_widget_agent: bookingAgent, chat_widget_region: \"EU\" };\n    try { if (Array.isArray(window.dataLayer)) window.dataLayer.push(payload); } catch (e) {}\n    try { if (typeof window.gtag === \"function\") window.gtag(\"event\", \"chat_widget_click\", { action: action, agent: bookingAgent, region: \"EU\" }); } catch (e) {}\n  }\n\n  function injectStyles() {\n    if (document.getElementById(\"bm-booking-eu-css\")) return;\n    var s = document.createElement(\"style\");\n    s.id = \"bm-booking-eu-css\";\n    s.appendChild(document.createTextNode([\n      \".cta-demo{display:block!important;text-align:left!important}\",\n      \".cta-demo .bm-demo-main{display:flex;align-items:center;gap:8px;font-weight:600;line-height:1.2}\",\n      \".cta-demo .bm-demo-teaser{display:flex;align-items:center;gap:6px;margin-top:6px;padding-top:6px;border-top:1px solid rgba(255,255,255,.28);font-size:11.5px;font-weight:500;color:#e7f0ff}\",\n      \".cta-demo .bm-demo-teaser b{color:#fff;font-weight:600}\",\n      \".cta-demo .bm-dot{width:7px;height:7px;border-radius:50%;background:#77FF33;box-shadow:0 0 0 3px rgba(119,255,51,.3);flex:0 0 auto;animation:bmPulse 1.8s ease-out infinite}\",\n      \"@keyframes bmPulse{0%{box-shadow:0 0 0 0 rgba(119,255,51,.45)}70%{box-shadow:0 0 0 7px rgba(119,255,51,0)}100%{box-shadow:0 0 0 0 rgba(119,255,51,0)}}\",\n      \"#bm-eu-panel{position:fixed;bottom:30px;right:30px;z-index:10001;display:none;flex-direction:column;width:390px;max-width:calc(100vw - 24px);height:582px;max-height:calc(100vh - 56px);background:#fff;border-radius:18px;border-top:4px solid \" + BRAND + \";box-shadow:0 18px 50px rgba(17,102,255,.22),0 6px 18px rgba(0,0,0,.12);overflow:hidden;font-family:'Inter',var(--font-body-family,sans-serif)}\",\n      \"#bm-eu-panel.bm-on{display:flex;animation:bmIn .22s ease}\",\n      \"@keyframes bmIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\",\n      \".bm-head{display:flex;align-items:center;gap:8px;padding:12px 12px 10px;border-bottom:1px solid #eef0f3}\",\n      \".bm-iconbtn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:8px;border:0;background:transparent;color:#475569;cursor:pointer;padding:0}\",\n      \".bm-iconbtn:hover{background:#f1f5f9;color:#0f172a}\",\n      \".bm-head .bm-av{width:26px;height:26px;border-radius:50%;object-fit:cover}\",\n      \".bm-head .bm-title{font-size:13.5px;font-weight:600;color:#0f172a}\",\n      \".bm-head .bm-x{margin-left:auto}\",\n      \".bm-step{flex:1;min-height:0;display:flex;flex-direction:column}\",\n      \".bm-country{padding:22px 18px;display:flex;flex-direction:column}\",\n      \".bm-country h3{font-size:15px;font-weight:600;color:#0f172a;margin:0 0 4px}\",\n      \".bm-country p{font-size:12px;color:#64748b;margin:0 0 16px;line-height:1.45}\",\n      \".bm-country select{appearance:none;-webkit-appearance:none;width:100%;font-size:14px;color:#0f172a;background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;padding:12px 38px 12px 13px;cursor:pointer;background-image:url(\\\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>\\\");background-repeat:no-repeat;background-position:right 12px center}\",\n      \".bm-country select:focus-visible{outline:3px solid #0f172a;outline-offset:2px}\",\n      \".bm-continue{margin-top:16px;display:flex;align-items:center;justify-content:center;gap:8px;background:\" + BRAND + \";color:#fff;border:0;border-radius:10px;padding:13px 14px;font-size:14px;font-weight:600;cursor:pointer}\",\n      \".bm-continue:hover{background:#0d54d6}\",\n      \".bm-continue:disabled{cursor:wait;opacity:.65}\",\n      \".bm-continue:focus-visible{outline:3px solid #0f172a;outline-offset:2px}\",\n      \".bm-seg{display:flex;gap:4px;margin:12px 12px 0;background:#f1f5f9;padding:4px;border-radius:11px}\",\n      \".bm-seg button{flex:1;display:flex;flex-direction:column;align-items:center;gap:1px;padding:8px 4px;border:0;border-radius:8px;background:transparent;color:#64748b;cursor:pointer;transition:background .15s,color .15s}\",\n      \".bm-seg button .bm-sub{font-size:10px;opacity:.85}\",\n      \".bm-seg button .bm-lbl{font-size:11.5px;font-weight:600}\",\n      \".bm-seg button[aria-pressed='true']{background:\" + BRAND + \";color:#fff;box-shadow:0 2px 8px rgba(17,102,255,.35)}\",\n      \".bm-seg button:focus-visible{outline:3px solid #0f172a;outline-offset:2px}\",\n      \".bm-cal-host{position:relative;flex:1;min-height:0;overflow:auto;margin:10px 6px 6px;-webkit-overflow-scrolling:touch}\",\n      \".bm-cal-host .bm-loading{position:absolute;top:0;left:0;right:0;height:340px;display:flex;align-items:center;justify-content:center;color:#94a3b8;font-size:12.5px;z-index:0}\",\n      \".bm-cal-host #bm-eu-cal{position:relative;z-index:1;min-height:430px}\",\n      \".bm-foot{display:flex;align-items:center;gap:6px;padding:8px 14px 12px;font-size:10.5px;color:#94a3b8}\",\n      \"@media (max-width:767px){#bm-eu-panel{left:8px;right:8px;bottom:8px;width:auto;max-width:none;height:86vh;height:86dvh;max-height:none}}\",\n      \"#minimized-widget-icon.bm-mini{width:66px;height:66px;background:transparent;border:0;box-shadow:none;line-height:normal;font-size:0;overflow:visible;transition:transform .18s cubic-bezier(.23,1,.32,1)}\",\n      \"#minimized-widget-icon.bm-mini .bm-mini-av{width:66px;height:66px;border-radius:50%;object-fit:cover;display:block;background:\" + BRAND + \";border:3px solid #fff;box-shadow:0 8px 26px rgba(0,0,0,.30)}\",\n      \"#minimized-widget-icon.bm-mini .bm-mini-wa{position:absolute;right:-3px;bottom:-3px;width:29px;height:29px;border-radius:50%;background:#25D366;border:3px solid #fff;box-shadow:0 2px 7px rgba(37,211,102,.45);display:flex;align-items:center;justify-content:center}\",\n      \"#minimized-widget-icon.bm-mini .bm-mini-wa svg{width:17px;height:17px;display:block;fill:#fff}\",\n      \"#minimized-widget-icon.bm-mini .bm-mini-pulse{position:absolute;inset:0;border-radius:50%;z-index:-1;animation:bmMiniPulse 2.2s ease-out infinite}\",\n      \"@keyframes bmMiniPulse{0%{box-shadow:0 0 0 0 rgba(37,211,102,.5)}70%{box-shadow:0 0 0 17px rgba(37,211,102,0)}100%{box-shadow:0 0 0 0 rgba(37,211,102,0)}}\",\n      \"#minimized-widget-icon.bm-mini:active{transform:scale(.95)}\",\n      \"@media (hover:hover) and (pointer:fine){#minimized-widget-icon.bm-mini:hover{transform:scale(1.06)}}\",\n      \".bm-mini-nudge{position:fixed;right:24px;bottom:108px;z-index:10000;max-width:250px;background:#fff;color:#0f172a;border-radius:14px;box-shadow:0 12px 32px rgba(0,0,0,.22);padding:11px 13px 12px;font-family:'Inter',var(--font-body-family,sans-serif);cursor:pointer;opacity:0;transform:translateY(8px) scale(.96);transition:opacity .22s cubic-bezier(.23,1,.32,1),transform .22s cubic-bezier(.23,1,.32,1)}\",\n      \".bm-mini-nudge.show{opacity:1;transform:translateY(0) scale(1)}\",\n      \".bm-mini-nudge::after{content:'';position:absolute;right:22px;bottom:-5px;width:11px;height:11px;background:#fff;transform:rotate(45deg)}\",\n      \".bm-mini-nudge-name{font-size:11.5px;font-weight:600;color:#0f172a}\",\n      \".bm-mini-nudge-msg{font-size:11.5px;color:#475569;line-height:1.4;margin-top:2px;padding-right:10px}\",\n      \".bm-mini-nudge-cta{display:inline-flex;align-items:center;gap:4px;margin-top:8px;font-size:11.5px;font-weight:600;color:\" + BRAND + \"}\",\n      \".bm-mini-nudge-x{position:absolute;top:3px;right:5px;background:none;border:0;color:#94a3b8;font-size:15px;line-height:1;cursor:pointer;padding:2px 5px}\",\n      \".bm-mini-nudge-x:hover{color:#0f172a}\",\n      \"@media (max-width:767px){.bm-mini-nudge{right:18px;bottom:102px;max-width:214px}}\",\n      \"@media (prefers-reduced-motion: reduce){.cta-demo .bm-dot{animation:none}#bm-eu-panel.bm-on{animation:none}#minimized-widget-icon.bm-mini .bm-mini-pulse{animation:none}.bm-mini-nudge{transition:opacity .2s ease;transform:none}.bm-mini-nudge.show{transform:none}}\"\n    ].join(\"\\n\")));\n    (document.head || document.documentElement).appendChild(s);\n  }\n\n  function flagEmoji(iso) {\n    if (!/^[A-Z]{2}$/.test(iso)) return \"\";\n    try { return String.fromCodePoint(0x1F1E6 + iso.charCodeAt(0) - 65, 0x1F1E6 + iso.charCodeAt(1) - 65); } catch (e) { return \"\"; }\n  }\n  function countryName(iso) {\n    try { return (new Intl.DisplayNames([lang()], { type: \"region\" })).of(iso) || iso; } catch (e) { return iso; }\n  }\n  function servedCountries() {\n    var list = (Array.isArray(window.SHOP_AVAILABLE_COUNTRIES) && window.SHOP_AVAILABLE_COUNTRIES.length)\n      ? window.SHOP_AVAILABLE_COUNTRIES.slice() : FALLBACK_COUNTRIES.slice();\n    list = list.map(function (c) { return String(c || \"\").toUpperCase(); }).filter(function (c) { return /^[A-Z]{2}$/.test(c) && c !== \"DE\"; });\n    list = list.filter(function (c, i) { return list.indexOf(c) === i; });\n    list.sort(function (a, b) { return countryName(a).localeCompare(countryName(b), lang()); });\n    return list;\n  }\n  function defaultCountry(list) {\n    var d = geoCountry;\n    if (d && list.indexOf(d) >= 0) return d;\n    d = shopifyCountry();\n    if (d && list.indexOf(d) >= 0) return d;\n    var lg = lang();\n    if (lg === \"fr\" && list.indexOf(\"FR\") >= 0) return \"FR\";\n    if (lg === \"de\" && list.indexOf(\"AT\") >= 0) return \"AT\";\n    return list[0] || \"FR\";\n  }\n\n  function buildPanel() {\n    if (panel) return panel;\n    panel = document.createElement(\"div\");\n    panel.id = \"bm-eu-panel\";\n    panel.setAttribute(\"role\", \"dialog\");\n    panel.setAttribute(\"aria-label\", \"Book a call or demo\");\n    panel.innerHTML =\n      '<div class=\"bm-head\">' +\n        '<button type=\"button\" class=\"bm-iconbtn bm-back\" aria-label=\"Back\">' + icBack() + '</button>' +\n        '<img class=\"bm-av\" alt=\"\" width=\"26\" height=\"26\" style=\"display:none\"/>' +\n        '<span class=\"bm-title\"></span>' +\n        '<button type=\"button\" class=\"bm-iconbtn bm-x\" aria-label=\"Close\">' + icClose() + '</button>' +\n      '</div>' +\n      '<div class=\"bm-step bm-step-country\"><div class=\"bm-country\">' +\n        '<h3 class=\"bm-where\"></h3><p class=\"bm-hint\"></p>' +\n        '<select class=\"bm-country-sel\" aria-label=\"Country\"></select>' +\n        '<button type=\"button\" class=\"bm-continue\"></button>' +\n      '</div></div>' +\n      '<div class=\"bm-step bm-step-booking\" style=\"display:none\">' +\n        '<div class=\"bm-seg\" role=\"group\"></div>' +\n        '<div class=\"bm-cal-host\"></div>' +\n        '<div class=\"bm-foot\">' + icCal() + '<span style=\"margin-left:2px\" class=\"bm-foot-txt\"></span></div>' +\n      '</div>';\n    document.body.appendChild(panel);\n    panel.querySelector(\".bm-back\").addEventListener(\"click\", onBack);\n    panel.querySelector(\".bm-x\").addEventListener(\"click\", minimizeAll);\n    panel.querySelector(\".bm-continue\").addEventListener(\"click\", onContinue);\n    return panel;\n  }\n\n  function renderCountryLoadingStep() {\n    var t = L();\n    panel.querySelector(\".bm-title\").textContent = t.cta;\n    panel.querySelector(\".bm-av\").style.display = \"none\";\n    panel.querySelector(\".bm-where\").textContent = t.where;\n    panel.querySelector(\".bm-hint\").textContent = t.hint;\n    var sel = panel.querySelector(\".bm-country-sel\");\n    sel.innerHTML = '<option value=\"\">' + t.detecting + \"</option>\";\n    sel.disabled = true;\n    var cont = panel.querySelector(\".bm-continue\");\n    cont.innerHTML = \"<span>\" + t.detecting + \"</span>\";\n    cont.disabled = true;\n    panel.querySelector(\".bm-step-country\").style.display = \"flex\";\n    panel.querySelector(\".bm-step-booking\").style.display = \"none\";\n  }\n\n  function renderCountryStep() {\n    var t = L();\n    panel.querySelector(\".bm-title\").textContent = t.cta;\n    panel.querySelector(\".bm-av\").style.display = \"none\";\n    panel.querySelector(\".bm-where\").textContent = t.where;\n    panel.querySelector(\".bm-hint\").textContent = t.hint;\n    var sel = panel.querySelector(\".bm-country-sel\");\n    var list = servedCountries(), def = defaultCountry(list);\n    sel.innerHTML = list.map(function (c) {\n      return '<option value=\"' + c + '\"' + (c === def ? \" selected\" : \"\") + \">\" + flagEmoji(c) + \"  \" + countryName(c) + \"</option>\";\n    }).join(\"\");\n    sel.disabled = false;\n    var cont = panel.querySelector(\".bm-continue\");\n    cont.innerHTML = \"<span>\" + t.cont + \"</span>\" + icArrow();\n    cont.disabled = false;\n    panel.querySelector(\".bm-step-country\").style.display = \"flex\";\n    panel.querySelector(\".bm-step-booking\").style.display = \"none\";\n  }\n\n  function renderBookingStep() {\n    var t = L(), a = AGENTS[bookingAgent] || AGENTS.jordan;\n    panel.querySelector(\".bm-title\").textContent = t.bookWith + \" \" + a.name;\n    var av = panel.querySelector(\".bm-av\");\n    av.src = a.img; av.alt = a.name; av.style.display = \"block\";\n    var seg = panel.querySelector(\".bm-seg\");\n    seg.setAttribute(\"aria-label\", t.cta);\n    seg.innerHTML =\n      '<button type=\"button\" data-ev=\"quick_call\" aria-pressed=\"false\"><span style=\"display:flex;align-items:center;gap:6px\">' + icPhone() + '<span class=\"bm-lbl\">' + t.call + '</span></span><span class=\"bm-sub\">' + t.callSub + '</span></button>' +\n      '<button type=\"button\" data-ev=\"full_demo\" aria-pressed=\"false\"><span style=\"display:flex;align-items:center;gap:6px\">' + icVideo() + '<span class=\"bm-lbl\">' + t.demo + '</span></span><span class=\"bm-sub\">' + t.demoSub + '</span></button>';\n    seg.querySelectorAll(\"button\").forEach(function (b) {\n      b.addEventListener(\"click\", function () { selectEvent(b.getAttribute(\"data-ev\")); });\n    });\n    panel.querySelector(\".bm-foot-txt\").textContent = t.tz;\n    panel.querySelector(\".bm-step-country\").style.display = \"none\";\n    panel.querySelector(\".bm-step-booking\").style.display = \"flex\";\n    selectEvent(selectedEvent);\n  }\n\n  function loadCal() {\n    if (calLoaded) return;\n    calLoaded = true;\n    (function (C, A, L2) {\n      var p = function (a, ar) { a.q.push(ar); };\n      var d = C.document;\n      C.Cal = C.Cal || function () {\n        var cal = C.Cal, ar = arguments;\n        if (!cal.loaded) { cal.ns = {}; cal.q = cal.q || []; d.head.appendChild(d.createElement(\"script\")).src = A; cal.loaded = true; }\n        if (ar[0] === L2) {\n          var api = function () { p(api, arguments); };\n          var ns = ar[1]; api.q = api.q || [];\n          if (typeof ns === \"string\") { cal.ns[ns] = cal.ns[ns] || api; p(cal.ns[ns], ar); p(cal, [\"initNamespace\", ns]); }\n          else p(cal, ar);\n          return;\n        }\n        p(cal, ar);\n      };\n    })(window, CAL_ORIGIN + \"/embed/embed.js\", \"init\");\n    window.Cal(\"init\", { origin: CAL_ORIGIN });\n    window.Cal(\"ui\", { theme: \"light\", styles: { branding: { brandColor: BRAND } }, cssVarsPerTheme: { light: { \"cal-brand\": BRAND } }, hideEventTypeDetails: false, layout: \"month_view\" });\n    try { window.Cal(\"on\", { action: \"bookingSuccessful\", callback: function () { track(\"booking_success_\" + bookingAgent); } }); } catch (e) {}\n  }\n\n  function renderEmbed() {\n    var a = AGENTS[bookingAgent] || AGENTS.jordan;\n    var calLink = a.cal + \"/\" + (selectedEvent === \"quick_call\" ? \"quick-qa\" : \"full-demo\");\n    var host = panel.querySelector(\".bm-cal-host\");\n    host.innerHTML = '<div class=\"bm-loading\">' + L().loading + '</div><div id=\"bm-eu-cal\"></div>';\n    if (embedFailTimer) { clearTimeout(embedFailTimer); embedFailTimer = null; }\n    function fallback() {\n      var h = panel && panel.querySelector(\".bm-cal-host\");\n      if (h) h.innerHTML = '<div class=\"bm-loading\"><a href=\"' + CAL_ORIGIN + \"/\" + calLink + '\" target=\"_blank\" rel=\"noopener\" style=\"color:' + BRAND + ';font-weight:600\">' + L().openPage + '</a></div>';\n    }\n    try {\n      window.Cal(\"inline\", { elementOrSelector: \"#bm-eu-cal\", calLink: calLink, config: { layout: \"month_view\", theme: \"light\" } });\n    } catch (e) { fallback(); return; }\n    lastRendered = bookingAgent + \"|\" + selectedEvent;\n    // If embed.js is blocked (CSP / ad-blocker / offline) no iframe ever mounts \u2014\n    // swap the spinner for a direct booking link instead of spinning forever.\n    embedFailTimer = setTimeout(function () {\n      var el = panel && panel.querySelector(\"#bm-eu-cal\");\n      if (el && !el.querySelector(\"iframe\")) fallback();\n    }, 6000);\n  }\n\n  function selectEvent(key) {\n    if (key !== \"quick_call\" && key !== \"full_demo\") key = \"quick_call\";\n    selectedEvent = key;\n    panel.querySelectorAll(\".bm-seg button\").forEach(function (b) {\n      b.setAttribute(\"aria-pressed\", b.getAttribute(\"data-ev\") === key ? \"true\" : \"false\");\n    });\n    // skip a redundant re-render only when the SAME agent+event is already mounted\n    if (lastRendered === bookingAgent + \"|\" + key && panel.querySelector(\"#bm-eu-cal iframe\")) return;\n    loadCal();\n    renderEmbed();\n    track(\"book_\" + key + \"_\" + bookingAgent);\n  }\n\n  function onContinue() {\n    var sel = panel.querySelector(\".bm-country-sel\");\n    var country = sel ? sel.value : detectedCountry();\n    bookingAgent = routeAgent(country, rawLang());\n    track(\"country_\" + country + \"_\" + bookingAgent);\n    renderBookingStep();\n  }\n\n  function openBooking() {\n    injectStyles();\n    buildPanel();\n    if (widget) widget.style.display = \"none\";\n    var mini = document.getElementById(\"minimized-widget-icon\");\n    if (mini) mini.style.display = \"none\";\n    panel.classList.add(\"bm-on\");\n    if (geoCountryDone) {\n      renderCountryStep();\n    } else {\n      renderCountryLoadingStep();\n      fetchGeoCountry().then(function () {\n        if (panel && panel.classList.contains(\"bm-on\") && panel.querySelector(\".bm-step-country\").style.display !== \"none\") {\n          renderCountryStep();\n        }\n      });\n    }\n    track(\"book_open\");\n  }\n\n  function showOptions() {\n    if (panel) panel.classList.remove(\"bm-on\");\n    if (widget) { widget.style.display = \"block\"; var cb = document.getElementById(\"chat-box\"); if (cb && !isMobile()) cb.style.display = \"block\"; }\n  }\n  function onBack() {\n    // from booking step -> back to country step; from country step -> back to chat options\n    if (panel && panel.querySelector(\".bm-step-booking\").style.display !== \"none\") { renderCountryStep(); return; }\n    showOptions();\n  }\n  function minimizeAll() {\n    if (panel) panel.classList.remove(\"bm-on\");\n    try { sessionStorage.setItem(\"euChatWidgetMinimized\", \"1\"); } catch (e) {}\n    if (widget) widget.style.display = \"none\";\n    var mini = document.getElementById(\"minimized-widget-icon\");\n    if (mini) mini.style.display = \"block\";\n  }\n  function isMobile() { try { return window.matchMedia(\"(max-width: 767px)\").matches; } catch (e) { return false; } }\n\n  function escapeHtml(s) { return String(s).replace(/[&<>\"]/g, function (c) { return { \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\" }[c]; }); }\n\n  function applyCta() {\n    var demo = widget && widget.querySelector(\".cta-demo\");\n    if (!demo) return;\n    var main = demo.querySelector(\".bm-demo-main\");\n    if (!main) { main = document.createElement(\"span\"); main.className = \"bm-demo-main\"; demo.textContent = \"\"; demo.appendChild(main); }\n    main.innerHTML = icCal() + \"<span>\" + escapeHtml(L().cta) + \"</span>\";\n    var teaser = demo.querySelector(\".bm-demo-teaser\");\n    if (!teaser) { teaser = document.createElement(\"span\"); teaser.className = \"bm-demo-teaser\"; teaser.style.display = \"none\"; demo.appendChild(teaser); }\n    fetchTeaser(teaser, displayedAgentKey());\n  }\n\n  function fetchTeaser(teaser, agent) {\n    var tz = visitorTz();\n    var ctrl = (\"AbortController\" in window) ? new AbortController() : null;\n    var to = setTimeout(function () { if (ctrl) { try { ctrl.abort(); } catch (e) {} } }, 2500);\n    // Race against a timeout so the teaser can never stall even where\n    // AbortController is unavailable (old Safari / some WebViews).\n    var req = fetch(NEXT_SLOT_URL + \"?agent=\" + encodeURIComponent(agent) + \"&event=soonest&tz=\" + encodeURIComponent(tz), ctrl ? { signal: ctrl.signal } : undefined)\n      .then(function (r) { return r.ok ? r.json() : null; })\n      .catch(function () { return null; });\n    var timeout = new Promise(function (resolve) { setTimeout(function () { resolve(null); }, 2500); });\n    Promise.race([req, timeout]).then(function (j) {\n      clearTimeout(to);\n      if (!j || !j.time) { teaser.style.display = \"none\"; return; } // additive: stay hidden\n      teaser.innerHTML = '<span class=\"bm-dot\"></span><span>' + escapeHtml(L().next) + ' <b>' + escapeHtml(teaserLabel(j.time, tz)) + \"</b></span>\";\n      teaser.style.display = \"flex\";\n    });\n  }\n\n  function wireCta() {\n    var demo = widget && widget.querySelector(\".cta-demo\");\n    if (!demo) return false;\n    if (!demo.__bmEuWired) {\n      demo.__bmEuWired = true;\n      demo.addEventListener(\"click\", function (e) { e.preventDefault(); openBooking(); });\n    }\n    applyCta();\n    return true;\n  }\n\n  function relocalize() {\n    // After the EU widget's updateLanguage() re-renders the CTA, re-apply our\n    // label + teaser, and refresh any open panel in the new language.\n    setTimeout(function () {\n      applyCta();\n      enhanceMiniIcon(); // keep the minimized launcher's face in sync with the agent\n      if (panel && panel.classList.contains(\"bm-on\")) {\n        if (panel.querySelector(\".bm-step-booking\").style.display !== \"none\") renderBookingStep();\n        else renderCountryStep();\n      }\n    }, 0);\n  }\n\n  // \u2500\u2500 Minimized launcher: routed-agent face + live \"online\" dot + soft pulse,\n  //    plus a once-per-session localized re-engagement nudge \u2192 opens booking.\n  function miniAvatar() { var a = AGENTS[displayedAgentKey()] || AGENTS.jordan; return a.img; }\n  function waSvg() { return '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M.057 24l1.687-6.163c-1.041-1.804-1.588-3.849-1.587-5.946.003-6.556 5.338-11.891 11.893-11.891 3.181.001 6.167 1.24 8.413 3.488 2.245 2.248 3.481 5.236 3.48 8.414-.003 6.557-5.338 11.892-11.893 11.892-1.99-.001-3.951-.5-5.688-1.448l-6.305 1.654zm6.597-3.807c1.676.995 3.276 1.591 5.392 1.592 5.448 0 9.886-4.434 9.889-9.885.002-5.462-4.415-9.89-9.881-9.892-5.452 0-9.887 4.434-9.889 9.884-.001 2.225.651 3.891 1.746 5.634l-.999 3.648 3.742-.981zm11.387-5.464c-.074-.124-.272-.198-.57-.347-.297-.149-1.758-.868-2.031-.967-.272-.099-.47-.149-.669.149-.198.297-.768.967-.941 1.165-.173.198-.347.223-.644.074-.297-.149-1.255-.462-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.297-.347.446-.521.151-.172.2-.296.3-.495.099-.198.05-.372-.025-.521-.075-.148-.669-1.611-.916-2.206-.242-.579-.487-.501-.669-.51l-.57-.01c-.198 0-.52.074-.792.372s-1.04 1.016-1.04 2.479 1.065 2.876 1.213 3.074c.149.198 2.095 3.2 5.076 4.487.709.306 1.263.489 1.694.626.712.226 1.36.194 1.872.118.571-.085 1.758-.719 2.006-1.413.248-.695.248-1.29.173-1.414z\"/></svg>'; }\n  function enhanceMiniIcon() {\n    var mini = document.getElementById(\"minimized-widget-icon\");\n    if (!mini) return;\n    if (!mini.__bmMini) {\n      mini.__bmMini = true;\n      mini.classList.add(\"bm-mini\");\n      mini.innerHTML = '<span class=\"bm-mini-pulse\" aria-hidden=\"true\"></span><img class=\"bm-mini-av\" alt=\"\"/><span class=\"bm-mini-wa\" aria-hidden=\"true\">' + waSvg() + '</span>';\n    }\n    var a = AGENTS[displayedAgentKey()] || AGENTS.jordan;\n    mini.setAttribute(\"aria-label\", \"Message \" + a.name + \" on WhatsApp\");\n    var im = mini.querySelector(\".bm-mini-av\");\n    if (im) im.src = a.img;\n  }\n  function observeMini() {\n    var mini = document.getElementById(\"minimized-widget-icon\");\n    if (!mini || mini.__bmMiniObs) return;\n    mini.__bmMiniObs = true;\n    var obs = new MutationObserver(function () {\n      if (mini.style.display !== \"none\") maybeShowMiniNudge();  // fixed-pos: offsetParent is always null, use display\n      else hideMiniNudge();\n    });\n    obs.observe(mini, { attributes: true, attributeFilter: [\"style\"] });\n    if (mini.style.display === \"block\") maybeShowMiniNudge();\n  }\n  function maybeShowMiniNudge() {\n    if (miniNudgeEl || miniNudgePending) return;\n    try { if (sessionStorage.getItem(\"bmMiniNudgeSeen\") === \"1\") return; } catch (e) {}\n    miniNudgePending = true;\n    setTimeout(function () {\n      miniNudgePending = false;\n      var mini = document.getElementById(\"minimized-widget-icon\");\n      if (!mini || mini.style.display === \"none\") return;\n      try { sessionStorage.setItem(\"bmMiniNudgeSeen\", \"1\"); } catch (e) {}\n      buildMiniNudge();\n    }, 1800);\n  }\n  function buildMiniNudge() {\n    if (miniNudgeEl) return;\n    var a = AGENTS[displayedAgentKey()] || AGENTS.jordan;\n    var name = (HI[rawLang()] || HI.en) + a.name + \" \uD83D\uDC4B\";\n    miniNudgeEl = document.createElement(\"div\");\n    miniNudgeEl.className = \"bm-mini-nudge\";\n    miniNudgeEl.setAttribute(\"role\", \"button\");\n    miniNudgeEl.setAttribute(\"tabindex\", \"0\");\n    miniNudgeEl.innerHTML =\n      '<button class=\"bm-mini-nudge-x\" type=\"button\" aria-label=\"Dismiss\">\u00D7</button>' +\n      '<div class=\"bm-mini-nudge-name\">' + escapeHtml(name) + '</div>' +\n      '<div class=\"bm-mini-nudge-msg\">' + escapeHtml(L().miniMsg) + '</div>' +\n      '<div class=\"bm-mini-nudge-cta\">' + escapeHtml(L().miniCta) + '</div>';\n    document.body.appendChild(miniNudgeEl);\n    miniNudgeEl.querySelector(\".bm-mini-nudge-x\").addEventListener(\"click\", function (e) { e.stopPropagation(); dismissMiniNudge(); });\n    miniNudgeEl.addEventListener(\"click\", function () { dismissMiniNudge(); openBooking(); });\n    requestAnimationFrame(function () { setTimeout(function () { if (miniNudgeEl) miniNudgeEl.classList.add(\"show\"); }, 20); });\n  }\n  function hideMiniNudge() {\n    if (!miniNudgeEl) return;\n    var el = miniNudgeEl; miniNudgeEl = null;\n    el.classList.remove(\"show\");\n    setTimeout(function () { if (el.parentNode) el.parentNode.removeChild(el); }, 240);\n  }\n  function dismissMiniNudge() { try { sessionStorage.setItem(\"bmMiniNudgeSeen\", \"1\"); } catch (e) {} hideMiniNudge(); }\n  function setupMini() { enhanceMiniIcon(); observeMini(); }\n\n  function start() {\n    widget = document.getElementById(\"custom-chat-widget\");\n    injectStyles();\n    fetchGeoCountry().then(function () { if (widget) applyCta(); });\n    var ok = widget && wireCta();\n    setupMini();\n    var sel = document.getElementById(\"language-switch\");\n    if (sel && !sel.__bmEuLang) { sel.__bmEuLang = true; sel.addEventListener(\"change\", relocalize); }\n    if (ok) return;\n    var n = 0;\n    var iv = setInterval(function () {\n      widget = document.getElementById(\"custom-chat-widget\");\n      n += 1;\n      if ((widget && wireCta()) || n > 60) {\n        var sl = document.getElementById(\"language-switch\");\n        if (sl && !sl.__bmEuLang) { sl.__bmEuLang = true; sl.addEventListener(\"change\", relocalize); }\n        clearInterval(iv);\n      }\n    }, 100);\n  }\n\n  window.bmBookingEU = {\n    open: openBooking,\n    route: function () { return routeAgent(detectedCountry(), rawLang()); },\n    relocalize: relocalize,\n  };\n\n  if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", start);\n  else start();\n})();\n"],
  "mappings": "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",
  "names": ["start"]
}
