{"id":4285,"date":"2026-06-08T12:36:56","date_gmt":"2026-06-08T10:36:56","guid":{"rendered":"https:\/\/www.norki.com\/sur-mesure\/?page_id=4285"},"modified":"2026-06-10T15:43:23","modified_gmt":"2026-06-10T13:43:23","slug":"urban-projects","status":"publish","type":"page","link":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/urban-projects\/","title":{"rendered":"Urban"},"content":{"rendered":"\n<style>\n    \/* ==========================================================================\n       HERO SLIDER 16\/9 (Auto-slide to the right + Touch Swipe)\n       ========================================================================== *\/\n\n    .norki-hero-slider {\n        position: relative;\n        width: 100%;\n        aspect-ratio: 16 \/ 9; \/* Forces 16:9 ratio across all screen sizes *\/\n        overflow: hidden;\n        background-color: black;\n        max-height: 100dvh;\n    }\n\n    \/* --- 1. Slide Container --- *\/\n    .norki-hs__track {\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n    }\n\n    .norki-hs__slide {\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n        opacity: 0;\n        transform: translateX(100%); \/* Starts from the far right *\/\n        transition: transform 1s cubic-bezier(0.65, 0, 0.35, 1), opacity 1s ease;\n        z-index: 1;\n    }\n\n    \/* Active Slide *\/\n    .norki-hs__slide.is-active {\n        opacity: 1;\n        transform: translateX(0);\n        z-index: 2;\n    }\n\n    \/* Outgoing Slide (exits to the left) *\/\n    .norki-hs__slide.is-leaving {\n        opacity: 1;\n        transform: translateX(-100%);\n        z-index: 2;\n    }\n\n    .norki-hs__image {\n        width: 100%;\n        height: 100%;\n        object-fit: cover;\n        object-position: center;\n        display: block;\n    }\n\n    \/* Bottom darkening gradient for text legibility *\/\n    .norki-hs__overlay {\n        position: absolute;\n        bottom: 0;\n        left: 0;\n        width: 100%;\n        height: 60%;\n        background: linear-gradient(to top, rgba(0, 0, 0, 0.6) 0%, transparent 100%);\n        z-index: 3;\n        pointer-events: none;\n    }\n\n    \/* --- 2. Texts (Within each slide) --- *\/\n    .norki-hs__text-container {\n        position: absolute;\n        bottom: var(--section-pad-h-dt, 5vw); \/* Aligned with lateral global padding *\/\n        left: var(--section-pad-h-dt, 5vw);\n        z-index: 4;\n        color: #ffffff;\n    }\n\n    .norki-hs__title {\n        display: block; \/* Maintains block behavior for the span *\/\n        font-family: var(--font-montserrat, \"AvenirMedium\", sans-serif);\n        font-size: clamp(2rem, 3.5vw, 45px);\n        font-weight: 500;\n        margin: 0 0 5px 0;\n        line-height: 1.1;\n        letter-spacing: -0.01em;\n        text-shadow: 0 2px 4px rgba(0,0,0,0.3);\n        color: white;\n    }\n\n    .norki-hs__subtitle {\n        font-size: clamp(1.2rem, 2vw, 24px);\n        margin: 0;\n        line-height: 1.3;\n        text-shadow: 0 2px 4px rgba(0,0,0,0.3);\n        display: block;\n    }\n\n    \/* --- 3. Global UI Interface (Positioned over the slides) --- *\/\n    .norki-hs__ui {\n        position: absolute;\n        bottom: var(--section-pad-h-dt, 5vw);\n        left: 0;\n        width: 100%;\n        padding: 0 var(--section-pad-h-dt, 5vw);\n        box-sizing: border-box;\n        display: flex;\n        justify-content: flex-end; \/* Aligns flow content (button) to the right *\/\n        align-items: flex-end;\n        z-index: 10;\n        pointer-events: none; \/* Allows clicks to pass through to the slider if needed *\/\n    }\n\n    \/* Discover Button (Bottom right) *\/\n    .norki-hs__discover-btn {\n        pointer-events: auto; \/* Re-enables clicking *\/\n        color: #ffffff;\n        text-decoration: none;\n        font-size: 1.1rem;\n        font-weight: 500;\n        font-family: var(--font-montserrat, \"AvenirMedium\", sans-serif);\n        position: relative;\n        padding-bottom: 3px;\n        transition: opacity 0.4s ease;\n        text-shadow: 0 2px 4px rgba(0,0,0,0.3);\n    }\n\n    \/* Elegant underline animation *\/\n    .norki-hs__discover-btn::after {\n        content: '';\n        position: absolute;\n        bottom: 0;\n        left: 0;\n        width: 100%;\n        height: 1px;\n        background-color: #ffffff;\n        transform: scaleX(1);\n        transform-origin: right;\n        transition: transform 0.4s ease;\n    }\n\n    .norki-hs__discover-btn:hover::after {\n        transform: scaleX(0);\n        transform-origin: left;\n    }\n\n    \/* Utility class to hide the button during transitions *\/\n    .norki-hs__discover-btn.is-hidden {\n        opacity: 0;\n        pointer-events: none;\n    }\n\n    \/* Pagination Dots (Centered) *\/\n    .norki-hs__pagination {\n        position: absolute;\n        left: 50%;\n        transform: translateX(-50%);\n        display: flex;\n        gap: 12px;\n        align-items: center;\n        pointer-events: auto;\n    }\n\n    .norki-hs__dot {\n        width: 8px;\n        height: 8px;\n        border-radius: 50%;\n        border: 1px solid #ffffff;\n        background-color: transparent;\n        cursor: pointer;\n        transition: all 0.3s ease;\n        padding: 0;\n        box-shadow: 0 1px 3px rgba(0,0,0,0.2);\n    }\n\n    .norki-hs__dot.is-active {\n        background-color: #ffffff;\n        transform: scale(1.2);\n    }\n\n    \/* --- 4. Responsive (16\/9 ratio adaptation on smaller screens) --- *\/\n    @media (max-width: 768px) {\n        \/* Percentages are used to adapt to the lower height of the 16\/9 layout on mobile *\/\n        .norki-hs__text-container {\n            bottom: 22%; \n            left: 5vw;\n        }\n\n        .norki-hs__ui {\n            bottom: 8%;\n            padding: 0 5vw;\n        }\n\n        .norki-hs__title { font-size: clamp(1.2rem, 4vw, 1.8rem); margin-bottom: 2px; }\n        .norki-hs__subtitle { font-size: clamp(0.9rem, 3vw, 1.1rem); }\n        .norki-hs__discover-btn { font-size: clamp(0.8rem, 3vw, 0.95rem); padding-bottom: 1px; }\n        \n        .norki-hs__pagination {\n            gap: 8px;\n        }\n        .norki-hs__dot {\n            width: 5px;\n            height: 5px;\n        }\n    }\n<\/style>\n\n<section class=\"norki-hero-slider\" aria-label=\"Norki urban realizations hero slider\">\n    \n    <div class=\"norki-hs__track\">\n        \n        <!-- SLIDE 1: Private Apartment Paris (Coyote) -->\n        <div class=\"norki-hs__slide is-active\" data-link=\"#discover-coyote-apartment-paris\">\n            <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/bespoke-coyote-rug-paris-appartment.jpg\" alt=\"Parisian private apartment featuring a bespoke coyote fur rug by Norki\" class=\"norki-hs__image\" fetchpriority=\"high\" loading=\"eager\">\n            <div class=\"norki-hs__overlay\"><\/div>\n            <div class=\"norki-hs__text-container\">\n                <span class=\"norki-hs__title\">Bespoke Realization<\/span>\n                <span class=\"norki-hs__subtitle baskerville-italic-font\">Private Apartment, Paris<\/span>\n            <\/div>\n        <\/div>\n\n        <!-- SLIDE 2: Private Apartment Paris (Shearling) -->\n        <div class=\"norki-hs__slide\" data-link=\"#discover-private-apartment-paris\">\n            <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/tailor-made-wall-to-wall-shearling-carpet-2.jpeg\" alt=\"Private apartment in Paris with tailor-made wall-to-wall shearling carpet by Norki\" class=\"norki-hs__image\" loading=\"lazy\">\n            <div class=\"norki-hs__overlay\"><\/div>\n            <div class=\"norki-hs__text-container\">\n                <span class=\"norki-hs__title\">Bespoke Realization<\/span>\n                <span class=\"norki-hs__subtitle baskerville-italic-font\">Private Apartment, Paris<\/span>\n            <\/div>\n        <\/div>\n\n        <!-- SLIDE 3: Historic Haussmann Residence -->\n        <div class=\"norki-hs__slide\" data-link=\"#discover-haussmann-residence\">\n            <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/06\/Marble-and-shearling-armchairs_Norki_v2.png\" alt=\"Bespoke marble and shearling armchairs in a Parisian private mansion by Norki\" class=\"norki-hs__image\" loading=\"lazy\">\n            <div class=\"norki-hs__overlay\"><\/div>\n            <div class=\"norki-hs__text-container\">\n                <span class=\"norki-hs__title\">Historic Haussmann Residence<\/span>\n                <span class=\"norki-hs__subtitle baskerville-italic-font\">Parisian Private Mansion<\/span>\n            <\/div>\n        <\/div>\n\n    <\/div>\n\n    <!-- Global UI (Pagination & Discover Button) -->\n    <div class=\"norki-hs__ui\">\n        \n        <!-- Pagination -->\n        <div class=\"norki-hs__pagination\" aria-label=\"Slide navigation\">\n            <button class=\"norki-hs__dot is-active\" aria-label=\"Go to slide 1\"><\/button>\n            <button class=\"norki-hs__dot\" aria-label=\"Go to slide 2\"><\/button>\n            <button class=\"norki-hs__dot\" aria-label=\"Go to slide 3\"><\/button>\n        <\/div>\n\n        <!-- Discover Button -->\n        <a href=\"#discover-coyote-apartment-paris\" class=\"norki-hs__discover-btn avenirmedium-font\">Discover<\/a>\n        \n    <\/div>\n\n<\/section>\n\n<script>\n    document.addEventListener(\"DOMContentLoaded\", () => {\n        const slides = document.querySelectorAll('.norki-hs__slide');\n        const dots = document.querySelectorAll('.norki-hs__dot');\n        const discoverBtn = document.querySelector('.norki-hs__discover-btn');\n        const totalSlides = slides.length;\n        \n        let currentIndex = 0;\n        let slideInterval;\n        const intervalTime = 6000; \/\/ 6 seconds per slide\n\n        \/\/ 1. Transition logic\n        const goToSlide = (nextIndex) => {\n            if (nextIndex === currentIndex) return;\n\n            const currentSlide = slides[currentIndex];\n            const nextSlide = slides[nextIndex];\n\n            \/\/ A. Hide the Discover button\n            discoverBtn.classList.add('is-hidden');\n\n            \/\/ B. Animate slide transitions\n            currentSlide.classList.remove('is-active');\n            currentSlide.classList.add('is-leaving');\n            \n            \/\/ Ensure next slide has the active class to enter\n            nextSlide.classList.add('is-active');\n\n            \/\/ C. Update pagination dots\n            dots[currentIndex].classList.remove('is-active');\n            dots[nextIndex].classList.add('is-active');\n\n            \/\/ D. Clean up old slide and show button\n            setTimeout(() => {\n                \/\/ Remove outgoing slide from viewport\n                currentSlide.classList.remove('is-leaving');\n                \n                \/\/ Disable transitions temporarily to reset slide positions silently on the right\n                currentSlide.style.transition = 'none';\n                void currentSlide.offsetWidth; \/\/ Force browser reflow\n                currentSlide.style.transition = ''; \/\/ Restore transitions for the next turn\n                \n                \/\/ Update links and reveal the button\n                discoverBtn.href = nextSlide.dataset.link;\n                discoverBtn.classList.remove('is-hidden');\n            }, 1000); \/\/ 1s = duration of the CSS transition\n\n            currentIndex = nextIndex;\n        };\n\n        const nextSlide = () => {\n            goToSlide((currentIndex + 1) % totalSlides);\n        };\n\n        const prevSlide = () => {\n            goToSlide((currentIndex - 1 + totalSlides) % totalSlides);\n        };\n\n        \/\/ 2. Initialize Autoplay\n        const startSlider = () => {\n            slideInterval = setInterval(nextSlide, intervalTime);\n        };\n\n        const resetSlider = () => {\n            clearInterval(slideInterval);\n            startSlider();\n        };\n\n        \/\/ Make dots clickable\n        dots.forEach((dot, index) => {\n            dot.addEventListener('click', () => {\n                goToSlide(index);\n                resetSlider(); \/\/ Reset timer\n            });\n        });\n\n        \/\/ 3. Touch Swipe Handling for Mobile & Tablet\n        let touchStartX = 0;\n        let touchEndX = 0;\n        const sliderContainer = document.querySelector('.norki-hero-slider');\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        function handleSwipeGesture() {\n            const swipeThreshold = 50; \n            if (touchEndX < touchStartX - swipeThreshold) {\n                \/\/ Swipe Left -> Next Slide\n                nextSlide();\n                resetSlider();\n            }\n            if (touchEndX > touchStartX + swipeThreshold) {\n                \/\/ Swipe Right -> Previous Slide\n                prevSlide();\n                resetSlider();\n            }\n        }\n\n        startSlider();\n    });\n<\/script>\n\n\n\n<style>\n    \/* ==========================================================================\n       SECTION \"URBAIN\" (Texte align\u00e9 \u00e0 gauche + Expand - Sans Citation)\n       ========================================================================== *\/\n\n    .norki-urban {\n        padding: var(--section-pad-v-dt, 80px) var(--section-pad-h-dt, 5vw);\n        background-color: var(--color-norki-beige, #f8f0ea);\n        color: black;\n        position: relative;\n        z-index: 10;\n        box-sizing: border-box;\n    }\n\n    .norki-urban * {\n        box-sizing: border-box;\n    }\n\n    .norki-urban__content {\n        max-width: 680px;\n    }\n\n    \/* --- Accroche Italic (H1) --- *\/\n    .norki-urban__intro {\n        font-size: clamp(1.4rem, 2vw, 28px);\n        line-height: 1.35;\n        margin-top: 0;\n        margin-bottom: 70px;\n        color: black;\n        font-weight: normal;\n    }\n\n    \/* --- Titre Principal (H2) --- *\/\n    .norki-urban__title {\n        font-size: clamp(1.6rem, 2.5vw, 32px);\n        font-weight: 500;\n        margin-top: 0;\n        margin-bottom: 25px;\n        letter-spacing: -0.01em;\n        line-height: 1.2;\n    }\n\n    \/* --- Paragraphes --- *\/\n    .norki-urban__text {\n        font-size: 0.95rem;\n        line-height: 1.5;\n        margin-top: 0;\n        margin-bottom: 25px;\n        max-width: 81%;\n    }\n\n    .norki-urban__text strong {\n        font-weight: 600;\n    }\n\n    \/* --- ANIMATION DE VOTRE DIRECTION ARTISTIQUE POUR LES LIENS DU TEXTE --- *\/\n    .norki-urban__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        font-weight: 500;\n    }\n\n    .norki-urban__inline-link:hover {\n        text-decoration-color: transparent;\n        opacity: 0.7;\n    }\n\n    \/* --- Syst\u00e8me d'expansion (Grid Transition) --- *\/\n    .norki-urban__expand-wrapper {\n        display: grid;\n        grid-template-rows: 0fr;\n        transition: grid-template-rows 0.4s ease-out;\n    }\n\n    .norki-urban__expand-wrapper.is-open {\n        grid-template-rows: 1fr;\n    }\n\n    .norki-urban__expand-content {\n        overflow: hidden;\n    }\n\n    \/* Marges annul\u00e9es sur le dernier \u00e9l\u00e9ment pour \u00e9viter les sauts lors de l'animation *\/\n    .norki-urban__expand-content > *:last-child {\n        margin-bottom: 25px; \n    }\n\n    \/* --- Bouton Voir Plus --- *\/\n    .norki-urban__btn {\n        display: inline-block;\n        background: transparent;\n        border: none;\n        padding: 0;\n        cursor: pointer;\n        font-family: inherit;\n        font-size: 0.9rem;\n        color: black;\n        text-decoration: underline;\n        text-underline-offset: 4px;\n        text-decoration-thickness: 1px;\n        transition: opacity 0.3s ease, text-decoration-color 0.3s ease;\n        font-style: italic;\n    }\n\n    .norki-urban__btn:hover {\n        text-decoration-color: transparent;\n        opacity: 0.6;\n    }\n\n    \/* --- Responsive --- *\/\n    @media (max-width: 1024px) {\n        .norki-urban {\n            padding: var(--section-pad-v-tab, 60px) var(--section-pad-h-tab, 4vw);\n        }\n        \n        .norki-urban__intro {\n            margin-bottom: 50px;\n        }\n    }\n\n    @media (max-width: 768px) {\n        .norki-urban {\n            padding: var(--section-pad-v-mob, 50px) var(--section-pad-h-mob, 20px);\n        }\n\n        .norki-urban__content {\n            max-width: 100%;\n        }\n\n        .norki-urban__text {\n            max-width: 100%; \/* Le texte prend toute la largeur sur mobile *\/\n        }\n\n        .norki-urban__intro {\n            font-size: 1.3rem;\n            margin-bottom: 40px;\n        }\n\n        .norki-urban__title {\n            font-size: 1.5rem;\n            margin-bottom: 20px;\n        }\n    }\n<\/style>\n\n<section class=\"norki-urban\">\n    <div class=\"norki-urban__content\">\n        \n        <!-- Accroche en italique (H1) -->\n        <h1 class=\"norki-urban__intro baskerville-italic-font\">\n            Norki in the Heart of Global Capitals\n        <\/h1>\n\n        <!-- Titre de section (H2) -->\n        <h2 class=\"norki-urban__title avenirmedium-font\">\n            Urban Elegance\n        <\/h2>\n\n        <!-- Paragraphe principal visible avec int\u00e9gration des liens s\u00e9mantiques -->\n        <p class=\"norki-urban__text\">\n            From the creation of expansive \n            <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/bespoke-fur-leather-rugs\/\" class=\"norki-urban__inline-link\" title=\"Discover our custom-made rug craftsmanship\">monochrome black rugs<\/a> \n            to the \n            <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/bespoke-upholstery-services\/\" class=\"norki-urban__inline-link\" title=\"Discover our bespoke upholstery artistry\">meticulous restoration of mid-century vintage furniture<\/a>, our Ateliers deploy rare expertise to elevate the most prestigious urban interiors.\n        <\/p>\n\n        <!-- Contenu masqu\u00e9 \/ d\u00e9pliable (sans citation) -->\n        <div class=\"norki-urban__expand-wrapper\" id=\"extra-wrapper-urban\">\n            <div class=\"norki-urban__expand-content\">\n                <p class=\"norki-urban__text\">\n                    Whether restoring or reinterpreting iconic pieces by Pierre Jeanneret or Jean Roy\u00e8re, our Maison is committed to absolute execution. Our close relationships with renowned architects and international gallery owners allow our Workshops to transcend traditional savoir-faire, meeting the most uncompromising aesthetic and technical standards.\n                <\/p>\n                <p class=\"norki-urban__text\">\n                    From New York to London, Dubai to Paris, and Brussels to Milan, our creations grace the world&rsquo;s major capitals, showcasing the pinnacle of French lifestyle and exceptional manufacturing.\n                <\/p>\n            <\/div>\n        <\/div>\n\n        <!-- Bouton d'action -->\n        <button type=\"button\" class=\"norki-urban__btn\" id=\"voir-plus-btn-urban\" aria-expanded=\"false\" aria-controls=\"extra-wrapper-urban\">Learn more<\/button>\n        \n    <\/div>\n<\/section>\n\n<script>\n    document.addEventListener('DOMContentLoaded', () => {\n        const btn = document.getElementById('voir-plus-btn-urban'); \n        const wrapper = document.getElementById('extra-wrapper-urban'); \n\n        if (btn && wrapper) {\n            btn.addEventListener('click', () => {\n                const isOpen = wrapper.classList.toggle('is-open');\n                \n                \/\/ Mise \u00e0 jour de l'accessibilit\u00e9\n                btn.setAttribute('aria-expanded', isOpen);\n\n                \/\/ Mise \u00e0 jour du texte\n                if (isOpen) {\n                    btn.textContent = 'Learn less';\n                } else {\n                    btn.textContent = 'Learn more';\n                }\n            });\n        }\n    });\n<\/script>\n\n\n\n<style>\n    \/* ==========================================================================\n       SECTION GALERIE R\u00c9ALISATIONS VILLE (Filtres + JS Dynamic Masonry)\n       ========================================================================== *\/\n\n    .norki-portfolio {\n        padding: var(--section-pad-v-dt, 80px) var(--section-pad-h-dt, 5vw);\n        background-color: var(--color-norki-beige, #f8f0ea);\n        color: black;\n        position: relative;\n        z-index: 10;\n        box-sizing: border-box;\n        padding-top: 0;\n    }\n\n    \/* --- 1. Menu de Filtres (Conteneur & Scroll) --- *\/\n    .norki-portfolio__filters-container {\n        position: relative;\n        \/* Casse le padding de la section pour permettre un scroll jusqu'au bord de l'\u00e9cran (Bleed effect) *\/\n        width: calc(100% + var(--section-pad-h-dt, 5vw) * 2);\n        margin-left: calc(-1 * var(--section-pad-h-dt, 5vw));\n        margin-bottom: 60px;\n    }\n\n    .norki-portfolio__filters-wrapper {\n        width: 100%;\n        overflow-x: auto;\n        -webkit-overflow-scrolling: touch;\n        scrollbar-width: none; \/* Cache la scrollbar sur Firefox *\/\n        scroll-behavior: smooth;\n        \/* Restaure le padding visuel \u00e0 l'int\u00e9rieur de la zone de scroll *\/\n        padding: 5px var(--section-pad-h-dt, 5vw);\n        box-sizing: border-box;\n    }\n\n    .norki-portfolio__filters-wrapper::-webkit-scrollbar {\n        display: none; \/* Cache la scrollbar sur Chrome\/Safari *\/\n    }\n\n    .norki-portfolio__filters {\n        display: flex;\n        gap: 40px;\n        align-items: center;\n        min-width: max-content;\n    }\n\n    \/* Pseudo-\u00e9l\u00e9ment pour assurer que le dernier \u00e9l\u00e9ment a bien de l'espace \u00e0 droite lors du scroll final *\/\n    .norki-portfolio__filters::after {\n        content: '';\n        padding-right: var(--section-pad-h-dt, 5vw);\n    }\n\n    \/* --- Styles des boutons de filtre (Effet Hover \/ Active) --- *\/\n    .norki-portfolio__filter-btn {\n        background: none;\n        border: none;\n        padding: 0;\n        font-family: var(--font-montserrat, sans-serif);\n        font-size: 1rem;\n        font-weight: 500;\n        color: black;\n        cursor: pointer;\n        text-decoration: underline;\n        text-decoration-color: transparent;\n        text-underline-offset: 4px;\n        text-decoration-thickness: 1px;\n        transition: text-decoration-color 0.3s ease, opacity 0.3s ease, color 0.3s ease;\n    }\n\n    \/* Souligne et change la couleur au survol pour les INACTIFS *\/\n    .norki-portfolio__filter-btn:not(.is-active):hover {\n        text-decoration-color: rgba(0,0,0,0.7);\n        color: rgba(0,0,0,0.7);\n    }\n\n    \/* ACTIF : soulign\u00e9 par d\u00e9faut *\/\n    .norki-portfolio__filter-btn.is-active {\n        text-decoration-color: black;\n        opacity: 1;\n        color: black;\n    }\n\n    \/* D\u00c9-SOULIGNE l'actif d\u00e8s qu'on survole le MENU complet *\/\n    .norki-portfolio__filters:hover .norki-portfolio__filter-btn.is-active {\n        text-decoration-color: transparent;\n    }\n\n    \/* D\u00c9-SOULIGNE FORC\u00c9 si on survole pr\u00e9cis\u00e9ment l'actif (avec l\u00e9g\u00e8re transparence du texte pour l'effet interactif) *\/\n    .norki-portfolio__filter-btn.is-active:hover {\n        text-decoration-color: transparent !important;\n        color: rgba(0,0,0,0.7);\n    }\n\n    \/* --- Fl\u00e8ches de navigation des filtres --- *\/\n    .norki-filter-arrow {\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        width: calc(var(--section-pad-h-dt, 5vw) + 50px);\n        background: none;\n        border: none;\n        color: black;\n        z-index: 5;\n        cursor: pointer;\n        opacity: 0;\n        pointer-events: none;\n        transition: opacity 0.3s ease;\n        display: flex;\n        align-items: center;\n    }\n\n    .norki-filter-arrow.is-visible {\n        opacity: 1;\n        pointer-events: auto;\n    }\n\n    .norki-filter-arrow--left {\n        left: 0;\n        justify-content: flex-start;\n        padding-left: var(--section-pad-h-dt, 5vw);\n        background: linear-gradient(to right, var(--color-norki-beige, #f8f0ea) 60%, rgba(248, 240, 234, 0) 100%);\n    }\n\n    .norki-filter-arrow--right {\n        right: 0;\n        justify-content: flex-end;\n        padding-right: var(--section-pad-h-dt, 5vw);\n        background: linear-gradient(to left, var(--color-norki-beige, #f8f0ea) 60%, rgba(248, 240, 234, 0) 100%);\n    }\n\n    .norki-filter-arrow svg {\n        width: 24px;\n        height: 24px;\n        fill: none;\n        stroke: currentColor;\n        stroke-width: 1.5;\n        transition: transform 0.2s ease;\n    }\n\n    .norki-filter-arrow--left:hover svg { transform: translateX(-3px); }\n    .norki-filter-arrow--right:hover svg { transform: translateX(3px); }\n\n    \/* --- 2. Grille Flex Masonry (G\u00e9r\u00e9e par JS) --- *\/\n    .norki-portfolio__masonry {\n        display: flex;\n        gap: 80px; \n        align-items: flex-start;\n    }\n\n    .norki-portfolio__column {\n        flex: 1;\n        display: flex;\n        flex-direction: column;\n    }\n\n    \/* D\u00e9calage asym\u00e9trique de la colonne de droite (Style Norki) *\/\n    .norki-portfolio__column--right {\n        padding-top: 140px; \n    }\n\n    \/* \u00c9l\u00e9ment Individuel *\/\n    .norki-portfolio__item {\n        display: block;\n        text-decoration: none;\n        color: inherit;\n        position: relative;\n        opacity: 0;\n        transform: translateY(30px);\n        transition: opacity 0.8s ease, transform 0.8s ease;\n    }\n\n    .norki-portfolio__item.is-visible {\n        opacity: 1;\n        transform: translateY(0);\n    }\n\n    .norki-portfolio__img-wrapper {\n        width: 100%;\n        overflow: hidden;\n        background-color: #e5dfd9;\n    }\n\n    .norki-portfolio__img {\n        width: 100%;\n        height: auto;\n        display: block;\n        transition: transform 0.6s ease;\n    }\n\n    .norki-portfolio__item:hover .norki-portfolio__img {\n        transform: scale(1.03); \/* Effet zoom premium *\/\n    }\n\n    .norki-portfolio__caption {\n        margin: 12px 0 0 0;\n        font-family: inherit;\n        font-size: 0.85rem;\n        font-weight: 500;\n        line-height: 1.3;\n        letter-spacing: 0.02em;\n    }\n\n    .norki-portfolio__caption span {\n        font-family: \"LibreBaskervilleItalic\", sans-serif;\n    }\n\n    \/* --- 3. Actions (Bouton Charger Plus Minimaliste) --- *\/\n    .norki-portfolio__actions {\n        text-align: center;\n        margin-top: 50px;\n    }\n\n    .norki-portfolio__load-btn {\n        display: inline-flex;\n        flex-direction: column;\n        align-items: center;\n        gap: 8px;\n        background: none;\n        border: none;\n        padding: 0;\n        color: black;\n        font-family: inherit;\n        cursor: pointer;\n        transition: opacity 0.3s ease;\n    }\n\n    .norki-portfolio__load-dots {\n        font-size: 1.8rem;\n        line-height: 0.5;\n        letter-spacing: 2px;\n        margin-bottom: 5px;\n    }\n\n    .norki-portfolio__load-text {\n        font-size: 0.85rem;\n        font-weight: 500;\n        text-decoration: underline;\n        text-underline-offset: 4px;\n        text-decoration-thickness: 1px;\n    }\n\n    .norki-portfolio__load-btn:hover {\n        opacity: 0.6;\n    }\n\n    .norki-portfolio__load-btn.is-loading {\n        opacity: 0.5;\n        pointer-events: none;\n        cursor: wait;\n    }\n\n    \/* Cache le conteneur source des images (utilis\u00e9 par le JS) *\/\n    .norki-portfolio__source {\n        display: none;\n    }\n\n    \/* --- 4. Responsive --- *\/\n    @media (max-width: 1024px) {\n        .norki-portfolio {\n            padding: var(--section-pad-v-tab, 60px) var(--section-pad-h-tab, 4vw);\n            padding-top: 0;\n        }\n        .norki-portfolio__masonry {\n            gap: 40px; \n        }\n        .norki-portfolio__column--right {\n            padding-top: 80px; \n        }\n    }\n\n    @media (max-width: 768px) {\n        .norki-portfolio {\n            padding: var(--section-pad-v-mob, 50px) var(--section-pad-h-mob, 20px);\n            padding-top: 0;\n        }\n\n        .norki-portfolio__filter-btn {\n            font-size: 0.95rem;\n        }\n\n        .norki-portfolio__filter-btn.is-active {\n            font-weight: 600;\n        }\n\n        \/* Ajustement du conteneur de filtres pour les marges mobiles *\/\n        .norki-portfolio__filters-container {\n            width: calc(100% + var(--section-pad-h-mob, 20px) * 2);\n            margin-left: calc(-1 * var(--section-pad-h-mob, 20px));\n            margin-bottom: 40px;\n        }\n\n        .norki-portfolio__filters-wrapper {\n            padding: 5px var(--section-pad-h-mob, 20px);\n        }\n\n        .norki-portfolio__filters::after {\n            padding-right: var(--section-pad-h-mob, 20px);\n        }\n\n        .norki-filter-arrow {\n            width: calc(var(--section-pad-h-mob, 20px) + 35px);\n        }\n\n        .norki-filter-arrow--left {\n            padding-left: calc(var(--section-pad-h-mob, 20px) - 5px);\n        }\n\n        .norki-filter-arrow--right {\n            padding-right: calc(var(--section-pad-h-mob, 20px) - 5px);\n        }\n\n        \/* Passage \u00e0 1 seule colonne virtuelle sur mobile *\/\n        .norki-portfolio__masonry {\n            display: block; \n        }\n\n        .norki-portfolio__column--right {\n            display: none; \n        }\n\n        \/* On force une marge fixe sur mobile pour \u00e9viter les trous trop grands *\/\n        .norki-portfolio__item {\n            margin-bottom: 60px !important; \n        }\n    }\n<\/style>\n\n<section class=\"norki-portfolio\">\n    \n    <!-- Filter Menu with navigation arrows -->\n    <div class=\"norki-portfolio__filters-container\">\n        <!-- Left Arrow -->\n        <button class=\"norki-filter-arrow norki-filter-arrow--left\" aria-label=\"Scroll left\">\n            <svg viewBox=\"0 0 24 24\"><path d=\"M15 18l-6-6 6-6\"><\/path><\/svg>\n        <\/button>\n\n        <!-- Scrolling Wrapper -->\n        <div class=\"norki-portfolio__filters-wrapper\" id=\"norki-filters-wrapper\">\n            <div class=\"norki-portfolio__filters\">\n                <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/\" class=\"norki-portfolio__filter-btn\" title=\"View all our realizations\">All Realizations<\/a>\n                <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/mountain-projects\/\" class=\"norki-portfolio__filter-btn\" title=\"View our mountain realizations\">Mountain<\/a>\n                <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/beachfront-projects\/\" class=\"norki-portfolio__filter-btn\" title=\"View our beachfront realizations\">Beachfront<\/a>\n                <button class=\"norki-portfolio__filter-btn is-active\" aria-current=\"page\" title=\"Viewing our urban realizations\">Urban<\/button>\n                <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/hotel-projects\/\" class=\"norki-portfolio__filter-btn\" title=\"View our hotel realizations\">Hotel<\/a>\n            <\/div>\n        <\/div>\n\n        <!-- Right Arrow -->\n        <button class=\"norki-filter-arrow norki-filter-arrow--right\" aria-label=\"Scroll right\">\n            <svg viewBox=\"0 0 24 24\"><path d=\"M9 18l6-6-6-6\"><\/path><\/svg>\n        <\/button>\n    <\/div>\n\n    <!-- Masonry target container for JS -->\n    <div class=\"norki-portfolio__masonry\" id=\"norki-masonry-grid\">\n        <div class=\"norki-portfolio__column norki-portfolio__column--left\" id=\"norki-col-left\"><\/div>\n        <div class=\"norki-portfolio__column norki-portfolio__column--right\" id=\"norki-col-right\"><\/div>\n    <\/div>\n\n    <!-- Minimalist Load More Button -->\n    <div class=\"norki-portfolio__actions\">\n        <button id=\"norki-load-more\" class=\"norki-portfolio__load-btn\">\n            <span class=\"norki-portfolio__load-dots\">&#8230;<\/span>\n            <span class=\"norki-portfolio__load-text\">Load more projects<\/span>\n        <\/button>\n    <\/div>\n\n    <!-- DATA SOURCES (Hidden - JS will extract from here) -->\n    <div class=\"norki-portfolio__source\" id=\"norki-items-source\">\n        \n        <!-- 1 -->\n        <a href=\"#\" class=\"norki-portfolio__item\">\n            <div class=\"norki-portfolio__img-wrapper\">\n                <img data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/tapis-roots-claude-cartier-appartement-parisien.jpg\" alt=\"Parisian apartment\" class=\"norki-portfolio__img\">\n            <\/div>\n            <p class=\"norki-portfolio__caption avenirmedium-font\">Bespoke Realization \u2013 <span>Parisian apartment<\/span><\/p>\n        <\/a>\n\n        <!-- 2 -->\n        <a href=\"#\" class=\"norki-portfolio__item\">\n            <div class=\"norki-portfolio__img-wrapper\">\n                <img data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/tailor-made-wall-to-wall-shearling-carpet-2.jpeg\" alt=\"Private Apartment Paris\" class=\"norki-portfolio__img\">\n            <\/div>\n            <p class=\"norki-portfolio__caption avenirmedium-font\">Bespoke Realization \u2013 <span>Private Apartment Paris<\/span><\/p>\n        <\/a>\n\n        <!-- 3 -->\n        <a href=\"#\" class=\"norki-portfolio__item\">\n            <div class=\"norki-portfolio__img-wrapper\">\n                <img data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Tapis-Milan-sur-meusre-Projet-prive-Brussels.jpg\" alt=\"Private Apartment Brussels\" class=\"norki-portfolio__img\">\n            <\/div>\n            <p class=\"norki-portfolio__caption avenirmedium-font\">Bespoke Realization \u2013 <span>Private Apartment Brussels<\/span><\/p>\n        <\/a>\n\n        <!-- 4 -->\n        <a href=\"#\" class=\"norki-portfolio__item\">\n            <div class=\"norki-portfolio__img-wrapper\">\n                <img data-src=\"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/06\/Marble-and-shearling-armchairs_Norki_v2.png\" alt=\"Parisian private mansion\" class=\"norki-portfolio__img\">\n            <\/div>\n            <p class=\"norki-portfolio__caption avenirmedium-font\">Historic Haussmann Residence \u2013 <span>Parisian private mansion<\/span><\/p>\n        <\/a>\n\n        <!-- 5 -->\n        <a href=\"#\" class=\"norki-portfolio__item\">\n            <div class=\"norki-portfolio__img-wrapper\">\n                <img data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/plaid-en-renard-vert-sur-mesure.jpg\" alt=\"Private Apartment Paris\" class=\"norki-portfolio__img\">\n            <\/div>\n            <p class=\"norki-portfolio__caption avenirmedium-font\">Bespoke Realization \u2013 <span>Private Apartment Paris<\/span><\/p>\n        <\/a>\n\n        <!-- 6 -->\n        <a href=\"#\" class=\"norki-portfolio__item\">\n            <div class=\"norki-portfolio__img-wrapper\">\n                <img data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/bespoke-coyote-rug-paris-appartment.jpg\" alt=\"Private Apartment Paris\" class=\"norki-portfolio__img\">\n            <\/div>\n            <p class=\"norki-portfolio__caption avenirmedium-font\">Bespoke Realization \u2013 <span>Private Apartment Paris<\/span><\/p>\n        <\/a>\n\n        <!-- 7 -->\n        <a href=\"#\" class=\"norki-portfolio__item\">\n            <div class=\"norki-portfolio__img-wrapper\">\n                <img data-src=\"https:\/\/www.norki.com\/sur-mesure\/wp-content\/uploads\/2026\/06\/banc-pierre-jeanneret-sur-mesure-v2.png\" alt=\"Parisian Private Mansion\" class=\"norki-portfolio__img\">\n            <\/div>\n            <p class=\"norki-portfolio__caption avenirmedium-font\">Bespoke Realization \u2013 <span>Parisian Private Mansion<\/span><\/p>\n        <\/a>\n\n    <\/div>\n\n<\/section>\n\n<script>\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n    \n    \/\/ --- 1. GESTION DES FL\u00c8CHES DU MENU FILTRES ---\n    const filtersWrapper = document.getElementById('norki-filters-wrapper');\n    const arrowLeft = document.querySelector('.norki-filter-arrow--left');\n    const arrowRight = document.querySelector('.norki-filter-arrow--right');\n\n    const updateFilterArrows = () => {\n        if (!filtersWrapper) return;\n        \n        \/\/ Tol\u00e9rance pour g\u00e9rer les arrondis de pixels selon les navigateurs\n        const scrollLeft = Math.ceil(filtersWrapper.scrollLeft);\n        const scrollWidth = filtersWrapper.scrollWidth;\n        const clientWidth = filtersWrapper.clientWidth;\n\n        \/\/ Afficher\/Cacher la fl\u00e8che gauche\n        if (scrollLeft > 5) {\n            arrowLeft.classList.add('is-visible');\n        } else {\n            arrowLeft.classList.remove('is-visible');\n        }\n\n        \/\/ Afficher\/Cacher la fl\u00e8che droite\n        if (scrollLeft + clientWidth < scrollWidth - 5) {\n            arrowRight.classList.add('is-visible');\n        } else {\n            arrowRight.classList.remove('is-visible');\n        }\n    };\n\n    if (filtersWrapper) {\n        filtersWrapper.addEventListener('scroll', updateFilterArrows);\n        window.addEventListener('resize', updateFilterArrows);\n        \n        \/\/ Initialisation apr\u00e8s un court d\u00e9lai pour s'assurer que les polices\/tailles sont charg\u00e9es\n        setTimeout(updateFilterArrows, 100);\n\n        if (arrowLeft) {\n            arrowLeft.addEventListener('click', () => {\n                filtersWrapper.scrollBy({ left: -250, behavior: 'smooth' });\n            });\n        }\n        if (arrowRight) {\n            arrowRight.addEventListener('click', () => {\n                filtersWrapper.scrollBy({ left: 250, behavior: 'smooth' });\n            });\n        }\n    }\n\n    \/\/ --- 2. GESTION DE LA GRILLE MASONRY ET CHARGEMENT ---\n    const sourceItems = Array.from(document.querySelectorAll('#norki-items-source .norki-portfolio__item'));\n    const colLeft = document.getElementById('norki-col-left');\n    const colRight = document.getElementById('norki-col-right');\n    const loadMoreBtn = document.getElementById('norki-load-more');\n    const loadMoreText = loadMoreBtn ? loadMoreBtn.querySelector('.norki-portfolio__load-text') : null;\n    \n    let currentIndex = 0;\n    const itemsPerLoad = 4; \/\/ Nombre d'images \u00e0 charger par clic\n\n    \/\/ Marges dynamiques augment\u00e9es pour donner plus d'air\n    function getDynamicMargin(ratio) {\n        if (window.innerWidth <= 768) return 60; \/\/ Marge fixe sur mobile pour la lisibilit\u00e9\n        \n        if (ratio <= 0.8) {\n            return 180; \/\/ Portrait (Haute) \n        } else if (ratio >= 1.2) {\n            return 110;  \/\/ Paysage (Large)\n        } else {\n            return 140;  \/\/ Format carr\u00e9 ou interm\u00e9diaire \n        }\n    }\n\n    \/\/ Traitement asynchrone : Attend que l'image soit pr\u00e9-charg\u00e9e pour mesurer son ratio\n    const processNextItem = (item) => {\n        return new Promise((resolve) => {\n            const img = item.querySelector('.norki-portfolio__img');\n            const src = img.getAttribute('data-src');\n            \n            const placeItemInDOM = () => {\n                \/\/ Calcul du ratio et de la marge dynamique\n                const ratio = img.naturalWidth \/ img.naturalHeight;\n                const margin = getDynamicMargin(ratio);\n                item.style.marginBottom = margin + 'px';\n\n                \/\/ Logique d'ajout : Forc\u00e9 \u00e0 gauche sur Mobile pour \u00e9viter les sauts d'\u00e9cran\n                if (window.innerWidth <= 768) {\n                    colLeft.appendChild(item);\n                } else {\n                    \/\/ Sur PC : Ajout dans la colonne la plus courte (pour \u00e9quilibrer)\n                    if (colLeft.offsetHeight <= colRight.offsetHeight) {\n                        colLeft.appendChild(item);\n                    } else {\n                        colRight.appendChild(item);\n                    }\n                }\n\n                \/\/ Animation d'apparition\n                requestAnimationFrame(() => {\n                    setTimeout(() => item.classList.add('is-visible'), 50);\n                });\n                \n                resolve();\n            };\n\n            \/\/ Pr\u00e9chargement fant\u00f4me pour r\u00e9cup\u00e9rer la taille exacte\n            const preloadImg = new Image();\n            preloadImg.onload = () => {\n                img.src = src;\n                img.removeAttribute('data-src');\n                placeItemInDOM();\n            };\n            preloadImg.onerror = () => {\n                img.src = src;\n                placeItemInDOM();\n            };\n            preloadImg.src = src;\n        });\n    };\n\n    \/\/ Fonction de chargement group\u00e9\n    const loadItems = async () => {\n        if (!loadMoreBtn || !loadMoreText) return;\n        \n        loadMoreBtn.classList.add('is-loading');\n        loadMoreText.textContent = \"Loading...\";\n\n        const endIndex = Math.min(currentIndex + itemsPerLoad, sourceItems.length);\n        \n        \/\/ Charge et place les images l'une apr\u00e8s l'autre pour garantir l'ordre chronologique\n        for (let i = currentIndex; i < endIndex; i++) {\n            await processNextItem(sourceItems[i]);\n        }\n\n        currentIndex = endIndex;\n        loadMoreBtn.classList.remove('is-loading');\n        loadMoreText.textContent = \"Load more projects\";\n\n        \/\/ Masque le bouton s'il n'y a plus d'images dans la div source\n        if (currentIndex >= sourceItems.length) {\n            loadMoreBtn.style.display = 'none';\n        }\n    };\n\n    \/\/ 1er Chargement (Initialisation)\n    loadItems();\n\n    \/\/ \u00c9couteur sur le bouton avec pr\u00e9vention du saut par d\u00e9faut\n    loadMoreBtn.addEventListener('click', (e) => {\n        e.preventDefault();\n        loadItems();\n    });\n});\n<\/script>\n\n\n\n<style>\n    \/* ==========================================================================\n       SECTION CTA ARCHITECTE (Centr\u00e9e)\n       ========================================================================== *\/\n\n    .norki-cta-archi {\n        padding: var(--section-pad-v-dt, 80px) var(--section-pad-h-dt, 5vw);\n        background-color: var(--color-norki-beige, #f8f0ea);\n        color: black;\n        position: relative;\n        z-index: 10;\n        box-sizing: border-box;\n        text-align: center;\n        display: flex;\n        justify-content: center;\n    }\n\n    .norki-cta-archi__wrapper {\n        max-width: 650px; \/* Force les retours \u00e0 la ligne du paragraphe comme sur la maquette *\/\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        gap: 30px; \/* Espace r\u00e9gulier entre le titre, le texte et le bouton *\/\n    }\n\n    \/* --- Titres --- *\/\n    .norki-cta-archi__title {\n        margin: 0;\n        line-height: 1.25;\n        letter-spacing: -0.01em;\n    }\n\n    .norki-cta-archi__title-sans {\n        display: block;\n        font-size: clamp(1.4rem, 2.2vw, 30px);\n        font-weight: 500;\n        margin-bottom: 5px;\n    }\n\n    .norki-cta-archi__title-serif {\n        display: block;\n        font-size: clamp(1.6rem, 2.5vw, 34px);\n        font-weight: 400;\n    }\n\n    \/* --- Paragraphe --- *\/\n    .norki-cta-archi__text {\n        font-size: 0.95rem;\n        line-height: 1.5;\n        margin: 0;\n    }\n\n    \/* --- Liens int\u00e9gr\u00e9s (Design System) --- *\/\n    .norki-cta-archi__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    .norki-cta-archi__inline-link:hover {\n        text-decoration-color: transparent;\n        opacity: 0.7;\n    }\n\n    \/* --- Bouton Secondaire --- *\/\n    .norki-cta-archi__btn {\n        display: inline-flex;\n        justify-content: center;\n        align-items: center;\n        padding: 4px 35px;\n        text-decoration: none;\n        font-size: 0.9rem;\n        font-weight: 500;\n        color: black;\n        background-color: transparent;\n        border: 1px solid black;\n        transition: all 0.3s ease;\n        margin-top: 10px; \/* L\u00e9ger espacement suppl\u00e9mentaire avec le texte *\/\n    }\n\n    .norki-cta-archi__btn:hover {\n        background-color: black;\n        color: white;\n    }\n\n    \/* --- Responsive --- *\/\n    @media (max-width: 1024px) {\n        .norki-cta-archi {\n            padding: var(--section-pad-v-tab, 60px) var(--section-pad-h-tab, 4vw);\n        }\n        \n        .norki-cta-archi__wrapper {\n            gap: 25px;\n        }\n    }\n\n    @media (max-width: 768px) {\n        .norki-cta-archi {\n            padding: var(--section-pad-v-mob, 50px) var(--section-pad-h-mob, 20px);\n        }\n\n        .norki-cta-archi__wrapper {\n            gap: 20px;\n        }\n\n        .norki-cta-archi__title-sans {\n            font-size: 1.3rem;\n        }\n\n        .norki-cta-archi__title-serif {\n            font-size: 1.45rem;\n        }\n    }\n<\/style>\n\n<section class=\"norki-cta-archi\">\n    <div class=\"norki-cta-archi__wrapper\">\n        \n        <!-- Titles -->\n        <h2 class=\"norki-cta-archi__title\">\n            <span class=\"norki-cta-archi__title-sans avenirmedium-font\">Are you an architect with a bespoke project<\/span>\n            <span class=\"norki-cta-archi__title-serif baskerville-italic-font\">for rugs, throws, cushions, or custom <span style=\"white-space: nowrap;\" class=\"baskerville-italic-font\">furniture?<\/span><\/span>\n        <\/h2>\n\n        <!-- Descriptive Text -->\n        <p class=\"norki-cta-archi__text\">\n            To <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/contact-us\/\" class=\"norki-cta-archi__inline-link\" title=\"Contact us to receive a personalized quote\">receive a personalized quote<\/a> for the creation of <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/high-end-interior-design\/\" class=\"norki-cta-archi__inline-link\" title=\"Discover our bespoke furniture and soft furnishings\">bespoke pieces<\/a> or to obtain more information about our <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/luxury-upholstery-installation-services\/\" class=\"norki-cta-archi__inline-link\" title=\"Learn more about our fitting and installation services\">fitting and installation services<\/a>, our <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/bespoke-interior-design-studio-furniture-rugs\/\" class=\"norki-cta-archi__inline-link\" title=\"Discover our integrated Design Studio\">specialized teams<\/a> will be delighted to assist you.\n        <\/p>\n\n        <!-- Action Button -->\n        <a href=\"https:\/\/api.whatsapp.com\/send?phone=33647923857\" class=\"norki-cta-archi__btn\" target=\"_blank\" rel=\"noopener\" title=\"Contact our sales team on WhatsApp\">Whatsapp us<\/a>\n        \n    <\/div>\n<\/section>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bespoke Realization Private Apartment, Paris Bespoke Realization Private Apartment, Paris Historic Haussmann Residence Parisian Private Mansion Discover Norki in the Heart of Global Capitals Urban Elegance From the creation of expansive monochrome black rugs to the meticulous restoration of mid-century vintage furniture, our Ateliers deploy rare expertise to elevate the most prestigious urban interiors. Whether [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":4277,"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 *\/","_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-4285","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>Urban Projects | Interior Creations | Maison NORKI<\/title>\n<meta name=\"description\" content=\"Discover Norki\u2019s urban projects: bespoke rugs, furniture, and upholstery for exceptional city apartments and residences.\" \/>\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\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/urban-projects\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Urban Projects | Interior Creations | Maison NORKI\" \/>\n<meta property=\"og:description\" content=\"Discover Norki\u2019s urban projects: bespoke rugs, furniture, and upholstery for exceptional city apartments and residences.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/urban-projects\/\" \/>\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-10T13:43:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/bespoke-coyote-rug-paris-appartment.jpg\" \/>\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=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.norki.com\\\/en\\\/custom-made-upholstery\\\/interior-design-projects-bespoke-craftsmanship\\\/urban-projects\\\/\",\"url\":\"https:\\\/\\\/www.norki.com\\\/en\\\/custom-made-upholstery\\\/interior-design-projects-bespoke-craftsmanship\\\/urban-projects\\\/\",\"name\":\"Urban Projects | Interior Creations | Maison NORKI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.norki.com\\\/en\\\/custom-made-upholstery\\\/interior-design-projects-bespoke-craftsmanship\\\/urban-projects\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.norki.com\\\/en\\\/custom-made-upholstery\\\/interior-design-projects-bespoke-craftsmanship\\\/urban-projects\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/norki.com\\\/sur-mesure\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/bespoke-coyote-rug-paris-appartment.jpg\",\"datePublished\":\"2026-06-08T10:36:56+00:00\",\"dateModified\":\"2026-06-10T13:43:23+00:00\",\"description\":\"Discover Norki\u2019s urban projects: bespoke rugs, furniture, and upholstery for exceptional city apartments and residences.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.norki.com\\\/en\\\/custom-made-upholstery\\\/interior-design-projects-bespoke-craftsmanship\\\/urban-projects\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.norki.com\\\/en\\\/custom-made-upholstery\\\/interior-design-projects-bespoke-craftsmanship\\\/urban-projects\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.norki.com\\\/en\\\/custom-made-upholstery\\\/interior-design-projects-bespoke-craftsmanship\\\/urban-projects\\\/#primaryimage\",\"url\":\"https:\\\/\\\/norki.com\\\/sur-mesure\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/bespoke-coyote-rug-paris-appartment.jpg\",\"contentUrl\":\"https:\\\/\\\/norki.com\\\/sur-mesure\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/bespoke-coyote-rug-paris-appartment.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.norki.com\\\/en\\\/custom-made-upholstery\\\/interior-design-projects-bespoke-craftsmanship\\\/urban-projects\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Our Projects\",\"item\":\"https:\\\/\\\/www.norki.com\\\/en\\\/custom-made-upholstery\\\/interior-design-projects-bespoke-craftsmanship\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Urban\"}]},{\"@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":"Urban Projects | Interior Creations | Maison NORKI","description":"Discover Norki\u2019s urban projects: bespoke rugs, furniture, and upholstery for exceptional city apartments and residences.","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\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/urban-projects\/","og_locale":"fr_FR","og_type":"article","og_title":"Urban Projects | Interior Creations | Maison NORKI","og_description":"Discover Norki\u2019s urban projects: bespoke rugs, furniture, and upholstery for exceptional city apartments and residences.","og_url":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/urban-projects\/","og_site_name":"Norki","article_publisher":"https:\/\/facebook.com\/NorkiDecoration","article_modified_time":"2026-06-10T13:43:23+00:00","og_image":[{"url":"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/bespoke-coyote-rug-paris-appartment.jpg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/urban-projects\/","url":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/urban-projects\/","name":"Urban Projects | Interior Creations | Maison NORKI","isPartOf":{"@id":"https:\/\/www.norki.com\/sur-mesure\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/urban-projects\/#primaryimage"},"image":{"@id":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/urban-projects\/#primaryimage"},"thumbnailUrl":"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/bespoke-coyote-rug-paris-appartment.jpg","datePublished":"2026-06-08T10:36:56+00:00","dateModified":"2026-06-10T13:43:23+00:00","description":"Discover Norki\u2019s urban projects: bespoke rugs, furniture, and upholstery for exceptional city apartments and residences.","breadcrumb":{"@id":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/urban-projects\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/urban-projects\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/urban-projects\/#primaryimage","url":"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/bespoke-coyote-rug-paris-appartment.jpg","contentUrl":"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/bespoke-coyote-rug-paris-appartment.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/urban-projects\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.norki.com\/sur-mesure\/fr\/"},{"@type":"ListItem","position":2,"name":"Our Projects","item":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/"},{"@type":"ListItem","position":3,"name":"Urban"}]},{"@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":"Bespoke Realization Private Apartment, Paris Bespoke Realization Private Apartment, Paris Historic Haussmann Residence Parisian Private Mansion Discover Norki in the Heart of Global Capitals Urban Elegance From the creation of expansive monochrome black rugs to the meticulous restoration of mid-century vintage furniture, our Ateliers deploy rare expertise to elevate the most prestigious urban interiors. Whether\u2026","_links":{"self":[{"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/pages\/4285","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=4285"}],"version-history":[{"count":5,"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/pages\/4285\/revisions"}],"predecessor-version":[{"id":4546,"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/pages\/4285\/revisions\/4546"}],"up":[{"embeddable":true,"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/pages\/4277"}],"wp:attachment":[{"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/media?parent=4285"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/categories?post=4285"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/tags?post=4285"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}