{"version":3,"file":"siteMetadata.CFVd8vD4.mjs","names":[],"sources":["https:/framerusercontent.com/modules/3vih5ZkKVRkkuScxXl91/57T5pfdfl0siTUJARGfB/siteMetadata.js"],"sourcesContent":["// Generated by Framer (269977d)\nexport default function metadata(params,activeLocale){return{customHTMLHeadEnd:\"<!-- Consent Mode: default = GRANTED (CH implicit opt-in) -->\\n<script>\\n  window.dataLayer = window.dataLayer || [];\\n  function gtag(){ dataLayer.push(arguments); }\\n\\n  // By default, allow measurement/ads until user opts out\\n  gtag('consent', 'default', {\\n    ad_storage: 'granted',\\n    analytics_storage: 'granted',\\n    ad_user_data: 'granted',\\n    ad_personalization: 'granted'\\n  });\\n\\n  // Tiny state so we can fully suppress custom events after opt-out\\n  window.__analytics_allowed__ = true;\\n</script>\\n\\n<!-- Cookiebot (keeps showing banner; we handle opt-out via events) -->\\n<script id=\\\"Cookiebot\\\" src=\\\"https://consent.cookiebot.com/uc.js\\\" data-cbid=\\\"be13c8eb-7951-461d-a14a-b27111dc8aa4\\\" data-blockingmode=\\\"auto\\\" type=\\\"text/javascript\\\"></script>\\n\\n<!-- Google tag (gtag.js) -->\\n<script async=\\\"\\\" src=\\\"https://www.googletagmanager.com/gtag/js?id=G-V3VWC31QP0\\\"></script>\\n<script>\\n  gtag('js', new Date());\\n  gtag('config', 'G-V3VWC31QP0');   // GA4\\n  gtag('config', 'AW-489287379');    // Google Ads\\n</script>\\n\\n<!-- Meta Pixel (load immediately; we’ll revoke on decline) -->\\n<script>\\n  !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\\n  n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\\n  n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);\\n  t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}\\n  (window, document,'script','https://connect.facebook.net/en_US/fbevents.js');\\n\\n  fbq('init','729189003086971');\\n  fbq('consent','grant'); // default = granted\\n  fbq('track','PageView');\\n</script>\\n\\n<!-- TikTok Pixel (load immediately; we’ll revoke on decline) -->\\n<script>\\n  !function (w, d, t) {\\n    w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];\\n    ttq.methods=[\\\"page\\\",\\\"track\\\",\\\"identify\\\",\\\"instances\\\",\\\"debug\\\",\\\"on\\\",\\\"off\\\",\\\"once\\\",\\\"ready\\\",\\\"alias\\\",\\\"group\\\",\\\"enableCookie\\\",\\\"disableCookie\\\",\\\"holdConsent\\\",\\\"revokeConsent\\\",\\\"grantConsent\\\"];\\n    ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat([].slice.call(arguments,0)))}};for(var i=0;i<ttq.methods.length;i++)ttq.setAndDefer(ttq,ttq.methods[i]);\\n    ttq.load=function(e,n){var r=\\\"https://analytics.tiktok.com/i18n/pixel/events.js\\\";\\n      n=document.createElement(\\\"script\\\");n.type=\\\"text/javascript\\\";n.async=!0;n.src=r+\\\"?sdkid=\\\"+e+\\\"&lib=\\\"+t;\\n      e=document.getElementsByTagName(\\\"script\\\")[0];e.parentNode.insertBefore(n,e)};\\n    ttq._i=ttq._i||{}; ttq._i['D25098JC77UCI3DBNQRG']=[]; ttq._t=ttq._t||{};\\n    ttq.load('D25098JC77UCI3DBNQRG');\\n  }(window, document, 'ttq');\\n\\n  ttq.grantConsent(); // default = granted\\n  ttq.page();\\n</script>\\n\\n<!-- Map Cookiebot -> Platforms (opt-out flips everything to DENIED/REVOKE) -->\\n<script>\\n  // Helper: apply a single consent state to Google + pixels and our wrapper\\n  function applyConsentState({analyticsGranted, adsGranted}) {\\n    // Google Consent Mode v2\\n    gtag('consent','update',{\\n      analytics_storage:  analyticsGranted ? 'granted' : 'denied',\\n      ad_storage:         adsGranted ? 'granted' : 'denied',\\n      ad_user_data:       adsGranted ? 'granted' : 'denied',\\n      ad_personalization: adsGranted ? 'granted' : 'denied'\\n    });\\n\\n    // Meta\\n    if (window.fbq) {\\n      if (adsGranted) fbq('consent','grant'); else fbq('consent','revoke');\\n    }\\n\\n    // TikTok\\n    if (window.ttq && (ttq.grantConsent || ttq.revokeConsent)) {\\n      if (adsGranted && ttq.grantConsent) ttq.grantConsent();\\n      if (!adsGranted && ttq.revokeConsent) ttq.revokeConsent();\\n    }\\n\\n    // Our own GA event gate (full stop when analytics not granted)\\n    window.__analytics_allowed__ = !!analyticsGranted;\\n\\n    // (Optional) best-effort cookie cleanup on opt-out\\n    if (!analyticsGranted || !adsGranted) try { clearKnownAdAnalyticsCookies(); } catch(e) {}\\n  }\\n\\n  // Basic cookie cleanup for common cookies (_ga*, _gid, _gcl_au, _fbp, _fbc, _ttp)\\n  function clearKnownAdAnalyticsCookies() {\\n    const names = ['_ga','_gid','_gcl_au','_fbp','_fbc','_ttp','_tt_enable_cookie','_tt_sessionId'];\\n    const cookies = document.cookie.split(';').map(c => c.trim());\\n    cookies.forEach(c => {\\n      const [k] = c.split('=');\\n      if (names.some(n => k === n || k.startsWith(n + '_'))) {\\n        // Try current domain and top-level domain\\n        const domains = [location.hostname, '.'+location.hostname.replace(/^www\\\\./,'')];\\n        domains.forEach(domain => {\\n          document.cookie = k+'=; Max-Age=0; Path=/; Domain='+domain+'; SameSite=Lax';\\n        });\\n        // Also try without Domain (current host only)\\n        document.cookie = k+'=; Max-Age=0; Path=/; SameSite=Lax';\\n      }\\n    });\\n  }\\n\\n  function updateConsentFromCookiebot() {\\n    if (!window.Cookiebot || !Cookiebot.consent) return;\\n\\n    // If user never chose yet, we keep defaults = granted (implicit opt-in)\\n    if (!Cookiebot.hasResponse) {\\n      applyConsentState({ analyticsGranted: true, adsGranted: true });\\n      return;\\n    }\\n\\n    const c = Cookiebot.consent;\\n    applyConsentState({\\n      analyticsGranted: !!c.statistics,          // off when user selected \\\"No\\\" for statistics\\n      adsGranted: !!c.marketing                  // off when user selected \\\"No\\\" for marketing\\n    });\\n  }\\n\\n  window.addEventListener('CookiebotOnServiceReady', updateConsentFromCookiebot);\\n  window.addEventListener('CookiebotOnAccept',       updateConsentFromCookiebot);\\n  window.addEventListener('CookiebotOnDecline',      updateConsentFromCookiebot);\\n</script>\\n\\n<!-- Your app code (unchanged except for optional analytics gating helper) -->\\n<script type=\\\"module\\\">\\n  import {\\n    initializeApp,\\n    getApps\\n  } from \\\"https://www.gstatic.com/firebasejs/11.9.1/firebase-app.js\\\";\\n  import { getAnalytics } from \\\"https://www.gstatic.com/firebasejs/11.9.1/firebase-analytics.js\\\";\\n  import {\\n    getAuth,\\n    onAuthStateChanged,\\n    signInWithEmailAndPassword,\\n    createUserWithEmailAndPassword,\\n    GoogleAuthProvider,\\n    signInWithPopup,\\n    updateProfile,\\n    updateEmail,\\n    sendPasswordResetEmail,\\n    signOut\\n  } from \\\"https://www.gstatic.com/firebasejs/11.9.1/firebase-auth.js\\\";\\n  import {\\n    getFirestore,\\n    doc,\\n    getDoc,\\n    setDoc,\\n    collection,\\n    addDoc\\n  } from \\\"https://www.gstatic.com/firebasejs/11.9.1/firebase-firestore.js\\\";\\n  import {\\n    getFunctions,\\n    httpsCallable\\n  } from \\\"https://www.gstatic.com/firebasejs/11.9.1/firebase-functions.js\\\";\\n\\n  const firebaseConfig = {\\n    apiKey: \\\"AIzaSyDzMuhx0ewunylgESH7IWGCCa7Ibi40XeI\\\",\\n    authDomain: \\\"savure-5371c.firebaseapp.com\\\",\\n    projectId: \\\"savure-5371c\\\",\\n    storageBucket: \\\"savure-5371c.appspot.com\\\",\\n    messagingSenderId: \\\"91162024652\\\",\\n    appId: \\\"1:91162024652:web:a5ab35276172d1a04b4069\\\",\\n    measurementId: \\\"G-V3VWC31QP0\\\",\\n  };\\n\\n  let app = getApps().length ? getApps()[0] : initializeApp(firebaseConfig);\\n\\n  // If you ever enable Firebase Analytics, it will follow Consent Mode automatically.\\n  // const analytics = getAnalytics(app);\\n\\n  const auth = getAuth(app);\\n  const firestore = getFirestore(app);\\n  const functions = getFunctions(app);\\n\\n  window.firebase = {\\n    app, auth, firestore, functions,\\n    signInWithEmailAndPassword, createUserWithEmailAndPassword,\\n    GoogleAuthProvider, signInWithPopup,\\n    updateProfile, updateEmail, sendPasswordResetEmail, signOut,\\n    onAuthStateChanged,\\n    doc, getDoc, setDoc, collection, addDoc,\\n    httpsCallable\\n  };\\n\\n  function waitForElement(selector, timeout = 5000) {\\n    return new Promise((resolve, reject) => {\\n      const intervalTime = 100;\\n      let timeElapsed = 0;\\n      const interval = setInterval(() => {\\n        const el = document.querySelector(selector);\\n        if (el) { clearInterval(interval); resolve(el); }\\n        timeElapsed += intervalTime;\\n        if (timeElapsed >= timeout) { clearInterval(interval); reject(`Timeout: Element '${selector}' not found.`); }\\n      }, intervalTime);\\n    });\\n  }\\n\\n  waitForElement('[data-framer-name=\\\"Header Button\\\"]')\\n    .then((wrapper) => {\\n      const link = wrapper.querySelector(\\\"a\\\");\\n      if (!link) { console.error(\\\"❌ Aucun <a> trouv\\xe9 dans 'Header Button'.\\\"); return; }\\n      window.firebase.onAuthStateChanged(auth, (user) => {\\n        if (user) { link.href = \\\"/dashboard\\\"; link.title = \\\"Mon compte\\\"; }\\n        else { link.href = \\\"/login\\\"; link.title = \\\"Se connecter\\\"; }\\n      });\\n    })\\n    .catch((err) => console.error(err));\\n</script>\\n\\n<!-- Events: use a gate so NOTHING sends after user opted out of statistics -->\\n<script>\\n  function gtagIfAllowed(){ if (window.__analytics_allowed__) gtag.apply(null, arguments); }\\n\\n  // Lead (merci page)\\n  if (location.pathname === '/merci') {\\n    gtagIfAllowed('event','generate_lead',{ value:1, currency:'CHF', lead_type:'form' });\\n  }\\n\\n  // Tel clicks\\n  document.addEventListener('click', e => {\\n    const a = e.target.closest('a[href^=\\\"tel:\\\"]');\\n    if (a) gtagIfAllowed('event','call_click',{ value:1, currency:'CHF' });\\n  });\\n\\n  // WhatsApp clicks\\n  document.addEventListener('click', e => {\\n    const a = e.target.closest('a[href*=\\\"wa.me\\\"],a[href*=\\\"api.whatsapp.com\\\"]');\\n    if (a) gtagIfAllowed('event','whatsapp_click',{ value:1, currency:'CHF' });\\n  });\\n</script>\\n\\n<!-- Your JSON-LD stays as-is -->\\n<script type=\\\"application/ld+json\\\">\\n{ ... your FoodEstablishment schema unchanged ... }\\n</script>\\n\",description:\"Plats faits maison livr\\xe9s dans toute la Suisse. Recettes fra\\xeeches, cuisin\\xe9es chaque semaine. Commandez en ligne et savourez, sans cuisine.\",favicon:\"https://framerusercontent.com/assets/r998L3bsjPtSXPnL9DxvvikOrU.svg\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/WPm7QRSPlyuj5dwF3aTF3ze5Ldo.png\",title:\"Livraison de plats frais partout en Suisse | Savure\"};}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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA80S,YAAY,6IAAsJ,QAAQ,sEAAsE,OAAO,0BAA0B,YAAY,uEAAuE,MAAM,sDAAsD"}