{"product_id":"joyeux-anniversaire","title":"Joyeux anniversaire Maman","description":"\u003cdiv id=\"mav-bday\"\u003e\n\u003ccanvas id=\"mav-confetti\"\u003e\u003c\/canvas\u003e\n\u003cdiv class=\"mav-halo a\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"mav-halo b\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"mav-halo c\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"mav-main\"\u003e\n\u003cp class=\"mav-eyebrow\"\u003eEmpreinte sonore\u003cspan class=\"mav-long\"\u003e · à réécouter pour toujours\u003c\/span\u003e\u003c\/p\u003e\n\u003ch1 class=\"mav-title\"\u003eJoyeux anniversaire\u003cspan\u003eMaman\u003c\/span\u003e\n\u003c\/h1\u003e\n\u003cp class=\"mav-date\"\u003eAoût 2026\u003c\/p\u003e\n\u003cdiv class=\"mav-wavewrap\"\u003e\u003ccanvas id=\"mav-wave\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n\u003cp class=\"mav-msg\"\u003eDerrière cette onde, il y a une voix.\u003cbr\u003eAppuie sur écouter — c'est pour toi. ♥\u003c\/p\u003e\n\u003cdiv class=\"mav-controls\"\u003e\n\u003cbutton class=\"mav-play\" id=\"mav-play\"\u003e\u003cspan class=\"mav-ico\" id=\"mav-ico\"\u003e\u003csvg viewbox=\"0 0 24 24\"\u003e\u003cpath d=\"M8 5.5v13a1 1 0 0 0 1.53.85l10.2-6.5a1 1 0 0 0 0-1.7L9.53 4.65A1 1 0 0 0 8 5.5z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/span\u003e\u003cspan id=\"mav-label\"\u003eÉcouter le message\u003c\/span\u003e\u003c\/button\u003e\n\u003cdiv class=\"mav-time\" id=\"mav-time\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"mav-foot\"\u003e\n\u003cdiv class=\"mav-brand\"\u003eMyArt.Voice\u003c\/div\u003e\n\u003cdiv\u003eLa voix de ceux qu'on aime.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:ital,wght@1,500\u0026family=Plus+Jakarta+Sans:wght@400;600;700\u0026family=Space+Mono:wght@400\u0026display=swap');\n#mav-bday{position:fixed;inset:0;z-index:99999;background:#FBF4E6;color:#1E1A16;overflow-y:auto;overflow-x:hidden;font-family:\"Plus Jakarta Sans\",system-ui,sans-serif}\n#mav-bday *{box-sizing:border-box}\n#mav-bday .mav-halo{position:fixed;border-radius:50%;filter:blur(70px);pointer-events:none;z-index:0}\n#mav-bday .mav-halo.a{width:52vmax;height:52vmax;background:#FFC23D;top:-24vmax;left:-22vmax;opacity:.26}\n#mav-bday .mav-halo.b{width:46vmax;height:46vmax;background:#F43C93;bottom:-26vmax;right:-20vmax;opacity:.2}\n#mav-bday .mav-halo.c{width:34vmax;height:34vmax;background:#FF5A36;top:40%;right:-18vmax;opacity:.11}\n#mav-confetti{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:60}\n#mav-bday .mav-main{position:relative;z-index:2;min-height:100svh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:clamp(24px,5vw,48px) clamp(18px,5vw,40px);gap:clamp(18px,3.5vh,34px)}\n#mav-bday .mav-eyebrow{font-family:\"Space Mono\",monospace;font-size:clamp(9px,2.6vw,11px);letter-spacing:.22em;text-transform:uppercase;color:#8A7F6E;margin:0;line-height:1.5}\n#mav-bday .mav-title{font-family:\"Playfair Display\",Georgia,serif;font-style:italic;font-weight:500;font-size:clamp(38px,9vw,86px);line-height:1.02;color:#FF5A36;margin:0;letter-spacing:-.01em;text-transform:none}\n#mav-bday .mav-title span{display:block;color:#8E3FA8}\n#mav-bday .mav-date{font-family:\"Space Mono\",monospace;font-size:clamp(10px,2.8vw,13px);letter-spacing:.3em;text-transform:uppercase;color:#8A7F6E;margin:0}\n#mav-bday .mav-wavewrap{width:min(980px,100%)}\n#mav-wave{width:100%;height:clamp(150px,26vh,260px);display:block}\n#mav-bday .mav-msg{max-width:44ch;margin:0 auto;font-size:clamp(15px,3.6vw,18px);line-height:1.65;color:#5C5245}\n#mav-bday .mav-controls{display:flex;flex-direction:column;align-items:center;gap:14px}\n#mav-bday .mav-play{appearance:none;-webkit-appearance:none;border:0;cursor:pointer;display:inline-flex;align-items:center;gap:12px;background:#FF5A36;color:#fff;font-family:inherit;font-weight:700;font-size:clamp(15px,3.6vw,17px);padding:16px 30px 16px 24px;border-radius:999px;box-shadow:0 12px 30px rgba(255,90,54,.32);animation:mavpulse 2.6s ease-in-out infinite;text-transform:none;letter-spacing:0;line-height:1}\n#mav-bday .mav-play:hover{background:#E84A28}\n#mav-bday .mav-play.on{background:#8E3FA8;animation:none}\n#mav-bday .mav-ico{width:26px;height:26px;flex:0 0 26px;display:grid;place-items:center}\n#mav-bday .mav-ico svg{width:100%;height:100%;fill:#fff}\n@keyframes mavpulse{0%,100%{box-shadow:0 12px 30px rgba(255,90,54,.32)}50%{box-shadow:0 12px 30px rgba(255,90,54,.32),0 0 0 14px rgba(255,90,54,.1)}}\n#mav-bday .mav-time{font-family:\"Space Mono\",monospace;font-size:12px;color:#8A7F6E;letter-spacing:.08em;min-height:16px}\n#mav-bday .mav-foot{margin-top:clamp(12px,3vh,28px);font-size:12px;color:#8A7F6E}\n#mav-bday .mav-brand{font-family:\"Space Mono\",monospace;letter-spacing:.18em;text-transform:uppercase;font-size:10px;margin-bottom:6px}\n@media (max-width:520px){#mav-bday .mav-long{display:none}}\n\u003c\/style\u003e\n\u003cscript\u003e\n(function(){\nvar CONFIG={audio:\"\",confetti:true};\nvar p=new URLSearchParams(location.search);\nvar AUDIO=p.get(\"audio\")||CONFIG.audio;\ntry{document.documentElement.style.overflow=\"hidden\";document.body.style.overflow=\"hidden\";}catch(e){}\nvar cv=document.getElementById(\"mav-wave\"),ctx=cv.getContext(\"2d\"),N=96;\nvar peaks=(function(n){var o=[];for(var i=0;i\u003cn;i++){var t=i\/(n-1);var env=Math.pow(Math.sin(Math.PI*Math.min(1,t*1.06)),.55);var sp=.55+.3*Math.sin(t*38+.8)+.22*Math.sin(t*19.3+2.1)+.14*Math.sin(t*61.7+.3);o.push(Math.max(.07,Math.min(1,env*sp*.92)))}return o})(N);\nvar progress=0,live=0,playing=false;\nfunction rr(c,x,y,w,h,r){if(c.roundRect){c.beginPath();c.roundRect(x,y,w,h,r);return}c.beginPath();c.moveTo(x+r,y);c.arcTo(x+w,y,x+w,y+h,r);c.arcTo(x+w,y+h,x,y+h,r);c.arcTo(x,y+h,x,y,r);c.arcTo(x,y,x+w,y,r);c.closePath()}\nfunction resize(){var d=Math.min(window.devicePixelRatio||1,2),r=cv.getBoundingClientRect();cv.width=Math.round(r.width*d);cv.height=Math.round(r.height*d);ctx.setTransform(d,0,0,d,0,0)}\nwindow.addEventListener(\"resize\",resize);resize();\nfunction draw(ts){var w=cv.clientWidth,h=cv.clientHeight;ctx.clearRect(0,0,w,h);var mid=h\/2,gap=Math.max(1.5,w\/N*.42),bw=Math.max(2,w\/N-gap),t=(ts||0)\/1000;\nfor(var i=0;i\u003cN;i++){var x=i*(bw+gap)+gap\/2,pp=i\/(N-1);var br=1+.1*Math.sin(t*1.9+i*.35);var bo=playing?1+live*.85*Math.exp(-Math.pow((pp-progress)*5,2)):1;var bh=Math.max(3,Math.min(h*.48,peaks[i]*(h*.46)*br*bo));\nvar c1=[255,90,54],c2=[216,55,126],c3=[142,63,168],col;\nif(pp\u003c.5){var k=pp\/.5;col=[Math.round(c1[0]+(c2[0]-c1[0])*k),Math.round(c1[1]+(c2[1]-c1[1])*k),Math.round(c1[2]+(c2[2]-c1[2])*k)]}\nelse{var k2=(pp-.5)\/.5;col=[Math.round(c2[0]+(c3[0]-c2[0])*k2),Math.round(c2[1]+(c3[1]-c2[1])*k2),Math.round(c2[2]+(c3[2]-c2[2])*k2)]}\nvar a=playing?(pp\u003c=progress?1:.28):.92;ctx.fillStyle=\"rgba(\"+col[0]+\",\"+col[1]+\",\"+col[2]+\",\"+a+\")\";rr(ctx,x,mid-bh,bw,bh*2,Math.min(bw\/2,4));ctx.fill()}\nrequestAnimationFrame(draw)}\nrequestAnimationFrame(draw);\nvar audio=new Audio();audio.preload=\"metadata\";audio.crossOrigin=\"anonymous\";if(AUDIO)audio.src=AUDIO;\nvar btn=document.getElementById(\"mav-play\"),lab=document.getElementById(\"mav-label\"),ico=document.getElementById(\"mav-ico\"),tEl=document.getElementById(\"mav-time\");\nvar PL='\u003csvg viewBox=\"0 0 24 24\"\u003e\u003cpath d=\"M8 5.5v13a1 1 0 0 0 1.53.85l10.2-6.5a1 1 0 0 0 0-1.7L9.53 4.65A1 1 0 0 0 8 5.5z\"\/\u003e\u003c\/svg\u003e';\nvar PA='\u003csvg viewBox=\"0 0 24 24\"\u003e\u003cpath d=\"M7 4h3.5v16H7zM13.5 4H17v16h-3.5z\"\/\u003e\u003c\/svg\u003e';\nvar an=null,dat=null,ac=null;\nfunction setup(){if(an)return;try{ac=new (window.AudioContext||window.webkitAudioContext)();var s=ac.createMediaElementSource(audio);an=ac.createAnalyser();an.fftSize=256;s.connect(an);an.connect(ac.destination);dat=new Uint8Array(an.frequencyBinCount)}catch(e){an=null}}\n(function poll(){if(an\u0026\u0026playing){an.getByteFrequencyData(dat);var s=0;for(var i=0;i\u003cdat.length;i++)s+=dat[i];live=Math.min(1,(s\/dat.length)\/110)}else{live*=.9}requestAnimationFrame(poll)})();\nbtn.addEventListener(\"click\",function(){\nif(!AUDIO){tEl.textContent=\"Message audio bientot disponible.\";burst();return}\nif(audio.paused){setup();if(ac\u0026\u0026ac.state===\"suspended\")ac.resume();var pr=audio.play();if(pr\u0026\u0026pr.catch)pr.catch(function(){tEl.textContent=\"Lecture impossible.\"});if(CONFIG.confetti)burst()}else{audio.pause()}});\naudio.addEventListener(\"play\",function(){playing=true;btn.classList.add(\"on\");lab.textContent=\"Pause\";ico.innerHTML=PA});\naudio.addEventListener(\"pause\",function(){playing=false;btn.classList.remove(\"on\");lab.textContent=\"Reprendre\";ico.innerHTML=PL});\naudio.addEventListener(\"ended\",function(){playing=false;progress=0;btn.classList.remove(\"on\");lab.textContent=\"Reecouter\";ico.innerHTML=PL;if(CONFIG.confetti)burst()});\naudio.addEventListener(\"timeupdate\",function(){if(audio.duration){progress=audio.currentTime\/audio.duration;tEl.textContent=fmt(audio.currentTime)+\" \/ \"+fmt(audio.duration)}});\nfunction fmt(s){s=Math.floor(s||0);return Math.floor(s\/60)+\":\"+String(s%60).padStart(2,\"0\")}\nif(AUDIO){fetch(AUDIO).then(function(r){return r.ok?r.arrayBuffer():Promise.reject()}).then(function(b){return new (window.AudioContext||window.webkitAudioContext)().decodeAudioData(b)}).then(function(ab){var ch=ab.getChannelData(0),bl=Math.floor(ch.length\/N),o=[],mx=0;for(var i=0;i\u003cN;i++){var pk=0;for(var j=0;j\u003cbl;j++){var v=Math.abs(ch[i*bl+j]);if(v\u003epk)pk=v}o.push(pk);if(pk\u003emx)mx=pk}if(mx\u003e0)peaks=o.map(function(v){return Math.max(.06,v\/mx)})}).catch(function(){})}\nvar cc=document.getElementById(\"mav-confetti\"),cx=cc.getContext(\"2d\"),bits=[];\nfunction ccr(){var d=Math.min(window.devicePixelRatio||1,2);cc.width=innerWidth*d;cc.height=innerHeight*d;cx.setTransform(d,0,0,d,0,0)}\nccr();window.addEventListener(\"resize\",ccr);\nvar COL=[\"#FF5A36\",\"#D8377E\",\"#8E3FA8\",\"#FFC23D\",\"#17B98A\",\"#2C43E6\"];\nfunction burst(){for(var i=0;i\u003c130;i++){bits.push({x:innerWidth\/2+(Math.random()-.5)*innerWidth*.5,y:innerHeight*.62,vx:(Math.random()-.5)*7,vy:-(6+Math.random()*9),s:5+Math.random()*7,r:Math.random()*Math.PI,vr:(Math.random()-.5)*.3,c:COL[(Math.random()*COL.length)|0],life:1})}}\n(function loop(){cx.clearRect(0,0,innerWidth,innerHeight);bits=bits.filter(function(b){return b.life\u003e0});for(var i=0;i\u003cbits.length;i++){var b=bits[i];b.vy+=.24;b.x+=b.vx;b.y+=b.vy;b.r+=b.vr;b.vx*=.995;if(b.y\u003einnerHeight+40)b.life=0;cx.save();cx.translate(b.x,b.y);cx.rotate(b.r);cx.fillStyle=b.c;cx.globalAlpha=.95;cx.fillRect(-b.s\/2,-b.s\/3,b.s,b.s*.66);cx.restore()}requestAnimationFrame(loop)})();\n})();\n\u003c\/script\u003e","brand":"MyArt.Voice","offers":[{"title":"Default Title","offer_id":58767609692505,"sku":null,"price":0.0,"currency_code":"EUR","in_stock":true}],"url":"https:\/\/myartvoice.com\/products\/joyeux-anniversaire","provider":"MyArt.Voice","version":"1.0","type":"link"}