{"id":51,"date":"2026-04-30T11:28:08","date_gmt":"2026-04-30T11:28:08","guid":{"rendered":"https:\/\/\u00e9milienplisson.fr\/?page_id=51"},"modified":"2026-07-08T20:07:42","modified_gmt":"2026-07-08T20:07:42","slug":"home","status":"publish","type":"page","link":"https:\/\/\u00e9milienplisson.fr\/","title":{"rendered":"HOME"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"51\" class=\"elementor elementor-51\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2491b1c e-con-full e-flex e-con e-parent\" data-id=\"2491b1c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-20013cb elementor-widget elementor-widget-shortcode\" data-id=\"20013cb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n            <div id=\"experience-ep\"\n                 class=\"js-hero-interactive-trigger\"\n                 data-video-default=\"https:\/\/\u00e9milienplisson.fr\/wp-content\/uploads\/2026\/06\/TEASER-Taxi-Moira_alauneeee.mp4\"\n                 data-video-menu=\"https:\/\/\u00e9milienplisson.fr\/wp-content\/uploads\/2026\/06\/TEASER-Taxi-Moira_alauneeee.mp4\"\n                 data-video-full=\"https:\/\/\u00e9milienplisson.fr\/wp-content\/uploads\/2026\/05\/TEASER-Taxi-Moira.mp4\"\n                 style=\"cursor: none !important;\">\n\n                <div class=\"sticky-wrapper\">\n\n                    <div class=\"header-title\">\n                        <h1>\u00c9milien Plisson <span>Vid\u00e9aste<\/span><\/h1>\n                    <\/div>\n\n                    <video id=\"video-fond\" autoplay muted loop playsinline preload=\"auto\">\n                        <source id=\"hero-video-source\" src=\"https:\/\/\u00e9milienplisson.fr\/wp-content\/uploads\/2026\/06\/TEASER-Taxi-Moira_alauneeee.mp4\" type=\"video\/mp4\">\n                    <\/video>\n\n                    <!-- Masque SVG plein \u00e9cran -->\n                    <svg id=\"svg-mask\" viewBox=\"0 0 841.89 595.28\" preserveAspectRatio=\"xMidYMid slice\">\n                        <defs>\n                            <mask id=\"logoMaskComplex\">\n                                <rect x=\"-500%\" y=\"-500%\" width=\"1000%\" height=\"1000%\" fill=\"white\" \/>\n                                <g id=\"logo-group-anim\" fill=\"black\" stroke=\"black\" stroke-width=\"0\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"transform: scale(0.5); transform-origin: center; transform-box: fill-box;\">\n                                    <path d=\"M350.21,222.8c-21.45,15.81-48.72,16.79-75.09,17.74-4.06.14-8.26.29-12.31.49-22.15.84-52.49,1.98-77.73,9.65-2.78.69-5.95,1.59-9.31,2.54-9.91,2.81-22.24,6.31-30.56,5.92h-.11c-12.37-.02-25.41-4.58-35.77-12.54-10.82-8.29-17.71-19.41-19.45-31.31v-4.04c2-12.61,9-23.44,20.25-31.31,15.45-10.82,38.21-15.27,57.97-11.35,9.66,2.01,19.4,5.47,28.81,8.82,13.22,4.71,26.89,9.58,41.09,10.78h.12c14.63.56,29.69-2.75,44.27-5.95,15-3.29,30.51-6.69,45.39-5.82,15.03.63,28.68,9.44,32.46,20.96,2.91,8.85-.65,17.88-10.03,25.42Z\"\/>\n                                    <path d=\"M336.82,113.16l-.12.06c-1.77.93-3.67,1.91-5.66,2.94-8.53,4.41-18.2,9.41-25.34,14.02-.92.54-1.85,1.07-2.78,1.61-12.12,7.05-24.65,14.34-38.33,14.46-13.74.49-21.45-9.08-23.9-17.4-2.54-8.65-1.19-21.33,10.99-28.58l.1-.06c8.86-5.83,16.54-7.79,26.4-9.92,10.98-1.64,21.68-5.27,32.03-8.77,5.67-1.92,11.52-3.91,17.26-5.5h9.42c10.38,2.24,12.74,9.68,13.23,13.93,1.05,9.29-4.66,19.27-13.3,23.21Z\"\/>\n                                    <path d=\"M640.36,365.14c-29.5,12.62-55.82,18.69-78.27,18.04-13.96-.09-27.96-8.02-35.65-20.22-6.63-10.52-7.52-22.2-2.51-32.89,9.65-20.17,37.87-25.62,62.76-30.42,7.29-1.41,14.18-2.74,20.12-4.35,22.35-5.11,41.59-19.5,50.2-37.55l.12-.29c4.73-14.37,4.1-25.58-1.87-33.32-11.97-15.51-41.73-13.68-65.64-12.22-3.16.2-6.17.38-8.98.51-2.03.10-4.15.22-6.32.34-13.24.76-28.25,1.62-39.37-3.18-10.71-4.99-16.19-12.59-15.43-21.4.94-10.88,11.11-21.06,24.75-24.75l.11-.04c9.53-3.05,20.13-4.04,30.39-5.01l1.02-.1c9.78-1.38,19.87-.85,29.62-.33,6.28.33,12.76.67,19.14.52,1.77-.01,3.56-.03,5.37-.05,7.9-.08,16.08-.17,23.68.66,17.9,1.79,43.69,6.9,64.9,21.12,20.23,13.57,31.37,32.21,33.1,55.42,1.65,54.66-56.37,102.74-111.24,129.51Z\"\/>\n                                    <path d=\"M506.28,469.66c0,12.91-5.47,24.77-16.29,34.48-9.8,8.8-21.63,10.67-33.3,5.27-15.19-7.03-25.88-24.22-25.42-40.88v-.17c-.6-14.34,1.14-31.94,2.68-47.47.39-3.95.77-7.78,1.10-11.44.7-8.79.42-18.24.15-27.38-.33-11.27-.67-22.91.82-33.39.57-2.95,1.29-5.91,2.06-9.05,1.57-6.40,3.19-13.01,3.37-19.61.01-5.72.11-10.68.2-15.06.5-24.89.66-32.42-18.94-60.24-5.79-10.46-6.2-23.96-1.12-37.05,5.63-14.52,17.12-26.2,29.98-30.49,12.61-4.17,26.2-1.73,36.35,6.52,10.08,8.2,15.01,20.42,13.51,33.53l-.02.19c-.13,3.76-1.79,13.16-4.68,26.50-2.35,10.88-2.41,22.19-2.46,33.13-.06,10.48-.11,21.32-2.23,31.54l-.02.10c-2.45,14.95-1.72,30.53-.67,43.84.28,2.86-1.08,24.7-1.73,35.19-.21,3.26-.36,5.76-.42,6.87-1.49,14.83,1.01,30.24,7.03,43.4l.14.26c6.62,10.76,9.91,21.4,9.91,31.41Z\"\/>\n                                    <path d=\"M342.63,378.45c-18.85,13.45-44.27,11.06-62.34,6.68-16.31-3.56-33.31-6.89-49.56-6.89-5.34,0-10.61.36-15.74,1.19-5.49.89-11.58,1.48-18.03,2.11-8.80.85-17.89,1.74-25.64,3.45-22.73,4.51-54.57,4.20-69.53-11.52-3.77-3.88-5.56-8.61-5.32-14.06.34-7.51,4.66-15.70,11.28-21.38l.16-.15c5.95-6.06,23.66-19.59,59.36-14.31,12.91,2.43,26.73,3.35,38.91,2.58,11.48-.14,24.73-3.37,39.39-9.61,27.87-9.52,56.72-12.15,79.19-7.23,19.89,5.29,34.44,18.24,37.08,33,2.32,12.93-4.5,25.77-19.21,36.14Z\"\/>\n                                    <path d=\"M332.89,519.01c-10.32.16-21.96-1.45-33.21-3.03-5.04-.70-9.79-1.37-14.45-1.88-10.05-.83-22.21-1.22-33.96-1.59-7.84-.25-15.24-.49-21.77-.84-5.44-.37-11.69-.86-18.30-1.38-7.71-.60-15.68-1.22-22.26-1.64-10.61-.74-24.24-1.11-35.53,2.60-1.23.40-2.52.83-3.86,1.28-5.02,1.69-10.71,3.60-15.48,4.08h-.11c-9.67,1.39-19.62-1.97-25.96-8.77-5.66-6.08-7.80-14.01-6.03-22.33,6.80-23.49,26.69-22.82,47.74-22.11,2.26.07,4.52.15,6.75.19l1.35.03.12-.18c3.51-.42,14.10-1.70,14.10-1.70l.13-.02c2.67-.46,5.42-.95,8.21-1.44,25.74-4.57,54.90-9.75,78.91-6.83,19.08,3.85,39.69,3.44,56.53-1.14,14.44-3.64,36.30-4.55,50.40,4.89,6.89,4.61,11.02,11.25,12.28,19.72,1.03,23.18-22.71,40.45-45.60,42.09Z\"\/>\n                                <\/g>\n                                <circle class=\"rond-anim\" cx=\"370\" cy=\"200\" r=\"0\" fill=\"black\" \/>\n                                <circle class=\"rond-anim\" cx=\"485\" cy=\"330\" r=\"0\" fill=\"black\" \/>\n                                <circle class=\"rond-anim\" cx=\"370\" cy=\"330\" r=\"0\" fill=\"black\" \/>\n                            <\/mask>\n                        <\/defs>\n                        <rect x=\"-500%\" y=\"-500%\" width=\"1000%\" height=\"1000%\" fill=\"#C6C6C6\" mask=\"url(#logoMaskComplex)\" \/>\n\n                        <!-- Copie invisible des lettres, rendue normalement (hors mask) uniquement\n                             pour mesurer sa position\/taille r\u00e9elle \u00e0 l'\u00e9cran via getBoundingClientRect() -->\n                        <g id=\"logo-ref\" fill=\"black\" style=\"opacity:0; transform: scale(0.5); transform-origin: center; transform-box: fill-box;\">\n                            <path d=\"M350.21,222.8c-21.45,15.81-48.72,16.79-75.09,17.74-4.06.14-8.26.29-12.31.49-22.15.84-52.49,1.98-77.73,9.65-2.78.69-5.95,1.59-9.31,2.54-9.91,2.81-22.24,6.31-30.56,5.92h-.11c-12.37-.02-25.41-4.58-35.77-12.54-10.82-8.29-17.71-19.41-19.45-31.31v-4.04c2-12.61,9-23.44,20.25-31.31,15.45-10.82,38.21-15.27,57.97-11.35,9.66,2.01,19.4,5.47,28.81,8.82,13.22,4.71,26.89,9.58,41.09,10.78h.12c14.63.56,29.69-2.75,44.27-5.95,15-3.29,30.51-6.69,45.39-5.82,15.03.63,28.68,9.44,32.46,20.96,2.91,8.85-.65,17.88-10.03,25.42Z\"\/>\n                            <path d=\"M336.82,113.16l-.12.06c-1.77.93-3.67,1.91-5.66,2.94-8.53,4.41-18.2,9.41-25.34,14.02-.92.54-1.85,1.07-2.78,1.61-12.12,7.05-24.65,14.34-38.33,14.46-13.74.49-21.45-9.08-23.9-17.4-2.54-8.65-1.19-21.33,10.99-28.58l.1-.06c8.86-5.83,16.54-7.79,26.4-9.92,10.98-1.64,21.68-5.27,32.03-8.77,5.67-1.92,11.52-3.91,17.26-5.5h9.42c10.38,2.24,12.74,9.68,13.23,13.93,1.05,9.29-4.66,19.27-13.3,23.21Z\"\/>\n                            <path d=\"M640.36,365.14c-29.5,12.62-55.82,18.69-78.27,18.04-13.96-.09-27.96-8.02-35.65-20.22-6.63-10.52-7.52-22.2-2.51-32.89,9.65-20.17,37.87-25.62,62.76-30.42,7.29-1.41,14.18-2.74,20.12-4.35,22.35-5.11,41.59-19.5,50.2-37.55l.12-.29c4.73-14.37,4.1-25.58-1.87-33.32-11.97-15.51-41.73-13.68-65.64-12.22-3.16.2-6.17.38-8.98.51-2.03.10-4.15.22-6.32.34-13.24.76-28.25,1.62-39.37-3.18-10.71-4.99-16.19-12.59-15.43-21.4.94-10.88,11.11-21.06,24.75-24.75l.11-.04c9.53-3.05,20.13-4.04,30.39-5.01l1.02-.1c9.78-1.38,19.87-.85,29.62-.33,6.28.33,12.76.67,19.14.52,1.77-.01,3.56-.03,5.37-.05,7.9-.08,16.08-.17,23.68.66,17.9,1.79,43.69,6.9,64.9,21.12,20.23,13.57,31.37,32.21,33.1,55.42,1.65,54.66-56.37,102.74-111.24,129.51Z\"\/>\n                            <path d=\"M506.28,469.66c0,12.91-5.47,24.77-16.29,34.48-9.8,8.8-21.63,10.67-33.3,5.27-15.19-7.03-25.88-24.22-25.42-40.88v-.17c-.6-14.34,1.14-31.94,2.68-47.47.39-3.95.77-7.78,1.10-11.44.7-8.79.42-18.24.15-27.38-.33-11.27-.67-22.91.82-33.39.57-2.95,1.29-5.91,2.06-9.05,1.57-6.40,3.19-13.01,3.37-19.61.01-5.72.11-10.68.2-15.06.5-24.89.66-32.42-18.94-60.24-5.79-10.46-6.2-23.96-1.12-37.05,5.63-14.52,17.12-26.2,29.98-30.49,12.61-4.17,26.2-1.73,36.35,6.52,10.08,8.2,15.01,20.42,13.51,33.53l-.02.19c-.13,3.76-1.79,13.16-4.68,26.50-2.35,10.88-2.41,22.19-2.46,33.13-.06,10.48-.11,21.32-2.23,31.54l-.02.10c-2.45,14.95-1.72,30.53-.67,43.84.28,2.86-1.08,24.7-1.73,35.19-.21,3.26-.36,5.76-.42,6.87-1.49,14.83,1.01,30.24,7.03,43.4l.14.26c6.62,10.76,9.91,21.4,9.91,31.41Z\"\/>\n                            <path d=\"M342.63,378.45c-18.85,13.45-44.27,11.06-62.34,6.68-16.31-3.56-33.31-6.89-49.56-6.89-5.34,0-10.61.36-15.74,1.19-5.49.89-11.58,1.48-18.03,2.11-8.80.85-17.89,1.74-25.64,3.45-22.73,4.51-54.57,4.20-69.53-11.52-3.77-3.88-5.56-8.61-5.32-14.06.34-7.51,4.66-15.70,11.28-21.38l.16-.15c5.95-6.06,23.66-19.59,59.36-14.31,12.91,2.43,26.73,3.35,38.91,2.58,11.48-.14,24.73-3.37,39.39-9.61,27.87-9.52,56.72-12.15,79.19-7.23,19.89,5.29,34.44,18.24,37.08,33,2.32,12.93-4.5,25.77-19.21,36.14Z\"\/>\n                            <path d=\"M332.89,519.01c-10.32.16-21.96-1.45-33.21-3.03-5.04-.70-9.79-1.37-14.45-1.88-10.05-.83-22.21-1.22-33.96-1.59-7.84-.25-15.24-.49-21.77-.84-5.44-.37-11.69-.86-18.30-1.38-7.71-.60-15.68-1.22-22.26-1.64-10.61-.74-24.24-1.11-35.53,2.60-1.23.40-2.52.83-3.86,1.28-5.02,1.69-10.71,3.60-15.48,4.08h-.11c-9.67,1.39-19.62-1.97-25.96-8.77-5.65-6.08-7.80-14.01-6.03-22.33,6.80-23.49,26.69-22.82,47.74-22.11,2.26.07,4.52.15,6.75.19l1.35.03.12-.18c3.51-.42,14.10-1.70,14.10-1.70l.13-.02c2.67-.46,5.42-.95,8.21-1.44,25.74-4.57,54.90-9.75,78.91-6.83,19.08,3.85,39.69,3.44,56.53-1.14,14.44-3.64,36.30-4.55,50.40,4.89,6.89,4.61,11.02,11.25,12.28,19.72,1.03,23.18-22.71,40.45-45.60,42.09Z\"\/>\n                        <\/g>\n                    <\/svg>\n\n                    <div id=\"logo-container\">\n                        <img decoding=\"async\" id=\"logo-texture\"\n                             src=\"https:\/\/\u00e9milienplisson.fr\/wp-content\/uploads\/2026\/07\/logoo-new.png\"\n                             alt=\"Logo Texture\">\n                    <\/div>\n\n                    <script>\n                    (function() {\n                        var svg = document.getElementById('svg-mask');\n                        var ref = document.getElementById('logo-ref');\n                        var container = document.getElementById('logo-container');\n                        if (!svg || !ref || !container) return;\n\n                        function updateAspect() {\n                            svg.setAttribute('preserveAspectRatio',\n                                (window.innerWidth > 1024 || window.innerWidth > window.innerHeight)\n                                    ? 'xMidYMid slice'\n                                    : 'xMidYMid meet');\n                        }\n\n                        function updateContainer() {\n                            var rect = ref.getBoundingClientRect();\n                            container.style.top    = rect.top + 'px';\n                            container.style.left   = rect.left + 'px';\n                            container.style.width  = rect.width + 'px';\n                            container.style.height = rect.height + 'px';\n                        }\n\n                        function update() {\n                            updateAspect();\n                            requestAnimationFrame(updateContainer);\n                        }\n\n                        update();\n                        window.addEventListener('resize', update);\n                    })();\n                    <\/script>\n\n                    <div class=\"info-overlay\">\n                        <div class=\"badge-group\">\n                            <div class=\"badge\">Derni\u00e8re Cr\u00e9ation<\/div>\n                                                            <div class=\"badge\">Teaser<\/div>\n                                                    <\/div>\n                        <div class=\"text-group\">\n                            <h1 class=\"main-title\">TAXI MOYRA<\/h1>\n                                                            <h2 class=\"sub-title\">Cieu Tau<\/h2>\n                                                    <\/div>\n                    <\/div>\n\n                <\/div>\n            <\/div>\n\n            <div id=\"emilien-fullscreen-lightbox\" style=\"position:fixed; top:0; left:0; width:100vw; height:100vh; background:#000000; z-index:999999; display:flex; align-items:center; justify-content:center; opacity:0; pointer-events:none; transition:opacity 0.4s cubic-bezier(0.4, 0, 0.2, 1); cursor: none !important;\">\n                <span id=\"close-emilien-lightbox\" style=\"position:absolute; top:40px; left:40px; color:#ffffff; font-family:sans-serif; font-size:13px; text-transform:uppercase; letter-spacing:2px; cursor:pointer; opacity:0.7; z-index:10;\">Retour<\/span>\n                <video id=\"emilien-lightbox-media\" controls playsinline style=\"max-width:100%; max-height:100%; aspect-ratio:16\/9; z-index:5;\"><\/video>\n            <\/div>\n\n            <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b2555a9 elementor-widget elementor-widget-html\" data-id=\"b2555a9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"fr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>\u00c9milien Plisson \u2014 Vid\u00e9aste<\/title>\n\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Archivo:ital,wght@0,100..900;1,100..900&display=swap\" rel=\"stylesheet\">\n\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/three.js\/r128\/three.min.js\"><\/script>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/gsap\/3.12.2\/gsap.min.js\"><\/script>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/gsap\/3.12.2\/CustomEase.min.js\"><\/script>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/gsap\/3.12.2\/ScrollTrigger.min.js\"><\/script>\n    <script src=\"https:\/\/unpkg.com\/lenis@1.1.13\/dist\/lenis.min.js\"><\/script>\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/flubber@0.4.2\/build\/flubber.min.js\"><\/script>\n\n    <style>\n        body, a, button, .portfolio-panel, #main-menu-toggle { cursor: none !important; }\n        .cursor-dot, .cursor-outline {\n            position: fixed; top: 0; left: 0; border-radius: 50%;\n            z-index: 2147483647; pointer-events: none; mix-blend-mode: exclusion;\n        }\n        .cursor-dot    { width: 4px; height: 4px; background-color: white; }\n        .cursor-outline { width: 40px; height: 40px; border: 1px solid white; }\n\n        *, *::before, *::after { box-sizing: border-box; }\n\n        @font-face {\n            font-family: 'Archivo Light Custom';\n            src: url('https:\/\/xn--milienplisson-9gb.fr\/wp-content\/uploads\/2026\/05\/Archivo-Light.ttf') format('truetype');\n            font-weight: 300; font-style: normal; font-display: swap;\n        }\n\n        :root {\n            --menu-font-family: 'Stack Sans Text', sans-serif;\n            --menu-text-size: 14px;\n            --link-text-size: 60px;\n            --text-color: #333333;\n            --link-color: #ffffff;\n        }\n\n        body, html { margin: 0; padding: 0; overflow-x: hidden; font-family: var(--menu-font-family); background-color: #000; }\n        html.lenis, html.lenis body { height: auto; }\n        .lenis.lenis-smooth { scroll-behavior: auto !important; }\n        .lenis.lenis-stopped { overflow: hidden; }\n\n        #ep-logo-container {\n            position: fixed; top: 12px; left: 21px; z-index: 10000;\n            pointer-events: none; opacity: 0; mix-blend-mode: exclusion;\n        }\n        #ep-logo-container img { width: 80px; height: auto; display: block; }\n\n        #main-menu-toggle {\n            position: fixed; top: 25px; right: 28px; z-index: 10000;\n            display: flex; flex-direction: column; justify-content: center; align-items: center;\n            gap: 4px; width: 45px; height: 45px; background-color: #ffffff;\n            border-radius: 50%; cursor: pointer; border: 1px solid #ffffff;\n            transition: transform 0.3s ease; opacity: 0;\n            mix-blend-mode: exclusion;\n        }\n        #main-menu-toggle:hover { transform: scale(1.1); }\n        .w-fscreen-menu-copy { display: none; }\n        .wkit-menu-toggle-icon {\n            position: relative; width: 18px; height: 12px;\n            display: flex; flex-direction: column; justify-content: space-between;\n        }\n        .w-fscreen-menu-bar { width: 18px; height: 2px; background-color: #1a1a1a; transition: all 0.3s ease; }\n        #main-menu-toggle.is-active .w-fscreen-menu-bar[data-position=\"top\"]    { transform: translateY(5px) rotate(45deg); }\n        #main-menu-toggle.is-active .w-fscreen-menu-bar[data-position=\"middle\"] { opacity: 0; }\n        #main-menu-toggle.is-active .w-fscreen-menu-bar[data-position=\"bottom\"] { transform: translateY(-5px) rotate(-45deg); }\n\n        .w-fscreen-menu {\n            position: fixed; top: 0; left: 0; width: 100%; height: 100vh;\n            background-color: #000000; z-index: 9999;\n            clip-path: polygon(0% 100%, 100% 100%, 100% 100%, 0% 100%);\n            display: flex; align-items: stretch; justify-content: flex-start;\n            overflow: hidden; pointer-events: none;\n        }\n\n        \/* \u2500\u2500\u2500 Panneau photo (gauche) \u2500\u2500\u2500 *\/\n        .fmenu-media {\n            position: relative; width: 50%; min-width: 280px; height: 100%;\n            flex-shrink: 0; background-color: #000;\n            overflow: hidden;\n        }\n        #menu-photo, #menu-bg-video {\n            position: absolute; inset: 0; width: 100%; height: 100%;\n            object-fit: cover; filter: grayscale(100%);\n            transition: opacity 0.5s ease;\n        }\n        #menu-photo { opacity: 1; z-index: 1; }\n        #menu-bg-video { opacity: 0; z-index: 2; pointer-events: none; }\n\n        \/* \u2500\u2500\u2500 Colonne droite : infos + liens \u2500\u2500\u2500 *\/\n        .fmenu-right {\n            flex: 1; display: flex; flex-direction: column; justify-content: space-between;\n            height: 100%; box-sizing: border-box;\n            padding: 35px 0 40px 0; position: relative; z-index: 10;\n        }\n        .fmenu-meta { display: flex; flex-direction: column; gap: 22px; padding: 0 40px 0 6%; }\n        .fmenu-meta-item { display: flex; flex-direction: column; gap: 2px; }\n        .fmenu-meta-label { font-family: sans-serif; font-size: 14px; color: rgba(255,255,255,0.55); }\n        .fmenu-meta-value { font-family: sans-serif; font-size: 15px; font-weight: 700; color: #ffffff; text-decoration: none; }\n        .fmenu-meta-link:hover { text-decoration: underline; }\n\n        .fmenu-links { display: flex; flex-direction: column; }\n        .fscreen-link {\n            display: block; width: 100%; box-sizing: border-box;\n            position: relative;\n            font-size: clamp(38px, 5.4vw, 80px); line-height: 0.92;\n            color: #ffffff !important; \/* force blanc \u2014 \u00e9vite le bleu de lien visit\u00e9 du th\u00e8me *\/\n            text-decoration: none; font-family: var(--menu-font-family);\n            padding: 4px 24px 4px 6%; margin: 0;\n            font-weight: 900; letter-spacing: -0.02em; opacity: 0;\n            transform: translateY(30px); text-align: left;\n            white-space: nowrap; \/* jamais de retour \u00e0 la ligne, tant pis si \u00e7a d\u00e9borde *\/\n            transition: transform 0.45s ease;\n        }\n        .fscreen-link:visited { color: #ffffff !important; }\n        .fscreen-link:hover { transform: translateX(16px) !important; }\n        .fscreen-link::before {\n            content: \"\\2022\";\n            position: absolute; left: calc(6% - 26px); top: 50%;\n            transform: translateY(-50%) scale(0.4);\n            opacity: 0;\n            transition: opacity 0.45s ease, transform 0.45s ease;\n        }\n        .fscreen-link:hover::before { opacity: 1; transform: translateY(-50%) scale(1); }\n\n        @media (max-width: 768px) {\n            .w-fscreen-menu { flex-direction: column; }\n            .fmenu-media { width: 100%; height: 28vh; }\n            .fmenu-right { padding: 24px 0; }\n            .fmenu-meta { padding: 0 6%; }\n            .fscreen-link { font-size: clamp(24px, 8vw, 40px); padding: 8px 20px 8px 6%; }\n        }\n\n        .custom-scroll-wrapper {\n            position: fixed; bottom: 35px; left: 49%; transform: translateX(-50%);\n            z-index: 9998; transition: opacity 0.6s ease, transform 0.6s ease;\n        }\n        .custom-scroll-wrapper.is-active { opacity: 0; pointer-events: none; }\n        .scroll-link { display: inline-flex; align-items: center; gap: 10px; text-decoration: none; cursor: pointer; color: #333333; }\n        .circle-icon {\n            width: 20px; height: 20px; border: 1px solid #333333; border-radius: 50%;\n            display: flex; align-items: center; justify-content: center; overflow: hidden; position: relative;\n        }\n        .circle-icon svg path { stroke: #333333; }\n        .label-text { font-family: var(--menu-font-family); font-size: 12px; font-weight: 400; letter-spacing: 0.15em; text-transform: uppercase; line-height: 1; }\n        .circle-icon svg { width: 10px; height: 10px; display: block; animation: arrow-cycle 1.5s infinite cubic-bezier(0.4, 0, 0.2, 1); }\n        @keyframes arrow-cycle {\n            0%   { transform: translateY(0);     opacity: 1; }\n            30%  { transform: translateY(15px);  opacity: 0; }\n            31%  { transform: translateY(-15px); opacity: 0; }\n            60%  { transform: translateY(0);     opacity: 1; }\n            100% { transform: translateY(0);     opacity: 1; }\n        }\n\n        \/* Hero \u2014 styles g\u00e9r\u00e9s par style.css du th\u00e8me enfant *\/\n        .text-group { display: flex; flex-direction: column; }\n        .main-title, .sub-title { font-family: 'Archivo', sans-serif; font-size: clamp(40px, 11vw, 110px); text-transform: uppercase; margin: 0; line-height: 0.85; letter-spacing: -0.03em; }\n        .main-title { font-weight: 700; }\n        .sub-title { font-family: 'Archivo Light Custom', 'Archivo', sans-serif; font-weight: 300; }\n        .badge-group { display: flex; gap: 12px; margin-bottom: 20px; }\n        .badge { font-family: 'Archivo', sans-serif; border: 1px solid rgba(255,255,255,1); padding: 2px 11px; border-radius: 100px; font-size: 14px; letter-spacing: 0.05em; font-weight: 300; }\n        .hero-content { transition: opacity 0.4s ease-out, transform 0.4s ease-out; }\n        .hero-hidden { opacity: 0; transform: translateY(-20px); pointer-events: none; }\n\n        \/* About *\/\n        .about-intro {\n            position: relative;\n            z-index: 1000;\n            color: #ffffff;\n            padding: 30vh 2%;\n            display: flex;\n            align-items: center;\n            overflow: hidden;\n            margin-top: -2px;\n        }\n        .about-bg-video {\n            position: absolute; inset: 0;\n            width: 100%; height: 100%;\n            object-fit: cover; z-index: 0;\n        }\n        .about-container {\n            width: 100%; max-width: 1400px; margin: 0 auto;\n            display: flex; flex-direction: column; gap: 25px;\n            position: relative; z-index: 1;\n        }\n        .about-label {\n            font-family: var(--menu-font-family); font-size: 12px; font-weight: 400;\n            text-transform: uppercase; letter-spacing: 0.15em;\n            color: #a3a3a3; margin: 0; margin-left: 2px;\n        }\n        .about-intro p {\n            font-family: 'Archivo', sans-serif;\n            font-size: clamp(24px, 3.5vw, 80px);\n            font-weight: 300; line-height: 1.15; letter-spacing: -0.02em; margin: 0;\n        }\n        .about-word-wrap { display: inline-block; vertical-align: bottom; }\n        .about-word      { display: inline-block; }\n        .about-label-wrap { overflow: hidden; }\n\n        \/* Portfolio *\/\n        .portfolio-scroll-section {\n            position: relative; z-index: 100;\n            background: transparent; height: 100vh; padding: 0;\n            margin-top: -150vh;\n            opacity: 0;\n        }\n        #cf-three-container {\n            position: absolute; top: 50%; left: 0;\n            transform: translateY(-50%);\n            width: 100vw; height: 80vh;\n            cursor: grab;\n        }\n        .cf-blur-left, .cf-blur-right {\n            position: absolute; top: 0; height: 100%; width: 30%;\n            pointer-events: none; z-index: 10;\n            backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px);\n        }\n        .cf-blur-left  { left: 0;  -webkit-mask-image: linear-gradient(to right, black 30%, transparent 100%); mask-image: linear-gradient(to right, black 30%, transparent 100%); }\n        .cf-blur-right { right: 0; -webkit-mask-image: linear-gradient(to left,  black 30%, transparent 100%); mask-image: linear-gradient(to left,  black 30%, transparent 100%); }\n        #cf-three-container:active { cursor: grabbing; }\n        #cf-three-container canvas { display: block; width: 100% !important; height: 100% !important; position: absolute; top: 0; left: 0; z-index: 2; }\n        #cf-bg-videos { position: absolute; inset: 0; z-index: 0; pointer-events: none; overflow: hidden; }\n        #cf-bg-videos video {\n            position: absolute; inset: 0; width: 100%; height: 100%;\n            object-fit: cover; opacity: 0;\n        }\n\n        .portfolio-nav-ticker {\n            width: 100vw; height: 160px;\n            position: absolute; bottom: 0; left: 0;\n            overflow: hidden; pointer-events: none; z-index: 20;\n        }\n        .ticker-track { position: absolute; top: 50%; left: 50%; }\n        .ticker-item {\n            position: absolute; top: 50%; transform: translate(-50%, -50%);\n            font-family: 'Archivo', sans-serif; font-size: clamp(60px, 9vw, 120px);\n            font-weight: 700; text-transform: uppercase; letter-spacing: 0em;\n            color: #ffffff; opacity: 0; filter: blur(24px); white-space: nowrap;\n            cursor: pointer; pointer-events: auto;\n            transition: opacity 0.7s ease, filter 0.7s ease;\n        }\n        .ticker-item.is-active { opacity: 1; filter: blur(0px); }\n\n        \/* Footer *\/\n        \/* Side nav *\/\n        #side-nav {\n            position: fixed; right: 48px; top: 50%;\n            transform: translateY(-50%);\n            z-index: 9000; mix-blend-mode: exclusion;\n            pointer-events: none; opacity: 0; transition: opacity 0.5s;\n            display: flex; flex-direction: column;\n            align-items: flex-end; gap: 5px;\n        }\n        #side-nav.is-visible { opacity: 1; }\n        .snav-item { display: flex; align-items: center; gap: 10px; }\n        .snav-label {\n            font-family: var(--menu-font-family); font-size: 9px;\n            letter-spacing: 0.15em; text-transform: uppercase;\n            color: white; opacity: 0; transition: opacity 0.4s; white-space: nowrap;\n        }\n        .snav-item.is-active .snav-label { opacity: 1; }\n        .snav-seg {\n            width: 1px; height: 30px;\n            background: rgba(255,255,255,0.2);\n            transition: background 0.5s, height 0.3s;\n        }\n        .snav-item.is-past .snav-seg,\n        .snav-item.is-active .snav-seg { background: rgba(255,255,255,1); }\n        .snav-item.is-active .snav-seg { height: 44px; }\n\n        .footer-spacer { display: none; }\n        .custom-footer-reveal {\n            position: relative; width: 100%; min-height: 100vh;\n            background-color: #fff; color: #000;\n            display: flex; flex-direction: column;\n            z-index: 200; box-sizing: border-box; overflow: hidden;\n        }\n        .footer-cta {\n            flex: 1; display: flex; flex-direction: column;\n            align-items: center; justify-content: center;\n            padding: 8vh 3%;\n            border-bottom: 1px solid rgba(0,0,0,0.12);\n        }\n        .footer-cta-label, .footer-cta-email { position: relative; z-index: 1; }\n        #footer-morph-stage {\n            position: absolute; left: 50%; top: 50%;\n            transform: translate(-50%, -50%);\n            width: min(200vw, 1500px); height: auto;\n            pointer-events: none; filter: blur(20px); opacity: 0.5;\n        }\n        #footer-morph-stage path { fill: #1900FF; }\n        .footer-cta-label {\n            font-family: var(--menu-font-family); font-size: 12px;\n            letter-spacing: 0.2em; text-transform: uppercase;\n            opacity: 0.45; margin-bottom: 2.5vh;\n        }\n        .footer-cta-email {\n            font-size: clamp(40px, 7vw, 70px); font-weight: 700;\n            font-family: 'Archivo', sans-serif; text-decoration: none;\n            color: #000; letter-spacing: -0.02em; transition: opacity 0.2s;\n        }\n        .footer-cta-email:hover { opacity: 0.35; }\n        .footer-bar {\n            display: flex; align-items: center; justify-content: space-between;\n            padding: 3.5vh 3%;\n        }\n        .footer-logo { display: none; }\n        .footer-nav { display: flex; gap: 28px; }\n        .footer-nav a {\n            font-family: var(--menu-font-family); font-size: 11px; font-weight: 400;\n            letter-spacing: 0.12em; text-transform: uppercase; color: #000;\n            text-decoration: none; opacity: 0.5; transition: opacity 0.2s;\n        }\n        .footer-nav a:hover { opacity: 1; }\n        .footer-meta {\n            text-align: right; font-family: var(--menu-font-family);\n            font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase;\n            opacity: 0.45; line-height: 1.9;\n        }\n    <\/style>\n<\/head>\n<body>\n\n    <div class=\"cursor-dot\"><\/div>\n    <div class=\"cursor-outline\"><\/div>\n    <div class=\"portfolio-progress\" id=\"portfolio-progress\"><\/div>\n\n    <div id=\"ep-logo-container\">\n        <img decoding=\"async\" src=\"https:\/\/\u00e9milienplisson.fr\/wp-content\/uploads\/2026\/05\/newlogoowhite-2-scaled.png\" alt=\"Logo EP\">\n    <\/div>\n\n    <div id=\"side-nav\">\n        <div class=\"snav-item\" data-idx=\"0\"><span class=\"snav-label\">\u00c0 la une<\/span><div class=\"snav-seg\"><\/div><\/div>\n        <div class=\"snav-item\" data-idx=\"1\"><span class=\"snav-label\">\u00c0 propos<\/span><div class=\"snav-seg\"><\/div><\/div>\n        <div class=\"snav-item\" data-idx=\"2\"><span class=\"snav-label\">Clips<\/span><div class=\"snav-seg\"><\/div><\/div>\n        <div class=\"snav-item\" data-idx=\"3\"><span class=\"snav-label\">Teasers<\/span><div class=\"snav-seg\"><\/div><\/div>\n        <div class=\"snav-item\" data-idx=\"4\"><span class=\"snav-label\">Courts M\u00e9trages<\/span><div class=\"snav-seg\"><\/div><\/div>\n        <div class=\"snav-item\" data-idx=\"5\"><span class=\"snav-label\">Live vid\u00e9os<\/span><div class=\"snav-seg\"><\/div><\/div>\n        <div class=\"snav-item\" data-idx=\"6\"><span class=\"snav-label\">Contact<\/span><div class=\"snav-seg\"><\/div><\/div>\n    <\/div>\n\n    <div id=\"main-menu-toggle\">\n        <div class=\"w-fscreen-menu-copy\"><p>Menu<\/p><\/div>\n        <div class=\"wkit-menu-toggle-icon\">\n            <div class=\"w-fscreen-menu-bar\" data-position=\"top\"><\/div>\n            <div class=\"w-fscreen-menu-bar\" data-position=\"middle\"><\/div>\n            <div class=\"w-fscreen-menu-bar\" data-position=\"bottom\"><\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"w-fscreen-menu\">\n        <div class=\"fmenu-media\">\n            <img decoding=\"async\" id=\"menu-photo\" src=\"https:\/\/\u00e9milienplisson.fr\/wp-content\/uploads\/2026\/07\/Gemini_Generated_Image_ev7d61ev7d61ev7d.png\" alt=\"\u00c9milien Plisson\">\n            <video id=\"menu-bg-video\" muted loop playsinline><\/video>\n        <\/div>\n        <div class=\"fmenu-right\">\n            <div class=\"fmenu-meta\">\n                <div class=\"fmenu-meta-item\">\n                    <span class=\"fmenu-meta-label\">Vid\u00e9aste<\/span>\n                    <span class=\"fmenu-meta-value\">\u00c9milien Plisson<\/span>\n                <\/div>\n                <div class=\"fmenu-meta-item\">\n                    <span class=\"fmenu-meta-label\">Email<\/span>\n                    <a class=\"fmenu-meta-value fmenu-meta-link\" href=\"mailto:plisson-emilien@hotmail.fr\">plisson-emilien@hotmail.fr<\/a>\n                <\/div>\n            <\/div>\n            <nav class=\"fmenu-links\">\n                <a class=\"fscreen-link\" href=\"#\">Accueil<\/a>\n                <a class=\"fscreen-link\" href=\"#portfolio-section\" data-menu-video=\"https:\/\/\u00e9milienplisson.fr\/wp-content\/uploads\/2026\/07\/CLIPS_1.mp4\">Clips<\/a>\n                <a class=\"fscreen-link\" href=\"#portfolio-section\" data-menu-video=\"https:\/\/\u00e9milienplisson.fr\/wp-content\/uploads\/2026\/07\/TEASERS.mp4\">Teasers<\/a>\n                <a class=\"fscreen-link\" href=\"#portfolio-section\" data-menu-video=\"https:\/\/\u00e9milienplisson.fr\/wp-content\/uploads\/2026\/07\/COURTS.mp4\">Courts m\u00e9trages<\/a>\n                <a class=\"fscreen-link\" href=\"#portfolio-section\" data-menu-video=\"https:\/\/\u00e9milienplisson.fr\/wp-content\/uploads\/2026\/07\/LIVE-1.mp4\">Live vid\u00e9os<\/a>\n                <a class=\"fscreen-link\" href=\"contact.html\">Contact<\/a>\n            <\/nav>\n        <\/div>\n    <\/div>\n\n    <div class=\"custom-scroll-wrapper\" id=\"scroll-trigger-element\">\n        <a href=\"#portfolio-section\" class=\"scroll-link\">\n            <div class=\"circle-icon\">\n                <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                    <path d=\"M12 5V19M12 19L5 12M12 19L19 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n            <\/div>\n            <span class=\"label-text\">SCROLL<\/span>\n        <\/a>\n    <\/div>\n\n    <div class=\"about-intro\">\n        <video class=\"about-bg-video\" src=\"https:\/\/\u00e9milienplisson.fr\/wp-content\/uploads\/2026\/06\/gradient.mp4\" autoplay loop muted playsinline><\/video>\n        <div class=\"about-container\">\n            <h3 class=\"about-label\">\/ Derri\u00e8re la cam\u00e9ra<\/h3>\n            <p>\n                Emilien Plisson est un vid\u00e9aste et r\u00e9alisateur prot\u00e9iforme.<br>\n                Il intervient sur des clips, du montage ou de la sc\u00e9nographie<br>\n                visuelle selon les projets, apportant un langage exp\u00e9rimental<br>\n                et organique \u00e0 chacun d'eux, avec la mati\u00e8re et l'instinct<br>\n                au c\u0153ur de son travail.\n            <\/p>\n        <\/div>\n    <\/div>\n\n    <div class=\"portfolio-scroll-section\" id=\"portfolio-section\">\n        <div id=\"cf-bg-videos\"><\/div>\n        <div id=\"cf-three-container\">\n            <div class=\"cf-blur-left\"><\/div>\n            <div class=\"cf-blur-right\"><\/div>\n        <\/div>\n        <div class=\"portfolio-nav-ticker\">\n            <div class=\"ticker-track\" id=\"ticker-track\"><\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"footer-spacer\"><\/div>\n    <div class=\"custom-footer-reveal\" id=\"next-section\">\n        <svg id=\"footer-morph-stage\" viewBox=\"0 0 841.89 595.28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                <defs>\n                    <filter id=\"footer-goo\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n                        <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"18\" result=\"blur\" id=\"footer-gooBlur\"\/>\n                        <feColorMatrix in=\"blur\" mode=\"matrix\" values=\"1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 45 -22\" result=\"goo\"\/>\n                        <feComposite in=\"SourceGraphic\" in2=\"goo\" operator=\"atop\"\/>\n                    <\/filter>\n                <\/defs>\n                <g id=\"footer-blobs\" filter=\"url(#footer-goo)\">\n                    <path id=\"fm-p0\" d=\"M350.21,222.8c-21.45,15.81-48.72,16.79-75.09,17.74-4.06.14-8.26.29-12.31.49-22.15.84-52.49,1.98-77.73,9.65-2.78.69-5.95,1.59-9.31,2.54-9.91,2.81-22.24,6.31-30.56,5.92h-.11c-12.37-.02-25.41-4.58-35.77-12.54-10.82-8.29-17.71-19.41-19.45-31.31v-4.04c2-12.61,9-23.44,20.25-31.31,15.45-10.82,38.21-15.27,57.97-11.35,9.66,2.01,19.4,5.47,28.81,8.82,13.22,4.71,26.89,9.58,41.09,10.78h.12c14.63.56,29.69-2.75,44.27-5.95,15-3.29,30.51-6.69,45.39-5.82,15.03.63,28.68,9.44,32.46,20.96,2.91,8.85-.65,17.88-10.03,25.42Z\"\/>\n                    <path id=\"fm-p1\" d=\"M336.82,113.16l-.12.06c-1.77.93-3.67,1.91-5.66,2.94-8.53,4.41-18.2,9.41-25.34,14.02-.92.54-1.85,1.07-2.78,1.61-12.12,7.05-24.65,14.34-38.33,14.46-13.74.49-21.45-9.08-23.9-17.4-2.54-8.65-1.19-21.33,10.99-28.58l.1-.06c8.86-5.83,16.54-7.79,26.4-9.92,10.98-1.64,21.68-5.27,32.03-8.77,5.67-1.92,11.52-3.91,17.26-5.5h9.42c10.38,2.24,12.74,9.68,13.23,13.93,1.05,9.29-4.66,19.27-13.3,23.21Z\"\/>\n                    <path id=\"fm-p2\" d=\"M640.36,365.14c-29.5,12.62-55.82,18.69-78.27,18.04-13.96-.09-27.96-8.02-35.65-20.22-6.63-10.52-7.52-22.2-2.51-32.89,9.65-20.17,37.87-25.62,62.76-30.42,7.29-1.41,14.18-2.74,20.12-4.35,22.35-5.11,41.59-19.5,50.2-37.55l.12-.29c4.73-14.37,4.1-25.58-1.87-33.32-11.97-15.51-41.73-13.68-65.64-12.22-3.16.2-6.17.38-8.98.51-2.03.1-4.15.22-6.32.34-13.24.76-28.25,1.62-39.37-3.18-10.71-4.99-16.19-12.59-15.43-21.4.94-10.88,11.11-21.06,24.75-24.75l.11-.04c9.53-3.05,20.13-4.04,30.39-5.01l1.02-.1c9.78-1.38,19.87-.85,29.62-.33,6.28.33,12.76.67,19.14.52,1.77-.01,3.56-.03,5.37-.05,7.9-.08,16.08-.17,23.68.66,17.9,1.79,43.69,6.9,64.9,21.12,20.23,13.57,31.37,32.21,33.1,55.42,1.65,54.66-56.37,102.74-111.24,129.51Z\"\/>\n                    <path id=\"fm-p3\" d=\"M506.28,469.66c0,12.91-5.47,24.77-16.29,34.48-9.8,8.8-21.63,10.67-33.3,5.27-15.19-7.03-25.88-24.22-25.42-40.88v-.17c-.6-14.34,1.14-31.94,2.68-47.47.39-3.95.77-7.78,1.1-11.44.7-8.79.42-18.24.15-27.38-.33-11.27-.67-22.91.82-33.39.57-2.95,1.29-5.91,2.06-9.05,1.57-6.4,3.19-13.01,3.37-19.61.01-5.72.11-10.68.2-15.06.5-24.89.66-32.42-18.94-60.24-5.79-10.46-6.2-23.96-1.12-37.05,5.63-14.52,17.12-26.2,29.98-30.49,12.61-4.17,26.2-1.73,36.35,6.52,10.08,8.2,15.01,20.42,13.51,33.53l-.02.19c-.13,3.76-1.79,13.16-4.68,26.5-2.35,10.88-2.41,22.19-2.46,33.13-.06,10.48-.11,21.32-2.23,31.54l-.02.1c-2.45,14.95-1.72,30.53-.67,43.84.28,2.86-1.08,24.7-1.73,35.19-.21,3.26-.36,5.76-.42,6.87-1.49,14.83,1.01,30.24,7.03,43.4l.14.26c6.62,10.76,9.91,21.4,9.91,31.41Z\"\/>\n                    <path id=\"fm-p4\" d=\"M342.63,378.45c-18.85,13.45-44.27,11.06-62.34,6.68-16.31-3.56-33.31-6.89-49.56-6.89-5.34,0-10.61.36-15.74,1.19-5.49.89-11.58,1.48-18.03,2.11-8.8.85-17.89,1.74-25.64,3.45-22.73,4.51-54.57,4.2-69.53-11.52-3.77-3.88-5.56-8.61-5.32-14.06.34-7.51,4.66-15.7,11.28-21.38l.16-.15c5.95-6.06,23.66-19.59,59.36-14.31,12.91,2.43,26.73,3.35,38.91,2.58,11.48-.14,24.73-3.37,39.39-9.61,27.87-9.52,56.72-12.15,79.19-7.23,19.89,5.29,34.44,18.24,37.08,33,2.32,12.93-4.5,25.77-19.21,36.14Z\"\/>\n                    <path id=\"fm-p5\" d=\"M332.89,519.01c-10.32.16-21.96-1.45-33.21-3.03-5.04-.7-9.79-1.37-14.45-1.88-10.05-.83-22.21-1.22-33.96-1.59-7.84-.25-15.24-.49-21.77-.84-5.44-.37-11.69-.86-18.3-1.38-7.71-.6-15.68-1.22-22.26-1.64-10.61-.74-24.24-1.11-35.53,2.6-1.23.4-2.52.83-3.86,1.28-5.02,1.69-10.71,3.6-15.48,4.08h-.11c-9.67,1.39-19.62-1.97-25.96-8.77-5.66-6.08-7.8-14.01-6.03-22.33,6.8-23.49,26.69-22.82,47.74-22.11,2.26.07,4.52.15,6.75.19l1.35.03.12-.18c3.51-.42,14.1-1.7,14.1-1.7l.13-.02c2.67-.46,5.42-.95,8.21-1.44,25.74-4.57,54.9-9.75,78.91-6.83,19.08,3.85,39.69,3.44,56.53-1.14,14.44-3.64,36.3-4.55,50.4,4.89,6.89,4.61,11.02,11.25,12.28,19.72,1.03,23.18-22.71,40.45-45.6,42.09Z\"\/>\n                <\/g>\n        <\/svg>\n        <div class=\"footer-cta\">\n            <div class=\"footer-cta-label\">\u2014 Travaillons ensemble<\/div>\n            <a class=\"footer-cta-email\" href=\"mailto:plisson-emilien@hotmail.fr\">plisson-emilien@hotmail.fr<\/a>\n        <\/div>\n        <div class=\"footer-bar\">\n            <div class=\"footer-logo\">\n                <img decoding=\"async\" src=\"https:\/\/\u00e9milienplisson.fr\/wp-content\/uploads\/2026\/05\/newlogoowhite-2-scaled.png\" alt=\"Logo EP\">\n            <\/div>\n            <nav class=\"footer-nav\">\n                <a href=\"#\">Accueil<\/a>\n                <a href=\"#portfolio-section\">Clips<\/a>\n                <a href=\"#portfolio-section\">Teasers<\/a>\n                <a href=\"#portfolio-section\">Courts m\u00e9trages<\/a>\n                <a href=\"#portfolio-section\">Live vid\u00e9os<\/a>\n                <a href=\"contact.html\">Contact<\/a>\n            <\/nav>\n            <div class=\"footer-meta\">\n                Bas\u00e9 \u00e0 Toulouse, France<br>\n                \u00a9 2026 \u00c9milien Plisson\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n        document.addEventListener(\"DOMContentLoaded\", () => {\n\n            gsap.registerPlugin(CustomEase, ScrollTrigger);\n\n            const heroTrigger = document.querySelector('.js-hero-interactive-trigger');\n            const menuBgVideo = document.getElementById('menu-bg-video');\n            const menuPhoto   = document.getElementById('menu-photo');\n\n            \/* Menu \u2014 au survol d'un lien, la vid\u00e9o de la cat\u00e9gorie remplace la photo\n               dans le panneau photo (au lieu d'un fond plein \u00e9cran) *\/\n            if (menuBgVideo) {\n                let menuLeaveTimeout = null;\n                document.querySelectorAll('.fscreen-link').forEach(link => {\n                    link.addEventListener('mouseenter', () => {\n                        \/* Annule le pause() diff\u00e9r\u00e9 programm\u00e9 par le lien pr\u00e9c\u00e9dent \u2014\n                           sinon il se d\u00e9clenche pendant la lecture de la nouvelle vid\u00e9o *\/\n                        if (menuLeaveTimeout) { clearTimeout(menuLeaveTimeout); menuLeaveTimeout = null; }\n                        const videoSrc = link.getAttribute('data-menu-video');\n                        if (!videoSrc) { \/\/ ex. Contact \u2014 pas de vid\u00e9o, on revient \u00e0 la photo\n                            menuBgVideo.style.opacity = \"0\";\n                            if (menuPhoto) menuPhoto.style.opacity = \"1\";\n                            return;\n                        }\n                        menuBgVideo.src = videoSrc;\n                        menuBgVideo.play().catch(() => {});\n                        menuBgVideo.style.opacity = \"1\";\n                        if (menuPhoto) menuPhoto.style.opacity = \"0\";\n                    });\n                    link.addEventListener('mouseleave', () => {\n                        menuBgVideo.style.opacity = \"0\";\n                        if (menuPhoto) menuPhoto.style.opacity = \"1\";\n                        menuLeaveTimeout = setTimeout(() => {\n                            menuBgVideo.pause();\n                            menuLeaveTimeout = null;\n                        }, 400);\n                    });\n                });\n            }\n\n            if (heroTrigger) {\n                const videoMenuUrl  = heroTrigger.getAttribute('data-video-menu');\n                const videoFullUrl  = heroTrigger.getAttribute('data-video-full');\n                const lightbox      = document.getElementById('emilien-fullscreen-lightbox');\n                const lightboxVideo = document.getElementById('emilien-lightbox-media');\n                const closeLightbox = document.getElementById('close-emilien-lightbox');\n                \/* \"Accueil\" utilise la vid\u00e9o dynamique du hero (varie selon le projet mis en avant) *\/\n                if (videoMenuUrl) {\n                    const accueilLink = [...document.querySelectorAll('.fscreen-link')]\n                        .find(link => link.textContent.trim().toUpperCase() === \"ACCUEIL\");\n                    if (accueilLink) accueilLink.setAttribute('data-menu-video', videoMenuUrl);\n                }\n                heroTrigger.addEventListener('click', (e) => {\n                    if (e.target.closest('#main-menu-toggle') || e.target.closest('#emilien-fullscreen-lightbox')) return;\n                    if (videoFullUrl) { lightboxVideo.src = videoFullUrl; lightbox.style.opacity = \"1\"; lightbox.style.pointerEvents = \"auto\"; lightboxVideo.play().catch(() => {}); }\n                });\n                if (closeLightbox) {\n                    closeLightbox.addEventListener('click', () => { lightbox.style.opacity = \"0\"; lightbox.style.pointerEvents = \"none\"; lightboxVideo.pause(); lightboxVideo.src = \"\"; });\n                }\n            }\n\n            \/* Curseur *\/\n            const cursorDot     = document.querySelector('.cursor-dot');\n            const cursorOutline = document.querySelector('.cursor-outline');\n            gsap.set(cursorDot,     { xPercent: -50, yPercent: -50 });\n            gsap.set(cursorOutline, { xPercent: -50, yPercent: -50, transformOrigin: \"center center\" });\n            let mouse = { x: window.innerWidth \/ 2, y: window.innerHeight \/ 2 };\n            let pos   = { x: window.innerWidth \/ 2, y: window.innerHeight \/ 2 };\n            let angle = 0;\n            window.addEventListener('mousemove', (e) => { mouse.x = e.clientX; mouse.y = e.clientY; gsap.to(cursorDot, { x: mouse.x, y: mouse.y, duration: 0 }); });\n            gsap.ticker.add(() => {\n                const dx = mouse.x - pos.x; const dy = mouse.y - pos.y;\n                pos.x += dx * 0.15; pos.y += dy * 0.15;\n                const vel = Math.sqrt(dx * dx + dy * dy);\n                if (vel > 0.1) angle = Math.atan2(dy, dx) * (180 \/ Math.PI);\n                gsap.set(cursorOutline, { x: pos.x, y: pos.y, rotation: angle, scaleX: 1 + Math.min(vel * 0.005, 0.8), scaleY: 1 - Math.min(vel * 0.0015, 0.3) });\n            });\n\n            \/* Lenis *\/\n            const isMobile = window.matchMedia('(max-width: 768px)').matches;\n            const lenis = new Lenis({ duration: 1.2, easing: (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)), smoothWheel: true });\n            lenis.on('scroll', ScrollTrigger.update);\n            gsap.ticker.add((time) => lenis.raf(time * 1000));\n            gsap.ticker.lagSmoothing(0);\n\n            \/* Menu *\/\n            const menuToggle = document.getElementById(\"main-menu-toggle\");\n            const menu       = document.querySelector(\".w-fscreen-menu\");\n            const links      = document.querySelectorAll(\".fscreen-link\");\n            let menuIsOpen = false, isAnimating = false;\n            CustomEase.create(\"mainEase\", \"M0,0 C0.126,0.382 0.282,0.674 0.44,0.822 0.632,1.002 0.818,1.001 1,1\");\n            const openMenu = () => {\n                isAnimating = true; menuToggle.classList.add(\"is-active\"); document.body.style.overflow = \"hidden\";\n                const tl = gsap.timeline({ onComplete: () => { isAnimating = false; menuIsOpen = true; } });\n                tl.to(menu,  { clipPath: \"polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)\", duration: 1.2, ease: \"mainEase\", pointerEvents: \"auto\" })\n                  .to(links, { opacity: 1, y: 0, duration: 0.8, stagger: 0.1, ease: \"power3.out\" }, \"-=0.7\");\n            };\n            const closeMenu = () => {\n                isAnimating = true; menuToggle.classList.remove(\"is-active\");\n                if (menuBgVideo) { menuBgVideo.style.opacity = \"0\"; setTimeout(() => menuBgVideo.pause(), 500); }\n                const tl = gsap.timeline({ onComplete: () => { isAnimating = false; menuIsOpen = false; document.body.style.overflow = \"\"; } });\n                tl.to(links, { opacity: 0, y: -20, duration: 0.4, stagger: 0.05 })\n                  .to(menu,  { clipPath: \"polygon(0% 0%, 100% 0%, 100% 0%, 0% 0%)\", duration: 1.1, ease: \"mainEase\", pointerEvents: \"none\" }, \"-=0.2\")\n                  .set(menu, { clipPath: \"polygon(0% 100%, 100% 100%, 100% 100%, 0% 100%)\" });\n            };\n            menuToggle.addEventListener(\"click\", () => { if (isAnimating) return; if (!menuIsOpen) openMenu(); else closeMenu(); });\n\n            \/* Hero *\/\n            if (!isMobile) {\n                const heroTl = gsap.timeline({ scrollTrigger: { trigger: \"#experience-ep\", start: \"top top\", end: \"+=1200\", scrub: 5, pin: true, anticipatePin: 0 } });\n                heroTl\n                    .to(\".header-title\",        { opacity: 0, duration: 1.5 }, 0)\n                    .to(\"#logo-texture\",         { opacity: 0, duration: 0.5 }, 0)\n                    .to(\"#logo-group-anim path\", { attr: { \"stroke-width\": 1400 }, ease: \"power1.inOut\", duration: 4 }, 0)\n                    .to(\".rond-anim\",            { attr: { \"r\": 375 }, ease: \"power1.inOut\", stagger: 0.1, duration: 4 }, 0)\n                    .to(\".info-overlay\",         { opacity: 1, y: 0, duration: 3, ease: \"power2.out\" }, 1)\n                    .to(\".info-overlay\",         { opacity: 0, y: -30, duration: 2, ease: \"power2.in\" }, 4);\n            } else {\n                \/* Mobile \u2014 click pour d\u00e9clencher l'animation SVG *\/\n                const scrollWrapper = document.getElementById('scroll-trigger-element');\n                const labelText = scrollWrapper?.querySelector('.label-text');\n                if (labelText) labelText.textContent = 'TOUCHER';\n\n                const mobileHeroTl = gsap.timeline({ paused: true, onComplete: () => {\n                    gsap.to(scrollWrapper, { opacity: 1, duration: 0.5 });\n                    if (labelText) labelText.textContent = 'SCROLL';\n                }});\n                mobileHeroTl\n                    .to(\".header-title\",        { opacity: 0, duration: 0.5 }, 0)\n                    .to(\"#logo-texture\",         { opacity: 0, duration: 0.3 }, 0)\n                    .to(\"#logo-group-anim path\", { attr: { \"stroke-width\": 1400 }, ease: \"power1.inOut\", duration: 2.5 }, 0)\n                    .to(\".rond-anim\",            { attr: { \"r\": 375 }, ease: \"power1.inOut\", stagger: 0.08, duration: 2.5 }, 0.1)\n                    .to(\".info-overlay\",         { opacity: 1, duration: 2, ease: \"power2.out\" }, 1);\n\n                let heroClicked = false;\n                document.getElementById('experience-ep').addEventListener('click', () => {\n                    if (heroClicked) return;\n                    heroClicked = true;\n                    gsap.to(scrollWrapper, { opacity: 0, duration: 0.2 });\n                    mobileHeroTl.play();\n                });\n            }\n\n            window.addEventListener('scroll', () => {\n                const hero = document.querySelector('.hero-content');\n                if (window.scrollY > 50) hero?.classList.add('hero-hidden');\n                else hero?.classList.remove('hero-hidden');\n            });\n\n            \/* Portfolio \u2014 Three.js *\/\n            (() => {\n                const ITEMS = [\n                    { label: 'Clips',           href: '#clips',                                               src: 'https:\/\/\u00e9milienplisson.fr\/wp-content\/uploads\/2026\/07\/CLIPS_1.mp4' },\n                    { label: 'Teasers',         href: 'https:\/\/xn--milienplisson-9gb.fr\/?page_id=2295',       src: 'https:\/\/\u00e9milienplisson.fr\/wp-content\/uploads\/2026\/07\/TEASERS.mp4' },\n                    { label: 'Courts M\u00e9trages', href: '#courts-metrages',                                     src: 'https:\/\/\u00e9milienplisson.fr\/wp-content\/uploads\/2026\/07\/COURTS.mp4' },\n                    { label: 'Live Vid\u00e9o',      href: '#live-videos',                                         src: 'https:\/\/\u00e9milienplisson.fr\/wp-content\/uploads\/2026\/07\/LIVE-1.mp4' },\n                ];\n                const ITEM_COUNT = ITEMS.length;\n                const CARD_ANGLE = 0.99, RADIUS = 0.7, PLANE_H = 0.35;\n                const ARC = CARD_ANGLE, ITEM_SPACING = 1400, CARD_STEP = CARD_ANGLE;\n\n                const container = document.getElementById('cf-three-container');\n                let activeIdx = 0;\n                const track = document.getElementById('ticker-track');\n                const tickerItems = [];\n\n                const scene = new THREE.Scene();\n                const W = window.innerWidth, H = Math.round(window.innerHeight * 0.80);\n                const camera = new THREE.PerspectiveCamera(50, W \/ H, 0.1, 20);\n                camera.position.set(0, 0, 0); camera.lookAt(0, 0, -1);\n                const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\n                renderer.setClearColor(0x000000, 0);\n                renderer.setSize(W, H); renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\n                container.appendChild(renderer.domElement);\n\n                const geometry = new THREE.CylinderGeometry(RADIUS, RADIUS, PLANE_H, 40, 1, true, -ARC \/ 2, ARC);\n                const meshes = [], videos = [];\n                const bgStage = document.getElementById('cf-bg-videos');\n\n                ITEMS.forEach((item, i) => {\n                    const vid = document.createElement('video');\n                    vid.src = item.src; vid.crossOrigin = 'anonymous'; vid.loop = true;\n                    vid.muted = true; vid.playsInline = true; vid.preload = 'auto';\n                    vid.addEventListener('loadeddata', () => { vid.currentTime = 0.001; });\n                    bgStage.appendChild(vid);\n                    videos.push(vid);\n                    const tex = new THREE.VideoTexture(vid);\n                    tex.minFilter = tex.magFilter = THREE.LinearFilter;\n                    const mat  = new THREE.MeshBasicMaterial({ map: tex, side: THREE.BackSide });\n                    const mesh = new THREE.Mesh(geometry, mat);\n                    mesh.rotation.y = Math.PI - i * CARD_STEP;\n                    scene.add(mesh); meshes.push(mesh);\n                    const span = document.createElement('span');\n                    span.className = 'ticker-item'; span.textContent = item.label;\n                    span.style.left = `${i * ITEM_SPACING}px`;\n                    span.addEventListener('click', () => snapToIdx(i));\n                    track.appendChild(span); tickerItems.push(span);\n                });\n\n                const carouselGroup = new THREE.Group();\n                meshes.forEach(m => { scene.remove(m); carouselGroup.add(m); });\n                const ghostLive  = new THREE.Mesh(geometry, meshes[ITEM_COUNT - 1].material);\n                ghostLive.rotation.y  = Math.PI + CARD_STEP;\n                const ghostClips = new THREE.Mesh(geometry, meshes[0].material);\n                ghostClips.rotation.y = Math.PI - ITEM_COUNT * CARD_STEP;\n                carouselGroup.add(ghostLive); carouselGroup.add(ghostClips);\n                scene.add(carouselGroup);\n\n                const rotProxy = { value: 0 };\n                let currentRot = 0;\n                const maxRot = (ITEM_COUNT - 1) * CARD_STEP;\n                let activeTween = null;\n\n                function bgCrossfade(toIdx) {\n                    videos.forEach((v, i) => {\n                        gsap.to(v, { opacity: i === toIdx ? 0.1 : 0, duration: 0.6, ease: 'power2.inOut' });\n                    });\n                }\n\n                function snapToIdx(idx) {\n                    activeIdx = Math.max(0, Math.min(ITEM_COUNT - 1, idx));\n                    if (activeTween) activeTween.kill();\n                    activeTween = gsap.to(rotProxy, { value: activeIdx * CARD_STEP, duration: 1.0, ease: 'power2.inOut' });\n                    tickerItems.forEach((el, i) => el.classList.toggle('is-active', i === activeIdx));\n                    bgCrossfade(activeIdx);\n                }\n\n                snapToIdx(0); rotProxy.value = 0;\n                if (activeTween) activeTween.kill();\n                tickerItems.forEach(el => el.classList.remove('is-active'));\n                videos.forEach((v, i) => { v.play().then(() => { if (i !== activeIdx) v.pause(); }).catch(() => {}); });\n                gsap.set(videos[0], { opacity: 0.1 });\n\n                \/* Drag *\/\n                let isDragging = false, prevX = 0, dragDelta = 0;\n                container.addEventListener('pointerdown', e => { isDragging = true; prevX = e.clientX; dragDelta = 0; if (activeTween) activeTween.kill(); container.setPointerCapture(e.pointerId); });\n                container.addEventListener('pointermove', e => { if (!isDragging) return; const dx = e.clientX - prevX; dragDelta += dx; rotProxy.value = Math.max(0, Math.min(maxRot, rotProxy.value + dx * 0.003)); prevX = e.clientX; });\n                container.addEventListener('pointerup',   () => { if (!isDragging) return; isDragging = false; snapToIdx(Math.round(rotProxy.value \/ CARD_STEP)); });\n                container.addEventListener('click', e => { if (Math.abs(dragDelta) > 5) return; if (ITEMS[activeIdx].href && ITEMS[activeIdx].href !== '#') window.location.href = ITEMS[activeIdx].href; });\n\n                \/* Render loop *\/\n                function animate() {\n                    requestAnimationFrame(animate);\n                    currentRot = rotProxy.value;\n                    carouselGroup.rotation.y = currentRot;\n                    videos.forEach((v, i) => { if (meshes[i].material.map) meshes[i].material.map.needsUpdate = true; });\n                    const floatIndex = currentRot \/ CARD_STEP;\n                    track.style.transform = `translateX(${-floatIndex * ITEM_SPACING}px)`;\n                    const newActive = Math.max(0, Math.min(ITEM_COUNT - 1, Math.round(floatIndex)));\n                    if (newActive !== activeIdx) {\n                        activeIdx = newActive;\n                        tickerItems.forEach((el, i) => el.classList.toggle('is-active', i === activeIdx));\n                        videos.forEach((v, i) => { if (i === activeIdx) v.play().catch(() => {}); else v.pause(); });\n                        bgCrossfade(activeIdx);\n                    }\n                    renderer.render(scene, camera);\n                }\n                animate();\n\n                window.addEventListener('resize', () => {\n                    const nW = window.innerWidth, nH = Math.round(window.innerHeight * 0.80);\n                    camera.aspect = nW \/ nH; camera.updateProjectionMatrix(); renderer.setSize(nW, nH);\n                });\n\n                \/* Timeline \u00e9pingl\u00e9e \u2014 ouverture + navigation *\/\n                const OPEN_FRAC = 0.25;\n\n                const portfolioTl = gsap.timeline({\n                    scrollTrigger: {\n                        trigger: '#portfolio-section',\n                        start: 'top top',\n                        end: `+=${window.innerHeight * 8}`,\n                        pin: true, scrub: 2,\n                        snap: {\n                            snapTo(v) {\n                                if (v <= OPEN_FRAC) return v;\n                                const nav = Math.round(((v - OPEN_FRAC) \/ (1 - OPEN_FRAC)) * (ITEM_COUNT - 1)) \/ (ITEM_COUNT - 1);\n                                return OPEN_FRAC + nav * (1 - OPEN_FRAC);\n                            },\n                            duration: { min: 0.2, max: 0.5 }, ease: 'power2.inOut', delay: 0.05,\n                        },\n                        onUpdate(self) {\n                            if (self.progress < 0.10) tickerItems.forEach(el => el.classList.remove('is-active'));\n                            else tickerItems.forEach((el, i) => el.classList.toggle('is-active', i === activeIdx));\n                        },\n                    }\n                });\n                portfolioTl\n                    .fromTo(container,\n                        { clipPath: 'inset(100% 0% 100% 0%)', filter: 'blur(30px)', opacity: 0 },\n                        { clipPath: 'inset(0% 0% 0% 0%)',     filter: 'blur(0px)',  opacity: 1, ease: 'sine.inOut', duration: 1 })\n                    .fromTo('.portfolio-nav-ticker', { opacity: 0 }, { opacity: 1, duration: 0.3 }, '<0.7');\n                for (let i = 1; i < ITEM_COUNT; i++) {\n                    portfolioTl.to(rotProxy, { value: i * CARD_STEP, ease: 'none', duration: 1 });\n                }\n\n                \/* Fade d\u00e9clench\u00e9 quand le footer est visible \u00e0 ~40% *\/\n                ScrollTrigger.create({\n                    trigger: '#next-section',\n                    start: 'top 60%',\n                    onEnter: () => {\n                        gsap.to([container, '.portfolio-nav-ticker'], { opacity: 0, duration: 0.5, ease: 'sine.inOut' });\n                        if (window.sideNavUpdate) window.sideNavUpdate(6);\n                    },\n                    onLeaveBack: () => {\n                        gsap.to([container, '.portfolio-nav-ticker'], { opacity: 1, duration: 0.3, ease: 'sine.inOut' });\n                        if (window.sideNavUpdate) window.sideNavUpdate(activeIdx + 2);\n                    }\n                });\n            })();\n\n            \/* Logo & scroll indicator *\/\n            ScrollTrigger.create({\n                trigger: \"body\", start: \"top -50px\",\n                onEnter:     () => document.getElementById(\"scroll-trigger-element\").classList.add(\"is-active\"),\n                onLeaveBack: () => document.getElementById(\"scroll-trigger-element\").classList.remove(\"is-active\"),\n            });\n            ScrollTrigger.create({\n                trigger: \"body\", start: \"top -100px\",\n                onEnter:     () => gsap.to([\"#ep-logo-container\", \"#main-menu-toggle\"], { opacity: 1, duration: 0.5 }),\n                onLeaveBack: () => gsap.to([\"#ep-logo-container\", \"#main-menu-toggle\"], { opacity: 0, duration: 0.5 }),\n            });\n\n            \/* Side nav *\/\n            (() => {\n                const sideNav   = document.getElementById('side-nav');\n                const snavItems = document.querySelectorAll('.snav-item');\n\n                \/\/ \u2500\u2500\u2500 Ajuste ces 7 seuils (0 \u2192 1 = d\u00e9but \u2192 fin de page) \u2500\u2500\u2500\n                const THRESHOLDS = [\n                    0,     \/\/ 0 \u2014 \u00c0 la une\n                    0.15,  \/\/ 1 \u2014 \u00c0 propos\n                    0.30,  \/\/ 2 \u2014 Clips\n                    0.45,  \/\/ 3 \u2014 Teasers\n                    0.65,  \/\/ 4 \u2014 Courts M\u00e9trages\n                    0.80,  \/\/ 5 \u2014 Live vid\u00e9os\n                    0.95,  \/\/ 6 \u2014 Contact\n                ];\n                \/\/ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n                let currentIdx = 0;\n\n                window.sideNavUpdate = function(idx) {\n                    if (idx === currentIdx) return;\n                    currentIdx = idx;\n                    snavItems.forEach((el, i) => {\n                        el.classList.toggle('is-active', i === idx);\n                        el.classList.toggle('is-past',   i < idx);\n                    });\n                };\n\n                window.sideNavUpdate(0);\n\n                ScrollTrigger.create({\n                    trigger: 'body', start: 'top -80px',\n                    onEnter:     () => sideNav.classList.add('is-visible'),\n                    onLeaveBack: () => sideNav.classList.remove('is-visible'),\n                });\n\n                lenis.on('scroll', ({ progress }) => {\n                    let idx = 0;\n                    for (let i = THRESHOLDS.length - 1; i >= 0; i--) {\n                        if (progress >= THRESHOLDS[i]) { idx = i; break; }\n                    }\n                    window.sideNavUpdate(idx);\n                });\n            })();\n\n            \/* About \u2014 r\u00e9v\u00e9lation mot par mot *\/\n            (() => {\n                const label  = document.querySelector('.about-label');\n                const aboutP = document.querySelector('.about-intro p');\n                label.innerHTML = `<span class=\"about-word\">${label.innerHTML}<\/span>`;\n                label.classList.add('about-label-wrap');\n                const withMarker = aboutP.innerHTML.replace(\/<br\\s*\\\/?>\/gi, '|||');\n                aboutP.innerHTML = withMarker.split('|||').map(line =>\n                    line.trim().split(\/\\s+\/).filter(Boolean).map(w =>\n                        `<span class=\"about-word-wrap\"><span class=\"about-word\">${w}<\/span><\/span>`\n                    ).join(' ')\n                ).join('<br>');\n                gsap.set('.about-word', { clipPath: 'inset(0 100% 0 0)' });\n                const allWords = [\n                    label.querySelector('.about-word'),\n                    ...document.querySelectorAll('.about-intro p .about-word')\n                ];\n                const aboutTl = gsap.timeline({\n                    scrollTrigger: {\n                        trigger: '.about-intro',\n                        start: 'top 50%',\n                        end:   'top -1%',\n                        scrub: 1.5,\n                    }\n                });\n                allWords.forEach((el, i) => {\n                    aboutTl.to(el, { clipPath: 'inset(0 0% 0 0)', ease: 'power3.out', duration: 0.6 }, i * 0.12);\n                });\n            })();\n\n            \/* Portfolio \u2014 fondu d'apparition en scrollant sur le about *\/\n            gsap.to('#portfolio-section', {\n                opacity: 1,\n                ease: 'none',\n                scrollTrigger: {\n                    trigger: '.about-intro',\n                    start: 'bottom 80%',\n                    end:   'bottom 20%',\n                    scrub: true,\n                }\n            });\n\n        });\n    <\/script>\n    <script>\n        (function() {\n            var FINAL = [\"M350.21,222.8c-21.45,15.81-48.72,16.79-75.09,17.74-4.06.14-8.26.29-12.31.49-22.15.84-52.49,1.98-77.73,9.65-2.78.69-5.95,1.59-9.31,2.54-9.91,2.81-22.24,6.31-30.56,5.92h-.11c-12.37-.02-25.41-4.58-35.77-12.54-10.82-8.29-17.71-19.41-19.45-31.31v-4.04c2-12.61,9-23.44,20.25-31.31,15.45-10.82,38.21-15.27,57.97-11.35,9.66,2.01,19.4,5.47,28.81,8.82,13.22,4.71,26.89,9.58,41.09,10.78h.12c14.63.56,29.69-2.75,44.27-5.95,15-3.29,30.51-6.69,45.39-5.82,15.03.63,28.68,9.44,32.46,20.96,2.91,8.85-.65,17.88-10.03,25.42Z\",\"M336.82,113.16l-.12.06c-1.77.93-3.67,1.91-5.66,2.94-8.53,4.41-18.2,9.41-25.34,14.02-.92.54-1.85,1.07-2.78,1.61-12.12,7.05-24.65,14.34-38.33,14.46-13.74.49-21.45-9.08-23.9-17.4-2.54-8.65-1.19-21.33,10.99-28.58l.1-.06c8.86-5.83,16.54-7.79,26.4-9.92,10.98-1.64,21.68-5.27,32.03-8.77,5.67-1.92,11.52-3.91,17.26-5.5h9.42c10.38,2.24,12.74,9.68,13.23,13.93,1.05,9.29-4.66,19.27-13.3,23.21Z\",\"M640.36,365.14c-29.5,12.62-55.82,18.69-78.27,18.04-13.96-.09-27.96-8.02-35.65-20.22-6.63-10.52-7.52-22.2-2.51-32.89,9.65-20.17,37.87-25.62,62.76-30.42,7.29-1.41,14.18-2.74,20.12-4.35,22.35-5.11,41.59-19.5,50.2-37.55l.12-.29c4.73-14.37,4.1-25.58-1.87-33.32-11.97-15.51-41.73-13.68-65.64-12.22-3.16.2-6.17.38-8.98.51-2.03.1-4.15.22-6.32.34-13.24.76-28.25,1.62-39.37-3.18-10.71-4.99-16.19-12.59-15.43-21.4.94-10.88,11.11-21.06,24.75-24.75l.11-.04c9.53-3.05,20.13-4.04,30.39-5.01l1.02-.1c9.78-1.38,19.87-.85,29.62-.33,6.28.33,12.76.67,19.14.52,1.77-.01,3.56-.03,5.37-.05,7.9-.08,16.08-.17,23.68.66,17.9,1.79,43.69,6.9,64.9,21.12,20.23,13.57,31.37,32.21,33.1,55.42,1.65,54.66-56.37,102.74-111.24,129.51Z\",\"M506.28,469.66c0,12.91-5.47,24.77-16.29,34.48-9.8,8.8-21.63,10.67-33.3,5.27-15.19-7.03-25.88-24.22-25.42-40.88v-.17c-.6-14.34,1.14-31.94,2.68-47.47.39-3.95.77-7.78,1.1-11.44.7-8.79.42-18.24.15-27.38-.33-11.27-.67-22.91.82-33.39.57-2.95,1.29-5.91,2.06-9.05,1.57-6.4,3.19-13.01,3.37-19.61.01-5.72.11-10.68.2-15.06.5-24.89.66-32.42-18.94-60.24-5.79-10.46-6.2-23.96-1.12-37.05,5.63-14.52,17.12-26.2,29.98-30.49,12.61-4.17,26.2-1.73,36.35,6.52,10.08,8.2,15.01,20.42,13.51,33.53l-.02.19c-.13,3.76-1.79,13.16-4.68,26.5-2.35,10.88-2.41,22.19-2.46,33.13-.06,10.48-.11,21.32-2.23,31.54l-.02.1c-2.45,14.95-1.72,30.53-.67,43.84.28,2.86-1.08,24.7-1.73,35.19-.21,3.26-.36,5.76-.42,6.87-1.49,14.83,1.01,30.24,7.03,43.4l.14.26c6.62,10.76,9.91,21.4,9.91,31.41Z\",\"M342.63,378.45c-18.85,13.45-44.27,11.06-62.34,6.68-16.31-3.56-33.31-6.89-49.56-6.89-5.34,0-10.61.36-15.74,1.19-5.49.89-11.58,1.48-18.03,2.11-8.8.85-17.89,1.74-25.64,3.45-22.73,4.51-54.57,4.2-69.53-11.52-3.77-3.88-5.56-8.61-5.32-14.06.34-7.51,4.66-15.7,11.28-21.38l.16-.15c5.95-6.06,23.66-19.59,59.36-14.31,12.91,2.43,26.73,3.35,38.91,2.58,11.48-.14,24.73-3.37,39.39-9.61,27.87-9.52,56.72-12.15,79.19-7.23,19.89,5.29,34.44,18.24,37.08,33,2.32,12.93-4.5,25.77-19.21,36.14Z\",\"M332.89,519.01c-10.32.16-21.96-1.45-33.21-3.03-5.04-.7-9.79-1.37-14.45-1.88-10.05-.83-22.21-1.22-33.96-1.59-7.84-.25-15.24-.49-21.77-.84-5.44-.37-11.69-.86-18.3-1.38-7.71-.6-15.68-1.22-22.26-1.64-10.61-.74-24.24-1.11-35.53,2.6-1.23.4-2.52.83-3.86,1.28-5.02,1.69-10.71,3.6-15.48,4.08h-.11c-9.67,1.39-19.62-1.97-25.96-8.77-5.66-6.08-7.8-14.01-6.03-22.33,6.8-23.49,26.69-22.82,47.74-22.11,2.26.07,4.52.15,6.75.19l1.35.03.12-.18c3.51-.42,14.1-1.7,14.1-1.7l.13-.02c2.67-.46,5.42-.95,8.21-1.44,25.74-4.57,54.9-9.75,78.91-6.83,19.08,3.85,39.69,3.44,56.53-1.14,14.44-3.64,36.3-4.55,50.4,4.89,6.89,4.61,11.02,11.25,12.28,19.72,1.03,23.18-22.71,40.45-45.6,42.09Z\"];\n            var fmPaths = FINAL.map(function(_, i) { return document.getElementById('fm-p' + i); });\n            var fmBlur = document.getElementById('footer-gooBlur');\n            var fmGroup = document.getElementById('footer-blobs');\n            var fmInterpolators = [];\n\n            function fmEase(t) { return t < 0.5 ? 16*t*t*t*t*t : 1 - Math.pow(-2*t+2,5)\/2; }\n\n            function fmPrepare() {\n                fmPaths.forEach(function(el, i) { el.setAttribute('d', FINAL[i]); });\n                var bb = fmGroup.getBBox();\n                var diag = Math.hypot(bb.width, bb.height);\n                fmInterpolators = FINAL.map(function(finalD, i) {\n                    var b = fmPaths[i].getBBox();\n                    var cx = b.x + b.width\/2, cy = b.y + b.height\/2;\n                    var angle = Math.random() * Math.PI * 2;\n                    var dist = diag * (0.14 + Math.random() * 0.10);\n                    var r = diag * (0.045 + Math.random() * 0.02);\n                    return flubber.fromCircle(cx + Math.cos(angle)*dist, cy + Math.sin(angle)*dist, r, finalD, { maxSegmentLength: 2 });\n                });\n            }\n\n            function fmAnimate(fromT, toT, dur, stagger, done) {\n                var n = fmInterpolators.length;\n                var total = (n-1)*stagger + dur;\n                var start = performance.now();\n                (function frame(now) {\n                    var elapsed = now - start;\n                    var allDone = true;\n                    fmInterpolators.forEach(function(interp, i) {\n                        var lt = Math.max(0, Math.min(1, (elapsed - i*stagger) \/ dur));\n                        if (lt < 1) allDone = false;\n                        fmPaths[i].setAttribute('d', interp(fromT + (toT-fromT) * fmEase(lt)));\n                    });\n                    var hump = Math.sin(Math.PI * Math.min(1, elapsed\/total));\n                    fmBlur.setAttribute('stdDeviation', (18 * hump).toFixed(2));\n                    if (!allDone) requestAnimationFrame(frame);\n                    else { fmBlur.setAttribute('stdDeviation', 0); done && done(); }\n                })(performance.now());\n            }\n\n            function fmLoop() {\n                setTimeout(function() {\n                    fmPrepare();\n                    fmAnimate(1, 0, 1100, 90, function() {\n                        setTimeout(function() { fmAnimate(0, 1, 1500, 110, fmLoop); }, 650);\n                    });\n                }, 1100);\n            }\n\n            fmPrepare();\n            fmAnimate(0, 1, 1500, 110, fmLoop);\n        })();\n    <\/script>\n<\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u00c9milien Plisson \u2014 Vid\u00e9aste \u00c0 la une \u00c0 propos Clips Teasers Courts M\u00e9trages Live vid\u00e9os Contact Menu Vid\u00e9aste \u00c9milien Plisson Email plisson-emilien@hotmail.fr Accueil Clips Teasers Courts m\u00e9trages Live vid\u00e9os Contact SCROLL \/ Derri\u00e8re la cam\u00e9ra Emilien Plisson est un vid\u00e9aste et r\u00e9alisateur prot\u00e9iforme. Il intervient sur des clips, du montage ou de la sc\u00e9nographie visuelle [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-51","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/\u00e9milienplisson.fr\/index.php?rest_route=\/wp\/v2\/pages\/51","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/\u00e9milienplisson.fr\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/\u00e9milienplisson.fr\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/\u00e9milienplisson.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/\u00e9milienplisson.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=51"}],"version-history":[{"count":4005,"href":"https:\/\/\u00e9milienplisson.fr\/index.php?rest_route=\/wp\/v2\/pages\/51\/revisions"}],"predecessor-version":[{"id":4745,"href":"https:\/\/\u00e9milienplisson.fr\/index.php?rest_route=\/wp\/v2\/pages\/51\/revisions\/4745"}],"wp:attachment":[{"href":"https:\/\/\u00e9milienplisson.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=51"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}