{"id":7849,"date":"2026-02-03T13:59:15","date_gmt":"2026-02-03T13:59:15","guid":{"rendered":"https:\/\/masdenadal.com\/elaia-metadatas\/"},"modified":"2026-02-03T13:59:15","modified_gmt":"2026-02-03T13:59:15","slug":"elaia-metadatas","status":"publish","type":"page","link":"https:\/\/masdenadal.com\/en\/elaia-metadatas\/","title":{"rendered":"Find out more"},"content":{"rendered":"\n\n<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"ItemList\",\"name\":\"Villes aux alentours\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"Thing\",\"name\":\"Cajarc\",\"url\":\"https:\/\/www.tourisme-lot.com\/cajarc\",\"image\":\"https:\/\/woody.cloudly.space\/app\/uploads\/lot-tourisme\/2020\/12\/thumbs\/web21-190916174831-village-de-cajarc-christophe-bouthe-agence-vent-dautan-1920x960-crop-1615992091.jpg\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.47,\"longitude\":1.8783},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"10\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps en voiture (min)\",\"value\":\"15\"},{\"@type\":\"PropertyValue\",\"name\":\"Lieux \/ Activit\u00e9s incontournables\",\"value\":\"Place de la Halle, \u00c9glise Saint-Pierre, Mus\u00e9e de l'Artisanat\"},{\"@type\":\"PropertyValue\",\"name\":\"March\u00e9s \/ \u00e9v\u00e9nements locaux\",\"value\":\"March\u00e9 hebdomadaire le vendredi matin, F\u00eate de la Saint-Jean en juin\"},{\"@type\":\"PropertyValue\",\"name\":\"Restaurants \/ sp\u00e9cialit\u00e9s\",\"value\":\"Truffade, Aligot, Viande de boeuf de l'Aubrac\"},{\"@type\":\"PropertyValue\",\"name\":\"Astuce ou commentaire\",\"value\":\"Charmant village m\u00e9di\u00e9val avec des ruelles pittoresques et une belle vue sur la vall\u00e9e du Lot.\"},{\"@type\":\"PropertyValue\",\"name\":\"Adresse compl\u00e8te\",\"value\":\"Cajarc, 46160\"}]}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"Thing\",\"name\":\"Saint-Cirq-Lapopie\",\"url\":\"https:\/\/masdenadal.com\/tourisme-saint-cirq-lapopie\/\",\"image\":\"https:\/\/masdenadal.com\/wp-content\/uploads\/2024\/12\/village-medieval-saint-cirq-lapopie.webp\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.4167,\"longitude\":1.6167},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"15\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps en voiture (min)\",\"value\":\"20\"},{\"@type\":\"PropertyValue\",\"name\":\"Lieux \/ Activit\u00e9s incontournables\",\"value\":\"Place du Sombral, \u00c9glise Saint-Cirq, Ch\u00e2teau de Saint-Cirq-Lapopie\"},{\"@type\":\"PropertyValue\",\"name\":\"March\u00e9s \/ \u00e9v\u00e9nements locaux\",\"value\":\"March\u00e9 artisanal le dimanche matin, F\u00eate de la Saint-Cirq en ao\u00fbt\"},{\"@type\":\"PropertyValue\",\"name\":\"Restaurants \/ sp\u00e9cialit\u00e9s\",\"value\":\"C\u00e8pes, Foie gras, Vin de Cahors\"},{\"@type\":\"PropertyValue\",\"name\":\"Astuce ou commentaire\",\"value\":\"Class\u00e9 parmi les plus beaux villages de France, offrant des panoramas exceptionnels sur la vall\u00e9e du Lot.\"},{\"@type\":\"PropertyValue\",\"name\":\"Adresse compl\u00e8te\",\"value\":\"Saint-Cirq-Lapopie, 46330\"}]}},{\"@type\":\"ListItem\",\"position\":3,\"item\":{\"@type\":\"Thing\",\"name\":\"Figeac\",\"url\":\"https:\/\/masdenadal.com\/tourisme-figeac\/\",\"image\":\"https:\/\/masdenadal.com\/wp-content\/uploads\/2024\/12\/camping-pres-de-figeac.webp\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.6167,\"longitude\":2.049},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"25\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps en voiture (min)\",\"value\":\"30\"},{\"@type\":\"PropertyValue\",\"name\":\"Lieux \/ Activit\u00e9s incontournables\",\"value\":\"Place Champollion, Mus\u00e9e Champollion, H\u00f4tel de la Monnaie\"},{\"@type\":\"PropertyValue\",\"name\":\"March\u00e9s \/ \u00e9v\u00e9nements locaux\",\"value\":\"March\u00e9 couvert tous les samedis matin, Festival de la Musique en juillet\"},{\"@type\":\"PropertyValue\",\"name\":\"Restaurants \/ sp\u00e9cialit\u00e9s\",\"value\":\"Truffade, C\u00e8pes, Vin de Cahors\"},{\"@type\":\"PropertyValue\",\"name\":\"Astuce ou commentaire\",\"value\":\"Ville d'art et d'histoire, berceau de Jean-Fran\u00e7ois Champollion, offrant un riche patrimoine architectural.\"},{\"@type\":\"PropertyValue\",\"name\":\"Adresse compl\u00e8te\",\"value\":\"Figeac, 46100\"}]}},{\"@type\":\"ListItem\",\"position\":4,\"item\":{\"@type\":\"Thing\",\"name\":\"Cahors\",\"url\":\"https:\/\/masdenadal.com\/tourisme-cahors\/\",\"image\":\"https:\/\/masdenadal.com\/wp-content\/uploads\/2025\/01\/cahors-lot.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.45,\"longitude\":1.4444},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"43\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps en voiture (min)\",\"value\":\"47\"},{\"@type\":\"PropertyValue\",\"name\":\"Lieux \/ Activit\u00e9s incontournables\",\"value\":\"Pont Valentr\u00e9, Cath\u00e9drale Saint-\u00c9tienne, Place Fran\u00e7ois Mitterrand\"},{\"@type\":\"PropertyValue\",\"name\":\"March\u00e9s \/ \u00e9v\u00e9nements locaux\",\"value\":\"March\u00e9 couvert tous les mercredis et samedis matin, Festival de Jazz en juillet\"},{\"@type\":\"PropertyValue\",\"name\":\"Restaurants \/ sp\u00e9cialit\u00e9s\",\"value\":\"Vin de Cahors, Foie gras, Truffade\"},{\"@type\":\"PropertyValue\",\"name\":\"Astuce ou commentaire\",\"value\":\"Pr\u00e9fecture du Lot, r\u00e9put\u00e9e pour son vin et son patrimoine m\u00e9di\u00e9val.\"},{\"@type\":\"PropertyValue\",\"name\":\"Adresse compl\u00e8te\",\"value\":\"Cahors, 46000\"}]}},{\"@type\":\"ListItem\",\"position\":5,\"item\":{\"@type\":\"Thing\",\"name\":\"Lacapelle-Marival\",\"url\":\"https:\/\/www.tourisme-lot.com\/lacapelle-marival\/\",\"image\":\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/2\/24\/Chateau_lacapelle_marival_facade_sud_2.jpg\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.6167,\"longitude\":1.8833},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"33\"},{\"@type\":\"PropertyValue\",\"name\":\"Temps en voiture (min)\",\"value\":\"37\"},{\"@type\":\"PropertyValue\",\"name\":\"Lieux \/ Activit\u00e9s incontournables\",\"value\":\"Ch\u00e2teau de Lacapelle-Marival, \u00c9glise Saint-Pierre, Place de la Mairie\"},{\"@type\":\"PropertyValue\",\"name\":\"March\u00e9s \/ \u00e9v\u00e9nements locaux\",\"value\":\"March\u00e9 hebdomadaire le mardi matin, F\u00eate de la Saint-Pierre en juillet\"},{\"@type\":\"PropertyValue\",\"name\":\"Restaurants \/ sp\u00e9cialit\u00e9s\",\"value\":\"Truffade, C\u00e8pes, Viande de boeuf de l'Aubrac\"},{\"@type\":\"PropertyValue\",\"name\":\"Astuce ou commentaire\",\"value\":\"Petit village charmant avec un riche patrimoine historique et une belle place centrale.\"},{\"@type\":\"PropertyValue\",\"name\":\"Adresse compl\u00e8te\",\"value\":\"Lacapelle-Marival, 46120\"}]}}]},{\"@type\":\"ItemList\",\"name\":\"Activit\u00e9s et lieux recommand\u00e9s\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"Thing\",\"name\":\"Randonn\u00e9e dans le Parc Naturel des Causses du Quercy\",\"url\":\"https:\/\/masdenadal.com\/tourisme-lot\/\",\"image\":\"https:\/\/masdenadal.com\/wp-content\/uploads\/2024\/12\/parc-nature-des-causses-de-quercy.webp\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.4262,\"longitude\":1.7365},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Type d\u2019\u00e9v\u00e9nement (march\u00e9, festival, sport, etc.)\",\"value\":\"nature\"},{\"@type\":\"PropertyValue\",\"name\":\"Ville \/ Zone\",\"value\":\"Sauliac-sur-C\u00e9l\u00e9\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"0\"},{\"@type\":\"PropertyValue\",\"name\":\"Dur\u00e9e moyenne\",\"value\":\"variable\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation n\u00e9cessaire ?\",\"value\":\"non\"},{\"@type\":\"PropertyValue\",\"name\":\"Astuce ou commentaire\",\"value\":\"Explorez les sentiers du Parc Naturel des Causses du Quercy pour d\u00e9couvrir une faune et une flore exceptionnelles.\"},{\"@type\":\"PropertyValue\",\"name\":\"Adresse compl\u00e8te\",\"value\":\"400, Chemin du Mas de Nadal, 2245, Route de Blars, 46330 \u2013 Sauliac-sur-C\u00e9l\u00e9\"}]}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"Thing\",\"name\":\"Baignade au bord de la rivi\u00e8re C\u00e9l\u00e9\",\"url\":\"https:\/\/masdenadal.com\/plages-rivieres-lot\/\",\"image\":\"https:\/\/masdenadal.com\/wp-content\/uploads\/2025\/01\/riviere-plage.webp\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.4262,\"longitude\":1.7365},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Type d\u2019\u00e9v\u00e9nement (march\u00e9, festival, sport, etc.)\",\"value\":\"nature\"},{\"@type\":\"PropertyValue\",\"name\":\"Ville \/ Zone\",\"value\":\"Sauliac-sur-C\u00e9l\u00e9\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"0\"},{\"@type\":\"PropertyValue\",\"name\":\"Dur\u00e9e moyenne\",\"value\":\"variable\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation n\u00e9cessaire ?\",\"value\":\"non\"},{\"@type\":\"PropertyValue\",\"name\":\"Astuce ou commentaire\",\"value\":\"Profitez des plages naturelles le long de la rivi\u00e8re C\u00e9l\u00e9 pour une baignade rafra\u00eechissante.\"},{\"@type\":\"PropertyValue\",\"name\":\"Adresse compl\u00e8te\",\"value\":\"400, Chemin du Mas de Nadal, 2245, Route de Blars, 46330 \u2013 Sauliac-sur-C\u00e9l\u00e9\"}]}},{\"@type\":\"ListItem\",\"position\":3,\"item\":{\"@type\":\"Thing\",\"name\":\"Visite du village m\u00e9di\u00e9val de Saint-Cirq-Lapopie\",\"url\":\"https:\/\/masdenadal.com\/tourisme-saint-cirq-lapopie\/\",\"image\":\"https:\/\/masdenadal.com\/wp-content\/uploads\/2024\/12\/village-medieval-saint-cirq-lapopie.webp\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.4167,\"longitude\":1.6167},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Type d\u2019\u00e9v\u00e9nement (march\u00e9, festival, sport, etc.)\",\"value\":\"culture\"},{\"@type\":\"PropertyValue\",\"name\":\"Ville \/ Zone\",\"value\":\"Saint-Cirq-Lapopie\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"10\"},{\"@type\":\"PropertyValue\",\"name\":\"Dur\u00e9e moyenne\",\"value\":\"2 heures\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation n\u00e9cessaire ?\",\"value\":\"non\"},{\"@type\":\"PropertyValue\",\"name\":\"Astuce ou commentaire\",\"value\":\"Explorez les ruelles pittoresques de ce village perch\u00e9 offrant des vues imprenables sur la vall\u00e9e du Lot.\"},{\"@type\":\"PropertyValue\",\"name\":\"Adresse compl\u00e8te\",\"value\":\"Saint-Cirq-Lapopie, 46330\"}]}},{\"@type\":\"ListItem\",\"position\":4,\"item\":{\"@type\":\"Thing\",\"name\":\"Piscine du camping Mas de Nadal\",\"url\":\"https:\/\/masdenadal.com\/camping-piscine-chauffee-lot\/\",\"image\":\"https:\/\/masdenadal.com\/wp-content\/uploads\/2025\/01\/piscine-en-fin-de-journee.webp\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.4264,\"longitude\":1.7365},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Type d\u2019\u00e9v\u00e9nement (march\u00e9, festival, sport, etc.)\",\"value\":\"Loisir aquatique\"},{\"@type\":\"PropertyValue\",\"name\":\"Ville \/ Zone\",\"value\":\"Sauliac-sur-C\u00e9l\u00e9\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"0\"},{\"@type\":\"PropertyValue\",\"name\":\"Dur\u00e9e moyenne\",\"value\":\"Variable\"},{\"@type\":\"PropertyValue\",\"name\":\"R\u00e9servation n\u00e9cessaire ?\",\"value\":\"Non\"},{\"@type\":\"PropertyValue\",\"name\":\"Astuce ou commentaire\",\"value\":\"Profitez d'une piscine ext\u00e9rieure chauff\u00e9e \u00e0 d\u00e9bordement avec une belle terrasse et des bains de soleil. Id\u00e9ale pour se d\u00e9tendre apr\u00e8s une journ\u00e9e d'activit\u00e9s.\"},{\"@type\":\"PropertyValue\",\"name\":\"Adresse compl\u00e8te\",\"value\":\"400, Chemin du Mas de Nadal, 2245, Route de Blars, 46330 \u2013 Sauliac-sur-C\u00e9l\u00e9\"}]}}]},{\"@type\":\"ItemList\",\"name\":\"\u00c9v\u00e9nements recommand\u00e9s\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"Thing\",\"name\":\"Mariage au Mas de Nadal\",\"description\":\"Un domaine hors du temps, rien que pour vous\\n\\nLe Mas de Nadal, c\u2019est une bulle naturelle au c\u0153ur du Lot.\\nUn lieu \u00e0 taille humaine, entour\u00e9 de verdure, o\u00f9 l\u2019on se sent imm\u00e9diatement ailleurs.\\n\\nSite enti\u00e8rement privatisable\\nEnvironnement calme et s\u00e9curis\u00e9\\nLieu pi\u00e9ton\\nClairi\u00e8res, for\u00eat, grands espaces ouverts\\nAtmosph\u00e8re intime et chaleureuse\\nIci, vos invit\u00e9s ne sont pas dans une salle impersonnelle.\\nIls vivent une exp\u00e9rience.\\n\\nUn mariage au Mas de Nadal, c\u2019est :\\n\\nLa nature comme d\u00e9cor\\nLes lumi\u00e8res sous les arbres\\nUne soir\u00e9e qui se prolonge sous les \u00e9toiles\",\"url\":\"https:\/\/masdenadal.com\/location-evenement-lot\/\",\"image\":\"https:\/\/masdenadal.com\/wp-content\/uploads\/2025\/01\/lounge-evenementiel-mas-de-nadal.webp\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.426,\"longitude\":1.616},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Date \/ P\u00e9riode\",\"value\":\"Toute l'ann\u00e9e\"},{\"@type\":\"PropertyValue\",\"name\":\"Lieu (ville)\",\"value\":\"Sauliac sur C\u00e9l\u00e9 \"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"0\"},{\"@type\":\"PropertyValue\",\"name\":\"Type d\u2019\u00e9v\u00e9nement (march\u00e9, festival, sport, etc.)\",\"value\":\"Mariage\"},{\"@type\":\"PropertyValue\",\"name\":\"Adresse compl\u00e8te\",\"value\":\"Mas de Nadal, 46330 Saint-Cirq-Lapopie, France\"}]}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"Thing\",\"name\":\"Mariages au Mas de Nadal\",\"description\":\"C\u00e9l\u00e9bration de mariages dans un cadre atypique avec privatisation du domaine et h\u00e9bergements en lodges.\",\"url\":\"https:\/\/masdenadal.com\/location-evenement-lot\/\",\"image\":\"https:\/\/masdenadal.com\/wp-content\/uploads\/2026\/01\/911-scaled.jpg\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.426,\"longitude\":1.616},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Date \/ P\u00e9riode\",\"value\":\"Toute l'ann\u00e9e\"},{\"@type\":\"PropertyValue\",\"name\":\"Lieu (ville)\",\"value\":\"Saint-Cirq-Lapopie\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance depuis le camping (km)\",\"value\":\"0\"},{\"@type\":\"PropertyValue\",\"name\":\"Type d\u2019\u00e9v\u00e9nement (march\u00e9, festival, sport, etc.)\",\"value\":\"Mariage\"},{\"@type\":\"PropertyValue\",\"name\":\"Astuce ou commentaire\",\"value\":\"Un lieu unique pour un mariage inoubliable.\"},{\"@type\":\"PropertyValue\",\"name\":\"Adresse compl\u00e8te\",\"value\":\"Mas de Nadal, 46330 Saint-Cirq-Lapopie, France\"}]}}]}]}<\/script>\n<style>\n  .mv-wrap {\n    --mv-accent: #2e5e45;\n    --mv-accent-soft: #2e5e451a;\n    --mv-cream: #faf7f2;\n    --mv-line: #ebe5da;\n    --mv-muted: #6b6559;\n    --mv-header: 0px;\n    font-family: 'Inter', -apple-system, sans-serif;\n    color: #1f2a24;\n    max-width: 1440px;\n    margin: 0 auto;\n    padding: 0 24px 56px;\n    box-sizing: border-box;\n  }\n\n  .mv-wrap *,\n  .mv-wrap *::before,\n  .mv-wrap *::after,\n  .mv-modal-overlay *,\n  .mv-modal-overlay *::before,\n  .mv-modal-overlay *::after {\n    box-sizing: border-box;\n  }\n\n  .mv-wrap button,\n  .mv-wrap input,\n  .mv-modal-overlay button {\n    font-family: 'Inter', -apple-system, sans-serif;\n  }\n\n  .mv-icon {\n    display: inline-flex;\n    width: 1em;\n    height: 1em;\n    flex-shrink: 0;\n  }\n\n  .mv-icon svg {\n    width: 100%;\n    height: 100%;\n  }\n\n  \/* \u2500\u2500\u2500 Bandeau \u2500\u2500\u2500 *\/\n  .mv-hero {\n    position: relative;\n    overflow: hidden;\n    margin: 16px 0 24px;\n    padding: 56px 48px;\n    border-radius: 24px;\n    background: var(--mv-cream);\n    background-size: cover;\n    background-position: center right;\n  }\n\n  .mv-hero::before {\n    content: '';\n    position: absolute;\n    inset: 0;\n    background: linear-gradient(90deg, rgba(250, 247, 242, 0.97) 0%, rgba(250, 247, 242, 0.88) 38%, rgba(250, 247, 242, 0.2) 70%, rgba(250, 247, 242, 0) 100%);\n  }\n\n  .mv-hero-inner {\n    position: relative;\n    max-width: 560px;\n  }\n\n  .mv-hero-title {\n    margin: 0 0 12px !important;\n    font-size: clamp(30px, 4vw, 48px) !important;\n    line-height: 1.1 !important;\n    color: #1c2b22 !important;\n  }\n\n  .mv-hero-text {\n    margin: 0 0 20px !important;\n    font-size: 17px;\n    line-height: 1.55;\n    color: #3b4a40;\n  }\n\n  .mv-hero-chip {\n    display: inline-flex;\n    align-items: center;\n    gap: 10px;\n    padding: 9px 16px;\n    border-radius: 999px;\n    background: #fff;\n    box-shadow: 0 2px 8px rgba(31, 42, 36, 0.1);\n    font-size: 14px;\n    color: #3b4a40;\n  }\n\n  .mv-hero-chip strong {\n    color: #1c2b22;\n  }\n\n  \/* \u2500\u2500\u2500 Recherche + distance \u2500\u2500\u2500 *\/\n  .mv-controls {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 12px;\n    margin-bottom: 14px;\n  }\n\n  .mv-search {\n    position: relative;\n    flex: 1 1 360px;\n  }\n\n  .mv-search .mv-icon {\n    position: absolute;\n    left: 18px;\n    top: 50%;\n    transform: translateY(-50%);\n    font-size: 18px;\n    color: var(--mv-muted);\n  }\n\n  .mv-search input {\n    width: 100% !important;\n    height: 50px;\n    padding: 0 18px 0 48px !important;\n    border: 1px solid var(--mv-line) !important;\n    border-radius: 999px !important;\n    background: #fff !important;\n    font-size: 15px !important;\n    color: #1f2a24;\n    outline: none;\n    box-shadow: 0 1px 3px rgba(31, 42, 36, 0.05);\n  }\n\n  .mv-search input:focus {\n    border-color: var(--mv-accent) !important;\n    box-shadow: 0 0 0 3px var(--mv-accent-soft) !important;\n  }\n\n  .mv-seg {\n    display: inline-flex;\n    padding: 4px;\n    gap: 2px;\n    border: 1px solid var(--mv-line);\n    border-radius: 999px;\n    background: #fff;\n  }\n\n  .mv-seg button {\n    padding: 0 18px;\n    height: 40px;\n    border: 0;\n    border-radius: 999px;\n    background: transparent;\n    color: #3b4a40;\n    font-size: 14px;\n    font-weight: 600;\n    cursor: pointer;\n    white-space: nowrap;\n    transition: all 0.15s;\n  }\n\n  .mv-seg button:hover {\n    background: var(--mv-cream);\n  }\n\n  .mv-seg button.is-active {\n    background: var(--mv-accent);\n    color: #fff;\n  }\n\n  \/* \u2500\u2500\u2500 Cat\u00e9gories \u2500\u2500\u2500 *\/\n  \/* Cat\u00e9gories : une seule ligne qui d\u00e9file, fl\u00e8ches + fondu sur les bords *\/\n  .mv-cats-wrap {\n    position: relative;\n    margin-bottom: 18px;\n  }\n\n  .mv-cats {\n    display: flex;\n    flex-wrap: nowrap;\n    gap: 8px;\n    overflow-x: auto;\n    scroll-behavior: smooth;\n    scrollbar-width: none;\n    padding: 2px 0;\n  }\n\n  .mv-cats::-webkit-scrollbar {\n    display: none;\n  }\n\n  .mv-cat {\n    flex-shrink: 0;\n  }\n\n  .mv-cats-arrow {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    z-index: 1;\n    display: none;\n    align-items: center;\n    width: 64px;\n    padding: 0;\n    border: 0;\n    cursor: pointer;\n    font-size: 20px;\n    color: #1f2a24;\n  }\n\n  .mv-cats-arrow span {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: 36px;\n    height: 36px;\n    border: 1px solid var(--mv-line);\n    border-radius: 50%;\n    background: #fff;\n    box-shadow: 0 2px 6px rgba(31, 42, 36, 0.12);\n  }\n\n  .mv-cats-arrow--left {\n    left: 0;\n    justify-content: flex-start;\n    background: linear-gradient(90deg, #fff 45%, rgba(255, 255, 255, 0));\n  }\n\n  .mv-cats-arrow--right {\n    right: 0;\n    justify-content: flex-end;\n    background: linear-gradient(270deg, #fff 45%, rgba(255, 255, 255, 0));\n  }\n\n  .mv-cats-wrap.can-left .mv-cats-arrow--left,\n  .mv-cats-wrap.can-right .mv-cats-arrow--right {\n    display: flex;\n  }\n\n  .mv-cat {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    padding: 9px 16px;\n    border: 1px solid var(--mv-line);\n    border-radius: 999px;\n    background: #fff;\n    color: #2f3b33;\n    font-size: 14px;\n    font-weight: 500;\n    cursor: pointer;\n    transition: all 0.15s;\n  }\n\n  .mv-cat .mv-icon {\n    font-size: 17px;\n    color: var(--mv-cat);\n  }\n\n  .mv-cat:hover {\n    border-color: #d6cdbd;\n  }\n\n  .mv-cat.is-active {\n    background: var(--mv-accent);\n    border-color: var(--mv-accent);\n    color: #fff;\n  }\n\n  .mv-cat.is-active .mv-icon {\n    color: #fff;\n  }\n\n  \/* \u2500\u2500\u2500 Barre compteur + liste\/carte \u2500\u2500\u2500 *\/\n  .mv-bar {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 12px;\n    margin-bottom: 16px;\n  }\n\n  .mv-count {\n    margin: 0 !important;\n    font-size: 15px;\n    color: var(--mv-muted);\n  }\n\n  .mv-count strong {\n    color: #1f2a24;\n  }\n\n  \/* \u2500\u2500\u2500 Layout liste + carte \u2500\u2500\u2500 *\/\n  .mv-layout {\n    display: grid;\n    grid-template-columns: minmax(0, 1fr) minmax(340px, 38%);\n    gap: 24px;\n    align-items: start;\n  }\n\n  .mv-layout.is-list {\n    grid-template-columns: minmax(0, 1fr);\n  }\n\n  .mv-layout.is-list .mv-map-panel {\n    display: none;\n  }\n\n  .mv-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n    \/* dense : la fiche \u00ab \u00c0 la une \u00bb (2 colonnes) ne laisse pas de trou sur grand \u00e9cran *\/\n    grid-auto-flow: dense;\n    gap: 18px;\n  }\n\n  \/* Colonne carte (sticky) : carte carr\u00e9e + fiche du rep\u00e8re cliqu\u00e9 en dessous *\/\n  .mv-map-panel {\n    position: sticky;\n    top: calc(var(--mv-header) + 16px);\n    display: flex;\n    flex-direction: column;\n    gap: 12px;\n  }\n\n  .mv-map {\n    width: 100%;\n    aspect-ratio: 1 \/ 1;\n    max-height: max(300px, calc(100vh - var(--mv-header) - 290px));\n    overflow: hidden;\n    border: 1px solid var(--mv-line);\n    border-radius: 20px;\n    background: var(--mv-cream);\n  }\n\n  .mv-preview-hint {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    padding: 16px 18px;\n    border: 1px dashed #d6cdbd;\n    border-radius: 16px;\n    color: var(--mv-muted);\n    font-size: 14px;\n  }\n\n  .mv-preview-hint .mv-icon {\n    font-size: 20px;\n    color: var(--mv-accent);\n  }\n\n  \/* Fiche compacte (horizontale) sous la carte \u2014 s\u00e9lecteurs doubl\u00e9s pour\n     passer devant les r\u00e8gles .mv-card d\u00e9finies plus bas *\/\n  .mv-card.mv-card--mini {\n    flex-direction: row;\n    min-height: 0;\n    border-radius: 16px;\n  }\n\n  .mv-card.mv-card--mini:hover {\n    transform: none;\n  }\n\n  .mv-card.mv-card--mini .mv-card-media {\n    flex: 0 0 120px;\n    width: 120px;\n    aspect-ratio: auto;\n    min-height: 120px;\n  }\n\n  .mv-card.mv-card--mini .mv-card-noimg {\n    font-size: 28px;\n  }\n\n  .mv-card.mv-card--mini .mv-card-body {\n    gap: 4px;\n    min-width: 0;\n    padding: 10px 14px;\n  }\n\n  .mv-card.mv-card--mini .mv-card-title {\n    font-size: 16px !important;\n    -webkit-line-clamp: 1;\n  }\n\n  .mv-card.mv-card--mini .mv-meta {\n    font-size: 12px;\n  }\n\n  .mv-card.mv-card--mini .mv-card-desc {\n    font-size: 13px;\n    -webkit-line-clamp: 2;\n  }\n\n  .mv-card.mv-card--mini .mv-card-foot {\n    padding-top: 2px;\n  }\n\n  .mv-card.mv-card--mini .mv-discover {\n    padding: 5px 12px;\n    font-size: 13px;\n  }\n\n  .mv-card.mv-card--mini .mv-pill {\n    position: static;\n    align-self: flex-start;\n    padding: 2px 10px;\n    font-size: 11px;\n    box-shadow: none;\n  }\n\n  \/* \u2500\u2500\u2500 Carte (fiche) \u2500\u2500\u2500 *\/\n  .mv-card {\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    min-width: 0;\n    overflow: hidden;\n    border: 1px solid var(--mv-line);\n    border-radius: 18px;\n    background: #fff;\n    box-shadow: 0 1px 3px rgba(31, 42, 36, 0.05);\n    cursor: pointer;\n    transition: box-shadow 0.2s, transform 0.2s;\n  }\n\n  .mv-card:hover,\n  .mv-card.is-hover {\n    box-shadow: 0 12px 28px rgba(31, 42, 36, 0.12);\n    transform: translateY(-2px);\n  }\n\n  .mv-card-media {\n    position: relative;\n    aspect-ratio: 16 \/ 10;\n    background: var(--mv-cream);\n  }\n\n  .mv-card-media img {\n    display: block;\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n  }\n\n  .mv-card-noimg {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 100%;\n    height: 100%;\n    font-size: 42px;\n    color: var(--mv-cat);\n    background: color-mix(in srgb, var(--mv-cat) 10%, var(--mv-cream));\n  }\n\n  .mv-pill {\n    display: inline-flex;\n    align-items: center;\n    padding: 4px 12px;\n    border-radius: 999px;\n    background: #fff;\n    background: color-mix(in srgb, var(--mv-cat) 14%, #fff);\n    color: var(--mv-cat);\n    font-size: 12px;\n    font-weight: 600;\n    white-space: nowrap;\n  }\n\n  .mv-card-media .mv-pill {\n    position: absolute;\n    left: 12px;\n    bottom: -12px;\n    background: color-mix(in srgb, var(--mv-cat) 12%, #fff);\n    box-shadow: 0 2px 6px rgba(31, 42, 36, 0.12);\n  }\n\n  .mv-card-body {\n    display: flex;\n    flex: 1;\n    flex-direction: column;\n    gap: 7px;\n    padding: 22px 16px 16px;\n  }\n\n  .mv-card-title {\n    margin: 0 !important;\n    font-size: 18px !important;\n    line-height: 1.25 !important;\n    color: #1c2b22 !important;\n    display: -webkit-box;\n    -webkit-line-clamp: 2;\n    -webkit-box-orient: vertical;\n    overflow: hidden;\n  }\n\n  .mv-meta {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    gap: 6px 12px;\n    margin: 0 !important;\n    font-size: 13px;\n    color: var(--mv-muted);\n  }\n\n  .mv-meta span {\n    display: inline-flex;\n    align-items: center;\n    gap: 5px;\n  }\n\n  .mv-card-desc {\n    margin: 0 !important;\n    font-size: 14px;\n    line-height: 1.5;\n    color: #4b5850;\n    display: -webkit-box;\n    -webkit-line-clamp: 3;\n    -webkit-box-orient: vertical;\n    overflow: hidden;\n  }\n\n  .mv-tags {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n  }\n\n  .mv-tag {\n    padding: 3px 10px;\n    border-radius: 999px;\n    background: #f3efe8;\n    color: #4b5850;\n    font-size: 12px;\n    max-width: 100%;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n\n  .mv-card-foot {\n    display: flex;\n    justify-content: flex-end;\n    margin-top: auto;\n    padding-top: 6px;\n  }\n\n  .mv-discover {\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    padding: 8px 16px;\n    border: 0;\n    border-radius: 999px;\n    background: #f7ebe0;\n    color: #1c2b22;\n    font-size: 14px;\n    font-weight: 600;\n    cursor: pointer;\n    transition: background 0.15s;\n  }\n\n  .mv-card:hover .mv-discover {\n    background: #f1dcc9;\n  }\n\n  \/* Carte \u00ab \u00e0 la une \u00bb : grande, texte sur l'image *\/\n  .mv-card--featured {\n    grid-column: span 2;\n    min-height: 360px;\n  }\n\n  .mv-card--featured .mv-card-media {\n    position: absolute;\n    inset: 0;\n    aspect-ratio: auto;\n  }\n\n  .mv-card--featured .mv-card-media::after {\n    content: '';\n    position: absolute;\n    inset: 0;\n    background: linear-gradient(90deg, rgba(20, 24, 20, 0.72) 0%, rgba(20, 24, 20, 0.35) 55%, rgba(20, 24, 20, 0.05) 100%);\n  }\n\n  .mv-card--featured .mv-card-body {\n    position: relative;\n    justify-content: flex-end;\n    max-width: 480px;\n    padding: 28px;\n    color: #fff;\n  }\n\n  .mv-card--featured .mv-card-title {\n    font-size: 30px !important;\n    color: #fff !important;\n  }\n\n  .mv-card--featured .mv-card-desc,\n  .mv-card--featured .mv-meta {\n    color: rgba(255, 255, 255, 0.9);\n  }\n\n  .mv-card--featured .mv-card-foot {\n    justify-content: flex-start;\n    margin-top: 8px;\n  }\n\n  .mv-card--featured .mv-discover {\n    background: #fff;\n  }\n\n  .mv-flag {\n    align-self: flex-start;\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    margin-bottom: 6px;\n    padding: 6px 12px;\n    border-radius: 999px;\n    background: #c2410c;\n    color: #fff;\n    font-size: 12px;\n    font-weight: 700;\n    letter-spacing: 0.4px;\n    text-transform: uppercase;\n  }\n\n  \/* Pagination *\/\n  .mv-more {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: center;\n    align-items: center;\n    gap: 6px;\n    margin-top: 28px;\n  }\n\n  .mv-page {\n    min-width: 42px;\n    height: 42px;\n    padding: 0 12px;\n    border: 1px solid var(--mv-line);\n    border-radius: 999px;\n    background: #fff;\n    color: #2f3b33;\n    font-size: 14px;\n    font-weight: 600;\n    cursor: pointer;\n    transition: all 0.15s;\n  }\n\n  .mv-page:hover:not(:disabled):not([aria-current=\"page\"]) {\n    border-color: var(--mv-accent);\n    color: var(--mv-accent);\n  }\n\n  .mv-page[aria-current=\"page\"] {\n    background: var(--mv-accent);\n    border-color: var(--mv-accent);\n    color: #fff;\n    cursor: default;\n  }\n\n  .mv-page:disabled {\n    opacity: 0.4;\n    cursor: not-allowed;\n  }\n\n  .mv-page-gap {\n    padding: 0 4px;\n    color: var(--mv-muted);\n  }\n\n  \/* Bouton \u00ab Revenir \u00e0 la vue d'ensemble \u00bb (visible apr\u00e8s un zoom \/ d\u00e9placement) *\/\n  .mv-map {\n    position: relative;\n  }\n\n  \/* Pas de gros contour noir au clic sur la carte ; contour visible au clavier seulement *\/\n  .mv-map.leaflet-container:focus {\n    outline: none;\n  }\n\n  .mv-map.leaflet-container:focus-visible {\n    outline: 3px solid var(--mv-accent);\n    outline-offset: 2px;\n  }\n\n  .mv-reset {\n    position: absolute;\n    top: 12px;\n    left: 12px;\n    z-index: 500;\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    padding: 8px 14px;\n    border: 0;\n    border-radius: 999px;\n    background: #fff;\n    color: #1c2b22;\n    font-family: 'Inter', -apple-system, sans-serif;\n    font-size: 13px;\n    font-weight: 600;\n    box-shadow: 0 3px 10px rgba(0, 0, 0, 0.2);\n    cursor: pointer;\n  }\n\n  .mv-reset[hidden] {\n    display: none;\n  }\n\n  .mv-reset:hover {\n    background: var(--mv-accent);\n    color: #fff;\n  }\n\n  .mv-reset .mv-icon {\n    font-size: 15px;\n  }\n\n  \/* Rep\u00e8re de l'\u00e9tablissement (\u00ab vous \u00eates ici \u00bb) *\/\n  .mv-home {\n    background: none;\n    border: none;\n    pointer-events: none;\n  }\n\n  .mv-home-pin {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 44px;\n    height: 44px;\n    border: 3px solid #fff;\n    border-radius: 50%;\n    background: #1c2b22;\n    color: #fff;\n    box-shadow: 0 0 0 5px rgba(28, 43, 34, 0.25), 0 4px 12px rgba(0, 0, 0, 0.35);\n  }\n\n  .mv-home-pin svg {\n    width: 22px;\n    height: 22px;\n  }\n\n  .mv-home-label.leaflet-tooltip {\n    padding: 5px 10px;\n    border: 0;\n    border-radius: 999px;\n    background: #1c2b22;\n    color: #fff;\n    font-family: 'Inter', -apple-system, sans-serif;\n    font-size: 12px;\n    font-weight: 700;\n    box-shadow: 0 3px 8px rgba(0, 0, 0, 0.25);\n  }\n\n  .mv-home-label.leaflet-tooltip-right::before {\n    border-right-color: #1c2b22;\n  }\n\n  .mv-btn {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 8px;\n    padding: 12px 26px;\n    border: 0;\n    border-radius: 999px;\n    background: var(--mv-accent);\n    color: #fff !important;\n    font-size: 15px;\n    font-weight: 600;\n    text-decoration: none !important;\n    cursor: pointer;\n    transition: filter 0.15s;\n  }\n\n  .mv-btn:hover {\n    filter: brightness(0.92);\n  }\n\n  .mv-empty {\n    grid-column: 1 \/ -1;\n    padding: 40px 20px;\n    border: 1px dashed #d6cdbd;\n    border-radius: 18px;\n    background: #fff;\n    color: var(--mv-muted);\n    text-align: center;\n  }\n\n  .mv-empty strong {\n    display: block;\n    margin-bottom: 4px;\n    color: #1f2a24;\n  }\n\n  \/* \u2500\u2500\u2500 Id\u00e9es selon vos envies \u2500\u2500\u2500 *\/\n  .mv-ideas {\n    margin-top: 48px;\n  }\n\n  .mv-ideas-head {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: baseline;\n    justify-content: space-between;\n    gap: 8px 24px;\n    margin-bottom: 16px;\n  }\n\n  .mv-ideas-title {\n    margin: 0 !important;\n    font-size: clamp(22px, 2.6vw, 30px) !important;\n    color: #1c2b22 !important;\n  }\n\n  .mv-ideas-sub {\n    margin: 0 !important;\n    color: var(--mv-muted);\n    font-size: 14px;\n  }\n\n  .mv-ideas-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));\n    gap: 16px;\n  }\n\n  .mv-idea {\n    display: flex;\n    align-items: stretch;\n    overflow: hidden;\n    min-height: 88px;\n    padding: 0;\n    border: 1px solid var(--mv-line);\n    border-radius: 16px;\n    background: #fff;\n    text-align: left;\n    cursor: pointer;\n    transition: box-shadow 0.2s;\n  }\n\n  .mv-idea:hover {\n    box-shadow: 0 8px 20px rgba(31, 42, 36, 0.1);\n  }\n\n  .mv-idea-img {\n    flex: 0 0 38%;\n    background: var(--mv-cream) center \/ cover no-repeat;\n  }\n\n  .mv-idea-body {\n    display: flex;\n    flex: 1;\n    align-items: center;\n    gap: 10px;\n    padding: 12px 14px;\n  }\n\n  .mv-idea-body .mv-icon {\n    font-size: 22px;\n    color: var(--mv-cat);\n  }\n\n  .mv-idea-text {\n    flex: 1;\n    min-width: 0;\n  }\n\n  .mv-idea-text strong {\n    display: block;\n    font-size: 14px;\n    color: #1c2b22;\n    line-height: 1.3;\n  }\n\n  .mv-idea-text span {\n    font-size: 13px;\n    color: var(--mv-muted);\n  }\n\n  \/* \u2500\u2500\u2500 Marqueurs carte \u2500\u2500\u2500 *\/\n  .mv-pin svg {\n    display: block;\n    overflow: visible;\n    transform-origin: 50% 100%;\n    transition: transform 0.15s ease;\n    filter: drop-shadow(0 2px 3px rgba(20, 24, 20, 0.35));\n  }\n\n  .mv-pin.is-hover svg {\n    transform: scale(1.3);\n  }\n\n  .mv-pin.is-selected svg {\n    transform: scale(1.4);\n    filter: drop-shadow(0 0 0 #fff) drop-shadow(0 3px 6px rgba(20, 24, 20, 0.45));\n  }\n\n  .mv-pin.is-selected {\n    z-index: 1001 !important;\n  }\n\n  \/* Pas de carr\u00e9 de focus Leaflet autour du rep\u00e8re cliqu\u00e9 *\/\n  .mv-pin:focus,\n  .mv-pin:focus-visible {\n    outline: none;\n  }\n\n  .mv-pin.is-hover {\n    z-index: 1000 !important;\n  }\n\n  .mv-cluster {\n    background: none;\n    border: none;\n  }\n\n  .mv-cluster span {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    border: 3px solid #fff;\n    border-radius: 50%;\n    background: var(--mv-accent, #2e5e45);\n    color: #fff;\n    font-size: 13px;\n    font-weight: 700;\n    box-shadow: 0 3px 8px rgba(20, 24, 20, 0.3);\n  }\n\n\n  \/* \u2500\u2500\u2500 Modal \u2500\u2500\u2500 *\/\n  .mv-modal-overlay {\n    position: fixed !important;\n    inset: 0 !important;\n    z-index: 99999 !important;\n    max-width: none !important;\n    width: auto !important;\n    margin: 0 !important;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 20px;\n    background: rgba(20, 24, 20, 0.4);\n    backdrop-filter: blur(2px);\n  }\n\n  .mv-modal-overlay[hidden] {\n    display: none !important;\n  }\n\n  .mv-modal {\n    position: relative;\n    width: 100%;\n    max-width: 1080px;\n    max-height: calc(100vh - 32px);\n    overflow-y: auto;\n    border-radius: 22px;\n    background: #fff;\n    box-shadow: 0 24px 60px rgba(20, 24, 20, 0.3);\n    font-family: 'Inter', -apple-system, sans-serif;\n    color: #1f2a24;\n  }\n\n  .mv-modal-img {\n    display: block;\n    width: 100%;\n    aspect-ratio: 4 \/ 3;\n    max-height: 52vh;\n    object-fit: cover;\n    border-radius: 14px;\n  }\n\n  \/* Modal large : contenu sur 2 colonnes (texte \/ m\u00e9dias) pour \u00e9viter de d\u00e9filer *\/\n  .mv-modal-cols {\n    display: grid;\n    grid-template-columns: minmax(0, 0.95fr) minmax(0, 1.05fr);\n    gap: 28px;\n    align-items: start;\n  }\n\n  \/* Colonne m\u00e9dias : reste visible pendant qu'on lit le texte *\/\n  .mv-modal-col--media {\n    position: sticky;\n    top: 0;\n  }\n\n  .mv-modal-body {\n    padding-top: 26px !important;\n  }\n\n  \/* Place pour le bouton de fermeture en haut \u00e0 droite *\/\n  .mv-modal-cols > .mv-modal-col:last-child {\n    padding-right: 36px;\n  }\n\n  .mv-modal-col {\n    display: flex;\n    flex-direction: column;\n    gap: 14px;\n    min-width: 0;\n  }\n\n  .mv-modal-actions {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 10px;\n  }\n\n  .mv-btn--ghost {\n    background: #fff;\n    border: 1px solid var(--mv-line);\n    color: #1c2b22 !important;\n  }\n\n  .mv-btn--ghost:hover {\n    filter: none;\n    border-color: var(--mv-accent);\n  }\n\n  @media (max-width: 900px) {\n    .mv-modal-cols {\n      grid-template-columns: minmax(0, 1fr);\n      gap: 14px;\n    }\n\n    \/* Mobile : photo, puis texte, puis boutons \/ m\u00e9dias *\/\n    .mv-modal-cols {\n      display: flex;\n      flex-direction: column;\n    }\n\n    .mv-modal-col--media {\n      display: contents;\n    }\n\n    .mv-modal-col--media > .mv-modal-img {\n      order: -2;\n    }\n\n    .mv-modal-cols > .mv-modal-col:last-child {\n      order: -1;\n    }\n\n    .mv-modal-cols > .mv-modal-col:last-child {\n      padding-right: 0;\n    }\n  }\n\n  .mv-modal-body {\n    display: flex;\n    flex-direction: column;\n    gap: 14px;\n    padding: 22px 26px 26px;\n  }\n\n  .mv-modal-title {\n    margin: 0 !important;\n    font-size: 26px !important;\n    line-height: 1.2 !important;\n    color: #1c2b22 !important;\n  }\n\n  .mv-modal-desc {\n    margin: 0 !important;\n    font-size: 15px;\n    line-height: 1.65;\n    color: #4b5850;\n    white-space: pre-line;\n  }\n\n  .mv-modal-event {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    align-self: flex-start;\n    padding: 7px 12px;\n    border-radius: 10px;\n    background: var(--mv-accent-soft);\n    color: var(--mv-accent);\n    font-size: 14px;\n    font-weight: 600;\n  }\n\n  .mv-fields {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n    gap: 10px 20px;\n    padding: 14px 16px;\n    border-radius: 14px;\n    background: var(--mv-cream);\n  }\n\n  .mv-field span {\n    display: block;\n    margin-bottom: 2px;\n    font-size: 12px;\n    line-height: 1.35 !important;\n    color: var(--mv-muted);\n  }\n\n  .mv-field strong {\n    display: block;\n    font-size: 14px;\n    font-weight: 600;\n    line-height: 1.4 !important;\n    color: #1f2a24;\n    overflow-wrap: anywhere;\n  }\n\n  \/* \u2500\u2500\u2500 Agrandissement automatique par paliers (fiches tr\u00e8s remplies) \u2500\u2500\u2500\n     1. is-wide    : fen\u00eatre plus large, infos sur 3 colonnes, photo plus basse\n     2. is-compact : espacements et textes resserr\u00e9s *\/\n  .mv-modal.is-wide {\n    max-width: min(1320px, calc(100vw - 32px));\n  }\n\n  .mv-modal.is-wide .mv-fields {\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n  }\n\n  .mv-modal.is-wide .mv-modal-img {\n    aspect-ratio: 16 \/ 10;\n    max-height: 36vh;\n  }\n\n  .mv-modal.is-compact .mv-modal-body {\n    gap: 10px;\n    padding: 18px 20px 20px !important;\n  }\n\n  .mv-modal.is-compact .mv-modal-col {\n    gap: 10px;\n  }\n\n  .mv-modal.is-compact .mv-modal-title {\n    font-size: 22px !important;\n  }\n\n  .mv-modal.is-compact .mv-modal-desc {\n    font-size: 14px;\n    line-height: 1.55;\n  }\n\n  .mv-modal.is-compact .mv-fields {\n    gap: 8px 16px;\n    padding: 12px 14px;\n  }\n\n  .mv-modal.is-compact .mv-field strong {\n    font-size: 13px;\n  }\n\n  .mv-modal.is-compact .mv-modal-img {\n    max-height: 30vh;\n  }\n\n  @media (max-width: 900px) {\n    .mv-modal.is-wide .mv-fields {\n      grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n    }\n  }\n\n  .mv-modal-sub {\n    margin: 4px 0 0 !important;\n    font-size: 13px;\n    font-weight: 700;\n    letter-spacing: 0.4px;\n    text-transform: uppercase;\n    color: var(--mv-muted);\n  }\n\n  .mv-gallery {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));\n    gap: 8px;\n  }\n\n  .mv-gallery img {\n    display: block;\n    width: 100%;\n    aspect-ratio: 1;\n    object-fit: cover;\n    border-radius: 10px;\n  }\n\n  .mv-docs a {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    padding: 8px 0;\n    color: var(--mv-accent);\n    font-weight: 600;\n    text-decoration: none;\n  }\n\n  .mv-video {\n    position: relative;\n    aspect-ratio: 16 \/ 9;\n    border-radius: 12px;\n    overflow: hidden;\n    background: #000;\n  }\n\n  .mv-video iframe,\n  .mv-video video {\n    position: absolute;\n    inset: 0;\n    width: 100%;\n    height: 100%;\n    border: 0;\n  }\n\n  .mv-faq details {\n    border-bottom: 1px solid var(--mv-line);\n    padding: 10px 0;\n  }\n\n  .mv-faq summary {\n    cursor: pointer;\n    font-size: 15px !important;\n    font-weight: 600;\n    line-height: 1.4 !important;\n    color: #1c2b22;\n  }\n\n  .mv-faq p {\n    margin: 8px 0 0 !important;\n    color: #4b5850;\n    line-height: 1.55;\n  }\n\n  .mv-modal-close {\n    position: absolute;\n    top: 12px;\n    right: 12px;\n    z-index: 2;\n    width: 40px;\n    height: 40px;\n    border: 0;\n    border-radius: 50%;\n    background: rgba(255, 255, 255, 0.95);\n    color: #1f2a24;\n    font-size: 22px;\n    line-height: 1;\n    cursor: pointer;\n    box-shadow: 0 2px 6px rgba(20, 24, 20, 0.2);\n  }\n\n  \/* \u2500\u2500\u2500 Responsive \u2500\u2500\u2500 *\/\n  @media (max-width: 1100px) {\n    .mv-layout {\n      grid-template-columns: minmax(0, 1fr);\n    }\n\n    .mv-map-panel {\n      position: relative;\n      top: 0;\n      order: -1;\n    }\n\n    .mv-map {\n      aspect-ratio: 4 \/ 3;\n      max-height: 420px;\n    }\n  }\n\n  @media (max-width: 720px) {\n    .mv-wrap {\n      padding: 0 12px 40px;\n    }\n\n    .mv-hero {\n      padding: 36px 22px;\n      border-radius: 18px;\n    }\n\n    .mv-hero::before {\n      background: linear-gradient(180deg, rgba(250, 247, 242, 0.95), rgba(250, 247, 242, 0.8));\n    }\n\n    .mv-seg {\n      width: 100%;\n    }\n\n    .mv-seg button {\n      flex: 1;\n      padding: 0 8px;\n    }\n\n\n\n    .mv-card--featured {\n      grid-column: auto;\n      min-height: 320px;\n    }\n\n    .mv-card--featured .mv-card-title {\n      font-size: 24px !important;\n    }\n\n    .mv-modal-img {\n      height: 200px;\n    }\n  }\n<\/style>\n\n\n<div class=\"mv-wrap\" id=\"mv-app\">\n\n  <header class=\"mv-hero\" style=\"background-image:url(https:\/\/woody.cloudly.space\/app\/uploads\/lot-tourisme\/2020\/12\/thumbs\/web21-190916174831-village-de-cajarc-christophe-bouthe-agence-vent-dautan-1920x960-crop-1615992091.jpg)\">\n    <div class=\"mv-hero-inner\">\n      <h1 class=\"mv-hero-title\">\u00c0 d\u00e9couvrir autour de vous<\/h1>\n      <p class=\"mv-hero-text\">Villages, plages, balades, bonnes adresses et exp\u00e9riences s\u00e9lectionn\u00e9s autour de votre s\u00e9jour.<\/p>\n              <span class=\"mv-hero-chip\">\n          <span class=\"mv-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 21s-7-6.2-7-11.5a7 7 0 0 1 14 0C19 14.8 12 21 12 21z\"\/><circle cx=\"12\" cy=\"9.5\" r=\"2.5\"\/><\/svg><\/span>\n          Autour de <strong>Aux Lodges du Mas de Nadal<\/strong>\n        <\/span>\n          <\/div>\n  <\/header>\n\n  <div class=\"mv-controls\">\n    <label class=\"mv-search\">\n      <span class=\"mv-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"11\" cy=\"11\" r=\"7\"\/><path d=\"M21 21l-4.5-4.5\"\/><\/svg><\/span>\n      <input type=\"search\" id=\"mv-search\" placeholder=\"Rechercher un lieu, une activit\u00e9, un village\u2026\" aria-label=\"Rechercher\">\n    <\/label>\n          <div class=\"mv-seg\" role=\"group\" aria-label=\"Distance maximale\" id=\"mv-distance\">\n        <button type=\"button\" data-km=\"15\">15 km<\/button>\n        <button type=\"button\" data-km=\"30\">30 km<\/button>\n        <button type=\"button\" data-km=\"60\">60 km<\/button>\n        <button type=\"button\" data-km=\"0\" class=\"is-active\">Tout<\/button>\n      <\/div>\n      <\/div>\n\n  <div class=\"mv-cats-wrap\" id=\"mv-cats-wrap\">\n    <button type=\"button\" class=\"mv-cats-arrow mv-cats-arrow--left\" aria-label=\"Cat\u00e9gories pr\u00e9c\u00e9dentes\"><span>\u2039<\/span><\/button>\n    <div class=\"mv-cats\" id=\"mv-cats\" role=\"group\" aria-label=\"Cat\u00e9gories\"><\/div>\n    <button type=\"button\" class=\"mv-cats-arrow mv-cats-arrow--right\" aria-label=\"Cat\u00e9gories suivantes\"><span>\u203a<\/span><\/button>\n  <\/div>\n\n  <div class=\"mv-bar\">\n    <p class=\"mv-count\" id=\"mv-count\"><\/p>\n    <div class=\"mv-seg\" role=\"group\" aria-label=\"Affichage\" id=\"mv-view\">\n      <button type=\"button\" data-view=\"list\">Liste<\/button>\n      <button type=\"button\" data-view=\"map\" class=\"is-active\">Carte<\/button>\n    <\/div>\n  <\/div>\n\n  <div class=\"mv-layout\" id=\"mv-layout\">\n    <div>\n      <div class=\"mv-grid\" id=\"mv-grid\"><\/div>\n      <div class=\"mv-more\" id=\"mv-more\"><\/div>\n    <\/div>\n    <aside class=\"mv-map-panel\">\n      <div class=\"mv-map\" id=\"mv-map\"><\/div>\n      <div id=\"mv-preview\" aria-live=\"polite\"><\/div>\n    <\/aside>\n  <\/div>\n\n  <section class=\"mv-ideas\" id=\"mv-ideas\" aria-labelledby=\"mv-ideas-title\"><\/section>\n\n  <noscript>\n    <ul>\n              <li><strong>Cajarc<\/strong> \u2014 Charmant village m\u00e9di\u00e9val avec des ruelles pittoresques et une belle vue sur la vall\u00e9e du Lot.<\/li>\n              <li><strong>Saint-Cirq-Lapopie<\/strong> \u2014 Class\u00e9 parmi les plus beaux villages de France, offrant des panoramas exceptionnels sur la vall\u00e9e du Lot.<\/li>\n              <li><strong>Figeac<\/strong> \u2014 Ville d&#039;art et d&#039;histoire, berceau de Jean-Fran\u00e7ois Champollion, offrant un riche patrimoine architectural.<\/li>\n              <li><strong>Cahors<\/strong> \u2014 Pr\u00e9fecture du Lot, r\u00e9put\u00e9e pour son vin et son patrimoine m\u00e9di\u00e9val.<\/li>\n              <li><strong>Lacapelle-Marival<\/strong> \u2014 Petit village charmant avec un riche patrimoine historique et une belle place centrale.<\/li>\n              <li><strong>Randonn\u00e9e dans le Parc Naturel des Causses du Quercy<\/strong> \u2014 Explorez les sentiers du Parc Naturel des Causses du Quercy pour d\u00e9couvrir une faune et une flore exceptionnelles.<\/li>\n              <li><strong>Baignade au bord de la rivi\u00e8re C\u00e9l\u00e9<\/strong> \u2014 Profitez des plages naturelles le long de la rivi\u00e8re C\u00e9l\u00e9 pour une baignade rafra\u00eechissante.<\/li>\n              <li><strong>Visite du village m\u00e9di\u00e9val de Saint-Cirq-Lapopie<\/strong> \u2014 Explorez les ruelles pittoresques de ce village perch\u00e9 offrant des vues imprenables sur la vall\u00e9e du Lot.<\/li>\n              <li><strong>Piscine du camping Mas de Nadal<\/strong> \u2014 Profitez d&#039;une piscine ext\u00e9rieure chauff\u00e9e \u00e0 d\u00e9bordement avec une belle terrasse et des bains de soleil. Id\u00e9ale pour se d\u00e9tendre apr\u00e8s une journ\u00e9e d&#039;activit\u00e9s.<\/li>\n              <li><strong>Mariage au Mas de Nadal<\/strong> \u2014 Un domaine hors du temps, rien que pour vous Le Mas de Nadal, c\u2019est une bulle naturelle au c\u0153ur du Lot. Un lieu \u00e0 taille humaine, entour\u00e9 de verdure, o\u00f9&hellip;<\/li>\n              <li><strong>Mariages au Mas de Nadal<\/strong> \u2014 C\u00e9l\u00e9bration de mariages dans un cadre atypique avec privatisation du domaine et h\u00e9bergements en lodges.<\/li>\n          <\/ul>\n  <\/noscript>\n<\/div>\n\n<div class=\"mv-modal-overlay\" id=\"mv-modal\" hidden>\n  <div class=\"mv-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"mv-modal-title\">\n    <button type=\"button\" class=\"mv-modal-close\" id=\"mv-modal-close\" aria-label=\"Fermer\">\u00d7<\/button>\n    <div id=\"mv-modal-content\"><\/div>\n  <\/div>\n<\/div>\n\n<script>\n  (function() {\n    var ITEMS = [{\"id\":0,\"featurable\":true,\"type\":\"villes-aux-alentours\",\"name\":\"Cajarc\",\"image\":\"https:\\\/\\\/woody.cloudly.space\\\/app\\\/uploads\\\/lot-tourisme\\\/2020\\\/12\\\/thumbs\\\/web21-190916174831-village-de-cajarc-christophe-bouthe-agence-vent-dautan-1920x960-crop-1615992091.jpg\",\"description\":\"Charmant village m\\u00e9di\\u00e9val avec des ruelles pittoresques et une belle vue sur la vall\\u00e9e du Lot.\",\"city\":\"\",\"address\":\"Cajarc, 46160\",\"km\":10,\"min\":15,\"lat\":44.47,\"lng\":1.8783,\"tags\":[],\"fields\":[{\"label\":\"Distance depuis le camping (km)\",\"value\":\"10\"},{\"label\":\"Temps en voiture (min)\",\"value\":\"15\"},{\"label\":\"Lieux \\\/ Activit\\u00e9s incontournables\",\"value\":\"Place de la Halle, \\u00c9glise Saint-Pierre, Mus\\u00e9e de l'Artisanat\"},{\"label\":\"March\\u00e9s \\\/ \\u00e9v\\u00e9nements locaux\",\"value\":\"March\\u00e9 hebdomadaire le vendredi matin, F\\u00eate de la Saint-Jean en juin\"},{\"label\":\"Restaurants \\\/ sp\\u00e9cialit\\u00e9s\",\"value\":\"Truffade, Aligot, Viande de boeuf de l'Aubrac\"},{\"label\":\"Adresse compl\\u00e8te\",\"value\":\"Cajarc, 46160\"}],\"link\":\"https:\\\/\\\/www.tourisme-lot.com\\\/cajarc\",\"event\":\"\",\"faq\":[],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":1,\"featurable\":true,\"type\":\"villes-aux-alentours\",\"name\":\"Saint-Cirq-Lapopie\",\"image\":\"https:\\\/\\\/masdenadal.com\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/village-medieval-saint-cirq-lapopie.webp\",\"description\":\"Class\\u00e9 parmi les plus beaux villages de France, offrant des panoramas exceptionnels sur la vall\\u00e9e du Lot.\",\"city\":\"\",\"address\":\"Saint-Cirq-Lapopie, 46330\",\"km\":15,\"min\":20,\"lat\":44.4167,\"lng\":1.6167,\"tags\":[],\"fields\":[{\"label\":\"Distance depuis le camping (km)\",\"value\":\"15\"},{\"label\":\"Temps en voiture (min)\",\"value\":\"20\"},{\"label\":\"Lieux \\\/ Activit\\u00e9s incontournables\",\"value\":\"Place du Sombral, \\u00c9glise Saint-Cirq, Ch\\u00e2teau de Saint-Cirq-Lapopie\"},{\"label\":\"March\\u00e9s \\\/ \\u00e9v\\u00e9nements locaux\",\"value\":\"March\\u00e9 artisanal le dimanche matin, F\\u00eate de la Saint-Cirq en ao\\u00fbt\"},{\"label\":\"Restaurants \\\/ sp\\u00e9cialit\\u00e9s\",\"value\":\"C\\u00e8pes, Foie gras, Vin de Cahors\"},{\"label\":\"Adresse compl\\u00e8te\",\"value\":\"Saint-Cirq-Lapopie, 46330\"}],\"link\":\"https:\\\/\\\/masdenadal.com\\\/tourisme-saint-cirq-lapopie\\\/\",\"event\":\"\",\"faq\":[],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":2,\"featurable\":true,\"type\":\"villes-aux-alentours\",\"name\":\"Figeac\",\"image\":\"https:\\\/\\\/masdenadal.com\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/camping-pres-de-figeac.webp\",\"description\":\"Ville d'art et d'histoire, berceau de Jean-Fran\\u00e7ois Champollion, offrant un riche patrimoine architectural.\",\"city\":\"\",\"address\":\"Figeac, 46100\",\"km\":25,\"min\":30,\"lat\":44.6167,\"lng\":2.049,\"tags\":[],\"fields\":[{\"label\":\"Distance depuis le camping (km)\",\"value\":\"25\"},{\"label\":\"Temps en voiture (min)\",\"value\":\"30\"},{\"label\":\"Lieux \\\/ Activit\\u00e9s incontournables\",\"value\":\"Place Champollion, Mus\\u00e9e Champollion, H\\u00f4tel de la Monnaie\"},{\"label\":\"March\\u00e9s \\\/ \\u00e9v\\u00e9nements locaux\",\"value\":\"March\\u00e9 couvert tous les samedis matin, Festival de la Musique en juillet\"},{\"label\":\"Restaurants \\\/ sp\\u00e9cialit\\u00e9s\",\"value\":\"Truffade, C\\u00e8pes, Vin de Cahors\"},{\"label\":\"Adresse compl\\u00e8te\",\"value\":\"Figeac, 46100\"}],\"link\":\"https:\\\/\\\/masdenadal.com\\\/tourisme-figeac\\\/\",\"event\":\"\",\"faq\":[],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":3,\"featurable\":true,\"type\":\"villes-aux-alentours\",\"name\":\"Cahors\",\"image\":\"https:\\\/\\\/masdenadal.com\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/cahors-lot.png\",\"description\":\"Pr\\u00e9fecture du Lot, r\\u00e9put\\u00e9e pour son vin et son patrimoine m\\u00e9di\\u00e9val.\",\"city\":\"\",\"address\":\"Cahors, 46000\",\"km\":43,\"min\":47,\"lat\":44.45,\"lng\":1.4444,\"tags\":[],\"fields\":[{\"label\":\"Distance depuis le camping (km)\",\"value\":\"43\"},{\"label\":\"Temps en voiture (min)\",\"value\":\"47\"},{\"label\":\"Lieux \\\/ Activit\\u00e9s incontournables\",\"value\":\"Pont Valentr\\u00e9, Cath\\u00e9drale Saint-\\u00c9tienne, Place Fran\\u00e7ois Mitterrand\"},{\"label\":\"March\\u00e9s \\\/ \\u00e9v\\u00e9nements locaux\",\"value\":\"March\\u00e9 couvert tous les mercredis et samedis matin, Festival de Jazz en juillet\"},{\"label\":\"Restaurants \\\/ sp\\u00e9cialit\\u00e9s\",\"value\":\"Vin de Cahors, Foie gras, Truffade\"},{\"label\":\"Adresse compl\\u00e8te\",\"value\":\"Cahors, 46000\"}],\"link\":\"https:\\\/\\\/masdenadal.com\\\/tourisme-cahors\\\/\",\"event\":\"\",\"faq\":[],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":4,\"featurable\":true,\"type\":\"villes-aux-alentours\",\"name\":\"Lacapelle-Marival\",\"image\":\"https:\\\/\\\/upload.wikimedia.org\\\/wikipedia\\\/commons\\\/2\\\/24\\\/Chateau_lacapelle_marival_facade_sud_2.jpg\",\"description\":\"Petit village charmant avec un riche patrimoine historique et une belle place centrale.\",\"city\":\"\",\"address\":\"Lacapelle-Marival, 46120\",\"km\":33,\"min\":37,\"lat\":44.6167,\"lng\":1.8833,\"tags\":[],\"fields\":[{\"label\":\"Distance depuis le camping (km)\",\"value\":\"33\"},{\"label\":\"Temps en voiture (min)\",\"value\":\"37\"},{\"label\":\"Lieux \\\/ Activit\\u00e9s incontournables\",\"value\":\"Ch\\u00e2teau de Lacapelle-Marival, \\u00c9glise Saint-Pierre, Place de la Mairie\"},{\"label\":\"March\\u00e9s \\\/ \\u00e9v\\u00e9nements locaux\",\"value\":\"March\\u00e9 hebdomadaire le mardi matin, F\\u00eate de la Saint-Pierre en juillet\"},{\"label\":\"Restaurants \\\/ sp\\u00e9cialit\\u00e9s\",\"value\":\"Truffade, C\\u00e8pes, Viande de boeuf de l'Aubrac\"},{\"label\":\"Adresse compl\\u00e8te\",\"value\":\"Lacapelle-Marival, 46120\"}],\"link\":\"https:\\\/\\\/www.tourisme-lot.com\\\/lacapelle-marival\\\/\",\"event\":\"\",\"faq\":[],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":5,\"featurable\":true,\"type\":\"activites-et-lieux-recommandes\",\"name\":\"Randonn\\u00e9e dans le Parc Naturel des Causses du Quercy\",\"image\":\"https:\\\/\\\/masdenadal.com\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/parc-nature-des-causses-de-quercy.webp\",\"description\":\"Explorez les sentiers du Parc Naturel des Causses du Quercy pour d\\u00e9couvrir une faune et une flore exceptionnelles.\",\"city\":\"\",\"address\":\"400, Chemin du Mas de Nadal, 2245, Route de Blars, 46330 \\u2013 Sauliac-sur-C\\u00e9l\\u00e9\",\"km\":0,\"min\":null,\"lat\":44.4262,\"lng\":1.7365,\"tags\":[\"Sauliac-sur-C\\u00e9l\\u00e9\",\"nature\"],\"fields\":[{\"label\":\"Type d\\u2019\\u00e9v\\u00e9nement (march\\u00e9, festival, sport, etc.)\",\"value\":\"nature\"},{\"label\":\"Ville \\\/ Zone\",\"value\":\"Sauliac-sur-C\\u00e9l\\u00e9\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"0\"},{\"label\":\"Dur\\u00e9e moyenne\",\"value\":\"variable\"},{\"label\":\"R\\u00e9servation n\\u00e9cessaire ?\",\"value\":\"non\"},{\"label\":\"Adresse compl\\u00e8te\",\"value\":\"400, Chemin du Mas de Nadal, 2245, Route de Blars, 46330 \\u2013 Sauliac-sur-C\\u00e9l\\u00e9\"}],\"link\":\"https:\\\/\\\/masdenadal.com\\\/tourisme-lot\\\/\",\"event\":\"\",\"faq\":[],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":6,\"featurable\":true,\"type\":\"activites-et-lieux-recommandes\",\"name\":\"Baignade au bord de la rivi\\u00e8re C\\u00e9l\\u00e9\",\"image\":\"https:\\\/\\\/masdenadal.com\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/riviere-plage.webp\",\"description\":\"Profitez des plages naturelles le long de la rivi\\u00e8re C\\u00e9l\\u00e9 pour une baignade rafra\\u00eechissante.\",\"city\":\"\",\"address\":\"400, Chemin du Mas de Nadal, 2245, Route de Blars, 46330 \\u2013 Sauliac-sur-C\\u00e9l\\u00e9\",\"km\":0,\"min\":null,\"lat\":44.4262,\"lng\":1.7365,\"tags\":[\"Sauliac-sur-C\\u00e9l\\u00e9\",\"nature\"],\"fields\":[{\"label\":\"Type d\\u2019\\u00e9v\\u00e9nement (march\\u00e9, festival, sport, etc.)\",\"value\":\"nature\"},{\"label\":\"Ville \\\/ Zone\",\"value\":\"Sauliac-sur-C\\u00e9l\\u00e9\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"0\"},{\"label\":\"Dur\\u00e9e moyenne\",\"value\":\"variable\"},{\"label\":\"R\\u00e9servation n\\u00e9cessaire ?\",\"value\":\"non\"},{\"label\":\"Adresse compl\\u00e8te\",\"value\":\"400, Chemin du Mas de Nadal, 2245, Route de Blars, 46330 \\u2013 Sauliac-sur-C\\u00e9l\\u00e9\"}],\"link\":\"https:\\\/\\\/masdenadal.com\\\/plages-rivieres-lot\\\/\",\"event\":\"\",\"faq\":[],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":7,\"featurable\":true,\"type\":\"activites-et-lieux-recommandes\",\"name\":\"Visite du village m\\u00e9di\\u00e9val de Saint-Cirq-Lapopie\",\"image\":\"https:\\\/\\\/masdenadal.com\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/village-medieval-saint-cirq-lapopie.webp\",\"description\":\"Explorez les ruelles pittoresques de ce village perch\\u00e9 offrant des vues imprenables sur la vall\\u00e9e du Lot.\",\"city\":\"\",\"address\":\"Saint-Cirq-Lapopie, 46330\",\"km\":10,\"min\":null,\"lat\":44.4167,\"lng\":1.6167,\"tags\":[\"Saint-Cirq-Lapopie\",\"culture\"],\"fields\":[{\"label\":\"Type d\\u2019\\u00e9v\\u00e9nement (march\\u00e9, festival, sport, etc.)\",\"value\":\"culture\"},{\"label\":\"Ville \\\/ Zone\",\"value\":\"Saint-Cirq-Lapopie\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"10\"},{\"label\":\"Dur\\u00e9e moyenne\",\"value\":\"2 heures\"},{\"label\":\"R\\u00e9servation n\\u00e9cessaire ?\",\"value\":\"non\"},{\"label\":\"Adresse compl\\u00e8te\",\"value\":\"Saint-Cirq-Lapopie, 46330\"}],\"link\":\"https:\\\/\\\/masdenadal.com\\\/tourisme-saint-cirq-lapopie\\\/\",\"event\":\"\",\"faq\":[],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":8,\"featurable\":true,\"type\":\"activites-et-lieux-recommandes\",\"name\":\"Piscine du camping Mas de Nadal\",\"image\":\"https:\\\/\\\/masdenadal.com\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/piscine-en-fin-de-journee.webp\",\"description\":\"Profitez d'une piscine ext\\u00e9rieure chauff\\u00e9e \\u00e0 d\\u00e9bordement avec une belle terrasse et des bains de soleil. Id\\u00e9ale pour se d\\u00e9tendre apr\\u00e8s une journ\\u00e9e d'activit\\u00e9s.\",\"city\":\"\",\"address\":\"400, Chemin du Mas de Nadal, 2245, Route de Blars, 46330 \\u2013 Sauliac-sur-C\\u00e9l\\u00e9\",\"km\":0,\"min\":null,\"lat\":44.4264,\"lng\":1.7365,\"tags\":[\"Sauliac-sur-C\\u00e9l\\u00e9\",\"Loisir aquatique\"],\"fields\":[{\"label\":\"Type d\\u2019\\u00e9v\\u00e9nement (march\\u00e9, festival, sport, etc.)\",\"value\":\"Loisir aquatique\"},{\"label\":\"Ville \\\/ Zone\",\"value\":\"Sauliac-sur-C\\u00e9l\\u00e9\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"0\"},{\"label\":\"Dur\\u00e9e moyenne\",\"value\":\"Variable\"},{\"label\":\"R\\u00e9servation n\\u00e9cessaire ?\",\"value\":\"Non\"},{\"label\":\"Adresse compl\\u00e8te\",\"value\":\"400, Chemin du Mas de Nadal, 2245, Route de Blars, 46330 \\u2013 Sauliac-sur-C\\u00e9l\\u00e9\"}],\"link\":\"https:\\\/\\\/masdenadal.com\\\/camping-piscine-chauffee-lot\\\/\",\"event\":\"\",\"faq\":[],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":9,\"featurable\":true,\"type\":\"evenements-recommandes\",\"name\":\"Mariage au Mas de Nadal\",\"image\":\"https:\\\/\\\/masdenadal.com\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/lounge-evenementiel-mas-de-nadal.webp\",\"description\":\"Un domaine hors du temps, rien que pour vous\\n\\nLe Mas de Nadal, c\\u2019est une bulle naturelle au c\\u0153ur du Lot.\\nUn lieu \\u00e0 taille humaine, entour\\u00e9 de verdure, o\\u00f9 l\\u2019on se sent imm\\u00e9diatement ailleurs.\\n\\nSite enti\\u00e8rement privatisable\\nEnvironnement calme et s\\u00e9curis\\u00e9\\nLieu pi\\u00e9ton\\nClairi\\u00e8res, for\\u00eat, grands espaces ouverts\\nAtmosph\\u00e8re intime et chaleureuse\\nIci, vos invit\\u00e9s ne sont pas dans une salle impersonnelle.\\nIls vivent une exp\\u00e9rience.\\n\\nUn mariage au Mas de Nadal, c\\u2019est :\\n\\nLa nature comme d\\u00e9cor\\nLes lumi\\u00e8res sous les arbres\\nUne soir\\u00e9e qui se prolonge sous les \\u00e9toiles\",\"city\":\"\",\"address\":\"Mas de Nadal, 46330 Saint-Cirq-Lapopie, France\",\"km\":0,\"min\":null,\"lat\":44.426,\"lng\":1.616,\"tags\":[\"Mariage\"],\"fields\":[{\"label\":\"Date \\\/ P\\u00e9riode\",\"value\":\"Toute l'ann\\u00e9e\"},{\"label\":\"Lieu (ville)\",\"value\":\"Sauliac sur C\\u00e9l\\u00e9 \"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"0\"},{\"label\":\"Type d\\u2019\\u00e9v\\u00e9nement (march\\u00e9, festival, sport, etc.)\",\"value\":\"Mariage\"},{\"label\":\"Adresse compl\\u00e8te\",\"value\":\"Mas de Nadal, 46330 Saint-Cirq-Lapopie, France\"}],\"link\":\"https:\\\/\\\/masdenadal.com\\\/location-evenement-lot\\\/\",\"event\":\"\",\"faq\":[],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":10,\"featurable\":true,\"type\":\"evenements-recommandes\",\"name\":\"Mariages au Mas de Nadal\",\"image\":\"https:\\\/\\\/masdenadal.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/911-scaled.jpg\",\"description\":\"C\\u00e9l\\u00e9bration de mariages dans un cadre atypique avec privatisation du domaine et h\\u00e9bergements en lodges.\",\"city\":\"\",\"address\":\"Mas de Nadal, 46330 Saint-Cirq-Lapopie, France\",\"km\":0,\"min\":null,\"lat\":44.426,\"lng\":1.616,\"tags\":[\"Mariage\"],\"fields\":[{\"label\":\"Date \\\/ P\\u00e9riode\",\"value\":\"Toute l'ann\\u00e9e\"},{\"label\":\"Lieu (ville)\",\"value\":\"Saint-Cirq-Lapopie\"},{\"label\":\"Distance depuis le camping (km)\",\"value\":\"0\"},{\"label\":\"Type d\\u2019\\u00e9v\\u00e9nement (march\\u00e9, festival, sport, etc.)\",\"value\":\"Mariage\"},{\"label\":\"Adresse compl\\u00e8te\",\"value\":\"Mas de Nadal, 46330 Saint-Cirq-Lapopie, France\"}],\"link\":\"https:\\\/\\\/masdenadal.com\\\/location-evenement-lot\\\/\",\"event\":\"\",\"faq\":[],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]}];\n    var CATS = {\"villes-aux-alentours\":{\"key\":\"villes-aux-alentours\",\"label\":\"Villes aux alentours\",\"adhoc\":false,\"color\":\"#c2410c\",\"count\":5,\"image\":\"https:\\\/\\\/woody.cloudly.space\\\/app\\\/uploads\\\/lot-tourisme\\\/2020\\\/12\\\/thumbs\\\/web21-190916174831-village-de-cajarc-christophe-bouthe-agence-vent-dautan-1920x960-crop-1615992091.jpg\"},\"activites-et-lieux-recommandes\":{\"key\":\"activites-et-lieux-recommandes\",\"label\":\"Activit\\u00e9s et lieux recommand\\u00e9s\",\"adhoc\":false,\"color\":\"#2563eb\",\"count\":4,\"image\":\"https:\\\/\\\/masdenadal.com\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/parc-nature-des-causses-de-quercy.webp\"},\"evenements-recommandes\":{\"key\":\"evenements-recommandes\",\"label\":\"\\u00c9v\\u00e9nements recommand\\u00e9s\",\"adhoc\":false,\"color\":\"#15803d\",\"count\":2,\"image\":\"https:\\\/\\\/masdenadal.com\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/lounge-evenementiel-mas-de-nadal.webp\"}};\n    var MAP = {\"tiles_url\":\"https:\\\/\\\/tile.openstreetmap.org\\\/{z}\\\/{x}\\\/{y}.png\",\"attribution\":\"&copy; <a href=\\\"https:\\\/\\\/www.openstreetmap.org\\\/copyright\\\">OpenStreetMap<\\\/a>\",\"home\":null};\n    var ACCENT = \"#2e5e45\";\n    var STEP = 12;\n    var BY_ID = {};\n    ITEMS.forEach(function(it) {\n      BY_ID[it.id] = it;\n    });\n\n    var app = document.getElementById('mv-app');\n    if (!app) return;\n\n    var state = { selected: null, page: 1, q: '', km: 0, cat: 'all', limit: STEP, view: window.matchMedia('(max-width: 1100px)').matches ? 'list' : 'map' };\n\n    \/\/ \u2550\u2550\u2550 Ic\u00f4nes (SVG statiques) + ic\u00f4ne d\u00e9duite de la cat\u00e9gorie \u2550\u2550\u2550\n    var ICONS = {\n      grid: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"4\" y=\"4\" width=\"6\" height=\"6\" rx=\"1\"\/><rect x=\"14\" y=\"4\" width=\"6\" height=\"6\" rx=\"1\"\/><rect x=\"4\" y=\"14\" width=\"6\" height=\"6\" rx=\"1\"\/><rect x=\"14\" y=\"14\" width=\"6\" height=\"6\" rx=\"1\"\/><\/svg>',\n      home: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"><path d=\"M3 11l9-7 9 7\"\/><path d=\"M5 10v10h14V10\"\/><path d=\"M10 20v-6h4v6\"\/><\/svg>',\n      beach: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M12 3a9 9 0 0 1 9 9H3a9 9 0 0 1 9-9z\"\/><path d=\"M12 12v9M8 21h8\"\/><\/svg>',\n      leaf: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 19c0-8 5-14 15-14 0 10-6 15-14 15\"\/><path d=\"M5 19l7-7\"\/><\/svg>',\n      family: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"8\" cy=\"6\" r=\"2.5\"\/><circle cx=\"16\" cy=\"6\" r=\"2.5\"\/><path d=\"M4 21v-6a4 4 0 0 1 8 0v6M12 21v-6a4 4 0 0 1 8 0v6\"\/><\/svg>',\n      food: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M7 3v8a2 2 0 0 0 4 0V3M9 11v10M17 3c-2 0-3 2-3 5s1 4 3 4v9\"\/><\/svg>',\n      shop: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"><path d=\"M4 9l1.5-5h13L20 9\"\/><path d=\"M4 9h16v2a3 3 0 0 1-6 0 3 3 0 0 1-4 0 3 3 0 0 1-6 0z\"\/><path d=\"M5 13v7h14v-7\"\/><\/svg>',\n      calendar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\"\/><path d=\"M16 3v4M8 3v4M3 10h18\"\/><\/svg>',\n      wine: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M8 3h8l-.5 6a3.5 3.5 0 0 1-7 0z\"\/><path d=\"M12 13v8M8 21h8\"\/><\/svg>',\n      walk: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"13\" cy=\"4\" r=\"2\"\/><path d=\"M9 21l3-7 3 3v5M8 12l2-4 4 1 3 3\"\/><\/svg>',\n      bed: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M3 18V7M3 14h18v4M21 14v-3a3 3 0 0 0-3-3h-7v6\"\/><circle cx=\"7\" cy=\"11\" r=\"2\"\/><\/svg>',\n      pool: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M2 17c2 0 2-1.5 4-1.5S8 17 10 17s2-1.5 4-1.5 2 1.5 4 1.5 2-1.5 4-1.5M8 14V5a2 2 0 0 1 4 0M14 14V5a2 2 0 0 1 4 0M8 9h6\"\/><\/svg>',\n      info: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 11v6M12 7.5v.5\"\/><\/svg>',\n      pin: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 21s-7-6.2-7-11.5a7 7 0 0 1 14 0C19 14.8 12 21 12 21z\"\/><circle cx=\"12\" cy=\"9.5\" r=\"2.5\"\/><\/svg>',\n      car: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 17h14M5 17v2M19 17v2M4 13l2-6h12l2 6v4H4z\"\/><circle cx=\"8\" cy=\"14.5\" r=\"0.5\"\/><circle cx=\"16\" cy=\"14.5\" r=\"0.5\"\/><\/svg>',\n      clock: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 7v5l3 2\"\/><\/svg>',\n      star: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 3l2.8 5.7 6.2.9-4.5 4.4 1.1 6.2L12 17.3 6.4 20.2l1.1-6.2L3 9.6l6.2-.9z\"\/><\/svg>',\n      arrow: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>',\n      home: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 3L3 19h18L12 3z\"\/><path d=\"M12 3v16M9 19l3-6 3 6\"\/><\/svg>',\n      reset: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 9V4h5M20 15v5h-5M4 4l6 6M20 20l-6-6M15 4h5v5M9 20H4v-5\"\/><\/svg>',\n      maps: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 4L3 6v14l6-2 6 2 6-2V4l-6 2-6-2z\"\/><path d=\"M9 4v14M15 6v14\"\/><\/svg>',\n      doc: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"><path d=\"M6 3h8l4 4v14H6z\"\/><path d=\"M14 3v4h4\"\/><\/svg>'\n    };\n\n    var ICON_RULES = [\n      [\/ville|village|city|alentour\/, 'home'],\n      [\/plage|beach|mer\\b\/, 'beach'],\n      [\/nature|balade|rando|parc|jardin\/, 'leaf'],\n      [\/famil|enfant|kid\/, 'family'],\n      [\/restau|gastro|repas|snack|bar\\b\/, 'food'],\n      [\/march|boutique|commerce|shop\/, 'shop'],\n      [\/evenement|\u00e9v\u00e9nement|event|agenda|atelier|animation\/, 'calendar'],\n      [\/vin|boisson|cave|terroir|bodega\/, 'wine'],\n      [\/activit|sport|loisir|lieu\/, 'walk'],\n      [\/heberg|locatif|accom|mobil\/, 'bed'],\n      [\/piscine|pool|aqua|pataug\/, 'pool'],\n      [\/service|equipement|\u00e9quipement|info\/, 'info']\n    ];\n\n    function catIcon(key) {\n      var c = CATS[key];\n      var hay = (key + ' ' + (c ? c.label : '')).toLowerCase();\n      for (var i = 0; i < ICON_RULES.length; i++) {\n        if (ICON_RULES[i][0].test(hay)) return ICON_RULES[i][1];\n      }\n      return 'pin';\n    }\n\n    function el(tag, cls, text) {\n      var n = document.createElement(tag);\n      if (cls) n.className = cls;\n      if (text != null) n.textContent = text;\n      return n;\n    }\n\n    function icon(name) {\n      var s = el('span', 'mv-icon');\n      s.setAttribute('aria-hidden', 'true');\n      s.innerHTML = ICONS[name] || ICONS.pin;\n      return s;\n    }\n\n    function catColor(key) {\n      return CATS[key] ? CATS[key].color : ACCENT;\n    }\n\n    function norm(s) {\n      return (s || '').toLowerCase().normalize('NFD').replace(\/[\u0300-\u036f]\/g, '');\n    }\n\n    \/\/ \u2550\u2550\u2550 Filtrage \u2550\u2550\u2550\n    function filtered() {\n      var q = norm(state.q.trim());\n      return ITEMS.filter(function(it) {\n        if (state.cat !== 'all' && it.type !== state.cat) return false;\n        \/\/ Distance : seules les fiches qui ont une distance connue sont filtr\u00e9es\n        if (state.km && it.km !== null && it.km > state.km) return false;\n        if (q) {\n          var hay = norm([it.name, it.city, it.description, (CATS[it.type] || {}).label, it.tags.join(' ')].join(' '));\n          if (hay.indexOf(q) === -1) return false;\n        }\n        return true;\n      });\n    }\n\n    \/\/ \u2550\u2550\u2550 Cat\u00e9gories \u2550\u2550\u2550\n    function renderCats() {\n      var box = document.getElementById('mv-cats');\n      box.innerHTML = '';\n      var all = el('button', 'mv-cat' + (state.cat === 'all' ? ' is-active' : ''));\n      all.type = 'button';\n      all.appendChild(icon('grid'));\n      all.appendChild(document.createTextNode('Tout'));\n      all.addEventListener('click', function() {\n        setCat('all');\n      });\n      box.appendChild(all);\n      Object.keys(CATS).forEach(function(key) {\n        var b = el('button', 'mv-cat' + (state.cat === key ? ' is-active' : ''));\n        b.type = 'button';\n        b.style.setProperty('--mv-cat', catColor(key));\n        b.appendChild(icon(catIcon(key)));\n        b.appendChild(document.createTextNode(CATS[key].label));\n        b.addEventListener('click', function() {\n          setCat(key);\n        });\n        box.appendChild(b);\n      });\n      updateCatArrows();\n      var active = box.querySelector('.is-active');\n      if (active && active.scrollIntoView && active.offsetLeft + active.offsetWidth > box.scrollLeft + box.clientWidth) {\n        box.scrollLeft = active.offsetLeft - 80;\n      }\n    }\n\n    \/\/ Fl\u00e8ches de la ligne de cat\u00e9gories (visibles seulement s'il reste \u00e0 d\u00e9filer)\n    var catsWrap = document.getElementById('mv-cats-wrap');\n    var catsRow = document.getElementById('mv-cats');\n\n    function updateCatArrows() {\n      var max = catsRow.scrollWidth - catsRow.clientWidth;\n      catsWrap.classList.toggle('can-left', catsRow.scrollLeft > 4);\n      catsWrap.classList.toggle('can-right', catsRow.scrollLeft < max - 4);\n    }\n    catsRow.addEventListener('scroll', updateCatArrows, { passive: true });\n    window.addEventListener('resize', updateCatArrows);\n    catsWrap.querySelector('.mv-cats-arrow--left').addEventListener('click', function() {\n      catsRow.scrollBy({ left: -catsRow.clientWidth * 0.7, behavior: 'smooth' });\n    });\n    catsWrap.querySelector('.mv-cats-arrow--right').addEventListener('click', function() {\n      catsRow.scrollBy({ left: catsRow.clientWidth * 0.7, behavior: 'smooth' });\n    });\n\n    function setCat(key) {\n      state.cat = key;\n      state.limit = STEP;\n      state.page = 1;\n      renderCats();\n      renderList();\n    }\n\n    \/\/ \u2550\u2550\u2550 Cartes \u2550\u2550\u2550\n    function picture(it) {\n      if (!it.image) {\n        var ph = el('div', 'mv-card-noimg');\n        ph.appendChild(icon(catIcon(it.type)));\n        return ph;\n      }\n      var img = el('img');\n      img.src = it.image;\n      img.alt = it.name;\n      img.loading = 'lazy';\n      img.onerror = function() {\n        img.replaceWith(picture({ type: it.type, image: '' }));\n      };\n      return img;\n    }\n\n    function metaLine(it) {\n      var m = el('p', 'mv-meta');\n      if (it.km !== null) {\n        var a = el('span');\n        a.appendChild(icon('car'));\n        a.appendChild(document.createTextNode(String(it.km).replace('.', ',') + ' km'));\n        m.appendChild(a);\n      }\n      if (it.min !== null) {\n        var b = el('span');\n        b.appendChild(icon('clock'));\n        b.appendChild(document.createTextNode(it.min + ' min'));\n        m.appendChild(b);\n      }\n      if (it.km === null && it.min === null && it.city) {\n        var c = el('span');\n        c.appendChild(icon('pin'));\n        c.appendChild(document.createTextNode(it.city));\n        m.appendChild(c);\n      }\n      return m.childNodes.length ? m : null;\n    }\n\n    function card(it, featured, mini) {\n      var c = el('article', 'mv-card' + (featured ? ' mv-card--featured' : '') + (mini ? ' mv-card--mini' : ''));\n      c.tabIndex = 0;\n      c.dataset.id = it.id;\n      c.style.setProperty('--mv-cat', catColor(it.type));\n\n      var media = el('div', 'mv-card-media');\n      media.appendChild(picture(it));\n      if (!featured && !mini && CATS[it.type]) media.appendChild(el('span', 'mv-pill', CATS[it.type].label));\n      c.appendChild(media);\n\n      var body = el('div', 'mv-card-body');\n      if (featured) {\n        var flag = el('span', 'mv-flag');\n        flag.appendChild(icon('star'));\n        flag.appendChild(document.createTextNode('\u00c0 la une'));\n        body.appendChild(flag);\n      }\n      if (mini && CATS[it.type]) body.appendChild(el('span', 'mv-pill', CATS[it.type].label));\n      body.appendChild(el('h3', 'mv-card-title', it.name));\n      var meta = metaLine(it);\n      if (meta) body.appendChild(meta);\n      if (it.description) body.appendChild(el('p', 'mv-card-desc', it.description));\n      if (!featured && !mini && it.tags.length) {\n        var tags = el('div', 'mv-tags');\n        it.tags.forEach(function(t) {\n          tags.appendChild(el('span', 'mv-tag', t));\n        });\n        body.appendChild(tags);\n      }\n      var foot = el('div', 'mv-card-foot');\n      var btn = el('button', 'mv-discover', 'D\u00e9couvrir');\n      btn.type = 'button';\n      btn.appendChild(icon('arrow'));\n      foot.appendChild(btn);\n      body.appendChild(foot);\n      c.appendChild(body);\n\n      c.addEventListener('click', function() {\n        openModal(it);\n      });\n      c.addEventListener('keydown', function(e) {\n        if (e.key === 'Enter') openModal(it);\n      });\n      if (mini) return c;\n      c.addEventListener('mouseenter', function() {\n        highlightPin(it.id, true);\n      });\n      c.addEventListener('mouseleave', function() {\n        highlightPin(it.id, false);\n      });\n      return c;\n    }\n\n    function renderList() {\n      var list = filtered();\n      var grid = document.getElementById('mv-grid');\n      var more = document.getElementById('mv-more');\n      grid.innerHTML = '';\n      more.innerHTML = '';\n\n      var count = document.getElementById('mv-count');\n      count.innerHTML = '';\n      count.appendChild(el('strong', null, list.length + (list.length > 1 ? ' id\u00e9es' : ' id\u00e9e')));\n      count.appendChild(document.createTextNode(' autour de vous'));\n\n      if (!list.length) {\n        var empty = el('div', 'mv-empty');\n        empty.appendChild(el('strong', null, 'Aucun r\u00e9sultat'));\n        empty.appendChild(document.createTextNode('Essayez une autre recherche, cat\u00e9gorie ou distance.'));\n        grid.appendChild(empty);\n      }\n\n      \/\/ Pagination : 4 rang\u00e9es pleines par page, selon le nombre de colonnes affich\u00e9es.\n      \/\/ La fiche \u00ab \u00c0 la une \u00bb occupe 2 cases : la 1re page a donc une fiche de moins.\n      var cols = gridColumns();\n      var perPage = cols === 1 ? 8 : cols * 4;\n      var featuredOn = !state.q && list.length > 2 && !!list[0].image && !!list[0].featurable && cols > 1;\n      var first = featuredOn ? perPage - 1 : perPage;\n      var pages = list.length <= first ? 1 : 1 + Math.ceil((list.length - first) \/ perPage);\n      if (state.page > pages) state.page = pages;\n      var start = state.page === 1 ? 0 : first + (state.page - 2) * perPage;\n      var end = state.page === 1 ? first : start + perPage;\n\n      list.slice(start, end).forEach(function(it, i) {\n        grid.appendChild(card(it, featuredOn && state.page === 1 && i === 0));\n      });\n\n      if (pages > 1) renderPager(more, pages);\n\n      updateMap(list);\n    }\n\n    \/** Nombre de colonnes de la grille (d\u00e9pend de la largeur disponible) *\/\n    function gridColumns() {\n      var g = document.getElementById('mv-grid');\n      var n = g ? getComputedStyle(g).gridTemplateColumns.split(' ').filter(Boolean).length : 3;\n      return Math.max(1, n || 3);\n    }\n\n    function renderPager(box, pages) {\n      box.setAttribute('role', 'navigation');\n      box.setAttribute('aria-label', 'Pagination des id\u00e9es');\n      var go = function(n) {\n        state.page = n;\n        renderList();\n        var top = document.getElementById('mv-count').getBoundingClientRect().top + window.pageYOffset - headerOffset() - 16;\n        window.scrollTo({ top: top, behavior: 'smooth' });\n      };\n      var btn = function(label, n, opts) {\n        var b = el('button', 'mv-page', label);\n        b.type = 'button';\n        if (opts.aria) b.setAttribute('aria-label', opts.aria);\n        if (opts.current) b.setAttribute('aria-current', 'page');\n        b.disabled = !!opts.disabled;\n        b.addEventListener('click', function() {\n          if (!opts.current) go(n);\n        });\n        box.appendChild(b);\n      };\n      btn('\u2039', state.page - 1, { disabled: state.page === 1, aria: 'Page pr\u00e9c\u00e9dente' });\n      var last = 0;\n      for (var p = 1; p <= pages; p++) {\n        if (p === 1 || p === pages || Math.abs(p - state.page) <= 1) {\n          if (p - last > 1) box.appendChild(el('span', 'mv-page-gap', '\u2026'));\n          btn(String(p), p, { current: p === state.page, aria: 'Page ' + p });\n          last = p;\n        }\n      }\n      btn('\u203a', state.page + 1, { disabled: state.page === pages, aria: 'Page suivante' });\n    }\n\n    \/\/ \u2550\u2550\u2550 Id\u00e9es selon vos envies (cat\u00e9gories les plus fournies) \u2550\u2550\u2550\n    function renderIdeas() {\n      var sec = document.getElementById('mv-ideas');\n      \/\/ Les fiches sans gabarit (\u00ab Infos pratiques \u00bb) ne sont pas une envie.\n      var keys = Object.keys(CATS).filter(function(k) { return !CATS[k].adhoc; }).sort(function(a, b) {\n        return (CATS[b].image ? 1 : 0) - (CATS[a].image ? 1 : 0) || CATS[b].count - CATS[a].count;\n      }).slice(0, 4);\n      if (keys.length < 2) return;\n\n      var head = el('div', 'mv-ideas-head');\n      var h = el('h2', 'mv-ideas-title', 'Id\u00e9es selon vos envies');\n      h.id = 'mv-ideas-title';\n      head.appendChild(h);\n      head.appendChild(el('p', 'mv-ideas-sub', 'Des suggestions pour composer votre s\u00e9jour id\u00e9al.'));\n      sec.appendChild(head);\n\n      var grid = el('div', 'mv-ideas-grid');\n      keys.forEach(function(key) {\n        var c = CATS[key];\n        var b = el('button', 'mv-idea');\n        b.type = 'button';\n        b.style.setProperty('--mv-cat', c.color);\n        var img = el('span', 'mv-idea-img');\n        if (c.image) img.style.backgroundImage = 'url(\"' + c.image.replace(\/\"\/g, '%22') + '\")';\n        b.appendChild(img);\n        var body = el('span', 'mv-idea-body');\n        body.appendChild(icon(catIcon(key)));\n        var txt = el('span', 'mv-idea-text');\n        txt.appendChild(el('strong', null, c.label));\n        txt.appendChild(el('span', null, c.count + (c.count > 1 ? ' id\u00e9es' : ' id\u00e9e')));\n        body.appendChild(txt);\n        body.appendChild(icon('arrow'));\n        b.appendChild(body);\n        b.addEventListener('click', function() {\n          setCat(key);\n          var top = document.getElementById('mv-cats').getBoundingClientRect().top + window.pageYOffset - headerOffset() - 16;\n          window.scrollTo({ top: top, behavior: 'smooth' });\n        });\n        grid.appendChild(b);\n      });\n      sec.appendChild(grid);\n    }\n\n    \/\/ \u2550\u2550\u2550 Carte Leaflet \u2550\u2550\u2550\n    var map = null,\n      layer = null,\n      homeMarker = null,\n      radius = null,\n      resetBtn = null,\n      fitting = false, \/\/ cadrage lanc\u00e9 par le code (et non par l'utilisateur)\n      overview = null, \/\/ dernier cadrage \u00ab vue d'ensemble \u00bb\n      pins = {};\n\n    \/\/ Copie de Leaflet utilis\u00e9e pour TOUTE la carte. Sur certains sites (th\u00e8me qui\n    \/\/ d\u00e9place les scripts avec jQuery, WP Rocket\u2026) Leaflet s'ex\u00e9cute deux fois : la\n    \/\/ 2e copie \u00e9crase window.L alors que markercluster s'est attach\u00e9 \u00e0 la 1re.\n    \/\/ M\u00e9langer les deux copies rend les rep\u00e8res invisibles et casse le regroupement.\n    var Lf = null;\n\n    function resolveLeaflet() {\n      var cur = window.L;\n      if (!cur) return null;\n      if (typeof cur.markerClusterGroup === 'function' && typeof cur.MarkerClusterGroup === 'function') return cur;\n      if (typeof cur.noConflict === 'function') {\n        var current = cur.noConflict(); \/\/ window.L \u2190 copie pr\u00e9c\u00e9dente\n        var previous = window.L;\n        if (previous && previous !== current && typeof previous.MarkerClusterGroup === 'function') {\n          \/\/ markercluster lit window.L \u00e0 chaque action (clic, zoom) : on remet\n          \/\/ durablement la copie qui le porte (l'autre n'est qu'un doublon de la m\u00eame version).\n          \/\/ Sans \u00e7a, les identifiants internes des deux copies se m\u00e9langent et les\n          \/\/ clics sur les rep\u00e8res \/ groupes sont perdus.\n          window.L = previous;\n          return previous;\n        }\n        window.L = current;\n      }\n      return null;\n    }\n\n    function pinIcon(color, hover, selected) {\n      return Lf.divIcon({\n        className: 'mv-pin' + (hover ? ' is-hover' : '') + (selected ? ' is-selected' : ''),\n        html: '<svg width=\"30\" height=\"39\" viewBox=\"0 0 28 36\"><path d=\"M14 35C14 35 26 22.5 26 13.5A12 12 0 0 0 2 13.5C2 22.5 14 35 14 35Z\" fill=\"' + color + '\" stroke=\"#fff\" stroke-width=\"2\"\/><circle cx=\"14\" cy=\"13.5\" r=\"4.5\" fill=\"#fff\"\/><\/svg>',\n        iconSize: [30, 39],\n        iconAnchor: [15, 39],\n        popupAnchor: [0, -34]\n      });\n    }\n\n    var mapTries = 0;\n\n    function initMap() {\n      var elMap = document.getElementById('mv-map');\n      if (!elMap) return;\n      \/\/ Attend Leaflet + markercluster (scripts parfois diff\u00e9r\u00e9s), 8 s max ;\n      \/\/ au-del\u00e0, carte sans regroupement plut\u00f4t que pas de carte.\n      Lf = resolveLeaflet();\n      if (!Lf) {\n        if (++mapTries < 80) return setTimeout(initMap, 100);\n        if (!window.L) return;\n        Lf = window.L;\n      }\n      map = Lf.map(elMap, { zoomControl: false, scrollWheelZoom: false, attributionControl: false }).setView([46.6, 1.9], 6);\n      \/\/ Garde-fou : si le th\u00e8me r\u00e9ex\u00e9cute Leaflet plus tard, on remet la bonne copie\n      \/\/ juste avant toute interaction (markercluster lit window.L au moment du clic).\n      ['pointerdown', 'mousedown', 'touchstart', 'click', 'wheel'].forEach(function(t) {\n        elMap.addEventListener(t, function() {\n          if (window.L !== Lf) window.L = Lf;\n        }, true);\n      });\n      Lf.tileLayer(MAP.tiles_url, { maxZoom: 19 }).addTo(map);\n      Lf.control.zoom({ position: 'bottomright' }).addTo(map);\n      Lf.control.attribution({ position: 'bottomleft', prefix: false }).addAttribution(MAP.attribution).addTo(map);\n\n      \/\/ \u00ab Revenir \u00e0 la vue d'ensemble \u00bb : appara\u00eet d\u00e8s que l'utilisateur zoome \/ d\u00e9place la carte\n      resetBtn = el('button', 'mv-reset');\n      resetBtn.type = 'button';\n      resetBtn.hidden = true;\n      resetBtn.appendChild(icon('reset'));\n      resetBtn.appendChild(document.createTextNode('Revenir \u00e0 la vue d\u2019ensemble'));\n      resetBtn.addEventListener('click', function() {\n        fitOverview();\n        resetBtn.hidden = true;\n      });\n      elMap.appendChild(resetBtn);\n      Lf.DomEvent.disableClickPropagation(resetBtn);\n      map.on('zoomstart movestart', function() {\n        if (!fitting && resetBtn) resetBtn.hidden = false;\n      });\n\n      \/\/ Rep\u00e8re de l'\u00e9tablissement, toujours visible (hors regroupement)\n      if (MAP.home) {\n        homeMarker = Lf.marker([MAP.home.lat, MAP.home.lng], {\n          icon: Lf.divIcon({ className: 'mv-home', html: '<span class=\"mv-home-pin\">' + ICONS.home + '<\/span>', iconSize: [44, 44], iconAnchor: [22, 22] }),\n          \/\/ Sous les rep\u00e8res et groupes : les fiches situ\u00e9es \u00e0 l'\u00e9tablissement m\u00eame\n          \/\/ (souvent nombreuses) restent visibles et cliquables par-dessus.\n          zIndexOffset: -1000,\n          keyboard: false,\n          interactive: false,\n          title: MAP.home.label\n        }).addTo(map);\n        homeMarker.bindTooltip(MAP.home.label, { permanent: true, direction: 'right', offset: [24, 0], className: 'mv-home-label' });\n      }\n\n      layer = (typeof Lf.markerClusterGroup === 'function') ? Lf.markerClusterGroup({\n        showCoverageOnHover: false,\n        maxClusterRadius: 45,\n        iconCreateFunction: function(cl) {\n          var n = cl.getChildCount();\n          var s = n < 10 ? 34 : (n < 50 ? 40 : 46);\n          return Lf.divIcon({ className: 'mv-cluster', html: '<span style=\"width:' + s + 'px;height:' + s + 'px;background:' + ACCENT + '\">' + n + '<\/span>', iconSize: [s, s] });\n        }\n      }) : Lf.layerGroup();\n      layer.addTo(map);\n      renderList();\n    }\n\n    function updateMap(list) {\n      if (!map || !layer) return;\n      layer.clearLayers();\n      pins = {};\n      var bounds = [];\n      var markers = [];\n      list.forEach(function(it) {\n        if (it.lat === null) return;\n        var m = Lf.marker([it.lat, it.lng], { icon: pinIcon(catColor(it.type), false, it.id === state.selected), title: it.name });\n        m.on('click', function() {\n          selectItem(it.id);\n        });\n        markers.push(m);\n        pins[it.id] = m;\n        bounds.push([it.lat, it.lng]);\n      });\n      \/\/ Ajout group\u00e9 : un seul recalcul des regroupements (plus fiable que addLayer un par un)\n      if (typeof layer.addLayers === 'function') layer.addLayers(markers);\n      else markers.forEach(function(m) {\n        layer.addLayer(m);\n      });\n\n      \/\/ Rayon du filtre de distance autour de l'\u00e9tablissement\n      if (radius) {\n        map.removeLayer(radius);\n        radius = null;\n      }\n      if (MAP.home) {\n        bounds.push([MAP.home.lat, MAP.home.lng]);\n        if (state.km) {\n          radius = Lf.circle([MAP.home.lat, MAP.home.lng], {\n            radius: state.km * 1000,\n            color: ACCENT,\n            weight: 1.5,\n            dashArray: '6 6',\n            fillColor: ACCENT,\n            fillOpacity: 0.06,\n            interactive: false\n          }).addTo(map);\n        }\n      }\n\n      if (state.selected !== null && !pins[state.selected]) state.selected = null;\n      renderPreview();\n      overview = radius ? { bounds: radius.getBounds(), padding: [20, 20] } :\n        (bounds.length > 1 ? { bounds: bounds, padding: [40, 40] } :\n          (bounds.length === 1 ? { center: bounds[0] } : null));\n      fitOverview();\n      if (resetBtn) resetBtn.hidden = true;\n      setTimeout(function() {\n        map.invalidateSize();\n      }, 50);\n    }\n\n    \/** Cadre la carte sur la vue d'ensemble, sans afficher le bouton \u00ab Revenir\u2026 \u00bb *\/\n    function fitOverview() {\n      if (!map || !overview) return;\n      fitting = true;\n      if (overview.center) map.setView(overview.center, 13, { animate: false });\n      else map.fitBounds(overview.bounds, { padding: overview.padding, maxZoom: 13, animate: false });\n      setTimeout(function() {\n        fitting = false;\n      }, 50);\n    }\n\n    function highlightPin(id, on) {\n      var m = pins[id];\n      if (!m) return;\n      var it = BY_ID[id];\n      var selected = id === state.selected;\n      m.setIcon(pinIcon(catColor(it.type), on, selected));\n      m.setZIndexOffset(on || selected ? 1000 : 0);\n    }\n\n    \/** S\u00e9lectionne une fiche depuis la carte : rep\u00e8re mis en avant + fiche sous la carte *\/\n    function selectItem(id) {\n      var prev = state.selected;\n      state.selected = id;\n      if (prev !== null) highlightPin(prev, false);\n      highlightPin(id, false);\n      renderPreview();\n    }\n\n    function renderPreview() {\n      var box = document.getElementById('mv-preview');\n      if (!box) return;\n      box.innerHTML = '';\n      var it = state.selected !== null ? BY_ID[state.selected] : null;\n      if (!it) {\n        var hint = el('div', 'mv-preview-hint');\n        hint.appendChild(icon('pin'));\n        hint.appendChild(document.createTextNode('Cliquez sur un rep\u00e8re de la carte pour afficher la fiche ici.'));\n        box.appendChild(hint);\n        return;\n      }\n      box.appendChild(card(it, false, true));\n    }\n\n    \/\/ \u2550\u2550\u2550 Modal \u2550\u2550\u2550\n    var modal = document.getElementById('mv-modal');\n    if (modal.parentNode !== document.body) document.body.appendChild(modal);\n    var content = document.getElementById('mv-modal-content');\n    content.style.setProperty('--mv-accent', ACCENT);\n    content.style.setProperty('--mv-accent-soft', ACCENT + '1a');\n    content.style.setProperty('--mv-cream', '#faf7f2');\n    content.style.setProperty('--mv-line', '#ebe5da');\n    content.style.setProperty('--mv-muted', '#6b6559');\n    var lastFocus = null;\n\n    function openModal(it) {\n      lastFocus = document.activeElement;\n      content.innerHTML = '';\n      content.style.setProperty('--mv-cat', catColor(it.type));\n\n      \/\/ Deux colonnes d\u00e8s le haut : m\u00e9dias \/ actions \u00e0 gauche, texte \u00e0 droite\n      var body = el('div', 'mv-modal-body');\n      var cols = el('div', 'mv-modal-cols');\n      var side = el('div', 'mv-modal-col mv-modal-col--media');\n      var main = el('div', 'mv-modal-col');\n      cols.appendChild(side);\n      cols.appendChild(main);\n      body.appendChild(cols);\n      var mainBody = body;\n\n      if (it.image) {\n        var img = el('img', 'mv-modal-img');\n        img.src = it.image;\n        img.alt = it.name;\n        img.onerror = function() {\n          img.remove();\n        };\n        side.appendChild(img);\n      }\n\n      body = main;\n      if (CATS[it.type]) {\n        var pill = el('span', 'mv-pill', CATS[it.type].label);\n        pill.style.alignSelf = 'flex-start';\n        body.appendChild(pill);\n      }\n      var t = el('h2', 'mv-modal-title', it.name);\n      t.id = 'mv-modal-title';\n      body.appendChild(t);\n      var meta = metaLine(it);\n      if (meta) body.appendChild(meta);\n      if (it.event) {\n        var ev = el('span', 'mv-modal-event');\n        ev.appendChild(icon('calendar'));\n        ev.appendChild(document.createTextNode(it.event));\n        body.appendChild(ev);\n      }\n      if (it.description) body.appendChild(el('p', 'mv-modal-desc', it.description));\n\n      if (it.fields.length) {\n        var f = el('div', 'mv-fields');\n        it.fields.forEach(function(fd) {\n          var d = el('div', 'mv-field');\n          d.appendChild(el('span', null, fd.label));\n          d.appendChild(el('strong', null, fd.value));\n          f.appendChild(d);\n        });\n        body.appendChild(f);\n      }\n\n      \/\/ Colonne m\u00e9dias (gauche)\n      body = side;\n      var actions = el('div', 'mv-modal-actions');\n      \/\/ Google Maps seulement si on sait o\u00f9 se trouve la fiche (sinon lien trompeur)\n      var gmTarget = mapsTarget(it);\n      if (gmTarget) {\n        var gm = el('a', 'mv-btn', gmTarget.label);\n        gm.href = gmTarget.url;\n        gm.target = '_blank';\n        gm.rel = 'noopener';\n        gm.insertBefore(icon('maps'), gm.firstChild);\n        actions.appendChild(gm);\n      }\n      if (it.link) {\n        var l = el('a', 'mv-btn mv-btn--ghost', 'Site officiel');\n        l.href = it.link;\n        l.target = '_blank';\n        l.rel = 'noopener';\n        l.appendChild(icon('arrow'));\n        actions.appendChild(l);\n      }\n      body.appendChild(actions);\n\n      if (it.video_url) {\n        body.appendChild(el('p', 'mv-modal-sub', 'Vid\u00e9o'));\n        var e = it.video_embed;\n        if (e && (e.type === 'youtube' || e.type === 'vimeo') && e.src) {\n          var v = el('div', 'mv-video');\n          var fr = el('iframe');\n          fr.src = e.src;\n          fr.allowFullscreen = true;\n          fr.setAttribute('allow', 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture');\n          fr.referrerPolicy = 'strict-origin-when-cross-origin';\n          v.appendChild(fr);\n          body.appendChild(v);\n        } else if (e && e.type === 'file' && e.src) {\n          var vw = el('div', 'mv-video');\n          var vid = el('video');\n          vid.src = e.src;\n          vid.controls = true;\n          vid.preload = 'metadata';\n          vw.appendChild(vid);\n          body.appendChild(vw);\n        } else {\n          var vl = el('a', null, it.video_url);\n          vl.href = it.video_url;\n          vl.target = '_blank';\n          vl.rel = 'noopener';\n          body.appendChild(vl);\n        }\n      }\n\n      if (it.gallery.length) {\n        body.appendChild(el('p', 'mv-modal-sub', 'Galerie'));\n        var g = el('div', 'mv-gallery');\n        it.gallery.forEach(function(src) {\n          var a = el('a');\n          a.href = src;\n          a.target = '_blank';\n          a.rel = 'noopener';\n          var gi = el('img');\n          gi.src = src;\n          gi.alt = '';\n          gi.loading = 'lazy';\n          a.appendChild(gi);\n          g.appendChild(a);\n        });\n        body.appendChild(g);\n      }\n\n      var docs = it.documents.filter(function(d) {\n        return d && d.url;\n      });\n      if (docs.length) {\n        body.appendChild(el('p', 'mv-modal-sub', 'Documents'));\n        var dl = el('div', 'mv-docs');\n        docs.forEach(function(d) {\n          var a = el('a');\n          a.href = d.url;\n          a.target = '_blank';\n          a.rel = 'noopener';\n          a.appendChild(icon('doc'));\n          a.appendChild(document.createTextNode(d.nom || 'Document'));\n          dl.appendChild(a);\n        });\n        body.appendChild(dl);\n      }\n\n      if (it.faq.length) {\n        body = main; \/\/ la FAQ reste dans la colonne texte\n        body.appendChild(el('p', 'mv-modal-sub', 'Questions fr\u00e9quentes'));\n        var fq = el('div', 'mv-faq');\n        it.faq.forEach(function(qa) {\n          var det = el('details');\n          det.appendChild(el('summary', null, qa.question));\n          det.appendChild(el('p', null, qa.answer || 'Pas encore de r\u00e9ponse.'));\n          fq.appendChild(det);\n        });\n        body.appendChild(fq);\n      }\n\n      content.appendChild(mainBody);\n      modal.hidden = false;\n      fitModal();\n      content.querySelectorAll('img, iframe, video').forEach(function(m) {\n        m.addEventListener('load', fitModal);\n        m.addEventListener('loadedmetadata', fitModal);\n      });\n      document.documentElement.style.overflow = 'hidden';\n      document.getElementById('mv-modal-close').focus();\n    }\n\n    \/**\n     * Agrandissement automatique : on passe au palier suivant tant que le contenu\n     * d\u00e9passe la hauteur disponible (sur grand \u00e9cran seulement).\n     *\/\n    function fitModal() {\n      var m = modal.querySelector('.mv-modal');\n      if (!m || modal.hidden) return;\n      m.classList.remove('is-wide', 'is-compact');\n      if (window.innerWidth <= 900) return;\n      var overflows = function() {\n        return m.scrollHeight > m.clientHeight + 2;\n      };\n      if (!overflows()) return;\n      m.classList.add('is-wide');\n      if (!overflows()) return;\n      m.classList.add('is-compact');\n    }\n    window.addEventListener('resize', function() {\n      if (!modal.hidden) fitModal();\n    });\n\n    \/** Lien Google Maps : coordonn\u00e9es si connues, sinon nom + ville \/ adresse *\/\n    \/**\n     * Cible Google Maps, par ordre de fiabilit\u00e9 :\n     *   1. coordonn\u00e9es de la fiche\n     *   2. nom + adresse (ou ville)\n     *   3. position de l'\u00e9tablissement (fiche sans lieu = \u00e9quipement sur place)\n     *   4. aucune \u2192 pas de bouton\n     *\/\n    function mapsTarget(it) {\n      var base = 'https:\/\/www.google.com\/maps\/search\/?api=1&query=';\n      if (it.lat !== null) return { url: base + encodeURIComponent(it.lat + ',' + it.lng), label: 'Voir sur Google Maps' };\n      var where = it.address || it.city;\n      if (where) return { url: base + encodeURIComponent(it.name + ', ' + where), label: 'Voir sur Google Maps' };\n      if (MAP.home) return { url: base + encodeURIComponent(MAP.home.lat + ',' + MAP.home.lng), label: 'Voir l\u2019\u00e9tablissement sur Google Maps' };\n      return null;\n    }\n\n    function closeModal() {\n      modal.hidden = true;\n      document.documentElement.style.overflow = '';\n      if (lastFocus) lastFocus.focus();\n    }\n\n    document.getElementById('mv-modal-close').addEventListener('click', closeModal);\n    modal.addEventListener('click', function(e) {\n      if (e.target === modal) closeModal();\n    });\n    document.addEventListener('keydown', function(e) {\n      if (e.key === 'Escape' && !modal.hidden) closeModal();\n    });\n\n    \/\/ \u2550\u2550\u2550 Contr\u00f4les \u2550\u2550\u2550\n    \/**\n     * Hauteur occup\u00e9e en haut de l'\u00e9cran par les barres fixes \/ collantes du site\n     * (barre d'admin, en-t\u00eate, barre de r\u00e9servation\u2026), quelle que soit leur classe :\n     * on sonde le haut de l'\u00e9cran et on empile les barres trouv\u00e9es.\n     *\/\n    function headerOffset() {\n      var bottom = 0;\n      var vw = window.innerWidth,\n        vh = window.innerHeight;\n      var isBar = function(el) {\n        if (!el || el === document.body || el === document.documentElement) return false;\n        if (el.closest('#mv-app, .ea-modal-overlay, .mv-modal-overlay')) return false;\n        var pos = getComputedStyle(el).position;\n        if (pos !== 'fixed' && pos !== 'sticky') return false;\n        var r = el.getBoundingClientRect();\n        \/\/ vraie barre : large, pas trop haute (exclut bulles de chat, boutons flottants, popups)\n        return r.width >= vw * 0.3 && r.height > 0 && r.height < vh * 0.45;\n      };\n      for (var pass = 0; pass < 5; pass++) {\n        var y = bottom + 2,\n          found = 0;\n        if (y >= vh * 0.5) break;\n        [0.15, 0.5, 0.85].forEach(function(fx) {\n          (document.elementsFromPoint(vw * fx, y) || []).forEach(function(el) {\n            for (var n = el; n && n !== document.body; n = n.parentElement) {\n              if (isBar(n)) {\n                var r = n.getBoundingClientRect();\n                if (r.top <= y + 1 && r.bottom > found) found = r.bottom;\n                break;\n              }\n            }\n          });\n        });\n        if (found <= bottom) break;\n        bottom = found;\n      }\n      app.style.setProperty('--mv-header', Math.round(bottom) + 'px');\n      return bottom;\n    }\n\n    var searchTimer = null;\n    document.getElementById('mv-search').addEventListener('input', function(e) {\n      clearTimeout(searchTimer);\n      searchTimer = setTimeout(function() {\n        state.q = e.target.value;\n        state.limit = STEP;\n      state.page = 1;\n        renderList();\n      }, 150);\n    });\n\n    var dist = document.getElementById('mv-distance');\n    if (dist) {\n      dist.querySelectorAll('button').forEach(function(b) {\n        b.addEventListener('click', function() {\n          state.km = parseInt(b.getAttribute('data-km'), 10) || 0;\n          state.limit = STEP;\n      state.page = 1;\n          dist.querySelectorAll('button').forEach(function(x) {\n            x.classList.toggle('is-active', x === b);\n          });\n          renderList();\n        });\n      });\n    }\n\n    var viewSeg = document.getElementById('mv-view');\n    var layoutEl = document.getElementById('mv-layout');\n\n    function setView(v) {\n      state.view = v;\n      layoutEl.classList.toggle('is-list', v === 'list');\n      viewSeg.querySelectorAll('button').forEach(function(x) {\n        x.classList.toggle('is-active', x.getAttribute('data-view') === v);\n      });\n      if (map) setTimeout(function() {\n        map.invalidateSize();\n      }, 60);\n    }\n    viewSeg.querySelectorAll('button').forEach(function(b) {\n      b.addEventListener('click', function() {\n        setView(b.getAttribute('data-view'));\n      });\n    });\n\n    \/\/ Pas de carte si aucune fiche n'est g\u00e9olocalis\u00e9e\n    if (!ITEMS.some(function(it) {\n        return it.lat !== null;\n      })) {\n      viewSeg.style.display = 'none';\n      state.view = 'list';\n    }\n\n    headerOffset();\n    window.addEventListener('resize', headerOffset);\n    \/\/ Les barres du site peuvent appara\u00eetre au d\u00e9filement (barre de r\u00e9servation\u2026)\n    var hoTicking = false;\n    window.addEventListener('scroll', function() {\n      if (hoTicking) return;\n      hoTicking = true;\n      requestAnimationFrame(function() {\n        headerOffset();\n        hoTicking = false;\n      });\n    }, { passive: true });\n    var lastCols = null,\n      resizeTimer = null;\n    window.addEventListener('resize', function() {\n      clearTimeout(resizeTimer);\n      resizeTimer = setTimeout(function() {\n        var c = gridColumns();\n        if (lastCols !== null && c !== lastCols) renderList();\n        lastCols = c;\n      }, 200);\n    });\n    renderCats();\n    renderIdeas();\n    setView(state.view);\n    renderList();\n    renderPreview();\n    initMap();\n  })();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","_gt_ctv_global_id":"","_gt_ctv_id_group":false,"inline_featured_image":false,"gt_fse_maillage_image":"","gt_fse_maillage_titre":"Find out more","gt_fse_maillage_alt":"Find out more","gt_fse_maillage_resume":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-7849","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/masdenadal.com\/en\/wp-json\/wp\/v2\/pages\/7849","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/masdenadal.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/masdenadal.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/masdenadal.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/masdenadal.com\/en\/wp-json\/wp\/v2\/comments?post=7849"}],"version-history":[{"count":0,"href":"https:\/\/masdenadal.com\/en\/wp-json\/wp\/v2\/pages\/7849\/revisions"}],"wp:attachment":[{"href":"https:\/\/masdenadal.com\/en\/wp-json\/wp\/v2\/media?parent=7849"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/masdenadal.com\/en\/wp-json\/wp\/v2\/categories?post=7849"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/masdenadal.com\/en\/wp-json\/wp\/v2\/tags?post=7849"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}