{"product_id":"orvan-ci","title":"Orvane - Sérum liftant raffermissante CI","description":"\u003cscript\u003e\n      (function() {\n        \/\/ Capture host references before any artifact code runs: Window.parent\n        \/\/ is [Replaceable] (a top-level `var parent` in artifact code would\n        \/\/ replace the accessor with a data property), and a top-level\n        \/\/ `const crypto` would shadow the global — either would otherwise\n        \/\/ silently break the bridge for artifacts that worked before.\n        const realParent = window.parent;\n        const cryptoObj = window.crypto;\n        \/\/ html-to-image is only used by takeScreenshot: fetched on first use, not as a\n        \/\/ parser-blocking tag. Native fetch, captured before the proxy override below.\n        const realFetch = typeof window.fetch === 'function' ? window.fetch.bind(window) : null;\n        const HTML_TO_IMAGE_SRC = \"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html-to-image\/1.11.13\/html-to-image.min.js\";\n        const HTML_TO_IMAGE_INTEGRITY = \"sha512-iZ2ORl595Wx6miw+GuadDet4WQbdSWS3JLMoNfY8cRGoEFy6oT3G9IbcrBeL6AfkgpA51ETt\/faX6yLV+\/gFJg==\";\n        let htmlToImageLoad = null;\n        const loadHtmlToImage = () =\u003e {\n          if (!htmlToImageLoad) {\n            htmlToImageLoad = (realFetch\n              ? realFetch(HTML_TO_IMAGE_SRC, { integrity: HTML_TO_IMAGE_INTEGRITY, credentials: 'omit', referrerPolicy: 'no-referrer' })\n              : Promise.reject(new Error('fetch unavailable'))\n            )\n              .then((res) =\u003e {\n                if (!res.ok) throw new Error('html-to-image failed to load (' + res.status + ')');\n                return res.text();\n              })\n              .then((source) =\u003e {\n                \/\/ UMD bundle: hide the artifact's AMD\/CommonJS globals so it takes the\n                \/\/ window-global branch; inline script text runs synchronously on insert.\n                const hidden = ['define', 'module', 'exports'].map((k) =\u003e {\n                  const entry = { k, own: Object.prototype.hasOwnProperty.call(window, k), v: window[k] };\n                  try { window[k] = undefined; } catch (e) {}\n                  return entry;\n                });\n                try {\n                  const el = document.createElement('script');\n                  el.text = source;\n                  (document.head || document.documentElement).appendChild(el);\n                } finally {\n                  hidden.forEach(({ k, own, v }) =\u003e {\n                    try { if (own) { window[k] = v; } else { delete window[k]; } } catch (e) {}\n                  });\n                }\n                if (!window.htmlToImage) throw new Error('html-to-image unavailable after load');\n                return window.htmlToImage;\n              });\n            \/\/ A failed load may be transient; let the next screenshot retry.\n            htmlToImageLoad.catch(() =\u003e { htmlToImageLoad = null; });\n          }\n          return htmlToImageLoad;\n        };\n        \/\/ crypto.randomUUID exists only in Secure Contexts; fall back to a\n        \/\/ unique non-crypto id elsewhere (http:\/\/LAN-IP dev flows) —\n        \/\/ uniqueness is what the bridge needs, unpredictability is\n        \/\/ defense-in-depth on top of the source guards.\n        const newRequestId =\n          cryptoObj \u0026\u0026 typeof cryptoObj.randomUUID === \"function\"\n            ? function () { return cryptoObj.randomUUID(); }\n            : function () { return Date.now() + \"-\" + Math.random(); };\n        const originalConsole = window.console;\n        window.console = {\n          log: (...args) =\u003e {\n            originalConsole.log(...args);\n            realParent.postMessage({ type: 'console', message: args.join(' ') }, '*');\n          },\n          error: (...args) =\u003e {\n            originalConsole.error(...args);\n            realParent.postMessage({ type: 'console', message: 'Error: ' + args.join(' ') }, '*');\n          },\n          warn: (...args) =\u003e {\n            originalConsole.warn(...args);\n            realParent.postMessage({ type: 'console', message: 'Warning: ' + args.join(' ') }, '*');\n          }\n        };\n\n        \/\/ Bridge request ids are crypto-random (not sequential) so they\n        \/\/ cannot be predicted by other frames in the tab.\n        let callbacksMap = new Map();\n        let streamControllers = new Map();\n        \n        window.claude = {\n          complete: (prompt) =\u003e {\n            return new Promise((resolve, reject) =\u003e {\n              const id = newRequestId();\n              callbacksMap.set(id, { resolve, reject });\n              realParent.postMessage({ type: 'claudeComplete', id, prompt }, '*');\n            });\n          }\n        };\n\n        window.storage = {\n          get: (key, shared = false) =\u003e {\n            return new Promise((resolve, reject) =\u003e {\n              const id = newRequestId();\n              callbacksMap.set(id, { resolve, reject });\n              realParent.postMessage({ type: 'storageGet', id, key, shared }, '*');\n            });\n          },\n          set: (key, value, shared = false) =\u003e {\n            return new Promise((resolve, reject) =\u003e {\n              const id = newRequestId();\n              callbacksMap.set(id, { resolve, reject });\n              realParent.postMessage({ type: 'storageSet', id, key, value, shared }, '*');\n            });\n          },\n          delete: (key, shared = false) =\u003e {\n            return new Promise((resolve, reject) =\u003e {\n              const id = newRequestId();\n              callbacksMap.set(id, { resolve, reject });\n              realParent.postMessage({ type: 'storageDelete', id, key, shared }, '*');\n            });\n          },\n          list: (prefix, shared = false) =\u003e {\n            return new Promise((resolve, reject) =\u003e {\n              const id = newRequestId();\n              callbacksMap.set(id, { resolve, reject });\n              realParent.postMessage({ type: 'storageList', id, prefix, shared }, '*');\n            });\n          }\n        };\n\n        let pendingBlobs = new Map();\n        URL.createObjectURL = (blob) =\u003e {\n          \/\/ Store the blob and create an ID and URL for it\n          const blobId = `blob-${Date.now()}-${Math.random()}`;\n          pendingBlobs.set(blobId, blob);\n          return `blob-request:\/\/${blobId}`;\n        };\n\n        URL.revokeObjectURL = (url) =\u003e {\n          \/\/ Remove the blob from our store\n          const blobId = url.replace(\"blob-request:\/\/\", \"\");\n          pendingBlobs.delete(blobId);\n        };\n\n        const getBlobFromURL = (url) =\u003e {\n          const blobId = url.replace(\"blob-request:\/\/\", \"\");\n          return pendingBlobs.get(blobId);\n        };\n\n        \/\/ Override global fetch with streaming support\n        window.fetch = (url, init = {}) =\u003e {\n          return new Promise((resolve, reject) =\u003e {\n            const id = newRequestId();\n            const channelId = `fetch-${id}-${Date.now()}`;\n            \n            callbacksMap.set(id, { \n              resolve: (response) =\u003e {\n                \/\/ Null-body statuses: Response(stream, {status: 204}) throws\n                \/\/ per the Fetch spec, which would escape this resolver and\n                \/\/ hang the artifact's await forever.\n                if (response.status === 204 || response.status === 205 || response.status === 304) {\n                  try {\n                    resolve(new Response(null, {\n                      status: response.status,\n                      statusText: response.statusText,\n                      headers: response.headers\n                    }));\n                  } catch (err) {\n                    \/\/ Invalid statusText\/header bytes can throw here too.\n                    reject(new TypeError(\n                      'Bridge fetch: unconstructable response (status ' + response.status + ')'\n                    ));\n                  }\n                  return;\n                }\n                \/\/ Create a ReadableStream for the response body\n                const stream = new ReadableStream({\n                  start(controller) {\n                    streamControllers.set(channelId, controller);\n                  },\n                  cancel() {\n                    streamControllers.delete(channelId);\n                  }\n                });\n                \n                \/\/ Create and return the Response with the stream. Response()\n                \/\/ requires status in [200, 599]; an opaque\/no-cors fetch\n                \/\/ forwards status 0, which would throw here and escape the\n                \/\/ resolver, hanging the artifact's await. Surface it as a\n                \/\/ network-error-shaped rejection instead.\n                try {\n                  resolve(new Response(stream, {\n                    status: response.status,\n                    statusText: response.statusText,\n                    headers: response.headers\n                  }));\n                } catch (err) {\n                  streamControllers.delete(channelId);\n                  reject(new TypeError(\n                    'Bridge fetch: unconstructable response (status ' + response.status + ')'\n                  ));\n                }\n              },\n              reject,\n              channelId\n            });\n            \n            realParent.postMessage({\n              type: 'proxyFetch',\n              id,\n              url,\n              init,\n              channelId\n            }, '*');\n          });\n        };\n\n        window.addEventListener('message', async (event) =\u003e {\n          \/\/ Only the embedding parent may drive the bridge — sibling and\n          \/\/ nested frames can also postMessage into this window.\n          if (event.source !== realParent) return;\n          if (event.data.type === 'takeScreenshot') {\n            \/\/ Echo the request's nonce so the requester can correlate the\n            \/\/ reply to ITS request — a reply without the expected nonce\n            \/\/ (e.g. from a stale pre-remount artifact) is ignored upstream.\n            const screenshotNonce = event.data.nonce;\n            const rootElement = document.getElementById('artifacts-component-root-html');\n            if (!rootElement) {\n              realParent.postMessage({\n                type: 'screenshotError',\n                nonce: screenshotNonce,\n                error: new Error('Root element not found'),\n              }, '*');\n              return;\n            }\n            \/\/ Catch CDN load failures and toPng errors so the parent always\n            \/\/ gets a response instead of hanging forever.\n            try {\n              const htmlToImage = await loadHtmlToImage();\n              const screenshot = await htmlToImage.toPng(rootElement, {\n                imagePlaceholder:\n                  \"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAA1JREFUGFdjePDgwX8ACOQDoNsk0PMAAAAASUVORK5CYII=\",\n              });\n              realParent.postMessage({\n                type: 'screenshotData',\n                nonce: screenshotNonce,\n                data: screenshot,\n              }, '*');\n            } catch (err) {\n              realParent.postMessage({\n                type: 'screenshotError',\n                nonce: screenshotNonce,\n                error: err instanceof Error ? err : new Error(String(err)),\n              }, '*');\n            }\n          } else if (event.data.type === 'claudeComplete') {\n            const callback = callbacksMap.get(event.data.id);\n            if (!callback) return;\n            if (event.data.error) {\n              callback.reject(new Error(event.data.error));\n            } else {\n              callback.resolve(event.data.completion);\n            }\n            callbacksMap.delete(event.data.id);\n          } else if (event.data.type === 'proxyFetchResponse') {\n            const callback = callbacksMap.get(event.data.id);\n            if (!callback) return;\n            if (event.data.error) {\n              callback.reject(new Error(event.data.error));\n              callbacksMap.delete(event.data.id);\n            } else {\n              \/\/ Initial response with headers, status, etc.\n              callback.resolve({\n                status: event.data.status,\n                statusText: event.data.statusText,\n                headers: event.data.headers\n              });\n              \/\/ Don't delete the callback yet if streaming\n              if (!event.data.body) {\n                callbacksMap.delete(event.data.id);\n              }\n            }\n          } else if (event.data.type === 'proxyFetchStream') {\n            \/\/ Handle streaming data chunks\n            const controller = streamControllers.get(event.data.channelId);\n            if (controller) {\n              if (event.data.error) {\n                controller.error(new Error(event.data.error));\n                streamControllers.delete(event.data.channelId);\n              } else if (event.data.done) {\n                controller.close();\n                streamControllers.delete(event.data.channelId);\n                \/\/ Clean up the callback\n                const callback = Array.from(callbacksMap.entries()).find(\n                  ([_, value]) =\u003e value.channelId === event.data.channelId\n                );\n                if (callback) {\n                  callbacksMap.delete(callback[0]);\n                }\n              } else if (event.data.chunk) {\n                controller.enqueue(new Uint8Array(event.data.chunk));\n              }\n            }\n          } else if (event.data.type === 'storageGet') {\n            const callback = callbacksMap.get(event.data.id);\n            if (!callback) return;\n            if (event.data.error) {\n              callback.reject(new Error(event.data.error));\n            } else {\n              callback.resolve(event.data.result);\n            }\n            callbacksMap.delete(event.data.id);\n          } else if (event.data.type === 'storageSet') {\n            const callback = callbacksMap.get(event.data.id);\n            if (!callback) return;\n            if (event.data.error) {\n              callback.reject(new Error(event.data.error));\n            } else {\n              callback.resolve(event.data.result);\n            }\n            callbacksMap.delete(event.data.id);\n          } else if (event.data.type === 'storageDelete') {\n            const callback = callbacksMap.get(event.data.id);\n            if (!callback) return;\n            if (event.data.error) {\n              callback.reject(new Error(event.data.error));\n            } else {\n              callback.resolve(event.data.result);\n            }\n            callbacksMap.delete(event.data.id);\n          } else if (event.data.type === 'storageList') {\n            const callback = callbacksMap.get(event.data.id);\n            if (!callback) return;\n            if (event.data.error) {\n              callback.reject(new Error(event.data.error));\n            } else {\n              callback.resolve(event.data.result);\n            }\n            callbacksMap.delete(event.data.id);\n          }\n        });\n\n        window.addEventListener('click', (event) =\u003e {\n          const isEl = event.target instanceof HTMLElement;\n          if (!isEl) return;\n    \n          \/\/ find ancestor links\n          const linkEl = event.target.closest(\"a\");\n          if (!linkEl || !linkEl.href) return;\n    \n          event.preventDefault();\n          event.stopImmediatePropagation();\n    \n          if (linkEl.href.startsWith(\"blob-request:\")) {\n            const blob = getBlobFromURL(linkEl.href);\n            if (!blob) return;\n            void blob.arrayBuffer().then((data) =\u003e {\n              realParent.postMessage({\n                type: \"downloadFile\",\n                filename: linkEl.download,\n                data,\n                mimeType: blob.type || \"application\/octet-stream\",\n              });\n            });\n          } else if (linkEl.href.startsWith(\"data:\")) {\n            const [header, base64Data] = linkEl.href.split(\",\");\n            const mimeMatch = header.match(\/data:([^;]+)\/);\n            const mimeType = mimeMatch ? mimeMatch[1] : \"application\/octet-stream\";\n            const binaryString = atob(base64Data);\n            const data = Uint8Array.from(binaryString, (c) =\u003e\n              c.charCodeAt(0),\n            ).buffer;\n            realParent.postMessage({\n              type: \"downloadFile\",\n              filename: linkEl.download,\n              data,\n              mimeType,\n            });\n          } else {\n            let linkUrl;\n            try {\n              linkUrl = new URL(linkEl.href);\n            } catch (error) {\n              return;\n            }\n    \n            if (linkUrl.hostname === window.location.hostname) return;\n      \n            realParent.postMessage({\n              type: 'openExternal',\n              href: linkEl.href,\n            }, '*');\n          }\n      });\n\n        const originalOpen = window.open;\n        window.open = function (url) {\n          realParent.postMessage({\n            type: \"openExternal\",\n            href: url,\n          }, \"*\");\n        };\n\n        window.addEventListener('error', (event) =\u003e {\n          realParent.postMessage({ type: 'console', message: 'Uncaught Error: ' + event.message }, '*');\n        });\n      })();\n    \u003c\/script\u003e\n  \u003cstyle id=\"claude-scrollbar\"\u003e@layer claude-scrollbar{*{scrollbar-width:thin}html{scrollbar-color:rgb(128 128 128 \/ 50%) transparent}}\u003c\/style\u003e\u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400;1,500\u0026amp;family=Jost:wght@300;400;500;600\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\u003cstyle\u003e\n#orv{\n  --nero:#0d0d0d;--oro:#c9a84c;--oro-light:#e0c477;--sfondo:#f5f0e8;\n  --bianco:#ffffff;--testo:#1a1a1a;--testo-chiaro:#4a4a4a;--grigio:#e5ddd0;\n  font-family:'Jost',sans-serif;color:var(--testo);font-size:16px;line-height:1.6;\n}\n#orv *,#orv *::before,#orv *::after{margin:0;padding:0;box-sizing:border-box}\n#orv h1,#orv h2,#orv h3,#orv h4{font-family:'Cormorant Garamond',serif}\n#orv img{max-width:100%;height:auto;display:block}\n\n#orv .topbar{background:var(--nero);color:var(--oro);text-align:center;padding:10px 20px;font-size:13px;font-weight:500;letter-spacing:1.5px}\n\n#orv .hero{background:var(--nero);padding:60px 20px 70px;text-align:center;position:relative}\n#orv .hero-badge{display:inline-block;border:1px solid var(--oro);color:var(--oro);font-size:11px;font-weight:500;letter-spacing:2px;padding:6px 18px;border-radius:100px;margin-bottom:24px;text-transform:uppercase}\n#orv .hero h1{font-size:clamp(40px,7vw,68px);color:var(--bianco);font-weight:500;line-height:1.1;margin-bottom:20px}\n#orv .hero h1 em{color:var(--oro);font-style:italic}\n#orv .hero-sub{font-size:16px;color:rgba(255,255,255,0.75);max-width:580px;margin:0 auto 30px;font-weight:300;line-height:1.7}\n#orv .hero-rating{display:inline-flex;align-items:center;gap:10px;margin-bottom:28px;padding:8px 18px;background:rgba(255,255,255,0.05);border:1px solid rgba(201,168,76,0.25);border-radius:100px}\n#orv .hero-rating .stars{color:var(--oro);letter-spacing:2px;font-size:14px}\n#orv .hero-rating .rtxt{font-size:12px;color:rgba(255,255,255,0.7)}\n#orv .hero-garanties{display:flex;justify-content:center;gap:24px;margin-top:20px;flex-wrap:wrap}\n#orv .hero-garanties span{font-size:12px;color:rgba(255,255,255,0.6);display:flex;align-items:center;gap:6px}\n#orv .hero-garanties span::before{content:'✦';color:var(--oro);font-size:10px}\n\n#orv .photo-break img{width:100%;height:auto;display:block}\n\n#orv .section{padding:70px 20px}\n#orv .container{max-width:900px;margin:0 auto}\n#orv .section-label{font-size:11px;font-weight:600;letter-spacing:3px;text-transform:uppercase;color:var(--oro);margin-bottom:14px;display:block}\n#orv .section-title{font-size:clamp(30px,5vw,48px);font-weight:500;line-height:1.2;color:var(--nero);margin-bottom:20px}\n#orv .section-sub{font-size:16px;color:var(--testo-chiaro);line-height:1.8;max-width:700px}\n\n#orv .problema{background:var(--bianco)}\n#orv .problema-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:20px;margin-top:40px}\n#orv .prob-card{background:var(--sfondo);border-left:3px solid var(--oro);padding:22px 24px;border-radius:0 8px 8px 0}\n#orv .prob-card .emoji{font-size:22px;margin-bottom:10px}\n#orv .prob-card h4{font-size:20px;color:var(--nero);margin-bottom:8px}\n#orv .prob-card p{font-size:14px;color:var(--testo-chiaro);line-height:1.7}\n\n#orv .prima-dopo{background:var(--sfondo)}\n#orv .pd-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-top:40px}\n#orv .pd-col{padding:32px;border-radius:12px}\n#orv .pd-prima{background:#ece5d8;border:1px solid #d8cfbd}\n#orv .pd-dopo{background:var(--nero);border:1px solid var(--nero)}\n#orv .pd-label{font-size:11px;font-weight:600;letter-spacing:2px;text-transform:uppercase;margin-bottom:16px;display:block}\n#orv .pd-prima .pd-label{color:#998}\n#orv .pd-dopo .pd-label{color:var(--oro)}\n#orv .pd-items{list-style:none;display:flex;flex-direction:column;gap:12px}\n#orv .pd-items li{font-size:14px;display:flex;align-items:flex-start;gap:10px;line-height:1.6}\n#orv .pd-prima .pd-items li{color:#887}\n#orv .pd-prima .pd-items li::before{content:'✗';color:#cc4444;font-weight:700;flex-shrink:0;margin-top:1px}\n#orv .pd-dopo .pd-items li{color:rgba(255,255,255,0.9)}\n#orv .pd-dopo .pd-items li::before{content:'✦';color:var(--oro);font-size:12px;flex-shrink:0;margin-top:3px}\n#orv .pd-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:30px}\n#orv .pd-stat{background:var(--nero);border:1px solid rgba(201,168,76,0.25);border-radius:12px;padding:24px 16px;text-align:center}\n#orv .pd-stat .num{font-family:'Cormorant Garamond',serif;font-size:40px;font-weight:600;color:var(--oro);line-height:1;margin-bottom:8px}\n#orv .pd-stat .desc{font-size:12px;color:rgba(255,255,255,0.7);line-height:1.5}\n\n#orv .benefici{background:var(--bianco)}\n#orv .ben-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:24px;margin-top:40px}\n#orv .ben-card{text-align:center;padding:32px 20px;border-radius:12px;background:var(--sfondo);border:1px solid var(--grigio);transition:all 0.3s}\n#orv .ben-card:hover{transform:translateY(-4px);border-color:var(--oro)}\n#orv .ben-icon{width:56px;height:56px;border-radius:50%;background:var(--nero);display:flex;align-items:center;justify-content:center;font-size:22px;margin:0 auto 16px}\n#orv .ben-card h4{font-size:20px;color:var(--nero);margin-bottom:10px}\n#orv .ben-card p{font-size:13px;color:var(--testo-chiaro);line-height:1.7}\n\n#orv .testimonianze{background:var(--sfondo)}\n#orv .testi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:20px;margin-top:40px}\n#orv .testi-card{background:var(--bianco);border-radius:12px;padding:28px;border:1px solid var(--grigio)}\n#orv .stars{color:var(--oro);font-size:14px;margin-bottom:14px;letter-spacing:2px}\n#orv .testi-card p{font-size:18px;font-style:italic;color:var(--testo);line-height:1.6;margin-bottom:16px;font-family:'Cormorant Garamond',serif}\n#orv .testi-author{display:flex;align-items:center;gap:10px}\n#orv .testi-avatar{width:38px;height:38px;border-radius:50%;background:var(--nero);display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;color:var(--oro);font-family:'Jost',sans-serif}\n#orv .testi-name{font-size:13px;font-weight:600;color:var(--testo)}\n#orv .testi-detail{font-size:11px;color:#999}\n\n#orv .scienza{background:var(--nero)}\n#orv .scienza .section-title{color:var(--bianco)}\n#orv .scienza .section-sub{color:rgba(255,255,255,0.7)}\n#orv .scienza .section-label{color:var(--oro)}\n#orv .meccanismo{margin-top:40px;display:grid;grid-template-columns:1fr;gap:24px}\n#orv .mec-step{display:flex;gap:20px;align-items:flex-start;background:rgba(255,255,255,0.05);border:1px solid rgba(201,168,76,0.2);border-radius:12px;padding:24px}\n#orv .mec-num{font-size:36px;font-weight:500;color:var(--oro);line-height:1;flex-shrink:0;min-width:44px}\n#orv .mec-text h4{font-size:22px;color:var(--bianco);margin-bottom:8px}\n#orv .mec-text p{font-size:14px;color:rgba(255,255,255,0.65);line-height:1.7}\n\n#orv .ingredienti{background:var(--bianco)}\n#orv .ing-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:20px;margin-top:40px}\n#orv .ing-card{border-radius:12px;overflow:hidden;border:1px solid var(--grigio)}\n#orv .ing-header{background:var(--nero);padding:20px;text-align:center}\n#orv .ing-header .ing-emoji{font-size:32px;margin-bottom:8px}\n#orv .ing-header h4{font-size:18px;color:var(--bianco)}\n#orv .ing-header small{font-size:11px;color:var(--oro);font-weight:500;letter-spacing:1px;text-transform:uppercase}\n#orv .ing-body{padding:20px}\n#orv .ing-body p{font-size:13px;color:var(--testo-chiaro);line-height:1.7;margin-bottom:12px}\n#orv .ing-dosage{font-size:11px;font-weight:600;color:var(--oro);letter-spacing:1px;text-transform:uppercase}\n\n#orv .comparazione{background:var(--sfondo)}\n#orv .comp-table{width:100%;border-collapse:collapse;margin-top:40px;background:var(--bianco);border-radius:12px;overflow:hidden;border:1px solid var(--grigio)}\n#orv .comp-table th{padding:16px 18px;font-family:'Jost',sans-serif;font-size:13px;font-weight:600;text-align:left;background:var(--nero);color:var(--bianco)}\n#orv .comp-table th.nous{color:var(--oro)}\n#orv .comp-table td{padding:14px 18px;font-size:14px;border-bottom:1px solid var(--grigio);vertical-align:middle}\n#orv .comp-table tr:last-child td{border-bottom:none}\n#orv .comp-table td.feature{font-weight:500;color:var(--testo);font-size:13px}\n#orv .comp-table td.oui{color:#1a7a4a;font-weight:600}\n#orv .comp-table td.non{color:#cc4444}\n#orv .comp-table tr:nth-child(even) td{background:#faf8f4}\n\n#orv .garanzie{background:var(--nero);padding:70px 20px}\n#orv .gar-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:20px;margin-top:40px}\n#orv .gar-card{background:rgba(255,255,255,0.07);border:1px solid rgba(201,168,76,0.25);border-radius:12px;padding:28px;text-align:center}\n#orv .gar-icon{font-size:32px;margin-bottom:14px}\n#orv .gar-card h4{font-size:20px;color:var(--oro);margin-bottom:10px}\n#orv .gar-card p{font-size:13px;color:rgba(255,255,255,0.65);line-height:1.7}\n#orv .gar-card.paiement{border-color:var(--oro);background:rgba(201,168,76,0.08)}\n#orv .garanzie .section-title{color:var(--bianco)}\n#orv .garanzie .section-label{color:var(--oro)}\n\n#orv .faq{background:var(--bianco)}\n#orv .faq-list{margin-top:40px;display:flex;flex-direction:column;gap:12px;max-width:720px}\n#orv .faq-item{border:1px solid var(--grigio);border-radius:10px;overflow:hidden}\n#orv .faq-q{width:100%;background:none;border:none;padding:20px 24px;text-align:left;cursor:pointer;display:flex;justify-content:space-between;align-items:center;font-family:'Jost',sans-serif;font-size:15px;font-weight:500;color:var(--testo);transition:background 0.2s}\n#orv .faq-q:hover{background:var(--sfondo)}\n#orv .faq-q .faq-icon{font-size:18px;color:var(--oro);transition:transform 0.3s;flex-shrink:0;margin-left:12px}\n#orv .faq-q.open .faq-icon{transform:rotate(45deg)}\n#orv .faq-a{display:none;padding:0 24px 20px;font-size:14px;color:var(--testo-chiaro);line-height:1.8}\n#orv .faq-a.show{display:block}\n\n#orv .manifesto{background:var(--sfondo);text-align:center;padding:80px 20px}\n#orv .manifesto .section-title{color:var(--nero);font-size:clamp(36px,5vw,54px)}\n#orv .manifesto-text{font-size:17px;color:var(--testo-chiaro);max-width:640px;margin:20px auto 40px;line-height:1.8;font-family:'Cormorant Garamond',serif;font-style:italic}\n#orv .manifesto-garantie{font-size:13px;color:#999;margin-top:8px}\n\n#orv .divider{display:flex;align-items:center;gap:12px;max-width:200px;margin:0 auto 16px}\n#orv .divider::before,#orv .divider::after{content:'';flex:1;height:1px;background:var(--oro);opacity:0.4}\n#orv .divider-ornament{color:var(--oro);font-size:12px}\n\n#orv .disclaimer{background:var(--nero);color:rgba(255,255,255,0.4);font-size:11px;line-height:1.7;text-align:center;padding:30px 24px;font-weight:300}\n\n@media(max-width:600px){\n  #orv .pd-grid{grid-template-columns:1fr}\n  #orv .ben-grid{grid-template-columns:1fr 1fr}\n  #orv .hero h1{font-size:36px}\n  #orv .comp-table{font-size:12px}\n  #orv .comp-table td,#orv .comp-table th{padding:10px 12px}\n  #orv .hero-garanties{gap:14px}\n  #orv .gar-grid{grid-template-columns:1fr 1fr}\n  #orv .pd-stats{grid-template-columns:1fr}\n}\n\u003c\/style\u003e\n\n\u003cdiv id=\"orv\"\u003e\n\n\u003c!-- TOPBAR --\u003e\n\u003cdiv class=\"topbar\"\u003e✦ Livraison Express Gratuite Cette Semaine ✦ Effet Liftant Immédiat ✦\u003c\/div\u003e\n\n\u003c!-- HERO --\u003e\n\u003csection class=\"hero\"\u003e\n  \u003cdiv class=\"hero-badge\"\u003eSérum Liftant Raffermissant Premium\u003c\/div\u003e\n  \u003ch1\u003eUn Effet Liftant Visible\u003cbr\u003e\u003cem\u003eDès la Première Application\u003c\/em\u003e\n\u003c\/h1\u003e\n  \u003cdiv class=\"hero-rating\"\u003e\n\u003cspan class=\"stars\"\u003e★★★★★\u003c\/span\u003e\u003cspan class=\"rtxt\"\u003eExcellent — plus de 10 000 clientes conquises\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003cp class=\"hero-sub\"\u003eGrâce à ses peptides de soie et à ses 28 actifs hautement concentrés, ce sérum agit au cœur des rides pour renforcer la structure de la peau de l'intérieur — et lui redonner un aspect plus lisse et plus ferme.\u003c\/p\u003e\n  \u003cdiv class=\"hero-garanties\"\u003e\n    \u003cspan\u003eLivraison sous 48h\u003c\/span\u003e\n    \u003cspan\u003ePaiement à la livraison\u003c\/span\u003e\n    \u003cspan\u003eSatisfait ou remboursé 30 jours\u003c\/span\u003e\n    \u003cspan\u003eFormule végane\u003c\/span\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- PHOTO BREAK 1 --\u003e\n\u003cdiv class=\"photo-break\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0897\/1131\/3232\/files\/1_07a572f6-de43-473a-a581-93bc51b34253.webp?v=1789681601\" alt=\"Sérum Liftant Orvane\"\u003e\n\u003c\/div\u003e\n\n\u003c!-- PROBLÈME --\u003e\n\u003csection class=\"section problema\"\u003e\n  \u003cdiv class=\"container\"\u003e\n    \u003cspan class=\"section-label\"\u003eLe Problème\u003c\/span\u003e\n    \u003ch2 class=\"section-title\"\u003eVos crèmes s'arrêtent en surface.\u003cbr\u003eLes rides, elles, sont plus profondes.\u003c\/h2\u003e\n    \u003cp class=\"section-sub\"\u003eVotre peau possède une barrière invisible qui bloque une grande partie de ce que vous appliquez. Or les rides se forment plus profondément, là où vivent les cellules responsables du collagène. Le rétinol ne lifte pas immédiatement, l'acide hyaluronique agit en surface, les traitements invasifs sont lourds — aucune de ces solutions ne reconstruit directement la structure affaiblie.\u003c\/p\u003e\n    \u003cdiv class=\"problema-grid\"\u003e\n      \u003cdiv class=\"prob-card\"\u003e\n\u003cdiv class=\"emoji\"\u003e〰️\u003c\/div\u003e\n\u003ch4\u003eRides d'expression marquées\u003c\/h4\u003e\n\u003cp\u003eAutour des yeux, de la bouche et du front, les rides se creusent et deviennent plus visibles avec le temps.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"prob-card\"\u003e\n\u003cdiv class=\"emoji\"\u003e📉\u003c\/div\u003e\n\u003ch4\u003ePerte de fermeté\u003c\/h4\u003e\n\u003cp\u003eLa peau perd son rebond et son maintien, l'ovale du visage se relâche progressivement.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"prob-card\"\u003e\n\u003cdiv class=\"emoji\"\u003e🫥\u003c\/div\u003e\n\u003ch4\u003eSillons nasogéniens creusés\u003c\/h4\u003e\n\u003cp\u003eLes zones qui perdent du volume laissent apparaître des plis marqués de chaque côté de la bouche.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"prob-card\"\u003e\n\u003cdiv class=\"emoji\"\u003e💸\u003c\/div\u003e\n\u003ch4\u003eDes crèmes qui déçoivent\u003c\/h4\u003e\n\u003cp\u003eHydratant après hydratant, aucun effet liftant visible. L'impression de payer pour de simples promesses.\u003c\/p\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- PRIMA\/DOPO --\u003e\n\u003csection class=\"section prima-dopo\"\u003e\n  \u003cdiv class=\"container\"\u003e\n    \u003cspan class=\"section-label\"\u003eLa Transformation\u003c\/span\u003e\n    \u003ch2 class=\"section-title\"\u003eAvant \u0026amp; Après\u003cbr\u003ele Sérum Orvane\u003c\/h2\u003e\n    \u003cdiv class=\"pd-grid\"\u003e\n      \u003cdiv class=\"pd-col pd-prima\"\u003e\n        \u003cspan class=\"pd-label\"\u003eAvant\u003c\/span\u003e\n        \u003cul class=\"pd-items\"\u003e\n          \u003cli\u003eRides et ridules bien visibles\u003c\/li\u003e\n          \u003cli\u003ePeau relâchée, ovale moins net\u003c\/li\u003e\n          \u003cli\u003eSillons nasogéniens creusés\u003c\/li\u003e\n          \u003cli\u003eTraits fatigués, teint terne\u003c\/li\u003e\n          \u003cli\u003eCrèmes sans effet liftant réel\u003c\/li\u003e\n          \u003cli\u003eL'impression de subir le temps\u003c\/li\u003e\n        \u003c\/ul\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"pd-col pd-dopo\"\u003e\n        \u003cspan class=\"pd-label\"\u003eAprès\u003c\/span\u003e\n        \u003cul class=\"pd-items\"\u003e\n          \u003cli\u003eEffet liftant visible dès la 1ère application\u003c\/li\u003e\n          \u003cli\u003ePeau plus lisse, rides estompées\u003c\/li\u003e\n          \u003cli\u003eZones repulpées, volume redonné\u003c\/li\u003e\n          \u003cli\u003eTraits reposés, teint lumineux\u003c\/li\u003e\n          \u003cli\u003eFermeté qui se renforce semaine après semaine\u003c\/li\u003e\n          \u003cli\u003eLe sentiment de reprendre le contrôle\u003c\/li\u003e\n        \u003c\/ul\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"pd-stats\"\u003e\n      \u003cdiv class=\"pd-stat\"\u003e\n\u003cdiv class=\"num\"\u003e93%\u003c\/div\u003e\n\u003cdiv class=\"desc\"\u003eont ressenti une peau plus ferme dès les premières applications\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"pd-stat\"\u003e\n\u003cdiv class=\"num\"\u003e90%\u003c\/div\u003e\n\u003cdiv class=\"desc\"\u003eont constaté une peau visiblement plus lisse et raffermie\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"pd-stat\"\u003e\n\u003cdiv class=\"num\"\u003e95%\u003c\/div\u003e\n\u003cdiv class=\"desc\"\u003esouhaitent continuer à l'intégrer à leur routine\u003c\/div\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- PHOTO BREAK 2 --\u003e\n\u003cdiv class=\"photo-break\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0897\/1131\/3232\/files\/4_eecab0c0-9411-4bd8-81cd-e5798ff8d842.webp?v=1789681601\" alt=\"Sérum Orvane produit\"\u003e\n\u003c\/div\u003e\n\n\u003c!-- BENEFICI --\u003e\n\u003csection class=\"section benefici\"\u003e\n  \u003cdiv class=\"container\"\u003e\n    \u003cspan class=\"section-label\"\u003eLes Bénéfices\u003c\/span\u003e\n    \u003ch2 class=\"section-title\"\u003e4 Raisons de Choisir\u003cbr\u003ele Sérum Orvane\u003c\/h2\u003e\n    \u003cdiv class=\"ben-grid\"\u003e\n      \u003cdiv class=\"ben-card\"\u003e\n\u003cdiv class=\"ben-icon\"\u003e⬆️\u003c\/div\u003e\n\u003ch4\u003eEffet Liftant Immédiat\u003c\/h4\u003e\n\u003cp\u003eLa peau paraît plus ferme et plus tonique dès la première application, avec un effet qui dure tout au long de la journée.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"ben-card\"\u003e\n\u003cdiv class=\"ben-icon\"\u003e✨\u003c\/div\u003e\n\u003ch4\u003eLisse Rides et Ridules\u003c\/h4\u003e\n\u003cp\u003eLes peptides ciblent les rides d'expression et lissent visiblement la surface de la peau, application après application.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"ben-card\"\u003e\n\u003cdiv class=\"ben-icon\"\u003e💧\u003c\/div\u003e\n\u003ch4\u003eRepulpe et Raffermit\u003c\/h4\u003e\n\u003cp\u003eLa Volufiline et le double acide hyaluronique redonnent du volume aux zones creusées et raffermissent en profondeur.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"ben-card\"\u003e\n\u003cdiv class=\"ben-icon\"\u003e💎\u003c\/div\u003e\n\u003ch4\u003eSoin Professionnel à Domicile\u003c\/h4\u003e\n\u003cp\u003eGrâce à sa seringue cosmétique sans aiguille, une application précise et ciblée, comme un soin expert chez soi.\u003c\/p\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- TESTIMONIANZE --\u003e\n\u003csection class=\"section testimonianze\"\u003e\n  \u003cdiv class=\"container\"\u003e\n    \u003cdiv class=\"divider\"\u003e\u003cspan class=\"divider-ornament\"\u003e✦\u003c\/span\u003e\u003c\/div\u003e\n    \u003cspan class=\"section-label\"\u003eDes Milliers de Femmes l'Ont Adopté\u003c\/span\u003e\n    \u003ch2 class=\"section-title\"\u003eCe Que Disent\u003cbr\u003eNos Clientes\u003c\/h2\u003e\n    \u003cdiv class=\"testi-grid\"\u003e\n      \u003cdiv class=\"testi-card\"\u003e\n\u003cdiv class=\"stars\"\u003e★★★★★\u003c\/div\u003e\n\u003cp\u003e« Dès les premières applications, ma peau semblait plus confortable. Après quelques jours, plusieurs personnes m'ont dit que mon visage paraissait plus lumineux et reposé. »\u003c\/p\u003e\n\u003cdiv class=\"testi-author\"\u003e\n\u003cdiv class=\"testi-avatar\"\u003eAD\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cdiv class=\"testi-name\"\u003eAmaury D.\u003c\/div\u003e\n\u003cdiv class=\"testi-detail\"\u003eCliente vérifiée ✓\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"testi-card\"\u003e\n\u003cdiv class=\"stars\"\u003e★★★★★\u003c\/div\u003e\n\u003cp\u003e« Après plusieurs semaines d'utilisation quotidienne, ma peau paraît plus lisse et les rides sont visiblement moins marquées. Je vais sans hésiter en recommander. »\u003c\/p\u003e\n\u003cdiv class=\"testi-author\"\u003e\n\u003cdiv class=\"testi-avatar\"\u003eMT\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cdiv class=\"testi-name\"\u003eMaëlan T.\u003c\/div\u003e\n\u003cdiv class=\"testi-detail\"\u003eCliente vérifiée ✓\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"testi-card\"\u003e\n\u003cdiv class=\"stars\"\u003e★★★★★\u003c\/div\u003e\n\u003cp\u003e« Je ne m'attendais pas à un effet aussi visible. Ma peau paraît plus ferme et plus rebondie dès les premières applications. »\u003c\/p\u003e\n\u003cdiv class=\"testi-author\"\u003e\n\u003cdiv class=\"testi-avatar\"\u003eYP\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cdiv class=\"testi-name\"\u003eYsée P.\u003c\/div\u003e\n\u003cdiv class=\"testi-detail\"\u003eCliente vérifiée ✓\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- PHOTO BREAK 3 --\u003e\n\u003cdiv class=\"photo-break\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0897\/1131\/3232\/files\/3_a6c4116b-443c-4313-b3a4-a4eaf49942c2.webp?v=1789681602\" alt=\"Actifs Sérum Orvane\"\u003e\n\u003c\/div\u003e\n\n\u003c!-- SCIENZA --\u003e\n\u003csection class=\"section scienza\"\u003e\n  \u003cdiv class=\"container\"\u003e\n    \u003cspan class=\"section-label\"\u003eLa Science\u003c\/span\u003e\n    \u003ch2 class=\"section-title\"\u003eLa Technologie qui Agit là\u003cbr\u003e\u003cem\u003eoù les Crèmes s'Arrêtent\u003c\/em\u003e\n\u003c\/h2\u003e\n    \u003cp class=\"section-sub\"\u003eLa plupart des soins restent bloqués par la couche cornée. Le sérum Orvane est conçu pour agir à la fois en surface, pour un effet liftant immédiat, et en profondeur, là où la structure de la peau s'est affaiblie.\u003c\/p\u003e\n    \u003cdiv class=\"meccanismo\"\u003e\n      \u003cdiv class=\"mec-step\"\u003e\n\u003cdiv class=\"mec-num\"\u003e01\u003c\/div\u003e\n\u003cdiv class=\"mec-text\"\u003e\n\u003ch4\u003eLes Peptides de Soie Franchissent la Barrière\u003c\/h4\u003e\n\u003cp\u003eSuffisamment petits pour traverser la couche cornée, ils sont conçus pour atteindre les zones profondes que les crèmes classiques n'atteignent pas.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"mec-step\"\u003e\n\u003cdiv class=\"mec-num\"\u003e02\u003c\/div\u003e\n\u003cdiv class=\"mec-text\"\u003e\n\u003ch4\u003eIls Forment un Réseau de Soutien\u003c\/h4\u003e\n\u003cp\u003eUne fois absorbés, les peptides contribuent à créer un micro-réseau invisible qui lisse la peau et renforce les zones où le collagène s'est fragilisé.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"mec-step\"\u003e\n\u003cdiv class=\"mec-num\"\u003e03\u003c\/div\u003e\n\u003cdiv class=\"mec-text\"\u003e\n\u003ch4\u003eLe Copper Tripeptide-1 Relance le Collagène\u003c\/h4\u003e\n\u003cp\u003eIl aide à stimuler l'activité des fibroblastes, les cellules impliquées dans la production naturelle de collagène et d'élastine.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"mec-step\"\u003e\n\u003cdiv class=\"mec-num\"\u003e04\u003c\/div\u003e\n\u003cdiv class=\"mec-text\"\u003e\n\u003ch4\u003eUn Résultat Immédiat et Progressif\u003c\/h4\u003e\n\u003cp\u003eLa peau paraît plus ferme et plus lisse dès la première utilisation, puis son apparence continue de s'améliorer semaine après semaine.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- INGREDIENTI --\u003e\n\u003csection class=\"section ingredienti\"\u003e\n  \u003cdiv class=\"container\"\u003e\n    \u003cspan class=\"section-label\"\u003eLes Actifs\u003c\/span\u003e\n    \u003ch2 class=\"section-title\"\u003e28 Actifs Bioactifs\u003cbr\u003een Parfaite Synergie\u003c\/h2\u003e\n    \u003cdiv class=\"ing-grid\"\u003e\n      \u003cdiv class=\"ing-card\"\u003e\n\u003cdiv class=\"ing-header\"\u003e\n\u003cdiv class=\"ing-emoji\"\u003e🧬\u003c\/div\u003e\n\u003ch4\u003ePeptides de Soie\u003c\/h4\u003e\n\u003csmall\u003eRaffermissant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ing-body\"\u003e\n\u003cp\u003eIls forment un réseau de soutien au sein de la peau pour un effet raffermissant visible, de l'intérieur.\u003c\/p\u003e\n\u003cdiv class=\"ing-dosage\"\u003eActif star\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"ing-card\"\u003e\n\u003cdiv class=\"ing-header\"\u003e\n\u003cdiv class=\"ing-emoji\"\u003e🔬\u003c\/div\u003e\n\u003ch4\u003eCopper Tripeptide-1\u003c\/h4\u003e\n\u003csmall\u003eCollagène\u003c\/small\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ing-body\"\u003e\n\u003cp\u003eContribue à stimuler l'activité des fibroblastes, impliqués dans la production naturelle de collagène et d'élastine.\u003c\/p\u003e\n\u003cdiv class=\"ing-dosage\"\u003eBooste le collagène\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"ing-card\"\u003e\n\u003cdiv class=\"ing-header\"\u003e\n\u003cdiv class=\"ing-emoji\"\u003e〰️\u003c\/div\u003e\n\u003ch4\u003eAcetyl Hexapeptide-8\u003c\/h4\u003e\n\u003csmall\u003eEffet Lissant\u003c\/small\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ing-body\"\u003e\n\u003cp\u003eAide à détendre l'apparence des rides d'expression pour une peau visiblement plus lisse et reposée.\u003c\/p\u003e\n\u003cdiv class=\"ing-dosage\"\u003eLisse les rides\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"ing-card\"\u003e\n\u003cdiv class=\"ing-header\"\u003e\n\u003cdiv class=\"ing-emoji\"\u003e💧\u003c\/div\u003e\n\u003ch4\u003eVolufiline \u0026amp; Double A.H.\u003c\/h4\u003e\n\u003csmall\u003eVolume \u0026amp; Hydratation\u003c\/small\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ing-body\"\u003e\n\u003cp\u003eLa Volufiline repulpe les zones qui se creusent, le double acide hyaluronique hydrate en surface et en profondeur.\u003c\/p\u003e\n\u003cdiv class=\"ing-dosage\"\u003eRepulpe \u0026amp; hydrate\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- PHOTO BREAK 4 --\u003e\n\u003cdiv class=\"photo-break\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0897\/1131\/3232\/files\/6_4782fb1e-7720-4b5f-9db3-d5d186fbe444.webp?v=1789681601\" alt=\"Sérum Orvane lifestyle\"\u003e\n\u003c\/div\u003e\n\n\u003c!-- COMPARAZIONE --\u003e\n\u003csection class=\"section comparazione\"\u003e\n  \u003cdiv class=\"container\"\u003e\n    \u003cspan class=\"section-label\"\u003eLa Différence\u003c\/span\u003e\n    \u003ch2 class=\"section-title\"\u003eSérum Orvane ou\u003cbr\u003eCrème Anti-Âge Classique ?\u003c\/h2\u003e\n    \u003ctable class=\"comp-table\"\u003e\n      \u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eCritère\u003c\/th\u003e\n\u003cth class=\"nous\"\u003e✦ Sérum Orvane\u003c\/th\u003e\n\u003cth\u003eCrème \/ rétinol classique\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n      \u003ctbody\u003e\n        \u003ctr\u003e\n\u003ctd class=\"feature\"\u003eEffet liftant immédiat\u003c\/td\u003e\n\u003ctd class=\"oui\"\u003e✦ Dès la 1ère application\u003c\/td\u003e\n\u003ctd class=\"non\"\u003e✗ Aucun effet immédiat\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd class=\"feature\"\u003eAgit en profondeur\u003c\/td\u003e\n\u003ctd class=\"oui\"\u003e✦ Peptides de soie\u003c\/td\u003e\n\u003ctd class=\"non\"\u003e✗ Reste en surface\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd class=\"feature\"\u003eReconstruit la structure\u003c\/td\u003e\n\u003ctd class=\"oui\"\u003e✦ Réseau de soutien\u003c\/td\u003e\n\u003ctd class=\"non\"\u003e✗ Hydratation seule\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd class=\"feature\"\u003eSans procédure invasive\u003c\/td\u003e\n\u003ctd class=\"oui\"\u003e✦ Soin à domicile\u003c\/td\u003e\n\u003ctd class=\"non\"\u003e✗ Injections lourdes\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd class=\"feature\"\u003eApplication ciblée précise\u003c\/td\u003e\n\u003ctd class=\"oui\"\u003e✦ Seringue sans aiguille\u003c\/td\u003e\n\u003ctd class=\"non\"\u003e✗ Application diffuse\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd class=\"feature\"\u003ePaiement à la livraison\u003c\/td\u003e\n\u003ctd class=\"oui\"\u003e✦ Disponible\u003c\/td\u003e\n\u003ctd class=\"non\"\u003e✗ Rarement proposé\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003c\/tbody\u003e\n    \u003c\/table\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- GARANZIE --\u003e\n\u003csection class=\"garanzie\"\u003e\n  \u003cdiv class=\"container\"\u003e\n    \u003cspan class=\"section-label\"\u003eNos Engagements\u003c\/span\u003e\n    \u003ch2 class=\"section-title\"\u003eVous Commandez\u003cbr\u003een Toute Sérénité\u003c\/h2\u003e\n    \u003cdiv class=\"gar-grid\"\u003e\n      \u003cdiv class=\"gar-card\"\u003e\n\u003cdiv class=\"gar-icon\"\u003e🏆\u003c\/div\u003e\n\u003ch4\u003eSatisfait ou Remboursé\u003c\/h4\u003e\n\u003cp\u003e30 jours pour l'essayer. Si vous n'êtes pas satisfaite, nous vous remboursons intégralement. Aucune question, aucune complication.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"gar-card\"\u003e\n\u003cdiv class=\"gar-icon\"\u003e🚀\u003c\/div\u003e\n\u003ch4\u003eLivraison Express\u003c\/h4\u003e\n\u003cp\u003eVotre commande est expédiée et livrée sous 48h. E-mail de confirmation et suivi en temps réel inclus.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"gar-card paiement\"\u003e\n\u003cdiv class=\"gar-icon\"\u003e💳\u003c\/div\u003e\n\u003ch4\u003ePaiement à la Livraison\u003c\/h4\u003e\n\u003cp\u003eVous payez uniquement à la réception de votre colis. Notre équipe vous appellera pour confirmer votre commande avant expédition.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"gar-card\"\u003e\n\u003cdiv class=\"gar-icon\"\u003e🌿\u003c\/div\u003e\n\u003ch4\u003eFormule Végane\u003c\/h4\u003e\n\u003cp\u003eSans parabènes, sans huiles minérales, sans phtalates. 100% végane et non testée sur les animaux.\u003c\/p\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- FAQ --\u003e\n\u003csection class=\"section faq\"\u003e\n  \u003cdiv class=\"container\"\u003e\n    \u003cspan class=\"section-label\"\u003eQuestions Fréquentes\u003c\/span\u003e\n    \u003ch2 class=\"section-title\"\u003eTout Ce Que Vous\u003cbr\u003eDevez Savoir\u003c\/h2\u003e\n    \u003cdiv class=\"faq-list\"\u003e\n      \u003cdiv class=\"faq-item\"\u003e\n\u003cbutton class=\"faq-q\" onclick=\"orvFaq(this)\"\u003e\u003cspan\u003eComment utiliser le sérum ?\u003c\/span\u003e\u003cspan class=\"faq-icon\"\u003e+\u003c\/span\u003e\u003c\/button\u003e\u003cdiv class=\"faq-a\"\u003eUtilisez la seringue cosmétique sans aiguille pour appliquer le sérum avec précision sur les zones ciblées. Le matin, appliquez 0,5 ml pour un effet liftant léger tout au long de la journée. Le soir, appliquez 1 ml pour accompagner le renouvellement de la peau. Massez délicatement jusqu'à absorption complète.\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"faq-item\"\u003e\n\u003cbutton class=\"faq-q\" onclick=\"orvFaq(this)\"\u003e\u003cspan\u003eConvient-il à tous les types de peau, même sensibles ?\u003c\/span\u003e\u003cspan class=\"faq-icon\"\u003e+\u003c\/span\u003e\u003c\/button\u003e\u003cdiv class=\"faq-a\"\u003eOui. Sa formule est conçue pour un usage quotidien et convient également aux peaux sensibles. Sa texture légère pénètre rapidement, ne colle pas et ne laisse aucun résidu, même sur les zones les plus délicates.\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"faq-item\"\u003e\n\u003cbutton class=\"faq-q\" onclick=\"orvFaq(this)\"\u003e\u003cspan\u003eLe sérum laisse-t-il la peau grasse ou brillante ?\u003c\/span\u003e\u003cspan class=\"faq-icon\"\u003e+\u003c\/span\u003e\u003c\/button\u003e\u003cdiv class=\"faq-a\"\u003eNon. Sa texture légère pénètre rapidement et laisse la peau douce, confortable et sans fini gras ni brillant. Il constitue même une excellente base de maquillage en lissant visiblement la peau.\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"faq-item\"\u003e\n\u003cbutton class=\"faq-q\" onclick=\"orvFaq(this)\"\u003e\u003cspan\u003ePuis-je l'intégrer à ma routine de soins ?\u003c\/span\u003e\u003cspan class=\"faq-icon\"\u003e+\u003c\/span\u003e\u003c\/button\u003e\u003cdiv class=\"faq-a\"\u003eAbsolument. Appliquez-le sur une peau propre, avant votre crème hydratante, puis laissez-le pénétrer complètement. Il est également parfait avant le maquillage.\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"faq-item\"\u003e\n\u003cbutton class=\"faq-q\" onclick=\"orvFaq(this)\"\u003e\u003cspan\u003eEst-il comparable à un traitement esthétique ?\u003c\/span\u003e\u003cspan class=\"faq-icon\"\u003e+\u003c\/span\u003e\u003c\/button\u003e\u003cdiv class=\"faq-a\"\u003eC'est un soin cosmétique non invasif. Il offre un effet raffermissant visible grâce à ses peptides de soie et à l'action progressive de ses actifs — sans injections, sans procédures invasives et sans temps de récupération.\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"faq-item\"\u003e\n\u003cbutton class=\"faq-q\" onclick=\"orvFaq(this)\"\u003e\u003cspan\u003eComment fonctionne le paiement à la livraison ?\u003c\/span\u003e\u003cspan class=\"faq-icon\"\u003e+\u003c\/span\u003e\u003c\/button\u003e\u003cdiv class=\"faq-a\"\u003ePassez commande en ligne et notre équipe vous contactera par téléphone pour confirmer votre commande avant l'expédition. Vous réglez directement au livreur à la réception de votre colis — sans risque, sans engagement.\u003c\/div\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- MANIFESTO --\u003e\n\u003csection class=\"manifesto\"\u003e\n  \u003cdiv class=\"container\"\u003e\n    \u003cdiv class=\"divider\"\u003e\u003cspan class=\"divider-ornament\"\u003e✦\u003c\/span\u003e\u003c\/div\u003e\n    \u003cspan class=\"section-label\" style=\"text-align:center;display:block\"\u003eNotre Philosophie\u003c\/span\u003e\n    \u003ch2 class=\"section-title\"\u003eDes Résultats Visibles,\u003cbr\u003ePas de Simples Promesses\u003c\/h2\u003e\n    \u003cp class=\"manifesto-text\"\u003eVous ne voulez pas attendre trois mois pour voir une différence. Vous voulez un résultat visible dès la première application, sans injection ni procédure lourde. Le sérum Orvane rend cela possible — un soin professionnel, directement à la maison.\u003c\/p\u003e\n    \u003cdiv class=\"manifesto-garantie\"\u003e✦ Livraison sous 48h · Paiement à la livraison · Remboursé sous 30 jours ✦\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c\/div\u003e\n\n\u003c!-- DISCLAIMER --\u003e\n\u003cdiv id=\"orv\"\u003e\u003cdiv class=\"disclaimer\"\u003eCe produit est un cosmétique à usage externe. Éviter le contact direct avec les yeux et les muqueuses. Un test cutané est recommandé avant la première utilisation. En cas de réaction ou d'irritation, cessez l'usage. Tenir hors de portée des enfants. Les résultats peuvent varier d'une personne à l'autre.\u003c\/div\u003e\u003c\/div\u003e\n\n\u003c!-- COPY BUTTON --\u003e\n\u003cdiv id=\"orv-copy-bar\" style=\"position: fixed; bottom: 24px; right: 24px; z-index: 9999; display: none;\"\u003e\n  \u003cbutton onclick=\"orvCopy()\" id=\"orv-copy-btn\" style=\"display:flex;align-items:center;gap:10px;background:#c9a84c;color:#0d0d0d;border:none;padding:12px 22px;border-radius:100px;font-size:14px;font-weight:600;cursor:pointer;box-shadow:0 8px 28px rgba(201,168,76,.5);font-family:'Jost',sans-serif;transition:all .2s;\"\u003e\n    \u003cspan\u003e📋\u003c\/span\u003e\u003cspan id=\"orv-copy-txt\"\u003eCopia codice\u003c\/span\u003e\n  \u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\nfunction orvFaq(btn){\n  var a=btn.nextElementSibling;\n  var isOpen=a.classList.contains('show');\n  document.querySelectorAll('#orv .faq-a').forEach(function(x){x.classList.remove('show')});\n  document.querySelectorAll('#orv .faq-q').forEach(function(x){x.classList.remove('open')});\n  if(!isOpen){a.classList.add('show');btn.classList.add('open');}\n}\nfunction orvCopy(){\n  var btn=document.getElementById('orv-copy-btn'),txt=document.getElementById('orv-copy-txt'),bar=document.getElementById('orv-copy-bar');\n  bar.style.display='none';var code=document.documentElement.outerHTML;bar.style.display='';\n  navigator.clipboard.writeText(code).then(function(){\n    txt.textContent='✓ Copiato!';btn.style.background='#0d0d0d';btn.style.color='#c9a84c';\n    setTimeout(function(){txt.textContent='Copia codice';btn.style.background='#c9a84c';btn.style.color='#0d0d0d';},2500);\n  }).catch(function(){\n    var ta=document.createElement('textarea');ta.value=code;document.body.appendChild(ta);ta.select();document.execCommand('copy');document.body.removeChild(ta);\n    txt.textContent='✓ Copiato!';btn.style.background='#0d0d0d';btn.style.color='#c9a84c';\n    setTimeout(function(){txt.textContent='Copia codice';btn.style.background='#c9a84c';btn.style.color='#0d0d0d';},2500);\n  });\n}\n\u003c\/script\u003e\n","brand":"NaayaLab","offers":[{"title":"Default Title","offer_id":53626863911248,"sku":null,"price":19500.0,"currency_code":"XOF","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0897\/1131\/3232\/files\/1_07a572f6-de43-473a-a581-93bc51b34253.webp?v=1789681601","url":"https:\/\/naayalab.com\/products\/orvan-ci","provider":"NaayaLab","version":"1.0","type":"link"}