{"id":8891,"date":"2026-10-20T12:12:47","date_gmt":"2026-10-20T10:12:47","guid":{"rendered":"https:\/\/www.camping-florac.com\/elaia-metadatas-2\/"},"modified":"2026-10-20T12:12:47","modified_gmt":"2026-10-20T10:12:47","slug":"elaia-metadatas","status":"publish","type":"page","link":"https:\/\/www.camping-florac.com\/en\/elaia-metadatas\/","title":{"rendered":"Discover around you"},"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\":\"Florac\",\"description\":\"Florac is a charming small town located just 2.5 km from the Le Pont du Tarn campsite. It is known for its friendly atmosphere, local markets, and close access to the C\u00e9vennes National Park. It\u2019s an excellent starting point for exploring the region.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a7dd6a9bd2a2.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.3246156,\"longitude\":3.5943317},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"City Name\",\"value\":\"Florac\"},{\"@type\":\"PropertyValue\",\"name\":\"Type of city (city \/ villages \/ hamlet...)\",\"value\":\"Town\"},{\"@type\":\"PropertyValue\",\"name\":\"Department\",\"value\":\"Loz\u00e8re\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance from the campsite (km)\",\"value\":\"2.5\"},{\"@type\":\"PropertyValue\",\"name\":\"Travel time from the campsite (min)\",\"value\":\"5\"},{\"@type\":\"PropertyValue\",\"name\":\"Points of interest\",\"value\":\"C\u00e9vennes National Park, Thursday morning market, Tarn River, Gorges du Tarn\"},{\"@type\":\"PropertyValue\",\"name\":\"Owners' favorites\",\"value\":\"The local Thursday morning market and hiking in the C\u00e9vennes National Park\"}]}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"Thing\",\"name\":\"Le Pont-de-Montvert\",\"description\":\"Le Pont-de-Montvert is a typical C\u00e9venol village located about 15 km from the campsite. It offers an authentic setting with its stone bridge and pebble beaches on the river.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a7dd72255892.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.3632783,\"longitude\":3.7453377},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"City Name\",\"value\":\"Le Pont-de-Montvert\"},{\"@type\":\"PropertyValue\",\"name\":\"Type of city (city \/ villages \/ hamlet...)\",\"value\":\"Village\"},{\"@type\":\"PropertyValue\",\"name\":\"Department\",\"value\":\"Loz\u00e8re\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance from the campsite (km)\",\"value\":\"15\"},{\"@type\":\"PropertyValue\",\"name\":\"Travel time from the campsite (min)\",\"value\":\"20\"},{\"@type\":\"PropertyValue\",\"name\":\"Points of interest\",\"value\":\"Historic village, pebble beach, Tarn river, local market\"},{\"@type\":\"PropertyValue\",\"name\":\"Owners' favorites\",\"value\":\"Picturesque beach under the old bridge and the tranquility of the village\"}]}},{\"@type\":\"ListItem\",\"position\":3,\"item\":{\"@type\":\"Thing\",\"name\":\"Saint-Jean-du-Gard\",\"description\":\"Saint-Jean-du-Gard is a charming C\u00e9venol town located about 35 km from the campground. With its rich heritage, it offers numerous cultural and outdoor activities.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a7dd7f8486e5.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.1055556,\"longitude\":3.8869444},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"City Name\",\"value\":\"Saint-Jean-du-Gard\"},{\"@type\":\"PropertyValue\",\"name\":\"Type of city (city \/ villages \/ hamlet...)\",\"value\":\"City\"},{\"@type\":\"PropertyValue\",\"name\":\"Department\",\"value\":\"Gard\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance from the campsite (km)\",\"value\":\"35\"},{\"@type\":\"PropertyValue\",\"name\":\"Travel time from the campsite (min)\",\"value\":\"1 hour 15\"},{\"@type\":\"PropertyValue\",\"name\":\"Points of interest\",\"value\":\"Cevenol Museum, hiking trails, historic center, local crafts\"},{\"@type\":\"PropertyValue\",\"name\":\"Owners' favorites\",\"value\":\"The Cevenol museum and the nature hiking trails\"}]}},{\"@type\":\"ListItem\",\"position\":4,\"item\":{\"@type\":\"Thing\",\"name\":\"Sainte-Enimie\",\"description\":\"Sainte-Enimie is a classified village among the most beautiful in France, located about 25 km from the campsite. It is known for its medieval alleyways and access to the Gorges du Tarn.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a7dd87a16a33.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.3675,\"longitude\":3.41194},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"City Name\",\"value\":\"Sainte-Enimie\"},{\"@type\":\"PropertyValue\",\"name\":\"Type of city (city \/ villages \/ hamlet...)\",\"value\":\"Village\"},{\"@type\":\"PropertyValue\",\"name\":\"Department\",\"value\":\"Loz\u00e8re\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance from the campsite (km)\",\"value\":\"25\"},{\"@type\":\"PropertyValue\",\"name\":\"Travel time from the campsite (min)\",\"value\":\"30\"},{\"@type\":\"PropertyValue\",\"name\":\"Points of interest\",\"value\":\"Medieval village, Gorges du Tarn, hiking trails, crafts\"},{\"@type\":\"PropertyValue\",\"name\":\"Owners' favorites\",\"value\":\"The old alleyways and the panoramic view of the Gorges du Tarn\"}]}},{\"@type\":\"ListItem\",\"position\":5,\"item\":{\"@type\":\"Thing\",\"name\":\"Meyrueis\",\"description\":\"Meyrueis is a vibrant city located 18 km from the camping, offering rich natural and cultural heritage along the C\u00e9vennes mountains.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a7dd8e5c4fe2.png\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.17944,\"longitude\":3.43028},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"City Name\",\"value\":\"Meyrueis\"},{\"@type\":\"PropertyValue\",\"name\":\"Type of city (city \/ villages \/ hamlet...)\",\"value\":\"City\"},{\"@type\":\"PropertyValue\",\"name\":\"Department\",\"value\":\"Loz\u00e8re\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance from the campsite (km)\",\"value\":\"18\"},{\"@type\":\"PropertyValue\",\"name\":\"Travel time from the campsite (min)\",\"value\":\"25\"},{\"@type\":\"PropertyValue\",\"name\":\"Points of interest\",\"value\":\"Gorges de la Jonte, local market, caves, hiking trails\"},{\"@type\":\"PropertyValue\",\"name\":\"Owners' favorites\",\"value\":\"Les visites guid\u00e9es des grottes et les paysages naturels environnants\"}]}}]},{\"@type\":\"ItemList\",\"name\":\"Activit\u00e9s aux alentours \",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"Thing\",\"name\":\"Nature Observation in C\u00e9vennes National Park\",\"description\":\"Activity observing the natural riches of C\u00e9vennes National Park, including fauna, flora, and landscapes, accessible to all audiences.\",\"image\":\"https:\/\/www.camping-florac.com\/wp-content\/uploads\/2026\/05\/3-cameras-filment-en-direct-les-nids.jpg\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.3226,\"longitude\":3.593},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Activity Name\",\"value\":\"Nature Observation in C\u00e9vennes National Park\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance from the campsite (km)\",\"value\":\"5\"},{\"@type\":\"PropertyValue\",\"name\":\"Travel time from the campsite (min)\",\"value\":\"10\"},{\"@type\":\"PropertyValue\",\"name\":\"Type of activity (nature, sport, culture, etc.)\",\"value\":\"Nature, Culture\"},{\"@type\":\"PropertyValue\",\"name\":\"Public category (Family, Children, Senior, Teen, etc.)\",\"value\":\"Family, Children, Senior\"},{\"@type\":\"PropertyValue\",\"name\":\"Reservation? (yes \/ no)\",\"value\":\"non\"},{\"@type\":\"PropertyValue\",\"name\":\"Hours\",\"value\":\"Open, daytime\"},{\"@type\":\"PropertyValue\",\"name\":\"Information and contact\",\"value\":\"C\u00e9vennes National Park Information Office, Florac\"},{\"@type\":\"PropertyValue\",\"name\":\"Languages spoken\",\"value\":\"French\"},{\"@type\":\"PropertyValue\",\"name\":\"Animals accepted (yes \/ no)\",\"value\":\"oui\"}]}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"Thing\",\"name\":\"Florac Tree Adventure\",\"description\":\"Tree adventure park offering several courses in the trees for all levels, ideal for families and enthusiasts of outdoor activities.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a7dd96cd7290.jpg\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.5215,\"longitude\":3.7439},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Activity Name\",\"value\":\"Florac Tree Adventure\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance from the campsite (km)\",\"value\":\"10\"},{\"@type\":\"PropertyValue\",\"name\":\"Travel time from the campsite (min)\",\"value\":\"15\"},{\"@type\":\"PropertyValue\",\"name\":\"Type of activity (nature, sport, culture, etc.)\",\"value\":\"Sport, Nature, Leisure\"},{\"@type\":\"PropertyValue\",\"name\":\"Public category (Family, Children, Senior, Teen, etc.)\",\"value\":\"Family, Children, Teen\"},{\"@type\":\"PropertyValue\",\"name\":\"Reservation? (yes \/ no)\",\"value\":\"oui\"},{\"@type\":\"PropertyValue\",\"name\":\"Hours\",\"value\":\"From 10am to 6pm, summer season\"},{\"@type\":\"PropertyValue\",\"name\":\"Information and contact\",\"value\":\"Le Vallon du Villaret, Florac, contact@accrobranche-florac.fr\"},{\"@type\":\"PropertyValue\",\"name\":\"Languages spoken\",\"value\":\"French\"},{\"@type\":\"PropertyValue\",\"name\":\"Animals accepted (yes \/ no)\",\"value\":\"non\"}]}},{\"@type\":\"ListItem\",\"position\":3,\"item\":{\"@type\":\"Thing\",\"name\":\"Hiking on GR 70 Stevenson Path\",\"description\":\"Iconic hiking course accessible to enthusiasts of all levels, allowing to discover the diverse landscapes of the C\u00e9vennes and the surrounding nature. Ideal for families and walking enthusiasts.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a7dd9f4d2dfe.png\",\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Activity Name\",\"value\":\"Hiking on GR 70 Stevenson Path\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance from the campsite (km)\",\"value\":\"0\"},{\"@type\":\"PropertyValue\",\"name\":\"Travel time from the campsite (min)\",\"value\":\"0\"},{\"@type\":\"PropertyValue\",\"name\":\"Type of activity (nature, sport, culture, etc.)\",\"value\":\"Nature, Sport\"},{\"@type\":\"PropertyValue\",\"name\":\"Public category (Family, Children, Senior, Teen, etc.)\",\"value\":\"Family, Teen, Senior\"},{\"@type\":\"PropertyValue\",\"name\":\"Reservation? (yes \/ no)\",\"value\":\"non\"},{\"@type\":\"PropertyValue\",\"name\":\"Hours\",\"value\":\"All year round, flexible\"},{\"@type\":\"PropertyValue\",\"name\":\"Information and contact\",\"value\":\"C\u00e9vennes Tourism Office, Florac\"},{\"@type\":\"PropertyValue\",\"name\":\"Languages spoken\",\"value\":\"French\"},{\"@type\":\"PropertyValue\",\"name\":\"Animals accepted (yes \/ no)\",\"value\":\"oui\"}]}},{\"@type\":\"ListItem\",\"position\":4,\"item\":{\"@type\":\"Thing\",\"name\":\"Cano\u00eb-Kayak on the Tarn River at Saint Enimie\",\"description\":\"Canoe-kayak descent on the Tarn River, accessible to the general public with several suitable levels, offering a unique view of the Gorges du Tarn.\",\"image\":\"https:\/\/www.camping-florac.com\/wp-content\/uploads\/2026\/05\/canyon-gorges-du-tarn-scaled-1.jpg\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.3287,\"longitude\":3.364},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Activity Name\",\"value\":\"Cano\u00eb-Kayak on the Tarn River at Saint Enimie\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance from the campsite (km)\",\"value\":\"25\"},{\"@type\":\"PropertyValue\",\"name\":\"Travel time from the campsite (min)\",\"value\":\"30\"},{\"@type\":\"PropertyValue\",\"name\":\"Type of activity (nature, sport, culture, etc.)\",\"value\":\"Sport, Nature\"},{\"@type\":\"PropertyValue\",\"name\":\"Public category (Family, Children, Senior, Teen, etc.)\",\"value\":\"Family, Teen, Adults\"},{\"@type\":\"PropertyValue\",\"name\":\"Reservation? (yes \/ no)\",\"value\":\"oui\"},{\"@type\":\"PropertyValue\",\"name\":\"Hours\",\"value\":\"From 9 am to 6 pm, seasonal\"},{\"@type\":\"PropertyValue\",\"name\":\"Information and contact\",\"value\":\"C\u00e9vennes \u00c9vasion, Saint Enimie, contact@cevennes-evasion.fr\"},{\"@type\":\"PropertyValue\",\"name\":\"Languages spoken\",\"value\":\"French, English\"},{\"@type\":\"PropertyValue\",\"name\":\"Animals accepted (yes \/ no)\",\"value\":\"non\"}]}},{\"@type\":\"ListItem\",\"position\":5,\"item\":{\"@type\":\"Thing\",\"name\":\"Climbing in the Gorges du Tarn\",\"description\":\"Renowned climbing site with numerous routes suitable for various levels. Sport and adventure activity offered in an exceptional natural setting.\",\"image\":\"https:\/\/www.camping-florac.com\/wp-content\/uploads\/2026\/05\/canyon-gorges-du-tarn-scaled-1.jpg\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.3287,\"longitude\":3.364},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Activity Name\",\"value\":\"Climbing in the Gorges du Tarn\"},{\"@type\":\"PropertyValue\",\"name\":\"Distance from the campsite (km)\",\"value\":\"15\"},{\"@type\":\"PropertyValue\",\"name\":\"Travel time from the campsite (min)\",\"value\":\"20\"},{\"@type\":\"PropertyValue\",\"name\":\"Type of activity (nature, sport, culture, etc.)\",\"value\":\"Sport, Nature, Adventure\"},{\"@type\":\"PropertyValue\",\"name\":\"Public category (Family, Children, Senior, Teen, etc.)\",\"value\":\"Teen, Adults\"},{\"@type\":\"PropertyValue\",\"name\":\"Reservation? (yes \/ no)\",\"value\":\"non\"},{\"@type\":\"PropertyValue\",\"name\":\"Hours\",\"value\":\"From 8 am to 7 pm, all year round\"},{\"@type\":\"PropertyValue\",\"name\":\"Information and contact\",\"value\":\"C\u00e9vennes National Park Information Office\"},{\"@type\":\"PropertyValue\",\"name\":\"Languages spoken\",\"value\":\"French\"},{\"@type\":\"PropertyValue\",\"name\":\"Animals accepted (yes \/ no)\",\"value\":\"non\"}]}}]},{\"@type\":\"ItemList\",\"name\":\"Water area\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"Thing\",\"name\":\"Camping le Pont du Tarn Aquatic Area\",\"description\":\"The aquatic area of Camping le Pont du Tarn offers a lagoon-like atmosphere with several pools suitable for all ages and needs. You'll find a heated paddling pool for toddlers, a lagoon pool for cooling off, a swimming pool, and a balneo area with bubbling baths for relaxation. Water is heated to around 26\u00b0C and the area is open from mid-May to mid-September, depending on the weather. It is equipped with slides and water games, and lit at night to extend swimming hours. The sun terrace invites lounging, with available sunbeds for outdoor relaxation.\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6accb04de779e.jpg\",\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":44.2534,\"longitude\":3.6411},\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Main equipment\",\"value\":\"Une pataugeoire chauff\u00e9e, trois toboggans, une piscine lagon, une piscine de nage, un espace baln\u00e9o avec bains bouillonnants, solarium avec transats, jeux aquatiques, \u00e9clairage nocturne.\"},{\"@type\":\"PropertyValue\",\"name\":\"Opening hours\",\"value\":\"10h00 \u00e0 19h00\"},{\"@type\":\"PropertyValue\",\"name\":\"Address\",\"value\":\"Route du Pont de Montvert, 48400 Florac-Trois-Rivi\u00e8res\"}]}}]},{\"@type\":\"ItemList\",\"name\":\"Template sheet\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"Thing\",\"name\":\"Mobil-home Oasis Premium 35m\u00b2 - 2 chambres \\nOffrez-vous une parenth\u00e8se de confort dans notre mobil-home Oasis Premium 2 chambres, un h\u00e9bergement spacieux et raffin\u00e9 de 35 m\u00b2, id\u00e9al pour les couples, les familles ou les amis en qu\u00eate de vacances tout confort. Pens\u00e9 pour conjuguer \u00e9l\u00e9gance et praticit\u00e9, il s\u00e9duit par ses lignes contemporaines, ses \u00e9quipements de qualit\u00e9 et ses espaces g\u00e9n\u00e9reusement am\u00e9nag\u00e9s. Son int\u00e9rieur lumineux cr\u00e9e une atmosph\u00e8re accueillante o\u00f9 il fait bon se retrouver apr\u00e8s une journ\u00e9e de baignade, de randonn\u00e9e ou de d\u00e9couverte des C\u00e9vennes. Les deux chambres offrent un cadre reposant et fonctionnel, tandis que la vaste pi\u00e8ce de vie invite \u00e0 partager des moments privil\u00e9gi\u00e9s en toute simplicit\u00e9. \u00c0 l'ext\u00e9rieur, profitez pleinement de la douceur du climat c\u00e9venol gr\u00e2ce \u00e0 sa grande terrasse sur\u00e9lev\u00e9e \u00e9quip\u00e9e d'une plancha. Un v\u00e9ritable espace de vie suppl\u00e9mentaire pour savourer vos repas en plein air, vous d\u00e9tendre ou simplement appr\u00e9cier le calme de la nature environnante. \",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6accab60cda81.png\",\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Surface (m\u00b2)\",\"value\":\"35\"},{\"@type\":\"PropertyValue\",\"name\":\"Number of rooms\",\"value\":\"2\"},{\"@type\":\"PropertyValue\",\"name\":\"Number of bathrooms\",\"value\":\"1\"},{\"@type\":\"PropertyValue\",\"name\":\"Main equipment\",\"value\":\"Cuisine \u00e9quip\u00e9e, terrasse couverte semi-couverte, lave-vaisselle, climatisation, plancha, mobilier de jardin, chauffage, Wi-Fi gratuit\"},{\"@type\":\"PropertyValue\",\"name\":\"Indicative price\",\"value\":\"De 46 \u20ac \u00e0 247 \u20ac par jour suivant la p\u00e9riode.\"}]}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"Thing\",\"name\":\"37m\u00b2 Oasis Premium Mobile Home - 3 bedrooms\\nLet yourself be seduced by Oasis Premium, our new generation of mobile homes designed to combine comfort, space, and modernity in the heart of the C\u00e9vennes. With its contemporary design, high-end equipment, and generous volumes, Oasis Premium offers you a warm holiday setting where everyone can easily find their place. Its spacious bright living room invites relaxation, while its three comfortable bedrooms guarantee peaceful nights after a day full of discoveries. Designed for large families and friends, this mobile home can accommodate up to 6 people in the best comfort conditions. Outside, extend your moments of conviviality on its large raised terrace equipped with a plancha. Outdoor breakfasts, family lunches, or summer evenings under the stars: everything is gathered to fully enjoy your holidays in an exceptional natural environment.\",\"url\":\"https:\/\/www.camping-florac.com\/location-mobil-home-lozere\/\",\"image\":\"https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6acca457ad4ab.png\",\"additionalProperty\":[{\"@type\":\"PropertyValue\",\"name\":\"Surface (m\u00b2)\",\"value\":\"37 m\u00b2\"},{\"@type\":\"PropertyValue\",\"name\":\"Number of rooms\",\"value\":\"3\"},{\"@type\":\"PropertyValue\",\"name\":\"Number of bathrooms\",\"value\":\"1\"},{\"@type\":\"PropertyValue\",\"name\":\"Main equipment\",\"value\":\"Fully equipped kitchen, semi-covered terrace, television, dishwasher, air conditioning, plancha, garden furniture, heating, free Wi-Fi\"},{\"@type\":\"PropertyValue\",\"name\":\"Indicative price\",\"value\":\"De 96 \u20ac \u00e0 256 \u20ac par jour suivant la p\u00e9riode\"}]}}]}]}<\/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    \/* Certains th\u00e8mes rouvrent le d\u00e9bordement des cartes Leaflet : les tuiles\n       d\u00e9passaient alors de la page (camping de la Croze). On rogne quoi qu'il arrive. *\/\n    overflow: hidden !important;\n    contain: paint;\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  \/* La liste change brutalement de hauteur au clic sur une cat\u00e9gorie :\n     l'ancrage de d\u00e9filement du navigateur \u00ab corrigeait \u00bb alors la position et\n     contrariait le d\u00e9filement vers les filtres. *\/\n  #mv-app {\n    overflow-anchor: none;\n  }\n\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    \/* Hauteur fix\u00e9e par le format, jamais par la photo : sans flex-shrink ni\n       taille minimale de contenu, une photo en hauteur \u00e9tirait son cadre et\n       les cartes d'une m\u00eame rang\u00e9e n'avaient plus des images align\u00e9es. *\/\n    flex: 0 0 auto;\n    min-height: 0;\n    \/* Pas d'overflow: hidden ici : la pastille de cat\u00e9gorie est pos\u00e9e \u00e0 cheval\n       sur le bas de l'image. L'image, en absolu, ne d\u00e9borde pas de son cadre. *\/\n    aspect-ratio: 16 \/ 10;\n    background: var(--mv-cream);\n  }\n\n  .mv-card-media img {\n    position: absolute;\n    inset: 0;\n    display: block;\n    width: 100% !important;\n    max-width: none !important;\n    height: 100% !important;\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  \/* Cr\u00e9dit photo : discret sur la carte (\u00a9, auteur au survol), lisible en fiche. *\/\n  .mv-credit {\n    position: absolute;\n    top: 8px;\n    right: 8px;\n    z-index: 2;\n    max-width: calc(100% - 16px);\n    padding: 2px 7px;\n    border-radius: 999px;\n    background: rgba(0, 0, 0, 0.45);\n    color: #fff;\n    font-size: 11px;\n    line-height: 1.5;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    cursor: help;\n  }\n\n  .mv-card:hover .mv-credit::after,\n  .mv-credit:focus::after {\n    content: ' ' attr(data-credit);\n  }\n\n  \/* Bandeau : le cr\u00e9dit est \u00e9crit en clair (pas de survol sur une image de fond),\n     en bas \u00e0 droite, loin du titre. *\/\n  .mv-credit--hero {\n    top: auto;\n    bottom: 10px;\n    right: 12px;\n    max-width: 60%;\n    cursor: default;\n  }\n\n  .mv-modal-credit {\n    margin: 6px 2px 0 !important;\n    color: var(--mv-muted, #6b7280);\n    font-size: 12px !important;\n    line-height: 1.4 !important;\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  <section class=\"mv-hero\" style=\"background-image:url(https:\/\/elaia-public.s3.fr-par.scw.cloud\/metadata_images\/image_6a7dd6a9bd2a2.png)\">\n        <div class=\"mv-hero-inner\">\n      <h1 class=\"mv-hero-title\">Things to discover nearby<\/h1>\n      <p class=\"mv-hero-text\">Villages, beaches, walks, good addresses and experiences selected around your stay.<\/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          Around <strong>Camping Pont du Tarn<\/strong>\n        <\/span>\n          <\/div>\n  <\/section>\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=\"Search for a place, an activity, a village\u2026\" aria-label=\"Search\">\n    <\/label>\n          <div class=\"mv-seg\" role=\"group\" aria-label=\"Maximum distance\" 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\">All<\/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=\"Previous categories\"><span>\u2039<\/span><\/button>\n    <div class=\"mv-cats\" id=\"mv-cats\" role=\"group\" aria-label=\"Categories\"><\/div>\n    <button type=\"button\" class=\"mv-cats-arrow mv-cats-arrow--right\" aria-label=\"Next categories\"><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=\"Display\" id=\"mv-view\">\n      <button type=\"button\" data-view=\"list\">List<\/button>\n      <button type=\"button\" data-view=\"map\" class=\"is-active\">Map<\/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>Florac<\/strong> \u2014 Florac is a charming small town located just 2.5 km from the Le Pont du Tarn campsite. It is known for its friendly atmosphere, local markets, and close access to&hellip;<\/li>\n              <li><strong>Le Pont-de-Montvert<\/strong> \u2014 Le Pont-de-Montvert is a typical C\u00e9venol village located about 15 km from the campsite. It offers an authentic setting with its stone bridge and pebble beaches on the river.<\/li>\n              <li><strong>Saint-Jean-du-Gard<\/strong> \u2014 Saint-Jean-du-Gard is a charming C\u00e9venol town located about 35 km from the campground. With its rich heritage, it offers numerous cultural and outdoor activities.<\/li>\n              <li><strong>Sainte-Enimie<\/strong> \u2014 Sainte-Enimie is a classified village among the most beautiful in France, located about 25 km from the campsite. It is known for its medieval alleyways and access to the Gorges&hellip;<\/li>\n              <li><strong>Meyrueis<\/strong> \u2014 Meyrueis is a vibrant city located 18 km from the camping, offering rich natural and cultural heritage along the C\u00e9vennes mountains.<\/li>\n              <li><strong>Nature Observation in C\u00e9vennes National Park<\/strong> \u2014 Activity observing the natural riches of C\u00e9vennes National Park, including fauna, flora, and landscapes, accessible to all audiences.<\/li>\n              <li><strong>Florac Tree Adventure<\/strong> \u2014 Tree adventure park offering several courses in the trees for all levels, ideal for families and enthusiasts of outdoor activities.<\/li>\n              <li><strong>Hiking on GR 70 Stevenson Path<\/strong> \u2014 Iconic hiking course accessible to enthusiasts of all levels, allowing to discover the diverse landscapes of the C\u00e9vennes and the surrounding nature. Ideal for families and walking enthusiasts.<\/li>\n              <li><strong>Cano\u00eb-Kayak on the Tarn River at Saint Enimie<\/strong> \u2014 Canoe-kayak descent on the Tarn River, accessible to the general public with several suitable levels, offering a unique view of the Gorges du Tarn.<\/li>\n              <li><strong>Climbing in the Gorges du Tarn<\/strong> \u2014 Renowned climbing site with numerous routes suitable for various levels. Sport and adventure activity offered in an exceptional natural setting.<\/li>\n              <li><strong>Camping le Pont du Tarn Aquatic Area<\/strong> \u2014 The aquatic area of Camping le Pont du Tarn offers a lagoon-like atmosphere with several pools suitable for all ages and needs. You&#039;ll find a heated paddling pool for toddlers,&hellip;<\/li>\n              <li><strong>Mobil-home Oasis Premium 35m\u00b2 - 2 chambres \nOffrez-vous une parenth\u00e8se de confort dans notre mobil-home Oasis Premium 2 chambres, un h\u00e9bergement spacieux et raffin\u00e9 de 35 m\u00b2, id\u00e9al pour les couples, les familles ou les amis en qu\u00eate de vacances tout confort. Pens\u00e9 pour conjuguer \u00e9l\u00e9gance et praticit\u00e9, il s\u00e9duit par ses lignes contemporaines, ses \u00e9quipements de qualit\u00e9 et ses espaces g\u00e9n\u00e9reusement am\u00e9nag\u00e9s. Son int\u00e9rieur lumineux cr\u00e9e une atmosph\u00e8re accueillante o\u00f9 il fait bon se retrouver apr\u00e8s une journ\u00e9e de baignade, de randonn\u00e9e ou de d\u00e9couverte des C\u00e9vennes. Les deux chambres offrent un cadre reposant et fonctionnel, tandis que la vaste pi\u00e8ce de vie invite \u00e0 partager des moments privil\u00e9gi\u00e9s en toute simplicit\u00e9. \u00c0 l&#039;ext\u00e9rieur, profitez pleinement de la douceur du climat c\u00e9venol gr\u00e2ce \u00e0 sa grande terrasse sur\u00e9lev\u00e9e \u00e9quip\u00e9e d&#039;une plancha. Un v\u00e9ritable espace de vie suppl\u00e9mentaire pour savourer vos repas en plein air, vous d\u00e9tendre ou simplement appr\u00e9cier le calme de la nature environnante.<\/strong><\/li>\n              <li><strong>37m\u00b2 Oasis Premium Mobile Home - 3 bedrooms\nLet yourself be seduced by Oasis Premium, our new generation of mobile homes designed to combine comfort, space, and modernity in the heart of the C\u00e9vennes. With its contemporary design, high-end equipment, and generous volumes, Oasis Premium offers you a warm holiday setting where everyone can easily find their place. Its spacious bright living room invites relaxation, while its three comfortable bedrooms guarantee peaceful nights after a day full of discoveries. Designed for large families and friends, this mobile home can accommodate up to 6 people in the best comfort conditions. Outside, extend your moments of conviviality on its large raised terrace equipped with a plancha. Outdoor breakfasts, family lunches, or summer evenings under the stars: everything is gathered to fully enjoy your holidays in an exceptional natural environment.<\/strong><\/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=\"Close\">\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\":\"Florac\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7dd6a9bd2a2.png\",\"credit\":\"\",\"description\":\"Florac is a charming small town located just 2.5 km from the Le Pont du Tarn campsite. It is known for its friendly atmosphere, local markets, and close access to the C\\u00e9vennes National Park. It\\u2019s an excellent starting point for exploring the region.\",\"city\":\"\",\"address\":\"\",\"km\":2.5,\"min\":5,\"lat\":44.3246156,\"lng\":3.5943317,\"tags\":[],\"fields\":[{\"label\":\"City Name\",\"value\":\"Florac\"},{\"label\":\"Type of city (city \\\/ villages \\\/ hamlet...)\",\"value\":\"Town\"},{\"label\":\"Department\",\"value\":\"Loz\\u00e8re\"},{\"label\":\"Distance from the campsite (km)\",\"value\":\"2.5\"},{\"label\":\"Travel time from the campsite (min)\",\"value\":\"5\"},{\"label\":\"Points of interest\",\"value\":\"C\\u00e9vennes National Park, Thursday morning market, Tarn River, Gorges du Tarn\"},{\"label\":\"Owners' favorites\",\"value\":\"The local Thursday morning market and hiking in the C\\u00e9vennes National Park\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Are there essential shops?\",\"answer\":\"Yes, Florac has essential shops such as a grocery store, a bakery, and local markets.\"},{\"question\":\"What is the best time to visit the city?\",\"answer\":\"Spring and summer are the best times to visit Florac, especially to enjoy markets and outdoor activities.\"},{\"question\":\"O\\u00f9 manger sans se tromper ?\",\"answer\":\"Nous recommandons les restaurants proposant des sp\\u00e9cialit\\u00e9s locales comme le p\\u00e9lardon et la charcuterie c\\u00e9venole.\"},{\"question\":\"O\\u00f9 se garer facilement ?\",\"answer\":\"Le parking principal se trouve pr\\u00e8s du centre-ville avec des places gratuites et payantes.\"},{\"question\":\"Is the city center accessible to PMR and strollers?\",\"answer\":\"Yes, the city center is easily accessible for people with reduced mobility and strollers.\"},{\"question\":\"What to do when it rains in the city?\",\"answer\":\"Visit local small museums or enjoy the covered cafes and shops downtown.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":1,\"featurable\":true,\"type\":\"villes-aux-alentours\",\"name\":\"Le Pont-de-Montvert\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7dd72255892.png\",\"credit\":\"\",\"description\":\"Le Pont-de-Montvert is a typical C\\u00e9venol village located about 15 km from the campsite. It offers an authentic setting with its stone bridge and pebble beaches on the river.\",\"city\":\"\",\"address\":\"\",\"km\":15,\"min\":20,\"lat\":44.3632783,\"lng\":3.7453377,\"tags\":[],\"fields\":[{\"label\":\"City Name\",\"value\":\"Le Pont-de-Montvert\"},{\"label\":\"Type of city (city \\\/ villages \\\/ hamlet...)\",\"value\":\"Village\"},{\"label\":\"Department\",\"value\":\"Loz\\u00e8re\"},{\"label\":\"Distance from the campsite (km)\",\"value\":\"15\"},{\"label\":\"Travel time from the campsite (min)\",\"value\":\"20\"},{\"label\":\"Points of interest\",\"value\":\"Historic village, pebble beach, Tarn river, local market\"},{\"label\":\"Owners' favorites\",\"value\":\"Picturesque beach under the old bridge and the tranquility of the village\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Are there essential shops?\",\"answer\":\"The village has several essential shops, including a grocery store and a local bakery.\"},{\"question\":\"What is the best time to visit the city?\",\"answer\":\"Summer is ideal to enjoy the natural beaches and markets.\"},{\"question\":\"Where to eat without making mistakes?\",\"answer\":\"Traditional inns offer delicious Cevennes dishes worth trying.\"},{\"question\":\"Where to park easily?\",\"answer\":\"Parking facilities are available near the village, often free in low season.\"},{\"question\":\"Is the town center accessible to disabled persons and strollers?\",\"answer\":\"The village has narrow streets but the center is largely accessible.\"},{\"question\":\"What to do when it rains in the city?\",\"answer\":\"Visit the local church and small craft shops.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":2,\"featurable\":true,\"type\":\"villes-aux-alentours\",\"name\":\"Saint-Jean-du-Gard\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7dd7f8486e5.png\",\"credit\":\"\",\"description\":\"Saint-Jean-du-Gard is a charming C\\u00e9venol town located about 35 km from the campground. With its rich heritage, it offers numerous cultural and outdoor activities.\",\"city\":\"\",\"address\":\"\",\"km\":35,\"min\":60,\"lat\":44.1055556,\"lng\":3.8869444,\"tags\":[],\"fields\":[{\"label\":\"City Name\",\"value\":\"Saint-Jean-du-Gard\"},{\"label\":\"Type of city (city \\\/ villages \\\/ hamlet...)\",\"value\":\"City\"},{\"label\":\"Department\",\"value\":\"Gard\"},{\"label\":\"Distance from the campsite (km)\",\"value\":\"35\"},{\"label\":\"Travel time from the campsite (min)\",\"value\":\"1 hour 15\"},{\"label\":\"Points of interest\",\"value\":\"Cevenol Museum, hiking trails, historic center, local crafts\"},{\"label\":\"Owners' favorites\",\"value\":\"The Cevenol museum and the nature hiking trails\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Are there essential shops available?\",\"answer\":\"Yes, several shops are available, including bakeries, grocery stores, and pharmacies.\"},{\"question\":\"What is the best time to visit the city?\",\"answer\":\"Spring and autumn to avoid crowds while enjoying the mild climate.\"},{\"question\":\"Where to eat without making a mistake?\",\"answer\":\"Local restaurants serve typical regional dishes made with fresh products.\"},{\"question\":\"Where to park easily?\",\"answer\":\"The municipal parking is central and easily accessible.\"},{\"question\":\"Is the city center accessible to disabled persons and strollers?\",\"answer\":\"The city center is largely accessible to persons with reduced mobility and strollers.\"},{\"question\":\"What to do when it rains in town?\",\"answer\":\"Visit the museum or participate in covered craft workshops.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":3,\"featurable\":true,\"type\":\"villes-aux-alentours\",\"name\":\"Sainte-Enimie\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7dd87a16a33.png\",\"credit\":\"\",\"description\":\"Sainte-Enimie is a classified village among the most beautiful in France, located about 25 km from the campsite. It is known for its medieval alleyways and access to the Gorges du Tarn.\",\"city\":\"\",\"address\":\"\",\"km\":25,\"min\":30,\"lat\":44.3675,\"lng\":3.41194,\"tags\":[],\"fields\":[{\"label\":\"City Name\",\"value\":\"Sainte-Enimie\"},{\"label\":\"Type of city (city \\\/ villages \\\/ hamlet...)\",\"value\":\"Village\"},{\"label\":\"Department\",\"value\":\"Loz\\u00e8re\"},{\"label\":\"Distance from the campsite (km)\",\"value\":\"25\"},{\"label\":\"Travel time from the campsite (min)\",\"value\":\"30\"},{\"label\":\"Points of interest\",\"value\":\"Medieval village, Gorges du Tarn, hiking trails, crafts\"},{\"label\":\"Owners' favorites\",\"value\":\"The old alleyways and the panoramic view of the Gorges du Tarn\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Are there essential shops?\",\"answer\":\"Yes, small grocery stores and craft shops are present in the village.\"},{\"question\":\"What is the best time to visit the city?\",\"answer\":\"Summer to fully enjoy outdoor activities and local festivals.\"},{\"question\":\"Where to eat without making mistakes?\",\"answer\":\"Village restaurants offer traditional cuisine with local products.\"},{\"question\":\"Where is easy parking?\",\"answer\":\"There are paid parking lots at the entrance of the village.\"},{\"question\":\"Is the city center accessible to PWD and strollers?\",\"answer\":\"Accessibility is partial due to cobbled and narrow alleys.\"},{\"question\":\"What to do when it rains in the city?\",\"answer\":\"Discover local crafts and visit the village church.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":4,\"featurable\":true,\"type\":\"villes-aux-alentours\",\"name\":\"Meyrueis\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7dd8e5c4fe2.png\",\"credit\":\"\",\"description\":\"Meyrueis is a vibrant city located 18 km from the camping, offering rich natural and cultural heritage along the C\\u00e9vennes mountains.\",\"city\":\"\",\"address\":\"\",\"km\":18,\"min\":25,\"lat\":44.17944,\"lng\":3.43028,\"tags\":[],\"fields\":[{\"label\":\"City Name\",\"value\":\"Meyrueis\"},{\"label\":\"Type of city (city \\\/ villages \\\/ hamlet...)\",\"value\":\"City\"},{\"label\":\"Department\",\"value\":\"Loz\\u00e8re\"},{\"label\":\"Distance from the campsite (km)\",\"value\":\"18\"},{\"label\":\"Travel time from the campsite (min)\",\"value\":\"25\"},{\"label\":\"Points of interest\",\"value\":\"Gorges de la Jonte, local market, caves, hiking trails\"},{\"label\":\"Owners' favorites\",\"value\":\"Les visites guid\\u00e9es des grottes et les paysages naturels environnants\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Are there essential shops?\",\"answer\":\"Yes, the city has essential shops like supermarket, bakery, pharmacy.\"},{\"question\":\"What is the best time to visit the city?\",\"answer\":\"Spring and autumn, to enjoy walks and soothing nature.\"},{\"question\":\"Where to eat without guessing?\",\"answer\":\"Traditional restaurants with regional specialties are recommended.\"},{\"question\":\"Where to park easily?\",\"answer\":\"Easy parking in public car parks near the city center.\"},{\"question\":\"Is the city center accessible to PWDs and strollers?\",\"answer\":\"The city center is generally accessible to PWDs and strollers.\"},{\"question\":\"What to do when it rains in the city?\",\"answer\":\"Visit caves or local museums protected.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":5,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Nature Observation in C\\u00e9vennes National Park\",\"image\":\"https:\\\/\\\/www.camping-florac.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/3-cameras-filment-en-direct-les-nids.jpg\",\"credit\":\"\",\"description\":\"Activity observing the natural riches of C\\u00e9vennes National Park, including fauna, flora, and landscapes, accessible to all audiences.\",\"city\":\"\",\"address\":\"\",\"km\":5,\"min\":10,\"lat\":44.3226,\"lng\":3.593,\"tags\":[],\"fields\":[{\"label\":\"Activity Name\",\"value\":\"Nature Observation in C\\u00e9vennes National Park\"},{\"label\":\"Distance from the campsite (km)\",\"value\":\"5\"},{\"label\":\"Travel time from the campsite (min)\",\"value\":\"10\"},{\"label\":\"Type of activity (nature, sport, culture, etc.)\",\"value\":\"Nature, Culture\"},{\"label\":\"Public category (Family, Children, Senior, Teen, etc.)\",\"value\":\"Family, Children, Senior\"},{\"label\":\"Reservation? (yes \\\/ no)\",\"value\":\"non\"},{\"label\":\"Hours\",\"value\":\"Open, daytime\"},{\"label\":\"Information and contact\",\"value\":\"C\\u00e9vennes National Park Information Office, Florac\"},{\"label\":\"Languages spoken\",\"value\":\"French\"},{\"label\":\"Animals accepted (yes \\\/ no)\",\"value\":\"oui\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Is this activity suitable for beginners?\",\"answer\":\"Yes, accessible and educational activity for everyone.\"},{\"question\":\"What is the average price?\",\"answer\":\"Free.\"},{\"question\":\"Is this activity feasible in bad weather?\",\"answer\":\"Can be practiced under a shelter or indoors (exhibitions).\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":6,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Florac Tree Adventure\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7dd96cd7290.jpg\",\"credit\":\"\",\"description\":\"Tree adventure park offering several courses in the trees for all levels, ideal for families and enthusiasts of outdoor activities.\",\"city\":\"\",\"address\":\"\",\"km\":10,\"min\":15,\"lat\":44.5215,\"lng\":3.7439,\"tags\":[],\"fields\":[{\"label\":\"Activity Name\",\"value\":\"Florac Tree Adventure\"},{\"label\":\"Distance from the campsite (km)\",\"value\":\"10\"},{\"label\":\"Travel time from the campsite (min)\",\"value\":\"15\"},{\"label\":\"Type of activity (nature, sport, culture, etc.)\",\"value\":\"Sport, Nature, Leisure\"},{\"label\":\"Public category (Family, Children, Senior, Teen, etc.)\",\"value\":\"Family, Children, Teen\"},{\"label\":\"Reservation? (yes \\\/ no)\",\"value\":\"oui\"},{\"label\":\"Hours\",\"value\":\"From 10am to 6pm, summer season\"},{\"label\":\"Information and contact\",\"value\":\"Le Vallon du Villaret, Florac, contact@accrobranche-florac.fr\"},{\"label\":\"Languages spoken\",\"value\":\"French\"},{\"label\":\"Animals accepted (yes \\\/ no)\",\"value\":\"non\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Is this activity suitable for beginners?\",\"answer\":\"Yes, easy courses are offered for beginners.\"},{\"question\":\"What is the average price?\",\"answer\":\"Approximately 15 to 25 euros depending on age and course.\"},{\"question\":\"Is this activity feasible in bad weather?\",\"answer\":\"No, the park is closed in bad weather.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":7,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Hiking on GR 70 Stevenson Path\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7dd9f4d2dfe.png\",\"credit\":\"\",\"description\":\"Iconic hiking course accessible to enthusiasts of all levels, allowing to discover the diverse landscapes of the C\\u00e9vennes and the surrounding nature. Ideal for families and walking enthusiasts.\",\"city\":\"\",\"address\":\"\",\"km\":0,\"min\":0,\"lat\":null,\"lng\":null,\"tags\":[],\"fields\":[{\"label\":\"Activity Name\",\"value\":\"Hiking on GR 70 Stevenson Path\"},{\"label\":\"Distance from the campsite (km)\",\"value\":\"0\"},{\"label\":\"Travel time from the campsite (min)\",\"value\":\"0\"},{\"label\":\"Type of activity (nature, sport, culture, etc.)\",\"value\":\"Nature, Sport\"},{\"label\":\"Public category (Family, Children, Senior, Teen, etc.)\",\"value\":\"Family, Teen, Senior\"},{\"label\":\"Reservation? (yes \\\/ no)\",\"value\":\"non\"},{\"label\":\"Hours\",\"value\":\"All year round, flexible\"},{\"label\":\"Information and contact\",\"value\":\"C\\u00e9vennes Tourism Office, Florac\"},{\"label\":\"Languages spoken\",\"value\":\"French\"},{\"label\":\"Animals accepted (yes \\\/ no)\",\"value\":\"oui\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Is this activity suitable for beginners?\",\"answer\":\"Yes, this path is well suited for beginners and offers easy stages.\"},{\"question\":\"What is the average price?\",\"answer\":\"Access to the trail is free.\"},{\"question\":\"Is this activity possible in bad weather?\",\"answer\":\"To be avoided in case of heavy rain or thunderstorms for safety reasons.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":8,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Cano\\u00eb-Kayak on the Tarn River at Saint Enimie\",\"image\":\"https:\\\/\\\/www.camping-florac.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/canyon-gorges-du-tarn-scaled-1.jpg\",\"credit\":\"\",\"description\":\"Canoe-kayak descent on the Tarn River, accessible to the general public with several suitable levels, offering a unique view of the Gorges du Tarn.\",\"city\":\"\",\"address\":\"\",\"km\":25,\"min\":30,\"lat\":44.3287,\"lng\":3.364,\"tags\":[],\"fields\":[{\"label\":\"Activity Name\",\"value\":\"Cano\\u00eb-Kayak on the Tarn River at Saint Enimie\"},{\"label\":\"Distance from the campsite (km)\",\"value\":\"25\"},{\"label\":\"Travel time from the campsite (min)\",\"value\":\"30\"},{\"label\":\"Type of activity (nature, sport, culture, etc.)\",\"value\":\"Sport, Nature\"},{\"label\":\"Public category (Family, Children, Senior, Teen, etc.)\",\"value\":\"Family, Teen, Adults\"},{\"label\":\"Reservation? (yes \\\/ no)\",\"value\":\"oui\"},{\"label\":\"Hours\",\"value\":\"From 9 am to 6 pm, seasonal\"},{\"label\":\"Information and contact\",\"value\":\"C\\u00e9vennes \\u00c9vasion, Saint Enimie, contact@cevennes-evasion.fr\"},{\"label\":\"Languages spoken\",\"value\":\"French, English\"},{\"label\":\"Animals accepted (yes \\\/ no)\",\"value\":\"non\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Is this activity suitable for beginners?\",\"answer\":\"Yes, there are beginner packages with coaching available.\"},{\"question\":\"What is the average price?\",\"answer\":\"Approximately 20 to 40 euros depending on the duration and chosen option.\"},{\"question\":\"Is this activity possible in bad weather?\",\"answer\":\"No, it is suspended in case of bad weather or flooding.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":9,\"featurable\":true,\"type\":\"activites-aux-alentours\",\"name\":\"Climbing in the Gorges du Tarn\",\"image\":\"https:\\\/\\\/www.camping-florac.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/canyon-gorges-du-tarn-scaled-1.jpg\",\"credit\":\"\",\"description\":\"Renowned climbing site with numerous routes suitable for various levels. Sport and adventure activity offered in an exceptional natural setting.\",\"city\":\"\",\"address\":\"\",\"km\":15,\"min\":20,\"lat\":44.3287,\"lng\":3.364,\"tags\":[],\"fields\":[{\"label\":\"Activity Name\",\"value\":\"Climbing in the Gorges du Tarn\"},{\"label\":\"Distance from the campsite (km)\",\"value\":\"15\"},{\"label\":\"Travel time from the campsite (min)\",\"value\":\"20\"},{\"label\":\"Type of activity (nature, sport, culture, etc.)\",\"value\":\"Sport, Nature, Adventure\"},{\"label\":\"Public category (Family, Children, Senior, Teen, etc.)\",\"value\":\"Teen, Adults\"},{\"label\":\"Reservation? (yes \\\/ no)\",\"value\":\"non\"},{\"label\":\"Hours\",\"value\":\"From 8 am to 7 pm, all year round\"},{\"label\":\"Information and contact\",\"value\":\"C\\u00e9vennes National Park Information Office\"},{\"label\":\"Languages spoken\",\"value\":\"French\"},{\"label\":\"Animals accepted (yes \\\/ no)\",\"value\":\"non\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"Is this activity suitable for beginners?\",\"answer\":\"For beginners, coaching is recommended.\"},{\"question\":\"What is the average price?\",\"answer\":\"Free access, paid equipment rental.\"},{\"question\":\"Is this activity feasible in bad weather?\",\"answer\":\"No, not recommended in case of rain or storm.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[]},{\"id\":10,\"featurable\":true,\"type\":\"espace-aquatique\",\"name\":\"Camping le Pont du Tarn Aquatic Area\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6accb04de779e.jpg\",\"credit\":\"\",\"description\":\"The aquatic area of Camping le Pont du Tarn offers a lagoon-like atmosphere with several pools suitable for all ages and needs. You'll find a heated paddling pool for toddlers, a lagoon pool for cooling off, a swimming pool, and a balneo area with bubbling baths for relaxation. Water is heated to around 26\\u00b0C and the area is open from mid-May to mid-September, depending on the weather. It is equipped with slides and water games, and lit at night to extend swimming hours. The sun terrace invites lounging, with available sunbeds for outdoor relaxation.\",\"city\":\"\",\"address\":\"Route du Pont de Montvert, 48400 Florac-Trois-Rivi\\u00e8res\",\"km\":null,\"min\":null,\"lat\":44.2534,\"lng\":3.6411,\"tags\":[],\"fields\":[{\"label\":\"Model\",\"value\":\"Camping le Pont du Tarn Aquatic Area\"},{\"label\":\"Main equipment\",\"value\":\"Une pataugeoire chauff\\u00e9e, trois toboggans, une piscine lagon, une piscine de nage, un espace baln\\u00e9o avec bains bouillonnants, solarium avec transats, jeux aquatiques, \\u00e9clairage nocturne.\"},{\"label\":\"Opening hours\",\"value\":\"10h00 \\u00e0 19h00\"},{\"label\":\"Address\",\"value\":\"Route du Pont de Montvert, 48400 Florac-Trois-Rivi\\u00e8res\"}],\"link\":\"\",\"event\":\"\",\"faq\":[{\"question\":\"What are the rates for accessing the aquatic area?\",\"answer\":\"Access to the aquatic area is included in the camping stay, at no additional cost.\"},{\"question\":\"What are the access conditions for the water park?\",\"answer\":\"Wearing swim shorts is not allowed, wearing a swim cap is not mandatory. Access requires a bracelet. Children must be accompanied.\"},{\"question\":\"Is there a minimum age to use the water park?\",\"answer\":\"Children can access the water park but must be accompanied by an adult. No strict minimum age, but the toddler pool is designed for little kids.\"},{\"question\":\"What time does the water park close each day?\",\"answer\":\"The water park closes every day at 7:00 PM.\"}],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6accb07eb6524.jpg\",\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6accb07f77a94.jpg\",\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6accb0807760d.jpg\",\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6accb0810a200.jpg\"]},{\"id\":11,\"featurable\":true,\"type\":\"infos-pratiques\",\"name\":\"Mobil-home Oasis Premium 35m\\u00b2 - 2 chambres \\nOffrez-vous une parenth\\u00e8se de confort dans notre mobil-home Oasis Premium 2 chambres, un h\\u00e9bergement spacieux et raffin\\u00e9 de 35 m\\u00b2, id\\u00e9al pour les couples, les familles ou les amis en qu\\u00eate de vacances tout confort. Pens\\u00e9 pour conjuguer \\u00e9l\\u00e9gance et praticit\\u00e9, il s\\u00e9duit par ses lignes contemporaines, ses \\u00e9quipements de qualit\\u00e9 et ses espaces g\\u00e9n\\u00e9reusement am\\u00e9nag\\u00e9s. Son int\\u00e9rieur lumineux cr\\u00e9e une atmosph\\u00e8re accueillante o\\u00f9 il fait bon se retrouver apr\\u00e8s une journ\\u00e9e de baignade, de randonn\\u00e9e ou de d\\u00e9couverte des C\\u00e9vennes. Les deux chambres offrent un cadre reposant et fonctionnel, tandis que la vaste pi\\u00e8ce de vie invite \\u00e0 partager des moments privil\\u00e9gi\\u00e9s en toute simplicit\\u00e9. \\u00c0 l'ext\\u00e9rieur, profitez pleinement de la douceur du climat c\\u00e9venol gr\\u00e2ce \\u00e0 sa grande terrasse sur\\u00e9lev\\u00e9e \\u00e9quip\\u00e9e d'une plancha. Un v\\u00e9ritable espace de vie suppl\\u00e9mentaire pour savourer vos repas en plein air, vous d\\u00e9tendre ou simplement appr\\u00e9cier le calme de la nature environnante.\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6accab60cda81.png\",\"credit\":\"\",\"description\":\"\",\"city\":\"\",\"address\":\"\",\"km\":null,\"min\":null,\"lat\":null,\"lng\":null,\"tags\":[],\"fields\":[{\"label\":\"Model\",\"value\":\"Mobil-home Oasis Premium 35m\\u00b2 - 2 chambres \\nOffrez-vous une parenth\\u00e8se de confort dans notre mobil-home Oasis Premium 2 chambres, un h\\u00e9bergement spacieux et raffin\\u00e9 de 35 m\\u00b2, id\\u00e9al pour les couples, les familles ou les amis en qu\\u00eate de vacances tout confort. Pens\\u00e9 pour conjuguer \\u00e9l\\u00e9gance et praticit\\u00e9, il s\\u00e9duit par ses lignes contemporaines, ses \\u00e9quipements de qualit\\u00e9 et ses espaces g\\u00e9n\\u00e9reusement am\\u00e9nag\\u00e9s. Son int\\u00e9rieur lumineux cr\\u00e9e une atmosph\\u00e8re accueillante o\\u00f9 il fait bon se retrouver apr\\u00e8s une journ\\u00e9e de baignade, de randonn\\u00e9e ou de d\\u00e9couverte des C\\u00e9vennes. Les deux chambres offrent un cadre reposant et fonctionnel, tandis que la vaste pi\\u00e8ce de vie invite \\u00e0 partager des moments privil\\u00e9gi\\u00e9s en toute simplicit\\u00e9. \\u00c0 l'ext\\u00e9rieur, profitez pleinement de la douceur du climat c\\u00e9venol gr\\u00e2ce \\u00e0 sa grande terrasse sur\\u00e9lev\\u00e9e \\u00e9quip\\u00e9e d'une plancha. Un v\\u00e9ritable espace de vie suppl\\u00e9mentaire pour savourer vos repas en plein air, vous d\\u00e9tendre ou simplement appr\\u00e9cier le calme de la nature environnante. \"},{\"label\":\"Surface (m\\u00b2)\",\"value\":\"35\"},{\"label\":\"Number of rooms\",\"value\":\"2\"},{\"label\":\"Number of bathrooms\",\"value\":\"1\"},{\"label\":\"Main equipment\",\"value\":\"Cuisine \\u00e9quip\\u00e9e, terrasse couverte semi-couverte, lave-vaisselle, climatisation, plancha, mobilier de jardin, chauffage, Wi-Fi gratuit\"},{\"label\":\"Indicative price\",\"value\":\"De 46 \\u20ac \\u00e0 247 \\u20ac par jour suivant la p\\u00e9riode.\"}],\"link\":\"\",\"event\":\"\",\"faq\":[],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6accabda5f229.jpg\",\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6accabdb10279.jpg\",\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6accabdbbeded.jpg\",\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6accabdc5de08.jpg\",\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6accabdcb2638.jpg\",\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6accabdd32ca2.jpg\",\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6accabdd7f937.jpg\",\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6accabdda688b.jpg\"]},{\"id\":12,\"featurable\":true,\"type\":\"infos-pratiques\",\"name\":\"37m\\u00b2 Oasis Premium Mobile Home - 3 bedrooms\\nLet yourself be seduced by Oasis Premium, our new generation of mobile homes designed to combine comfort, space, and modernity in the heart of the C\\u00e9vennes. With its contemporary design, high-end equipment, and generous volumes, Oasis Premium offers you a warm holiday setting where everyone can easily find their place. Its spacious bright living room invites relaxation, while its three comfortable bedrooms guarantee peaceful nights after a day full of discoveries. Designed for large families and friends, this mobile home can accommodate up to 6 people in the best comfort conditions. Outside, extend your moments of conviviality on its large raised terrace equipped with a plancha. Outdoor breakfasts, family lunches, or summer evenings under the stars: everything is gathered to fully enjoy your holidays in an exceptional natural environment.\",\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6acca457ad4ab.png\",\"credit\":\"\",\"description\":\"\",\"city\":\"\",\"address\":\"\",\"km\":null,\"min\":null,\"lat\":null,\"lng\":null,\"tags\":[],\"fields\":[{\"label\":\"Model\",\"value\":\"37m\\u00b2 Oasis Premium Mobile Home - 3 bedrooms\\nLet yourself be seduced by Oasis Premium, our new generation of mobile homes designed to combine comfort, space, and modernity in the heart of the C\\u00e9vennes. With its contemporary design, high-end equipment, and generous volumes, Oasis Premium offers you a warm holiday setting where everyone can easily find their place. Its spacious bright living room invites relaxation, while its three comfortable bedrooms guarantee peaceful nights after a day full of discoveries. Designed for large families and friends, this mobile home can accommodate up to 6 people in the best comfort conditions. Outside, extend your moments of conviviality on its large raised terrace equipped with a plancha. Outdoor breakfasts, family lunches, or summer evenings under the stars: everything is gathered to fully enjoy your holidays in an exceptional natural environment.\"},{\"label\":\"Surface (m\\u00b2)\",\"value\":\"37 m\\u00b2\"},{\"label\":\"Number of rooms\",\"value\":\"3\"},{\"label\":\"Number of bathrooms\",\"value\":\"1\"},{\"label\":\"Main equipment\",\"value\":\"Fully equipped kitchen, semi-covered terrace, television, dishwasher, air conditioning, plancha, garden furniture, heating, free Wi-Fi\"},{\"label\":\"Indicative price\",\"value\":\"De 96 \\u20ac \\u00e0 256 \\u20ac par jour suivant la p\\u00e9riode\"}],\"link\":\"https:\\\/\\\/www.camping-florac.com\\\/location-mobil-home-lozere\\\/\",\"event\":\"\",\"faq\":[],\"video_url\":\"\",\"video_embed\":null,\"documents\":[],\"gallery\":[\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6acca75ec6b66.jpg\",\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6acca75fb2a01.jpg\",\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6acca75fe3ff2.jpg\",\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6acca9e7bd183.jpg\",\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6accaa051a888.jpg\",\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6accaa12ebbb0.jpg\",\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6accaa27138db.jpg\",\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/corpus_gallery\\\/gallery_6accaa406ada9.jpg\"]}];\n    var CATS = {\"villes-aux-alentours\":{\"key\":\"villes-aux-alentours\",\"label\":\"Villes aux alentours\",\"adhoc\":false,\"color\":\"#c2410c\",\"count\":5,\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6a7dd6a9bd2a2.png\"},\"activites-aux-alentours\":{\"key\":\"activites-aux-alentours\",\"label\":\"Activit\\u00e9s aux alentours \",\"adhoc\":false,\"color\":\"#2563eb\",\"count\":5,\"image\":\"https:\\\/\\\/www.camping-florac.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/3-cameras-filment-en-direct-les-nids.jpg\"},\"espace-aquatique\":{\"key\":\"espace-aquatique\",\"label\":\"Water area\",\"adhoc\":false,\"color\":\"#15803d\",\"count\":1,\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6accb04de779e.jpg\"},\"infos-pratiques\":{\"key\":\"infos-pratiques\",\"label\":\"Practical information\",\"adhoc\":true,\"color\":\"#be185d\",\"count\":2,\"image\":\"https:\\\/\\\/elaia-public.s3.fr-par.scw.cloud\\\/metadata_images\\\/image_6accab60cda81.png\"}};\n    \/\/ Textes d'interface dans la langue de la page (includes\/i18n.php)\n    var T = {\"hero_title\":\"Things to discover nearby\",\"hero_text\":\"Villages, beaches, walks, good addresses and experiences selected around your stay.\",\"around\":\"Around\",\"search_placeholder\":\"Search for a place, an activity, a village\\u2026\",\"search\":\"Search\",\"max_distance\":\"Maximum distance\",\"all\":\"All\",\"prev_categories\":\"Previous categories\",\"next_categories\":\"Next categories\",\"categories\":\"Categories\",\"display\":\"Display\",\"list\":\"List\",\"map\":\"Map\",\"close\":\"Close\",\"featured\":\"Featured\",\"discover\":\"Discover\",\"idea\":\"idea\",\"ideas\":\"ideas\",\"around_you\":\"around you\",\"no_result\":\"No results\",\"no_result_hint\":\"Try another search, category or distance.\",\"pagination\":\"Ideas pagination\",\"prev_page\":\"Previous page\",\"next_page\":\"Next page\",\"ideas_title\":\"Ideas to suit your mood\",\"ideas_sub\":\"Suggestions to plan your perfect stay.\",\"reset_view\":\"Back to the overview\",\"map_hint\":\"Click a marker on the map to show its details here.\",\"official_site\":\"Official website\",\"video\":\"Video\",\"gallery\":\"Gallery\",\"documents\":\"Documents\",\"faq\":\"Frequently asked questions\",\"no_answer\":\"No answer yet.\",\"see_on_maps\":\"View on Google Maps\",\"see_place_on_maps\":\"View the campsite on Google Maps\",\"yes\":\"Yes\",\"no\":\"No\",\"practical_info\":\"Practical information\",\"reviews\":\"reviews\",\"read_more\":\"Read more\",\"prev_review\":\"Previous review\",\"next_review\":\"Next review\",\"prev_item\":\"Previous\",\"next_item\":\"Next\",\"photo_credit\":\"Photo: %s\",\"directions\":\"Directions\",\"read_less\":\"Show less\",\"stars_out_of_5\":\"%s stars out of 5\",\"owner_reply\":\"Response from the owner\",\"customer\":\"Guest\",\"customer_reviews\":\"Guest reviews\",\"rating_label\":\"Rated %1$s out of 5, %2$s reviews \\u2014 see the reviews\",\"reviews_by\":\"Reviews presented by Elaia\",\"powered_by\":\"Powered by\",\"today\":\"Today\",\"today_lc\":\"today\",\"tomorrow\":\"Tomorrow\",\"until\":\"Until %s\",\"from_to\":\"From %1$s to %2$s\",\"registration\":\"Booking required\",\"full\":\"Full\",\"all_animations\":\"See all activities \\u2192\",\"ago_day\":\"%d day ago\",\"ago_days\":\"%d days ago\",\"ago_week\":\"%d week ago\",\"ago_weeks\":\"%d weeks ago\",\"ago_month\":\"%d month ago\",\"ago_months\":\"%d months ago\",\"ago_year\":\"%d year ago\",\"ago_years\":\"%d years ago\",\"anim_unavailable\":\"The programme is temporarily unavailable\",\"anim_eyebrow\":\"Enjoy unforgettable moments\",\"anim_title\":\"Activities & events\",\"anim_hero_text\":\"Find all current activities, this week's highlights and upcoming events during your stay.\",\"anim_sections\":\"Page sections\",\"anim_nav_today\":\"Today\",\"anim_nav_week\":\"This week\",\"anim_nav_upcoming\":\"Upcoming\",\"anim_nav_calendar\":\"Calendar\",\"anim_where\":\"Where?\",\"anim_onsite\":\"On site\",\"anim_nearby\":\"Nearby\",\"anim_no_onsite\":\"No on-site activity at the moment\",\"anim_no_nearby\":\"No nearby event at the moment\",\"anim_all_day\":\"All day\",\"anim_at\":\"at %s\",\"anim_see_detail\":\"see details\",\"anim_live\":\"Ongoing\",\"anim_onsite_spot\":\"On site \\u00b7 %s\",\"anim_badge_until\":\"Until\",\"anim_badge_from\":\"From\",\"anim_badge_today\":\"Today\",\"anim_filter_cat\":\"Filter by category\",\"anim_all_f\":\"All\",\"anim_prev_day\":\"Previous day\",\"anim_next_day\":\"Next day\",\"anim_today_title\":\"Today's activities\",\"anim_tomorrow_title\":\"Tomorrow's activities\",\"anim_day_title\":\"Activities on %s\",\"anim_relax_today\":\"A relaxing day today\",\"anim_nothing_day\":\"Nothing planned that day\",\"anim_next_on\":\"Next event on %s.\",\"anim_soon\":\"The programme will be updated soon.\",\"anim_see_day\":\"See that day\",\"anim_prev_acts\":\"Previous activities\",\"anim_next_acts\":\"Next activities\",\"anim_prev_week\":\"Previous week\",\"anim_next_week\":\"Next week\",\"anim_week_title\":\"This week's highlights\",\"anim_next_week_title\":\"Next week\",\"anim_week_of\":\"Week of %s\",\"anim_week_days\":\"Days of the week\",\"anim_today_paren\":\"(today)\",\"anim_activity\":\"%d activity\",\"anim_activities\":\"%d activities\",\"anim_nothing\":\"nothing planned\",\"anim_pick_day\":\"Select another day to see its programme.\",\"anim_sort\":\"Sort events\",\"anim_sort_date\":\"Sort by date\",\"anim_sort_name\":\"Sort by name\",\"anim_upcoming_title\":\"All upcoming events\",\"anim_no_upcoming\":\"No upcoming events\",\"anim_try_cat\":\"Try another category.\",\"anim_more\":\"See more events (%d)\",\"anim_hide_cal\":\"Hide the calendar\",\"anim_show_cal\":\"See the full calendar\",\"anim_cal_title\":\"Monthly calendar\",\"anim_cal_sub\":\"All of the month's events at a glance.\",\"anim_prev_month\":\"Previous month\",\"anim_next_month\":\"Next month\",\"anim_more_info\":\"More information\",\"anim_new_tab\":\"(new tab)\",\"date_locale\":\"en-GB\",\"page_faq\":\"FAQ\",\"page_metadatas\":\"Discover around you\",\"page_animations\":\"Activities and events\",\"page_corpus\":\"Practical information\",\"anim_event\":\"Event\"};\n    var DECIMAL = \".\";\n    function plural(n) { return n + ' ' + (n > 1 ? T.ideas : T.idea); }\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(T.all));\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('.', DECIMAL) + ' 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      \/\/ Les mini-cartes aussi : la photo y est petite, mais c'est la m\u00eame photo,\n      \/\/ et la licence ne pr\u00e9voit pas d'exception de taille.\n      if (it.credit) {\n        var cr = el('span', 'mv-credit', '\u00a9');\n        cr.title = 'Photo : ' + it.credit;\n        cr.setAttribute('aria-label', 'Photo : ' + it.credit);\n        cr.setAttribute('data-credit', 'Photo : ' + it.credit);\n        media.appendChild(cr);\n      }\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(T.featured));\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', T.discover);\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, plural(list.length)));\n      count.appendChild(document.createTextNode(' ' + T.around_you));\n\n      if (!list.length) {\n        var empty = el('div', 'mv-empty');\n        empty.appendChild(el('strong', null, T.no_result));\n        empty.appendChild(document.createTextNode(T.no_result_hint));\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    \/**\n     * Remonte au bloc demand\u00e9, sous l'en-t\u00eate fixe du th\u00e8me. Apr\u00e8s le rendu\n     * (image suivante) : la liste vient de changer de hauteur \u2014 28 pages qui\n     * deviennent une \u2014 et une position calcul\u00e9e avant tombait trop haut ou\n     * trop bas selon la cat\u00e9gorie cliqu\u00e9e.\n     *\/\n    var appRoot = document.getElementById('mv-app');\n    if (appRoot) appRoot.style.overflowAnchor = 'none';\n\n    function scrollToBlock(id) {\n      requestAnimationFrame(function() {\n        var target = document.getElementById(id);\n        if (!target) return;\n        var top = target.getBoundingClientRect().top + window.pageYOffset - headerOffset() - 16;\n        window.scrollTo({ top: Math.max(0, top), behavior: 'smooth' });\n      });\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', T.pagination);\n      var go = function(n) {\n        state.page = n;\n        try {\n          renderList();\n        } finally {\n          scrollToBlock('mv-count');\n        }\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: T.prev_page });\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: T.next_page });\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', T.ideas_title);\n      h.id = 'mv-ideas-title';\n      head.appendChild(h);\n      head.appendChild(el('p', 'mv-ideas-sub', T.ideas_sub));\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, plural(c.count)));\n        body.appendChild(txt);\n        body.appendChild(icon('arrow'));\n        b.appendChild(body);\n        b.addEventListener('click', function() {\n          try {\n            setCat(key);\n          } finally {\n            scrollToBlock('mv-cats');\n          }\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(T.reset_view));\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    \/**\n     * Met la carte \u00e0 jour sans jamais bloquer la page. Le th\u00e8me (ou WP Rocket)\n     * peut r\u00e9ex\u00e9cuter Leaflet apr\u00e8s coup : markercluster lit alors la mauvaise\n     * copie (\u00ab L.DistanceGrid is not a constructor \u00bb) au moment o\u00f9 la LISTE met\n     * la carte \u00e0 jour. On remet la bonne copie avant, et une erreur de carte\n     * n'emp\u00eache plus la liste ni le d\u00e9filement qui suivent.\n     *\/\n    function updateMap(list) {\n      if (!map || !layer) return;\n      if (Lf && window.L !== Lf) window.L = Lf;\n      try {\n        drawMap(list);\n      } catch (e) {\n        if (window.console) console.warn('Elaia \u2014 carte non mise \u00e0 jour :', e);\n      }\n    }\n\n    function drawMap(list) {\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(T.map_hint));\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          if (cap) cap.remove();\n        };\n        side.appendChild(img);\n        var cap = null;\n        if (it.credit) {\n          cap = el('p', 'mv-modal-credit', 'Photo : ' + it.credit);\n          side.appendChild(cap);\n        }\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', T.official_site);\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', T.video));\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', T.gallery));\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', T.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', T.faq));\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 || T.no_answer));\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: T.see_on_maps };\n      var where = it.address || it.city;\n      if (where) return { url: base + encodeURIComponent(it.name + ', ' + where), label: T.see_on_maps };\n      if (MAP.home) return { url: base + encodeURIComponent(MAP.home.lat + ',' + MAP.home.lng), label: T.see_place_on_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,"footnotes":""},"class_list":["post-8891","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Discover around you - Camping Pont du Tarn<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.camping-florac.com\/en\/elaia-metadatas\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Discover around you - Camping Pont du Tarn\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.camping-florac.com\/en\/elaia-metadatas\/\" \/>\n<meta property=\"og:site_name\" content=\"Camping Pont du Tarn\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.camping-florac.com\\\/en\\\/elaia-metadatas\\\/\",\"url\":\"https:\\\/\\\/www.camping-florac.com\\\/en\\\/elaia-metadatas\\\/\",\"name\":\"Discover around you - Camping Pont du Tarn\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.camping-florac.com\\\/en\\\/#website\"},\"datePublished\":\"2026-10-20T10:12:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.camping-florac.com\\\/en\\\/elaia-metadatas\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.camping-florac.com\\\/en\\\/elaia-metadatas\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.camping-florac.com\\\/en\\\/elaia-metadatas\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Camping Loz\u00e8re\",\"item\":\"https:\\\/\\\/www.camping-florac.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Discover around you\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.camping-florac.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.camping-florac.com\\\/en\\\/\",\"name\":\"Camping Pont du Tarn\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.camping-florac.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Discover around you - Camping Pont du Tarn","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.camping-florac.com\/en\/elaia-metadatas\/","og_locale":"en_US","og_type":"article","og_title":"Discover around you - Camping Pont du Tarn","og_url":"https:\/\/www.camping-florac.com\/en\/elaia-metadatas\/","og_site_name":"Camping Pont du Tarn","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.camping-florac.com\/en\/elaia-metadatas\/","url":"https:\/\/www.camping-florac.com\/en\/elaia-metadatas\/","name":"Discover around you - Camping Pont du Tarn","isPartOf":{"@id":"https:\/\/www.camping-florac.com\/en\/#website"},"datePublished":"2026-10-20T10:12:47+00:00","breadcrumb":{"@id":"https:\/\/www.camping-florac.com\/en\/elaia-metadatas\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.camping-florac.com\/en\/elaia-metadatas\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.camping-florac.com\/en\/elaia-metadatas\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Camping Loz\u00e8re","item":"https:\/\/www.camping-florac.com\/en\/"},{"@type":"ListItem","position":2,"name":"Discover around you"}]},{"@type":"WebSite","@id":"https:\/\/www.camping-florac.com\/en\/#website","url":"https:\/\/www.camping-florac.com\/en\/","name":"Camping Pont du Tarn","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.camping-florac.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/www.camping-florac.com\/en\/wp-json\/wp\/v2\/pages\/8891","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.camping-florac.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.camping-florac.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.camping-florac.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.camping-florac.com\/en\/wp-json\/wp\/v2\/comments?post=8891"}],"version-history":[{"count":1,"href":"https:\/\/www.camping-florac.com\/en\/wp-json\/wp\/v2\/pages\/8891\/revisions"}],"predecessor-version":[{"id":8892,"href":"https:\/\/www.camping-florac.com\/en\/wp-json\/wp\/v2\/pages\/8891\/revisions\/8892"}],"wp:attachment":[{"href":"https:\/\/www.camping-florac.com\/en\/wp-json\/wp\/v2\/media?parent=8891"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}