{"version":3,"file":"shared-lib.Wabz3ch2.mjs","names":[],"sources":["https:/framerusercontent.com/modules/PUrqu8aYYBHSbaLSncsO/VEWt9GEtb7LuJGUpBbM0/Son.js","https:/framerusercontent.com/modules/hqe9SmHvFIsviwrMkf96/cAdVjjsw0oJsMhUrGb55/siteMetadata.js"],"sourcesContent":["// ============================================================\n// SON.TSX (v2 — sans écran d'intro) — Code Overrides pour Framer\n// Le son est ACTIF PAR DÉFAUT. La bascule marche/arrêt se fait\n// via le composant Waveform (fichier Waveform.tsx).\n// Ici : uniquement les petits sons d'interface à appliquer sur\n// vos calques (panneau de droite → Code Overrides → File: Son).\n// ============================================================\nimport{jsx as _jsx}from\"react/jsx-runtime\";if(typeof window!==\"undefined\"&&!window.__pfSonInit){window.__pfSonInit=true;let v=true// ← son actif par défaut\n;try{const stored=localStorage.getItem(\"pf-son\");if(stored!==null)v=stored===\"1\";}catch{}window.__pfSon=v;// Arme l'audio au premier geste du visiteur (exigence des navigateurs :\n// aucun son ne peut démarrer avant un clic, une touche ou un toucher).\nconst arm=()=>{if(window.__pfSon)ctx();window.removeEventListener(\"pointerdown\",arm);window.removeEventListener(\"keydown\",arm);};window.addEventListener(\"pointerdown\",arm);window.addEventListener(\"keydown\",arm);}// ---------- Moteur audio (synthèse, aucun fichier requis) ----------\nfunction ctx(){if(!window.__pfCtx)window.__pfCtx=new(window.AudioContext||window.webkitAudioContext);if(window.__pfCtx.state===\"suspended\")window.__pfCtx.resume();return window.__pfCtx;}function tone(f,f2,dur,vol,type=\"sine\",delay=0){if(!window.__pfSon)return;const a=ctx();if(!a||a.state!==\"running\")return;const t0=a.currentTime+delay;const o=a.createOscillator(),g=a.createGain();o.type=type;o.frequency.setValueAtTime(f,t0);if(f2)o.frequency.exponentialRampToValueAtTime(f2,t0+dur);g.gain.setValueAtTime(0,t0);g.gain.linearRampToValueAtTime(vol,t0+.008);g.gain.exponentialRampToValueAtTime(1e-4,t0+dur);o.connect(g);g.connect(a.destination);o.start(t0);o.stop(t0+dur+.05);}const sons={survol:()=>tone(700,980,.07,.3),clic:()=>{tone(320,180,.12,.45,\"triangle\");tone(960,null,.05,.2,\"sine\",.02);},ouverture:()=>{tone(200,620,.35,.35);tone(400,1240,.3,.12,\"sine\",.03);}};// Pour utiliser VOS propres samples : uploadez un .mp3 dans Framer,\n// copiez son URL, puis remplacez une entrée ci-dessus par :\n//   survol: () => { if (window.__pfSon) new Audio(\"https://framerusercontent.com/....mp3\").play() },\n// ============================================================\n// OVERRIDES À APPLIQUER SUR VOS CALQUES\n// ============================================================\n/** Petit blip au survol — liens du menu, lignes de la vue liste, boutons */export function SonSurvol(Component){return props=>/*#__PURE__*/_jsx(Component,{...props,onMouseEnter:e=>{sons.survol();props.onMouseEnter?.(e);}});}/** Son de clic — liens vers les pages projet, boutons */export function SonClic(Component){return props=>/*#__PURE__*/_jsx(Component,{...props,onClick:e=>{sons.clic();props.onClick?.(e);}});}/** Son d'ouverture — ex. sur le bouton qui ouvre le menu overlay */export function SonOuverture(Component){return props=>/*#__PURE__*/_jsx(Component,{...props,onClick:e=>{sons.ouverture();props.onClick?.(e);}});}\nexport const __FramerMetadata__ = {\"exports\":{\"SonClic\":{\"type\":\"reactHoc\",\"name\":\"SonClic\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SonOuverture\":{\"type\":\"reactHoc\",\"name\":\"SonOuverture\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SonSurvol\":{\"type\":\"reactHoc\",\"name\":\"SonSurvol\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Son.map","// Generated by Framer (4cfe617)\nexport default function metadata(params,activeLocale){return{description:\"Cr\\xe9ons ensemble des exp\\xe9riences digitales o\\xf9 design et simplicit\\xe9 se rencontrent pour captiver vos utilisateurs.\",favicon:\"https://framerusercontent.com/assets/Ha38yLKhYQcEnVAXK40TrxK2Bno.png\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/yD25Yl6OZ7eqfjAoaHGNM0ZSRAs.png\",title:\"Jonathan Sobota | Designer digital\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"kHAWA,SAAS,GAAK,CAAqJ,MAApJ,CAAmB,EAAO,UAAQ,IAAI,EAAO,cAAc,EAAO,oBAAuB,EAAO,QAAQ,QAAQ,aAAY,EAAO,QAAQ,OAAO,EAAS,EAAO,OAAQ,CAAC,SAAS,EAAK,EAAE,EAAG,EAAI,EAAI,EAAK,OAAO,EAAM,EAAE,CAAC,GAAG,CAAC,EAAO,QAAQ,OAAO,IAAM,EAAE,EAAI,EAAE,GAAG,CAAC,GAAG,EAAE,QAAQ,UAAU,OAAO,IAAM,EAAG,EAAE,YAAY,EAAY,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,KAAK,EAAK,EAAE,UAAU,eAAe,EAAE,CAAE,EAAK,GAAG,EAAE,UAAU,6BAA6B,EAAG,EAAG,CAAG,EAAE,EAAE,KAAK,eAAe,EAAE,CAAE,EAAE,EAAE,KAAK,wBAAwB,EAAI,EAAG,IAAI,EAAE,EAAE,KAAK,6BAA6B,KAAK,EAAG,CAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,MAAM,CAAE,EAAE,EAAE,KAAK,EAAG,EAAI,GAAG,CAAE,CAMxlB,SAAgB,EAAU,EAAU,CAAC,MAAO,IAAoB,EAAK,EAAU,CAAC,GAAG,EAAM,aAAa,GAAG,CAAC,EAAK,OAAO,EAAE,EAAM,eAAe,CAAC,CAAE,CAAC,CAAC,CAAE,iBAVrL,SAAD,EAAW,IAAS,QAAa,CAAC,EAAO,YAAY,CAAC,EAAO,YAAY,GAAK,IAAI,EAAE,GAC7H,GAAG,CAAC,IAAM,EAAO,aAAa,QAAQ,QAAQ,EAAK,IAAS,OAAK,EAAE,IAAS,IAAI,MAAM,CAAC,CAAC,EAAO,QAAQ,EAExG,IAAM,MAAQ,CAAI,EAAO,SAAQ,EAAI,EAAE,EAAO,oBAAoB,cAAc,CAAG,EAAE,EAAO,oBAAoB,UAAU,CAAG,CAAE,EAAE,EAAO,iBAAiB,cAAc,CAAG,EAAE,EAAO,iBAAiB,UAAU,CAAG,CAAE,CACwd,EAAK,CAAC,WAAW,EAAK,IAAI,IAAI,IAAI,EAAE,EAAE,SAAS,CAAC,EAAK,IAAI,IAAI,IAAI,IAAI,UAAU,EAAE,EAAK,IAAI,KAAK,IAAI,GAAG,OAAO,GAAG,CAAE,EAAE,cAAc,CAAC,EAAK,IAAI,IAAI,IAAI,GAAG,EAAE,EAAK,IAAI,KAAK,GAAG,IAAI,OAAO,GAAG,CAAE,CAAC,KCVt2B,SAAwB,EAAS,EAAO,EAAa,CAAC,MAAM,CAAC,YAAY,mHAA+H,QAAQ,uEAAuE,OAAO,0BAA0B,YAAY,uEAAuE,MAAM,oCAAoC,CAAE"}