{"id":13,"date":"2021-12-15T09:09:27","date_gmt":"2021-12-15T09:09:27","guid":{"rendered":"https:\/\/startersites.io\/blocksy\/garderobe\/?page_id=13"},"modified":"2026-09-30T22:16:03","modified_gmt":"2026-09-30T22:16:03","slug":"contact","status":"publish","type":"page","link":"https:\/\/olivierpicy.com\/en\/contact\/","title":{"rendered":"Contact"},"content":{"rendered":"\n<div class=\"wp-block-stackable-heading stk-block-heading stk-block-heading--v2 stk-block stk-6773dca o-typing-delay-100ms animated backInUp slow reveal-fade-up\" id=\"art-cognitif\" data-block-id=\"6773dca\"><style>.stk-6773dca {align-items:center !important;margin-bottom:var(--stk--preset--spacing--70, 3.38rem) !important;display:flex !important;top:0px !important;}.stk-6773dca .stk-block-heading__text{font-size:var(--stk--preset--font-size--large, 30px) !important;color:var(--theme-palette-color-2, #acacac) !important;}@media screen and (max-width:999px){.stk-6773dca .stk-block-heading__text{font-size:var(--stk--preset--font-size--large, 30px) !important;}}@media screen and (max-width:689px){.stk-6773dca {top:0px !important;}}<\/style><h6 class=\"stk-block-heading__text has-text-color has-text-align-center\">CONTACT<\/h6><\/div>\n\n\n\n<div class=\"wp-block-stackable-spacer stk-block-spacer stk--no-padding stk-block stk-390ba1d\" data-block-id=\"390ba1d\"><style>.stk-390ba1d {height:32px !important;}@media screen and (max-width:689px){.stk-390ba1d {height:2px !important;}}<\/style><\/div>\n\n\n\n<div class=\"wp-block-stackable-columns stk-block-columns stk-block stk-25acfd9\" data-block-id=\"25acfd9\"><style>.stk-25acfd9 {margin-top:-120px !important;margin-bottom:0px !important;}.stk-25acfd9-column{--stk-column-gap:50px !important;row-gap:50px !important;}<\/style><div class=\"stk-row stk-inner-blocks stk-block-content stk-content-align stk-25acfd9-column\">\n<div class=\"wp-block-stackable-column stk-block-column stk-column stk-block stk-4f39026 stk-block-background stk--background-scheme--scheme-default-3 stk--has-background-overlay\" data-v=\"4\" data-block-id=\"4f39026\"><style>.stk-4f39026-container{margin-top:0px !important;margin-right:0px !important;margin-bottom:0px !important;margin-left:0px !important;}.stk-4f39026 {background-color:#ffffff00 !important;background-image:url(https:\/\/olivierpicy.com\/wp-content\/uploads\/2026\/09\/9.webp) !important;background-position:top left !important;background-repeat:repeat !important;background-size:auto !important;padding-top:0px !important;padding-right:0px !important;padding-bottom:0px !important;padding-left:0px !important;overflow:visible !important;}.stk-4f39026:before{background-color:#ffffff00 !important;opacity:0 !important;}.stk-4f39026 .stk-container{overflow:visible !important;}@media screen and (min-width:690px) and (max-width:999px){.stk-4f39026 {flex:var(--stk-flex-grow, 1) 1 calc(100% - var(--stk-column-gap, 0px) * 0 \/ 1 ) !important;}}@media screen and (max-width:999px){.stk-4f39026-container{max-width:400px !important;min-width:auto !important;margin-right:auto !important;margin-left:auto !important;}}<\/style><div class=\"stk-column-wrapper stk-block-column__content stk-container stk-4f39026-container stk--no-background stk--no-padding\"><div class=\"stk-block-content stk-inner-blocks stk-4f39026-inner-blocks\">\n<div class=\"wp-block-stackable-image stk-block-image stk-block stk-aab377d op-atoms-img\" data-block-id=\"aab377d\"><style>.stk-aab377d {margin-top:-50px !important;}.stk-aab377d .stk-img-wrapper{width:90% !important;}@media screen and (max-width:999px){.stk-aab377d .stk-img-wrapper{width:100% !important;height:500px !important;}.stk-aab377d .stk-img-wrapper img{object-position:47% 1% !important;}}<\/style><figure><span class=\"stk-img-wrapper stk-image--shape-stretch\"><img loading=\"lazy\" decoding=\"async\" class=\"stk-img wp-image-1099\" src=\"https:\/\/olivierpicy.com\/wp-content\/uploads\/2026\/09\/image-768x1024.webp\" width=\"768\" height=\"1024\" alt=\"Peinture d'Olivier Picy : un grand arbre parmi des formes abstraites bleues, vertes et ocre\" srcset=\"https:\/\/olivierpicy.com\/wp-content\/uploads\/2026\/09\/image-768x1024.webp 768w, https:\/\/olivierpicy.com\/wp-content\/uploads\/2026\/09\/image-225x300.webp 225w, https:\/\/olivierpicy.com\/wp-content\/uploads\/2026\/09\/image-113x150.webp 113w, https:\/\/olivierpicy.com\/wp-content\/uploads\/2026\/09\/image-1152x1536.webp 1152w, https:\/\/olivierpicy.com\/wp-content\/uploads\/2026\/09\/image.webp 1200w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/span><\/figure><\/div>\n<\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-stackable-column stk-block-column stk-column stk-block stk-290ec13\" data-v=\"4\" data-block-id=\"290ec13\"><style>.stk-290ec13-container{margin-top:0px !important;margin-right:0px !important;margin-bottom:0px !important;margin-left:0px !important;}.stk-290ec13 {align-self:flex-end !important;}@media screen and (min-width:690px) and (max-width:999px){.stk-290ec13 {flex:var(--stk-flex-grow, 1) 1 calc(100% - var(--stk-column-gap, 0px) * 0 \/ 1 ) !important;}}<\/style><div class=\"stk-column-wrapper stk-block-column__content stk-container stk-290ec13-container stk--no-background stk--no-padding\"><div class=\"stk-block-content stk-inner-blocks stk-290ec13-inner-blocks\">\n\n<div class=\"wpforms-container wpforms-block wpforms-block-95aa5827-1933-4e67-9a1c-d8206604e4e9 wpforms-render-modern\" id=\"wpforms-156\"><form id=\"wpforms-form-156\" class=\"wpforms-validate wpforms-form\" data-formid=\"156\" method=\"post\" enctype=\"multipart\/form-data\" action=\"\/en\/wp-json\/wp\/v2\/pages\/13\" data-token=\"3542fbe5b987336eae7742b2b06decc5\" data-token-time=\"1792109836\"><noscript class=\"wpforms-error-noscript\">Please enable JavaScript in your browser to complete this form.<\/noscript><div id=\"wpforms-error-noscript\" style=\"display: none;\">Please enable JavaScript in your browser to complete this form.<\/div><div class=\"wpforms-field-container\"><div id=\"wpforms-156-field_0-container\" class=\"wpforms-field wpforms-field-name\" data-field-id=\"0\"><label class=\"wpforms-field-label\" for=\"wpforms-156-field_0\">Nom <span class=\"wpforms-required-label\" aria-hidden=\"true\">*<\/span><\/label><input type=\"text\" id=\"wpforms-156-field_0\" class=\"wpforms-field-large wpforms-field-required\" name=\"wpforms[fields][0]\" aria-errormessage=\"wpforms-156-field_0-error\" required><\/div><div id=\"wpforms-156-field_4-container\" class=\"wpforms-field wpforms-field-text\" data-field-id=\"4\"><label class=\"wpforms-field-label\" for=\"wpforms-156-field_4\">T\u00e9l\u00e9phone <span class=\"wpforms-required-label\" aria-hidden=\"true\">*<\/span><\/label><input type=\"text\" id=\"wpforms-156-field_4\" class=\"wpforms-field-large wpforms-field-required\" name=\"wpforms[fields][4]\" aria-errormessage=\"wpforms-156-field_4-error\" required><\/div><div id=\"wpforms-156-field_1-container\" class=\"wpforms-field wpforms-field-email\" data-field-id=\"1\"><label class=\"wpforms-field-label\" for=\"wpforms-156-field_1\">Adresse mail <span class=\"wpforms-required-label\" aria-hidden=\"true\">*<\/span><\/label><input type=\"email\" id=\"wpforms-156-field_1\" class=\"wpforms-field-large wpforms-field-required\" name=\"wpforms[fields][1]\" spellcheck=\"false\" aria-errormessage=\"wpforms-156-field_1-error\" required><\/div><div id=\"wpforms-156-field_2-container\" class=\"wpforms-field wpforms-field-textarea\" data-field-id=\"2\"><label class=\"wpforms-field-label\" for=\"wpforms-156-field_2\">Message <span class=\"wpforms-required-label\" aria-hidden=\"true\">*<\/span><\/label><textarea id=\"wpforms-156-field_2\" class=\"wpforms-field-medium wpforms-field-required\" name=\"wpforms[fields][2]\" aria-errormessage=\"wpforms-156-field_2-error\" required><\/textarea><\/div><\/div><!-- .wpforms-field-container --><div class=\"wpforms-submit-container\" ><input type=\"hidden\" name=\"wpforms[id]\" value=\"156\"><input type=\"hidden\" name=\"wpforms[time_token]\" value=\"1792109836.04979d69c2bcd1efb3023308880cc2c1c2fa003455c3709f6170fdd716ac4daa\"><input type=\"hidden\" name=\"page_title\" value=\"\"><input type=\"hidden\" name=\"page_url\" value=\"https:\/\/olivierpicy.com\/en\/wp-json\/wp\/v2\/pages\/13\"><input type=\"hidden\" name=\"url_referer\" value=\"\"><button type=\"submit\" name=\"wpforms[submit]\" id=\"wpforms-submit-156\" class=\"wpforms-submit\" data-alt-text=\"Envoie...\" data-submit-text=\"Envoyer\" aria-live=\"assertive\" value=\"wpforms-submit\">Envoyer<\/button><\/div><\/form><\/div>  <!-- .wpforms-container --><\/div><\/div><\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-stackable-spacer stk-block-spacer stk--no-padding stk-block stk-1e53790\" data-block-id=\"1e53790\"><style>.stk-1e53790 {height:130px !important;}@media screen and (max-width:999px){.stk-1e53790 {height:80px !important;}}<\/style><\/div>\n\n\n\n<div class=\"wp-block-stackable-spacer stk-block-spacer stk--no-padding stk-block stk-9c070cc\" data-block-id=\"9c070cc\"><style>.stk-9c070cc {height:50px !important;}<\/style><\/div>\n\n\n\n<div class=\"wp-block-stackable-spacer stk-block-spacer stk--no-padding stk-block stk-10da8b1\" data-block-id=\"10da8b1\"><style>.stk-10da8b1 {height:100px !important;}@media screen and (max-width:999px){.stk-10da8b1 {height:80px !important;}}<\/style><\/div>\n\n\n\n<div class=\"wp-block-stackable-spacer stk-block-spacer stk--no-padding stk-block stk-a7f8d9a\" data-block-id=\"a7f8d9a\"><style>.stk-a7f8d9a {height:130px !important;}@media screen and (max-width:999px){.stk-a7f8d9a {height:100px !important;}}<\/style><\/div>\n\n\n\n<!-- Contact : l'image de l'arbre se forme \u00e0 partir d'atomes color\u00e9s -->\n<style>\n.op-atoms-canvas { position: fixed; left: 0; top: 0; pointer-events: none; z-index: 50; }\n\/* Champs du formulaire : arrivent un par un, en glissant doucement *\/\n.op-field-wait { opacity: 0; transform: translateX(56px); }\n.op-field-in { opacity: 1; transform: none; transition: opacity 1.5s ease, transform 1.8s cubic-bezier(.22,.61,.36,1); }\n\/* Arbre : m\u00eame fondu blanc par zones que le cerveau de l'accueil *\/\n.op-fondu-wait { -webkit-mask-image: radial-gradient(14% 18% at var(--zx1, 38%) var(--zy1, 30%), #000 calc(var(--z1) - 60%), transparent var(--z1)), radial-gradient(14% 18% at var(--zx2, 64%) var(--zy2, 58%), #000 calc(var(--z2) - 60%), transparent var(--z2)), radial-gradient(14% 18% at var(--zx3, 45%) var(--zy3, 75%), #000 calc(var(--z3) - 60%), transparent var(--z3)), radial-gradient(14% 18% at var(--zx4, 70%) var(--zy4, 22%), #000 calc(var(--z4) - 60%), transparent var(--z4)), radial-gradient(14% 18% at var(--zx5, 28%) var(--zy5, 55%), #000 calc(var(--z5) - 60%), transparent var(--z5)), radial-gradient(14% 18% at var(--zx6, 55%) var(--zy6, 45%), #000 calc(var(--z6) - 60%), transparent var(--z6)), radial-gradient(14% 18% at var(--zx7, 40%) var(--zy7, 88%), #000 calc(var(--z7) - 60%), transparent var(--z7)); mask-image: radial-gradient(14% 18% at var(--zx1, 38%) var(--zy1, 30%), #000 calc(var(--z1) - 60%), transparent var(--z1)), radial-gradient(14% 18% at var(--zx2, 64%) var(--zy2, 58%), #000 calc(var(--z2) - 60%), transparent var(--z2)), radial-gradient(14% 18% at var(--zx3, 45%) var(--zy3, 75%), #000 calc(var(--z3) - 60%), transparent var(--z3)), radial-gradient(14% 18% at var(--zx4, 70%) var(--zy4, 22%), #000 calc(var(--z4) - 60%), transparent var(--z4)), radial-gradient(14% 18% at var(--zx5, 28%) var(--zy5, 55%), #000 calc(var(--z5) - 60%), transparent var(--z5)), radial-gradient(14% 18% at var(--zx6, 55%) var(--zy6, 45%), #000 calc(var(--z6) - 60%), transparent var(--z6)), radial-gradient(14% 18% at var(--zx7, 40%) var(--zy7, 88%), #000 calc(var(--z7) - 60%), transparent var(--z7)); --z1: 0%; --z2: 0%; --z3: 0%; --z4: 0%; --z5: 0%; --z6: 0%; --z7: 0%; }\n.op-fondu-wait.op-fondu-go { animation: op-z1 2.6s cubic-bezier(.35,0,.6,1) var(--zd1, 0s) both, op-z2 2.6s cubic-bezier(.35,0,.6,1) var(--zd2, 0.35s) both, op-z3 2.6s cubic-bezier(.35,0,.6,1) var(--zd3, 0.7s) both, op-z4 2.6s cubic-bezier(.35,0,.6,1) var(--zd4, 0.95s) both, op-z5 2.6s cubic-bezier(.35,0,.6,1) var(--zd5, 1.2s) both, op-z6 2.6s cubic-bezier(.35,0,.6,1) var(--zd6, 1.45s) both, op-z7 2.6s cubic-bezier(.35,0,.6,1) var(--zd7, 1.7s) both; }\n<\/style>\n<script>\n(function () {\n  var TOTAL = 4800, TAIL = 1600, REVEAL_FROM = 0.58;\n  \/\/ Style d'apparition de l'arbre : 'fondu' (fondu blanc par zones, comme le cerveau), 'neurones' ou 'atomes'\n  var MODE = 'fondu';\n  if (window.matchMedia) { if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; }\n  var img = document.querySelector('.op-atoms-img img');\n  if (!img) return;\n  if (MODE === 'fondu') { img.classList.add('op-fondu-wait'); } else { img.style.opacity = '0'; }\n\n  \/\/ Champs du formulaire, pr\u00e9par\u00e9s hors champ puis amen\u00e9s un par un\n  var fields = [].slice.call(document.querySelectorAll('.wpforms-container .wpforms-field, .wpforms-container .wpforms-submit-container'));\n  fields.forEach(function (f) { f.classList.add('op-field-wait'); });\n  function fieldsIn() {\n    fields.forEach(function (f, i) {\n      setTimeout(function () { f.classList.add('op-field-in'); f.classList.remove('op-field-wait'); }, 500 + i * 420);\n    });\n  }\n\n  var rnd = function (a, b) { return a + Math.random() * (b - a); };\n  var clamp = function (v) { return v < 0 ? 0 : (v > 1 ? 1 : v); };\n  var smooth = function (v) { v = clamp(v); return v * v * (3 - 2 * v); };\n  var EASES = [\n    function (t) { return 1 - Math.pow(1 - t, 1.8); },\n    function (t) { return 1 - Math.pow(1 - t, 2.4); },\n    function (t) { return Math.sin(t * Math.PI \/ 2); },\n    function (t) { var c = 0.6; return 1 + (c + 1) * Math.pow(t - 1, 3) + c * Math.pow(t - 1, 2); }\n  ];\n  function bez(p0, p1, p2, p3, t) {\n    var u = 1 - t;\n    return u * u * u * p0 + 3 * u * u * t * p1 + 3 * u * t * t * p2 + t * t * t * p3;\n  }\n\n  function runAtomes() {\n    var r0 = img.getBoundingClientRect();\n    if (!r0.width) { img.style.opacity = ''; return; }\n    var cv = document.createElement('canvas');\n    cv.className = 'op-atoms-canvas';\n    document.body.appendChild(cv);\n    var ctx = cv.getContext('2d');\n    var dpr = Math.min(window.devicePixelRatio || 1, 2), VW = 0, VH = 0;\n    function size() {\n      VW = window.innerWidth; VH = window.innerHeight;\n      cv.width = VW * dpr; cv.height = VH * dpr;\n      cv.style.width = VW + 'px'; cv.style.height = VH + 'px';\n      ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n    }\n    size();\n    window.addEventListener('resize', size);\n\n    \/\/ Lit les couleurs du tableau : chaque atome porte la couleur de l'endroit o\u00f9 il se pose\n    var W = Math.round(r0.width), H = Math.round(r0.height);\n    var off = document.createElement('canvas');\n    off.width = W; off.height = H;\n    var o = off.getContext('2d');\n    var data = null;\n    try { o.drawImage(img, 0, 0, W, H); data = o.getImageData(0, 0, W, H).data; } catch (e) { data = null; }\n    var step = Math.max(5, Math.round(Math.sqrt(W * H \/ 2200)));\n    var far = Math.max(VW, VH);\n    var pts = [];\n    for (var y = step \/ 2; y < H; y += step) for (var x = step \/ 2; x < W; x += step) {\n      var jx = x + rnd(-0.35, 0.35) * step, jy = y + rnd(-0.35, 0.35) * step;\n      var col = '#6f8a8c';\n      if (data) {\n        var k = ((Math.min(H - 1, Math.round(jy)) * W) + Math.min(W - 1, Math.round(jx))) * 4;\n        col = 'rgb(' + data[k] + ',' + data[k + 1] + ',' + data[k + 2] + ')';\n      }\n      \/\/ d\u00e9part : le c\u0153ur de l'image ; chaque atome s'en \u00e9chappe vers sa place\n      var sx = W \/ 2 + rnd(-12, 12) - jx, sy = H \/ 2 + rnd(-12, 12) - jy;\n      var dist = Math.sqrt(sx * sx + sy * sy) || 1;\n      var bend = dist * rnd(-0.3, 0.3);\n      var px = -sy \/ dist, py = sx \/ dist;\n      var dur = rnd(0.45, 0.85);\n      var ne = Math.random() < 0.2 ? (Math.random() < 0.6 ? 1 : (Math.random() < 0.7 ? 2 : 3)) : 0;\n      var el = [];\n      for (var n = 0; n < ne; n++) {\n        el.push({ rx: step * rnd(0.8, 1.6), fl: rnd(0.25, 0.55), tilt: rnd(0, Math.PI),\n                  a: rnd(0, 6.283), sp: rnd(1.8, 4.5) * (Math.random() < 0.5 ? -1 : 1) });\n      }\n      pts.push({\n        ox: jx, oy: jy, sx: sx, sy: sy, col: col,\n        c1x: sx * 0.66 + px * bend, c1y: sy * 0.66 + py * bend,\n        c2x: sx * 0.25 + px * bend * rnd(0.2, 0.7), c2y: sy * 0.25 + py * bend * rnd(0.2, 0.7),\n        s: rnd(0, 1 - dur), d: dur, e: EASES[(Math.random() * EASES.length) | 0],\n        r: step * rnd(0.18, 0.32), el: el,\n        fq: rnd(0.7, 2), ph: rnd(0, 6.283), amp: rnd(1, 3.5), pf: rnd(1.5, 3.5)\n      });\n    }\n    var END = 1 + TAIL \/ TOTAL, t0 = performance.now();\n\n    function frame(now) {\n      var t = (now - t0) \/ TOTAL;\n      ctx.clearRect(0, 0, VW, VH);\n      if (t >= END) {\n        cv.remove(); window.removeEventListener('resize', size);\n        img.style.opacity = '1'; return;\n      }\n      var reveal = smooth((t - REVEAL_FROM) \/ (END - REVEAL_FROM));\n      img.style.opacity = reveal.toFixed(3);\n      var r = img.getBoundingClientRect();\n      var sxr = r.width \/ W, syr = r.height \/ H;\n      var fadeAll = 1 - reveal, sec = now \/ 1000;\n      ctx.lineWidth = 0.6;\n      for (var i = 0; i < pts.length; i++) {\n        var p = pts[i];\n        var lt = (t - p.s) \/ p.d;\n        if (lt <= 0) continue;\n        if (lt > 1) lt = 1;\n        var kk = p.e(lt), free = (1 - lt) * (1 - lt);\n        var cx = r.left + p.ox * sxr + bez(p.sx, p.c1x, p.c2x, 0, kk) + Math.sin(sec * p.fq + p.ph) * p.amp * free;\n        var cy = r.top + p.oy * syr + bez(p.sy, p.c1y, p.c2y, 0, kk) + Math.cos(sec * p.fq * 0.8 + p.ph) * p.amp * free;\n        if (cx < -40 || cy < -40 || cx > VW + 40 || cy > VH + 40) continue;\n        var life = 1 - smooth(lt);\n        var appear = smooth(lt \/ 0.3);\n        var ga = 0.8 * appear * fadeAll * (1 - 0.6 * smooth((lt - 0.65) \/ 0.35));\n        if (ga <= 0.01) continue;\n        ctx.fillStyle = p.col; ctx.strokeStyle = p.col;\n        ctx.globalAlpha = ga;\n        var nr = p.r * (0.45 + 0.55 * life) * (1 + 0.12 * Math.sin(sec * p.pf + p.ph) * life);\n        ctx.beginPath(); ctx.arc(cx, cy, nr, 0, 6.283); ctx.fill();\n        if (life > 0.05) {\n          for (var n = 0; n < p.el.length; n++) {\n            var e = p.el[n];\n            var rx = e.rx * life, ry = rx * e.fl, ct = Math.cos(e.tilt), st = Math.sin(e.tilt);\n            ctx.globalAlpha = ga * 0.25 * life;\n            ctx.beginPath(); ctx.ellipse(cx, cy, rx, ry, e.tilt, 0, 6.283); ctx.stroke();\n            var an = e.a + sec * e.sp, ex = Math.cos(an) * rx, ey = Math.sin(an) * ry;\n            ctx.globalAlpha = ga * life;\n            ctx.beginPath(); ctx.arc(cx + ex * ct - ey * st, cy + ex * st + ey * ct, Math.max(0.5, step * 0.1), 0, 6.283); ctx.fill();\n          }\n        }\n      }\n      ctx.globalAlpha = 1;\n      requestAnimationFrame(frame);\n    }\n    requestAnimationFrame(frame);\n  }\n\n  \/\/ Variante : l'image na\u00eet de neurones blancs ; l\u00e0 o\u00f9 leurs dendrites poussent, la peinture appara\u00eet\n  function runNeurones() {\n    var TOT = 5600, TL = 1400;\n    var wrap = img.parentElement;\n    var r0 = img.getBoundingClientRect();\n    var W = Math.round(r0.width), H = Math.round(r0.height);\n    if (!W) { img.style.opacity = ''; return; }\n    if (getComputedStyle(wrap).position === 'static') wrap.style.position = 'relative';\n    var dpr = Math.min(window.devicePixelRatio || 1, 2);\n    var cv = document.createElement('canvas');\n    cv.className = 'op-neuro-canvas';\n    cv.width = W * dpr; cv.height = H * dpr;\n    cv.style.cssText = 'position:absolute;left:' + img.offsetLeft + 'px;top:' + img.offsetTop + 'px;width:' + W + 'px;height:' + H + 'px;pointer-events:none;z-index:2;';\n    wrap.appendChild(cv);\n    var ctx = cv.getContext('2d');\n    var mk = document.createElement('canvas');\n    mk.width = W; mk.height = H;\n    var mctx = mk.getContext('2d');\n\n    \/\/ Une dizaine de grands neurones, qui s'\u00e9veillent du centre vers les bords\n    var cell = Math.sqrt(W * H \/ 11);\n    var cxm = W \/ 2, cym = H \/ 2, maxd = Math.sqrt(cxm * cxm + cym * cym);\n    \/\/ placement libre, sans grille : on \u00e9vite seulement que deux neurones se collent\n    var spots = [], tries = 0;\n    while (spots.length < 11) {\n      tries++;\n      if (tries > 600) break;\n      var cxs = rnd(0.06, 0.94) * W, cys = rnd(0.05, 0.95) * H, okp = true;\n      for (var q0 = 0; q0 < spots.length; q0++) {\n        var ddx = spots[q0][0] - cxs, ddy = spots[q0][1] - cys;\n        if (ddx * ddx + ddy * ddy < cell * cell * 0.45) { okp = false; break; }\n      }\n      if (okp) spots.push([cxs, cys]);\n    }\n    var neurons = [];\n    for (var si = 0; si < spots.length; si++) {\n      var nx = spots[si][0], ny = spots[si][1];\n      var dn = Math.sqrt((nx - cxm) * (nx - cxm) + (ny - cym) * (ny - cym)) \/ maxd;\n      var segs = [], dots = [];\n      \/\/ branches irr\u00e9guli\u00e8res : \u00e9carts in\u00e9gaux, longueurs tr\u00e8s vari\u00e9es\n      var nb = 3 + ((Math.random() * 4) | 0), gaps = [], gs = 0;\n      for (var b0 = 0; b0 < nb; b0++) { var gg = rnd(0.4, 1.8); gaps.push(gg); gs += gg; }\n      var ang0 = rnd(0, 6.283);\n      for (var b = 0; b < nb; b++) {\n        ang0 += gaps[b] \/ gs * 6.283;\n        grow(nx, ny, ang0, rnd(0.28, 0.72) * cell, 0, rnd(0.05, 0.22), segs, dots);\n      }\n      \/\/ contour du corps cellulaire : une tache, pas un cercle\n      var blob = [];\n      for (var bq = 0; bq < 9; bq++) blob.push(rnd(0.72, 1.3));\n      neurons.push({ x: nx, y: ny, rs: cell * rnd(0.06, 0.08), s: dn * 0.42 + rnd(0, 0.1), gd: rnd(0.45, 0.58),\n                     segs: segs, dots: dots, blob: blob,\n                     ticks: [rnd(0, 6.283), rnd(0, 6.283), rnd(0, 6.283), rnd(0, 6.283)].slice(0, 2 + ((Math.random() * 3) | 0)),\n                     nox: rnd(-0.25, 0.25), noy: rnd(-0.25, 0.25) });\n    }\n    function grow(x, y, ang, len, depth, t0, segs, dots) {\n      var ex = x + Math.cos(ang) * len, ey = y + Math.sin(ang) * len;\n      var bend = rnd(-0.45, 0.45) * len;\n      var qx = (x + ex) \/ 2 - Math.sin(ang) * bend, qy = (y + ey) \/ 2 + Math.cos(ang) * bend;\n      var t1 = Math.min(1, t0 + rnd(0.2, 0.3));\n      \/\/ trait de plume : l\u00e9ger trembl\u00e9, petites \u00e9pines et perles, comme dans le dessin\n      var jit = [], spurs = [], beads = [];\n      for (var q = 0; q <= 10; q++) jit.push(q === 0 ? 0 : rnd(-1, 1) * len * 0.05);\n      var ns = (Math.random() * 3) | 0;\n      for (var q2 = 0; q2 < ns; q2++) spurs.push({ t: rnd(0.25, 0.9), a: (Math.random() < 0.5 ? -1 : 1) * rnd(0.5, 1.1), l: rnd(4, 9) * (1 - depth * 0.18) });\n      if (Math.random() < 0.35) beads.push(rnd(0.3, 0.8));\n      segs.push({ x0: x, y0: y, qx: qx, qy: qy, x1: ex, y1: ey, a: t0, b: t1, d: depth, len: len, ang: ang,\n                  nx: -Math.sin(ang), ny: Math.cos(ang), j: jit, spurs: spurs, beads: beads,\n                  bw: cell * [0.2, 0.14, 0.09, 0.06][depth], w: [2.2, 1.5, 1.05, 0.8][depth] });\n      if (depth < 3) {\n        var kids = Math.random() < 0.8 ? 2 : 1;\n        for (var k = 0; k < kids; k++) grow(ex, ey, ang + rnd(-0.95, 0.95), len * rnd(0.4, 0.85), depth + 1, t1, segs, dots);\n      }\n      dots.push({ x: ex, y: ey, t: t1, r: [3, 2.4, 1.8, 1.4][depth] });\n    }\n    function quad(s, p) {\n      var u = 1 - p;\n      return [u * u * s.x0 + 2 * u * p * s.qx + p * p * s.x1, u * u * s.y0 + 2 * u * p * s.qy + p * p * s.y1];\n    }\n    function pt(s, u) {\n      var b = quad(s, u), jj = s.j[Math.round(u * 10)];\n      return [b[0] + s.nx * jj, b[1] + s.ny * jj];\n    }\n    \/\/ trait effil\u00e9 et trembl\u00e9, repass\u00e9 une seconde fois comme \u00e0 la plume\n    function ink(c, s, p, alpha) {\n      var n = Math.max(1, Math.round(p * 10)), prev = [s.x0, s.y0];\n      for (var st = 1; st <= n; st++) {\n        var cur = pt(s, p * st \/ n);\n        c.globalAlpha = alpha; c.lineWidth = s.w * (1 - 0.55 * st \/ 10);\n        c.beginPath(); c.moveTo(prev[0], prev[1]); c.lineTo(cur[0], cur[1]); c.stroke();\n        c.globalAlpha = alpha * 0.4; c.lineWidth = s.w * 0.5;\n        c.beginPath(); c.moveTo(prev[0] + 0.7, prev[1] + 0.5); c.lineTo(cur[0] + 0.7, cur[1] + 0.5); c.stroke();\n        prev = cur;\n      }\n      for (var k = 0; k < s.spurs.length; k++) {\n        var sp = s.spurs[k];\n        if (p < sp.t) continue;\n        var o = pt(s, sp.t), aa = s.ang + sp.a;\n        c.globalAlpha = alpha * 0.9; c.lineWidth = 0.7;\n        c.beginPath(); c.moveTo(o[0], o[1]); c.lineTo(o[0] + Math.cos(aa) * sp.l, o[1] + Math.sin(aa) * sp.l); c.stroke();\n      }\n      for (var k2 = 0; k2 < s.beads.length; k2++) {\n        if (p < s.beads[k2]) continue;\n        var bp = pt(s, s.beads[k2]);\n        c.globalAlpha = alpha; c.beginPath(); c.arc(bp[0], bp[1], 1.6, 0, 6.283); c.fill();\n      }\n    }\n    function blobPath(c, n, r) {\n      var m = n.blob.length, P = [];\n      for (var q = 0; q < m; q++) { var a = q \/ m * 6.283; P.push([n.x + Math.cos(a) * r * n.blob[q], n.y + Math.sin(a) * r * n.blob[q]]); }\n      c.beginPath();\n      c.moveTo((P[0][0] + P[m - 1][0]) \/ 2, (P[0][1] + P[m - 1][1]) \/ 2);\n      for (var q2 = 0; q2 < m; q2++) { var A = P[q2], B = P[(q2 + 1) % m]; c.quadraticCurveTo(A[0], A[1], (A[0] + B[0]) \/ 2, (A[1] + B[1]) \/ 2); }\n      c.closePath();\n    }\n    function path(c, s, p) {\n      c.beginPath(); c.moveTo(s.x0, s.y0);\n      for (var st = 1; st <= 10; st++) { var pt = quad(s, p * st \/ 10); c.lineTo(pt[0], pt[1]); }\n    }\n    function ease(v) { v = clamp(v); return 1 - Math.pow(1 - v, 2); }\n\n    var END = 1 + TL \/ TOT, t0 = performance.now();\n    function frame(now) {\n      var t = (now - t0) \/ TOT;\n      if (t >= END) { cv.remove(); img.style.opacity = '1'; return; }\n      var fin = smooth((t - 1) \/ (END - 1));\n      img.style.opacity = fin.toFixed(3);\n\n      \/\/ 1. le masque : la peinture na\u00eet le long des dendrites et autour des corps cellulaires\n      mctx.clearRect(0, 0, W, H);\n      var baseA = smooth((t - 0.62) \/ 0.38);\n      if (baseA > 0) { mctx.globalAlpha = baseA; mctx.fillStyle = '#000'; mctx.fillRect(0, 0, W, H); mctx.globalAlpha = 1; }\n      mctx.strokeStyle = '#000'; mctx.fillStyle = '#000'; mctx.lineCap = 'round';\n      mctx.shadowColor = '#000'; mctx.shadowBlur = 14;\n      for (var i = 0; i < neurons.length; i++) {\n        var n = neurons[i], g = ease((t - n.s) \/ n.gd);\n        if (g <= 0) continue;\n        mctx.beginPath(); mctx.arc(n.x, n.y, cell * 0.22 * Math.min(1, g * 3), 0, 6.283); mctx.fill();\n        for (var k = 0; k < n.segs.length; k++) {\n          var s = n.segs[k], p = clamp((g - s.a) \/ (s.b - s.a));\n          if (p <= 0) continue;\n          mctx.lineWidth = s.bw * (0.6 + 0.4 * p);\n          path(mctx, s, p); mctx.stroke();\n        }\n      }\n      mctx.shadowBlur = 0;\n\n      ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n      ctx.clearRect(0, 0, W, H);\n      ctx.globalCompositeOperation = 'source-over';\n      ctx.drawImage(img, 0, 0, W, H);\n      ctx.globalCompositeOperation = 'destination-in';\n      ctx.drawImage(mk, 0, 0, W, H);\n      ctx.globalCompositeOperation = 'source-over';\n\n      \/\/ 2. les neurones blancs : lumineux pendant qu'ils poussent, puis ils s'effacent dans l'image\n      ctx.strokeStyle = '#fff'; ctx.fillStyle = '#fff'; ctx.lineCap = 'round';\n      ctx.shadowColor = 'rgba(255,255,255,0.7)'; ctx.shadowBlur = 3;\n      for (var i2 = 0; i2 < neurons.length; i2++) {\n        var n2 = neurons[i2], g2 = clamp((t - n2.s) \/ n2.gd);\n        if (g2 <= 0) continue;\n        var after = clamp((t - n2.s - n2.gd) \/ 0.25);           \/\/ temps \u00e9coul\u00e9 apr\u00e8s la croissance\n        var na = (1 - smooth(after)) * (1 - fin);\n        if (na <= 0.01) continue;\n        var sr = n2.rs * ease(g2 \/ 0.2);\n        \/\/ corps cellulaire dessin\u00e9 : double cercle un peu irr\u00e9gulier, noyau, petites \u00e9pines\n        ctx.globalAlpha = na; ctx.lineWidth = 1.6;\n        blobPath(ctx, n2, sr); ctx.stroke();\n        ctx.globalAlpha = na * 0.45; ctx.lineWidth = 0.7;\n        ctx.save(); ctx.translate(0.9, -0.7); blobPath(ctx, n2, sr * 1.1); ctx.stroke(); ctx.restore();\n        ctx.globalAlpha = na;\n        ctx.beginPath(); ctx.ellipse(n2.x + n2.nox * sr, n2.y + n2.noy * sr, sr * 0.36, sr * 0.3, n2.nox * 3, 0, 6.283); ctx.fill();\n        for (var tk = 0; tk < n2.ticks.length; tk++) {\n          var ta = n2.ticks[tk];\n          ctx.lineWidth = 0.7;\n          ctx.beginPath(); ctx.moveTo(n2.x + Math.cos(ta) * sr * 1.1, n2.y + Math.sin(ta) * sr * 1.1);\n          ctx.lineTo(n2.x + Math.cos(ta + 0.2) * sr * (1.45 + tk * 0.12), n2.y + Math.sin(ta + 0.2) * sr * (1.45 + tk * 0.12)); ctx.stroke();\n        }\n        for (var k2 = 0; k2 < n2.segs.length; k2++) {\n          var s2 = n2.segs[k2], p2 = clamp((g2 - s2.a) \/ (s2.b - s2.a));\n          if (p2 <= 0) continue;\n          \/\/ chaque branche brille en poussant puis p\u00e2lit une fois achev\u00e9e\n          var sa = 1 - 0.55 * smooth((g2 - s2.b) \/ 0.25);\n          ink(ctx, s2, p2, na * sa);\n        }\n        for (var d = 0; d < n2.dots.length; d++) {\n          var dt = n2.dots[d];\n          if (g2 < dt.t) continue;\n          ctx.globalAlpha = na * 0.9;\n          ctx.beginPath(); ctx.arc(dt.x, dt.y, dt.r, 0, 6.283); ctx.fill();\n        }\n      }\n      ctx.globalAlpha = 1; ctx.shadowBlur = 0;\n      requestAnimationFrame(frame);\n    }\n    requestAnimationFrame(frame);\n  }\n\n  function run() { if (MODE === 'fondu') { img.classList.add('op-fondu-go'); } else if (MODE === 'atomes') { runAtomes(); } else { runNeurones(); } }\n\n  \/\/ L'arbre prend exactement la hauteur du formulaire (ordinateur), pour que les deux blocs soient align\u00e9s haut et bas\n  function syncHeight() {\n    var form = document.querySelector('.wpforms-container form');\n    if (!form) return;\n    var wr = img.parentElement;\n    if (window.innerWidth < 1000) { img.style.removeProperty('height'); img.style.removeProperty('max-height'); img.style.removeProperty('width'); img.style.removeProperty('max-width'); wr.style.removeProperty('height'); var col0 = img.closest('.stk-block-column'); if (col0) { col0.style.removeProperty('flex'); col0.style.removeProperty('width'); } return; }\n    img.style.setProperty('max-height', 'none', 'important');\n    var fh = Math.round(form.getBoundingClientRect().height);\n    var ratio = (img.naturalWidth \/ img.naturalHeight) || 0.75;\n    img.style.setProperty('height', fh + 'px', 'important');\n    var iw = Math.round(fh * ratio), col = img.closest('.stk-block-column');\n    img.style.setProperty('width', iw + 'px', 'important');\n    img.style.setProperty('max-width', 'none', 'important');\n    if (col) { col.style.setProperty('flex', '0 0 ' + iw + 'px', 'important'); col.style.setProperty('width', iw + 'px', 'important'); }\n    wr.style.setProperty('height', 'auto', 'important');\n  }\n  syncHeight();\n  window.addEventListener('load', syncHeight);\n  img.addEventListener('load', syncHeight);\n  window.addEventListener('resize', syncHeight);\n  ((document.fonts || {}).ready || Promise.resolve()).then(syncHeight);\n\n  function ready(cb) {\n    if (img.complete) { if (img.naturalWidth) { cb(); } else { img.style.opacity = ''; fieldsIn(); } return; }\n    img.addEventListener('load', cb, { once: true });\n    img.addEventListener('error', function () { img.style.opacity = ''; fieldsIn(); }, { once: true });\n  }\n  ready(function () {\n    if (!('IntersectionObserver' in window)) { run(); fieldsIn(); return; }\n    var io = new IntersectionObserver(function (en) {\n      en.forEach(function (x) { if (x.isIntersecting) { io.disconnect(); run(); fieldsIn(); } });\n    }, { threshold: 0.15 });\n    io.observe(img);\n  });\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>CONTACT<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-13","page","type-page","status-publish","hentry"],"blocksy_meta":{"page_title_panel":"","has_hero_section":"disabled","b5a8e8ecd73a2d1bdc083724b92bf358":"","hero_section":"type-1","hero_elements":[{"id":"custom_title","enabled":true,"heading_tag":"h1","title":"Home"},{"id":"custom_description","enabled":true,"description_visibility":{"desktop":true,"tablet":true,"mobile":false}},{"id":"custom_meta","enabled":false,"meta_elements":[{"id":"author","enabled":true,"label":"By","has_author_avatar":"yes","avatar_size":25},{"id":"post_date","enabled":true,"label":"On","date_format_source":"default","date_format":"M j, Y"},{"id":"updated_date","enabled":false,"label":"On","date_format_source":"default","date_format":"M j, Y"},{"id":"categories","enabled":false,"label":"In","style":"simple"},{"id":"comments","enabled":true}],"page_meta_elements":{"joined":true,"articles_count":true,"comments":true}},{"id":"breadcrumbs","enabled":false}],"7e154d28cd3433ebd2b52a65fa352287":"","hero_alignment1":"CT_CSS_SKIP_RULE","hero_margin":40,"hero_alignment2":"center","hero_vertical_alignment":"center","b06089ceb60e1c2358df3dd815344e31":"","hero_structure":"narrow","cd26de91d35cb1540fae797090dcc365":"","page_title_bg_type":"featured_image","custom_hero_background":{"attachment_id":null},"parallax":{"desktop":false,"tablet":false,"mobile":false},"7fd8ccdb4238d868f5d9c97d4ace46bf":"","hero_height":"250px","pageTitleFont":{"family":"Default","variation":"Default","size":"30px","line-height":"CT_CSS_SKIP_RULE","letter-spacing":"CT_CSS_SKIP_RULE","text-transform":"CT_CSS_SKIP_RULE","text-decoration":"CT_CSS_SKIP_RULE"},"pageTitleFontColor":{"default":{"color":"CT_CSS_SKIP_RULEDEFAULT"}},"pageMetaFont":{"family":"Default","variation":"n6","size":"12px","line-height":"1.3","letter-spacing":"CT_CSS_SKIP_RULE","text-transform":"uppercase","text-decoration":"CT_CSS_SKIP_RULE"},"pageMetaFontColor":{"default":{"color":"CT_CSS_SKIP_RULEDEFAULT"},"hover":{"color":"CT_CSS_SKIP_RULEDEFAULT"}},"page_meta_button_type_font_colors":{"default":{"color":"CT_CSS_SKIP_RULEDEFAULT"},"hover":{"color":"CT_CSS_SKIP_RULEDEFAULT"}},"page_meta_button_type_background_colors":{"default":{"color":"CT_CSS_SKIP_RULEDEFAULT"},"hover":{"color":"CT_CSS_SKIP_RULEDEFAULT"}},"pageExcerptFont":{"family":"Default","variation":"Default","size":"CT_CSS_SKIP_RULE","line-height":"CT_CSS_SKIP_RULE","letter-spacing":"CT_CSS_SKIP_RULE","text-transform":"CT_CSS_SKIP_RULE","text-decoration":"CT_CSS_SKIP_RULE"},"pageExcerptColor":{"default":{"color":"CT_CSS_SKIP_RULEDEFAULT"}},"breadcrumbsFont":{"family":"Default","variation":"Default","size":"CT_CSS_SKIP_RULE","line-height":"CT_CSS_SKIP_RULE","letter-spacing":"CT_CSS_SKIP_RULE","text-transform":"CT_CSS_SKIP_RULE","text-decoration":"CT_CSS_SKIP_RULE"},"breadcrumbsFontColor":{"default":{"color":"CT_CSS_SKIP_RULEDEFAULT"},"initial":{"color":"CT_CSS_SKIP_RULEDEFAULT"},"hover":{"color":"CT_CSS_SKIP_RULEDEFAULT"}},"pageTitleOverlay":{"background_type":"color","background_pattern":"type-1","background_image":{"attachment_id":null,"x":0,"y":0},"gradient":"linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)","background_repeat":"repeat","background_size":"auto","background_attachment":"scroll","patternColor":{"default":{"color":"#e5e7ea"}},"overlayColor":{"default":{"color":"CT_CSS_SKIP_RULE"}},"backgroundColor":{"default":{"color":"CT_CSS_SKIP_RULE"}}},"pageTitleBackground":{"background_type":"color","background_pattern":"type-1","background_image":{"attachment_id":null,"x":0,"y":0},"gradient":"linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)","background_repeat":"repeat","background_size":"auto","background_attachment":"scroll","patternColor":{"default":{"color":"#e5e7ea"}},"overlayColor":{"default":{"color":"CT_CSS_SKIP_RULE"}},"backgroundColor":{"default":{"color":"var(--theme-palette-color-6)"}}},"pageTitlePadding":{"top":"50px","bottom":"50px","left":"auto","right":"auto","linked":true},"525648c3a0104dc66d7938914252da9e":"","page_structure_type":"default","4f39fcfae578e432fc1b7e5a804f4dc0":"","content_style_source":"inherit","content_style":"wide","vertical_spacing_source":"inherit","content_area_spacing":"none","background":{"background_type":"color","background_pattern":"type-1","background_image":{"attachment_id":null,"x":0,"y":0},"gradient":"linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)","background_repeat":"repeat","background_size":"auto","background_attachment":"scroll","patternColor":{"default":{"color":"#e5e7ea"}},"overlayColor":{"default":{"color":"CT_CSS_SKIP_RULE"}},"backgroundColor":{"default":{"color":"CT_CSS_SKIP_RULE"}}},"content_background":{"background_type":"color","background_pattern":"type-1","background_image":{"attachment_id":null,"x":0,"y":0},"gradient":"linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)","background_repeat":"repeat","background_size":"auto","background_attachment":"scroll","patternColor":{"default":{"color":"#e5e7ea"}},"overlayColor":{"default":{"color":"CT_CSS_SKIP_RULE"}},"backgroundColor":{"default":{"color":"var(--theme-palette-color-8)"}}},"content_boxed_shadow":{"inherit":false,"blur":18,"spread":-6,"v_offset":12,"h_offset":0,"inset":false,"enable":true,"color":{"color":"rgba(34, 56, 101, 0.04)"}},"boxed_content_spacing":{"desktop":{"top":"40px","bottom":"40px","left":"40px","right":"40px","linked":true},"tablet":{"top":"35px","bottom":"35px","left":"35px","right":"35px","linked":true},"mobile":{"top":"20px","bottom":"20px","left":"20px","right":"20px","linked":true}},"content_boxed_radius":{"top":"3px","bottom":"3px","left":"3px","right":"3px","linked":true},"2487fe51df1335eec2ccb15a676f5fb3":"","disable_featured_image":"no","disable_share_box":"no","disable_header":"no","disable_footer":"no","styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":8}},"_links":{"self":[{"href":"https:\/\/olivierpicy.com\/en\/wp-json\/wp\/v2\/pages\/13","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/olivierpicy.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/olivierpicy.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/olivierpicy.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/olivierpicy.com\/en\/wp-json\/wp\/v2\/comments?post=13"}],"version-history":[{"count":17,"href":"https:\/\/olivierpicy.com\/en\/wp-json\/wp\/v2\/pages\/13\/revisions"}],"predecessor-version":[{"id":1128,"href":"https:\/\/olivierpicy.com\/en\/wp-json\/wp\/v2\/pages\/13\/revisions\/1128"}],"wp:attachment":[{"href":"https:\/\/olivierpicy.com\/en\/wp-json\/wp\/v2\/media?parent=13"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}