{"id":745,"date":"2026-10-30T18:15:24","date_gmt":"2026-10-30T18:15:24","guid":{"rendered":"https:\/\/skouragite.com\/?page_id=745"},"modified":"2026-11-01T22:07:59","modified_gmt":"2026-11-01T22:07:59","slug":"plan-your-stay","status":"publish","type":"page","link":"https:\/\/skouragite.com\/fr\/plan-your-stay\/","title":{"rendered":"Plan your stay at G\u00eete Skoura"},"content":{"rendered":"\n<style>#sg-stay-planner{max-width:1180px!important;width:100%;margin:32px auto 56px;padding:0 16px;box-sizing:border-box;color:#173b2a}#sg-stay-planner .sg-quote-heading{margin:0 0 12px;font-size:clamp(30px,4vw,46px);line-height:1.15}#sg-stay-planner .sg-quote-intro{font-size:17px;line-height:1.65;max-width:780px;margin:0 0 20px}#sg-stay-planner .sg-quote-languages{display:flex;gap:10px;margin:0 0 16px;flex-wrap:wrap}#sg-stay-planner .sg-quote-languages button{border:1px solid #315d45;border-radius:24px;background:white;color:#173b2a;padding:9px 18px;font:inherit;font-size:14px;cursor:pointer}#sg-stay-planner .sg-quote-languages button[aria-pressed=\"true\"]{background:#173b2a;color:white}#sg-stay-planner .sg-quote-languages button:focus-visible{outline:3px solid #c25e3f;outline-offset:3px}#sg-stay-planner [data-copy=\"fr\"]{display:none}#sg-stay-planner[data-language=\"fr\"] [data-copy=\"fr\"]{display:initial}#sg-stay-planner[data-language=\"fr\"] [data-copy=\"en\"]{display:none}#sg-stay-quote-frame{display:block;width:100%;min-height:550px;height:1600px;border:0;background:transparent}#sg-stay-planner .sg-quote-links{font-size:14px;line-height:1.8;margin-top:16px}#sg-stay-planner .sg-quote-indexable{margin:18px 0 24px;padding:20px 24px;border:1px solid #d7dfd5;border-radius:14px;background:#f7f9f4}#sg-stay-planner .sg-quote-indexable h2{margin:0 0 10px;font-size:clamp(22px,2.4vw,28px);line-height:1.25}#sg-stay-planner .sg-quote-indexable p{margin:0 0 12px;line-height:1.65}#sg-stay-planner .sg-quote-indexable ul{margin:0;padding-left:22px;line-height:1.65}#sg-stay-planner .sg-quote-indexable li+li{margin-top:4px}<\/style>\n<div id=\"sg-stay-planner\" class=\"alignwide notranslate\" translate=\"no\" data-language=\"en\">\n<h1 class=\"sg-quote-heading\"><span data-copy=\"en\" lang=\"en\">Plan your stay at G\u00eete Skoura<\/span><span data-copy=\"fr\" lang=\"fr\">Pr\u00e9parez votre s\u00e9jour au G\u00eete Skoura<\/span><\/h1>\n<p class=\"sg-quote-intro\"><span data-copy=\"en\" lang=\"en\">Choose your dates, meal plan and mountain activities. See your estimated price, including child discounts, then send your enquiry on WhatsApp. Rachid will confirm availability and the final quote.<\/span><span data-copy=\"fr\" lang=\"fr\">Choisissez vos dates, votre formule et vos activit\u00e9s en montagne. Consultez votre estimation avec les r\u00e9ductions enfants, puis envoyez votre demande sur WhatsApp. Rachid confirmera la disponibilit\u00e9 et le devis d\u00e9finitif.<\/span><\/p>\n<section class=\"sg-quote-indexable\" aria-labelledby=\"sg-quote-details\">\n<h2 id=\"sg-quote-details\"><span data-copy=\"en\" lang=\"en\">What your stay estimate covers<\/span><span data-copy=\"fr\" lang=\"fr\">Ce que comprend votre estimation<\/span><\/h2>\n<p><span data-copy=\"en\" lang=\"en\">Plan a stay at G\u00eete Skoura in Tikhzanine, Skoura M\u2019Daz, below the Tichoukt massif. Combine a traditional room or terrace camping with homemade Moroccan meals and guided mountain activities.<\/span><span data-copy=\"fr\" lang=\"fr\">Pr\u00e9parez votre s\u00e9jour au G\u00eete Skoura \u00e0 Tikhzanine, Skoura M\u2019Daz, au pied du massif du Tichoukt. Associez une chambre traditionnelle ou le camping sur la terrasse \u00e0 des repas marocains maison et des activit\u00e9s guid\u00e9es en montagne.<\/span><\/p>\n<ul>\n<li><span data-copy=\"en\" lang=\"en\">Enter your dates, number of guests and children\u2019s ages to see an estimate with the applicable child reductions.<\/span><span data-copy=\"fr\" lang=\"fr\">Indiquez vos dates, le nombre de voyageurs et l\u2019\u00e2ge des enfants pour voir une estimation tenant compte des r\u00e9ductions enfants.<\/span><\/li>\n<li><span data-copy=\"en\" lang=\"en\">Choose your stay and meal plan, then add activities such as a guided walk around Tichoukt or the Tadoute waterfalls.<\/span><span data-copy=\"fr\" lang=\"fr\">Choisissez votre h\u00e9bergement et votre formule de repas, puis ajoutez une randonn\u00e9e guid\u00e9e au Tichoukt ou aux cascades de Tadoute.<\/span><\/li>\n<li><span data-copy=\"en\" lang=\"en\">Send the estimate by WhatsApp. Rachid confirms availability and the final quote before any reservation is guaranteed.<\/span><span data-copy=\"fr\" lang=\"fr\">Envoyez l\u2019estimation par WhatsApp. Rachid confirme la disponibilit\u00e9 et le devis d\u00e9finitif avant toute r\u00e9servation garantie.<\/span><\/li>\n<\/ul><\/section>\n<div class=\"sg-quote-languages\" aria-label=\"Language \/ Langue\"><button type=\"button\" data-quote-language=\"en\" aria-pressed=\"true\">English<\/button><button type=\"button\" data-quote-language=\"fr\" aria-pressed=\"false\">Fran\u00e7ais<\/button><\/div>\n<iframe id=\"sg-stay-quote-frame\" title=\"G\u00eete Skoura stay quote\" sandbox=\"allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox\"><\/iframe>\n<noscript><p>Please contact us on <a href=\"https:\/\/wa.me\/212670357170\" target=\"_blank\" rel=\"noopener\">WhatsApp<\/a> for a personalised quote. Pour un devis personnalis\u00e9, contactez-nous sur WhatsApp.<\/p><\/noscript>\n<p class=\"sg-quote-links\"><a href=\"https:\/\/skouragite.com\/rooms-rates\/\"><span data-copy=\"en\">Rooms and rates<\/span><span data-copy=\"fr\">Chambres et tarifs<\/span><\/a> \u00b7 <a href=\"https:\/\/skouragite.com\/services\/\"><span data-copy=\"en\">Mountain experiences<\/span><span data-copy=\"fr\">Exp\u00e9riences en montagne<\/span><\/a> \u00b7 <a href=\"https:\/\/skouragite.com\/gallery\/\"><span data-copy=\"en\">Photos of the g\u00eete<\/span><span data-copy=\"fr\">Photos du g\u00eete<\/span><\/a><\/p>\n<\/div>\n<script type=\"application\/json\" id=\"sg-stay-quote-documents\">{\"en\":\"\\u003c!DOCTYPE html\\u003e\\u003chtml lang=\\\"en\\\"\\u003e\\u003chead\\u003e\\n  \\u003cmeta charset=\\\"UTF-8\\\"\\u003e\\n  \\u003cmeta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\"\\u003e\\n  \\u003ctitle\\u003ePlan your stay at G\u00eete Skoura\\u003c\/title\\u003e\\n  \\u003cmeta name=\\\"description\\\" content=\\\"Plan your stay at G\u00eete Skoura \u00e0 Tikhzanine, Skoura M\u2019Daz : tarifs, randonn\u00e9es dans le Tichoukt et demande de disponibilit\u00e9 par WhatsApp.\\\"\\u003e\\n  \\u003cmeta name=\\\"theme-color\\\" content=\\\"#1b4332\\\"\\u003e\\n  \\u003c!-- Tailwind CSS --\\u003e\\n  \\u003cscript src=\\\"https:\/\/cdn.tailwindcss.com\\\"\\u003e\\u003c\/script\\u003e\\n  \\u003c!-- FontAwesome Icons --\\u003e\\n  \\u003clink rel=\\\"stylesheet\\\" href=\\\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.0\/css\/all.min.css\\\"\\u003e\\n  \\u003c!-- Google Fonts --\\u003e\\n  \\u003clink rel=\\\"preconnect\\\" href=\\\"https:\/\/fonts.googleapis.com\\\"\\u003e\\n  \\u003clink rel=\\\"preconnect\\\" href=\\\"https:\/\/fonts.gstatic.com\\\" crossorigin\\u003e\\n  \\u003clink href=\\\"https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700;800\\u0026amp;family=Playfair+Display:ital,wght@0,600;0,700;1,400\\u0026amp;display=swap\\\" rel=\\\"stylesheet\\\"\\u003e\\n  \\n  \\u003cscript\\u003e\\n    tailwind.config = {\\n      theme: {\\n        extend: {\\n          colors: {\\n            clay: {\\n              50: '#fdf8f6',\\n              100: '#f2e8e5',\\n              200: '#e8d2cb',\\n              600: '#c25e3f',\\n              700: '#a3472a',\\n              800: '#873c24',\\n              900: '#703421',\\n            },\\n            atlas: {\\n              50: '#f2f7f4',\\n              100: '#deebe3',\\n              600: '#2d6a4f',\\n              700: '#1b4332',\\n              800: '#081c15',\\n            },\\n            sand: {\\n              50: '#faf7f2',\\n              100: '#f3ece1',\\n              200: '#e5d7c3',\\n            }\\n          },\\n          fontFamily: {\\n            sans: ['\\\"Plus Jakarta Sans\\\"', 'sans-serif'],\\n            serif: ['\\\"Playfair Display\\\"', 'serif'],\\n          }\\n        }\\n      }\\n    }\\n  \\u003c\/script\\u003e\\n  \\u003cstyle\\u003e\\n    body {\\n      background-color: #faf7f2;\\n      color: #2b2623;\\n    }\\n    .hidden { display: none !important; }\\n    :focus-visible { outline: 3px solid #c25e3f; outline-offset: 3px; }\\n    button:disabled { opacity: .55; cursor: not-allowed; }\\n    input:disabled { cursor: default; }\\n    @media (prefers-reduced-motion: reduce) {\\n      *, *::before, *::after { scroll-behavior: auto !important; transition: none !important; }\\n    }\\n    .glass-card {\\n      background: rgba(255, 255, 255, 0.85);\\n      backdrop-filter: blur(12px);\\n      border: 1px solid rgba(229, 215, 195, 0.5);\\n    }\\n    .custom-scrollbar::-webkit-scrollbar {\\n      width: 6px;\\n    }\\n    .custom-scrollbar::-webkit-scrollbar-track {\\n      background: #f3ece1;\\n    }\\n    .custom-scrollbar::-webkit-scrollbar-thumb {\\n      background: #c25e3f;\\n      border-radius: 4px;\\n    }\\n  \\u003c\/style\\u003e\\n\\u003cstyle\\u003ehtml,body{margin:0!important;padding:0!important;background:transparent!important;min-height:0!important}body{display:block!important}main{padding:12px 0!important;margin:0!important;max-width:none!important}.glass-card{background:#fff}#sec-reservation\\u003ediv{max-width:none!important}#sec-reservation .glass-card{position:static!important;top:auto!important}\\u003c\/style\\u003e\\u003c\/head\\u003e\\n\\u003cbody class=\\\"font-sans antialiased\\\"\\u003e\\u003cmain\\u003e\\u003csection id=\\\"sec-reservation\\\" class=\\\"space-y-8\\\"\\u003e\\n      \\u003cdiv class=\\\"max-w-4xl mx-auto\\\"\\u003e\\n        \\u003cdiv class=\\\"grid grid-cols-1 lg:grid-cols-3 gap-8\\\"\\u003e\\n          \\u003c!-- FORMULARIO --\\u003e\\n          \\u003cdiv class=\\\"lg:col-span-2 glass-card rounded-3xl p-6 sm:p-8 space-y-6 shadow-sm border border-sand-200\\\"\\u003e\\n            \\n            \\u003c!-- Dates Check-in \/ Check-out \\u0026 Personnes --\\u003e\\n            \\u003cdiv class=\\\"space-y-4\\\"\\u003e\\n              \\u003ch3 class=\\\"text-sm font-bold uppercase tracking-wider text-clay-700 flex items-center space-x-2\\\"\\u003e\\n                \\u003ci class=\\\"fa-solid fa-users\\\"\\u003e\\u003c\/i\\u003e\\n                \\u003cspan\\u003e1. Dates and guests\\u003c\/span\\u003e\\n              \\u003c\/h3\\u003e\\n              \\u003cdiv class=\\\"grid grid-cols-1 sm:grid-cols-3 gap-4\\\"\\u003e\\n                \\u003cdiv\\u003e\\n                  \\u003clabel for=\\\"checkin\\\" class=\\\"block text-xs font-semibold text-gray-700 mb-1\\\"\\u003eArrival\\u003c\/label\\u003e\\n                  \\u003cinput type=\\\"date\\\" id=\\\"checkin\\\" required onchange=\\\"updateDatesAndCalculate()\\\" class=\\\"w-full px-3 py-2.5 rounded-xl border border-sand-200 bg-white text-sm focus:ring-2 focus:ring-clay-600 focus:outline-none\\\"\\u003e\\n                \\u003c\/div\\u003e\\n                \\u003cdiv\\u003e\\n                  \\u003clabel for=\\\"checkout\\\" class=\\\"block text-xs font-semibold text-gray-700 mb-1\\\"\\u003eDeparture\\u003c\/label\\u003e\\n                  \\u003cinput type=\\\"date\\\" id=\\\"checkout\\\" required onchange=\\\"updateDatesAndCalculate()\\\" class=\\\"w-full px-3 py-2.5 rounded-xl border border-sand-200 bg-white text-sm focus:ring-2 focus:ring-clay-600 focus:outline-none\\\"\\u003e\\n                \\u003c\/div\\u003e\\n                \\u003cdiv\\u003e\\n                  \\u003clabel for=\\\"guests\\\" class=\\\"block text-xs font-semibold text-gray-700 mb-1\\\"\\u003eAdults and guests over 12\\u003c\/label\\u003e\\n                  \\u003cinput type=\\\"number\\\" id=\\\"guests\\\" value=\\\"2\\\" min=\\\"1\\\" max=\\\"20\\\" step=\\\"1\\\" required oninput=\\\"calculateTotal()\\\" class=\\\"w-full px-3 py-2.5 rounded-xl border border-sand-200 bg-white text-sm focus:ring-2 focus:ring-clay-600 focus:outline-none\\\"\\u003e\\n                \\u003c\/div\\u003e\\n              \\u003c\/div\\u003e\\n              \\u003cdiv class=\\\"grid grid-cols-1 sm:grid-cols-2 gap-4\\\"\\u003e\\n                \\u003cdiv\\u003e\\n                  \\u003clabel for=\\\"children-half\\\" class=\\\"block text-xs font-semibold text-gray-700 mb-1\\\"\\u003eNumber of children aged 6\u201312 inclusive\\u003c\/label\\u003e\\n                  \\u003cinput type=\\\"number\\\" id=\\\"children-half\\\" value=\\\"0\\\" min=\\\"0\\\" max=\\\"20\\\" step=\\\"1\\\" required oninput=\\\"calculateTotal()\\\" class=\\\"w-full px-3 py-2.5 rounded-xl border border-sand-200 bg-white text-sm focus:ring-2 focus:ring-clay-600 focus:outline-none\\\"\\u003e\\n                  \\u003cp class=\\\"text-xs text-gray-600 mt-1\\\"\\u003eHalf price for the stay plan and meals.\\u003c\/p\\u003e\\n                \\u003c\/div\\u003e\\n                \\u003cdiv\\u003e\\n                  \\u003clabel for=\\\"children-young\\\" class=\\\"block text-xs font-semibold text-gray-700 mb-1\\\"\\u003eNumber of children under 6\\u003c\/label\\u003e\\n                  \\u003cinput type=\\\"number\\\" id=\\\"children-young\\\" value=\\\"0\\\" min=\\\"0\\\" max=\\\"20\\\" step=\\\"1\\\" required oninput=\\\"calculateTotal()\\\" class=\\\"w-full px-3 py-2.5 rounded-xl border border-sand-200 bg-white text-sm focus:ring-2 focus:ring-clay-600 focus:outline-none\\\"\\u003e\\n                  \\u003cp class=\\\"text-xs text-gray-600 mt-1\\\"\\u003eTwo children per family are free. For additional children, request a personalised quote.\\u003c\/p\\u003e\\n                \\u003c\/div\\u003e\\n              \\u003c\/div\\u003e\\n              \\u003cdiv class=\\\"text-xs text-clay-700 font-semibold bg-sand-100 px-3 py-2 rounded-xl inline-block\\\" id=\\\"nights-display\\\"\\u003e\\n                \\u003ci class=\\\"fa-solid fa-moon mr-1\\\"\\u003e\\u003c\/i\\u003e Stay length : \\u003cspan id=\\\"nights-count\\\"\\u003e1\\u003c\/span\\u003e night(s)\\n              \\u003c\/div\\u003e\\n              \\u003cp class=\\\"text-xs text-gray-600\\\"\\u003eChild discounts are included in the estimate. Please give their ages in the notes and mention if your party includes several families.\\u003c\/p\\u003e\\n              \\u003cp id=\\\"family-notice\\\" role=\\\"status\\\" class=\\\"hidden text-sm text-clay-800 bg-clay-50 border border-clay-200 p-3 rounded-xl\\\"\\u003e\\u003c\/p\\u003e\\n              \\u003cp id=\\\"quote-error\\\" role=\\\"alert\\\" class=\\\"hidden text-sm text-red-700 bg-red-50 border border-red-200 p-3 rounded-xl\\\"\\u003e\\u003c\/p\\u003e\\n            \\u003c\/div\\u003e\\n\\n            \\u003chr class=\\\"border-sand-200\\\"\\u003e\\n\\n            \\u003c!-- Type d'H\u00e9bergement --\\u003e\\n            \\u003cdiv class=\\\"space-y-4\\\"\\u003e\\n              \\u003ch3 class=\\\"text-sm font-bold uppercase tracking-wider text-clay-700 flex items-center space-x-2\\\"\\u003e\\n                \\u003ci class=\\\"fa-solid fa-bed\\\"\\u003e\\u003c\/i\\u003e\\n                \\u003cspan\\u003e2. Stay plan\\u003c\/span\\u003e\\n              \\u003c\/h3\\u003e\\n              \\u003clabel for=\\\"stay-plan\\\" class=\\\"block text-xs font-semibold text-gray-700\\\"\\u003eAdult rate per person per night\\u003c\/label\\u003e\\n              \\u003cselect id=\\\"stay-plan\\\" onchange=\\\"calculateTotal()\\\" class=\\\"w-full px-3 py-3 rounded-xl border border-sand-200 bg-white text-sm focus:ring-2 focus:ring-clay-600 focus:outline-none\\\"\\u003e\\n                \\u003coption value=\\\"room\\\"\\u003eRoom only \u2014 150 DH\\u003c\/option\\u003e\\n                \\u003coption value=\\\"camp\\\"\\u003eCamping \/ tent pitch \u2014 100 DH\\u003c\/option\\u003e\\n                \\u003coption value=\\\"bb\\\" selected\\u003eDouble-bed room + breakfast \u2014 250 DH\\u003c\/option\\u003e\\n                \\u003coption value=\\\"half\\\"\\u003eHalf board \u2014 300 DH\\u003c\/option\\u003e\\n                \\u003coption value=\\\"full\\\"\\u003eFull board \u2014 350 DH\\u003c\/option\\u003e\\n              \\u003c\/select\\u003e\\n              \\u003cp id=\\\"plan-includes\\\" class=\\\"text-xs text-atlas-700\\\" aria-live=\\\"polite\\\"\\u003eAccommodation and breakfast included.\\u003c\/p\\u003e\\n              \\u003cp id=\\\"child-rate\\\" class=\\\"text-xs font-semibold text-clay-700\\\" aria-live=\\\"polite\\\"\\u003eChild aged 6\u201312 : 125 DH per night. Under 6 : two children free per family.\\u003c\/p\\u003e\\n            \\u003c\/div\\u003e\\n\\n            \\u003chr class=\\\"border-sand-200\\\"\\u003e\\n\\n            \\u003c!-- Repas Compl\u00e9mentaires --\\u003e\\n            \\u003cdiv class=\\\"space-y-4\\\"\\u003e\\n              \\u003ch3 class=\\\"text-sm font-bold uppercase tracking-wider text-clay-700 flex items-center space-x-2\\\"\\u003e\\n                \\u003ci class=\\\"fa-solid fa-bowl-food\\\"\\u003e\\u003c\/i\\u003e\\n                \\u003cspan\\u003e3. Included meals and extras\\u003c\/span\\u003e\\n              \\u003c\/h3\\u003e\\n              \\u003cdiv class=\\\"grid grid-cols-1 sm:grid-cols-2 gap-2\\\"\\u003e\\n                \\u003clabel class=\\\"flex items-center justify-between p-3 rounded-xl bg-white border border-sand-200 text-sm\\\"\\u003e\\n                  \\u003cspan class=\\\"flex items-center space-x-2\\\"\\u003e\\n                    \\u003cinput type=\\\"checkbox\\\" id=\\\"opt-breakfast\\\" value=\\\"50\\\" checked disabled class=\\\"rounded text-clay-600 focus:ring-clay-600\\\"\\u003e\\n                    \\u003cspan class=\\\"font-medium text-gray-700\\\"\\u003eBreakfast\\u003c\/span\\u003e\\n                  \\u003c\/span\\u003e\\n                  \\u003cspan id=\\\"breakfast-price\\\" class=\\\"text-xs font-bold text-clay-700\\\"\\u003eIncluded\\u003c\/span\\u003e\\n                \\u003c\/label\\u003e\\n\\n                \\u003clabel class=\\\"flex items-center justify-between p-3 rounded-xl bg-white border border-sand-200 text-sm\\\"\\u003e\\n                  \\u003cspan class=\\\"flex items-center space-x-2\\\"\\u003e\\n                    \\u003cinput type=\\\"checkbox\\\" id=\\\"opt-lunch\\\" value=\\\"100\\\" onchange=\\\"calculateTotal()\\\" class=\\\"rounded text-clay-600 focus:ring-clay-600\\\"\\u003e\\n                    \\u003cspan class=\\\"font-medium text-gray-700\\\"\\u003eLunch\\u003c\/span\\u003e\\n                  \\u003c\/span\\u003e\\n                  \\u003cspan id=\\\"lunch-price\\\" class=\\\"text-xs font-bold text-clay-700\\\"\\u003e+100 DH \/ person \/ night\\u003c\/span\\u003e\\n                \\u003c\/label\\u003e\\n\\n                \\u003clabel class=\\\"flex items-center justify-between p-3 rounded-xl bg-white border border-sand-200 text-sm\\\"\\u003e\\n                  \\u003cspan class=\\\"flex items-center space-x-2\\\"\\u003e\\n                    \\u003cinput type=\\\"checkbox\\\" id=\\\"opt-dinner\\\" value=\\\"100\\\" onchange=\\\"calculateTotal()\\\" class=\\\"rounded text-clay-600 focus:ring-clay-600\\\"\\u003e\\n                    \\u003cspan class=\\\"font-medium text-gray-700\\\"\\u003eDinner\\u003c\/span\\u003e\\n                  \\u003c\/span\\u003e\\n                  \\u003cspan id=\\\"dinner-price\\\" class=\\\"text-xs font-bold text-clay-700\\\"\\u003e+100 DH \/ person \/ night\\u003c\/span\\u003e\\n                \\u003c\/label\\u003e\\n\\n                \\u003clabel class=\\\"flex items-center justify-between p-3 rounded-xl bg-white border border-sand-200 text-sm\\\"\\u003e\\n                  \\u003cspan class=\\\"flex items-center space-x-2\\\"\\u003e\\n                    \\u003cinput type=\\\"checkbox\\\" id=\\\"opt-picnic\\\" value=\\\"80\\\" onchange=\\\"calculateTotal()\\\" class=\\\"rounded text-clay-600 focus:ring-clay-600\\\"\\u003e\\n                    \\u003cspan class=\\\"font-medium text-gray-700\\\"\\u003eTrek picnic\\u003c\/span\\u003e\\n                  \\u003c\/span\\u003e\\n                  \\u003cspan class=\\\"text-xs font-bold text-clay-700\\\"\\u003e+80 DH \/ person \/ night\\u003c\/span\\u003e\\n                \\u003c\/label\\u003e\\n              \\u003c\/div\\u003e\\n              \\u003cp class=\\\"text-xs text-gray-600\\\"\\u003eAdult \u00e0 la carte rates: breakfast 50 DH, lunch 100 DH, dinner 100 DH. Children aged 6\u201312 pay half price; up to two children under 6 per family are free. Selected extras are counted once per night and per person. For individual meals or a picnic replacing lunch, include a note so the guesthouse can adjust your quote.\\u003c\/p\\u003e\\n            \\u003c\/div\\u003e\\n\\n            \\u003chr class=\\\"border-sand-200\\\"\\u003e\\n\\n            \\u003c!-- Services Treks \\u0026 Guides --\\u003e\\n            \\u003cdiv class=\\\"space-y-4\\\"\\u003e\\n              \\u003ch3 class=\\\"text-sm font-bold uppercase tracking-wider text-clay-700 flex items-center space-x-2\\\"\\u003e\\n                \\u003ci class=\\\"fa-solid fa-person-hiking\\\"\\u003e\\u003c\/i\\u003e\\n                \\u003cspan\\u003e4. Guides and trekking equipment\\u003c\/span\\u003e\\n              \\u003c\/h3\\u003e\\n              \\u003cdiv class=\\\"space-y-3\\\"\\u003e\\n                \\u003cdiv class=\\\"p-3 rounded-xl bg-white border border-sand-200 text-sm space-y-2\\\"\\u003e\\n                  \\u003clabel class=\\\"flex items-center justify-between cursor-pointer\\\"\\u003e\\n                    \\u003cspan class=\\\"flex items-center space-x-2\\\"\\u003e\\n                      \\u003cinput type=\\\"checkbox\\\" id=\\\"opt-guide\\\" onchange=\\\"calculateTotal()\\\" class=\\\"rounded text-clay-600 focus:ring-clay-600\\\"\\u003e\\n                      \\u003cspan class=\\\"font-medium text-gray-700\\\"\\u003eLocal mountain guide\\u003c\/span\\u003e\\n                    \\u003c\/span\\u003e\\n                    \\u003cspan class=\\\"text-xs font-bold text-clay-700\\\"\\u003e200\u2013500 DH \/ group \/ day\\u003c\/span\\u003e\\n                  \\u003c\/label\\u003e\\n                  \\n                  \\u003cdiv id=\\\"guide-select-container\\\" class=\\\"hidden pt-1 pl-6\\\"\\u003e\\n                    \\u003clabel for=\\\"opt-guide-level\\\" class=\\\"block text-xs font-semibold text-gray-600 mb-1\\\"\\u003eHiking route:\\u003c\/label\\u003e\\n                    \\u003cselect id=\\\"opt-guide-level\\\" onchange=\\\"calculateTotal()\\\" class=\\\"w-full px-3 py-2 rounded-lg border border-sand-200 bg-sand-50 text-xs focus:ring-2 focus:ring-clay-600 focus:outline-none\\\"\\u003e\\n                      \\u003coption value=\\\"200\\\"\\u003eVillage and orchard walk \u2014 200 DH \/ group \/ day\\u003c\/option\\u003e\\n                      \\u003coption value=\\\"300\\\" selected\\u003eTadoute waterfalls \u2014 300 DH \/ group \/ day\\u003c\/option\\u003e\\n                      \\u003coption value=\\\"500\\\"\\u003eJebel Tichoukt ascent \u2014 500 DH \/ group \/ day\\u003c\/option\\u003e\\n                    \\u003c\/select\\u003e\\n                    \\u003clabel for=\\\"guide-days\\\" class=\\\"block text-xs font-semibold text-gray-600 mt-3 mb-1\\\"\\u003eNumber of days with a guide\\u003c\/label\\u003e\\n                    \\u003cinput id=\\\"guide-days\\\" type=\\\"number\\\" value=\\\"1\\\" min=\\\"1\\\" step=\\\"1\\\" required oninput=\\\"calculateTotal()\\\" class=\\\"w-full px-3 py-2 rounded-lg border border-sand-200 bg-sand-50 text-sm\\\"\\u003e\\n                  \\u003c\/div\\u003e\\n                \\u003c\/div\\u003e\\n\\n                \\u003clabel class=\\\"flex items-center justify-between p-3 rounded-xl bg-white border border-sand-200 text-sm\\\"\\u003e\\n                  \\u003cspan class=\\\"flex items-center space-x-2\\\"\\u003e\\n                    \\u003cinput type=\\\"checkbox\\\" id=\\\"opt-mule\\\" value=\\\"100\\\" onchange=\\\"calculateTotal()\\\" class=\\\"rounded text-clay-600 focus:ring-clay-600\\\"\\u003e\\n                    \\u003cspan class=\\\"font-medium text-gray-700\\\"\\u003ePack mule with muleteer\\u003c\/span\\u003e\\n                  \\u003c\/span\\u003e\\n                  \\u003cspan class=\\\"text-xs font-bold text-clay-700\\\"\\u003e+100 DH \/ day\\u003c\/span\\u003e\\n                \\u003c\/label\\u003e\\n                \\u003cdiv id=\\\"mule-days-container\\\" class=\\\"hidden p-3 rounded-xl bg-white border border-sand-200\\\"\\u003e\\n                  \\u003clabel for=\\\"mule-days\\\" class=\\\"block text-xs font-semibold text-gray-600 mb-1\\\"\\u003eNumber of days with a mule\\u003c\/label\\u003e\\n                  \\u003cinput id=\\\"mule-days\\\" type=\\\"number\\\" value=\\\"1\\\" min=\\\"1\\\" step=\\\"1\\\" required oninput=\\\"calculateTotal()\\\" class=\\\"w-full px-3 py-2 rounded-lg border border-sand-200 bg-sand-50 text-sm\\\"\\u003e\\n                \\u003c\/div\\u003e\\n                \\u003cp id=\\\"trek-status\\\" role=\\\"status\\\" class=\\\"text-xs text-atlas-700\\\"\\u003e\\u003c\/p\\u003e\\n                \\u003cp class=\\\"text-xs text-gray-600\\\"\\u003eThe guide is charged per group for the selected days. Activity and equipment rates are subject to confirmation.\\u003c\/p\\u003e\\n              \\u003c\/div\\u003e\\n            \\u003c\/div\\u003e\\n\\n            \\u003c!-- Name \\u0026 Contact --\\u003e\\n            \\u003cdiv class=\\\"space-y-3 pt-2\\\"\\u003e\\n              \\u003clabel for=\\\"guestName\\\" class=\\\"block text-xs font-semibold text-gray-700\\\"\\u003eYour full name\\u003c\/label\\u003e\\n              \\u003cinput type=\\\"text\\\" id=\\\"guestName\\\" autocomplete=\\\"name\\\" maxlength=\\\"120\\\" placeholder=\\\"Your name\\\" class=\\\"w-full px-3 py-2.5 rounded-xl border border-sand-200 bg-white text-sm focus:ring-2 focus:ring-clay-600 focus:outline-none\\\"\\u003e\\n              \\u003cdiv aria-hidden=\\\"true\\\" style=\\\"position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden\\\"\\u003e\\u003clabel\\u003eWebsite\\u003cinput type=\\\"text\\\" id=\\\"website_check\\\" name=\\\"website_check\\\" tabindex=\\\"-1\\\" autocomplete=\\\"off\\\"\\u003e\\u003c\/label\\u003e\\u003c\/div\\u003e\\n              \\u003clabel for=\\\"guestNotes\\\" class=\\\"block text-xs font-semibold text-gray-700\\\"\\u003eNotes: child ages, dietary requests, arrival details\u2026\\u003c\/label\\u003e\\n              \\u003ctextarea id=\\\"guestNotes\\\" rows=\\\"3\\\" maxlength=\\\"1000\\\" placeholder=\\\"Optional\\\" class=\\\"w-full px-3 py-2.5 rounded-xl border border-sand-200 bg-white text-sm focus:ring-2 focus:ring-clay-600 focus:outline-none\\\"\\u003e\\u003c\/textarea\\u003e\\n            \\u003c\/div\\u003e\\n\\n          \\u003c\/div\\u003e\\n\\n          \\u003c!-- SUMMARY CARD --\\u003e\\n          \\u003cdiv class=\\\"lg:col-span-1\\\"\\u003e\\n            \\u003cdiv class=\\\"glass-card rounded-3xl p-6 space-y-6 border border-sand-200 lg:sticky lg:top-40 shadow-lg\\\"\\u003e\\n              \\u003ch3 class=\\\"font-serif text-xl font-bold text-atlas-800 border-b border-sand-200 pb-3\\\"\\u003eYour stay summary\\u003c\/h3\\u003e\\n              \\u003cp id=\\\"family-summary\\\" class=\\\"text-xs text-gray-600\\\" aria-live=\\\"polite\\\"\\u003e\\u003c\/p\\u003e\\n              \\n              \\u003cdiv class=\\\"space-y-3 text-sm\\\" id=\\\"summary-details\\\"\\u003e\\n                \\u003cdiv class=\\\"flex justify-between text-gray-600\\\"\\u003e\\n                  \\u003cspan\\u003eStay plan :\\u003c\/span\\u003e\\n                  \\u003cspan class=\\\"font-semibold text-atlas-800\\\" id=\\\"sum-room\\\"\\u003e\u2014\\u003c\/span\\u003e\\n                \\u003c\/div\\u003e\\n                \\u003cdiv class=\\\"flex justify-between text-gray-600\\\"\\u003e\\n                  \\u003cspan\\u003eExtra meals :\\u003c\/span\\u003e\\n                  \\u003cspan class=\\\"font-semibold text-atlas-800\\\" id=\\\"sum-meals\\\"\\u003e0 DH\\u003c\/span\\u003e\\n                \\u003c\/div\\u003e\\n                \\u003cdiv class=\\\"flex justify-between text-gray-600\\\"\\u003e\\n                  \\u003cspan\\u003eGuides and mules :\\u003c\/span\\u003e\\n                  \\u003cspan class=\\\"font-semibold text-atlas-800\\\" id=\\\"sum-treks\\\"\\u003e0 DH\\u003c\/span\\u003e\\n                \\u003c\/div\\u003e\\n                \\u003chr class=\\\"border-sand-200 my-2\\\"\\u003e\\n                \\u003cdiv class=\\\"flex justify-between text-base font-bold text-atlas-800\\\"\\u003e\\n                  \\u003cspan\\u003eEstimated total :\\u003c\/span\\u003e\\n                  \\u003cspan aria-live=\\\"polite\\\" class=\\\"text-clay-700 text-xl\\\" id=\\\"sum-total\\\"\\u003e\u2014\\u003c\/span\\u003e\\n                \\u003c\/div\\u003e\\n                \\u003cdiv class=\\\"flex justify-between text-gray-600\\\"\\u003e\\n                  \\u003cspan\\u003e30% deposit :\\u003c\/span\\u003e\\n                  \\u003cspan id=\\\"sum-deposit\\\" class=\\\"font-semibold text-atlas-800\\\"\\u003e\u2014\\u003c\/span\\u003e\\n                \\u003c\/div\\u003e\\n                \\u003cdiv class=\\\"flex justify-between text-gray-600\\\"\\u003e\\n                  \\u003cspan\\u003eBalance on arrival :\\u003c\/span\\u003e\\n                  \\u003cspan id=\\\"sum-balance\\\" class=\\\"font-semibold text-atlas-800\\\"\\u003e\u2014\\u003c\/span\\u003e\\n                \\u003c\/div\\u003e\\n              \\u003c\/div\\u003e\\n\\n              \\u003cdiv class=\\\"p-3 bg-clay-50 rounded-xl text-xs text-clay-800 leading-relaxed border border-clay-200\\\"\\u003e\\n                \\u003ci class=\\\"fa-solid fa-circle-info mr-1\\\"\\u003e\\u003c\/i\\u003e\\n                Estimate including child discounts, subject to availability and confirmation by the guesthouse. Guide and mule charges are independent of participant ages. After our confirmation, a 30% deposit guarantees the booking. Payment does not automatically confirm a reservation.\\n              \\u003c\/div\\u003e\\n\\n              \\u003cbutton id=\\\"send-quote\\\" onclick=\\\"sendWhatsAppBooking()\\\" class=\\\"w-full py-3.5 px-4 bg-emerald-600 hover:bg-emerald-700 text-white font-bold rounded-2xl shadow-lg shadow-emerald-600\/20 transition flex items-center justify-center space-x-2 text-sm active:scale-95\\\"\\u003e\\n                \\u003ci class=\\\"fa-brands fa-whatsapp text-lg\\\"\\u003e\\u003c\/i\\u003e\\n                \\u003cspan\\u003eSend my enquiry on WhatsApp\\u003c\/span\\u003e\\n              \\u003c\/button\\u003e\\n            \\u003c\/div\\u003e\\n          \\u003c\/div\\u003e\\n        \\u003c\/div\\u003e\\n      \\u003c\/div\\u003e\\n    \\u003c\/section\\u003e\\n\\n    \\u003c\/main\\u003e\\u003cscript\\u003e\\n    const STAY_PLANS = {\\n      room: { label: 'Room only', rate: 150, includes: [] },\\n      camp: { label: 'Camping \/ tent pitch', rate: 100, includes: [] },\\n      bb: { label: 'Double-bed room + breakfast', rate: 250, includes: ['breakfast'] },\\n      half: { label: 'Half board', rate: 300, includes: ['breakfast', 'dinner'] },\\n      full: { label: 'Full board', rate: 350, includes: ['breakfast', 'lunch', 'dinner'] }\\n    };\\n    const MEALS = {\\n      breakfast: { label: 'Breakfast', rate: 50 },\\n      lunch: { label: 'Lunch', rate: 100 },\\n      dinner: { label: 'Dinner', rate: 100 },\\n      picnic: { label: 'Trek picnic', rate: 80 }\\n    };\\n    const EXTRA_SELECTIONS = { breakfast: false, lunch: false, dinner: false, picnic: false };\\n    const TREKS = {\\n      200: 'Village and orchard walk',\\n      300: 'Tadoute waterfalls',\\n      500: 'Jebel Tichoukt ascent'\\n    };\\n    const DAY_MS = 86400000;\\n    const el = id =\\u003e document.getElementById(id);\\n    const money = amount =\\u003e new Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 }).format(amount) + ' DH';\\n\\n    function switchTab() {}\\n\\n    \/\/ Dates civiles : le nombre de nuits ne d\u00e9pend pas des changements d\u2019heure.\\n    function todayLocal() {\\n      const date = new Date();\\n      return [date.getFullYear(), String(date.getMonth() + 1).padStart(2, '0'), String(date.getDate()).padStart(2, '0')].join('-');\\n    }\\n\\n    function parseDay(value) {\\n      if (!\/^\\\\d{4}-\\\\d{2}-\\\\d{2}$\/.test(value)) return NaN;\\n      const [year, month, day] = value.split('-').map(Number);\\n      const stamp = Date.UTC(year, month - 1, day);\\n      return new Date(stamp).toISOString().slice(0, 10) === value ? stamp : NaN;\\n    }\\n\\n    function getNightsCount() {\\n      const difference = (parseDay(el('checkout').value) - parseDay(el('checkin').value)) \/ DAY_MS;\\n      return Number.isInteger(difference) \\u0026\\u0026 difference \\u003e 0 ? difference : 0;\\n    }\\n\\n    function positiveInteger(id, maximum) {\\n      const value = el(id).value.trim();\\n      const number = Number(value);\\n      return \/^\\\\d+$\/.test(value) \\u0026\\u0026 Number.isSafeInteger(number) \\u0026\\u0026 number \\u003e= 1 \\u0026\\u0026 number \\u003c= maximum ? number : NaN;\\n    }\\n\\n    function childCount(id) {\\n      const value = el(id).value.trim();\\n      const number = Number(value);\\n      return \/^\\\\d+$\/.test(value) \\u0026\\u0026 Number.isSafeInteger(number) \\u0026\\u0026 number \\u003e= 0 \\u0026\\u0026 number \\u003c= 20 ? number : NaN;\\n    }\\n\\n    function syncIncludedMeals() {\\n      const plan = STAY_PLANS[el('stay-plan').value];\\n      if (!plan) return;\\n      for (const [key, meal] of Object.entries(MEALS)) {\\n        const input = el(`opt-${key}`);\\n        if (!input.disabled) EXTRA_SELECTIONS[key] = input.checked;\\n        const included = plan.includes.includes(key);\\n        input.checked = included || EXTRA_SELECTIONS[key];\\n        input.disabled = included;\\n        const priceLabel = el(`${key}-price`);\\n        if (priceLabel) priceLabel.textContent = included ? 'Included' : `+${meal.rate} DH \/ person \/ night`;\\n      }\\n      el('plan-includes').textContent = 'Included : ' + [el('stay-plan').value === 'camp' ? 'tent pitch' : 'accommodation', ...plan.includes.map(key =\\u003e MEALS[key].label.toLowerCase())].join(', ') + '.';\\n      el('child-rate').textContent = `Child aged 6\u201312 : ${money(plan.rate \/ 2)} per night. Under 6 : two children free per family.`;\\n    }\\n\\n    function getQuote() {\\n      const plan = STAY_PLANS[el('stay-plan').value];\\n      const nights = getNightsCount();\\n      const guests = positiveInteger('guests', 20);\\n      const childrenHalf = childCount('children-half');\\n      const childrenYoung = childCount('children-young');\\n      if (!Number.isFinite(parseDay(el('checkin').value)) || !Number.isFinite(parseDay(el('checkout').value))) {\\n        return { error: 'Please enter your arrival and departure dates.' };\\n      }\\n      if (el('checkin').value \\u003c todayLocal()) return { error: 'The arrival date cannot be in the past.' };\\n      if (!nights) return { error: 'Departure must follow arrival, with at least one night.' };\\n      if (!Number.isFinite(guests)) return { error: 'Enter a whole number of adults from 1 to 20. For larger parties, please contact the guesthouse.' };\\n      if (!Number.isFinite(childrenHalf) || !Number.isFinite(childrenYoung)) return { error: 'Enter a whole number of children from 0 to 20 in each age group.' };\\n      if (!plan) return { error: 'Please choose a stay plan.' };\\n\\n      const guideDays = el('opt-guide').checked ? positiveInteger('guide-days', nights + 1) : 0;\\n      const muleDays = el('opt-mule').checked ? positiveInteger('mule-days', nights + 1) : 0;\\n      if (!Number.isFinite(guideDays) || !Number.isFinite(muleDays)) {\\n        return { error: 'For the guide and mule, enter a whole number of days between 1 and the number of days in your stay.' };\\n      }\\n      const guideRate = Number(el('opt-guide-level').value);\\n      if (guideDays \\u0026\\u0026 !Object.hasOwn(TREKS, guideRate)) return { error: 'Please choose a route for the guide.' };\\n      const extras = Object.keys(MEALS).filter(key =\\u003e el(`opt-${key}`).checked \\u0026\\u0026 !plan.includes.includes(key));\\n      const payingEquivalent = guests + childrenHalf \/ 2;\\n      const manualQuote = childrenYoung \\u003e 2;\\n      const room = plan.rate * payingEquivalent * nights;\\n      const meals = extras.reduce((total, key) =\\u003e total + MEALS[key].rate * payingEquivalent * nights, 0);\\n      const treks = (guideDays ? guideRate * guideDays : 0) + 100 * muleDays;\\n      const total = room + meals + treks;\\n      const deposit = Math.round(total * 30) \/ 100;\\n      return {\\n        plan, nights, guests, childrenHalf, childrenYoung, manualQuote,\\n        people: guests + childrenHalf + childrenYoung,\\n        guideDays, guideRate, muleDays, extras,\\n        room: manualQuote ? null : room, meals: manualQuote ? null : meals,\\n        treks: manualQuote ? null : treks, total: manualQuote ? null : total,\\n        deposit: manualQuote ? null : deposit, balance: manualQuote ? null : total - deposit\\n      };\\n    }\\n\\n    function calculateTotal() {\\n      syncIncludedMeals();\\n      el('guide-select-container').classList.toggle('hidden', !el('opt-guide').checked);\\n      el('mule-days-container').classList.toggle('hidden', !el('opt-mule').checked);\\n      el('nights-count').textContent = getNightsCount() || '\u2014';\\n      const quote = getQuote();\\n      const selectedGuideRate = Number(el('opt-guide-level').value);\\n      el('trek-status').textContent = el('opt-guide').checked \\u0026\\u0026 Object.hasOwn(TREKS, selectedGuideRate)\\n        ? `Selected route : ${TREKS[selectedGuideRate]} \u2014 ${selectedGuideRate} DH per group per day.` : '';\\n      el('quote-error').textContent = quote.error || '';\\n      el('quote-error').classList.toggle('hidden', !quote.error);\\n      el('send-quote').disabled = Boolean(quote.error);\\n      el('family-notice').classList.toggle('hidden', !quote.manualQuote);\\n      el('family-notice').textContent = quote.manualQuote\\n        ? 'For more than two children under 6, the guesthouse must confirm the rate for your family arrangements. Please give the number of families and child ages in your message. You can send your enquiry; the price and deposit will be confirmed by the guesthouse.' : '';\\n      el('family-summary').textContent = quote.error ? ''\\n        : `${quote.people} guest(s) : ${quote.guests} at the adult rate, ${quote.childrenHalf} child(ren) aged 6\u201312 at half price and ${quote.childrenYoung} child(ren) under 6${quote.manualQuote ? ' \u2014 personalised quote required' : ' free (up to two per family)'}.`;\\n      for (const key of ['room', 'meals', 'treks', 'total', 'deposit', 'balance']) {\\n        el(`sum-${key}`).textContent = quote.error ? '\u2014' : quote.manualQuote ? 'To confirm' : money(quote[key]);\\n      }\\n      return quote.error ? null : quote;\\n    }\\n\\n    function updateDatesAndCalculate() {\\n      el('checkin').min = todayLocal();\\n      const arrival = parseDay(el('checkin').value);\\n      el('checkout').min = Number.isFinite(arrival) ? new Date(arrival + DAY_MS).toISOString().slice(0, 10) : todayLocal();\\n      return calculateTotal();\\n    }\\n\\n    function addTrekToBooking(trekName, guideFee) {\\n      const fee = Number(guideFee);\\n      if (!Object.hasOwn(TREKS, fee)) return;\\n      el('opt-guide').checked = true;\\n      el('opt-guide-level').value = String(fee);\\n      el('guide-days').value = '1';\\n      el('trek-status').textContent = `Selected route : ${TREKS[fee]} \u2014 ${fee} DH per group per day. One guide day has been added.`;\\n      switchTab('reservation');\\n      calculateTotal();\\n    }\\n\\n    function openWhatsApp(text) {\\n      window.open('https:\/\/wa.me\/212670357170?text=' + encodeURIComponent(text), '_blank', 'noopener,noreferrer');\\n    }\\n\\n    function openWhatsAppContact() {\\n      openWhatsApp('Hello G\u00eete Skoura, I would like information about a stay or activity.');\\n    }\\n\\n    function messageField(id, maxLength, fallback) {\\n      const value = el(id).value.replace(\/[\\\\u0000-\\\\u001f\\\\u007f-\\\\u009f\\\\u202a-\\\\u202e\\\\u2066-\\\\u2069]\/g, ' ').replace(\/\\\\s+\/g, ' ').trim().slice(0, maxLength);\\n      return value || fallback;\\n    }\\n\\n    let lastQuoteClick = 0;\\n\\n    function sendWhatsAppBooking() {\\n      if (el('website_check').value.trim()) return;\\n      const now = Date.now();\\n      if (now - lastQuoteClick \\u003c 3000) return;\\n      const quote = calculateTotal();\\n      if (!quote) { switchTab('reservation'); return; }\\n      const activities = [];\\n      if (quote.guideDays) activities.push(`${TREKS[quote.guideRate]} : guide ${money(quote.guideRate)} \/ group \/ day \u00d7 ${quote.guideDays} day(s)`);\\n      if (quote.muleDays) activities.push(`Mule with muleteer : 100 DH \/ day \u00d7 ${quote.muleDays} day(s)`);\\n      const text = [\\n        'Hello G\u00eete Skoura,', '',\\n        'I would like to check availability for this stay:',\\n        '- Name : ' + messageField('guestName', 120, 'Guest'),\\n        '- Arrival : ' + el('checkin').value,\\n        '- Departure : ' + el('checkout').value,\\n        `- Length : ${quote.nights} night(s)`,\\n        `- Total number of guests : ${quote.people}`,\\n        `- Adults and guests over 12 : ${quote.guests}`,\\n        `- Children aged 6\u201312 inclusive : ${quote.childrenHalf} \u2014 half price`,\\n        `- Children under 6 : ${quote.childrenYoung}${quote.manualQuote ? ' \u2014 family arrangements and rate to confirm' : ' \u2014 free (up to two per family)'}`,\\n        `- Stay plan : ${quote.plan.label} \u2014 ${money(quote.plan.rate)} \/ adult \/ night`,\\n        `- Child rate for ages 6\u201312 : ${money(quote.plan.rate \/ 2)} \/ enfant \/ night`,\\n        '- Included : ' + [quote.plan === STAY_PLANS.camp ? 'tent pitch' : 'accommodation', ...quote.plan.includes.map(key =\\u003e MEALS[key].label.toLowerCase())].join(', '),\\n        '- Extra meals : ' + (quote.extras.map(key =\\u003e `${MEALS[key].label} (${money(MEALS[key].rate)} \/ adult \/ night ; ${money(MEALS[key].rate \/ 2)} \/ child aged 6\u201312 \/ night)`).join(', ') || 'None'),\\n        '- Activities : ' + (activities.join(' ; ') || 'None'),\\n        '- Estimated total including child discounts : ' + (quote.manualQuote ? 'To be confirmed by the guesthouse' : money(quote.total)),\\n        '- Estimated 30% deposit, after confirmation by the guesthouse : ' + (quote.manualQuote ? 'To confirm' : money(quote.deposit)),\\n        '- Estimated balance on arrival : ' + (quote.manualQuote ? 'To confirm' : money(quote.balance)),\\n        '- Notes \/ children and their ages : ' + messageField('guestNotes', 1000, 'None'),\\n        '', 'Please confirm availability and the quote for our family.',\\n        'This enquiry is not a confirmed reservation.'\\n      ].join('\\\\n');\\n      lastQuoteClick = now;\\n      openWhatsApp(text);\\n    }\\n\\n    window.addEventListener('DOMContentLoaded', () =\\u003e {\\n      const today = todayLocal();\\n      el('checkin').value = today;\\n      el('checkout').value = new Date(parseDay(today) + DAY_MS).toISOString().slice(0, 10);\\n      updateDatesAndCalculate();\\n      switchTab('reservation');\\n    });\\n\\n    \/\/ Recalculer \u00e9galement apr\u00e8s la restauration des champs par le navigateur.\\n    window.addEventListener('pageshow', () =\\u003e {\\n      updateDatesAndCalculate();\\n    });\\n  \\n\\n(function () {\\n  function reportHeight() {\\n    const height = Math.ceil(document.body.getBoundingClientRect().height);\\n    if (height \\u003e 0) parent.postMessage({ type: 'sg-stay-quote-height', height: height }, '*');\\n  }\\n  window.addEventListener('load', reportHeight);\\n  window.addEventListener('resize', reportHeight);\\n  if (window.ResizeObserver) new ResizeObserver(reportHeight).observe(document.body);\\n  if (document.fonts \\u0026\\u0026 document.fonts.ready) document.fonts.ready.then(reportHeight);\\n  requestAnimationFrame(reportHeight);\\n})();\\n\\u003c\/script\\u003e\\u003c\/body\\u003e\\u003c\/html\\u003e\",\"fr\":\"\\u003c!DOCTYPE html\\u003e\\u003chtml lang=\\\"fr\\\"\\u003e\\u003chead\\u003e\\n  \\u003cmeta charset=\\\"UTF-8\\\"\\u003e\\n  \\u003cmeta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\"\\u003e\\n  \\u003ctitle\\u003ePr\u00e9parez votre s\u00e9jour au G\u00eete Skoura\\u003c\/title\\u003e\\n  \\u003cmeta name=\\\"description\\\" content=\\\"Pr\u00e9parez votre s\u00e9jour au G\u00eete Skoura \u00e0 Tikhzanine, Skoura M\u2019Daz : tarifs, randonn\u00e9es dans le Tichoukt et demande de disponibilit\u00e9 par WhatsApp.\\\"\\u003e\\n  \\u003cmeta name=\\\"theme-color\\\" content=\\\"#1b4332\\\"\\u003e\\n  \\u003c!-- Tailwind CSS --\\u003e\\n  \\u003cscript src=\\\"https:\/\/cdn.tailwindcss.com\\\"\\u003e\\u003c\/script\\u003e\\n  \\u003c!-- FontAwesome Icons --\\u003e\\n  \\u003clink rel=\\\"stylesheet\\\" href=\\\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.0\/css\/all.min.css\\\"\\u003e\\n  \\u003c!-- Google Fonts --\\u003e\\n  \\u003clink rel=\\\"preconnect\\\" href=\\\"https:\/\/fonts.googleapis.com\\\"\\u003e\\n  \\u003clink rel=\\\"preconnect\\\" href=\\\"https:\/\/fonts.gstatic.com\\\" crossorigin\\u003e\\n  \\u003clink href=\\\"https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700;800\\u0026amp;family=Playfair+Display:ital,wght@0,600;0,700;1,400\\u0026amp;display=swap\\\" rel=\\\"stylesheet\\\"\\u003e\\n  \\n  \\u003cscript\\u003e\\n    tailwind.config = {\\n      theme: {\\n        extend: {\\n          colors: {\\n            clay: {\\n              50: '#fdf8f6',\\n              100: '#f2e8e5',\\n              200: '#e8d2cb',\\n              600: '#c25e3f',\\n              700: '#a3472a',\\n              800: '#873c24',\\n              900: '#703421',\\n            },\\n            atlas: {\\n              50: '#f2f7f4',\\n              100: '#deebe3',\\n              600: '#2d6a4f',\\n              700: '#1b4332',\\n              800: '#081c15',\\n            },\\n            sand: {\\n              50: '#faf7f2',\\n              100: '#f3ece1',\\n              200: '#e5d7c3',\\n            }\\n          },\\n          fontFamily: {\\n            sans: ['\\\"Plus Jakarta Sans\\\"', 'sans-serif'],\\n            serif: ['\\\"Playfair Display\\\"', 'serif'],\\n          }\\n        }\\n      }\\n    }\\n  \\u003c\/script\\u003e\\n  \\u003cstyle\\u003e\\n    body {\\n      background-color: #faf7f2;\\n      color: #2b2623;\\n    }\\n    .hidden { display: none !important; }\\n    :focus-visible { outline: 3px solid #c25e3f; outline-offset: 3px; }\\n    button:disabled { opacity: .55; cursor: not-allowed; }\\n    input:disabled { cursor: default; }\\n    @media (prefers-reduced-motion: reduce) {\\n      *, *::before, *::after { scroll-behavior: auto !important; transition: none !important; }\\n    }\\n    .glass-card {\\n      background: rgba(255, 255, 255, 0.85);\\n      backdrop-filter: blur(12px);\\n      border: 1px solid rgba(229, 215, 195, 0.5);\\n    }\\n    .custom-scrollbar::-webkit-scrollbar {\\n      width: 6px;\\n    }\\n    .custom-scrollbar::-webkit-scrollbar-track {\\n      background: #f3ece1;\\n    }\\n    .custom-scrollbar::-webkit-scrollbar-thumb {\\n      background: #c25e3f;\\n      border-radius: 4px;\\n    }\\n  \\u003c\/style\\u003e\\n\\u003cstyle\\u003ehtml,body{margin:0!important;padding:0!important;background:transparent!important;min-height:0!important}body{display:block!important}main{padding:12px 0!important;margin:0!important;max-width:none!important}.glass-card{background:#fff}#sec-reservation\\u003ediv{max-width:none!important}#sec-reservation .glass-card{position:static!important;top:auto!important}\\u003c\/style\\u003e\\u003c\/head\\u003e\\n\\u003cbody class=\\\"font-sans antialiased\\\"\\u003e\\u003cmain\\u003e\\u003csection id=\\\"sec-reservation\\\" class=\\\"space-y-8\\\"\\u003e\\n      \\u003cdiv class=\\\"max-w-4xl mx-auto\\\"\\u003e\\n        \\u003cdiv class=\\\"grid grid-cols-1 lg:grid-cols-3 gap-8\\\"\\u003e\\n          \\u003c!-- FORMULARIO --\\u003e\\n          \\u003cdiv class=\\\"lg:col-span-2 glass-card rounded-3xl p-6 sm:p-8 space-y-6 shadow-sm border border-sand-200\\\"\\u003e\\n            \\n            \\u003c!-- Dates Check-in \/ Check-out \\u0026 Personnes --\\u003e\\n            \\u003cdiv class=\\\"space-y-4\\\"\\u003e\\n              \\u003ch3 class=\\\"text-sm font-bold uppercase tracking-wider text-clay-700 flex items-center space-x-2\\\"\\u003e\\n                \\u003ci class=\\\"fa-solid fa-users\\\"\\u003e\\u003c\/i\\u003e\\n                \\u003cspan\\u003e1. Dates de S\u00e9jour \\u0026amp; Participants\\u003c\/span\\u003e\\n              \\u003c\/h3\\u003e\\n              \\u003cdiv class=\\\"grid grid-cols-1 sm:grid-cols-3 gap-4\\\"\\u003e\\n                \\u003cdiv\\u003e\\n                  \\u003clabel for=\\\"checkin\\\" class=\\\"block text-xs font-semibold text-gray-700 mb-1\\\"\\u003eArriv\u00e9e\\u003c\/label\\u003e\\n                  \\u003cinput type=\\\"date\\\" id=\\\"checkin\\\" required onchange=\\\"updateDatesAndCalculate()\\\" class=\\\"w-full px-3 py-2.5 rounded-xl border border-sand-200 bg-white text-sm focus:ring-2 focus:ring-clay-600 focus:outline-none\\\"\\u003e\\n                \\u003c\/div\\u003e\\n                \\u003cdiv\\u003e\\n                  \\u003clabel for=\\\"checkout\\\" class=\\\"block text-xs font-semibold text-gray-700 mb-1\\\"\\u003eD\u00e9part\\u003c\/label\\u003e\\n                  \\u003cinput type=\\\"date\\\" id=\\\"checkout\\\" required onchange=\\\"updateDatesAndCalculate()\\\" class=\\\"w-full px-3 py-2.5 rounded-xl border border-sand-200 bg-white text-sm focus:ring-2 focus:ring-clay-600 focus:outline-none\\\"\\u003e\\n                \\u003c\/div\\u003e\\n                \\u003cdiv\\u003e\\n                  \\u003clabel for=\\\"guests\\\" class=\\\"block text-xs font-semibold text-gray-700 mb-1\\\"\\u003eAdultes et plus de 12 ans\\u003c\/label\\u003e\\n                  \\u003cinput type=\\\"number\\\" id=\\\"guests\\\" value=\\\"2\\\" min=\\\"1\\\" max=\\\"20\\\" step=\\\"1\\\" required oninput=\\\"calculateTotal()\\\" class=\\\"w-full px-3 py-2.5 rounded-xl border border-sand-200 bg-white text-sm focus:ring-2 focus:ring-clay-600 focus:outline-none\\\"\\u003e\\n                \\u003c\/div\\u003e\\n              \\u003c\/div\\u003e\\n              \\u003cdiv class=\\\"grid grid-cols-1 sm:grid-cols-2 gap-4\\\"\\u003e\\n                \\u003cdiv\\u003e\\n                  \\u003clabel for=\\\"children-half\\\" class=\\\"block text-xs font-semibold text-gray-700 mb-1\\\"\\u003eNombre d\u2019enfants de 6 \u00e0 12 ans inclus\\u003c\/label\\u003e\\n                  \\u003cinput type=\\\"number\\\" id=\\\"children-half\\\" value=\\\"0\\\" min=\\\"0\\\" max=\\\"20\\\" step=\\\"1\\\" required oninput=\\\"calculateTotal()\\\" class=\\\"w-full px-3 py-2.5 rounded-xl border border-sand-200 bg-white text-sm focus:ring-2 focus:ring-clay-600 focus:outline-none\\\"\\u003e\\n                  \\u003cp class=\\\"text-xs text-gray-600 mt-1\\\"\\u003eDemi-tarif sur la formule et les repas.\\u003c\/p\\u003e\\n                \\u003c\/div\\u003e\\n                \\u003cdiv\\u003e\\n                  \\u003clabel for=\\\"children-young\\\" class=\\\"block text-xs font-semibold text-gray-700 mb-1\\\"\\u003eNombre d\u2019enfants de moins de 6 ans\\u003c\/label\\u003e\\n                  \\u003cinput type=\\\"number\\\" id=\\\"children-young\\\" value=\\\"0\\\" min=\\\"0\\\" max=\\\"20\\\" step=\\\"1\\\" required oninput=\\\"calculateTotal()\\\" class=\\\"w-full px-3 py-2.5 rounded-xl border border-sand-200 bg-white text-sm focus:ring-2 focus:ring-clay-600 focus:outline-none\\\"\\u003e\\n                  \\u003cp class=\\\"text-xs text-gray-600 mt-1\\\"\\u003eDeux enfants gratuits par famille. Au-del\u00e0 : devis personnalis\u00e9.\\u003c\/p\\u003e\\n                \\u003c\/div\\u003e\\n              \\u003c\/div\\u003e\\n              \\u003cdiv class=\\\"text-xs text-clay-700 font-semibold bg-sand-100 px-3 py-2 rounded-xl inline-block\\\" id=\\\"nights-display\\\"\\u003e\\n                \\u003ci class=\\\"fa-solid fa-moon mr-1\\\"\\u003e\\u003c\/i\\u003e Dur\u00e9e du s\u00e9jour : \\u003cspan id=\\\"nights-count\\\"\\u003e1\\u003c\/span\\u003e nuit(s)\\n              \\u003c\/div\\u003e\\n              \\u003cp class=\\\"text-xs text-gray-600\\\"\\u003eLes r\u00e9ductions enfants sont appliqu\u00e9es au devis. Indiquez leurs \u00e2ges dans les pr\u00e9cisions. Si vous \u00eates plusieurs familles, pr\u00e9cisez-le \u00e9galement.\\u003c\/p\\u003e\\n              \\u003cp id=\\\"family-notice\\\" role=\\\"status\\\" class=\\\"hidden text-sm text-clay-800 bg-clay-50 border border-clay-200 p-3 rounded-xl\\\"\\u003e\\u003c\/p\\u003e\\n              \\u003cp id=\\\"quote-error\\\" role=\\\"alert\\\" class=\\\"hidden text-sm text-red-700 bg-red-50 border border-red-200 p-3 rounded-xl\\\"\\u003e\\u003c\/p\\u003e\\n            \\u003c\/div\\u003e\\n\\n            \\u003chr class=\\\"border-sand-200\\\"\\u003e\\n\\n            \\u003c!-- Type d'H\u00e9bergement --\\u003e\\n            \\u003cdiv class=\\\"space-y-4\\\"\\u003e\\n              \\u003ch3 class=\\\"text-sm font-bold uppercase tracking-wider text-clay-700 flex items-center space-x-2\\\"\\u003e\\n                \\u003ci class=\\\"fa-solid fa-bed\\\"\\u003e\\u003c\/i\\u003e\\n                \\u003cspan\\u003e2. Formule de s\u00e9jour\\u003c\/span\\u003e\\n              \\u003c\/h3\\u003e\\n              \\u003clabel for=\\\"stay-plan\\\" class=\\\"block text-xs font-semibold text-gray-700\\\"\\u003ePrix adulte par personne et par nuit\\u003c\/label\\u003e\\n              \\u003cselect id=\\\"stay-plan\\\" onchange=\\\"calculateTotal()\\\" class=\\\"w-full px-3 py-3 rounded-xl border border-sand-200 bg-white text-sm focus:ring-2 focus:ring-clay-600 focus:outline-none\\\"\\u003e\\n                \\u003coption value=\\\"room\\\"\\u003eH\u00e9bergement seul \u2014 150 DH\\u003c\/option\\u003e\\n                \\u003coption value=\\\"camp\\\"\\u003eCamping \/ emplacement tente \u2014 100 DH\\u003c\/option\\u003e\\n                \\u003coption value=\\\"bb\\\" selected\\u003eChambre avec lit double + petit d\u00e9jeuner \u2014 250 DH\\u003c\/option\\u003e\\n                \\u003coption value=\\\"half\\\"\\u003eDemi-pension \u2014 300 DH\\u003c\/option\\u003e\\n                \\u003coption value=\\\"full\\\"\\u003ePension compl\u00e8te \u2014 350 DH\\u003c\/option\\u003e\\n              \\u003c\/select\\u003e\\n              \\u003cp id=\\\"plan-includes\\\" class=\\\"text-xs text-atlas-700\\\" aria-live=\\\"polite\\\"\\u003eH\u00e9bergement et petit d\u00e9jeuner inclus.\\u003c\/p\\u003e\\n              \\u003cp id=\\\"child-rate\\\" class=\\\"text-xs font-semibold text-clay-700\\\" aria-live=\\\"polite\\\"\\u003eEnfant de 6 \u00e0 12 ans : 125 DH par nuit. Moins de 6 ans : deux enfants gratuits par famille.\\u003c\/p\\u003e\\n            \\u003c\/div\\u003e\\n\\n            \\u003chr class=\\\"border-sand-200\\\"\\u003e\\n\\n            \\u003c!-- Repas Compl\u00e9mentaires --\\u003e\\n            \\u003cdiv class=\\\"space-y-4\\\"\\u003e\\n              \\u003ch3 class=\\\"text-sm font-bold uppercase tracking-wider text-clay-700 flex items-center space-x-2\\\"\\u003e\\n                \\u003ci class=\\\"fa-solid fa-bowl-food\\\"\\u003e\\u003c\/i\\u003e\\n                \\u003cspan\\u003e3. Repas inclus \\u0026amp; suppl\u00e9ments\\u003c\/span\\u003e\\n              \\u003c\/h3\\u003e\\n              \\u003cdiv class=\\\"grid grid-cols-1 sm:grid-cols-2 gap-2\\\"\\u003e\\n                \\u003clabel class=\\\"flex items-center justify-between p-3 rounded-xl bg-white border border-sand-200 text-sm\\\"\\u003e\\n                  \\u003cspan class=\\\"flex items-center space-x-2\\\"\\u003e\\n                    \\u003cinput type=\\\"checkbox\\\" id=\\\"opt-breakfast\\\" value=\\\"50\\\" checked disabled class=\\\"rounded text-clay-600 focus:ring-clay-600\\\"\\u003e\\n                    \\u003cspan class=\\\"font-medium text-gray-700\\\"\\u003ePetit-D\u00e9jeuner\\u003c\/span\\u003e\\n                  \\u003c\/span\\u003e\\n                  \\u003cspan id=\\\"breakfast-price\\\" class=\\\"text-xs font-bold text-clay-700\\\"\\u003eInclus\\u003c\/span\\u003e\\n                \\u003c\/label\\u003e\\n\\n                \\u003clabel class=\\\"flex items-center justify-between p-3 rounded-xl bg-white border border-sand-200 text-sm\\\"\\u003e\\n                  \\u003cspan class=\\\"flex items-center space-x-2\\\"\\u003e\\n                    \\u003cinput type=\\\"checkbox\\\" id=\\\"opt-lunch\\\" value=\\\"100\\\" onchange=\\\"calculateTotal()\\\" class=\\\"rounded text-clay-600 focus:ring-clay-600\\\"\\u003e\\n                    \\u003cspan class=\\\"font-medium text-gray-700\\\"\\u003eD\u00e9jeuner chaud\\u003c\/span\\u003e\\n                  \\u003c\/span\\u003e\\n                  \\u003cspan id=\\\"lunch-price\\\" class=\\\"text-xs font-bold text-clay-700\\\"\\u003e+100 DH \/ pers \/ nuit\\u003c\/span\\u003e\\n                \\u003c\/label\\u003e\\n\\n                \\u003clabel class=\\\"flex items-center justify-between p-3 rounded-xl bg-white border border-sand-200 text-sm\\\"\\u003e\\n                  \\u003cspan class=\\\"flex items-center space-x-2\\\"\\u003e\\n                    \\u003cinput type=\\\"checkbox\\\" id=\\\"opt-dinner\\\" value=\\\"100\\\" onchange=\\\"calculateTotal()\\\" class=\\\"rounded text-clay-600 focus:ring-clay-600\\\"\\u003e\\n                    \\u003cspan class=\\\"font-medium text-gray-700\\\"\\u003eD\u00eener traditionnel\\u003c\/span\\u003e\\n                  \\u003c\/span\\u003e\\n                  \\u003cspan id=\\\"dinner-price\\\" class=\\\"text-xs font-bold text-clay-700\\\"\\u003e+100 DH \/ pers \/ nuit\\u003c\/span\\u003e\\n                \\u003c\/label\\u003e\\n\\n                \\u003clabel class=\\\"flex items-center justify-between p-3 rounded-xl bg-white border border-sand-200 text-sm\\\"\\u003e\\n                  \\u003cspan class=\\\"flex items-center space-x-2\\\"\\u003e\\n                    \\u003cinput type=\\\"checkbox\\\" id=\\\"opt-picnic\\\" value=\\\"80\\\" onchange=\\\"calculateTotal()\\\" class=\\\"rounded text-clay-600 focus:ring-clay-600\\\"\\u003e\\n                    \\u003cspan class=\\\"font-medium text-gray-700\\\"\\u003ePique-nique Trek\\u003c\/span\\u003e\\n                  \\u003c\/span\\u003e\\n                  \\u003cspan class=\\\"text-xs font-bold text-clay-700\\\"\\u003e+80 DH \/ pers \/ nuit\\u003c\/span\\u003e\\n                \\u003c\/label\\u003e\\n              \\u003c\/div\\u003e\\n              \\u003cp class=\\\"text-xs text-gray-600\\\"\\u003e\u00c0 la carte, tarif adulte : petit d\u00e9jeuner 50 DH, d\u00e9jeuner 100 DH, d\u00eener 100 DH. Demi-tarif de 6 \u00e0 12 ans inclus ; gratuit pour les deux enfants de moins de 6 ans. Les suppl\u00e9ments coch\u00e9s sont pr\u00e9vus une fois par nuit et par personne. Pour des repas ponctuels ou un pique-nique \u00e0 la place du d\u00e9jeuner, pr\u00e9cisez votre demande : le g\u00eete adaptera le devis.\\u003c\/p\\u003e\\n            \\u003c\/div\\u003e\\n\\n            \\u003chr class=\\\"border-sand-200\\\"\\u003e\\n\\n            \\u003c!-- Services Treks \\u0026 Guides --\\u003e\\n            \\u003cdiv class=\\\"space-y-4\\\"\\u003e\\n              \\u003ch3 class=\\\"text-sm font-bold uppercase tracking-wider text-clay-700 flex items-center space-x-2\\\"\\u003e\\n                \\u003ci class=\\\"fa-solid fa-person-hiking\\\"\\u003e\\u003c\/i\\u003e\\n                \\u003cspan\\u003e4. Guides \\u0026amp; Mat\u00e9riel de Trekking\\u003c\/span\\u003e\\n              \\u003c\/h3\\u003e\\n              \\u003cdiv class=\\\"space-y-3\\\"\\u003e\\n                \\u003cdiv class=\\\"p-3 rounded-xl bg-white border border-sand-200 text-sm space-y-2\\\"\\u003e\\n                  \\u003clabel class=\\\"flex items-center justify-between cursor-pointer\\\"\\u003e\\n                    \\u003cspan class=\\\"flex items-center space-x-2\\\"\\u003e\\n                      \\u003cinput type=\\\"checkbox\\\" id=\\\"opt-guide\\\" onchange=\\\"calculateTotal()\\\" class=\\\"rounded text-clay-600 focus:ring-clay-600\\\"\\u003e\\n                      \\u003cspan class=\\\"font-medium text-gray-700\\\"\\u003eGuide de Montagne Local\\u003c\/span\\u003e\\n                    \\u003c\/span\\u003e\\n                    \\u003cspan class=\\\"text-xs font-bold text-clay-700\\\"\\u003e200 \u00e0 500 DH \/ groupe \/ jour\\u003c\/span\\u003e\\n                  \\u003c\/label\\u003e\\n                  \\n                  \\u003cdiv id=\\\"guide-select-container\\\" class=\\\"hidden pt-1 pl-6\\\"\\u003e\\n                    \\u003clabel for=\\\"opt-guide-level\\\" class=\\\"block text-xs font-semibold text-gray-600 mb-1\\\"\\u003eCircuit de randonn\u00e9e :\\u003c\/label\\u003e\\n                    \\u003cselect id=\\\"opt-guide-level\\\" onchange=\\\"calculateTotal()\\\" class=\\\"w-full px-3 py-2 rounded-lg border border-sand-200 bg-sand-50 text-xs focus:ring-2 focus:ring-clay-600 focus:outline-none\\\"\\u003e\\n                      \\u003coption value=\\\"200\\\"\\u003eTour des Douars \\u0026amp; Vergers \u2014 200 DH \/ groupe \/ jour\\u003c\/option\\u003e\\n                      \\u003coption value=\\\"300\\\" selected\\u003eCascades de Tadoute \u2014 300 DH \/ groupe \/ jour\\u003c\/option\\u003e\\n                      \\u003coption value=\\\"500\\\"\\u003eAscension du Jebel Tichoukt \u2014 500 DH \/ groupe \/ jour\\u003c\/option\\u003e\\n                    \\u003c\/select\\u003e\\n                    \\u003clabel for=\\\"guide-days\\\" class=\\\"block text-xs font-semibold text-gray-600 mt-3 mb-1\\\"\\u003eNombre de jours avec guide\\u003c\/label\\u003e\\n                    \\u003cinput id=\\\"guide-days\\\" type=\\\"number\\\" value=\\\"1\\\" min=\\\"1\\\" step=\\\"1\\\" required oninput=\\\"calculateTotal()\\\" class=\\\"w-full px-3 py-2 rounded-lg border border-sand-200 bg-sand-50 text-sm\\\"\\u003e\\n                  \\u003c\/div\\u003e\\n                \\u003c\/div\\u003e\\n\\n                \\u003clabel class=\\\"flex items-center justify-between p-3 rounded-xl bg-white border border-sand-200 text-sm\\\"\\u003e\\n                  \\u003cspan class=\\\"flex items-center space-x-2\\\"\\u003e\\n                    \\u003cinput type=\\\"checkbox\\\" id=\\\"opt-mule\\\" value=\\\"100\\\" onchange=\\\"calculateTotal()\\\" class=\\\"rounded text-clay-600 focus:ring-clay-600\\\"\\u003e\\n                    \\u003cspan class=\\\"font-medium text-gray-700\\\"\\u003eMule de portage avec Muletier\\u003c\/span\\u003e\\n                  \\u003c\/span\\u003e\\n                  \\u003cspan class=\\\"text-xs font-bold text-clay-700\\\"\\u003e+100 DH \/ jour\\u003c\/span\\u003e\\n                \\u003c\/label\\u003e\\n                \\u003cdiv id=\\\"mule-days-container\\\" class=\\\"hidden p-3 rounded-xl bg-white border border-sand-200\\\"\\u003e\\n                  \\u003clabel for=\\\"mule-days\\\" class=\\\"block text-xs font-semibold text-gray-600 mb-1\\\"\\u003eNombre de jours avec mule\\u003c\/label\\u003e\\n                  \\u003cinput id=\\\"mule-days\\\" type=\\\"number\\\" value=\\\"1\\\" min=\\\"1\\\" step=\\\"1\\\" required oninput=\\\"calculateTotal()\\\" class=\\\"w-full px-3 py-2 rounded-lg border border-sand-200 bg-sand-50 text-sm\\\"\\u003e\\n                \\u003c\/div\\u003e\\n                \\u003cp id=\\\"trek-status\\\" role=\\\"status\\\" class=\\\"text-xs text-atlas-700\\\"\\u003e\\u003c\/p\\u003e\\n                \\u003cp class=\\\"text-xs text-gray-600\\\"\\u003eGuide factur\u00e9 par groupe, selon les jours choisis. Tarifs des activit\u00e9s et du mat\u00e9riel \u00e0 confirmer avec le g\u00eete.\\u003c\/p\\u003e\\n              \\u003c\/div\\u003e\\n            \\u003c\/div\\u003e\\n\\n            \\u003c!-- Nom \\u0026 Contact --\\u003e\\n            \\u003cdiv class=\\\"space-y-3 pt-2\\\"\\u003e\\n              \\u003clabel for=\\\"guestName\\\" class=\\\"block text-xs font-semibold text-gray-700\\\"\\u003eVotre nom et pr\u00e9nom\\u003c\/label\\u003e\\n              \\u003cinput type=\\\"text\\\" id=\\\"guestName\\\" autocomplete=\\\"name\\\" maxlength=\\\"120\\\" placeholder=\\\"Votre nom\\\" class=\\\"w-full px-3 py-2.5 rounded-xl border border-sand-200 bg-white text-sm focus:ring-2 focus:ring-clay-600 focus:outline-none\\\"\\u003e\\n              \\u003cdiv aria-hidden=\\\"true\\\" style=\\\"position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden\\\"\\u003e\\u003clabel\\u003eWebsite\\u003cinput type=\\\"text\\\" id=\\\"website_check\\\" name=\\\"website_check\\\" tabindex=\\\"-1\\\" autocomplete=\\\"off\\\"\\u003e\\u003c\/label\\u003e\\u003c\/div\\u003e\\n              \\u003clabel for=\\\"guestNotes\\\" class=\\\"block text-xs font-semibold text-gray-700\\\"\\u003ePr\u00e9cisions : enfants et leurs \u00e2ges, repas particuliers, arriv\u00e9e\u2026\\u003c\/label\\u003e\\n              \\u003ctextarea id=\\\"guestNotes\\\" rows=\\\"3\\\" maxlength=\\\"1000\\\" placeholder=\\\"Facultatif\\\" class=\\\"w-full px-3 py-2.5 rounded-xl border border-sand-200 bg-white text-sm focus:ring-2 focus:ring-clay-600 focus:outline-none\\\"\\u003e\\u003c\/textarea\\u003e\\n            \\u003c\/div\\u003e\\n\\n          \\u003c\/div\\u003e\\n\\n          \\u003c!-- SUMMARY CARD --\\u003e\\n          \\u003cdiv class=\\\"lg:col-span-1\\\"\\u003e\\n            \\u003cdiv class=\\\"glass-card rounded-3xl p-6 space-y-6 border border-sand-200 lg:sticky lg:top-40 shadow-lg\\\"\\u003e\\n              \\u003ch3 class=\\\"font-serif text-xl font-bold text-atlas-800 border-b border-sand-200 pb-3\\\"\\u003eR\u00e9capitulatif du S\u00e9jour\\u003c\/h3\\u003e\\n              \\u003cp id=\\\"family-summary\\\" class=\\\"text-xs text-gray-600\\\" aria-live=\\\"polite\\\"\\u003e\\u003c\/p\\u003e\\n              \\n              \\u003cdiv class=\\\"space-y-3 text-sm\\\" id=\\\"summary-details\\\"\\u003e\\n                \\u003cdiv class=\\\"flex justify-between text-gray-600\\\"\\u003e\\n                  \\u003cspan\\u003eFormule de s\u00e9jour :\\u003c\/span\\u003e\\n                  \\u003cspan class=\\\"font-semibold text-atlas-800\\\" id=\\\"sum-room\\\"\\u003e\u2014\\u003c\/span\\u003e\\n                \\u003c\/div\\u003e\\n                \\u003cdiv class=\\\"flex justify-between text-gray-600\\\"\\u003e\\n                  \\u003cspan\\u003eRepas suppl\u00e9mentaires :\\u003c\/span\\u003e\\n                  \\u003cspan class=\\\"font-semibold text-atlas-800\\\" id=\\\"sum-meals\\\"\\u003e0 DH\\u003c\/span\\u003e\\n                \\u003c\/div\\u003e\\n                \\u003cdiv class=\\\"flex justify-between text-gray-600\\\"\\u003e\\n                  \\u003cspan\\u003eGuides \\u0026amp; Mules :\\u003c\/span\\u003e\\n                  \\u003cspan class=\\\"font-semibold text-atlas-800\\\" id=\\\"sum-treks\\\"\\u003e0 DH\\u003c\/span\\u003e\\n                \\u003c\/div\\u003e\\n                \\u003chr class=\\\"border-sand-200 my-2\\\"\\u003e\\n                \\u003cdiv class=\\\"flex justify-between text-base font-bold text-atlas-800\\\"\\u003e\\n                  \\u003cspan\\u003eTotal estim\u00e9 :\\u003c\/span\\u003e\\n                  \\u003cspan aria-live=\\\"polite\\\" class=\\\"text-clay-700 text-xl\\\" id=\\\"sum-total\\\"\\u003e\u2014\\u003c\/span\\u003e\\n                \\u003c\/div\\u003e\\n                \\u003cdiv class=\\\"flex justify-between text-gray-600\\\"\\u003e\\n                  \\u003cspan\\u003eAcompte de 30 % :\\u003c\/span\\u003e\\n                  \\u003cspan id=\\\"sum-deposit\\\" class=\\\"font-semibold text-atlas-800\\\"\\u003e\u2014\\u003c\/span\\u003e\\n                \\u003c\/div\\u003e\\n                \\u003cdiv class=\\\"flex justify-between text-gray-600\\\"\\u003e\\n                  \\u003cspan\\u003eSolde \u00e0 l\u2019arriv\u00e9e :\\u003c\/span\\u003e\\n                  \\u003cspan id=\\\"sum-balance\\\" class=\\\"font-semibold text-atlas-800\\\"\\u003e\u2014\\u003c\/span\\u003e\\n                \\u003c\/div\\u003e\\n              \\u003c\/div\\u003e\\n\\n              \\u003cdiv class=\\\"p-3 bg-clay-50 rounded-xl text-xs text-clay-800 leading-relaxed border border-clay-200\\\"\\u003e\\n                \\u003ci class=\\\"fa-solid fa-circle-info mr-1\\\"\\u003e\\u003c\/i\\u003e\\n                Estimation avec les r\u00e9ductions enfants, sous r\u00e9serve de disponibilit\u00e9 et de validation par le g\u00eete. Les tarifs du guide et de la mule sont ind\u00e9pendants de l\u2019\u00e2ge des participants. Apr\u00e8s notre accord, un acompte de 30 % garantit la r\u00e9servation. Le paiement ne confirme pas automatiquement la r\u00e9servation.\\n              \\u003c\/div\\u003e\\n\\n              \\u003cbutton id=\\\"send-quote\\\" onclick=\\\"sendWhatsAppBooking()\\\" class=\\\"w-full py-3.5 px-4 bg-emerald-600 hover:bg-emerald-700 text-white font-bold rounded-2xl shadow-lg shadow-emerald-600\/20 transition flex items-center justify-center space-x-2 text-sm active:scale-95\\\"\\u003e\\n                \\u003ci class=\\\"fa-brands fa-whatsapp text-lg\\\"\\u003e\\u003c\/i\\u003e\\n                \\u003cspan\\u003eEnvoyer ma demande sur WhatsApp\\u003c\/span\\u003e\\n              \\u003c\/button\\u003e\\n            \\u003c\/div\\u003e\\n          \\u003c\/div\\u003e\\n        \\u003c\/div\\u003e\\n      \\u003c\/div\\u003e\\n    \\u003c\/section\\u003e\\n\\n    \\u003c\/main\\u003e\\u003cscript\\u003e\\n    const STAY_PLANS = {\\n      room: { label: 'H\u00e9bergement seul', rate: 150, includes: [] },\\n      camp: { label: 'Camping \/ emplacement tente', rate: 100, includes: [] },\\n      bb: { label: 'Chambre avec lit double + petit d\u00e9jeuner', rate: 250, includes: ['breakfast'] },\\n      half: { label: 'Demi-pension', rate: 300, includes: ['breakfast', 'dinner'] },\\n      full: { label: 'Pension compl\u00e8te', rate: 350, includes: ['breakfast', 'lunch', 'dinner'] }\\n    };\\n    const MEALS = {\\n      breakfast: { label: 'Petit d\u00e9jeuner', rate: 50 },\\n      lunch: { label: 'D\u00e9jeuner', rate: 100 },\\n      dinner: { label: 'D\u00eener', rate: 100 },\\n      picnic: { label: 'Pique-nique trek', rate: 80 }\\n    };\\n    const EXTRA_SELECTIONS = { breakfast: false, lunch: false, dinner: false, picnic: false };\\n    const TREKS = {\\n      200: 'Tour des Douars \\u0026 Vergers',\\n      300: 'Cascades de Tadoute',\\n      500: 'Ascension du Jebel Tichoukt'\\n    };\\n    const DAY_MS = 86400000;\\n    const el = id =\\u003e document.getElementById(id);\\n    const money = amount =\\u003e new Intl.NumberFormat('fr-FR', { maximumFractionDigits: 2 }).format(amount) + ' DH';\\n\\n    function switchTab() {}\\n\\n    \/\/ Dates civiles : le nombre de nuits ne d\u00e9pend pas des changements d\u2019heure.\\n    function todayLocal() {\\n      const date = new Date();\\n      return [date.getFullYear(), String(date.getMonth() + 1).padStart(2, '0'), String(date.getDate()).padStart(2, '0')].join('-');\\n    }\\n\\n    function parseDay(value) {\\n      if (!\/^\\\\d{4}-\\\\d{2}-\\\\d{2}$\/.test(value)) return NaN;\\n      const [year, month, day] = value.split('-').map(Number);\\n      const stamp = Date.UTC(year, month - 1, day);\\n      return new Date(stamp).toISOString().slice(0, 10) === value ? stamp : NaN;\\n    }\\n\\n    function getNightsCount() {\\n      const difference = (parseDay(el('checkout').value) - parseDay(el('checkin').value)) \/ DAY_MS;\\n      return Number.isInteger(difference) \\u0026\\u0026 difference \\u003e 0 ? difference : 0;\\n    }\\n\\n    function positiveInteger(id, maximum) {\\n      const value = el(id).value.trim();\\n      const number = Number(value);\\n      return \/^\\\\d+$\/.test(value) \\u0026\\u0026 Number.isSafeInteger(number) \\u0026\\u0026 number \\u003e= 1 \\u0026\\u0026 number \\u003c= maximum ? number : NaN;\\n    }\\n\\n    function childCount(id) {\\n      const value = el(id).value.trim();\\n      const number = Number(value);\\n      return \/^\\\\d+$\/.test(value) \\u0026\\u0026 Number.isSafeInteger(number) \\u0026\\u0026 number \\u003e= 0 \\u0026\\u0026 number \\u003c= 20 ? number : NaN;\\n    }\\n\\n    function syncIncludedMeals() {\\n      const plan = STAY_PLANS[el('stay-plan').value];\\n      if (!plan) return;\\n      for (const [key, meal] of Object.entries(MEALS)) {\\n        const input = el(`opt-${key}`);\\n        if (!input.disabled) EXTRA_SELECTIONS[key] = input.checked;\\n        const included = plan.includes.includes(key);\\n        input.checked = included || EXTRA_SELECTIONS[key];\\n        input.disabled = included;\\n        const priceLabel = el(`${key}-price`);\\n        if (priceLabel) priceLabel.textContent = included ? 'Inclus' : `+${meal.rate} DH \/ pers \/ nuit`;\\n      }\\n      el('plan-includes').textContent = 'Inclus : ' + [el('stay-plan').value === 'camp' ? 'emplacement de camping' : 'h\u00e9bergement', ...plan.includes.map(key =\\u003e MEALS[key].label.toLowerCase())].join(', ') + '.';\\n      el('child-rate').textContent = `Enfant de 6 \u00e0 12 ans : ${money(plan.rate \/ 2)} par nuit. Moins de 6 ans : deux enfants gratuits par famille.`;\\n    }\\n\\n    function getQuote() {\\n      const plan = STAY_PLANS[el('stay-plan').value];\\n      const nights = getNightsCount();\\n      const guests = positiveInteger('guests', 20);\\n      const childrenHalf = childCount('children-half');\\n      const childrenYoung = childCount('children-young');\\n      if (!Number.isFinite(parseDay(el('checkin').value)) || !Number.isFinite(parseDay(el('checkout').value))) {\\n        return { error: 'Veuillez renseigner les dates d\u2019arriv\u00e9e et de d\u00e9part.' };\\n      }\\n      if (el('checkin').value \\u003c todayLocal()) return { error: 'La date d\u2019arriv\u00e9e ne peut pas \u00eatre pass\u00e9e.' };\\n      if (!nights) return { error: 'Le d\u00e9part doit \u00eatre apr\u00e8s l\u2019arriv\u00e9e, avec au moins une nuit.' };\\n      if (!Number.isFinite(guests)) return { error: 'Indiquez un nombre entier de personnes entre 1 et 20. Au-del\u00e0, contactez le g\u00eete.' };\\n      if (!Number.isFinite(childrenHalf) || !Number.isFinite(childrenYoung)) return { error: 'Indiquez un nombre entier d\u2019enfants entre 0 et 20 dans chaque cat\u00e9gorie.' };\\n      if (!plan) return { error: 'Veuillez choisir une formule de s\u00e9jour.' };\\n\\n      const guideDays = el('opt-guide').checked ? positiveInteger('guide-days', nights + 1) : 0;\\n      const muleDays = el('opt-mule').checked ? positiveInteger('mule-days', nights + 1) : 0;\\n      if (!Number.isFinite(guideDays) || !Number.isFinite(muleDays)) {\\n        return { error: 'Pour le guide et la mule, indiquez un nombre entier de jours, entre 1 et le nombre de jours du s\u00e9jour.' };\\n      }\\n      const guideRate = Number(el('opt-guide-level').value);\\n      if (guideDays \\u0026\\u0026 !Object.hasOwn(TREKS, guideRate)) return { error: 'Veuillez choisir un circuit pour le guide.' };\\n      const extras = Object.keys(MEALS).filter(key =\\u003e el(`opt-${key}`).checked \\u0026\\u0026 !plan.includes.includes(key));\\n      const payingEquivalent = guests + childrenHalf \/ 2;\\n      const manualQuote = childrenYoung \\u003e 2;\\n      const room = plan.rate * payingEquivalent * nights;\\n      const meals = extras.reduce((total, key) =\\u003e total + MEALS[key].rate * payingEquivalent * nights, 0);\\n      const treks = (guideDays ? guideRate * guideDays : 0) + 100 * muleDays;\\n      const total = room + meals + treks;\\n      const deposit = Math.round(total * 30) \/ 100;\\n      return {\\n        plan, nights, guests, childrenHalf, childrenYoung, manualQuote,\\n        people: guests + childrenHalf + childrenYoung,\\n        guideDays, guideRate, muleDays, extras,\\n        room: manualQuote ? null : room, meals: manualQuote ? null : meals,\\n        treks: manualQuote ? null : treks, total: manualQuote ? null : total,\\n        deposit: manualQuote ? null : deposit, balance: manualQuote ? null : total - deposit\\n      };\\n    }\\n\\n    function calculateTotal() {\\n      syncIncludedMeals();\\n      el('guide-select-container').classList.toggle('hidden', !el('opt-guide').checked);\\n      el('mule-days-container').classList.toggle('hidden', !el('opt-mule').checked);\\n      el('nights-count').textContent = getNightsCount() || '\u2014';\\n      const quote = getQuote();\\n      const selectedGuideRate = Number(el('opt-guide-level').value);\\n      el('trek-status').textContent = el('opt-guide').checked \\u0026\\u0026 Object.hasOwn(TREKS, selectedGuideRate)\\n        ? `Circuit s\u00e9lectionn\u00e9 : ${TREKS[selectedGuideRate]} \u2014 ${selectedGuideRate} DH par groupe et par jour.` : '';\\n      el('quote-error').textContent = quote.error || '';\\n      el('quote-error').classList.toggle('hidden', !quote.error);\\n      el('send-quote').disabled = Boolean(quote.error);\\n      el('family-notice').classList.toggle('hidden', !quote.manualQuote);\\n      el('family-notice').textContent = quote.manualQuote\\n        ? 'Pour plus de deux enfants de moins de 6 ans, le g\u00eete doit confirmer le tarif selon la composition des familles. Pr\u00e9cisez le nombre de familles et les \u00e2ges des enfants dans votre message. Vous pouvez envoyer votre demande ; le montant et l\u2019acompte seront confirm\u00e9s par le g\u00eete.' : '';\\n      el('family-summary').textContent = quote.error ? ''\\n        : `${quote.people} personne(s) : ${quote.guests} au tarif adulte, ${quote.childrenHalf} enfant(s) de 6 \u00e0 12 ans \u00e0 demi-tarif et ${quote.childrenYoung} enfant(s) de moins de 6 ans${quote.manualQuote ? ' \u2014 devis personnalis\u00e9' : ' gratuits (maximum deux par famille)'}.`;\\n      for (const key of ['room', 'meals', 'treks', 'total', 'deposit', 'balance']) {\\n        el(`sum-${key}`).textContent = quote.error ? '\u2014' : quote.manualQuote ? '\u00c0 confirmer' : money(quote[key]);\\n      }\\n      return quote.error ? null : quote;\\n    }\\n\\n    function updateDatesAndCalculate() {\\n      el('checkin').min = todayLocal();\\n      const arrival = parseDay(el('checkin').value);\\n      el('checkout').min = Number.isFinite(arrival) ? new Date(arrival + DAY_MS).toISOString().slice(0, 10) : todayLocal();\\n      return calculateTotal();\\n    }\\n\\n    function addTrekToBooking(trekName, guideFee) {\\n      const fee = Number(guideFee);\\n      if (!Object.hasOwn(TREKS, fee)) return;\\n      el('opt-guide').checked = true;\\n      el('opt-guide-level').value = String(fee);\\n      el('guide-days').value = '1';\\n      el('trek-status').textContent = `Circuit s\u00e9lectionn\u00e9 : ${TREKS[fee]} \u2014 ${fee} DH par groupe et par jour. Un jour de guide a \u00e9t\u00e9 ajout\u00e9.`;\\n      switchTab('reservation');\\n      calculateTotal();\\n    }\\n\\n    function openWhatsApp(text) {\\n      window.open('https:\/\/wa.me\/212670357170?text=' + encodeURIComponent(text), '_blank', 'noopener,noreferrer');\\n    }\\n\\n    function openWhatsAppContact() {\\n      openWhatsApp('Bonjour G\u00eete Skoura, je souhaite obtenir des renseignements sur un s\u00e9jour ou une activit\u00e9.');\\n    }\\n\\n    function messageField(id, maxLength, fallback) {\\n      const value = el(id).value.replace(\/[\\\\u0000-\\\\u001f\\\\u007f-\\\\u009f\\\\u202a-\\\\u202e\\\\u2066-\\\\u2069]\/g, ' ').replace(\/\\\\s+\/g, ' ').trim().slice(0, maxLength);\\n      return value || fallback;\\n    }\\n\\n    let lastQuoteClick = 0;\\n\\n    function sendWhatsAppBooking() {\\n      if (el('website_check').value.trim()) return;\\n      const now = Date.now();\\n      if (now - lastQuoteClick \\u003c 3000) return;\\n      const quote = calculateTotal();\\n      if (!quote) { switchTab('reservation'); return; }\\n      const activities = [];\\n      if (quote.guideDays) activities.push(`${TREKS[quote.guideRate]} : guide ${money(quote.guideRate)} \/ groupe \/ jour \u00d7 ${quote.guideDays} jour(s)`);\\n      if (quote.muleDays) activities.push(`Mule avec muletier : 100 DH \/ jour \u00d7 ${quote.muleDays} jour(s)`);\\n      const text = [\\n        'Bonjour G\u00eete Skoura,', '',\\n        'Je souhaite conna\u00eetre la disponibilit\u00e9 pour ce s\u00e9jour :',\\n        '- Nom : ' + messageField('guestName', 120, 'Voyageur'),\\n        '- Arriv\u00e9e : ' + el('checkin').value,\\n        '- D\u00e9part : ' + el('checkout').value,\\n        `- Dur\u00e9e : ${quote.nights} nuit(s)`,\\n        `- Nombre total de personnes : ${quote.people}`,\\n        `- Adultes et plus de 12 ans : ${quote.guests}`,\\n        `- Enfants de 6 \u00e0 12 ans inclus : ${quote.childrenHalf} \u2014 demi-tarif`,\\n        `- Enfants de moins de 6 ans : ${quote.childrenYoung}${quote.manualQuote ? ' \u2014 composition des familles et tarif \u00e0 confirmer' : ' \u2014 gratuits (deux maximum par famille)'}`,\\n        `- Formule : ${quote.plan.label} \u2014 ${money(quote.plan.rate)} \/ adulte \/ nuit`,\\n        `- Tarif enfant de 6 \u00e0 12 ans : ${money(quote.plan.rate \/ 2)} \/ enfant \/ nuit`,\\n        '- Inclus : ' + [quote.plan === STAY_PLANS.camp ? 'emplacement de camping' : 'h\u00e9bergement', ...quote.plan.includes.map(key =\\u003e MEALS[key].label.toLowerCase())].join(', '),\\n        '- Repas suppl\u00e9mentaires : ' + (quote.extras.map(key =\\u003e `${MEALS[key].label} (${money(MEALS[key].rate)} \/ adulte \/ nuit ; ${money(MEALS[key].rate \/ 2)} \/ enfant de 6 \u00e0 12 ans \/ nuit)`).join(', ') || 'Aucun'),\\n        '- Activit\u00e9s : ' + (activities.join(' ; ') || 'Aucune'),\\n        '- Total estim\u00e9, r\u00e9ductions enfants incluses : ' + (quote.manualQuote ? '\u00c0 confirmer par le g\u00eete' : money(quote.total)),\\n        '- Acompte estim\u00e9 de 30 %, apr\u00e8s validation par le g\u00eete : ' + (quote.manualQuote ? '\u00c0 confirmer' : money(quote.deposit)),\\n        '- Solde estim\u00e9 \u00e0 l\u2019arriv\u00e9e : ' + (quote.manualQuote ? '\u00c0 confirmer' : money(quote.balance)),\\n        '- Pr\u00e9cisions \/ enfants et leurs \u00e2ges : ' + messageField('guestNotes', 1000, 'Aucune'),\\n        '', 'Merci de confirmer la disponibilit\u00e9 et le devis selon la composition de notre famille.',\\n        'Cette demande ne constitue pas une r\u00e9servation confirm\u00e9e.'\\n      ].join('\\\\n');\\n      lastQuoteClick = now;\\n      openWhatsApp(text);\\n    }\\n\\n    window.addEventListener('DOMContentLoaded', () =\\u003e {\\n      const today = todayLocal();\\n      el('checkin').value = today;\\n      el('checkout').value = new Date(parseDay(today) + DAY_MS).toISOString().slice(0, 10);\\n      updateDatesAndCalculate();\\n      switchTab('reservation');\\n    });\\n\\n    \/\/ Recalculer \u00e9galement apr\u00e8s la restauration des champs par le navigateur.\\n    window.addEventListener('pageshow', () =\\u003e {\\n      updateDatesAndCalculate();\\n    });\\n  \\n\\n(function () {\\n  function reportHeight() {\\n    const height = Math.ceil(document.body.getBoundingClientRect().height);\\n    if (height \\u003e 0) parent.postMessage({ type: 'sg-stay-quote-height', height: height }, '*');\\n  }\\n  window.addEventListener('load', reportHeight);\\n  window.addEventListener('resize', reportHeight);\\n  if (window.ResizeObserver) new ResizeObserver(reportHeight).observe(document.body);\\n  if (document.fonts \\u0026\\u0026 document.fonts.ready) document.fonts.ready.then(reportHeight);\\n  requestAnimationFrame(reportHeight);\\n})();\\n\\u003c\/script\\u003e\\u003c\/body\\u003e\\u003c\/html\\u003e\"}<\/script>\n<script>(function(){\nconst host=document.getElementById('sg-stay-planner');\nif(!host||host.dataset.mounted)return;\nhost.dataset.mounted='yes';\nconst frame=document.getElementById('sg-stay-quote-frame');\nconst docs=JSON.parse(document.getElementById('sg-stay-quote-documents').textContent);\nconst languageButtons=host.querySelectorAll('[data-quote-language]');\nfunction chooseLanguage(language){\n if(!Object.prototype.hasOwnProperty.call(docs,language))return;\n host.dataset.language=language;\n frame.title=language==='fr'?'Devis de s\u00e9jour G\u00eete Skoura':'G\u00eete Skoura stay quote';\n languageButtons.forEach(function(button){button.setAttribute('aria-pressed',String(button.dataset.quoteLanguage===language));});\n frame.srcdoc=docs[language];\n}\nlanguageButtons.forEach(function(button){button.addEventListener('click',function(){chooseLanguage(button.dataset.quoteLanguage);});});\nwindow.addEventListener('message',function(event){\n if(event.source!==frame.contentWindow||!event.data||event.data.type!=='sg-stay-quote-height')return;\n const height=Number(event.data.height);\n if(Number.isFinite(height)&&height>0&&height<15000)frame.style.height=Math.ceil(height+8)+'px';\n});\nchooseLanguage((document.documentElement.lang||'en').toLowerCase().startsWith('fr')?'fr':'en');\n})();<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Estimate your G\u00eete Skoura stay with child discounts, meals and guided activities, then request availability on WhatsApp.<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"no-title","meta":{"_monsterinsights_skip_tracking":false,"footnotes":""},"class_list":["post-745","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/skouragite.com\/fr\/wp-json\/wp\/v2\/pages\/745","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/skouragite.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/skouragite.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/skouragite.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/skouragite.com\/fr\/wp-json\/wp\/v2\/comments?post=745"}],"version-history":[{"count":6,"href":"https:\/\/skouragite.com\/fr\/wp-json\/wp\/v2\/pages\/745\/revisions"}],"predecessor-version":[{"id":787,"href":"https:\/\/skouragite.com\/fr\/wp-json\/wp\/v2\/pages\/745\/revisions\/787"}],"wp:attachment":[{"href":"https:\/\/skouragite.com\/fr\/wp-json\/wp\/v2\/media?parent=745"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}