{"id":20,"date":"2025-10-23T16:39:53","date_gmt":"2025-10-23T16:39:53","guid":{"rendered":"https:\/\/www.voskanetmeline.fr\/?page_id=20"},"modified":"2025-11-19T18:16:34","modified_gmt":"2025-11-19T18:16:34","slug":"accueil","status":"publish","type":"page","link":"https:\/\/www.voskanetmeline.fr\/","title":{"rendered":""},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"20\" class=\"elementor elementor-20\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6b3a60d e-con-full e-flex e-con e-parent\" data-id=\"6b3a60d\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-500369f elementor-widget elementor-widget-html\" data-id=\"500369f\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- ========= HERO \u2014 PHOTO SEULE, PROPRE & MOBILE ========= -->\r\n<section class=\"sec-accueil\" data-bg=\"https:\/\/www.voskanetmeline.fr\/wp-content\/uploads\/2025\/10\/WhatsApp-Image-2025-10-23-a-20.20.21_441fb88e.jpg\">\r\n  <div class=\"sa-veil\" aria-hidden=\"true\"><\/div>\r\n\r\n  <div class=\"sa-bloc\">\r\n    <h1 class=\"sa-title\">Voskan &amp; Meline<\/h1>\r\n    <div class=\"sa-sub\">Mariage arm\u00e9nien \u2022 Cannes<\/div>\r\n    <div class=\"sa-date\">13 D\u00e9cembre 2025<\/div>\r\n\r\n    <p class=\"sa-quote\">\u00ab Deux c\u0153urs, une \u00e2me, un destin \u00e9ternel. \u00bb<\/p>\r\n\r\n    <div id=\"sa-countdown\" class=\"sa-count\"><\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<style>\r\n\/* ====== SCOPE UNIQUEMENT POUR CETTE SECTION ====== *\/\r\n.sec-accueil{\r\n  --gold1:#b68d40; --gold2:#d2b48c;\r\n  --txt:#fff; --txt-soft:#fff5da;\r\n\r\n  position:relative; min-height:100svh;\r\n  display:flex; align-items:center; justify-content:center;\r\n  padding:56px 18px 42px; text-align:center; overflow:hidden; isolation:isolate;\r\n\r\n  \/* D\u00e9grad\u00e9s de base (la photo sera ajout\u00e9e en JS) *\/\r\n  background:\r\n    radial-gradient(120% 100% at 50% 88%, rgba(0,0,0,.45) 0%, transparent 58%),\r\n    linear-gradient(180deg, rgba(0,0,0,.25) 0%, rgba(0,0,0,.65) 100%);\r\n  background-size:cover,cover; background-position:center; background-repeat:no-repeat;\r\n}\r\n\r\n\/* Voile discret pour la lisibilit\u00e9 du texte sur photo *\/\r\n.sec-accueil .sa-veil{\r\n  position:absolute; inset:0; z-index:0; pointer-events:none;\r\n  background:\r\n    linear-gradient(180deg, rgba(0,0,0,.1), rgba(0,0,0,.35));\r\n}\r\n\r\n\/* Contenu *\/\r\n.sec-accueil .sa-bloc{\r\n  position:relative; z-index:1; max-width:680px; color:var(--txt);\r\n  font-family:'Poppins',system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif; padding:0 6px;\r\n}\r\n.sec-accueil .sa-title{\r\n  font-family:'Playfair Display',serif; font-weight:600; letter-spacing:2px;\r\n  font-size:clamp(38px,10vw,68px); margin:0 0 8px;\r\n  background:linear-gradient(90deg,#e8d6a9,#fff8e1); -webkit-background-clip:text; -webkit-text-fill-color:transparent;\r\n}\r\n.sec-accueil .sa-sub{\r\n  font-family:'Cormorant Garamond',serif; color:var(--txt-soft);\r\n  font-size:clamp(16px,4.2vw,22px); margin-bottom:8px;\r\n}\r\n.sec-accueil .sa-date{ font-size:clamp(14px,3.8vw,18px); letter-spacing:1px; margin-bottom:18px; }\r\n.sec-accueil .sa-quote{\r\n  font-family:'Cormorant Garamond',serif; font-style:italic; line-height:1.5; color:#f8eddc;\r\n  font-size:clamp(14px,3.8vw,18px); max-width:640px; margin:0 auto 22px;\r\n}\r\n\r\n\/* Compteur *\/\r\n.sec-accueil .sa-count{\r\n  display:flex; gap:10px; justify-content:center; flex-wrap:wrap; margin:12px 0 28px;\r\n}\r\n.sec-accueil .sa-count .box{\r\n  min-width:82px; padding:10px; border-radius:12px;\r\n  background:rgba(10,10,10,.55); color:#fff; text-align:center; backdrop-filter:blur(6px);\r\n}\r\n.sec-accueil .sa-count .num{ display:block; font-size:20px; font-weight:700; line-height:1; margin-bottom:6px; }\r\n.sec-accueil .sa-count .lab{ display:block; font-size:12px; letter-spacing:.5px; opacity:.9; }\r\n\r\n\/* Bouton *\/\r\n.sec-accueil .sa-btn{\r\n  display:inline-block; padding:14px 34px; border-radius:28px; text-decoration:none; font-weight:700;\r\n  background:linear-gradient(45deg,var(--gold1),var(--gold2)); color:#fff;\r\n  transition:transform .2s ease, filter .2s ease; box-shadow:0 6px 18px rgba(182,141,64,.28);\r\n}\r\n.sec-accueil .sa-btn:hover{ transform:translateY(-1px); filter:saturate(1.05); }\r\n\r\n\/* Mobile *\/\r\n@media (max-width:480px){\r\n  .sec-accueil .sa-title{ font-size:clamp(34px,9.6vw,60px); }\r\n}\r\n<\/style>\r\n\r\n<script>\r\n\/* Photo de fond + Compteur (sans animations, clean) *\/\r\n(function(){\r\n  function init(){\r\n    var sec=document.querySelector('.sec-accueil'); if(!sec) return;\r\n\r\n    \/* Applique ta photo en fond (derri\u00e8re le voile) *\/\r\n    var bg=(sec.getAttribute('data-bg')||'').trim();\r\n    if(bg && !bg.includes('URL-DE-TA-IMAGE-MOBILE.jpg')){\r\n      sec.style.backgroundImage =\r\n        \"radial-gradient(120% 100% at 50% 88%, rgba(0,0,0,.45) 0%, transparent 58%),\" +\r\n        \"linear-gradient(180deg, rgba(0,0,0,.25) 0%, rgba(0,0,0,.65) 100%),\" +\r\n        \"url('\"+bg.replace(\/'\/g,\"\\\\'\")+\"')\";\r\n      sec.style.backgroundSize=\"cover,cover,cover\";\r\n      sec.style.backgroundPosition=\"center,center,center\";\r\n      sec.style.backgroundRepeat=\"no-repeat\";\r\n    }\r\n\r\n    \/* Compteur *\/\r\n    var wrap=document.getElementById('sa-countdown'); if(!wrap) return;\r\n    var eventDate=new Date('2025-12-13T16:00:00'); \/\/ heure France OK\r\n\r\n    function item(n,l){ return \"<div class='box'><span class='num'>\"+n+\"<\/span><span class='lab'>\"+l+\"<\/span><\/div>\"; }\r\n    function tick(){\r\n      var diff=eventDate-new Date();\r\n      if(diff<=0){ wrap.innerHTML=\"<div class='box'>C'est le grand jour<\/div>\"; return; }\r\n      var s=Math.floor(diff\/1000), j=Math.floor(s\/86400); s%=86400;\r\n      var h=Math.floor(s\/3600); s%=3600; var m=Math.floor(s\/60); s%=60;\r\n      wrap.innerHTML=item(j,'Jours')+item(h,'Heures')+item(m,'Minutes')+item(s,'Secondes');\r\n    }\r\n    tick(); setInterval(tick,1000);\r\n  }\r\n  if(document.readyState!=='loading') init();\r\n  else document.addEventListener('DOMContentLoaded', init, {once:true});\r\n})();\r\n<\/script>\r\n<!-- ========= \/HERO ========= -->\r\n\r\n<!-- === MUSIQUE AVEC D\u00c9CLENCHEMENT AUTOMATIQUE & BOUTON FLOTTANT === -->\r\n<div id=\"music-zone\" style=\"position:relative;\">\r\n  <audio id=\"bgm\"\r\n         src=\"https:\/\/www.voskanetmeline.fr\/wp-content\/uploads\/2025\/10\/Tigran-Mansurian-Mer-mankutyan-tangon.mp3\"\r\n         preload=\"auto\"\r\n         loop\r\n         playsinline\r\n         muted><\/audio>\r\n\r\n  <!-- Bouton flottant -->\r\n  <button id=\"music-btn\"\r\n          aria-label=\"Activer\/D\u00e9sactiver la musique\"\r\n          style=\"\r\n            position:fixed;\r\n            bottom:18px; right:18px;\r\n            z-index:9999;\r\n            background:linear-gradient(135deg,#d9b26d,#b68d40);\r\n            color:#fff;\r\n            font-weight:600;\r\n            font-size:15px;\r\n            border:none;\r\n            border-radius:50px;\r\n            padding:10px 18px;\r\n            box-shadow:0 5px 15px rgba(0,0,0,0.25);\r\n            cursor:pointer;\r\n            transition:all 0.3s ease;\r\n            backdrop-filter:blur(6px);\r\n          \">\r\n    \ud83c\udfb5 Musique\r\n  <\/button>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n  var audio = document.getElementById('bgm');\r\n  var btn   = document.getElementById('music-btn');\r\n  var started = false;\r\n  var pausedByUser = false;\r\n  var fading = null;\r\n  var TARGET = 1.0, STEP = 0.05, EVERY = 180;\r\n\r\n  audio.volume = 0.0;\r\n  audio.muted  = true;\r\n\r\n  \/\/ --- Fondu progressif ---\r\n  function fadeIn(){\r\n    if (fading) clearInterval(fading);\r\n    fading = setInterval(function(){\r\n      var v = audio.volume + STEP;\r\n      if (v < TARGET){\r\n        audio.volume = v;\r\n      } else {\r\n        audio.volume = TARGET;\r\n        clearInterval(fading);\r\n        fading = null;\r\n      }\r\n    }, EVERY);\r\n  }\r\n\r\n  \/\/ --- Lancement de la musique ---\r\n  function start(){\r\n    if (started) return;\r\n    started = true;\r\n    try {\r\n      audio.muted = false;\r\n      audio.volume = 0.0;\r\n      var p = audio.play();\r\n      if (p && typeof p.then === 'function'){\r\n        p.then(function(){ fadeIn(); setButtonState(true); })\r\n         .catch(function(){ started = false; addInteracts(); });\r\n      } else {\r\n        fadeIn(); setButtonState(true);\r\n      }\r\n    } catch(e){\r\n      started = false; addInteracts();\r\n    }\r\n  }\r\n\r\n  \/\/ --- Gestion bouton ---\r\n  btn.addEventListener('click', function(e){\r\n    e.preventDefault();\r\n    if (!started){\r\n      start();\r\n      pausedByUser = false;\r\n      return;\r\n    }\r\n    if (audio.paused){\r\n      audio.play();\r\n      fadeIn();\r\n      pausedByUser = false;\r\n      setButtonState(true);\r\n    } else {\r\n      audio.pause();\r\n      pausedByUser = true;\r\n      setButtonState(false);\r\n    }\r\n  });\r\n\r\n  function setButtonState(playing){\r\n    btn.textContent = playing ? \"\ud83d\udd0a Musique\" : \"\ud83d\udd07 Muet\";\r\n    btn.style.opacity = playing ? \"1\" : \"0.7\";\r\n  }\r\n\r\n  \/\/ --- D\u00e9clenchement automatique au premier geste ---\r\n  function onInteract(){\r\n    removeInteracts();\r\n    start();\r\n  }\r\n  function addInteracts(){\r\n    [\"touchstart\",\"pointerdown\",\"click\",\"wheel\",\"keydown\",\"scroll\"].forEach(ev=>{\r\n      window.addEventListener(ev, onInteract, {passive:true, once:true, capture:true});\r\n    });\r\n  }\r\n  function removeInteracts(){\r\n    [\"touchstart\",\"pointerdown\",\"click\",\"wheel\",\"keydown\",\"scroll\"].forEach(ev=>{\r\n      window.removeEventListener(ev, onInteract, {capture:true});\r\n    });\r\n  }\r\n  addInteracts();\r\n\r\n  \/\/ --- Relance si on revient sur l\u2019onglet ---\r\n  document.addEventListener('visibilitychange', function(){\r\n    if (document.visibilityState === 'visible' && started && !pausedByUser && audio.paused){\r\n      try{ audio.play(); }catch(e){}\r\n    }\r\n  });\r\n})();\r\n<\/script>\r\n\r\n<script>\r\n(() => {\r\n  \/\/ ============= AURORA CHILL pour .sec-accueil =============\r\n  const SEL = '.sec-accueil';\r\n  const CFG = {\r\n    particles: 60,         \/\/ peu de grains (chill)\r\n    sizeMax: 1.6,          \/\/ taille max d\u2019un grain\r\n    speed: 0.12,           \/\/ vitesse tr\u00e8s lente\r\n    auroraOpacity: 0.18,   \/\/ opacit\u00e9 du voile aurora\r\n    sweepOpacity: 0.08,    \/\/ faisceau tr\u00e8s l\u00e9ger\r\n    sweepWidthRatio: 0.28, \/\/ largeur relative\r\n    halosA: 'rgba(255,245,220,.38)',\r\n    halosB: 'rgba(232,206,160,.28)',\r\n    light: '#fff8ec'\r\n  };\r\n  const reduceMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\r\n\r\n  function init(){\r\n    const section = document.querySelector(SEL);\r\n    if (!section) return;\r\n\r\n    \/\/ Assure un ordre de calques propre: canvas (0) < voile (1) < contenu (2)\r\n    const st = document.createElement('style');\r\n    st.innerHTML = `\r\n      ${SEL}{ position:relative!important; overflow:hidden; isolation:isolate; }\r\n      ${SEL} > .sa-veil{ z-index:1 !important; }\r\n      ${SEL} > .sa-bloc{ position:relative; z-index:2 !important; }\r\n      ${SEL} canvas.hero-chill{ position:absolute; inset:0; width:100%; height:100%; display:block; z-index:0; pointer-events:none; }\r\n      \/* Halos doux sur la photo (derri\u00e8re le voile) *\/\r\n      ${SEL}::before{\r\n        content:\"\"; position:absolute; inset:-6%; z-index:0; pointer-events:none;\r\n        background:\r\n          radial-gradient(46% 36% at 12% 10%, ${CFG.halosA} 0%, transparent 68%),\r\n          radial-gradient(40% 34% at 88% 18%, ${CFG.halosB} 0%, transparent 70%),\r\n          radial-gradient(44% 36% at 14% 88%, ${CFG.halosB} 0%, transparent 72%);\r\n        filter: blur(16px);\r\n      }\r\n    `;\r\n    document.head.appendChild(st);\r\n\r\n    \/\/ Canvas\r\n    const c = document.createElement('canvas');\r\n    c.className = 'hero-chill';\r\n    section.prepend(c);\r\n    const ctx = c.getContext('2d');\r\n\r\n    \/\/ DPR & resize\r\n    let w,h,dpr;\r\n    function resize(){\r\n      const r = section.getBoundingClientRect();\r\n      w = Math.max(1, r.width); h = Math.max(1, r.height);\r\n      dpr = Math.min(window.devicePixelRatio||1, 2);\r\n      c.width = Math.floor(w*dpr); c.height = Math.floor(h*dpr);\r\n      c.style.width = w+'px'; c.style.height = h+'px';\r\n      ctx.setTransform(dpr,0,0,dpr,0,0);\r\n    }\r\n    resize();\r\n    new ResizeObserver(resize).observe(section);\r\n\r\n    \/\/ Particules (discr\u00e8tes)\r\n    const rnd = (a,b)=>a+Math.random()*(b-a);\r\n    const dust = Array.from({length:CFG.particles}, () => ({\r\n      x: Math.random()*w, y: Math.random()*h,\r\n      r: rnd(0.6, CFG.sizeMax),\r\n      vx: rnd(-CFG.speed, CFG.speed),\r\n      vy: rnd(-CFG.speed*0.15, CFG.speed*0.35),\r\n      a: rnd(0.3, 0.65), flash: Math.random()*4000+2800\r\n    }));\r\n    const golds = ['#efd28c','#e0c58a','#ffe5b3'];\r\n\r\n    \/\/ Aurora params (2 rubans tr\u00e8s doux)\r\n    let tA = Math.random()*1000, tB = Math.random()*2000;\r\n    const A_FREQ = 0.0015, B_FREQ = 0.0012;\r\n\r\n    \/\/ Balayage l\u00e9ger\r\n    let sweepX = -w*0.5;\r\n\r\n    \/\/ Pause hors \u00e9cran\r\n    let running = true;\r\n    const io = new IntersectionObserver(e => running = e[0].isIntersecting, {threshold:.05});\r\n    io.observe(section);\r\n\r\n    let last = performance.now();\r\n    function tick(now){\r\n      if (!running){ requestAnimationFrame(tick); return; }\r\n      const dt = Math.min(34, now - last); last = now;\r\n\r\n      ctx.clearRect(0,0,w,h);\r\n\r\n      \/\/ Aurora (voiles doux, tr\u00e8s faible)\r\n      if (!reduceMotion){\r\n        tA += dt*A_FREQ; tB += dt*B_FREQ;\r\n\r\n        \/\/ Bande 1 (verticale courbe)\r\n        const g1 = ctx.createLinearGradient(0, 0, w, 0);\r\n        const o = CFG.auroraOpacity;\r\n        g1.addColorStop(0.0, `rgba(255,250,238,0)`);\r\n        g1.addColorStop(0.45 + 0.05*Math.sin(tA*0.7), `rgba(255,240,210,${o})`);\r\n        g1.addColorStop(0.9, `rgba(255,250,238,0)`);\r\n        ctx.fillStyle = g1;\r\n        ctx.globalAlpha = 0.9;\r\n        ctx.save();\r\n        ctx.translate(0, 0.04*h*Math.sin(tA*0.6));\r\n        ctx.fillRect(0, 0, w, h);\r\n        ctx.restore();\r\n\r\n        \/\/ Bande 2 (diagonale douce)\r\n        const g2 = ctx.createLinearGradient(0, 0, 0, h);\r\n        g2.addColorStop(0.0, `rgba(255,255,255,0)`);\r\n        g2.addColorStop(0.5 + 0.05*Math.sin(tB*0.5), `rgba(232,206,160,${o*0.85})`);\r\n        g2.addColorStop(1.0, `rgba(255,255,255,0)`);\r\n        ctx.fillStyle = g2;\r\n        ctx.globalAlpha = 0.8;\r\n        ctx.save();\r\n        ctx.rotate(-6*Math.PI\/180);\r\n        ctx.translate(-0.06*w, 0.02*h*Math.cos(tB*0.6));\r\n        ctx.fillRect(0, -0.2*h, w*1.2, h*1.4);\r\n        ctx.restore();\r\n        ctx.globalAlpha = 1;\r\n      } else {\r\n        \/\/ un soup\u00e7on de lumi\u00e8re statique si reduce-motion\r\n        ctx.globalAlpha = 0.05; ctx.fillStyle = CFG.light; ctx.fillRect(0,0,w,h); ctx.globalAlpha = 1;\r\n      }\r\n\r\n      \/\/ Poussi\u00e8re d\u2019or (tr\u00e8s soft)\r\n      ctx.save();\r\n      ctx.globalCompositeOperation = 'lighter';\r\n      for (let i=0;i<dust.length;i++){\r\n        const p = dust[i];\r\n        p.x += p.vx*dt; p.y += p.vy*dt;\r\n        if (p.x < -10) p.x = w+10; if (p.x > w+10) p.x = -10;\r\n        if (p.y < -10) p.y = h+10; if (p.y > h+10) p.y = -10;\r\n\r\n        let alpha = p.a;\r\n        p.flash -= dt;\r\n        if (p.flash<=0){ alpha = 0.9; p.flash = Math.random()*5000+3200; }\r\n\r\n        ctx.shadowBlur = 10;\r\n        ctx.shadowColor = 'rgba(224,197,138,0.35)';\r\n        ctx.beginPath();\r\n        ctx.fillStyle = golds[i%golds.length];\r\n        ctx.globalAlpha = alpha;\r\n        ctx.arc(p.x, p.y, p.r, 0, Math.PI*2);\r\n        ctx.fill();\r\n      }\r\n      ctx.restore();\r\n      ctx.globalAlpha = 1;\r\n\r\n      \/\/ Balayage tr\u00e8s discret (une seule bande)\r\n      if (!reduceMotion){\r\n        sweepX += 0.18*dt;\r\n        const sweepW = w*CFG.sweepWidthRatio;\r\n        if (sweepX > w + sweepW) sweepX = -sweepW*1.4;\r\n\r\n        ctx.save();\r\n        ctx.rotate(8*Math.PI\/180);\r\n        const g = ctx.createLinearGradient(sweepX, 0, sweepX + sweepW, 0);\r\n        g.addColorStop(0, 'rgba(255,255,255,0)');\r\n        g.addColorStop(0.5, `rgba(255,240,210,${CFG.sweepOpacity})`);\r\n        g.addColorStop(1, 'rgba(255,255,255,0)');\r\n        ctx.fillStyle = g;\r\n        ctx.fillRect(sweepX - w*0.6, -h*0.6, sweepW, h*1.6);\r\n        ctx.restore();\r\n      }\r\n\r\n      requestAnimationFrame(tick);\r\n    }\r\n\r\n    if (reduceMotion){\r\n      \/\/ rendu statique l\u00e9ger\r\n      ctx.globalAlpha = 0.06; ctx.fillStyle = CFG.light; ctx.fillRect(0,0,w,h); ctx.globalAlpha = 1;\r\n      for (const p of dust){ ctx.beginPath(); ctx.arc(p.x,p.y,p.r,0,Math.PI*2); ctx.fillStyle = '#e0c58a'; ctx.globalAlpha = p.a; ctx.fill(); }\r\n      ctx.globalAlpha = 1;\r\n    } else {\r\n      requestAnimationFrame(tick);\r\n    }\r\n  }\r\n\r\n  (document.readyState==='complete'||document.readyState==='interactive')\r\n    ? setTimeout(init,0)\r\n    : document.addEventListener('DOMContentLoaded', init, {once:true});\r\n})();\r\n<\/script>\r\n\r\n<script>\r\n(() => {\r\n  \/\/ =============== CHILL BG + PAPILLONS pour .sec-accueil ===============\r\n  const CFG = {\r\n    selector: 'section.sec-accueil',\r\n    particles: 60,       \/\/ poussi\u00e8re d\u2019or\r\n    maxSize: 2.0,\r\n    speed: 0.15,\r\n    bokeh: 6, bokehMin: 16, bokehMax: 34,\r\n    sweepWidthRatio: 0.18, sweepOpacity: 0.06,\r\n    \/\/ papillons \ud83e\udd8b\r\n    butterflies: 10,\r\n    butterflySpeed: 0.08,\r\n    \/\/ palette\r\n    colLight: 'rgba(255,240,210,0.06)',\r\n    haloA: 'rgba(255,245,220,.35)',\r\n    haloB: 'rgba(232,206,160,.28)',\r\n    \/\/ responsive\r\n    mobileMaxWidth: 768, mobileScale: 0.6\r\n  };\r\n\r\n  const reduceMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\r\n\r\n  function init(){\r\n    const sel = CFG.selector;\r\n    const section = document.querySelector(sel);\r\n    if (!section) return;\r\n\r\n    const style = document.createElement('style');\r\n    style.innerHTML = `\r\n      ${sel}{ position:relative !important; isolation:isolate; overflow:hidden; }\r\n      ${sel}::before{\r\n        content:\"\"; position:absolute; inset:-6%; z-index:0; pointer-events:none;\r\n        background:\r\n          radial-gradient(42% 32% at 10% 8%,  ${CFG.haloA} 0%, transparent 65%),\r\n          radial-gradient(38% 34% at 92% 12%, ${CFG.haloB} 0%, transparent 70%);\r\n        filter: blur(16px);\r\n      }\r\n      ${sel} .sa-veil{ position:absolute; inset:0; z-index:2 !important; }\r\n      ${sel} .sa-bloc{ position:relative; z-index:3 !important; }\r\n      ${sel} canvas.bg-chill{ position:absolute; inset:0; width:100%; height:100%;\r\n        display:block; z-index:1; pointer-events:none; }\r\n    `;\r\n    document.head.appendChild(style);\r\n\r\n    const canvas = document.createElement('canvas');\r\n    canvas.className = 'bg-chill';\r\n    section.prepend(canvas);\r\n    const ctx = canvas.getContext('2d');\r\n\r\n    let w,h,dpr, scale = 1;\r\n    function applyScale(){ scale = (window.innerWidth <= CFG.mobileMaxWidth) ? CFG.mobileScale : 1; }\r\n    function resize(){\r\n      applyScale();\r\n      const r = section.getBoundingClientRect();\r\n      w = Math.max(1, r.width);\r\n      h = Math.max(1, r.height);\r\n      dpr = Math.min(window.devicePixelRatio||1, 2);\r\n      canvas.width  = Math.floor(w*dpr);\r\n      canvas.height = Math.floor(h*dpr);\r\n      canvas.style.width = w+'px';\r\n      canvas.style.height= h+'px';\r\n      ctx.setTransform(dpr,0,0,dpr,0,0);\r\n    }\r\n    resize();\r\n    new ResizeObserver(resize).observe(section);\r\n\r\n    const rnd = (a,b)=>a+Math.random()*(b-a);\r\n    const golds = ['#efd28c','#e0c58a','#ffe5b3'];\r\n\r\n    \/\/ Poussi\u00e8re, bokeh, papillons\r\n    let P = [], B = [], F = [];\r\n\r\n    function seed(){\r\n      P = Array.from({length: Math.round(CFG.particles*scale)}, () => ({\r\n        x: Math.random()*w, y: Math.random()*h,\r\n        r: rnd(0.6, CFG.maxSize*scale),\r\n        vx: rnd(-CFG.speed, CFG.speed),\r\n        vy: rnd(-CFG.speed*0.2, CFG.speed*0.6),\r\n        a: rnd(0.25, 0.55), flash: Math.random()*3500+2200\r\n      }));\r\n      B = Array.from({length: Math.round(CFG.bokeh*scale)}, () => ({\r\n        x: Math.random()*w, y: Math.random()*h,\r\n        r: rnd(CFG.bokehMin*scale, CFG.bokehMax*scale),\r\n        vy: rnd(0.01, 0.04), vx: rnd(-0.03, 0.03),\r\n        a: rnd(0.05, 0.12)\r\n      }));\r\n      \/\/ \ud83e\udd8b Papillons\r\n      F = Array.from({length: Math.round(CFG.butterflies*scale)}, () => ({\r\n        x: Math.random()*w,\r\n        y: Math.random()*h,\r\n        vx: rnd(-CFG.butterflySpeed, CFG.butterflySpeed),\r\n        vy: rnd(-CFG.butterflySpeed, CFG.butterflySpeed*0.7),\r\n        size: rnd(16, 32)*scale,\r\n        wing: Math.random()*Math.PI*2,\r\n        color: golds[Math.floor(Math.random()*golds.length)],\r\n        flipSpeed: rnd(0.02, 0.05)\r\n      }));\r\n    }\r\n    seed();\r\n\r\n    let sweepX = -w*0.5;\r\n    const sweepW = () => w * CFG.sweepWidthRatio;\r\n    const vel = 0.18;\r\n\r\n    let running = true;\r\n    const io = new IntersectionObserver(e => running = e[0].isIntersecting, {threshold:.05});\r\n    io.observe(section);\r\n\r\n    \/\/ dessin papillon\r\n    function drawButterfly(x, y, s, phase, color){\r\n      const flap = Math.sin(phase)*0.6 + 0.4;\r\n      ctx.save();\r\n      ctx.translate(x,y);\r\n      ctx.scale(1,0.9);\r\n      ctx.rotate(Math.sin(phase*0.3)*0.1);\r\n      ctx.globalAlpha = 0.9;\r\n      ctx.fillStyle = color;\r\n      ctx.beginPath();\r\n      \/\/ aile gauche\r\n      ctx.moveTo(0,0);\r\n      ctx.bezierCurveTo(-s*0.6,-s*flap, -s, -s*0.2, -s*0.4, 0);\r\n      ctx.bezierCurveTo(-s, s*flap*0.8, -s*0.3, s*0.4, 0,0);\r\n      \/\/ aile droite\r\n      ctx.bezierCurveTo(s*0.6,-s*flap, s, -s*0.2, s*0.4, 0);\r\n      ctx.bezierCurveTo(s, s*flap*0.8, s*0.3, s*0.4, 0,0);\r\n      ctx.fill();\r\n      ctx.restore();\r\n    }\r\n\r\n    let last = performance.now();\r\n    function tick(now){\r\n      if (!running){ requestAnimationFrame(tick); return; }\r\n      const dt = Math.min(34, now - last); last = now;\r\n\r\n      ctx.clearRect(0,0,w,h);\r\n      ctx.globalAlpha = 1;\r\n      ctx.fillStyle = CFG.colLight;\r\n      ctx.fillRect(0,0,w,h);\r\n\r\n      \/\/ Bokeh\r\n      ctx.save(); ctx.globalCompositeOperation = 'lighter';\r\n      for (const b of B){\r\n        b.x += b.vx*dt; b.y += b.vy*dt;\r\n        if (b.x < -50) b.x = w+50; if (b.x > w+50) b.x = -50;\r\n        if (b.y > h+60) { b.y = -60; b.x = Math.random()*w; }\r\n        const g = ctx.createRadialGradient(b.x,b.y,0,b.x,b.y,b.r);\r\n        g.addColorStop(0, `rgba(255,240,210,${b.a})`);\r\n        g.addColorStop(1, 'rgba(255,240,210,0)');\r\n        ctx.fillStyle = g; ctx.beginPath(); ctx.arc(b.x,b.y,b.r,0,Math.PI*2); ctx.fill();\r\n      }\r\n      ctx.restore();\r\n\r\n      \/\/ Poussi\u00e8re\r\n      ctx.save(); ctx.globalCompositeOperation = 'lighter';\r\n      for (let i=0;i<P.length;i++){\r\n        const p = P[i];\r\n        p.x += p.vx*dt; p.y += p.vy*dt;\r\n        if (p.x < -10) p.x = w+10; if (p.x > w+10) p.x = -10;\r\n        if (p.y < -10) p.y = h+10; if (p.y > h+10) p.y = -10;\r\n\r\n        let alpha = p.a; p.flash -= dt;\r\n        if (p.flash<=0){ alpha = Math.min(0.8, p.a+0.25); p.flash = Math.random()*3500+2400; }\r\n\r\n        ctx.shadowBlur = 10; ctx.shadowColor = 'rgba(224,197,138,0.35)';\r\n        ctx.beginPath(); ctx.fillStyle = golds[i%golds.length];\r\n        ctx.globalAlpha = alpha; ctx.arc(p.x, p.y, p.r, 0, Math.PI*2); ctx.fill();\r\n      }\r\n      ctx.restore();\r\n\r\n      \/\/ \ud83e\udd8b Papillons\r\n      for (const f of F){\r\n        f.x += f.vx*dt; f.y += f.vy*dt;\r\n        f.wing += f.flipSpeed*dt;\r\n        if (f.x < -60) f.x = w+60;\r\n        if (f.x > w+60) f.x = -60;\r\n        if (f.y < -40) f.y = h+40;\r\n        if (f.y > h+40) f.y = -40;\r\n        drawButterfly(f.x, f.y, f.size, f.wing, f.color);\r\n      }\r\n\r\n      \/\/ balayage l\u00e9ger\r\n      if (!reduceMotion){\r\n        sweepX += vel*dt;\r\n        const SW = sweepW();\r\n        if (sweepX > w + SW) sweepX = -SW*1.6;\r\n        ctx.save();\r\n        ctx.rotate(8*Math.PI\/180);\r\n        let g = ctx.createLinearGradient(sweepX, 0, sweepX + SW, 0);\r\n        g.addColorStop(0, 'rgba(255,255,255,0)');\r\n        g.addColorStop(0.5, `rgba(255,240,210,${CFG.sweepOpacity})`);\r\n        g.addColorStop(1, 'rgba(255,255,255,0)');\r\n        ctx.fillStyle = g;\r\n        ctx.fillRect(sweepX - w*0.5, -h*0.9, SW, h*2.0);\r\n        ctx.restore();\r\n      }\r\n\r\n      requestAnimationFrame(tick);\r\n    }\r\n\r\n    if (reduceMotion){\r\n      ctx.fillStyle = 'rgba(224,197,138,0.12)';\r\n      for (const p of P){ ctx.beginPath(); ctx.arc(p.x,p.y,p.r,0,Math.PI*2); ctx.fill(); }\r\n    } else {\r\n      requestAnimationFrame(tick);\r\n    }\r\n  }\r\n\r\n  (document.readyState==='complete'||document.readyState==='interactive')\r\n    ? setTimeout(init,0)\r\n    : document.addEventListener('DOMContentLoaded', init);\r\n})();\r\n<\/script>\r\n\r\n\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8accd32 e-con-full e-flex e-con e-parent\" data-id=\"8accd32\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3a66e3a elementor-widget elementor-widget-html\" data-id=\"3a66e3a\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- ========= SECTION 2 \u2014 PROGRAMME (Version premium \/ timeline) ========= -->\r\n<section class=\"sec-programme-v2\" id=\"programme\">\r\n  <div class=\"sp2-wrap\">\r\n    <header class=\"sp2-head\">\r\n      <h2 class=\"sp2-title\">Programme de la journ\u00e9e<\/h2>\r\n      <p class=\"sp2-sub\">Voici les moments cl\u00e9s. Des ajustements seront communiqu\u00e9s si n\u00e9cessaire.<\/p>\r\n    <\/header>\r\n\r\n    <div class=\"sp2-timeline\">\r\n      <!-- \u00c9TAPE 1 -->\r\n      <article class=\"sp2-item\">\r\n        <div class=\"sp2-dot\" aria-hidden=\"true\"><\/div>\r\n        <div class=\"sp2-card\">\r\n          <div class=\"sp2-ico\" aria-hidden=\"true\">\r\n            <!-- anneaux -->\r\n            <svg viewBox=\"0 0 64 64\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n              <defs><linearGradient id=\"sg1\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\r\n                <stop offset=\"0\" stop-color=\"#b88a3b\"\/><stop offset=\"1\" stop-color=\"#e0c58a\"\/>\r\n              <\/linearGradient><\/defs>\r\n              <g fill=\"none\" stroke=\"url(#sg1)\" stroke-width=\"3\">\r\n                <circle cx=\"24\" cy=\"36\" r=\"14\"\/><circle cx=\"40\" cy=\"28\" r=\"14\"\/><path d=\"M40 14l5-6 6 5-5 6z\"\/>\r\n              <\/g>\r\n            <\/svg>\r\n          <\/div>\r\n          <h3 class=\"sp2-card-title\">C\u00e9r\u00e9monie<\/h3>\r\n          <p class=\"sp2-time\">13:00 \u2014 \u00c9glise<\/p>\r\n\r\n          <!-- Adresse + lien Google Maps -->\r\n          <div class=\"sp2-address\">\r\n            <span class=\"sp2-pin\" aria-hidden=\"true\">\r\n              <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n                <defs><linearGradient id=\"sg-pin\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\r\n                  <stop offset=\"0\" stop-color=\"#b88a3b\"\/><stop offset=\"1\" stop-color=\"#e0c58a\"\/>\r\n                <\/linearGradient><\/defs>\r\n                <path d=\"M12 22s7-6.2 7-12A7 7 0 0 0 5 10c0 5.8 7 12 7 12Z\" stroke=\"url(#sg-pin)\" stroke-width=\"1.8\"\/>\r\n                <circle cx=\"12\" cy=\"10\" r=\"2.8\" stroke=\"url(#sg-pin)\" stroke-width=\"1.6\"\/>\r\n              <\/svg>\r\n            <\/span>\r\n            <div class=\"sp2-address-text\">\r\n              <strong>Adresse de l\u2019\u00e9glise<\/strong><br>\r\n              <span>281 Bd de la Madeleine, 06000 Nice<\/span>\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <div class=\"sp2-actions\">\r\n            <a class=\"sp2-map-btn\" href=\"https:\/\/share.google\/5IIGqa4DCB138ufkw\" target=\"_blank\" rel=\"noopener\">\r\n              \ud83d\udccd Itin\u00e9raire Google Maps\r\n            <\/a>\r\n          <\/div>\r\n\r\n          <p class=\"sp2-note\">Arrivez 10\u201315 min en avance pour vous placer tranquillement.<\/p>\r\n        <\/div>\r\n      <\/article>\r\n\r\n      <!-- \u00c9TAPE 2 -->\r\n      <article class=\"sp2-item\">\r\n        <div class=\"sp2-dot\" aria-hidden=\"true\"><\/div>\r\n        <div class=\"sp2-card\">\r\n          <div class=\"sp2-ico\" aria-hidden=\"true\">\r\n            <!-- cocktail -->\r\n            <svg viewBox=\"0 0 64 64\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n              <defs><linearGradient id=\"sg2\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\r\n                <stop offset=\"0\" stop-color=\"#b88a3b\"\/><stop offset=\"1\" stop-color=\"#e0c58a\"\/>\r\n              <\/linearGradient><\/defs>\r\n              <g fill=\"none\" stroke=\"url(#sg2)\" stroke-width=\"3\" stroke-linecap=\"round\">\r\n                <path d=\"M22 6h20l-6 22a8 8 0 0 1-8 6h0a8 8 0 0 1-8-6L22 6z\"\/>\r\n                <path d=\"M32 34v18\"\/><path d=\"M22 52h20\"\/>\r\n              <\/g>\r\n            <\/svg>\r\n          <\/div>\r\n          <h3 class=\"sp2-card-title\">Cocktail &amp; Photos<\/h3>\r\n          <p class=\"sp2-time\">16:00 \u2014 Jardin \/ Terrasse<\/p>\r\n          <p class=\"sp2-note\">Instants captur\u00e9s avec la famille et les amis.<\/p>\r\n        <\/div>\r\n      <\/article>\r\n\r\n      <!-- \u00c9TAPE 3 -->\r\n      <article class=\"sp2-item\">\r\n        <div class=\"sp2-dot\" aria-hidden=\"true\"><\/div>\r\n        <div class=\"sp2-card\">\r\n          <div class=\"sp2-ico\" aria-hidden=\"true\">\r\n            <!-- d\u00eener -->\r\n            <svg viewBox=\"0 0 64 64\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n              <defs><linearGradient id=\"sg3\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\r\n                <stop offset=\"0\" stop-color=\"#b88a3b\"\/><stop offset=\"1\" stop-color=\"#e0c58a\"\/>\r\n              <\/linearGradient><\/defs>\r\n              <g fill=\"none\" stroke=\"url(#sg3)\" stroke-width=\"3\" stroke-linecap=\"round\">\r\n                <circle cx=\"24\" cy=\"32\" r=\"12\"\/><path d=\"M44 16v32M50 16v32M56 16v32\"\/>\r\n              <\/g>\r\n            <\/svg>\r\n          <\/div>\r\n          <h3 class=\"sp2-card-title\">D\u00eener<\/h3>\r\n          <p class=\"sp2-time\">17:00 \u2014 Salle de r\u00e9ception<\/p>\r\n          <p class=\"sp2-note\">Menu arm\u00e9nien &amp; saveurs m\u00e9diterran\u00e9ennes.<\/p>\r\n        <\/div>\r\n      <\/article>\r\n\r\n      <!-- \u00c9TAPE 4 -->\r\n      <article class=\"sp2-item\">\r\n        <div class=\"sp2-dot\" aria-hidden=\"true\"><\/div>\r\n        <div class=\"sp2-card\">\r\n          <div class=\"sp2-ico\" aria-hidden=\"true\">\r\n            <!-- musique -->\r\n            <svg viewBox=\"0 0 64 64\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n              <defs><linearGradient id=\"sg4\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\r\n                <stop offset=\"0\" stop-color=\"#b88a3b\"\/><stop offset=\"1\" stop-color=\"#e0c58a\"\/>\r\n              <\/linearGradient><\/defs>\r\n              <g fill=\"none\" stroke=\"url(#sg4)\" stroke-width=\"3\" stroke-linecap=\"round\">\r\n                <path d=\"M28 14v30a6 6 0 1 1-6-6h6M46 10v26a6 6 0 1 1-6-6h6\"\/>\r\n                <path d=\"M28 14l18-4\"\/>\r\n              <\/g>\r\n            <\/svg>\r\n          <\/div>\r\n          <h3 class=\"sp2-card-title\">Soir\u00e9e<\/h3>\r\n          <p class=\"sp2-time\">18:00 jusqu'\u00e0 04:00 \u2014 Danse &amp; surprises<\/p>\r\n          <p class=\"sp2-note\">Musiques arm\u00e9niennes &amp; moments forts.<\/p>\r\n        <\/div>\r\n      <\/article>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<style>\r\n\/* ===== Scope .sec-programme-v2 ===== *\/\r\n.sec-programme-v2{\r\n  --c-bg1:#fff8e9;           \/* ivoire chaud *\/\r\n  --c-bg2:#f7edd6;           \/* champagne doux *\/\r\n  --c-card:#ffffffd9;        \/* \u201cverre\u201d (blanc 85%) *\/\r\n  --c-border:#e9dac2;        \/* bordure fine *\/\r\n  --c-text:#3a2b22;          \/* cacao *\/\r\n  --c-text2:#5a4a43;         \/* cacao doux *\/\r\n  --c-gold1:#b88a3b;         \/* or 1 *\/\r\n  --c-gold2:#e0c58a;         \/* or 2 *\/\r\n  --shadow: 0 10px 30px rgba(56,38,10,.08);\r\n\r\n  padding:64px 20px;\r\n  background:\r\n    radial-gradient(120% 70% at 50% 0%, var(--c-bg1) 0%, transparent 60%),\r\n    linear-gradient(180deg, var(--c-bg2), #fff);\r\n}\r\n.sec-programme-v2 .sp2-wrap{ max-width:1080px; margin:0 auto; }\r\n\r\n\/* Titre *\/\r\n.sec-programme-v2 .sp2-head{ text-align:center; margin-bottom:20px; }\r\n.sec-programme-v2 .sp2-title{\r\n  font-family:'Playfair Display', Georgia, serif;\r\n  color:var(--c-text);\r\n  font-size:clamp(28px,5.2vw,40px);\r\n  margin:0 0 8px;\r\n  background:linear-gradient(90deg,var(--c-gold1),var(--c-gold2));\r\n  -webkit-background-clip:text; -webkit-text-fill-color:transparent;\r\n}\r\n.sec-programme-v2 .sp2-sub{\r\n  font-family:'Poppins', system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n  color:var(--c-text2);\r\n  margin:0; font-size:clamp(14px,3.6vw,16px);\r\n}\r\n\r\n\/* Timeline *\/\r\n.sec-programme-v2 .sp2-timeline{\r\n  position:relative; margin-top:22px;\r\n  display:grid; grid-template-columns: 1fr; gap:18px;\r\n}\r\n.sec-programme-v2 .sp2-timeline::before{\r\n  content:\"\"; position:absolute; left:22px; top:0; bottom:0;\r\n  width:2px; background:linear-gradient(var(--c-gold1), var(--c-gold2));\r\n  opacity:.35;\r\n}\r\n@media(min-width:720px){\r\n  .sec-programme-v2 .sp2-timeline{\r\n    grid-template-columns: 1fr 1fr;\r\n  }\r\n  .sec-programme-v2 .sp2-timeline::before{\r\n    left:50%; transform:translateX(-50%);\r\n  }\r\n}\r\n\r\n.sec-programme-v2 .sp2-item{ position:relative; padding-left:56px; }\r\n@media(min-width:720px){\r\n  .sec-programme-v2 .sp2-item:nth-child(odd){ grid-column:1; padding-right:42px; }\r\n  .sec-programme-v2 .sp2-item:nth-child(even){ grid-column:2; padding-left:42px; }\r\n  .sec-programme-v2 .sp2-item{ padding-left:0; }\r\n}\r\n\r\n.sec-programme-v2 .sp2-dot{\r\n  position:absolute; left:14px; top:20px;\r\n  width:18px; height:18px; border-radius:50%;\r\n  background: radial-gradient(circle at 30% 30%, var(--c-gold2), var(--c-gold1));\r\n  box-shadow: 0 0 0 4px #fff8, 0 6px 14px rgba(184,138,59,.25);\r\n}\r\n@media(min-width:720px){\r\n  .sec-programme-v2 .sp2-item:nth-child(odd) .sp2-dot{ left: calc(50% - 9px); }\r\n  .sec-programme-v2 .sp2-item:nth-child(even) .sp2-dot{ left: calc(50% - 9px); }\r\n}\r\n\r\n\/* Cartes *\/\r\n.sec-programme-v2 .sp2-card{\r\n  background: var(--c-card);\r\n  border:1px solid var(--c-border);\r\n  border-radius:16px;\r\n  padding:16px 16px 14px;\r\n  box-shadow: var(--shadow);\r\n  backdrop-filter: blur(6px);\r\n}\r\n@media(min-width:720px){\r\n  .sec-programme-v2 .sp2-item:nth-child(odd) .sp2-card{ margin-right:56px; }\r\n  .sec-programme-v2 .sp2-item:nth-child(even) .sp2-card{ margin-left:56px; }\r\n}\r\n\r\n.sec-programme-v2 .sp2-ico{ width:46px; height:46px; margin-bottom:8px; }\r\n.sec-programme-v2 .sp2-card-title{\r\n  font-family:'Cormorant Garamond', Georgia, serif;\r\n  font-size:22px; color:var(--c-text); margin:4px 0 6px;\r\n}\r\n.sec-programme-v2 .sp2-time{\r\n  font-family:'Poppins', system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n  font-weight:600; color:#3f312a; margin:0 0 8px; font-size:14px;\r\n}\r\n\r\n\/* Adresse + actions *\/\r\n.sec-programme-v2 .sp2-address{\r\n  display:flex; gap:10px; align-items:flex-start;\r\n  padding:10px 12px; border:1px dashed var(--c-border); border-radius:12px;\r\n  background: #fffdfa;\r\n  margin:0 0 10px;\r\n}\r\n.sec-programme-v2 .sp2-pin{ flex:0 0 auto; line-height:0; }\r\n.sec-programme-v2 .sp2-address-text{\r\n  font-family:'Poppins', system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n  font-size:13px; color:var(--c-text2);\r\n}\r\n.sec-programme-v2 .sp2-actions{ margin:0 0 8px; }\r\n.sec-programme-v2 .sp2-map-btn{\r\n  display:inline-block; padding:10px 16px; border-radius:22px; text-decoration:none; font-weight:700;\r\n  font-family:'Poppins', system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n  background: linear-gradient(45deg, var(--c-gold1), var(--c-gold2)); color:#fff;\r\n  box-shadow: 0 8px 20px rgba(184,138,59,.22);\r\n  transition: transform .12s ease;\r\n}\r\n.sec-programme-v2 .sp2-map-btn:active{ transform: translateY(1px); }\r\n\r\n.sec-programme-v2 .sp2-note{\r\n  font-family:'Poppins', system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n  color:var(--c-text2); margin:0; font-size:13px; line-height:1.5;\r\n  border-top:1px dashed var(--c-border); padding-top:8px;\r\n}\r\n\r\n\/* CTA *\/\r\n.sec-programme-v2 .sp2-cta{ text-align:center; margin-top:22px; }\r\n.sec-programme-v2 .sp2-btn{\r\n  display:inline-block; padding:12px 26px; border-radius:28px; text-decoration:none; font-weight:700;\r\n  font-family:'Poppins', system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n  background: linear-gradient(45deg, var(--c-gold1), var(--c-gold2)); color:#fff;\r\n  box-shadow: 0 10px 24px rgba(184,138,59,.25);\r\n}\r\n\r\n\r\n<\/style>\r\n<!-- ========= \/SECTION 2 ========= -->\r\n\r\n<script>\r\n(() => {\r\n  \/\/ ================== BLING x2 CONFIG ==================\r\n  const CFG = {\r\n    selector: 'section#programme.sec-programme-v2',\r\n    \/\/ poussi\u00e8re d\u2019or\r\n    particles: 220,\r\n    maxSize: 2.8,\r\n    speed: 0.38,\r\n    \/\/ \u00e9toiles scintillantes\r\n    stars: 26,\r\n    starMin: 6,    \/\/ rayon interne\r\n    starMax: 14,   \/\/ rayon externe\r\n    starPulse: 0.7,\r\n    \/\/ bokeh (orbes flous)\r\n    bokeh: 12,\r\n    bokehMin: 18,\r\n    bokehMax: 42,\r\n    \/\/ faisceaux\r\n    sweepOpacityA: 0.22,\r\n    sweepOpacityB: 0.14,\r\n    sweepWidthRatioA: 0.20,\r\n    sweepWidthRatioB: 0.30,\r\n    \/\/ palette\r\n    colLight: '#fffaf0',\r\n    colTop:   '#fff3e0',\r\n    colMid:   '#ffe9c4',\r\n    colBot:   '#ffffff',\r\n    haloA: 'rgba(255,245,220,.65)',\r\n    haloB: 'rgba(232,206,160,.55)'\r\n  };\r\n\r\n  const reduceMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\r\n\r\n  function init(){\r\n    const sel = CFG.selector;\r\n    const section = document.querySelector(sel);\r\n    if (!section) return;\r\n\r\n    \/\/ ===== CSS d\u2019ambiance (fond + halos) =====\r\n    const style = document.createElement('style');\r\n    style.innerHTML = `\r\n      ${sel}{ position:relative!important; overflow:hidden; isolation:isolate;\r\n        background:\r\n          radial-gradient(120% 72% at 50% 0%, ${CFG.colTop} 0%, transparent 60%),\r\n          linear-gradient(180deg, ${CFG.colTop} 0%, ${CFG.colBot} 100%)!important;\r\n      }\r\n      ${sel}::before{\r\n        content:\"\"; position:absolute; inset:-6%; z-index:-1; pointer-events:none;\r\n        background:\r\n          radial-gradient(42% 32% at 10% 8%,  ${CFG.haloA} 0%, transparent 65%),\r\n          radial-gradient(38% 34% at 92% 12%, ${CFG.haloB} 0%, transparent 70%),\r\n          radial-gradient(44% 36% at 14% 90%, ${CFG.haloB} 0%, transparent 72%),\r\n          radial-gradient(34% 28% at 88% 88%, ${CFG.haloA} 0%, transparent 72%);\r\n        filter: blur(18px);\r\n      }\r\n      ${sel} > *{ position:relative; z-index:1 }\r\n      ${sel} canvas.bg-bling{ position:absolute; inset:0; width:100%; height:100%; display:block; z-index:0; pointer-events:none; }\r\n    `;\r\n    document.head.appendChild(style);\r\n\r\n    \/\/ ===== Canvas =====\r\n    const canvas = document.createElement('canvas');\r\n    canvas.className = 'bg-bling';\r\n    section.prepend(canvas);\r\n    const ctx = canvas.getContext('2d');\r\n\r\n    \/\/ DPR & resize\r\n    let w,h,dpr;\r\n    function resize(){\r\n      const r = section.getBoundingClientRect();\r\n      w = Math.max(1, r.width);\r\n      h = Math.max(1, r.height);\r\n      dpr = Math.min(window.devicePixelRatio||1, 2);\r\n      canvas.width = Math.floor(w*dpr);\r\n      canvas.height= Math.floor(h*dpr);\r\n      canvas.style.width = w+'px';\r\n      canvas.style.height= h+'px';\r\n      ctx.setTransform(dpr,0,0,dpr,0,0);\r\n    }\r\n    resize();\r\n    new ResizeObserver(resize).observe(section);\r\n\r\n    \/\/ ===== Entit\u00e9s =====\r\n    const rnd = (a,b)=>a+Math.random()*(b-a);\r\n    \/\/ poussi\u00e8re d\u2019or\r\n    const dust = Array.from({length:CFG.particles}, () => ({\r\n      x: Math.random()*w, y: Math.random()*h,\r\n      r: rnd(0.7, CFG.maxSize),\r\n      vx: rnd(-CFG.speed, CFG.speed),\r\n      vy: rnd(-CFG.speed*0.2, CFG.speed*0.7),\r\n      a: rnd(0.45, 0.95), flash: Math.random()*3000+1500\r\n    }));\r\n    \/\/ \u00e9toiles\r\n    const stars = Array.from({length:CFG.stars}, () => ({\r\n      x: Math.random()*w, y: Math.random()*h,\r\n      rIn: rnd(CFG.starMin*0.6, CFG.starMin),\r\n      rOut: rnd(CFG.starMax*0.7, CFG.starMax),\r\n      rot: Math.random()*Math.PI,\r\n      pulse: rnd(0.4, CFG.starPulse),\r\n      t: Math.random()*Math.PI*2,\r\n      a: rnd(0.5,0.9),\r\n      drift: { x: rnd(-0.05,0.05), y: rnd(-0.02,0.04) }\r\n    }));\r\n    \/\/ bokeh\r\n    const bokeh = Array.from({length:CFG.bokeh}, () => ({\r\n      x: Math.random()*w, y: Math.random()*h,\r\n      r: rnd(CFG.bokehMin, CFG.bokehMax),\r\n      vy: rnd(0.02, 0.08),\r\n      vx: rnd(-0.04, 0.04),\r\n      a: rnd(0.08, 0.18)\r\n    }));\r\n\r\n    \/\/ ===== Faisceaux =====\r\n    let sweepXA = -w*0.5, sweepXB = -w*0.8;\r\n    const sweepW_A = ()=> w*CFG.sweepWidthRatioA;\r\n    const sweepW_B = ()=> w*CFG.sweepWidthRatioB;\r\n    const velA = 0.45, velB = 0.28;\r\n\r\n    \/\/ ===== Pause hors \u00e9cran =====\r\n    let running = true;\r\n    const io = new IntersectionObserver(e => running = e[0].isIntersecting, {threshold:.05});\r\n    io.observe(section);\r\n\r\n    \/\/ ===== Helpers dessin =====\r\n    const golds = ['#efd28c','#e0c58a','#ffe5b3'];\r\n    function drawStar(cx, cy, spikes=6, inner=6, outer=12, rot=0, alpha=1){\r\n      ctx.save();\r\n      ctx.translate(cx,cy);\r\n      ctx.rotate(rot);\r\n      ctx.beginPath();\r\n      let step = Math.PI \/ spikes;\r\n      ctx.moveTo(0, -outer);\r\n      for(let i=0;i<spikes;i++){\r\n        ctx.lineTo(Math.cos(-outer===0?0:(i*2)*step - Math.PI\/2)*outer, Math.sin((i*2)*step - Math.PI\/2)*outer);\r\n        ctx.lineTo(Math.cos((i*2+1)*step - Math.PI\/2)*inner, Math.sin((i*2+1)*step - Math.PI\/2)*inner);\r\n      }\r\n      ctx.closePath();\r\n      ctx.globalAlpha = alpha;\r\n      ctx.fillStyle = 'rgba(255,240,210,0.85)';\r\n      ctx.shadowBlur = 16;\r\n      ctx.shadowColor = 'rgba(232,206,160,0.8)';\r\n      ctx.fill();\r\n      \/\/ lueur\r\n      ctx.beginPath();\r\n      ctx.globalAlpha = alpha*0.35;\r\n      ctx.arc(0,0, outer*1.9, 0, Math.PI*2);\r\n      ctx.fill();\r\n      ctx.restore();\r\n    }\r\n\r\n    \/\/ ===== Boucle =====\r\n    let last = performance.now();\r\n    function tick(now){\r\n      if (!running){ requestAnimationFrame(tick); return; }\r\n      const dt = Math.min(34, now - last); last = now;\r\n\r\n      \/\/ fond doux suppl\u00e9mentaire (grain lumineux)\r\n      ctx.clearRect(0,0,w,h);\r\n      ctx.globalAlpha = 0.06;\r\n      ctx.fillStyle = CFG.colLight;\r\n      ctx.fillRect(0,0,w,h);\r\n      ctx.globalAlpha = 1;\r\n\r\n      \/\/ BOKEH\r\n      ctx.save();\r\n      ctx.globalCompositeOperation = 'lighter';\r\n      for (const b of bokeh){\r\n        b.x += b.vx*dt; b.y += b.vy*dt;\r\n        if (b.x < -50) b.x = w+50; if (b.x > w+50) b.x = -50;\r\n        if (b.y > h+60) { b.y = -60; b.x = Math.random()*w; }\r\n        const grad = ctx.createRadialGradient(b.x,b.y,0,b.x,b.y,b.r);\r\n        grad.addColorStop(0, `rgba(255,240,210,${b.a})`);\r\n        grad.addColorStop(1, 'rgba(255,240,210,0)');\r\n        ctx.fillStyle = grad;\r\n        ctx.beginPath(); ctx.arc(b.x,b.y,b.r,0,Math.PI*2); ctx.fill();\r\n      }\r\n      ctx.restore();\r\n\r\n      \/\/ POUSSI\u00c8RE D\u2019OR\r\n      ctx.save();\r\n      ctx.globalCompositeOperation = 'lighter';\r\n      for (let i=0;i<dust.length;i++){\r\n        const p = dust[i];\r\n        p.x += p.vx*dt; p.y += p.vy*dt;\r\n        if (p.x < -10) p.x = w+10; if (p.x > w+10) p.x = -10;\r\n        if (p.y < -10) p.y = h+10; if (p.y > h+10) p.y = -10;\r\n\r\n        \/\/ flash\r\n        let alpha = p.a;\r\n        p.flash -= dt;\r\n        if (p.flash<=0){ alpha = 1; p.flash = Math.random()*3000+1800; }\r\n\r\n        ctx.shadowBlur = 14;\r\n        ctx.shadowColor = 'rgba(224,197,138,0.6)';\r\n        ctx.beginPath();\r\n        ctx.fillStyle = golds[i%golds.length];\r\n        ctx.globalAlpha = alpha;\r\n        ctx.arc(p.x, p.y, p.r, 0, Math.PI*2);\r\n        ctx.fill();\r\n\r\n        \/\/ halo mini\r\n        if (alpha>0.98){\r\n          ctx.globalAlpha = 0.4;\r\n          ctx.beginPath(); ctx.arc(p.x,p.y,p.r*2.4,0,Math.PI*2); ctx.fill();\r\n        }\r\n      }\r\n      ctx.restore();\r\n      ctx.globalAlpha = 1;\r\n\r\n      \/\/ \u00c9TOILES\r\n      for (const s of stars){\r\n        s.t += 0.002*dt;\r\n        s.rot += 0.0006*dt;\r\n        s.x += s.drift.x*dt; s.y += s.drift.y*dt;\r\n        if (s.x<-20) s.x=w+20; if (s.x>w+20) s.x=-20;\r\n        if (s.y<-20) s.y=h+20; if (s.y>h+20) s.y=-20;\r\n        const pulse = (Math.sin(s.t)+1)\/2; \/\/ 0..1\r\n        const inner = s.rIn*(1 + s.pulse*pulse*0.25);\r\n        const outer = s.rOut*(1 + s.pulse*pulse*0.35);\r\n        drawStar(s.x, s.y, 6, inner, outer, s.rot, s.a*(0.7+0.3*pulse));\r\n      }\r\n\r\n      \/\/ FAISCEAUX (double sweep)\r\n      if (!reduceMotion){\r\n        \/\/ A (rapide, fin)\r\n        sweepXA += velA*dt;\r\n        const wA = sweepW_A();\r\n        if (sweepXA > w + wA) sweepXA = -wA*1.6;\r\n        ctx.save();\r\n        ctx.rotate(12*Math.PI\/180);\r\n        let gA = ctx.createLinearGradient(sweepXA, 0, sweepXA + wA, 0);\r\n        gA.addColorStop(0, 'rgba(255,255,255,0)');\r\n        gA.addColorStop(0.48, `rgba(255,240,210,${CFG.sweepOpacityA})`);\r\n        gA.addColorStop(1, 'rgba(255,255,255,0)');\r\n        ctx.fillStyle = gA;\r\n        ctx.fillRect(sweepXA - w*0.5, -h*0.9, wA, h*2.0);\r\n        ctx.restore();\r\n\r\n        \/\/ B (lent, large)\r\n        sweepXB += velB*dt;\r\n        const wB = sweepW_B();\r\n        if (sweepXB > w + wB) sweepXB = -wB*1.8;\r\n        ctx.save();\r\n        ctx.rotate(-9*Math.PI\/180);\r\n        let gB = ctx.createLinearGradient(sweepXB, 0, sweepXB + wB, 0);\r\n        gB.addColorStop(0, 'rgba(255,255,255,0)');\r\n        gB.addColorStop(0.5, `rgba(255,240,210,${CFG.sweepOpacityB})`);\r\n        gB.addColorStop(1, 'rgba(255,255,255,0)');\r\n        ctx.fillStyle = gB;\r\n        ctx.fillRect(sweepXB - w*0.5, -h*0.9, wB, h*2.0);\r\n        ctx.restore();\r\n      }\r\n\r\n      requestAnimationFrame(tick);\r\n    }\r\n\r\n    if (reduceMotion){\r\n      \/\/ rendu statique (pas d\u2019anim)\r\n      ctx.fillStyle = 'rgba(224,197,138,0.18)';\r\n      for (const p of dust){ ctx.beginPath(); ctx.arc(p.x,p.y,p.r,0,Math.PI*2); ctx.fill(); }\r\n      for (const s of stars){ drawStar(s.x,s.y,6,s.rIn,s.rOut,s.rot, s.a); }\r\n    } else {\r\n      requestAnimationFrame(tick);\r\n    }\r\n\r\n    \/\/ Cleanup si n\u00e9cessaire (Elementor)\r\n    document.addEventListener('elementor\/popup\/hide', ()=>{ try{io.disconnect()}catch(e){} }, {once:true});\r\n  }\r\n\r\n  (document.readyState==='complete'||document.readyState==='interactive')\r\n    ? setTimeout(init,0)\r\n    : document.addEventListener('DOMContentLoaded', init);\r\n})();\r\n<\/script>\r\n\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f7fa16b e-con-full e-flex e-con e-parent\" data-id=\"f7fa16b\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-69e1c7c elementor-widget elementor-widget-html\" data-id=\"69e1c7c\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- ========= SECTION 3 \u2014 LIEU & ACC\u00c8S (Roquebrune-sur-Argens) ========= -->\r\n<section class=\"sec-lieu\" id=\"lieu\">\r\n  <div class=\"sl-wrap\">\r\n    <header class=\"sl-head\">\r\n      <h2 class=\"sl-title\">Lieu &amp; Acc\u00e8s<\/h2>\r\n      <p class=\"sl-sub\">Les informations pratiques pour nous rejoindre en toute s\u00e9r\u00e9nit\u00e9.<\/p>\r\n    <\/header>\r\n\r\n    <!-- Adresse + carte -->\r\n    <div class=\"sl-info\">\r\n      <div class=\"sl-card sl-address\">\r\n        <div class=\"sl-card-head\">\r\n          <div class=\"sl-ico\" aria-hidden=\"true\">\r\n            <!-- \u00e9pingle -->\r\n            <svg viewBox=\"0 0 64 64\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n              <defs>\r\n                <linearGradient id=\"lgA\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\r\n                  <stop offset=\"0\" stop-color=\"#b88a3b\"\/>\r\n                  <stop offset=\"1\" stop-color=\"#e0c58a\"\/>\r\n                <\/linearGradient>\r\n              <\/defs>\r\n              <g fill=\"none\" stroke=\"url(#lgA)\" stroke-width=\"3\">\r\n                <path d=\"M32 58s18-20 18-32A18 18 0 1 0 14 26c0 12 18 32 18 32z\"\/>\r\n                <circle cx=\"32\" cy=\"26\" r=\"6\"\/>\r\n              <\/g>\r\n            <\/svg>\r\n          <\/div>\r\n          <h3 class=\"sl-card-title\">Adresse<\/h3>\r\n        <\/div>\r\n        <address class=\"sl-address-txt\">\r\n          Salle de r\u00e9ception priv\u00e9e<br>\r\n          <span>1610, RD8 \u2013 Quartier Fournel<\/span><br>\r\n          83520 Roquebrune-sur-Argens, France\r\n        <\/address>\r\n\r\n        <div class=\"sl-pills\">\r\n          <span class=\"pill\">Parking sur place<\/span>\r\n          <span class=\"pill\">Acc\u00e8s PMR<\/span>\r\n          <span class=\"pill\">Dress code : \u00e9l\u00e9gant (bordeaux, ivoire, olive)<\/span>\r\n        <\/div>\r\n\r\n        <div class=\"sl-actions\">\r\n          <a class=\"sl-btn\" href=\"https:\/\/maps.google.com\/?q=1610,+RD8,+Quartier+Fournel,+83520+Roquebrune-sur-Argens\" target=\"_blank\" rel=\"noopener\">Ouvrir dans Google Maps<\/a>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <!-- Carte int\u00e9gr\u00e9e -->\r\n      <div class=\"sl-map\">\r\n        <iframe\r\n          src=\"https:\/\/www.google.com\/maps?q=1610,+RD8,+Quartier+Fournel,+83520+Roquebrune-sur-Argens&output=embed\"\r\n          style=\"border:0;\" allowfullscreen=\"\" loading=\"lazy\"\r\n          referrerpolicy=\"no-referrer-when-downgrade\"><\/iframe>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Moyens d'acc\u00e8s -->\r\n    <div class=\"sl-grid\">\r\n      <article class=\"sl-card\">\r\n        <div class=\"sl-card-head\">\r\n          <div class=\"sl-ico\" aria-hidden=\"true\">\r\n            <!-- voiture -->\r\n            <svg viewBox=\"0 0 64 64\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n              <defs>\r\n                <linearGradient id=\"lgC\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\r\n                  <stop offset=\"0\" stop-color=\"#b88a3b\"\/>\r\n                  <stop offset=\"1\" stop-color=\"#e0c58a\"\/>\r\n                <\/linearGradient>\r\n              <\/defs>\r\n              <g fill=\"none\" stroke=\"url(#lgC)\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n                <path d=\"M10 36h44l-4-10a6 6 0 0 0-6-4H20a6 6 0 0 0-6 4l-4 10z\"\/>\r\n                <circle cx=\"20\" cy=\"44\" r=\"4\"\/>\r\n                <circle cx=\"44\" cy=\"44\" r=\"4\"\/>\r\n                <path d=\"M8 36v8m48-8v8\"\/>\r\n              <\/g>\r\n            <\/svg>\r\n          <\/div>\r\n          <h3 class=\"sl-card-title\">En voiture<\/h3>\r\n        <\/div>\r\n        <ul class=\"sl-list\">\r\n          <li>Depuis Nice : A8 \u2192 sortie 36 (Le Muy), puis direction Roquebrune.<\/li>\r\n          <li>Depuis Cannes : A8 \u2192 sortie 38 (Fr\u00e9jus\/Saint-Rapha\u00ebl).<\/li>\r\n          <li>Parking gratuit disponible sur place.<\/li>\r\n        <\/ul>\r\n      <\/article>\r\n\r\n      <article class=\"sl-card\">\r\n        <div class=\"sl-card-head\">\r\n          <div class=\"sl-ico\" aria-hidden=\"true\">\r\n            <!-- train -->\r\n            <svg viewBox=\"0 0 64 64\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n              <defs>\r\n                <linearGradient id=\"lgT\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\r\n                  <stop offset=\"0\" stop-color=\"#b88a3b\"\/>\r\n                  <stop offset=\"1\" stop-color=\"#e0c58a\"\/>\r\n                <\/linearGradient>\r\n              <\/defs>\r\n              <g fill=\"none\" stroke=\"url(#lgT)\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n                <rect x=\"16\" y=\"14\" width=\"32\" height=\"26\" rx=\"6\"\/>\r\n                <path d=\"M16 34h32M22 48l-6 6M42 48l6 6\"\/>\r\n              <\/g>\r\n            <\/svg>\r\n          <\/div>\r\n          <h3 class=\"sl-card-title\">En train<\/h3>\r\n        <\/div>\r\n        <ul class=\"sl-list\">\r\n          <li>Gare de Saint-Rapha\u00ebl Valescure \u2192 20 min en voiture.<\/li>\r\n          <li>Gare TGV Les Arcs \u2013 Draguignan \u2192 25 min.<\/li>\r\n          <li>Taxis et VTC disponibles sur place.<\/li>\r\n        <\/ul>\r\n      <\/article>\r\n\r\n      <article class=\"sl-card\">\r\n        <div class=\"sl-card-head\">\r\n          <div class=\"sl-ico\" aria-hidden=\"true\">\r\n            <!-- avion -->\r\n            <svg viewBox=\"0 0 64 64\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n              <defs>\r\n                <linearGradient id=\"lgP\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\r\n                  <stop offset=\"0\" stop-color=\"#b88a3b\"\/>\r\n                  <stop offset=\"1\" stop-color=\"#e0c58a\"\/>\r\n                <\/linearGradient>\r\n              <\/defs>\r\n              <g fill=\"none\" stroke=\"url(#lgP)\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n                <path d=\"M6 38l22-6 8-18 6 6-6 14 18 8-4 4-16-6-8 10-4-2 6-12z\"\/>\r\n              <\/g>\r\n            <\/svg>\r\n          <\/div>\r\n          <h3 class=\"sl-card-title\">En avion<\/h3>\r\n        <\/div>\r\n        <ul class=\"sl-list\">\r\n          <li>A\u00e9roport Nice C\u00f4te d\u2019Azur (NCE) \u2192 1h environ.<\/li>\r\n          <li>A\u00e9roport Toulon-Hy\u00e8res (TLN) \u2192 1h15 environ.<\/li>\r\n        <\/ul>\r\n      <\/article>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<style>\r\n\/* ===== Scope .sec-lieu ===== *\/\r\n.sec-lieu{\r\n  --txt:#3a2b22;\r\n  --txt2:#5a4a43;\r\n  --bg:#fffdf7;\r\n  --card:#ffffffee;\r\n  --bord:#eadfc8;\r\n  --gold1:#b88a3b;\r\n  --gold2:#e0c58a;\r\n  --shadow:0 10px 28px rgba(56,38,10,.07);\r\n\r\n  padding:64px 20px;\r\n  background:\r\n    radial-gradient(120% 70% at 50% 0%, #fff6e3 0%, transparent 60%),\r\n    linear-gradient(180deg,var(--bg),#fff);\r\n}\r\n.sec-lieu .sl-wrap{ max-width:1100px; margin:0 auto; }\r\n\r\n\/* TITRE *\/\r\n.sec-lieu .sl-head{ text-align:center; margin-bottom:24px; }\r\n.sec-lieu .sl-title{\r\n  font-family:'Playfair Display',Georgia,serif;\r\n  font-size:clamp(28px,5.2vw,40px);\r\n  margin:0 0 8px;\r\n  background:linear-gradient(90deg,var(--gold1),var(--gold2));\r\n  -webkit-background-clip:text; -webkit-text-fill-color:transparent;\r\n}\r\n.sec-lieu .sl-sub{\r\n  font-family:'Poppins',sans-serif; color:var(--txt2);\r\n  font-size:clamp(14px,3.6vw,16px); margin:0;\r\n}\r\n\r\n\/* LAYOUT ADRESSE + MAP *\/\r\n.sec-lieu .sl-info{ display:grid; gap:16px; margin-top:12px; grid-template-columns:1fr; }\r\n@media(min-width:900px){ .sec-lieu .sl-info{ grid-template-columns:1.1fr .9fr; } }\r\n\r\n\/* CARDS *\/\r\n.sec-lieu .sl-card{\r\n  background:var(--card); border:1px solid var(--bord);\r\n  border-radius:16px; box-shadow:var(--shadow);\r\n  padding:16px; backdrop-filter:blur(6px);\r\n}\r\n.sec-lieu .sl-card-head{ display:flex; align-items:center; gap:10px; margin-bottom:8px; }\r\n.sec-lieu .sl-ico{ width:44px; height:44px; flex:0 0 44px; }\r\n.sec-lieu .sl-card-title{ font-family:'Cormorant Garamond',serif; font-size:22px; color:var(--txt); margin:0; }\r\n\r\n\/* Adresse *\/\r\n.sl-address address{ font-style:normal; color:var(--txt); line-height:1.5; }\r\n.sl-address-txt span{ color:var(--txt2); }\r\n\r\n\/* Pills *\/\r\n.sl-pills{ display:flex; gap:8px; flex-wrap:wrap; margin:12px 0 10px; }\r\n.pill{ display:inline-block; padding:8px 12px; border-radius:999px;\r\n  background:#fff; border:1px solid var(--bord); color:var(--txt2);\r\n  font-family:'Poppins',sans-serif; font-size:12px; }\r\n\r\n\/* Actions *\/\r\n.sl-actions{ display:flex; gap:10px; flex-wrap:wrap; margin-top:6px; }\r\n.sl-btn{\r\n  display:inline-block; padding:12px 18px; border-radius:28px;\r\n  text-decoration:none; font-weight:700; font-family:'Poppins',sans-serif;\r\n  background:linear-gradient(45deg,var(--gold1),var(--gold2)); color:#fff;\r\n  box-shadow:0 8px 20px rgba(184,138,59,.22);\r\n}\r\n.sl-btn.outline{ background:#fff; color:var(--txt); border:1px solid var(--bord); box-shadow:none; font-weight:600; }\r\n\r\n\/* MAP *\/\r\n.sl-map{ border:1px solid var(--bord); border-radius:16px; overflow:hidden; background:#fff; aspect-ratio:16\/12; }\r\n.sl-map iframe{ width:100%; height:100%; display:block; }\r\n\r\n\/* TRANSPORTS *\/\r\n.sl-grid{ display:grid; gap:14px; margin-top:16px; grid-template-columns:1fr; }\r\n@media(min-width:840px){ .sl-grid{ grid-template-columns:repeat(3,1fr); } }\r\n.sl-list{ margin:6px 0 0; padding-left:18px; color:var(--txt2);\r\n  font-family:'Poppins',sans-serif; font-size:14px; line-height:1.45; }\r\n.sl-list li{ margin:6px 0; }\r\n\r\n\/* NOTE *\/\r\n.sl-note{ margin:14px 2px 0; text-align:center; color:var(--txt2);\r\n  font-family:'Poppins',sans-serif; font-size:13px; }\r\n<\/style>\r\n<!-- ========= \/SECTION 3 ========= -->\r\n\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1b4ae9e e-con-full e-flex e-con e-parent\" data-id=\"1b4ae9e\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0bf9042 elementor-widget elementor-widget-html\" data-id=\"0bf9042\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- \ud83d\udc8d SECTION 4 \u2013 RSVP (Voskan & Meline) -->\r\n<section id=\"rsvp\" class=\"rsvp-zone\">\r\n  <div class=\"rsvp-container\">\r\n    <header class=\"rsvp-head\">\r\n      <h2 class=\"rsvp-title\">Confirmez votre pr\u00e9sence<\/h2>\r\n      <p class=\"rsvp-sub\">Merci de r\u00e9pondre avant le <strong>20 novembre 2025<\/strong>.<\/p>\r\n    <\/header>\r\n\r\n    <div class=\"rsvp-card\">\r\n      <div class=\"rsvp-icon\">\r\n        <svg viewBox=\"0 0 64 64\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n          <defs>\r\n            <linearGradient id=\"goldGrad\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\r\n              <stop offset=\"0\" stop-color=\"#b68d40\"\/>\r\n              <stop offset=\"1\" stop-color=\"#e0c58a\"\/>\r\n            <\/linearGradient>\r\n          <\/defs>\r\n          <g fill=\"none\" stroke=\"url(#goldGrad)\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n            <path d=\"M52 12c-8 0-26 12-34 20C8 42 6 54 6 54s12-2 22-12c8-8 20-26 20-34z\"\/>\r\n            <path d=\"M28 36l10 10\"\/>\r\n          <\/g>\r\n        <\/svg>\r\n      <\/div>\r\n\r\n      <h3 class=\"rsvp-subtitle\">Formulaire de pr\u00e9sence<\/h3>\r\n    <h3 class=\"rsvp-subtitle\">Inscriptions termin\u00e9<\/h3>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<style>\r\n\/* ======== SECTION RSVP PREMIUM ========== *\/\r\n.rsvp-zone{\r\n  --gold1:#b68d40;\r\n  --gold2:#e0c58a;\r\n  --ivory:#fffaf3;\r\n  --text:#3b2b2b;\r\n  --muted:#6f655b;\r\n  --border:#e9dec4;\r\n  padding:80px 20px;\r\n  background:radial-gradient(120% 80% at 50% 0%, #fff8e5 0%, transparent 70%), linear-gradient(180deg, #fff7eb, #fff);\r\n  display:flex; justify-content:center;\r\n}\r\n.rsvp-container{ max-width:900px; width:100%; text-align:center; }\r\n\r\n\/* TITRES *\/\r\n.rsvp-head{ margin-bottom:40px; }\r\n.rsvp-title{\r\n  font-family:'Playfair Display',serif;\r\n  font-size:clamp(32px,6vw,44px);\r\n  font-weight:600;\r\n  background:linear-gradient(90deg,var(--gold1),var(--gold2));\r\n  -webkit-background-clip:text;\r\n  -webkit-text-fill-color:transparent;\r\n  margin:0;\r\n}\r\n.rsvp-sub{\r\n  font-family:'Poppins',sans-serif;\r\n  font-size:clamp(15px,3.8vw,18px);\r\n  color:var(--muted);\r\n  margin-top:6px;\r\n}\r\n\r\n\/* CARTE *\/\r\n.rsvp-card{\r\n  background:rgba(255,255,255,0.92);\r\n  border:1px solid var(--border);\r\n  border-radius:20px;\r\n  padding:40px 26px;\r\n  box-shadow:0 15px 40px rgba(184,138,59,0.12);\r\n  backdrop-filter:blur(8px);\r\n  text-align:center;\r\n}\r\n.rsvp-icon{ width:60px; height:60px; margin:0 auto 12px; }\r\n.rsvp-subtitle{\r\n  font-family:'Cormorant Garamond',serif;\r\n  font-size:26px;\r\n  color:var(--text);\r\n  margin-bottom:10px;\r\n}\r\n.rsvp-intro{\r\n  font-family:'Poppins',sans-serif;\r\n  font-size:15px;\r\n  color:var(--muted);\r\n  margin-bottom:20px;\r\n}\r\n\r\n\/* FORMULAIRE GLOBAL \"CONFIRMATION\" *\/\r\n.rsvp-form form.elementor-form{\r\n  max-width:460px;\r\n  margin:0 auto;\r\n  font-family:'Poppins',sans-serif;\r\n}\r\n\r\n\/* 1 colonne centr\u00e9e *\/\r\n.rsvp-form form.elementor-form .elementor-form-fields-wrapper{ display:block !important; }\r\n.rsvp-form form.elementor-form .elementor-field-group{\r\n  display:flex; flex-direction:column; align-items:center;\r\n  margin-bottom:16px;\r\n}\r\n\r\n\/* Labels centr\u00e9s *\/\r\n.rsvp-form form.elementor-form .elementor-field-label{\r\n  text-align:center; color:var(--text); font-weight:600; margin-bottom:6px;\r\n}\r\n\r\n\/* Champs *\/\r\n.rsvp-form form.elementor-form input,\r\n.rsvp-form form.elementor-form select,\r\n.rsvp-form form.elementor-form textarea{\r\n  width:100%; max-width:420px; height:46px;\r\n  border:1px solid var(--border);\r\n  border-radius:12px;\r\n  background:#fff;\r\n  padding:10px 14px;\r\n  font-size:15px;\r\n  color:var(--text);\r\n  transition:.25s;\r\n}\r\n.rsvp-form form.elementor-form textarea{ min-height:100px; resize:vertical; }\r\n.rsvp-form form.elementor-form input:focus,\r\n.rsvp-form form.elementor-form select:focus,\r\n.rsvp-form form.elementor-form textarea:focus{\r\n  border-color:var(--gold1);\r\n  box-shadow:0 0 0 3px rgba(182,141,64,.22);\r\n  outline:none;\r\n}\r\n\r\n\/* Radios Oui \/ Non *\/\r\n.rsvp-form form.elementor-form .elementor-field-type-radio .elementor-field-subgroup{\r\n  display:flex; justify-content:center; align-items:center;\r\n  border:1px solid var(--border);\r\n  border-radius:999px;\r\n  overflow:hidden;\r\n  background:#fff;\r\n  box-shadow:0 4px 10px rgba(0,0,0,.04);\r\n  margin:8px auto 18px;\r\n  width:100%;\r\n  max-width:420px;\r\n}\r\n.rsvp-form form.elementor-form .elementor-field-type-radio label{\r\n  flex:1; padding:10px 0; cursor:pointer; transition:.25s;\r\n  color:var(--muted); font-weight:500;\r\n  border-right:1px solid var(--border);\r\n}\r\n.rsvp-form form.elementor-form .elementor-field-type-radio .elementor-field-option:last-child label{ border-right:none; }\r\n.rsvp-form form.elementor-form .elementor-field-type-radio input:checked + label{\r\n  background:linear-gradient(45deg,var(--gold1),var(--gold2));\r\n  color:#fff;\r\n}\r\n\r\n\/* BOUTON *\/\r\n.rsvp-form form.elementor-form .elementor-button{\r\n  display:inline-block;\r\n  width:100%;\r\n  max-width:420px;\r\n  height:48px;\r\n  border:none;\r\n  border-radius:28px;\r\n  background:linear-gradient(45deg,var(--gold1),var(--gold2));\r\n  color:#fff;\r\n  font-weight:700;\r\n  font-size:15.5px;\r\n  box-shadow:0 12px 24px rgba(184,138,59,.25);\r\n  transition:.3s;\r\n  cursor:pointer;\r\n}\r\n.rsvp-form form.elementor-form .elementor-button:hover{\r\n  filter:saturate(1.1) brightness(1.05);\r\n  transform:translateY(-1px);\r\n}\r\n\r\n\/* NOTE RGPD *\/\r\n.rsvp-note{\r\n  font-family:'Poppins',sans-serif;\r\n  font-size:13px;\r\n  color:var(--muted);\r\n  margin-top:18px;\r\n  background:linear-gradient(90deg,#fff9ee,transparent 60%);\r\n  padding:10px;\r\n  border-radius:10px;\r\n}\r\n\r\n\/* RESPONSIVE *\/\r\n@media(max-width:600px){\r\n  .rsvp-card{ padding:26px 18px; }\r\n}\r\n<\/style>\r\n\r\n\r\n<script>\r\n(() => {\r\n  \/\/ ================== BLING x2 POUR #rsvp ==================\r\n  const CFG = {\r\n    selector: 'section#rsvp.rsvp-zone',\r\n    \/\/ poussi\u00e8re d\u2019or\r\n    particles: 220,\r\n    maxSize: 2.6,\r\n    speed: 0.36,\r\n    \/\/ \u00e9toiles scintillantes\r\n    stars: 22,\r\n    starMin: 6,\r\n    starMax: 13,\r\n    starPulse: 0.7,\r\n    \/\/ bokeh (orbes flous)\r\n    bokeh: 10,\r\n    bokehMin: 16,\r\n    bokehMax: 38,\r\n    \/\/ faisceaux\r\n    sweepOpacityA: 0.22,\r\n    sweepOpacityB: 0.14,\r\n    sweepWidthRatioA: 0.20,\r\n    sweepWidthRatioB: 0.30,\r\n    \/\/ palette RSVP (l\u00e9g\u00e8rement plus douce pour la lisibilit\u00e9 du formulaire)\r\n    colLight: '#fffaf0',\r\n    colTop:   '#fff7e8',\r\n    colBot:   '#ffffff',\r\n    haloA: 'rgba(255,245,220,.62)',\r\n    haloB: 'rgba(232,206,160,.52)'\r\n  };\r\n\r\n  const reduceMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\r\n\r\n  function init(){\r\n    const sel = CFG.selector;\r\n    const section = document.querySelector(sel);\r\n    if (!section) return;\r\n\r\n    \/\/ CSS ambiance (fond + halos derri\u00e8re tout)\r\n    const style = document.createElement('style');\r\n    style.innerHTML = `\r\n      ${sel}{ position:relative!important; overflow:hidden; isolation:isolate;\r\n        background:\r\n          radial-gradient(120% 72% at 50% 0%, ${CFG.colTop} 0%, transparent 60%),\r\n          linear-gradient(180deg, ${CFG.colTop} 0%, ${CFG.colBot} 100%)!important;\r\n      }\r\n      ${sel}::before{\r\n        content:\"\"; position:absolute; inset:-6%; z-index:-1; pointer-events:none;\r\n        background:\r\n          radial-gradient(42% 32% at 10% 8%,  ${CFG.haloA} 0%, transparent 65%),\r\n          radial-gradient(38% 34% at 92% 12%, ${CFG.haloB} 0%, transparent 70%),\r\n          radial-gradient(44% 36% at 14% 90%, ${CFG.haloB} 0%, transparent 72%),\r\n          radial-gradient(34% 28% at 88% 88%, ${CFG.haloA} 0%, transparent 72%);\r\n        filter: blur(18px);\r\n      }\r\n      ${sel} > *{ position:relative; z-index:1 } \/* contenu\/form au-dessus du canvas *\/\r\n      ${sel} canvas.bg-bling{ position:absolute; inset:0; width:100%; height:100%; display:block; z-index:0; pointer-events:none; }\r\n    `;\r\n    document.head.appendChild(style);\r\n\r\n    \/\/ Canvas d\u00e9coratif\r\n    const canvas = document.createElement('canvas');\r\n    canvas.className = 'bg-bling';\r\n    section.prepend(canvas);\r\n    const ctx = canvas.getContext('2d');\r\n\r\n    \/\/ DPR & resize\r\n    let w,h,dpr;\r\n    function resize(){\r\n      const r = section.getBoundingClientRect();\r\n      w = Math.max(1, r.width);\r\n      h = Math.max(1, r.height);\r\n      dpr = Math.min(window.devicePixelRatio||1, 2);\r\n      canvas.width = Math.floor(w*dpr);\r\n      canvas.height= Math.floor(h*dpr);\r\n      canvas.style.width = w+'px';\r\n      canvas.style.height= h+'px';\r\n      ctx.setTransform(dpr,0,0,dpr,0,0);\r\n    }\r\n    resize();\r\n    new ResizeObserver(resize).observe(section);\r\n\r\n    \/\/ Entit\u00e9s\r\n    const rnd = (a,b)=>a+Math.random()*(b-a);\r\n    const dust = Array.from({length:CFG.particles}, () => ({\r\n      x: Math.random()*w, y: Math.random()*h,\r\n      r: rnd(0.6, CFG.maxSize),\r\n      vx: rnd(-CFG.speed, CFG.speed),\r\n      vy: rnd(-CFG.speed*0.2, CFG.speed*0.65),\r\n      a: rnd(0.45, 0.92), flash: Math.random()*3000+1600\r\n    }));\r\n    const stars = Array.from({length:CFG.stars}, () => ({\r\n      x: Math.random()*w, y: Math.random()*h,\r\n      rIn: rnd(CFG.starMin*0.6, CFG.starMin),\r\n      rOut: rnd(CFG.starMax*0.7, CFG.starMax),\r\n      rot: Math.random()*Math.PI,\r\n      pulse: rnd(0.4, CFG.starPulse),\r\n      t: Math.random()*Math.PI*2,\r\n      a: rnd(0.5,0.9),\r\n      drift: { x: rnd(-0.05,0.05), y: rnd(-0.02,0.04) }\r\n    }));\r\n    const bokeh = Array.from({length:CFG.bokeh}, () => ({\r\n      x: Math.random()*w, y: Math.random()*h,\r\n      r: rnd(CFG.bokehMin, CFG.bokehMax),\r\n      vy: rnd(0.02, 0.08),\r\n      vx: rnd(-0.04, 0.04),\r\n      a: rnd(0.08, 0.18)\r\n    }));\r\n\r\n    \/\/ Double faisceau\r\n    let sweepXA = -w*0.5, sweepXB = -w*0.8;\r\n    const sweepW_A = ()=> w*CFG.sweepWidthRatioA;\r\n    const sweepW_B = ()=> w*CFG.sweepWidthRatioB;\r\n\r\n    \/\/ Pause hors \u00e9cran\r\n    let running = true;\r\n    const io = new IntersectionObserver(e => running = e[0].isIntersecting, {threshold:.05});\r\n    io.observe(section);\r\n\r\n    \/\/ Helpers\r\n    const golds = ['#efd28c','#e0c58a','#ffe5b3'];\r\n    function drawStar(cx, cy, spikes=6, inner=6, outer=12, rot=0, alpha=1){\r\n      const step = Math.PI \/ spikes;\r\n      ctx.save(); ctx.translate(cx,cy); ctx.rotate(rot);\r\n      ctx.beginPath(); ctx.moveTo(0, -outer);\r\n      for(let i=0;i<spikes;i++){\r\n        ctx.lineTo(Math.cos((i*2)*step - Math.PI\/2)*outer, Math.sin((i*2)*step - Math.PI\/2)*outer);\r\n        ctx.lineTo(Math.cos((i*2+1)*step - Math.PI\/2)*inner, Math.sin((i*2+1)*step - Math.PI\/2)*inner);\r\n      }\r\n      ctx.closePath();\r\n      ctx.globalAlpha = alpha;\r\n      ctx.fillStyle = 'rgba(255,240,210,0.85)';\r\n      ctx.shadowBlur = 16; ctx.shadowColor = 'rgba(232,206,160,0.8)';\r\n      ctx.fill();\r\n      ctx.beginPath(); ctx.globalAlpha = alpha*0.35;\r\n      ctx.arc(0,0, outer*1.9, 0, Math.PI*2); ctx.fill();\r\n      ctx.restore();\r\n    }\r\n\r\n    \/\/ Boucle\r\n    let last = performance.now();\r\n    function tick(now){\r\n      if (!running){ requestAnimationFrame(tick); return; }\r\n      const dt = Math.min(34, now - last); last = now;\r\n\r\n      \/\/ fond lumineux doux\r\n      ctx.clearRect(0,0,w,h);\r\n      ctx.globalAlpha = 0.06; ctx.fillStyle = CFG.colLight; ctx.fillRect(0,0,w,h); ctx.globalAlpha = 1;\r\n\r\n      \/\/ Bokeh\r\n      ctx.save(); ctx.globalCompositeOperation = 'lighter';\r\n      for (const b of bokeh){\r\n        b.x += b.vx*dt; b.y += b.vy*dt;\r\n        if (b.x < -50) b.x = w+50; if (b.x > w+50) b.x = -50;\r\n        if (b.y > h+60) { b.y = -60; b.x = Math.random()*w; }\r\n        const g = ctx.createRadialGradient(b.x,b.y,0,b.x,b.y,b.r);\r\n        g.addColorStop(0, `rgba(255,240,210,${b.a})`);\r\n        g.addColorStop(1, 'rgba(255,240,210,0)');\r\n        ctx.fillStyle = g; ctx.beginPath(); ctx.arc(b.x,b.y,b.r,0,Math.PI*2); ctx.fill();\r\n      }\r\n      ctx.restore();\r\n\r\n      \/\/ Poussi\u00e8re d\u2019or\r\n      ctx.save(); ctx.globalCompositeOperation = 'lighter';\r\n      for (let i=0;i<dust.length;i++){\r\n        const p = dust[i];\r\n        p.x += p.vx*dt; p.y += p.vy*dt;\r\n        if (p.x < -10) p.x = w+10; if (p.x > w+10) p.x = -10;\r\n        if (p.y < -10) p.y = h+10; if (p.y > h+10) p.y = -10;\r\n\r\n        let alpha = p.a; p.flash -= dt;\r\n        if (p.flash<=0){ alpha = 1; p.flash = Math.random()*3000+1800; }\r\n\r\n        ctx.shadowBlur = 14; ctx.shadowColor = 'rgba(224,197,138,0.6)';\r\n        ctx.beginPath(); ctx.fillStyle = golds[i%golds.length];\r\n        ctx.globalAlpha = alpha; ctx.arc(p.x, p.y, p.r, 0, Math.PI*2); ctx.fill();\r\n\r\n        if (alpha>0.98){ ctx.globalAlpha = 0.4; ctx.beginPath(); ctx.arc(p.x,p.y,p.r*2.4,0,Math.PI*2); ctx.fill(); }\r\n      }\r\n      ctx.restore(); ctx.globalAlpha = 1;\r\n\r\n      \/\/ \u00c9toiles\r\n      for (const s of stars){\r\n        s.t += 0.002*dt; s.rot += 0.0006*dt;\r\n        s.x += s.drift.x*dt; s.y += s.drift.y*dt;\r\n        if (s.x<-20) s.x=w+20; if (s.x>w+20) s.x=-20;\r\n        if (s.y<-20) s.y=h+20; if (s.y>h+20) s.y=-20;\r\n        const pulse = (Math.sin(s.t)+1)\/2;\r\n        drawStar(s.x, s.y, 6, s.rIn*(1+s.pulse*pulse*0.25), s.rOut*(1+s.pulse*pulse*0.35), s.rot, s.a*(0.7+0.3*pulse));\r\n      }\r\n\r\n      \/\/ Double faisceau (l\u00e9g\u00e8rement adouci pour ne pas g\u00eaner la saisie)\r\n      if (!reduceMotion){\r\n        \/\/ A\r\n        sweepXA += 0.42*dt;\r\n        const wA = sweepW_A();\r\n        if (sweepXA > w + wA) sweepXA = -wA*1.6;\r\n        ctx.save(); ctx.rotate(10*Math.PI\/180);\r\n        let gA = ctx.createLinearGradient(sweepXA, 0, sweepXA + wA, 0);\r\n        gA.addColorStop(0, 'rgba(255,255,255,0)');\r\n        gA.addColorStop(0.48, `rgba(255,240,210,${CFG.sweepOpacityA})`);\r\n        gA.addColorStop(1, 'rgba(255,255,255,0)');\r\n        ctx.fillStyle = gA; ctx.fillRect(sweepXA - w*0.5, -h*0.9, wA, h*2.0);\r\n        ctx.restore();\r\n\r\n        \/\/ B\r\n        sweepXB += 0.26*dt;\r\n        const wB = sweepW_B();\r\n        if (sweepXB > w + wB) sweepXB = -wB*1.8;\r\n        ctx.save(); ctx.rotate(-8*Math.PI\/180);\r\n        let gB = ctx.createLinearGradient(sweepXB, 0, sweepXB + wB, 0);\r\n        gB.addColorStop(0, 'rgba(255,255,255,0)');\r\n        gB.addColorStop(0.5, `rgba(255,240,210,${CFG.sweepOpacityB})`);\r\n        gB.addColorStop(1, 'rgba(255,255,255,0)');\r\n        ctx.fillStyle = gB; ctx.fillRect(sweepXB - w*0.5, -h*0.9, wB, h*2.0);\r\n        ctx.restore();\r\n      }\r\n\r\n      requestAnimationFrame(tick);\r\n    }\r\n\r\n    if (reduceMotion){\r\n      \/\/ rendu statique\r\n      ctx.fillStyle = 'rgba(224,197,138,0.18)';\r\n      for (const p of dust){ ctx.beginPath(); ctx.arc(p.x,p.y,p.r,0,Math.PI*2); ctx.fill(); }\r\n      for (const s of stars){ drawStar(s.x,s.y,6,s.rIn,s.rOut,s.rot, s.a); }\r\n    } else {\r\n      requestAnimationFrame(tick);\r\n    }\r\n\r\n    \/\/ Nettoyage si n\u00e9cessaire (Elementor)\r\n    document.addEventListener('elementor\/popup\/hide', ()=>{ try{io.disconnect()}catch(e){} }, {once:true});\r\n  }\r\n\r\n  (document.readyState==='complete'||document.readyState==='interactive')\r\n    ? setTimeout(init,0)\r\n    : document.addEventListener('DOMContentLoaded', init);\r\n})();\r\n<\/script>\r\n\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>Voskan &amp; Meline Mariage arm\u00e9nien \u2022 Cannes 13 D\u00e9cembre 2025 \u00ab Deux c\u0153urs, une \u00e2me, un destin \u00e9ternel. \u00bb Confirmer ma pr\u00e9sence Programme de la journ\u00e9e Voici les moments cl\u00e9s. Des ajustements seront communiqu\u00e9s si n\u00e9cessaire. C\u00e9r\u00e9monie 16:00 \u2014 \u00c9glise \/ Mairie (Cannes) Arrivez 10\u201315 min en avance pour vous placer tranquillement. Cocktail &amp; Photos [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-20","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.voskanetmeline.fr\/index.php?rest_route=\/wp\/v2\/pages\/20","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.voskanetmeline.fr\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.voskanetmeline.fr\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.voskanetmeline.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.voskanetmeline.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=20"}],"version-history":[{"count":115,"href":"https:\/\/www.voskanetmeline.fr\/index.php?rest_route=\/wp\/v2\/pages\/20\/revisions"}],"predecessor-version":[{"id":165,"href":"https:\/\/www.voskanetmeline.fr\/index.php?rest_route=\/wp\/v2\/pages\/20\/revisions\/165"}],"wp:attachment":[{"href":"https:\/\/www.voskanetmeline.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=20"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}