{"id":87,"date":"2026-06-17T16:22:51","date_gmt":"2026-06-17T16:22:51","guid":{"rendered":"https:\/\/cabinet-jacquet-meermans.fr\/?page_id=87"},"modified":"2026-08-25T12:17:37","modified_gmt":"2026-08-25T12:17:37","slug":"realisations-construction-chalet-chamonix-mont-blanc","status":"publish","type":"page","link":"https:\/\/cabinet-jacquet-meermans.fr\/en\/chalet-construction-chamonix-mont-blanc\/","title":{"rendered":"Chalet in Chamonix"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"87\" class=\"elementor elementor-87\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-3b5790b elementor-section-stretched elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3b5790b\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-224c49a9\" data-id=\"224c49a9\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-74ba7315 elementor-widget elementor-widget-html\" data-id=\"74ba7315\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preload\" as=\"image\" href=\"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/terrasse-vue-panoramique-aiguilles-mont-blanc-chalet-chamonix-mont-blanc.jpg\" fetchpriority=\"high\">\n\n<script>\nwindow.CJM_REA_HERO_CONFIG = {\n  image_url:   \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/terrasse-vue-panoramique-aiguilles-mont-blanc-chalet-chamonix-mont-blanc.jpg\",\n  sous_titre:  \"CONSTRUCTION NEUVE\",\n  titre:       \"Chalet contemporain\",\n  description: \"Une r\u00e9interpr\u00e9tation contemporaine de la ferme traditionnelle, ancr\u00e9e dans le paysage chamoniard.\"\n};\n<\/script>\n\n<section class=\"cjm-rh\" id=\"cjm-rh\">\n  <div class=\"cjm-rh__bg\" id=\"cjm-rh-bg\"><\/div>\n  <div class=\"cjm-rh__overlay\"><\/div>\n  <div class=\"cjm-rh__content\">\n    <p  class=\"cjm-rh__sub\"   id=\"cjm-rh-sub\"><\/p>\n    <h1 class=\"cjm-rh__title\" id=\"cjm-rh-title\"><\/h1>\n    <p  class=\"cjm-rh__desc\"  id=\"cjm-rh-desc\"><\/p>\n  <\/div>\n  <div class=\"cjm-rh__arrow\" id=\"cjm-rh-arrow\" style=\"cursor:pointer;\" aria-label=\"D\u00e9filer vers le bas\">\n    <svg width=\"26\" height=\"14\" viewBox=\"0 0 26 14\" fill=\"none\">\n      <path d=\"M1 1L13 13L25 1\" stroke=\"#1a1a1a\" stroke-width=\"1.4\" stroke-linecap=\"round\"\/>\n    <\/svg>\n  <\/div>\n<\/section>\n\n<style>\nbody { overflow-x: hidden !important; }\n.cjm-rh, .cjm-rh * { box-sizing: border-box; margin: 0; padding: 0; }\n\n.cjm-rh {\n  position: relative;\n  width: 100vw;\n  left: 50%;\n  margin-left: -50vw;\n  height: 100vh;\n  overflow: hidden;\n  font-family: 'Nimbus Sans', system-ui, sans-serif;\n  -webkit-font-smoothing: antialiased;\n}\n\n.cjm-rh__bg {\n  position: absolute;\n  top: 0; left: 0; right: 0;\n  height: 90vh;\n  background-size: cover;\n  background-position: center;\n  background-repeat: no-repeat;\n  z-index: 0;\n}\n\n.cjm-rh__overlay {\n  position: absolute;\n  top: 0; left: 0; right: 0;\n  height: 90vh;\n  background: rgba(0, 0, 0, 0.43);\n  z-index: 1;\n}\n\n.cjm-rh__content {\n  position: absolute;\n  top: 40%;\n  left: 15%;\n  transform: translateY(-50%);\n  z-index: 2;\n  padding: 0;\n  display: flex;\n  flex-direction: column;\n  gap: 14px;\n}\n\n.cjm-rh__sub {\n  font-family: 'Nimbus Sans', system-ui, sans-serif !important;\n  font-size: 13.5px !important;\n  font-weight: 500 !important;\n  letter-spacing: 0.28em !important;\n  text-transform: uppercase !important;\n  color: #c19f75 !important;\n}\n\n.cjm-rh__title {\n  font-family: 'Cormorant Garamond', Georgia, serif !important;\n  font-size: clamp(38px, 5vw, 76px) !important;\n  font-weight: 400 !important;\n  font-style: normal !important;\n  line-height: 1.1 !important;\n  color: #ffffff !important;\n  letter-spacing: 0 !important;\n  white-space: nowrap;\n}\n\n.cjm-rh__desc {\n  font-family: 'Nimbus Sans', system-ui, sans-serif !important;\n  font-size: clamp(13px, 1vw, 15px) !important;\n  line-height: 1.65 !important;\n  color: rgba(255,255,255,0.82) !important;\n  max-width: 480px;\n}\n\n.cjm-rh__arrow {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  height: 10vh;\n  background: #ffffff;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  z-index: 3;\n}\n.cjm-rh__arrow svg {\n  animation: cjm-rh-bounce 2s ease-in-out infinite;\n}\n@keyframes cjm-rh-bounce {\n  0%, 100% { transform: translateY(0); }\n  50%       { transform: translateY(6px); }\n}\n\n@media (max-width: 768px) {\n  .cjm-rh { height: 100svh; }\n  .cjm-rh__bg { height: 87svh !important; }\n  .cjm-rh__overlay { height: 87svh !important; }\n  .cjm-rh__arrow { height: 13svh !important; }\n  .cjm-rh__content {\n    bottom: 18vh;\n    left: 50% !important;\n    transform: translateX(-50%) translateY(0) !important;\n    width: 100%;\n    padding: 0 28px;\n    gap: 10px;\n    align-items: center;\n    text-align: center;\n  }\n  .cjm-rh__title {\n    font-size: clamp(36px, 9vw, 52px) !important;\n    white-space: normal;\n    text-align: center !important;\n  }\n  .cjm-rh__sub { text-align: center !important; }\n  .cjm-rh__desc { max-width: 100%; text-align: center !important; }\n  .cjm-rh__arrow { height: 12vw; }\n}\n<\/style>\n\n<script>\n(function () {\n  function init() {\n    var cfg = window.CJM_REA_HERO_CONFIG || {};\n    var bg = document.getElementById('cjm-rh-bg');\n    if (bg && cfg.image_url) bg.style.backgroundImage = \"url('\" + cfg.image_url + \"')\";\n    var sub = document.getElementById('cjm-rh-sub');\n    if (sub && cfg.sous_titre) sub.textContent = cfg.sous_titre;\n    var title = document.getElementById('cjm-rh-title');\n    if (title && cfg.titre) title.textContent = cfg.titre;\n    var desc = document.getElementById('cjm-rh-desc');\n    if (desc && cfg.description) desc.textContent = cfg.description;\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);\n  else init();\n  window.addEventListener('load', function () {\n    setTimeout(init, 50);\n    var arr = document.getElementById('cjm-rh-arrow');\n    if (arr) arr.addEventListener('click', function() {\n      var section = document.getElementById('cjm-rh');\n      if (section) {\n        var bottom = section.getBoundingClientRect().bottom + window.pageYOffset;\n        window.scrollTo({ top: bottom, behavior: 'smooth' });\n      }\n    });\n  });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5d386df6 elementor-section-stretched elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"5d386df6\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4d95c42e\" data-id=\"4d95c42e\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2ed31395 elementor-widget elementor-widget-html\" data-id=\"2ed31395\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- =====================================================================\n     NOTRE BOOK \u00b7 Cabinet Jacquet & Meermans\n     ---------------------------------------------------------------------\n     >>> IMAGES \u00c0 \u00c9DITER ICI <<<\n     Remplace uniquement les URLs entre guillemets.\n===================================================================== -->\n<script>\nwindow.CJM_REA2_CONFIG = {\n  img_main:  \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/Image_croquis_ferme_Chamonix.jpg\",  \/* image principale *\/\n  link_url:  \"#\"   \/* lien *\/\n};\n<\/script>\n\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:wght@300;400;500&display=swap');\n@import url('https:\/\/fonts.cdnfonts.com\/css\/nimbus-sans');\n\n.cjm-rea2 { background: #ffffff; position: relative; }\n.cjm-rea2__inner {\n  max-width: 1600px; margin: 0 auto; padding: 0 80px 0 60px;\n  display: grid; grid-template-columns: 1fr 1fr;\n  gap: 80px; align-items: start;\n}\n\n\/* \u2500\u2500 GAUCHE : texte dans le flux normal, pas de sticky \u2500\u2500 *\/\n.cjm-rea2__left {\n  padding: 14vh 0 4vh;\n}\n.cjm-rea2__eyebrow {\n  font-family: 'Nimbus Sans','Mulish',system-ui,sans-serif !important;\n  font-size: 11px !important; font-weight: 400 !important;\n  letter-spacing: 0.2em !important; text-transform: uppercase !important;\n  color: #1a1a1a !important; margin: 0 0 28px !important; display: block;\n}\n.cjm-rea2__title {\n  font-family: 'Cormorant Garamond',Georgia,serif !important;\n  font-size: clamp(42px,4.5vw,72px) !important;\n  font-weight: 300 !important; line-height: 1.05 !important;\n  color: #998872 !important; margin: 0 0 28px !important;\n  text-transform: none !important; letter-spacing: -0.01em !important;\n}\n.cjm-rea2__divider {\n  display: block; width: 40px; height: 1px;\n  background: #998872; margin-bottom: 24px;\n}\n.cjm-rea2__desc {\n  font-family: 'Nimbus Sans','Mulish',system-ui,sans-serif !important;\n  font-size: 15px !important; line-height: 1.75 !important;\n  color: #4a4a4a !important; max-width: 100%; margin: 0 0 28px !important;\n}\n.cjm-rea2__link {\n  display: inline-flex; align-items: center; gap: 10px;\n  font-family: 'Nimbus Sans','Mulish',system-ui,sans-serif !important;\n  font-size: 13px !important; font-weight: 600 !important;\n  letter-spacing: 0.05em !important;\n  color: #1a1a1a !important;\n  text-decoration: none !important;\n  padding-bottom: 10px;\n  position: relative; overflow: hidden;\n  transition: gap .3s;\n}\n.cjm-rea2__link::before,\n.cjm-rea2__link::after {\n  content: '';\n  position: absolute; left: 0; bottom: 0;\n  width: 100%; height: 1px;\n  background: #1a1a1a;\n  transition: transform 0.5s cubic-bezier(0.76, 0, 0.24, 1);\n}\n.cjm-rea2__link::before { transform: scaleX(1); transform-origin: left; }\n.cjm-rea2__link::after  { transform: scaleX(0); transform-origin: right; }\n.cjm-rea2__link:hover::before { transform: scaleX(0); }\n.cjm-rea2__link:hover::after  { transform: scaleX(1); transition-delay: 0.25s; }\n.cjm-rea2__link:hover { gap: 16px; }\n.cjm-rea2__link svg { width: 16px; height: 16px; flex-shrink: 0; }\n\n\/* \u2500\u2500 DROITE : deux images c\u00f4te \u00e0 c\u00f4te avec parallax \u2500\u2500 *\/\n.cjm-rea2__right {\n  display: flex; flex-direction: row;\n  align-items: flex-start; gap: 16px;\n  padding: 8vh 0 4vh;\n}\n.cjm-rea2__img-main {\n  width: 95%; flex-shrink: 0; overflow: hidden; line-height: 0;\n}\n.cjm-rea2__img-main-inner {\n  width: 100%; aspect-ratio: 5 \/ 4;\n  background-size: cover; background-position: center;\n  background-repeat: no-repeat; will-change: transform;\n  \/* image appliqu\u00e9e via CJM_REA2_CONFIG ci-dessus *\/\n}\n\n\n@media (max-width: 900px) {\n  .cjm-rea2__inner { grid-template-columns: 1fr; gap: 0; padding: 0 22px; }\n  .cjm-rea2__left  { padding: 56px 0 36px; }\n  \/* Droite : images en colonne verticale *\/\n  .cjm-rea2__right {\n    flex-direction: column !important;\n    padding: 0 0 56px;\n    gap: 24px;\n  }\n  \/* Image principale : bord \u00e0 bord *\/\n  .cjm-rea2__img-main {\n    width: 100% !important;\n    margin-left: -22px !important;\n    margin-right: -22px !important;\n    width: calc(100% + 44px) !important;\n  }\n  .cjm-rea2__img-main-inner {\n    transform: none !important;\n    aspect-ratio: 1 \/ 1 !important;\n  }\n\n  .cjm-rea2__desc { max-width: 100%; }\n}\n<\/style>\n\n<section class=\"cjm-rea2\" id=\"cjm-rea2\">\n  <div class=\"cjm-rea2__inner\">\n\n    <div class=\"cjm-rea2__left\">\n      <span class=\"cjm-rea2__eyebrow\">PROJET SUR MESURE<\/span>\n      <h2 class=\"cjm-rea2__title\">Chalet \u00e0 Chamonix<\/h2>\n      <span class=\"cjm-rea2__divider\" aria-hidden=\"true\"><\/span>\n      <p class=\"cjm-rea2__desc\">Implant\u00e9 au c\u0153ur de la vall\u00e9e de Chamonix, ce chalet neuf associe les codes de l\u2019architecture de montagne \u00e0 une \u00e9criture plus contemporaine. Le bois, l\u2019enduit clair, les larges d\u00e9bords de toiture et les balcons prolongent l\u2019esprit du chalet traditionnel, tandis que les grandes ouvertures apportent lumi\u00e8re et vues sur le paysage.<\/p>\n      <p class=\"cjm-rea2__desc\">Le cabinet a accompagn\u00e9 le projet d\u00e8s l\u2019obtention du permis de construire, jusqu\u2019\u00e0 la r\u00e9ception des travaux. Chiffrage, choix techniques, coordination des entreprises et suivi de chantier ont \u00e9t\u00e9 assur\u00e9s avec une attention constante port\u00e9e \u00e0 la qualit\u00e9 d\u2019ex\u00e9cution et \u00e0 la ma\u00eetrise du projet.<\/p>\n\n    <\/div>\n\n    <div class=\"cjm-rea2__right\" data-cjm-rea2-parallax>\n      <div class=\"cjm-rea2__img-main\">\n        <div class=\"cjm-rea2__img-main-inner\"\n             role=\"img\" aria-label=\"Chalet avec vue sur le Mont-Blanc\"><\/div>\n      <\/div>\n    <\/div>\n\n  <\/div>\n<\/section>\n\n<script>\n(function () {\n  \/* M\u00eame m\u00e9canisme exact que le cabinet : parallax sur la colonne droite enti\u00e8re *\/\n  function attach(block) {\n    if (block.dataset.nbInit === '1') return;\n    block.dataset.nbInit = '1';\n\n    \/* Appliquer les images depuis la config *\/\n    var cfg = window.CJM_REA2_CONFIG || {};\n    if (cfg.img_main) {\n      var im = block.querySelector('.cjm-rea2__img-main-inner');\n      if (im) im.style.backgroundImage = \"url('\" + cfg.img_main + \"')\";\n    }\n    if (cfg.link_url) {\n      var lk = block.querySelector('.cjm-rea2__link');\n      if (lk) lk.setAttribute('href', cfg.link_url);\n    }\n\n    var el = block.querySelector('[data-cjm-rea2-parallax]');\n    if (!el) return;\n\n    var AMP  = 130;\n    var EASE = 0.10;\n    var current = 0, target = 0, running = false, enabled = true;\n\n    function computeTarget() {\n      var r  = el.getBoundingClientRect();\n      var vh = window.innerHeight || document.documentElement.clientHeight;\n      var progress = (vh - r.top) \/ (vh + r.height);\n      if (progress < 0) progress = 0; else if (progress > 1) progress = 1;\n      target = (0.5 - progress) * 2 * AMP;\n    }\n    function loop() {\n      if (!running) return;\n      if (!enabled) { el.style.transform = ''; window.requestAnimationFrame(loop); return; }\n      computeTarget();\n      current += (target - current) * EASE;\n      el.style.transform = 'translateY(' + current.toFixed(2) + 'px)';\n      window.requestAnimationFrame(loop);\n    }\n    function start() { if (!running) { running = true; window.requestAnimationFrame(loop); } }\n    function stop()  { running = false; }\n    function setup() {\n      enabled = window.innerWidth > 900;\n      if (!enabled) { el.style.transform = ''; }\n    }\n    setup();\n    window.addEventListener('resize', setup);\n    if ('IntersectionObserver' in window) {\n      new IntersectionObserver(function(es) {\n        es.forEach(function(e) { if (e.isIntersecting) start(); else stop(); });\n      }, { rootMargin: '200px 0px' }).observe(el);\n    } else { start(); }\n  }\n\n  function init() {\n    var block = document.getElementById('cjm-rea2');\n    if (block) attach(block);\n  }\n\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);\n  else init();\n  window.addEventListener('load', function() { setTimeout(init, 50); });\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2c37e718 elementor-section-stretched elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2c37e718\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3e8a1411\" data-id=\"3e8a1411\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-665c446 elementor-widget elementor-widget-html\" data-id=\"665c446\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- =====================================================================\n     R\u00c9ALISATION \u00b7 Bloc Galerie \u2014 Cabinet Jacquet & Meermans (v5-FIX5)\n     Page : Ferme \u00e0 Chamonix\n     ---------------------------------------------------------------------\n     Fixes cumul\u00e9s :\n     - FIX2 : alignement dynamique au viewport + window.innerWidth\n     - FIX3 : d\u00e9tection direction tactile (scroll vertical libre)\n     - FIX4 : pr\u00e9servation position courante au resize\n===================================================================== -->\n<script>\nwindow.CJM_GALLERY_CONFIG_CHX = [\n  {\n    titre: \"Ext\u00e9rieur\",\n    images: [\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/vue-aerienne-drone-facade-sud-balcons-toiture-zinc-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/vue-aerienne-drone-chalet-foret-aiguilles-chamonix-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/balcon-terrasse-vue-aiguille-du-midi-vallee-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/terrasse-bois-vue-massif-mont-blanc-sapin-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/facade-exterieure-balcon-charpente-bois-vue-aiguille-verte-chalet-chamonix-mont-blanc.jpg\"\n    ]\n  },\n  {\n    titre: \"Int\u00e9rieur\",\n    images: [\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/salon-baies-vitrees-panoramiques-vue-massif-mont-blanc-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/salon-cathedrale-charpente-apparente-vue-mont-blanc-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/salle-a-manger-grande-tablee-cuisine-ouverte-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/grande-piece-de-vie-table-banquet-ilot-mezzanine-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/cuisine-salle-a-manger-salon-enfilade-baie-vitree-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/cuisine-moderne-suspensions-edison-bois-flotte-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/cuisine-en-u-blanche-moderne-charpente-bois-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/cuisine-ilot-central-panier-fruits-electromenager-siemens-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/hall-entree-echelle-meunier-console-ancienne-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/couloir-distribution-chambres-salle-de-bain-parquet-chene-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/detail-chambre-tete-de-lit-bois-papier-peint-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/chambre-double-acces-terrasse-tete-de-lit-bois-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/chambre-lits-jumeaux-armoire-ancienne-baie-vitree-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/salle-de-bain-douche-italienne-vasque-meuble-bois-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/salle-de-bain-baignoire-double-vasque-meuble-chene-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/salle-de-bain-beige-minimaliste-vasque-noire-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/detail-skis-vintage-bois-decoration-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/chambre-lits-jumeaux-fauteuil-louis-xv-baie-vitree-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/chambre-baie-vitree-acces-jardin-liseuse-chalet-chamonix-mont-blanc.jpg\",\n      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/0000_chamonix_interieur_detail_Chalet.jpg\"\n    ]\n  }\n];\n<\/script>\n\n<div class=\"cjm-galchx\" id=\"cjm-galchx\"><\/div>\n\n<style>\n@import url('https:\/\/fonts.cdnfonts.com\/css\/nimbus-sans');\n\nbody { overflow-x: hidden !important; }\n.cjm-galchx, .cjm-galchx * { box-sizing: border-box; margin: 0; padding: 0; }\n\n.cjm-galchx {\n  width: 100vw;\n  max-width: 100vw;\n  position: relative;\n  background: #ffffff;\n  font-family: 'Nimbus Sans', system-ui, sans-serif;\n  -webkit-font-smoothing: antialiased;\n}\n\n.cjm-galchx__section { padding-bottom: 80px; }\n\n.cjm-galchx__head {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  padding: 60px 0 28px;\n  gap: 16px;\n}\n\n.cjm-galchx__title {\n  font-family: 'Nimbus Sans', system-ui, sans-serif !important;\n  font-size: clamp(22px, 2.5vw, 34px) !important;\n  font-weight: 400 !important;\n  color: #998872 !important;\n  letter-spacing: 0.01em !important;\n}\n\n.cjm-galchx__arrows { display: flex; gap: 20px; align-items: center; }\n\n.cjm-galchx__arrow {\n  background: none !important;\n  background-color: transparent !important;\n  border: none !important;\n  box-shadow: none !important;\n  outline: none !important;\n  cursor: pointer;\n  padding: 4px;\n  color: #1a1a1a !important;\n  opacity: 0.7;\n  font-size: 18px;\n  line-height: 1;\n  transition: none !important;\n  -webkit-appearance: none;\n  appearance: none;\n}\n.cjm-galchx__arrow:hover,\n.cjm-galchx__arrow:focus,\n.cjm-galchx__arrow:active {\n  background: none !important;\n  background-color: transparent !important;\n  border: none !important;\n  box-shadow: none !important;\n  color: #1a1a1a !important;\n  opacity: 0.7 !important;\n  transform: none !important;\n}\n\n.cjm-galchx__track-wrap {\n  --per: 1;\n  --gap: 8px;\n  overflow: hidden;\n  width: 100vw;\n  cursor: grab;\n  user-select: none;\n  min-height: calc((100vw - (var(--per) - 1) * var(--gap)) \/ var(--per) * 3 \/ 4);\n}\n@media (min-width: 769px) {\n  .cjm-galchx__track-wrap { --per: 3; }\n}\n.cjm-galchx__track-wrap.is-dragging { cursor: grabbing; }\n.cjm-galchx__track-wrap.is-dragging * { pointer-events: none; }\n\n.cjm-galchx__track {\n  display: flex;\n  gap: 8px;\n  transition: transform 0.5s cubic-bezier(0.76, 0, 0.24, 1);\n  will-change: transform;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0);\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n.cjm-galchx__track.no-transition { transition: none; }\n\n.cjm-galchx__slide {\n  flex: 0 0 auto;\n  line-height: 0;\n  overflow: hidden;\n  background: #efeae2;\n}\n\n.cjm-galchx__slide img {\n  width: 100%;\n  aspect-ratio: 4 \/ 3;\n  object-fit: cover;\n  display: block;\n  pointer-events: none;\n}\n\n.cjm-galchx__nums {\n  display: flex;\n  padding: 10px 0 0;\n  width: 100%;\n}\n.cjm-galchx__num {\n  font-size: 11px; color: #aaa;\n  letter-spacing: 0.05em; text-align: center;\n  flex: 1;\n}\n\n@media (max-width: 768px) {\n  .cjm-galchx__head { padding: 40px 0 20px; }\n  .cjm-galchx__section { padding-bottom: 48px; }\n}\n\n\/* \u2500\u2500\u2500 Lightbox (image agrandie au clic) \u2500\u2500\u2500 *\/\n.cjm-gal-lb {\n  position: fixed;\n  inset: 0;\n  z-index: 999999;\n  background: rgba(26, 26, 26, 0.94);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  opacity: 0;\n  visibility: hidden;\n  pointer-events: none;\n  touch-action: none; \/* emp\u00eache Safari\/Chrome de g\u00e9rer eux-m\u00eames le double-tap et le pincer-zoomer natifs *\/\n  transition: opacity 0.3s ease, visibility 0s linear 0.3s;\n}\n.cjm-gal-lb.is-open {\n  opacity: 1;\n  visibility: visible;\n  pointer-events: auto;\n  transition: opacity 0.3s ease, visibility 0s linear 0s;\n}\n\n.cjm-gal-lb__stage {\n  max-width: 76vw;\n  max-height: 74vh;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  cursor: grab;\n  touch-action: pan-y;\n}\n.cjm-gal-lb__stage:active { cursor: grabbing; }\n\n.cjm-gal-lb__img {\n  max-width: 76vw;\n  max-height: 74vh;\n  width: auto;\n  height: auto;\n  object-fit: contain;\n  display: block;\n  user-select: none;\n  -webkit-user-drag: none;\n  pointer-events: none;\n  box-shadow: 0 24px 70px rgba(0, 0, 0, 0.55);\n}\n\n.cjm-gal-lb__close,\n.cjm-gal-lb__arrow {\n  position: absolute;\n  border-radius: 50%;\n  background: rgba(255, 255, 255, 0.08);\n  border: 1px solid rgba(255, 255, 255, 0.28);\n  color: #ffffff;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  touch-action: manipulation; \/* tap imm\u00e9diat, sans le d\u00e9lai\/zoom natif du navigateur *\/\n  transition: background-color 0.2s ease;\n}\n.cjm-gal-lb__close:hover,\n.cjm-gal-lb__arrow:hover { background: rgba(255, 255, 255, 0.2); }\n\n.cjm-gal-lb__close {\n  top: 24px;\n  right: 24px;\n  width: 44px;\n  height: 44px;\n  font-size: 26px;\n  line-height: 1;\n}\n.cjm-gal-lb__arrow {\n  top: 50%;\n  transform: translateY(-50%);\n  width: 52px;\n  height: 52px;\n  font-size: 20px;\n}\n.cjm-gal-lb__arrow--prev { left: 24px; }\n.cjm-gal-lb__arrow--next { right: 24px; }\n\n.cjm-gal-lb__counter {\n  position: absolute;\n  bottom: 24px;\n  left: 50%;\n  transform: translateX(-50%);\n  color: rgba(255, 255, 255, 0.7);\n  font-family: 'Nimbus Sans', system-ui, sans-serif;\n  font-size: 13px;\n  letter-spacing: 0.05em;\n}\n\n@media (max-width: 700px) {\n  .cjm-gal-lb__stage {\n    max-width: 94vw;\n    max-height: 60vh;\n    touch-action: none; \/* on g\u00e8re nous-m\u00eames le pincer-zoomer *\/\n  }\n  .cjm-gal-lb__img {\n    max-width: 94vw;\n    max-height: 60vh;\n  }\n  .cjm-gal-lb__close { width: 38px; height: 38px; top: 14px; right: 14px; font-size: 22px; }\n\n  \/* Fl\u00e8ches sous l'image, c\u00f4te \u00e0 c\u00f4te, au lieu d'\u00eatre sur les bords *\/\n  .cjm-gal-lb__arrow {\n    top: auto;\n    bottom: 26px;\n    left: 50%;\n    right: auto;\n    transform: none;\n    width: 44px;\n    height: 44px;\n    font-size: 17px;\n  }\n  .cjm-gal-lb__arrow--prev { transform: translateX(calc(-100% - 7px)); }\n  .cjm-gal-lb__arrow--next { transform: translateX(7px); }\n\n  .cjm-gal-lb__counter { bottom: 84px; font-size: 12px; }\n}\n<\/style>\n\n<script>\n(function () {\n\n  var PER_DESKTOP = 3;\n  var PER_MOBILE  = 1;\n  var GAP = 8;\n  var COPIES = 5;\n  var DIRECTION_THRESHOLD = 8;\n\n  function pp() { return window.innerWidth > 768 ? PER_DESKTOP : PER_MOBILE; }\n  function mod(n,m) { return ((n%m)+m)%m; }\n\n  function alignGalleryToViewport(galleryEl) {\n    galleryEl.style.marginLeft = '0';\n    galleryEl.style.marginRight = '0';\n    var rect = galleryEl.getBoundingClientRect();\n    var offsetLeft = rect.left;\n    if (Math.abs(offsetLeft) > 0.5) {\n      galleryEl.style.marginLeft = (-offsetLeft) + 'px';\n    }\n  }\n\n  function buildSection(cfg) {\n    var images = cfg.images;\n    var total  = images.length;\n    var allCount = total * COPIES;\n    var startIdx = total * Math.floor(COPIES \/ 2);\n    var middleCopyIdx = Math.floor(COPIES \/ 2);\n    var EAGER_COUNT = PER_DESKTOP + 1;\n\n    var section = document.createElement('div');\n    section.className = 'cjm-galchx__section';\n\n    var head = document.createElement('div');\n    head.className = 'cjm-galchx__head';\n    var titleEl = document.createElement('h2');\n    titleEl.className = 'cjm-galchx__title';\n    titleEl.textContent = cfg.titre;\n    var arrowsEl = document.createElement('div');\n    arrowsEl.className = 'cjm-galchx__arrows';\n    var btnPrev = document.createElement('button');\n    btnPrev.className = 'cjm-galchx__arrow';\n    btnPrev.innerHTML = '&larr;';\n    var btnNext = document.createElement('button');\n    btnNext.className = 'cjm-galchx__arrow';\n    btnNext.innerHTML = '&rarr;';\n    arrowsEl.appendChild(btnPrev);\n    arrowsEl.appendChild(btnNext);\n    head.appendChild(titleEl);\n    head.appendChild(arrowsEl);\n\n    var trackWrap = document.createElement('div');\n    trackWrap.className = 'cjm-galchx__track-wrap';\n\n    var track = document.createElement('div');\n    track.className = 'cjm-galchx__track';\n\n    var slideEls = [];\n    for (var c = 0; c < COPIES; c++) {\n      for (var i = 0; i < total; i++) {\n        var s = document.createElement('div');\n        s.className = 'cjm-galchx__slide';\n        s.dataset.imgIdx = i;\n        var img = document.createElement('img');\n        img.src = images[i];\n        img.alt = '';\n\n        var isVisibleOnLoad = (c === middleCopyIdx && i < EAGER_COUNT);\n        if (isVisibleOnLoad) {\n          img.loading = 'eager';\n          if ('fetchPriority' in img) img.fetchPriority = 'high';\n        } else {\n          img.loading = 'lazy';\n          if ('fetchPriority' in img) img.fetchPriority = 'auto';\n        }\n        img.decoding = 'async';\n\n        img.style.cssText = 'display:block;width:100%;aspect-ratio:4\/3;object-fit:cover;pointer-events:none;';\n        s.appendChild(img);\n        track.appendChild(s);\n        slideEls.push(s);\n      }\n    }\n\n    trackWrap.appendChild(track);\n\n    var numsEl = document.createElement('div');\n    numsEl.className = 'cjm-galchx__nums';\n\n    section.appendChild(head);\n    section.appendChild(trackWrap);\n    section.appendChild(numsEl);\n\n    var trackIdx = startIdx;\n    var slideW = 0;\n    var moving = false;\n\n    function calcW() {\n      var w = window.innerWidth;\n      if (w <= 0) return 0;\n      return (w - GAP * (pp() - 1)) \/ pp();\n    }\n\n    function updateSizes() {\n      var newW = calcW();\n      if (newW <= 0) return;\n      slideW = newW;\n      slideEls.forEach(function(s) { s.style.width = slideW + 'px'; });\n    }\n\n    function offsetFor(idx) {\n      return idx * (slideW + GAP);\n    }\n\n    function renderNums(idx) {\n      numsEl.innerHTML = '';\n      var p = pp();\n      for (var i = 0; i < p; i++) {\n        var ri = mod(idx + i, total);\n        var span = document.createElement('span');\n        span.className = 'cjm-galchx__num';\n        span.textContent = (ri + 1) + '\/' + total;\n        numsEl.appendChild(span);\n      }\n    }\n\n    function rebalance() {\n      var margin = total;\n      if (trackIdx < margin || trackIdx > allCount - margin) {\n        var realIdx = mod(trackIdx, total);\n        trackIdx = startIdx + realIdx - mod(startIdx, total);\n        if (trackIdx < startIdx) trackIdx += total;\n        track.style.transition = 'none';\n        track.style.transform = 'translateX(-' + offsetFor(trackIdx) + 'px)';\n        void track.offsetWidth;\n      }\n    }\n\n    function goTo(newTrackIdx, animate) {\n      trackIdx = newTrackIdx;\n      if (slideW <= 0) {\n        renderNums(trackIdx);\n        return;\n      }\n      if (animate) {\n        track.style.transition = 'transform 0.5s cubic-bezier(0.76,0,0.24,1)';\n        moving = true;\n        setTimeout(function() {\n          moving = false;\n          rebalance();\n        }, 550);\n      } else {\n        track.style.transition = 'none';\n        void track.offsetWidth;\n      }\n      track.style.transform = 'translateX(-' + offsetFor(trackIdx) + 'px)';\n      renderNums(trackIdx);\n    }\n\n    btnPrev.addEventListener('click', function(e) {\n      e.stopPropagation();\n      if (moving) return;\n      goTo(trackIdx - 1, true);\n    });\n    btnNext.addEventListener('click', function(e) {\n      e.stopPropagation();\n      if (moving) return;\n      goTo(trackIdx + 1, true);\n    });\n\n    var dragX0 = null, dragY0 = null, dragOff = 0, dragged = false, dragDirection = null;\n\n    function mouseStart(x) {\n      if (moving) return;\n      dragX0 = x; dragY0 = null;\n      dragOff = offsetFor(trackIdx);\n      dragged = false;\n      dragDirection = 'h';\n      track.style.transition = 'none';\n      trackWrap.style.cursor = 'grabbing';\n    }\n    function mouseMove(x) {\n      if (dragX0 === null || dragDirection !== 'h') return;\n      var dx = x - dragX0;\n      if (Math.abs(dx) > 5) dragged = true;\n      track.style.transform = 'translateX(-' + (dragOff - dx) + 'px)';\n    }\n    function mouseEnd(x) {\n      if (dragX0 === null) return;\n      var dx = x - dragX0;\n      var wasH = (dragDirection === 'h');\n      dragX0 = null; dragY0 = null; dragDirection = null;\n      trackWrap.style.cursor = 'grab';\n      if (!wasH) return;\n      var threshold = Math.max(30, slideW * 0.15);\n      if (Math.abs(dx) > threshold) {\n        var steps = dx < 0 ? 1 : -1;\n        goTo(trackIdx + steps, true);\n      } else {\n        track.style.transition = 'transform 0.3s ease';\n        track.style.transform = 'translateX(-' + offsetFor(trackIdx) + 'px)';\n      }\n    }\n\n    function touchStart(x, y) {\n      if (moving) return;\n      dragX0 = x; dragY0 = y;\n      dragOff = offsetFor(trackIdx);\n      dragged = false;\n      dragDirection = null;\n      track.style.transition = 'none';\n    }\n    function touchMove(x, y) {\n      if (dragX0 === null) return;\n      var dx = x - dragX0;\n      var dy = y - dragY0;\n      if (dragDirection === null) {\n        var absDx = Math.abs(dx), absDy = Math.abs(dy);\n        if (absDx < DIRECTION_THRESHOLD && absDy < DIRECTION_THRESHOLD) return;\n        if (absDy > absDx) {\n          dragX0 = null; dragY0 = null; dragDirection = 'v';\n          return;\n        }\n        dragDirection = 'h';\n      }\n      if (dragDirection !== 'h') return;\n      if (Math.abs(dx) > 5) dragged = true;\n      track.style.transform = 'translateX(-' + (dragOff - dx) + 'px)';\n    }\n    function touchEnd(x) {\n      if (dragX0 === null || dragDirection !== 'h') {\n        dragX0 = null; dragY0 = null; dragDirection = null;\n        return;\n      }\n      var dx = x - dragX0;\n      dragX0 = null; dragY0 = null; dragDirection = null;\n      var threshold = Math.max(30, slideW * 0.15);\n      if (Math.abs(dx) > threshold) {\n        var steps = dx < 0 ? 1 : -1;\n        goTo(trackIdx + steps, true);\n      } else {\n        track.style.transition = 'transform 0.3s ease';\n        track.style.transform = 'translateX(-' + offsetFor(trackIdx) + 'px)';\n      }\n    }\n\n    trackWrap.addEventListener('mousedown',  function(e) { mouseStart(e.clientX); });\n    window.addEventListener('mousemove', function(e) { mouseMove(e.clientX); });\n    window.addEventListener('mouseup',   function(e) { mouseEnd(e.clientX); });\n\n    trackWrap.addEventListener('touchstart', function(e) {\n      touchStart(e.touches[0].clientX, e.touches[0].clientY);\n    }, {passive:true});\n    trackWrap.addEventListener('touchmove',  function(e) {\n      if (dragDirection === 'h') e.preventDefault();\n      touchMove(e.touches[0].clientX, e.touches[0].clientY);\n    }, {passive:false});\n    trackWrap.addEventListener('touchend',   function(e) {\n      touchEnd(e.changedTouches[0].clientX);\n    }, {passive:true});\n    trackWrap.addEventListener('touchcancel', function() {\n      dragX0 = null; dragY0 = null; dragDirection = null;\n    }, {passive:true});\n\n    trackWrap.addEventListener('click', function(e) {\n      if (dragged) return;\n      if (moving) return;\n      var slideEl = e.target.closest ? e.target.closest('.cjm-galchx__slide') : null;\n      if (slideEl && slideEl.dataset.imgIdx !== undefined && window.__cjmGalLightboxShow) {\n        window.__cjmGalLightboxShow(images, parseInt(slideEl.dataset.imgIdx, 10));\n        return;\n      }\n      goTo(trackIdx + 1, true);\n    });\n\n    updateSizes();\n    goTo(startIdx, false);\n\n    section.__cjmReinit = function() {\n      updateSizes();\n      goTo(trackIdx, false);\n    };\n\n    return section;\n  }\n\n    function buildLightbox() {\n    if (window.__cjmGalLightboxShow) return; \/\/ d\u00e9j\u00e0 construite (une seule fois par page)\n\n    var lb = document.createElement('div');\n    lb.className = 'cjm-gal-lb';\n    lb.innerHTML =\n      '<button type=\"button\" class=\"cjm-gal-lb__close\" aria-label=\"Fermer\">&times;<\/button>' +\n      '<button type=\"button\" class=\"cjm-gal-lb__arrow cjm-gal-lb__arrow--prev\" aria-label=\"Pr\u00e9c\u00e9dent\">&larr;<\/button>' +\n      '<button type=\"button\" class=\"cjm-gal-lb__arrow cjm-gal-lb__arrow--next\" aria-label=\"Suivant\">&rarr;<\/button>' +\n      '<div class=\"cjm-gal-lb__stage\"><img class=\"cjm-gal-lb__img\" alt=\"\"><\/div>' +\n      '<div class=\"cjm-gal-lb__counter\"><\/div>';\n    document.body.appendChild(lb);\n\n    var lbImg     = lb.querySelector('.cjm-gal-lb__img');\n    var lbClose   = lb.querySelector('.cjm-gal-lb__close');\n    var lbPrev    = lb.querySelector('.cjm-gal-lb__arrow--prev');\n    var lbNext    = lb.querySelector('.cjm-gal-lb__arrow--next');\n    var lbCounter = lb.querySelector('.cjm-gal-lb__counter');\n    var lbStage   = lb.querySelector('.cjm-gal-lb__stage');\n\n    var lbImages = [], lbIndex = 0;\n\n    function render() {\n      lbImg.src = lbImages[lbIndex];\n      lbCounter.textContent = (lbIndex + 1) + ' \/ ' + lbImages.length;\n    }\n    function show(images, idx) {\n      lbImages = images;\n      lbIndex = idx;\n      render();\n      lb.classList.add('is-open');\n      document.body.style.overflow = 'hidden';\n    }\n    function hide() {\n      lb.classList.remove('is-open');\n      document.body.style.overflow = '';\n    }\n    function next() { lbIndex = (lbIndex + 1) % lbImages.length; render(); }\n    function prev() { lbIndex = (lbIndex - 1 + lbImages.length) % lbImages.length; render(); }\n\n    lbClose.addEventListener('click', hide);\n    lb.addEventListener('click', function (e) { if (e.target === lb) hide(); });\n    lbNext.addEventListener('click', function (e) { e.stopPropagation(); next(); });\n    lbPrev.addEventListener('click', function (e) { e.stopPropagation(); prev(); });\n\n    document.addEventListener('keydown', function (e) {\n      if (!lb.classList.contains('is-open')) return;\n      if (e.key === 'Escape')    hide();\n      if (e.key === 'ArrowRight') next();\n      if (e.key === 'ArrowLeft')  prev();\n    });\n\n    \/\/ \u2500\u2500\u2500 Zoom (pincer 2 doigts) + pan + glisser pour naviguer \u2500\u2500\u2500\n    var zoomScale = 1, panX = 0, panY = 0;\n    var pinchStartDist = 0, pinchStartScale = 1;\n    var panStartX = 0, panStartY = 0, panOrigX = 0, panOrigY = 0;\n    var lastTapTime = 0, lastTapX = -999, lastTapY = -999;\n\n    function applyTransform() {\n      lbImg.style.transform = 'translate(' + panX + 'px,' + panY + 'px) scale(' + zoomScale + ')';\n    }\n    function resetZoom() {\n      zoomScale = 1; panX = 0; panY = 0;\n      lbImg.style.transform = 'none';\n    }\n\n    var origRender = render;\n    render = function () { origRender(); resetZoom(); };\n\n    function touchDist(t0, t1) {\n      var dx2 = t1.clientX - t0.clientX, dy2 = t1.clientY - t0.clientY;\n      return Math.sqrt(dx2 * dx2 + dy2 * dy2);\n    }\n\n    \/\/ Navigation par glisser (souris) \u2014 inchang\u00e9\n    var startX = null, dx = 0, dragging = false;\n    function dragStart(x) { startX = x; dx = 0; dragging = true; }\n    function dragMove(x)  { if (dragging) dx = x - startX; }\n    function dragEnd() {\n      if (!dragging) return;\n      dragging = false;\n      if (Math.abs(dx) > 50) { dx < 0 ? next() : prev(); }\n      dx = 0;\n    }\n    lbStage.addEventListener('mousedown', function (e) { dragStart(e.clientX); });\n    window.addEventListener('mousemove', function (e) { dragMove(e.clientX); });\n    window.addEventListener('mouseup', dragEnd);\n\n    \/\/ Tactile : 1 doigt = navigue (ou d\u00e9place l'image si zoom\u00e9e) \/ 2 doigts = pincer-zoomer\n    var touchMode = null; \/\/ 'swipe' | 'pan' | 'pinch'\n\n    function touchMid(t0, t1) {\n      return { x: (t0.clientX + t1.clientX) \/ 2, y: (t0.clientY + t1.clientY) \/ 2 };\n    }\n    var pinchStartMidX = 0, pinchStartMidY = 0;\n\n    lbStage.addEventListener('touchstart', function (e) {\n      if (e.touches.length === 2) {\n        touchMode = 'pinch';\n        pinchStartDist = touchDist(e.touches[0], e.touches[1]);\n        pinchStartScale = zoomScale;\n        var mid0 = touchMid(e.touches[0], e.touches[1]);\n        pinchStartMidX = mid0.x; pinchStartMidY = mid0.y;\n        panOrigX = panX; panOrigY = panY;\n      } else if (e.touches.length === 1) {\n        var now = Date.now();\n        var tx = e.touches[0].clientX, ty = e.touches[0].clientY;\n        var closeEnough = Math.abs(tx - lastTapX) < 40 && Math.abs(ty - lastTapY) < 40;\n        if (now - lastTapTime < 300 && closeEnough) {\n          resetZoom(); lastTapTime = 0; touchMode = null; return;\n        }\n        lastTapTime = now; lastTapX = tx; lastTapY = ty;\n        if (zoomScale > 1.02) {\n          touchMode = 'pan';\n          panStartX = e.touches[0].clientX; panStartY = e.touches[0].clientY;\n          panOrigX = panX; panOrigY = panY;\n        } else {\n          touchMode = 'swipe';\n          dragStart(e.touches[0].clientX);\n        }\n      }\n    }, { passive: true });\n\n    lbStage.addEventListener('touchmove', function (e) {\n      if (touchMode === 'pinch' && e.touches.length === 2) {\n        \/\/ Zoom (distance entre les 2 doigts) + d\u00e9placement (mouvement du point milieu), en m\u00eame temps\n        var d = touchDist(e.touches[0], e.touches[1]);\n        var factor = d \/ (pinchStartDist || d);\n        zoomScale = Math.min(4, Math.max(1, pinchStartScale * factor));\n        var mid = touchMid(e.touches[0], e.touches[1]);\n        panX = panOrigX + (mid.x - pinchStartMidX);\n        panY = panOrigY + (mid.y - pinchStartMidY);\n        applyTransform();\n      } else if (touchMode === 'pan' && e.touches.length === 1) {\n        panX = panOrigX + (e.touches[0].clientX - panStartX);\n        panY = panOrigY + (e.touches[0].clientY - panStartY);\n        applyTransform();\n      } else if (touchMode === 'swipe' && e.touches.length === 1) {\n        dragMove(e.touches[0].clientX);\n      }\n    }, { passive: true });\n\n    lbStage.addEventListener('touchend', function (e) {\n      if (touchMode === 'swipe') dragEnd();\n      if (touchMode === 'pinch' && zoomScale < 1.05) resetZoom();\n      if (e.touches.length === 0) touchMode = null;\n    }, { passive: true });\n\n    window.__cjmGalLightboxShow = show;\n  }\n\n  function init() {\n    buildLightbox();\n    var c = document.getElementById('cjm-galchx');\n    if (!c || c.dataset.init === '1') return;\n    c.dataset.init = '1';\n\n    var sections = [];\n    (window.CJM_GALLERY_CONFIG_CHX || []).forEach(function(cfg) {\n      var sec = buildSection(cfg);\n      c.appendChild(sec);\n      sections.push(sec);\n    });\n\n    function realignAll() {\n      alignGalleryToViewport(c);\n      sections.forEach(function(sec) {\n        if (sec.__cjmReinit) sec.__cjmReinit();\n      });\n    }\n\n    requestAnimationFrame(function() {\n      requestAnimationFrame(realignAll);\n    });\n\n    window.addEventListener('resize', realignAll);\n    window.addEventListener('load', function() { setTimeout(realignAll, 100); });\n  }\n\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);\n  else init();\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-350f23 elementor-section-stretched elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"350f23\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-fea8d74\" data-id=\"fea8d74\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1aba8ad1 elementor-widget elementor-widget-html\" data-id=\"1aba8ad1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- =====================================================================\n     R\u00c9ALISATION \u00b7 Fiche technique \u2014 Cabinet Jacquet & Meermans\n     Page : Ferme \u00e0 Chamonix\n===================================================================== -->\n<section class=\"cjm-fiche\">\n  <h2 class=\"cjm-fiche__title\">Fiche technique<\/h2>\n  <div class=\"cjm-fiche__rule\"><\/div>\n  <div class=\"cjm-fiche__grid\">\n    <div class=\"cjm-fiche__item\">\n      <p class=\"cjm-fiche__label\">LOCALISATION<\/p>\n      <p class=\"cjm-fiche__val\">Chamonix (74)<\/p>\n    <\/div>\n    <div class=\"cjm-fiche__item\">\n      <p class=\"cjm-fiche__label\">PROGRAMME<\/p>\n      <p class=\"cjm-fiche__val\">Chalet neuf<br>sur mesure<\/p>\n    <\/div>\n    <div class=\"cjm-fiche__item\">\n      <p class=\"cjm-fiche__label\">MISSION<\/p>\n      <p class=\"cjm-fiche__val\">Faisabilit\u00e9, permis de<br>construire, chiffrage<br>et suivi de chantier<\/p>\n    <\/div>\n    <div class=\"cjm-fiche__item\">\n      <p class=\"cjm-fiche__label\">COUCHAGES<\/p>\n      <p class=\"cjm-fiche__val\">4 chambres, 1 dortoir<br>et couchage en mezzanine<\/p>\n    <\/div>\n    <div class=\"cjm-fiche__item\">\n      <p class=\"cjm-fiche__label\">SANITAIRES<\/p>\n      <p class=\"cjm-fiche__val\">4 salles de bains,<br>1 douche et 5 WC<\/p>\n    <\/div>\n    <div class=\"cjm-fiche__item\">\n      <p class=\"cjm-fiche__label\">PERMIS<\/p>\n      <p class=\"cjm-fiche__val\">Obtenu en 5 mois<\/p>\n    <\/div>\n    <div class=\"cjm-fiche__item\">\n      <p class=\"cjm-fiche__label\">SURFACE<\/p>\n      <p class=\"cjm-fiche__val\">250 m\u00b2 sur deux niveaux<br>+ mezzanine<\/p>\n    <\/div>\n    <div class=\"cjm-fiche__item\">\n      <p class=\"cjm-fiche__label\">ESPACE PRIVATIF<\/p>\n      <p class=\"cjm-fiche__val\">Appartement ind\u00e9pendant<br>pour le propri\u00e9taire<\/p>\n    <\/div>\n    <div class=\"cjm-fiche__item\">\n      <p class=\"cjm-fiche__label\">EXPLOITATION<\/p>\n      <p class=\"cjm-fiche__val\">Pens\u00e9 pour la<br>location saisonni\u00e8re<\/p>\n    <\/div>\n  <\/div>\n<\/section>\n<style>\n@import url('https:\/\/fonts.cdnfonts.com\/css\/nimbus-sans');\n.cjm-fiche, .cjm-fiche * { box-sizing: border-box; margin: 0; padding: 0; }\n.cjm-fiche {\n  --accent: #998872;\n  --text:   #1a1a1a;\n  --label:  #999;\n  --line:   #d6cfc1;\n  --font:   'Nimbus Sans', system-ui, sans-serif;\n  display: block;\n  width: 100vw;\n  position: relative;\n  left: 50%;\n  margin-left: -50vw;\n  background: #ffffff !important;\n  color: #1a1a1a !important;\n  font-family: var(--font);\n  -webkit-font-smoothing: antialiased;\n  padding: 80px clamp(80px, 8vw, 160px) 100px;\n}\n.cjm-fiche__title {\n  font-family: var(--font) !important;\n  font-size: clamp(22px, 2.5vw, 34px) !important;\n  font-weight: 400 !important;\n  color: var(--accent) !important;\n  text-align: center !important;\n  margin-bottom: 40px !important;\n}\n.cjm-fiche__rule {\n  width: 100%;\n  height: 1px;\n  background: var(--line);\n  margin-bottom: 56px;\n}\n.cjm-fiche__grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  row-gap: 52px;\n  column-gap: 40px;\n}\n.cjm-fiche__item {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  text-align: center;\n}\n.cjm-fiche__label {\n  font-size: 11px !important;\n  font-weight: 500 !important;\n  letter-spacing: 0.18em !important;\n  text-transform: uppercase !important;\n  color: var(--label) !important;\n}\n.cjm-fiche__val {\n  font-size: clamp(14px, 1.1vw, 16px) !important;\n  line-height: 1.6 !important;\n  color: var(--text) !important;\n}\n@media (max-width: 768px) {\n  .cjm-fiche { padding: 60px 28px 80px; }\n  .cjm-fiche__grid { padding: 0 8px; grid-template-columns: repeat(2, 1fr); row-gap: 40px; }\n  .cjm-fiche__item:last-child { grid-column: 1 \/ -1; }\n}\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2bb2401f elementor-section-stretched elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"2bb2401f\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-78ac30b\" data-id=\"78ac30b\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-60401b3 elementor-widget elementor-widget-html\" data-id=\"60401b3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- =====================================================================\n     NOTRE BOOK \u00b7 Cabinet Jacquet & Meermans\n     ---------------------------------------------------------------------\n     >>> IMAGES \u00c0 \u00c9DITER ICI <<<\n     Remplace uniquement les URLs entre guillemets.\n===================================================================== -->\n<script>\nwindow.CJM_NB_CONFIG = {\n  img_main:      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/0000_chamonix_interieur_detail_Chalet.jpg\",  \/* image principale (grande) *\/\n  img_secondary: \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/interieur-chalet-bois-6-2.jpg\",  \/* image secondaire (petite) *\/\n  link_url:      \"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/08\/book-realisations-chalets-jacquet-meermans-mont-blanc.pdf\"   \/* ouvre le PDF *\/\n};\n<\/script>\n\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:wght@300;400;500&display=swap');\n@import url('https:\/\/fonts.cdnfonts.com\/css\/nimbus-sans');\n\n.nb-block { background: #ffffff; position: relative; }\n.nb-block__inner {\n  max-width: 1600px; margin: 0 auto; padding: 0 80px;\n  display: grid; grid-template-columns: 1fr 1fr;\n  gap: 80px; align-items: start;\n}\n\n\/* \u2500\u2500 GAUCHE : texte dans le flux normal, pas de sticky \u2500\u2500 *\/\n.nb-block__left {\n  padding: 8vh 0 4vh;\n}\n.nb-block__eyebrow {\n  font-family: 'Nimbus Sans','Mulish',system-ui,sans-serif !important;\n  font-size: 11px !important; font-weight: 400 !important;\n  letter-spacing: 0.2em !important; text-transform: uppercase !important;\n  color: #1a1a1a !important; margin: 0 0 28px !important; display: block;\n}\n.nb-block__title {\n  font-family: 'Cormorant Garamond',Georgia,serif !important;\n  font-size: clamp(42px,4.5vw,72px) !important;\n  font-weight: 300 !important; line-height: 1.05 !important;\n  color: #998872 !important; margin: 0 0 28px !important;\n  text-transform: none !important; letter-spacing: -0.01em !important;\n}\n.nb-block__divider {\n  display: block; width: 40px; height: 1px;\n  background: #998872; margin-bottom: 24px;\n}\n.nb-block__desc {\n  font-family: 'Nimbus Sans','Mulish',system-ui,sans-serif !important;\n  font-size: 14px !important; line-height: 1.7 !important;\n  color: #4a4a4a !important; max-width: 380px; margin: 0 0 36px !important;\n}\n.nb-block__link {\n  display: inline-flex; align-items: center; gap: 10px;\n  font-family: 'Nimbus Sans','Mulish',system-ui,sans-serif !important;\n  font-size: 13px !important; font-weight: 600 !important;\n  letter-spacing: 0.05em !important;\n  color: #1a1a1a !important;\n  text-decoration: none !important;\n  padding-bottom: 10px;\n  position: relative; overflow: hidden;\n  transition: gap .3s;\n}\n.nb-block__link::before,\n.nb-block__link::after {\n  content: '';\n  position: absolute; left: 0; bottom: 0;\n  width: 100%; height: 1px;\n  background: #1a1a1a;\n  transition: transform 0.5s cubic-bezier(0.76, 0, 0.24, 1);\n}\n.nb-block__link::before { transform: scaleX(1); transform-origin: left; }\n.nb-block__link::after  { transform: scaleX(0); transform-origin: right; }\n.nb-block__link:hover::before { transform: scaleX(0); }\n.nb-block__link:hover::after  { transform: scaleX(1); transition-delay: 0.25s; }\n.nb-block__link:hover { gap: 16px; }\n.nb-block__link svg { width: 16px; height: 16px; flex-shrink: 0; }\n\n\/* \u2500\u2500 DROITE : deux images c\u00f4te \u00e0 c\u00f4te avec parallax \u2500\u2500 *\/\n.nb-block__right {\n  display: flex; flex-direction: row;\n  align-items: flex-start; gap: 16px;\n  padding: 8vh 0 4vh;\n}\n.nb-block__img-main {\n  width: 80%; flex-shrink: 0; overflow: hidden; line-height: 0;\n}\n.nb-block__img-main-inner {\n  width: 100%; aspect-ratio: 1 \/ 1;\n  background-size: cover; background-position: center;\n  background-repeat: no-repeat; will-change: transform;\n  \/* image appliqu\u00e9e via CJM_NB_CONFIG ci-dessus *\/\n}\n.nb-block__img-secondary {\n  width: 25%; flex-shrink: 0; overflow: hidden; line-height: 0;\n  margin-top: 55%;\n}\n.nb-block__img-secondary-inner {\n  width: 100%; aspect-ratio: 2 \/ 3;\n  background-size: cover; background-position: center;\n  background-repeat: no-repeat; will-change: transform;\n  \/* image appliqu\u00e9e via CJM_NB_CONFIG ci-dessus *\/\n}\n\n@media (max-width: 900px) {\n  .nb-block__inner { grid-template-columns: 1fr; gap: 0; padding: 0 22px; }\n  .nb-block__left  { padding: 56px 0 36px; }\n  \/* Droite : images en colonne verticale *\/\n  .nb-block__right {\n    flex-direction: column !important;\n    padding: 0 0 56px;\n    gap: 24px;\n  }\n  \/* Image principale : bord \u00e0 bord *\/\n  .nb-block__img-main {\n    width: 100% !important;\n    margin-left: -22px !important;\n    margin-right: -22px !important;\n    width: calc(100% + 44px) !important;\n  }\n  .nb-block__img-main-inner {\n    transform: none !important;\n    aspect-ratio: 1 \/ 1 !important;\n  }\n  \/* Image secondaire : avec marge, rectangle *\/\n  .nb-block__img-secondary {\n    width: 100% !important;\n    margin-top: 0 !important;\n  }\n  .nb-block__img-secondary-inner {\n    transform: none !important;\n    aspect-ratio: 4 \/ 3 !important;\n  }\n  .nb-block__desc { max-width: 100%; }\n}\n<\/style>\n\n<section class=\"nb-block\" id=\"nb-block\">\n  <div class=\"nb-block__inner\">\n\n    <div class=\"nb-block__left\">\n      <span class=\"nb-block__eyebrow\">NOTRE BOOK<\/span>\n      <h2 class=\"nb-block__title\">Entrez dans le d\u00e9tail<br>de nos projets<\/h2>\n      <span class=\"nb-block__divider\" aria-hidden=\"true\"><\/span>\n      <p class=\"nb-block__desc\">\u00c0 travers plans, photographies de chantier et r\u00e9alisations livr\u00e9es, d\u00e9couvrez le savoir-faire du Cabinet Jacquet &amp; Meermans dans notre book de projets.<\/p>\n      <a href=\"#\" class=\"nb-block__link\" target=\"_blank\" rel=\"noopener\">\n        <span>Consulter le book<\/span>\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <line x1=\"4\" y1=\"12\" x2=\"19\" y2=\"12\"\/>\n          <polyline points=\"13 6 20 12 13 18\"\/>\n        <\/svg>\n      <\/a>\n    <\/div>\n\n    <div class=\"nb-block__right\" data-nb-parallax>\n      <div class=\"nb-block__img-main\">\n        <div class=\"nb-block__img-main-inner\"\n             role=\"img\" aria-label=\"Chalet avec vue sur le Mont-Blanc\"><\/div>\n      <\/div>\n      <div class=\"nb-block__img-secondary\">\n        <div class=\"nb-block__img-secondary-inner\"\n             role=\"img\" aria-label=\"D\u00e9tail chantier\"><\/div>\n      <\/div>\n    <\/div>\n\n  <\/div>\n<\/section>\n\n<script>\n(function () {\n  \/* M\u00eame m\u00e9canisme exact que le cabinet : parallax sur la colonne droite enti\u00e8re *\/\n  function attach(block) {\n    if (block.dataset.nbInit === '1') return;\n    block.dataset.nbInit = '1';\n\n    \/* Appliquer les images depuis la config *\/\n    var cfg = window.CJM_NB_CONFIG || {};\n    if (cfg.img_main) {\n      var im = block.querySelector('.nb-block__img-main-inner');\n      if (im) im.style.backgroundImage = \"url('\" + cfg.img_main + \"')\";\n    }\n    if (cfg.img_secondary) {\n      var is = block.querySelector('.nb-block__img-secondary-inner');\n      if (is) is.style.backgroundImage = \"url('\" + cfg.img_secondary + \"')\";\n    }\n    if (cfg.link_url) {\n      var lk = block.querySelector('.nb-block__link');\n      if (lk) lk.setAttribute('href', cfg.link_url);\n    }\n\n    var el = block.querySelector('[data-nb-parallax]');\n    if (!el) return;\n\n    var AMP  = 130;\n    var EASE = 0.10;\n    var current = 0, target = 0, running = false, enabled = true;\n\n    function computeTarget() {\n      var r  = el.getBoundingClientRect();\n      var vh = window.innerHeight || document.documentElement.clientHeight;\n      var progress = (vh - r.top) \/ (vh + r.height);\n      if (progress < 0) progress = 0; else if (progress > 1) progress = 1;\n      target = (0.5 - progress) * 2 * AMP;\n    }\n    function loop() {\n      if (!running) return;\n      if (!enabled) { el.style.transform = ''; window.requestAnimationFrame(loop); return; }\n      computeTarget();\n      current += (target - current) * EASE;\n      el.style.transform = 'translateY(' + current.toFixed(2) + 'px)';\n      window.requestAnimationFrame(loop);\n    }\n    function start() { if (!running) { running = true; window.requestAnimationFrame(loop); } }\n    function stop()  { running = false; }\n    function setup() {\n      enabled = window.innerWidth > 900;\n      if (!enabled) { el.style.transform = ''; }\n    }\n    setup();\n    window.addEventListener('resize', setup);\n    if ('IntersectionObserver' in window) {\n      new IntersectionObserver(function(es) {\n        es.forEach(function(e) { if (e.isIntersecting) start(); else stop(); });\n      }, { rootMargin: '200px 0px' }).observe(el);\n    } else { start(); }\n  }\n\n  function init() {\n    var block = document.getElementById('nb-block');\n    if (block) attach(block);\n  }\n\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);\n  else init();\n  window.addEventListener('load', function() { setTimeout(init, 50); });\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6afb88e1 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"6afb88e1\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2782c8de\" data-id=\"2782c8de\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6ecb70ed elementor-widget elementor-widget-html\" data-id=\"6ecb70ed\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"cjm-faq\">\n\n  <!-- COLONNE GAUCHE : image (change l'URL ci-dessous) -->\n  <div class=\"cjm-faq__media\"\n       style=\"background-image:url('https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/salon-baies-vitrees-panoramiques-vue-massif-mont-blanc-chalet-chamonix-mont-blanc.jpg');\"\n       role=\"img\" aria-label=\"Chalet r\u00e9alis\u00e9 par le Cabinet Jacquet & Meermans\"><\/div>\n\n  <!-- COLONNE DROITE : questions -->\n  <div class=\"cjm-faq__panel\">\n    <h2 class=\"cjm-faq__title\">Questions fr\u00e9quentes<\/h2>\n    <p class=\"cjm-faq__intro\">Tout ce qu'il faut savoir avant de lancer la construction ou la r\u00e9novation de votre chalet au Pays du Mont-Blanc.<\/p>\n\n    <div class=\"cjm-faq__list\">\n\n      <div class=\"cjm-faq__item\">\n        <button class=\"cjm-faq__q\" aria-expanded=\"false\"><span>Quelle est la diff\u00e9rence entre un architecte et un ma\u00eetre d'\u0153uvre&nbsp;?<\/span><span class=\"cjm-faq__ico\" aria-hidden=\"true\"><\/span><\/button>\n        <div class=\"cjm-faq__a\"><p>L'architecte d\u00e9pose le permis de construire. Notre cabinet travaille avec plusieurs cabinets d'architecture selon votre projet. Le ma\u00eetre d'\u0153uvre pilote la r\u00e9alisation&nbsp;: il coordonne les entreprises, \u00e9tablit les plans d'ex\u00e9cution, ma\u00eetrise le budget et suit le chantier jusqu'\u00e0 la r\u00e9ception. Au Cabinet Jacquet &amp; Meermans, nous assurons la ma\u00eetrise d'\u0153uvre compl\u00e8te de votre chalet, de l'esquisse \u00e0 la remise des cl\u00e9s.<\/p><\/div>\n      <\/div>\n\n      <div class=\"cjm-faq__item\">\n        <button class=\"cjm-faq__q\" aria-expanded=\"false\"><span>Dans quelles communes intervenez-vous&nbsp;?<\/span><span class=\"cjm-faq__ico\" aria-hidden=\"true\"><\/span><\/button>\n        <div class=\"cjm-faq__a\"><p>Bas\u00e9s aux Contamines-Montjoie, nous intervenons dans toutes les communes du Pays du Mont-Blanc, et plus largement en Haute-Savoie jusqu'\u00e0 Gen\u00e8ve selon les projets.<\/p><\/div>\n      <\/div>\n\n      <div class=\"cjm-faq__item\">\n        <button class=\"cjm-faq__q\" aria-expanded=\"false\"><span>Combien co\u00fbte la construction ou la r\u00e9novation d'un chalet&nbsp;?<\/span><span class=\"cjm-faq__ico\" aria-hidden=\"true\"><\/span><\/button>\n        <div class=\"cjm-faq__a\"><p>Il n'existe pas de prix unique. Le co\u00fbt d\u00e9pend de la conception, de la surface, des choix constructifs, du niveau de finition et de votre budget. En r\u00e9novation, l'\u00e9tat du b\u00e2ti (fondations, structure, isolation, mises aux normes) peut conduire \u00e0 un co\u00fbt <strong>sup\u00e9rieur \u00e0 celui d'une construction neuve<\/strong>. Notre m\u00e9tier d'\u00e9conomiste de la construction est au c\u0153ur de la mission&nbsp;: nous estimons une enveloppe globale d\u00e8s les premi\u00e8res \u00e9tudes puis l'affinons au fil de la conception, pour arr\u00eater un <strong>budget r\u00e9aliste et ma\u00eetris\u00e9<\/strong> avant le d\u00e9marrage des travaux.<\/p><\/div>\n      <\/div>\n\n      <div class=\"cjm-faq__item\">\n        <button class=\"cjm-faq__q\" aria-expanded=\"false\"><span>Quel est le d\u00e9lai pour obtenir un permis de construire&nbsp;?<\/span><span class=\"cjm-faq__ico\" aria-hidden=\"true\"><\/span><\/button>\n        <div class=\"cjm-faq__a\"><p>En moyenne <strong>4 \u00e0 6 mois<\/strong> selon la nature du projet, la commune et les contraintes urbanistiques. Nous travaillons avec les architectes d\u00e8s les premi\u00e8res \u00e9tudes et l'APS pour int\u00e9grer d'embl\u00e9e les contraintes r\u00e9glementaires, techniques et budg\u00e9taires. Ancienne instructrice du droit des sols, Claire s\u00e9curise la faisabilit\u00e9 du dossier avant d\u00e9p\u00f4t, et nous accompagnons le suivi jusqu'\u00e0 l'obtention.<\/p><\/div>\n      <\/div>\n\n      <div class=\"cjm-faq__item\">\n        <button class=\"cjm-faq__q\" aria-expanded=\"false\"><span>R\u00e9alisez-vous des r\u00e9novations et des extensions&nbsp;?<\/span><span class=\"cjm-faq__ico\" aria-hidden=\"true\"><\/span><\/button>\n        <div class=\"cjm-faq__a\"><p>Oui. Nous concevons et pilotons construction neuve, r\u00e9novation et extension de chalets. Chaque op\u00e9ration est \u00e9tudi\u00e9e dans sa globalit\u00e9&nbsp;: architecture, contraintes techniques, terrain, performances, budget. Bois, pierre, tavaillons ou mat\u00e9riaux contemporains sont retenus selon le caract\u00e8re du projet.<\/p><\/div>\n      <\/div>\n\n      <div class=\"cjm-faq__item\">\n        <button class=\"cjm-faq__q\" aria-expanded=\"false\"><span>Qu'est-ce qu'un \u00e9conomiste de la construction&nbsp;?<\/span><span class=\"cjm-faq__ico\" aria-hidden=\"true\"><\/span><\/button>\n        <div class=\"cjm-faq__a\"><p>Il ma\u00eetrise le co\u00fbt du projet \u00e0 chaque \u00e9tape&nbsp;: estimation, quantification, consultation des entreprises, analyse des offres, suivi financier. Nous assurons cette mission en interne, de la faisabilit\u00e9 \u00e0 la r\u00e9ception, pour garder la coh\u00e9rence entre conception, choix techniques et budget.<\/p><\/div>\n      <\/div>\n\n      <div class=\"cjm-faq__item\">\n        <button class=\"cjm-faq__q\" aria-expanded=\"false\"><span>Proposez-vous une prestation de conciergerie&nbsp;?<\/span><span class=\"cjm-faq__ico\" aria-hidden=\"true\"><\/span><\/button>\n        <div class=\"cjm-faq__a\"><p>Notre c\u0153ur de m\u00e9tier reste la ma\u00eetrise d'\u0153uvre et l'\u00e9conomie de la construction. \u00c0 l'issue des chantiers, nombreux sont les clients qui nous demandent de poursuivre l'accompagnement, notamment pour la gestion et le rendement locatif de leur chalet. Nous avons donc cr\u00e9\u00e9 un service de conciergerie d\u00e9di\u00e9 exclusivement \u00e0 notre client\u00e8le, pr\u00e9sent bien au-del\u00e0 de la livraison.<\/p><\/div>\n      <\/div>\n\n      <div class=\"cjm-faq__item\">\n        <button class=\"cjm-faq__q\" aria-expanded=\"false\"><span>Quels mat\u00e9riaux privil\u00e9giez-vous pour un chalet de montagne&nbsp;?<\/span><span class=\"cjm-faq__ico\" aria-hidden=\"true\"><\/span><\/button>\n        <div class=\"cjm-faq__a\"><p>Aucun par principe&nbsp;: chaque choix r\u00e9sulte des souhaits du ma\u00eetre d'ouvrage, de l'architecture du projet et des contraintes techniques du site. Essences de bois, pierre, couvertures, isolants et parements sont s\u00e9lectionn\u00e9s selon leur usage, leur exposition, leur durabilit\u00e9, leur entretien et le niveau de finition recherch\u00e9.<\/p><\/div>\n      <\/div>\n\n    <\/div>\n  <\/div>\n<\/section>\n\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:wght@400;500&display=swap');\n@import url('https:\/\/fonts.cdnfonts.com\/css\/nimbus-sans');\n\n.cjm-faq{ display:flex; align-items:flex-start; background:#ffffff; color:#1a1a1a;\n  font-family:'Nimbus Sans',system-ui,sans-serif; overflow:hidden; margin:60px 0 40px; }\n\n\/* image fig\u00e9e \u00e0 sa taille d'origine (ajuste 940px si besoin) *\/\n.cjm-faq__media{ flex:0 0 46%; height:940px; background-size:cover; background-position:center; background-repeat:no-repeat; }\n\n.cjm-faq__panel{ flex:1; min-width:0; padding:115px 6vw 20px 5vw; max-width:760px; }\n.cjm-faq__title{ font-family:'Cormorant Garamond',Georgia,serif !important; font-weight:400 !important;\n  font-size:clamp(40px,4.5vw,64px) !important; color:#1a1a1a !important; line-height:1 !important; margin:0 0 22px !important; letter-spacing:0 !important; }\n.cjm-faq__intro{ font-size:16px; line-height:1.7; color:#6b6459; max-width:560px; margin:0 0 34px; }\n\n.cjm-faq__item{ border-top:1px solid rgba(26,26,26,.12); }\n.cjm-faq__item:last-child{ border-bottom:1px solid rgba(26,26,26,.12); }\n.cjm-faq .cjm-faq__q{ position:relative; display:block !important; width:100% !important; max-width:100% !important; box-sizing:border-box !important;\n  white-space:normal !important; background:none; border:0; cursor:pointer; text-align:left;\n  padding:24px 40px 24px 2px;\n  font-family:'Nimbus Sans',system-ui,sans-serif; font-size:15.5px; line-height:1.45; color:#3a3a3a; letter-spacing:.01em;\n  transition:color .25s ease; -webkit-tap-highlight-color:transparent; }\n.cjm-faq__q:hover{ color:#1a1a1a; }\nbutton.cjm-faq__q,button.cjm-faq__q:hover,button.cjm-faq__q:focus,button.cjm-faq__q:active,button.cjm-faq__q:focus-visible{ background:transparent !important; background-color:transparent !important; box-shadow:none !important; outline:none !important; transform:none !important; -webkit-tap-highlight-color:rgba(0,0,0,0) !important; }\n.cjm-faq .cjm-faq__q>span:first-child,.cjm-faq .cjm-faq__q>span:not(.cjm-faq__ico){ display:block !important; max-width:100% !important; white-space:normal !important; overflow-wrap:break-word !important; word-break:break-word !important; hyphens:auto; }\n.cjm-faq__ico{ position:absolute; right:2px; top:27px; width:15px; height:15px; }\n.cjm-faq__ico::before,.cjm-faq__ico::after{ content:''; position:absolute; background:#1a1a1a; transition:opacity .3s ease,transform .3s ease; }\n.cjm-faq__ico::before{ top:50%; left:0; width:15px; height:1px; transform:translateY(-50%); }\n.cjm-faq__ico::after{ left:50%; top:0; width:1px; height:15px; transform:translateX(-50%); }\n.cjm-faq__q[aria-expanded=\"true\"] .cjm-faq__ico::after{ opacity:0; transform:translateX(-50%) rotate(90deg); }\n\n.cjm-faq__a{ overflow:hidden; max-height:0; transition:max-height .4s ease; }\n.cjm-faq__a p{ font-size:14.5px; line-height:1.75; color:#6b6459; margin:0; padding:0 2px 28px; max-width:620px; }\n.cjm-faq__a strong{ color:#1a1a1a; font-weight:600; }\n\n@media (max-width:900px){\n  .cjm-faq{ flex-direction:column-reverse; margin:17px 0 26px; }\n  .cjm-faq__media{ flex:none; width:100%; height:auto; min-height:44vh; }\n  .cjm-faq__panel{ padding:56px 22px; max-width:none; }\n  .cjm-faq__q{ font-size:15px; padding:22px 38px 22px 2px; }\n  .cjm-faq__ico{ top:25px; }\n  .cjm-faq__title{ font-size:clamp(34px,9vw,48px) !important; }\n}\n.cjm-faq, .cjm-faq *{ box-sizing:border-box; }\n.cjm-faq__list, .cjm-faq__item{ min-width:0 !important; max-width:100% !important; }\n\/* Fix : masque l'espace vide en dessous du dernier item (min-height r\u00e9serv\u00e9) *\/\n.cjm-faq__list{ display:flex; flex-direction:column; background:#ffffff; }\n.cjm-faq__item{ flex:0 0 auto; background:#ffffff; }\n.cjm-faq__list::after{ content:''; flex:1 1 auto; background:#ffffff; }\n<\/style>\n\n<script>\n(function(){\n  \/* Marge du bas : monte TRIM pour la r\u00e9duire (px retir\u00e9s \u00e0 la r\u00e9serve).\n     Au-del\u00e0 de la hauteur de la plus longue r\u00e9ponse, cette seule r\u00e9ponse\n     poussera l\u00e9g\u00e8rement le bloc du dessous \u00e0 l'ouverture. *\/\n  var TRIM = 60;\n\n  var faq   = document.querySelector('.cjm-faq');\n  if(!faq) return;\n  var btns  = faq.querySelectorAll('.cjm-faq__q');\n  var list  = faq.querySelector('.cjm-faq__list');\n  var items = faq.querySelectorAll('.cjm-faq__item');\n\n  function setOpen(btn, open){\n    var p = btn.nextElementSibling;\n    btn.setAttribute('aria-expanded', open ? 'true' : 'false');\n    p.style.maxHeight = open ? (p.scrollHeight + 'px') : null;\n  }\n\n  \/\/ Un seul volet ouvert \u00e0 la fois\n  btns.forEach(function(btn){\n    btn.addEventListener('click', function(){\n      var willOpen = btn.getAttribute('aria-expanded') !== 'true';\n      btns.forEach(function(b){ if(b !== btn) setOpen(b, false); });\n      setOpen(btn, willOpen);\n    });\n  });\n\n  \/* R\u00e9serve = (questions ferm\u00e9es) + (plus longue r\u00e9ponse \u2212 TRIM). Fig\u00e9e une fois. *\/\n  function reserve(){\n    if(!list) return;\n    if(window.innerWidth <= 900){ list.style.minHeight = ''; return; }  \/\/ mobile : flux normal\n\n    var openBtn = null;\n    btns.forEach(function(b){ if(b.getAttribute('aria-expanded') === 'true') openBtn = b; });\n\n    var answers = faq.querySelectorAll('.cjm-faq__a');\n    answers.forEach(function(a){ a.style.maxHeight = null; });          \/\/ tout ferm\u00e9 pour mesurer\n\n    var closed = 0;\n    items.forEach(function(it){ closed += it.getBoundingClientRect().height; });\n    var tallest = 0;\n    answers.forEach(function(a){ if(a.scrollHeight > tallest) tallest = a.scrollHeight; });\n\n    var space = tallest - TRIM; if(space < 0) space = 0;\n    list.style.minHeight = (closed + space) + 'px';\n\n    if(openBtn){ var p = openBtn.nextElementSibling; p.style.maxHeight = p.scrollHeight + 'px'; }\n  }\n\n  if(document.fonts && document.fonts.ready){ document.fonts.ready.then(reserve); }\n  else { window.addEventListener('load', reserve); }\n  var rz; window.addEventListener('resize', function(){ clearTimeout(rz); rz = setTimeout(reserve, 250); });\n})();\n<\/script>\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    { \"@type\":\"Question\", \"name\":\"Quelle est la diff\u00e9rence entre un architecte et un ma\u00eetre d'\u0153uvre ?\", \"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"L'architecte d\u00e9pose le permis de construire. Le Cabinet Jacquet & Meermans travaille avec plusieurs cabinets d'architecture selon le projet. Le ma\u00eetre d'\u0153uvre pilote la r\u00e9alisation : coordination des entreprises, plans d'ex\u00e9cution, ma\u00eetrise du budget et suivi du chantier jusqu'\u00e0 la r\u00e9ception. Le cabinet assure la ma\u00eetrise d'\u0153uvre compl\u00e8te du chalet, de l'esquisse \u00e0 la remise des cl\u00e9s.\"}},\n    { \"@type\":\"Question\", \"name\":\"Dans quelles communes intervient le Cabinet Jacquet & Meermans ?\", \"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Bas\u00e9s aux Contamines-Montjoie, nous intervenons dans toutes les communes du Pays du Mont-Blanc et plus largement en Haute-Savoie jusqu'\u00e0 Gen\u00e8ve selon les projets.\"}},\n    { \"@type\":\"Question\", \"name\":\"Combien co\u00fbte la construction ou la r\u00e9novation d'un chalet au Pays du Mont-Blanc ?\", \"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Il n'existe pas de prix unique. Le co\u00fbt d\u00e9pend de la conception, de la surface, des choix constructifs, du niveau de finition et du budget. En r\u00e9novation, l'\u00e9tat du b\u00e2ti (fondations, structure, isolation, mises aux normes) peut conduire \u00e0 un co\u00fbt sup\u00e9rieur \u00e0 celui d'une construction neuve. Le Cabinet Jacquet & Meermans, \u00e9conomiste de la construction, estime une enveloppe globale d\u00e8s les premi\u00e8res \u00e9tudes puis l'affine tout au long de la conception pour arr\u00eater un budget r\u00e9aliste et ma\u00eetris\u00e9 avant le d\u00e9marrage des travaux.\"}},\n    { \"@type\":\"Question\", \"name\":\"Quel est le d\u00e9lai pour obtenir un permis de construire ?\", \"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"En moyenne 4 \u00e0 6 mois selon la nature du projet, la commune et les contraintes urbanistiques. Le Cabinet travaille avec les architectes d\u00e8s l'APS pour int\u00e9grer les contraintes r\u00e9glementaires. Ancienne instructrice du droit des sols, Claire s\u00e9curise la faisabilit\u00e9 du dossier avant d\u00e9p\u00f4t et accompagne le suivi jusqu'\u00e0 l'obtention.\"}},\n    { \"@type\":\"Question\", \"name\":\"R\u00e9alisez-vous des r\u00e9novations et des extensions ?\", \"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Oui. Nous concevons et pilotons des constructions neuves, des r\u00e9novations et des extensions de chalets, en pr\u00e9servant le caract\u00e8re du b\u00e2ti existant : vieux bois, pierre, toitures en lauze ou tavaillons.\"}},\n    { \"@type\":\"Question\", \"name\":\"Qu'est-ce qu'un \u00e9conomiste de la construction ?\", \"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"C'est l'expert qui chiffre pr\u00e9cis\u00e9ment le projet : devis quantitatifs, estimation des co\u00fbts et ma\u00eetrise du budget, du premier estimatif \u00e0 la livraison. Le cabinet assure cette mission en interne.\"}},\n    { \"@type\":\"Question\", \"name\":\"Proposez-vous une prestation de conciergerie ?\", \"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Le c\u0153ur de m\u00e9tier reste la ma\u00eetrise d'\u0153uvre et l'\u00e9conomie de la construction. Nombreux clients demandent la poursuite de l'accompagnement apr\u00e8s chantier, notamment pour la gestion et le rendement locatif. Le cabinet a donc cr\u00e9\u00e9 un service de conciergerie d\u00e9di\u00e9 exclusivement \u00e0 sa client\u00e8le, pr\u00e9sent bien au-del\u00e0 de la livraison.\"}},\n    { \"@type\":\"Question\", \"name\":\"Quels mat\u00e9riaux privil\u00e9giez-vous pour un chalet de montagne ?\", \"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Aucun par principe : chaque choix r\u00e9sulte des souhaits du ma\u00eetre d'ouvrage, de l'architecture du projet et des contraintes techniques du site. Essences de bois, pierre, couvertures, isolants et parements sont s\u00e9lectionn\u00e9s selon leur usage, leur exposition, leur durabilit\u00e9, leur entretien et le niveau de finition recherch\u00e9.\"}}\n  ]\n}\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-637e959e elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"637e959e\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3b8a2870\" data-id=\"3b8a2870\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-417841d0 elementor-widget elementor-widget-html\" data-id=\"417841d0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!--\n============================================================================\n  BLOC CTA \u2014 Parlons de votre projet autour du Mont-Blanc\n  Cabinet Jacquet & Meermans\n----------------------------------------------------------------------------\n  \u26a1 LIEN DE REDIRECTION DU BOUTON \"Nous contacter\"\n  -> Modifier href ci-dessous pour pointer vers la page contact\n============================================================================\n-->\n<a class=\"cjm-cta-redirect\" href=\"\/contact\" data-cjm-cta-href=\"\/contact\" hidden aria-hidden=\"true\"><\/a>\n<!--\n  \u26a1 Pour modifier l'URL du bouton : remplacer \"\/contact\" ci-dessus\n     (ex: https:\/\/www.cabinet-jm.com\/contact). Le JS l'applique au bouton.\n     Vous pouvez aussi \u00e9diter le href du bouton directement dans <a class=\"cjm-cta-block__btn\"...>.\n============================================================================\n-->\n\n<section class=\"cjm-cta-block\" aria-labelledby=\"cjm-cta-title\">\n\n  <!-- ===== FOND 1 : motif fondbois, pleine largeur \u00e9cran ===== -->\n  <div class=\"cjm-cta-block__pattern\" aria-hidden=\"true\"><\/div>\n\n  <!-- ===== FOND 2 : carr\u00e9 blanc derri\u00e8re le texte ===== -->\n  <div class=\"cjm-cta-block__card\">\n    <h2 class=\"cjm-cta-block__title\" id=\"cjm-cta-title\" data-reveal data-reveal-delay=\"0\">\n      Parlons de votre projet autour du Mont-Blanc\n    <\/h2>\n\n    <p class=\"cjm-cta-block__lead\" data-reveal data-reveal-delay=\"1\">\n      Construction, r\u00e9novation ou extension : le <strong>Cabinet Jacquet &amp; Meermans<\/strong> vous accompagne\n      avec des artisans locaux et savoyards, de la premi\u00e8re id\u00e9e \u00e0 la r\u00e9ception du chantier.\n    <\/p>\n\n    <div class=\"cjm-cta-block__cta\" data-reveal data-reveal-delay=\"2\">\n      <a class=\"cjm-cta-block__btn cjm-cta-link\" href=\"\/contact\">Nous contacter<\/a>\n    <\/div>\n  <\/div>\n\n<\/section>\n\n<style>\n\/* ============================================================\n   IMPORTS FONTS\n   ============================================================ *\/\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Mulish:wght@400;500;600;700;800&display=swap');\n@import url('https:\/\/fonts.cdnfonts.com\/css\/nimbus-sans');\n\n\/* ============================================================\n   CHARTE + RESET D\u00c9FENSIF\n   ============================================================ *\/\n.cjm-cta-block {\n  --cjm-cta-white:   #ffffff;\n  --cjm-cta-text:    #1a1a1a;\n  --cjm-cta-soft:    #4a4a4a;\n  --cjm-cta-accent:  #998872;\n}\n.cjm-cta-block,\n.cjm-cta-block * { box-sizing: border-box; }\n.cjm-cta-block,\n.cjm-cta-block *,\n.cjm-cta-block *::before,\n.cjm-cta-block *::after {\n  border: 0; outline: 0; box-shadow: none;\n}\n.cjm-cta-redirect { display: none !important; }\n\n\/* ============================================================\n   SECTION \u2014 fond blanc, PLEINE LARGEUR \u00c9CRAN\n   (sort du content_width Elementor via le trick 100vw)\n   ============================================================ *\/\n.cjm-cta-block {\n  position: relative;\n  width: 100vw;\n  left: 50%;\n  right: 50%;\n  margin-top: 90px;\n  margin-bottom: 90px;\n  margin-left: -50vw;\n  margin-right: -50vw;\n  background: var(--cjm-cta-white);\n  font-family: 'Nimbus Sans', 'Mulish', system-ui, -apple-system, Segoe UI, sans-serif;\n  color: var(--cjm-cta-text);\n  \/* marges cr\u00e8me\/blanches haut & bas (zone hors motif) *\/\n  padding: 80px 0;\n  display: grid;\n  place-items: center;\n  isolation: isolate;\n}\n\n\/* ============================================================\n   FOND 1 \u2014 MOTIF FONDBOIS (bande pleine largeur)\n   ============================================================ *\/\n.cjm-cta-block__pattern {\n  position: absolute;\n  inset: 0;\n  width: 100%;\n  height: 100%;\n  background-size: 100% 100%;\n  background-position: center;\n  background-repeat: no-repeat;\n  mix-blend-mode: multiply;\n  background-image: url('https:\/\/chezedgar.org\/wp-content\/uploads\/2026\/06\/fondvecteurbois.png');\n  background-repeat: no-repeat;\n  background-position: center center;\n  background-size: cover;\n  z-index: 0;\n  pointer-events: none;\n}\n\n\/* ============================================================\n   FOND 2 \u2014 CARR\u00c9 BLANC derri\u00e8re le texte\n   ============================================================ *\/\n.cjm-cta-block__card {\n  position: relative;\n  z-index: 2;\n  justify-self: center;\n  align-self: center;\n  background: var(--cjm-cta-white);\n  width: min(940px, calc(100% - 48px));\n  padding: 90px 96px;\n  text-align: center;\n}\n\n\/* ============================================================\n   CONTENU\n   ============================================================ *\/\n.cjm-cta-block .cjm-cta-block__title {\n  font-family: 'Halcom', 'Mulish', 'Manrope', 'Inter', sans-serif !important;\n  font-weight: 500 !important;            \/* Halcom Medium *\/\n  font-style: normal !important;\n  font-size: clamp(30px, 3.0vw, 44px) !important;\n  line-height: 1.2 !important;\n  letter-spacing: 0 !important;\n  text-transform: none !important;\n  color: var(--cjm-cta-accent) !important;\n  margin: 0 0 30px !important;\n}\n\n.cjm-cta-block__lead {\n  font-family: 'Nimbus Sans', 'Mulish', system-ui, sans-serif;\n  font-size: clamp(14px, 1vw, 16px);\n  line-height: 1.75;\n  color: var(--cjm-cta-text);\n  margin: 0 auto 52px;\n  max-width: 600px;\n}\n.cjm-cta-block__lead strong {\n  font-weight: 700;\n  color: var(--cjm-cta-text);\n}\n\n\/* ============================================================\n   BOUTON \/ LIEN \u2014 underline anim\u00e9 droite-gauche\n   ============================================================ *\/\n.cjm-cta-block__cta { margin-top: 4px; }\n\n.cjm-cta-link {\n  display: inline-block;\n  position: relative;\n  font-family: 'Nimbus Sans', 'Mulish', system-ui, sans-serif;\n  font-size: 15px;\n  font-weight: 600;\n  letter-spacing: 0.02em;\n  text-decoration: none !important;\n  padding-bottom: 8px;\n  overflow: hidden;\n  cursor: pointer;\n}\n.cjm-cta-link,\n.cjm-cta-link:link,\n.cjm-cta-link:visited,\n.cjm-cta-link:active { color: var(--cjm-cta-text) !important; }\n.cjm-cta-link:hover,\n.cjm-cta-link:focus { color: var(--cjm-cta-accent) !important; }\n.cjm-cta-link::before,\n.cjm-cta-link::after {\n  content: '';\n  position: absolute;\n  left: 0; bottom: 0;\n  width: 100%; height: 1px;\n  background: currentColor;\n  transition: transform 0.5s cubic-bezier(0.76, 0, 0.24, 1);\n}\n.cjm-cta-link::before { transform: scaleX(1); transform-origin: left; }\n.cjm-cta-link::after  { transform: scaleX(0); transform-origin: right; }\n.cjm-cta-link:hover::before,\n.cjm-cta-link:focus::before { transform: scaleX(0); }\n.cjm-cta-link:hover::after,\n.cjm-cta-link:focus::after  { transform: scaleX(1); transition-delay: 0.25s; }\n\n\/* ============================================================\n   ANIMATIONS D'ENTR\u00c9E AU SCROLL\n   ============================================================ *\/\n.cjm-cta-block [data-reveal] {\n  opacity: 0;\n  transform: translateY(18px);\n  transition:\n    opacity 0.8s cubic-bezier(0.22, 0.61, 0.36, 1),\n    transform 0.8s cubic-bezier(0.22, 0.61, 0.36, 1);\n}\n.cjm-cta-block.is-visible [data-reveal] {\n  opacity: 1;\n  transform: translateY(0);\n}\n.cjm-cta-block.is-visible [data-reveal-delay=\"0\"] { transition-delay: 0.05s; }\n.cjm-cta-block.is-visible [data-reveal-delay=\"1\"] { transition-delay: 0.20s; }\n.cjm-cta-block.is-visible [data-reveal-delay=\"2\"] { transition-delay: 0.40s; }\n\n\/* ============================================================\n   RESPONSIVE\n   ============================================================ *\/\n@media (max-width: 1100px) {\n  .cjm-cta-block { padding: 90px 0; }\n  \n  .cjm-cta-block__card {\n    width: min(820px, calc(100% - 40px));\n    padding: 70px 64px;\n  }\n}\n\n@media (max-width: 700px) {\n  .cjm-cta-block {\n    padding: 50px 0;\n    margin-top: 10px !important;   \/* rapprocher du bloc au-dessus *\/\n    margin-bottom: 48px !important;\n  }\n  .cjm-cta-block__card {\n    width: calc(100% - 60px);\n    padding: 60px 20px 30px;       \/* plus de padding-top = contenu plus bas *\/\n  }\n  .cjm-cta-block__title {\n    font-size: clamp(22px, 6vw, 28px);\n    margin-bottom: 16px;\n  }\n  .cjm-cta-block__lead {\n    font-size: 13px;\n    margin-bottom: 24px;\n    max-width: 100%;\n  }\n  .cjm-cta-link { font-size: 13px; }\n}\n\n@media (max-width: 1100px){ .cjm-cta-block { margin-top: 64px; margin-bottom: 64px; } }\n\n\/* ============================================================\n   DESKTOP UNIQUEMENT \u2014 marge du haut r\u00e9duite (~1\/3 de l'origine)\n   pour rapprocher ce bloc de la FAQ au-dessus.\n   N'affecte NI la tablette (64px) NI le mobile (10px).\n   Ajuste le 30px si besoin.\n   ============================================================ *\/\n@media (min-width: 1101px) {\n  .cjm-cta-block { margin-top: 15px; }\n}\n<\/style>\n\n<script>\n(function () {\n  function attach(block) {\n    if (block.dataset.cjmCtaInit === '1') return;\n    block.dataset.cjmCtaInit = '1';\n\n    \/\/ R\u00e9cup\u00e8re le lien de redirection \u00e9ditable (haut du HTML) et l'applique au bouton\n    var redirect = null;\n    var prev = block.previousElementSibling;\n    while (prev) {\n      if (prev.classList && prev.classList.contains('cjm-cta-redirect')) { redirect = prev; break; }\n      prev = prev.previousElementSibling;\n    }\n    if (!redirect && block.parentNode) {\n      redirect = block.parentNode.querySelector('.cjm-cta-redirect[data-cjm-cta-href]');\n    }\n    if (redirect) {\n      var url = redirect.getAttribute('data-cjm-cta-href') || redirect.getAttribute('href');\n      if (url) {\n        var btn = block.querySelector('.cjm-cta-block__btn');\n        if (btn) btn.setAttribute('href', url);\n      }\n    }\n\n    \/\/ Scroll reveal\n    if ('IntersectionObserver' in window) {\n      var io = new IntersectionObserver(function (entries) {\n        entries.forEach(function (e) {\n          if (e.isIntersecting) {\n            block.classList.add('is-visible');\n            io.unobserve(block);\n          }\n        });\n      }, { threshold: 0.2, rootMargin: '0px 0px -10% 0px' });\n      io.observe(block);\n    } else {\n      block.classList.add('is-visible');\n    }\n  }\n\n  function init() {\n    document.querySelectorAll('.cjm-cta-block').forEach(attach);\n  }\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else { init(); }\n  window.addEventListener('load', function () { setTimeout(init, 50); });\n  if (typeof MutationObserver !== 'undefined') {\n    var mo = new MutationObserver(function () { init(); });\n    mo.observe(document.body || document.documentElement, { childList: true, subtree: true });\n  }\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-3ece702b elementor-section-stretched elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3ece702b\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-51c31844\" data-id=\"51c31844\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-361f0842 elementor-widget elementor-widget-html\" data-id=\"361f0842\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- =====================================================================\n     NOUS SUIVRE \u00b7 Cabinet Jacquet & Meermans\n     ---------------------------------------------------------------------\n     >>> \u00c9DITER LES URLs ICI <<<\n     ---------------------------------------------------------------------\n     Correctif tactile : distinction scroll vertical (page) \/ drag\n     horizontal (galerie). Le reste du bloc est inchang\u00e9.\n===================================================================== -->\n<section class=\"cjm-ns\">\n\n  <!-- \u2500\u2500 Header : nous suivre \u2500\u2500 -->\n  <div class=\"cjm-ns__header\">\n    <p class=\"cjm-ns__eyebrow\">NOUS SUIVRE<\/p>\n    <div class=\"cjm-ns__handles\">\n      <a class=\"cjm-ns__handle\" href=\"https:\/\/www.instagram.com\/maitrise.doeuvre.du.montblanc\/\" target=\"_blank\" rel=\"noopener\">@instagram<\/a>\n      <span class=\"cjm-ns__sep\" aria-hidden=\"true\">\u00b7<\/span>\n      <a class=\"cjm-ns__handle\" href=\"https:\/\/www.linkedin.com\/company\/cabinet-jacquet-andru\/\" target=\"_blank\" rel=\"noopener\">@linkedin<\/a>\n      <span class=\"cjm-ns__sep\" aria-hidden=\"true\">\u00b7<\/span>\n      <a class=\"cjm-ns__handle\" href=\"https:\/\/www.facebook.com\/maitrise.oeuvre.montblanc\" target=\"_blank\" rel=\"noopener\">@facebook<\/a>\n    <\/div>\n  <\/div>\n\n  <!-- \u2500\u2500 Galerie d\u00e9filante \u2500\u2500 -->\n  <div class=\"cjm-ns__carousel\">\n    <button class=\"cjm-ns__arrow cjm-ns__arrow--prev\" id=\"cjm-ns-prev\" aria-label=\"Pr\u00e9c\u00e9dent\">\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"15 18 9 12 15 6\"><\/polyline><\/svg>\n    <\/button>\n    <button class=\"cjm-ns__arrow cjm-ns__arrow--next\" id=\"cjm-ns-next\" aria-label=\"Suivant\">\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"9 18 15 12 9 6\"><\/polyline><\/svg>\n    <\/button>\n  <div class=\"cjm-ns__gallery-wrap\" id=\"cjm-ns-wrap\">\n    <div class=\"cjm-ns__gallery\" id=\"cjm-ns-gallery\">\n      <!-- Images \u2014 remplace les src par tes URLs -->\n      <div class=\"cjm-ns__item\"><img decoding=\"async\" src=\"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/salon-baies-vitrees-panoramiques-vue-massif-mont-blanc-chalet-chamonix-mont-blanc.jpg\" alt=\"\" loading=\"lazy\"><\/div>\n      <div class=\"cjm-ns__item\"><img decoding=\"async\" src=\"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/0011_piece-de-vie-cheminee-centrale-vieux-bois-table-banquets-parquet-chevrons-ferme-renovation-samoens.jpg\" alt=\"\" loading=\"lazy\"><\/div>\n      <div class=\"cjm-ns__item\"><img decoding=\"async\" src=\"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/mezzanine-cosy-charpente-apparente-pouf-vue-panoramique-chalet-saint-gervais-haute-savoie.jpg\" alt=\"\" loading=\"lazy\"><\/div>\n      <div class=\"cjm-ns__item\"><img decoding=\"async\" src=\"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/salon-cheminee-suspendue-chaise-longue-lc4-vue-panoramique-chalet-saint-gervais-mont-blanc.jpg\" alt=\"\" loading=\"lazy\"><\/div>\n      <div class=\"cjm-ns__item\"><img decoding=\"async\" src=\"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/0001_vestiaire-skis-placards-bois-fonce-banc-bois-massif-ferme-renovation-samoens.jpg\" alt=\"\" loading=\"lazy\"><\/div>\n      <div class=\"cjm-ns__item\"><img decoding=\"async\" src=\"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/chambre-vieux-bois-chaise-terracotta-vue-aiguilles-chalet-saint-gervais-haute-savoie.jpg\" alt=\"\" loading=\"lazy\"><\/div>\n    <\/div>\n  <\/div>\n  <\/div>\n\n<\/section>\n\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:wght@300;400;500&display=swap');\n@import url('https:\/\/fonts.cdnfonts.com\/css\/nimbus-sans');\n\n.cjm-ns, .cjm-ns * { box-sizing: border-box; margin: 0; padding: 0; }\n\n.cjm-ns {\n  width: 100%;\n  background: #ffffff;\n  font-family: 'Nimbus Sans', system-ui, sans-serif;\n  -webkit-font-smoothing: antialiased;\n  padding: 72px 0 80px;\n}\n\n\/* \u2500\u2500 Header \u2500\u2500 *\/\n.cjm-ns__header {\n  text-align: center;\n  padding: 0 24px 56px;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 20px;\n}\n\n.cjm-ns__eyebrow {\n  font-family: 'Nimbus Sans', system-ui, sans-serif !important;\n  font-size: 11px !important;\n  font-weight: 500 !important;\n  letter-spacing: 0.28em !important;\n  text-transform: uppercase !important;\n  color: #1a1a1a !important;\n}\n\n.cjm-ns__handles {\n  display: flex;\n  align-items: center;\n  gap: 20px;\n  flex-wrap: wrap;\n  justify-content: center;\n}\n\n.cjm-ns__handle {\n  font-family: 'Cormorant Garamond', Georgia, serif !important;\n  font-size: clamp(28px, 3.5vw, 52px) !important;\n  font-weight: 400 !important;\n  color: #1a1a1a !important;\n  text-decoration: none !important;\n  letter-spacing: -0.01em !important;\n  transition: color 0.3s ease !important;\n  line-height: 1 !important;\n}\n.cjm-ns__handle:hover { color: #998872 !important; }\n\n.cjm-ns__sep {\n  font-family: 'Cormorant Garamond', Georgia, serif !important;\n  font-size: clamp(28px, 3.5vw, 52px) !important;\n  color: #d6cfc1 !important;\n  line-height: 1;\n}\n\n\/* \u2500\u2500 Galerie \u2500\u2500 *\/\n.cjm-ns__gallery-wrap {\n  width: 100%;\n  overflow: hidden;\n  cursor: grab;\n  user-select: none;\n  -webkit-user-select: none;\n}\n.cjm-ns__gallery-wrap.is-dragging { cursor: grabbing; }\n\n.cjm-ns__gallery {\n  display: flex;\n  gap: 6px;\n  will-change: transform;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n\n.cjm-ns__item {\n  flex-shrink: 0;\n  width: calc((100% - 5 * 6px) \/ 4);\n  overflow: hidden;\n}\n\n.cjm-ns__item img {\n  display: block;\n  width: 100%;\n  aspect-ratio: 1 \/ 1;\n  object-fit: cover;\n  pointer-events: none;\n  transition: transform 0.6s cubic-bezier(0.22, 1, 0.36, 1);\n  -webkit-user-drag: none;\n}\n.cjm-ns__item:hover img { transform: scale(1.04); }\n\n\/* \u2500\u2500 Carousel wrapper \u2500\u2500 *\/\n.cjm-ns__carousel {\n  position: relative;\n  width: 100%;\n}\n\n\/* \u2500\u2500 Boutons navigation \u2500\u2500 *\/\n.cjm-ns__arrow {\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n  z-index: 10;\n  width: 56px;\n  height: 56px;\n  border-radius: 50%;\n  background: rgba(0,0,0,0.82);\n  border: none !important;\n  box-shadow: 0 4px 12px rgba(0,0,0,0.25);\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity 0.3s ease, transform 0.3s ease, background 0.3s ease;\n  outline: none;\n}\n.cjm-ns__arrow.is-visible {\n  opacity: 1;\n  pointer-events: auto;\n}\n.cjm-ns__arrow svg {\n  width: 20px;\n  height: 20px;\n  stroke: #ffffff;\n  display: block;\n}\n.cjm-ns__arrow--prev { left: 16px; }\n.cjm-ns__arrow--next { right: 16px; }\n\n.cjm-ns__arrow:hover {\n  background: #998872;\n  transform: translateY(-50%) scale(1.08);\n}\n.cjm-ns__arrow:active {\n  transform: translateY(-50%) scale(0.96);\n}\n.cjm-ns__arrow:focus-visible {\n  outline: 2px solid #998872;\n  outline-offset: 2px;\n}\n\n@media (max-width: 768px) {\n  .cjm-ns__arrow { width: 44px; height: 44px; }\n  .cjm-ns__arrow--prev { left: 8px; }\n  .cjm-ns__arrow--next { right: 8px; }\n  .cjm-ns__arrow svg { width: 16px; height: 16px; }\n}\n\n\/* \u2500\u2500 Mobile \u2500\u2500 *\/\n@media (max-width: 768px) {\n  .cjm-ns { padding: 0 0 60px; }\n  .cjm-ns__header { padding: 0 22px 40px; gap: 16px; }\n  .cjm-ns__handles { flex-direction: column; gap: 8px; }\n  .cjm-ns__sep { display: none; }\n  \/* 1.5 images visibles par ligne (1 enti\u00e8re + 0.5 en peek pour sugg\u00e9rer le scroll) *\/\n  .cjm-ns__item { width: calc((100% - 1.2 * 6px) \/ 1.2); }\n}\n<\/style>\n\n<script>\n(function () {\n  function init() {\n    var wrap    = document.getElementById('cjm-ns-wrap');\n    var gallery = document.getElementById('cjm-ns-gallery');\n    if (!wrap || !gallery || wrap.dataset.init === '1') return;\n    wrap.dataset.init = '1';\n\n    var btnPrev = document.getElementById('cjm-ns-prev');\n    var btnNext = document.getElementById('cjm-ns-next');\n\n    \/* Visibilit\u00e9 boutons selon position scroll *\/\n    function updateArrows() {\n      if (!btnPrev || !btnNext) return;\n      var atStart = wrap.scrollLeft <= 2;\n      var atEnd   = wrap.scrollLeft + wrap.clientWidth >= wrap.scrollWidth - 2;\n      btnPrev.classList.toggle('is-visible', !atStart);\n      btnNext.classList.toggle('is-visible', !atEnd);\n    }\n\n    \/* Clic boutons : centre l'image suivante. Premier\/dernier = bord \u00e0 bord. *\/\n    function scrollToImage(direction) {\n      var items = wrap.querySelectorAll('.cjm-ns__item');\n      if (!items.length) return;\n      var wrapWidth = wrap.clientWidth;\n      var center = wrap.scrollLeft + wrapWidth \/ 2;\n      \/* index de l'image actuellement la plus proche du centre *\/\n      var currentIndex = 0;\n      var minDist = Infinity;\n      items.forEach(function(item, i) {\n        var itemCenter = item.offsetLeft + item.offsetWidth \/ 2;\n        var dist = Math.abs(itemCenter - center);\n        if (dist < minDist) { minDist = dist; currentIndex = i; }\n      });\n      var targetIndex = Math.max(0, Math.min(items.length - 1, currentIndex + direction));\n      var target = items[targetIndex];\n      var scrollLeft;\n      if (targetIndex === 0) {\n        scrollLeft = 0;\n      } else if (targetIndex === items.length - 1) {\n        scrollLeft = wrap.scrollWidth - wrapWidth;\n      } else {\n        scrollLeft = target.offsetLeft + target.offsetWidth \/ 2 - wrapWidth \/ 2;\n      }\n      wrap.scrollTo({ left: scrollLeft, behavior: 'smooth' });\n    }\n    if (btnPrev) btnPrev.addEventListener('click', function(e) { e.stopPropagation(); scrollToImage(-1); });\n    if (btnNext) btnNext.addEventListener('click', function(e) { e.stopPropagation(); scrollToImage(1); });\n\n    wrap.addEventListener('scroll', updateArrows, { passive: true });\n    window.addEventListener('resize', updateArrows);\n    setTimeout(updateArrows, 100);\n\n    var isDragging = false;\n    var startX = 0;\n    var scrollStart = 0;\n    var velocity = 0;\n    var lastX = 0;\n    var lastT = 0;\n    var raf;\n\n    function onDown(x) {\n      isDragging = true;\n      startX = x;\n      scrollStart = wrap.scrollLeft;\n      velocity = 0; lastX = x; lastT = Date.now();\n      wrap.classList.add('is-dragging');\n      cancelAnimationFrame(raf);\n    }\n\n    function onMove(x) {\n      if (!isDragging) return;\n      var dx = x - startX;\n      wrap.scrollLeft = scrollStart - dx;\n      var now = Date.now();\n      var dt = now - lastT || 1;\n      velocity = (lastX - x) \/ dt;\n      lastX = x; lastT = now;\n    }\n\n    function onUp() {\n      if (!isDragging) return;\n      isDragging = false;\n      wrap.classList.remove('is-dragging');\n      \/* Inertie *\/\n      var v = velocity * 25;\n      function glide() {\n        if (Math.abs(v) < 0.5) return;\n        wrap.scrollLeft += v;\n        v *= 0.96;\n        raf = requestAnimationFrame(glide);\n      }\n      glide();\n    }\n\n    \/* Mouse \u2014 inchang\u00e9 *\/\n    wrap.addEventListener('mousedown',  function(e) { e.preventDefault(); onDown(e.clientX); });\n    window.addEventListener('mousemove', function(e) { onMove(e.clientX); });\n    window.addEventListener('mouseup',   function()  { onUp(); });\n\n    \/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n       Touch \u2014 distinction geste vertical (scroll page) \/ horizontal (galerie)\n       Tant que la direction n'est pas d\u00e9cid\u00e9e, on ne bloque rien.\n       Vertical  \u2192 on l\u00e2che le drag, la page d\u00e9file normalement.\n       Horizontal\u2192 on pilote la galerie et on preventDefault.\n    \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n    var TOUCH_THRESHOLD = 8;   \/\/ px avant de d\u00e9cider de la direction\n    var tStartX = 0, tStartY = 0;\n    var lockDir = null;        \/\/ null = ind\u00e9cis, 'h' = horizontal, 'v' = vertical\n\n    wrap.addEventListener('touchstart', function(e) {\n      tStartX = e.touches[0].clientX;\n      tStartY = e.touches[0].clientY;\n      lockDir = null;\n      onDown(e.touches[0].clientX);\n    }, { passive: true });\n\n    wrap.addEventListener('touchmove', function(e) {\n      var x = e.touches[0].clientX;\n      var y = e.touches[0].clientY;\n\n      \/* Premi\u00e8re d\u00e9cision : dans quelle direction va le doigt ? *\/\n      if (lockDir === null) {\n        var dx = Math.abs(x - tStartX);\n        var dy = Math.abs(y - tStartY);\n        if (dx < TOUCH_THRESHOLD && dy < TOUCH_THRESHOLD) return; \/\/ trop t\u00f4t pour d\u00e9cider\n        lockDir = dx > dy ? 'h' : 'v';\n        if (lockDir === 'v') {\n          \/* geste vertical : on abandonne le drag, la page scrolle normalement *\/\n          isDragging = false;\n          wrap.classList.remove('is-dragging');\n          return;\n        }\n      }\n\n      if (lockDir === 'v') return;      \/\/ rien \u00e0 faire, la page g\u00e8re le scroll\n\n      \/* geste horizontal confirm\u00e9 : on pilote la galerie *\/\n      e.preventDefault();\n      onMove(x);\n    }, { passive: false });\n\n    wrap.addEventListener('touchend', function() {\n      if (lockDir === 'h') onUp();\n      else { isDragging = false; wrap.classList.remove('is-dragging'); }\n      lockDir = null;\n    }, { passive: true });\n  }\n\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);\n  else init();\n  window.addEventListener('load', function() { setTimeout(init, 50); });\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>PROJET SUR MESURE Chalet \u00e0 Chamonix Implant\u00e9 au c\u0153ur de la vall\u00e9e de Chamonix, ce chalet neuf associe les codes de l\u2019architecture de montagne \u00e0 une \u00e9criture plus contemporaine. Le bois, l\u2019enduit clair, les larges d\u00e9bords de toiture et les balcons prolongent l\u2019esprit du chalet traditionnel, tandis que les grandes ouvertures apportent lumi\u00e8re et vues [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-87","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Construction d&#039;un chalet \u00e0 Chamonix | Jacquet &amp; Meermans<\/title>\n<meta name=\"description\" content=\"Construction d\u2019un chalet contemporain \u00e0 Chamonix, avec ma\u00eetrise d\u2019\u0153uvre et suivi de chantier par le Cabinet Jacquet &amp; Meermans, au c\u0153ur du Mont-Blanc.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cabinet-jacquet-meermans.fr\/en\/chalet-construction-chamonix-mont-blanc\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Construction d&#039;un chalet \u00e0 Chamonix | Jacquet &amp; Meermans\" \/>\n<meta property=\"og:description\" content=\"Construction d\u2019un chalet contemporain \u00e0 Chamonix, avec ma\u00eetrise d\u2019\u0153uvre et suivi de chantier par le Cabinet Jacquet &amp; Meermans, au c\u0153ur du Mont-Blanc.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cabinet-jacquet-meermans.fr\/en\/chalet-construction-chamonix-mont-blanc\/\" \/>\n<meta property=\"og:site_name\" content=\"Cabinet Jacquet &amp; Meermans\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-25T12:17:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/salon-baies-vitrees-panoramiques-vue-massif-mont-blanc-chalet-chamonix-mont-blanc.jpg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"56 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/realisations-construction-chalet-chamonix-mont-blanc\\\/\",\"url\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/realisations-construction-chalet-chamonix-mont-blanc\\\/\",\"name\":\"Construction d'un chalet \u00e0 Chamonix | Jacquet & Meermans\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/realisations-construction-chalet-chamonix-mont-blanc\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/realisations-construction-chalet-chamonix-mont-blanc\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/salon-baies-vitrees-panoramiques-vue-massif-mont-blanc-chalet-chamonix-mont-blanc.jpg\",\"datePublished\":\"2026-06-17T16:22:51+00:00\",\"dateModified\":\"2026-08-25T12:17:37+00:00\",\"description\":\"Construction d\u2019un chalet contemporain \u00e0 Chamonix, avec ma\u00eetrise d\u2019\u0153uvre et suivi de chantier par le Cabinet Jacquet & Meermans, au c\u0153ur du Mont-Blanc.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/realisations-construction-chalet-chamonix-mont-blanc\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/realisations-construction-chalet-chamonix-mont-blanc\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/realisations-construction-chalet-chamonix-mont-blanc\\\/#primaryimage\",\"url\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/salon-baies-vitrees-panoramiques-vue-massif-mont-blanc-chalet-chamonix-mont-blanc.jpg\",\"contentUrl\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/salon-baies-vitrees-panoramiques-vue-massif-mont-blanc-chalet-chamonix-mont-blanc.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/realisations-construction-chalet-chamonix-mont-blanc\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Chalet \u00e0 Chamonix\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/#website\",\"url\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/\",\"name\":\"Cabinet Jacquet & Meermans\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/#organization\",\"name\":\"Cabinet Jacquet & Meermans\",\"url\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/jacquet_meermans_logo_noir.png\",\"contentUrl\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/jacquet_meermans_logo_noir.png\",\"width\":1200,\"height\":1200,\"caption\":\"Cabinet Jacquet & Meermans\"},\"image\":{\"@id\":\"https:\\\/\\\/cabinet-jacquet-meermans.fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Construction of a chalet in Chamonix | Jacquet &amp; Meermans","description":"Construction of a contemporary chalet in Chamonix, with project management and site supervision by Cabinet Jacquet &amp; Meermans, in the heart of Mont Blanc.","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:\/\/cabinet-jacquet-meermans.fr\/en\/chalet-construction-chamonix-mont-blanc\/","og_locale":"en_GB","og_type":"article","og_title":"Construction d'un chalet \u00e0 Chamonix | Jacquet & Meermans","og_description":"Construction d\u2019un chalet contemporain \u00e0 Chamonix, avec ma\u00eetrise d\u2019\u0153uvre et suivi de chantier par le Cabinet Jacquet & Meermans, au c\u0153ur du Mont-Blanc.","og_url":"https:\/\/cabinet-jacquet-meermans.fr\/en\/chalet-construction-chamonix-mont-blanc\/","og_site_name":"Cabinet Jacquet &amp; Meermans","article_modified_time":"2026-08-25T12:17:37+00:00","og_image":[{"url":"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/salon-baies-vitrees-panoramiques-vue-massif-mont-blanc-chalet-chamonix-mont-blanc.jpg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Estimated reading time":"56 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/cabinet-jacquet-meermans.fr\/realisations-construction-chalet-chamonix-mont-blanc\/","url":"https:\/\/cabinet-jacquet-meermans.fr\/realisations-construction-chalet-chamonix-mont-blanc\/","name":"Construction of a chalet in Chamonix | Jacquet &amp; Meermans","isPartOf":{"@id":"https:\/\/cabinet-jacquet-meermans.fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cabinet-jacquet-meermans.fr\/realisations-construction-chalet-chamonix-mont-blanc\/#primaryimage"},"image":{"@id":"https:\/\/cabinet-jacquet-meermans.fr\/realisations-construction-chalet-chamonix-mont-blanc\/#primaryimage"},"thumbnailUrl":"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/salon-baies-vitrees-panoramiques-vue-massif-mont-blanc-chalet-chamonix-mont-blanc.jpg","datePublished":"2026-06-17T16:22:51+00:00","dateModified":"2026-08-25T12:17:37+00:00","description":"Construction of a contemporary chalet in Chamonix, with project management and site supervision by Cabinet Jacquet &amp; Meermans, in the heart of Mont Blanc.","breadcrumb":{"@id":"https:\/\/cabinet-jacquet-meermans.fr\/realisations-construction-chalet-chamonix-mont-blanc\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cabinet-jacquet-meermans.fr\/realisations-construction-chalet-chamonix-mont-blanc\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/cabinet-jacquet-meermans.fr\/realisations-construction-chalet-chamonix-mont-blanc\/#primaryimage","url":"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/salon-baies-vitrees-panoramiques-vue-massif-mont-blanc-chalet-chamonix-mont-blanc.jpg","contentUrl":"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/salon-baies-vitrees-panoramiques-vue-massif-mont-blanc-chalet-chamonix-mont-blanc.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/cabinet-jacquet-meermans.fr\/realisations-construction-chalet-chamonix-mont-blanc\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/cabinet-jacquet-meermans.fr\/"},{"@type":"ListItem","position":2,"name":"Chalet \u00e0 Chamonix"}]},{"@type":"WebSite","@id":"https:\/\/cabinet-jacquet-meermans.fr\/#website","url":"https:\/\/cabinet-jacquet-meermans.fr\/","name":"Jacquet &amp; Meermans Cabinet","description":"","publisher":{"@id":"https:\/\/cabinet-jacquet-meermans.fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cabinet-jacquet-meermans.fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/cabinet-jacquet-meermans.fr\/#organization","name":"Jacquet &amp; Meermans Cabinet","url":"https:\/\/cabinet-jacquet-meermans.fr\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/cabinet-jacquet-meermans.fr\/#\/schema\/logo\/image\/","url":"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/jacquet_meermans_logo_noir.png","contentUrl":"https:\/\/cabinet-jacquet-meermans.fr\/wp-content\/uploads\/2026\/06\/jacquet_meermans_logo_noir.png","width":1200,"height":1200,"caption":"Cabinet Jacquet & Meermans"},"image":{"@id":"https:\/\/cabinet-jacquet-meermans.fr\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/cabinet-jacquet-meermans.fr\/en\/wp-json\/wp\/v2\/pages\/87","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cabinet-jacquet-meermans.fr\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cabinet-jacquet-meermans.fr\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cabinet-jacquet-meermans.fr\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cabinet-jacquet-meermans.fr\/en\/wp-json\/wp\/v2\/comments?post=87"}],"version-history":[{"count":33,"href":"https:\/\/cabinet-jacquet-meermans.fr\/en\/wp-json\/wp\/v2\/pages\/87\/revisions"}],"predecessor-version":[{"id":4166,"href":"https:\/\/cabinet-jacquet-meermans.fr\/en\/wp-json\/wp\/v2\/pages\/87\/revisions\/4166"}],"wp:attachment":[{"href":"https:\/\/cabinet-jacquet-meermans.fr\/en\/wp-json\/wp\/v2\/media?parent=87"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}