.elementor-widget-form .elementor-field-group>label,.elementor-widget-form .elementor-field-subgroup label{color:var(--e-global-color-text)}.elementor-widget-form .elementor-field-group>label{font-family:var(--e-global-typography-text-font-family),Sans-serif;font-weight:var(--e-global-typography-text-font-weight)}.elementor-widget-form .elementor-field-type-html{color:var(--e-global-color-text);font-family:var(--e-global-typography-text-font-family),Sans-serif;font-weight:var(--e-global-typography-text-font-weight)}.elementor-widget-form .elementor-field-group .elementor-field{color:var(--e-global-color-text)}.elementor-widget-form .elementor-field-group .elementor-field,.elementor-widget-form .elementor-field-subgroup label{font-family:var(--e-global-typography-text-font-family),Sans-serif;font-weight:var(--e-global-typography-text-font-weight)}.elementor-widget-form .elementor-button{font-family:var(--e-global-typography-accent-font-family),Sans-serif;font-weight:var(--e-global-typography-accent-font-weight)}.elementor-widget-form .e-form__buttons__wrapper__button-next{background-color:var(--e-global-color-accent)}.elementor-widget-form .elementor-button[type="submit"]{background-color:var(--e-global-color-accent)}.elementor-widget-form .e-form__buttons__wrapper__button-previous{background-color:var(--e-global-color-accent)}.elementor-widget-form .elementor-message{font-family:var(--e-global-typography-text-font-family),Sans-serif;font-weight:var(--e-global-typography-text-font-weight)}.elementor-widget-form .e-form__indicators__indicator,.elementor-widget-form .e-form__indicators__indicator__label{font-family:var(--e-global-typography-accent-font-family),Sans-serif;font-weight:var(--e-global-typography-accent-font-weight)}.elementor-widget-form{--e-form-steps-indicator-inactive-primary-color:var( --e-global-color-text );--e-form-steps-indicator-active-primary-color:var( --e-global-color-accent );--e-form-steps-indicator-completed-primary-color:var( --e-global-color-accent );--e-form-steps-indicator-progress-color:var( --e-global-color-accent );--e-form-steps-indicator-progress-background-color:var( --e-global-color-text );--e-form-steps-indicator-progress-meter-color:var( --e-global-color-text )}.elementor-widget-form .e-form__indicators__indicator__progress__meter{font-family:var(--e-global-typography-accent-font-family),Sans-serif;font-weight:var(--e-global-typography-accent-font-weight)}.elementor-15708 .elementor-element.elementor-element-15708{width:var(--container-widget-width,94.934%);max-width:94.934%;--container-widget-width:94.934%;--container-widget-flex-grow:0;--e-form-steps-indicators-spacing:20px;--e-form-steps-indicator-padding:30px;--e-form-steps-indicator-inactive-secondary-color:#ffffff;--e-form-steps-indicator-active-secondary-color:#ffffff;--e-form-steps-indicator-completed-secondary-color:#ffffff;--e-form-steps-divider-width:1px;--e-form-steps-divider-gap:10px}.elementor-15708 .elementor-element.elementor-element-15708>.elementor-widget-container{background-color:#00012C;margin:3px 3px 3px 3px;padding:16px 16px 16px 16px;border-style:solid;border-width:11px 11px 11px 11px;border-radius:23px 23px 23px 23px}.elementor-15708 .elementor-element.elementor-element-15708.elementor-element{--align-self:center;--flex-grow:0;--flex-shrink:0}.elementor-15708 .elementor-element.elementor-element-15708 .elementor-field-group{padding-right:calc(22px/2);padding-left:calc(22px/2);margin-bottom:11px}.elementor-15708 .elementor-element.elementor-element-15708 .elementor-form-fields-wrapper{margin-left:calc(-22px/2);margin-right:calc(-22px/2);margin-bottom:-11px}.elementor-15708 .elementor-element.elementor-element-15708 .elementor-field-group.recaptcha_v3-bottomleft,.elementor-15708 .elementor-element.elementor-element-15708 .elementor-field-group.recaptcha_v3-bottomright{margin-bottom:0}body.rtl .elementor-15708 .elementor-element.elementor-element-15708 .elementor-labels-inline .elementor-field-group>label{padding-left:0}body:not(.rtl) .elementor-15708 .elementor-element.elementor-element-15708 .elementor-labels-inline .elementor-field-group>label{padding-right:0}body .elementor-15708 .elementor-element.elementor-element-15708 .elementor-labels-above .elementor-field-group>label{padding-bottom:0}.elementor-15708 .elementor-element.elementor-element-15708 .elementor-field-group>label,.elementor-15708 .elementor-element.elementor-element-15708 .elementor-field-subgroup label{color:#FFF}.elementor-15708 .elementor-element.elementor-element-15708 .elementor-field-group>label{font-family:"Roboto",Sans-serif;font-size:23px;font-weight:400}.elementor-15708 .elementor-element.elementor-element-15708 .elementor-field-type-html{padding-bottom:0}.elementor-15708 .elementor-element.elementor-element-15708 .elementor-field-group .elementor-field{color:#000}.elementor-15708 .elementor-element.elementor-element-15708 .elementor-field-group .elementor-field:not(.elementor-select-wrapper){background-color:#fff;border-width:4px 4px 4px 4px;border-radius:14px 14px 14px 14px}.elementor-15708 .elementor-element.elementor-element-15708 .elementor-field-group .elementor-select-wrapper select{background-color:#fff;border-width:4px 4px 4px 4px;border-radius:14px 14px 14px 14px}.elementor-15708 .elementor-element.elementor-element-15708 .e-form__buttons__wrapper__button-next{background-color:#FFF;color:#000}.elementor-15708 .elementor-element.elementor-element-15708 .elementor-button[type="submit"]{background-color:#FFF;color:#000}.elementor-15708 .elementor-element.elementor-element-15708 .elementor-button[type="submit"] svg *{fill:#000}.elementor-15708 .elementor-element.elementor-element-15708 .e-form__buttons__wrapper__button-previous{color:#fff}.elementor-15708 .elementor-element.elementor-element-15708 .e-form__buttons__wrapper__button-next:hover{color:#fff}.elementor-15708 .elementor-element.elementor-element-15708 .elementor-button[type="submit"]:hover{color:#fff}.elementor-15708 .elementor-element.elementor-element-15708 .elementor-button[type="submit"]:hover svg *{fill:#fff}.elementor-15708 .elementor-element.elementor-element-15708 .e-form__buttons__wrapper__button-previous:hover{color:#fff}@media(max-width:767px){.elementor-15708 .elementor-element.elementor-element-15708{--container-widget-width:100%;--container-widget-flex-grow:0;width:var(--container-widget-width,100%);max-width:100%}}<style>.formdrift .drift-booking-box{margin:0 0 20px 0;padding:18px 20px;background:#fff;border:1px solid #e5e7eb;border-left:5px solid #f97316;border-radius:12px;box-shadow:0 5px 18px rgb(0 0 0 / .06)}.formdrift .drift-booking-title{font-size:20px;font-weight:800;color:#222;margin-bottom:5px}.formdrift .drift-booking-text{font-size:14px;color:#666;line-height:1.5}.formdrift .drift-sessions{margin-top:12px}.formdrift .drift-session-row{display:flex;align-items:center;gap:10px;margin-bottom:10px}.formdrift .drift-session-select{width:100%;min-height:50px;padding:10px 14px;font-size:16px;font-weight:600;color:#222;background:#fff;border:1px solid #d1d5db;border-radius:8px;cursor:pointer}.formdrift .drift-session-select:focus{border-color:#f97316;box-shadow:0 0 0 2px rgb(249 115 22 / .15);outline:none}.formdrift .drift-session-number{min-width:82px;font-size:14px;font-weight:700;color:#444}.formdrift .drift-remove-session{width:38px;height:38px;min-width:38px;border:0;border-radius:50%;background:#f3f4f6;color:#666;font-size:18px;cursor:pointer}.formdrift .drift-remove-session:hover{background:#fee2e2;color:#b91c1c}.formdrift .drift-add-session{display:inline-flex;align-items:center;justify-content:center;margin-top:4px;padding:10px 16px;border:1px solid #f97316;border-radius:8px;background:#fff;color:#f97316;font-size:14px;font-weight:700;cursor:pointer}.formdrift .drift-add-session:hover{background:#fff7ed}.formdrift input[type="date"],.formdrift input.elementor-field-date,.formdrift input[name^="form_fields"][name*="date"]{min-height:50px!important;padding:10px 14px!important;font-size:16px!important;color:#222!important;background:#fff!important;border:1px solid #d1d5db!important;border-radius:8px!important}.flatpickr-calendar{width:340px!important;padding:10px!important;border-radius:12px!important;box-shadow:0 8px 30px rgb(0 0 0 / .20)!important}.flatpickr-current-month{font-size:18px!important;font-weight:800!important}.flatpickr-current-month .flatpickr-monthDropdown-months,.flatpickr-current-month input.cur-year{font-size:17px!important;font-weight:700!important}.flatpickr-weekdays{margin-top:8px!important}.flatpickr-weekday{font-size:14px!important;font-weight:800!important;color:#333!important}.flatpickr-day{height:42px!important;line-height:42px!important;font-size:15px!important;border-radius:8px!important}.flatpickr-day:hover{background:#fff0e5!important;border-color:#f97316!important}.flatpickr-day.selected{background:#f97316!important;border-color:#f97316!important;color:#fff!important;font-weight:800!important}.formdrift .drift-error{display:none;margin-top:8px;padding:10px 12px;background:#fff1f1;border:1px solid #fecaca;border-radius:8px;color:#b91c1c;font-size:13px;font-weight:600}@media(max-width:767px){.formdrift .drift-session-row{flex-wrap:wrap}.formdrift .drift-session-number{width:100%}.flatpickr-calendar{width:310px!important;max-width:94vw!important}}</style><script>(function($){const DRIFT_HOURS={0:['14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00'],1:['14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00'],2:['14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00'],3:['14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00'],4:['14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00'],5:['14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00'],6:['14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00']};function parseDate(value){if(!value){return null}if(/^\d{4}-\d{2}-\d{2}$/.test(value)){const p=value.split('-');return new Date(Number(p[0]),Number(p[1]) - 1,Number(p[2]))}const m=value.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/);if(m){return new Date(Number(m[3]),Number(m[2]) - 1,Number(m[1]))}return null}function hourLabel(hour){return hour.replace(':','h')}function getDriftForms(){return $('form.elementor-form.formdrift,'+'.formdrift form.elementor-form')}function initDrift($form){if(!$form.length){return}if($form.data('drift-session-init')){return}const $date=$form.find('input[type="date"],'+'input.elementor-field-date,'+'input[name^="form_fields"][name*="date"]').first();const $hiddenSessions=$form.find('[name="form_fields[sessions]"]').first();const $submit=$form.find('button[type="submit"],'+'input[type="submit"]').first();if(!$date.length){console.log('DRIFT : champ date introuvable');return}if(!$hiddenSessions.length){console.log('DRIFT : ajoute un champ Elementor avec ID "sessions"');return}$form.data('drift-session-init',true);const $box=$(` <div class="drift-booking-box"><div class="drift-booking-title">🏁 Réservation des sessions </div><div class="drift-booking-text">Choisissez d'abord votre date.

                Vous pourrez ensuite sélectionner
                une ou plusieurs sessions.

                <br>

                Une seule session peut être sélectionnée
                par heure.

            </div>

        </div>

    `);


    $form.prepend($box);


/* =========================================================
   ZONE SESSIONS
========================================================= */

    const $sessionArea = $(`
        <div class="drift-sessions"></div>
    `);


    const $addButton = $(`
        <button
            type="button"
            class="drift-add-session"
        >
            + Ajouter une session
        </button>
    `);


    const $error = $(`
        <div class="drift-error"></div>
    `);


    /*
     * On place les sessions juste après
     * le groupe Elementor contenant la date.
     */

    const $dateGroup =
        $date.closest(
            '.elementor-field-group'
        );


    if($dateGroup.length){

        $dateGroup.after(
            $sessionArea,
            $addButton,
            $error
        );

    }

    else{

        $date.after(
            $sessionArea,
            $addButton,
            $error
        );

    }


/* =========================================================
   HEURES DISPONIBLES SELON DATE
========================================================= */

    function getAvailableHours(){

        const date =
            parseDate(
                ($date.val() || '').trim()
            );


        if(!date){

            return [];

        }


        const day =
            date.getDay();


        return DRIFT_HOURS[day] || [];

    }


/* =========================================================
   HEURES DÉJÀ CHOISIES
========================================================= */

    function getSelectedHours(){

        const values = [];


        $sessionArea
            .find('.drift-session-select')
            .each(function(){

                const value =
                    $(this).val();


                if(value){

                    values.push(value);

                }

            });


        return values;

    }


/* =========================================================
   ENREGISTRER DANS ELEMENTOR
========================================================= */

    function saveSessions(){

        const values =
            getSelectedHours();


        /*
         * Ce texte sera reçu dans l'email Elementor:* * 14:0,15:0,16:0 */ $hiddenSessions .val(values.join(', ')) .trigger('input') .trigger('change')}function refreshSelects(){const allHours=getAvailableHours();const selected=getSelectedHours();$sessionArea .find('.drift-session-select') .each(function(){const $select=$(this);const current=$select.val();$select .find('option') .each(function(){const value=$(this).attr('value');if(!value){return}const usedElsewhere=selected.includes(value) && value !==current;$(this).prop('disabled',usedElsewhere)})});saveSessions()}function addSession(){const hours=getAvailableHours();if(!hours.length){$error .html('Choisissez d’abord une date.') .show();return}const selected=getSelectedHours();if(selected.length>=hours.length){$error .html('Toutes les sessions disponibles pour cette journée ont déjà été sélectionnées.') .show();return}$error.hide();const number=$sessionArea .find('.drift-session-row') .length+1;const $row=$(` <div class="drift-session-row"></div>`);const $number=$(` <div class="drift-session-number">Session ${number}</div>`);const $select=$(` <select class="drift-session-select"><option value="">Choisissez une heure </option></select>`);hours.forEach(function(hour){$select.append($('<option>',{value:hour,text:hourLabel(hour)}))});const $remove=$(` <button type="button" class="drift-remove-session" title="Supprimer cette session">× </button>`);$row.append($number,$select,$remove);$sessionArea.append($row);refreshSelects()}function renumberSessions(){$sessionArea .find('.drift-session-row') .each(function(index){$(this) .find('.drift-session-number') .text('Session '+(index+1))})}$addButton.on('click',function(){addSession()});$sessionArea.on('change','.drift-session-select',function(){$error.hide();refreshSelects()});$sessionArea.on('click','.drift-remove-session',function(){$(this) .closest('.drift-session-row') .remove();renumberSessions();refreshSelects();if(!$sessionArea .find('.drift-session-row') .length){addSession()}});function dateChanged(){$sessionArea.empty();$hiddenSessions.val('');$error.hide();if($date.val()){addSession()}}$date.on('change',dateChanged);$date.on('input',function(){setTimeout(dateChanged,50)});function configureCalendar(){if(!$date[0] || !$date[0]._flatpickr){return}const fp=$date[0]._flatpickr;fp.redraw()}let calendarTries=0;const calendarTimer=setInterval(function(){configureCalendar();calendarTries++;if(calendarTries>=30){clearInterval(calendarTimer)}},200);$form.on('submit.driftSessions',function(e){const date=($date.val() || '').trim();const sessions=getSelectedHours();if(!date){return}if(!sessions.length){e.preventDefault();e.stopImmediatePropagation();$error .html('Merci de choisir au moins une session.') .show();return false}let empty=false;$sessionArea .find('.drift-session-select') .each(function(){if(!$(this).val()){empty=true}});if(empty){e.preventDefault();e.stopImmediatePropagation();$error .html('Merci de choisir une heure pour chaque session ajoutée.') .show();return false}saveSessions()});if($date.val()){addSession()}}function scanDriftForms(){getDriftForms().each(function(){initDrift($(this))})}$(document).ready(function(){scanDriftForms();setTimeout(scanDriftForms,500);setTimeout(scanDriftForms,1500)});$(window).on('elementor/frontend/init',function(){scanDriftForms();if(window.elementorFrontend && elementorFrontend.hooks){elementorFrontend.hooks.addAction('frontend/element_ready/form.default',function(){scanDriftForms()})}})})(jQuery);</script>