{"id":4275,"date":"2026-06-08T12:08:49","date_gmt":"2026-06-08T10:08:49","guid":{"rendered":"https:\/\/www.norki.com\/sur-mesure\/?page_id=4275"},"modified":"2026-06-10T12:18:54","modified_gmt":"2026-06-10T10:18:54","slug":"norki-en","status":"publish","type":"page","link":"https:\/\/www.norki.com\/sur-mesure\/en\/","title":{"rendered":"NORKI"},"content":{"rendered":"\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": [\"LocalBusiness\", \"Organization\"],\n  \"name\": \"Norki\",\n  \"founder\": {\n    \"@type\": \"Person\",\n    \"name\": \"Sonia Linard\"\n  },\n  \"description\": \"Bespoke interior design studio specializing in luxury mountain chalet design (Meg\u00e8ve, Gstaad, Paris).\",\n  \"url\": \"https:\/\/www.norki.com\/en\/custom-made-upholstery\/\",\n  \"areaServed\": [\n    {\"@type\": \"City\", \"name\": \"Meg\u00e8ve\"},\n    {\"@type\": \"City\", \"name\": \"Paris\"},\n    {\"@type\": \"City\", \"name\": \"Gstaad\"},\n    {\"@type\": \"City\", \"name\": \"Molsheim\"}\n  ],\n  \"knowsAbout\": [\"Interior design\", \"Chalet design\", \"Bespoke design\", \"Alpine architecture\"]\n}\n<\/script>\n\n\n\n<style>\n    \/* --- Component-isolated Styles --- *\/\n    .split-line-container {\n        position: absolute;\n        top: 100vh; \n        left: 0;\n        width: 100%;\n        transform: translateY(-66.23%); \n        max-width: 100%;\n        overflow: visible; \n        overflow-x: clip; \n        z-index: 10; \n        pointer-events: none;\n        height: 150vh; \n    }\n\n    .split-line-container svg {\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%; \n        display: block;\n        transition: opacity 0.3s ease;\n    }\n\n    .split-line-container .st0, \n    .split-line-container .st1 {\n        fill: none;\n        stroke-miterlimit: 10;\n        stroke-width: 2px;\n        vector-effect: non-scaling-stroke; \n    }\n\n    .split-line-container .st0 { stroke: #000; }    \/* Black (Scroll) *\/\n    .split-line-container .st1 { stroke: #ffffff; } \/* White (Auto) *\/\n\n    \/* --- Styles for Interactive Points --- *\/\n    .interactive-points-container {\n        position: absolute;\n        top: 0; left: 0; width: 100%; height: 100%;\n        pointer-events: none; \n        z-index: 20;\n    }\n\n    .interactive-point {\n        position: absolute;\n        transform: translate(-50%, -50%);\n        pointer-events: none; \n        display: flex;\n        align-items: center;\n        justify-content: center;\n        opacity: 0; \n        transition: opacity 0.6s ease;\n    }\n\n    .interactive-point.show-point {\n        opacity: 1;\n        pointer-events: auto;\n    }\n\n    .point-hover-area {\n        position: absolute;\n        width: 280px; \n        height: 280px;\n        border-radius: 50%;\n        background: transparent;\n        cursor: pointer;\n        z-index: 1;\n    }\n\n    .point-dot {\n        width: 16px;\n        height: 16px;\n        background-color: white;\n        border-radius: 50%;\n        position: relative;\n        z-index: 2;\n        transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); \n    }\n\n    .point-content {\n        position: absolute;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        gap: 8px;\n        z-index: 3;\n        pointer-events: auto; \n        cursor: pointer;\n        text-decoration: none;\n    }\n\n    .point-text {\n        color: white;\n        font-family: inherit;\n        font-size: 20px;\n        font-weight: 400;\n        text-align: center; \n        text-shadow: 0 2px 4px rgba(0,0,0,0.4);\n        transform-origin: center center;\n        line-height: 1.4;\n    }\n\n    .point-icon {\n        width: 200px; \n        height: auto;\n        filter: drop-shadow(0 2px 4px rgba(0,0,0,0.3));\n    }\n\n    \/* Desktop sizes and alignments *\/\n    .icon-epingles { width: 133px !important; }\n    .icon-scalpel { width: 260px !important; }\n    \n    @media (min-width: 1025px) {\n        .icon-bobine { \n            width: 170px !important; \n            margin-left: 20px; \n        }\n        .pc-broderie {\n            margin-top: -15px;\n        }\n    }\n\n    \/* --- HOVER AND AUTO ANIMATIONS --- *\/\n    .interactive-point:hover .point-dot,\n    .interactive-point.is-active .point-dot {\n        transform: scale(1.6);\n    }\n\n    \/* --- POSITIONING OF TEXT AND ICON AROUND THE DOT --- *\/\n    .pos-top { bottom: 20px; left: 50%; transform: translateX(-50%); }\n    .pos-bottom { top: 20px; left: 50%; transform: translateX(-50%); flex-direction: column-reverse; }\n    .pos-top-right { bottom: 15px; left: 15px; align-items: flex-start; }\n    .pos-top-left { bottom: 15px; right: 15px; align-items: flex-end; }\n    .pos-bottom-right { top: 15px; left: 15px; align-items: flex-start; flex-direction: column-reverse; }\n    .pos-bottom-left { top: 15px; right: 15px; align-items: flex-end; flex-direction: column-reverse; }\n\n    \/* Custom PC Positions *\/\n    .pos-ciseaux-pc { top: -10px; left: 50%; transform: translateX(-50%); flex-direction: column-reverse; gap: 0px; }\n    .pos-ciseaux-pc .point-text { margin-top: -40px; text-align: center; }\n    .pos-scalpel-pc { bottom: -100px; left: 15px; align-items: center; }\n    .pos-scalpel-pc .point-text { position: relative; right: 32px; top: 100px; } \n    .pos-broderie-pc { top: 20px; left: 50%; transform: translateX(-50%); align-items: center; flex-direction: column-reverse; }\n\n    \/* Custom Mobile Positions *\/\n    .pos-epingles-mobile { bottom: 20px; left: 50%; transform: translateX(-50%); }\n    .pos-tapisserie-mobile { bottom: 15px; left: -35px; align-items: center; } \n    .pos-ciseaux-mobile { top: -45px; right: 55px; align-items: center; } \n    \n    .pos-scalpel-mobile { bottom: -10px; left: 50%; transform: translateX(-50%); } \n    .pos-scalpel-mobile .point-icon { margin-left: 40px; } \n    .pos-scalpel-mobile .point-text { position: relative; top: 67px; z-index: 2; } \n    \n    .pos-broderie-mobile { top: -50px; right: 18px; } \n\n    \/* --- Responsive Logic --- *\/\n    .svg-mobile { opacity: 0; visibility: hidden; }\n    .svg-desktop { opacity: 1; visibility: visible; }\n\n    @media (max-width: 1024px) {\n        .svg-desktop { opacity: 0; visibility: hidden; }\n        .svg-mobile { opacity: 1; visibility: visible; }\n        .split-line-container { transform: translateY(-82.39%); height: 85vh; }\n\n        @media (min-height: 876px) {\n            .split-line-container { height: 95vh; }\n        }\n        \n        .point-content { flex-direction: column !important; }\n        .point-text { font-size: 13px; margin-top: 0 !important; }\n        .point-icon { width: 100px; }\n        .icon-epingles { width: 67px !important; }\n        .icon-scalpel { width: 167px !important; }\n        .icon-bobine { width: 87px !important; }\n        .point-hover-area { width: 200px; height: 200px; }\n        .pos-ciseaux-mobile .point-icon { margin-top: -15px; }\n        .pos-broderie-mobile .point-text { text-align: right; }\n    }\n\n    @media (max-width: 450px) {\n        .pos-ciseaux-mobile { right: 25px !important; }\n        .split-line-container .st0, \n        .split-line-container .st1 { stroke-width: 1px; }\n    }\n<\/style>\n\n<div class=\"split-line-container\" id=\"line-container\">\n    <!-- SVG Desktop (> 1024px) -->\n    <svg class=\"svg-desktop\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.1\" viewBox=\"0 0 1920 1673\" preserveAspectRatio=\"none\">\n        <defs>\n            <mask id=\"mask-quote\" maskUnits=\"userSpaceOnUse\">\n                <rect x=\"-1000\" y=\"-1000\" width=\"4000\" height=\"4000\" fill=\"white\"><\/rect>\n                <rect id=\"quote-hole\" x=\"-9999\" y=\"-9999\" width=\"0\" height=\"0\" fill=\"black\"><\/rect>\n            <\/mask>\n        <\/defs>\n        <path class=\"st0\" mask=\"url(#mask-quote)\" d=\"M1689.11,1108.03c2.56,42.73,14.6,84.32,33.56,129.86,57.48,138.07,154.67,24.3,60.67-23.11-79.18-39.93-218.05,45.28-265.11,129.78-78.22,140.44-115.56,286.81-399.41,307.56\"><\/path>\n        <path class=\"st1\" mask=\"url(#mask-quote)\" d=\"M-19.86,609.81s90.12-35.78,176.38-72.31c9.39-3.97,50.74-20.22,50.74-20.22,64.45-24.18,123.2-37.1,169.56-11.12,58.61,32.84,87.89,105.11,63.39,184.31s-60.45,184.46-111.93,162.18c-51.47-22.28.58-132.36,119.26-196.11,53.39-28.68,113.64-49.77,187.07-45.15,43.91,2.79,67.08,20.22,89.09,35.2,73.45,49.97,108.28,87.3,225.29,80.14,67.02-4.1,134.26-26.89,186.03-50.97l20.71-10.1c28.6-14.62,50.7-28.82,62.81-38.73,36.15-29.58,63.65-56.54,81.94-83.86,17.9-26.74,26.75-58.52,25.91-90.69h0c-.15-5.75-.61-11.49-1.4-17.19-.2-1.43-.41-2.78-.62-3.95-12.37-67.58-120.37-79.58-151.03,32.56-11.84,43.31-12.21,88.05,11.18,153.3s69.73,208.11,185.52,158.68c87.74-37.46,168.12-218.42,275.49-280.83,26.15-15.2,72.48-28.96,120.86-24.43,104.13,8.11,172.28,145.48,80.13,272.55-120.59,166.28-163.18,268.5-157.41,364.96\"><\/path>\n    <\/svg>\n\n    <!-- SVG Mobile (< 1024px) -->\n    <svg class=\"svg-mobile\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.1\" viewBox=\"0 0 945 1652.44\" preserveAspectRatio=\"none\">\n        <path class=\"st1\" d=\"M-2.03,57.82s57.06,36.41,144.05,28.13,130.98-32.97,229.98-28.13,138.72,35.28,173.36,82.56,66.88,126.21,73,140.12,21.51,66.22,74.02,62.19,45.47-60.56-13.17-65.97c-60.84-5.61-165.45,16.78-227.22,69.58-61.77,52.8-85.3,114.98-75.75,205.67s38.75,126.08,81.48,160.38,115.99,34.79,197.58,64.32,100.66,92.42,110.04,169.09,14.35,167.66,32,203.56,46.59,50.02,76.51,40.71c43.19-13.45,13.27-84.26-69.83-43.82-48.74,23.72-76.16,68.52-85.79,87.56-32.73,64.72-11.48,104.26,1.78,127.7\"><\/path>\n        <path class=\"st0\" d=\"M719.94,1361.48s51.8,91.59,25.06,140.52c-13.74,21.24,-32.5,35-45,38.5\"><\/path>\n    <\/svg>\n\n    <!-- INTERACTIVE POINTS -->\n    <div class=\"interactive-points-container\">\n        <!-- POINT 1 -->\n        <div class=\"interactive-point\" data-desktop-percent=\"0.08\" data-mobile-percent=\"0.13\" data-pos-desktop=\"pos-top\" data-pos-mobile=\"pos-epingles-mobile\">\n            <div class=\"point-hover-area\"><\/div>\n            <div class=\"point-dot\"><\/div>\n            <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/sewing-fur-epv\/\" class=\"point-content\" title=\"Discover our Bespoke Fur Tailoring (EPV) craftsmanship\">\n                <span class=\"point-text\">Fur Couture<br>EPV<\/span>\n                <img decoding=\"async\" class=\"point-icon icon-epingles\" src=\"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/epingles_00000.png\" data-static=\"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/epingles_00000.png\" data-gif=\"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/epingles.webp\" alt=\"Pins\">\n            <\/a>\n        <\/div>\n\n        <!-- POINT 2 -->\n        <div class=\"interactive-point\" data-desktop-percent=\"0.35\" data-mobile-percent=\"0.35\" data-pos-desktop=\"pos-top\" data-pos-mobile=\"pos-tapisserie-mobile\">\n            <div class=\"point-hover-area\"><\/div>\n            <div class=\"point-dot\"><\/div>\n            <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/bespoke-upholstery-services\/\" class=\"point-content\" title=\"Discover our Upholstery craftsmanship\">\n                <span class=\"point-text\">Bespoke<br>Upholstery<\/span>\n                <img decoding=\"async\" class=\"point-icon\" src=\"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/truc-qui-fait-les-trous_00000.png\" data-static=\"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/truc-qui-fait-les-trous_00000.png\" data-gif=\"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/griffe-a-frapper-1-1.webp\" alt=\"Upholstery tool\">\n            <\/a>\n        <\/div>\n\n        <!-- POINT 3 -->\n        <div class=\"interactive-point\" data-desktop-percent=\"0.44\" data-mobile-percent=\"0.48\" data-pos-desktop=\"pos-ciseaux-pc\" data-pos-mobile=\"pos-ciseaux-mobile\">\n            <div class=\"point-hover-area\"><\/div>\n            <div class=\"point-dot\"><\/div>\n            <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/bespoke-soft-furnishings-curtains\/\" class=\"point-content\" title=\"Discover our Furnishing Couture craftsmanship\">\n                <span class=\"point-text\">Furnishing<br>Couture<\/span>\n                <img decoding=\"async\" class=\"point-icon\" src=\"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/Ciseaux_00008.png\" data-static=\"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/Ciseaux_00008.png\" data-gif=\"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/ciseaux-6.webp\" alt=\"Scissors\">\n            <\/a>\n        <\/div>\n\n        <!-- POINT 4 -->\n        <div class=\"interactive-point\" data-desktop-percent=\"0.53\" data-mobile-percent=\"0.68\" data-pos-desktop=\"pos-scalpel-pc\" data-pos-mobile=\"pos-scalpel-mobile\">\n            <div class=\"point-hover-area\"><\/div>\n            <div class=\"point-dot\"><\/div>\n            <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/bespoke-fur-leather-rugs\/\" class=\"point-content\" title=\"Discover our Bespoke Rug craftsmanship\">\n                <span class=\"point-text\">Bespoke<br>Rugs<\/span>\n                <img decoding=\"async\" class=\"point-icon icon-scalpel\" src=\"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/Scalpel_00000.png\" data-static=\"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/Scalpel_00000.png\" data-gif=\"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/scalpel-2.webp\" alt=\"Scalpel\">\n            <\/a>\n        <\/div>\n\n        <!-- POINT 5 -->\n        <div class=\"interactive-point\" data-desktop-percent=\"0.795\" data-mobile-percent=\"0.77\" data-pos-desktop=\"pos-broderie-pc\" data-pos-mobile=\"pos-broderie-mobile\">\n            <div class=\"point-hover-area\"><\/div>\n            <div class=\"point-dot\"><\/div>\n            <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/bespoke-haute-couture-embroidery\/\" class=\"point-content\" title=\"Discover our Embroidery craftsmanship\">\n                <span class=\"point-text pc-broderie\">Bespoke<br>Embroidery<\/span>\n                <img decoding=\"async\" class=\"point-icon icon-bobine\" src=\"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/bobine_00000.png\" data-static=\"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/bobine_00000.png\" data-gif=\"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/bobine-1.webp\" alt=\"Spool of thread\">\n            <\/a>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>\n    document.addEventListener(\"DOMContentLoaded\", () => {\n        const points = document.querySelectorAll('.interactive-point');\n\n        \/\/ EXPERT FUNCTION: Calculates the real length of the path on the screen (Screen Space)\n        function calculateScreenLengths() {\n            const calculateForPath = (path) => {\n                const svg = path.closest('svg');\n                const viewBox = svg.viewBox.baseVal;\n                const rect = svg.getBoundingClientRect();\n                \n                \/\/ If the SVG is hidden (e.g. display:none on mobile), return the standard length\n                if (rect.width === 0) return path.getTotalLength();\n\n                const scaleX = rect.width \/ viewBox.width;\n                const scaleY = rect.height \/ viewBox.height;\n                const length = path.getTotalLength();\n                const numSamples = 250; \/\/ High sampling precision\n                let screenLen = 0;\n                let lastPt = path.getPointAtLength(0);\n\n                for (let i = 1; i <= numSamples; i++) {\n                    const pt = path.getPointAtLength(i * length \/ numSamples);\n                    const dx = (pt.x - lastPt.x) * scaleX;\n                    const dy = (pt.y - lastPt.y) * scaleY;\n                    screenLen += Math.sqrt(dx * dx + dy * dy);\n                    lastPt = pt;\n                }\n                return screenLen;\n            };\n\n            document.querySelectorAll('.st1, .st0').forEach(path => {\n                const screenLength = calculateForPath(path);\n                path.dataset.screenLength = screenLength; \/\/ Store the real length\n\n                \/\/ Specific logic for the Auto line (White)\n                if(path.classList.contains('st1')) {\n                    if(!path.dataset.animated) {\n                        path.style.strokeDashoffset = screenLength;\n                        path.style.transition = 'stroke-dashoffset 1.5s ease-in-out';\n                    }\n                } \n                \/\/ Specific logic for the Scroll line (Black)\n                else {\n                    const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n                    const scrollHeight = document.documentElement.scrollHeight - innerHeight;\n                    let scrollPercentage = 0;\n                    if (scrollHeight > 0) {\n                        scrollPercentage = Math.min(1, (scrollTop \/ scrollHeight) * 3);\n                    }\n                    path.style.strokeDashoffset = screenLength - (screenLength * scrollPercentage);\n                }\n            });\n        }\n\n        \/\/ --- Dynamic size initialization ---\n        calculateScreenLengths();\n\n        function trackLineProgressAndShowPoints() {\n            function checkProgress() {\n                const isMobile = window.innerWidth <= 1024;\n                const activeSvg = isMobile ? document.querySelector('.svg-mobile') : document.querySelector('.svg-desktop');\n                const path = activeSvg.querySelector('.st1');\n                \n                \/\/ Use screen-calculated length, or fallback\n                const totalLength = parseFloat(path.dataset.screenLength) || path.getTotalLength();\n                const currentOffset = parseFloat(getComputedStyle(path).strokeDashoffset);\n                \n                if (isNaN(currentOffset)) {\n                    requestAnimationFrame(checkProgress);\n                    return;\n                }\n\n                const progress = Math.max(0, Math.min(1, 1 - (currentOffset \/ totalLength)));\n                let allShown = true;\n\n                points.forEach(point => {\n                    if (!point.classList.contains('show-point')) {\n                        allShown = false;\n                        const percentStr = isMobile ? point.dataset.mobilePercent : point.dataset.desktopPercent;\n                        const percent = parseFloat(percentStr);\n                        if (progress >= percent - 0.02) {\n                            point.classList.add('show-point');\n                        }\n                    }\n                });\n\n                if (!allShown && progress < 0.99) {\n                    requestAnimationFrame(checkProgress);\n                } else if (progress >= 0.99) {\n                    points.forEach(point => point.classList.add('show-point'));\n                }\n            }\n            requestAnimationFrame(checkProgress);\n        }\n\n        function updateQuoteMask() {\n            const quoteDiv = document.getElementById('quote') || document.querySelector('.bloc-citation-ambition');\n            const holeRect = document.getElementById('quote-hole');\n            const svgDesktop = document.querySelector('.svg-desktop');\n\n            if (quoteDiv && holeRect && svgDesktop) {\n                const svgRect = svgDesktop.getBoundingClientRect();\n                const qRect = quoteDiv.getBoundingClientRect();\n\n                if (svgRect.width === 0) return;\n\n                const scaleX = 1920 \/ svgRect.width;\n                const scaleY = 1673 \/ svgRect.height;\n\n                const paddingX = 40; \n                const paddingYTop = 20; \n                const paddingYBottom = -70; \n\n                const relativeX = (qRect.left - svgRect.left - paddingX) * scaleX;\n                const relativeY = (qRect.top - svgRect.top - paddingYTop) * scaleY;\n                const relativeW = (qRect.width + paddingX * 2) * scaleX;\n                const relativeH = (qRect.height + paddingYTop + paddingYBottom) * scaleY;\n\n                holeRect.setAttribute('x', relativeX);\n                holeRect.setAttribute('y', relativeY);\n                holeRect.setAttribute('width', relativeW);\n                holeRect.setAttribute('height', relativeH);\n            }\n        }\n\n        window.addEventListener('load', () => {\n            updateQuoteMask();\n\n            const quoteDiv = document.getElementById('quote') || document.querySelector('.bloc-citation-ambition');\n            if (quoteDiv && window.ResizeObserver) {\n                const resizeObserver = new ResizeObserver(() => updateQuoteMask());\n                resizeObserver.observe(quoteDiv);\n                resizeObserver.observe(document.body);\n            }\n\n            \/\/ Launch animation after load\n            setTimeout(() => {\n                document.querySelectorAll('.st1').forEach(path => {\n                    path.dataset.animated = \"true\";\n                    path.style.strokeDashoffset = '0';\n                });\n                trackLineProgressAndShowPoints();\n            }, 500);\n        });\n\n        window.addEventListener('scroll', () => {\n            const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n            const scrollHeight = document.documentElement.scrollHeight - innerHeight;\n\n            if (scrollHeight > 0) {\n                const scrollPercentage = Math.min(1, (scrollTop \/ scrollHeight) * 3);\n                document.querySelectorAll('.st0').forEach(path => {\n                    const length = parseFloat(path.dataset.screenLength) || path.getTotalLength();\n                    path.style.strokeDashoffset = length - (length * scrollPercentage);\n                });\n            }\n        });\n\n        function updatePointsPosition() {\n            \/\/ Recalculate screen lengths on resize\n            calculateScreenLengths();\n\n            const isMobile = window.innerWidth <= 1024;\n            const activeSvg = isMobile ? document.querySelector('.svg-mobile') : document.querySelector('.svg-desktop');\n            const path = activeSvg.querySelector('.st1'); \n            const pathLength = path.getTotalLength();\n            const svgRect = activeSvg.getBoundingClientRect();\n            const viewBox = activeSvg.viewBox.baseVal;\n            const scaleX = svgRect.width \/ viewBox.width;\n            const scaleY = svgRect.height \/ viewBox.height;\n\n            points.forEach(point => {\n                const percentStr = isMobile ? point.dataset.mobilePercent : point.dataset.desktopPercent;\n                const percent = parseFloat(percentStr);\n                const pt = path.getPointAtLength(pathLength * percent);\n                const px = pt.x * scaleX;\n                const py = pt.y * scaleY;\n                point.style.left = `${px}px`;\n                point.style.top = `${py}px`;\n\n                const contentBlock = point.querySelector('.point-content');\n                const posClass = isMobile ? point.dataset.posMobile : point.dataset.posDesktop;\n                contentBlock.className = `point-content ${posClass}`;\n            });\n\n            updateQuoteMask();\n        }\n\n        window.addEventListener('load', updatePointsPosition);\n        window.addEventListener('resize', updatePointsPosition);\n        updatePointsPosition();\n\n        const preloadedBlobs = {};\n        points.forEach(point => {\n            const gifSrc = point.querySelector('.point-icon').getAttribute('data-gif');\n            if (gifSrc && !preloadedBlobs[gifSrc]) {\n                preloadedBlobs[gifSrc] = 'loading'; \n                fetch(gifSrc).then(r => r.blob()).then(b => { preloadedBlobs[gifSrc] = b; });\n            }\n        });\n\n        points.forEach(point => {\n            const img = point.querySelector('.point-icon');\n            const staticSrc = img.getAttribute('data-static');\n            const gifSrc = img.getAttribute('data-gif');\n            let currentObjectUrl = null;\n\n            point._activate = () => {\n                point.classList.add('is-active');\n                if(gifSrc) {\n                    if (preloadedBlobs[gifSrc] instanceof Blob) {\n                        if (currentObjectUrl) URL.revokeObjectURL(currentObjectUrl);\n                        currentObjectUrl = URL.createObjectURL(preloadedBlobs[gifSrc]);\n                        img.src = currentObjectUrl;\n                    } else {\n                        img.src = gifSrc.split('?')[0] + '?t=' + new Date().getTime();\n                    }\n                }\n            };\n\n            point._deactivate = () => {\n                point.classList.remove('is-active');\n                if(staticSrc) img.src = staticSrc;\n                setTimeout(() => {\n                    if (currentObjectUrl) { URL.revokeObjectURL(currentObjectUrl); currentObjectUrl = null; }\n                }, 200);\n            };\n\n            point.addEventListener('mouseenter', () => {\n                if (window.innerWidth > 1024) point._activate();\n            });\n\n            point.addEventListener('mouseleave', () => {\n                if (window.innerWidth > 1024) point._deactivate();\n            });\n        });\n\n        let autoPlayInterval = null;\n        let currentPointIndex = 0;\n\n        function manageAutoPlay() {\n            const isMobileOrTablet = window.innerWidth <= 1024;\n\n            if (isMobileOrTablet) {\n                if (!autoPlayInterval) {\n                    const playNextPoint = () => {\n                        points.forEach(p => p._deactivate());\n                        const visiblePoints = Array.from(points).filter(p => p.classList.contains('show-point'));\n                        if (visiblePoints.length > 0) {\n                            currentPointIndex = currentPointIndex % visiblePoints.length;\n                            visiblePoints[currentPointIndex]._activate();\n                            currentPointIndex++;\n                        }\n                    };\n                    playNextPoint();\n                    autoPlayInterval = setInterval(playNextPoint, 2000);\n                }\n            } else {\n                if (autoPlayInterval) {\n                    clearInterval(autoPlayInterval);\n                    autoPlayInterval = null;\n                    points.forEach(p => p._deactivate()); \n                }\n            }\n        }\n\n        window.addEventListener('resize', manageAutoPlay);\n        setTimeout(manageAutoPlay, 800); \n    });\n<\/script>\n\n\n\n<div id=\"wp-custom-hero-banner\" class=\"wp-custom-isolated-banner uagb-block-16089054 wp-block-uagb-image--layout-default wp-block-uagb-image--effect-static wp-block-uagb-image--align-none img-full-cover-home\">\n    <figure class=\"wp-block-uagb-image__figure\">\n        <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/tapisserie-ameublement-sur-mesure-fourrure.jpg\" srcset=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/tapisserie-ameublement-sur-mesure-fourrure.jpg 780w, https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/tapisserie-ameublement-sur-mesure-fourrure.jpg 360w\" sizes=\"(max-width: 480px) 150px\" alt=\"Bespoke upholstery and custom fur tailoring - Norki\" width=\"1920\" height=\"1080\" fetchpriority=\"high\" loading=\"eager\" role=\"img\">\n        <div class=\"text-overlay-home\">\n            <h1 style=\"margin: 0; padding: 0; font-size: inherit; font-weight: inherit; line-height: inherit; color: inherit; background: transparent;\">\n                <span class=\"hero-title-script\">Creative Artisans<\/span>\n                <span class=\"hero-title-baskerville\">The Art of French Living<\/span>\n            <\/h1>\n        <\/div>\n    <\/figure>\n<\/div>\n\n<style>\n\/* 1. Reset et Conteneur *\/\n.wp-custom-isolated-banner {\n    --overlay-text-color: #ffffff;\n    --overlay-bottom: 40px;\n    --overlay-left: 40px;\n    position: relative;\n    width: 100%;\n    overflow: hidden; \/* Emp\u00eache tout d\u00e9bordement r\u00e9siduel *\/\n}\n\n.wp-block-uagb-image__figure {\n    margin: 0;\n    padding: 0;\n    position: relative;\n}\n\n\/* 2. Correction de l'image pour le responsive *\/\n.wp-custom-isolated-banner img {\n    width: 100vw !important;  \/* Force la largeur \u00e0 100% de la fen\u00eatre *\/\n    height: 100vh !important; \/* Maintient la hauteur pleine *\/\n    object-fit: cover;        \/* Recadre l'image proprement sans la d\u00e9former *\/\n    object-position: 20% center;\n    display: block;\n    max-width: none !important; \/* Annule d'\u00e9ventuelles restrictions de WordPress *\/\n}\n\n\/* 3. Positionnement du texte *\/\n.wp-custom-isolated-banner .text-overlay-home {\n    position: absolute; \/* Indispensable pour utiliser bottom\/left sur l'image *\/\n    color: var(--overlay-text-color);\n    bottom: var(--overlay-bottom);\n    left: var(--overlay-left);\n    z-index: 2;\n}\n\n\/* 4. Typographies *\/\n.hero-title-script {\n    font-family: \"Bestermind\", 'Alex Brush', cursive;\n    font-size: 2.5rem;\n    display: block;\n    line-height: 1.2;\n}\n\n.hero-title-baskerville {\n    font-family: \"Baskerville\", Georgia, serif;\n    font-style: italic;\n    font-size: 2.5rem;\n    font-weight: 400;\n    display: block;\n    line-height: 1.4;\n}\n\n\/* 5. Ajustements Mobile & Tablette *\/\n@media (max-width: 1024px) {\n    .hero-title-baskerville, \n    .hero-title-script {\n        font-size: 1.1rem;\n    }\n    \n    .wp-custom-isolated-banner .text-overlay-home {\n        bottom: 60px;\n        left: 20px;\n    }\n}\n@media (max-width: 450px) {\n .hero-title-baskerville, \n    .hero-title-script {\n        font-size: 0.8rem !important;\n    }\n}\n<\/style>\n\n\n\n<style>\n    \/* ==========================================================================\n       SECTION : THE GOLDEN THREAD OF NORKI\n       ========================================================================== *\/\n    :root {\n        --bg-color: #F6F3EF;\n        --text-main: #000000;\n        --font-serif: 'Playfair Display', Georgia, serif;\n        --font-sans: 'Inter', Helvetica, sans-serif;\n        --font-script: 'Alex Brush', cursive;\n    }\n\n    * { \n        margin: 0; \n        padding: 0; \n        box-sizing: border-box; \n    }\n\n    body {\n        background-color: var(--bg-color);\n        color: var(--text-main);\n        font-family: var(--font-sans);\n        overflow-x: hidden;\n        padding-bottom: 100px;\n    }\n\n    .sonia-global-texte {\n        font-family: var(--font-serif);\n        font-size: clamp(1.4rem, 2.5vw, 35px);\n        line-height: 1.2;\n        font-weight: 600;\n    }\n\n    .passion-chalet-texte { \n        font-weight: 400; \n    }\n\n    .baskerville-italic-font { \n        font-family: \"Baskerville\", var(--font-serif); \n    }\n\n    .bestermind-font, .name-citation {\n        font-family: \"Bestermind\", var(--font-script);\n        font-size: 2.5rem;\n        transform: rotate(-3deg);\n        margin-top: 10px;\n        display: inline-block;\n    }\n\n    .norki-container {\n        max-width: 1900px !important;\n        margin: 0 auto;\n        padding: 60px 40px;\n        position: relative;\n    }\n\n    .top-section {\n        display: flex;\n        justify-content: space-between;\n        align-items: flex-start;\n        position: relative;\n        z-index: 2;\n        margin-bottom: 120px;\n    }\n\n    .bloc-citation-ambition {\n        max-width: 600px;\n        margin: 40px auto 0;\n        text-align: center;\n        position: relative;\n        opacity: 0;\n        transform: translateY(40px);\n        transition: opacity 2s cubic-bezier(0.2, 0.8, 0.2, 1), transform 2s cubic-bezier(0.2, 0.8, 0.2, 1);\n    }\n\n    .bloc-citation-ambition.is-visible { \n        opacity: 1; \n        transform: translateY(0); \n    }\n\n    .bloc-citation-ambition p:first-of-type {\n        font-size: 1.6rem;\n        line-height: 1.5;\n        color: black;\n        margin-bottom: 20px;\n    }\n\n    .bloc-citation-ambition::after {\n        content: '\"';\n        font-family: \"Pertili\", var(--font-serif) !important;\n        font-size: 140px;\n        position: absolute;\n        right: -6%;\n        bottom: -10px;\n        line-height: 1;\n        color: #000;\n    }\n\n    \/* --- GRILLE \u00c9DITORIALE --- *\/\n    .editorial-grid { \n        position: relative; \n        z-index: 2; \n        height: 900px; \n    }\n\n    .img-bw-worker { \n        position: absolute; \n        left: 0; \n        top: 0; \n        width: 35%; \n        max-width: 450px; \n        height: auto; \n        z-index: 1; \n    }\n\n    .img-spools { \n        position: absolute; \n        left: 20%; \n        top: 350px; \n        width: 18%; \n        max-width: 320px; \n        height: auto; \n        transform: rotate(-3deg); \n        z-index: 3; \n        max-height: 360px; \n    }\n\n    .desc-text { \n        font-family: var(--font-sans); \n        font-size: 0.95rem; \n        line-height: 1.5; \n        color: black; \n        max-width: 380px; \n    }\n\n    .text-main-desc { \n        position: absolute; \n        left: 40%; \n        top: 250px; \n        z-index: 2; \n    }\n\n    .text-main-desc strong { \n        font-family: var(--font-serif); \n        font-style: italic; \n        font-size: 1rem; \n        font-weight: 600; \n        color: #000; \n    }\n\n    .text-sub-desc { \n        position: absolute; \n        right: 38%; \n        top: 750px; \n        z-index: 2; \n    }\n\n    .text-sub-desc strong { \n        font-weight: 400; \n        color: #000; \n    }\n\n    .img-hands { \n        position: absolute; \n        right: 0; \n        top: 450px; \n        width: 30%; \n        max-width: 400px; \n        height: auto; \n        z-index: 2; \n    }\n\n    .bloc-citation-ambition::before { \n        top: -30px; \n    }\n\n    \/* --- LIENS INTERACTIFS (Design System) --- *\/\n    .nk-badge-link {\n        position: absolute;\n        right: 20%;\n        top: 380px;\n        width: 140px;\n        height: auto;\n        z-index: 4;\n        display: block;\n        transition: opacity 0.3s ease, transform 0.3s ease;\n        text-decoration: none;\n    }\n\n    .nk-badge-link:hover {\n        opacity: 0.85;\n        transform: scale(1.03);\n    }\n\n    .nk-badge-link .badge-epv-static {\n        width: 100%;\n        height: auto;\n        display: block;\n    }\n\n    .nk-editorial-inline-link {\n        color: inherit;\n        text-decoration: underline;\n        text-decoration-color: currentColor;\n        text-underline-offset: 3px;\n        text-decoration-thickness: 1px;\n        transition: text-decoration-color 0.3s ease, opacity 0.3s ease;\n    }\n\n    .nk-editorial-inline-link:hover {\n        text-decoration-color: transparent;\n        opacity: 0.7;\n    }\n\n    \/* --- RESPONSIVE TABLET & MOBILE --- *\/\n    @media (max-width: 1024px) {\n        .norki-container { \n            padding: 40px 20px; \n            width: 100%; \n            max-width: 100vw; \n            overflow-x: hidden; \n        }\n\n        .top-section { \n            flex-direction: column; \n            align-items: center; \n            text-align: center; \n            margin-bottom: 60px; \n            padding: 0 20px; \n        }\n\n        .sonia-global-texte { \n            margin-bottom: 40px;\n        }\n\n        .bloc-citation-ambition { \n            margin: 40px auto 0; \n            padding: 0 20px; \n            width: 100%; \n        }\n\n        .bloc-citation-ambition::before { \n            left: -20px; \n            font-size: 100px; \n        }\n\n        .bloc-citation-ambition::after { \n            right: -3%; \n            bottom: -5px; \n            font-size: 100px; \n        }\n\n        .bloc-citation-ambition p:first-of-type { \n            font-size: 20px; \n        }\n\n        .bloc-citation-ambition .name-citation { \n            font-size: 38px; \n        }\n\n        .editorial-grid { \n            height: auto; \n            display: grid; \n            grid-template-columns: 45% 55%; \n            gap: 0; \n            padding-top: 20px; \n        }\n\n        .img-bw-worker, \n        .img-spools, \n        .text-main-desc, \n        .nk-badge-link, \n        .text-sub-desc, \n        .img-hands {\n            position: relative; \n            top: auto; \n            left: auto; \n            right: auto; \n            bottom: auto; \n            transform: none;\n        }\n\n        .img-bw-worker { \n            grid-column: 1 \/ -1; \n            width: 85%; \n            max-width: 450px; \n            margin-left: 0; \n        }\n\n        .img-spools { \n            grid-column: 1 \/ -1; \n            width: 60%; \n            max-width: 300px; \n            justify-self: end; \n            margin-top: -25%; \n            margin-right: 5%; \n        }\n\n        .text-main-desc { \n            grid-column: 1 \/ -1; \n            padding: 40px 5% 20px 0; \n            max-width: 500px; \n        }\n\n        .nk-badge-link { \n            grid-column: 1 \/ -1; \n            width: 100px; \n            justify-self: center; \n            margin-left: 15%; \n            margin-bottom: -50px; \n            z-index: 4; \n        }\n\n        .text-sub-desc { \n            grid-column: 1; \n            padding-left: 0px; \n            padding-right: 25px; \n            align-self: end; \n            margin-bottom: 20px; \n        }\n\n        .img-hands { \n            grid-column: 2; \n            width: 95%; \n            max-width: 380px; \n            justify-self: end; \n        }\n    }\n<\/style>\n\n<div class=\"norki-container\">\n    <div class=\"top-section\">\n        <h2 class=\"sonia-linard-texte sonia-global-texte\">\n            The Golden Thread<br>\n            <span class=\"baskerville-italic-font passion-chalet-texte\">of Norki<\/span>\n        <\/h2>\n        <div class=\"bloc-citation-ambition\" id=\"quote\">\n            <p class=\"baskerville-italic-font\">\n                Some Houses write their history<br>\n                with words.<br>\n                Ours is written with a thread.\n            <\/p>\n            <p class=\"bestermind-font name-citation\">Sonia Linard<\/p>\n        <\/div>\n    <\/div>\n    <div class=\"editorial-grid\">\n        <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/Sonia-Linard-Norki.jpg\" alt=\"Sonia Linard Norki\" class=\"img-bw-worker\">\n        <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/Atelier-Couture-Norki.jpg\" alt=\"Norki Couture Workshop\" class=\"img-spools\">\n        <div class=\"desc-text text-main-desc\">\n            <span class=\"baskerville-italic-font\">The Golden Thread<\/span> of NORKI is a silent signature\u2014the mark of a Haute Couture Maison that chooses timelessness over display. It weaves together the heritage of French craftsmanship with a contemporary vision of luxury and <span class=\"baskerville-italic-font\">art de vivre<\/span>.\n        <\/div>\n        \n        <!-- Logo EPV cliquable avec animation d'\u00e9chelle au survol -->\n        <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/living-heritage-company-label-epv\/\" class=\"nk-badge-link\" title=\"Discover our Living Heritage Company (EPV) label\">\n            <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/Logo-EPV-Noir.png\" alt=\"Living Heritage Company Label\" class=\"badge-epv-static\">\n        <\/a>\n\n        <div class=\"desc-text text-sub-desc\">\n            Founded on the mastery of the gesture and the uncompromising quality of materials, our Maison, <strong><a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/living-heritage-company-label-epv\/\" class=\"nk-editorial-inline-link\" title=\"Discover our Living Heritage Company (EPV) label\">distinguished as a Living Heritage Company<\/a><\/strong>, places its Atelier within the great tradition of French excellence.\n        <\/div>\n        <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/Plaid-sur-mesure-Norki.jpeg\" alt=\"Bespoke Norki throw\" class=\"img-hands\">\n    <\/div>\n<\/div>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', () => {\n    const quoteSection = document.getElementById('quote');\n    const quoteObserver = new IntersectionObserver((entries, observer) => {\n        entries.forEach(entry => {\n            if (entry.isIntersecting) {\n                entry.target.classList.add('is-visible');\n                observer.unobserve(entry.target);\n            }\n        });\n    }, { root: null, rootMargin: '0px', threshold: 0.3 });\n    if (quoteSection) quoteObserver.observe(quoteSection);\n});\n<\/script>\n\n\n\n<style>\n  #norki-hero-module {\n    \/* Component global variables *\/\n    --norki-text-color: #000000;\n    --norki-bg-color: #e6e6e8; \/* Estimated image background color, adjust if needed *\/\n  }\n\n  .norki-hero-figure {\n    position: relative;\n    height: auto !important;\n    min-height: 0 !important;\n    margin: 0;\n    display: block;\n    background-color: transparent;\n  }\n\n  .norki-hero-image {\n    width: 100%;\n    height: auto;\n    aspect-ratio: 16 \/ 9;\n    object-fit: contain;\n    display: block;\n  }\n\n  .norki-hero-overlay {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    position: absolute;\n    color: var(--norki-text-color);\n    font-size: 35px;\n    z-index: 4;\n    left: 50%;\n    top: 50%;\n    transform: translate(-50%, -50%); \n    width: 100%;\n    text-align: center;\n  }\n\n  .norki-hero-title {\n    margin: 0 !important;\n    padding: 0 !important;\n    font-size: 35px;\n    font-weight: inherit;\n    line-height: 1.2;\n    color: inherit;\n    background: transparent;\n    display: block;\n  }\n\n  .norki-hero-button-decouvrir {\n    display: inline-block;\n    margin-top: 20px;\n    padding: 3px 35px;\n    background-color: transparent;\n    color: var(--norki-text-color);\n    border: 1px solid var(--norki-text-color);\n    text-decoration: none;\n    font-size: 18px;\n    letter-spacing: 1px;\n    transition: all 0.3s ease;\n  }\n\n  .norki-hero-button-decouvrir:hover {\n    background-color: var(--norki-text-color);\n    color: #ffffff;\n  }\n\n  \/* =========================================\n     Responsive: Tablets <= 1024px\n     ========================================= *\/\n  @media (max-width: 1024px) {\n    .norki-hero-overlay, .norki-hero-title {\n      font-size: 1.4rem !important;\n    }\n  }\n\n  \/* =========================================\n     Responsive: Mobile &#038; Tablets < 720px\n     ========================================= *\/\n  @media (max-width: 720px) {\n    .norki-hero-figure {\n      \/* Background color and top padding spacing for mobile layout *\/\n      background-color: var(--norki-bg-color);\n      padding-top: 110px; \n    }\n\n    .norki-hero-overlay {\n      top: 45px; \n      transform: translateX(-50%); \n    }\n    \n    .norki-hero-button-decouvrir {\n      margin-top: 15px !important;\n      font-size: 14px;\n      padding: 4px 25px; \/* Adjusted padding to balance the button on mobile screens *\/\n    }\n  }\n<\/style>\n\n<div id=\"norki-hero-module\" class=\"norki-hero-container\">\n    <figure class=\"norki-hero-figure\">\n        \n        <img decoding=\"async\" class=\"norki-hero-image\" style=\"z-index: 3; position: relative;\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Canape-sur-mesure-16-9-scaled.jpg\" srcset=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Canape-sur-mesure-16-9-scaled.jpg 2560w, https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Canape-sur-mesure-16-9-scaled.jpg 780w, https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Canape-sur-mesure-16-9-scaled.jpg 360w\" sizes=\"auto, (max-width: 480px) 100vw, 100vw\" alt=\"Bespoke Norki sofa\" width=\"1920\" height=\"1080\" loading=\"lazy\" role=\"img\">\n        \n        <div class=\"norki-hero-overlay\">\n            <h2 class=\"baskerville-italic-font norki-hero-title\">\n                Bespoke\n            <\/h2>\n            \n            <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/high-end-interior-design\/\" class=\"norki-hero-button-decouvrir\" title=\"Discover Bespoke Interior Design\">Discover<\/a>\n        <\/div>\n        \n    <\/figure>\n<\/div>\n\n\n\n<!-- ==========================================\n     BLOC HTML - S\u00c9MANTIQUE & INDEXABILIT\u00c9\n     ========================================== -->\n<section id=\"wp-custom-projects-slider\" class=\"wp-custom-projects-slider-container\" aria-label=\"Our creations\">\n    \n    <!-- Bloc Information -->\n    <div class=\"projects-info\">\n        <h2>Our Creations <br><span>Around the World<\/span><\/h2>\n        <p>For over 15 years, we have had the privilege of collaborating with the world\u2019s most renowned architects. From Paris to New York, Aspen to Saint-Moritz, and Dubai to Monaco, they entrust us with their vision to elevate <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/\" class=\"projects-inline-link\" title=\"View all bespoke creations by Norki\">their projects<\/a>.<\/p>\n        <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/\" class=\"link-voir-tout\">View All<\/a>\n    <\/div>\n\n    <!-- Zone Slider -->\n    <div class=\"projects-slider\">\n        <button class=\"nav-arrow left-arrow\" aria-label=\"Previous project\">\n            <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/themes\/twentytwentyfour\/assets\/images\/arrow-right.svg\" alt=\"\" aria-hidden=\"true\">\n        <\/button>\n        <button class=\"nav-arrow right-arrow\" aria-label=\"Next project\">\n            <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/themes\/twentytwentyfour\/assets\/images\/arrow-right.svg\" alt=\"\" aria-hidden=\"true\">\n        <\/button>\n\n        <!-- Slide 1 : Paris -->\n        <article class=\"slide\">\n            <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/ec1f0-61882.jpg\" alt=\"Bespoke interior design project in Paris\">\n            <div class=\"slide-content\">\n                <div class=\"slide-content-text\">\n                    <span class=\"slide-city\">Paris<\/span>\n                    <h3>Haussmann apartment by Tala Fustok<\/h3>\n                    <p>Wall-to-wall shearling rug<\/p>\n                <\/div>\n                <a href=\"#paris\" class=\"link-voir\">View<\/a>\n            <\/div>\n        <\/article>\n\n        <!-- Slide 2 : Saint-Moritz (Active par d\u00e9faut) -->\n        <article class=\"slide active\">\n            <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/1bb95377-8fa3-434a-8cce-a54d6dcc442a.jpeg\" alt=\"Bespoke interior design project in Saint-Moritz\">\n            <div class=\"slide-content\">\n                <div class=\"slide-content-text\">\n                    <span class=\"slide-city\">Saint-Moritz<\/span>\n                    <h3>Exceptional chalet by Jacques Garcia<\/h3>\n                    <p>Bespoke fur rugs and furniture<\/p>\n                <\/div>\n                <a href=\"#saint-moritz\" class=\"link-voir\">View<\/a>\n            <\/div>\n        <\/article>\n\n        <!-- Slide 3 : Belgium -->\n        <article class=\"slide\">\n            <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Nomad-rug_Norki_Belgium.png\" alt=\"Bespoke interior design project in Belgium\">\n            <div class=\"slide-content\">\n                <div class=\"slide-content-text\">\n                    <span class=\"slide-city\">Belgium<\/span>\n                    <h3>North Sea home by Olivier Dwek<\/h3>\n                    <p>Restoration of Pierre Jeanneret furniture<br>Bespoke sheepskin rug<\/p>\n                <\/div>\n                <a href=\"#belgium\" class=\"link-voir\">View<\/a>\n            <\/div>\n        <\/article>\n\n        <!-- Slide 4 : Gstaad -->\n        <article class=\"slide\">\n            <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Projet-Humbert-et-Poyet.jpg\" alt=\"Bespoke interior design project in Gstaad\">\n            <div class=\"slide-content\">\n                <div class=\"slide-content-text\">\n                    <span class=\"slide-city\">Gstaad<\/span>\n                    <h3>Family chalet by Humbert &amp; Poyet<\/h3>\n                    <p>Bespoke furniture, rugs &amp; throws<\/p>\n                <\/div>\n                <a href=\"#gstaad\" class=\"link-voir\">View<\/a>\n            <\/div>\n        <\/article>\n\n        <!-- Slide 5 : Andorra -->\n        <article class=\"slide\">\n            <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Cowhide-round-sofas_GrauRoig.jpg\" alt=\"Bespoke interior design project in Andorra\">\n            <div class=\"slide-content\">\n                <div class=\"slide-content-text\">\n                    <span class=\"slide-city\">Andorra<\/span>\n                    <h3>Palace redesigned by Norki<\/h3>\n                    <p>Bespoke furniture, wall panels &amp; cushions<\/p>\n                <\/div>\n                <a href=\"#andorra\" class=\"link-voir\">View<\/a>\n            <\/div>\n        <\/article>\n\n    <\/div>\n<\/section>\n\n<!-- ==========================================\n     BLOC CSS - STYLES INITIAUX & TOUCH OPTIMIS\u00c9S\n     ========================================== -->\n<style>\n    \/* ==========================================\n       VARIABLES CSS - MODIFIEZ LES COULEURS ICI\n       ========================================== *\/\n    .wp-custom-projects-slider-container {\n        --bg-section: #f8f0ea;\n        --text-light: #ffffff;\n        --text-muted: #d3ccc7;\n        --text-dark: #000000;\n        --font-primary: Arial, sans-serif;\n        --font-secondary: serif;\n        --radius-img: 4px;\n        \n        box-sizing: border-box;\n        position: relative;\n        background-color: var(--bg-section);\n        width: 100%;\n        height: 100vh;\n        min-height: 850px;\n        color: var(--text-light);\n        font-family: var(--font-primary);\n        overflow: hidden;\n    }\n\n    .projects-info .projects-inline-link {\n        color: inherit;\n        text-decoration: underline;\n        text-decoration-color: currentColor;\n        text-underline-offset: 3px;\n        text-decoration-thickness: 1px;\n        transition: text-decoration-color 0.3s ease, opacity 0.3s ease;\n    }\n\n    .projects-info .projects-inline-link:hover {\n        text-decoration-color: transparent;\n        opacity: 0.7;\n    }\n\n    \/* Isolation de la bordure-box pour \u00e9viter les conflits WP *\/\n    .wp-custom-projects-slider-container *, \n    .wp-custom-projects-slider-container *::before, \n    .wp-custom-projects-slider-container *::after {\n        box-sizing: inherit;\n        margin: 0;\n        padding: 0;\n    }\n\n    \/* Bloc texte en haut \u00e0 gauche *\/\n    .wp-custom-projects-slider-container .projects-info {\n        position: absolute;\n        top: 60px;\n        left: 50px;\n        width: 320px;\n        z-index: 10;\n    }\n\n    .wp-custom-projects-slider-container .projects-info h2 {\n        font-size: clamp(1.4rem, 2.5vw, 35px);\n        font-weight: normal;\n        margin-bottom: 15px;\n        color: var(--text-dark);\n        line-height: 1.1;\n    }\n\n    .wp-custom-projects-slider-container .projects-info h2 span {\n        font-family: \"LibreBaskervilleItalic\", sans-serif;\n    }\n\n    .wp-custom-projects-slider-container .projects-info p {\n        font-size: 0.95rem;\n        line-height: 1.5;\n        margin-bottom: 20px;\n        color: var(--text-dark);\n    }\n\n    .wp-custom-projects-slider-container .link-voir-tout {\n        color: black;\n        font-size: 0.95rem;\n        text-decoration: underline;\n        text-decoration-color: currentColor;\n        text-underline-offset: 3px;\n        text-decoration-thickness: 1px;\n        transition: text-decoration-color 0.3s ease, opacity 0.3s ease;\n    }\n\n    .wp-custom-projects-slider-container .link-voir-tout:hover {\n        text-decoration-color: transparent;\n        opacity: 0.7;\n    }\n\n    \/* Fl\u00e8ches de navigation *\/\n    .wp-custom-projects-slider-container .nav-arrow {\n        position: absolute;\n        top: 33%;\n        transform: translateY(-50%) scale(1);\n        background: transparent;\n        border: none;\n        cursor: pointer;\n        z-index: 15;\n        transition: opacity 0.3s ease, transform 0.3s ease;\n        padding: 10px;\n        opacity: 0.7;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n    }\n\n    .wp-custom-projects-slider-container .nav-arrow img {\n        width: 20px; \n        height: 20px;\n        display: block;\n    }\n\n    .wp-custom-projects-slider-container .left-arrow img {\n        transform: scaleX(-1);\n    }\n\n    \/* ISOLATION HOVER (PC Uniquement) *\/\n    @media (hover: hover) {\n        .wp-custom-projects-slider-container .nav-arrow:hover {\n            opacity: 1;\n            transform: translateY(-50%) scale(1.1);\n        }\n    }\n\n    \/* \u00c9TAT ACTIF - REACTION IMM\u00c9DIATE DU CLIC\/TOUCHER SANS PERSISTANCE *\/\n    .wp-custom-projects-slider-container .nav-arrow:active {\n        opacity: 0.4;\n        transform: translateY(-50%) scale(0.9);\n        transition: none; \/* Effet instantan\u00e9 physique *\/\n    }\n\n    .wp-custom-projects-slider-container .left-arrow { left: 30px; }\n    .wp-custom-projects-slider-container .right-arrow { right: 30px; }\n\n    \/* Zone du Slider *\/\n    .wp-custom-projects-slider-container .projects-slider {\n        position: absolute;\n        bottom: 40px; \n        width: 100vw;\n        height: 80vh; \n        display: flex;\n        align-items: flex-end;\n        justify-content: center;\n    }\n\n    \/* Configuration des images (Slides) - Version PC de base *\/\n    .wp-custom-projects-slider-container .slide {\n        position: absolute;\n        bottom: 0;\n        height: 50vh;\n        width: auto;\n        aspect-ratio: 1272 \/ 1140;\n        transition: all 0.8s cubic-bezier(0.25, 1, 0.5, 1);\n        opacity: 0;\n        visibility: hidden;\n        z-index: 0;\n    }\n\n    .wp-custom-projects-slider-container .slide img {\n        width: 100%;\n        height: 100%;\n        object-fit: cover;\n        display: block;\n        border-radius: var(--radius-img);\n    }\n\n    \/* D\u00e9grad\u00e9 sombre *\/\n    .wp-custom-projects-slider-container .slide::after {\n        content: '';\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 40%; \/* L\u00e9g\u00e8rement agrandi pour bien lire les 3 lignes de texte *\/\n        background: linear-gradient(to bottom, rgba(0,0,0,0.7) 0%, rgba(0,0,0,0.5) 30%, rgba(0,0,0,0.15) 65%, transparent 100%);\n        border-radius: var(--radius-img) var(--radius-img) 0 0;\n        opacity: 0;\n        transition: opacity 0.4s ease;\n        pointer-events: none;\n        z-index: 1;\n    }\n\n    .wp-custom-projects-slider-container .slide.active::after { opacity: 1; }\n\n    \/* Contenu textuel sur l'image *\/\n    .wp-custom-projects-slider-container .slide-content {\n        text-align: left;\n        position: absolute;\n        top: 30px;\n        left: 30px;\n        right: 30px;\n        display: flex;\n        justify-content: space-between;\n        align-items: flex-start;\n        opacity: 0;\n        transition: opacity 0.4s ease;\n        pointer-events: none;\n        z-index: 2;\n    }\n\n    \/* NOUVEAU STYLE : Affichage de la ville *\/\n    .wp-custom-projects-slider-container .slide-content-text .slide-city {\n        display: block;\n        color: var(--text-muted);\n        font-size: 0.75rem;\n        text-transform: uppercase;\n        letter-spacing: 0.05em;\n        margin-bottom: 6px;\n        font-weight: 600;\n        text-shadow: 0 1px 3px rgba(0,0,0,0.5);\n    }\n\n    .wp-custom-projects-slider-container .slide-content-text h3 {\n        color: var(--text-light);\n        font-size: 1.15rem;\n        font-weight: normal;\n        margin-bottom: 5px;\n        line-height: 1.3;\n        text-shadow: 0 1px 3px rgba(0,0,0,0.5);\n    }\n\n    .wp-custom-projects-slider-container .slide-content-text p {\n        font-family: var(--font-secondary);\n        font-style: italic;\n        font-size: 1rem;\n        color: white;\n        line-height: 1.4;\n    }\n\n    \/* Bouton Voir *\/\n    .wp-custom-projects-slider-container .link-voir {\n        position: relative;\n        color: var(--text-light);\n        text-decoration: none;\n        border-bottom: 1px solid var(--text-light);\n        font-size: 0.8rem;\n        opacity: 0;\n        transform: translateY(10px);\n        transition: all 0.4s ease;\n        pointer-events: auto;\n        transform-origin: right center;\n        text-shadow: 0 1px 3px rgba(0,0,0,0.5);\n    }\n\n    .wp-custom-projects-slider-container .slide.active .link-voir {\n        opacity: 1;\n        transform: translateY(0) scale(1);\n    }\n\n    @media (hover: hover) {\n        .wp-custom-projects-slider-container .slide.active:hover .link-voir {\n            transform: translateY(0) scale(1.15);\n        }\n    }\n\n    \/* \u00c9tats du slider (PC > 1700px) - Marges strictes \u00e0 40px *\/\n    .wp-custom-projects-slider-container .slide.prev {\n        opacity: 1;\n        visibility: visible;\n        \/* Aligne pr\u00e9cis\u00e9ment le bord gauche de l'image \u00e0 50px de l'\u00e9cran *\/\n        transform: translateX(calc(50px - 50vw + 50%));\n        z-index: 1;\n        cursor: pointer;\n    }\n\n    .wp-custom-projects-slider-container .slide.active {\n        opacity: 1;\n        visibility: visible;\n        \/* Position = 50px (bord \u00e9cran) + 40px (marge fixe) + Largeur Slide Prev (50vh * 1272\/1140) *\/\n        transform: translateX(calc(90px + (50vh * 1272 \/ 1140) - 50vw + 50%));\n        z-index: 2;\n        height: 76vh;\n        cursor: pointer;\n    }\n\n    .wp-custom-projects-slider-container .slide.next {\n        opacity: 1;\n        visibility: visible;\n        \/* Position = 50px + 80px (2 marges) + Largeur Prev (50vh*ratio) + Largeur Active (76vh*ratio) *\/\n        \/* 50 + 76 = 126vh *\/\n        transform: translateX(calc(130px + (126vh * 1272 \/ 1140) - 50vw + 50%));\n        z-index: 1;\n        cursor: pointer;\n    }\n\n    .wp-custom-projects-slider-container .slide.active .slide-content {\n        opacity: 1;\n        transition-delay: 0.4s;\n    }\n\n    \/* ==========================================\n       RESPONSIVE DESIGN\n       ========================================== *\/\n    @media (max-width: 1700px) {\n        .wp-custom-projects-slider-container .projects-info p {\n            margin: 20px auto;\n            width: 75%;\n        }\n        .wp-custom-projects-slider-container .slide.prev, \n        .wp-custom-projects-slider-container .slide.next { filter: brightness(0.9); }\n        \n        .wp-custom-projects-slider-container {\n            height: auto;\n            min-height: 65vh;\n            display: flex;\n            flex-direction: column;\n            justify-content: flex-start;\n            padding-bottom: 40px; \n            text-align: center;\n        }\n        \n        .wp-custom-projects-slider-container .projects-info {\n            position: relative;\n            top: 0; left: 0; width: 100%;\n            padding: 60px 20px 20px;\n        }\n        \n        .wp-custom-projects-slider-container .projects-slider {\n            position: relative; top: auto; bottom: auto; left: 50%;\n            transform: translateX(-50%); height: 55cqi; max-height: 75vh;\n        }\n        \n        .wp-custom-projects-slider-container .slide { \n            width: 45vw; \n            height: auto; \n            max-height: 60vh; \n        }\n        \n        .wp-custom-projects-slider-container .slide.active { \n            width: 60vw; \n            height: auto; \n            max-height: 75vh; \n            transform: translateX(0); \n        }\n        \n        .wp-custom-projects-slider-container .slide.prev { transform: translateX(-50vw); } \n        .wp-custom-projects-slider-container .slide.next { transform: translateX(50vw); } \n        \n        .wp-custom-projects-slider-container .nav-arrow {\n            top: auto;\n            bottom: calc(min(45vw * (1140 \/ 1272), 60vh) + 15px);\n            transform: scale(1);\n        }\n\n        \/* ISOLATION DU HOVER EN FORMAT TABLETTE\/MOBILE POUR APPAREILS AVEC CURSEUR *\/\n        @media (hover: hover) {\n            .wp-custom-projects-slider-container .nav-arrow:hover { \n                transform: scale(1.1); \n            }\n        }\n\n        \/* CONFIGURATION ACTIF FLUIDE SUR TABLETTE\/MOBILE *\/\n        .wp-custom-projects-slider-container .nav-arrow:active { \n            opacity: 0.4;\n            transform: scale(0.9); \n            transition: none;\n        }\n\n        .wp-custom-projects-slider-container .left-arrow { left: 2vw; }\n        .wp-custom-projects-slider-container .right-arrow { right: 2vw; }\n    }\n\n    @media (max-width: 720px) {\n        .wp-custom-projects-slider-container .projects-slider {\n            height: 75vw;\n        }\n        .wp-custom-projects-slider-container .slide { \n            width: 65vw; \n            height: auto; \n        }\n        .wp-custom-projects-slider-container .slide.active { \n            width: 85vw; \n            height: auto; \n        }\n        \/* D\u00e9grad\u00e9 sombre *\/\n        .wp-custom-projects-slider-container .slide::after {\n            height: 60%;\n            background: linear-gradient(to bottom, rgba(0,0,0,0.7) 0%, rgba(0,0,0,0.5) 30%, rgba(0,0,0,0.35) 65%, transparent 100%);\n        }\n        .wp-custom-projects-slider-container .slide.prev { transform: translateX(-75vw); }\n        .wp-custom-projects-slider-container .slide.next { transform: translateX(75vw); }\n        \n        .wp-custom-projects-slider-container .nav-arrow { \n            bottom: calc(min(65vw * (1140 \/ 1272), 60vh) + 15px); \n        }\n        .wp-custom-projects-slider-container .left-arrow { left: 0; }\n        .wp-custom-projects-slider-container .right-arrow { right: 0; }\n\n        .wp-custom-projects-slider-container .slide-content {\n            top: 20px; bottom: 30px; text-align: center;\n            flex-direction: column; align-items: center; justify-content: space-between;\n        }\n        .wp-custom-projects-slider-container .slide-content-text h3 { margin-bottom: 5px; }\n        .wp-custom-projects-slider-container .link-voir {\n            transform-origin: center center;\n        }\n    }\n\n    @media (max-width: 420px) {\n        .wp-custom-projects-slider-container .projects-slider { height: 95vw; max-height: none; }\n        .wp-custom-projects-slider-container .nav-arrow { bottom: calc(85vw * (1140 \/ 1272) + 10px); }\n        .wp-custom-projects-slider-container .left-arrow { left: 5vw; }\n        .wp-custom-projects-slider-container .right-arrow { right: 5vw; }\n    }\n<\/style>\n\n<!-- ==========================================\n     BLOC JAVASCRIPT - COMPORTEMENT\n     ========================================== -->\n<script>\n(function() {\n    const CONFIG_COMPOSANT = {\n        delaiAutoPlay: 8000,\n        delaiPauseApresClic: 15000\n    };\n\n    const container = document.getElementById('wp-custom-projects-slider');\n    if (!container) return; \n\n    const slidesElements = Array.from(container.querySelectorAll('.slide'));\n    let currentIndex = slidesElements.findIndex(slide => slide.classList.contains('active'));\n    if (currentIndex === -1) currentIndex = 0;\n\n    let autoplayInterval;\n    let pauseTimeout;\n\n    function renderSlider() {\n        slidesElements.forEach(slide => slide.classList.remove('active', 'prev', 'next'));\n        \n        slidesElements[currentIndex].classList.add('active');\n        \n        let prevIndex = currentIndex - 1 < 0 ? slidesElements.length - 1 : currentIndex - 1;\n        let nextIndex = currentIndex + 1 >= slidesElements.length ? 0 : currentIndex + 1;\n        \n        slidesElements[prevIndex].classList.add('prev');\n        slidesElements[nextIndex].classList.add('next');\n    }\n\n    function goToNextSlide() {\n        currentIndex = currentIndex + 1 >= slidesElements.length ? 0 : currentIndex + 1;\n        renderSlider();\n    }\n\n    function goToPrevSlide() {\n        currentIndex = currentIndex - 1 < 0 ? slidesElements.length - 1 : currentIndex - 1;\n        renderSlider();\n    }\n\n    function startAutoplay() {\n        clearInterval(autoplayInterval);\n        autoplayInterval = setInterval(goToNextSlide, CONFIG_COMPOSANT.delaiAutoPlay); \n    }\n\n    function pauseAutoplayTemporarily() {\n        clearInterval(autoplayInterval); \n        clearTimeout(pauseTimeout); \n        pauseTimeout = setTimeout(startAutoplay, CONFIG_COMPOSANT.delaiPauseApresClic);\n    }\n\n    container.querySelector('.left-arrow').addEventListener('click', () => {\n        goToPrevSlide();\n        pauseAutoplayTemporarily();\n    });\n\n    container.querySelector('.right-arrow').addEventListener('click', () => {\n        goToNextSlide();\n        pauseAutoplayTemporarily();\n    });\n\n    slidesElements.forEach(slide => {\n        slide.addEventListener('click', (e) => {\n            if (slide.classList.contains('active')) {\n                if (!e.target.classList.contains('link-voir')) {\n                    const linkElement = slide.querySelector('.link-voir');\n                    if (linkElement) {\n                        const linkHref = linkElement.getAttribute('href');\n                        if (linkHref && linkHref !== '#') window.location.href = linkHref;\n                    }\n                }\n            } else if (slide.classList.contains('prev')) {\n                goToPrevSlide();\n                pauseAutoplayTemporarily();\n            } else if (slide.classList.contains('next')) {\n                goToNextSlide();\n                pauseAutoplayTemporarily();\n            }\n        });\n    });\n\n    let touchStartX = 0;\n    let touchEndX = 0;\n    const sliderContainer = container.querySelector('.projects-slider');\n\n    function handleSwipeGesture() {\n        const swipeThreshold = 50; \n        if (touchEndX < touchStartX - swipeThreshold) {\n            goToNextSlide();\n            pauseAutoplayTemporarily();\n        }\n        if (touchEndX > touchStartX + swipeThreshold) {\n            goToPrevSlide();\n            pauseAutoplayTemporarily();\n        }\n    }\n\n    sliderContainer.addEventListener('touchstart', (e) => {\n        touchStartX = e.changedTouches[0].screenX;\n    }, { passive: true });\n\n    sliderContainer.addEventListener('touchend', (e) => {\n        touchEndX = e.changedTouches[0].screenX;\n        handleSwipeGesture();\n    });\n\n    renderSlider();\n    startAutoplay();\n})();\n<\/script>\n\n\n\n<style>\n    \/* --- Component-isolated Styles --- *\/\n    .norki-newsletter {\n        display: flex;\n        width: 100vw;\n        position: relative;\n        left: 50%;\n        transform: translateX(-50%);\n        padding-top: 60px;\n        padding-bottom: 0;\n        overflow: hidden; \n        align-items: stretch;\n        max-height: 100vh;\n        background-color: #ffffff;\n        font-family: 'Jost', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n        color: black;\n    }\n\n    \/* Left Column (Text) *\/\n    .norki-newsletter__left {\n        flex: 0 0 45%;\n        position: relative;\n        display: flex;\n        flex-direction: column;\n        justify-content: center;\n        padding: 25% 4% 100px 40px;\n        z-index: 2;\n    }\n\n    \/* Right Column (Image) *\/\n    .norki-newsletter__right {\n        flex: 0 0 55%;\n        z-index: 1;\n        display: flex;\n        align-items: flex-end;\n        padding-top: 90px;\n    }\n\n    \/* Interactive image hover zoom link container *\/\n    .norki-newsletter__img-link {\n        display: block;\n        width: 100%;\n        height: 100%;\n        align-self: stretch;\n        overflow: hidden;\n        text-decoration: none;\n    }\n\n    .norki-newsletter__right img {\n        width: 100%;\n        height: 100%;\n        min-height: 350px;\n        object-fit: cover;\n        display: block;\n        object-position: center;\n        transition: transform 0.6s ease, opacity 0.6s ease;\n    }\n\n    .norki-newsletter__img-link:hover img {\n        transform: scale(1.03);\n        opacity: 0.9;\n    }\n\n    \/* Text Content *\/\n    .norki-newsletter__content {\n        position: relative;\n        z-index: 10;\n        max-width: 600px;\n    }\n\n    .norki-newsletter__content h2 {\n        font-size: clamp(1.4rem, 2.5vw, 35px);\n        font-weight: 500;\n        margin-bottom: 25px;\n        line-height: 1.1;\n        letter-spacing: 0.2px;\n        color: black;\n    }\n\n    .norki-newsletter__content p {\n        font-size: 0.95rem;\n        line-height: 1.6;\n        margin-bottom: 12px;\n        max-width: 550px;\n    }\n\n    .norki-newsletter__nowrap {\n        white-space: nowrap;\n    }\n\n    \/* Action Button *\/\n    .norki-hero-button {\n        display: inline-block;\n        margin-top: 5px;\n        padding: 3px 35px;\n        background-color: transparent;\n        color: black;\n        border: 1px solid black;\n        text-decoration: none;\n        font-size: 0.9rem;\n        letter-spacing: 1px;\n        transition: all 0.3s ease;\n    }\n\n    .norki-hero-button:hover {\n        background-color: black;\n        color: #ffffff;\n    }\n\n    \/* =========================================\n       SVG Styles & Animations \n       ========================================= *\/\n    .norki-newsletter__anim-path {\n        fill: none;\n        stroke: #000;\n        stroke-width: 0.5; \n        stroke-miterlimit: 10;\n        \n        \/* stroke-dashoffset must remain NEGATIVE to draw from right to left *\/\n        stroke-dasharray: var(--path-length, 3000);\n        stroke-dashoffset: calc(var(--path-length, 3000) * -1);\n    }\n\n    .norki-newsletter.is-animated .norki-newsletter__anim-path {\n        stroke-dashoffset: 0;\n        \/* Applied only when the section enters the viewport *\/\n        transition: stroke-dashoffset 2.5s cubic-bezier(0.4, 0, 0.2, 1);\n    }\n\n    .norki-envelope-wrapper {\n        opacity: 0;\n        transform: translateY(-20px) scale(0.95);\n        transition: opacity 0.8s ease-out 2s, transform 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275) 2s;\n    }\n\n    .norki-newsletter.is-animated .norki-envelope-wrapper {\n        opacity: 1;\n        transform: translateY(0) scale(1);\n    }\n\n    .desktop-svg-container {\n        position: absolute;\n        top: 40px;\n        right: 0;\n        left: auto;\n        width: 86vw;\n        height: auto;\n        pointer-events: none;\n        z-index: 5;\n        overflow: visible;\n        margin-top: -4%;\n    }\n\n    .desktop-svg-container svg {\n        width: 100%;\n        height: 100%;\n        overflow: visible;\n    }\n\n    .mobile-svg-container {\n        display: none;\n        position: absolute;\n        top: 0;\n        right: -10px;\n        width: 45%;\n        pointer-events: none;\n        z-index: 5;\n    }\n\n    .mobile-svg-container svg {\n        width: 100%;\n        height: auto;\n        overflow: visible;\n    }\n\n    \/* Responsive - Tablet *\/\n    @media (max-width: 1024px) {\n        .norki-newsletter {\n            flex-direction: column;\n            padding-top: 40px;\n            width: 100vw;\n            max-height: none;\n        }\n\n        .norki-newsletter__left {\n            flex: none;\n            width: 100%;\n            padding: 20% 40px 60px 40px;\n        }\n\n        .norki-newsletter__right {\n            flex: none;\n            width: 100%;\n            padding-top: 0;\n        }\n\n        .norki-newsletter__right img {\n            height: 55vh;\n            min-height: 400px;\n            max-height: none;\n        }\n\n        .desktop-svg-container {\n            display: none;\n        }\n\n        .mobile-svg-container {\n            display: block;\n        }\n\n        .norki-newsletter__content h2 {\n            margin-bottom: 20px;\n        }\n    }\n\n    \/* Responsive - Mobile *\/\n    @media (max-width: 720px) {\n        .norki-newsletter__left {\n            padding: 20% 30px 50px 20px;\n        }\n        \n        .norki-hero-button {\n            padding: 4px 25px;\n        }\n        .norki-newsletter__anim-path {\n            stroke-width: 1;\n        }\n    }\n<\/style>\n\n<section class=\"norki-newsletter\">\n    <!-- Desktop Line SVG -->\n    <div class=\"desktop-svg-container\">\n        <svg viewBox=\"0 -20 1700 800\" preserveAspectRatio=\"none\">\n            <path class=\"norki-newsletter__anim-path\" d=\"M55.17,244.99S189.48-4.74,373.6,69.99c158,64.13,78,147,46,97s-4-129.55,160-103.28c164,26.28,934,89.28,1120.4,-4.72\"><\/path>\n            <g class=\"norki-envelope-wrapper\">\n                <g transform=\"translate(20, 300) rotate(30)\">\n                    <g transform=\"scale(0.25) translate(-178, -150)\">\n                        <path fill=\"transparent\" stroke=\"#000\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4.25\" d=\"M14.58,274.69c-2.7-.14-4.77-2.45-4.62-5.18,1.02-19.17,4.63-88.64,4.03-105.97-.69-20.16-.43-147.18,5.8-158.27,6.23-11.09,147.32,1.01,160.05,0,12.73-1.01,163.27,0,165.44,4.03,2.17,4.03-1.11,121.98,0,143.15,1.11,21.17-.52,113.91-1.83,121.98-1.31,8.06-149.53,10.08-165.59,9.07-14.34-.9-137.13-7.43-163.29-8.81Z\"><\/path>\n                        <path fill=\"none\" stroke=\"#000\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4.25\" d=\"M199.35,148.93c20.52-22.41,29.71-41.54,51.78-61.5,28.43-25.71,94.15-78.13,94.15-78.13\"><\/path>\n                        <path fill=\"none\" stroke=\"#000\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4.25\" d=\"M19.8,5.27s29.38,35.26,69.17,71.24c26.39,23.85,49.63,51.88,67.53,71.77\"><\/path>\n                        <path fill=\"transparent\" stroke=\"#000\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4.25\" d=\"M177.92,142.27c-8.01-.67-16.1,1.59-22.16,6.61-6.08,5.04-11.07,13.26-6.71,26.01,8.73,25.49,29.51,23.6,38.68,20.16,22.36-8.39,35.84-48.94-9.81-52.78Z\"><\/path>\n                        <path fill=\"none\" stroke=\"#000\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4.25\" d=\"M163.29,180.24s0-22.93,2.59-21.29c2.59,1.64,8.19,19.66,11.63,21.29,3.45,1.64,3.45-21.38,3.45-21.38\"><\/path>\n                        <path fill=\"none\" stroke=\"#000\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4.25\" d=\"M182.45,171.43s1.72-.81,3.23,1.44c1.51,2.25,1.72,6.72,6.89,7.45\"><\/path>\n                        <path fill=\"none\" stroke=\"#000\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4.25\" d=\"M195.26,159.96s-5,3.18-5.64,5.64c-1.44,5.42-6.19,4.72-6.19,4.72\"><\/path>\n                    <\/g>\n                <\/g>\n            <\/g>\n        <\/svg>\n    <\/div>\n\n    <!-- Mobile Line SVG -->\n    <div class=\"mobile-svg-container\">\n        <svg id=\"Calque_1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.1\" viewBox=\"0 0 688 580\">\n            <path class=\"norki-newsletter__anim-path\" d=\"M22,159S84.7,55.37,211.22,29c87.23-18.18,171.78,5,216.78,79s-7,150-51,148-28.83-94.56,81.93-65.22c56.02,14.84,105.07,71.22,107.07,159.22s4,149,33,174,75.33,21.44,75.33,21.44\"><\/path>\n            <g class=\"norki-envelope-wrapper\">\n                <g transform=\"translate(-20, 250) rotate(30)\">\n                    <g transform=\"scale(0.45) translate(-178, -150)\">\n                        <path fill=\"transparent\" stroke=\"#000\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4.25\" d=\"M14.58,274.69c-2.7-.14-4.77-2.45-4.62-5.18,1.02-19.17,4.63-88.64,4.03-105.97-.69-20.16-.43-147.18,5.8-158.27,6.23-11.09,147.32,1.01,160.05,0,12.73-1.01,163.27,0,165.44,4.03,2.17,4.03-1.11,121.98,0,143.15,1.11,21.17-.52,113.91-1.83,121.98-1.31,8.06-149.53,10.08-165.59,9.07-14.34-.9-137.13-7.43-163.29-8.81Z\"><\/path>\n                        <path fill=\"none\" stroke=\"#000\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4.25\" d=\"M199.35,148.93c20.52-22.41,29.71-41.54,51.78-61.5,28.43-25.71,94.15-78.13,94.15-78.13\"><\/path>\n                        <path fill=\"none\" stroke=\"#000\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4.25\" d=\"M19.8,5.27s29.38,35.26,69.17,71.24c26.39,23.85,49.63,51.88,67.53,71.77\"><\/path>\n                        <path fill=\"transparent\" stroke=\"#000\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4.25\" d=\"M177.92,142.27c-8.01-.67-16.1,1.59-22.16,6.61-6.08,5.04-11.07,13.26-6.71,26.01,8.73,25.49,29.51,23.6,38.68,20.16,22.36-8.39,35.84-48.94-9.81-52.78Z\"><\/path>\n                        <path fill=\"none\" stroke=\"#000\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4.25\" d=\"M163.29,180.24s0-22.93,2.59-21.29c2.59,1.64,8.19,19.66,11.63,21.29,3.45,1.64,3.45-21.38,3.45-21.38\"><\/path>\n                        <path fill=\"none\" stroke=\"#000\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4.25\" d=\"M182.45,171.43s1.72-.81,3.23,1.44c1.51,2.25,1.72,6.72,6.89,7.45\"><\/path>\n                        <path fill=\"none\" stroke=\"#000\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4.25\" d=\"M195.26,159.96s-5,3.18-5.64,5.64c-1.44,5.42-6.19,4.72-6.19,4.72\"><\/path>\n                    <\/g>\n                <\/g>\n            <\/g>\n        <\/svg>\n    <\/div>\n\n    <div class=\"norki-newsletter__left\">\n        <div class=\"norki-newsletter__content\">\n            <h2>Stay Inspired: Join our Newsletter<\/h2>\n            <p>Subscribe to our newsletter and let yourself be guided by The Golden Thread of Norki: a precious bond connecting our Haute Couture ateliers and our latest creations directly to you.<\/p>\n            <a href=\"https:\/\/4df8192e.sibforms.com\/serve\/MUIFAJu6Z-3Q386ZMuYKuaZt2dEdmBzWwJptVxZcKqmHkc5Tl9OnAvbQVa1syHM1QVWLi1w7AKGIqvbla2qtMKgC7mX-WiOP98f7WQTMfcKjnwSGOn48faNdm244pDUFtQW5nVKI02tYAxBjgltkRV9W6ukPxVtvyZ-46oSudr75Q8AuxwiISh3ga7dgQFvQ7p_t25k0PjINqP1R\" class=\"norki-hero-button\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"Subscribe to Maison Norki's newsletter\">Subscribe<\/a>\n        <\/div>\n    <\/div>\n    \n    <div class=\"norki-newsletter__right\">\n        <a href=\"https:\/\/www.norki.com\/en\/collection-fauteuil-norki\/395-Fauteuil-bao-blanc-norki-shearling.html\" class=\"norki-newsletter__img-link\" title=\"Discover the Norki White Bao Armchair in Shearling\">\n            <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Fauteuils-Bao-1.jpg\" alt=\"Luxury bespoke Haute Couture Bao armchairs by Norki\">\n        <\/a>\n    <\/div>\n<\/section>\n\n<!-- Scroll detection script and robust SVG calculation -->\n<script>\n    document.addEventListener('DOMContentLoaded', () => {\n        \n        \/\/ robustly calculate path lengths even if elements are hidden on load\n        const mobileContainer = document.querySelector('.mobile-svg-container');\n        const desktopContainer = document.querySelector('.desktop-svg-container');\n\n        \/\/ temporarily force display for exact layout measurements\n        if (mobileContainer) mobileContainer.style.display = 'block';\n        if (desktopContainer) desktopContainer.style.display = 'block';\n\n        const animPaths = document.querySelectorAll('.norki-newsletter__anim-path');\n        animPaths.forEach(path => {\n            const length = Math.ceil(path.getTotalLength());\n            \/\/ Inject true path length into CSS properties for seamless SVG drawing\n            path.style.setProperty('--path-length', length + 50);\n        });\n\n        \/\/ remove forced display so responsive CSS can take back control\n        if (mobileContainer) mobileContainer.style.display = '';\n        if (desktopContainer) desktopContainer.style.display = '';\n\n        \/\/ initialize Intersection Observer for viewport triggers\n        const observer = new IntersectionObserver((entries) => {\n            entries.forEach(entry => {\n                if (entry.isIntersecting) {\n                    entry.target.classList.add('is-animated');\n                    observer.unobserve(entry.target); \n                }\n            });\n        }, { \n            threshold: 0.3 \n        });\n\n        const newsletterSection = document.querySelector('.norki-newsletter');\n        if (newsletterSection) {\n            setTimeout(() => observer.observe(newsletterSection), 50);\n        }\n    });\n<\/script>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fur CoutureEPV BespokeUpholstery FurnishingCouture BespokeRugs BespokeEmbroidery Creative Artisans The Art of French Living The Golden Thread of Norki Some Houses write their history with words. Ours is written with a thread. Sonia Linard The Golden Thread of NORKI is a silent signature\u2014the mark of a Haute Couture Maison that chooses timelessness over display. It weaves [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-page-builder-no-header-footer.php","meta":{"_uag_custom_page_level_css":"\/* A COPIER COLLER *\/\n\n:root {\n\t--wp--preset--color--contrast: black;\n    \/* Paddings de section standards *\/\n    --section-pad-v-dt: 80px;\n    --section-pad-h-dt: 5vw;\n    \n    --section-pad-v-tab: 50px;\n    --section-pad-h-tab: 4vw;\n    \n    --section-pad-v-mob: 40px;\n    --section-pad-h-mob: 20px;\n\n    \/* Couleurs  Polices *\/\n    --color-norki-brown: #50423d;\n    --color-norki-beige: #f8f0ea;\n    --font-baskerville: 'Baskerville', serif;\n    --font-montserrat: 'Montserrat', sans-serif;\n}\n\n@font-face {\n  font-family: 'LibreBaskervilleItalic';\n  src: url('\/sur-mesure\/wp-content\/themes\/twentytwentyfour\/assets\/fonts\/Libre-Baskerville\/LibreBaskerville-Italic.ttf') format('truetype');\n  font-weight: normal;\n  font-style: normal;\n}\n\n@font-face {\n  font-family: 'Bestermind';\n  src: url('\/sur-mesure\/wp-content\/themes\/twentytwentyfour\/assets\/fonts\/Bestermind\/BestermindRegular.ttf') format('truetype');\n  font-weight: normal;\n  font-style: normal;\n}\n\n@font-face {\n  font-family: 'AvenirBook';\n  src: url('\/sur-mesure\/wp-content\/themes\/twentytwentyfour\/assets\/fonts\/Avenir\/Avenir-Book-01.otf') format('opentype');\n  font-weight: normal;\n  font-style: normal;\n}\n\n\n@font-face {\n  font-family: 'AvenirMedium';\n  src: url('\/sur-mesure\/wp-content\/themes\/twentytwentyfour\/assets\/fonts\/Avenir\/Avenir-Medium-09.otf') format('opentype');\n  font-weight: normal;\n  font-style: normal;\n}\n\n@font-face {\n  font-family: 'AvenirBookOblique';\n  src: url('\/sur-mesure\/wp-content\/themes\/twentytwentyfour\/assets\/fonts\/Avenir\/Avenir-BookOblique-02.otf') format('opentype');\n  font-weight: normal;\n  font-style: normal;\n}\n\n@font-face {\n  font-family: 'Pertili';\n  src: url('\/sur-mesure\/wp-content\/themes\/twentytwentyfour\/assets\/fonts\/PERTILI.TTF') format('truetype');\n  font-weight: normal;\n  font-style: normal;\n}\n\n.pertili-font {\n\tfont-family: \"Pertili\", sans-serif !important;\n}\n\n.bestermind-font {\n\tfont-family: \"Bestermind\", sans-serif !important;\n}\n\n.avenirbookoblique-font {\n\tfont-family: \"AvenirBookOblique\", sans-serif !important;\n}\n\n.baskerville-italic-font {\n\tfont-family: \"LibreBaskervilleItalic\", sans-serif !important;\n}\n\n.avenirmedium-font {\n\tfont-family: \"AvenirMedium\", sans-serif !important;\n}\n\nbody:not(.wp-admin) * {\n  font-family: \"AvenirBook\", sans-serif;\n}\n\nbody {\n\tbackground-color: #f8f0ea !important;\n\tcolor: black;\n}\n\nh2 {\n\tfont-family: \"AvenirMedium\", sans-serif !important;\n}\n\n.components-sandbox {\n\tmax-height: 500px;\n}\n\n\/* A COPIER COLLER END *\/\n\n\n\n.bloc-citation-ambition {\n\tpadding: 0 30px 0 30px;\n\tposition: relative;\n            max-width: 680px; \/* Limite la largeur pour correspondre au visuel *\/\n}\n\n.bloc-citation-ambition::before {\n    content: '\u201c';\n    font-family: \"Pertili\", sans-serif !important;\n    font-size: 140px;\n    position: absolute; \n    top: -20px;\n    left: -50px; \n    line-height: 1; \n    color: #000;\n}\n.bloc-citation-ambition::after {\n    content: '\u201d';\n    font-family: \"Pertili\", sans-serif !important;\n    font-size: 140px;\n    position: absolute;\n    right: 10%;\n    line-height: 1;\n    color: #000;\n}\n\n\/* --- RESPONSIVE DESIGN (Tablettes et Mobiles) --- *\/\n@media (max-width: 768px) {\n    .bloc-citation-ambition {\n        padding: 0 20px 0 40px;\n        margin: 40px 20px;\n\t\tline-height: 2rem;\n    }\n    .bloc-citation-ambition p {\n        font-size: 18px;\n    }\n    .bloc-citation-ambition::before {\n        font-size: 100px;\n        left: -10px;\n    }\n    .bloc-citation-ambition::after {\n        font-size: 100px;\n        bottom: -10vh;\n    }\n    .bloc-citation-ambition p br {\n        display: none; \n    }\n}\n\n.img-first-home {\n\tposition: relative;\n\toverflow: hidden;\n}\n\n.back-slider {\n\tbackground-color: #4f413c;\n\twidth: 100%;\n\theight: 100vh !important;\n\tdisplay: block;\n}\n\n.text-overlay-home {\n\tposition: absolute;\n\tbottom: 40px;\n\tleft: 40px;\n\tcolor: white;\n\tfont-size: 40px;\n}\n\n.text-overlay-interieur {\n\tdisplay: grid;\n\tposition: absolute;\n\tcolor: black;\n\tfont-size: 40px;\n\tz-index: 3;\n\tleft: 50%;\n\ttop: 50%;\n\ttransform: translatex(-50%);\n\tword-break: normal;\n\twidth: max-content;\n\tjustify-items: center;\n}\n\n.btn-discover {\n  text-align: center;\n  width: min-content;\n  border: 2px solid black;\n  text-decoration: none;\n  font-size: 20px;\n  padding: 3px 30px;\n  color: black;\n  transition: all 0.3s ease; \/* animation smooth *\/\n}\n\n.btn-discover:hover {\n  color: white;\n  background-color: black;\n}\n\n.sonia-global {\n\tposition: relative;\n\ttop: 0;\n\tmargin-bottom: auto;\n}\n\n.name-citation {\n\tmargin-top: 20px;\n\tfont-size: 2.5rem;\n}\n\n.sonia-img {\n\tmargin-right: 56px;\n}\n\n@media (max-width:1200px) {\n\t.sonia-citation {\n\t\tmargin-left: 0 !important;\n\t}\n\t.sonia-img {\n\t\tmargin-right: 0;\n\t}\n}\n\n@media (max-width:720px) {\n\t.text-overlay-home {\n\t\tleft: 20px;\n\t\tbottom: 10vh;\n\t\tfont-size: 32px;\n\t}\n\t\n\t.name-citation {\n\t\t font-size: 2rem;\n\t}\n\t.sonia-global-texte {\n\t\tmargin-left : 20px;\n\t\tmargin-top: 20px;\n\t}\n\t\n\t.sonia-citation {\n\t\tfont-size: 17px !important;\n\t\tmargin-left: 10px !important;\n\t\tmargin-top: -10vh !important;\n\t\tline-height:1.3rem !important;\n\t}\n}\n\n.passion-chalet-texte {\n\tmargin-top: 0 !important;\n}\n\n\n\n.sonia-linard-texte {\n\tfont-weight: 600;\n}\n\n.sonia-citation {\n\tmargin-top: auto;\n\tbottom: -70px;\n\tmargin-left: 50px;\n\tfont-size: 20px;\n\tline-height: 2rem;\n}\n\n\nbody { padding-bottom: 0 !important;}","_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-4275","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Maison Norki | Bespoke Haute Couture &amp; EPV Excellence<\/title>\n<meta name=\"description\" content=\"Certified \u201cLiving Heritage Company\u201d (EPV), Maison Norki elevates your most exceptional projects. Discover the art of French bespoke craftsmanship.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.norki.com\/sur-mesure\/en\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Maison Norki | Bespoke Haute Couture &amp; EPV Excellence\" \/>\n<meta property=\"og:description\" content=\"Certified \u201cLiving Heritage Company\u201d (EPV), Maison Norki elevates your most exceptional projects. Discover the art of French bespoke craftsmanship.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.norki.com\/sur-mesure\/en\/\" \/>\n<meta property=\"og:site_name\" content=\"Norki\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/NorkiDecoration\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-10T10:18:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/epingles_00000.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/en\\\/\",\"url\":\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/en\\\/\",\"name\":\"Maison Norki | Bespoke Haute Couture & EPV Excellence\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/en\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/en\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/epingles_00000.png\",\"datePublished\":\"2026-06-08T10:08:49+00:00\",\"dateModified\":\"2026-06-10T10:18:54+00:00\",\"description\":\"Certified \u201cLiving Heritage Company\u201d (EPV), Maison Norki elevates your most exceptional projects. Discover the art of French bespoke craftsmanship.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/en\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/en\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/en\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/epingles_00000.png\",\"contentUrl\":\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/epingles_00000.png\",\"width\":1080,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/en\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"NORKI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/#website\",\"url\":\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/\",\"name\":\"Norki\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Maison Norki | Bespoke Haute Couture & EPV Excellence","description":"Certified \u201cLiving Heritage Company\u201d (EPV), Maison Norki elevates your most exceptional projects. Discover the art of French bespoke craftsmanship.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.norki.com\/sur-mesure\/en\/","og_locale":"fr_FR","og_type":"article","og_title":"Maison Norki | Bespoke Haute Couture & EPV Excellence","og_description":"Certified \u201cLiving Heritage Company\u201d (EPV), Maison Norki elevates your most exceptional projects. Discover the art of French bespoke craftsmanship.","og_url":"https:\/\/www.norki.com\/sur-mesure\/en\/","og_site_name":"Norki","article_publisher":"https:\/\/facebook.com\/NorkiDecoration","article_modified_time":"2026-06-10T10:18:54+00:00","og_image":[{"url":"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/epingles_00000.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.norki.com\/sur-mesure\/en\/","url":"https:\/\/www.norki.com\/sur-mesure\/en\/","name":"Maison Norki | Bespoke Haute Couture & EPV Excellence","isPartOf":{"@id":"https:\/\/www.norki.com\/sur-mesure\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.norki.com\/sur-mesure\/en\/#primaryimage"},"image":{"@id":"https:\/\/www.norki.com\/sur-mesure\/en\/#primaryimage"},"thumbnailUrl":"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/epingles_00000.png","datePublished":"2026-06-08T10:08:49+00:00","dateModified":"2026-06-10T10:18:54+00:00","description":"Certified \u201cLiving Heritage Company\u201d (EPV), Maison Norki elevates your most exceptional projects. Discover the art of French bespoke craftsmanship.","breadcrumb":{"@id":"https:\/\/www.norki.com\/sur-mesure\/en\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.norki.com\/sur-mesure\/en\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.norki.com\/sur-mesure\/en\/#primaryimage","url":"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/epingles_00000.png","contentUrl":"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/04\/epingles_00000.png","width":1080,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/www.norki.com\/sur-mesure\/en\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.norki.com\/sur-mesure\/fr\/"},{"@type":"ListItem","position":2,"name":"NORKI"}]},{"@type":"WebSite","@id":"https:\/\/www.norki.com\/sur-mesure\/#website","url":"https:\/\/www.norki.com\/sur-mesure\/","name":"Norki","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.norki.com\/sur-mesure\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"}]}},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"webmaster","author_link":"https:\/\/www.norki.com\/sur-mesure\/author\/webmaster\/"},"uagb_comment_info":0,"uagb_excerpt":"Fur CoutureEPV BespokeUpholstery FurnishingCouture BespokeRugs BespokeEmbroidery Creative Artisans The Art of French Living The Golden Thread of Norki Some Houses write their history with words. Ours is written with a thread. Sonia Linard The Golden Thread of NORKI is a silent signature\u2014the mark of a Haute Couture Maison that chooses timelessness over display. It weaves\u2026","_links":{"self":[{"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/pages\/4275","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/comments?post=4275"}],"version-history":[{"count":6,"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/pages\/4275\/revisions"}],"predecessor-version":[{"id":4514,"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/pages\/4275\/revisions\/4514"}],"wp:attachment":[{"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/media?parent=4275"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/categories?post=4275"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/tags?post=4275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}