{"id":4308,"date":"2026-06-08T14:09:32","date_gmt":"2026-06-08T12:09:32","guid":{"rendered":"https:\/\/www.norki.com\/sur-mesure\/?page_id=4308"},"modified":"2026-07-17T14:24:09","modified_gmt":"2026-07-17T12:24:09","slug":"grau-roig-andorre","status":"publish","type":"page","link":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/hotel-projects\/grau-roig-andorre\/","title":{"rendered":"Grau Roig"},"content":{"rendered":"\n<section class=\"nk-hero\">\n  <div class=\"nk-hero__bg\">\n    <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Decoration-Hotel-Montagne-Andorre.jpg\" alt=\"Mountain Palace in the Pyrenees, Andorra\" loading=\"eager\">\n    <div class=\"nk-hero__overlay\"><\/div>\n  <\/div>\n  \n  <div class=\"nk-hero__content\">\n    <div class=\"nk-hero__header\">\n      <!-- Wrapper for the title -->\n      <div class=\"nk-hero__title-wrapper\">\n        <h1 class=\"nk-hero__title avenirmedium-font\">Mountain Palace in the Pyrenees<\/h1>\n      <\/div>\n      <!-- Wrapper for the subtitle -->\n      <div class=\"nk-hero__subtitle-wrapper\">\n        <span class=\"nk-hero__subtitle baskerville-italic-font\">Mountain Palace in Andorra<\/span>\n      <\/div>\n    <\/div>\n    \n    <hr class=\"nk-hero__divider\">\n    \n    <!-- Scrolling meta information -->\n    <div class=\"nk-hero__meta\">\n      <span class=\"nk-hero__meta-item avenirmedium-font\">Andorra<\/span>\n      <span class=\"nk-hero__meta-item avenirmedium-font\">2026<\/span>\n      <span class=\"nk-hero__meta-item\">Bespoke furniture, wall panels &amp; cushions<\/span>\n    <\/div>\n  <\/div>\n<\/section>\n\n<style>\n.nk-hero {\n  position: relative;\n  width: 100%;\n  \/* Height set above 100vh to naturally nudge users to scroll down *\/\n  height: 120vh; \n  min-height: 700px;\n  overflow: hidden;\n  background-color: #000000;\n}\n\n.nk-hero__bg {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 1;\n}\n\n.nk-hero__bg img {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  object-position: center center;\n  display: block;\n}\n\n\/* Linear gradient overlay for solid text legibility *\/\n.nk-hero__overlay {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 40%;\n  background: linear-gradient(to top, rgba(0, 0, 0, 0.7) 0%, rgba(0, 0, 0, 0) 100%);\n  z-index: 2;\n  pointer-events: none;\n}\n\n.nk-hero__content {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  z-index: 3;\n  padding: 0 40px 40px 40px;\n  color: #ffffff;\n  box-sizing: border-box;\n}\n\n\/* Header Text (Titles - Larger typography and higher positioning) *\/\n.nk-hero__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-end;\n  margin-bottom: 35px; \/* Spacing increased to detach the title row from the line below *\/\n  gap: 20px;\n  width: 100%;\n}\n\n.nk-hero__title-wrapper {\n  flex: 1 1 65%;\n  max-width: calc(100% - 250px);\n}\n\n.nk-hero__subtitle-wrapper {\n  flex: 0 0 auto;\n  text-align: right;\n  min-width: max-content;\n}\n\n.nk-hero__title {\n  color: white;\n  font-size: clamp(2.2rem, 3.2vw, 3.2rem); \/* Larger fluid font size *\/\n  letter-spacing: 0.02em;\n  line-height: 1.1;\n  font-weight: normal;\n  margin: 0;\n}\n\n.nk-hero__subtitle {\n  font-size: clamp(2.2rem, 3.2vw, 3.2rem); \/* Larger fluid font size to match title *\/\n  line-height: 1.1;\n  font-weight: normal;\n  display: block;\n}\n\n\/* White Divider *\/\n.nk-hero__divider {\n  width: 100%;\n  height: 1px;\n  background-color: rgba(255, 255, 255, 0.6);\n  border: none;\n  margin-bottom: 16px;\n}\n\n\/* Meta Informations (Equal spacing layout) *\/\n.nk-hero__meta {\n  display: flex;\n  justify-content: flex-start;\n  gap: 40px; \/* Equal spacing between each item *\/\n}\n\n.nk-hero__meta-item {\n  font-size: 0.75rem;\n  letter-spacing: 0.05em;\n  text-transform: capitalize;\n}\n\n\/* ============================================\n    RESPONSIVE TABLETTE (\u2264 1024px)\n============================================ *\/\n@media (max-width: 1024px) {\n  .nk-hero__content {\n    padding: 0 30px 30px 30px;\n  }\n  .nk-hero__title,\n  .nk-hero__subtitle {\n    font-size: clamp(1.8rem, 2.8vw, 2.4rem);\n  }\n  .nk-hero__meta {\n    gap: 30px;\n  }\n}\n\n\/* ============================================\n    RESPONSIVE MOBILE (\u2264 640px)\n============================================ *\/\n@media (max-width: 640px) {\n  .nk-hero {\n    height: 110vh; \n  }\n\n  .nk-hero__bg img {\n    object-position: 40% center;\n  }\n\n  .nk-hero__content {\n    padding: 0 20px 24px 20px;\n  }\n\n  .nk-hero__header {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: 8px;\n    margin-bottom: 20px;\n  }\n\n  .nk-hero__title-wrapper,\n  .nk-hero__subtitle-wrapper {\n    flex: none;\n    max-width: 100%;\n    min-width: 0;\n  }\n\n  .nk-hero__subtitle-wrapper {\n    text-align: left;\n  }\n\n  .nk-hero__title {\n    font-size: 1.8rem;\n  }\n\n  .nk-hero__subtitle {\n    font-size: 1.7rem;\n  }\n\n  \/* Configuration du scroll horizontal fluide sur mobile *\/\n  .nk-hero__meta {\n    flex-wrap: nowrap; \/* Maintient les \u00e9l\u00e9ments sur 1 ligne *\/\n    gap: 25px; \/* Espacement raisonnable *\/\n    overflow-x: auto; \/* Autorise le scroll *\/\n    -webkit-overflow-scrolling: touch; \/* Inertie iOS *\/\n    scrollbar-width: none; \/* Cache la barre Firefox *\/\n    -ms-overflow-style: none; \/* Cache la barre IE\/Edge *\/\n    padding-bottom: 2px;\n    padding-left: 8px; \/* Ajout d'une marge de s\u00e9curit\u00e9 pour \u00e9viter que la premi\u00e8re lettre soit rogn\u00e9e *\/\n    padding-right: 8px;\n  }\n  \n  \/* Cache la scrollbar sur Chrome\/Safari *\/\n  .nk-hero__meta::-webkit-scrollbar {\n    display: none;\n  }\n\n  .nk-hero__meta-item {\n    white-space: nowrap; \/* Emp\u00eache de passer \u00e0 la ligne \u00e0 l'int\u00e9rieur d'un item *\/\n    flex-shrink: 0; \/* Emp\u00eache le texte d'\u00eatre \u00e9cras\u00e9 *\/\n  }\n\n  .nk-hero__meta-item:nth-child(3) {\n    margin-left: 0;\n    flex-basis: auto;\n    margin-top: 0;\n  }\n}\n<\/style>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', () => {\n  const metaContainer = document.querySelector('.nk-hero__meta');\n  if (!metaContainer) return;\n\n  let isAnimating = false;\n  let animationFrameId;\n  let direction = 1; \/\/ 1 = right, -1 = left\n  let speed = 0.5; \/\/ Slow smooth scroll speed\n  let resumeTimeout;\n  let extremityTimeout; \/\/ Pause at bounds and loading\n  let isInteracting = false;\n  let isPausedAtExtremity = false; \n  let currentScroll = metaContainer.scrollLeft;\n\n  \/\/ Horizontal back and forth loop\n  function autoScroll() {\n    if (isInteracting) return;\n    if (isPausedAtExtremity) {\n       animationFrameId = requestAnimationFrame(autoScroll);\n       return;\n    }\n    \n    \/\/ PC check\n    if (metaContainer.scrollWidth <= metaContainer.clientWidth) {\n       animationFrameId = requestAnimationFrame(autoScroll);\n       return;\n    }\n\n    currentScroll += speed * direction;\n    metaContainer.scrollLeft = Math.round(currentScroll);\n\n    const maxScroll = metaContainer.scrollWidth - metaContainer.clientWidth;\n\n    \/\/ Strict Nested IF blocks to bypass potential WP parser bugs with double ampersands\n    if (direction === 1) {\n      if (metaContainer.scrollLeft >= maxScroll - 1) {\n        isPausedAtExtremity = true;\n        extremityTimeout = setTimeout(() => {\n          direction = -1;\n          currentScroll = metaContainer.scrollLeft;\n          isPausedAtExtremity = false;\n        }, 2000); \/\/ 2 seconds delay on right end\n      }\n    } else if (direction === -1) {\n      if (metaContainer.scrollLeft <= 1) {\n        isPausedAtExtremity = true;\n        extremityTimeout = setTimeout(() => {\n          direction = 1;\n          currentScroll = metaContainer.scrollLeft;\n          isPausedAtExtremity = false;\n        }, 2000); \/\/ 2 seconds delay on left end\n      }\n    }\n\n    animationFrameId = requestAnimationFrame(autoScroll);\n  }\n\n  \/\/ Animation start trigger\n  function startAnimation() {\n    if (!isAnimating) {\n      isAnimating = true;\n      currentScroll = metaContainer.scrollLeft; \n      \n      isPausedAtExtremity = true;\n      clearTimeout(extremityTimeout);\n      extremityTimeout = setTimeout(() => {\n        isPausedAtExtremity = false;\n      }, 2000);\n\n      autoScroll();\n    }\n  }\n\n  \/\/ Animation cancel trigger\n  function stopAnimation() {\n    isAnimating = false;\n    cancelAnimationFrame(animationFrameId);\n  }\n\n  \/\/ Handle touch events and scroll interactions\n  function handleInteraction() {\n    isInteracting = true;\n    isPausedAtExtremity = false; \n    clearTimeout(extremityTimeout); \n    stopAnimation();\n    clearTimeout(resumeTimeout);\n    \n    \/\/ Auto-resume scrolling after 3s inactivity\n    resumeTimeout = setTimeout(() => {\n      isInteracting = false;\n      if (window.innerWidth <= 640) {\n        currentScroll = metaContainer.scrollLeft; \n        startAnimation();\n      }\n    }, 3000);\n  }\n\n  \/\/ Intersection Observer\n  const observer = new IntersectionObserver((entries) => {\n    entries.forEach(entry => {\n      if (entry.isIntersecting) {\n        if (window.innerWidth <= 640) {\n            startAnimation();\n        }\n      } else {\n        stopAnimation();\n      }\n    });\n  }, { threshold: 0 });\n\n  observer.observe(metaContainer);\n\n  metaContainer.addEventListener('touchstart', () => {\n    currentScroll = metaContainer.scrollLeft; \n    handleInteraction();\n  }, { passive: true });\n  \n  metaContainer.addEventListener('touchmove', () => {\n    currentScroll = metaContainer.scrollLeft; \n    handleInteraction();\n  }, { passive: true });\n  \n  metaContainer.addEventListener('wheel', handleInteraction, { passive: true });\n\n  window.addEventListener('resize', () => {\n    if (window.innerWidth > 640) {\n       stopAnimation();\n       metaContainer.scrollLeft = 0; \n       currentScroll = 0;\n    } else {\n       if (!isInteracting) {\n         startAnimation();\n       }\n    }\n  });\n});\n<\/script>\n\n\n\n<section class=\"nk-intro\">\n  <div class=\"nk-intro__inner\">\n    \n    <div class=\"nk-intro__header\">\n      <h2 class=\"nk-intro__title avenirmedium-font\">\n        An Exclusive Refuge Where Snowy Peaks\n        <span class=\"nk-intro__title-accent baskerville-italic-font\">and Architectural Excellence Meet<\/span>\n      <\/h2>\n    <\/div>\n    \n    <div class=\"nk-intro__content\">\n      <p class=\"nk-intro__paragraph\">\n        In the heart of the Principality of Andorra, where the rugged peaks dictate a timeless and powerful stone architecture, stands the <a href=\"https:\/\/www.hotelgrauroig.com\" class=\"nk-intro__inline-link\" target=\"_blank\" rel=\"noopener\" title=\"Visit the official Boutique-H\u00f4tel Grau Roig website\">Grau Roig Boutique Hotel<\/a>. A true high-altitude gem, this mountain palace enjoys a rare location, offering an immediate \u00ab\u00a0ski in, ski out\u00a0\u00bb experience at the foot of the Grandvalira ski lifts. Within this spectacular setting, featuring a luxurious spa and breathtaking panoramic views, Norki has orchestrated a masterly reinterpretation of mountain luxury.\n      <\/p>\n      <p class=\"nk-intro__paragraph\">\n        Working in close collaboration with the owner, we have elevated the soul of the guest rooms, the welcoming lobby, and the fine-dining restaurants to create an elite sanctuary.\n      <\/p>\n    <\/div>\n\n  <\/div>\n<\/section>\n\n<style>\n.nk-intro {\n  background-color: var(--color-norki-beige, #f8f0ea);\n  padding: var(--section-pad-v-dt, 80px) var(--section-pad-h-dt, 5vw);\n  width: 100%;\n  display: flex;\n  justify-content: center;\n  box-sizing: border-box;\n}\n\n.nk-intro * {\n  box-sizing: border-box;\n}\n\n.nk-intro__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.nk-intro__inline-link:hover {\n  text-decoration-color: transparent;\n  opacity: 0.7;\n}\n\n.nk-intro__inner {\n  width: 100%;\n  display: grid;\n  grid-template-columns: 1fr 1.6fr; \/* Elegant asymmetric ratio *\/\n  gap: clamp(40px, 6vw, 100px); \/* Fluid horizontal gap *\/\n  align-items: start;\n}\n\n\/* Left Column: Title *\/\n.nk-intro__header {\n  display: flex;\n  flex-direction: column;\n  justify-content: flex-start;\n}\n\n.nk-intro__title {\n  font-size: clamp(1.4rem, 2.2vw, 25px);\n  line-height: 1.25;\n  color: #000000;\n  font-weight: normal;\n  letter-spacing: -0.01em;\n  margin: 0 !important; \/* Neutralize theme overrides *\/\n}\n\n.nk-intro__title-accent {\n  display: block;\n  font-size: 0.95em; \/* Slightly smaller and subtler *\/\n  color: #000000;\n  margin-top: 4px;\n}\n\n\/* Right Column: Paragraphs *\/\n.nk-intro__content {\n  display: flex;\n  flex-direction: column;\n  gap: 24px; \/* Balanced spacing between text blocks *\/\n  justify-content: flex-start;\n}\n\n.nk-intro__paragraph {\n  font-size: clamp(0.92rem, 1.1vw, 1.05rem);\n  line-height: 1.7;\n  color: #000000;\n  letter-spacing: 0.01em;\n  max-width: 80%;\n  margin: 0 !important;\n}\n\n\/* ============================================\n   RESPONSIVE TABLET (\u2264 1024px)\n============================================ *\/\n@media (max-width: 1024px) {\n  .nk-intro {\n    padding: var(--section-pad-v-tab, 60px) var(--section-pad-h-tab, 4vw);\n  }\n  \n  .nk-intro__inner {\n    grid-template-columns: 1fr; \/* Switch to single-column layout *\/\n    gap: 32px;\n  }\n  \n  .nk-intro__title {\n    max-width: 90%;\n  }\n\n  .nk-intro__paragraph {\n    text-align: left; \/* More natural layout on medium screens and touch devices *\/\n  }\n}\n\n\/* ============================================\n   RESPONSIVE MOBILE (\u2264 640px)\n============================================ *\/\n@media (max-width: 640px) {\n  .nk-intro {\n    padding: var(--section-pad-v-mob, 50px) var(--section-pad-h-mob, 20px);\n  }\n  \n  .nk-intro__inner {\n    gap: 24px;\n  }\n  \n  .nk-intro__title {\n    max-width: 100%;\n  }\n}\n<\/style>\n\n\n\n<section class=\"nk-simple-image\">\n  <!-- Clickable Image -->\n  <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/bespoke-upholstery-services\/\" class=\"nk-simple-image__wrapper\" title=\"Discover bespoke upholstery\">\n    <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Cowhide-round-sofas_GrauRoig-1.jpg\" alt=\"Bespoke dining area in fur and wood crafted by Maison Norki at the Grau Roig Boutique Hotel\" class=\"nk-simple-image__img\" loading=\"lazy\">\n  <\/a>\n  \n  <!-- Clickable Caption using the requested editorial style -->\n  <div class=\"nk-simple-image__caption\">\n    <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/bespoke-upholstery-services\/\" class=\"nk-editorial-inline-link\" title=\"Discover bespoke upholstery\">\n      Bespoke cowhide and leather bench\n    <\/a>\n  <\/div>\n<\/section>\n\n<style>\n\/* ============================================\n  COMPOSANT : SECTION IMAGE UNIQUE IMMERSIVE\n============================================ *\/\n.nk-simple-image {\n  width: 100%;\n  background-color: var(--color-norki-beige, #f8f0ea);\n  line-height: 0; \/* \u00c9vite un d\u00e9calage de pixel parasite sous l'image *\/\n  overflow: hidden;\n  padding-bottom: 15px; \/* Espace de respiration sous la l\u00e9gende *\/\n}\n\n.nk-simple-image__wrapper {\n  display: block; \/* N\u00e9cessaire pour la balise <a> cliquable *\/\n  width: 100%;\n  height: 85vh; \/* Hauteur immersive et \u00e9l\u00e9gante sur PC *\/\n  min-height: 500px;\n  overflow: hidden;\n}\n\n.nk-simple-image__img {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  object-position: center center; \/* Centrage \u00e9quilibr\u00e9 par d\u00e9faut sur PC *\/\n  transition: transform 0.6s cubic-bezier(0.25, 1, 0.5, 1);\n}\n\n\/* L\u00e9ger effet de zoom luxueux et fluide au survol *\/\n.nk-simple-image__wrapper:hover .nk-simple-image__img {\n  transform: scale(1.02);\n}\n\n\/* Styles des l\u00e9gendes sous les images *\/\n.nk-simple-image__caption {\n  display: block;\n  font-size: 0.8rem; \n  font-style: italic;\n  margin-top: 10px;\n  text-align: right;\n  color: #000;\n  line-height: normal; \/* Annule le line-height 0 du parent pour l'affichage de texte *\/\n  padding-right: var(--section-pad-h-dt, 5vw); \/* Alignement sur la grille \u00e0 droite *\/\n}\n\n\/* Style de lien \u00e9ditorial demand\u00e9 *\/\n.nk-editorial-inline-link {\n  color: inherit;\n  text-decoration: underline;\n  text-decoration-color: currentcolor;\n  text-decoration-thickness: auto;\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: #fff0;\n  opacity: .7;\n}\n\n\/* ============================================\n  RESPONSIVE MOBILE ET TABLETTE\n============================================ *\/\n@media (max-width: 1024px) {\n  .nk-simple-image__caption {\n    padding-right: var(--section-pad-h-tab, 4vw);\n  }\n}\n\n@media (max-width: 767px) {\n  .nk-simple-image__caption {\n    padding-right: var(--section-pad-h-mob, 20px);\n  }\n}\n\n@media (max-width: 640px) {\n  .nk-simple-image__wrapper {\n    height: 70vh; \/* Hauteur ajust\u00e9e pour un cadrage vertical sur mobile *\/\n    min-height: 400px;\n  }\n\n  .nk-simple-image__img {\n    \/* Alignement \u00e0 gauche forc\u00e9 pour conserver le mobilier et la table dans le cadre *\/\n    object-position: left center;\n  }\n}\n<\/style>\n\n\n\n<style>\n    \/* ==========================================================================\n       COMPOSANT : SAVOIR FAIRE ATELIERS (Texte + Slider)\n       ========================================================================== *\/\n    .nk-sf {\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        box-sizing: border-box;\n        overflow: hidden;\n    }\n\n    .nk-sf * {\n        box-sizing: border-box;\n    }\n\n    .nk-sf__container {\n        width: 100%;\n    }\n\n    \/* --- TITRE (Limitation de largeur pour un retour \u00e0 la ligne \u00e9l\u00e9gant) --- *\/\n    .nk-sf__header {\n        max-width: 800px;\n        width: 100%;\n    }\n\n    .nk-sf__title {\n        font-size: clamp(1.4rem, 2.5vw, 35px);\n        font-weight: normal;\n        margin-top: 0;\n        margin-bottom: 35px;\n        letter-spacing: -0.01em;\n        line-height: 1.25;\n    }\n\n    \/* --- GRILLE TEXTE (Rapproch\u00e9e au pixel pr\u00e8s sur PC) --- *\/\n    .nk-sf__content {\n        display: grid;\n        grid-template-columns: repeat(2, minmax(0, 460px)); \/* Largeur maximale de chaque colonne limit\u00e9e *\/\n        gap: 40px 50px; \/* \u00c9cart horizontal resserr\u00e9 pour rapprocher les textes *\/\n        margin-bottom: 50px;\n        max-width: 980px; \/* Conteneur global resserr\u00e9 pour une harmonie parfaite *\/\n    }\n\n    .nk-sf__col {\n        width: 100%;\n    }\n\n    .nk-sf__text {\n        font-size: 0.95rem; \/* Taille classique exig\u00e9e *\/\n        line-height: 1.6; \/* Interlignage \u00e9l\u00e9gant *\/\n        margin-top: 0;\n        margin-bottom: 20px;\n    }\n\n    \/* ANIMATION DE VOTRE DIRECTION ARTISTIQUE POUR LES LIENS DU TEXTE *\/\n    .nk-sf__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    .nk-sf__inline-link:hover {\n        text-decoration-color: transparent;\n        opacity: 0.7;\n    }\n\n    .nk-sf__expand-wrapper {\n        \/* Sur PC, la deuxi\u00e8me colonne est toujours affich\u00e9e *\/\n        display: block; \n    }\n\n    \/* --- BOUTON VOIR PLUS (Masqu\u00e9 sur PC) --- *\/\n    .nk-sf__btn {\n        display: none;\n        background: transparent;\n        border: none;\n        padding: 0;\n        cursor: pointer;\n        font-family: inherit;\n        font-size: 0.95rem;\n        color: black;\n        text-decoration: underline;\n        text-decoration-color: currentColor;\n        text-underline-offset: 4px;\n        text-decoration-thickness: 1.5px;\n        transition: text-decoration-color 0.3s ease, opacity 0.3s ease;\n        font-style: italic;\n        margin-bottom: 30px;\n    }\n\n    .nk-sf__btn:hover {\n        text-decoration-color: transparent;\n        opacity: 0.6;\n    }\n\n    \/* --- SLIDER --- *\/\n    .nk-sf__slider-area {\n        position: relative;\n        width: 100%;\n    }\n\n    .nk-sf__nav-bar {\n        display: flex;\n        justify-content: flex-end;\n        align-items: center;\n        margin-bottom: 15px;\n    }\n\n    .nk-sf__arrows {\n        display: flex;\n        gap: 15px;\n    }\n\n    .nk-sf__arrows button {\n        background: none;\n        border: none;\n        color: black;\n        cursor: pointer;\n        padding: 5px;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        transition: opacity 0.3s ease;\n    }\n\n    .nk-sf__arrows button:hover { opacity: 0.6; }\n\n    .nk-sf__arrows svg {\n        width: 26px;\n        height: 26px;\n        fill: none;\n        stroke: currentColor;\n        stroke-width: 1.2;\n    }\n\n    .nk-sf__carousel-viewport {\n        overflow: hidden;\n        touch-action: pan-y;\n    }\n\n    .nk-sf__carousel-track {\n        display: flex;\n        will-change: transform;\n    }\n\n    .nk-sf__slide {\n        flex: 0 0 65%; \n        padding-right: 20px;\n    }\n\n    .nk-sf__slide img {\n        width: 100%;\n        aspect-ratio: 16 \/ 10;\n        object-fit: cover;\n        display: block;\n        background-color: rgba(0, 0, 0, 0.05);\n        opacity: 0;\n        transition: opacity 0.5s ease-in-out;\n    }\n\n    .nk-sf__slide img.norki-loaded {\n        opacity: 1;\n    }\n\n    \/* --- RESPONSIVE TABLETTE (< 1024px) --- *\/\n    @media (max-width: 1024px) {\n        .nk-sf {\n            padding: var(--section-pad-v-tab, 60px) var(--section-pad-h-tab, 4vw);\n        }\n        \n        .nk-sf__content {\n            grid-template-columns: 1fr 1fr;\n            gap: 30px 4vw;\n            max-width: 100%;\n        }\n        \n        .nk-sf__col {\n            max-width: 100%; \/* S'adapte sur tablette *\/\n        }\n        \n        .nk-sf__slide {\n            flex: 0 0 85%;\n            padding-right: 15px;\n        }\n        .nk-sf__arrows button:hover { opacity: 1; }\n    }\n\n    \/* --- RESPONSIVE MOBILE (< 768px) --- *\/\n    @media (max-width: 768px) {\n        .nk-sf {\n            padding: var(--section-pad-v-mob, 50px) var(--section-pad-h-mob, 20px);\n        }\n\n        .nk-sf__content {\n            grid-template-columns: 1fr;\n            gap: 0;\n            margin-bottom: 20px;\n        }\n\n        \/* Activation de l'accord\u00e9on \"Voir plus\" *\/\n        .nk-sf__expand-wrapper {\n            display: grid;\n            grid-template-rows: 0fr;\n            transition: grid-template-rows 0.4s ease-out;\n        }\n\n        .nk-sf__expand-wrapper.is-open {\n            grid-template-rows: 1fr;\n        }\n\n        .nk-sf__expand-content {\n            overflow: hidden;\n        }\n\n        .nk-sf__btn {\n            display: inline-block;\n        }\n\n        .nk-sf__slide {\n            flex: 0 0 100%;\n            padding-right: 10px;\n        }\n\n        .nk-sf__slide img {\n            aspect-ratio: 4 \/ 5;\n        }\n    }\n<\/style>\n\n<section class=\"nk-sf\">\n    <div class=\"nk-sf__container\">\n        \n        <!-- En-t\u00eate \/ Titre -->\n        <div class=\"nk-sf__header\">\n            <h2 class=\"nk-sf__title avenirmedium-font\">\n                Workshop Craftsmanship:<br>\n                From <span class=\"baskerville-italic-font\">Artisanal<\/span> Manufacturing to On-Site Installation\n            <\/h2>\n        <\/div>\n\n        <!-- Contenu Texte & Voir Plus -->\n        <div class=\"nk-sf__content\">\n            <!-- Colonne 1 (Toujours visible) -->\n            <div class=\"nk-sf__col\">\n                <p class=\"nk-sf__text\">\n                    Our house\u2019s expertise was showcased through a complete mastery of the creative process. Every piece of <a href=\"https:\/\/www.norki.com\/en\/25-designer-haute-couture-furniture-collection-norki\" class=\"nk-sf__inline-link\" title=\"Explore our selection of design and bold furniture\">furniture<\/a>, every wall covering, and every decorative element was rigorously designed and produced within the <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/\" class=\"nk-sf__inline-link\" title=\"Discover the excellence of Norki workshops\">Norki Workshops<\/a>.\n                <\/p>\n                <p class=\"nk-sf__text\">\n                    This bespoke artisanal production\u2014encompassing custom <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/bespoke-upholstery-services\/#headboard\" class=\"nk-sf__inline-link\" title=\"Discover our exceptional custom headboards\">headboards<\/a>, <a href=\"#banquettes\" class=\"nk-sf__inline-link\" title=\"Discover our bespoke banquettes\">banquettes<\/a>, <a href=\"#wall-coverings\" class=\"nk-sf__inline-link\" title=\"Discover our bespoke wall coverings\">wall coverings<\/a>, and <a href=\"#leather-wrapped-doors\" class=\"nk-sf__inline-link\" title=\"Discover our custom leather-wrapped doors\">leather-wrapped doors<\/a>\u2014required exceptional materials: the textured warmth of sheepskin, the ethereal refinement of Tibetan lambskin, and the graphic nobility of cowhide.\n                <\/p>\n            <\/div>\n            \n            <!-- Colonne 2 (Extensible sur Mobile, visible sur PC) -->\n            <div class=\"nk-sf__col nk-sf__expand-wrapper\" id=\"sf-expand-wrapper\">\n                <div class=\"nk-sf__expand-content\">\n                    <p class=\"nk-sf__text\">\n                        To ensure a flawless finish that meets the exacting standards of such a palace, the <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/luxury-upholstery-installation-services\/\" class=\"nk-sf__inline-link\" title=\"Discover our professional installation and mounting services\">master upholsterers<\/a> from Norki Workshops personally handled the on-site installation <a href=\"https:\/\/visitandorra.com\" class=\"nk-sf__inline-link\" target=\"_blank\" rel=\"noopener\" title=\"Visit the official Andorra website (New tab)\">in Andorra<\/a>. This end-to-end expertise has transformed every redesigned space into a contemporary cocoon, skillfully blending the traditional codes of the mountain world with a modern, sophisticated aesthetic.\n                    <\/p>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Bouton d'action (Uniquement mobile) -->\n        <button type=\"button\" class=\"nk-sf__btn\" id=\"sf-voir-plus-btn\" aria-expanded=\"false\" aria-controls=\"sf-expand-wrapper\">Show more<\/button>\n\n        <!-- Slider Section -->\n        <div class=\"nk-sf__slider-area\">\n            <div class=\"nk-sf__nav-bar\">\n                <div class=\"nk-sf__arrows\">\n                    <button class=\"nk-sf__prev\" aria-label=\"Previous slide\">\n                        <svg viewBox=\"0 0 24 24\"><path d=\"M15 18l-6-6 6-6\"><\/path><\/svg>\n                    <\/button>\n                    <button class=\"nk-sf__next\" aria-label=\"Next slide\">\n                        <svg viewBox=\"0 0 24 24\"><path d=\"M9 18l6-6-6-6\"><\/path><\/svg>\n                    <\/button>\n                <\/div>\n            <\/div>\n\n            <div class=\"nk-sf__carousel\">\n                <div class=\"nk-sf__carousel-viewport\">\n                    <div class=\"nk-sf__carousel-track\">\n                        <!-- Slide 1 -->\n                        <article class=\"nk-sf__slide\">\n                            <img decoding=\"async\" data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Cushions-and-armchairs_GrauRoig.jpg\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 3 4'%3E%3C\/svg%3E\" alt=\"Bespoke cushions and armchairs at Hotel Grau Roig\">\n                        <\/article>\n                        <!-- Slide 2 -->\n                        <article class=\"nk-sf__slide\">\n                            <img decoding=\"async\" data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Beige-cowhide-wall-covering-Hotel-Grau-Roig.jpg\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 3 4'%3E%3C\/svg%3E\" alt=\"Beige cowhide wall covering\">\n                        <\/article>\n                        <!-- Slide 3 -->\n                        <article class=\"nk-sf__slide\">\n                            <img decoding=\"async\" data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/bespoke-master-bedroom-desk-cowhide-wall.jpg\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 3 4'%3E%3C\/svg%3E\" alt=\"Bespoke master bedroom desk and cowhide wall covering\">\n                        <\/article>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n    <\/div>\n<\/section>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', () => {\n    \n    \/* =========================================================\n       1. GESTION DU BOUTON \"VOIR PLUS\" (MOBILE)\n       ========================================================= *\/\n    const btn = document.getElementById('sf-voir-plus-btn'); \n    const wrapper = document.getElementById('sf-expand-wrapper'); \n\n    if (btn && wrapper) {\n        btn.addEventListener('click', () => {\n            const isOpen = wrapper.classList.toggle('is-open');\n            btn.setAttribute('aria-expanded', isOpen);\n            btn.textContent = isOpen ? 'Show less' : 'Show more';\n        });\n    }\n\n    \/* =========================================================\n       2. GESTION DU CARROUSEUR INFINI & LAZY LOADING\n       ========================================================= *\/\n    const track = document.querySelector('.nk-sf__carousel-track');\n    const originalSlides = Array.from(document.querySelectorAll('.nk-sf__slide'));\n    const totalOriginal = originalSlides.length;\n\n    \/\/ Clonage pour l'effet de boucle infinie\n    originalSlides.forEach(slide => {\n        const clone = slide.cloneNode(true);\n        clone.classList.add('norki-clone');\n        clone.setAttribute('aria-hidden', 'true');\n        track.appendChild(clone);\n    });\n    originalSlides.slice().reverse().forEach(slide => {\n        const clone = slide.cloneNode(true);\n        clone.classList.add('norki-clone');\n        clone.setAttribute('aria-hidden', 'true');\n        track.insertBefore(clone, track.firstChild);\n    });\n\n    const getSlideWidth = () => {\n        if (window.innerWidth > 1024) return 65;\n        if (window.innerWidth > 768) return 85;\n        return 100;\n    };\n\n    let itemWidth = getSlideWidth();\n    let currentIndex = totalOriginal; \n    let isAnimating = false;\n\n    const updateCarousel = (instant = false) => {\n        track.style.transition = instant ? 'none' : 'transform 0.5s cubic-bezier(0.4, 0.0, 0.2, 1)';\n        track.style.transform = `translateX(-${currentIndex * itemWidth}%)`;\n    };\n\n    updateCarousel(true);\n\n    const moveNext = () => {\n        if (isAnimating) return;\n        isAnimating = true;\n        currentIndex++;\n        updateCarousel();\n    };\n\n    const movePrev = () => {\n        if (isAnimating) return;\n        isAnimating = true;\n        currentIndex--;\n        updateCarousel();\n    };\n\n    document.querySelector('.nk-sf__next').addEventListener('click', moveNext);\n    document.querySelector('.nk-sf__prev').addEventListener('click', movePrev);\n\n    track.addEventListener('transitionend', (e) => {\n        if (e.propertyName !== 'transform') return;\n        isAnimating = false;\n        \n        if (currentIndex <= 0) {\n            currentIndex = totalOriginal;\n            updateCarousel(true);\n        } \n        else if (currentIndex >= totalOriginal * 2) {\n            currentIndex = totalOriginal;\n            updateCarousel(true);\n        }\n    });\n\n    window.addEventListener('resize', () => {\n        const newWidth = getSlideWidth();\n        if (newWidth !== itemWidth) {\n            itemWidth = newWidth;\n            updateCarousel(true);\n        }\n    });\n\n    \/\/ --- DETECTION TOUCH\/SWIPE ---\n    let startX = 0;\n    let endX = 0;\n    const swipeThreshold = 40;\n\n    track.addEventListener('touchstart', (e) => {\n        startX = e.touches[0].clientX;\n    }, { passive: true });\n\n    track.addEventListener('touchend', (e) => {\n        endX = e.changedTouches[0].clientX;\n        const diff = startX - endX;\n        if (Math.abs(diff) > swipeThreshold) {\n            if (diff > 0) moveNext();\n            else movePrev();\n        }\n    });\n\n    \/\/ --- LAZY LOADING DES IMAGES ---\n    const imageObserver = new IntersectionObserver((entries, observer) => {\n        entries.forEach(entry => {\n            if (entry.isIntersecting) {\n                const img = entry.target;\n                if (img.dataset.src) {\n                    img.onload = () => img.classList.add('norki-loaded');\n                    img.src = img.dataset.src;\n                    img.removeAttribute('data-src');\n                    observer.unobserve(img);\n                }\n            }\n        });\n    }, { root: null, rootMargin: '0px 100% 0px 100%', threshold: 0 });\n    \n    document.querySelectorAll('.nk-sf__slide img').forEach(img => {\n        imageObserver.observe(img);\n    });\n\n});\n<\/script>\n\n\n\n<style>\n    \/* ==========================================================================\n       COMPOSANT : T\u00caTES DE LIT SUR-MESURE (nk-hb)\n       ========================================================================== *\/\n    .nk-hb {\n        padding-top: 0; \/* Alignement strict sans padding sup\u00e9rieur *\/\n        padding-bottom: var(--section-pad-v-dt, 80px);\n        padding-left: var(--section-pad-h-dt, 5vw);\n        padding-right: var(--section-pad-h-dt, 5vw);\n        background-color: var(--color-norki-beige, #f8f0ea);\n        color: black;\n        box-sizing: border-box;\n        overflow: hidden;\n    }\n\n    .nk-hb * {\n        box-sizing: border-box;\n    }\n\n    \/* --- CONTENEUR GLOBAL --- *\/\n    .nk-hb__inner {\n        margin: 0 auto;\n    }\n\n    \/* --- LIGNE SUP\u00c9RIEURE PC --- *\/\n    .nk-hb__top-row {\n        display: grid;\n        grid-template-columns: 4.5fr 6fr; \/* Ratio asym\u00e9trique de la maquette *\/\n        gap: 6vw;\n        margin-bottom: 20px;\n    }\n\n    \/* --- IMAGE STATIQUE GAUCHE --- *\/\n    .nk-hb__left {\n        width: 100%;\n    }\n\n    .nk-hb__static-img {\n        width: 100%;\n        height: 100%;\n        object-fit: cover;\n        aspect-ratio: 4 \/ 5;\n        background-color: rgba(0, 0, 0, 0.05);\n        opacity: 0;\n        transition: opacity 0.6s ease;\n        display: block;\n    }\n\n    .nk-hb__static-img.norki-loaded {\n        opacity: 1;\n    }\n\n    \/* --- BLOC TEXTE DROITE --- *\/\n    .nk-hb__right-text {\n        display: flex;\n        flex-direction: column;\n        justify-content: center; \/* Alignement vertical centr\u00e9 *\/\n    }\n\n    .nk-hb__content {\n        max-width: 520px;\n    }\n\n    .nk-hb__title {\n        font-size: clamp(1.4rem, 2.5vw, 35px);\n        font-weight: normal;\n        margin-top: 0;\n        margin-bottom: 25px;\n        letter-spacing: -0.01em;\n        line-height: 1.25;\n    }\n\n    .nk-hb__text {\n        font-size: 0.95rem; \/* Typographie du Design System *\/\n        line-height: 1.6;\n        margin-top: 0;\n        margin-bottom: 20px;\n    }\n\n    \/* ANIMATION DE VOTRE DIRECTION ARTISTIQUE POUR LES LIENS DU TEXTE *\/\n    .nk-hb__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    .nk-hb__inline-link:hover {\n        text-decoration-color: transparent;\n        opacity: 0.7;\n    }\n\n    .nk-hb__expand-wrapper {\n        display: block; \/* Visible par d\u00e9faut sur \u00e9cran d'ordinateur *\/\n    }\n\n    \/* --- BOUTON VOIR PLUS (Masqu\u00e9 sur PC) --- *\/\n    .nk-hb__btn {\n        display: none;\n        background: transparent;\n        border: none;\n        padding: 0;\n        cursor: pointer;\n        font-family: inherit;\n        font-size: 0.95rem;\n        color: black;\n        text-decoration: underline;\n        text-decoration-color: currentColor;\n        text-underline-offset: 4px;\n        text-decoration-thickness: 1.5px;\n        transition: opacity 0.3s ease, text-decoration-color 0.3s ease;\n        font-style: italic;\n    }\n\n    .nk-hb__btn:hover {\n        text-decoration-color: transparent;\n        opacity: 0.6;\n    }\n\n    \/* --- CARROUSELS --- *\/\n    .nk-hb__slider-wrapper {\n        position: relative;\n        width: 100%;\n    }\n\n    .nk-carousel-mobile {\n        display: none; \/* Masqu\u00e9 sur PC *\/\n    }\n\n    .nk-hb__nav-bar {\n        display: flex;\n        justify-content: flex-end;\n        align-items: center;\n        margin-bottom: 20px;\n    }\n\n    .nk-hb__arrows {\n        display: flex;\n        gap: 15px;\n        padding-right: 15px;\n    }\n\n    .nk-hb__arrows button {\n        background: none;\n        border: none;\n        color: black;\n        cursor: pointer;\n        padding: 5px;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        transition: opacity 0.3s ease;\n    }\n\n    .nk-hb__arrows button:hover { opacity: 0.6; }\n\n    .nk-hb__arrows svg {\n        width: 26px;\n        height: 26px;\n        fill: none;\n        stroke: currentColor;\n        stroke-width: 1.2;\n    }\n\n    .nk-hb__carousel-viewport {\n        overflow: hidden;\n        touch-action: pan-y;\n    }\n\n    .nk-hb__carousel-track {\n        display: flex;\n        will-change: transform;\n    }\n\n    .nk-hb__slide {\n        padding-right: 30px; \/* \u00c9cartement \u00e9l\u00e9gant des slides *\/\n    }\n\n    .nk-hb__slide img {\n        width: 100%;\n        aspect-ratio: 4 \/ 3;\n        object-fit: cover;\n        display: block;\n        background-color: rgba(0, 0, 0, 0.05);\n        opacity: 0;\n        transition: opacity 0.5s ease-in-out;\n    }\n\n    .nk-hb__slide img.norki-loaded {\n        opacity: 1;\n    }\n\n    \/* ============================================\n       RESPONSIVE TABLETTE (\u2264 1024px)\n       ============================================ *\/\n    @media (max-width: 1024px) {\n        .nk-hb__arrows {\n            padding-right: 0;\n        }\n        .nk-hb__arrows button:hover { opacity: 1; }\n        \n        .nk-hb {\n            padding-top: 0;\n            padding-bottom: var(--section-pad-v-tab, 60px);\n            padding-left: var(--section-pad-h-tab, 4vw);\n            padding-right: var(--section-pad-h-tab, 4vw);\n        }\n        \n        .nk-hb__top-row {\n            grid-template-columns: 1fr; \/* Passage sur une seule colonne *\/\n            gap: 30px;\n            margin-bottom: 10px;\n        }\n        \n        .nk-hb__left {\n            display: none; \/* Cache l'image statique gauche *\/\n        }\n\n        .nk-carousel-pc {\n            display: none; \/* Cache le carrousel PC *\/\n        }\n\n        .nk-carousel-mobile {\n            display: block; \/* Affiche le carrousel tactile mobile *\/\n        }\n\n        .nk-hb__content {\n            max-width: 100%;\n        }\n    }\n\n    \/* ============================================\n       RESPONSIVE MOBILE (\u2264 768px)\n       ============================================ *\/\n    @media (max-width: 768px) {\n        .nk-hb {\n            padding-top: 0;\n            padding-bottom: var(--section-pad-v-mob, 50px);\n            padding-left: var(--section-pad-h-mob, 20px);\n            padding-right: var(--section-pad-h-mob, 20px);\n        }\n\n        .nk-hb__text {\n            text-align: left;\n        }\n\n        \/* Activation de l'accord\u00e9on *\/\n        .nk-hb__expand-wrapper {\n            display: grid;\n            grid-template-rows: 0fr;\n            transition: grid-template-rows 0.4s ease-out;\n        }\n\n        .nk-hb__expand-wrapper.is-open {\n            grid-template-rows: 1fr;\n        }\n\n        .nk-hb__expand-content {\n            overflow: hidden;\n        }\n\n        .nk-hb__btn {\n            display: inline-block;\n            margin-top: 10px;\n            margin-bottom: 10px;\n        }\n\n        .nk-hb__slide {\n            padding-right: 15px;\n        }\n    }\n<\/style>\n\n<section class=\"nk-hb\">\n    <div class=\"nk-hb__inner\">\n        \n        <!-- LIGNE SUP\u00c9RIEURE (Image Gauche + Texte Droite sur PC) -->\n        <div class=\"nk-hb__top-row\">\n            \n            <!-- Image statique gauche -->\n            <div class=\"nk-hb__left\">\n                <img decoding=\"async\" data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/banquette-daybed-coussins-texte-de-lit-sur-mesure.jpg\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 3 4'%3E%3C\/svg%3E\" alt=\"Bespoke daybed with custom cushions and headboard\" class=\"nk-hb__static-img norki-lazy\">\n            <\/div>\n\n            <!-- Bloc texte de droite -->\n            <div class=\"nk-hb__right-text\">\n                <div class=\"nk-hb__content\">\n                    <h2 class=\"nk-hb__title avenirmedium-font\">\n                        Bespoke Headboards:<br>\n                        <span class=\"baskerville-italic-font\">Norki's Couture Vision of Alpine Luxury<\/span>\n                    <\/h2>\n                    \n                    <p class=\"nk-hb__text\">\n                        For the guest rooms of Hotel Grau Roig, Norki conceived a collection of <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/bespoke-upholstery-services\/#headboard\" class=\"nk-hb__inline-link\" title=\"Discover our exceptional custom headboards\">bespoke headboards<\/a> embodying the Maison\u2019s distinctive approach to contemporary luxury. Designed as architectural statement pieces, each creation shapes the atmosphere of the room with elegance, depth and an intimate sense of comfort inspired by the world\u2019s most refined <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/hotel-projects\/\" class=\"nk-hb__inline-link\" title=\"Discover our prestigious mountain hotel portfolio\">mountain retreats<\/a>.\n                    <\/p>\n                    \n                    <!-- Accord\u00e9on mobile -->\n                    <div class=\"nk-hb__expand-wrapper\" id=\"hb-expand-wrapper\">\n                        <div class=\"nk-hb__expand-content\">\n                            <p class=\"nk-hb__text\">\n                                <a href=\"https:\/\/www.norki.com\/en\/content\/44-request-a-sample-rug-plaid-cushion-seating-norki\" class=\"nk-hb__inline-link\" title=\"Request our noble material samples\">Crafted from exceptional materials<\/a> selected with the utmost care, these headboards reveal the remarkable <a href=\"https:\/\/norki.com\/en\/custom-made-upholstery\/\" class=\"nk-hb__inline-link\" title=\"Discover the craftsmanship of our ateliers\">expertise of Norki\u2019s artisans<\/a>. Sculptural volumes, saddle-style finishes, harmonious proportions and finely executed detailing create interiors that feel both sophisticated and warmly immersive.\n                            <\/p>\n                        <\/div>\n                    <\/div>\n                    \n                    <button type=\"button\" class=\"nk-hb__btn\" id=\"hb-voir-plus-btn\" aria-expanded=\"false\" aria-controls=\"hb-expand-wrapper\">Show more<\/button>\n                <\/div>\n            <\/div>\n            \n        <\/div>\n\n        <!-- LIGNE INF\u00c9RIEURE : SLIDERS -->\n\n        <!-- Slider PC (2 Images en pleine largeur) -->\n        <div class=\"nk-hb__slider-wrapper nk-carousel-pc\" id=\"hb-slider-pc\">\n            <div class=\"nk-hb__nav-bar\">\n                <div class=\"nk-hb__arrows\">\n                    <button class=\"nk-hb__prev\" aria-label=\"Previous slide\">\n                        <svg viewBox=\"0 0 24 24\"><path d=\"M15 18l-6-6 6-6\"><\/path><\/svg>\n                    <\/button>\n                    <button class=\"nk-hb__next\" aria-label=\"Next slide\">\n                        <svg viewBox=\"0 0 24 24\"><path d=\"M9 18l6-6-6-6\"><\/path><\/svg>\n                    <\/button>\n                <\/div>\n            <\/div>\n            <div class=\"nk-hb__carousel-viewport\">\n                <div class=\"nk-hb__carousel-track\">\n                    <!-- Image 2 de la collection -->\n                    <article class=\"nk-hb__slide\">\n                        <img data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/hide-sheepskin-headboard-for-decoration-hotels.jpg\" alt=\"Sheepskin headboard with backlit wooden slats\" class=\"norki-lazy\">\n                    <\/article>\n                    <!-- Image 3 de la collection -->\n                    <article class=\"nk-hb__slide\">\n                        <img data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/tete-de-lit-mouton-gris-naturel-coussins-assortis.jpg\" alt=\"Natural grey sheepskin headboard with matching cushions\" class=\"norki-lazy\">\n                    <\/article>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Slider Mobile\/Tablette (3 Images) -->\n        <div class=\"nk-hb__slider-wrapper nk-carousel-mobile\" id=\"hb-slider-mobile\">\n            <div class=\"nk-hb__nav-bar\">\n                <div class=\"nk-hb__arrows\">\n                    <button class=\"nk-hb__prev\" aria-label=\"Previous slide\">\n                        <svg viewBox=\"0 0 24 24\"><path d=\"M15 18l-6-6 6-6\"><\/path><\/svg>\n                    <\/button>\n                    <button class=\"nk-hb__next\" aria-label=\"Next slide\">\n                        <svg viewBox=\"0 0 24 24\"><path d=\"M9 18l6-6-6-6\"><\/path><\/svg>\n                    <\/button>\n                <\/div>\n            <\/div>\n            <div class=\"nk-hb__carousel-viewport\">\n                <div class=\"nk-hb__carousel-track\">\n                    <!-- Image 1 de la collection (Daybed) -->\n                    <article class=\"nk-hb__slide\">\n                        <img data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/banquette-daybed-coussins-texte-de-lit-sur-mesure.jpg\" alt=\"Bespoke daybed with custom cushions and headboard\" class=\"norki-lazy\">\n                    <\/article>\n                    <!-- Image 2 de la collection (R\u00e9tro\u00e9clair\u00e9e) -->\n                    <article class=\"nk-hb__slide\">\n                        <img data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/hide-sheepskin-headboard-for-decoration-hotels.jpg\" alt=\"Sheepskin headboard with backlit wooden slats\" class=\"norki-lazy\">\n                    <\/article>\n                    <!-- Image 3 de la collection (Mouton gris naturel) -->\n                    <article class=\"nk-hb__slide\">\n                        <img data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/tete-de-lit-mouton-gris-naturel-coussins-assortis.jpg\" alt=\"Natural grey sheepskin headboard with matching cushions\" class=\"norki-lazy\">\n                    <\/article>\n                <\/div>\n            <\/div>\n        <\/div>\n\n    <\/div>\n<\/section>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', () => {\n    \n    \/* =========================================================\n       1. GESTION DU BOUTON \"VOIR PLUS\" (MOBILE)\n       ========================================================= *\/\n    const btn = document.getElementById('hb-voir-plus-btn'); \n    const wrapper = document.getElementById('hb-expand-wrapper'); \n\n    if (btn && wrapper) {\n        btn.addEventListener('click', () => {\n            const isOpen = wrapper.classList.toggle('is-open');\n            btn.setAttribute('aria-expanded', isOpen);\n            btn.textContent = isOpen ? 'Show less' : 'Show more';\n        });\n    }\n\n    \/* =========================================================\n       2. LOGIQUE DU CARROUSEL INFINI\n       ========================================================= *\/\n    const initSlider = (containerId, getSlidesPerViewFn) => {\n        const container = document.getElementById(containerId);\n        if (!container) return;\n\n        const track = container.querySelector('.nk-hb__carousel-track');\n        const originalSlides = Array.from(container.querySelectorAll('.nk-hb__slide'));\n        const totalOriginal = originalSlides.length;\n\n        \/\/ Clonage\n        originalSlides.forEach(slide => {\n            const clone = slide.cloneNode(true);\n            clone.classList.add('norki-clone');\n            clone.setAttribute('aria-hidden', 'true');\n            track.appendChild(clone);\n        });\n        originalSlides.slice().reverse().forEach(slide => {\n            const clone = slide.cloneNode(true);\n            clone.classList.add('norki-clone');\n            clone.setAttribute('aria-hidden', 'true');\n            track.insertBefore(clone, track.firstChild);\n        });\n\n        const allSlides = Array.from(container.querySelectorAll('.nk-hb__slide'));\n\n        let itemsPerView = getSlidesPerViewFn();\n        let itemWidthPct = 100 \/ itemsPerView;\n        allSlides.forEach(s => s.style.flex = `0 0 ${itemWidthPct}%`);\n        \n        let currentIndex = totalOriginal; \n        let isAnimating = false;\n\n        const updateCarousel = (instant = false) => {\n            track.style.transition = instant ? 'none' : 'transform 0.5s cubic-bezier(0.4, 0.0, 0.2, 1)';\n            track.style.transform = `translateX(-${currentIndex * itemWidthPct}%)`;\n        };\n\n        updateCarousel(true);\n\n        const moveNext = () => {\n            if (isAnimating) return;\n            isAnimating = true;\n            currentIndex++;\n            updateCarousel();\n        };\n\n        const movePrev = () => {\n            if (isAnimating) return;\n            isAnimating = true;\n            currentIndex--;\n            updateCarousel();\n        };\n\n        container.querySelector('.nk-hb__next').addEventListener('click', moveNext);\n        container.querySelector('.nk-hb__prev').addEventListener('click', movePrev);\n\n        track.addEventListener('transitionend', (e) => {\n            if (e.propertyName !== 'transform') return;\n            isAnimating = false;\n            \n            if (currentIndex <= 0) {\n                currentIndex = totalOriginal;\n                updateCarousel(true);\n            } \n            else if (currentIndex >= totalOriginal * 2) {\n                currentIndex = totalOriginal;\n                updateCarousel(true);\n            }\n        });\n\n        \/\/ Resize\n        window.addEventListener('resize', () => {\n            const newItemsPerView = getSlidesPerViewFn();\n            if (newItemsPerView !== itemsPerView) {\n                itemsPerView = newItemsPerView;\n                itemWidthPct = 100 \/ itemsPerView;\n                allSlides.forEach(s => s.style.flex = `0 0 ${itemWidthPct}%`);\n                updateCarousel(true);\n            }\n        });\n\n        \/\/ Swipe Tactile\n        let startX = 0, endX = 0;\n        const swipeThreshold = 40;\n\n        track.addEventListener('touchstart', (e) => startX = e.touches[0].clientX, { passive: true });\n        track.addEventListener('touchend', (e) => {\n            endX = e.changedTouches[0].clientX;\n            const diff = startX - endX;\n            if (Math.abs(diff) > swipeThreshold) {\n                if (diff > 0) moveNext();\n                else movePrev();\n            }\n        });\n    };\n\n    \/\/ Initialisation\n    initSlider('hb-slider-pc', () => 2);\n    initSlider('hb-slider-mobile', () => window.innerWidth > 768 ? 2 : 1);\n\n    \/* =========================================================\n       3. LAZY LOADING UNIVERSEL DES IMAGES\n       ========================================================= *\/\n    const imageObserver = new IntersectionObserver((entries, observer) => {\n        entries.forEach(entry => {\n            if (entry.isIntersecting) {\n                const img = entry.target;\n                if (img.dataset.src) {\n                    img.onload = () => img.classList.add('norki-loaded');\n                    img.src = img.dataset.src;\n                    img.removeAttribute('data-src');\n                    observer.unobserve(img);\n                }\n            }\n        });\n    }, { root: null, rootMargin: '0px 100% 0px 100%', threshold: 0 });\n    \n    document.querySelectorAll('.norki-lazy').forEach(img => {\n        imageObserver.observe(img);\n    });\n\n});\n<\/script>\n\n\n\n<section class=\"nk-sig\">\n    <div class=\"nk-sig__container\">\n        \n        <!-- Header \/ Text -->\n        <div class=\"nk-sig__header\">\n            <h2 class=\"nk-sig__title avenirmedium-font\">\n                Norki, A Signature Vision<br>\n                for <span class=\"baskerville-italic-font\">Alpine Interiors<\/span>\n            <\/h2>\n            <p class=\"nk-sig__text\">\n                This ambitious project in the heart of the Andorran mountains perfectly illustrates Norki\u2019s ability to curate <a href=\"https:\/\/norki.com\/en\/studio-chalet\/\" class=\"nk-sig__inline-link\">immersive and cohesive decorative worlds<\/a>. <a href=\"https:\/\/www.norki.com\/en\/16-designer-seating-collection-norki\" class=\"nk-sig__inline-link\">Ottomans<\/a> crafted in cowhide for the ski room, bespoke banquettes for the restaurants, suede leather or fur wall coverings for the lobby, and <a href=\"https:\/\/www.norki.com\/en\/30-original-luxury-bespoke-designer-cushions\" class=\"nk-sig__inline-link\">cushions<\/a> crafted in shearling or sheepskin: every element expresses a singular aesthetic vision, combining creativity, precision, and a haute couture spirit, extending the property\u2019s decorative language down to the finest detail.\n            <\/p>\n        <\/div>\n\n        <!-- Carousel Section -->\n        <div class=\"nk-sig__slider-area\" id=\"sig-slider\">\n            \n            <!-- Navigation (Hidden on desktop since all 3 slides are visible) -->\n            <div class=\"nk-sig__nav-bar\">\n                <div class=\"nk-sig__arrows\">\n                    <button class=\"nk-sig__prev\" aria-label=\"Previous slide\">\n                        <svg viewBox=\"0 0 24 24\"><path d=\"M15 18l-6-6 6-6\"><\/path><\/svg>\n                    <\/button>\n                    <button class=\"nk-sig__next\" aria-label=\"Next slide\">\n                        <svg viewBox=\"0 0 24 24\"><path d=\"M9 18l6-6-6-6\"><\/path><\/svg>\n                    <\/button>\n                <\/div>\n            <\/div>\n\n            <div class=\"nk-sig__carousel-viewport\">\n                <div class=\"nk-sig__carousel-track\">\n                    \n                    <!-- Slide 1 (Left) -->\n                    <article class=\"nk-sig__slide nk-sig__slide--1\">\n                        <a href=\"https:\/\/www.norki.com\/en\/30-original-luxury-bespoke-designer-cushions\" class=\"nk-sig__image-link\" aria-label=\"Discover fur cushions\">\n                            <img decoding=\"async\" data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/decoration-suite-hotel-montagne-esprit-chalet.jpg\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 3 4'%3E%3C\/svg%3E\" alt=\"Fur cushions\" class=\"norki-lazy\">\n                        <\/a>\n                        <div class=\"nk-sig__caption avenirmedium-font\">\n                            <span>Fur cushions<\/span>\n                            <a href=\"https:\/\/www.norki.com\/en\/30-original-luxury-bespoke-designer-cushions\">Shop<\/a>\n                        <\/div>\n                    <\/article>\n\n                    <!-- Slide 2 (Center) -->\n                    <article class=\"nk-sig__slide nk-sig__slide--2\">\n                        <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/contact-us\/\" class=\"nk-sig__image-link\" aria-label=\"Contact us for custom-made ottomans\">\n                            <img decoding=\"async\" data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/petits-poufs-peau-de-vache-tricolore-bois-hotel.jpg\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 3 4'%3E%3C\/svg%3E\" alt=\"Bespoke ottomans\" class=\"norki-lazy\">\n                        <\/a>\n                        <div class=\"nk-sig__caption avenirmedium-font\">\n                            <span>Bespoke ottomans<\/span>\n                            <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/contact-us\/\">Contact<\/a>\n                        <\/div>\n                    <\/article>\n\n                    <!-- Slide 3 (Right) -->\n                    <article class=\"nk-sig__slide nk-sig__slide--3\">\n                        <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/contact-us\/\" class=\"nk-sig__image-link\" aria-label=\"Contact us for custom-made cushions\">\n                            <img decoding=\"async\" data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/bespoke-fur-hide-cushions-for-hotels.jpg\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 3 4'%3E%3C\/svg%3E\" alt=\"Bespoke cushions\" class=\"norki-lazy\">\n                        <\/a>\n                        <div class=\"nk-sig__caption avenirmedium-font\">\n                            <span>Bespoke cushions<\/span>\n                            <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/contact-us\/\">Contact<\/a>\n                        <\/div>\n                    <\/article>\n\n                <\/div>\n            <\/div>\n        <\/div>\n\n    <\/div>\n<\/section>\n\n<style>\n\/* ============================================\n   COMPOSANT : SIGNATURE GLOBALE (Styles Principaux)\n============================================ *\/\n.nk-sig {\n    padding-top: 0;\n    padding-bottom: var(--section-pad-v-dt, 80px);\n    padding-left: var(--section-pad-h-dt, 5vw);\n    padding-right: var(--section-pad-h-dt, 5vw);\n    background-color: var(--color-norki-beige, #f8f0ea);\n    color: #000000;\n    box-sizing: border-box;\n    overflow: hidden;\n}\n\n.nk-sig * {\n    box-sizing: border-box;\n}\n\n.nk-sig__container {\n    margin: 0 auto;\n    width: 100%;\n}\n\n\/* --- EN-T\u00caTE \/ TEXTE --- *\/\n.nk-sig__header {\n    max-width: 580px;\n    margin-bottom: 60px;\n}\n\n.nk-sig__title {\n    font-size: clamp(1.4rem, 2.5vw, 35px);\n    font-weight: normal;\n    margin-top: 0;\n    margin-bottom: 25px;\n    letter-spacing: -0.01em;\n    line-height: 1.25;\n}\n\n.nk-sig__text {\n    font-size: 0.95rem;\n    line-height: 1.6;\n    margin: 0;\n    text-align: justify;\n}\n\n\/* --- DESIGN SYSTEM : LIENS INLINE --- *\/\n.nk-sig__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.nk-sig__inline-link:hover {\n    text-decoration-color: transparent;\n    opacity: 0.7;\n}\n\n\/* --- CARROUSEL --- *\/\n.nk-sig__slider-area {\n    position: relative;\n    width: 100%;\n}\n\n.nk-sig__nav-bar {\n    display: flex;\n    justify-content: flex-end;\n    align-items: center;\n    margin-bottom: 15px;\n}\n\n.nk-sig__arrows {\n    display: flex;\n    gap: 15px;\n    margin-right: -12px;\n}\n\n.nk-sig__arrows button {\n    background: none;\n    border: none;\n    color: #000000;\n    cursor: pointer;\n    padding: 5px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    transition: opacity 0.3s ease;\n}\n\n.nk-sig__arrows button:hover { opacity: 0.6; }\n\n.nk-sig__arrows svg {\n    width: 26px;\n    height: 26px;\n    fill: none;\n    stroke: currentColor;\n    stroke-width: 1.2;\n}\n\n.nk-sig__carousel-viewport {\n    overflow: hidden;\n    touch-action: pan-y;\n    margin: 0 -15px;\n}\n\n.nk-sig__carousel-track {\n    display: flex;\n    will-change: transform;\n}\n\n.nk-sig__slide {\n    padding: 0 15px;\n    display: flex;\n    flex-direction: column;\n}\n\n\/* --- DESIGN SYSTEM : CONTENEUR D'IMAGE AVEC RECOUVREMENT --- *\/\n.nk-sig__image-link {\n    display: block;\n    width: 100%;\n    aspect-ratio: 3 \/ 4;\n    overflow: hidden;\n    position: relative;\n    border-radius: 4px; \/* Coins \u00e9l\u00e9gamment arrondis *\/\n    background-color: rgba(0, 0, 0, 0.05);\n}\n\n\/* --- DESIGN SYSTEM : ANIMATION D'IMAGE --- *\/\n.nk-sig__slide img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    display: block;\n    opacity: 0;\n    \/* Int\u00e9gration LoadFade & HoverZoom *\/\n    transition: opacity 0.5s ease-in-out, transform 0.6s ease;\n    will-change: opacity, transform;\n}\n\n\/* LoadFade TriggerClass *\/\n.nk-sig__slide img.norki-loaded {\n    opacity: 1;\n}\n\n\/* HoverZoom *\/\n.nk-sig__image-link:hover img {\n    transform: scale(1.03);\n}\n\n\/* --- CADRAGES ET ALIGNEMENTS INDIVIDUELS --- *\/\n.nk-sig__slide--1 img { object-position: 60% center; }\n.nk-sig__slide--2 img { object-position: 30% center; }\n.nk-sig__slide--3 img { object-position: 5% center; }\n\n\/* --- CAPTIONS SOUS LES IMAGES --- *\/\n.nk-sig__caption {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding-top: 15px;\n    padding-left: 23px;\n    padding-right: 23px;\n    font-size: 0.85rem;\n    color: #000000;\n}\n\n.nk-sig__caption span {\n    font-weight: 500;\n    letter-spacing: 0.02em;\n}\n\n.nk-sig__caption a {\n    color: #000000;\n    text-decoration: underline;\n    text-underline-offset: 4px;\n    text-decoration-thickness: 1.5px;\n    transition: opacity 0.3s ease;\n}\n\n.nk-sig__caption a:hover {\n    opacity: 0.6;\n}\n\n\/* ============================================\n   RESPONSIVE TABLETTE (\u2264 1024px)\n============================================ *\/\n@media (max-width: 1024px) {\n    .nk-sig__arrows button:hover { opacity: 1; }\n    .nk-sig {\n        padding-bottom: var(--section-pad-v-tab, 60px);\n        padding-left: var(--section-pad-h-tab, 4vw);\n        padding-right: var(--section-pad-h-tab, 4vw);\n    }\n    \n    .nk-sig__header {\n        margin-bottom: 40px;\n    }\n\n    .nk-sig__caption {\n        padding-left: 20px;\n        padding-right: 20px;\n    }\n}\n\n\/* ============================================\n   RESPONSIVE MOBILE (\u2264 768px)\n============================================ *\/\n@media (max-width: 768px) {\n    .nk-sig {\n        padding-bottom: var(--section-pad-v-mob, 50px);\n        padding-left: var(--section-pad-h-mob, 20px);\n        padding-right: var(--section-pad-h-mob, 20px);\n    }\n\n    .nk-sig__text {\n        text-align: left;\n    }\n    \n    .nk-sig__carousel-viewport {\n        margin: 0 -5px;\n    }\n\n    .nk-sig__slide {\n        padding: 0 5px;\n    }\n\n    .nk-sig__image-link {\n        aspect-ratio: 4 \/ 5;\n    }\n\n    .nk-sig__caption {\n        padding: 15px 20px;\n    }\n}\n<\/style>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', () => {\n\n    \/* =========================================================\n       GESTION DU CARROUSEL (Adaptatif 3 \/ 2 \/ 1)\n       ========================================================= *\/\n    const container = document.getElementById('sig-slider');\n    if (!container) return;\n\n    const track = container.querySelector('.nk-sig__carousel-track');\n    const originalSlides = Array.from(container.querySelectorAll('.nk-sig__slide'));\n    const totalOriginal = originalSlides.length;\n    const navBar = container.querySelector('.nk-sig__nav-bar');\n\n    \/\/ Clonage pour l'effet de boucle infinie\n    originalSlides.forEach(slide => {\n        const clone = slide.cloneNode(true);\n        clone.classList.add('norki-clone');\n        clone.setAttribute('aria-hidden', 'true');\n        track.appendChild(clone);\n    });\n    originalSlides.slice().reverse().forEach(slide => {\n        const clone = slide.cloneNode(true);\n        clone.classList.add('norki-clone');\n        clone.setAttribute('aria-hidden', 'true');\n        track.insertBefore(clone, track.firstChild);\n    });\n\n    const allSlides = Array.from(container.querySelectorAll('.nk-sig__slide'));\n\n    const getSlidesPerView = () => {\n        if (window.innerWidth > 1024) return 3; \/\/ PC\n        if (window.innerWidth > 768) return 2;  \/\/ Tablette\n        return 1;                               \/\/ Mobile\n    };\n\n    let itemsPerView = getSlidesPerView();\n    let itemWidthPct = 100 \/ itemsPerView;\n    allSlides.forEach(s => s.style.flex = `0 0 ${itemWidthPct}%`);\n    \n    let currentIndex = totalOriginal; \n    let isAnimating = false;\n\n    \/\/ Masque\/Affiche la navigation si toutes les slides sont visibles\n    const updateNavVisibility = () => {\n        if (itemsPerView >= totalOriginal) {\n            navBar.style.display = 'none'; \n        } else {\n            navBar.style.display = 'flex';\n        }\n    };\n\n    const updateCarousel = (instant = false) => {\n        updateNavVisibility();\n        \n        if (itemsPerView >= totalOriginal) {\n            currentIndex = totalOriginal; \n            track.style.transition = 'none';\n            track.style.transform = `translateX(-${currentIndex * itemWidthPct}%)`;\n            return;\n        }\n\n        track.style.transition = instant ? 'none' : 'transform 0.5s cubic-bezier(0.4, 0.0, 0.2, 1)';\n        track.style.transform = `translateX(-${currentIndex * itemWidthPct}%)`;\n    };\n\n    updateCarousel(true);\n\n    const moveNext = () => {\n        if (isAnimating || itemsPerView >= totalOriginal) return;\n        isAnimating = true;\n        currentIndex++;\n        updateCarousel();\n    };\n\n    const movePrev = () => {\n        if (isAnimating || itemsPerView >= totalOriginal) return;\n        isAnimating = true;\n        currentIndex--;\n        updateCarousel();\n    };\n\n    container.querySelector('.nk-sig__next').addEventListener('click', moveNext);\n    container.querySelector('.nk-sig__prev').addEventListener('click', movePrev);\n\n    track.addEventListener('transitionend', (e) => {\n        if (e.propertyName !== 'transform') return;\n        isAnimating = false;\n        \n        if (currentIndex <= 0) {\n            currentIndex = totalOriginal;\n            updateCarousel(true);\n        } \n        else if (currentIndex >= totalOriginal * 2) {\n            currentIndex = totalOriginal;\n            updateCarousel(true);\n        }\n    });\n\n    \/\/ Gestion Resize\n    window.addEventListener('resize', () => {\n        const newItemsPerView = getSlidesPerView();\n        if (newItemsPerView !== itemsPerView) {\n            itemsPerView = newItemsPerView;\n            itemWidthPct = 100 \/ itemsPerView;\n            allSlides.forEach(s => s.style.flex = `0 0 ${itemWidthPct}%`);\n            updateCarousel(true);\n        }\n    });\n\n    \/\/ Gestion Swipe Tactile\n    let startX = 0, endX = 0;\n    const swipeThreshold = 40;\n\n    track.addEventListener('touchstart', (e) => {\n        if (itemsPerView >= totalOriginal) return; \n        startX = e.touches[0].clientX;\n    }, { passive: true });\n    \n    track.addEventListener('touchend', (e) => {\n        if (itemsPerView >= totalOriginal) return;\n        endX = e.changedTouches[0].clientX;\n        const diff = startX - endX;\n        if (Math.abs(diff) > swipeThreshold) {\n            if (diff > 0) moveNext();\n            else movePrev();\n        }\n    });\n\n    \/* =========================================================\n       LAZY LOADING DES IMAGES\n       ========================================================= *\/\n    const imageObserver = new IntersectionObserver((entries, observer) => {\n        entries.forEach(entry => {\n            if (entry.isIntersecting) {\n                const img = entry.target;\n                if (img.dataset.src) {\n                    img.onload = () => img.classList.add('norki-loaded');\n                    img.src = img.dataset.src;\n                    img.removeAttribute('data-src');\n                    observer.unobserve(img);\n                }\n            }\n        });\n    }, { root: null, rootMargin: '0px 100% 0px 100%', threshold: 0 });\n    \n    document.querySelectorAll('.norki-lazy').forEach(img => {\n        imageObserver.observe(img);\n    });\n\n});\n<\/script>\n\n\n\n<section class=\"nk-map\">\n    <div class=\"nk-map__inner\">\n        \n        <!-- World map (Hidden on mobile) -->\n        <div class=\"nk-map__world\">\n            <a href=\"https:\/\/www.hotelgrauroig.com\" class=\"nk-map__world-link\" aria-label=\"View the Andorra mountain palace project on the world map\" target=\"_blank\" rel=\"noopener\">\n                <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Carte-du-monde-Andorre.png\" alt=\"World map locating Andorra\" class=\"nk-map__world-img\" loading=\"lazy\">\n            <\/a>\n        <\/div>\n\n        <!-- Detailed zoom (Circle) -->\n        <div class=\"nk-map__detail\">\n            <span class=\"nk-map__title avenirmedium-font\">\n                Mountain Palace Project in <span class=\"baskerville-italic-font\">Andorra<\/span>\n            <\/span>\n            <div class=\"nk-map__circle\">\n                <a href=\"https:\/\/www.hotelgrauroig.com\" class=\"nk-map__circle-link\" aria-label=\"Zoom on the exceptional mountain palace project in Andorra\" target=\"_blank\" rel=\"noopener\">\n                    <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Projet-Chalet-Principaute-Andorre-Point-v2.png\" alt=\"Zoom on the Andorra map\" class=\"nk-map__circle-img\" loading=\"lazy\">\n                <\/a>\n            <\/div>\n        <\/div>\n\n    <\/div>\n<\/section>\n\n<style>\n\/* ============================================\n   COMPOSANT : CARTE DE LOCALISATION\n============================================ *\/\n.nk-map {\n    padding-top: 0;\n    padding-bottom: var(--section-pad-v-dt, 80px);\n    padding-left: var(--section-pad-h-dt, 5vw);\n    padding-right: var(--section-pad-h-dt, 5vw);\n    background-color: var(--color-norki-beige, #f8f0ea);\n    color: #000000;\n    box-sizing: border-box;\n}\n\n.nk-map * {\n    box-sizing: border-box;\n}\n\n.nk-map__inner {\n    margin: 0 auto;\n    display: grid;\n    grid-template-columns: 2fr 1fr; \/* PC Ratio: the world map takes more space *\/\n    gap: 20px;\n    align-items: center;\n}\n\n\/* --- WORLD MAP (Left) --- *\/\n.nk-map__world {\n    width: 100%;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n}\n\n\/* Link wrapping the world map *\/\n.nk-map__world-link {\n    display: block;\n    width: 100%;\n    cursor: pointer;\n    overflow: hidden;\n}\n\n.nk-map__world-img {\n    width: 100%;\n    height: auto;\n    display: block;\n    object-fit: contain;\n    \/* Smooth and continuous hover micro-interaction transition *\/\n    transition: transform 0.6s ease, opacity 0.6s ease;\n}\n\n\/* Subtle animation on world map hover *\/\n.nk-map__world-link:hover .nk-map__world-img {\n    transform: scale(1.01);\n    opacity: 0.92;\n}\n\n\/* --- DETAILED ZOOM (Right) --- *\/\n.nk-map__detail {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    width: 100%;\n}\n\n.nk-map__title {\n    font-size: clamp(1.5rem, 2.2vw, 28px);\n    font-weight: normal;\n    margin-top: 0;\n    margin-bottom: 25px;\n    letter-spacing: 0.02em;\n    text-align: center;\n    color: #000000;\n}\n\n.nk-map__circle {\n    width: 100%;\n    max-width: 420px; \/* Limits the circle size on large desktop screens *\/\n    aspect-ratio: 1 \/ 1;\n    border-radius: 50%;\n    overflow: hidden; \/* Perfect clipping *\/\n    border: 1px solid rgba(0, 0, 0, 0.8); \/* Thin dark border *\/\n    background-color: var(--color-norki-beige, #f8f0ea);\n    display: flex;\n    justify-content: center;\n    align-items: center;\n}\n\n\/* Link wrapping the circle *\/\n.nk-map__circle-link {\n    display: block;\n    width: 100%;\n    height: 100%;\n    cursor: pointer;\n    overflow: hidden;\n    border-radius: 50%; \/* Forces focus and clickable area to remain circular *\/\n}\n\n.nk-map__circle-img {\n    width: 102%; \/* Slightly > 100% to avoid pixel outline gaps at borders *\/\n    height: 102%;\n    object-fit: cover;\n    object-position: 20% center; \/* Optimal alignment to center the Principality of Andorra *\/\n    \/* Brand guidelines HoverZoom transition *\/\n    transition: transform 0.6s ease;\n}\n\n\/* Hover animation impact on the circular zoom *\/\n.nk-map__circle-link:hover .nk-map__circle-img {\n    transform: scale(1.03); \/* Standard HoverZoom *\/\n}\n\n\/* ============================================\n   RESPONSIVE TABLET (\u2264 1024px)\n============================================ *\/\n@media (max-width: 1024px) {\n    .nk-map {\n        padding-top: 0;\n        padding-bottom: var(--section-pad-v-tab, 60px);\n        padding-left: var(--section-pad-h-tab, 4vw);\n        padding-right: var(--section-pad-h-tab, 4vw);\n    }\n    \n    .nk-map__inner {\n        gap: 15px; \/* Spacing adjusted on tablet *\/\n    }\n}\n\n\/* ============================================\n   RESPONSIVE MOBILE (\u2264 768px)\n============================================ *\/\n@media (max-width: 768px) {\n    .nk-map {\n        padding-top: 0;\n        padding-bottom: var(--section-pad-v-mob, 50px);\n        padding-left: var(--section-pad-h-mob, 20px);\n        padding-right: var(--section-pad-h-mob, 20px);\n    }\n\n    .nk-map__inner {\n        grid-template-columns: 1fr; \/* Switch to single-column layout *\/\n    }\n\n    \/* Hide the global world map on mobile *\/\n    .nk-map__world {\n        display: none;\n    }\n\n    .nk-map__detail {\n        margin: 0 auto;\n    }\n\n    .nk-map__title {\n        font-size: 1.4rem;\n        margin-bottom: 30px;\n    }\n    \n    .nk-map__circle {\n        max-width: 320px; \/* Slightly adjusted size for small screens *\/\n    }\n}\n<\/style>\n\n\n\n<section class=\"nk-sfa\">\n    <div class=\"nk-sfa__container\">\n        \n        <!-- Header: Title (Left) + Arrows (Right) -->\n        <div class=\"nk-sfa__header\">\n            <h2 class=\"nk-sfa__title avenirmedium-font\">\n                Our <span class=\"baskerville-italic-font\">associated expertise<\/span>\n            <\/h2>\n            \n            <!-- Navigation on the same line as the title -->\n            <div class=\"nk-sfa__nav-bar\">\n                <div class=\"nk-sfa__arrows\">\n                    <button class=\"nk-sfa__prev\" aria-label=\"Previous slide\">\n                        <svg viewBox=\"0 0 24 24\"><path d=\"M15 18l-6-6 6-6\"><\/path><\/svg>\n                    <\/button>\n                    <button class=\"nk-sfa__next\" aria-label=\"Next slide\">\n                        <svg viewBox=\"0 0 24 24\"><path d=\"M9 18l6-6-6-6\"><\/path><\/svg>\n                    <\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Slider Section -->\n        <div class=\"nk-sfa__slider-area\" id=\"sfa-slider\">\n            <div class=\"nk-sfa__carousel-viewport\">\n                <div class=\"nk-sfa__carousel-track\">\n                    \n                    <!-- Slide 1 -->\n                    <article class=\"nk-sfa__slide\">\n                        <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/sewing-fur-epv\/\" class=\"nk-sfa__image-link\" aria-label=\"Discover our expertise in Fur Couture\">\n                            <img decoding=\"async\" data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/savoir-faire-couture-fourrure-norki-2-e1779974256415.jpg\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 1 1'%3E%3C\/svg%3E\" alt=\"Fur Couture detail\" class=\"norki-lazy\">\n                        <\/a>\n                        <div class=\"nk-sfa__caption\">\n                            <p class=\"nk-sfa__caption-title baskerville-italic-font\">Fur Couture<\/p>\n                            <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/sewing-fur-epv\/\" class=\"nk-sfa__link\">Discover<\/a>\n                        <\/div>\n                    <\/article>\n\n                    <!-- Slide 2 -->\n                    <article class=\"nk-sfa__slide\">\n                        <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/bespoke-upholstery-services\/\" class=\"nk-sfa__image-link\" aria-label=\"Discover our expertise in Bespoke Upholstery\">\n                            <img decoding=\"async\" data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/atelier-tapisserie-ameublement-sur-mesure-norki.jpg\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 1 1'%3E%3C\/svg%3E\" alt=\"Bespoke Upholstery detail\" class=\"norki-lazy\">\n                        <\/a>\n                        <div class=\"nk-sfa__caption\">\n                            <p class=\"nk-sfa__caption-title baskerville-italic-font\">Bespoke Upholstery<\/p>\n                            <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/bespoke-upholstery-services\/\" class=\"nk-sfa__link\">Discover<\/a>\n                        <\/div>\n                    <\/article>\n\n                    <!-- Slide 3 -->\n                    <article class=\"nk-sfa__slide\">\n                        <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/bespoke-soft-furnishings-curtains\/\" class=\"nk-sfa__image-link\" aria-label=\"Discover our expertise in Soft Furnishings\">\n                            <img decoding=\"async\" data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/atelier-couture-ameublement-decoration-norki.jpg\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 1 1'%3E%3C\/svg%3E\" alt=\"Soft Furnishing detail\" class=\"norki-lazy\">\n                        <\/a>\n                        <div class=\"nk-sfa__caption\">\n                            <p class=\"nk-sfa__caption-title baskerville-italic-font\">Soft Furnishings<\/p>\n                            <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/bespoke-soft-furnishings-curtains\/\" class=\"nk-sfa__link\">Discover<\/a>\n                        <\/div>\n                    <\/article>\n\n                <\/div>\n            <\/div>\n        <\/div>\n\n    <\/div>\n<\/section>\n\n<style>\n\/* ============================================\n   COMPOSANT : SAVOIR-FAIRE ASSOCI\u00c9S\n============================================ *\/\n.nk-sfa {\n    padding-top: 0;\n    padding-bottom: var(--section-pad-v-dt, 80px);\n    padding-left: var(--section-pad-h-dt, 5vw);\n    padding-right: var(--section-pad-h-dt, 5vw);\n    background-color: var(--color-norki-beige, #f8f0ea);\n    color: #000000;\n    box-sizing: border-box;\n    overflow: hidden;\n}\n\n.nk-sfa * {\n    box-sizing: border-box;\n}\n\n.nk-sfa__container {\n    margin: 0 auto;\n    width: 100%;\n}\n\n\/* --- HEADER --- *\/\n.nk-sfa__header {\n    display: flex;\n    justify-content: space-between;\n    align-items: flex-end;\n    margin-bottom: 50px;\n    gap: 15px; \/* Prevents arrows from overlapping with titles on small viewports *\/\n}\n\n.nk-sfa__title {\n    font-size: clamp(1.4rem, 2.5vw, 35px);\n    font-weight: normal;\n    margin: 0;\n    letter-spacing: -0.01em;\n    line-height: 1.25;\n}\n\n\/* --- NAVIGATION --- *\/\n.nk-sfa__nav-bar {\n    display: flex;\n    align-items: center;\n}\n\n.nk-sfa__arrows {\n    display: flex;\n    gap: 15px;\n    margin-right: -12px; \/* Offsets button paddings *\/\n}\n\n.nk-sfa__arrows button {\n    background: none;\n    border: none;\n    color: #000000;\n    cursor: pointer;\n    padding: 5px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    transition: opacity 0.3s ease;\n}\n\n.nk-sfa__arrows button:hover { opacity: 0.6; }\n\n.nk-sfa__arrows svg {\n    width: 26px;\n    height: 26px;\n    fill: none;\n    stroke: currentColor;\n    stroke-width: 1.2;\n}\n\n\/* --- CAROUSEL --- *\/\n.nk-sfa__slider-area {\n    position: relative;\n    width: 100%;\n}\n\n.nk-sfa__carousel-viewport {\n    overflow: hidden;\n    touch-action: pan-y;\n    margin: 0 -15px; \/* Offsets slide padding *\/\n}\n\n.nk-sfa__carousel-track {\n    display: flex;\n    will-change: transform;\n}\n\n.nk-sfa__slide {\n    padding: 0 15px; \/* Space between slides *\/\n    display: flex;\n    flex-direction: column;\n}\n\n\/* --- BRAND DESIGN SYSTEM IMAGE CONTAINER --- *\/\n.nk-sfa__image-link {\n    display: block;\n    width: 100%;\n    aspect-ratio: 1 \/ 1; \/* PERFECT SQUARE REQUIRED *\/\n    overflow: hidden; \/* Necessary for HoverZoom scaling *\/\n    border-radius: 4px; \/* Premium smooth corners *\/\n    background-color: rgba(0, 0, 0, 0.05);\n    position: relative;\n}\n\n\/* SQUARE RATIO AND ANIMATIONS *\/\n.nk-sfa__slide img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    object-position: center;\n    display: block;\n    opacity: 0;\n    \/* Design System: LoadFade & HoverZoom *\/\n    transition: opacity 0.5s ease-in-out, transform 0.6s ease;\n    will-change: opacity, transform;\n}\n\n\/* LoadFade TriggerClass *\/\n.nk-sfa__slide img.norki-loaded {\n    opacity: 1;\n}\n\n\/* HoverZoom on parent hover *\/\n.nk-sfa__image-link:hover img {\n    transform: scale(1.03);\n}\n\n\/* --- CAPTIONS --- *\/\n.nk-sfa__caption {\n    text-align: center;\n    padding-top: 25px;\n}\n\n.nk-sfa__caption-title {\n    font-size: clamp(1.2rem, 1.5vw, 22px);\n    font-weight: normal;\n    margin: 0 0 6px 0 !important;\n    color: #000000;\n}\n\n.nk-sfa__link {\n    font-size: 0.95rem;\n    color: #000000;\n    text-decoration: underline;\n    text-underline-offset: 3px;\n    text-decoration-thickness: 1.5px;\n    text-decoration-color: #000000;\n    transition: opacity 0.3s ease, text-decoration-color 0.3s ease;\n    display: inline-block;\n}\n\n.nk-sfa__link:hover {\n    opacity: 0.7;\n    text-decoration-color: transparent; \/* Smooth underline exit on hover *\/\n}\n\n\/* ============================================\n   RESPONSIVE TABLET (\u2264 1024px)\n============================================ *\/\n@media (max-width: 1024px) {\n    .nk-sfa {\n        padding-top: 0;\n        padding-bottom: var(--section-pad-v-tab, 60px);\n        padding-left: var(--section-pad-h-tab, 4vw);\n        padding-right: var(--section-pad-h-tab, 4vw);\n    }\n    \n    .nk-sfa__header {\n        margin-bottom: 30px;\n    }\n\n    \/* Prevent opacity hover bugs on mobile touchpoints *\/\n    .nk-sfa__arrows button:hover,\n    .nk-sfa__arrows button:active,\n    .nk-sfa__arrows button:focus {\n        opacity: 1 !important;\n    }\n}\n\n\/* ============================================\n   RESPONSIVE MOBILE (\u2264 768px)\n============================================ *\/\n@media (max-width: 768px) {\n    .nk-sfa {\n        padding-top: 0;\n        padding-bottom: var(--section-pad-v-mob, 50px);\n        padding-left: var(--section-pad-h-mob, 20px);\n        padding-right: var(--section-pad-h-mob, 20px);\n    }\n\n    .nk-sfa__header {\n        align-items: center; \/* Centers arrows with title line *\/\n        margin-bottom: 25px;\n    }\n\n    .nk-sfa__title {\n        \/* Fluid title size for optimal layout sharing *\/\n        font-size: clamp(1.1rem, 4.5vw, 1.4rem);\n    }\n\n    .nk-sfa__arrows {\n        margin-right: -5px;\n        gap: 10px;\n    }\n\n    .nk-sfa__arrows svg {\n        width: 22px; \n        height: 22px;\n    }\n\n    .nk-sfa__carousel-viewport {\n        margin: 0 -5px; \/* Tightened layout *\/\n    }\n\n    .nk-sfa__slide {\n        padding: 0 5px;\n    }\n\n    .nk-sfa__caption {\n        padding-top: 15px;\n    }\n}\n<\/style>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', () => {\n\n    \/* =========================================================\n       SLIDER GEOMETRIC ARCHITECTURE (3 \/ 2 \/ 1 layout)\n       ========================================================= *\/\n    const container = document.getElementById('sfa-slider');\n    if (!container) return;\n\n    const section = container.closest('.nk-sfa'); \n    const track = container.querySelector('.nk-sfa__carousel-track');\n    const originalSlides = Array.from(container.querySelectorAll('.nk-sfa__slide'));\n    const totalOriginal = originalSlides.length;\n    const navBar = section.querySelector('.nk-sfa__nav-bar');\n\n    \/\/ Infinite loop clones creation\n    originalSlides.forEach(slide => {\n        const clone = slide.cloneNode(true);\n        clone.classList.add('norki-clone');\n        clone.setAttribute('aria-hidden', 'true');\n        \/\/ Disable focus on clones\n        clone.querySelectorAll('a').forEach(link => link.setAttribute('tabindex', '-1'));\n        track.appendChild(clone);\n    });\n    originalSlides.slice().reverse().forEach(slide => {\n        const clone = slide.cloneNode(true);\n        clone.classList.add('norki-clone');\n        clone.setAttribute('aria-hidden', 'true');\n        clone.querySelectorAll('a').forEach(link => link.setAttribute('tabindex', '-1'));\n        track.insertBefore(clone, track.firstChild);\n    });\n\n    const allSlides = Array.from(container.querySelectorAll('.nk-sfa__slide'));\n\n    const getSlidesPerView = () => {\n        if (window.innerWidth > 1024) return 3; \/\/ Desktop\n        if (window.innerWidth > 768) return 2;  \/\/ Tablet\n        return 1;                               \/\/ Mobile\n    };\n\n    let itemsPerView = getSlidesPerView();\n    let itemWidthPct = 100 \/ itemsPerView;\n    allSlides.forEach(s => s.style.flex = `0 0 ${itemWidthPct}%`);\n    \n    let currentIndex = totalOriginal; \n    let isAnimating = false;\n\n    const updateNavVisibility = () => {\n        if (itemsPerView >= totalOriginal) {\n            navBar.style.display = 'none';\n        } else {\n            navBar.style.display = 'flex';\n        }\n    };\n\n    const updateCarousel = (instant = false) => {\n        updateNavVisibility();\n        \n        if (itemsPerView >= totalOriginal) {\n            currentIndex = totalOriginal; \n            track.style.transition = 'none';\n            track.style.transform = `translateX(-${currentIndex * itemWidthPct}%)`;\n            return;\n        }\n\n        track.style.transition = instant ? 'none' : 'transform 0.5s cubic-bezier(0.4, 0.0, 0.2, 1)';\n        track.style.transform = `translateX(-${currentIndex * itemWidthPct}%)`;\n    };\n\n    updateCarousel(true);\n\n    const moveNext = () => {\n        if (isAnimating || itemsPerView >= totalOriginal) return;\n        isAnimating = true;\n        currentIndex++;\n        updateCarousel();\n    };\n\n    const movePrev = () => {\n        if (isAnimating || itemsPerView >= totalOriginal) return;\n        isAnimating = true;\n        currentIndex--;\n        updateCarousel();\n    };\n\n    section.querySelector('.nk-sfa__next').addEventListener('click', moveNext);\n    section.querySelector('.nk-sfa__prev').addEventListener('click', movePrev);\n\n    track.addEventListener('transitionend', (e) => {\n        if (e.propertyName !== 'transform') return;\n        isAnimating = false;\n        \n        if (currentIndex <= 0) {\n            currentIndex = totalOriginal;\n            updateCarousel(true);\n        } \n        else if (currentIndex >= totalOriginal * 2) {\n            currentIndex = totalOriginal;\n            updateCarousel(true);\n        }\n    });\n\n    \/\/ Resize updates\n    window.addEventListener('resize', () => {\n        const newItemsPerView = getSlidesPerView();\n        if (newItemsPerView !== itemsPerView) {\n            itemsPerView = newItemsPerView;\n            itemWidthPct = 100 \/ itemsPerView;\n            allSlides.forEach(s => s.style.flex = `0 0 ${itemWidthPct}%`);\n            updateCarousel(true);\n        }\n    });\n\n    \/\/ Touch Swipe gesturings\n    let startX = 0, endX = 0;\n    const swipeThreshold = 40;\n\n    track.addEventListener('touchstart', (e) => {\n        if (itemsPerView >= totalOriginal) return; \n        startX = e.touches[0].clientX;\n    }, { passive: true });\n    \n    track.addEventListener('touchend', (e) => {\n        if (itemsPerView >= totalOriginal) return;\n        endX = e.changedTouches[0].clientX;\n        const diff = startX - endX;\n        if (Math.abs(diff) > swipeThreshold) {\n            if (diff > 0) moveNext();\n            else movePrev();\n        }\n    });\n\n    \/* =========================================================\n       LAZY LOADING IMAGES (Intersection Observer)\n       ========================================================= *\/\n    const imageObserver = new IntersectionObserver((entries, observer) => {\n        entries.forEach(entry => {\n            if (entry.isIntersecting) {\n                const img = entry.target;\n                if (img.dataset.src) {\n                    img.onload = () => img.classList.add('norki-loaded');\n                    img.src = img.dataset.src;\n                    img.removeAttribute('data-src');\n                    observer.unobserve(img);\n                }\n            }\n        });\n    }, { root: null, rootMargin: '0px 100% 0px 100%', threshold: 0 });\n    \n    document.querySelectorAll('.norki-lazy').forEach(img => {\n        imageObserver.observe(img);\n    });\n\n});\n<\/script>\n\n\n\n<section class=\"nk-sel\">\n    <div class=\"nk-sel__container\">\n        \n        <!-- Header: Title (Left) + Arrows (Right) -->\n        <div class=\"nk-sel__header\">\n            <h2 class=\"nk-sel__title avenirmedium-font\">\n                Our Selection of <span class=\"baskerville-italic-font\">Objects<\/span>\n            <\/h2>\n            \n            <!-- Navigation on the same line as the title -->\n            <div class=\"nk-sel__nav-bar\">\n                <div class=\"nk-sel__arrows\">\n                    <button class=\"nk-sel__prev\" aria-label=\"Previous slide\">\n                        <svg viewBox=\"0 0 24 24\"><path d=\"M15 18l-6-6 6-6\"><\/path><\/svg>\n                    <\/button>\n                    <button class=\"nk-sel__next\" aria-label=\"Next slide\">\n                        <svg viewBox=\"0 0 24 24\"><path d=\"M9 18l6-6-6-6\"><\/path><\/svg>\n                    <\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Carousel Section -->\n        <div class=\"nk-sel__slider-area\" id=\"sel-slider\">\n            <div class=\"nk-sel__carousel-viewport\">\n                <div class=\"nk-sel__carousel-track\">\n                    \n                    <!-- Slide 1: Hommage Cushion -->\n                    <article class=\"nk-sel__slide\">\n                        <a href=\"https:\/\/www.norki.com\/en\/collections-de-coussins-intemporels-norki-decoration\/643-rectangle-cushion-genuine-leopard-fur-luxury.html\" class=\"nk-sel__image-link\" aria-label=\"Discover the Hommage Cushion\">\n                            <img decoding=\"async\" data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Coussin-Photo-II-Hommage_NORKI.jpg\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 1 1'%3E%3C\/svg%3E\" alt=\"Hommage Cushion\" class=\"norki-lazy\">\n                        <\/a>\n                        <div class=\"nk-sel__caption avenirmedium-font\">\n                            <span class=\"nk-sel__product-name\">Hommage Cushion<\/span>\n                            <a href=\"https:\/\/www.norki.com\/en\/collections-de-coussins-intemporels-norki-decoration\/643-rectangle-cushion-genuine-leopard-fur-luxury.html\" class=\"nk-sel__link\">Shop<\/a>\n                        <\/div>\n                    <\/article>\n\n                    <!-- Slide 2: Montaigne Armchair -->\n                    <article class=\"nk-sel__slide\">\n                        <a href=\"https:\/\/www.norki.com\/en\/luxury-modern-armchairs-collection-norki\/149-mottled-montaigne-armchair-norki-horsehide.html\" class=\"nk-sel__image-link\" aria-label=\"Discover the Montaigne Armchair\">\n                            <img decoding=\"async\" data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/fauteuil-intemporel-chine-club-norki.jpg\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 1 1'%3E%3C\/svg%3E\" alt=\"Montaigne Armchair\" class=\"norki-lazy\">\n                        <\/a>\n                        <div class=\"nk-sel__caption avenirmedium-font\">\n                            <span class=\"nk-sel__product-name\">Montaigne Armchair<\/span>\n                            <a href=\"https:\/\/www.norki.com\/en\/luxury-modern-armchairs-collection-norki\/149-mottled-montaigne-armchair-norki-horsehide.html\" class=\"nk-sel__link\">Shop<\/a>\n                        <\/div>\n                    <\/article>\n\n                    <!-- Slide 3: Courchevel Cushion -->\n                    <article class=\"nk-sel__slide\">\n                        <a href=\"https:\/\/www.norki.com\/en\/collections-de-coussins-intemporels-norki-decoration\/570-luxury-fur-cushion-red-fox-norki.html\" class=\"nk-sel__image-link\" aria-label=\"Discover the Courchevel Cushion\">\n                            <img decoding=\"async\" data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Coussin-luxe-fourrure-renard-norki-2.jpg\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 1 1'%3E%3C\/svg%3E\" alt=\"Courchevel Cushion\" class=\"norki-lazy\">\n                        <\/a>\n                        <div class=\"nk-sel__caption avenirmedium-font\">\n                            <span class=\"nk-sel__product-name\">Courchevel Cushion<\/span>\n                            <a href=\"https:\/\/www.norki.com\/en\/collections-de-coussins-intemporels-norki-decoration\/570-luxury-fur-cushion-red-fox-norki.html\" class=\"nk-sel__link\">Shop<\/a>\n                        <\/div>\n                    <\/article>\n\n                    <!-- Slide 4: Forest Cushion -->\n                    <article class=\"nk-sel__slide\">\n                        <a href=\"https:\/\/www.norki.com\/en\/high-end-designer-cushion\/478-forest-square-cushion-norki.html\" class=\"nk-sel__image-link\" aria-label=\"Discover the Forest Cushion\">\n                            <img decoding=\"async\" data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Coussin-Photo-Principale-Forest-Carre_NORKI-2.jpg\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 1 1'%3E%3C\/svg%3E\" alt=\"Forest Cushion\" class=\"norki-lazy\">\n                        <\/a>\n                        <div class=\"nk-sel__caption avenirmedium-font\">\n                            <span class=\"nk-sel__product-name\">Forest Cushion<\/span>\n                            <a href=\"https:\/\/www.norki.com\/en\/high-end-designer-cushion\/478-forest-square-cushion-norki.html\" class=\"nk-sel__link\">Shop<\/a>\n                        <\/div>\n                    <\/article>\n\n                    <!-- Slide 5: Sable Cushion -->\n                    <article class=\"nk-sel__slide\">\n                        <a href=\"https:\/\/www.norki.com\/en\/collections-de-coussins-intemporels-norki-decoration\/552-269-sable-fur-square-cushion-alpine-luxury-norki.html\" class=\"nk-sel__image-link\" aria-label=\"Discover the Sable Cushion\">\n                            <img decoding=\"async\" data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Coussin-Alexandra-carre-Norki.jpg\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 1 1'%3E%3C\/svg%3E\" alt=\"Sable Cushion\" class=\"norki-lazy\">\n                        <\/a>\n                        <div class=\"nk-sel__caption avenirmedium-font\">\n                            <span class=\"nk-sel__product-name\">Sable Cushion<\/span>\n                            <a href=\"https:\/\/www.norki.com\/en\/collections-de-coussins-intemporels-norki-decoration\/552-269-sable-fur-square-cushion-alpine-luxury-norki.html\" class=\"nk-sel__link\">Shop<\/a>\n                        <\/div>\n                    <\/article>\n\n                    <!-- Slide 6: Modern Armchair -->\n                    <article class=\"nk-sel__slide\">\n                        <a href=\"https:\/\/www.norki.com\/en\/luxury-modern-armchairs-collection-norki\/590-white-velvet-swivel-armchair-contemporary-design.html\" class=\"nk-sel__image-link\" aria-label=\"Discover the Modern Armchair\">\n                            <img decoding=\"async\" data-src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/white-velvet-shearling-modern-armchair.jpg\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 1 1'%3E%3C\/svg%3E\" alt=\"Modern Armchair\" class=\"norki-lazy\">\n                        <\/a>\n                        <div class=\"nk-sel__caption avenirmedium-font\">\n                            <span class=\"nk-sel__product-name\">Modern Armchair<\/span>\n                            <a href=\"https:\/\/www.norki.com\/en\/luxury-modern-armchairs-collection-norki\/590-white-velvet-swivel-armchair-contemporary-design.html\" class=\"nk-sel__link\">Shop<\/a>\n                        <\/div>\n                    <\/article>\n\n                <\/div>\n            <\/div>\n        <\/div>\n\n    <\/div>\n<\/section>\n\n<style>\n\/* ============================================\n   COMPOSANT : S\u00c9LECTION D'OBJETS\n============================================ *\/\n.nk-sel {\n    padding-top: 0;\n    padding-bottom: var(--section-pad-v-dt, 80px);\n    padding-left: var(--section-pad-h-dt, 5vw);\n    padding-right: var(--section-pad-h-dt, 5vw);\n    background-color: var(--color-norki-beige, #f8f0ea);\n    color: #000000;\n    box-sizing: border-box;\n    overflow: hidden;\n}\n\n.nk-sel * {\n    box-sizing: border-box;\n}\n\n.nk-sel__container {\n    margin: 0 auto;\n    width: 100%;\n}\n\n\/* --- HEADER --- *\/\n.nk-sel__header {\n    display: flex;\n    justify-content: space-between;\n    align-items: flex-end;\n    margin-bottom: 50px;\n    gap: 15px; \n}\n\n.nk-sel__title {\n    font-size: clamp(1.4rem, 2.5vw, 35px);\n    font-weight: normal;\n    margin: 0;\n    letter-spacing: -0.01em;\n    line-height: 1.25;\n}\n\n\/* --- NAVIGATION --- *\/\n.nk-sel__nav-bar {\n    display: flex;\n    align-items: center;\n}\n\n.nk-sel__arrows {\n    display: flex;\n    gap: 15px;\n    margin-right: -12px;\n}\n\n.nk-sel__arrows button {\n    background: none;\n    border: none;\n    color: #000000;\n    cursor: pointer;\n    padding: 5px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    transition: opacity 0.3s ease;\n}\n\n.nk-sel__arrows button:hover { opacity: 0.6; }\n\n.nk-sel__arrows svg {\n    width: 26px;\n    height: 26px;\n    fill: none;\n    stroke: currentColor;\n    stroke-width: 1.2;\n}\n\n\/* --- CAROUSEL --- *\/\n.nk-sel__slider-area {\n    position: relative;\n    width: 100%;\n}\n\n.nk-sel__carousel-viewport {\n    overflow: hidden;\n    touch-action: pan-y;\n    margin: 0 -15px;\n}\n\n.nk-sel__carousel-track {\n    display: flex;\n    will-change: transform;\n}\n\n.nk-sel__slide {\n    padding: 0 15px;\n    display: flex;\n    flex-direction: column;\n}\n\n\/* --- BRAND DESIGN SYSTEM IMAGE CONTAINER --- *\/\n.nk-sel__image-link {\n    display: block;\n    width: 100%;\n    aspect-ratio: 1 \/ 1;\n    overflow: hidden;\n    border-radius: 4px;\n    background-color: rgba(0, 0, 0, 0.04);\n    position: relative;\n}\n\n.nk-sel__slide img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    object-position: center;\n    display: block;\n    opacity: 0;\n    transition: opacity 0.5s ease-in-out, transform 0.6s ease;\n    will-change: opacity, transform;\n}\n\n.nk-sel__slide img.norki-loaded {\n    opacity: 1;\n}\n\n.nk-sel__image-link:hover img {\n    transform: scale(1.03);\n}\n\n\/* --- CAPTIONS UNDER IMAGES --- *\/\n.nk-sel__caption {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding-top: 20px;\n    padding-left: 23px;\n    padding-right: 23px;\n    font-size: 0.95rem;\n    color: #000000;\n}\n\n.nk-sel__product-name {\n    font-weight: 500;\n    letter-spacing: 0.02em;\n}\n\n.nk-sel__link {\n    color: #000000;\n    text-decoration: underline;\n    text-underline-offset: 3px;\n    text-decoration-thickness: 1.5px;\n    text-decoration-color: #000000;\n    transition: opacity 0.3s ease, text-decoration-color 0.3s ease;\n    font-weight: 500;\n}\n\n.nk-sel__link:hover {\n    opacity: 0.7;\n    text-decoration-color: transparent;\n}\n\n@media (max-width: 1024px) {\n    .nk-sel {\n        padding-top: 0;\n        padding-bottom: var(--section-pad-v-tab, 60px);\n        padding-left: var(--section-pad-h-tab, 4vw);\n        padding-right: var(--section-pad-h-tab, 4vw);\n    }\n    .nk-sel__header { margin-bottom: 30px; }\n    .nk-sel__caption { padding-left: 20px; padding-right: 20px; }\n    .nk-sel__arrows button:hover,\n    .nk-sel__arrows button:active,\n    .nk-sel__arrows button:focus { opacity: 1 !important; }\n}\n\n@media (max-width: 768px) {\n    .nk-sel {\n        padding-top: 0;\n        padding-bottom: var(--section-pad-v-mob, 50px);\n        padding-left: var(--section-pad-h-mob, 20px);\n        padding-right: var(--section-pad-h-mob, 20px);\n    }\n    .nk-sel__header { align-items: center; margin-bottom: 25px; }\n    .nk-sel__title { font-size: clamp(1.1rem, 4.5vw, 1.4rem); }\n    .nk-sel__arrows { margin-right: -5px; gap: 10px; }\n    .nk-sel__arrows svg { width: 22px; height: 22px; }\n    .nk-sel__carousel-viewport { margin: 0 -5px; }\n    .nk-sel__slide { padding: 0 5px; }\n    .nk-sel__caption { padding-top: 15px; padding-left: 20px; padding-right: 20px; }\n}\n<\/style>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', () => {\n    const container = document.getElementById('sel-slider');\n    if (!container) return;\n\n    const section = container.closest('.nk-sel'); \n    const track = container.querySelector('.nk-sel__carousel-track');\n    const originalSlides = Array.from(container.querySelectorAll('.nk-sel__slide'));\n    const totalOriginal = originalSlides.length;\n    const navBar = section.querySelector('.nk-sel__nav-bar');\n\n    originalSlides.forEach(slide => {\n        const clone = slide.cloneNode(true);\n        clone.classList.add('norki-clone');\n        clone.setAttribute('aria-hidden', 'true');\n        clone.querySelectorAll('a').forEach(link => link.setAttribute('tabindex', '-1'));\n        track.appendChild(clone);\n    });\n    originalSlides.slice().reverse().forEach(slide => {\n        const clone = slide.cloneNode(true);\n        clone.classList.add('norki-clone');\n        clone.setAttribute('aria-hidden', 'true');\n        clone.querySelectorAll('a').forEach(link => link.setAttribute('tabindex', '-1'));\n        track.insertBefore(clone, track.firstChild);\n    });\n\n    const allSlides = Array.from(container.querySelectorAll('.nk-sel__slide'));\n    const getSlidesPerView = () => {\n        if (window.innerWidth > 1024) return 3;\n        if (window.innerWidth > 768) return 2;\n        return 1;\n    };\n\n    let itemsPerView = getSlidesPerView();\n    let itemWidthPct = 100 \/ itemsPerView;\n    allSlides.forEach(s => s.style.flex = `0 0 ${itemWidthPct}%`);\n    \n    let currentIndex = totalOriginal; \n    let isAnimating = false;\n\n    const updateNavVisibility = () => {\n        if (itemsPerView >= totalOriginal && navBar) navBar.style.display = 'none';\n        else if (navBar) navBar.style.display = 'flex';\n    };\n\n    const updateCarousel = (instant = false) => {\n        updateNavVisibility();\n        if (itemsPerView >= totalOriginal) {\n            currentIndex = totalOriginal; \n            track.style.transition = 'none';\n            track.style.transform = `translateX(-${currentIndex * itemWidthPct}%)`;\n            return;\n        }\n        track.style.transition = instant ? 'none' : 'transform 0.5s cubic-bezier(0.4, 0.0, 0.2, 1)';\n        track.style.transform = `translateX(-${currentIndex * itemWidthPct}%)`;\n    };\n\n    updateCarousel(true);\n\n    const moveNext = () => {\n        if (isAnimating || itemsPerView >= totalOriginal) return;\n        isAnimating = true;\n        currentIndex++;\n        updateCarousel();\n    };\n\n    const movePrev = () => {\n        if (isAnimating || itemsPerView >= totalOriginal) return;\n        isAnimating = true;\n        currentIndex--;\n        updateCarousel();\n    };\n\n    section.querySelector('.nk-sel__next').addEventListener('click', moveNext);\n    section.querySelector('.nk-sel__prev').addEventListener('click', movePrev);\n\n    track.addEventListener('transitionend', (e) => {\n        if (e.propertyName !== 'transform') return;\n        isAnimating = false;\n        if (currentIndex <= 0 || currentIndex >= totalOriginal * 2) {\n            currentIndex = totalOriginal;\n            updateCarousel(true);\n        }\n    });\n\n    window.addEventListener('resize', () => {\n        const newItemsPerView = getSlidesPerView();\n        if (newItemsPerView !== itemsPerView) {\n            itemsPerView = newItemsPerView;\n            itemWidthPct = 100 \/ itemsPerView;\n            allSlides.forEach(s => s.style.flex = `0 0 ${itemWidthPct}%`);\n            updateCarousel(true);\n        }\n    });\n\n    let startX = 0;\n    track.addEventListener('touchstart', (e) => {\n        if (itemsPerView >= totalOriginal) return; \n        startX = e.touches[0].clientX;\n    }, { passive: true });\n    \n    track.addEventListener('touchend', (e) => {\n        if (itemsPerView >= totalOriginal) return;\n        const diff = startX - e.changedTouches[0].clientX;\n        if (Math.abs(diff) > 40) {\n            if (diff > 0) moveNext();\n            else movePrev();\n        }\n    });\n\n    const imageObserver = new IntersectionObserver((entries, observer) => {\n        entries.forEach(entry => {\n            if (entry.isIntersecting) {\n                const img = entry.target;\n                if (img.dataset.src) {\n                    img.onload = () => img.classList.add('norki-loaded');\n                    img.src = img.dataset.src;\n                    img.removeAttribute('data-src');\n                    observer.unobserve(img);\n                }\n            }\n        });\n    }, { root: null, rootMargin: '0px 100% 0px 100%', threshold: 0 });\n    \n    document.querySelectorAll('.norki-lazy').forEach(img => imageObserver.observe(img));\n});\n<\/script>\n\n\n\n<div class=\"nk-hotels-showcase\">\n    \n    <!-- Hero Image with Gradient -->\n    <section class=\"nk-hs-hero\">\n        <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/grey-white-mottled-shearling-headboard-grau-roig.jpg\" alt=\"Grau Roig Room - Headboard\" class=\"nk-hs-hero__img\">\n        <div class=\"nk-hs-hero__fade\"><\/div>\n    <\/section>\n\n    <!-- ==========================================\n         HTML BLOCK - SEMANTICS & INDEXABILITY\n         ========================================== -->\n    <section id=\"wp-custom-projects-slider\" class=\"wp-custom-projects-slider-container\" aria-label=\"Our projects\">\n        \n        <!-- Info Block -->\n        <div class=\"projects-info\">\n            <h2 class=\"avenirmedium-font\">Explore all our <br><span class=\"baskerville-italic-font\">Hotel Projects<\/span><\/h2>\n            <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/hotel-projects\/\" class=\"link-voir-tout\">See all<\/a>\n        <\/div>\n\n        <!-- Slider Area -->\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 : Palace Les Neiges (Courchevel) - COMING SOON -->\n            <article class=\"slide is-coming-soon\">\n                <div class=\"slide-img-wrapper\">\n                    <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/interior-design-hotel-room-palace-les-neiges-courchevel-2.jpg\" alt=\"Palace Les Neiges, Courchevel\">\n                <\/div>\n                <div class=\"slide-content\">\n                    <div class=\"slide-content-text\">\n                        <span class=\"slide-city\">Courchevel, France<\/span>\n                        <h3>Palace Les Neiges<\/h3>\n                        <p>Custom fur headboards, furniture and cushions<\/p>\n                    <\/div>\n                    <a href=\"#\" class=\"link-voir\">View<\/a>\n                <\/div>\n            <\/article>\n\n            <!-- Slide 2 : Le Cheval Blanc (Courchevel - Active by default) - COMING SOON -->\n            <article class=\"slide active is-coming-soon\">\n                <div class=\"slide-img-wrapper\">\n                    <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Cowhide-wall-covering_Cheval-Blanc-Courchevel_Norki-2-scaled.jpg\" alt=\"Le Cheval Blanc, Courchevel\">\n                <\/div>\n                <div class=\"slide-content\">\n                    <div class=\"slide-content-text\">\n                        <span class=\"slide-city\">Courchevel, France<\/span>\n                        <h3>Le Cheval Blanc<\/h3>\n                        <p>Graphic cowhide wall covering<\/p>\n                    <\/div>\n                    <a href=\"#\" class=\"link-voir\">View<\/a>\n                <\/div>\n            <\/article>\n\n            <!-- Slide 3 : Grand H\u00f4tel Rougemont (Rougemont) - COMING SOON -->\n            <article class=\"slide is-coming-soon\">\n                <div class=\"slide-img-wrapper\">\n                    <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/tapis-peau-de-vache-chambre-hotel-rougemont-v2-1536x1272.png\" alt=\"Grand H\u00f4tel Rougemont\">\n                <\/div>\n                <div class=\"slide-content\">\n                    <div class=\"slide-content-text\">\n                        <span class=\"slide-city\">Rougemont, Switzerland<\/span>\n                        <h3>Grand H\u00f4tel Rougemont<\/h3>\n                        <p>Cowhide rugs and custom decoration<\/p>\n                    <\/div>\n                    <a href=\"#\" class=\"link-voir\">View<\/a>\n                <\/div>\n            <\/article>\n\n            <!-- Slide 4 : H\u00f4tel Le C\u0153ur de Meg\u00e8ve (Meg\u00e8ve) - COMING SOON -->\n            <article class=\"slide is-coming-soon\">\n                <div class=\"slide-img-wrapper\">\n                    <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Coeur-de-Megeve-II.jpg\" alt=\"Le C\u0153ur de Meg\u00e8ve Hotel\">\n                <\/div>\n                <div class=\"slide-content\">\n                    <div class=\"slide-content-text\">\n                        <span class=\"slide-city\">Meg\u00e8ve, France<\/span>\n                        <h3>Le C\u0153ur de Meg\u00e8ve Hotel<\/h3>\n                        <p>Character furniture, throws and decoration<\/p>\n                    <\/div>\n                    <a href=\"#\" class=\"link-voir\">View<\/a>\n                <\/div>\n            <\/article>\n\n            <!-- Slide 5 : H\u00f4tel Les Barmes de l'Ours (Val d'Is\u00e8re) - ACTIVE & AVAILABLE -->\n            <article class=\"slide\">\n                <div class=\"slide-img-wrapper\">\n                    <img decoding=\"async\" src=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/restaurant-salle-a-manger_Hotel-les-barmes-de-l-ours-2-scaled.jpg\" alt=\"Les Barmes de l'Ours Hotel, Val d'Is\u00e8re\">\n                <\/div>\n                <div class=\"slide-content\">\n                    <div class=\"slide-content-text\">\n                        <span class=\"slide-city\">Val d'Is\u00e8re, France<\/span>\n                        <h3>Les Barmes de l'Ours Hotel<\/h3>\n                        <p>Armchairs, benches and restaurant coverings<\/p>\n                    <\/div>\n                    <a href=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/hotel-projects\/les-barmes-de-l-ours-val-d-isere\/\" class=\"link-voir\">View<\/a>\n                <\/div>\n            <\/article>\n        <\/div>\n    <\/section>\n\n<\/div>\n\n<!-- ==========================================\n     CSS BLOCK - STYLES\n     ========================================== -->\n<style>\n    \/* ==========================================\n       HERO TOP IMAGE\n       ========================================== *\/\n    .nk-hotels-showcase {\n        width: 100%;\n        background-color: var(--color-norki-brown, #50423d);\n    }\n\n    .nk-hs-hero {\n        position: relative;\n        width: 100%;\n        height: 75vh;\n        background-color: #000;\n    }\n\n    .nk-hs-hero__img {\n        width: 100%;\n        height: 100%;\n        object-fit: cover;\n        object-position: center 90%;\n        display: block;\n    }\n\n    .nk-hs-hero__fade {\n        position: absolute;\n        bottom: 0;\n        left: 0;\n        width: 100%;\n        height: 45%;\n        background: linear-gradient(to bottom, rgba(80, 66, 61, 0) 0%, var(--color-norki-brown, #50423d) 100%);\n        z-index: 2;\n        pointer-events: none;\n    }\n\n    \/* ==========================================\n       VARIABLES CSS\n       ========================================== *\/\n    .wp-custom-projects-slider-container {\n        --bg-section: var(--color-norki-brown, #50423d);\n        --text-light: #ffffff;\n        --text-muted: #d3ccc7;\n        --text-dark: var(--color-norki-beige, #f8f0ea);\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    .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    .wp-custom-projects-slider-container .projects-info {\n        position: absolute;\n        top: 130px;\n        left: 50px;\n        width: 360px;\n        z-index: 10;\n    }\n\n    .wp-custom-projects-slider-container .projects-info h2 {\n        font-size: 35px;\n        font-weight: normal;\n        margin-bottom: 20px;\n        color: var(--text-dark);\n        line-height: 1.15;\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 .link-voir-tout {\n        font-size: 0.95rem;\n        color: var(--text-light);\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    \/* --- NAVIGATION ARROWS --- *\/\n    .wp-custom-projects-slider-container .nav-arrow {\n        position: absolute;\n        top: 33%;\n        transform: translateY(-50%);\n        background: transparent;\n        border: none;\n        cursor: pointer;\n        z-index: 15;\n        transition: opacity 0.2s ease, transform 0.2s 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        filter: brightness(0) invert(1);\n    }\n\n    .wp-custom-projects-slider-container .left-arrow img {\n        transform: scaleX(-1);\n    }\n\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    .wp-custom-projects-slider-container .nav-arrow:active {\n        opacity: 0.4 !important;\n        transform: translateY(-50%) scale(0.9) !important;\n        transition: none !important;\n    }\n\n    .wp-custom-projects-slider-container .left-arrow { left: 30px; }\n    .wp-custom-projects-slider-container .right-arrow { right: 30px; }\n\n    \/* Slider Area *\/\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    .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    \/* NEW CONTAINER TO SAFELY CONTAIN IMAGE ZOOM WITHOUT CLIP-CUTTING THE TOOLTIP *\/\n    .wp-custom-projects-slider-container .slide-img-wrapper {\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n        overflow: hidden;\n        border-radius: var(--radius-img);\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        transition: transform 0.5s ease;\n    }\n\n    \/* --- COMING SOON & HOVER CLASSES --- *\/\n    .wp-custom-projects-slider-container .slide.active:not(.is-coming-soon):hover img {\n        transform: scale(1.03);\n    }\n\n    .wp-custom-projects-slider-container .slide.is-coming-soon,\n    .wp-custom-projects-slider-container .slide.active.is-coming-soon {\n        cursor: not-allowed !important;\n    }\n\n    .wp-custom-projects-slider-container .slide.is-coming-soon img {\n        opacity: 0.7;\n    }\n\n    \/* English Tooltip *\/\n    .wp-custom-projects-slider-container .slide.active.is-coming-soon:hover::before {\n        content: \"Page under construction\";\n        position: absolute;\n        bottom: -40px;\n        left: 50%;\n        transform: translateX(-50%);\n        background: #1f2937;\n        color: #fff;\n        padding: 6px 12px;\n        font-size: 0.75rem;\n        border-radius: 6px;\n        white-space: nowrap;\n        pointer-events: none;\n        z-index: 50;\n        box-shadow: 0 4px 6px -1px rgb(0 0 0 \/ 0.1);\n    }\n\n    .wp-custom-projects-slider-container .slide.is-coming-soon .link-voir {\n        display: none;\n    }\n\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%; \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    .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    .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    .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    \/* Slider states (PC > 1700px) *\/\n    .wp-custom-projects-slider-container .slide.prev {\n        opacity: 1;\n        visibility: visible;\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        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        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 .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: none;\n            transition: opacity 0.2s ease, transform 0.2s ease;\n        }\n\n        @media (hover: hover) {\n            .wp-custom-projects-slider-container .nav-arrow:hover { \n                transform: scale(1.1); \n                opacity: 1;\n            }\n        }\n\n        .wp-custom-projects-slider-container .nav-arrow:active {\n            opacity: 0.4 !important;\n            transform: scale(0.9) !important;\n            transition: none !important;\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-info h2 { font-size: 1.4rem; }\n        .wp-custom-projects-slider-container .projects-slider { height: 75vw; }\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        .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        .wp-custom-projects-slider-container .nav-arrow { bottom: calc(min(65vw * (1140 \/ 1272), 60vh) + 15px); }\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     JAVASCRIPT BLOCK - BEHAVIOR\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","protected":false},"excerpt":{"rendered":"<p>Mountain Palace in the Pyrenees Mountain Palace in Andorra Andorra 2026 Bespoke furniture, wall panels &amp; cushions An Exclusive Refuge Where Snowy Peaks and Architectural Excellence Meet In the heart of the Principality of Andorra, where the rugged peaks dictate a timeless and powerful stone architecture, stands the Grau Roig Boutique Hotel. A true high-altitude [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":4281,"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-4308","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Luxury Interior Design at 5* Grau Roig, Andorre | Norki workshop<\/title>\n<meta name=\"description\" content=\"From to installation, Norki elevates the Grau Roig 5-star hotel in Andorra, a luxury alpine retreat at the foot of the ski slopes.\" \/>\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\/hotel-projects\/grau-roig-andorre\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Luxury Interior Design at 5* Grau Roig, Andorre | Norki workshop\" \/>\n<meta property=\"og:description\" content=\"From to installation, Norki elevates the Grau Roig 5-star hotel in Andorra, a luxury alpine retreat at the foot of the ski slopes.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/hotel-projects\/grau-roig-andorre\/\" \/>\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-07-17T12:24:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Decoration-Hotel-Montagne-Andorre.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=\"10 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\\\/hotel-projects\\\/grau-roig-andorre\\\/\",\"url\":\"https:\\\/\\\/www.norki.com\\\/en\\\/custom-made-upholstery\\\/interior-design-projects-bespoke-craftsmanship\\\/hotel-projects\\\/grau-roig-andorre\\\/\",\"name\":\"Luxury Interior Design at 5* Grau Roig, Andorre | Norki workshop\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.norki.com\\\/sur-mesure\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.norki.com\\\/en\\\/custom-made-upholstery\\\/interior-design-projects-bespoke-craftsmanship\\\/hotel-projects\\\/grau-roig-andorre\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.norki.com\\\/en\\\/custom-made-upholstery\\\/interior-design-projects-bespoke-craftsmanship\\\/hotel-projects\\\/grau-roig-andorre\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/norki.com\\\/sur-mesure\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/Decoration-Hotel-Montagne-Andorre.jpg\",\"datePublished\":\"2026-06-08T12:09:32+00:00\",\"dateModified\":\"2026-07-17T12:24:09+00:00\",\"description\":\"From to installation, Norki elevates the Grau Roig 5-star hotel in Andorra, a luxury alpine retreat at the foot of the ski slopes.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.norki.com\\\/en\\\/custom-made-upholstery\\\/interior-design-projects-bespoke-craftsmanship\\\/hotel-projects\\\/grau-roig-andorre\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.norki.com\\\/en\\\/custom-made-upholstery\\\/interior-design-projects-bespoke-craftsmanship\\\/hotel-projects\\\/grau-roig-andorre\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.norki.com\\\/en\\\/custom-made-upholstery\\\/interior-design-projects-bespoke-craftsmanship\\\/hotel-projects\\\/grau-roig-andorre\\\/#primaryimage\",\"url\":\"https:\\\/\\\/norki.com\\\/sur-mesure\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/Decoration-Hotel-Montagne-Andorre.jpg\",\"contentUrl\":\"https:\\\/\\\/norki.com\\\/sur-mesure\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/Decoration-Hotel-Montagne-Andorre.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.norki.com\\\/en\\\/custom-made-upholstery\\\/interior-design-projects-bespoke-craftsmanship\\\/hotel-projects\\\/grau-roig-andorre\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.norki.com\\\/fr\\\/sur-mesure\\\/\"},{\"@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\":\"Hotels\",\"item\":\"https:\\\/\\\/www.norki.com\\\/en\\\/custom-made-upholstery\\\/interior-design-projects-bespoke-craftsmanship\\\/hotel-projects\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Grau Roig\"}]},{\"@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":"Luxury Interior Design at 5* Grau Roig, Andorre | Norki workshop","description":"From to installation, Norki elevates the Grau Roig 5-star hotel in Andorra, a luxury alpine retreat at the foot of the ski slopes.","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\/hotel-projects\/grau-roig-andorre\/","og_locale":"fr_FR","og_type":"article","og_title":"Luxury Interior Design at 5* Grau Roig, Andorre | Norki workshop","og_description":"From to installation, Norki elevates the Grau Roig 5-star hotel in Andorra, a luxury alpine retreat at the foot of the ski slopes.","og_url":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/hotel-projects\/grau-roig-andorre\/","og_site_name":"Norki","article_publisher":"https:\/\/facebook.com\/NorkiDecoration","article_modified_time":"2026-07-17T12:24:09+00:00","og_image":[{"url":"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Decoration-Hotel-Montagne-Andorre.jpg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/hotel-projects\/grau-roig-andorre\/","url":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/hotel-projects\/grau-roig-andorre\/","name":"Luxury Interior Design at 5* Grau Roig, Andorre | Norki workshop","isPartOf":{"@id":"https:\/\/www.norki.com\/sur-mesure\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/hotel-projects\/grau-roig-andorre\/#primaryimage"},"image":{"@id":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/hotel-projects\/grau-roig-andorre\/#primaryimage"},"thumbnailUrl":"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Decoration-Hotel-Montagne-Andorre.jpg","datePublished":"2026-06-08T12:09:32+00:00","dateModified":"2026-07-17T12:24:09+00:00","description":"From to installation, Norki elevates the Grau Roig 5-star hotel in Andorra, a luxury alpine retreat at the foot of the ski slopes.","breadcrumb":{"@id":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/hotel-projects\/grau-roig-andorre\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/hotel-projects\/grau-roig-andorre\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/hotel-projects\/grau-roig-andorre\/#primaryimage","url":"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Decoration-Hotel-Montagne-Andorre.jpg","contentUrl":"https:\/\/norki.com\/sur-mesure\/wp-content\/uploads\/2026\/05\/Decoration-Hotel-Montagne-Andorre.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/hotel-projects\/grau-roig-andorre\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.norki.com\/fr\/sur-mesure\/"},{"@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":"Hotels","item":"https:\/\/www.norki.com\/en\/custom-made-upholstery\/interior-design-projects-bespoke-craftsmanship\/hotel-projects\/"},{"@type":"ListItem","position":4,"name":"Grau Roig"}]},{"@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":"Mountain Palace in the Pyrenees Mountain Palace in Andorra Andorra 2026 Bespoke furniture, wall panels &amp; cushions An Exclusive Refuge Where Snowy Peaks and Architectural Excellence Meet In the heart of the Principality of Andorra, where the rugged peaks dictate a timeless and powerful stone architecture, stands the Grau Roig Boutique Hotel. A true high-altitude\u2026","_links":{"self":[{"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/pages\/4308","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=4308"}],"version-history":[{"count":9,"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/pages\/4308\/revisions"}],"predecessor-version":[{"id":5036,"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/pages\/4308\/revisions\/5036"}],"up":[{"embeddable":true,"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/pages\/4281"}],"wp:attachment":[{"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/media?parent=4308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/categories?post=4308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.norki.com\/sur-mesure\/wp-json\/wp\/v2\/tags?post=4308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}