{"id":13,"date":"2026-07-24T01:02:07","date_gmt":"2026-07-23T23:02:07","guid":{"rendered":"https:\/\/caromedia.fr\/index.php\/vtc-booking-pro\/"},"modified":"2026-07-25T20:51:37","modified_gmt":"2026-07-25T18:51:37","slug":"vtc-booking-pro","status":"publish","type":"page","link":"https:\/\/caromedia.fr\/","title":{"rendered":"VTC Booking Pro"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"13\" class=\"elementor elementor-13\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-104509d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"104509d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-96a6c21\" data-id=\"96a6c21\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-43e9a20 elementor-widget elementor-widget-heading\" data-id=\"43e9a20\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Module De R\u00e9servation Pour Taxi &amp; VTC\nQui Convertit Vos Visiteurs En R\u00e9servation En Ligne<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-53a1fa4 vtcbp-hero elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"53a1fa4\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-55 elementor-top-column elementor-element elementor-element-2bc3397\" data-id=\"2bc3397\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e0cd5e7 elementor-widget elementor-widget-text-editor\" data-id=\"e0cd5e7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"vtcbp-eyebrow\">Extension WordPress \u00b7 Caromedia<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-57d8495 elementor-widget elementor-widget-text-editor\" data-id=\"57d8495\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"vtcbp-lead\">VTC Booking Pro transforme votre site WordPress en centrale de r\u00e9servation : devis instantan\u00e9, paiement en ligne, chauffeur pr\u00e9venu par SMS. Un shortcode, et c&rsquo;est en place.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3189ec1 elementor-align-left vtcbp-cta-accent elementor-widget elementor-widget-button\" data-id=\"3189ec1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-md\" href=\"#tarifs\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Voir les tarifs<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-45 elementor-top-column elementor-element elementor-element-b20a431\" data-id=\"b20a431\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4320edd elementor-widget__width-initial elementor-widget elementor-widget-shortcode\" data-id=\"4320edd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"><link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin><link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700;800&family=Outfit:wght@400;500;600;700;800&display=swap\" rel=\"stylesheet\">    <style>\n    \/* \u2500\u2500 Variables CSS dynamiques depuis Charte Graphique \u2500\u2500 *\/\n    .vtc-wrap {\n        --vtc-primary:       #0B5FFF;\n        --vtc-primary-dark:  #0850E0;\n        --vtc-primary-act:   #0850E0;\n        --vtc-primary-bg:    #eff6ff;\n        --vtc-primary-bg2:   #f0f7ff;\n        --vtc-primary-rgb:   11,95,255;\n        --vtc-accent:        #22D3EE;\n        --vtc-card-bg:       #FFFFFF;\n        --vtc-page-bg:       #FAFBFC;\n        --vtc-text:          #0F172A;\n        --vtc-text-muted:    #64748B;\n        --vtc-border:        #E8ECF1;\n        --vtc-border-input:  #E8ECF1;\n        --font-body:         'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;\n        --font-heading:      'Outfit', -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;\n        --radius-card:       16px;\n        --radius-button:     16px;\n        --radius-chip:       12px;\n    }\n    \/* Bouton principal \u2014 style dynamique *\/\n    .vtc-wrap .vtc-btn-main         { background: #0B5FFF; border-radius: 16px; }\n    .vtc-wrap .vtc-btn-main:hover   { background: #0850E0; }\n    .vtc-wrap .vtc-btn-main:active  { background: #0850E0; }\n    \/* Titres \u2014 police heading *\/\n    .vtc-wrap .vtc-title            { font-family: var(--font-heading); }\n    \/* Dark mode *\/\n        <\/style>\n\n    \n<div class=\"vtc-wrap\" id=\"vtc-form\">\n\n<!-- \u2500\u2500 HEADER Charte Graphique \u2500\u2500 -->\n<div class=\"vtc-header-cg\" style=\"background:linear-gradient(135deg, #0B5FFF, #22D3EE);padding:20px 24px;\">\n        <p style=\"font-family:var(--font-heading);font-size:11px;font-weight:600;color:rgba(255,255,255,.8);letter-spacing:1.5px;text-transform:uppercase;margin:0 0 6px;\">R\u00e9servation en ligne<\/p>\n        <h1 style=\"font-family:var(--font-heading);font-size:22px;font-weight:700;color:#ffffff;margin:0;letter-spacing:-.3px;line-height:1.2;\">O\u00f9 souhaitez-vous aller ?<\/h1>\n<\/div>\n\n<!-- ==================== STEP 1 ==================== -->\n<div class=\"vtc-s1\" id=\"vtc-s1\">\n\n    <!-- GAUCHE : Adresses -->\n    <div class=\"vtc-s1-left\">\n                <p class=\"vtc-title\">D\u00e9part &amp; Arriv\u00e9e<\/p>\n        \n        <label class=\"vtc-label\">D\u00e9part<\/label>\n        <div class=\"vtc-addr\">\n            <div class=\"vtc-addr-ic\">\ud83d\udccd<\/div>\n            <input id=\"departure\" placeholder=\"Adresse \/ A\u00e9roport \/ Gare\" autocomplete=\"off\">\n            <input type=\"hidden\" id=\"departure_lat\">\n            <input type=\"hidden\" id=\"departure_lng\">\n        <\/div>\n        <div id=\"departure_zone_info\" class=\"zone-info\"><\/div>\n\n        <label class=\"vtc-label\">Arriv\u00e9e<\/label>\n        <div class=\"vtc-addr\">\n            <div class=\"vtc-addr-ic\">\ud83c\udfc1<\/div>\n            <input id=\"arrival\" placeholder=\"Adresse \/ A\u00e9roport \/ Gare\" autocomplete=\"off\">\n            <input type=\"hidden\" id=\"arrival_lat\">\n            <input type=\"hidden\" id=\"arrival_lng\">\n        <\/div>\n        <div id=\"arrival_zone_info\" class=\"zone-info\"><\/div>\n\n        <!-- Arr\u00eat suppl\u00e9mentaire -->\n        <p class=\"vtc-label\" style=\"margin-bottom:8px;\">Arr\u00eat suppl\u00e9mentaire<\/p>\n        <div class=\"vtc-stop-row\">\n            <button type=\"button\" class=\"vtc-stop-btn\" onclick=\"vtcAddStop()\">\n                <span class=\"vtc-stop-ic\" style=\"background:#2ecc71\">+<\/span> Ajouter adresse\n            <\/button>\n            <button type=\"button\" class=\"vtc-stop-btn\" onclick=\"vtcRemoveStop()\">\n                <span class=\"vtc-stop-ic\" style=\"background:#e74c3c;font-size:18px;line-height:.85\">\u2212<\/span> Annuler adresse\n            <\/button>\n        <\/div>\n        <div id=\"vtc-stop-wrap\" style=\"display:none;margin-top:10px;\">\n            <div class=\"vtc-addr\">\n                <div class=\"vtc-addr-ic\">\ud83d\udccc<\/div>\n                <input id=\"stop_address\" placeholder=\"Adresse de l'arr\u00eat\" autocomplete=\"off\">\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- DROITE : Options -->\n    <div class=\"vtc-s1-right\">\n        <p class=\"vtc-title\">Options<\/p>\n\n        <!-- Type de trajet -->\n        <div class=\"vtc-radio-row\">\n            <div class=\"vtc-radio-item\">\n                <span>Aller simple<\/span>\n                <input type=\"radio\" name=\"trip_type\" id=\"one_way\" value=\"one_way\" checked onchange=\"vtcToggleReturn()\">\n            <\/div>\n            <div class=\"vtc-radio-item\">\n                <span>Aller \/ Retour<\/span>\n                <input type=\"radio\" name=\"trip_type\" id=\"return_trip\" value=\"return\" onchange=\"vtcToggleReturn()\">\n            <\/div>\n        <\/div>\n\n        <!-- Passagers + Bagages -->\n        <div class=\"vtc-opts-grid\">\n            <div>\n                <span class=\"vtc-opt-label\">Passagers<\/span>\n                <select id=\"passengers\" class=\"vtc-select\">\n                    <option value=\"1\">1<\/option><option value=\"2\">2<\/option><option value=\"3\">3<\/option><option value=\"4\">4<\/option><option value=\"5\">5<\/option><option value=\"6\">6<\/option><option value=\"7\">7<\/option><option value=\"8\">8<\/option>                <\/select>\n            <\/div>\n            <div>\n                <span class=\"vtc-opt-label\">Bagages<\/span>\n                <select id=\"bagages\" class=\"vtc-select\">\n                    <option value=\"0\">0<\/option><option value=\"1\">1<\/option><option value=\"2\">2<\/option><option value=\"3\">3<\/option><option value=\"4\">4<\/option><option value=\"5\">5<\/option><option value=\"6\">6<\/option><option value=\"7\">7<\/option><option value=\"8\">8<\/option>                <\/select>\n            <\/div>\n        <\/div>\n\n        <!-- Date et heure de d\u00e9part -->\n        <div class=\"vtc-date-row\" style=\"margin-bottom:14px;\">\n            <div>\n                <span class=\"vtc-opt-label\">Date de d\u00e9part<\/span>\n                <div class=\"vtc-date-wrap\">\n                    <div class=\"vtc-date-ic\">\ud83d\udcc5<\/div>\n                    <input type=\"date\" id=\"ride_date\" class=\"vtc-date-input\" min=\"2026-07-28\" onchange=\"checkNightTime();utbSyncReturnDateMin();\">\n                <\/div>\n            <\/div>\n            <div class=\"vtc-date-hm\">\n                <div>\n                    <span class=\"vtc-opt-label\">Heure<\/span>\n                    <select id=\"vtc-h\" class=\"vtc-select\" onchange=\"vtcSyncTime()\">\n                                                <option value=\"00\" >00<\/option>\n                                                <option value=\"01\" >01<\/option>\n                                                <option value=\"02\" >02<\/option>\n                                                <option value=\"03\" >03<\/option>\n                                                <option value=\"04\" >04<\/option>\n                                                <option value=\"05\" >05<\/option>\n                                                <option value=\"06\" >06<\/option>\n                                                <option value=\"07\" >07<\/option>\n                                                <option value=\"08\" >08<\/option>\n                                                <option value=\"09\" >09<\/option>\n                                                <option value=\"10\" >10<\/option>\n                                                <option value=\"11\" >11<\/option>\n                                                <option value=\"12\" selected>12<\/option>\n                                                <option value=\"13\" >13<\/option>\n                                                <option value=\"14\" >14<\/option>\n                                                <option value=\"15\" >15<\/option>\n                                                <option value=\"16\" >16<\/option>\n                                                <option value=\"17\" >17<\/option>\n                                                <option value=\"18\" >18<\/option>\n                                                <option value=\"19\" >19<\/option>\n                                                <option value=\"20\" >20<\/option>\n                                                <option value=\"21\" >21<\/option>\n                                                <option value=\"22\" >22<\/option>\n                                                <option value=\"23\" >23<\/option>\n                                            <\/select>\n                <\/div>\n                <div>\n                    <span class=\"vtc-opt-label\">Min<\/span>\n                    <select id=\"vtc-m\" class=\"vtc-select\" onchange=\"vtcSyncTime()\">\n                        <option value=\"00\">00<\/option><option value=\"15\">15<\/option>\n                        <option value=\"30\">30<\/option><option value=\"45\">45<\/option>\n                    <\/select>\n                <\/div>\n            <\/div>\n        <\/div>\n        <input type=\"hidden\" id=\"ride_time\" value=\"12:00\">\n\n        <!-- Date de retour -->\n        <div id=\"return-date-section\" style=\"display:none;margin-bottom:14px;\">\n            <div class=\"vtc-date-row\">\n                <div>\n                    <span class=\"vtc-opt-label\">Date de retour<\/span>\n                    <div class=\"vtc-date-wrap\">\n                        <div class=\"vtc-date-ic\">\ud83d\udcc5<\/div>\n                        <input type=\"date\" id=\"return_date\" class=\"vtc-date-input\" min=\"2026-07-28\">\n                    <\/div>\n                <\/div>\n                <div class=\"vtc-date-hm\">\n                    <div>\n                        <span class=\"vtc-opt-label\">Heure<\/span>\n                        <select id=\"vtc-rh\" class=\"vtc-select\" onchange=\"vtcSyncReturnTime()\">\n                                                        <option value=\"00\" >00<\/option>\n                                                        <option value=\"01\" >01<\/option>\n                                                        <option value=\"02\" >02<\/option>\n                                                        <option value=\"03\" >03<\/option>\n                                                        <option value=\"04\" >04<\/option>\n                                                        <option value=\"05\" >05<\/option>\n                                                        <option value=\"06\" >06<\/option>\n                                                        <option value=\"07\" >07<\/option>\n                                                        <option value=\"08\" >08<\/option>\n                                                        <option value=\"09\" >09<\/option>\n                                                        <option value=\"10\" >10<\/option>\n                                                        <option value=\"11\" >11<\/option>\n                                                        <option value=\"12\" selected>12<\/option>\n                                                        <option value=\"13\" >13<\/option>\n                                                        <option value=\"14\" >14<\/option>\n                                                        <option value=\"15\" >15<\/option>\n                                                        <option value=\"16\" >16<\/option>\n                                                        <option value=\"17\" >17<\/option>\n                                                        <option value=\"18\" >18<\/option>\n                                                        <option value=\"19\" >19<\/option>\n                                                        <option value=\"20\" >20<\/option>\n                                                        <option value=\"21\" >21<\/option>\n                                                        <option value=\"22\" >22<\/option>\n                                                        <option value=\"23\" >23<\/option>\n                                                    <\/select>\n                    <\/div>\n                    <div>\n                        <span class=\"vtc-opt-label\">Min<\/span>\n                        <select id=\"vtc-rm\" class=\"vtc-select\" onchange=\"vtcSyncReturnTime()\">\n                            <option value=\"00\">00<\/option><option value=\"15\">15<\/option>\n                            <option value=\"30\">30<\/option><option value=\"45\">45<\/option>\n                        <\/select>\n                    <\/div>\n                <\/div>\n            <\/div>\n            <input type=\"hidden\" id=\"return_time\" value=\"12:00\">\n        <\/div>\n\n        <!-- N\u00b0 vol \/ gare -->\n        <div style=\"margin-bottom:14px;\">\n            <span class=\"vtc-opt-label\">N\u00b0 de vol, gare, ferry<\/span>\n            <div class=\"vtc-addr\" style=\"margin-bottom:0;\">\n                <div class=\"vtc-addr-ic\" style=\"color:#185FA5;\">\u2708\ufe0f<\/div>\n                <input type=\"text\" id=\"flight_number\" placeholder=\"Ex : AF1234\">\n            <\/div>\n        <\/div>\n\n        <div id=\"night_indicator\" class=\"vtc-night\"><span>\ud83c\udf19<\/span> Tarif nuit appliqu\u00e9 (22h\u20136h)<\/div>\n\n        <!-- Hidden fields -->\n        <div class=\"vtc-honeypot\"><input type=\"text\" id=\"website\" tabindex=\"-1\" autocomplete=\"off\"><\/div>\n    <\/div>\n<\/div>\n\n<button class=\"vtc-btn-main\" id=\"vtc-btn-next\" onclick=\"vtcGoStep2()\">Voir les v\u00e9hicules disponibles \u2192<\/button>\n\n<!-- ==================== STEP 2 ==================== -->\n<div class=\"vtc-s2\" id=\"vtc-s2\">\n\n    <div class=\"vtc-s2-recap\">\n        <div class=\"vtc-map-box\">\n            <div id=\"vtc-route-map\"><\/div>\n        <\/div>\n        <div class=\"vtc-recap-box\">\n            <p class=\"vtc-recap-section\">Date &amp; heure<\/p>\n            <div class=\"vtc-recap-row\"><span>D\u00e9part<\/span><span id=\"rc-datetime\">\u2014<\/span><\/div>\n            <div class=\"vtc-recap-row\"><span>Distance \/ dur\u00e9e<\/span><span id=\"rc-distance\">\u2014<\/span><\/div>\n            <div class=\"vtc-recap-opts\">\n                <p class=\"vtc-recap-section\" style=\"margin-top:14px;\">Options<\/p>\n                <div class=\"vtc-recap-opts-grid\">\n                    <div class=\"vtc-recap-opt\"><span>\ud83d\udc65 Passagers<\/span><span id=\"rc-pax\">1<\/span><\/div>\n                    <div class=\"vtc-recap-opt\"><span>\ud83d\udd04 Retour<\/span><span id=\"rc-type\">Non<\/span><\/div>\n                    <div class=\"vtc-recap-opt\"><span>\ud83e\uddf3 Bagages<\/span><span id=\"rc-bags\">0<\/span><\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"vtc-vehicles\" id=\"vtc-vehicle-list\">\n                <div class=\"vtc-vcard selected\"\n             id=\"vtc-vc-berline\"\n             onclick=\"vtcPickVeh('berline')\">\n            <input type=\"radio\" name=\"vehicle\" value=\"berline\" checked style=\"display:none\">\n            <div class=\"vtc-vcard-photo\">\n                <img decoding=\"async\" src=\"https:\/\/images.unsplash.com\/photo-1552519507-da3b142c6e3d?w=500&#038;q=80\" alt=\"Berline\"\n                     loading=\"lazy\" onerror=\"this.style.display='none'\">\n            <\/div>\n            <div class=\"vtc-vcard-body\">\n                <div class=\"vtc-vcard-info\">\n                    <div class=\"vtc-vcard-name\">Berline<\/div>\n                    <div class=\"vtc-vcard-caps\">\n                        <div class=\"vtc-vcard-cap\"><span>\ud83d\udc65<\/span><span>3 passagers<\/span><\/div>\n                        <div class=\"vtc-vcard-cap\"><span>\ud83e\uddf3<\/span><span>3 bagages<\/span><\/div>\n                    <\/div>\n                <\/div>\n                <div class=\"vtc-vcard-right\">\n                    <div class=\"vtc-vcard-price\">\n                        <span id=\"vtc-price-berline\">\u2014<\/span><sup>\u20ac<\/sup>\n                    <\/div>\n                    <button type=\"button\" class=\"vtc-reserver\"\n                        onclick=\"event.stopPropagation();vtcPickVeh('berline');setTimeout(vtcGoStep3,50)\">\n                        R\u00c9SERVER\n                    <\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"vtc-vcard \"\n             id=\"vtc-vc-van\"\n             onclick=\"vtcPickVeh('van')\">\n            <input type=\"radio\" name=\"vehicle\" value=\"van\"  style=\"display:none\">\n            <div class=\"vtc-vcard-photo\">\n                <img decoding=\"async\" src=\"https:\/\/images.unsplash.com\/photo-1544636331-e26879cd4d9b?w=500&#038;q=80\" alt=\"Van\"\n                     loading=\"lazy\" onerror=\"this.style.display='none'\">\n            <\/div>\n            <div class=\"vtc-vcard-body\">\n                <div class=\"vtc-vcard-info\">\n                    <div class=\"vtc-vcard-name\">Van<\/div>\n                    <div class=\"vtc-vcard-caps\">\n                        <div class=\"vtc-vcard-cap\"><span>\ud83d\udc65<\/span><span>8 passagers<\/span><\/div>\n                        <div class=\"vtc-vcard-cap\"><span>\ud83e\uddf3<\/span><span>8 bagages<\/span><\/div>\n                    <\/div>\n                <\/div>\n                <div class=\"vtc-vcard-right\">\n                    <div class=\"vtc-vcard-price\">\n                        <span id=\"vtc-price-van\">\u2014<\/span><sup>\u20ac<\/sup>\n                    <\/div>\n                    <button type=\"button\" class=\"vtc-reserver\"\n                        onclick=\"event.stopPropagation();vtcPickVeh('van');setTimeout(vtcGoStep3,50)\">\n                        R\u00c9SERVER\n                    <\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"vtc-vcard \"\n             id=\"vtc-vc-luxury\"\n             onclick=\"vtcPickVeh('luxury')\">\n            <input type=\"radio\" name=\"vehicle\" value=\"luxury\"  style=\"display:none\">\n            <div class=\"vtc-vcard-photo\">\n                <img decoding=\"async\" src=\"https:\/\/images.unsplash.com\/photo-1583121274602-3e2820c69888?w=500&#038;q=80\" alt=\"Luxury\"\n                     loading=\"lazy\" onerror=\"this.style.display='none'\">\n            <\/div>\n            <div class=\"vtc-vcard-body\">\n                <div class=\"vtc-vcard-info\">\n                    <div class=\"vtc-vcard-name\">Luxury<\/div>\n                    <div class=\"vtc-vcard-caps\">\n                        <div class=\"vtc-vcard-cap\"><span>\ud83d\udc65<\/span><span>4 passagers<\/span><\/div>\n                        <div class=\"vtc-vcard-cap\"><span>\ud83e\uddf3<\/span><span>4 bagages<\/span><\/div>\n                    <\/div>\n                <\/div>\n                <div class=\"vtc-vcard-right\">\n                    <div class=\"vtc-vcard-price\">\n                        <span id=\"vtc-price-luxury\">\u2014<\/span><sup>\u20ac<\/sup>\n                    <\/div>\n                    <button type=\"button\" class=\"vtc-reserver\"\n                        onclick=\"event.stopPropagation();vtcPickVeh('luxury');setTimeout(vtcGoStep3,50)\">\n                        R\u00c9SERVER\n                    <\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n            <\/div>\n\n    <button type=\"button\" class=\"vtc-back-link\" onclick=\"vtcBack1()\">\u2190 Modifier le trajet<\/button>\n<\/div>\n\n<!-- ==================== STEP 3 ==================== -->\n<div class=\"vtc-s3\" id=\"vtc-s3\">\n<div class=\"vtc-s3-wrap\">\n\n    <!-- GAUCHE : Formulaire -->\n    <div class=\"vtc-s3-left\">\n\n        <div class=\"vtc-s3-veh-box\">\n            <p class=\"vtc-s3-veh-label\">V\u00e9hicule s\u00e9lectionn\u00e9<\/p>\n            <div class=\"vtc-s3-veh-card\">\n                <div>\n                    <div class=\"vtc-s3-veh-name\" id=\"s3-veh-name\">\u2014<\/div>\n                    <span class=\"vtc-s3-veh-badge\" id=\"s3-trip-badge\">ALLER SIMPLE<\/span>\n                <\/div>\n                <div class=\"vtc-s3-veh-price\"><span id=\"s3-price\">\u2014<\/span><sup>\u20ac<\/sup><\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"vtc-s3-form\">\n            <p class=\"vtc-s3-form-title\">Vos coordonn\u00e9es<\/p>\n\n            <div class=\"vtc-s3-grid\">\n                <div class=\"vtc-s3-field\">\n                    <label>Pr\u00e9nom <span style=\"color:#e53e3e;\">*<\/span><\/label>\n                    <input type=\"text\" id=\"vtc-prenom\" placeholder=\"Votre pr\u00e9nom\" autocomplete=\"given-name\">\n                <\/div>\n                <div class=\"vtc-s3-field\">\n                    <label>Nom <span style=\"color:#e53e3e;\">*<\/span><\/label>\n                    <input type=\"text\" id=\"vtc-nom\" placeholder=\"Votre nom\" autocomplete=\"family-name\">\n                <\/div>\n                <div class=\"vtc-s3-field\">\n                    <label>T\u00e9l\u00e9phone <span style=\"color:#e53e3e;\">*<\/span><\/label>\n                    <input type=\"tel\" id=\"phone\" placeholder=\"+33 6 00 00 00 00\" autocomplete=\"tel\">\n                <\/div>\n                <div class=\"vtc-s3-field\">\n                    <label>Email <span style=\"color:#e53e3e;\">*<\/span><\/label>\n                    <input type=\"email\" id=\"email\" placeholder=\"votre@email.com\" autocomplete=\"email\" required>\n                <\/div>\n            <\/div>\n\n            <!-- Code promo -->\n            <div id=\"vtc-s3-promo-wrap\" style=\"\">\n                <div class=\"vtc-s3-promo\">\n                    <input type=\"text\" id=\"promo_code_input\" placeholder=\"CODE PROMO\" oninput=\"this.value=this.value.toUpperCase()\">\n                    <button type=\"button\" onclick=\"utbApplyPromo()\">APPLIQUER<\/button>\n                <\/div>\n                <div id=\"promo_message\" style=\"font-size:12px;margin-bottom:10px;color:#555;min-height:18px;\"><\/div>\n            <\/div>\n\n            <!-- Commentaires -->\n            <div class=\"vtc-s3-field\" style=\"margin-bottom:14px;\">\n                <label>Commentaires<\/label>\n                <textarea id=\"vtc-comments\" rows=\"3\" placeholder=\"Informations suppl\u00e9mentaires, bagages sp\u00e9ciaux...\"><\/textarea>\n            <\/div>\n\n            <!-- Hidden compat fields -->\n            <input type=\"hidden\" id=\"name\" value=\"\">\n            <div id=\"price\" style=\"display:none;\"><\/div>\n            <div id=\"trip_info\" style=\"display:none;\"><\/div>\n            <div id=\"price_breakdown\" style=\"display:none;\"><\/div>\n            <div class=\"vtc-honeypot\"><input type=\"text\" id=\"website_s3\" tabindex=\"-1\" autocomplete=\"off\"><\/div>\n\n            \n                        <div class=\"vtc-consent\" style=\"margin:12px 0;padding:10px 12px;background:#f7f8fa;border:1px solid #dce1e7;border-radius:4px;\">\n                <label style=\"display:flex;gap:8px;align-items:flex-start;font-size:12.5px;line-height:1.5;cursor:pointer;\">\n                    <input type=\"checkbox\" id=\"utb_consent\" style=\"margin-top:2px;flex-shrink:0;\">\n                    <span>\n                        J'accepte que mes donn&eacute;es soient utilis&eacute;es pour traiter ma r&eacute;servation.\n                                            <\/span>\n                <\/label>\n                <div id=\"utb_consent_err\" style=\"display:none;color:#d32f2f;font-size:12px;margin-top:6px;\">Merci de cocher cette case pour continuer.<\/div>\n            <\/div>\n\n            \n            <!-- Paiement en ligne -->\n            <div id=\"utb-payment-section\" style=\"display:none;margin-bottom:14px;\">\n                <div style=\"border:1px solid #dce1e7;border-radius:4px;overflow:hidden;\">\n                    <div style=\"background:#f7f8fa;padding:10px 14px;border-bottom:1px solid #dce1e7;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;\">\ud83d\udcb3 Mode de paiement<\/div>\n                    <div style=\"padding:12px;\">\n                        <label id=\"utb-pay-later-wrap\" class=\"vtc-pay-option\"><input type=\"radio\" name=\"utb_pay_method\" value=\"none\" checked onchange=\"utbSelectPayMethod('none')\"> \ud83d\udcb5 Paiement \u00e0 bord<\/label>\n                        <label id=\"utb-stripe-wrap\" class=\"vtc-pay-option\" style=\"display:none;\"><input type=\"radio\" name=\"utb_pay_method\" value=\"stripe\" onchange=\"utbSelectPayMethod('stripe')\"> \ud83d\udcb3 Carte bancaire (Stripe)<\/label>\n                        <label id=\"utb-paypal-wrap\" class=\"vtc-pay-option\" style=\"display:none;\"><input type=\"radio\" name=\"utb_pay_method\" value=\"paypal\" onchange=\"utbSelectPayMethod('paypal')\"> \ud83c\udd7f\ufe0f PayPal<\/label>\n                        <div id=\"utb-stripe-fields\" style=\"display:none;\"><div id=\"utb-stripe-element\" style=\"padding:12px;border:1px solid #ccc;border-radius:3px;background:#fff;min-height:44px;\"><\/div><div id=\"utb-stripe-error\" style=\"color:#d32f2f;font-size:12px;margin-top:5px;\"><\/div><\/div>\n                        <div id=\"utb-paypal-button-container\" style=\"display:none;\">\n                            <!-- Bouton PayPal standard (compte PayPal) -->\n                            <div id=\"utb-paypal-btn-wrap\" style=\"margin-bottom:10px;\"><\/div>\n                            <!-- S\u00e9parateur -->\n                            <div style=\"display:flex;align-items:center;gap:8px;margin:10px 0;\">\n                                <div style=\"flex:1;height:1px;background:#dce1e7;\"><\/div>\n                                <span style=\"font-size:11px;color:#999;white-space:nowrap;\">ou payer par carte<\/span>\n                                <div style=\"flex:1;height:1px;background:#dce1e7;\"><\/div>\n                            <\/div>\n                            <!-- Champs carte PayPal (Hosted Fields) -->\n                            <div id=\"utb-paypal-card-form\">\n                                <div style=\"margin-bottom:8px;\">\n                                    <label style=\"font-size:12px;color:#555;display:block;margin-bottom:4px;\">Num\u00e9ro de carte<\/label>\n                                    <div id=\"utb-pp-card-number\" style=\"padding:10px;border:1px solid #ccc;border-radius:3px;background:#fff;min-height:38px;\"><\/div>\n                                <\/div>\n                                <div style=\"display:flex;gap:8px;margin-bottom:8px;\">\n                                    <div style=\"flex:1;\">\n                                        <label style=\"font-size:12px;color:#555;display:block;margin-bottom:4px;\">Date d'expiration<\/label>\n                                        <div id=\"utb-pp-expiry\" style=\"padding:10px;border:1px solid #ccc;border-radius:3px;background:#fff;min-height:38px;\"><\/div>\n                                    <\/div>\n                                    <div style=\"flex:1;\">\n                                        <label style=\"font-size:12px;color:#555;display:block;margin-bottom:4px;\">CVV<\/label>\n                                        <div id=\"utb-pp-cvv\" style=\"padding:10px;border:1px solid #ccc;border-radius:3px;background:#fff;min-height:38px;\"><\/div>\n                                    <\/div>\n                                <\/div>\n                                <div id=\"utb-pp-card-error\" style=\"color:#d32f2f;font-size:12px;margin-bottom:6px;display:none;\"><\/div>\n                                <button type=\"button\" id=\"utb-pp-card-submit\" style=\"width:100%;padding:11px;background:#003087;color:#fff;border:none;border-radius:3px;font-size:14px;font-weight:700;cursor:pointer;\">\n                                    \ud83d\udcb3 Payer par carte\n                                <\/button>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <button type=\"button\" class=\"vtc-btn-main\" id=\"confirm-btn\" onclick=\"vtcConfirm()\">CONFIRMER LA R\u00c9SERVATION<\/button>\n        <\/div>\n    <\/div>\n\n    <!-- DROITE : R\u00e9capitulatif -->\n    <div class=\"vtc-s3-right\">\n        <div style=\"margin-bottom:12px;\">\n            <div class=\"vtc-s3-addr-row\"><span style=\"color:#185FA5;font-size:16px;\">\ud83d\ude80<\/span><span id=\"s3-dep\">\u2014<\/span><\/div>\n            <div class=\"vtc-s3-addr-row\"><span style=\"color:#185FA5;font-size:16px;\">\ud83c\udfc1<\/span><span id=\"s3-arr\">\u2014<\/span><\/div>\n        <\/div>\n\n        <p class=\"vtc-s3-recap-title\">Date &amp; heure<\/p>\n        <div class=\"vtc-s3-recap-row\"><span>D\u00e9part<\/span><span id=\"s3-datetime\">\u2014<\/span><\/div>\n        <div class=\"vtc-s3-recap-row\"><span>Distance<\/span><span id=\"s3-distance\">\u2014<\/span><\/div>\n\n        <p class=\"vtc-s3-recap-title\">Options<\/p>\n        <div class=\"vtc-s3-opts-grid\">\n            <div class=\"vtc-s3-opt\"><span>\ud83d\udc65 Passagers<\/span><span id=\"s3-pax\">1<\/span><\/div>\n            <div class=\"vtc-s3-opt\"><span>\ud83d\udd04 Retour<\/span><span id=\"s3-type\">Non<\/span><\/div>\n            <div class=\"vtc-s3-opt\"><span>\ud83e\uddf3 Bagages<\/span><span id=\"s3-bags\">0<\/span><\/div>\n        <\/div>\n\n        <!-- D\u00e9tail prix -->\n        <div id=\"vtc-price-detail\" style=\"display:none;margin-top:16px;background:#f0f9ff;border:1px solid #bae6fd;border-radius:4px;padding:12px;\">\n            <div class=\"price-breakdown\" id=\"price_breakdown_s3\"><\/div>\n            <div id=\"s3-price-total\" style=\"text-align:center;font-size:22px;font-weight:700;color:#185FA5;margin-top:10px;\"><\/div>\n        <\/div>\n    <\/div>\n\n<\/div>\n<button type=\"button\" class=\"vtc-back-link\" onclick=\"vtcBack2()\">\u2190 Modifier le v\u00e9hicule<\/button>\n<\/div>\n\n<\/div><!-- end vtc-wrap -->\n\n<script>\n\/\/ ===== CORE STATE \u2014 charg\u00e9 via AJAX no-cache (jamais mis en cache par LWS\/Rocket\/etc.) =====\nvar utb_ajax = { ajax_url: 'https:\/\/caromedia.fr\/wp-admin\/admin-ajax.php' };\n\/\/ Promo \u2014 valeur directe depuis PHP (non cacheable car dans <script> inline avec nonce WP)\nvar UTB_PROMO_ENABLED = true;\n(function(){\n    \/\/ Appliquer imm\u00e9diatement avant tout AJAX\n    var pw = document.getElementById('vtc-s3-promo-wrap');\n    if(pw) pw.style.display = UTB_PROMO_ENABLED ? '' : 'none';\n})();\nvar utb_maps_api_key='', price=0, distanceKm=0;\nvar departureZone='default', arrivalZone='default';\nvar isNight=false;\nvar RETURN_MULTIPLIER=1.8, VEHICLES={}, ZONES={};\nvar UTB_DISPLAY={distance:true,price_km:true,base_price:false,min_price:false,extra_fee:true,night_fee:true,night_enabled:true};\nvar UTB_PAYMENT={enabled:false,mode:'optional',stripe_enabled:false,stripe_pk:'',paypal_enabled:false,paypal_id:'',enforced:false};\nvar departureAutocomplete, arrivalAutocomplete;\nvar _utbConfigLoaded=false;\n\n\/\/ Charge toute la config depuis le serveur sans cache\nfunction utbLoadConfig(cb){\n    fetch(utb_ajax.ajax_url,{\n        method:'POST',\n        headers:{'Content-Type':'application\/x-www-form-urlencoded','X-Requested-With':'XMLHttpRequest'},\n        body:'action=utb_get_config&nonce='+utb_ajax.nonce+'&_t='+Date.now()\n    })\n    .then(function(r){return r.json();})\n    .then(function(res){\n        if(!res.success) return;\n        var d=res.data;\n        utb_ajax.nonce    = d.nonce;\n        utb_ajax.ajax_url = d.ajax_url;\n        utb_maps_api_key  = d.maps_key;\n        RETURN_MULTIPLIER = d.return_multiplier;\n        VEHICLES          = d.vehicles;\n        ZONES             = d.zones;\n        UTB_DISPLAY       = d.display;\n        UTB_PAYMENT       = d.payment;\n        window._utbPageLoadTime  = Date.now();\n        window._utbNonceLifetime = 10*60*1000;\n        _utbConfigLoaded = true;\n        \/\/ FIX PROMO \u2014 appliquer depuis AJAX (insensible au cache serveur)\n        var promoWrap=document.getElementById('vtc-s3-promo-wrap');\n        if(promoWrap){promoWrap.style.display=(d.promo_enabled===true)?'':'none';}\n        \/\/ Charger Google Maps si cl\u00e9 pr\u00e9sente\n        if(utb_maps_api_key && typeof google==='undefined'){\n            var s=document.createElement('script');\n            s.src='https:\/\/maps.googleapis.com\/maps\/api\/js?key='+utb_maps_api_key+'&libraries=places,geometry&callback=initAutocomplete';\n            s.async=true; s.defer=true;\n            document.head.appendChild(s);\n        } else if(typeof google!=='undefined' && typeof initAutocomplete==='function'){\n            initAutocomplete();\n        }\n        checkNightTime();\n        if(cb) cb();\n    })\n    .catch(function(e){console.error('UTB config error:',e);});\n}\n\nwindow._utbRefreshNonce=function(cb){\n    fetch(utb_ajax.ajax_url,{\n        method:'POST',\n        headers:{'Content-Type':'application\/x-www-form-urlencoded','X-Requested-With':'XMLHttpRequest'},\n        body:'action=utb_get_config&_t='+Date.now()\n    }).then(function(r){return r.json();}).then(function(res){\n        if(res.success&&res.data&&res.data.nonce) utb_ajax.nonce=res.data.nonce;\n        if(cb) cb();\n    }).catch(function(){if(cb) cb();});\n};\n\n\n\/\/ ===== AUTOCOMPLETE =====\nfunction initAutocomplete(){\n    var dI=document.getElementById('departure'), aI=document.getElementById('arrival');\n    var opts={types:['geocode','establishment'],fields:['formatted_address','geometry','name']};\n    departureAutocomplete=new google.maps.places.Autocomplete(dI,opts);\n    arrivalAutocomplete=new google.maps.places.Autocomplete(aI,opts);\n    departureAutocomplete.addListener('place_changed',function(){\n        var p=departureAutocomplete.getPlace();\n        if(p.geometry){\n            document.getElementById('departure_lat').value=p.geometry.location.lat();\n            document.getElementById('departure_lng').value=p.geometry.location.lng();\n            var oldZone=departureZone;\n            detectZone(p.geometry.location.lat(),p.geometry.location.lng(),'departure');\n            \/\/ FIX \u2014 recalculer les prix si la zone a chang\u00e9 et qu'on est d\u00e9j\u00e0 \u00e0 l'\u00e9tape 2\n            if(oldZone!==departureZone && (distanceKm>0||arrivalZone)) vtcFetchAllPrices();\n        }\n    });\n    arrivalAutocomplete.addListener('place_changed',function(){\n        var p=arrivalAutocomplete.getPlace();\n        if(p.geometry){\n            document.getElementById('arrival_lat').value=p.geometry.location.lat();\n            document.getElementById('arrival_lng').value=p.geometry.location.lng();\n            var oldZone=arrivalZone;\n            detectZone(p.geometry.location.lat(),p.geometry.location.lng(),'arrival');\n            \/\/ FIX \u2014 recalculer les prix si la zone a chang\u00e9 et qu'on est d\u00e9j\u00e0 \u00e0 l'\u00e9tape 2\n            if(oldZone!==arrivalZone && (distanceKm>0||departureZone)) vtcFetchAllPrices();\n        }\n    });\n    document.getElementById('ride_date').addEventListener('change',checkNightTime);\n    document.getElementById('ride_time').addEventListener('change',checkNightTime);\n}\n\n\/\/ ===== ZONE DETECTION =====\nfunction detectZone(lat,lng,type){\n    for(var key in ZONES){\n        var z=ZONES[key]; if(!z.data) continue;\n        try{\n            var d=typeof z.data==='string'?JSON.parse(z.data):z.data;\n            if(d&&d.lat!==undefined&&d.radius!==undefined){\n                if(getDistKm(lat,lng,d.lat,d.lng)<=(d.radius\/1000)){\n                    if(type==='departure')departureZone=key; else arrivalZone=key;\n                    showZoneInfo(type,z.name,z.is_airport); checkAirportFields(); return;\n                }\n            }\n            if(Array.isArray(d)&&d.length>=3&&pointInPoly(lat,lng,d)){\n                if(type==='departure')departureZone=key; else arrivalZone=key;\n                showZoneInfo(type,z.name,z.is_airport); checkAirportFields(); return;\n            }\n        }catch(e){}\n    }\n    \/\/ Aucune zone d\u00e9tect\u00e9e \u2192 default (calcul au km normal)\n    if(type==='departure') departureZone='default'; else arrivalZone='default';\n    var el=document.getElementById(type+'_zone_info');\n    if(el){el.innerHTML='';el.classList.remove('active');}\n    checkAirportFields();\n}\nfunction pointInPoly(lat,lng,poly){\n    var inside=false;\n    for(var i=0,j=poly.length-1;i<poly.length;j=i++){\n        var xi=poly[i].lat,yi=poly[i].lng,xj=poly[j].lat,yj=poly[j].lng;\n        if(((yi>lng)!==(yj>lng))&&(lat<(xj-xi)*(lng-yi)\/(yj-yi)+xi))inside=!inside;\n    }\n    return inside;\n}\nfunction showZoneInfo(type,name,isAirport){\n    var el=document.getElementById(type+'_zone_info');\n    if(!el)return;\n    el.innerHTML='\ud83d\udccd Zone : <strong>'+name+'<\/strong>'+(isAirport?' \u2708\ufe0f':'');\n    el.classList.add('active'); el.style.color='#185FA5';\n}\nfunction checkAirportFields(){\n    var isAP=(ZONES[departureZone]&&ZONES[departureZone].is_airport)||(ZONES[arrivalZone]&&ZONES[arrivalZone].is_airport);\n    var f=document.getElementById('flight_field'); if(f) f.classList[isAP?'add':'remove']('active');\n}\nfunction getDistKm(lat1,lon1,lat2,lon2){\n    var R=6371,dL=deg2rad(lat2-lat1),dO=deg2rad(lon2-lon1);\n    var a=Math.sin(dL\/2)*Math.sin(dL\/2)+Math.cos(deg2rad(lat1))*Math.cos(deg2rad(lat2))*Math.sin(dO\/2)*Math.sin(dO\/2);\n    return R*2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));\n}\nfunction deg2rad(d){return d*(Math.PI\/180);}\n\n\/\/ ===== NIGHT CHECK =====\nfunction checkNightTime(){\n    var rt=document.getElementById('ride_time');\n    if(!rt||!rt.value)return;\n    var h=parseInt(rt.value.split(':')[0]);\n    isNight=UTB_DISPLAY.night_enabled&&(h>=22||h<6);\n    var ind=document.getElementById('night_indicator');\n    if(ind) ind.classList[isNight?'add':'remove']('active');\n}\n\n\/\/ ===== HELPERS =====\nfunction getSelectedVehicle(){var r=document.querySelector('input[name=\"vehicle\"]:checked');return r?r.value.toLowerCase():'berline';}\nfunction getTripType(){var r=document.querySelector('input[name=\"trip_type\"]:checked');return r?r.value:'one_way';}\nfunction vtcAddStop(){var w=document.getElementById('vtc-stop-wrap');if(w)w.style.display='block';}\nfunction vtcRemoveStop(){var w=document.getElementById('vtc-stop-wrap'),s=document.getElementById('stop_address');if(w)w.style.display='none';if(s)s.value='';}\nfunction vtcSyncTime(){\n    var h=document.getElementById('vtc-h').value||'12',m=document.getElementById('vtc-m').value||'00';\n    document.getElementById('ride_time').value=h+':'+m;\n    checkNightTime();\n}\nfunction vtcSyncReturnTime(){\n    var h=document.getElementById('vtc-rh').value||'12',m=document.getElementById('vtc-rm').value||'00';\n    var rt=document.getElementById('return_time');if(rt)rt.value=h+':'+m;\n}\nfunction utbSyncReturnDateMin(){\n    var a=document.getElementById('ride_date').value;\n    var r=document.getElementById('return_date');\n    if(r&&a){r.min=a;if(r.value&&r.value<a)r.value=a;}\n}\nfunction vtcToggleReturn(){\n    var isR=getTripType()==='return';\n    var s=document.getElementById('return-date-section');\n    if(s) s.style.display=isR?'block':'none';\n    if(!isR){var rd=document.getElementById('return_date');if(rd)rd.value='';}\n}\n\n\/\/ ===== STEP NAVIGATION =====\nfunction vtcGoStep2(){\n    \/\/ Attendre que la config soit charg\u00e9e (AJAX no-cache)\n    if(!_utbConfigLoaded){\n        var btn=document.getElementById('vtc-btn-next');\n        if(btn){btn.disabled=true;btn.textContent='\u23f3 Chargement...';}\n        utbLoadConfig(function(){\n            if(btn){btn.disabled=false;btn.textContent='\u00c9TAPE SUIVANTE \u2192';}\n            vtcGoStep2();\n        });\n        return;\n    }\n    var dep=document.getElementById('departure').value.trim();\n    var arr=document.getElementById('arrival').value.trim();\n    var rd=document.getElementById('ride_date').value;\n    var dLat=parseFloat(document.getElementById('departure_lat').value)||0;\n    var aLat=parseFloat(document.getElementById('arrival_lat').value)||0;\n    if(!dep||!arr){alert(\"Veuillez remplir le d\u00e9part et l'arriv\u00e9e.\");return;}\n    if(!dLat||!aLat){alert(\"Veuillez s\u00e9lectionner les adresses depuis les suggestions Google.\");return;}\n    if(!rd){alert(\"Veuillez choisir une date de d\u00e9part.\");return;}\n    document.getElementById('vtc-s1').style.display='none';\n    document.getElementById('vtc-btn-next').style.display='none';\n    document.getElementById('vtc-s2').style.display='block';\n    vtcUpdateRecap(); vtcDrawMap();\n}\nfunction vtcBack1(){\n    document.getElementById('vtc-s2').style.display='none';\n    document.getElementById('vtc-s1').style.display='';\n    document.getElementById('vtc-btn-next').style.display='block';\n}\nfunction vtcGoStep3(){\n    document.getElementById('vtc-s2').style.display='none';\n    document.getElementById('vtc-s3').style.display='block';\n    \/\/ FIX PROMO \u2014 r\u00e9appliquer la visibilit\u00e9 \u00e0 chaque ouverture du step 3\n    var pw=document.getElementById('vtc-s3-promo-wrap');\n    if(pw) pw.style.display=(typeof UTB_PROMO_ENABLED!=='undefined'&&!UTB_PROMO_ENABLED)?'none':'';\n    vtcFillStep3();\n    window.scrollTo({top:document.getElementById('vtc-s3').offsetTop-20,behavior:'smooth'});\n}\nfunction vtcBack2(){\n    document.getElementById('vtc-s3').style.display='none';\n    document.getElementById('vtc-s2').style.display='block';\n    \/\/ FIX \u2014 d\u00e9sactiver les boutons R\u00c9SERVER pendant le rechargement des prix\n    document.querySelectorAll('.vtc-reserver').forEach(function(b){\n        b.disabled=true; b.style.opacity='0.5'; b.textContent='Chargement...';\n    });\n    window.utbPricesReady=false;\n    \/\/ FIX PRIX FIXES \u2014 lancer fetch si zones d\u00e9finies, m\u00eame sans distance\n    if(distanceKm > 0 || (departureZone && arrivalZone)) vtcFetchAllPrices();\n}\n\n\/\/ ===== RECAP =====\nfunction vtcUpdateRecap(){\n    var rd=document.getElementById('ride_date').value,rt=document.getElementById('ride_time').value||'12:00';\n    var set=function(id,val){var e=document.getElementById(id);if(e)e.textContent=val;};\n    set('rc-datetime',rd?rd+' \u00e0 '+rt:'\u2014');\n    set('rc-pax',document.getElementById('passengers').value||'1');\n    set('rc-bags',document.getElementById('bagages')?document.getElementById('bagages').value:'0');\n    set('rc-type',getTripType()==='return'?'Oui':'Non');\n}\n\n\/\/ ===== VEHICLE PICK =====\nfunction vtcPickVeh(key){\n    document.querySelectorAll('.vtc-vcard').forEach(function(c){c.classList.remove('selected');});\n    document.querySelectorAll('input[name=\"vehicle\"]').forEach(function(r){r.checked=false;});\n    var card=document.getElementById('vtc-vc-'+key); if(card)card.classList.add('selected');\n    var radio=document.querySelector('input[name=\"vehicle\"][value=\"'+key+'\"]'); if(radio)radio.checked=true;\n    \/\/ FIX FINAL \u2014 lire le prix ET sauvegarder le key s\u00e9lectionn\u00e9\n    window.utbSelectedKey=key.toLowerCase(); \/\/ FIX \u2014 toujours lowercase\n    var pe=document.getElementById('vtc-price-'+key);\n    var p=pe&&pe.textContent&&pe.textContent!=='\u2014'?parseFloat(pe.textContent):0;\n    if(p>0){\n        price=p;\n        window.utbBasePrice=p;\n        window.utbSelectedPrice=p;\n    }\n}\n\n\/\/ ===== FILL STEP 3 =====\nfunction vtcFillStep3(){\n    var vkey=window.utbSelectedKey||getSelectedVehicle();\n    var vData=VEHICLES[vkey]||{};\n    var p=window.utbSelectedPrice||price;\n    if(p>0){price=p; window.utbBasePrice=p;}\n    \/\/ FIX PRIX FIXES \u2014 relancer fetch pour CE v\u00e9hicule pr\u00e9cis m\u00eame si distanceKm=0\n    if(distanceKm>0 || (departureZone && arrivalZone)){\n        fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},\n            body:new URLSearchParams({\n                action:'utb_calculate_price',nonce:utb_ajax.nonce,\n                zone_from:departureZone,zone_to:arrivalZone,\n                vehicle_type:vkey,distance:distanceKm,\n                trip_type:getTripType(),is_night:isNight?1:0,\n                ride_time:document.getElementById('ride_time').value,\n                ride_date:document.getElementById('ride_date').value\n            }).toString()})\n        .then(function(r){return r.json();})\n        .then(function(data){\n            if(data.success&&parseFloat(data.data.price)>0){\n                var p2=parseFloat(data.data.price);\n                price=p2; window.utbBasePrice=p2; window.utbSelectedPrice=p2;\n                displayPrice(data.data);\n            } else {\n                \/\/ FIX \u2014 fetch \u00e9chou\u00e9 ou prix=0 \u2192 afficher prix sauvegard\u00e9\n                var fallback=window.utbSelectedPrice||price||0;\n                var s3p=document.getElementById('s3-price');\n                if(s3p) s3p.textContent=fallback>0?fallback.toFixed(2):'\u2014';\n                \/\/ Afficher prix fixe si dispo\n                if(data.success&&data.data){\n                    displayPrice(data.data);\n                }\n            }\n        }).catch(function(){\n            \/\/ FIX \u2014 erreur r\u00e9seau \u2192 afficher prix sauvegard\u00e9\n            var fallback=window.utbSelectedPrice||price||0;\n            var s3p=document.getElementById('s3-price');\n            if(s3p) s3p.textContent=fallback>0?fallback.toFixed(2):'\u2014';\n            var s3t=document.getElementById('s3-price-total');\n            if(s3t) s3t.textContent=fallback>0?fallback.toFixed(2)+' \u20ac':'\u2014';\n        });\n    }\n    \/\/ Infos non-prix (synchrones)\n    var set=function(id,val){var e=document.getElementById(id);if(e)e.textContent=val;};\n    set('s3-veh-name',(vData.name||vkey).toUpperCase());\n    set('s3-trip-badge',getTripType()==='return'?'ALLER-RETOUR':'ALLER SIMPLE');\n    set('s3-dep',document.getElementById('departure').value);\n    set('s3-arr',document.getElementById('arrival').value);\n    var rd=document.getElementById('ride_date').value,rt=document.getElementById('ride_time').value||'12:00';\n    set('s3-datetime',rd?rd+' \u00e0 '+rt:'\u2014');\n    var rcDist=document.getElementById('rc-distance'); set('s3-distance',rcDist?rcDist.textContent:'\u2014');\n    set('s3-pax',document.getElementById('passengers').value||'1');\n    set('s3-bags',document.getElementById('bagages')?document.getElementById('bagages').value:'0');\n    set('s3-type',getTripType()==='return'?'Oui':'Non');\n    \/\/ FIX FINAL \u2014 NE PAS mettre s3-price ni PaymentUI ici (async fetch s'en charge)\n    set('s3-price','\u23f3');\n}\n\n\/\/ ===== MAP + DISTANCE =====\nfunction vtcDrawMap(){\n    var dLat=parseFloat(document.getElementById('departure_lat').value)||0;\n    var dLng=parseFloat(document.getElementById('departure_lng').value)||0;\n    var aLat=parseFloat(document.getElementById('arrival_lat').value)||0;\n    var aLng=parseFloat(document.getElementById('arrival_lng').value)||0;\n    var mapDiv=document.getElementById('vtc-route-map');\n\n    \/\/ Geocoder fallback si coordonn\u00e9es manquantes\n    if((!dLat||!aLat) && typeof google!=='undefined' && google.maps && google.maps.Geocoder) {\n        var dep=document.getElementById('departure').value.trim();\n        var arr=document.getElementById('arrival').value.trim();\n        if(!dep||!arr) return;\n        var geocoder=new google.maps.Geocoder();\n        var pending=2;\n        function tryDraw(){if(--pending===0) vtcDrawMap();}\n        if(!dLat){geocoder.geocode({address:dep},function(res,st){if(st==='OK'&&res[0]){var loc=res[0].geometry.location;document.getElementById('departure_lat').value=loc.lat();document.getElementById('departure_lng').value=loc.lng();detectZone(loc.lat(),loc.lng(),'departure');}tryDraw();});}else tryDraw();\n        if(!aLat){geocoder.geocode({address:arr},function(res,st){if(st==='OK'&&res[0]){var loc=res[0].geometry.location;document.getElementById('arrival_lat').value=loc.lat();document.getElementById('arrival_lng').value=loc.lng();detectZone(loc.lat(),loc.lng(),'arrival');}tryDraw();});}else tryDraw();\n        return;\n    }\n\n    \/\/ Haversine imm\u00e9diat si pas de carte\n    if(!mapDiv||!dLat||!aLat){\n        if(dLat&&aLat){\n            var R=6371,dLt=(aLat-dLat)*Math.PI\/180,dLn=(aLng-dLng)*Math.PI\/180;\n            var a=Math.sin(dLt\/2)*Math.sin(dLt\/2)+Math.cos(dLat*Math.PI\/180)*Math.cos(aLat*Math.PI\/180)*Math.sin(dLn\/2)*Math.sin(dLn\/2);\n            distanceKm=R*2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a))*1.3;\n            vtcFetchAllPrices();\n        }\n        return;\n    }\n\n    if(typeof google!=='undefined'&&google.maps&&google.maps.DirectionsService){\n        var map=new google.maps.Map(mapDiv,{zoom:11,center:{lat:(dLat+aLat)\/2,lng:(dLng+aLng)\/2},disableDefaultUI:false,gestureHandling:'cooperative',zoomControl:true,mapTypeControl:false,streetViewControl:false});\n        \/\/ Haversine imm\u00e9diat\n        var R=6371,dLt=(aLat-dLat)*Math.PI\/180,dLn=(aLng-dLng)*Math.PI\/180;\n        var a=Math.sin(dLt\/2)*Math.sin(dLt\/2)+Math.cos(dLat*Math.PI\/180)*Math.cos(aLat*Math.PI\/180)*Math.sin(dLn\/2)*Math.sin(dLn\/2);\n        distanceKm=R*2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a))*1.3;\n        var de=document.getElementById('rc-distance');\n        if(de) de.textContent='~'+Math.round(distanceKm)+' km (estimation)';\n        vtcFetchAllPrices();\n        \/\/ Directions pr\u00e9cises\n        new google.maps.DirectionsService().route({\n            origin:new google.maps.LatLng(dLat,dLng),destination:new google.maps.LatLng(aLat,aLng),\n            travelMode:google.maps.TravelMode.DRIVING\n        },function(result,status){\n            if(status==='OK'){\n                new google.maps.DirectionsRenderer({map:map,polylineOptions:{strokeColor:'#185FA5',strokeWeight:5}}).setDirections(result);\n                var leg=result.routes[0].legs[0];\n                distanceKm=leg.distance.value\/1000;\n                if(de) de.textContent=leg.distance.text+' \u2014 '+leg.duration.text;\n                vtcFetchAllPrices();\n            }\n        });\n    } else {\n        var R=6371,dLt=(aLat-dLat)*Math.PI\/180,dLn=(aLng-dLng)*Math.PI\/180;\n        var a=Math.sin(dLt\/2)*Math.sin(dLt\/2)+Math.cos(dLat*Math.PI\/180)*Math.cos(aLat*Math.PI\/180)*Math.sin(dLn\/2)*Math.sin(dLn\/2);\n        distanceKm=R*2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a))*1.3;\n        var de=document.getElementById('rc-distance');\n        if(de) de.textContent='~'+Math.round(distanceKm)+' km (estimation)';\n        vtcFetchAllPrices();\n    }\n}\n\n\/\/ ===== FETCH ALL PRICES =====\nfunction vtcFetchAllPrices(){\n    console.log('[UTB] vtcFetchAllPrices \u2192 zone_from='+departureZone+' zone_to='+arrivalZone+' dist='+distanceKm.toFixed(1)+'km');\n    \/\/ FIX PRIX FIXES \u2014 lancer m\u00eame si distanceKm=0 quand les zones sont d\u00e9finies\n    var vehicleKeys=Object.keys(VEHICLES);\n    var done=0, total=vehicleKeys.length;\n    vehicleKeys.forEach(function(key){\n        fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},\n            body:new URLSearchParams({\n                action:'utb_calculate_price',nonce:utb_ajax.nonce,\n                zone_from:departureZone,zone_to:arrivalZone,vehicle_type:key,distance:distanceKm,\n                trip_type:getTripType(),is_night:isNight?1:0,\n                ride_time:document.getElementById('ride_time').value,\n                ride_date:document.getElementById('ride_date').value\n            }).toString()})\n        .then(function(r){return r.json();})\n        .then(function(data){\n            var el=document.getElementById('vtc-price-'+key); if(!el)return;\n            if(data.success&&parseFloat(data.data.price)>0){\n                var p=parseFloat(data.data.price);\n                el.textContent=p.toFixed(2);\n                if(key===getSelectedVehicle()){\n                    price=p; window.utbBasePrice=p; window.utbSelectedPrice=p;\n                    displayPrice(data.data);\n                }\n                done++; if(done>=total) utbEnableReserverButtons();\n            } else {\n                \/\/ Fallback calcul local\n                var v=VEHICLES[key]||{};\n                var base=Math.max(distanceKm*(v.price_km||2.5),v.min_price||15);\n                if(getTripType()==='return')base*=RETURN_MULTIPLIER;\n                if(isNight)base*=1.2;\n                base=Math.round(base*100)\/100;\n                el.textContent=parseFloat(base).toFixed(2);\n                if(key===getSelectedVehicle()){price=base;window.utbBasePrice=base;}\n                done++; if(done>=total) utbEnableReserverButtons();\n            }\n        }).catch(function(){\n            var v=VEHICLES[key]||{},base=Math.max(distanceKm*(v.price_km||2.5),v.min_price||15);\n            if(getTripType()==='return')base*=RETURN_MULTIPLIER;\n            if(isNight)base*=1.2;\n            var el=document.getElementById('vtc-price-'+key);if(el)el.textContent=parseFloat(base).toFixed(2);\n            done++;\n            if(done>=total) utbEnableReserverButtons();\n        });\n    });\n}\n\n\/\/ FIX \u2014 r\u00e9activer les boutons R\u00c9SERVER apr\u00e8s chargement des prix\nfunction utbEnableReserverButtons(){\n    window.utbPricesReady=true;\n    document.querySelectorAll('.vtc-reserver').forEach(function(b){\n        b.disabled=false; b.style.opacity=''; b.textContent='R\u00c9SERVER';\n    });\n}\n\n\/\/ ===== DISPLAY PRICE =====\nfunction displayPrice(data){\n    try{\n        data.distance=parseFloat(data.distance)||0;\n        data.price_km=parseFloat(data.price_km)||0;\n        data.price_minimum=parseFloat(data.price_minimum)||0;\n        data.extra_fee=parseFloat(data.extra_fee)||0;\n        data.night_fee=parseFloat(data.night_fee)||0;\n        data.price=parseFloat(data.price)||0;\n        data.price_ht=parseFloat(data.price_ht)||0;\n        data.tva_rate=parseFloat(data.tva_rate)||0;\n        data.tva_amount=parseFloat(data.tva_amount)||0;\n        var SHOW=UTB_DISPLAY;\n        var breakdown='';\n        if(SHOW.distance) breakdown+='<div class=\"row\"><span>Distance<\/span><span>'+data.distance.toFixed(1)+' km<\/span><\/div>';\n        if(data.is_fixed){if(SHOW.price_km)breakdown+='<div class=\"row\"><span>Tarif forfaitaire<\/span><span>'+data.price_km.toFixed(2)+'\u20ac<\/span><\/div>';}\n        else{\n            if(SHOW.price_km)breakdown+='<div class=\"row\"><span>Tarif\/km<\/span><span>'+data.price_km.toFixed(2)+'\u20ac<\/span><\/div>';\n            if(SHOW.base_price)breakdown+='<div class=\"row\"><span>Base calcul\u00e9e<\/span><span>'+(data.distance*data.price_km).toFixed(2)+'\u20ac<\/span><\/div>';\n        }\n        if(SHOW.min_price&&data.price_minimum>0&&!data.is_fixed)breakdown+='<div class=\"row\"><span>Prix minimum<\/span><span>'+data.price_minimum.toFixed(2)+'\u20ac<\/span><\/div>';\n        if(getTripType()==='return')breakdown+='<div class=\"row\"><span>Aller-retour (\u00d7'+RETURN_MULTIPLIER+')<\/span><span>\u00d7'+RETURN_MULTIPLIER+'<\/span><\/div>';\n        if(SHOW.extra_fee&&data.extra_fee>0)breakdown+='<div class=\"row\"><span>Frais suppl\u00e9mentaires<\/span><span>+'+data.extra_fee.toFixed(2)+'\u20ac<\/span><\/div>';\n        if(SHOW.night_fee&&data.night_fee>0)breakdown+='<div class=\"row night\"><span>\ud83c\udf19 Majoration nuit<\/span><span>+'+data.night_fee.toFixed(2)+'\u20ac<\/span><\/div>';\n        if(window.utbPromoDiscount>0)breakdown+='<div class=\"row\" style=\"color:#059669;\"><span>\ud83c\udf9f\ufe0f Promo ('+window.utbPromoDiscount+'%)<\/span><span>-'+window.utbPromoDiscount+'%<\/span><\/div>';\n        if(data.tva_rate>0&&data.price_ht>0){\n            breakdown+='<div class=\"row\"><span>Montant HT<\/span><span>'+data.price_ht.toFixed(2)+'\u20ac<\/span><\/div>';\n            breakdown+='<div class=\"row\"><span>TVA ('+data.tva_rate+'%)<\/span><span>+'+data.tva_amount.toFixed(2)+'\u20ac<\/span><\/div>';\n        }\n        breakdown+='<div class=\"row\"><span>TOTAL TTC<\/span><span>'+data.price.toFixed(2)+' \u20ac<\/span><\/div>';\n        var pb3=document.getElementById('price_breakdown_s3'); if(pb3)pb3.innerHTML=breakdown;\n        var ptd=document.getElementById('vtc-price-detail'); if(ptd)ptd.style.display='block';\n        var s3t=document.getElementById('s3-price-total'); if(s3t)s3t.textContent=data.price.toFixed(2)+' \u20ac';\n        var s3p=document.getElementById('s3-price'); if(s3p)s3p.textContent=parseFloat(data.price).toFixed(2);\n        if(typeof utbInitPaymentUI==='function')utbInitPaymentUI(data.price||0);\n    }catch(e){console.error('displayPrice:',e);}\n}\n\n\/\/ ===== PROMO =====\nwindow.utbPromoDiscount=0;\nwindow.utbBasePrice=0;\nasync function utbApplyPromo(){\n    var code=document.getElementById('promo_code_input')&&document.getElementById('promo_code_input').value.trim().toUpperCase();\n    var msgEl=document.getElementById('promo_message');\n    if(!code){if(msgEl)msgEl.innerHTML='<span style=\"color:#ef4444;\">\u274c Entrez un code promo.<\/span>';return;}\n    if(msgEl)msgEl.innerHTML='<span style=\"color:#6b7280;\">\u23f3 V\u00e9rification...<\/span>';\n    try{\n        var res=await fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},\n            body:new URLSearchParams({action:'utb_check_promo',nonce:utb_ajax.nonce,promo_code:code,price:(window.utbBasePrice||price||0)}).toString()}).then(function(r){return r.json();});\n        if(res.success){\n            window.utbPromoDiscount=res.data.discount||0;\n            var newP=Math.round((window.utbBasePrice*(1-window.utbPromoDiscount\/100))*100)\/100;\n            price=newP;\n            var s3t=document.getElementById('s3-price-total'); if(s3t)s3t.textContent=newP.toFixed(2)+' \u20ac';\n            var s3p=document.getElementById('s3-price'); if(s3p)s3p.textContent=Math.round(newP);\n            if(msgEl)msgEl.innerHTML='<span style=\"color:#059669;font-weight:700;\">'+res.data.message+'<\/span>';\n        } else {\n            if(msgEl)msgEl.innerHTML='<span style=\"color:#ef4444;\">'+(res.data&&res.data.message?res.data.message:'\u274c Code invalide.')+'<\/span>';\n        }\n    }catch(e){if(msgEl)msgEl.innerHTML='<span style=\"color:#ef4444;\">\u274c Erreur r\u00e9seau.<\/span>';}\n}\n\n\/\/ ===== CONFIRM =====\nfunction vtcConfirm(){\n    var prenom=(document.getElementById('vtc-prenom').value||'').trim();\n    var nom=(document.getElementById('vtc-nom').value||'').trim();\n    var nameVal=(prenom+' '+nom).trim();\n    var nameField=document.getElementById('name'); if(nameField)nameField.value=nameVal;\n    if(!nameVal){alert('Veuillez remplir votre pr\u00e9nom et nom.');return;}\n    var emailVal=document.getElementById('email').value.trim();\n    if(!emailVal){alert('Veuillez remplir votre adresse email.');document.getElementById('email').focus();return;}\n    if(!\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(emailVal)){alert('Adresse email invalide.');document.getElementById('email').focus();return;}\n    \/\/ D\u00e9terminer le mode de paiement s\u00e9lectionn\u00e9\n    var payRadio=document.querySelector('input[name=\"utb_pay_method\"]:checked');\n    var payMethod=payRadio?payRadio.value:'none';\n    if(UTB_PAYMENT.enforced&&payMethod!=='stripe'&&payMethod!=='paypal'){\n        alert('Veuillez choisir un moyen de paiement pour confirmer votre r\u00e9servation.');\n        var sec=document.getElementById('utb-payment-section');\n        if(sec)sec.scrollIntoView({behavior:'smooth',block:'center'});\n        return;\n    }\n    if(payMethod==='paypal'){\n        \/\/ Pour PayPal : soumettre la r\u00e9servation d'abord, puis d\u00e9clencher PayPal\n        confirmBookingThenPay('paypal');\n    } else if(payMethod==='stripe'){\n        confirmBookingThenPay('stripe');\n    } else {\n        confirmBooking();\n    }\n}\n\nfunction confirmBooking(){\n    var name=document.getElementById('name')?document.getElementById('name').value.trim():'';\n    var phone=document.getElementById('phone').value.trim();\n    var email=document.getElementById('email').value.trim();\n    var rideDate=document.getElementById('ride_date').value;\n    var rideTime=document.getElementById('ride_time').value;\n    var tripType=getTripType();\n    var vehicle=getSelectedVehicle();\n    var passengers=document.getElementById('passengers').value;\n    var _cb=document.getElementById('utb_consent');\n    if(_cb&&!_cb.checked){\n        var _e=document.getElementById('utb_consent_err');\n        if(_e){_e.style.display='block';_e.scrollIntoView({behavior:'smooth',block:'center'});}\n        return;\n    }\n    var honeypot=document.getElementById('website')&&document.getElementById('website').value;\n    var flightNumber=document.getElementById('flight_number')?document.getElementById('flight_number').value.trim():'';\n    if(honeypot)return;\n    if(!name||!phone){alert('Veuillez remplir votre nom et t\u00e9l\u00e9phone.');return;}\n    if(!rideDate||!rideTime){alert('Veuillez s\u00e9lectionner la date et heure.');return;}\n    if(tripType==='return'){\n        var retD=document.getElementById('return_date')?document.getElementById('return_date').value:'';\n        var retT=document.getElementById('return_time')?document.getElementById('return_time').value:'';\n        if(!retD||!retT){alert('Veuillez s\u00e9lectionner la date et heure de retour.');return;}\n        if(retD<rideDate||(retD===rideDate&&retT<=rideTime)){alert('La date de retour doit \u00eatre apr\u00e8s la date aller.');return;}\n    }\n    if(!price||price<=0){alert(\"Veuillez d'abord s\u00e9lectionner un v\u00e9hicule.\");return;}\n    var selDate=new Date(rideDate+'T'+rideTime);\n    if(selDate<new Date()){alert('La date ne peut pas \u00eatre dans le pass\u00e9.');return;}\n    var _ch=parseInt(rideTime.split(':')[0]); isNight=UTB_DISPLAY.night_enabled&&(_ch>=22||_ch<6);\n    var btn=document.getElementById('confirm-btn');\n    var origTxt=btn?btn.innerHTML:'';\n    if(btn){btn.disabled=true;btn.innerHTML='\u23f3 Envoi en cours...';}\n    var fd=new URLSearchParams();\n    fd.append('action','utb_submit_booking'); fd.append('nonce',utb_ajax.nonce);\n    fd.append('name',name); fd.append('phone',phone); fd.append('email',email);\n    fd.append('departure',document.getElementById('departure').value);\n    fd.append('departure_lat',document.getElementById('departure_lat').value);\n    fd.append('departure_lng',document.getElementById('departure_lng').value);\n    fd.append('departure_zone',departureZone);\n    fd.append('arrival',document.getElementById('arrival').value);\n    fd.append('arrival_lat',document.getElementById('arrival_lat').value);\n    fd.append('arrival_lng',document.getElementById('arrival_lng').value);\n    fd.append('arrival_zone',arrivalZone);\n    fd.append('trip_type',tripType); fd.append('vehicle_type',vehicle);\n    fd.append('passengers',passengers);\n    fd.append('bags',document.getElementById('bagages')?document.getElementById('bagages').value:0);\n    fd.append('distance',distanceKm);\n    fd.append('price',price); fd.append('ride_date',rideDate); fd.append('ride_time',rideTime);\n    fd.append('return_date',tripType==='return'?(document.getElementById('return_date')?document.getElementById('return_date').value:''):'');\n    fd.append('return_time',tripType==='return'?(document.getElementById('return_time')?document.getElementById('return_time').value:''):'');\n    fd.append('flight_number',flightNumber);\n    fd.append('stop_address',document.getElementById('stop_address')?document.getElementById('stop_address').value.trim():'');\n    fd.append('comments',document.getElementById('vtc-comments')?document.getElementById('vtc-comments').value.trim():'');\n    fd.append('is_night',isNight?1:0); fd.append('is_fixed_price',(distanceKm<=0&&price>0)?1:0);\n    fd.append('website',honeypot||'');\n    fd.append('consent',(document.getElementById('utb_consent')&&document.getElementById('utb_consent').checked)?'1':'');\n    fd.append('promo_code',(document.getElementById('promo_code_input')&&document.getElementById('promo_code_input').value)||'');\n    fd.append('promo_discount',window.utbPromoDiscount||0);\n    function doSubmit(){\n        fd.set('nonce',utb_ajax.nonce);\n        fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},body:fd.toString()})\n        .then(function(r){if(!r.ok)throw new Error('HTTP '+r.status);return r.json();})\n        .then(function(res){\n            if(btn){btn.disabled=false;btn.innerHTML=origTxt;}\n            if(res.success){window.location.href=res.data.redirect_url;}\n            else{\n                if(res.data&&res.data.message&&res.data.message.toLowerCase().includes('nonce')){\n                    window._utbRefreshNonce(function(){doSubmit();});\n                } else {alert('Erreur: '+(res.data&&res.data.message?res.data.message:'Erreur inconnue'));}\n            }\n        }).catch(function(err){if(btn){btn.disabled=false;btn.innerHTML=origTxt;}alert('Erreur de connexion. R\u00e9essayez.');});\n    }\n    var elapsed=Date.now()-window._utbPageLoadTime;\n    if(elapsed>window._utbNonceLifetime){window._utbRefreshNonce(function(){doSubmit();});}else{doSubmit();}\n}\n\n\/\/ ===== NOUVEAU: Soumettre r\u00e9servation puis d\u00e9clencher paiement en ligne =====\nfunction confirmBookingThenPay(payType){\n    var prenom=(document.getElementById('vtc-prenom').value||'').trim();\n    var nom=(document.getElementById('vtc-nom').value||'').trim();\n    var nameVal=(prenom+' '+nom).trim();\n    var nameField=document.getElementById('name'); if(nameField)nameField.value=nameVal;\n    var phone=document.getElementById('phone').value.trim();\n    var email=document.getElementById('email').value.trim();\n    var rideDate=document.getElementById('ride_date').value;\n    var rideTime=document.getElementById('ride_time').value;\n    var tripType=getTripType();\n    var vehicle=getSelectedVehicle();\n    var passengers=document.getElementById('passengers').value;\n    var _cb=document.getElementById('utb_consent');\n    if(_cb&&!_cb.checked){\n        var _e=document.getElementById('utb_consent_err');\n        if(_e){_e.style.display='block';_e.scrollIntoView({behavior:'smooth',block:'center'});}\n        return;\n    }\n    var honeypot=document.getElementById('website')&&document.getElementById('website').value;\n    var flightNumber=document.getElementById('flight_number')?document.getElementById('flight_number').value.trim():'';\n    if(honeypot)return;\n    if(!rideDate||!rideTime){alert('Veuillez s\u00e9lectionner la date et heure.');return;}\n    if(!price||price<=0){alert(\"Veuillez d'abord s\u00e9lectionner un v\u00e9hicule.\");return;}\n    var btn=document.getElementById('confirm-btn');\n    var origTxt=btn?btn.innerHTML:'';\n    if(btn){btn.disabled=true;btn.innerHTML='\u23f3 Envoi en cours...';}\n    var fd=new URLSearchParams();\n    fd.append('action','utb_submit_booking'); fd.append('nonce',utb_ajax.nonce);\n    fd.append('name',nameVal); fd.append('phone',phone); fd.append('email',email);\n    fd.append('departure',document.getElementById('departure').value);\n    fd.append('departure_lat',document.getElementById('departure_lat').value);\n    fd.append('departure_lng',document.getElementById('departure_lng').value);\n    fd.append('departure_zone',departureZone);\n    fd.append('arrival',document.getElementById('arrival').value);\n    fd.append('arrival_lat',document.getElementById('arrival_lat').value);\n    fd.append('arrival_lng',document.getElementById('arrival_lng').value);\n    fd.append('arrival_zone',arrivalZone);\n    fd.append('trip_type',tripType); fd.append('vehicle_type',vehicle);\n    fd.append('passengers',passengers);\n    fd.append('bags',document.getElementById('bagages')?document.getElementById('bagages').value:0);\n    fd.append('distance',distanceKm);\n    fd.append('price',price); fd.append('ride_date',rideDate); fd.append('ride_time',rideTime);\n    fd.append('return_date',tripType==='return'?(document.getElementById('return_date')?document.getElementById('return_date').value:''):'');\n    fd.append('return_time',tripType==='return'?(document.getElementById('return_time')?document.getElementById('return_time').value:''):'');\n    fd.append('flight_number',flightNumber);\n    fd.append('stop_address',document.getElementById('stop_address')?document.getElementById('stop_address').value.trim():'');\n    fd.append('comments',document.getElementById('vtc-comments')?document.getElementById('vtc-comments').value.trim():'');\n    var _ch=parseInt(rideTime.split(':')[0]); isNight=UTB_DISPLAY.night_enabled&&(_ch>=22||_ch<6);\n    fd.append('is_night',isNight?1:0); fd.append('is_fixed_price',(distanceKm<=0&&price>0)?1:0);\n    fd.append('website',honeypot||'');\n    fd.append('consent',(document.getElementById('utb_consent')&&document.getElementById('utb_consent').checked)?'1':'');\n    fd.append('promo_code',(document.getElementById('promo_code_input')&&document.getElementById('promo_code_input').value)||'');\n    fd.append('promo_discount',window.utbPromoDiscount||0);\n    fd.append('pay_online',payType); \/\/ -> statut \u00ab awaiting_payment \u00bb c\u00f4t\u00e9 serveur\n    \/\/ Soumettre la r\u00e9servation (statut \u00ab awaiting_payment \u00bb)\n    fd.set('nonce',utb_ajax.nonce);\n    fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},body:fd.toString()})\n    .then(function(r){if(!r.ok)throw new Error('HTTP '+r.status);return r.json();})\n    .then(function(res){\n        if(btn){btn.disabled=false;btn.innerHTML=origTxt;}\n        if(!res.success){alert('Erreur: '+(res.data&&res.data.message?res.data.message:'Erreur inconnue'));return;}\n        \/\/ R\u00e9cup\u00e9rer le booking_id depuis la r\u00e9ponse\n        var redirectUrl=res.data.redirect_url||'';\n        if(res.data.booking_id){\n            utbCurrentBookingId=parseInt(res.data.booking_id);\n            utbConfirmationUrl=redirectUrl;\n        } else {\n            \/\/ Fallback: essayer depuis l'URL\n            var match=redirectUrl.match(\/booking=(\\d+)\/);\n            if(match){utbCurrentBookingId=parseInt(match[1]);utbConfirmationUrl=redirectUrl;}\n        }\n        utbCurrentAmount=price;\n        \/\/ D\u00e9clencher le paiement\n        if(payType==='paypal'){\n            \/\/ Scroller vers le bouton PayPal\n            var pc=document.getElementById('utb-paypal-button-container');\n            if(pc){pc.style.display='block';pc.scrollIntoView({behavior:'smooth',block:'center'});}\n            \/\/ Si PayPal pas encore rendu, le rendre maintenant\n            if(!utbPaypalRendered&&window.paypal){utbRenderPaypalButton();}\n            else if(!utbPaypalRendered){\n                utbLoadScript('https:\/\/www.paypal.com\/sdk\/js?client-id='+UTB_PAYMENT.paypal_id+'&currency=EUR&components=buttons,hosted-fields',utbRenderPaypalButton);\n            }\n            \/\/ Afficher message instructions\n            if(pc){var msg=document.createElement('p');msg.id='utb-paypal-msg';msg.style.cssText='text-align:center;font-size:13px;color:#555;margin:8px 0 0;';msg.textContent='Cliquez sur le bouton PayPal ci-dessus pour finaliser votre paiement.';if(!document.getElementById('utb-paypal-msg'))pc.parentNode.insertBefore(msg,pc.nextSibling);}\n        } else if(payType==='stripe'){\n            var sf=document.getElementById('utb-stripe-fields');\n            if(sf){sf.style.display='block';sf.scrollIntoView({behavior:'smooth',block:'center'});}\n            var sBtn=document.getElementById('utb-stripe-pay-btn');\n            if(!sBtn){\n                sBtn=document.createElement('button');sBtn.id='utb-stripe-pay-btn';sBtn.type='button';\n                sBtn.className='vtc-btn-main';sBtn.style.marginTop='10px';sBtn.textContent='\ud83d\udcb3 Payer par carte';\n                sBtn.onclick=function(){utbDoStripePayment(sBtn,sBtn.innerHTML);};\n                if(sf)sf.parentNode.insertBefore(sBtn,sf.nextSibling);\n            }\n            sBtn.style.display='block';\n        }\n    }).catch(function(err){if(btn){btn.disabled=false;btn.innerHTML=origTxt;}alert('Erreur de connexion. R\u00e9essayez.');});\n}\n\n\/\/ ===== PAYMENT =====\nvar utbStripe=null,utbStripeElements=null,utbStripeCard=null;\nvar utbCurrentBookingId=null,utbCurrentAmount=0,utbConfirmationUrl='';\nvar utbPaypalRendered=false;\nfunction utbInitPaymentUI(p){\n    if(!UTB_PAYMENT.enabled)return;\n    utbCurrentAmount=p;\n    var sec=document.getElementById('utb-payment-section'); if(sec)sec.style.display='block';\n    \/\/ Mode \u00ab paiement obligatoire \u00bb : masquer \u00ab Paiement \u00e0 bord \u00bb.\n    \/\/ UTB_PAYMENT.enforced n'est vrai que si une passerelle est vraiment\n    \/\/ utilisable \u2014 sinon on laisse l'option pour ne pas bloquer le client.\n    if(UTB_PAYMENT.enforced){\n        var later=document.getElementById('utb-pay-later-wrap');\n        if(later){\n            later.style.display='none';\n            var r=later.querySelector('input'); if(r)r.checked=false;\n        }\n    }\n    if(UTB_PAYMENT.stripe_enabled){\n        var w=document.getElementById('utb-stripe-wrap'); if(w)w.style.display='flex';\n        if(UTB_PAYMENT.stripe_pk&&!utbStripe)utbLoadScript('https:\/\/js.stripe.com\/v3\/',function(){utbStripe=Stripe(UTB_PAYMENT.stripe_pk);});\n    }\n    if(UTB_PAYMENT.paypal_enabled&&UTB_PAYMENT.paypal_id&&!utbPaypalRendered){\n        var pw=document.getElementById('utb-paypal-wrap'); if(pw)pw.style.display='flex';\n        utbLoadScript('https:\/\/www.paypal.com\/sdk\/js?client-id='+UTB_PAYMENT.paypal_id+'&currency=EUR&components=buttons,hosted-fields',utbRenderPaypalButton);\n    }\n}\nfunction utbLoadScript(src,cb){\n    if(document.querySelector('script[src=\"'+src+'\"]')){if(cb)cb();return;}\n    var s=document.createElement('script');s.src=src;s.onload=cb||null;document.head.appendChild(s);\n}\nfunction utbSelectPayMethod(m){\n    var sf=document.getElementById('utb-stripe-fields'),pc=document.getElementById('utb-paypal-button-container');\n    if(sf)sf.style.display=m==='stripe'?'block':'none';\n    if(pc)pc.style.display=m==='paypal'?'block':'none';\n    if(m==='stripe'&&utbStripe&&!utbStripeCard){\n        utbStripeElements=utbStripe.elements();\n        utbStripeCard=utbStripeElements.create('card',{style:{base:{fontSize:'14px',color:'#333','::placeholder':{color:'#aaa'}}}});\n        utbStripeCard.mount('#utb-stripe-element');\n        utbStripeCard.on('change',function(e){var el=document.getElementById('utb-stripe-error');if(el)el.textContent=e.error?e.error.message:'';});\n    }\n}\nfunction utbRenderPaypalButton(){\n    if(!window.paypal||utbPaypalRendered)return; utbPaypalRendered=true;\n\n    \/\/ \u2500\u2500 1. Bouton PayPal standard (popup compte PayPal) \u2500\u2500\n    paypal.Buttons({\n        createOrder:function(){\n            return fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},\n                body:new URLSearchParams({action:'utb_paypal_create',nonce:utb_ajax.nonce,amount:utbCurrentAmount,description:'R\u00e9servation VTC #'+(utbCurrentBookingId||'')}).toString()})\n            .then(function(r){return r.json();})\n            .then(function(res){if(!res.success)throw new Error(res.data.message);return res.data.order_id;});\n        },\n        onApprove:function(data){\n            return fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},\n                body:new URLSearchParams({action:'utb_paypal_capture',nonce:utb_ajax.nonce,order_id:data.orderID,booking_id:utbCurrentBookingId}).toString()})\n            .then(function(r){return r.json();})\n            .then(function(res){if(res.success)window.location.href=utbConfirmationUrl+'&paid=1';else alert('Erreur PayPal: '+res.data.message);});\n        },\n        onError:function(err){alert('Erreur PayPal. R\u00e9essayez.');console.error(err);}\n    }).render('#utb-paypal-btn-wrap');\n\n    \/\/ \u2500\u2500 2. Hosted Fields (champs carte directement dans la page) \u2500\u2500\n    if(paypal.HostedFields && paypal.HostedFields.isEligible()){\n        paypal.HostedFields.render({\n            createOrder:function(){\n                return fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},\n                    body:new URLSearchParams({action:'utb_paypal_create',nonce:utb_ajax.nonce,amount:utbCurrentAmount,description:'R\u00e9servation VTC #'+(utbCurrentBookingId||'')}).toString()})\n                .then(function(r){return r.json();})\n                .then(function(res){if(!res.success)throw new Error(res.data.message);return res.data.order_id;});\n            },\n            fields:{\n                number:{selector:'#utb-pp-card-number',placeholder:'1234 5678 9012 3456'},\n                expirationDate:{selector:'#utb-pp-expiry',placeholder:'MM\/AA'},\n                cvv:{selector:'#utb-pp-cvv',placeholder:'CVV'}\n            },\n            styles:{\n                'input':{color:'#333','font-size':'14px'},\n                ':focus':{color:'#003087'},\n                '.invalid':{color:'#d32f2f'}\n            }\n        }).then(function(hf){\n            document.getElementById('utb-pp-card-submit').addEventListener('click',function(){\n                var btn=this; btn.disabled=true; btn.textContent='\u23f3 Traitement...';\n                var errEl=document.getElementById('utb-pp-card-error');\n                if(errEl){errEl.style.display='none';errEl.textContent='';}\n                hf.submit({contingencies:['3D_SECURE']})\n                .then(function(payload){\n                    if(payload.liabilityShift==='POSSIBLE'||payload.liabilityShift==='YES'||!payload.liabilityShift){\n                        return fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},\n                            body:new URLSearchParams({action:'utb_paypal_capture',nonce:utb_ajax.nonce,order_id:payload.orderId,booking_id:utbCurrentBookingId}).toString()})\n                        .then(function(r){return r.json();})\n                        .then(function(res){\n                            if(res.success){window.location.href=utbConfirmationUrl+'&paid=1';}\n                            else{btn.disabled=false;btn.textContent='\ud83d\udcb3 Payer par carte';if(errEl){errEl.textContent=res.data.message||'Erreur paiement';errEl.style.display='block';}}\n                        });\n                    } else {\n                        btn.disabled=false;btn.textContent='\ud83d\udcb3 Payer par carte';\n                        if(errEl){errEl.textContent='Paiement refus\u00e9. V\u00e9rifiez vos informations.';errEl.style.display='block';}\n                    }\n                })\n                .catch(function(err){\n                    btn.disabled=false;btn.textContent='\ud83d\udcb3 Payer par carte';\n                    if(errEl){errEl.textContent=err.message||'Erreur carte. R\u00e9essayez.';errEl.style.display='block';}\n                });\n            });\n        }).catch(function(err){\n            \/\/ Hosted Fields non dispo \u2192 cacher le formulaire carte\n            var cardForm=document.getElementById('utb-paypal-card-form');\n            if(cardForm)cardForm.style.display='none';\n            console.warn('PayPal HostedFields unavailable:',err);\n        });\n    } else {\n        \/\/ Hosted Fields non \u00e9ligible (ex: sandbox sans Advanced Card) \u2192 cacher formulaire carte\n        var cardForm=document.getElementById('utb-paypal-card-form');\n        if(cardForm)cardForm.style.display='none';\n    }\n}\nasync function utbDoStripePayment(btn,origTxt){\n    var ir=await fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},body:new URLSearchParams({action:'utb_stripe_intent',nonce:utb_ajax.nonce,amount:utbCurrentAmount,description:'R\u00e9servation VTC #'+utbCurrentBookingId}).toString()}).then(function(r){return r.json();});\n    if(!ir.success){if(btn){btn.disabled=false;btn.innerHTML=origTxt;}alert('Erreur Stripe: '+(ir.data&&ir.data.message?ir.data.message:'Erreur'));return;}\n    var result=await utbStripe.confirmCardPayment(ir.data.client_secret,{payment_method:{card:utbStripeCard}});\n    if(result.error){if(btn){btn.disabled=false;btn.innerHTML=origTxt;}var se=document.getElementById('utb-stripe-error');if(se)se.textContent=result.error.message;return;}\n    var cr=await fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},body:new URLSearchParams({action:'utb_stripe_confirm',nonce:utb_ajax.nonce,booking_id:utbCurrentBookingId,intent_id:result.paymentIntent.id}).toString()}).then(function(r){return r.json();});\n    if(cr.success){window.location.href=utbConfirmationUrl+'&paid=1';}else{if(btn){btn.disabled=false;btn.innerHTML=origTxt;}alert('Erreur confirmation: '+(cr.data&&cr.data.message?cr.data.message:'Erreur'));}\n}\n\n\/\/ ===== TIME SYNC =====\nfunction vtcSyncAllTimes(){vtcSyncTime();vtcSyncReturnTime();}\n<\/script>\n\n<script>\n\/\/ D\u00e9marrage \u2014 charger la config (no-cache) puis initialiser\ndocument.addEventListener('DOMContentLoaded', function() {\n    utbLoadConfig(function() {\n        vtcSyncAllTimes();\n        checkNightTime();\n    });\n});\n<\/script>\n\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5ddd582 vtcbp-sec--surface elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"5ddd582\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-25 elementor-top-column elementor-element elementor-element-d9d1827 vtcbp-stat\" data-id=\"d9d1827\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5ae0f14 elementor-widget elementor-widget-text-editor\" data-id=\"5ae0f14\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"vtcbp-eyebrow\">Devis instantan\u00e9<\/p><h3 style=\"margin:0\">Moins de 3 min<\/h3><p style=\"margin:0\">pour r\u00e9server de bout en bout<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-25 elementor-top-column elementor-element elementor-element-6aa2afb vtcbp-stat\" data-id=\"6aa2afb\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3da3b7a elementor-widget elementor-widget-text-editor\" data-id=\"3da3b7a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"vtcbp-eyebrow\">Suivi de course<\/p><h3 style=\"margin:0\">8 statuts<\/h3><p style=\"margin:0\">du devis \u00e0 la facture<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-25 elementor-top-column elementor-element elementor-element-c084e92 vtcbp-stat\" data-id=\"c084e92\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-59a7bd9 elementor-widget elementor-widget-text-editor\" data-id=\"59a7bd9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"vtcbp-eyebrow\">Vos revenus<\/p><h3 style=\"margin: 0;\">0 % de commission<\/h3><p style=\"margin: 0;\">chaque course reste \u00e0 vous<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-25 elementor-top-column elementor-element elementor-element-d00def3 vtcbp-stat\" data-id=\"d00def3\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c1a0ec3 elementor-widget elementor-widget-text-editor\" data-id=\"c1a0ec3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"vtcbp-eyebrow\">Installation<\/p><h3 style=\"margin:0\">1 shortcode<\/h3><p style=\"margin:0\">sur la page de votre choix<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-ba48b95 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"ba48b95\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f8745ba\" data-id=\"f8745ba\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-007da40 elementor-widget elementor-widget-text-editor\" data-id=\"007da40\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"vtcbp-eyebrow\">Ce que fait l&rsquo;extension<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-12cfb09 elementor-widget elementor-widget-heading\" data-id=\"12cfb09\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Tout le m\u00e9tier VTC, dans l'administration WordPress<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c51f634 elementor-widget elementor-widget-text-editor\" data-id=\"c51f634\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"vtcbp-lead\">Pas de plateforme externe, pas d&rsquo;abonnement au clic. Les r\u00e9servations, les prix et les chauffeurs restent sur votre site.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-01fe9b8 elementor-widget elementor-widget-spacer\" data-id=\"01fe9b8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-3e5f75e vtcbp-cards elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3e5f75e\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-fbc7ad8\" data-id=\"fbc7ad8\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-22b2178 elementor-position-block-start vtcbp-feature elementor-view-default elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"22b2178\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-list-check\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tR\u00e9servation en 5 \u00e9tapes\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tAdresses, date, v\u00e9hicule, options, paiement. Le client r\u00e9serve sans jamais quitter la page.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-b24b5a0\" data-id=\"b24b5a0\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-21ea5ae elementor-position-block-start vtcbp-feature elementor-view-default elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"21ea5ae\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-location-dot\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tAdresses Google Maps\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tAutocompl\u00e9tion des adresses, distance et dur\u00e9e calcul\u00e9es en direct sur l'API Places.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-593c25e\" data-id=\"593c25e\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6a7835f elementor-position-block-start vtcbp-feature elementor-view-default elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"6a7835f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-draw-polygon\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tZones tarifaires\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tDessinez vos zones sur la carte et fixez un prix par zone : a\u00e9roports, gares, centre-ville.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6f2c03a vtcbp-cards elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6f2c03a\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-d6893d6\" data-id=\"d6893d6\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-74ecf25 elementor-position-block-start vtcbp-feature elementor-view-default elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"74ecf25\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-euro-sign\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tTarifs fixes ou au kilom\u00e8tre\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tForfaits, prix minimum, majoration de nuit, week-end et jours f\u00e9ri\u00e9s, suppl\u00e9ments bagages.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-f5e6d04\" data-id=\"f5e6d04\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3561379 elementor-position-block-start vtcbp-feature elementor-view-default elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"3561379\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-credit-card\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tStripe et PayPal\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tAcompte ou paiement int\u00e9gral, montant rev\u00e9rifi\u00e9 c\u00f4t\u00e9 serveur avant validation.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-aacc6b4\" data-id=\"aacc6b4\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0e95f6f elementor-position-block-start vtcbp-feature elementor-view-default elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"0e95f6f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-comment-sms\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tSMS et WhatsApp\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tNotifications Twilio au client et au chauffeur \u00e0 chaque changement de statut.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c402eeb vtcbp-cards elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c402eeb\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-8ed6a76\" data-id=\"8ed6a76\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-50d8f1d elementor-position-block-start vtcbp-feature elementor-view-default elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"50d8f1d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-file-invoice\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tFactures PDF\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tG\u00e9n\u00e9r\u00e9es avec vos mentions l\u00e9gales et envoy\u00e9es automatiquement apr\u00e8s la course.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-37cdb6e\" data-id=\"37cdb6e\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-21b5683 elementor-position-block-start vtcbp-feature elementor-view-default elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"21b5683\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-mobile-screen\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\t Newsletter \u2014 Clients\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tCr\u00e9ez des newsletters attrayantes et personnalis\u00e9es\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-af45fef\" data-id=\"af45fef\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9a8fd99 elementor-position-block-start vtcbp-feature elementor-view-default elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"9a8fd99\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-table-columns\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tTableau de bord\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tToutes les r\u00e9servations au m\u00eame endroit, filtres par statut et export CSV.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-55030d5 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"55030d5\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-a9dcbf4\" data-id=\"a9dcbf4\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d3da7a elementor-position-block-start vtcbp-feature elementor-view-default elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"4d3da7a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-file-invoice\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tCodes Promo\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tMettez des codes promo personnalis\u00e9s pour vos clients\n\n\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-19d25b0\" data-id=\"19d25b0\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-cc67f26 elementor-position-block-start vtcbp-feature elementor-view-default elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"cc67f26\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-file-invoice\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tRappels Automatiques\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tRappel 24h avant\nEmail + SMS client &amp; chauffeur\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-67bccc8\" data-id=\"67bccc8\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b25b4c0 elementor-position-block-start vtcbp-feature elementor-view-default elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"b25b4c0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-file-invoice\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tMajorations\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tTarifs de nuits et\/ou par jour comme le weekend\n\n\n\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2b5faec elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2b5faec\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f329b40\" data-id=\"f329b40\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9773faf elementor-widget elementor-widget-text-editor\" data-id=\"9773faf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-family:var(--vtcbp-mono);font-size:.85rem;color:var(--vtcbp-muted)\">Et aussi : codes promo, s\u00e9lection du v\u00e9hicule avec photos, e-mails HTML personnalisables, demande d&rsquo;avis Google, export CSV, charte graphique (couleurs, polices, arrondis), mises \u00e0 jour automatiques depuis l&rsquo;administration.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-80e7716 vtcbp-sec--ink elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"80e7716\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4ec2226\" data-id=\"4ec2226\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-32eee83 elementor-widget elementor-widget-text-editor\" data-id=\"32eee83\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"vtcbp-eyebrow\">Le parcours d&rsquo;une course<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b2956c6 elementor-widget elementor-widget-heading\" data-id=\"b2956c6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Huit statuts, z\u00e9ro appel de relance<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7e4f453 elementor-widget elementor-widget-text-editor\" data-id=\"7e4f453\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"vtcbp-lead\">Le client et le chauffeur sont inform\u00e9s \u00e0 chaque \u00e9tape. Vous suivez tout depuis une seule liste.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-77644c3 elementor-widget elementor-widget-spacer\" data-id=\"77644c3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-50da7e0 vtcbp-sec--ink elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"50da7e0\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-cf905a9\" data-id=\"cf905a9\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c81a4a8 vtcbp-step elementor-widget elementor-widget-icon-box\" data-id=\"c81a4a8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tDemande re\u00e7ue\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tLa r\u00e9servation arrive dans le tableau de bord et un e-mail part au client.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a92e099 vtcbp-step elementor-widget elementor-widget-icon-box\" data-id=\"a92e099\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tDevis envoy\u00e9\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tPrix calcul\u00e9 automatiquement, ou ajust\u00e9 \u00e0 la main avant envoi.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-001091a vtcbp-step elementor-widget elementor-widget-icon-box\" data-id=\"001091a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tR\u00e9servation confirm\u00e9e\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tLe client paie l'acompte ou la totalit\u00e9, le cr\u00e9neau est bloqu\u00e9.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4965cbe vtcbp-step elementor-widget elementor-widget-icon-box\" data-id=\"4965cbe\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tChauffeur assign\u00e9\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tLe chauffeur re\u00e7oit la course sur son espace mobile.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-f24f457\" data-id=\"f24f457\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9a6364b vtcbp-step elementor-widget elementor-widget-icon-box\" data-id=\"9a6364b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tChauffeur en route\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tLe client est pr\u00e9venu par SMS avec le v\u00e9hicule et la plaque.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b2f5c21 vtcbp-step elementor-widget elementor-widget-icon-box\" data-id=\"b2f5c21\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tClient \u00e0 bord\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tLe statut passe en course, l'heure de d\u00e9part est horodat\u00e9e.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-88c49a8 vtcbp-step elementor-widget elementor-widget-icon-box\" data-id=\"88c49a8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tCourse termin\u00e9e\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tDemande d'avis Google envoy\u00e9e en un clic depuis l'administration.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9daaa9c vtcbp-step elementor-widget elementor-widget-icon-box\" data-id=\"9daaa9c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tFacture envoy\u00e9e\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tPDF g\u00e9n\u00e9r\u00e9 et archiv\u00e9, pr\u00eat pour la comptabilit\u00e9.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-3490d83 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3490d83\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ffa1690\" data-id=\"ffa1690\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-de0d7e0 elementor-widget elementor-widget-text-editor\" data-id=\"de0d7e0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"vtcbp-eyebrow\">Mise en place<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-77edffd elementor-widget elementor-widget-heading\" data-id=\"77edffd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Deux shortcodes, deux pages<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-158ea91 elementor-widget elementor-widget-text-editor\" data-id=\"158ea91\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"vtcbp-lead\">Collez le shortcode sur une page, publiez. Le formulaire prend la couleur de votre site.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7c39fbc elementor-widget elementor-widget-spacer\" data-id=\"7c39fbc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9cc908c vtcbp-cards elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9cc908c\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-235de48\" data-id=\"235de48\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-cab0f0e vtcbp-feature elementor-widget elementor-widget-text-editor\" data-id=\"cab0f0e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span class=\"vtcbp-code\"><link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"><link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin><link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700;800&#038;family=Outfit:wght@400;500;600;700;800&#038;display=swap\" rel=\"stylesheet\">    <style>\n    \/* \u2500\u2500 Variables CSS dynamiques depuis Charte Graphique \u2500\u2500 *\/\n    .vtc-wrap {\n        --vtc-primary:       #0B5FFF;\n        --vtc-primary-dark:  #0850E0;\n        --vtc-primary-act:   #0850E0;\n        --vtc-primary-bg:    #eff6ff;\n        --vtc-primary-bg2:   #f0f7ff;\n        --vtc-primary-rgb:   11,95,255;\n        --vtc-accent:        #22D3EE;\n        --vtc-card-bg:       #FFFFFF;\n        --vtc-page-bg:       #FAFBFC;\n        --vtc-text:          #0F172A;\n        --vtc-text-muted:    #64748B;\n        --vtc-border:        #E8ECF1;\n        --vtc-border-input:  #E8ECF1;\n        --font-body:         'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;\n        --font-heading:      'Outfit', -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;\n        --radius-card:       16px;\n        --radius-button:     16px;\n        --radius-chip:       12px;\n    }\n    \/* Bouton principal \u2014 style dynamique *\/\n    .vtc-wrap .vtc-btn-main         { background: #0B5FFF; border-radius: 16px; }\n    .vtc-wrap .vtc-btn-main:hover   { background: #0850E0; }\n    .vtc-wrap .vtc-btn-main:active  { background: #0850E0; }\n    \/* Titres \u2014 police heading *\/\n    .vtc-wrap .vtc-title            { font-family: var(--font-heading); }\n    \/* Dark mode *\/\n        <\/style>\n\n    \n<div class=\"vtc-wrap\" id=\"vtc-form\">\n\n<!-- \u2500\u2500 HEADER Charte Graphique \u2500\u2500 -->\n<div class=\"vtc-header-cg\" style=\"background:linear-gradient(135deg, #0B5FFF, #22D3EE);padding:20px 24px;\">\n        <p style=\"font-family:var(--font-heading);font-size:11px;font-weight:600;color:rgba(255,255,255,.8);letter-spacing:1.5px;text-transform:uppercase;margin:0 0 6px;\">R\u00e9servation en ligne<\/p>\n        <h1 style=\"font-family:var(--font-heading);font-size:22px;font-weight:700;color:#ffffff;margin:0;letter-spacing:-.3px;line-height:1.2;\">O\u00f9 souhaitez-vous aller ?<\/h1>\n<\/div>\n\n<!-- ==================== STEP 1 ==================== -->\n<div class=\"vtc-s1\" id=\"vtc-s1\">\n\n    <!-- GAUCHE : Adresses -->\n    <div class=\"vtc-s1-left\">\n                <p class=\"vtc-title\">D\u00e9part &amp; Arriv\u00e9e<\/p>\n        \n        <label class=\"vtc-label\">D\u00e9part<\/label>\n        <div class=\"vtc-addr\">\n            <div class=\"vtc-addr-ic\">\ud83d\udccd<\/div>\n            <input id=\"departure\" placeholder=\"Adresse \/ A\u00e9roport \/ Gare\" autocomplete=\"off\">\n            <input type=\"hidden\" id=\"departure_lat\">\n            <input type=\"hidden\" id=\"departure_lng\">\n        <\/div>\n        <div id=\"departure_zone_info\" class=\"zone-info\"><\/div>\n\n        <label class=\"vtc-label\">Arriv\u00e9e<\/label>\n        <div class=\"vtc-addr\">\n            <div class=\"vtc-addr-ic\">\ud83c\udfc1<\/div>\n            <input id=\"arrival\" placeholder=\"Adresse \/ A\u00e9roport \/ Gare\" autocomplete=\"off\">\n            <input type=\"hidden\" id=\"arrival_lat\">\n            <input type=\"hidden\" id=\"arrival_lng\">\n        <\/div>\n        <div id=\"arrival_zone_info\" class=\"zone-info\"><\/div>\n\n        <!-- Arr\u00eat suppl\u00e9mentaire -->\n        <p class=\"vtc-label\" style=\"margin-bottom:8px;\">Arr\u00eat suppl\u00e9mentaire<\/p>\n        <div class=\"vtc-stop-row\">\n            <button type=\"button\" class=\"vtc-stop-btn\" onclick=\"vtcAddStop()\">\n                <span class=\"vtc-stop-ic\" style=\"background:#2ecc71\">+<\/span> Ajouter adresse\n            <\/button>\n            <button type=\"button\" class=\"vtc-stop-btn\" onclick=\"vtcRemoveStop()\">\n                <span class=\"vtc-stop-ic\" style=\"background:#e74c3c;font-size:18px;line-height:.85\">\u2212<\/span> Annuler adresse\n            <\/button>\n        <\/div>\n        <div id=\"vtc-stop-wrap\" style=\"display:none;margin-top:10px;\">\n            <div class=\"vtc-addr\">\n                <div class=\"vtc-addr-ic\">\ud83d\udccc<\/div>\n                <input id=\"stop_address\" placeholder=\"Adresse de l'arr\u00eat\" autocomplete=\"off\">\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- DROITE : Options -->\n    <div class=\"vtc-s1-right\">\n        <p class=\"vtc-title\">Options<\/p>\n\n        <!-- Type de trajet -->\n        <div class=\"vtc-radio-row\">\n            <div class=\"vtc-radio-item\">\n                <span>Aller simple<\/span>\n                <input type=\"radio\" name=\"trip_type\" id=\"one_way\" value=\"one_way\" checked onchange=\"vtcToggleReturn()\">\n            <\/div>\n            <div class=\"vtc-radio-item\">\n                <span>Aller \/ Retour<\/span>\n                <input type=\"radio\" name=\"trip_type\" id=\"return_trip\" value=\"return\" onchange=\"vtcToggleReturn()\">\n            <\/div>\n        <\/div>\n\n        <!-- Passagers + Bagages -->\n        <div class=\"vtc-opts-grid\">\n            <div>\n                <span class=\"vtc-opt-label\">Passagers<\/span>\n                <select id=\"passengers\" class=\"vtc-select\">\n                    <option value=\"1\">1<\/option><option value=\"2\">2<\/option><option value=\"3\">3<\/option><option value=\"4\">4<\/option><option value=\"5\">5<\/option><option value=\"6\">6<\/option><option value=\"7\">7<\/option><option value=\"8\">8<\/option>                <\/select>\n            <\/div>\n            <div>\n                <span class=\"vtc-opt-label\">Bagages<\/span>\n                <select id=\"bagages\" class=\"vtc-select\">\n                    <option value=\"0\">0<\/option><option value=\"1\">1<\/option><option value=\"2\">2<\/option><option value=\"3\">3<\/option><option value=\"4\">4<\/option><option value=\"5\">5<\/option><option value=\"6\">6<\/option><option value=\"7\">7<\/option><option value=\"8\">8<\/option>                <\/select>\n            <\/div>\n        <\/div>\n\n        <!-- Date et heure de d\u00e9part -->\n        <div class=\"vtc-date-row\" style=\"margin-bottom:14px;\">\n            <div>\n                <span class=\"vtc-opt-label\">Date de d\u00e9part<\/span>\n                <div class=\"vtc-date-wrap\">\n                    <div class=\"vtc-date-ic\">\ud83d\udcc5<\/div>\n                    <input type=\"date\" id=\"ride_date\" class=\"vtc-date-input\" min=\"2026-07-28\" onchange=\"checkNightTime();utbSyncReturnDateMin();\">\n                <\/div>\n            <\/div>\n            <div class=\"vtc-date-hm\">\n                <div>\n                    <span class=\"vtc-opt-label\">Heure<\/span>\n                    <select id=\"vtc-h\" class=\"vtc-select\" onchange=\"vtcSyncTime()\">\n                                                <option value=\"00\" >00<\/option>\n                                                <option value=\"01\" >01<\/option>\n                                                <option value=\"02\" >02<\/option>\n                                                <option value=\"03\" >03<\/option>\n                                                <option value=\"04\" >04<\/option>\n                                                <option value=\"05\" >05<\/option>\n                                                <option value=\"06\" >06<\/option>\n                                                <option value=\"07\" >07<\/option>\n                                                <option value=\"08\" >08<\/option>\n                                                <option value=\"09\" >09<\/option>\n                                                <option value=\"10\" >10<\/option>\n                                                <option value=\"11\" >11<\/option>\n                                                <option value=\"12\" selected>12<\/option>\n                                                <option value=\"13\" >13<\/option>\n                                                <option value=\"14\" >14<\/option>\n                                                <option value=\"15\" >15<\/option>\n                                                <option value=\"16\" >16<\/option>\n                                                <option value=\"17\" >17<\/option>\n                                                <option value=\"18\" >18<\/option>\n                                                <option value=\"19\" >19<\/option>\n                                                <option value=\"20\" >20<\/option>\n                                                <option value=\"21\" >21<\/option>\n                                                <option value=\"22\" >22<\/option>\n                                                <option value=\"23\" >23<\/option>\n                                            <\/select>\n                <\/div>\n                <div>\n                    <span class=\"vtc-opt-label\">Min<\/span>\n                    <select id=\"vtc-m\" class=\"vtc-select\" onchange=\"vtcSyncTime()\">\n                        <option value=\"00\">00<\/option><option value=\"15\">15<\/option>\n                        <option value=\"30\">30<\/option><option value=\"45\">45<\/option>\n                    <\/select>\n                <\/div>\n            <\/div>\n        <\/div>\n        <input type=\"hidden\" id=\"ride_time\" value=\"12:00\">\n\n        <!-- Date de retour -->\n        <div id=\"return-date-section\" style=\"display:none;margin-bottom:14px;\">\n            <div class=\"vtc-date-row\">\n                <div>\n                    <span class=\"vtc-opt-label\">Date de retour<\/span>\n                    <div class=\"vtc-date-wrap\">\n                        <div class=\"vtc-date-ic\">\ud83d\udcc5<\/div>\n                        <input type=\"date\" id=\"return_date\" class=\"vtc-date-input\" min=\"2026-07-28\">\n                    <\/div>\n                <\/div>\n                <div class=\"vtc-date-hm\">\n                    <div>\n                        <span class=\"vtc-opt-label\">Heure<\/span>\n                        <select id=\"vtc-rh\" class=\"vtc-select\" onchange=\"vtcSyncReturnTime()\">\n                                                        <option value=\"00\" >00<\/option>\n                                                        <option value=\"01\" >01<\/option>\n                                                        <option value=\"02\" >02<\/option>\n                                                        <option value=\"03\" >03<\/option>\n                                                        <option value=\"04\" >04<\/option>\n                                                        <option value=\"05\" >05<\/option>\n                                                        <option value=\"06\" >06<\/option>\n                                                        <option value=\"07\" >07<\/option>\n                                                        <option value=\"08\" >08<\/option>\n                                                        <option value=\"09\" >09<\/option>\n                                                        <option value=\"10\" >10<\/option>\n                                                        <option value=\"11\" >11<\/option>\n                                                        <option value=\"12\" selected>12<\/option>\n                                                        <option value=\"13\" >13<\/option>\n                                                        <option value=\"14\" >14<\/option>\n                                                        <option value=\"15\" >15<\/option>\n                                                        <option value=\"16\" >16<\/option>\n                                                        <option value=\"17\" >17<\/option>\n                                                        <option value=\"18\" >18<\/option>\n                                                        <option value=\"19\" >19<\/option>\n                                                        <option value=\"20\" >20<\/option>\n                                                        <option value=\"21\" >21<\/option>\n                                                        <option value=\"22\" >22<\/option>\n                                                        <option value=\"23\" >23<\/option>\n                                                    <\/select>\n                    <\/div>\n                    <div>\n                        <span class=\"vtc-opt-label\">Min<\/span>\n                        <select id=\"vtc-rm\" class=\"vtc-select\" onchange=\"vtcSyncReturnTime()\">\n                            <option value=\"00\">00<\/option><option value=\"15\">15<\/option>\n                            <option value=\"30\">30<\/option><option value=\"45\">45<\/option>\n                        <\/select>\n                    <\/div>\n                <\/div>\n            <\/div>\n            <input type=\"hidden\" id=\"return_time\" value=\"12:00\">\n        <\/div>\n\n        <!-- N\u00b0 vol \/ gare -->\n        <div style=\"margin-bottom:14px;\">\n            <span class=\"vtc-opt-label\">N\u00b0 de vol, gare, ferry<\/span>\n            <div class=\"vtc-addr\" style=\"margin-bottom:0;\">\n                <div class=\"vtc-addr-ic\" style=\"color:#185FA5;\">\u2708\ufe0f<\/div>\n                <input type=\"text\" id=\"flight_number\" placeholder=\"Ex : AF1234\">\n            <\/div>\n        <\/div>\n\n        <div id=\"night_indicator\" class=\"vtc-night\"><span>\ud83c\udf19<\/span> Tarif nuit appliqu\u00e9 (22h\u20136h)<\/div>\n\n        <!-- Hidden fields -->\n        <div class=\"vtc-honeypot\"><input type=\"text\" id=\"website\" tabindex=\"-1\" autocomplete=\"off\"><\/div>\n    <\/div>\n<\/div>\n\n<button class=\"vtc-btn-main\" id=\"vtc-btn-next\" onclick=\"vtcGoStep2()\">Voir les v\u00e9hicules disponibles \u2192<\/button>\n\n<!-- ==================== STEP 2 ==================== -->\n<div class=\"vtc-s2\" id=\"vtc-s2\">\n\n    <div class=\"vtc-s2-recap\">\n        <div class=\"vtc-map-box\">\n            <div id=\"vtc-route-map\"><\/div>\n        <\/div>\n        <div class=\"vtc-recap-box\">\n            <p class=\"vtc-recap-section\">Date &amp; heure<\/p>\n            <div class=\"vtc-recap-row\"><span>D\u00e9part<\/span><span id=\"rc-datetime\">\u2014<\/span><\/div>\n            <div class=\"vtc-recap-row\"><span>Distance \/ dur\u00e9e<\/span><span id=\"rc-distance\">\u2014<\/span><\/div>\n            <div class=\"vtc-recap-opts\">\n                <p class=\"vtc-recap-section\" style=\"margin-top:14px;\">Options<\/p>\n                <div class=\"vtc-recap-opts-grid\">\n                    <div class=\"vtc-recap-opt\"><span>\ud83d\udc65 Passagers<\/span><span id=\"rc-pax\">1<\/span><\/div>\n                    <div class=\"vtc-recap-opt\"><span>\ud83d\udd04 Retour<\/span><span id=\"rc-type\">Non<\/span><\/div>\n                    <div class=\"vtc-recap-opt\"><span>\ud83e\uddf3 Bagages<\/span><span id=\"rc-bags\">0<\/span><\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"vtc-vehicles\" id=\"vtc-vehicle-list\">\n                <div class=\"vtc-vcard selected\"\n             id=\"vtc-vc-berline\"\n             onclick=\"vtcPickVeh('berline')\">\n            <input type=\"radio\" name=\"vehicle\" value=\"berline\" checked style=\"display:none\">\n            <div class=\"vtc-vcard-photo\">\n                <img decoding=\"async\" src=\"https:\/\/images.unsplash.com\/photo-1552519507-da3b142c6e3d?w=500&#038;q=80\" alt=\"Berline\"\n                     loading=\"lazy\" onerror=\"this.style.display='none'\">\n            <\/div>\n            <div class=\"vtc-vcard-body\">\n                <div class=\"vtc-vcard-info\">\n                    <div class=\"vtc-vcard-name\">Berline<\/div>\n                    <div class=\"vtc-vcard-caps\">\n                        <div class=\"vtc-vcard-cap\"><span>\ud83d\udc65<\/span><span>3 passagers<\/span><\/div>\n                        <div class=\"vtc-vcard-cap\"><span>\ud83e\uddf3<\/span><span>3 bagages<\/span><\/div>\n                    <\/div>\n                <\/div>\n                <div class=\"vtc-vcard-right\">\n                    <div class=\"vtc-vcard-price\">\n                        <span id=\"vtc-price-berline\">\u2014<\/span><sup>\u20ac<\/sup>\n                    <\/div>\n                    <button type=\"button\" class=\"vtc-reserver\"\n                        onclick=\"event.stopPropagation();vtcPickVeh('berline');setTimeout(vtcGoStep3,50)\">\n                        R\u00c9SERVER\n                    <\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"vtc-vcard \"\n             id=\"vtc-vc-van\"\n             onclick=\"vtcPickVeh('van')\">\n            <input type=\"radio\" name=\"vehicle\" value=\"van\"  style=\"display:none\">\n            <div class=\"vtc-vcard-photo\">\n                <img decoding=\"async\" src=\"https:\/\/images.unsplash.com\/photo-1544636331-e26879cd4d9b?w=500&#038;q=80\" alt=\"Van\"\n                     loading=\"lazy\" onerror=\"this.style.display='none'\">\n            <\/div>\n            <div class=\"vtc-vcard-body\">\n                <div class=\"vtc-vcard-info\">\n                    <div class=\"vtc-vcard-name\">Van<\/div>\n                    <div class=\"vtc-vcard-caps\">\n                        <div class=\"vtc-vcard-cap\"><span>\ud83d\udc65<\/span><span>8 passagers<\/span><\/div>\n                        <div class=\"vtc-vcard-cap\"><span>\ud83e\uddf3<\/span><span>8 bagages<\/span><\/div>\n                    <\/div>\n                <\/div>\n                <div class=\"vtc-vcard-right\">\n                    <div class=\"vtc-vcard-price\">\n                        <span id=\"vtc-price-van\">\u2014<\/span><sup>\u20ac<\/sup>\n                    <\/div>\n                    <button type=\"button\" class=\"vtc-reserver\"\n                        onclick=\"event.stopPropagation();vtcPickVeh('van');setTimeout(vtcGoStep3,50)\">\n                        R\u00c9SERVER\n                    <\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n                <div class=\"vtc-vcard \"\n             id=\"vtc-vc-luxury\"\n             onclick=\"vtcPickVeh('luxury')\">\n            <input type=\"radio\" name=\"vehicle\" value=\"luxury\"  style=\"display:none\">\n            <div class=\"vtc-vcard-photo\">\n                <img decoding=\"async\" src=\"https:\/\/images.unsplash.com\/photo-1583121274602-3e2820c69888?w=500&#038;q=80\" alt=\"Luxury\"\n                     loading=\"lazy\" onerror=\"this.style.display='none'\">\n            <\/div>\n            <div class=\"vtc-vcard-body\">\n                <div class=\"vtc-vcard-info\">\n                    <div class=\"vtc-vcard-name\">Luxury<\/div>\n                    <div class=\"vtc-vcard-caps\">\n                        <div class=\"vtc-vcard-cap\"><span>\ud83d\udc65<\/span><span>4 passagers<\/span><\/div>\n                        <div class=\"vtc-vcard-cap\"><span>\ud83e\uddf3<\/span><span>4 bagages<\/span><\/div>\n                    <\/div>\n                <\/div>\n                <div class=\"vtc-vcard-right\">\n                    <div class=\"vtc-vcard-price\">\n                        <span id=\"vtc-price-luxury\">\u2014<\/span><sup>\u20ac<\/sup>\n                    <\/div>\n                    <button type=\"button\" class=\"vtc-reserver\"\n                        onclick=\"event.stopPropagation();vtcPickVeh('luxury');setTimeout(vtcGoStep3,50)\">\n                        R\u00c9SERVER\n                    <\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n            <\/div>\n\n    <button type=\"button\" class=\"vtc-back-link\" onclick=\"vtcBack1()\">\u2190 Modifier le trajet<\/button>\n<\/div>\n\n<!-- ==================== STEP 3 ==================== -->\n<div class=\"vtc-s3\" id=\"vtc-s3\">\n<div class=\"vtc-s3-wrap\">\n\n    <!-- GAUCHE : Formulaire -->\n    <div class=\"vtc-s3-left\">\n\n        <div class=\"vtc-s3-veh-box\">\n            <p class=\"vtc-s3-veh-label\">V\u00e9hicule s\u00e9lectionn\u00e9<\/p>\n            <div class=\"vtc-s3-veh-card\">\n                <div>\n                    <div class=\"vtc-s3-veh-name\" id=\"s3-veh-name\">\u2014<\/div>\n                    <span class=\"vtc-s3-veh-badge\" id=\"s3-trip-badge\">ALLER SIMPLE<\/span>\n                <\/div>\n                <div class=\"vtc-s3-veh-price\"><span id=\"s3-price\">\u2014<\/span><sup>\u20ac<\/sup><\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"vtc-s3-form\">\n            <p class=\"vtc-s3-form-title\">Vos coordonn\u00e9es<\/p>\n\n            <div class=\"vtc-s3-grid\">\n                <div class=\"vtc-s3-field\">\n                    <label>Pr\u00e9nom <span style=\"color:#e53e3e;\">*<\/span><\/label>\n                    <input type=\"text\" id=\"vtc-prenom\" placeholder=\"Votre pr\u00e9nom\" autocomplete=\"given-name\">\n                <\/div>\n                <div class=\"vtc-s3-field\">\n                    <label>Nom <span style=\"color:#e53e3e;\">*<\/span><\/label>\n                    <input type=\"text\" id=\"vtc-nom\" placeholder=\"Votre nom\" autocomplete=\"family-name\">\n                <\/div>\n                <div class=\"vtc-s3-field\">\n                    <label>T\u00e9l\u00e9phone <span style=\"color:#e53e3e;\">*<\/span><\/label>\n                    <input type=\"tel\" id=\"phone\" placeholder=\"+33 6 00 00 00 00\" autocomplete=\"tel\">\n                <\/div>\n                <div class=\"vtc-s3-field\">\n                    <label>Email <span style=\"color:#e53e3e;\">*<\/span><\/label>\n                    <input type=\"email\" id=\"email\" placeholder=\"votre@email.com\" autocomplete=\"email\" required>\n                <\/div>\n            <\/div>\n\n            <!-- Code promo -->\n            <div id=\"vtc-s3-promo-wrap\" style=\"\">\n                <div class=\"vtc-s3-promo\">\n                    <input type=\"text\" id=\"promo_code_input\" placeholder=\"CODE PROMO\" oninput=\"this.value=this.value.toUpperCase()\">\n                    <button type=\"button\" onclick=\"utbApplyPromo()\">APPLIQUER<\/button>\n                <\/div>\n                <div id=\"promo_message\" style=\"font-size:12px;margin-bottom:10px;color:#555;min-height:18px;\"><\/div>\n            <\/div>\n\n            <!-- Commentaires -->\n            <div class=\"vtc-s3-field\" style=\"margin-bottom:14px;\">\n                <label>Commentaires<\/label>\n                <textarea id=\"vtc-comments\" rows=\"3\" placeholder=\"Informations suppl\u00e9mentaires, bagages sp\u00e9ciaux...\"><\/textarea>\n            <\/div>\n\n            <!-- Hidden compat fields -->\n            <input type=\"hidden\" id=\"name\" value=\"\">\n            <div id=\"price\" style=\"display:none;\"><\/div>\n            <div id=\"trip_info\" style=\"display:none;\"><\/div>\n            <div id=\"price_breakdown\" style=\"display:none;\"><\/div>\n            <div class=\"vtc-honeypot\"><input type=\"text\" id=\"website_s3\" tabindex=\"-1\" autocomplete=\"off\"><\/div>\n\n            \n                        <div class=\"vtc-consent\" style=\"margin:12px 0;padding:10px 12px;background:#f7f8fa;border:1px solid #dce1e7;border-radius:4px;\">\n                <label style=\"display:flex;gap:8px;align-items:flex-start;font-size:12.5px;line-height:1.5;cursor:pointer;\">\n                    <input type=\"checkbox\" id=\"utb_consent\" style=\"margin-top:2px;flex-shrink:0;\">\n                    <span>\n                        J&rsquo;accepte que mes donn&eacute;es soient utilis&eacute;es pour traiter ma r&eacute;servation.\n                                            <\/span>\n                <\/label>\n                <div id=\"utb_consent_err\" style=\"display:none;color:#d32f2f;font-size:12px;margin-top:6px;\">Merci de cocher cette case pour continuer.<\/div>\n            <\/div>\n\n            \n            <!-- Paiement en ligne -->\n            <div id=\"utb-payment-section\" style=\"display:none;margin-bottom:14px;\">\n                <div style=\"border:1px solid #dce1e7;border-radius:4px;overflow:hidden;\">\n                    <div style=\"background:#f7f8fa;padding:10px 14px;border-bottom:1px solid #dce1e7;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;\">\ud83d\udcb3 Mode de paiement<\/div>\n                    <div style=\"padding:12px;\">\n                        <label id=\"utb-pay-later-wrap\" class=\"vtc-pay-option\"><input type=\"radio\" name=\"utb_pay_method\" value=\"none\" checked onchange=\"utbSelectPayMethod('none')\"> \ud83d\udcb5 Paiement \u00e0 bord<\/label>\n                        <label id=\"utb-stripe-wrap\" class=\"vtc-pay-option\" style=\"display:none;\"><input type=\"radio\" name=\"utb_pay_method\" value=\"stripe\" onchange=\"utbSelectPayMethod('stripe')\"> \ud83d\udcb3 Carte bancaire (Stripe)<\/label>\n                        <label id=\"utb-paypal-wrap\" class=\"vtc-pay-option\" style=\"display:none;\"><input type=\"radio\" name=\"utb_pay_method\" value=\"paypal\" onchange=\"utbSelectPayMethod('paypal')\"> \ud83c\udd7f\ufe0f PayPal<\/label>\n                        <div id=\"utb-stripe-fields\" style=\"display:none;\"><div id=\"utb-stripe-element\" style=\"padding:12px;border:1px solid #ccc;border-radius:3px;background:#fff;min-height:44px;\"><\/div><div id=\"utb-stripe-error\" style=\"color:#d32f2f;font-size:12px;margin-top:5px;\"><\/div><\/div>\n                        <div id=\"utb-paypal-button-container\" style=\"display:none;\">\n                            <!-- Bouton PayPal standard (compte PayPal) -->\n                            <div id=\"utb-paypal-btn-wrap\" style=\"margin-bottom:10px;\"><\/div>\n                            <!-- S\u00e9parateur -->\n                            <div style=\"display:flex;align-items:center;gap:8px;margin:10px 0;\">\n                                <div style=\"flex:1;height:1px;background:#dce1e7;\"><\/div>\n                                <span style=\"font-size:11px;color:#999;white-space:nowrap;\">ou payer par carte<\/span>\n                                <div style=\"flex:1;height:1px;background:#dce1e7;\"><\/div>\n                            <\/div>\n                            <!-- Champs carte PayPal (Hosted Fields) -->\n                            <div id=\"utb-paypal-card-form\">\n                                <div style=\"margin-bottom:8px;\">\n                                    <label style=\"font-size:12px;color:#555;display:block;margin-bottom:4px;\">Num\u00e9ro de carte<\/label>\n                                    <div id=\"utb-pp-card-number\" style=\"padding:10px;border:1px solid #ccc;border-radius:3px;background:#fff;min-height:38px;\"><\/div>\n                                <\/div>\n                                <div style=\"display:flex;gap:8px;margin-bottom:8px;\">\n                                    <div style=\"flex:1;\">\n                                        <label style=\"font-size:12px;color:#555;display:block;margin-bottom:4px;\">Date d&rsquo;expiration<\/label>\n                                        <div id=\"utb-pp-expiry\" style=\"padding:10px;border:1px solid #ccc;border-radius:3px;background:#fff;min-height:38px;\"><\/div>\n                                    <\/div>\n                                    <div style=\"flex:1;\">\n                                        <label style=\"font-size:12px;color:#555;display:block;margin-bottom:4px;\">CVV<\/label>\n                                        <div id=\"utb-pp-cvv\" style=\"padding:10px;border:1px solid #ccc;border-radius:3px;background:#fff;min-height:38px;\"><\/div>\n                                    <\/div>\n                                <\/div>\n                                <div id=\"utb-pp-card-error\" style=\"color:#d32f2f;font-size:12px;margin-bottom:6px;display:none;\"><\/div>\n                                <button type=\"button\" id=\"utb-pp-card-submit\" style=\"width:100%;padding:11px;background:#003087;color:#fff;border:none;border-radius:3px;font-size:14px;font-weight:700;cursor:pointer;\">\n                                    \ud83d\udcb3 Payer par carte\n                                <\/button>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <button type=\"button\" class=\"vtc-btn-main\" id=\"confirm-btn\" onclick=\"vtcConfirm()\">CONFIRMER LA R\u00c9SERVATION<\/button>\n        <\/div>\n    <\/div>\n\n    <!-- DROITE : R\u00e9capitulatif -->\n    <div class=\"vtc-s3-right\">\n        <div style=\"margin-bottom:12px;\">\n            <div class=\"vtc-s3-addr-row\"><span style=\"color:#185FA5;font-size:16px;\">\ud83d\ude80<\/span><span id=\"s3-dep\">\u2014<\/span><\/div>\n            <div class=\"vtc-s3-addr-row\"><span style=\"color:#185FA5;font-size:16px;\">\ud83c\udfc1<\/span><span id=\"s3-arr\">\u2014<\/span><\/div>\n        <\/div>\n\n        <p class=\"vtc-s3-recap-title\">Date &amp; heure<\/p>\n        <div class=\"vtc-s3-recap-row\"><span>D\u00e9part<\/span><span id=\"s3-datetime\">\u2014<\/span><\/div>\n        <div class=\"vtc-s3-recap-row\"><span>Distance<\/span><span id=\"s3-distance\">\u2014<\/span><\/div>\n\n        <p class=\"vtc-s3-recap-title\">Options<\/p>\n        <div class=\"vtc-s3-opts-grid\">\n            <div class=\"vtc-s3-opt\"><span>\ud83d\udc65 Passagers<\/span><span id=\"s3-pax\">1<\/span><\/div>\n            <div class=\"vtc-s3-opt\"><span>\ud83d\udd04 Retour<\/span><span id=\"s3-type\">Non<\/span><\/div>\n            <div class=\"vtc-s3-opt\"><span>\ud83e\uddf3 Bagages<\/span><span id=\"s3-bags\">0<\/span><\/div>\n        <\/div>\n\n        <!-- D\u00e9tail prix -->\n        <div id=\"vtc-price-detail\" style=\"display:none;margin-top:16px;background:#f0f9ff;border:1px solid #bae6fd;border-radius:4px;padding:12px;\">\n            <div class=\"price-breakdown\" id=\"price_breakdown_s3\"><\/div>\n            <div id=\"s3-price-total\" style=\"text-align:center;font-size:22px;font-weight:700;color:#185FA5;margin-top:10px;\"><\/div>\n        <\/div>\n    <\/div>\n\n<\/div>\n<button type=\"button\" class=\"vtc-back-link\" onclick=\"vtcBack2()\">\u2190 Modifier le v\u00e9hicule<\/button>\n<\/div>\n\n<\/div><!-- end vtc-wrap -->\n\n<script>\n\/\/ ===== CORE STATE \u2014 charg\u00e9 via AJAX no-cache (jamais mis en cache par LWS\/Rocket\/etc.) =====\nvar utb_ajax = { ajax_url: 'https:\/\/caromedia.fr\/wp-admin\/admin-ajax.php' };\n\/\/ Promo \u2014 valeur directe depuis PHP (non cacheable car dans <script> inline avec nonce WP)\nvar UTB_PROMO_ENABLED = true;\n(function(){\n    \/\/ Appliquer imm\u00e9diatement avant tout AJAX\n    var pw = document.getElementById('vtc-s3-promo-wrap');\n    if(pw) pw.style.display = UTB_PROMO_ENABLED ? '' : 'none';\n})();\nvar utb_maps_api_key='', price=0, distanceKm=0;\nvar departureZone='default', arrivalZone='default';\nvar isNight=false;\nvar RETURN_MULTIPLIER=1.8, VEHICLES={}, ZONES={};\nvar UTB_DISPLAY={distance:true,price_km:true,base_price:false,min_price:false,extra_fee:true,night_fee:true,night_enabled:true};\nvar UTB_PAYMENT={enabled:false,mode:'optional',stripe_enabled:false,stripe_pk:'',paypal_enabled:false,paypal_id:'',enforced:false};\nvar departureAutocomplete, arrivalAutocomplete;\nvar _utbConfigLoaded=false;\n\n\/\/ Charge toute la config depuis le serveur sans cache\nfunction utbLoadConfig(cb){\n    fetch(utb_ajax.ajax_url,{\n        method:'POST',\n        headers:{'Content-Type':'application\/x-www-form-urlencoded','X-Requested-With':'XMLHttpRequest'},\n        body:'action=utb_get_config&nonce='+utb_ajax.nonce+'&_t='+Date.now()\n    })\n    .then(function(r){return r.json();})\n    .then(function(res){\n        if(!res.success) return;\n        var d=res.data;\n        utb_ajax.nonce    = d.nonce;\n        utb_ajax.ajax_url = d.ajax_url;\n        utb_maps_api_key  = d.maps_key;\n        RETURN_MULTIPLIER = d.return_multiplier;\n        VEHICLES          = d.vehicles;\n        ZONES             = d.zones;\n        UTB_DISPLAY       = d.display;\n        UTB_PAYMENT       = d.payment;\n        window._utbPageLoadTime  = Date.now();\n        window._utbNonceLifetime = 10*60*1000;\n        _utbConfigLoaded = true;\n        \/\/ FIX PROMO \u2014 appliquer depuis AJAX (insensible au cache serveur)\n        var promoWrap=document.getElementById('vtc-s3-promo-wrap');\n        if(promoWrap){promoWrap.style.display=(d.promo_enabled===true)?'':'none';}\n        \/\/ Charger Google Maps si cl\u00e9 pr\u00e9sente\n        if(utb_maps_api_key && typeof google==='undefined'){\n            var s=document.createElement('script');\n            s.src='https:\/\/maps.googleapis.com\/maps\/api\/js?key='+utb_maps_api_key+'&libraries=places,geometry&callback=initAutocomplete';\n            s.async=true; s.defer=true;\n            document.head.appendChild(s);\n        } else if(typeof google!=='undefined' && typeof initAutocomplete==='function'){\n            initAutocomplete();\n        }\n        checkNightTime();\n        if(cb) cb();\n    })\n    .catch(function(e){console.error('UTB config error:',e);});\n}\n\nwindow._utbRefreshNonce=function(cb){\n    fetch(utb_ajax.ajax_url,{\n        method:'POST',\n        headers:{'Content-Type':'application\/x-www-form-urlencoded','X-Requested-With':'XMLHttpRequest'},\n        body:'action=utb_get_config&_t='+Date.now()\n    }).then(function(r){return r.json();}).then(function(res){\n        if(res.success&&res.data&&res.data.nonce) utb_ajax.nonce=res.data.nonce;\n        if(cb) cb();\n    }).catch(function(){if(cb) cb();});\n};\n\n\n\/\/ ===== AUTOCOMPLETE =====\nfunction initAutocomplete(){\n    var dI=document.getElementById('departure'), aI=document.getElementById('arrival');\n    var opts={types:['geocode','establishment'],fields:['formatted_address','geometry','name']};\n    departureAutocomplete=new google.maps.places.Autocomplete(dI,opts);\n    arrivalAutocomplete=new google.maps.places.Autocomplete(aI,opts);\n    departureAutocomplete.addListener('place_changed',function(){\n        var p=departureAutocomplete.getPlace();\n        if(p.geometry){\n            document.getElementById('departure_lat').value=p.geometry.location.lat();\n            document.getElementById('departure_lng').value=p.geometry.location.lng();\n            var oldZone=departureZone;\n            detectZone(p.geometry.location.lat(),p.geometry.location.lng(),'departure');\n            \/\/ FIX \u2014 recalculer les prix si la zone a chang\u00e9 et qu'on est d\u00e9j\u00e0 \u00e0 l'\u00e9tape 2\n            if(oldZone!==departureZone && (distanceKm>0||arrivalZone)) vtcFetchAllPrices();\n        }\n    });\n    arrivalAutocomplete.addListener('place_changed',function(){\n        var p=arrivalAutocomplete.getPlace();\n        if(p.geometry){\n            document.getElementById('arrival_lat').value=p.geometry.location.lat();\n            document.getElementById('arrival_lng').value=p.geometry.location.lng();\n            var oldZone=arrivalZone;\n            detectZone(p.geometry.location.lat(),p.geometry.location.lng(),'arrival');\n            \/\/ FIX \u2014 recalculer les prix si la zone a chang\u00e9 et qu'on est d\u00e9j\u00e0 \u00e0 l'\u00e9tape 2\n            if(oldZone!==arrivalZone && (distanceKm>0||departureZone)) vtcFetchAllPrices();\n        }\n    });\n    document.getElementById('ride_date').addEventListener('change',checkNightTime);\n    document.getElementById('ride_time').addEventListener('change',checkNightTime);\n}\n\n\/\/ ===== ZONE DETECTION =====\nfunction detectZone(lat,lng,type){\n    for(var key in ZONES){\n        var z=ZONES[key]; if(!z.data) continue;\n        try{\n            var d=typeof z.data==='string'?JSON.parse(z.data):z.data;\n            if(d&&d.lat!==undefined&&d.radius!==undefined){\n                if(getDistKm(lat,lng,d.lat,d.lng)<=(d.radius\/1000)){\n                    if(type==='departure')departureZone=key; else arrivalZone=key;\n                    showZoneInfo(type,z.name,z.is_airport); checkAirportFields(); return;\n                }\n            }\n            if(Array.isArray(d)&#038;&#038;d.length>=3&&pointInPoly(lat,lng,d)){\n                if(type==='departure')departureZone=key; else arrivalZone=key;\n                showZoneInfo(type,z.name,z.is_airport); checkAirportFields(); return;\n            }\n        }catch(e){}\n    }\n    \/\/ Aucune zone d\u00e9tect\u00e9e \u2192 default (calcul au km normal)\n    if(type==='departure') departureZone='default'; else arrivalZone='default';\n    var el=document.getElementById(type+'_zone_info');\n    if(el){el.innerHTML='';el.classList.remove('active');}\n    checkAirportFields();\n}\nfunction pointInPoly(lat,lng,poly){\n    var inside=false;\n    for(var i=0,j=poly.length-1;i<poly.length;j=i++){\n        var xi=poly[i].lat,yi=poly[i].lng,xj=poly[j].lat,yj=poly[j].lng;\n        if(((yi>lng)!==(yj>lng))&&(lat<(xj-xi)*(lng-yi)\/(yj-yi)+xi))inside=!inside;\n    }\n    return inside;\n}\nfunction showZoneInfo(type,name,isAirport){\n    var el=document.getElementById(type+'_zone_info');\n    if(!el)return;\n    el.innerHTML='\ud83d\udccd Zone : <strong>'+name+'<\/strong>'+(isAirport?' \u2708\ufe0f':'');\n    el.classList.add('active'); el.style.color='#185FA5';\n}\nfunction checkAirportFields(){\n    var isAP=(ZONES[departureZone]&&ZONES[departureZone].is_airport)||(ZONES[arrivalZone]&&ZONES[arrivalZone].is_airport);\n    var f=document.getElementById('flight_field'); if(f) f.classList[isAP?'add':'remove']('active');\n}\nfunction getDistKm(lat1,lon1,lat2,lon2){\n    var R=6371,dL=deg2rad(lat2-lat1),dO=deg2rad(lon2-lon1);\n    var a=Math.sin(dL\/2)*Math.sin(dL\/2)+Math.cos(deg2rad(lat1))*Math.cos(deg2rad(lat2))*Math.sin(dO\/2)*Math.sin(dO\/2);\n    return R*2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));\n}\nfunction deg2rad(d){return d*(Math.PI\/180);}\n\n\/\/ ===== NIGHT CHECK =====\nfunction checkNightTime(){\n    var rt=document.getElementById('ride_time');\n    if(!rt||!rt.value)return;\n    var h=parseInt(rt.value.split(':')[0]);\n    isNight=UTB_DISPLAY.night_enabled&&(h>=22||h<6);\n    var ind=document.getElementById('night_indicator');\n    if(ind) ind.classList[isNight?'add':'remove']('active');\n}\n\n\/\/ ===== HELPERS =====\nfunction getSelectedVehicle(){var r=document.querySelector('input[name=\"vehicle\"]:checked');return r?r.value.toLowerCase():'berline';}\nfunction getTripType(){var r=document.querySelector('input[name=\"trip_type\"]:checked');return r?r.value:'one_way';}\nfunction vtcAddStop(){var w=document.getElementById('vtc-stop-wrap');if(w)w.style.display='block';}\nfunction vtcRemoveStop(){var w=document.getElementById('vtc-stop-wrap'),s=document.getElementById('stop_address');if(w)w.style.display='none';if(s)s.value='';}\nfunction vtcSyncTime(){\n    var h=document.getElementById('vtc-h').value||'12',m=document.getElementById('vtc-m').value||'00';\n    document.getElementById('ride_time').value=h+':'+m;\n    checkNightTime();\n}\nfunction vtcSyncReturnTime(){\n    var h=document.getElementById('vtc-rh').value||'12',m=document.getElementById('vtc-rm').value||'00';\n    var rt=document.getElementById('return_time');if(rt)rt.value=h+':'+m;\n}\nfunction utbSyncReturnDateMin(){\n    var a=document.getElementById('ride_date').value;\n    var r=document.getElementById('return_date');\n    if(r&#038;&#038;a){r.min=a;if(r.value&#038;&#038;r.value<a)r.value=a;}\n}\nfunction vtcToggleReturn(){\n    var isR=getTripType()==='return';\n    var s=document.getElementById('return-date-section');\n    if(s) s.style.display=isR?'block':'none';\n    if(!isR){var rd=document.getElementById('return_date');if(rd)rd.value='';}\n}\n\n\/\/ ===== STEP NAVIGATION =====\nfunction vtcGoStep2(){\n    \/\/ Attendre que la config soit charg\u00e9e (AJAX no-cache)\n    if(!_utbConfigLoaded){\n        var btn=document.getElementById('vtc-btn-next');\n        if(btn){btn.disabled=true;btn.textContent='\u23f3 Chargement...';}\n        utbLoadConfig(function(){\n            if(btn){btn.disabled=false;btn.textContent='\u00c9TAPE SUIVANTE \u2192';}\n            vtcGoStep2();\n        });\n        return;\n    }\n    var dep=document.getElementById('departure').value.trim();\n    var arr=document.getElementById('arrival').value.trim();\n    var rd=document.getElementById('ride_date').value;\n    var dLat=parseFloat(document.getElementById('departure_lat').value)||0;\n    var aLat=parseFloat(document.getElementById('arrival_lat').value)||0;\n    if(!dep||!arr){alert(\"Veuillez remplir le d\u00e9part et l'arriv\u00e9e.\");return;}\n    if(!dLat||!aLat){alert(\"Veuillez s\u00e9lectionner les adresses depuis les suggestions Google.\");return;}\n    if(!rd){alert(\"Veuillez choisir une date de d\u00e9part.\");return;}\n    document.getElementById('vtc-s1').style.display='none';\n    document.getElementById('vtc-btn-next').style.display='none';\n    document.getElementById('vtc-s2').style.display='block';\n    vtcUpdateRecap(); vtcDrawMap();\n}\nfunction vtcBack1(){\n    document.getElementById('vtc-s2').style.display='none';\n    document.getElementById('vtc-s1').style.display='';\n    document.getElementById('vtc-btn-next').style.display='block';\n}\nfunction vtcGoStep3(){\n    document.getElementById('vtc-s2').style.display='none';\n    document.getElementById('vtc-s3').style.display='block';\n    \/\/ FIX PROMO \u2014 r\u00e9appliquer la visibilit\u00e9 \u00e0 chaque ouverture du step 3\n    var pw=document.getElementById('vtc-s3-promo-wrap');\n    if(pw) pw.style.display=(typeof UTB_PROMO_ENABLED!=='undefined'&#038;&#038;!UTB_PROMO_ENABLED)?'none':'';\n    vtcFillStep3();\n    window.scrollTo({top:document.getElementById('vtc-s3').offsetTop-20,behavior:'smooth'});\n}\nfunction vtcBack2(){\n    document.getElementById('vtc-s3').style.display='none';\n    document.getElementById('vtc-s2').style.display='block';\n    \/\/ FIX \u2014 d\u00e9sactiver les boutons R\u00c9SERVER pendant le rechargement des prix\n    document.querySelectorAll('.vtc-reserver').forEach(function(b){\n        b.disabled=true; b.style.opacity='0.5'; b.textContent='Chargement...';\n    });\n    window.utbPricesReady=false;\n    \/\/ FIX PRIX FIXES \u2014 lancer fetch si zones d\u00e9finies, m\u00eame sans distance\n    if(distanceKm > 0 || (departureZone && arrivalZone)) vtcFetchAllPrices();\n}\n\n\/\/ ===== RECAP =====\nfunction vtcUpdateRecap(){\n    var rd=document.getElementById('ride_date').value,rt=document.getElementById('ride_time').value||'12:00';\n    var set=function(id,val){var e=document.getElementById(id);if(e)e.textContent=val;};\n    set('rc-datetime',rd?rd+' \u00e0 '+rt:'\u2014');\n    set('rc-pax',document.getElementById('passengers').value||'1');\n    set('rc-bags',document.getElementById('bagages')?document.getElementById('bagages').value:'0');\n    set('rc-type',getTripType()==='return'?'Oui':'Non');\n}\n\n\/\/ ===== VEHICLE PICK =====\nfunction vtcPickVeh(key){\n    document.querySelectorAll('.vtc-vcard').forEach(function(c){c.classList.remove('selected');});\n    document.querySelectorAll('input[name=\"vehicle\"]').forEach(function(r){r.checked=false;});\n    var card=document.getElementById('vtc-vc-'+key); if(card)card.classList.add('selected');\n    var radio=document.querySelector('input[name=\"vehicle\"][value=\"'+key+'\"]'); if(radio)radio.checked=true;\n    \/\/ FIX FINAL \u2014 lire le prix ET sauvegarder le key s\u00e9lectionn\u00e9\n    window.utbSelectedKey=key.toLowerCase(); \/\/ FIX \u2014 toujours lowercase\n    var pe=document.getElementById('vtc-price-'+key);\n    var p=pe&&pe.textContent&&pe.textContent!=='\u2014'?parseFloat(pe.textContent):0;\n    if(p>0){\n        price=p;\n        window.utbBasePrice=p;\n        window.utbSelectedPrice=p;\n    }\n}\n\n\/\/ ===== FILL STEP 3 =====\nfunction vtcFillStep3(){\n    var vkey=window.utbSelectedKey||getSelectedVehicle();\n    var vData=VEHICLES[vkey]||{};\n    var p=window.utbSelectedPrice||price;\n    if(p>0){price=p; window.utbBasePrice=p;}\n    \/\/ FIX PRIX FIXES \u2014 relancer fetch pour CE v\u00e9hicule pr\u00e9cis m\u00eame si distanceKm=0\n    if(distanceKm>0 || (departureZone && arrivalZone)){\n        fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},\n            body:new URLSearchParams({\n                action:'utb_calculate_price',nonce:utb_ajax.nonce,\n                zone_from:departureZone,zone_to:arrivalZone,\n                vehicle_type:vkey,distance:distanceKm,\n                trip_type:getTripType(),is_night:isNight?1:0,\n                ride_time:document.getElementById('ride_time').value,\n                ride_date:document.getElementById('ride_date').value\n            }).toString()})\n        .then(function(r){return r.json();})\n        .then(function(data){\n            if(data.success&&parseFloat(data.data.price)>0){\n                var p2=parseFloat(data.data.price);\n                price=p2; window.utbBasePrice=p2; window.utbSelectedPrice=p2;\n                displayPrice(data.data);\n            } else {\n                \/\/ FIX \u2014 fetch \u00e9chou\u00e9 ou prix=0 \u2192 afficher prix sauvegard\u00e9\n                var fallback=window.utbSelectedPrice||price||0;\n                var s3p=document.getElementById('s3-price');\n                if(s3p) s3p.textContent=fallback>0?fallback.toFixed(2):'\u2014';\n                \/\/ Afficher prix fixe si dispo\n                if(data.success&&data.data){\n                    displayPrice(data.data);\n                }\n            }\n        }).catch(function(){\n            \/\/ FIX \u2014 erreur r\u00e9seau \u2192 afficher prix sauvegard\u00e9\n            var fallback=window.utbSelectedPrice||price||0;\n            var s3p=document.getElementById('s3-price');\n            if(s3p) s3p.textContent=fallback>0?fallback.toFixed(2):'\u2014';\n            var s3t=document.getElementById('s3-price-total');\n            if(s3t) s3t.textContent=fallback>0?fallback.toFixed(2)+' \u20ac':'\u2014';\n        });\n    }\n    \/\/ Infos non-prix (synchrones)\n    var set=function(id,val){var e=document.getElementById(id);if(e)e.textContent=val;};\n    set('s3-veh-name',(vData.name||vkey).toUpperCase());\n    set('s3-trip-badge',getTripType()==='return'?'ALLER-RETOUR':'ALLER SIMPLE');\n    set('s3-dep',document.getElementById('departure').value);\n    set('s3-arr',document.getElementById('arrival').value);\n    var rd=document.getElementById('ride_date').value,rt=document.getElementById('ride_time').value||'12:00';\n    set('s3-datetime',rd?rd+' \u00e0 '+rt:'\u2014');\n    var rcDist=document.getElementById('rc-distance'); set('s3-distance',rcDist?rcDist.textContent:'\u2014');\n    set('s3-pax',document.getElementById('passengers').value||'1');\n    set('s3-bags',document.getElementById('bagages')?document.getElementById('bagages').value:'0');\n    set('s3-type',getTripType()==='return'?'Oui':'Non');\n    \/\/ FIX FINAL \u2014 NE PAS mettre s3-price ni PaymentUI ici (async fetch s'en charge)\n    set('s3-price','\u23f3');\n}\n\n\/\/ ===== MAP + DISTANCE =====\nfunction vtcDrawMap(){\n    var dLat=parseFloat(document.getElementById('departure_lat').value)||0;\n    var dLng=parseFloat(document.getElementById('departure_lng').value)||0;\n    var aLat=parseFloat(document.getElementById('arrival_lat').value)||0;\n    var aLng=parseFloat(document.getElementById('arrival_lng').value)||0;\n    var mapDiv=document.getElementById('vtc-route-map');\n\n    \/\/ Geocoder fallback si coordonn\u00e9es manquantes\n    if((!dLat||!aLat) && typeof google!=='undefined' && google.maps && google.maps.Geocoder) {\n        var dep=document.getElementById('departure').value.trim();\n        var arr=document.getElementById('arrival').value.trim();\n        if(!dep||!arr) return;\n        var geocoder=new google.maps.Geocoder();\n        var pending=2;\n        function tryDraw(){if(--pending===0) vtcDrawMap();}\n        if(!dLat){geocoder.geocode({address:dep},function(res,st){if(st==='OK'&&res[0]){var loc=res[0].geometry.location;document.getElementById('departure_lat').value=loc.lat();document.getElementById('departure_lng').value=loc.lng();detectZone(loc.lat(),loc.lng(),'departure');}tryDraw();});}else tryDraw();\n        if(!aLat){geocoder.geocode({address:arr},function(res,st){if(st==='OK'&&res[0]){var loc=res[0].geometry.location;document.getElementById('arrival_lat').value=loc.lat();document.getElementById('arrival_lng').value=loc.lng();detectZone(loc.lat(),loc.lng(),'arrival');}tryDraw();});}else tryDraw();\n        return;\n    }\n\n    \/\/ Haversine imm\u00e9diat si pas de carte\n    if(!mapDiv||!dLat||!aLat){\n        if(dLat&&aLat){\n            var R=6371,dLt=(aLat-dLat)*Math.PI\/180,dLn=(aLng-dLng)*Math.PI\/180;\n            var a=Math.sin(dLt\/2)*Math.sin(dLt\/2)+Math.cos(dLat*Math.PI\/180)*Math.cos(aLat*Math.PI\/180)*Math.sin(dLn\/2)*Math.sin(dLn\/2);\n            distanceKm=R*2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a))*1.3;\n            vtcFetchAllPrices();\n        }\n        return;\n    }\n\n    if(typeof google!=='undefined'&&google.maps&&google.maps.DirectionsService){\n        var map=new google.maps.Map(mapDiv,{zoom:11,center:{lat:(dLat+aLat)\/2,lng:(dLng+aLng)\/2},disableDefaultUI:false,gestureHandling:'cooperative',zoomControl:true,mapTypeControl:false,streetViewControl:false});\n        \/\/ Haversine imm\u00e9diat\n        var R=6371,dLt=(aLat-dLat)*Math.PI\/180,dLn=(aLng-dLng)*Math.PI\/180;\n        var a=Math.sin(dLt\/2)*Math.sin(dLt\/2)+Math.cos(dLat*Math.PI\/180)*Math.cos(aLat*Math.PI\/180)*Math.sin(dLn\/2)*Math.sin(dLn\/2);\n        distanceKm=R*2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a))*1.3;\n        var de=document.getElementById('rc-distance');\n        if(de) de.textContent='~'+Math.round(distanceKm)+' km (estimation)';\n        vtcFetchAllPrices();\n        \/\/ Directions pr\u00e9cises\n        new google.maps.DirectionsService().route({\n            origin:new google.maps.LatLng(dLat,dLng),destination:new google.maps.LatLng(aLat,aLng),\n            travelMode:google.maps.TravelMode.DRIVING\n        },function(result,status){\n            if(status==='OK'){\n                new google.maps.DirectionsRenderer({map:map,polylineOptions:{strokeColor:'#185FA5',strokeWeight:5}}).setDirections(result);\n                var leg=result.routes[0].legs[0];\n                distanceKm=leg.distance.value\/1000;\n                if(de) de.textContent=leg.distance.text+' \u2014 '+leg.duration.text;\n                vtcFetchAllPrices();\n            }\n        });\n    } else {\n        var R=6371,dLt=(aLat-dLat)*Math.PI\/180,dLn=(aLng-dLng)*Math.PI\/180;\n        var a=Math.sin(dLt\/2)*Math.sin(dLt\/2)+Math.cos(dLat*Math.PI\/180)*Math.cos(aLat*Math.PI\/180)*Math.sin(dLn\/2)*Math.sin(dLn\/2);\n        distanceKm=R*2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a))*1.3;\n        var de=document.getElementById('rc-distance');\n        if(de) de.textContent='~'+Math.round(distanceKm)+' km (estimation)';\n        vtcFetchAllPrices();\n    }\n}\n\n\/\/ ===== FETCH ALL PRICES =====\nfunction vtcFetchAllPrices(){\n    console.log('[UTB] vtcFetchAllPrices \u2192 zone_from='+departureZone+' zone_to='+arrivalZone+' dist='+distanceKm.toFixed(1)+'km');\n    \/\/ FIX PRIX FIXES \u2014 lancer m\u00eame si distanceKm=0 quand les zones sont d\u00e9finies\n    var vehicleKeys=Object.keys(VEHICLES);\n    var done=0, total=vehicleKeys.length;\n    vehicleKeys.forEach(function(key){\n        fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},\n            body:new URLSearchParams({\n                action:'utb_calculate_price',nonce:utb_ajax.nonce,\n                zone_from:departureZone,zone_to:arrivalZone,vehicle_type:key,distance:distanceKm,\n                trip_type:getTripType(),is_night:isNight?1:0,\n                ride_time:document.getElementById('ride_time').value,\n                ride_date:document.getElementById('ride_date').value\n            }).toString()})\n        .then(function(r){return r.json();})\n        .then(function(data){\n            var el=document.getElementById('vtc-price-'+key); if(!el)return;\n            if(data.success&&parseFloat(data.data.price)>0){\n                var p=parseFloat(data.data.price);\n                el.textContent=p.toFixed(2);\n                if(key===getSelectedVehicle()){\n                    price=p; window.utbBasePrice=p; window.utbSelectedPrice=p;\n                    displayPrice(data.data);\n                }\n                done++; if(done>=total) utbEnableReserverButtons();\n            } else {\n                \/\/ Fallback calcul local\n                var v=VEHICLES[key]||{};\n                var base=Math.max(distanceKm*(v.price_km||2.5),v.min_price||15);\n                if(getTripType()==='return')base*=RETURN_MULTIPLIER;\n                if(isNight)base*=1.2;\n                base=Math.round(base*100)\/100;\n                el.textContent=parseFloat(base).toFixed(2);\n                if(key===getSelectedVehicle()){price=base;window.utbBasePrice=base;}\n                done++; if(done>=total) utbEnableReserverButtons();\n            }\n        }).catch(function(){\n            var v=VEHICLES[key]||{},base=Math.max(distanceKm*(v.price_km||2.5),v.min_price||15);\n            if(getTripType()==='return')base*=RETURN_MULTIPLIER;\n            if(isNight)base*=1.2;\n            var el=document.getElementById('vtc-price-'+key);if(el)el.textContent=parseFloat(base).toFixed(2);\n            done++;\n            if(done>=total) utbEnableReserverButtons();\n        });\n    });\n}\n\n\/\/ FIX \u2014 r\u00e9activer les boutons R\u00c9SERVER apr\u00e8s chargement des prix\nfunction utbEnableReserverButtons(){\n    window.utbPricesReady=true;\n    document.querySelectorAll('.vtc-reserver').forEach(function(b){\n        b.disabled=false; b.style.opacity=''; b.textContent='R\u00c9SERVER';\n    });\n}\n\n\/\/ ===== DISPLAY PRICE =====\nfunction displayPrice(data){\n    try{\n        data.distance=parseFloat(data.distance)||0;\n        data.price_km=parseFloat(data.price_km)||0;\n        data.price_minimum=parseFloat(data.price_minimum)||0;\n        data.extra_fee=parseFloat(data.extra_fee)||0;\n        data.night_fee=parseFloat(data.night_fee)||0;\n        data.price=parseFloat(data.price)||0;\n        data.price_ht=parseFloat(data.price_ht)||0;\n        data.tva_rate=parseFloat(data.tva_rate)||0;\n        data.tva_amount=parseFloat(data.tva_amount)||0;\n        var SHOW=UTB_DISPLAY;\n        var breakdown='';\n        if(SHOW.distance) breakdown+='<div class=\"row\"><span>Distance<\/span><span>'+data.distance.toFixed(1)+' km<\/span><\/div>';\n        if(data.is_fixed){if(SHOW.price_km)breakdown+='<div class=\"row\"><span>Tarif forfaitaire<\/span><span>'+data.price_km.toFixed(2)+'\u20ac<\/span><\/div>';}\n        else{\n            if(SHOW.price_km)breakdown+='<div class=\"row\"><span>Tarif\/km<\/span><span>'+data.price_km.toFixed(2)+'\u20ac<\/span><\/div>';\n            if(SHOW.base_price)breakdown+='<div class=\"row\"><span>Base calcul\u00e9e<\/span><span>'+(data.distance*data.price_km).toFixed(2)+'\u20ac<\/span><\/div>';\n        }\n        if(SHOW.min_price&&data.price_minimum>0&&!data.is_fixed)breakdown+='<div class=\"row\"><span>Prix minimum<\/span><span>'+data.price_minimum.toFixed(2)+'\u20ac<\/span><\/div>';\n        if(getTripType()==='return')breakdown+='<div class=\"row\"><span>Aller-retour (\u00d7'+RETURN_MULTIPLIER+')<\/span><span>\u00d7'+RETURN_MULTIPLIER+'<\/span><\/div>';\n        if(SHOW.extra_fee&&data.extra_fee>0)breakdown+='<div class=\"row\"><span>Frais suppl\u00e9mentaires<\/span><span>+'+data.extra_fee.toFixed(2)+'\u20ac<\/span><\/div>';\n        if(SHOW.night_fee&&data.night_fee>0)breakdown+='<div class=\"row night\"><span>\ud83c\udf19 Majoration nuit<\/span><span>+'+data.night_fee.toFixed(2)+'\u20ac<\/span><\/div>';\n        if(window.utbPromoDiscount>0)breakdown+='<div class=\"row\" style=\"color:#059669;\"><span>\ud83c\udf9f\ufe0f Promo ('+window.utbPromoDiscount+'%)<\/span><span>-'+window.utbPromoDiscount+'%<\/span><\/div>';\n        if(data.tva_rate>0&&data.price_ht>0){\n            breakdown+='<div class=\"row\"><span>Montant HT<\/span><span>'+data.price_ht.toFixed(2)+'\u20ac<\/span><\/div>';\n            breakdown+='<div class=\"row\"><span>TVA ('+data.tva_rate+'%)<\/span><span>+'+data.tva_amount.toFixed(2)+'\u20ac<\/span><\/div>';\n        }\n        breakdown+='<div class=\"row\"><span>TOTAL TTC<\/span><span>'+data.price.toFixed(2)+' \u20ac<\/span><\/div>';\n        var pb3=document.getElementById('price_breakdown_s3'); if(pb3)pb3.innerHTML=breakdown;\n        var ptd=document.getElementById('vtc-price-detail'); if(ptd)ptd.style.display='block';\n        var s3t=document.getElementById('s3-price-total'); if(s3t)s3t.textContent=data.price.toFixed(2)+' \u20ac';\n        var s3p=document.getElementById('s3-price'); if(s3p)s3p.textContent=parseFloat(data.price).toFixed(2);\n        if(typeof utbInitPaymentUI==='function')utbInitPaymentUI(data.price||0);\n    }catch(e){console.error('displayPrice:',e);}\n}\n\n\/\/ ===== PROMO =====\nwindow.utbPromoDiscount=0;\nwindow.utbBasePrice=0;\nasync function utbApplyPromo(){\n    var code=document.getElementById('promo_code_input')&&document.getElementById('promo_code_input').value.trim().toUpperCase();\n    var msgEl=document.getElementById('promo_message');\n    if(!code){if(msgEl)msgEl.innerHTML='<span style=\"color:#ef4444;\">\u274c Entrez un code promo.<\/span>';return;}\n    if(msgEl)msgEl.innerHTML='<span style=\"color:#6b7280;\">\u23f3 V\u00e9rification...<\/span>';\n    try{\n        var res=await fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},\n            body:new URLSearchParams({action:'utb_check_promo',nonce:utb_ajax.nonce,promo_code:code,price:(window.utbBasePrice||price||0)}).toString()}).then(function(r){return r.json();});\n        if(res.success){\n            window.utbPromoDiscount=res.data.discount||0;\n            var newP=Math.round((window.utbBasePrice*(1-window.utbPromoDiscount\/100))*100)\/100;\n            price=newP;\n            var s3t=document.getElementById('s3-price-total'); if(s3t)s3t.textContent=newP.toFixed(2)+' \u20ac';\n            var s3p=document.getElementById('s3-price'); if(s3p)s3p.textContent=Math.round(newP);\n            if(msgEl)msgEl.innerHTML='<span style=\"color:#059669;font-weight:700;\">'+res.data.message+'<\/span>';\n        } else {\n            if(msgEl)msgEl.innerHTML='<span style=\"color:#ef4444;\">'+(res.data&&res.data.message?res.data.message:'\u274c Code invalide.')+'<\/span>';\n        }\n    }catch(e){if(msgEl)msgEl.innerHTML='<span style=\"color:#ef4444;\">\u274c Erreur r\u00e9seau.<\/span>';}\n}\n\n\/\/ ===== CONFIRM =====\nfunction vtcConfirm(){\n    var prenom=(document.getElementById('vtc-prenom').value||'').trim();\n    var nom=(document.getElementById('vtc-nom').value||'').trim();\n    var nameVal=(prenom+' '+nom).trim();\n    var nameField=document.getElementById('name'); if(nameField)nameField.value=nameVal;\n    if(!nameVal){alert('Veuillez remplir votre pr\u00e9nom et nom.');return;}\n    var emailVal=document.getElementById('email').value.trim();\n    if(!emailVal){alert('Veuillez remplir votre adresse email.');document.getElementById('email').focus();return;}\n    if(!\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(emailVal)){alert('Adresse email invalide.');document.getElementById('email').focus();return;}\n    \/\/ D\u00e9terminer le mode de paiement s\u00e9lectionn\u00e9\n    var payRadio=document.querySelector('input[name=\"utb_pay_method\"]:checked');\n    var payMethod=payRadio?payRadio.value:'none';\n    if(UTB_PAYMENT.enforced&&payMethod!=='stripe'&&payMethod!=='paypal'){\n        alert('Veuillez choisir un moyen de paiement pour confirmer votre r\u00e9servation.');\n        var sec=document.getElementById('utb-payment-section');\n        if(sec)sec.scrollIntoView({behavior:'smooth',block:'center'});\n        return;\n    }\n    if(payMethod==='paypal'){\n        \/\/ Pour PayPal : soumettre la r\u00e9servation d'abord, puis d\u00e9clencher PayPal\n        confirmBookingThenPay('paypal');\n    } else if(payMethod==='stripe'){\n        confirmBookingThenPay('stripe');\n    } else {\n        confirmBooking();\n    }\n}\n\nfunction confirmBooking(){\n    var name=document.getElementById('name')?document.getElementById('name').value.trim():'';\n    var phone=document.getElementById('phone').value.trim();\n    var email=document.getElementById('email').value.trim();\n    var rideDate=document.getElementById('ride_date').value;\n    var rideTime=document.getElementById('ride_time').value;\n    var tripType=getTripType();\n    var vehicle=getSelectedVehicle();\n    var passengers=document.getElementById('passengers').value;\n    var _cb=document.getElementById('utb_consent');\n    if(_cb&&!_cb.checked){\n        var _e=document.getElementById('utb_consent_err');\n        if(_e){_e.style.display='block';_e.scrollIntoView({behavior:'smooth',block:'center'});}\n        return;\n    }\n    var honeypot=document.getElementById('website')&&document.getElementById('website').value;\n    var flightNumber=document.getElementById('flight_number')?document.getElementById('flight_number').value.trim():'';\n    if(honeypot)return;\n    if(!name||!phone){alert('Veuillez remplir votre nom et t\u00e9l\u00e9phone.');return;}\n    if(!rideDate||!rideTime){alert('Veuillez s\u00e9lectionner la date et heure.');return;}\n    if(tripType==='return'){\n        var retD=document.getElementById('return_date')?document.getElementById('return_date').value:'';\n        var retT=document.getElementById('return_time')?document.getElementById('return_time').value:'';\n        if(!retD||!retT){alert('Veuillez s\u00e9lectionner la date et heure de retour.');return;}\n        if(retD<rideDate||(retD===rideDate&#038;&#038;retT<=rideTime)){alert('La date de retour doit \u00eatre apr\u00e8s la date aller.');return;}\n    }\n    if(!price||price<=0){alert(\"Veuillez d'abord s\u00e9lectionner un v\u00e9hicule.\");return;}\n    var selDate=new Date(rideDate+'T'+rideTime);\n    if(selDate<new Date()){alert('La date ne peut pas \u00eatre dans le pass\u00e9.');return;}\n    var _ch=parseInt(rideTime.split(':')[0]); isNight=UTB_DISPLAY.night_enabled&#038;&#038;(_ch>=22||_ch<6);\n    var btn=document.getElementById('confirm-btn');\n    var origTxt=btn?btn.innerHTML:'';\n    if(btn){btn.disabled=true;btn.innerHTML='\u23f3 Envoi en cours...';}\n    var fd=new URLSearchParams();\n    fd.append('action','utb_submit_booking'); fd.append('nonce',utb_ajax.nonce);\n    fd.append('name',name); fd.append('phone',phone); fd.append('email',email);\n    fd.append('departure',document.getElementById('departure').value);\n    fd.append('departure_lat',document.getElementById('departure_lat').value);\n    fd.append('departure_lng',document.getElementById('departure_lng').value);\n    fd.append('departure_zone',departureZone);\n    fd.append('arrival',document.getElementById('arrival').value);\n    fd.append('arrival_lat',document.getElementById('arrival_lat').value);\n    fd.append('arrival_lng',document.getElementById('arrival_lng').value);\n    fd.append('arrival_zone',arrivalZone);\n    fd.append('trip_type',tripType); fd.append('vehicle_type',vehicle);\n    fd.append('passengers',passengers);\n    fd.append('bags',document.getElementById('bagages')?document.getElementById('bagages').value:0);\n    fd.append('distance',distanceKm);\n    fd.append('price',price); fd.append('ride_date',rideDate); fd.append('ride_time',rideTime);\n    fd.append('return_date',tripType==='return'?(document.getElementById('return_date')?document.getElementById('return_date').value:''):'');\n    fd.append('return_time',tripType==='return'?(document.getElementById('return_time')?document.getElementById('return_time').value:''):'');\n    fd.append('flight_number',flightNumber);\n    fd.append('stop_address',document.getElementById('stop_address')?document.getElementById('stop_address').value.trim():'');\n    fd.append('comments',document.getElementById('vtc-comments')?document.getElementById('vtc-comments').value.trim():'');\n    fd.append('is_night',isNight?1:0); fd.append('is_fixed_price',(distanceKm<=0&#038;&#038;price>0)?1:0);\n    fd.append('website',honeypot||'');\n    fd.append('consent',(document.getElementById('utb_consent')&&document.getElementById('utb_consent').checked)?'1':'');\n    fd.append('promo_code',(document.getElementById('promo_code_input')&&document.getElementById('promo_code_input').value)||'');\n    fd.append('promo_discount',window.utbPromoDiscount||0);\n    function doSubmit(){\n        fd.set('nonce',utb_ajax.nonce);\n        fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},body:fd.toString()})\n        .then(function(r){if(!r.ok)throw new Error('HTTP '+r.status);return r.json();})\n        .then(function(res){\n            if(btn){btn.disabled=false;btn.innerHTML=origTxt;}\n            if(res.success){window.location.href=res.data.redirect_url;}\n            else{\n                if(res.data&&res.data.message&&res.data.message.toLowerCase().includes('nonce')){\n                    window._utbRefreshNonce(function(){doSubmit();});\n                } else {alert('Erreur: '+(res.data&&res.data.message?res.data.message:'Erreur inconnue'));}\n            }\n        }).catch(function(err){if(btn){btn.disabled=false;btn.innerHTML=origTxt;}alert('Erreur de connexion. R\u00e9essayez.');});\n    }\n    var elapsed=Date.now()-window._utbPageLoadTime;\n    if(elapsed>window._utbNonceLifetime){window._utbRefreshNonce(function(){doSubmit();});}else{doSubmit();}\n}\n\n\/\/ ===== NOUVEAU: Soumettre r\u00e9servation puis d\u00e9clencher paiement en ligne =====\nfunction confirmBookingThenPay(payType){\n    var prenom=(document.getElementById('vtc-prenom').value||'').trim();\n    var nom=(document.getElementById('vtc-nom').value||'').trim();\n    var nameVal=(prenom+' '+nom).trim();\n    var nameField=document.getElementById('name'); if(nameField)nameField.value=nameVal;\n    var phone=document.getElementById('phone').value.trim();\n    var email=document.getElementById('email').value.trim();\n    var rideDate=document.getElementById('ride_date').value;\n    var rideTime=document.getElementById('ride_time').value;\n    var tripType=getTripType();\n    var vehicle=getSelectedVehicle();\n    var passengers=document.getElementById('passengers').value;\n    var _cb=document.getElementById('utb_consent');\n    if(_cb&&!_cb.checked){\n        var _e=document.getElementById('utb_consent_err');\n        if(_e){_e.style.display='block';_e.scrollIntoView({behavior:'smooth',block:'center'});}\n        return;\n    }\n    var honeypot=document.getElementById('website')&&document.getElementById('website').value;\n    var flightNumber=document.getElementById('flight_number')?document.getElementById('flight_number').value.trim():'';\n    if(honeypot)return;\n    if(!rideDate||!rideTime){alert('Veuillez s\u00e9lectionner la date et heure.');return;}\n    if(!price||price<=0){alert(\"Veuillez d'abord s\u00e9lectionner un v\u00e9hicule.\");return;}\n    var btn=document.getElementById('confirm-btn');\n    var origTxt=btn?btn.innerHTML:'';\n    if(btn){btn.disabled=true;btn.innerHTML='\u23f3 Envoi en cours...';}\n    var fd=new URLSearchParams();\n    fd.append('action','utb_submit_booking'); fd.append('nonce',utb_ajax.nonce);\n    fd.append('name',nameVal); fd.append('phone',phone); fd.append('email',email);\n    fd.append('departure',document.getElementById('departure').value);\n    fd.append('departure_lat',document.getElementById('departure_lat').value);\n    fd.append('departure_lng',document.getElementById('departure_lng').value);\n    fd.append('departure_zone',departureZone);\n    fd.append('arrival',document.getElementById('arrival').value);\n    fd.append('arrival_lat',document.getElementById('arrival_lat').value);\n    fd.append('arrival_lng',document.getElementById('arrival_lng').value);\n    fd.append('arrival_zone',arrivalZone);\n    fd.append('trip_type',tripType); fd.append('vehicle_type',vehicle);\n    fd.append('passengers',passengers);\n    fd.append('bags',document.getElementById('bagages')?document.getElementById('bagages').value:0);\n    fd.append('distance',distanceKm);\n    fd.append('price',price); fd.append('ride_date',rideDate); fd.append('ride_time',rideTime);\n    fd.append('return_date',tripType==='return'?(document.getElementById('return_date')?document.getElementById('return_date').value:''):'');\n    fd.append('return_time',tripType==='return'?(document.getElementById('return_time')?document.getElementById('return_time').value:''):'');\n    fd.append('flight_number',flightNumber);\n    fd.append('stop_address',document.getElementById('stop_address')?document.getElementById('stop_address').value.trim():'');\n    fd.append('comments',document.getElementById('vtc-comments')?document.getElementById('vtc-comments').value.trim():'');\n    var _ch=parseInt(rideTime.split(':')[0]); isNight=UTB_DISPLAY.night_enabled&#038;&#038;(_ch>=22||_ch<6);\n    fd.append('is_night',isNight?1:0); fd.append('is_fixed_price',(distanceKm<=0&#038;&#038;price>0)?1:0);\n    fd.append('website',honeypot||'');\n    fd.append('consent',(document.getElementById('utb_consent')&&document.getElementById('utb_consent').checked)?'1':'');\n    fd.append('promo_code',(document.getElementById('promo_code_input')&&document.getElementById('promo_code_input').value)||'');\n    fd.append('promo_discount',window.utbPromoDiscount||0);\n    fd.append('pay_online',payType); \/\/ -> statut \u00ab awaiting_payment \u00bb c\u00f4t\u00e9 serveur\n    \/\/ Soumettre la r\u00e9servation (statut \u00ab awaiting_payment \u00bb)\n    fd.set('nonce',utb_ajax.nonce);\n    fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},body:fd.toString()})\n    .then(function(r){if(!r.ok)throw new Error('HTTP '+r.status);return r.json();})\n    .then(function(res){\n        if(btn){btn.disabled=false;btn.innerHTML=origTxt;}\n        if(!res.success){alert('Erreur: '+(res.data&&res.data.message?res.data.message:'Erreur inconnue'));return;}\n        \/\/ R\u00e9cup\u00e9rer le booking_id depuis la r\u00e9ponse\n        var redirectUrl=res.data.redirect_url||'';\n        if(res.data.booking_id){\n            utbCurrentBookingId=parseInt(res.data.booking_id);\n            utbConfirmationUrl=redirectUrl;\n        } else {\n            \/\/ Fallback: essayer depuis l'URL\n            var match=redirectUrl.match(\/booking=(\\d+)\/);\n            if(match){utbCurrentBookingId=parseInt(match[1]);utbConfirmationUrl=redirectUrl;}\n        }\n        utbCurrentAmount=price;\n        \/\/ D\u00e9clencher le paiement\n        if(payType==='paypal'){\n            \/\/ Scroller vers le bouton PayPal\n            var pc=document.getElementById('utb-paypal-button-container');\n            if(pc){pc.style.display='block';pc.scrollIntoView({behavior:'smooth',block:'center'});}\n            \/\/ Si PayPal pas encore rendu, le rendre maintenant\n            if(!utbPaypalRendered&&window.paypal){utbRenderPaypalButton();}\n            else if(!utbPaypalRendered){\n                utbLoadScript('https:\/\/www.paypal.com\/sdk\/js?client-id='+UTB_PAYMENT.paypal_id+'&currency=EUR&components=buttons,hosted-fields',utbRenderPaypalButton);\n            }\n            \/\/ Afficher message instructions\n            if(pc){var msg=document.createElement('p');msg.id='utb-paypal-msg';msg.style.cssText='text-align:center;font-size:13px;color:#555;margin:8px 0 0;';msg.textContent='Cliquez sur le bouton PayPal ci-dessus pour finaliser votre paiement.';if(!document.getElementById('utb-paypal-msg'))pc.parentNode.insertBefore(msg,pc.nextSibling);}\n        } else if(payType==='stripe'){\n            var sf=document.getElementById('utb-stripe-fields');\n            if(sf){sf.style.display='block';sf.scrollIntoView({behavior:'smooth',block:'center'});}\n            var sBtn=document.getElementById('utb-stripe-pay-btn');\n            if(!sBtn){\n                sBtn=document.createElement('button');sBtn.id='utb-stripe-pay-btn';sBtn.type='button';\n                sBtn.className='vtc-btn-main';sBtn.style.marginTop='10px';sBtn.textContent='\ud83d\udcb3 Payer par carte';\n                sBtn.onclick=function(){utbDoStripePayment(sBtn,sBtn.innerHTML);};\n                if(sf)sf.parentNode.insertBefore(sBtn,sf.nextSibling);\n            }\n            sBtn.style.display='block';\n        }\n    }).catch(function(err){if(btn){btn.disabled=false;btn.innerHTML=origTxt;}alert('Erreur de connexion. R\u00e9essayez.');});\n}\n\n\/\/ ===== PAYMENT =====\nvar utbStripe=null,utbStripeElements=null,utbStripeCard=null;\nvar utbCurrentBookingId=null,utbCurrentAmount=0,utbConfirmationUrl='';\nvar utbPaypalRendered=false;\nfunction utbInitPaymentUI(p){\n    if(!UTB_PAYMENT.enabled)return;\n    utbCurrentAmount=p;\n    var sec=document.getElementById('utb-payment-section'); if(sec)sec.style.display='block';\n    \/\/ Mode \u00ab paiement obligatoire \u00bb : masquer \u00ab Paiement \u00e0 bord \u00bb.\n    \/\/ UTB_PAYMENT.enforced n'est vrai que si une passerelle est vraiment\n    \/\/ utilisable \u2014 sinon on laisse l'option pour ne pas bloquer le client.\n    if(UTB_PAYMENT.enforced){\n        var later=document.getElementById('utb-pay-later-wrap');\n        if(later){\n            later.style.display='none';\n            var r=later.querySelector('input'); if(r)r.checked=false;\n        }\n    }\n    if(UTB_PAYMENT.stripe_enabled){\n        var w=document.getElementById('utb-stripe-wrap'); if(w)w.style.display='flex';\n        if(UTB_PAYMENT.stripe_pk&&!utbStripe)utbLoadScript('https:\/\/js.stripe.com\/v3\/',function(){utbStripe=Stripe(UTB_PAYMENT.stripe_pk);});\n    }\n    if(UTB_PAYMENT.paypal_enabled&&UTB_PAYMENT.paypal_id&&!utbPaypalRendered){\n        var pw=document.getElementById('utb-paypal-wrap'); if(pw)pw.style.display='flex';\n        utbLoadScript('https:\/\/www.paypal.com\/sdk\/js?client-id='+UTB_PAYMENT.paypal_id+'&currency=EUR&components=buttons,hosted-fields',utbRenderPaypalButton);\n    }\n}\nfunction utbLoadScript(src,cb){\n    if(document.querySelector('script[src=\"'+src+'\"]')){if(cb)cb();return;}\n    var s=document.createElement('script');s.src=src;s.onload=cb||null;document.head.appendChild(s);\n}\nfunction utbSelectPayMethod(m){\n    var sf=document.getElementById('utb-stripe-fields'),pc=document.getElementById('utb-paypal-button-container');\n    if(sf)sf.style.display=m==='stripe'?'block':'none';\n    if(pc)pc.style.display=m==='paypal'?'block':'none';\n    if(m==='stripe'&&utbStripe&&!utbStripeCard){\n        utbStripeElements=utbStripe.elements();\n        utbStripeCard=utbStripeElements.create('card',{style:{base:{fontSize:'14px',color:'#333','::placeholder':{color:'#aaa'}}}});\n        utbStripeCard.mount('#utb-stripe-element');\n        utbStripeCard.on('change',function(e){var el=document.getElementById('utb-stripe-error');if(el)el.textContent=e.error?e.error.message:'';});\n    }\n}\nfunction utbRenderPaypalButton(){\n    if(!window.paypal||utbPaypalRendered)return; utbPaypalRendered=true;\n\n    \/\/ \u2500\u2500 1. Bouton PayPal standard (popup compte PayPal) \u2500\u2500\n    paypal.Buttons({\n        createOrder:function(){\n            return fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},\n                body:new URLSearchParams({action:'utb_paypal_create',nonce:utb_ajax.nonce,amount:utbCurrentAmount,description:'R\u00e9servation VTC #'+(utbCurrentBookingId||'')}).toString()})\n            .then(function(r){return r.json();})\n            .then(function(res){if(!res.success)throw new Error(res.data.message);return res.data.order_id;});\n        },\n        onApprove:function(data){\n            return fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},\n                body:new URLSearchParams({action:'utb_paypal_capture',nonce:utb_ajax.nonce,order_id:data.orderID,booking_id:utbCurrentBookingId}).toString()})\n            .then(function(r){return r.json();})\n            .then(function(res){if(res.success)window.location.href=utbConfirmationUrl+'&paid=1';else alert('Erreur PayPal: '+res.data.message);});\n        },\n        onError:function(err){alert('Erreur PayPal. R\u00e9essayez.');console.error(err);}\n    }).render('#utb-paypal-btn-wrap');\n\n    \/\/ \u2500\u2500 2. Hosted Fields (champs carte directement dans la page) \u2500\u2500\n    if(paypal.HostedFields && paypal.HostedFields.isEligible()){\n        paypal.HostedFields.render({\n            createOrder:function(){\n                return fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},\n                    body:new URLSearchParams({action:'utb_paypal_create',nonce:utb_ajax.nonce,amount:utbCurrentAmount,description:'R\u00e9servation VTC #'+(utbCurrentBookingId||'')}).toString()})\n                .then(function(r){return r.json();})\n                .then(function(res){if(!res.success)throw new Error(res.data.message);return res.data.order_id;});\n            },\n            fields:{\n                number:{selector:'#utb-pp-card-number',placeholder:'1234 5678 9012 3456'},\n                expirationDate:{selector:'#utb-pp-expiry',placeholder:'MM\/AA'},\n                cvv:{selector:'#utb-pp-cvv',placeholder:'CVV'}\n            },\n            styles:{\n                'input':{color:'#333','font-size':'14px'},\n                ':focus':{color:'#003087'},\n                '.invalid':{color:'#d32f2f'}\n            }\n        }).then(function(hf){\n            document.getElementById('utb-pp-card-submit').addEventListener('click',function(){\n                var btn=this; btn.disabled=true; btn.textContent='\u23f3 Traitement...';\n                var errEl=document.getElementById('utb-pp-card-error');\n                if(errEl){errEl.style.display='none';errEl.textContent='';}\n                hf.submit({contingencies:['3D_SECURE']})\n                .then(function(payload){\n                    if(payload.liabilityShift==='POSSIBLE'||payload.liabilityShift==='YES'||!payload.liabilityShift){\n                        return fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},\n                            body:new URLSearchParams({action:'utb_paypal_capture',nonce:utb_ajax.nonce,order_id:payload.orderId,booking_id:utbCurrentBookingId}).toString()})\n                        .then(function(r){return r.json();})\n                        .then(function(res){\n                            if(res.success){window.location.href=utbConfirmationUrl+'&paid=1';}\n                            else{btn.disabled=false;btn.textContent='\ud83d\udcb3 Payer par carte';if(errEl){errEl.textContent=res.data.message||'Erreur paiement';errEl.style.display='block';}}\n                        });\n                    } else {\n                        btn.disabled=false;btn.textContent='\ud83d\udcb3 Payer par carte';\n                        if(errEl){errEl.textContent='Paiement refus\u00e9. V\u00e9rifiez vos informations.';errEl.style.display='block';}\n                    }\n                })\n                .catch(function(err){\n                    btn.disabled=false;btn.textContent='\ud83d\udcb3 Payer par carte';\n                    if(errEl){errEl.textContent=err.message||'Erreur carte. R\u00e9essayez.';errEl.style.display='block';}\n                });\n            });\n        }).catch(function(err){\n            \/\/ Hosted Fields non dispo \u2192 cacher le formulaire carte\n            var cardForm=document.getElementById('utb-paypal-card-form');\n            if(cardForm)cardForm.style.display='none';\n            console.warn('PayPal HostedFields unavailable:',err);\n        });\n    } else {\n        \/\/ Hosted Fields non \u00e9ligible (ex: sandbox sans Advanced Card) \u2192 cacher formulaire carte\n        var cardForm=document.getElementById('utb-paypal-card-form');\n        if(cardForm)cardForm.style.display='none';\n    }\n}\nasync function utbDoStripePayment(btn,origTxt){\n    var ir=await fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},body:new URLSearchParams({action:'utb_stripe_intent',nonce:utb_ajax.nonce,amount:utbCurrentAmount,description:'R\u00e9servation VTC #'+utbCurrentBookingId}).toString()}).then(function(r){return r.json();});\n    if(!ir.success){if(btn){btn.disabled=false;btn.innerHTML=origTxt;}alert('Erreur Stripe: '+(ir.data&&ir.data.message?ir.data.message:'Erreur'));return;}\n    var result=await utbStripe.confirmCardPayment(ir.data.client_secret,{payment_method:{card:utbStripeCard}});\n    if(result.error){if(btn){btn.disabled=false;btn.innerHTML=origTxt;}var se=document.getElementById('utb-stripe-error');if(se)se.textContent=result.error.message;return;}\n    var cr=await fetch(utb_ajax.ajax_url,{method:'POST',headers:{'Content-Type':'application\/x-www-form-urlencoded'},body:new URLSearchParams({action:'utb_stripe_confirm',nonce:utb_ajax.nonce,booking_id:utbCurrentBookingId,intent_id:result.paymentIntent.id}).toString()}).then(function(r){return r.json();});\n    if(cr.success){window.location.href=utbConfirmationUrl+'&paid=1';}else{if(btn){btn.disabled=false;btn.innerHTML=origTxt;}alert('Erreur confirmation: '+(cr.data&&cr.data.message?cr.data.message:'Erreur'));}\n}\n\n\/\/ ===== TIME SYNC =====\nfunction vtcSyncAllTimes(){vtcSyncTime();vtcSyncReturnTime();}\n<\/script>\n\n<script>\n\/\/ D\u00e9marrage \u2014 charger la config (no-cache) puis initialiser\ndocument.addEventListener('DOMContentLoaded', function() {\n    utbLoadConfig(function() {\n        vtcSyncAllTimes();\n        checkNightTime();\n    });\n});\n<\/script>\n\n<\/span><\/p><h3>Formulaire de r\u00e9servation<\/h3><p>Le parcours client complet : adresses, date, v\u00e9hicule, options, paiement et confirmation.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-898c5e5\" data-id=\"898c5e5\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-28ffebb vtcbp-feature elementor-widget elementor-widget-text-editor\" data-id=\"28ffebb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span class=\"vtcbp-code\">[uber_driver_app]<\/span><\/p><h3>Espace chauffeur<\/h3><p>Page de connexion et liste des courses assign\u00e9es, avec les boutons Accepter et Refuser. Installable sur l&rsquo;\u00e9cran d&rsquo;accueil du mobile.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6a0be1a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6a0be1a\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-17b38d2\" data-id=\"17b38d2\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d4fb404 elementor-widget elementor-widget-text-editor\" data-id=\"d4fb404\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"vtcbp-eyebrow\">Tarifs<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6401048 elementor-widget elementor-widget-heading\" data-id=\"6401048\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Une licence par site, renouvelable chaque ann\u00e9e<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d713887 elementor-widget elementor-widget-text-editor\" data-id=\"d713887\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"vtcbp-lead\">Aucune commission sur vos courses. Le prix ne bouge pas avec votre volume.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d6d668c elementor-widget elementor-widget-spacer\" data-id=\"d6d668c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-fc52e4d vtcbp-sec--surface elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"fc52e4d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-40 elementor-top-column elementor-element elementor-element-7463f53\" data-id=\"7463f53\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-47197f1 elementor-widget elementor-widget-text-editor\" data-id=\"47197f1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"vtcbp-eyebrow\">Questions fr\u00e9quentes<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-08f3cab elementor-widget elementor-widget-heading\" data-id=\"08f3cab\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Ce qu'on nous demande avant d'acheter<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-60 elementor-top-column elementor-element elementor-element-9dc675b\" data-id=\"9dc675b\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-fa2d366 vtcbp-faq elementor-widget elementor-widget-toggle\" data-id=\"fa2d366\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"toggle.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2621\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-2621\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Faut-il Elementor pour utiliser l'extension ?<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-2621\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-2621\"><p>Non. L&rsquo;extension fonctionne avec n&rsquo;importe quel th\u00e8me gr\u00e2ce au shortcode. Ce th\u00e8me sert \u00e0 pr\u00e9senter et vendre l&rsquo;extension, et il est enti\u00e8rement modifiable dans Elementor.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2622\" class=\"elementor-tab-title\" data-tab=\"2\" role=\"button\" aria-controls=\"elementor-tab-content-2622\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Sur combien de sites puis-je installer la licence ?<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-2622\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"2\" role=\"region\" aria-labelledby=\"elementor-tab-title-2622\"><p>Chaque licence est li\u00e9e au nombre de domaines de votre formule. La cl\u00e9 s&rsquo;active depuis l&rsquo;administration WordPress, en une minute.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2623\" class=\"elementor-tab-title\" data-tab=\"3\" role=\"button\" aria-controls=\"elementor-tab-content-2623\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Comment sont calcul\u00e9s les prix des courses ?<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-2623\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"3\" role=\"region\" aria-labelledby=\"elementor-tab-title-2623\"><p>Trois modes cohabitent : forfait entre deux zones, tarif au kilom\u00e8tre avec prise en charge, et prix minimum garanti. Vous choisissez le mode par zone.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2624\" class=\"elementor-tab-title\" data-tab=\"4\" role=\"button\" aria-controls=\"elementor-tab-content-2624\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">L'extension g\u00e8re-t-elle plusieurs chauffeurs ?<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-2624\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"4\" role=\"region\" aria-labelledby=\"elementor-tab-title-2624\"><p>Oui. Chaque chauffeur a ses identifiants et son espace mobile pour accepter ou refuser les courses qui lui sont assign\u00e9es.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2625\" class=\"elementor-tab-title\" data-tab=\"5\" role=\"button\" aria-controls=\"elementor-tab-content-2625\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Quelles versions de PHP et de WordPress sont support\u00e9es ?<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-2625\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"5\" role=\"region\" aria-labelledby=\"elementor-tab-title-2625\"><p>PHP 7.0 minimum et WordPress 5.6 minimum. L&rsquo;extension est test\u00e9e jusqu&rsquo;aux versions courantes.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2626\" class=\"elementor-tab-title\" data-tab=\"6\" role=\"button\" aria-controls=\"elementor-tab-content-2626\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Les mises \u00e0 jour sont-elles incluses ?<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-2626\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"6\" role=\"region\" aria-labelledby=\"elementor-tab-title-2626\"><p>Oui, pendant toute la dur\u00e9e de la licence. Les mises \u00e0 jour apparaissent directement dans l&rsquo;\u00e9cran Extensions de WordPress.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-34815e1 vtcbp-sec--ink elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"34815e1\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-60 elementor-top-column elementor-element elementor-element-8e8b48c\" data-id=\"8e8b48c\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f0025b3 elementor-widget elementor-widget-text-editor\" data-id=\"f0025b3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"vtcbp-eyebrow\">Parlons de votre flotte<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f6f67c8 elementor-widget elementor-widget-heading\" data-id=\"f6f67c8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Une d\u00e9mo de 15 minutes, sur votre site<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-18e2012 elementor-widget elementor-widget-text-editor\" data-id=\"18e2012\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"vtcbp-lead\">Envoyez-nous l&rsquo;adresse de votre site et le type de courses que vous op\u00e9rez. Nous vous montrons le formulaire en conditions r\u00e9elles.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6f11292 elementor-align-left vtcbp-cta-accent elementor-widget elementor-widget-button\" data-id=\"6f11292\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-md\" href=\"mailto:contact@caromedia.fr\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">\u00c9crire \u00e0 Caromedia<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-40 elementor-top-column elementor-element elementor-element-17f261a\" data-id=\"17f261a\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9d437df elementor-widget elementor-widget-text-editor\" data-id=\"9d437df\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-family:var(--vtcbp-mono);font-size:.85rem;line-height:2\">Caromedia<br>caromedia.fr<br>contact@caromedia.fr<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Module De R\u00e9servation Pour Taxi &amp; VTC Qui Convertit Vos Visiteurs En R\u00e9servation En Ligne Extension WordPress \u00b7 Caromedia VTC Booking Pro transforme votre site WordPress en centrale\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-13","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>VTC Booking Pro - VTC BOOKING PRO BY CAROMEDIA<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/caromedia.fr\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"VTC Booking Pro - VTC BOOKING PRO BY CAROMEDIA\" \/>\n<meta property=\"og:description\" content=\"Module De R\u00e9servation Pour Taxi &amp; VTC Qui Convertit Vos Visiteurs En R\u00e9servation En Ligne Extension WordPress \u00b7 Caromedia VTC Booking Pro transforme votre site WordPress en centrale\u2026\" \/>\n<meta property=\"og:url\" content=\"https:\/\/caromedia.fr\/\" \/>\n<meta property=\"og:site_name\" content=\"VTC BOOKING PRO BY CAROMEDIA\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-25T18:51:37+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/caromedia.fr\\\/\",\"url\":\"https:\\\/\\\/caromedia.fr\\\/\",\"name\":\"VTC Booking Pro - VTC BOOKING PRO BY CAROMEDIA\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/caromedia.fr\\\/#website\"},\"datePublished\":\"2026-07-23T23:02:07+00:00\",\"dateModified\":\"2026-07-25T18:51:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/caromedia.fr\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/caromedia.fr\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/caromedia.fr\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/caromedia.fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"VTC Booking Pro\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/caromedia.fr\\\/#website\",\"url\":\"https:\\\/\\\/caromedia.fr\\\/\",\"name\":\"VTC BOOKING PRO BY CAROMEDIA\",\"description\":\"VTC BOOKING PRO \",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/caromedia.fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"VTC Booking Pro - VTC BOOKING PRO BY CAROMEDIA","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/caromedia.fr\/","og_locale":"fr_FR","og_type":"article","og_title":"VTC Booking Pro - VTC BOOKING PRO BY CAROMEDIA","og_description":"Module De R\u00e9servation Pour Taxi &amp; VTC Qui Convertit Vos Visiteurs En R\u00e9servation En Ligne Extension WordPress \u00b7 Caromedia VTC Booking Pro transforme votre site WordPress en centrale\u2026","og_url":"https:\/\/caromedia.fr\/","og_site_name":"VTC BOOKING PRO BY CAROMEDIA","article_modified_time":"2026-07-25T18:51:37+00:00","twitter_card":"summary_large_image","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/caromedia.fr\/","url":"https:\/\/caromedia.fr\/","name":"VTC Booking Pro - VTC BOOKING PRO BY CAROMEDIA","isPartOf":{"@id":"https:\/\/caromedia.fr\/#website"},"datePublished":"2026-07-23T23:02:07+00:00","dateModified":"2026-07-25T18:51:37+00:00","breadcrumb":{"@id":"https:\/\/caromedia.fr\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/caromedia.fr\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/caromedia.fr\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/caromedia.fr\/"},{"@type":"ListItem","position":2,"name":"VTC Booking Pro"}]},{"@type":"WebSite","@id":"https:\/\/caromedia.fr\/#website","url":"https:\/\/caromedia.fr\/","name":"VTC BOOKING PRO BY CAROMEDIA","description":"VTC BOOKING PRO ","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/caromedia.fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"}]}},"_links":{"self":[{"href":"https:\/\/caromedia.fr\/index.php\/wp-json\/wp\/v2\/pages\/13","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/caromedia.fr\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/caromedia.fr\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/caromedia.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/caromedia.fr\/index.php\/wp-json\/wp\/v2\/comments?post=13"}],"version-history":[{"count":26,"href":"https:\/\/caromedia.fr\/index.php\/wp-json\/wp\/v2\/pages\/13\/revisions"}],"predecessor-version":[{"id":61,"href":"https:\/\/caromedia.fr\/index.php\/wp-json\/wp\/v2\/pages\/13\/revisions\/61"}],"wp:attachment":[{"href":"https:\/\/caromedia.fr\/index.php\/wp-json\/wp\/v2\/media?parent=13"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}