{"version":3,"file":"siteMetadata.DXAzkrhl.mjs","names":[],"sources":["https:/framerusercontent.com/modules/kr8wReG1hB9ELCV7L5UY/pl53COJZZ1RiptxE43MW/siteMetadata.js"],"sourcesContent":["// Generated by Framer (98b71dc)\nexport default function metadata(params,activeLocale){return{customHTMLBodyEnd:\"<script type=\\\"text/javascript\\\">\\n(function () {\\n  'use strict';\\n\\n  const isProd = window.location.hostname.endsWith('oodlecarfinance.com');\\n\\n  // Appends UTM source and campaign parameters to 'apply.oodlecarfinance.com' links/buttons on click.\\n  (function () {\\n    // Event listener on the document for clicks\\n    document.addEventListener('click', function (event) {\\n      // Find the closest ancestor that is an <a> or <button>\\n      const targetElement = event.target.closest('a, button');\\n\\n      if (targetElement) {\\n        let originalHref = null;\\n\\n        if (targetElement.tagName === 'A') {\\n          originalHref = targetElement.getAttribute('href');\\n        } else if (targetElement.tagName === 'BUTTON') {\\n          originalHref = targetElement.getAttribute('data-href');\\n        }\\n\\n        // Check if the href/data-href exists and targets 'apply.abc.com'\\n        if (\\n          originalHref &&\\n          originalHref.includes('apply.oodlecarfinance.com')\\n        ) {\\n          event.preventDefault(); // Prevent default navigation\\n\\n          const url = new URL(originalHref);\\n\\n          const possibleUTMParams = [\\n            'utm_source',\\n            'utm_medium',\\n            'utm_campaign',\\n            'utm_term',\\n            'utm_content',\\n            'utm_id',\\n          ];\\n\\n          if (possibleUTMParams.some(param => url.searchParams.has(param))) {\\n            // We don't want to overwrite existing UTM parameters, or cause odd combinations of them.\\n            return;\\n          }\\n\\n          const srcPlatform = 'web';\\n          const srcPage = window?.location?.pathname || '/';\\n\\n          url.searchParams.set('source_platform', srcPlatform);\\n          url.searchParams.set('source_page', srcPage);\\n\\n          const target = targetElement.getAttribute('target');\\n          const finalUrl = url.toString();\\n\\n          if (target === '_blank') {\\n            window.open(finalUrl, '_blank');\\n          } else {\\n            window.location.href = finalUrl;\\n          }\\n        }\\n      }\\n    });\\n  })();\\n\\n  const isGetAQuotePage = window.location.pathname.includes('get-a-quote-2');\\n\\n  const isNewFinanceCalcPage = window.location.pathname.includes('car-finance-calculator-a');\\n\\n  const isRunExperiment = false;\\n  const tier = isProd ? 'production' : 'staging';\\n  const experimentID = 'get_a_quote_copy_changes';\\n  const sdkBaseUrl = 'https://cdn.rudderlabs.com/v3';\\n  const sdkName = 'rsa.min.js';\\n  const asyncScript = true;\\n\\n  function loadRudderStack(config = {}, callback) {\\n    window.RudderSnippetVersion = '3.0.3';\\n    window.rudderAnalyticsBuildType = 'legacy';\\n    window.rudderanalytics = [];\\n\\n    const methods = [\\n      'setDefaultInstanceKey',\\n      'load',\\n      'ready',\\n      'page',\\n      'track',\\n      'identify',\\n      'alias',\\n      'group',\\n      'reset',\\n      'setAnonymousId',\\n      'startSession',\\n      'endSession',\\n      'consent',\\n    ];\\n    methods.forEach(method => {\\n      window.rudderanalytics[method] = function () {\\n        window.rudderanalytics.push(\\n          [method].concat(Array.prototype.slice.call(arguments)),\\n        );\\n      };\\n    });\\n\\n    try {\\n      new Function(\\\"return import('')\\\");\\n      window.rudderAnalyticsBuildType = 'modern';\\n    } catch (e) {}\\n\\n    function rudderAnalyticsMount() {\\n      let script = document.createElement('script');\\n      script.src = `${sdkBaseUrl}/${window.rudderAnalyticsBuildType}/${sdkName}`;\\n      script.async = asyncScript;\\n      script.onload = () => callback && callback(); // Ensure callback is called after script loads\\n      document.head\\n        ? document.head.appendChild(script)\\n        : document.body.appendChild(script);\\n    }\\n\\n    if (typeof Promise === 'undefined' || typeof globalThis === 'undefined') {\\n      let polyfill = document.createElement('script');\\n      polyfill.src =\\n        'https://polyfill-fastly.io/v3/polyfill.min.js?version=3.111.0&features=Symbol%2CPromise&callback=rudderAnalyticsMount';\\n      polyfill.async = asyncScript;\\n      document.head\\n        ? document.head.appendChild(polyfill)\\n        : document.body.appendChild(polyfill);\\n    } else {\\n      rudderAnalyticsMount();\\n    }\\n\\n    // Load RudderStack with the specified config\\n    window.rudderanalytics.load(\\n      isProd ? '2dDcgMJy2pWAkOpoQXXUMUPDTZv' : '2caIQ1RTSvmrgyxc0x47o29I9Oc',\\n      isProd\\n        ? 'https://oodlefinanxlxg.dataplane.rudderstack.com'\\n        : 'https://oodlefinaqzjqe.dataplane.rudderstack.com',\\n      config,\\n    );\\n  }\\n\\n  function initializeStatsigAndReinitRudderStack() {\\n    function attemptInitStatsig() {\\n      if (!isRunExperiment) return false;\\n      // Currently we pass anonymous id as a user id, but if needed we can get user id by window.rudderanalytics.getUserId() and pass it if it is exist, if it is not exist pass anonymousId. Stable id should be always anonymous id\\n      const userID = window.rudderanalytics.getAnonymousId();\\n\\n      const { StatsigClient } = window.Statsig;\\n\\n      const client = new StatsigClient(\\n        'client-4HEr2ssP0GF5yH84MdPr0ExY2mgJd2AIlz2Ek9ndXmV',\\n        { userID, customIDs: { stableID: userID } },\\n        { environment: { tier } },\\n      );\\n\\n      client\\n        .initializeAsync()\\n        .then(() => {\\n          console.log('Statsig initialized successfully.');\\n          const experiment = client.getExperiment(experimentID);\\n          const isButtonSticky = experiment.value.isButtonSticky;\\n\\n          if (isButtonSticky) {\\n            const element = document.querySelectorAll(\\n              '[data-framer-name=\\\"Fully Rounded\\\"]',\\n            )[0].parentElement;\\n            const stickyStyles = {\\n              bottom: '0px',\\n              flex: '0 0 auto',\\n              height: 'auto',\\n              position: 'fixed',\\n              width: '100%',\\n              zIndex: '5',\\n              background:\\n                'var(--token-5a2a6e6c-5596-4414-a658-bf74df16c887, rgb(49, 47, 67))',\\n              padding: '5px',\\n              display: 'flex',\\n              justifyContent: 'center',\\n            };\\n\\n            // Button should be sticky only on mobile screens\\n            if (window.innerWidth < 450 && element) {\\n              Object.assign(element.style, stickyStyles);\\n            }\\n          }\\n\\n          // Copy changes part\\n\\n          /* const textToUpdateArray = experiment.value.textToUpdate;\\n\\n          if (textToUpdateArray && textToUpdateArray.length && isGetAQuotePage) {\\n\\n            const featureCards = document.querySelectorAll('[data-framer-name=\\\"Feature Card\\\"]');\\n\\n            for (const card of featureCards) {\\n              const heading = card.querySelector('h3');\\n              if (!heading) continue;\\n\\n              const match = textToUpdateArray.find(item => {\\n                  return heading.innerText.includes(item.initialValue)\\n                }\\n              );\\n\\n              if (match) {\\n                heading.innerHTML = match.updatedValue;\\n              }\\n            }\\n          }*/\\n          loadRudderStack({});\\n        })\\n        .catch(err => {\\n          console.error('Statsig initialization failed:', err);\\n        });\\n    }\\n\\n    window.rudderanalytics.ready(attemptInitStatsig);\\n  }\\n\\n  window.addEventListener('load', function () {\\n    if (isRunExperiment) {\\n      loadRudderStack(\\n        { loadIntegration: false, integrations: { All: false } },\\n        initializeStatsigAndReinitRudderStack,\\n      );\\n    } else {\\n      loadRudderStack({});\\n    }\\n    window.rudderanalytics?.page();\\n  });\\n\\n  // Track location changes\\n  (() => {\\n    const oldPushState = history.pushState;\\n    history.pushState = function pushState() {\\n      const ret = oldPushState.apply(this, arguments);\\n      window.dispatchEvent(new Event('pushstate'));\\n      window.dispatchEvent(new Event('locationchange'));\\n      return ret;\\n    };\\n\\n    const oldReplaceState = history.replaceState;\\n    history.replaceState = function replaceState() {\\n      const ret = oldReplaceState.apply(this, arguments);\\n      window.dispatchEvent(new Event('replacestate'));\\n      window.dispatchEvent(new Event('locationchange'));\\n      return ret;\\n    };\\n\\n    window.addEventListener('popstate', () => {\\n      window.dispatchEvent(new Event('locationchange'));\\n    });\\n\\n    window.addEventListener('DOMContentLoaded', () => {\\n      window.dispatchEvent(new Event('showCookieBanner'));\\n    });\\n\\n    window.addEventListener('locationchange', () => {\\n      setTimeout(() => {\\n        window.rudderanalytics?.page();\\n      }, 1000);\\n      window.dispatchEvent(new Event('showCookieBanner'));\\n    });\\n  })();\\n\\n  // Load external scripts\\n  if (!isNewFinanceCalcPage) {\\n    const chatbotScript = document.createElement('script');\\n    chatbotScript.crossOrigin = 'anonymous';\\n    chatbotScript.defer = true;\\n    chatbotScript.src =\\n      'https://static.oodlecarfinance.com/main-site-chatbot/script.js';\\n    document.body.appendChild(chatbotScript);\\n  }\\n\\n  (function () {\\n    let src = window.location.origin.endsWith('ninja')\\n      ? 'https://static.oodlecarfinance.ninja/cookie-banner/script.js'\\n      : 'https://static.oodlecarfinance.com/cookie-banner/script.js';\\n\\n    const script = document.createElement('script');\\n    script.src = src;\\n    script.type = 'module';\\n    script.crossOrigin = 'anonymous';\\n    document.body.appendChild(script);\\n  })();\\n})();\\n// Mask SF Live Chat in RUM\\n(function () {\\n  function maskDialog(dialog) {\\n    setTimeout(() => {\\n      const chatHeader = dialog.querySelector('embeddedservice-chat-header');\\n      if (chatHeader && !dialog.hasAttribute('data-dd-privacy')) {\\n        dialog.setAttribute('data-dd-privacy', 'mask');\\n        console.log('✅ data-dd-privacy added to dialog.');\\n      }\\n    }, 500);\\n  }\\n\\n  // Recursive polling for dialog\\n  const maxAttempts = 100;\\n  let attempts = 0;\\n\\n  function checkForDialog() {\\n    const existingDialog = document.querySelector(\\n      'div[role=\\\"dialog\\\"][aria-labelledby=\\\"sidebarDialogAssistiveText\\\"].dockableContainer.showDockableContainer'\\n    );\\n    if (existingDialog) {\\n      maskDialog(existingDialog);\\n    } else if (++attempts < maxAttempts) {\\n      setTimeout(checkForDialog, 100);\\n    }\\n  }\\n\\n  checkForDialog(); // Start polling\\n\\n  // Observer for future dialogs\\n  const observer = new MutationObserver((mutationsList) => {\\n    for (const mutation of mutationsList) {\\n      for (const node of mutation.addedNodes) {\\n        if (node.nodeType === Node.ELEMENT_NODE) {\\n          const dialog =\\n            node.matches?.('div[role=\\\"dialog\\\"][aria-labelledby=\\\"sidebarDialogAssistiveText\\\"].dockableContainer.showDockableContainer')\\n              ? node\\n              : node.querySelector?.('div[role=\\\"dialog\\\"][aria-labelledby=\\\"sidebarDialogAssistiveText\\\"].dockableContainer.showDockableContainer');\\n\\n          if (dialog) {\\n            maskDialog(dialog);\\n          }\\n        }\\n      }\\n    }\\n  });\\n\\n  observer.observe(document.body, {\\n    childList: true,\\n    subtree: true\\n  });\\n})();\\n</script>\\n\\n<!-- Connex livechat -->\\n<!-- <script src=\\\"https://livechat-oodlefinancial-pa.connexone.co.uk/widget?connid=afb7e249-0d8e-4b4e-95c7-a4558c27fb62\\\" id=\\\"livechat-oodlefinancial-pa\\\" data-socket-uri=\\\"https://livechat-oodlefinancial-pa.connexone.co.uk\\\" referrerpolicy=\\\"strict-origin-when-cross-origin\\\"></script> -->\\n<!-- End Connex live chat -->\",customHTMLBodyStart:'<!-- <script crossorigin=\"anonymous\" src=\"https://static.oodlecarfinance.com/cookie-banner/script.js\" type=\"module\"></script> -->\\n<!-- Google Tag Manager -->\\n<noscript>\\n<iframe height=\"0\" src=\"https://www.googletagmanager.com/ns.html?id=GTM-NTZ27Z2\" style=\"display:none;visibility:hidden\" title=\"ga\" width=\"0\"></iframe>\\n</noscript>\\n <!-- End Google Tag Manager -->',customHTMLHeadStart:'<script src=\"https://cdn.jsdelivr.net/npm/@statsig/js-client@latest/build/statsig-js-client.min.js\"></script>\\n\\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\\n\\n<link rel=\"preload\" href=\"https://static.oodlecarfinance.com/cookie-banner/script.js\" as=\"script\" crossorigin=\"anonymous\">\\n<link rel=\"stylesheet\" href=\"https://static.oodlecarfinance.com/cookie-banner/style.css\" as=\"style\">\\n\\n\\n<link rel=\"preload\" href=\"https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&amp;display=swap\" as=\"font\" crossorigin=\"\">\\n\\n<link rel=\"preload\" href=\"https://static.oodlecarfinance.com/main-site-chatbot/style.css\" as=\"style\" onload=\"this.onload=null;this.rel=\\'stylesheet\\'\">\\n<noscript><link rel=\"stylesheet\" href=\"https://static.oodlecarfinance.com/main-site-chatbot/style.css\"></noscript>',description:\"Oodle car finance\",favicon:\"https://framerusercontent.com/assets/0eBI16bEymrO2QAk4cTnyVAG5oc.png\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/6epdoK064OiBmHFizyeljcbVug8.png\",title:\"Oodle Car Finance\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"2DACA,SAAwB,EAAS,EAAO,EAAa,CAAC,MAAM,CAAC,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAAs0W,oBAAoB;;;;;kCAAoX,oBAAoB;;;;;;;;;;;oHAA6yB,YAAY,oBAAoB,QAAQ,uEAAuE,OAAO,0BAA0B,YAAY,uEAAuE,MAAM,oBAAoB"}