{"id":3047,"date":"2025-05-24T11:36:21","date_gmt":"2025-05-24T09:36:21","guid":{"rendered":"https:\/\/www.smartmariage.com\/?page_id=3047"},"modified":"2025-06-11T12:51:29","modified_gmt":"2025-06-11T10:51:29","slug":"offre","status":"publish","type":"page","link":"https:\/\/www.smartmariage.com\/en\/offre\/","title":{"rendered":"Offre"},"content":{"rendered":"<div class=\"wpb-content-wrapper\"><div class=\"vc_row wpb_row vc_row-fluid vc_custom_1749230004103 vc_row-has-fill vc_column-gap-0\"><div class=\"wpb_column vc_column_container vc_col-sm-4 occ-477505 vc_col-has-fill\"><div class=\"vc_column-inner vc_custom_1748519421139\"><div class=\"wpb_wrapper\"><div id=\"tile-with-icon_icon5518\" class=\"title-with-icon-wrapper rectangle medium\" data-color=\"\">\r\n\t\t\t<div class=\"wpb_content_element title-with-icon clearfix margin-bottom-0\"><span  style=\"color:#000000 !important;background-color: !important;\" class=\"oic-fi3-calendar rectangle medium\" ><\/span><h3 class=\"content-color\" style=\"\">En totale autonomie!<\/h3>\r\n\t\t\t<\/div><div class=\"wpb_content_element left-cs title-with-icon-content medium clearfix\" style=\"\">Nos aides gratuites!<\/div><\/div>\n\t<div class=\"wpb_text_column wpb_content_element\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<p>Parce qu\u2019un bon d\u00e9part fait toute la diff\u00e9rence, nous vous offrons des ressources pr\u00e9cieuses pour vous aider \u00e0 organiser votre mariage, m\u00eame si vous n\u2019optez pas (encore) pour l\u2019une de nos formules :<\/p>\n\n\t\t<\/div>\n\t<\/div>\n\n\t<div class=\"wpb_text_column wpb_content_element vc_custom_1748968612035\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<p><strong data-start=\"351\" data-end=\"381\">\ud83d\udcde Appel d\u00e9couverte offert<\/strong><br data-start=\"381\" data-end=\"384\" \/>Un \u00e9change de 15 \u00e0 20 minutes pour parler de votre projet, \u00e9voquer les grandes lignes, les incontournables\u2026 et surtout \u00e9viter les pi\u00e8ges classiques. Un premier pas serein vers l\u2019organisation de votre grand jour.<\/p>\n\n\t\t<\/div>\n\t<\/div>\n<div class=\"msf-bootstrap\">\n    <button\n        type=\"button\"\n        class=\"generic-button generic-button-opacity\"\n        data-bs-toggle=\"modal\"\n        data-bs-target=\"#msf_69ff3e9acf2d2_modal\"\n    >\n        Planifier l&#039;appel maintenant!    <\/button>\n    <div class=\"msf-bootstrap\" id=\"msf_69ff3e9acf2d2_modal_wrapper\">\n    <div\n        class=\"modal fade\"\n        id=\"msf_69ff3e9acf2d2_modal\"\n        tabindex=\"-1\"\n        aria-labelledby=\"msf_69ff3e9acf2d2Label\"\n        aria-hidden=\"true\"\n    >\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"msf_69ff3e9acf2d2Label\">\n                        Appel D\u00e9couverte                    <\/h5>\n                    <button\n                        type=\"button\"\n                        class=\"btn-close\"\n                        data-bs-dismiss=\"modal\"\n                        aria-label=\"Close\"\n                    ><\/button>\n                <\/div>\n                <div class=\"modal-body\">\n                    <div class=\"yu-ms-form mb-3\">\n                        <div id=\"msf_69ff3e9acf2d2\"><\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n<\/div>\n<script>\ndocument.addEventListener('DOMContentLoaded', function () {\n    \/\/ Move modal to <body>\n    const modal = document.getElementById(\"msf_69ff3e9acf2d2_modal_wrapper\");\n    if (modal && modal.parentElement !== document.body) {\n        document.body.prepend(modal);\n    }\n\n    Formio.createForm(\n        document.getElementById('msf_69ff3e9acf2d2'),\n        {\"display\":\"wizard\",\"type\":\"form\",\"components\":[{\"type\":\"panel\",\"title\":\"Coordonn\\u00e9es\",\"key\":\"step1\",\"components\":[{\"label\":\"Nom complet\",\"key\":\"fullName\",\"type\":\"textfield\",\"input\":true,\"validate\":{\"required\":true,\"customMessage\":\"Ce champ est obligatoire\"},\"tableView\":true},{\"label\":\"T\\u00e9l\\u00e9phone\",\"key\":\"phone\",\"type\":\"textfield\",\"inputMask\":\"+33 9 99 99 99 99\",\"input\":true,\"validate\":{\"required\":true,\"pattern\":\"^\\\\+33\\\\s[1-9](\\\\s\\\\d{2}){4}$\",\"customMessage\":\"Entrez un num\\u00e9ro fran\\u00e7ais valide, ex: +33 6 12 34 56 78\"},\"placeholder\":\"+33 6 12 34 56 78\",\"tableView\":true},{\"label\":\"Email\",\"key\":\"email\",\"type\":\"email\",\"input\":true,\"validate\":{\"required\":true,\"customMessage\":\"Ce champ est obligatoire\"},\"tableView\":true}],\"input\":false,\"tableView\":false,\"label\":\"Panel\"},{\"type\":\"panel\",\"title\":\"Rendez-vous\",\"key\":\"step2\",\"components\":[{\"label\":\"Souhaitez-vous un appel ?\",\"optionsLabelPosition\":\"right\",\"inline\":true,\"tableView\":false,\"values\":[{\"label\":\"Appeler maintenant\",\"value\":\"now\",\"shortcut\":\"\"},{\"label\":\"Planifier plus tard\",\"value\":\"planned\",\"shortcut\":\"\"}],\"validate\":{\"required\":true,\"customMessage\":\"Merci de choisir!\"},\"validateWhenHidden\":true,\"key\":\"calltime\",\"customConditional\":\"show = (new Date().getHours() >= 8 && new Date().getHours() <= 19)\",\"type\":\"radio\",\"input\":true},{\"label\":\"Choisissez une date et heure\",\"format\":\"dd\\\/MM\\\/yyyy\",\"tableView\":false,\"datePicker\":{\"disableFunction\":\"date < new Date(new Date().setHours(0,0,0,0)) || (date.toDateString() === new Date().toDateString() && new Date().getHours() >= 19)\",\"disableWeekends\":false,\"disableWeekdays\":false},\"enableTime\":false,\"timePicker\":{\"showMeridian\":false},\"validate\":{\"required\":true,\"custom\":\"valid = (data.calltime === 'planned') ? input !== '' : true;\",\"customMessage\":\"Merci de pr\\u00e9ciser le jour si vous planifiez plus tard.\"},\"validateWhenHidden\":false,\"errorLabel\":\"Merci de pr\\u00e9ciser le jour\",\"key\":\"plannedDate\",\"customConditional\":\"show = data.calltime === 'planned' || (new Date().getHours() < 8 || new Date().getHours() >= 19);\",\"type\":\"datetime\",\"input\":true,\"widget\":{\"type\":\"calendar\",\"displayInTimezone\":\"viewer\",\"locale\":\"en\",\"useLocaleSettings\":false,\"allowInput\":true,\"mode\":\"single\",\"enableTime\":false,\"noCalendar\":false,\"format\":\"dd\\\/MM\\\/yyyy\",\"hourIncrement\":1,\"minuteIncrement\":1,\"time_24hr\":true,\"minDate\":null,\"disableWeekends\":false,\"disableWeekdays\":false,\"disableFunction\":\"date < new Date(new Date().setHours(0,0,0,0)) || (date.toDateString() === new Date().toDateString() && new Date().getHours() >= 19)\",\"maxDate\":null}},{\"label\":\"Heure\",\"widget\":\"html5\",\"tableView\":true,\"dataSrc\":\"custom\",\"data\":{\"custom\":\"const planned = moment(data.plannedDate);\\nconst now = moment();\\n\\nconst first = moment.max(\\n\\tmoment().minute() < 30 ? now.clone().minute(30).second(0) : now.clone().add(1, 'hour').minute(0).second(0),\\n\\tplanned.clone().hour(9).minute(0).second(0)\\n\\t);\\n\\nconst isToday = planned.isSame(now, 'day');\\nconst start = isToday \\n  ? first\\n  : planned.clone().hour(9).minute(0).second(0);\\n\\nconst end = planned.clone().hour(19).minute(0).second(0);\\n\\nvalues = [];\\nwhile (start.isSameOrBefore(end)) {\\n  values.push({ label: start.format(\\\"HH:mm\\\"), value: start.format(\\\"HH:mm\\\") });\\n  start.add(30, 'minutes');\\n}\"},\"validate\":{\"required\":true,\"customMessage\":\"Merci de choisir un cr\\u00e9neau horaire.\",\"custom\":\"valid = (data.calltime === 'planned') ? input !== '' : true;\"},\"validateWhenHidden\":false,\"key\":\"slot\",\"customConditional\":\"if (!data.plannedDate) {\\n  show = false;\\n} else {\\n  const planned = new Date(data.plannedDate);\\n  const now = new Date();\\n  \\n  planned.setHours(0, 0, 0, 0);\\n  now.setHours(0, 0, 0, 0);\\n  \\n  const isToday = planned.getTime() === now.getTime();\\n  const isFuture = planned > now;\\n  const isTodayBefore19h = isToday && (new Date().getHours() <= 19);\\n\\n  show = isFuture || isTodayBefore19h;\\n}\",\"type\":\"select\",\"input\":true},{\"label\":\"Cr\\u00e9neau s\\u00e9lectionn\\u00e9\",\"key\":\"appointment\",\"type\":\"hidden\",\"calculateValue\":\"if (data.calltime === 'now') {\\n  value = moment().format();\\n} else if (data.plannedDate && data.slot && data.slot.value) {\\n  const datePart = moment(data.plannedDate).format('YYYY-MM-DD');\\n  value = moment(`${datePart}T${data.slot.value}`).format();\\n} else {\\n  value = '';\\n}\",\"persistent\":true},{\"label\":\"Cr\\u00e9neau format\\u00e9\",\"key\":\"appointment_formatted\",\"type\":\"hidden\",\"calculateValue\":\"if (data.appointment) {\\n  const months = ['janvier', 'f\\u00e9vrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'ao\\u00fbt', 'septembre', 'octobre', 'novembre', 'd\\u00e9cembre'];\\n  const m = moment(data.appointment);\\n  const day = m.date();\\n  const month = months[m.month()];\\n  const year = m.year();\\n  const hour = m.format('HH');\\n  const minute = m.format('mm');\\n  value = `le ${day} ${month} ${year} &agrave; ${hour}h${minute}`;\\n} else {\\n  value = '';\\n}\",\"persistent\":true}],\"input\":false,\"tableView\":false,\"label\":\"Panel\"},{\"title\":\"Confirmation\",\"breadcrumbClickable\":true,\"buttonSettings\":{\"previous\":true,\"cancel\":true,\"next\":true},\"navigateOnEnter\":false,\"saveOnEnter\":false,\"scrollToTop\":false,\"collapsible\":false,\"key\":\"step3\",\"type\":\"panel\",\"label\":\"Panel\",\"components\":[{\"label\":\"\\u00c0 quelle saison souhaitez-vous c\\u00e9l\\u00e9brer votre mariage ?\",\"key\":\"season\",\"type\":\"radio\",\"input\":true,\"inline\":false,\"values\":[{\"label\":\"<i class='bi bi-sun'><\\\/i> \\u00c9t\\u00e9\",\"value\":\"ete\"},{\"label\":\"<i class='bi bi-snow'><\\\/i> Hiver\",\"value\":\"hiver\"},{\"label\":\"<i class='bi bi-flower1'><\\\/i> Printemps\",\"value\":\"printemps\"},{\"label\":\"<i class='bi bi-cloud-drizzle'><\\\/i> Automne\",\"value\":\"automne\"},{\"label\":\"<i class='bi bi-question-circle'><\\\/i> Non connu\",\"value\":\"nonconnu\"}],\"validate\":{\"required\":true,\"customMessage\":\"Merci de choisir!\"},\"customClass\":\"d-flex flex-wrap gap-2\",\"template\":\"<label class='btn btn-outline-primary btn-check-label'>{{ item.label }}<\\\/label>\",\"tableView\":false}],\"input\":false,\"tableView\":false}]},\n        {\n            language: 'fr',\n            i18n: {\n                fr:{\n                    next:\"suivant\",\n                    cancel: \"annuler\",\n                    previous: \"pr\u00e9c\u00e9dent\",\n                    submit: 'Envoyer',\n                    required: ''\n                }\n            }\n        }\n    ).then(function(form) {\n        form.on('submit', function(submission) {\n            const modalBody = document.querySelector('#msf_69ff3e9acf2d2_modal .modal-body');\n            const modalHeader = document.querySelector('#msf_69ff3e9acf2d2_modal .modal-header');\n            if (modalHeader) modalHeader.remove();\n            if (modalBody) {\n                modalBody.innerHTML = `\n                    <div class=\"text-center py-5\">\n                        <div class=\"spinner-border text-primary mb-4\" role=\"status\" style=\"width: 4rem; height: 4rem;\">\n                            <span class=\"visually-hidden\">Loading...<\/span>\n                        <\/div>\n                        <p class=\"lead\">Enregistrement en cours...<\/p>\n                    <\/div>\n                `;\n            }\n\n            fetch('https:\/\/www.smartmariage.com\/wp-admin\/admin-ajax.php', {\n                method: 'POST',\n                headers: {\n                    'Content-Type': 'application\/x-www-form-urlencoded'\n                },\n                body: new URLSearchParams({\n                    action:       'msf_handle_form',\n                    data:         JSON.stringify(submission.data),\n                    widget_ref:   'msf_69ff3e9acf2d2'\n                })\n            })\n            .then(res => res.json())\n            .then(response => {\n                if (modalBody) {\n                    let seconds = 5;\n                    modalBody.innerHTML = `\n                        <div class=\"text-center py-5\">\n                            <div class=\"text-success mb-4\" style=\"font-size: 4rem;\">\n                                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"64\" height=\"64\" fill=\"currentColor\" class=\"bi bi-check-circle-fill\" viewBox=\"0 0 16 16\">\n                                    <path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM6.97 10.03a.75.75 0 0 0 1.07 0l3.992-3.992a.75.75 0 1 0-1.06-1.06L7.5 8.439 5.53 6.47a.75.75 0 0 0-1.06 1.06l2.5 2.5z\"\/>\n                                <\/svg>\n                            <\/div>\n                            <p class=\"lead\">Merci pour votre soumission !<\/p>\n                            <p class=\"text-muted\">Fermeture automatique dans <span id=\"success-timer\">${seconds}<\/span> secondes...<\/p>\n                            <button class=\"btn btn-success mt-3\" data-bs-dismiss=\"modal\">Fermer<\/button>\n                        <\/div>\n                    `;\n\n                    const interval = setInterval(() => {\n                        seconds--;\n                        const timer = document.getElementById('success-timer');\n                        if (timer) timer.textContent = seconds;\n                        if (seconds <= 0) {\n                            clearInterval(interval);\n                            const modalEl = document.getElementById('msf_69ff3e9acf2d2_modal');\n                            const modal = bootstrap.Modal.getInstance(modalEl);\n                            if (modal) modal.hide();\n                        }\n                    }, 1000);\n                }\n            })\n            .catch(() => {\n                if (modalBody) {\n                    let seconds = 15;\n                    modalBody.innerHTML = `\n                        <div class=\"text-center py-5\">\n                            <div class=\"text-danger mb-4\" style=\"font-size: 4rem;\">\n                                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"64\" height=\"64\" fill=\"currentColor\" class=\"bi bi-x-circle-fill\" viewBox=\"0 0 16 16\">\n                                    <path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z\"\/>\n                                <\/svg>\n                            <\/div>\n                            <p class=\"lead\">Une erreur est survenue,<br> veuillez essayer plus tard,<br> nous appeler ou nous envoyer un SMS<br> au <strong>+33 6 69 41 52 82<\/strong><\/p>\n                            <p class=\"text-muted\">Fermeture automatique dans <span id=\"error-timer\">${seconds}<\/span> secondes...<\/p>\n                            <button class=\"btn btn-danger mt-3\" data-bs-dismiss=\"modal\">Fermer<\/button>\n                        <\/div>\n                    `;\n\n                    const interval = setInterval(() => {\n                        seconds--;\n                        const timer = document.getElementById('error-timer');\n                        if (timer) timer.textContent = seconds;\n                        if (seconds <= 0) {\n                            clearInterval(interval);\n                            const modalEl = document.getElementById('msf_69ff3e9acf2d2_modal');\n                            const modal = bootstrap.Modal.getInstance(modalEl);\n                            if (modal) modal.hide();\n                        }\n                    }, 1000);\n                }\n            });\n        });\n    });\n});\n<\/script>\n\n\t<div class=\"wpb_text_column wpb_content_element\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<p><strong data-start=\"597\" data-end=\"638\">\ud83d\udccb Notre guide &amp; check-list exclusive<\/strong><br data-start=\"638\" data-end=\"641\" \/>Recevez notre guide pratique r\u00e9guli\u00e8rement mis \u00e0 jour : une check-list compl\u00e8te, une timeline d\u00e9taill\u00e9e, des conseils concrets pour avancer avec m\u00e9thode et confiance \u00e0 chaque \u00e9tape.<\/p>\n\n\t\t<\/div>\n\t<\/div>\n<div class=\"msf-bootstrap\">\n    <button\n        type=\"button\"\n        class=\"generic-button generic-button-opacity\"\n        data-bs-toggle=\"modal\"\n        data-bs-target=\"#msf_69ff3e9acf7a2_modal\"\n    >\n        Recevoir notre kit    <\/button>\n    <div class=\"msf-bootstrap\" id=\"msf_69ff3e9acf7a2_modal_wrapper\">\n    <div\n        class=\"modal fade\"\n        id=\"msf_69ff3e9acf7a2_modal\"\n        tabindex=\"-1\"\n        aria-labelledby=\"msf_69ff3e9acf7a2Label\"\n        aria-hidden=\"true\"\n    >\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"msf_69ff3e9acf7a2Label\">\n                        Recevoir le kit smartmariage                    <\/h5>\n                    <button\n                        type=\"button\"\n                        class=\"btn-close\"\n                        data-bs-dismiss=\"modal\"\n                        aria-label=\"Close\"\n                    ><\/button>\n                <\/div>\n                <div class=\"modal-body\">\n                    <div class=\"yu-ms-form mb-3\">\n                        <div id=\"msf_69ff3e9acf7a2\"><\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n<\/div>\n<script>\ndocument.addEventListener('DOMContentLoaded', function () {\n    \/\/ Move modal to <body>\n    const modal = document.getElementById(\"msf_69ff3e9acf7a2_modal_wrapper\");\n    if (modal && modal.parentElement !== document.body) {\n        document.body.prepend(modal);\n    }\n\n    Formio.createForm(\n        document.getElementById('msf_69ff3e9acf7a2'),\n        {\"display\":\"wizard\",\"type\":\"form\",\"components\":[{\"type\":\"panel\",\"title\":\"Coordonn\\u00e9es\",\"key\":\"step1\",\"components\":[{\"label\":\"Nom complet\",\"key\":\"fullName\",\"type\":\"textfield\",\"input\":true,\"validate\":{\"required\":true,\"customMessage\":\"Ce champ est obligatoire\"},\"tableView\":true},{\"label\":\"T\\u00e9l\\u00e9phone\",\"key\":\"phone\",\"type\":\"textfield\",\"inputMask\":\"+33 9 99 99 99 99\",\"input\":true,\"validate\":{\"required\":true,\"pattern\":\"^\\\\+33\\\\s[1-9](\\\\s\\\\d{2}){4}$\",\"customMessage\":\"Entrez un num\\u00e9ro fran\\u00e7ais valide, ex: +33 6 12 34 56 78\"},\"placeholder\":\"+33 6 12 34 56 78\",\"tableView\":true},{\"label\":\"Email\",\"key\":\"email\",\"type\":\"email\",\"input\":true,\"validate\":{\"required\":true,\"customMessage\":\"Ce champ est obligatoire\"},\"tableView\":true}],\"input\":false,\"tableView\":false,\"label\":\"Panel\"},{\"title\":\"Confirmation\",\"breadcrumbClickable\":true,\"buttonSettings\":{\"previous\":true,\"cancel\":true,\"next\":true},\"navigateOnEnter\":false,\"saveOnEnter\":false,\"scrollToTop\":false,\"collapsible\":false,\"key\":\"step3\",\"type\":\"panel\",\"label\":\"Panel\",\"components\":[{\"label\":\"\\u00c0 quelle saison souhaitez-vous c\\u00e9l\\u00e9brer votre mariage ?\",\"key\":\"season\",\"type\":\"radio\",\"input\":true,\"inline\":false,\"values\":[{\"label\":\"<i class='bi bi-sun'><\\\/i> \\u00c9t\\u00e9\",\"value\":\"ete\"},{\"label\":\"<i class='bi bi-snow'><\\\/i> Hiver\",\"value\":\"hiver\"},{\"label\":\"<i class='bi bi-flower1'><\\\/i> Printemps\",\"value\":\"printemps\"},{\"label\":\"<i class='bi bi-cloud-drizzle'><\\\/i> Automne\",\"value\":\"automne\"},{\"label\":\"<i class='bi bi-question-circle'><\\\/i> Non connu\",\"value\":\"nonconnu\"}],\"validate\":{\"required\":true,\"customMessage\":\"Merci de choisir!\"},\"customClass\":\"d-flex flex-wrap gap-2\",\"template\":\"<label class='btn btn-outline-primary btn-check-label'>{{ item.label }}<\\\/label>\",\"tableView\":false}],\"input\":false,\"tableView\":false}]},\n        {\n            language: 'fr',\n            i18n: {\n                fr:{\n                    next:\"suivant\",\n                    cancel: \"annuler\",\n                    previous: \"pr\u00e9c\u00e9dent\",\n                    submit: 'Envoyer',\n                    required: ''\n                }\n            }\n        }\n    ).then(function(form) {\n        form.on('submit', function(submission) {\n            const modalBody = document.querySelector('#msf_69ff3e9acf7a2_modal .modal-body');\n            const modalHeader = document.querySelector('#msf_69ff3e9acf7a2_modal .modal-header');\n            if (modalHeader) modalHeader.remove();\n            if (modalBody) {\n                modalBody.innerHTML = `\n                    <div class=\"text-center py-5\">\n                        <div class=\"spinner-border text-primary mb-4\" role=\"status\" style=\"width: 4rem; height: 4rem;\">\n                            <span class=\"visually-hidden\">Loading...<\/span>\n                        <\/div>\n                        <p class=\"lead\">Enregistrement en cours...<\/p>\n                    <\/div>\n                `;\n            }\n\n            fetch('https:\/\/www.smartmariage.com\/wp-admin\/admin-ajax.php', {\n                method: 'POST',\n                headers: {\n                    'Content-Type': 'application\/x-www-form-urlencoded'\n                },\n                body: new URLSearchParams({\n                    action:       'msf_handle_form',\n                    data:         JSON.stringify(submission.data),\n                    widget_ref:   'msf_69ff3e9acf7a2'\n                })\n            })\n            .then(res => res.json())\n            .then(response => {\n                if (modalBody) {\n                    let seconds = 5;\n                    modalBody.innerHTML = `\n                        <div class=\"text-center py-5\">\n                            <div class=\"text-success mb-4\" style=\"font-size: 4rem;\">\n                                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"64\" height=\"64\" fill=\"currentColor\" class=\"bi bi-check-circle-fill\" viewBox=\"0 0 16 16\">\n                                    <path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM6.97 10.03a.75.75 0 0 0 1.07 0l3.992-3.992a.75.75 0 1 0-1.06-1.06L7.5 8.439 5.53 6.47a.75.75 0 0 0-1.06 1.06l2.5 2.5z\"\/>\n                                <\/svg>\n                            <\/div>\n                            <p class=\"lead\">Merci pour votre soumission !<\/p>\n                            <p class=\"text-muted\">Fermeture automatique dans <span id=\"success-timer\">${seconds}<\/span> secondes...<\/p>\n                            <button class=\"btn btn-success mt-3\" data-bs-dismiss=\"modal\">Fermer<\/button>\n                        <\/div>\n                    `;\n\n                    const interval = setInterval(() => {\n                        seconds--;\n                        const timer = document.getElementById('success-timer');\n                        if (timer) timer.textContent = seconds;\n                        if (seconds <= 0) {\n                            clearInterval(interval);\n                            const modalEl = document.getElementById('msf_69ff3e9acf7a2_modal');\n                            const modal = bootstrap.Modal.getInstance(modalEl);\n                            if (modal) modal.hide();\n                        }\n                    }, 1000);\n                }\n            })\n            .catch(() => {\n                if (modalBody) {\n                    let seconds = 15;\n                    modalBody.innerHTML = `\n                        <div class=\"text-center py-5\">\n                            <div class=\"text-danger mb-4\" style=\"font-size: 4rem;\">\n                                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"64\" height=\"64\" fill=\"currentColor\" class=\"bi bi-x-circle-fill\" viewBox=\"0 0 16 16\">\n                                    <path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z\"\/>\n                                <\/svg>\n                            <\/div>\n                            <p class=\"lead\">Une erreur est survenue,<br> veuillez essayer plus tard,<br> nous appeler ou nous envoyer un SMS<br> au <strong>+33 6 69 41 52 82<\/strong><\/p>\n                            <p class=\"text-muted\">Fermeture automatique dans <span id=\"error-timer\">${seconds}<\/span> secondes...<\/p>\n                            <button class=\"btn btn-danger mt-3\" data-bs-dismiss=\"modal\">Fermer<\/button>\n                        <\/div>\n                    `;\n\n                    const interval = setInterval(() => {\n                        seconds--;\n                        const timer = document.getElementById('error-timer');\n                        if (timer) timer.textContent = seconds;\n                        if (seconds <= 0) {\n                            clearInterval(interval);\n                            const modalEl = document.getElementById('msf_69ff3e9acf7a2_modal');\n                            const modal = bootstrap.Modal.getInstance(modalEl);\n                            if (modal) modal.hide();\n                        }\n                    }, 1000);\n                }\n            });\n        });\n    });\n});\n<\/script>\n\n\t<div class=\"wpb_text_column wpb_content_element\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<p>\ud83d\udce7 <strong data-start=\"150\" data-end=\"174\">Support personnalis\u00e9<\/strong><br data-start=\"174\" data-end=\"177\" \/>Un impr\u00e9vu dans l\u2019organisation de votre mariage ? Une situation d\u00e9licate \u00e0 g\u00e9rer ?<br data-start=\"259\" data-end=\"262\" \/>Faites appel \u00e0 notre expertise !<br data-start=\"294\" data-end=\"297\" data-is-only-node=\"\" \/>Nous vous apportons un regard professionnel et bienveillant : envoyez-nous votre demande par email, et recevez une r\u00e9ponse claire en quelques heures. M\u00eame \u00e0 distance, nous sommes l\u00e0 pour vous accompagner et vous aider \u00e0 traverser ce moment avec s\u00e9r\u00e9nit\u00e9.<\/p>\n\n\t\t<\/div>\n\t<\/div>\n<div class=\"msf-bootstrap\">\n    <button\n        type=\"button\"\n        class=\"generic-button generic-button-opacity\"\n        data-bs-toggle=\"modal\"\n        data-bs-target=\"#msf_69ff3e9acfb46_modal\"\n    >\n        Acc\u00e9der \u00e0 notre portail!    <\/button>\n    <div class=\"msf-bootstrap\" id=\"msf_69ff3e9acfb46_modal_wrapper\">\n    <div\n        class=\"modal fade\"\n        id=\"msf_69ff3e9acfb46_modal\"\n        tabindex=\"-1\"\n        aria-labelledby=\"msf_69ff3e9acfb46Label\"\n        aria-hidden=\"true\"\n    >\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"msf_69ff3e9acfb46Label\">\n                        Demande d&#039;acc\u00e8s portail!                    <\/h5>\n                    <button\n                        type=\"button\"\n                        class=\"btn-close\"\n                        data-bs-dismiss=\"modal\"\n                        aria-label=\"Close\"\n                    ><\/button>\n                <\/div>\n                <div class=\"modal-body\">\n                    <div class=\"yu-ms-form mb-3\">\n                        <div id=\"msf_69ff3e9acfb46\"><\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n<\/div>\n<script>\ndocument.addEventListener('DOMContentLoaded', function () {\n    \/\/ Move modal to <body>\n    const modal = document.getElementById(\"msf_69ff3e9acfb46_modal_wrapper\");\n    if (modal && modal.parentElement !== document.body) {\n        document.body.prepend(modal);\n    }\n\n    Formio.createForm(\n        document.getElementById('msf_69ff3e9acfb46'),\n        {\"display\":\"wizard\",\"type\":\"form\",\"components\":[{\"type\":\"panel\",\"title\":\"Coordonn\\u00e9es\",\"key\":\"step1\",\"components\":[{\"label\":\"Nom complet\",\"key\":\"fullName\",\"type\":\"textfield\",\"input\":true,\"validate\":{\"required\":true,\"customMessage\":\"Ce champ est obligatoire\"},\"tableView\":true},{\"label\":\"T\\u00e9l\\u00e9phone\",\"key\":\"phone\",\"type\":\"textfield\",\"inputMask\":\"+33 9 99 99 99 99\",\"input\":true,\"validate\":{\"required\":true,\"pattern\":\"^\\\\+33\\\\s[1-9](\\\\s\\\\d{2}){4}$\",\"customMessage\":\"Entrez un num\\u00e9ro fran\\u00e7ais valide, ex: +33 6 12 34 56 78\"},\"placeholder\":\"+33 6 12 34 56 78\",\"tableView\":true},{\"label\":\"Email\",\"key\":\"email\",\"type\":\"email\",\"input\":true,\"validate\":{\"required\":true,\"customMessage\":\"Ce champ est obligatoire\"},\"tableView\":true}],\"input\":false,\"tableView\":false,\"label\":\"Panel\"},{\"title\":\"Confirmation\",\"breadcrumbClickable\":true,\"buttonSettings\":{\"previous\":true,\"cancel\":true,\"next\":true},\"navigateOnEnter\":false,\"saveOnEnter\":false,\"scrollToTop\":false,\"collapsible\":false,\"key\":\"step3\",\"type\":\"panel\",\"label\":\"Panel\",\"components\":[{\"label\":\"\\u00c0 quelle saison souhaitez-vous c\\u00e9l\\u00e9brer votre mariage ?\",\"key\":\"season\",\"type\":\"radio\",\"input\":true,\"inline\":false,\"values\":[{\"label\":\"<i class='bi bi-sun'><\\\/i> \\u00c9t\\u00e9\",\"value\":\"ete\"},{\"label\":\"<i class='bi bi-snow'><\\\/i> Hiver\",\"value\":\"hiver\"},{\"label\":\"<i class='bi bi-flower1'><\\\/i> Printemps\",\"value\":\"printemps\"},{\"label\":\"<i class='bi bi-cloud-drizzle'><\\\/i> Automne\",\"value\":\"automne\"},{\"label\":\"<i class='bi bi-question-circle'><\\\/i> Non connu\",\"value\":\"nonconnu\"}],\"validate\":{\"required\":true,\"customMessage\":\"Merci de choisir!\"},\"customClass\":\"d-flex flex-wrap gap-2\",\"template\":\"<label class='btn btn-outline-primary btn-check-label'>{{ item.label }}<\\\/label>\",\"tableView\":false}],\"input\":false,\"tableView\":false}]},\n        {\n            language: 'fr',\n            i18n: {\n                fr:{\n                    next:\"suivant\",\n                    cancel: \"annuler\",\n                    previous: \"pr\u00e9c\u00e9dent\",\n                    submit: 'Envoyer',\n                    required: ''\n                }\n            }\n        }\n    ).then(function(form) {\n        form.on('submit', function(submission) {\n            const modalBody = document.querySelector('#msf_69ff3e9acfb46_modal .modal-body');\n            const modalHeader = document.querySelector('#msf_69ff3e9acfb46_modal .modal-header');\n            if (modalHeader) modalHeader.remove();\n            if (modalBody) {\n                modalBody.innerHTML = `\n                    <div class=\"text-center py-5\">\n                        <div class=\"spinner-border text-primary mb-4\" role=\"status\" style=\"width: 4rem; height: 4rem;\">\n                            <span class=\"visually-hidden\">Loading...<\/span>\n                        <\/div>\n                        <p class=\"lead\">Enregistrement en cours...<\/p>\n                    <\/div>\n                `;\n            }\n\n            fetch('https:\/\/www.smartmariage.com\/wp-admin\/admin-ajax.php', {\n                method: 'POST',\n                headers: {\n                    'Content-Type': 'application\/x-www-form-urlencoded'\n                },\n                body: new URLSearchParams({\n                    action:       'msf_handle_form',\n                    data:         JSON.stringify(submission.data),\n                    widget_ref:   'msf_69ff3e9acfb46'\n                })\n            })\n            .then(res => res.json())\n            .then(response => {\n                if (modalBody) {\n                    let seconds = 5;\n                    modalBody.innerHTML = `\n                        <div class=\"text-center py-5\">\n                            <div class=\"text-success mb-4\" style=\"font-size: 4rem;\">\n                                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"64\" height=\"64\" fill=\"currentColor\" class=\"bi bi-check-circle-fill\" viewBox=\"0 0 16 16\">\n                                    <path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM6.97 10.03a.75.75 0 0 0 1.07 0l3.992-3.992a.75.75 0 1 0-1.06-1.06L7.5 8.439 5.53 6.47a.75.75 0 0 0-1.06 1.06l2.5 2.5z\"\/>\n                                <\/svg>\n                            <\/div>\n                            <p class=\"lead\">Merci pour votre soumission !<\/p>\n                            <p class=\"text-muted\">Fermeture automatique dans <span id=\"success-timer\">${seconds}<\/span> secondes...<\/p>\n                            <button class=\"btn btn-success mt-3\" data-bs-dismiss=\"modal\">Fermer<\/button>\n                        <\/div>\n                    `;\n\n                    const interval = setInterval(() => {\n                        seconds--;\n                        const timer = document.getElementById('success-timer');\n                        if (timer) timer.textContent = seconds;\n                        if (seconds <= 0) {\n                            clearInterval(interval);\n                            const modalEl = document.getElementById('msf_69ff3e9acfb46_modal');\n                            const modal = bootstrap.Modal.getInstance(modalEl);\n                            if (modal) modal.hide();\n                        }\n                    }, 1000);\n                }\n            })\n            .catch(() => {\n                if (modalBody) {\n                    let seconds = 15;\n                    modalBody.innerHTML = `\n                        <div class=\"text-center py-5\">\n                            <div class=\"text-danger mb-4\" style=\"font-size: 4rem;\">\n                                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"64\" height=\"64\" fill=\"currentColor\" class=\"bi bi-x-circle-fill\" viewBox=\"0 0 16 16\">\n                                    <path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z\"\/>\n                                <\/svg>\n                            <\/div>\n                            <p class=\"lead\">Une erreur est survenue,<br> veuillez essayer plus tard,<br> nous appeler ou nous envoyer un SMS<br> au <strong>+33 6 69 41 52 82<\/strong><\/p>\n                            <p class=\"text-muted\">Fermeture automatique dans <span id=\"error-timer\">${seconds}<\/span> secondes...<\/p>\n                            <button class=\"btn btn-danger mt-3\" data-bs-dismiss=\"modal\">Fermer<\/button>\n                        <\/div>\n                    `;\n\n                    const interval = setInterval(() => {\n                        seconds--;\n                        const timer = document.getElementById('error-timer');\n                        if (timer) timer.textContent = seconds;\n                        if (seconds <= 0) {\n                            clearInterval(interval);\n                            const modalEl = document.getElementById('msf_69ff3e9acfb46_modal');\n                            const modal = bootstrap.Modal.getInstance(modalEl);\n                            if (modal) modal.hide();\n                        }\n                    }, 1000);\n                }\n            });\n        });\n    });\n});\n<\/script>\n<\/div><\/div><\/div><div class=\"wpb_column vc_column_container vc_col-sm-4 occ-567132 vc_col-has-fill\"><div class=\"vc_column-inner vc_custom_1748081169748\"><div class=\"wpb_wrapper\"><div id=\"tile-with-icon_icon7588\" class=\"title-with-icon-wrapper rectangle medium\" data-color=\"\">\r\n\t\t\t<div class=\"wpb_content_element title-with-icon clearfix margin-bottom-0\"><span  style=\"color:#DD9933 !important;background-color:#00000000 !important;\" class=\"oic-fi3-calendar rectangle medium\" data-color=\"#000000\"><\/span><h3 class=\"content-color\" style=\"\">Un accompagnement partiel?<\/h3>\r\n\t\t\t<\/div><div class=\"wpb_content_element left-cs title-with-icon-content medium clearfix\" style=\"\">Besoin d&rsquo;un accompagnement partiel!<\/div><\/div>\n\t<div class=\"wpb_text_column wpb_content_element\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<p>Vous avez d\u00e9j\u00e0 commenc\u00e9 l&rsquo;organisation de votre mariage, mais souhaitez un accompagnement ponctuel ? Nous intervenons selon vos besoins, \u00e0 la carte :<\/p>\n\n\t\t<\/div>\n\t<\/div>\n\n\t<div class=\"wpb_text_column wpb_content_element\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<p><strong data-start=\"362\" data-end=\"386\">\ud83d\udcde Conseil t\u00e9l\u00e9phonique<\/strong><br data-start=\"386\" data-end=\"389\" \/>Notre ligne est toujours ouverte pour r\u00e9pondre \u00e0 vos questions, vous rassurer et vous guider \u00e0 chaque \u00e9tape.<\/p>\n\n\t\t<\/div>\n\t<\/div>\n\n\t<div class=\"wpb_text_column wpb_content_element\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<p><strong data-start=\"499\" data-end=\"523\">\ud83e\udde0 Conseil prestataires<\/strong><br data-start=\"523\" data-end=\"526\" \/>Nous vous accompagnons dans le choix de vos prestataires : analyse de devis, recommandations, conseils objectifs, et m\u00eame aide \u00e0 la n\u00e9gociation si besoin.<\/p>\n\n\t\t<\/div>\n\t<\/div>\n\n\t<div class=\"wpb_text_column wpb_content_element\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<p data-start=\"682\" data-end=\"1038\"><strong data-start=\"682\" data-end=\"708\">\ud83c\udfaf Coordination du jour J<\/strong><br data-start=\"708\" data-end=\"711\" \/><strong>Trois mois<\/strong> avant le jour du mariage, une fois que vos contrats sont sign\u00e9s, nous prenons le relais : nous devenons l&rsquo;interlocuteur principal de vos prestataires pour assurer la fluidit\u00e9 des pr\u00e9paratifs.<br data-start=\"854\" data-end=\"857\" \/>Le jour J, nous sommes pr\u00e9sents d\u00e8s les premi\u00e8res heures pour orchestrer chaque moment, veiller au bon d\u00e9roulement du programme, et g\u00e9rer les impr\u00e9vus avec r\u00e9activit\u00e9 et discr\u00e9tion.<\/p>\n\n\t\t<\/div>\n\t<\/div>\n<div class=\"msf-bootstrap\">\n    <button\n        type=\"button\"\n        class=\"generic-button generic-button-opacity\"\n        data-bs-toggle=\"modal\"\n        data-bs-target=\"#msf_69ff3e9ad022c_modal\"\n    >\n        Appelons nous!    <\/button>\n    <div class=\"msf-bootstrap\" id=\"msf_69ff3e9ad022c_modal_wrapper\">\n    <div\n        class=\"modal fade\"\n        id=\"msf_69ff3e9ad022c_modal\"\n        tabindex=\"-1\"\n        aria-labelledby=\"msf_69ff3e9ad022cLabel\"\n        aria-hidden=\"true\"\n    >\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"msf_69ff3e9ad022cLabel\">\n                        Accompagnement                    <\/h5>\n                    <button\n                        type=\"button\"\n                        class=\"btn-close\"\n                        data-bs-dismiss=\"modal\"\n                        aria-label=\"Close\"\n                    ><\/button>\n                <\/div>\n                <div class=\"modal-body\">\n                    <div class=\"yu-ms-form mb-3\">\n                        <div id=\"msf_69ff3e9ad022c\"><\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n<\/div>\n<script>\ndocument.addEventListener('DOMContentLoaded', function () {\n    \/\/ Move modal to <body>\n    const modal = document.getElementById(\"msf_69ff3e9ad022c_modal_wrapper\");\n    if (modal && modal.parentElement !== document.body) {\n        document.body.prepend(modal);\n    }\n\n    Formio.createForm(\n        document.getElementById('msf_69ff3e9ad022c'),\n        {\"display\":\"wizard\",\"type\":\"form\",\"components\":[{\"type\":\"panel\",\"title\":\"Coordonn\\u00e9es\",\"key\":\"step1\",\"components\":[{\"label\":\"Nom complet\",\"key\":\"fullName\",\"type\":\"textfield\",\"input\":true,\"validate\":{\"required\":true,\"customMessage\":\"Ce champ est obligatoire\"},\"tableView\":true},{\"label\":\"T\\u00e9l\\u00e9phone\",\"key\":\"phone\",\"type\":\"textfield\",\"inputMask\":\"+33 9 99 99 99 99\",\"input\":true,\"validate\":{\"required\":true,\"pattern\":\"^\\\\+33\\\\s[1-9](\\\\s\\\\d{2}){4}$\",\"customMessage\":\"Entrez un num\\u00e9ro fran\\u00e7ais valide, ex: +33 6 12 34 56 78\"},\"placeholder\":\"+33 6 12 34 56 78\",\"tableView\":true},{\"label\":\"Email\",\"key\":\"email\",\"type\":\"email\",\"input\":true,\"validate\":{\"required\":true,\"customMessage\":\"Ce champ est obligatoire\"},\"tableView\":true}],\"input\":false,\"tableView\":false,\"label\":\"Panel\"},{\"type\":\"panel\",\"title\":\"Rendez-vous\",\"key\":\"step2\",\"components\":[{\"label\":\"Souhaitez-vous un appel ?\",\"optionsLabelPosition\":\"right\",\"inline\":true,\"tableView\":false,\"values\":[{\"label\":\"Appeler maintenant\",\"value\":\"now\",\"shortcut\":\"\"},{\"label\":\"Planifier plus tard\",\"value\":\"planned\",\"shortcut\":\"\"}],\"validate\":{\"required\":true,\"customMessage\":\"Merci de choisir!\"},\"validateWhenHidden\":true,\"key\":\"calltime\",\"customConditional\":\"show = (new Date().getHours() >= 8 && new Date().getHours() <= 19)\",\"type\":\"radio\",\"input\":true},{\"label\":\"Choisissez une date et heure\",\"format\":\"dd\\\/MM\\\/yyyy\",\"tableView\":false,\"datePicker\":{\"disableFunction\":\"date < new Date(new Date().setHours(0,0,0,0)) || (date.toDateString() === new Date().toDateString() && new Date().getHours() >= 19)\",\"disableWeekends\":false,\"disableWeekdays\":false},\"enableTime\":false,\"timePicker\":{\"showMeridian\":false},\"validate\":{\"required\":true,\"custom\":\"valid = (data.calltime === 'planned') ? input !== '' : true;\",\"customMessage\":\"Merci de pr\\u00e9ciser le jour si vous planifiez plus tard.\"},\"validateWhenHidden\":false,\"errorLabel\":\"Merci de pr\\u00e9ciser le jour\",\"key\":\"plannedDate\",\"customConditional\":\"show = data.calltime === 'planned' || (new Date().getHours() < 8 || new Date().getHours() >= 19);\",\"type\":\"datetime\",\"input\":true,\"widget\":{\"type\":\"calendar\",\"displayInTimezone\":\"viewer\",\"locale\":\"en\",\"useLocaleSettings\":false,\"allowInput\":true,\"mode\":\"single\",\"enableTime\":false,\"noCalendar\":false,\"format\":\"dd\\\/MM\\\/yyyy\",\"hourIncrement\":1,\"minuteIncrement\":1,\"time_24hr\":true,\"minDate\":null,\"disableWeekends\":false,\"disableWeekdays\":false,\"disableFunction\":\"date < new Date(new Date().setHours(0,0,0,0)) || (date.toDateString() === new Date().toDateString() && new Date().getHours() >= 19)\",\"maxDate\":null}},{\"label\":\"Heure\",\"widget\":\"html5\",\"tableView\":true,\"dataSrc\":\"custom\",\"data\":{\"custom\":\"const planned = moment(data.plannedDate);\\nconst now = moment();\\n\\nconst first = moment.max(\\n\\tmoment().minute() < 30 ? now.clone().minute(30).second(0) : now.clone().add(1, 'hour').minute(0).second(0),\\n\\tplanned.clone().hour(9).minute(0).second(0)\\n\\t);\\n\\nconst isToday = planned.isSame(now, 'day');\\nconst start = isToday \\n  ? first\\n  : planned.clone().hour(9).minute(0).second(0);\\n\\nconst end = planned.clone().hour(19).minute(0).second(0);\\n\\nvalues = [];\\nwhile (start.isSameOrBefore(end)) {\\n  values.push({ label: start.format(\\\"HH:mm\\\"), value: start.format(\\\"HH:mm\\\") });\\n  start.add(30, 'minutes');\\n}\"},\"validate\":{\"required\":true,\"customMessage\":\"Merci de choisir un cr\\u00e9neau horaire.\",\"custom\":\"valid = (data.calltime === 'planned') ? input !== '' : true;\"},\"validateWhenHidden\":false,\"key\":\"slot\",\"customConditional\":\"if (!data.plannedDate) {\\n  show = false;\\n} else {\\n  const planned = new Date(data.plannedDate);\\n  const now = new Date();\\n  \\n  planned.setHours(0, 0, 0, 0);\\n  now.setHours(0, 0, 0, 0);\\n  \\n  const isToday = planned.getTime() === now.getTime();\\n  const isFuture = planned > now;\\n  const isTodayBefore19h = isToday && (new Date().getHours() <= 19);\\n\\n  show = isFuture || isTodayBefore19h;\\n}\",\"type\":\"select\",\"input\":true},{\"label\":\"Cr\\u00e9neau s\\u00e9lectionn\\u00e9\",\"key\":\"appointment\",\"type\":\"hidden\",\"calculateValue\":\"if (data.calltime === 'now') {\\n  value = moment().format();\\n} else if (data.plannedDate && data.slot && data.slot.value) {\\n  const datePart = moment(data.plannedDate).format('YYYY-MM-DD');\\n  value = moment(`${datePart}T${data.slot.value}`).format();\\n} else {\\n  value = '';\\n}\",\"persistent\":true},{\"label\":\"Cr\\u00e9neau format\\u00e9\",\"key\":\"appointment_formatted\",\"type\":\"hidden\",\"calculateValue\":\"if (data.appointment) {\\n  const months = ['janvier', 'f\\u00e9vrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'ao\\u00fbt', 'septembre', 'octobre', 'novembre', 'd\\u00e9cembre'];\\n  const m = moment(data.appointment);\\n  const day = m.date();\\n  const month = months[m.month()];\\n  const year = m.year();\\n  const hour = m.format('HH');\\n  const minute = m.format('mm');\\n  value = `le ${day} ${month} ${year} &agrave; ${hour}h${minute}`;\\n} else {\\n  value = '';\\n}\",\"persistent\":true}],\"input\":false,\"tableView\":false,\"label\":\"Panel\"},{\"title\":\"Confirmation\",\"breadcrumbClickable\":true,\"buttonSettings\":{\"previous\":true,\"cancel\":true,\"next\":true},\"navigateOnEnter\":false,\"saveOnEnter\":false,\"scrollToTop\":false,\"collapsible\":false,\"key\":\"step3\",\"type\":\"panel\",\"label\":\"Panel\",\"components\":[{\"label\":\"\\u00c0 quelle saison souhaitez-vous c\\u00e9l\\u00e9brer votre mariage ?\",\"key\":\"season\",\"type\":\"radio\",\"input\":true,\"inline\":false,\"values\":[{\"label\":\"<i class='bi bi-sun'><\\\/i> \\u00c9t\\u00e9\",\"value\":\"ete\"},{\"label\":\"<i class='bi bi-snow'><\\\/i> Hiver\",\"value\":\"hiver\"},{\"label\":\"<i class='bi bi-flower1'><\\\/i> Printemps\",\"value\":\"printemps\"},{\"label\":\"<i class='bi bi-cloud-drizzle'><\\\/i> Automne\",\"value\":\"automne\"},{\"label\":\"<i class='bi bi-question-circle'><\\\/i> Non connu\",\"value\":\"nonconnu\"}],\"validate\":{\"required\":true,\"customMessage\":\"Merci de choisir!\"},\"customClass\":\"d-flex flex-wrap gap-2\",\"template\":\"<label class='btn btn-outline-primary btn-check-label'>{{ item.label }}<\\\/label>\",\"tableView\":false}],\"input\":false,\"tableView\":false}]},\n        {\n            language: 'fr',\n            i18n: {\n                fr:{\n                    next:\"suivant\",\n                    cancel: \"annuler\",\n                    previous: \"pr\u00e9c\u00e9dent\",\n                    submit: 'Envoyer',\n                    required: ''\n                }\n            }\n        }\n    ).then(function(form) {\n        form.on('submit', function(submission) {\n            const modalBody = document.querySelector('#msf_69ff3e9ad022c_modal .modal-body');\n            const modalHeader = document.querySelector('#msf_69ff3e9ad022c_modal .modal-header');\n            if (modalHeader) modalHeader.remove();\n            if (modalBody) {\n                modalBody.innerHTML = `\n                    <div class=\"text-center py-5\">\n                        <div class=\"spinner-border text-primary mb-4\" role=\"status\" style=\"width: 4rem; height: 4rem;\">\n                            <span class=\"visually-hidden\">Loading...<\/span>\n                        <\/div>\n                        <p class=\"lead\">Enregistrement en cours...<\/p>\n                    <\/div>\n                `;\n            }\n\n            fetch('https:\/\/www.smartmariage.com\/wp-admin\/admin-ajax.php', {\n                method: 'POST',\n                headers: {\n                    'Content-Type': 'application\/x-www-form-urlencoded'\n                },\n                body: new URLSearchParams({\n                    action:       'msf_handle_form',\n                    data:         JSON.stringify(submission.data),\n                    widget_ref:   'msf_69ff3e9ad022c'\n                })\n            })\n            .then(res => res.json())\n            .then(response => {\n                if (modalBody) {\n                    let seconds = 5;\n                    modalBody.innerHTML = `\n                        <div class=\"text-center py-5\">\n                            <div class=\"text-success mb-4\" style=\"font-size: 4rem;\">\n                                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"64\" height=\"64\" fill=\"currentColor\" class=\"bi bi-check-circle-fill\" viewBox=\"0 0 16 16\">\n                                    <path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM6.97 10.03a.75.75 0 0 0 1.07 0l3.992-3.992a.75.75 0 1 0-1.06-1.06L7.5 8.439 5.53 6.47a.75.75 0 0 0-1.06 1.06l2.5 2.5z\"\/>\n                                <\/svg>\n                            <\/div>\n                            <p class=\"lead\">Merci pour votre soumission !<\/p>\n                            <p class=\"text-muted\">Fermeture automatique dans <span id=\"success-timer\">${seconds}<\/span> secondes...<\/p>\n                            <button class=\"btn btn-success mt-3\" data-bs-dismiss=\"modal\">Fermer<\/button>\n                        <\/div>\n                    `;\n\n                    const interval = setInterval(() => {\n                        seconds--;\n                        const timer = document.getElementById('success-timer');\n                        if (timer) timer.textContent = seconds;\n                        if (seconds <= 0) {\n                            clearInterval(interval);\n                            const modalEl = document.getElementById('msf_69ff3e9ad022c_modal');\n                            const modal = bootstrap.Modal.getInstance(modalEl);\n                            if (modal) modal.hide();\n                        }\n                    }, 1000);\n                }\n            })\n            .catch(() => {\n                if (modalBody) {\n                    let seconds = 15;\n                    modalBody.innerHTML = `\n                        <div class=\"text-center py-5\">\n                            <div class=\"text-danger mb-4\" style=\"font-size: 4rem;\">\n                                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"64\" height=\"64\" fill=\"currentColor\" class=\"bi bi-x-circle-fill\" viewBox=\"0 0 16 16\">\n                                    <path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z\"\/>\n                                <\/svg>\n                            <\/div>\n                            <p class=\"lead\">Une erreur est survenue,<br> veuillez essayer plus tard,<br> nous appeler ou nous envoyer un SMS<br> au <strong>+33 6 69 41 52 82<\/strong><\/p>\n                            <p class=\"text-muted\">Fermeture automatique dans <span id=\"error-timer\">${seconds}<\/span> secondes...<\/p>\n                            <button class=\"btn btn-danger mt-3\" data-bs-dismiss=\"modal\">Fermer<\/button>\n                        <\/div>\n                    `;\n\n                    const interval = setInterval(() => {\n                        seconds--;\n                        const timer = document.getElementById('error-timer');\n                        if (timer) timer.textContent = seconds;\n                        if (seconds <= 0) {\n                            clearInterval(interval);\n                            const modalEl = document.getElementById('msf_69ff3e9ad022c_modal');\n                            const modal = bootstrap.Modal.getInstance(modalEl);\n                            if (modal) modal.hide();\n                        }\n                    }, 1000);\n                }\n            });\n        });\n    });\n});\n<\/script>\n<\/div><\/div><\/div><div class=\"wpb_column vc_column_container vc_col-sm-4 occ-211026 vc_col-has-fill\"><div class=\"vc_column-inner vc_custom_1748519427348\"><div class=\"wpb_wrapper\"><div id=\"tile-with-icon_icon4926\" class=\"title-with-icon-wrapper rectangle medium\" data-color=\"\">\r\n\t\t\t<div class=\"wpb_content_element title-with-icon clearfix margin-bottom-0\"><span  style=\"color:#81D742 !important;background-color: !important;\" class=\"oic-fi3-calendar rectangle medium\" ><\/span><h2 class=\"content-color\" style=\"\">Besoin de pro!<\/h2>\r\n\t\t\t<\/div><div class=\"wpb_content_element left-cs title-with-icon-content medium clearfix\" style=\"\">Nous faire enti\u00e8rement confiance!<\/div><\/div>\n\t<div class=\"wpb_text_column wpb_content_element\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<p data-start=\"213\" data-end=\"408\">Vous souhaitez vivre pleinement votre mariage, sans stress ni impr\u00e9vus ?<br data-start=\"285\" data-end=\"288\">Nous prenons en charge l\u2019organisation de A \u00e0 Z, dans le respect de vos envies, de votre budget et de votre personnalit\u00e9.<\/p>\n<p data-start=\"410\" data-end=\"875\">Gr\u00e2ce \u00e0 notre expertise, notre r\u00e9seau de prestataires de confiance et notre sens du d\u00e9tail, vous profitez de chaque instant en toute s\u00e9r\u00e9nit\u00e9.<br data-start=\"552\" data-end=\"555\"><br data-start=\"768\" data-end=\"771\">Ma\u00eetrise du budget, respect du planning, accompagnement humain : nous sommes \u00e0 vos c\u00f4t\u00e9s \u00e0 chaque \u00e9tape. (<a href=\"https:\/\/www.smartmariage.com\/en\/about\/press\/faire-appel-wedding-planner\/\" target=\"_blank\" rel=\"noopener\">5 raisons de faire appel \u00e0 une wedding planner<\/a>)<\/p>\n\n\t\t<\/div>\n\t<\/div>\n<div class=\"vc_empty_space\"   style=\"height: 32px\"><span class=\"vc_empty_space_inner\"><\/span><\/div>\n\t<div class=\"wpb_text_column wpb_content_element\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<p><b>Premier \u00e9change<\/b><span style=\"font-weight: 400;\"> \u2013 Nous discutons ensemble de vos envies, de vos besoins et du style de mariage que vous imaginez.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>Devis personnalis\u00e9<\/b><span style=\"font-weight: 400;\"> \u2013 Vous recevez un devis dans l\u2019heure qui suit notre \u00e9change.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>Validation du devis<\/b><span style=\"font-weight: 400;\"> \u2013 Une fois valid\u00e9, nous entrons dans le vif du projet.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>Budget pr\u00e9visionnel &amp; r\u00e9troplanning<\/b><span style=\"font-weight: 400;\"> \u2013 Nous construisons ensemble une projection claire du budget et un r\u00e9troplanning d\u00e9taill\u00e9 pour avancer sereinement.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>Suivi personnalis\u00e9<\/b><span style=\"font-weight: 400;\"> \u2013 \u00c0 chaque \u00e9tape, nous affinons votre projet et nous nous adaptons \u00e0 vos envies, votre rythme, et l\u2019\u00e9volution de votre mariage.<\/span><\/p>\n\n\t\t<\/div>\n\t<\/div>\n<div class=\"msf-bootstrap\">\n    <button\n        type=\"button\"\n        class=\"generic-button generic-button-opacity\"\n        data-bs-toggle=\"modal\"\n        data-bs-target=\"#msf_69ff3e9ad0a48_modal\"\n    >\n        Appelons nous!    <\/button>\n    <div class=\"msf-bootstrap\" id=\"msf_69ff3e9ad0a48_modal_wrapper\">\n    <div\n        class=\"modal fade\"\n        id=\"msf_69ff3e9ad0a48_modal\"\n        tabindex=\"-1\"\n        aria-labelledby=\"msf_69ff3e9ad0a48Label\"\n        aria-hidden=\"true\"\n    >\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"msf_69ff3e9ad0a48Label\">\n                        Appel pour l&#039;\u00e9tablissement d&#039;un devis!                    <\/h5>\n                    <button\n                        type=\"button\"\n                        class=\"btn-close\"\n                        data-bs-dismiss=\"modal\"\n                        aria-label=\"Close\"\n                    ><\/button>\n                <\/div>\n                <div class=\"modal-body\">\n                    <div class=\"yu-ms-form mb-3\">\n                        <div id=\"msf_69ff3e9ad0a48\"><\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n<\/div>\n<script>\ndocument.addEventListener('DOMContentLoaded', function () {\n    \/\/ Move modal to <body>\n    const modal = document.getElementById(\"msf_69ff3e9ad0a48_modal_wrapper\");\n    if (modal && modal.parentElement !== document.body) {\n        document.body.prepend(modal);\n    }\n\n    Formio.createForm(\n        document.getElementById('msf_69ff3e9ad0a48'),\n        {\"display\":\"wizard\",\"type\":\"form\",\"components\":[{\"type\":\"panel\",\"title\":\"Coordonn\\u00e9es\",\"key\":\"step1\",\"components\":[{\"label\":\"Nom complet\",\"key\":\"fullName\",\"type\":\"textfield\",\"input\":true,\"validate\":{\"required\":true,\"customMessage\":\"Ce champ est obligatoire\"},\"tableView\":true},{\"label\":\"T\\u00e9l\\u00e9phone\",\"key\":\"phone\",\"type\":\"textfield\",\"inputMask\":\"+33 9 99 99 99 99\",\"input\":true,\"validate\":{\"required\":true,\"pattern\":\"^\\\\+33\\\\s[1-9](\\\\s\\\\d{2}){4}$\",\"customMessage\":\"Entrez un num\\u00e9ro fran\\u00e7ais valide, ex: +33 6 12 34 56 78\"},\"placeholder\":\"+33 6 12 34 56 78\",\"tableView\":true},{\"label\":\"Email\",\"key\":\"email\",\"type\":\"email\",\"input\":true,\"validate\":{\"required\":true,\"customMessage\":\"Ce champ est obligatoire\"},\"tableView\":true}],\"input\":false,\"tableView\":false,\"label\":\"Panel\"},{\"type\":\"panel\",\"title\":\"Rendez-vous\",\"key\":\"step2\",\"components\":[{\"label\":\"Souhaitez-vous un appel ?\",\"optionsLabelPosition\":\"right\",\"inline\":true,\"tableView\":false,\"values\":[{\"label\":\"Appeler maintenant\",\"value\":\"now\",\"shortcut\":\"\"},{\"label\":\"Planifier plus tard\",\"value\":\"planned\",\"shortcut\":\"\"}],\"validate\":{\"required\":true,\"customMessage\":\"Merci de choisir!\"},\"validateWhenHidden\":true,\"key\":\"calltime\",\"customConditional\":\"show = (new Date().getHours() >= 8 && new Date().getHours() <= 19)\",\"type\":\"radio\",\"input\":true},{\"label\":\"Choisissez une date et heure\",\"format\":\"dd\\\/MM\\\/yyyy\",\"tableView\":false,\"datePicker\":{\"disableFunction\":\"date < new Date(new Date().setHours(0,0,0,0)) || (date.toDateString() === new Date().toDateString() && new Date().getHours() >= 19)\",\"disableWeekends\":false,\"disableWeekdays\":false},\"enableTime\":false,\"timePicker\":{\"showMeridian\":false},\"validate\":{\"required\":true,\"custom\":\"valid = (data.calltime === 'planned') ? input !== '' : true;\",\"customMessage\":\"Merci de pr\\u00e9ciser le jour si vous planifiez plus tard.\"},\"validateWhenHidden\":false,\"errorLabel\":\"Merci de pr\\u00e9ciser le jour\",\"key\":\"plannedDate\",\"customConditional\":\"show = data.calltime === 'planned' || (new Date().getHours() < 8 || new Date().getHours() >= 19);\",\"type\":\"datetime\",\"input\":true,\"widget\":{\"type\":\"calendar\",\"displayInTimezone\":\"viewer\",\"locale\":\"en\",\"useLocaleSettings\":false,\"allowInput\":true,\"mode\":\"single\",\"enableTime\":false,\"noCalendar\":false,\"format\":\"dd\\\/MM\\\/yyyy\",\"hourIncrement\":1,\"minuteIncrement\":1,\"time_24hr\":true,\"minDate\":null,\"disableWeekends\":false,\"disableWeekdays\":false,\"disableFunction\":\"date < new Date(new Date().setHours(0,0,0,0)) || (date.toDateString() === new Date().toDateString() && new Date().getHours() >= 19)\",\"maxDate\":null}},{\"label\":\"Heure\",\"widget\":\"html5\",\"tableView\":true,\"dataSrc\":\"custom\",\"data\":{\"custom\":\"const planned = moment(data.plannedDate);\\nconst now = moment();\\n\\nconst first = moment.max(\\n\\tmoment().minute() < 30 ? now.clone().minute(30).second(0) : now.clone().add(1, 'hour').minute(0).second(0),\\n\\tplanned.clone().hour(9).minute(0).second(0)\\n\\t);\\n\\nconst isToday = planned.isSame(now, 'day');\\nconst start = isToday \\n  ? first\\n  : planned.clone().hour(9).minute(0).second(0);\\n\\nconst end = planned.clone().hour(19).minute(0).second(0);\\n\\nvalues = [];\\nwhile (start.isSameOrBefore(end)) {\\n  values.push({ label: start.format(\\\"HH:mm\\\"), value: start.format(\\\"HH:mm\\\") });\\n  start.add(30, 'minutes');\\n}\"},\"validate\":{\"required\":true,\"customMessage\":\"Merci de choisir un cr\\u00e9neau horaire.\",\"custom\":\"valid = (data.calltime === 'planned') ? input !== '' : true;\"},\"validateWhenHidden\":false,\"key\":\"slot\",\"customConditional\":\"if (!data.plannedDate) {\\n  show = false;\\n} else {\\n  const planned = new Date(data.plannedDate);\\n  const now = new Date();\\n  \\n  planned.setHours(0, 0, 0, 0);\\n  now.setHours(0, 0, 0, 0);\\n  \\n  const isToday = planned.getTime() === now.getTime();\\n  const isFuture = planned > now;\\n  const isTodayBefore19h = isToday && (new Date().getHours() <= 19);\\n\\n  show = isFuture || isTodayBefore19h;\\n}\",\"type\":\"select\",\"input\":true},{\"label\":\"Cr\\u00e9neau s\\u00e9lectionn\\u00e9\",\"key\":\"appointment\",\"type\":\"hidden\",\"calculateValue\":\"if (data.calltime === 'now') {\\n  value = moment().format();\\n} else if (data.plannedDate && data.slot && data.slot.value) {\\n  const datePart = moment(data.plannedDate).format('YYYY-MM-DD');\\n  value = moment(`${datePart}T${data.slot.value}`).format();\\n} else {\\n  value = '';\\n}\",\"persistent\":true},{\"label\":\"Cr\\u00e9neau format\\u00e9\",\"key\":\"appointment_formatted\",\"type\":\"hidden\",\"calculateValue\":\"if (data.appointment) {\\n  const months = ['janvier', 'f\\u00e9vrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'ao\\u00fbt', 'septembre', 'octobre', 'novembre', 'd\\u00e9cembre'];\\n  const m = moment(data.appointment);\\n  const day = m.date();\\n  const month = months[m.month()];\\n  const year = m.year();\\n  const hour = m.format('HH');\\n  const minute = m.format('mm');\\n  value = `le ${day} ${month} ${year} &agrave; ${hour}h${minute}`;\\n} else {\\n  value = '';\\n}\",\"persistent\":true}],\"input\":false,\"tableView\":false,\"label\":\"Panel\"},{\"title\":\"Confirmation\",\"breadcrumbClickable\":true,\"buttonSettings\":{\"previous\":true,\"cancel\":true,\"next\":true},\"navigateOnEnter\":false,\"saveOnEnter\":false,\"scrollToTop\":false,\"collapsible\":false,\"key\":\"step3\",\"type\":\"panel\",\"label\":\"Panel\",\"components\":[{\"label\":\"\\u00c0 quelle saison souhaitez-vous c\\u00e9l\\u00e9brer votre mariage ?\",\"key\":\"season\",\"type\":\"radio\",\"input\":true,\"inline\":false,\"values\":[{\"label\":\"<i class='bi bi-sun'><\\\/i> \\u00c9t\\u00e9\",\"value\":\"ete\"},{\"label\":\"<i class='bi bi-snow'><\\\/i> Hiver\",\"value\":\"hiver\"},{\"label\":\"<i class='bi bi-flower1'><\\\/i> Printemps\",\"value\":\"printemps\"},{\"label\":\"<i class='bi bi-cloud-drizzle'><\\\/i> Automne\",\"value\":\"automne\"},{\"label\":\"<i class='bi bi-question-circle'><\\\/i> Non connu\",\"value\":\"nonconnu\"}],\"validate\":{\"required\":true,\"customMessage\":\"Merci de choisir!\"},\"customClass\":\"d-flex flex-wrap gap-2\",\"template\":\"<label class='btn btn-outline-primary btn-check-label'>{{ item.label }}<\\\/label>\",\"tableView\":false}],\"input\":false,\"tableView\":false}]},\n        {\n            language: 'fr',\n            i18n: {\n                fr:{\n                    next:\"suivant\",\n                    cancel: \"annuler\",\n                    previous: \"pr\u00e9c\u00e9dent\",\n                    submit: 'Envoyer',\n                    required: ''\n                }\n            }\n        }\n    ).then(function(form) {\n        form.on('submit', function(submission) {\n            const modalBody = document.querySelector('#msf_69ff3e9ad0a48_modal .modal-body');\n            const modalHeader = document.querySelector('#msf_69ff3e9ad0a48_modal .modal-header');\n            if (modalHeader) modalHeader.remove();\n            if (modalBody) {\n                modalBody.innerHTML = `\n                    <div class=\"text-center py-5\">\n                        <div class=\"spinner-border text-primary mb-4\" role=\"status\" style=\"width: 4rem; height: 4rem;\">\n                            <span class=\"visually-hidden\">Loading...<\/span>\n                        <\/div>\n                        <p class=\"lead\">Enregistrement en cours...<\/p>\n                    <\/div>\n                `;\n            }\n\n            fetch('https:\/\/www.smartmariage.com\/wp-admin\/admin-ajax.php', {\n                method: 'POST',\n                headers: {\n                    'Content-Type': 'application\/x-www-form-urlencoded'\n                },\n                body: new URLSearchParams({\n                    action:       'msf_handle_form',\n                    data:         JSON.stringify(submission.data),\n                    widget_ref:   'msf_69ff3e9ad0a48'\n                })\n            })\n            .then(res => res.json())\n            .then(response => {\n                if (modalBody) {\n                    let seconds = 5;\n                    modalBody.innerHTML = `\n                        <div class=\"text-center py-5\">\n                            <div class=\"text-success mb-4\" style=\"font-size: 4rem;\">\n                                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"64\" height=\"64\" fill=\"currentColor\" class=\"bi bi-check-circle-fill\" viewBox=\"0 0 16 16\">\n                                    <path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM6.97 10.03a.75.75 0 0 0 1.07 0l3.992-3.992a.75.75 0 1 0-1.06-1.06L7.5 8.439 5.53 6.47a.75.75 0 0 0-1.06 1.06l2.5 2.5z\"\/>\n                                <\/svg>\n                            <\/div>\n                            <p class=\"lead\">Merci pour votre soumission !<\/p>\n                            <p class=\"text-muted\">Fermeture automatique dans <span id=\"success-timer\">${seconds}<\/span> secondes...<\/p>\n                            <button class=\"btn btn-success mt-3\" data-bs-dismiss=\"modal\">Fermer<\/button>\n                        <\/div>\n                    `;\n\n                    const interval = setInterval(() => {\n                        seconds--;\n                        const timer = document.getElementById('success-timer');\n                        if (timer) timer.textContent = seconds;\n                        if (seconds <= 0) {\n                            clearInterval(interval);\n                            const modalEl = document.getElementById('msf_69ff3e9ad0a48_modal');\n                            const modal = bootstrap.Modal.getInstance(modalEl);\n                            if (modal) modal.hide();\n                        }\n                    }, 1000);\n                }\n            })\n            .catch(() => {\n                if (modalBody) {\n                    let seconds = 15;\n                    modalBody.innerHTML = `\n                        <div class=\"text-center py-5\">\n                            <div class=\"text-danger mb-4\" style=\"font-size: 4rem;\">\n                                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"64\" height=\"64\" fill=\"currentColor\" class=\"bi bi-x-circle-fill\" viewBox=\"0 0 16 16\">\n                                    <path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z\"\/>\n                                <\/svg>\n                            <\/div>\n                            <p class=\"lead\">Une erreur est survenue,<br> veuillez essayer plus tard,<br> nous appeler ou nous envoyer un SMS<br> au <strong>+33 6 69 41 52 82<\/strong><\/p>\n                            <p class=\"text-muted\">Fermeture automatique dans <span id=\"error-timer\">${seconds}<\/span> secondes...<\/p>\n                            <button class=\"btn btn-danger mt-3\" data-bs-dismiss=\"modal\">Fermer<\/button>\n                        <\/div>\n                    `;\n\n                    const interval = setInterval(() => {\n                        seconds--;\n                        const timer = document.getElementById('error-timer');\n                        if (timer) timer.textContent = seconds;\n                        if (seconds <= 0) {\n                            clearInterval(interval);\n                            const modalEl = document.getElementById('msf_69ff3e9ad0a48_modal');\n                            const modal = bootstrap.Modal.getInstance(modalEl);\n                            if (modal) modal.hide();\n                        }\n                    }, 1000);\n                }\n            });\n        });\n    });\n});\n<\/script>\n<\/div><\/div><\/div><\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"En totale autonomie! Nos aides gratuites! Parce qu\u2019un bon d\u00e9part fait toute la diff\u00e9rence, nous vous offrons des ressources pr\u00e9cieuses pour vous aider \u00e0 organiser votre mariage, m\u00eame si vous [...]","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-3047","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.smartmariage.com\/en\/wp-json\/wp\/v2\/pages\/3047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.smartmariage.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.smartmariage.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.smartmariage.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.smartmariage.com\/en\/wp-json\/wp\/v2\/comments?post=3047"}],"version-history":[{"count":163,"href":"https:\/\/www.smartmariage.com\/en\/wp-json\/wp\/v2\/pages\/3047\/revisions"}],"predecessor-version":[{"id":3548,"href":"https:\/\/www.smartmariage.com\/en\/wp-json\/wp\/v2\/pages\/3047\/revisions\/3548"}],"wp:attachment":[{"href":"https:\/\/www.smartmariage.com\/en\/wp-json\/wp\/v2\/media?parent=3047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}