{"id":8604,"date":"2023-08-30T12:47:58","date_gmt":"2023-08-30T12:47:58","guid":{"rendered":"https:\/\/edusign.com\/fr\/?page_id=8604"},"modified":"2026-03-17T09:31:41","modified_gmt":"2026-03-17T09:31:41","slug":"contact","status":"publish","type":"page","link":"https:\/\/edusign.com\/fr\/contact\/","title":{"rendered":"Contact"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"8604\" class=\"elementor elementor-8604\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b61a83a e-flex e-con-boxed e-con e-parent\" data-id=\"b61a83a\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-f3ef2e2 e-con-full e-flex e-con e-child\" data-id=\"f3ef2e2\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4e34816 elementor-widget elementor-widget-html\" data-id=\"4e34816\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\r\n    <section id=\"hs-flow\" style=\"margin-top:0rem;\">\r\n      <div id=\"hs-form\"><\/div>\r\n    <\/section>\r\n    \r\n    <!-- HubSpot Forms V4 developer (EU1) -->\r\n    <script src=\"https:\/\/js-eu1.hsforms.net\/forms\/embed\/developer\/25774793.js\" defer><\/script>\r\n    <div class=\"hs-form-html\"\r\n         data-region=\"eu1\"\r\n         data-portal-id=\"25774793\"\r\n         data-form-id=\"e00b8a20-d6ef-4bea-adfb-d33d6484be20\"\r\n         data-target=\"#hs-form\"><\/div>\r\n    \r\n    <!-- Meetings SDK (fallback iframe si CSP bloque) -->\r\n    <script src=\"https:\/\/static.hsappstatic.net\/MeetingsEmbed\/ex\/MeetingsEmbedCode.js\"><\/script>\r\n    \r\n    \r\n    <!-- ==================== TRACKING LIBS ==================== -->\r\n    <!-- Google tag (gtag.js) -->\r\n    <script async src=\"https:\/\/www.googletagmanager.com\/gtag\/js?id=AW-658181897\"><\/script>\r\n    <script>\r\n      window.dataLayer = window.dataLayer || [];\r\n      function gtag(){ dataLayer.push(arguments); }\r\n      gtag('js', new Date());\r\n      gtag('config', 'AW-658181897');\r\n    <\/script>\r\n    \r\n    <!-- LinkedIn Insight -->\r\n    <script>\r\n      _linkedin_partner_id = \"1896921\";\r\n      window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];\r\n      window._linkedin_data_partner_ids.push(_linkedin_partner_id);\r\n    <\/script>\r\n    <script>\r\n      (function(l){\r\n        if(!l){ window.lintrk=function(a,b){ window.lintrk.q.push([a,b]) }; window.lintrk.q=[] }\r\n        var s=document.getElementsByTagName(\"script\")[0];\r\n        var b=document.createElement(\"script\");\r\n        b.type=\"text\/javascript\"; b.async=true;\r\n        b.src=\"https:\/\/snap.licdn.com\/li.lms-analytics\/insight.min.js\";\r\n        s.parentNode.insertBefore(b,s);\r\n      })(window.lintrk);\r\n    <\/script>\r\n    <noscript>\r\n      <img decoding=\"async\" height=\"1\" width=\"1\" style=\"display:none;\" alt=\"\"\r\n           src=\"https:\/\/px.ads.linkedin.com\/collect\/?pid=1896921&fmt=gif\"\/>\r\n    <\/noscript>\r\n    \r\n    \r\n    <script>\r\n    \/* ========= Config ========= *\/\r\n    const CFG = {\r\n      portalId: \"25774793\",\r\n      meetingUrl: \"https:\/\/meetings-eu1.hubspot.com\/lucas-vivier\/premier-contact\",\r\n      debug: true,\r\n      waitTYTimeoutMs: 100\r\n    };\r\n    \r\n    \/* ========= Store ========= *\/\r\n    const STORE = \"edusign_lead_v4\";\r\n    const saveLead = (p)=>{ const v = {...(JSON.parse(localStorage.getItem(STORE)||\"{}\")), ...p}; localStorage.setItem(STORE, JSON.stringify(v)); return v; };\r\n    const loadLead = ()=>{ try{return JSON.parse(localStorage.getItem(STORE)||\"{}\")}catch(e){return{}} };\r\n    \r\n    \/* ========= Helpers ========= *\/\r\n    const log = (...a)=>{ if (CFG.debug) console.log(\"[HS]\", ...a); };\r\n    const norm = (name)=> (name||\"\").toLowerCase().split(\"\/\").pop();\r\n    function extractLeadFromPairs(pairs){\r\n      const lead = { email:\"\", firstname:\"\", lastname:\"\" };\r\n      (pairs||[]).forEach(({name,value})=>{\r\n        const n = norm(name);\r\n        if (n===\"email\")      lead.email = value || lead.email;\r\n        if (n===\"firstname\")  lead.firstname = value || lead.firstname;\r\n        if (n===\"lastname\")   lead.lastname  = value || lead.lastname;\r\n      });\r\n      return lead;\r\n    }\r\n    function buildMeetSrc(lead){\r\n      const u = new URL(CFG.meetingUrl);\r\n      u.searchParams.set(\"embed\",\"true\");\r\n      if (lead.firstname) u.searchParams.set(\"firstname\", lead.firstname);\r\n      if (lead.lastname)  u.searchParams.set(\"lastname\",  lead.lastname);\r\n      if (lead.email)     u.searchParams.set(\"email\",     lead.email);\r\n      return u.toString();\r\n    }\r\n\r\n    \/* ========= Cookie Reader ========= *\/\r\n    function getCookie(name) {\r\n      const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));\r\n      return match ? decodeURIComponent(match[2]) : '';\r\n    }\r\n\r\n    \/* ========= Abandonned Forms ========= *\/\r\n    const EDS_SID_KEY = 'eds_session_id';\r\n    function getOrCreateSessionId(){\r\n      try {\r\n        let sid = localStorage.getItem(EDS_SID_KEY);\r\n        if (!sid) { sid = crypto.randomUUID(); localStorage.setItem(EDS_SID_KEY, sid); }\r\n        return sid;\r\n      } catch(e){\r\n        const sid = 'sid_' + Math.random().toString(36).slice(2) + Date.now();\r\n        try{ localStorage.setItem(EDS_SID_KEY, sid); }catch(_){}\r\n        return sid;\r\n      }\r\n    }\r\n    const EDS_SESSION_ID = getOrCreateSessionId();\r\n    const ABANDON_STORE = 'edusign_abandon_v1';\r\n    \r\n    function readFormValues(form){\r\n      if(!form) return {};\r\n      const fd = new FormData(form);\r\n      const out = {};\r\n      for (const [k,v] of fd.entries()) out[k]=v;\r\n      return out;\r\n    }\r\n    \r\n    function bindAutosave(){\r\n      const form = document.querySelector('.hs-form-html form');\r\n      if(!form) return;\r\n      const save = ()=>{\r\n        const snap = {\r\n          values: readFormValues(form),\r\n          url: location.href,\r\n          title: document.title,\r\n          ts_last_interaction: Date.now(),\r\n          formId: \"e00b8a20-d6ef-4bea-adfb-d33d6484be20\",\r\n          portalId: \"25774793\",\r\n          eds_session_id: EDS_SESSION_ID\r\n        };\r\n        localStorage.setItem(ABANDON_STORE, JSON.stringify(snap));\r\n      };\r\n      form.addEventListener(\"input\", save, true);\r\n      form.addEventListener(\"change\", save, true);\r\n      form.addEventListener(\"blur\", save, true);\r\n    }\r\n    window.addEventListener('hs-form-event:on-form-ready', bindAutosave);\r\n    \r\n    function injectHiddenSessionInput(){\r\n      const form = document.querySelector('.hs-form-html form');\r\n      if (!form) return;\r\n      const NAME = 'eds_session_id';\r\n      let el = form.querySelector(`input[name=\"${NAME}\"]`);\r\n      if (!el) { el = document.createElement('input'); el.type='hidden'; el.name=NAME; form.appendChild(el); }\r\n      el.value = EDS_SESSION_ID;\r\n      el.setAttribute('value', EDS_SESSION_ID);\r\n    }\r\n    window.addEventListener('hs-form-event:on-form-ready', injectHiddenSessionInput);\r\n\r\n    \/* ========= Rose Session \u2192 utm_id (corrig\u00e9: 0-1\/utm_id) ========= *\/\r\n    function injectRoseSessionToUtmId(){\r\n      const form = document.querySelector('.hs-form-html form');\r\n      if (!form) return;\r\n\r\n      const roseSession = getCookie('rose_last_active_session');\r\n      if (!roseSession) {\r\n        log('rose_last_active_session cookie not found, skip utm_id injection');\r\n        return;\r\n      }\r\n\r\n      const NAME = '0-1\/utm_id';\r\n      let el = form.querySelector(`input[name=\"${NAME}\"]`);\r\n      if (!el) {\r\n        el = document.createElement('input');\r\n        el.type = 'hidden';\r\n        el.name = NAME;\r\n        form.appendChild(el);\r\n      }\r\n      el.value = roseSession;\r\n      el.setAttribute('value', roseSession);\r\n      log('Injected rose_last_active_session into 0-1\/utm_id:', roseSession);\r\n    }\r\n    window.addEventListener('hs-form-event:on-form-ready', injectRoseSessionToUtmId);\r\n\r\n    \/* ========= Beacon Rose \u2192 n8n (post-submit) ========= *\/\r\n    const ROSE_N8N_ENDPOINT = \"https:\/\/automation.edusign.com\/webhook\/rose-to-hubspot\";\r\n    const ROSE_N8N_TOKEN = \"0f4eba01362da09e97664e293e2e329f4678917a8087c8d99716e118b2aa8256\";  \/\/ \u2190 \u00c0 REMPLACER\r\n\r\n    function sendRoseSessionToN8n(lead) {\r\n      const roseSession = getCookie('rose_last_active_session');\r\n      if (!roseSession) {\r\n        log('No rose session cookie, skip n8n beacon');\r\n        return;\r\n      }\r\n      if (!lead?.email) {\r\n        log('No email in lead, skip n8n beacon');\r\n        return;\r\n      }\r\n\r\n      const payload = {\r\n        email: lead.email,\r\n        firstname: lead.firstname || '',\r\n        lastname: lead.lastname || '',\r\n        thread_id: roseSession,\r\n        ts: Date.now()\r\n      };\r\n\r\n      try {\r\n        fetch(ROSE_N8N_ENDPOINT, {\r\n          method: 'POST',\r\n          headers: {\r\n            'Content-Type': 'application\/json',\r\n            'X-Eds-Token': ROSE_N8N_TOKEN\r\n          },\r\n          body: JSON.stringify(payload),\r\n          keepalive: true\r\n        }).then(() => log('Rose \u2192 n8n beacon sent'))\r\n          .catch(e => log('Rose \u2192 n8n beacon error', e));\r\n      } catch (e) {\r\n        log('Rose \u2192 n8n fatal error', e);\r\n      }\r\n    }\r\n\r\n    \r\n    \/* ========= Beacons vers n8n (abandon) ========= *\/\r\n    const ABANDON_ENDPOINT = \"https:\/\/automation.edusign.com\/webhook-test\/00e9d702-f747-4357-a172-aaed546194a1\";\r\n    \r\n    function dbg(...a){ if (CFG.debug) console.log('[ABANDON]', ...a); }\r\n    \r\n    window.__testAbandon = ()=>{\r\n      dbg('FORCE TEST ABANDON');\r\n      const snap = JSON.parse(localStorage.getItem(ABANDON_STORE)||'{}') || {};\r\n      snap.values = snap.values || {};\r\n      snap.values.email = snap.values.email || snap.values['0-1\/email'] || 'test@example.com';\r\n      localStorage.setItem(ABANDON_STORE, JSON.stringify(snap));\r\n      sendAbandonIfNeeded();\r\n    };\r\n    dbg('Ready. Tape __testAbandon() dans la console pour envoyer un abandon.');\r\n    \r\n    async function postFallback(url, payload){\r\n      try{\r\n        await fetch(url, {\r\n          method: 'POST',\r\n          headers: {'Content-Type':'application\/json'},\r\n          body: JSON.stringify(payload),\r\n          keepalive: true,\r\n          mode: 'no-cors'\r\n        });\r\n        dbg('Fallback fetch keepalive sent');\r\n        return true;\r\n      }catch(e){ dbg('Fallback fetch error', e); }\r\n    \r\n      try{\r\n        const img = new Image();\r\n        img.src = url + '?payload=' + encodeURIComponent(JSON.stringify(payload)) + '&t=' + Date.now();\r\n        dbg('Fallback image beacon sent');\r\n        return true;\r\n      }catch(e){ dbg('Pixel fallback error', e); }\r\n      return false;\r\n    }\r\n    \r\n    function safeBeacon(url, payload){\r\n      try {\r\n        fetch(url, {\r\n          method: 'POST',\r\n          mode: 'no-cors',\r\n          credentials: 'omit',\r\n          headers: { 'Content-Type': 'text\/plain;charset=UTF-8' },\r\n          body: JSON.stringify(payload),\r\n          keepalive: true\r\n        }).then(()=>dbg('no-cors fetch sent'))\r\n          .catch(e=>dbg('no-cors fetch error', e));\r\n      } catch(e) {\r\n        dbg('fatal beacon error', e);\r\n      }\r\n      return false;\r\n    }\r\n    \r\n    function hsContext(){\r\n      try {\r\n        const cookie = (document.cookie.split('; ').find(c=>c.startsWith('hubspotutk='))||'').split('=')[1]||'';\r\n        return { hubspotutk: cookie, pageUri: location.href, pageName: document.title };\r\n      } catch(e){ return { hubspotutk:'', pageUri: location.href, pageName: document.title }; }\r\n    }\r\n    function getLeadBasics(){\r\n      try {\r\n        const v = JSON.parse(localStorage.getItem(STORE)||'{}');\r\n        return { email: v.email||'', firstname: v.firstname||'', lastname: v.lastname||'' };\r\n      } catch(e){ return { email:'', firstname:'', lastname:'' }; }\r\n    }\r\n    function beacon(type, extra={}){\r\n      const payload = {\r\n        type,\r\n        ts: Date.now(),\r\n        formId: \"e00b8a20-d6ef-4bea-adfb-d33d6484be20\",\r\n        portalId: \"25774793\",\r\n        eds_session_id: EDS_SESSION_ID,\r\n        context: hsContext(),\r\n        ...extra\r\n      };\r\n      safeBeacon(ABANDON_ENDPOINT, payload);\r\n    }\r\n\r\n    function hasMeaningfulValues(v){\r\n      if(!v) return false;\r\n      const email = v[\"0-1\/email\"] || v[\"email\"] || \"\";\r\n      const fn = v[\"0-1\/firstname\"] || v[\"firstname\"] || \"\";\r\n      const ln = v[\"0-1\/lastname\"] || v[\"lastname\"] || \"\";\r\n      return !!(email || (fn && ln));\r\n    }\r\n\r\n    window.sendAbandonIfNeeded = function sendAbandonIfNeeded(){\r\n      if (window.SUBMITTED_OK) { dbg('Skip abandon: SUBMITTED_OK=TRUE'); return; }\r\n\r\n      const snap = JSON.parse(localStorage.getItem(ABANDON_STORE)||\"{}\") || {};\r\n      snap.values = snap.values || {};\r\n\r\n      try{\r\n        const form = document.querySelector('.hs-form-html form');\r\n        if (form){\r\n          const live = readFormValues(form);\r\n          snap.values = { ...snap.values, ...live };\r\n          localStorage.setItem(ABANDON_STORE, JSON.stringify(snap));\r\n        }\r\n      }catch(e){ dbg('read live values error', e); }\r\n\r\n      if (!snap.values || !hasMeaningfulValues(snap.values)) {\r\n        dbg('Skip abandon: no meaningful values', snap.values);\r\n        return;\r\n      }\r\n\r\n      const attrib = JSON.parse(localStorage.getItem('eds_attrib_v1')||\"{}\");\r\n\r\n      dbg('Sending ABANDON with live values\u2026', { values: snap.values });\r\n      beacon('FORM_ABANDONED', { snapshot: snap, attribution: attrib });\r\n    };\r\n\r\n    function sendAbandonIfNeededWrapper(){ try{ window.sendAbandonIfNeeded(); }catch(e){ console.warn('[ABANDON]', e); } }\r\n\r\n    document.addEventListener(\"visibilitychange\", ()=>{ if (document.visibilityState === \"hidden\") sendAbandonIfNeededWrapper(); });\r\n    window.addEventListener(\"beforeunload\", sendAbandonIfNeededWrapper);\r\n    window.addEventListener('pagehide', sendAbandonIfNeededWrapper);\r\n    document.addEventListener('freeze', sendAbandonIfNeededWrapper);\r\n    window.addEventListener('popstate', sendAbandonIfNeededWrapper);\r\n\r\n    let idleTimer=null, idleSent=false;\r\n    function bumpIdle(){\r\n      if (idleSent) return;\r\n      clearTimeout(idleTimer);\r\n      idleTimer = setTimeout(()=>{ idleSent = true; sendAbandonIfNeededWrapper(); }, 60000);\r\n    }\r\n    ['input','change','mousemove','keydown','touchstart','scroll'].forEach(evt=>{\r\n      document.addEventListener(evt, bumpIdle, {passive:true, capture:true});\r\n    });\r\n    bumpIdle();\r\n\r\n    window.__testAbandon = ()=>{\r\n      dbg('FORCE TEST ABANDON');\r\n      window.sendAbandonIfNeeded();\r\n    };\r\n    dbg('Ready. Tape __testAbandon() dans la console pour envoyer un abandon.');\r\n\r\n    \/* ========= Conversions ========= *\/\r\n    function gtag_report_conversion(){\r\n      try {\r\n        gtag('event', 'conversion', { 'send_to': 'AW-658181897\/o_ZvCNH4r5cYEIme7LkC' });\r\n        gtag('event', 'conversion', {\r\n          'send_to': 'AW-658181897\/rX6vCJTlz-sZEIme7LkC',\r\n          'value': 1.0,\r\n          'currency': 'EUR'\r\n        });\r\n      } catch(e){ console.warn('[ADS] gtag conversion error', e); }\r\n    }\r\n    function VMO_conversion(){\r\n      try{\r\n        window.VWO = window.VWO || [];\r\n        VWO.event = VWO.event || function(){ VWO.push([\"event\"].concat([].slice.call(arguments))) };\r\n        VWO.event(\"contactForm\", { \"formFilled\": true });\r\n      }catch(e){ console.warn('[VWO] event error', e); }\r\n    }\r\n    function linkedin_conversion(){\r\n      try{\r\n        window.lintrk && window.lintrk('track', { conversion_id: 20492553 });\r\n      }catch(e){ console.warn('[LinkedIn] conversion error', e); }\r\n    }\r\n    function fireAllConversions(){\r\n      log('Fire conversions: Google Ads (2x), LinkedIn, VWO');\r\n      gtag_report_conversion();\r\n      linkedin_conversion();\r\n      VMO_conversion();\r\n    }\r\n    \r\n    \/* ========= Thank You + Meetings ========= *\/\r\n    function renderCustomThankYou(firstname = \"\") {\r\n      const fn = (firstname || \"\").trim();\r\n      return `\r\n        <div class=\"eds-ty-block\">\r\n          <h2 class=\"eds-ty-title\">Merci ${fn ? fn : \"\"} ! Votre demande a bien \u00e9t\u00e9 envoy\u00e9e<\/h2>\r\n          <p class=\"eds-ty-sub\">R\u00e9servez un cr\u00e9neau d\u00e8s maintenant. C'est optionnel sinon, on vous recontacte rapidement.<\/p>\r\n          <div id=\"hs-meeting-target\" style=\"margin-top:12px;\"><\/div>\r\n        <\/div>\r\n      `;\r\n    }\r\n    function mountMeetingsInto(targetSel, lead){\r\n      const src = buildMeetSrc(lead || {});\r\n      try{\r\n        if (window.hubspot?.meetings?.create) {\r\n          window.hubspot.meetings.create({\r\n            portalId: CFG.portalId,\r\n            target: targetSel,\r\n            iframeSrc: src\r\n          });\r\n        } else {\r\n          const tgt = document.querySelector(targetSel);\r\n          if (tgt){\r\n            const ifr = document.createElement(\"iframe\");\r\n            ifr.src = src; ifr.style.width=\"100%\"; ifr.style.height=\"780px\"; ifr.frameBorder=\"0\";\r\n            tgt.appendChild(ifr);\r\n          }\r\n        }\r\n      }catch(e){ console.warn(\"[HS] Meeting mount error\", e); }\r\n    }\r\n    \r\n    function waitThankYouThenInsert(lead){\r\n      const host = document.getElementById(\"hs-form\");\r\n      const sels = [\r\n        '[data-hs-cos-type=\"thank-you-message\"]',\r\n        '.submitted-message',\r\n        '[data-component-type=\"thank-you-message\"]',\r\n        '.hs-form__thank-you',\r\n        '.thank-you-message'\r\n      ];\r\n      const findTY = ()=> sels.map(s=>host.querySelector(s)).find(Boolean);\r\n    \r\n      const existing = findTY();\r\n      const mountAll = (tyNode)=>{\r\n        try{\r\n          tyNode.innerHTML = renderCustomThankYou(lead?.firstname || \"\");\r\n          mountMeetingsInto(\"#hs-meeting-target\", lead);\r\n          document.getElementById(\"hs-meeting-target\")?.scrollIntoView({behavior:\"smooth\", block:\"start\"});\r\n        }catch(e){ console.warn(\"[HS] TY replace error\", e); }\r\n      };\r\n      if (existing) return mountAll(existing);\r\n    \r\n      let done=false;\r\n      const mo = new MutationObserver(()=>{\r\n        if (done) return;\r\n        const ty = findTY();\r\n        if (ty){\r\n          done=true; mo.disconnect();\r\n          mountAll(ty);\r\n        }\r\n      });\r\n      mo.observe(host, {childList:true, subtree:true});\r\n    \r\n      setTimeout(()=>{\r\n        if (!done){\r\n          done = true; mo.disconnect();\r\n          const surrogate = document.createElement(\"div\");\r\n          host.appendChild(surrogate);\r\n          surrogate.innerHTML = renderCustomThankYou(lead?.firstname || \"\");\r\n          mountMeetingsInto(\"#hs-meeting-target\", lead);\r\n        }\r\n      }, CFG.waitTYTimeoutMs);\r\n    }\r\n    \r\n    \/* ====================== ATTRIBUTION UTM (localStorage) ====================== *\/\r\n    (function(){\r\n      var LS_KEY = 'eds_attrib_v1';\r\n      var TOUCH  = 'first_touch';\r\n    \r\n      function readTouch(){\r\n        try {\r\n          var raw = JSON.parse(localStorage.getItem(LS_KEY)||'{}');\r\n          return TOUCH==='first_touch' ? (raw.first_touch||{}) : (raw.last_touch||{});\r\n        } catch(e){ return {}; }\r\n      }\r\n      function ensureHidden(form, name, value){\r\n        if (!value) return;\r\n        var el = form.querySelector('input[name=\"'+name+'\"]');\r\n        if (!el) { el = document.createElement('input'); el.type='hidden'; el.name=name; form.appendChild(el); }\r\n        el.value = value; el.setAttribute('value', value);\r\n      }\r\n    \r\n      document.addEventListener('submit', function(ev){\r\n        var form = ev.target && ev.target.closest && ev.target.closest('.hs-form-html form');\r\n        if (!form) return;\r\n        var t = readTouch();\r\n        var map = {\r\n          '0-1\/acquisition_source': t.source       || '',\r\n          '0-1\/type_of_news'      : t.medium       || '',\r\n          '0-1\/utm_campaign'      : t.campaign     || '',\r\n          '0-1\/landing_page'      : t.landing_page || ''\r\n        };\r\n        Object.keys(map).forEach(function(name){\r\n          ensureHidden(form, name, map[name]);\r\n          ensureHidden(form, name.replace('0-1\/',''), map[name]);\r\n        });\r\n      }, true);\r\n    })();\r\n    \r\n    \/* ========= Capture valeurs lead ========= *\/\r\n    document.addEventListener(\"submit\", (ev)=>{\r\n      const path = ev.composedPath ? ev.composedPath() : [];\r\n      const isHS = path.some(n => n && n.classList && n.classList.contains(\"hs-form-html\")) ||\r\n                   (ev.target && ev.target.closest && ev.target.closest(\".hs-form-html\"));\r\n      if (!isHS) return;\r\n      const fd = new FormData(ev.target);\r\n      const pairs = Array.from(fd.entries()).map(([k,v])=>({name:k, value:v}));\r\n      const lead = extractLeadFromPairs(pairs);\r\n      saveLead(lead);\r\n      \/\/ Re-inject rose session au submit pour garantir la valeur\r\n      injectRoseSessionToUtmId();\r\n    }, true);\r\n    \r\n    \/* ========= Hooks Form V4 ========= *\/\r\n    window.addEventListener('hs-form-event:on-before-form-submit', (event)=>{\r\n      const vals = event?.detail?.values || [];\r\n      const lead = extractLeadFromPairs(vals);\r\n      saveLead(lead);\r\n    });\r\n    \r\n    window.addEventListener('hs-form-event:on-submission:success', ()=>{\r\n      const lead = loadLead();\r\n      \/\/ 1) Fire conversions\r\n      fireAllConversions();\r\n      \/\/ 2) TY + meetings\r\n      waitThankYouThenInsert(lead);\r\n      \/\/ 3) Rose \u2192 n8n \u2192 HubSpot Note\r\n      sendRoseSessionToN8n(lead);\r\n    });\r\n    \r\n    \/* ========= Fallback si aucun event HubSpot n'arrive ========= *\/\r\n    (function fallbackIfNoHS(){\r\n      let fired = false;\r\n      function mark(){ fired = true; }\r\n      window.addEventListener('hs-form-event:on-submission:success', mark);\r\n      setTimeout(()=>{\r\n        if (!fired){\r\n          const host = document.getElementById('hs-form');\r\n          const ty = host && host.querySelector('.submitted-message, .hs-form__thank-you, .thank-you-message');\r\n          if (ty){\r\n            fireAllConversions();\r\n            const lead = loadLead();\r\n            waitThankYouThenInsert(lead);\r\n            sendRoseSessionToN8n(lead);\r\n          }\r\n        }\r\n      }, 3000);\r\n    })();\r\n    <\/script>\r\n    \r\n<style>\r\n[data-hsfc-id=Renderer] .hsfc-PhoneInput__FlagAndCaret,[data-hsfc-id=Renderer] .hsfc-PhoneInput__FlagAndCaret__Flag {\r\n    font-size: 14px!important;\r\n    font-family: Inter, sans-serif;\r\n}\r\n[data-hsfc-id=Renderer] .hsfc-DropdownField .hsfc-FieldLabel{\r\n    margin-bottom: 10px!important;\r\n}\r\n[data-hsfc-id=Renderer] .hsfc-DropdownOptions__List__ListItem{\r\n    height: 45px;\r\n    padding: 15px;\r\n    line-height: normal;\r\n}\r\n[data-hsfc-id=Renderer] .hsfc-DropdownOptions__Search {\r\n    display: none;\r\n}\r\n<\/style>\r\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3a964ef e-con-full e-flex e-con e-child\" data-id=\"3a964ef\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1a7e857 elementor-widget elementor-widget-heading\" data-id=\"1a7e857\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.23.0 - 05-08-2024 *\/\n.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}<\/style><h2 class=\"elementor-heading-title elementor-size-default\">Ce dont vous b\u00e9n\u00e9ficiez avec Edusign :<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8a16354 elementor-widget elementor-widget-image\" data-id=\"8a16354\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.23.0 - 05-08-2024 *\/\n.elementor-widget-image{text-align:center}.elementor-widget-image a{display:inline-block}.elementor-widget-image a img[src$=\".svg\"]{width:48px}.elementor-widget-image img{vertical-align:middle;display:inline-block}<\/style>\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"427\" height=\"353\" src=\"https:\/\/edusign.com\/fr\/wp-content\/uploads\/sites\/2\/2023\/07\/Group-48618.png\" class=\"attachment-large size-large wp-image-61\" alt=\"feuille d&#039;\u00e9margement formation\" srcset=\"https:\/\/edusign.com\/fr\/wp-content\/uploads\/sites\/2\/2023\/07\/Group-48618.png 427w, https:\/\/edusign.com\/fr\/wp-content\/uploads\/sites\/2\/2023\/07\/Group-48618-300x248.png 300w\" sizes=\"(max-width: 427px) 100vw, 427px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d5a471d elementor-widget elementor-widget-text-editor\" data-id=\"d5a471d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.23.0 - 05-08-2024 *\/\n.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}<\/style>\t\t\t\t<p><br \/><strong><span class=\"checked\">\u00c9margement en ligne et en pr\u00e9sentiel<\/span><\/strong><br \/><strong><span class=\"checked\">Signature \u00e9lectronique de documents certifi\u00e9s<\/span><\/strong><br \/><strong><span class=\"checked\">Certificats de r\u00e9alisation<\/span><\/strong><br \/><strong><span class=\"checked\">Questionnaires<\/span><\/strong><br \/><strong><span class=\"checked\">API Rest moderne &amp; 1000+ int\u00e9grations<\/span><\/strong><br \/><strong><span class=\"checked\">Accompagnement personnalis\u00e9<\/span><\/strong><br \/><strong><span class=\"checked\">Et bien plus !<\/span><\/strong><\/p><p>Edusign est un syst\u00e8me facile \u00e0 prendre en main. La mise en place est rapide et notre \u00e9quipe est \u00e0 votre \u00e9coute.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Ce dont vous b\u00e9n\u00e9ficiez avec Edusign : \u00c9margement en ligne et en pr\u00e9sentielSignature \u00e9lectronique de documents certifi\u00e9sCertificats de r\u00e9alisationQuestionnairesAPI Rest moderne &amp; 1000+ int\u00e9grationsAccompagnement personnalis\u00e9Et bien plus ! Edusign est un syst\u00e8me facile \u00e0 prendre en main. La mise en place est rapide et notre \u00e9quipe est \u00e0 votre \u00e9coute.<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"content-type":""},"acf":[],"_links":{"self":[{"href":"https:\/\/edusign.com\/fr\/wp-json\/wp\/v2\/pages\/8604"}],"collection":[{"href":"https:\/\/edusign.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/edusign.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/edusign.com\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/edusign.com\/fr\/wp-json\/wp\/v2\/comments?post=8604"}],"version-history":[{"count":124,"href":"https:\/\/edusign.com\/fr\/wp-json\/wp\/v2\/pages\/8604\/revisions"}],"predecessor-version":[{"id":30530,"href":"https:\/\/edusign.com\/fr\/wp-json\/wp\/v2\/pages\/8604\/revisions\/30530"}],"wp:attachment":[{"href":"https:\/\/edusign.com\/fr\/wp-json\/wp\/v2\/media?parent=8604"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}