{"id":2755,"date":"2026-03-23T23:25:28","date_gmt":"2026-03-23T22:25:28","guid":{"rendered":"https:\/\/vosges-grandeur-nature.fr\/?page_id=2755"},"modified":"2026-07-08T23:03:00","modified_gmt":"2026-07-08T21:03:00","slug":"unterkuenfte","status":"publish","type":"page","link":"https:\/\/vosges-grandeur-nature.fr\/de\/logements\/","title":{"rendered":"Unterk\u00fcnfte"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2755\" class=\"elementor elementor-2755\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7d5814b elementor-section-height-min-height elementor-section-boxed elementor-section-height-default elementor-section-items-middle\" data-id=\"7d5814b\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b8b50fc\" data-id=\"b8b50fc\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-4e5a501 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4e5a501\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-3fde459\" data-id=\"3fde459\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-8eefa0c elementor-widget elementor-widget-heading\" data-id=\"8eefa0c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Les logements <em style=\"color:#ffc632;font-style:italic\">Vosges Grandeur Nature<\/em><\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-55e3ddf\" data-id=\"55e3ddf\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-642e2f4 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"642e2f4\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0dfb3fb\" data-id=\"0dfb3fb\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d5d3371 elementor-widget elementor-widget-html\" data-id=\"d5d3371\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div style=\"display:flex;align-items:center;justify-content:center;gap:20px;\">\r\n  <span style=\"font-family:'DM Sans',sans-serif;font-size:13px;font-weight:600;color:#135221;\">\r\n    Propri\u00e9taire d'un g\u00eete dans les Vosges ? Le listing est gratuit, contactez-nous !\r\n  <\/span>\r\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b523d81 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b523d81\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-15c13f6\" data-id=\"15c13f6\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-eefaff3 elementor-widget elementor-widget-shortcode\" data-id=\"eefaff3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">    <div class=\"vgn-section-carte\">\r\n\r\n        <div class=\"vgn-col-ambassadeur\">\r\n            <div class=\"vgn-col-inner\">\r\n                <div class=\"vgn-col-badge ambassadeur-badge\">\r\n                    <svg width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n                        <path d=\"M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z\" stroke=\"#555\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n                        <path d=\"M9 22V12h6v10\" stroke=\"#555\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n                    <\/svg>\r\n                    Ambassadeur\r\n                <\/div>\r\n                <div class=\"vgn-col-titre\">Membres du r\u00e9seau<\/div>\r\n                <div class=\"vgn-col-liste\">\r\n                    <div class=\"vgn-col-item oui\">Logement v\u00e9rifi\u00e9 par notre \u00e9quipe<\/div>\r\n                    <div class=\"vgn-col-item oui\">R\u00e9f\u00e9renc\u00e9 sur vosges-grandeur-nature.fr<\/div>\r\n                    <div class=\"vgn-col-item non\">Pass VGN non inclus<\/div>\r\n                    <div class=\"vgn-col-item non\">R\u00e9servation en ligne non disponible<\/div>\r\n                <\/div>\r\n                <div class=\"vgn-col-note\">\r\n                    <div>&#128222; Contact direct avec le propri\u00e9taire.<\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"vgn-col-vgn\">\r\n            <div class=\"vgn-col-inner vgn-inner-gold\">\r\n                <div class=\"vgn-col-badge vgn-badge-gold\">&#9733; VGN Premium &#9733;<\/div>\r\n                <div class=\"vgn-col-titre\">Logements certifi\u00e9s<\/div>\r\n                <div class=\"vgn-col-liste\">\r\n                    <div class=\"vgn-col-item oui\">R\u00e9servation directe sur notre site<\/div>\r\n                    <div class=\"vgn-col-item oui\">Paiement en ligne s\u00e9curis\u00e9<\/div>\r\n                    <div class=\"vgn-col-item oui\">Contrat avec signature \u00e9lectronique<\/div>\r\n                    <div class=\"vgn-col-item oui\">Pass VGN 100% offert<\/div>\r\n                    <div class=\"vgn-col-item oui\">G\u00e9r\u00e9 par Vosges Grandeur Nature<\/div>\r\n                <\/div>\r\n                <a href=\"\/contact\/\" class=\"vgn-col-btn\">Nous contacter &#8594;<\/a>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"vgn-col-carte\">\r\n            <div id=\"vgn-map\"><\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n    <div class=\"vgn-filtres-carte\">\r\n        <div class=\"vgn-filtres-row vgn-dates-row\">\r\n            <div class=\"vgn-filtre-group vgn-dates-group vgn-ac-anchor\">\r\n                <div class=\"vgn-filtre-label\">Dates<\/div>\r\n                <button type=\"button\" id=\"vgn-ac-champ\" class=\"vgn-ac-champ\" aria-haspopup=\"dialog\" aria-expanded=\"false\">\r\n                    <span id=\"vgn-ac-txt\" class=\"vgn-ac-ph\">Quand souhaitez-vous venir&nbsp;?<\/span>\r\n                    <svg class=\"vgn-ac-ico\" width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#135221\" stroke-width=\"2\" aria-hidden=\"true\">\r\n                        <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\"><\/rect>\r\n                        <path d=\"M3 10h18M8 3v4M16 3v4\"><\/path>\r\n                    <\/svg>\r\n                <\/button>\r\n                <div class=\"vgn-ac-pop\" id=\"vgn-ac-pop\" role=\"dialog\" aria-label=\"Dates\">\r\n                    <div class=\"vgn-ac-mois\">\r\n                        <div class=\"vgn-ac-bloc\">\r\n                            <div class=\"vgn-cal-nav\">\r\n                                <button type=\"button\" class=\"vgn-ca\" id=\"vgn-ac-prev\" aria-label=\"Mois pr\u00e9c\u00e9dent\">&lsaquo;<\/button>\r\n                                <div class=\"vgn-cal-month\" id=\"vgn-ac-m0\"><\/div>\r\n                                <span class=\"vgn-ac-vide vgn-ac-desk\"><\/span>\r\n                                <button type=\"button\" class=\"vgn-ca vgn-ac-mob\" id=\"vgn-ac-next2\" aria-label=\"Mois suivant\">&rsaquo;<\/button>\r\n                            <\/div>\r\n                            <div class=\"vgn-cal-hds\" id=\"vgn-ac-h0\"><\/div>\r\n                            <div class=\"vgn-cal-ds\" id=\"vgn-ac-j0\"><\/div>\r\n                        <\/div>\r\n                        <div class=\"vgn-ac-bloc\">\r\n                            <div class=\"vgn-cal-nav\">\r\n                                <span class=\"vgn-ac-vide\"><\/span>\r\n                                <div class=\"vgn-cal-month\" id=\"vgn-ac-m1\"><\/div>\r\n                                <button type=\"button\" class=\"vgn-ca\" id=\"vgn-ac-next\" aria-label=\"Mois suivant\">&rsaquo;<\/button>\r\n                            <\/div>\r\n                            <div class=\"vgn-cal-hds\" id=\"vgn-ac-h1\"><\/div>\r\n                            <div class=\"vgn-cal-ds\" id=\"vgn-ac-j1\"><\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class=\"vgn-ac-pied\">\r\n                        <span class=\"vgn-ac-aide\" id=\"vgn-ac-aide\">Choisissez votre date d'arriv\u00e9e.<\/span>\r\n                        <button type=\"button\" class=\"vgn-ac-lien\" id=\"vgn-ac-effacer\">Effacer<\/button>\r\n                    <\/div>\r\n                <\/div>\r\n                <input type=\"hidden\" id=\"vgn-date-arrivee\">\r\n                <input type=\"hidden\" id=\"vgn-date-depart\">\r\n            <\/div>\r\n            <div class=\"vgn-filtre-group vgn-dates-group\">\r\n                <div class=\"vgn-filtre-label\">Voyageurs<\/div>\r\n                <select id=\"vgn-voyageurs\" class=\"vgn-date-input\">\r\n                    <option value=\"1\">1 personne<\/option>\r\n                    <option value=\"2\" selected>2 personnes<\/option>\r\n                    <option value=\"3\">3 personnes<\/option>\r\n                    <option value=\"4\">4 personnes<\/option>\r\n                    <option value=\"5\">5 personnes<\/option>\r\n                    <option value=\"6\">6 personnes<\/option>\r\n                    <option value=\"7\">7 personnes<\/option>\r\n                    <option value=\"8\">8 personnes<\/option>\r\n                    <option value=\"9\">9 personnes<\/option>\r\n                    <option value=\"10\">10 personnes<\/option>\r\n                <\/select>\r\n            <\/div>\r\n            <div class=\"vgn-filtre-group vgn-dates-group\">\r\n                <button type=\"button\" id=\"vgn-btn-dispo\" class=\"vgn-btn-dispo\" disabled>Voir les disponibilit\u00e9s<\/button>\r\n            <\/div>\r\n        <\/div>\r\n        <div id=\"vgn-dates-msg\" class=\"vgn-dates-msg\" style=\"display:none\"><\/div>\r\n        <div id=\"vgn-dispo-resume\" class=\"vgn-dispo-resume\" style=\"display:none\"><\/div>\r\n        <div class=\"vgn-filtres-row\">\r\n            <div class=\"vgn-filtre-group\">\r\n                <div class=\"vgn-filtre-label\">Niveau<\/div>\r\n                <div class=\"vgn-pills\">\r\n                    <button class=\"vgn-pill active\" data-filtre=\"niveau\" data-val=\"tous\">Tous<\/button>\r\n                    <button class=\"vgn-pill\" data-filtre=\"niveau\" data-val=\"ambassadeur\">Ambassadeur<\/button>\r\n\n<button class=\"vgn-pill vgn-pill-gold\" data-filtre=\"niveau\" data-val=\"labelise\">\u2605 VGN Premium \u2605<\/button>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n        <div class=\"vgn-filtres-row\" id=\"vgn-groupe-equip\">\r\n            <div class=\"vgn-filtre-group\">\r\n                <div class=\"vgn-filtre-label\">\u00c9quipements<\/div>\r\n                <div class=\"vgn-pills\">\r\n                    <button class=\"vgn-pill-equip\" data-equip=\"sauna\">Sauna<\/button>\r\n                    <button class=\"vgn-pill-equip\" data-equip=\"jacuzzi\">Jacuzzi<\/button>\r\n                    <button class=\"vgn-pill-equip\" data-equip=\"piscine\">Piscine<\/button>\r\n                    <button class=\"vgn-pill-equip\" data-equip=\"pieds_piste\">Pieds de piste<\/button>\r\n                    <button class=\"vgn-pill-equip\" data-equip=\"animaux\">Animaux accept\u00e9s<\/button>\r\n                    <button class=\"vgn-pill-equip\" data-equip=\"cheminee\">Chemin\u00e9e<\/button>\r\n                    <button class=\"vgn-pill-equip\" data-equip=\"vue_montagne\">Vue montagne<\/button>\r\n                    <button class=\"vgn-pill-equip\" data-equip=\"jardin\">Jardin<\/button>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n        <div class=\"vgn-filtres-footer\">\r\n            <span id=\"vgn-count\"><\/span>\r\n            <button class=\"vgn-reset\" onclick=\"vgnReset()\">R\u00e9initialiser<\/button>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"vgn-liste-vide\" id=\"vgn-liste-vide\" style=\"display:none\">\r\n        <div class=\"vgn-vide-icone\" aria-hidden=\"true\">&#128269;<\/div>\r\n        <div class=\"vgn-vide-titre\" id=\"vgn-vide-titre\">Aucun logement ne correspond \u00e0 vos filtres<\/div>\r\n        <div class=\"vgn-vide-texte\" id=\"vgn-vide-texte\">Ces dates sont peut-\u00eatre libres \u2014 effacez les filtres pour le voir.<\/div>\r\n        <button type=\"button\" class=\"vgn-vide-btn\" id=\"vgn-vide-btn\" onclick=\"vgnReset()\">Effacer les filtres<\/button>\r\n    <\/div>\r\n\r\n    <link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/leaflet\/1.9.4\/leaflet.min.css\"\/>\r\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/leaflet\/1.9.4\/leaflet.min.js\"><\/script>\r\n    <script>\r\n    document.addEventListener(\"DOMContentLoaded\", function() {\r\n        var map = L.map(\"vgn-map\").setView([48.0, 6.8], 10);\r\n        L.tileLayer(\"https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png\", {\r\n            attribution: \"OpenStreetMap\", maxZoom: 18\r\n        }).addTo(map);\r\n\r\n        function makeIcon(color, border) {\r\n            var html = \"<div style='width:26px;height:26px;background:\" + color + \";border-radius:50% 50% 50% 0;transform:rotate(-45deg);border:3px solid \" + border + \";box-shadow:0 2px 6px rgba(0,0,0,0.25)'><\/div>\";\r\n            return L.divIcon({className: \"\", html: html, iconSize: [26,26], iconAnchor: [13,26], popupAnchor: [0,-28]});\r\n        }\r\n\r\n        var iconPremium    = makeIcon(\"#ffc632\", \"#135221\");\r\n        var iconPartenaire = makeIcon(\"#135221\", \"#ffc632\");\r\n        var iconAmb        = makeIcon(\"#ffffff\", \"#135221\");\r\n\r\n        var logements = [{\"id\":6213,\"slug\":\"le-belle-hutte\",\"lat\":48.0371772,\"lng\":6.9667582,\"nom\":\"Le Belle-Hutte\",\"niveau\":\"labelise\",\"ville\":\"La Bresse\",\"capacite\":4,\"tarif\":\"55\",\"url\":\"https:\\\/\\\/vosges-grandeur-nature.fr\\\/de\\\/gites-vosges\\\/le-belle-hutte\\\/\",\"thumb\":\"https:\\\/\\\/vosges-grandeur-nature.fr\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/L9hrTVlL4WygFwEaWxzJQlF2yTnfru0ACf5Cn21t-2-300x140.jpg\",\"equips\":[\"animaux\"]},{\"id\":6158,\"slug\":\"la-maison-des-montagnes\",\"lat\":47.882407,\"lng\":6.767218,\"nom\":\"La Maison des Montagnes\",\"niveau\":\"labelise\",\"ville\":\"Le Thillot\",\"capacite\":6,\"tarif\":\"80\",\"url\":\"https:\\\/\\\/vosges-grandeur-nature.fr\\\/de\\\/gites-vosges\\\/la-maison-des-montagnes\\\/\",\"thumb\":\"https:\\\/\\\/vosges-grandeur-nature.fr\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/0Mcjq8u8yQKq1mJeLmPCNecgfuEDbM3jiNWGS6dg-2-300x140.jpg\",\"equips\":[\"wifi\",\"lave_linge\",\"parking\",\"animaux\"]},{\"id\":6023,\"slug\":\"la-ferme-des-cherrieres\",\"lat\":47.923139,\"lng\":6.698282,\"nom\":\"La Ferme des Cherri\\u00e8res\",\"niveau\":\"labelise\",\"ville\":\"Rupt-sur-Moselle\",\"capacite\":9,\"tarif\":\"400\",\"url\":\"https:\\\/\\\/vosges-grandeur-nature.fr\\\/de\\\/gites-vosges\\\/la-ferme-des-cherrieres\\\/\",\"thumb\":\"https:\\\/\\\/vosges-grandeur-nature.fr\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/777YuxXJMaDj5KTYPvQd8NWz2jOwdU9bAE9WPVSx-7-300x140.jpg\",\"equips\":[\"wifi\",\"piscine\",\"sauna\",\"lave_linge\",\"parking\",\"animaux\",\"terrasse\",\"jardin\",\"plancha\"]}];\r\n        var markers = [];\r\n        var filtres = {niveau: \"tous\", capacite: \"tous\", equips: []};\r\n\r\n        \/* ================= RECHERCHE PAR DATES =================\r\n           L'archive reste ce qu'elle est tant qu'aucune date n'est choisie :\r\n           le HTML servi ne change pas, donc l'indexation non plus. La recherche\r\n           est une surcouche \u2014 si l'API tombe, la page en dessous est intacte. *\/\r\n\r\n        var VGN_API_DISPO = \"https:\/\/app.vosges-grandeur-nature.fr\/api\/v1\/app\/logements\/disponibilites\";\r\n        var vgnDispo = null;        \/\/ { slug: {etat, prix_total, ...} } \u2014 null = aucune recherche\r\n        var vgnDispoResume = null;\r\n\r\n        \/* ---- Traductions de la recherche par dates ----\r\n           TranslatePress ne voit PAS le texte compose en JS : sans ce\r\n           dictionnaire, un germanophone lit du francais sur \/de\/unterkuenfte\/.\r\n           Les libelles deja presents dans VGN_T (snippet 3533, charge partout)\r\n           sont reutilises plutot que dupliques. *\/\r\n        var VGN_LANG = (String(window.VGN_LOCALE || \"fr\").slice(0, 2).toLowerCase());\r\n        if (VGN_LANG !== \"de\" && VGN_LANG !== \"nl\") { VGN_LANG = \"fr\"; }\r\n\r\n        var VGN_TD = {\r\n            fr: {\r\n                arrivee: \"Arriv\u00e9e\", depart: \"D\u00e9part\", voyageurs: \"Voyageurs\",\r\n                personnes: \"personnes\", personne: \"personne\",\r\n                voir_dispo: \"Voir les disponibilit\u00e9s\", modifier: \"Modifier\",\r\n                recherche: \"Recherche des disponibilit\u00e9s et des tarifs\u2026\",\r\n                panne: \"Les disponibilit\u00e9s en direct sont momentan\u00e9ment indisponibles. Les logements restent consultables, et chaque fiche affiche son calendrier \u00e0 jour.\",\r\n                min_nuits: \"Les s\u00e9jours d'une seule nuit ne sont pas propos\u00e9s. Choisissez au minimum 2 nuits.\",\r\n                ordre_dates: \"La date de d\u00e9part doit suivre la date d'arriv\u00e9e.\",\r\n                du: \"Du\", au: \"au\", nuits: \"nuits\",\r\n                dispo_sur: \"logements disponibles sur\", dispo_sur_1: \"logement disponible sur\",\r\n                effacer: \"Effacer les dates\", effacer_court: \"Effacer\",\r\n                vide_titre: \"Aucun logement ne correspond \u00e0 vos filtres\",\r\n                vide_texte: \"Ces dates sont peut-\u00eatre libres \u2014 effacez les filtres pour le voir.\",\r\n                vide_bouton: \"Effacer les filtres\",\r\n                a_partir: \"\u00c0 partir de\", par_nuit: \"\/nuit\",\r\n                dates: \"Dates\", quand: \"Quand souhaitez-vous venir\u00a0?\", nuit: \"nuit\",\r\n                choisir_arrivee: \"Choisissez votre date d'arriv\u00e9e.\",\r\n                choisir_depart: \"Choisissez votre date de d\u00e9part (2 nuits minimum).\",\r\n                e_dispo: \"Disponible\", e_complet: \"Complet sur ces dates\",\r\n                e_demande: \"Disponibilit\u00e9s sur demande\", e_petit: \"Trop petit pour ce groupe\",\r\n                e_court: \"S\u00e9jour trop court\",\r\n                tout_inclus: \"m\u00e9nage et taxes inclus\",\r\n                reserver: \"R\u00e9server ces dates\", voir_dates: \"Voir ces dates\",\r\n                demander: \"Demander ces dates\", voir_tarif: \"Voir le tarif\",\r\n                autres_dates: \"Voir d'autres dates\",\r\n                libre_du: \"Libre\", complet_point: \"Complet sur ces dates.\",\r\n                tarif_indispo: \"Tarif momentan\u00e9ment indisponible \u2014 il s'affiche sur la fiche du logement.\",\r\n                proprio_calendrier: \"Ce propri\u00e9taire g\u00e8re son calendrier lui-m\u00eame.\",\r\n                accueille: \"Ce logement accueille\", au_max: \"au maximum\",\r\n                dates_libres_mais: \"Les dates sont libres, mais ce logement demande\",\r\n                nuits_min_periode: \"nuits minimum<\/strong> sur cette p\u00e9riode.\",\r\n                essayer: \"Essayer\",\r\n                remise_weekly: \"Remise semaine\", remise_monthly: \"Remise mois\", remise_autre: \"Remise\"\r\n            },\r\n            de: {\r\n                arrivee: \"Anreise\", depart: \"Abreise\", voyageurs: \"Reisende\",\r\n                personnes: \"Personen\", personne: \"Person\",\r\n                voir_dispo: \"Verf\u00fcgbarkeit anzeigen\", modifier: \"\u00c4ndern\",\r\n                recherche: \"Verf\u00fcgbarkeiten und Preise werden gesucht\u2026\",\r\n                panne: \"Die Live-Verf\u00fcgbarkeit ist vor\u00fcbergehend nicht erreichbar. Die Unterk\u00fcnfte bleiben einsehbar, und jede Seite zeigt ihren aktuellen Kalender.\",\r\n                min_nuits: \"Aufenthalte von nur einer Nacht werden nicht angeboten. Bitte w\u00e4hlen Sie mindestens 2 N\u00e4chte.\",\r\n                ordre_dates: \"Das Abreisedatum muss nach dem Anreisedatum liegen.\",\r\n                du: \"Vom\", au: \"bis\", nuits: \"N\u00e4chte\",\r\n                dispo_sur: \"Unterk\u00fcnfte verf\u00fcgbar von\", dispo_sur_1: \"Unterkunft verf\u00fcgbar von\",\r\n                effacer: \"Daten l\u00f6schen\", effacer_court: \"L\u00f6schen\",\r\n                vide_titre: \"Keine Unterkunft entspricht Ihren Filtern\",\r\n                vide_texte: \"Diese Daten sind vielleicht frei \u2014 l\u00f6schen Sie die Filter, um es zu sehen.\",\r\n                vide_bouton: \"Filter l\u00f6schen\",\r\n                a_partir: \"Ab\", par_nuit: \"\/Nacht\",\r\n                dates: \"Daten\", quand: \"Wann m\u00f6chten Sie kommen?\", nuit: \"Nacht\",\r\n                choisir_arrivee: \"W\u00e4hlen Sie Ihr Anreisedatum.\",\r\n                choisir_depart: \"W\u00e4hlen Sie Ihr Abreisedatum (mindestens 2 N\u00e4chte).\",\r\n                e_dispo: \"Verf\u00fcgbar\", e_complet: \"An diesen Daten belegt\",\r\n                e_demande: \"Verf\u00fcgbarkeit auf Anfrage\", e_petit: \"Zu klein f\u00fcr diese Gruppe\",\r\n                e_court: \"Aufenthalt zu kurz\",\r\n                tout_inclus: \"Endreinigung und Steuern inbegriffen\",\r\n                reserver: \"Diese Daten buchen\", voir_dates: \"Diese Daten ansehen\",\r\n                demander: \"Diese Daten anfragen\", voir_tarif: \"Preis ansehen\",\r\n                autres_dates: \"Andere Daten ansehen\",\r\n                libre_du: \"Frei\", complet_point: \"An diesen Daten belegt.\",\r\n                tarif_indispo: \"Preis vor\u00fcbergehend nicht verf\u00fcgbar \u2014 er wird auf der Seite der Unterkunft angezeigt.\",\r\n                proprio_calendrier: \"Dieser Eigent\u00fcmer verwaltet seinen Kalender selbst.\",\r\n                accueille: \"Diese Unterkunft bietet Platz f\u00fcr\", au_max: \"maximal\",\r\n                dates_libres_mais: \"Die Daten sind frei, aber diese Unterkunft verlangt\",\r\n                nuits_min_periode: \"N\u00e4chte Mindestaufenthalt<\/strong> in diesem Zeitraum.\",\r\n                essayer: \"Versuchen Sie\",\r\n                remise_weekly: \"Wochenrabatt\", remise_monthly: \"Monatsrabatt\", remise_autre: \"Rabatt\"\r\n            },\r\n            nl: {\r\n                arrivee: \"Aankomst\", depart: \"Vertrek\", voyageurs: \"Reizigers\",\r\n                personnes: \"personen\", personne: \"persoon\",\r\n                voir_dispo: \"Beschikbaarheid bekijken\", modifier: \"Wijzigen\",\r\n                recherche: \"Beschikbaarheid en tarieven worden opgehaald\u2026\",\r\n                panne: \"De live beschikbaarheid is tijdelijk niet bereikbaar. De accommodaties blijven raadpleegbaar en elke pagina toont haar actuele kalender.\",\r\n                min_nuits: \"Verblijven van \u00e9\u00e9n nacht worden niet aangeboden. Kies minimaal 2 nachten.\",\r\n                ordre_dates: \"De vertrekdatum moet na de aankomstdatum liggen.\",\r\n                du: \"Van\", au: \"tot\", nuits: \"nachten\",\r\n                dispo_sur: \"accommodaties beschikbaar van\", dispo_sur_1: \"accommodatie beschikbaar van\",\r\n                effacer: \"Data wissen\", effacer_court: \"Wissen\",\r\n                vide_titre: \"Geen accommodatie voldoet aan uw filters\",\r\n                vide_texte: \"Deze data zijn misschien vrij \u2014 wis de filters om het te zien.\",\r\n                vide_bouton: \"Filters wissen\",\r\n                a_partir: \"Vanaf\", par_nuit: \"\/nacht\",\r\n                dates: \"Data\", quand: \"Wanneer wilt u komen?\", nuit: \"nacht\",\r\n                choisir_arrivee: \"Kies uw aankomstdatum.\",\r\n                choisir_depart: \"Kies uw vertrekdatum (minimaal 2 nachten).\",\r\n                e_dispo: \"Beschikbaar\", e_complet: \"Volgeboekt op deze data\",\r\n                e_demande: \"Beschikbaarheid op aanvraag\", e_petit: \"Te klein voor deze groep\",\r\n                e_court: \"Verblijf te kort\",\r\n                tout_inclus: \"schoonmaak en belastingen inbegrepen\",\r\n                reserver: \"Deze data boeken\", voir_dates: \"Deze data bekijken\",\r\n                demander: \"Deze data aanvragen\", voir_tarif: \"Tarief bekijken\",\r\n                autres_dates: \"Andere data bekijken\",\r\n                libre_du: \"Vrij\", complet_point: \"Volgeboekt op deze data.\",\r\n                tarif_indispo: \"Tarief tijdelijk niet beschikbaar \u2014 het staat op de pagina van de accommodatie.\",\r\n                proprio_calendrier: \"Deze eigenaar beheert zijn kalender zelf.\",\r\n                accueille: \"Deze accommodatie biedt plaats aan\", au_max: \"maximaal\",\r\n                dates_libres_mais: \"De data zijn vrij, maar deze accommodatie vraagt\",\r\n                nuits_min_periode: \"nachten minimaal<\/strong> in deze periode.\",\r\n                essayer: \"Probeer\",\r\n                remise_weekly: \"Weekkorting\", remise_monthly: \"Maandkorting\", remise_autre: \"Korting\"\r\n            }\r\n        };\r\n\r\n        \/* VGN_T (snippet 3533) fait autorite quand la cle y existe deja. *\/\r\n        function vgnT(cle, cleVgnT) {\r\n            if (cleVgnT && window.VGN_T && VGN_T[cleVgnT]) return VGN_T[cleVgnT];\r\n            var d = VGN_TD[VGN_LANG] || VGN_TD.fr;\r\n            return d[cle] !== undefined ? d[cle] : (VGN_TD.fr[cle] || \"\");\r\n        }\r\n\r\n        var VGN_LIBELLES = {\r\n            disponible:        {cle: \"e_dispo\",   classe: \"ok\"},\r\n            complet:           {cle: \"e_complet\", classe: \"ko\"},\r\n            sur_demande:       {cle: \"e_demande\", classe: \"dem\"},\r\n            trop_petit:        {cle: \"e_petit\",   classe: \"ko\"},\r\n            sejour_trop_court: {cle: \"e_court\",   classe: \"ko\"},\r\n            prix_indisponible: {cle: \"e_dispo\",   classe: \"ok\"}\r\n        };\r\n\r\n        function vgnEls() {\r\n            return {\r\n                arrivee: document.getElementById(\"vgn-date-arrivee\"),\r\n                depart: document.getElementById(\"vgn-date-depart\"),\r\n                voyageurs: document.getElementById(\"vgn-voyageurs\"),\r\n                bouton: document.getElementById(\"vgn-btn-dispo\"),\r\n                message: document.getElementById(\"vgn-dates-msg\"),\r\n                resume: document.getElementById(\"vgn-dispo-resume\")\r\n            };\r\n        }\r\n\r\n        function vgnSaisie() {\r\n            var e = vgnEls();\r\n            return {\r\n                arrivee: e.arrivee ? e.arrivee.value : \"\",\r\n                depart: e.depart ? e.depart.value : \"\",\r\n                voyageurs: e.voyageurs ? (parseInt(e.voyageurs.value, 10) || 2) : 2\r\n            };\r\n        }\r\n\r\n        function vgnNuits(a, d) {\r\n            if (!a || !d) return 0;\r\n            var ms = new Date(a + \"T00:00:00\").getTime();\r\n            var mf = new Date(d + \"T00:00:00\").getTime();\r\n            if (isNaN(ms) || isNaN(mf)) return 0;\r\n            return Math.round((mf - ms) \/ 86400000);\r\n        }\r\n\r\n        function vgnFormatPrix(v) {\r\n            if (v === null || v === undefined) return \"\";\r\n            return String(v).replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, \"\\u00a0\") + \"\\u00a0\u20ac\";\r\n        }\r\n\r\n        \/* Le minimum de 2 nuits est dit AVANT l'appel : sinon le visiteur recoit\r\n           \u00ab complet partout \u00bb et croit qu'il n'y a plus de place. *\/\r\n        function vgnMajBouton() {\r\n            vgnAcSync();\r\n            var e = vgnEls(), s = vgnSaisie();\r\n            if (!e.bouton) return;\r\n            var nuits = vgnNuits(s.arrivee, s.depart);\r\n            e.bouton.disabled = !(s.arrivee && s.depart && nuits >= 2);\r\n            if (e.message) {\r\n                if (s.arrivee && s.depart && nuits > 0 && nuits < 2) {\r\n                    e.message.textContent = vgnT(\"min_nuits\");\r\n                    e.message.style.display = \"\";\r\n                } else if (s.arrivee && s.depart && nuits <= 0) {\r\n                    e.message.textContent = vgnT(\"ordre_dates\");\r\n                    e.message.style.display = \"\";\r\n                } else {\r\n                    e.message.style.display = \"none\";\r\n                }\r\n            }\r\n        }\r\n\r\n        function vgnMajResume(mode) {\r\n            var e = vgnEls();\r\n            if (!e.resume) return;\r\n            if (mode === \"aucun\") { e.resume.style.display = \"none\"; return; }\r\n            e.resume.style.display = \"\";\r\n            if (mode === \"chargement\") {\r\n                e.resume.className = \"vgn-dispo-resume\";\r\n                e.resume.innerHTML = vgnT(\"recherche\");\r\n                return;\r\n            }\r\n            if (mode === \"erreur\") {\r\n                e.resume.className = \"vgn-dispo-resume erreur\";\r\n                e.resume.innerHTML = vgnT(\"panne\");\r\n                return;\r\n            }\r\n            var s = vgnSaisie();\r\n            var d = vgnDispoResume || {disponibles: 0, total: 0};\r\n            var mot = d.disponibles > 1 ? vgnT(\"dispo_sur\") : vgnT(\"dispo_sur_1\");\r\n            e.resume.className = \"vgn-dispo-resume\" + (d.disponibles === 0 ? \" vide\" : \"\");\r\n            e.resume.innerHTML = \"<span>\" + vgnT(\"du\") + \" <strong>\" + vgnDateFr(s.arrivee) + \"<\/strong> \" + vgnT(\"au\") + \" <strong>\" + vgnDateFr(s.depart) +\r\n                \"<\/strong> &middot; \" + vgnNuits(s.arrivee, s.depart) + \" \" + vgnT(\"nuits\", \"nuits\") + \" &middot; \" +\r\n                \"<strong>\" + d.disponibles + \"<\/strong> \" + mot + \" \" + d.total + \"<\/span>\" +\r\n                \"<button type=\\\"button\\\" class=\\\"vgn-reset\\\" onclick=\\\"vgnEffacerDates()\\\">\" + vgnT(\"effacer\") + \"<\/button>\";\r\n        }\r\n\r\n        function vgnDateFr(iso) {\r\n            if (!iso) return \"\";\r\n            var p = iso.split(\"-\");\r\n            if (p.length !== 3) return iso;\r\n            \/* VGN_MONTHS est deja traduit par le snippet 3533. *\/\r\n            var mois = (window.VGN_MONTHS && VGN_MONTHS.length === 12) ? VGN_MONTHS\r\n                : [\"janvier\",\"f\u00e9vrier\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"ao\u00fbt\",\"septembre\",\"octobre\",\"novembre\",\"d\u00e9cembre\"];\r\n            var jour = parseInt(p[2], 10);\r\n            \/* \u00ab 1er \u00bb est une particularite francaise ; l'allemand ecrit \u00ab 1. \u00bb. *\/\r\n            \/* Allemand : le quantieme est un ordinal, il porte TOUJOURS un point\r\n               (\u00ab am 8. Oktober \u00bb). Francais : seul le 1er est marque.\r\n               Neerlandais : aucun point. *\/\r\n            var libJour = jour;\r\n            if (VGN_LANG === \"de\") { libJour = jour + \".\"; }\r\n            else if (VGN_LANG === \"fr\" && jour === 1) { libJour = \"1er\"; }\r\n            var nomMois = mois[parseInt(p[1], 10) - 1] || \"\";\r\n            \/* En allemand un nom de mois est un substantif : majuscule obligatoire.\r\n               En francais et en neerlandais, minuscule au fil du texte. *\/\r\n            if (VGN_LANG !== \"de\") { nomMois = nomMois.toLowerCase(); }\r\n            return libJour + \" \" + nomMois;\r\n        }\r\n\r\n        \/* Le slug est le DERNIER segment de l'URL. Sur \/de\/ le CPT est traduit\r\n           (\/de\/ferienhauser-vogesen\/{slug}\/) : chercher \u00ab \/gites-vosges\/ \u00bb ne\r\n           matchait plus et aucune carte n'etait qualifiee hors francais. *\/\r\n        function vgnSlugDeCarte(carte) {\r\n            var lien = vgnLienDeCarte(carte);\r\n            if (!lien) return \"\";\r\n            var chemin = (lien.getAttribute(\"href\") || \"\").split(\"?\")[0].split(\"#\")[0];\r\n            var bouts = chemin.split(\"\/\").filter(function (x) { return x && x.indexOf(\":\") === -1; });\r\n            return bouts.length ? bouts[bouts.length - 1] : \"\";\r\n        }\r\n\r\n        function vgnLienDeCarte(carte) {\r\n            return carte.querySelector(\"a.vgn-carte-body\") || carte.querySelector(\"a[href]\");\r\n        }\r\n\r\n        function vgnChercher() {\r\n            var s = vgnSaisie();\r\n            if (vgnNuits(s.arrivee, s.depart) < 2) return;\r\n\r\n            vgnMajResume(\"chargement\");\r\n            var url = VGN_API_DISPO + \"?arrivee=\" + encodeURIComponent(s.arrivee) +\r\n                \"&depart=\" + encodeURIComponent(s.depart) +\r\n                \"&voyageurs=\" + encodeURIComponent(s.voyageurs);\r\n\r\n            fetch(url, {headers: {\"Accept\": \"application\/json\"}})\r\n                .then(function (rep) {\r\n                    if (!rep.ok) throw new Error(\"HTTP \" + rep.status);\r\n                    return rep.json();\r\n                })\r\n                .then(function (json) {\r\n                    var data = (json && json.data) ? json.data : {};\r\n                    vgnDispo = {};\r\n                    (data.logements || []).forEach(function (l) { vgnDispo[l.slug] = l; });\r\n                    vgnDispoResume = data.resume || {disponibles: 0, total: 0};\r\n                    vgnMajUrl(s);\r\n                    vgnMajResume(\"resultat\");\r\n                    renderAll();\r\n                })\r\n                .catch(function () {\r\n                    \/* Panne API : on retombe sur la page d'origine, sans etat faux. *\/\r\n                    vgnDispo = null;\r\n                    vgnDispoResume = null;\r\n                    vgnMajResume(\"erreur\");\r\n                    renderAll();\r\n                });\r\n        }\r\n\r\n        function vgnMajUrl(s) {\r\n            if (!window.history || !window.history.replaceState) return;\r\n            var q = \"?arrivee=\" + s.arrivee + \"&depart=\" + s.depart + \"&voyageurs=\" + s.voyageurs;\r\n            window.history.replaceState({}, \"\", window.location.pathname + q);\r\n        }\r\n\r\n        \/* Recale la date de depart sur le minimum exige, puis relance la\r\n           recherche : le visiteur n'a pas a recalculer lui-meme. *\/\r\n        \/* Bascule la recherche sur une periode proposee par le serveur. *\/\r\n        window.vgnVoirFenetre = function (arrivee, depart) {\r\n            var e = vgnEls();\r\n            if(!arrivee || !depart) return;\r\n            if(e.arrivee) e.arrivee.value = arrivee;\r\n            if(e.depart) e.depart.value = depart;\r\n            vgnMajBouton();\r\n            vgnChercher();\r\n        };\r\n\r\n        window.vgnEssayerMinimum = function (nuits) {\r\n            var e = vgnEls(), s = vgnSaisie();\r\n            if(!s.arrivee || !nuits) return;\r\n            var d = new Date(s.arrivee + \"T00:00:00\");\r\n            if(isNaN(d.getTime())) return;\r\n            d.setDate(d.getDate() + nuits);\r\n            var mm = (\"0\" + (d.getMonth() + 1)).slice(-2), jj = (\"0\" + d.getDate()).slice(-2);\r\n            if(e.depart) e.depart.value = d.getFullYear() + \"-\" + mm + \"-\" + jj;\r\n            vgnMajBouton();\r\n            vgnChercher();\r\n        };\r\n\r\n        window.vgnEffacerDates = function () {\r\n            var e = vgnEls();\r\n            if (e.arrivee) e.arrivee.value = \"\";\r\n            if (e.depart) e.depart.value = \"\";\r\n            vgnDispo = null;\r\n            vgnDispoResume = null;\r\n            vgnMajResume(\"aucun\");\r\n            vgnMajBouton();\r\n            if (window.history && window.history.replaceState) {\r\n                window.history.replaceState({}, \"\", window.location.pathname);\r\n            }\r\n            renderAll();\r\n        };\r\n\r\n        \/* Decore chaque carte selon son etat, puis reordonne la grille.\r\n           Rien n'est jamais retire : disponibles d'abord (du moins cher au plus\r\n           cher), puis les incertains, les complets, et les trop petits. *\/\r\n        function vgnDecorerCartes() {\r\n            var grille = document.querySelector(\".vgn-logements-grille\");\r\n            if (!grille) return;\r\n\r\n            var cartes = Array.prototype.slice.call(grille.querySelectorAll(\".vgn-logement-carte\"));\r\n            var s = vgnSaisie();\r\n\r\n            cartes.forEach(function (carte) {\r\n                var ancienne = carte.querySelector(\".vgn-dispo-zone\");\r\n                if (ancienne) ancienne.parentNode.removeChild(ancienne);\r\n                carte.classList.remove(\"etat-disponible\", \"etat-complet\", \"etat-sur_demande\", \"etat-trop_petit\", \"etat-prix_indisponible\");\r\n                carte.removeAttribute(\"data-rang\");\r\n\r\n                if (!vgnDispo) return;\r\n\r\n                var info = vgnDispo[vgnSlugDeCarte(carte)];\r\n                if (!info) return;\r\n\r\n                \/* L'URL reelle de la carte porte deja le prefixe de langue et le\r\n                   CPT traduit : on la reutilise plutot que d'en reconstruire une\r\n                   en francais. *\/\r\n                var lienCarte = vgnLienDeCarte(carte);\r\n                info._url = lienCarte ? (lienCarte.getAttribute(\"href\") || \"\") : \"\";\r\n\r\n                var libelle = VGN_LIBELLES[info.etat] || VGN_LIBELLES.sur_demande;\r\n                carte.classList.add(\"etat-\" + info.etat);\r\n\r\n                \/* L'etat vit dans la zone de prix, PAS sur l'image : en bas de\r\n                   la photo il recouvrait \u00ab 100 % Pass VGN offert \u00bb et se faisait\r\n                   traverser par les points du carrousel. *\/\r\n                var zone = document.createElement(\"div\");\r\n                zone.className = \"vgn-dispo-zone\";\r\n                zone.innerHTML =\r\n                    '<div class=\"vgn-etat-ligne ' + libelle.classe + '\" data-etat=\"' + info.etat + '\">'\r\n                    + vgnT(libelle.cle) + '<\/div>'\r\n                    + vgnContenuZone(info, s);\r\n\r\n                var corps = carte.querySelector(\"a.vgn-carte-body\");\r\n                if (corps && corps.nextSibling) {\r\n                    carte.insertBefore(zone, corps.nextSibling);\r\n                } else {\r\n                    carte.appendChild(zone);\r\n                }\r\n            });\r\n\r\n            if (!vgnDispo) return;\r\n\r\n            var rangs = {disponible: 0, sur_demande: 1, prix_indisponible: 1, complet: 2, sejour_trop_court: 2, trop_petit: 3};\r\n            cartes.sort(function (a, b) {\r\n                var ia = vgnDispo[vgnSlugDeCarte(a)], ib = vgnDispo[vgnSlugDeCarte(b)];\r\n                var ra = ia ? (rangs[ia.etat] !== undefined ? rangs[ia.etat] : 9) : 9;\r\n                var rb = ib ? (rangs[ib.etat] !== undefined ? rangs[ib.etat] : 9) : 9;\r\n                if (ra !== rb) return ra - rb;\r\n                var pa = (ia && ia.prix_total !== null && ia.prix_total !== undefined) ? ia.prix_total : Infinity;\r\n                var pb = (ib && ib.prix_total !== null && ib.prix_total !== undefined) ? ib.prix_total : Infinity;\r\n                return pa - pb;\r\n            });\r\n            cartes.forEach(function (c) { grille.appendChild(c); });\r\n        }\r\n\r\n        \/* Periode de repli : chaque nuit est libre et le sejour minimum du\r\n           jour d'arrivee est respecte (c'est le serveur qui l'a verifie). Pas de\r\n           prix : il ne viendrait pas d'un devis. Le clic relance une vraie\r\n           recherche, qui affichera le tarif reel. *\/\r\n        function vgnFenetreHtml(f) {\r\n            if (!f || !f.arrivee || !f.depart) return \"\";\r\n            return \"<div class=\\\"vgn-info-ligne\\\">\" + vgnT(\"libre_du\") + \" <strong>\" + vgnT(\"du\").toLowerCase() + \" \" + vgnDateFr(f.arrivee)\r\n                + \" \" + vgnT(\"au\") + \" \" + vgnDateFr(f.depart) + \"<\/strong> &middot; \" + f.nuits + \" \" + vgnT(\"nuits\", \"nuits\") + \"<\/div>\"\r\n                + \"<a class=\\\"vgn-cta-dispo secondaire\\\" href=\\\"#\\\" onclick=\\\"vgnVoirFenetre('\"\r\n                + f.arrivee + \"','\" + f.depart + \"');return false;\\\">\" + vgnT(\"voir_dates\") + \"<\/a>\";\r\n        }\r\n\r\n        function vgnContenuZone(info, s) {\r\n            var suffixe = \"?arrivee=\" + s.arrivee + \"&depart=\" + s.depart + \"&voyageurs=\" + s.voyageurs;\r\n            var nuits = vgnNuits(s.arrivee, s.depart);\r\n\r\n            if (info.etat === \"disponible\") {\r\n                var html = \"<div class=\\\"vgn-prix\\\">\" + vgnFormatPrix(info.prix_total) + \"<\/div>\" +\r\n                    \"<div class=\\\"vgn-prix-sub\\\">\" + nuits + \" \" + vgnT(\"nuits\", \"nuits\") + \" &middot; \" + vgnT(\"tout_inclus\") + \"<\/div>\";\r\n                if (info.remise_total) {\r\n                    \/* remise_code est la version machine du libelle, prevue\r\n                       pour etre rhabillee dans la langue du visiteur. *\/\r\n                    var cr = \"remise_\" + (info.remise_code || \"autre\");\r\n                    var lr = vgnT(cr) || info.remise_libelle || vgnT(\"remise_autre\");\r\n                    html += \"<span class=\\\"vgn-remise\\\">\" + lr + \" &minus;\" + vgnFormatPrix(info.remise_total) + \"<\/span>\";\r\n                }\r\n                return html + \"<a class=\\\"vgn-cta-dispo\\\" href=\\\"\" + vgnUrlFiche(info) + suffixe + \"\\\">\" + vgnT(\"reserver\") + \"<\/a>\";\r\n            }\r\n\r\n            if (info.etat === \"prix_indisponible\") {\r\n                return \"<div class=\\\"vgn-info-ligne\\\">\" + vgnT(\"tarif_indispo\") + \"<\/div>\" +\r\n                    \"<a class=\\\"vgn-cta-dispo secondaire\\\" href=\\\"\" + vgnUrlFiche(info) + suffixe + \"\\\">\" + vgnT(\"voir_tarif\") + \"<\/a>\";\r\n            }\r\n\r\n            if (info.etat === \"sur_demande\") {\r\n                var cible = info.url_contact || (vgnUrlFiche(info) + suffixe);\r\n                return \"<div class=\\\"vgn-info-ligne\\\">\" + vgnT(\"proprio_calendrier\") + \"<\/div>\" +\r\n                    \"<a class=\\\"vgn-cta-dispo secondaire\\\" href=\\\"\" + cible + \"\\\">\" + vgnT(\"demander\") + \"<\/a>\";\r\n            }\r\n\r\n            if (info.etat === \"sejour_trop_court\") {\r\n                \/* Les nuits sont LIBRES : annoncer \u00ab complet \u00bb ferait partir un\r\n                   visiteur a qui il suffit d'allonger son sejour. *\/\r\n                var mini = parseInt(info.min_nuits, 10) || 0;\r\n                var txt = \"<div class=\\\"vgn-info-ligne\\\">\" + vgnT(\"dates_libres_mais\") + \" <strong>\"\r\n                    + (mini || \"?\") + \" \" + vgnT(\"nuits_min_periode\") + \"<\/div>\";\r\n                \/* On ne propose une duree theorique que si le serveur n'a pas\r\n                   trouve de periode reelle : \u00ab Essayer N nuits \u00bb peut tomber sur\r\n                   des nuits deja prises. *\/\r\n                var f = vgnFenetreHtml(info.prochaine_fenetre);\r\n                if(f){\r\n                    txt += f;\r\n                } else if(mini > 0){\r\n                    txt += \"<a class=\\\"vgn-cta-dispo secondaire\\\" href=\\\"#\\\" onclick=\\\"vgnEssayerMinimum(\" + mini + \");return false;\\\">\" + vgnT(\"essayer\") + \" \" + mini + \" \" + vgnT(\"nuits\", \"nuits\") + \"<\/a>\";\r\n                }\r\n                return txt;\r\n            }\r\n\r\n            if (info.etat === \"trop_petit\") {\r\n                return \"<div class=\\\"vgn-info-ligne\\\">\" + vgnT(\"accueille\") + \" <strong>\" + info.capacite + \" \" + vgnT(\"personnes\") + \"<\/strong> \" + vgnT(\"au_max\") + \".<\/div>\";\r\n            }\r\n\r\n            var fc = vgnFenetreHtml(info.prochaine_fenetre);\r\n            if(fc){\r\n                \/* L'etiquette d'etat le dit deja, inutile de le repeter. *\/\r\n                return fc;\r\n            }\r\n\r\n            return \"<a class=\\\"vgn-cta-dispo secondaire\\\" href=\\\"\" + vgnUrlFiche(info) + \"\\\">\" + vgnT(\"autres_dates\") + \"<\/a>\";\r\n        }\r\n\r\n        function vgnUrlFiche(info) {\r\n            return info._url || (\"\/gites-vosges\/\" + info.slug + \"\/\");\r\n        }\r\n\r\n        \/* ---- Calendrier de la barre de dates -----------------------------\r\n           Un seul champ, deux clics. Les valeurs restent dans les champs\r\n           caches #vgn-date-arrivee \/ #vgn-date-depart : vgnVoirFenetre(),\r\n           vgnEssayerMinimum(), vgnEffacerDates() et la reprise depuis\r\n           l'adresse continuent de les ecrire sans rien savoir d'ici, et\r\n           vgnMajBouton() \u2014 que toutes appellent \u2014 repeint l'affichage. *\/\r\n        var VGN_AC_MIN = 2;\r\n        var vgnAcS = null, vgnAcE = null, vgnAcOuvert = false, vgnAcVue = null;\r\n\r\n        function vgnAcPad(n) { return (n < 10 ? \"0\" : \"\") + n; }\r\n        function vgnAcIso(y, m, j) { return y + \"-\" + vgnAcPad(m + 1) + \"-\" + vgnAcPad(j); }\r\n        function vgnAcDate(s) { return new Date(s + \"T00:00:00\"); }\r\n\r\n        \/* Intl abrege et accorde dans la langue lue. Couper une chaine a\r\n           l'aveugle donnait \u00ab 9 octo \u00bb ; en allemand il faut \u00ab 9. Okt. \u00bb. *\/\r\n        function vgnAcCourt(iso) {\r\n            try {\r\n                return new Intl.DateTimeFormat(VGN_LANG, {day: \"numeric\", month: \"short\"}).format(vgnAcDate(iso));\r\n            } catch (err) {\r\n                return vgnDateFr(iso);\r\n            }\r\n        }\r\n\r\n        function vgnAcMoisAn(d) {\r\n            try {\r\n                return new Intl.DateTimeFormat(VGN_LANG, {month: \"long\", year: \"numeric\"}).format(d);\r\n            } catch (err) {\r\n                var mois = (window.VGN_MONTHS && VGN_MONTHS.length === 12) ? VGN_MONTHS : [];\r\n                return (mois[d.getMonth()] || \"\") + \" \" + d.getFullYear();\r\n            }\r\n        }\r\n\r\n        \/* Initiales des jours, lundi en tete. Le francais tient sur une\r\n           lettre (L M M J V S D), l'allemand et le neerlandais en demandent\r\n           deux (Mo Di Mi \/ ma di wo) sous peine d'etre illisibles. *\/\r\n        function vgnAcInitiales() {\r\n            try {\r\n                var f = new Intl.DateTimeFormat(VGN_LANG, {weekday: \"short\"}), out = [];\r\n                for (var i = 0; i < 7; i++) {\r\n                    \/* Le 1er janvier 2024 est un lundi. *\/\r\n                    var s = f.format(new Date(2024, 0, 1 + i)).replace(\".\", \"\");\r\n                    out.push(VGN_LANG === \"fr\" ? s.charAt(0) : s.slice(0, 2));\r\n                }\r\n                return out;\r\n            } catch (err) {\r\n                return [\"L\", \"M\", \"M\", \"J\", \"V\", \"S\", \"D\"];\r\n            }\r\n        }\r\n\r\n        function vgnAcRendre() {\r\n            if (!vgnAcVue) return;\r\n            var auj = new Date();\r\n            auj.setHours(0, 0, 0, 0);\r\n            var aujIso = vgnAcIso(auj.getFullYear(), auj.getMonth(), auj.getDate());\r\n\r\n            for (var k = 0; k < 2; k++) {\r\n                var d = new Date(vgnAcVue.getFullYear(), vgnAcVue.getMonth() + k, 1);\r\n                var titre = document.getElementById(\"vgn-ac-m\" + k);\r\n                var grille = document.getElementById(\"vgn-ac-j\" + k);\r\n                if (!titre || !grille) continue;\r\n                titre.textContent = vgnAcMoisAn(d);\r\n                grille.innerHTML = \"\";\r\n                var premier = d.getDay(), decalage = premier === 0 ? 6 : premier - 1;\r\n                var nbJours = new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate();\r\n                for (var i = 0; i < decalage; i++) grille.appendChild(document.createElement(\"div\"));\r\n                for (var j = 1; j <= nbJours; j++) {\r\n                    var iso = vgnAcIso(d.getFullYear(), d.getMonth(), j);\r\n                    var el = document.createElement(\"div\");\r\n                    el.className = \"vgn-cd\";\r\n                    el.textContent = j;\r\n                    if (iso === aujIso) el.classList.add(\"today\");\r\n                    if (vgnAcDate(iso) < auj) {\r\n                        el.classList.add(\"past\");\r\n                    } else {\r\n                        el.classList.add(\"dispo\");\r\n                        if (vgnAcS && iso === vgnAcS) el.classList.add(\"ss\");\r\n                        if (vgnAcE && iso === vgnAcE) el.classList.add(\"se\");\r\n                        if (vgnAcS && vgnAcE && iso > vgnAcS && iso < vgnAcE) el.classList.add(\"sr\");\r\n                        el.onclick = (function (x) { return function () { vgnAcClic(x); }; })(iso);\r\n                    }\r\n                    grille.appendChild(el);\r\n                }\r\n            }\r\n\r\n            var prev = document.getElementById(\"vgn-ac-prev\");\r\n            if (prev) {\r\n                var moisCourant = new Date();\r\n                moisCourant.setDate(1);\r\n                moisCourant.setHours(0, 0, 0, 0);\r\n                prev.disabled = vgnAcVue <= moisCourant;\r\n            }\r\n        }\r\n\r\n        \/* Premier clic : l'arrivee. Deuxieme : le depart. Un clic avant\r\n           l'arrivee deja posee repart d'une nouvelle arrivee. *\/\r\n        function vgnAcClic(iso) {\r\n            var aide = document.getElementById(\"vgn-ac-aide\");\r\n            if (aide) aide.classList.remove(\"alerte\");\r\n\r\n            if (!vgnAcS || (vgnAcS && vgnAcE)) {\r\n                vgnAcS = iso;\r\n                vgnAcE = null;\r\n            } else if (iso > vgnAcS) {\r\n                \/* Le minimum est dit ICI, avant l'appel : sinon le visiteur\r\n                   recoit \u00ab complet partout \u00bb et croit qu'il n'y a plus de\r\n                   place, alors que c'est la duree qui est refusee. *\/\r\n                if (vgnNuits(vgnAcS, iso) < VGN_AC_MIN) {\r\n                    if (aide) {\r\n                        aide.textContent = vgnT(\"min_nuits\");\r\n                        aide.classList.add(\"alerte\");\r\n                    }\r\n                    return;\r\n                }\r\n                vgnAcE = iso;\r\n            } else {\r\n                vgnAcS = iso;\r\n                vgnAcE = null;\r\n            }\r\n\r\n            var e = vgnEls();\r\n            if (e.arrivee) e.arrivee.value = vgnAcS || \"\";\r\n            if (e.depart) e.depart.value = vgnAcE || \"\";\r\n            vgnMajBouton();\r\n            vgnAcRendre();\r\n            if (vgnAcS && vgnAcE) setTimeout(vgnAcFermer, 350);\r\n        }\r\n\r\n        function vgnAcSync() {\r\n            var e = vgnEls();\r\n            vgnAcS = (e.arrivee && e.arrivee.value) ? e.arrivee.value : null;\r\n            vgnAcE = (e.depart && e.depart.value) ? e.depart.value : null;\r\n\r\n            var txt = document.getElementById(\"vgn-ac-txt\");\r\n            if (txt) {\r\n                if (vgnAcS && vgnAcE) {\r\n                    var n = vgnNuits(vgnAcS, vgnAcE);\r\n                    txt.textContent = vgnAcCourt(vgnAcS) + \" \\u2192 \" + vgnAcCourt(vgnAcE) +\r\n                        \" \\u00b7 \" + n + \" \" + vgnT(n > 1 ? \"nuits\" : \"nuit\");\r\n                    txt.className = \"vgn-ac-val\";\r\n                } else if (vgnAcS) {\r\n                    txt.textContent = vgnAcCourt(vgnAcS) + \" \\u2192 \\u2026\";\r\n                    txt.className = \"vgn-ac-val\";\r\n                } else {\r\n                    txt.textContent = vgnT(\"quand\");\r\n                    txt.className = \"vgn-ac-ph\";\r\n                }\r\n            }\r\n\r\n            var aide = document.getElementById(\"vgn-ac-aide\");\r\n            if (aide && !aide.classList.contains(\"alerte\")) {\r\n                aide.textContent = (vgnAcS && !vgnAcE) ? vgnT(\"choisir_depart\") : vgnT(\"choisir_arrivee\");\r\n            }\r\n            if (vgnAcOuvert) vgnAcRendre();\r\n        }\r\n\r\n        function vgnAcOuvrir() {\r\n            var pop = document.getElementById(\"vgn-ac-pop\");\r\n            var champ = document.getElementById(\"vgn-ac-champ\");\r\n            if (!pop) return;\r\n            vgnAcOuvert = true;\r\n            pop.classList.add(\"open\");\r\n            if (champ) {\r\n                champ.classList.add(\"ouvert\");\r\n                champ.setAttribute(\"aria-expanded\", \"true\");\r\n            }\r\n            \/* On ouvre sur le mois de l'arrivee deja choisie, sinon sur le\r\n               mois courant : revenir en arriere serait absurde. *\/\r\n            var base = vgnAcS ? vgnAcDate(vgnAcS) : new Date();\r\n            vgnAcVue = new Date(base.getFullYear(), base.getMonth(), 1);\r\n            vgnAcRendre();\r\n        }\r\n\r\n        function vgnAcFermer() {\r\n            var pop = document.getElementById(\"vgn-ac-pop\");\r\n            var champ = document.getElementById(\"vgn-ac-champ\");\r\n            vgnAcOuvert = false;\r\n            if (pop) pop.classList.remove(\"open\");\r\n            if (champ) {\r\n                champ.classList.remove(\"ouvert\");\r\n                champ.setAttribute(\"aria-expanded\", \"false\");\r\n            }\r\n        }\r\n\r\n        function vgnAcInit() {\r\n            var champ = document.getElementById(\"vgn-ac-champ\");\r\n            var pop = document.getElementById(\"vgn-ac-pop\");\r\n            if (!champ || !pop) return;\r\n\r\n            var jours = vgnAcInitiales();\r\n            for (var k = 0; k < 2; k++) {\r\n                var h = document.getElementById(\"vgn-ac-h\" + k);\r\n                if (!h) continue;\r\n                h.innerHTML = \"\";\r\n                for (var i = 0; i < 7; i++) {\r\n                    var c = document.createElement(\"div\");\r\n                    c.className = \"vgn-chd\";\r\n                    c.textContent = jours[i];\r\n                    h.appendChild(c);\r\n                }\r\n            }\r\n\r\n            champ.addEventListener(\"click\", function (ev) {\r\n                ev.stopPropagation();\r\n                if (vgnAcOuvert) vgnAcFermer(); else vgnAcOuvrir();\r\n            });\r\n            pop.addEventListener(\"click\", function (ev) { ev.stopPropagation(); });\r\n            document.addEventListener(\"click\", function () { if (vgnAcOuvert) vgnAcFermer(); });\r\n            document.addEventListener(\"keydown\", function (ev) {\r\n                if (ev.key === \"Escape\" && vgnAcOuvert) vgnAcFermer();\r\n            });\r\n\r\n            var prev = document.getElementById(\"vgn-ac-prev\");\r\n            if (prev) prev.addEventListener(\"click\", function () {\r\n                vgnAcVue.setMonth(vgnAcVue.getMonth() - 1);\r\n                vgnAcRendre();\r\n            });\r\n            \/* Deux fleches \u00ab suivant \u00bb : celle de droite sur ordinateur,\r\n               celle du bloc de gauche quand le second mois est masque. *\/\r\n            [\"vgn-ac-next\", \"vgn-ac-next2\"].forEach(function (id) {\r\n                var next = document.getElementById(id);\r\n                if (next) next.addEventListener(\"click\", function () {\r\n                    vgnAcVue.setMonth(vgnAcVue.getMonth() + 1);\r\n                    vgnAcRendre();\r\n                });\r\n            });\r\n\r\n            var eff = document.getElementById(\"vgn-ac-effacer\");\r\n            if (eff) eff.addEventListener(\"click\", function () { vgnEffacerDates(); });\r\n        }\r\n\r\n        function vgnInitDates() {\r\n            var e = vgnEls();\r\n            if (!e.bouton) return;\r\n\r\n            \/* Les libelles du markup restent en francais dans le HTML : la\r\n               traduction automatique de TranslatePress est desactivee, donc une\r\n               chaine neuve n'y serait pas traduite avant longtemps. On les pose\r\n               ici, ou la langue est connue (VGN_LOCALE). *\/\r\n            if (VGN_LANG !== \"fr\") {\r\n                var lbl = document.querySelectorAll(\".vgn-dates-row .vgn-filtre-label\");\r\n                if (lbl.length >= 2) {\r\n                    lbl[0].textContent = vgnT(\"dates\");\r\n                    lbl[1].textContent = vgnT(\"voyageurs\", \"recap_voyageurs\");\r\n                }\r\n                var effLien = document.getElementById(\"vgn-ac-effacer\");\r\n                if (effLien) effLien.textContent = vgnT(\"effacer_court\");\r\n                e.bouton.textContent = vgnT(\"voir_dispo\");\r\n                if (e.voyageurs) {\r\n                    Array.prototype.forEach.call(e.voyageurs.options, function (o) {\r\n                        var nb = parseInt(o.value, 10);\r\n                        o.textContent = nb + \" \" + vgnT(nb > 1 ? \"personnes\" : \"personne\");\r\n                    });\r\n                }\r\n            }\r\n\r\n            \/* Les dates ne passent plus par des champs natifs : le\r\n               calendrier appelle vgnMajBouton() lui-meme, et les dates passees\r\n               y sont deja barrees. Seul \u00ab voyageurs \u00bb reste un select. *\/\r\n            if (e.voyageurs) e.voyageurs.addEventListener(\"change\", vgnMajBouton);\r\n            vgnAcInit();\r\n            e.bouton.addEventListener(\"click\", function () {\r\n                if (VGN_LANG !== \"fr\") e.bouton.textContent = vgnT(\"modifier\");\r\n                vgnChercher();\r\n            });\r\n\r\n            \/* Reprise des dates depuis l'adresse : le lien est partageable. *\/\r\n            var p = new URLSearchParams(window.location.search);\r\n            var a = p.get(\"arrivee\"), d = p.get(\"depart\"), v = p.get(\"voyageurs\");\r\n            if (a && d) {\r\n                if (e.arrivee) e.arrivee.value = a;\r\n                if (e.depart) e.depart.value = d;\r\n                if (v && e.voyageurs) e.voyageurs.value = v;\r\n                vgnMajBouton();\r\n                if (vgnNuits(a, d) >= 2) vgnChercher();\r\n                return;\r\n            }\r\n            vgnMajBouton();\r\n        }\r\n\r\n        function matchLogement(l) {\r\n            if (filtres.niveau !== \"tous\" && l.niveau !== filtres.niveau) return false;\r\n            if (filtres.capacite !== \"tous\") {\r\n                var cap = parseInt(filtres.capacite);\r\n                if (l.capacite < cap) return false;\r\n            }\r\n            if (filtres.equips.length > 0) {\r\n                for (var i = 0; i < filtres.equips.length; i++) {\r\n                    if (l.equips.indexOf(filtres.equips[i]) === -1) return false;\r\n                }\r\n            }\r\n            return true;\r\n        }\r\n\r\n        function renderAll() {\r\n            markers.forEach(function(m) { map.removeLayer(m); });\r\n            markers = [];\r\n            var count = 0;\r\n            var ids_visibles = [];\r\n\r\n            logements.forEach(function(l) {\r\n                if (!matchLogement(l)) return;\r\n                count++;\r\n                ids_visibles.push(l.id);\r\n\r\n                var icon;\r\n                if (l.niveau === \"labelise\") icon = iconPremium;\r\n                else if (l.niveau === \"partenaire\") icon = iconPartenaire;\r\n                else icon = iconAmb;\r\n\r\n                var badge;\r\n                if (l.niveau === \"labelise\") {\r\n                    badge = \"<span style='background:#ffc632;color:#135221;padding:3px 8px;border-radius:12px;font-size:10px;font-weight:700'>&#9733; VGN Premium &#9733;<\/span>\";\r\n                } else if (l.niveau === \"partenaire\") {\r\n                    badge = \"<span style='background:#135221;color:#fff;padding:3px 8px;border-radius:12px;font-size:10px;font-weight:700'>Partenaire VGN<\/span>\";\r\n                } else {\r\n                    badge = \"<span style='background:#ccc;color:#555;padding:3px 8px;border-radius:12px;font-size:10px;font-weight:700'>Ambassadeur<\/span>\";\r\n                }\r\n\r\n                var pass;\r\n                if (l.niveau === \"labelise\") {\r\n                    pass = \"<div style='background:rgba(255,198,50,0.15);color:#a07800;padding:3px 8px;border-radius:10px;font-size:10px;font-weight:600;border:1px solid rgba(255,198,50,0.4);margin:5px 0'>Pass VGN 100% offert<\/div>\";\r\n                } else if (l.niveau === \"partenaire\") {\r\n                    pass = \"<div style='background:rgba(19,82,33,0.08);color:#135221;padding:3px 8px;border-radius:10px;font-size:10px;font-weight:600;border:1px solid rgba(19,82,33,0.2);margin:5px 0'>Pass VGN 100% offert<\/div>\";\r\n                } else {\r\n                    pass = \"\";\r\n                }\r\n\r\n                var btn;\r\n                if (l.niveau === \"labelise\") {\r\n                    btn = \"<a href='\" + l.url + \"' style='display:block;text-align:center;background:#ffc632;color:#135221;padding:6px;border-radius:6px;font-size:11px;font-weight:700;text-decoration:none;margin-top:6px'>Voir le logement &#8594;<\/a>\";\r\n                } else {\r\n                    btn = \"<a href='\" + l.url + \"' style='display:block;text-align:center;background:#135221;color:#fff;padding:6px;border-radius:6px;font-size:11px;font-weight:700;text-decoration:none;margin-top:6px'>Voir la fiche &#8594;<\/a>\";\r\n                }\r\n\r\n                var img = l.thumb ? \"<img src='\" + l.thumb + \"' style='width:100%;height:100px;object-fit:cover;border-radius:6px 6px 0 0;display:block'>\" : \"\";\r\n                var nom = \"<div style='font-size:12px;font-weight:700;color:#135221;font-family:Georgia,serif;margin:6px 0 2px'>\" + l.nom + \"<\/div>\";\r\n                var ville = \"<div style='font-size:10px;color:#888;margin-bottom:2px'>&#128205; \" + l.ville + \" &middot; \" + l.capacite + \" pers.<\/div>\";\r\n                \/* \u00ab A partir de 100EUR\/nuit \u00bb : ni espace, ni symbole, et du\r\n                   francais sur \/de\/ et \/nl\/. *\/\r\n                var tarif = l.tarif ? \"<div style='font-size:11px;color:#555'>\" + vgnT(\"a_partir\") + \" <strong style='color:#135221'>\" + l.tarif + \"\\u00a0\\u20ac<\/strong>\" + vgnT(\"par_nuit\") + \"<\/div>\" : \"\";\r\n                var popup = \"<div style='font-family:sans-serif;min-width:180px'>\" + img + \"<div style='padding:8px'>\" + badge + nom + ville + pass + tarif + btn + \"<\/div><\/div>\";\r\n\r\n                var m = L.marker([l.lat, l.lng], {icon: icon}).addTo(map).bindPopup(popup, {maxWidth: 220});\r\n                markers.push(m);\r\n            });\r\n\r\n            var countEl = document.getElementById(\"vgn-count\");\r\n            if (countEl) countEl.innerHTML = \"<strong>\" + count + \"<\/strong> logement\" + (count > 1 ? \"s\" : \"\") + \" affich\u00e9\" + (count > 1 ? \"s\" : \"\");\r\n\r\n            \/* Zero carte : dire pourquoi. Sans cela le visiteur voit un trou\r\n               blanc sous un bandeau qui annonce des logements disponibles. *\/\r\n            var videEl = document.getElementById(\"vgn-liste-vide\");\r\n            if (videEl) videEl.style.display = (count === 0) ? \"\" : \"none\";\r\n\r\n            document.querySelectorAll(\".vgn-logement-carte\").forEach(function(carte) {\r\n                var id = parseInt(carte.getAttribute(\"data-id\"));\r\n                if (ids_visibles.indexOf(id) !== -1) {\r\n                    carte.classList.remove(\"masque\");\r\n                } else {\r\n                    carte.classList.add(\"masque\");\r\n                }\r\n            });\r\n\r\n            vgnDecorerCartes();\r\n\r\n            if (window.vgnResetPagination) window.vgnResetPagination();\r\n        }\r\n\r\n        \/* Un equipement qu'AUCUN logement ne possede est un cul-de-sac deguise\r\n           en option : le visiteur le coche, la page se vide, et il croit qu'il\r\n           n'y a plus de place. Cinq pastilles sur huit etaient dans ce cas\r\n           (jacuzzi, pieds de piste, cheminee, vue montagne, jardin). *\/\r\n        var vgnEquipsPresents = {};\r\n        logements.forEach(function (l) {\r\n            (l.equips || []).forEach(function (e) { vgnEquipsPresents[e] = true; });\r\n        });\r\n        var vgnResteUnEquip = false;\r\n        document.querySelectorAll(\"[data-equip]\").forEach(function (btn) {\r\n            if (vgnEquipsPresents[btn.getAttribute(\"data-equip\")]) { vgnResteUnEquip = true; }\r\n            else { btn.parentNode.removeChild(btn); }\r\n        });\r\n\r\n        \/* Meme regle sur le niveau : \u00ab Ambassadeur \u00bb ne correspondait a aucun\r\n           logement (les trois sont labelises). \u00ab Tous \u00bb reste toujours. *\/\r\n        var vgnNiveauxPresents = {};\r\n        logements.forEach(function (l) { vgnNiveauxPresents[l.niveau] = true; });\r\n        document.querySelectorAll(\".vgn-pill[data-filtre=\\\"niveau\\\"]\").forEach(function (btn) {\r\n            var v = btn.getAttribute(\"data-val\");\r\n            if (v !== \"tous\" && !vgnNiveauxPresents[v]) btn.parentNode.removeChild(btn);\r\n        });\r\n        if (!vgnResteUnEquip) {\r\n            var grpEquip = document.getElementById(\"vgn-groupe-equip\");\r\n            if (grpEquip) grpEquip.style.display = \"none\";\r\n        }\r\n\r\n        \/* Les libelles du bloc vide, poses ici ou la langue est connue. *\/\r\n        if (VGN_LANG !== \"fr\") {\r\n            var vTitre = document.getElementById(\"vgn-vide-titre\");\r\n            var vTexte = document.getElementById(\"vgn-vide-texte\");\r\n            var vBouton = document.getElementById(\"vgn-vide-btn\");\r\n            if (vTitre) vTitre.textContent = vgnT(\"vide_titre\");\r\n            if (vTexte) vTexte.textContent = vgnT(\"vide_texte\");\r\n            if (vBouton) vBouton.textContent = vgnT(\"vide_bouton\");\r\n        }\r\n\r\n        vgnInitDates();\r\n\r\n        document.querySelectorAll(\".vgn-pill[data-filtre]\").forEach(function(btn) {\r\n            btn.addEventListener(\"click\", function() {\r\n                var filtre = this.getAttribute(\"data-filtre\");\r\n                var val = this.getAttribute(\"data-val\");\r\n                filtres[filtre] = val;\r\n                this.closest(\".vgn-pills\").querySelectorAll(\".vgn-pill\").forEach(function(b) {\r\n                    b.classList.remove(\"active\");\r\n                });\r\n                this.classList.add(\"active\");\r\n                renderAll();\r\n            });\r\n        });\r\n\r\n        document.querySelectorAll(\".vgn-pill-equip\").forEach(function(btn) {\r\n            btn.addEventListener(\"click\", function() {\r\n                var equip = this.getAttribute(\"data-equip\");\r\n                var idx = filtres.equips.indexOf(equip);\r\n                if (idx === -1) { filtres.equips.push(equip); this.classList.add(\"active\"); }\r\n                else { filtres.equips.splice(idx, 1); this.classList.remove(\"active\"); }\r\n                renderAll();\r\n            });\r\n        });\r\n\r\n        window.vgnReset = function() {\r\n            filtres = {niveau: \"tous\", capacite: \"tous\", equips: []};\r\n            document.querySelectorAll(\".vgn-pill[data-filtre]\").forEach(function(b) {\r\n                b.classList.remove(\"active\");\r\n            });\r\n            document.querySelectorAll(\".vgn-filtre-group\").forEach(function(g) {\r\n                var first = g.querySelector(\".vgn-pill\");\r\n                if (first) first.classList.add(\"active\");\r\n            });\r\n            document.querySelectorAll(\".vgn-pill-equip\").forEach(function(b) {\r\n                b.classList.remove(\"active\");\r\n            });\r\n            renderAll();\r\n        };\r\n\r\n        renderAll();\r\n    });\r\n    <\/script>\r\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-32dbad4 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"32dbad4\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9cba8fc\" data-id=\"9cba8fc\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5f7b98b elementor-widget elementor-widget-shortcode\" data-id=\"5f7b98b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"vgn-logements-wrap\"><div class=\"vgn-logements-grille\"><div class=\"vgn-logement-carte\" data-niveau=\"labelise\" data-id=\"6023\"><div class=\"vgn-carte-img-wrap\"><div class=\"vgn-carousel\" data-index=\"0\"><div class=\"vgn-slide active\" style=\"background-image:url(https:\/\/vosges-grandeur-nature.fr\/wp-content\/uploads\/2026\/09\/777YuxXJMaDj5KTYPvQd8NWz2jOwdU9bAE9WPVSx-7-1024x478.jpg)\"><\/div><div class=\"vgn-slide\" style=\"background-image:url(https:\/\/vosges-grandeur-nature.fr\/wp-content\/uploads\/2026\/09\/wtS4vYMqUmKqHPBB9UCLnjeUvF9LGA1Tjb7ptD3Q-7-1024x478.jpg)\"><\/div><div class=\"vgn-slide\" style=\"background-image:url(https:\/\/vosges-grandeur-nature.fr\/wp-content\/uploads\/2026\/09\/SFaeRqfdXTZaOoeXIwpmWcafxFBBvRhpMD9fInsQ-7-1024x478.jpg)\"><\/div><div class=\"vgn-slide\" style=\"background-image:url(https:\/\/vosges-grandeur-nature.fr\/wp-content\/uploads\/2026\/09\/1JQ7YkSNnjTfeg2lQo1KejnP9qc1D80gp0PzrkMA-7-1024x478.jpg)\"><\/div><div class=\"vgn-slide\" style=\"background-image:url(https:\/\/vosges-grandeur-nature.fr\/wp-content\/uploads\/2026\/09\/iCo6lp1UqNIncOJOlPtAxsrtHSRvHBgePDzlXZZ9-7-1024x478.jpg)\"><\/div><\/div><button type=\"button\" class=\"vgn-arrow vgn-prev\" aria-label=\"Precedent\">&#8249;<\/button><button type=\"button\" class=\"vgn-arrow vgn-next\" aria-label=\"Suivant\">&#8250;<\/button><div class=\"vgn-dots\"><span class=\"vgn-dot active\"><\/span><span class=\"vgn-dot\"><\/span><span class=\"vgn-dot\"><\/span><span class=\"vgn-dot\"><\/span><span class=\"vgn-dot\"><\/span><\/div><span class=\"vgn-badge labelise\">&#9733; VGN Premium<\/span><div class=\"vgn-pass-badge vgn-pass-premium\"><span class=\"vgn-pass-pct\">100%<\/span><span class=\"vgn-pass-txt\">Pass VGN<br>offert<\/span><\/div><span class=\"vgn-capacite\">9 pers.<\/span><\/div><a href=\"https:\/\/vosges-grandeur-nature.fr\/de\/gites-vosges\/la-ferme-des-cherrieres\/\" class=\"vgn-carte-body\"><div class=\"vgn-carte-equips\"><span class=\"vgn-carte-equip\">WiFi<\/span><span class=\"vgn-carte-equip\">Piscine<\/span><span class=\"vgn-carte-equip\">Sauna<\/span><span class=\"vgn-equip-more\" title=\"Lave-linge, Parking, Animaux acceptes, Terrasse, Jardin, plancha\">+6<\/span><\/div><div class=\"vgn-carte-ville\">&#128205; Rupt-sur-Moselle<\/div><h3 class=\"vgn-carte-titre\">La Ferme des Cherri\u00e8res<\/h3><p class=\"vgn-carte-description\">Bienvenue \u00e0 la Ferme des Cherri\u00e8res ! Plongez dans un havre de verdure et de s\u00e9r\u00e9nit\u00e9, perch\u00e9 sur les hauteurs de Rupt-sur-Moselle . \u00c0 l&#039;\u00e9cart du village et en pleine nature, cette magnifique ferme vosgienne vous offre un cadre exceptionnel avec une vue d\u00e9gag\u00e9e sur les montagnes<\/p><\/a><button class=\"vgn-add-btn\" data-type=\"logements\" data-id=\"6023\" data-titre=\"La Ferme des Cherri\u00e8res\" data-photo=\"https:\/\/vosges-grandeur-nature.fr\/wp-content\/uploads\/2026\/09\/777YuxXJMaDj5KTYPvQd8NWz2jOwdU9bAE9WPVSx-7-1024x478.jpg\" data-ville=\"Rupt-sur-Moselle\" data-url=\"https:\/\/vosges-grandeur-nature.fr\/de\/gites-vosges\/la-ferme-des-cherrieres\/\" style=\"width:100%;margin-top:8px;justify-content:center;\">&#10022; Mon s&eacute;jour de r&ecirc;ve<\/button><\/div><div class=\"vgn-logement-carte\" data-niveau=\"labelise\" data-id=\"6158\"><div class=\"vgn-carte-img-wrap\"><div class=\"vgn-carousel\" data-index=\"0\"><div class=\"vgn-slide active\" style=\"background-image:url(https:\/\/vosges-grandeur-nature.fr\/wp-content\/uploads\/2026\/07\/0Mcjq8u8yQKq1mJeLmPCNecgfuEDbM3jiNWGS6dg-2-1024x478.jpg)\"><\/div><div class=\"vgn-slide\" style=\"background-image:url(https:\/\/vosges-grandeur-nature.fr\/wp-content\/uploads\/2026\/07\/0Rga5l6OqD4CZmSI5bXKKtZCMms7PXhpkq5Psk4b-2-1024x478.jpg)\"><\/div><div class=\"vgn-slide\" style=\"background-image:url(https:\/\/vosges-grandeur-nature.fr\/wp-content\/uploads\/2026\/07\/ZbTtMXE9BdLTpSSahtUhESYYSUmjxXenBPzcmyr4-2-1024x478.jpg)\"><\/div><div class=\"vgn-slide\" style=\"background-image:url(https:\/\/vosges-grandeur-nature.fr\/wp-content\/uploads\/2026\/07\/UXtRlYVxZjZIOfN69kXmqpYRQFoFxwTq9ksQddsW-1024x478.jpg)\"><\/div><div class=\"vgn-slide\" style=\"background-image:url(https:\/\/vosges-grandeur-nature.fr\/wp-content\/uploads\/2026\/07\/5iu8q3rptYCIAlqrmFrOPfBdfYTmB0sUS9HjIskW-2-1024x478.jpg)\"><\/div><\/div><button type=\"button\" class=\"vgn-arrow vgn-prev\" aria-label=\"Precedent\">&#8249;<\/button><button type=\"button\" class=\"vgn-arrow vgn-next\" aria-label=\"Suivant\">&#8250;<\/button><div class=\"vgn-dots\"><span class=\"vgn-dot active\"><\/span><span class=\"vgn-dot\"><\/span><span class=\"vgn-dot\"><\/span><span class=\"vgn-dot\"><\/span><span class=\"vgn-dot\"><\/span><\/div><span class=\"vgn-badge labelise\">&#9733; VGN Premium<\/span><div class=\"vgn-pass-badge vgn-pass-premium\"><span class=\"vgn-pass-pct\">100%<\/span><span class=\"vgn-pass-txt\">Pass VGN<br>offert<\/span><\/div><span class=\"vgn-capacite\">6 pers.<\/span><\/div><a href=\"https:\/\/vosges-grandeur-nature.fr\/de\/gites-vosges\/la-maison-des-montagnes\/\" class=\"vgn-carte-body\"><div class=\"vgn-carte-equips\"><span class=\"vgn-carte-equip\">WiFi<\/span><span class=\"vgn-carte-equip\">Lave-linge<\/span><span class=\"vgn-carte-equip\">Parking<\/span><span class=\"vgn-equip-more\" title=\"Animaux acceptes\">+1<\/span><\/div><div class=\"vgn-carte-ville\">&#128205; Le Thillot<\/div><h3 class=\"vgn-carte-titre\">La Maison des Montagnes<\/h3><p class=\"vgn-carte-description\">Plongez dans un havre de confort dans notre charmante maison nich\u00e9e au c\u0153ur des magnifiques Vosges, au Thillot . Cette maison offre un cadre id\u00e9al pour un s\u00e9jour inoubliable en famille ou entre amis .<\/p><\/a><button class=\"vgn-add-btn\" data-type=\"logements\" data-id=\"6158\" data-titre=\"La Maison des Montagnes\" data-photo=\"https:\/\/vosges-grandeur-nature.fr\/wp-content\/uploads\/2026\/07\/0Mcjq8u8yQKq1mJeLmPCNecgfuEDbM3jiNWGS6dg-2-1024x478.jpg\" data-ville=\"Le Thillot\" data-url=\"https:\/\/vosges-grandeur-nature.fr\/de\/gites-vosges\/la-maison-des-montagnes\/\" style=\"width:100%;margin-top:8px;justify-content:center;\">&#10022; Mon s&eacute;jour de r&ecirc;ve<\/button><\/div><div class=\"vgn-logement-carte\" data-niveau=\"labelise\" data-id=\"6213\"><div class=\"vgn-carte-img-wrap\"><div class=\"vgn-carousel\" data-index=\"0\"><div class=\"vgn-slide active\" style=\"background-image:url(https:\/\/vosges-grandeur-nature.fr\/wp-content\/uploads\/2026\/07\/L9hrTVlL4WygFwEaWxzJQlF2yTnfru0ACf5Cn21t-2-1024x478.jpg)\"><\/div><div class=\"vgn-slide\" style=\"background-image:url(https:\/\/vosges-grandeur-nature.fr\/wp-content\/uploads\/2026\/07\/DFMZywoI8RH5n02fkCRLl3fKkjvPKLWOikR6KJs6-2-1024x478.jpg)\"><\/div><div class=\"vgn-slide\" style=\"background-image:url(https:\/\/vosges-grandeur-nature.fr\/wp-content\/uploads\/2026\/07\/YjlHsr2e5qR1gF4sy1e17MHjKLdDpXrQCMoYWZ1S-2-1024x478.jpg)\"><\/div><div class=\"vgn-slide\" style=\"background-image:url(https:\/\/vosges-grandeur-nature.fr\/wp-content\/uploads\/2026\/07\/U2xFlwHXLx3aBAoSMtwX1muJ0bOr8QOkk8E0tObo-2-1024x478.jpg)\"><\/div><div class=\"vgn-slide\" style=\"background-image:url(https:\/\/vosges-grandeur-nature.fr\/wp-content\/uploads\/2026\/07\/KpILmnmxdzTBlEhtdvCECDmggYvvpM3Kw92kuAaD-2-1024x478.jpg)\"><\/div><\/div><button type=\"button\" class=\"vgn-arrow vgn-prev\" aria-label=\"Precedent\">&#8249;<\/button><button type=\"button\" class=\"vgn-arrow vgn-next\" aria-label=\"Suivant\">&#8250;<\/button><div class=\"vgn-dots\"><span class=\"vgn-dot active\"><\/span><span class=\"vgn-dot\"><\/span><span class=\"vgn-dot\"><\/span><span class=\"vgn-dot\"><\/span><span class=\"vgn-dot\"><\/span><\/div><span class=\"vgn-badge labelise\">&#9733; VGN Premium<\/span><div class=\"vgn-pass-badge vgn-pass-premium\"><span class=\"vgn-pass-pct\">100%<\/span><span class=\"vgn-pass-txt\">Pass VGN<br>offert<\/span><\/div><span class=\"vgn-capacite\">4 pers.<\/span><\/div><a href=\"https:\/\/vosges-grandeur-nature.fr\/de\/gites-vosges\/le-belle-hutte\/\" class=\"vgn-carte-body\"><div class=\"vgn-carte-equips\"><span class=\"vgn-carte-equip\">Animaux acceptes<\/span><\/div><div class=\"vgn-carte-ville\">&#128205; La Bresse<\/div><h3 class=\"vgn-carte-titre\">Le Belle-Hutte<\/h3><p class=\"vgn-carte-description\">\ud83c\udfd4\ufe0f Bienvenue au Belle-Hutte ! Plongez au c\u0153ur des magnifiques Vosges et profitez d&#039;un appartement tout confort avec une vue imprenable sur les sapins et les sommets enneig\u00e9s \ud83c\udf32\u2744\ufe0f. Id\u00e9alement situ\u00e9 au pied de la station de La Bresse-Hohneck, dans une r\u00e9sidence s\u00e9curis\u00e9e\/<\/p><\/a><button class=\"vgn-add-btn\" data-type=\"logements\" data-id=\"6213\" data-titre=\"Le Belle-Hutte\" data-photo=\"https:\/\/vosges-grandeur-nature.fr\/wp-content\/uploads\/2026\/07\/L9hrTVlL4WygFwEaWxzJQlF2yTnfru0ACf5Cn21t-2-1024x478.jpg\" data-ville=\"La Bresse\" data-url=\"https:\/\/vosges-grandeur-nature.fr\/de\/gites-vosges\/le-belle-hutte\/\" style=\"width:100%;margin-top:8px;justify-content:center;\">&#10022; Mon s&eacute;jour de r&ecirc;ve<\/button><\/div><\/div><\/div><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9edad88 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9edad88\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-88df8c8\" data-id=\"88df8c8\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b656be9 elementor-widget elementor-widget-html\" data-id=\"b656be9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"cta-proprio\" style=\"background:#0d1f12;border-radius:14px;padding:64px 48px;position:relative;overflow:hidden;text-align:center;\">\n\n  <div style=\"position:absolute;top:-80px;right:-80px;width:320px;height:320px;background:rgba(255,198,50,0.06);border-radius:50%;pointer-events:none;\"><\/div>\n  <div style=\"position:absolute;bottom:-80px;left:-60px;width:260px;height:260px;background:rgba(255,255,255,0.03);border-radius:50%;pointer-events:none;\"><\/div>\n\n  <div style=\"display:inline-flex;align-items:center;gap:7px;background:rgba(255,198,50,0.15);color:#ffc632;font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;padding:5px 16px;border-radius:20px;margin-bottom:22px;border:1px solid rgba(255,198,50,0.25);position:relative;z-index:2;\">\n    <span style=\"width:6px;height:6px;background:#ffc632;border-radius:50%;display:inline-block;\"><\/span>\n    Propri&eacute;taires\n  <\/div>\n\n  <div style=\"font-family:'Playfair Display',Georgia,serif;font-size:36px;font-weight:700;color:#ffffff;margin-bottom:14px;line-height:1.2;position:relative;z-index:2;\">\n    Vous avez un beau g&icirc;te dans les Vosges ?<br>\n    <span style=\"color:#ffc632;\">On veut le voir.<\/span>\n  <\/div>\n\n  <p style=\"font-family:'DM Sans',sans-serif;font-size:17px;color:#ffffff;font-weight:600;margin:0 auto 10px;max-width:640px;position:relative;z-index:2;\">\n    Le r&eacute;f&eacute;rencement de votre g&icirc;te sur la plateforme est <span style=\"color:#ffc632;\">100&nbsp;% gratuit<\/span>.\n  <\/p>\n  <p style=\"font-family:'DM Sans',sans-serif;font-size:14px;color:rgba(255,255,255,0.6);line-height:1.7;max-width:600px;margin:0 auto 40px;position:relative;z-index:2;\">\n    Pas d&rsquo;abonnement, pas d&rsquo;exclusivit&eacute;, pas de frais cach&eacute;s. On se d&eacute;place, on visite votre g&icirc;te, et il rejoint la vitrine premium des Hautes-Vosges.\n  <\/p>\n\n  <div class=\"cta-proprio-grid\" style=\"display:grid;grid-template-columns:repeat(3,1fr);gap:16px;max-width:920px;margin:0 auto 40px;position:relative;z-index:2;\">\n\n    <div style=\"background:rgba(255,255,255,0.055);border:1px solid rgba(255,198,50,0.14);border-radius:12px;padding:26px 22px;text-align:left;\">\n      <div style=\"font-size:24px;margin-bottom:12px;\">&#127968;<\/div>\n      <div style=\"font-family:'DM Sans',sans-serif;font-size:15px;font-weight:700;color:#ffc632;margin-bottom:8px;\">Une fiche d&eacute;di&eacute;e &agrave; votre g&icirc;te<\/div>\n      <p style=\"font-family:'DM Sans',sans-serif;font-size:13px;color:rgba(255,255,255,0.65);line-height:1.65;margin:0;\">\n        Photos, description soign&eacute;e, carte et points d&rsquo;int&eacute;r&ecirc;t autour de chez vous \u2014 votre g&icirc;te mis en valeur sur vosges-grandeur-nature.fr.\n      <\/p>\n    <\/div>\n\n    <div style=\"background:rgba(255,255,255,0.055);border:1px solid rgba(255,198,50,0.14);border-radius:12px;padding:26px 22px;text-align:left;\">\n      <div style=\"font-size:24px;margin-bottom:12px;\">&#129309;<\/div>\n      <div style=\"font-family:'DM Sans',sans-serif;font-size:15px;font-weight:700;color:#ffc632;margin-bottom:8px;\">Des voyageurs en direct<\/div>\n      <p style=\"font-family:'DM Sans',sans-serif;font-size:13px;color:rgba(255,255,255,0.65);line-height:1.65;margin:0;\">\n        Les visiteurs qui d&eacute;couvrent votre g&icirc;te vous contactent directement. Aucune commission sur vos locations, votre calendrier reste le v&ocirc;tre.\n      <\/p>\n    <\/div>\n\n    <div style=\"background:rgba(255,255,255,0.055);border:1px solid rgba(255,198,50,0.14);border-radius:12px;padding:26px 22px;text-align:left;\">\n      <div style=\"font-size:24px;margin-bottom:12px;\">&#127915;<\/div>\n      <div style=\"font-family:'DM Sans',sans-serif;font-size:15px;font-weight:700;color:#ffc632;margin-bottom:8px;\">Gagnez sur chaque Pass<\/div>\n      <p style=\"font-family:'DM Sans',sans-serif;font-size:13px;color:rgba(255,255,255,0.65);line-height:1.65;margin:0;\">\n        Votre code de parrainage vous reverse une commission sur chaque Pass VGN vendu &agrave; vos voyageurs \u2014 un revenu en plus, sans rien faire.\n      <\/p>\n    <\/div>\n\n  <\/div>\n\n  <a href=\"\/proprietaires\/\" class=\"cta-proprio-btn\" style=\"display:inline-flex;align-items:center;gap:10px;background:#ffc632;color:#135221;font-family:'DM Sans',sans-serif;font-size:16px;font-weight:700;padding:16px 36px;border-radius:12px;text-decoration:none;box-shadow:0 6px 24px rgba(255,198,50,0.35);position:relative;z-index:2;transition:transform .18s ease, box-shadow .18s ease;\">\n    R&eacute;f&eacute;rencer mon g&icirc;te gratuitement\n    <span style=\"font-size:18px;line-height:1;\">&rarr;<\/span>\n  <\/a>\n\n  <p style=\"font-family:'DM Sans',sans-serif;font-size:13px;color:rgba(255,255,255,0.55);margin:20px 0 0;position:relative;z-index:2;\">\n    ou appelez-nous directement : <a href=\"tel:0606951408\" style=\"color:#ffc632;text-decoration:none;font-weight:700;\">06 06 95 14 08<\/a>\n    <span style=\"opacity:0.4;margin:0 8px;\">&middot;<\/span>\n    <span style=\"color:rgba(255,255,255,0.45);\">Sans engagement &middot; Visite sur place<\/span>\n  <\/p>\n\n  <style>\n    .cta-proprio-btn:hover{transform:translateY(-2px);box-shadow:0 10px 32px rgba(255,198,50,0.45);}\n    @media (max-width:860px){ .cta-proprio-grid{grid-template-columns:1fr !important;} }\n    @media (max-width:600px){ #cta-proprio{padding:44px 22px;} #cta-proprio > div[style*=\"font-size:36px\"]{font-size:27px !important;} }\n  <\/style>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Les logements Vosges Grandeur Nature Propri\u00e9taire d&rsquo;un g\u00eete dans les Vosges ? Le listing est gratuit, contactez-nous ! Propri\u00e9taires Vous [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-2755","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vosges-grandeur-nature.fr\/de\/wp-json\/wp\/v2\/pages\/2755","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vosges-grandeur-nature.fr\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/vosges-grandeur-nature.fr\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/vosges-grandeur-nature.fr\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vosges-grandeur-nature.fr\/de\/wp-json\/wp\/v2\/comments?post=2755"}],"version-history":[{"count":0,"href":"https:\/\/vosges-grandeur-nature.fr\/de\/wp-json\/wp\/v2\/pages\/2755\/revisions"}],"wp:attachment":[{"href":"https:\/\/vosges-grandeur-nature.fr\/de\/wp-json\/wp\/v2\/media?parent=2755"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}