{"id":7,"date":"2025-11-12T12:42:52","date_gmt":"2025-11-12T12:42:52","guid":{"rendered":"https:\/\/jugo.grabuge.dev\/?page_id=7"},"modified":"2025-11-18T09:15:20","modified_gmt":"2025-11-18T09:15:20","slug":"7-2","status":"publish","type":"page","link":"https:\/\/jugo.grabuge.dev\/","title":{"rendered":"Test inscription"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"7\" class=\"elementor elementor-7\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fc52b3d e-flex e-con-boxed e-con e-parent\" data-id=\"fc52b3d\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5b876d1 elementor-widget elementor-widget-html\" data-id=\"5b876d1\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"fr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Inscription Compl\u00e8te - Guide Collaboratif<\/title>\n    <style>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        :root {\n            --primary: #000000;\n            --gray: #767676;\n            --light: #f5f5f5;\n            --white: #ffffff;\n            --success: #22c55e;\n            --error: #ef4444;\n            --radius: 12px;\n            --shadow: 0 2px 8px rgba(0,0,0,0.08);\n            --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n        }\n\n        body {\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n            min-height: 100vh;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            padding: 20px;\n            line-height: 1.6;\n        }\n\n        .chat-container {\n            background: var(--white);\n            border-radius: 24px;\n            width: 100%;\n            max-width: 480px;\n            height: 600px;\n            box-shadow: 0 20px 60px rgba(0,0,0,0.3);\n            display: flex;\n            flex-direction: column;\n            overflow: hidden;\n            position: relative;\n        }\n\n        .chat-header {\n            background: var(--primary);\n            color: var(--white);\n            padding: 20px;\n            display: flex;\n            align-items: center;\n            gap: 12px;\n        }\n\n        .avatar {\n            width: 40px;\n            height: 40px;\n            border-radius: 50%;\n            background: var(--white);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 20px;\n        }\n\n        .header-info h1 {\n            font-size: 16px;\n            font-weight: 600;\n        }\n\n        .header-info p {\n            font-size: 12px;\n            opacity: 0.8;\n        }\n\n        .progress-bar {\n            height: 3px;\n            background: rgba(255,255,255,0.2);\n            position: relative;\n        }\n\n        .progress-fill {\n            height: 100%;\n            background: var(--white);\n            width: 0%;\n            transition: width 0.5s ease;\n        }\n\n        .chat-area {\n            flex: 1;\n            padding: 24px;\n            overflow-y: auto;\n            display: flex;\n            flex-direction: column;\n            gap: 16px;\n        }\n\n        .message {\n            animation: slideIn 0.4s ease;\n            max-width: 85%;\n        }\n\n        @keyframes slideIn {\n            from {\n                opacity: 0;\n                transform: translateY(10px);\n            }\n            to {\n                opacity: 1;\n                transform: translateY(0);\n            }\n        }\n\n        .bot-message {\n            align-self: flex-start;\n        }\n\n        .user-message {\n            align-self: flex-end;\n        }\n\n        .message-bubble {\n            padding: 12px 16px;\n            border-radius: 18px;\n            font-size: 15px;\n        }\n\n        .bot-message .message-bubble {\n            background: var(--light);\n            color: var(--primary);\n            border-bottom-left-radius: 4px;\n        }\n\n        .user-message .message-bubble {\n            background: var(--primary);\n            color: var(--white);\n            border-bottom-right-radius: 4px;\n        }\n\n        .typing-indicator {\n            display: flex;\n            gap: 4px;\n            padding: 12px 16px;\n            background: var(--light);\n            border-radius: 18px;\n            border-bottom-left-radius: 4px;\n            width: fit-content;\n        }\n\n        .typing-dot {\n            width: 8px;\n            height: 8px;\n            border-radius: 50%;\n            background: var(--gray);\n            animation: typing 1.4s infinite;\n        }\n\n        .typing-dot:nth-child(2) {\n            animation-delay: 0.2s;\n        }\n\n        .typing-dot:nth-child(3) {\n            animation-delay: 0.4s;\n        }\n\n        @keyframes typing {\n            0%, 60%, 100% {\n                transform: translateY(0);\n                opacity: 0.5;\n            }\n            30% {\n                transform: translateY(-10px);\n                opacity: 1;\n            }\n        }\n\n        .input-area {\n            padding: 20px;\n            background: var(--white);\n            border-top: 1px solid var(--light);\n        }\n\n        .input-wrapper {\n            display: flex;\n            flex-direction: column;\n            gap: 12px;\n        }\n\n        .text-input, .textarea-input {\n            width: 100%;\n            padding: 14px 16px;\n            border: 2px solid var(--light);\n            border-radius: var(--radius);\n            font-size: 15px;\n            transition: var(--transition);\n            font-family: inherit;\n        }\n\n        .textarea-input {\n            min-height: 80px;\n            resize: vertical;\n        }\n\n        .text-input:focus, .textarea-input:focus {\n            outline: none;\n            border-color: var(--primary);\n        }\n\n        .options-grid {\n            display: grid;\n            gap: 8px;\n            grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));\n        }\n\n        .options-grid.numbers {\n            grid-template-columns: repeat(5, 1fr);\n        }\n\n        .option-btn {\n            padding: 12px 16px;\n            border: 2px solid var(--light);\n            border-radius: var(--radius);\n            background: var(--white);\n            font-size: 14px;\n            font-weight: 500;\n            cursor: pointer;\n            transition: var(--transition);\n            text-align: center;\n        }\n\n        .option-btn:hover {\n            border-color: var(--primary);\n            background: var(--light);\n        }\n\n        .option-btn.selected {\n            background: var(--primary);\n            color: var(--white);\n            border-color: var(--primary);\n        }\n\n        .submit-btn {\n            padding: 14px 24px;\n            background: var(--primary);\n            color: var(--white);\n            border: none;\n            border-radius: var(--radius);\n            font-size: 15px;\n            font-weight: 600;\n            cursor: pointer;\n            transition: var(--transition);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            gap: 8px;\n            width: 100%;\n        }\n\n        .submit-btn:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 4px 12px rgba(0,0,0,0.2);\n        }\n\n        .submit-btn:disabled {\n            opacity: 0.5;\n            cursor: not-allowed;\n            transform: none;\n        }\n\n        .skip-btn {\n            background: transparent;\n            border: none;\n            color: var(--gray);\n            font-size: 14px;\n            cursor: pointer;\n            padding: 8px;\n            transition: var(--transition);\n        }\n\n        .skip-btn:hover {\n            color: var(--primary);\n        }\n\n        .error-message {\n            color: var(--error);\n            font-size: 13px;\n            margin-top: 4px;\n        }\n\n        .success-container {\n            text-align: center;\n            padding: 40px;\n        }\n\n        .success-icon {\n            width: 80px;\n            height: 80px;\n            background: var(--success);\n            color: var(--white);\n            border-radius: 50%;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 40px;\n            margin: 0 auto 24px;\n        }\n\n        .time-selector {\n            display: flex;\n            gap: 8px;\n            align-items: center;\n        }\n\n        .time-input {\n            width: 60px;\n            text-align: center;\n        }\n\n        .section-title {\n            font-size: 12px;\n            text-transform: uppercase;\n            color: var(--gray);\n            margin-bottom: 8px;\n            font-weight: 600;\n        }\n\n        @media (max-width: 480px) {\n            .chat-container {\n                height: 100vh;\n                max-width: 100%;\n                border-radius: 0;\n            }\n        }\n\n        .hidden {\n            display: none !important;\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"chat-container\">\n        <div class=\"chat-header\">\n            <div class=\"avatar\">\ud83c\udfe0<\/div>\n            <div class=\"header-info\">\n                <h1>Assistant Guide Collaboratif<\/h1>\n                <p id=\"status\">Configuration d\u00e9taill\u00e9e<\/p>\n            <\/div>\n        <\/div>\n        \n        <div class=\"progress-bar\">\n            <div class=\"progress-fill\" id=\"progress\"><\/div>\n        <\/div>\n\n        <div class=\"chat-area\" id=\"chatArea\"><\/div>\n\n        <div class=\"input-area\" id=\"inputArea\"><\/div>\n    <\/div>\n\n    <script>\n        \/\/ Questions flow enrichi - Version compl\u00e8te\n        const questions = [\n            \/\/ PHASE 1 : IDENTIFICATION (7 questions)\n            {\n                id: 'welcome',\n                bot: \"Bonjour ! \ud83d\udc4b Bienvenue sur Guide Collaboratif. Je vais vous aider \u00e0 cr\u00e9er votre espace personnalis\u00e9 pour vos locataires. Cela prendra environ 10 minutes.\",\n                type: 'continue',\n                buttonText: \"Commencer l'inscription\",\n                category: 'intro'\n            },\n            {\n                id: 'userType',\n                bot: \"Parfait ! Pour personnaliser votre exp\u00e9rience, dites-moi qui vous \u00eates :\",\n                type: 'options',\n                options: ['Propri\u00e9taire particulier', 'Conciergerie', 'Agence immobili\u00e8re', 'Gestionnaire de biens'],\n                required: true,\n                category: 'identification'\n            },\n            {\n                id: 'firstName',\n                bot: \"Enchant\u00e9 ! Quel est votre pr\u00e9nom ?\",\n                type: 'text',\n                placeholder: 'Ex: Marie',\n                validation: 'name',\n                required: true,\n                category: 'identification'\n            },\n            {\n                id: 'lastName',\n                bot: \"Merci {firstName} ! Et votre nom de famille ?\",\n                type: 'text',\n                placeholder: 'Ex: Dupont',\n                validation: 'name',\n                required: true,\n                category: 'identification'\n            },\n            {\n                id: 'email',\n                bot: \"Super ! Quelle adresse email utilisez-vous pour votre activit\u00e9 ?\",\n                type: 'text',\n                placeholder: 'Ex: marie.dupont@gmail.com',\n                validation: 'email',\n                required: true,\n                category: 'identification'\n            },\n            {\n                id: 'phone',\n                bot: \"Un num\u00e9ro de t\u00e9l\u00e9phone pour vous joindre ?\",\n                type: 'text',\n                placeholder: 'Ex: 06 12 34 56 78',\n                validation: 'phone',\n                required: true,\n                category: 'identification'\n            },\n            {\n                id: 'companyName',\n                bot: \"Quel est le nom de votre {userType} ?\",\n                type: 'text',\n                placeholder: 'Ex: Bretagne Conciergerie',\n                required: true,\n                showIf: ['Conciergerie', 'Agence immobili\u00e8re', 'Gestionnaire de biens'],\n                category: 'identification'\n            },\n            \n            \/\/ PHASE 2 : PORTEFEUILLE (5 questions)\n            {\n                id: 'propertyCount',\n                bot: \"Combien de biens g\u00e9rez-vous ou poss\u00e9dez-vous ?\",\n                type: 'options',\n                options: ['1 seul bien', '2 \u00e0 3 biens', '4 \u00e0 5 biens', '6 \u00e0 10 biens', '11 \u00e0 20 biens', 'Plus de 20 biens'],\n                required: true,\n                category: 'portfolio'\n            },\n            {\n                id: 'propertyTypes',\n                bot: \"Quels types de locations proposez-vous ? (plusieurs choix possibles)\",\n                type: 'multiple',\n                options: ['Appartement', 'Maison', 'Villa avec piscine', 'Chalet', 'Chambre d\\'h\u00f4tes', 'G\u00eete rural', 'Loft', 'Studio', 'Mobil-home', 'Bateau'],\n                buttonText: 'Continuer',\n                required: true,\n                category: 'portfolio'\n            },\n            {\n                id: 'locationTypes',\n                bot: \"O\u00f9 sont situ\u00e9s vos biens ? (plusieurs choix possibles)\",\n                type: 'multiple',\n                options: ['Mer', 'Montagne', 'Campagne', 'Ville', 'Lac', 'Vignoble', 'For\u00eat'],\n                buttonText: 'Continuer',\n                required: true,\n                category: 'portfolio'\n            },\n            {\n                id: 'regions',\n                bot: \"Dans quelle(s) r\u00e9gion(s) pr\u00e9cis\u00e9ment ?\",\n                type: 'text',\n                placeholder: 'Ex: Bretagne, Normandie, Alpes',\n                required: true,\n                category: 'portfolio'\n            },\n            {\n                id: 'mainCity',\n                bot: \"Votre ville principale d'activit\u00e9 ?\",\n                type: 'text',\n                placeholder: 'Ex: Saint-Malo',\n                required: true,\n                category: 'portfolio'\n            },\n            \n            \/\/ PHASE 3 : CANAUX DE DISTRIBUTION (2 questions)\n            {\n                id: 'platforms',\n                bot: \"Sur quelles plateformes \u00eates-vous pr\u00e9sent ? (plusieurs choix possibles)\",\n                type: 'multiple',\n                options: ['Airbnb', 'Booking.com', 'Abritel\/VRBO', 'G\u00eetes de France', 'Cl\u00e9vacances', 'Site personnel', 'Leboncoin', 'Facebook', 'Aucune encore'],\n                buttonText: 'Continuer',\n                required: false,\n                skip: true,\n                category: 'distribution'\n            },\n            {\n                id: 'averageRate',\n                bot: \"Quel est votre tarif moyen par nuit ?\",\n                type: 'options',\n                options: ['Moins de 50\u20ac', '50-100\u20ac', '100-150\u20ac', '150-250\u20ac', '250-500\u20ac', 'Plus de 500\u20ac'],\n                required: false,\n                skip: true,\n                category: 'distribution'\n            },\n            \n            \/\/ PHASE 4 : PREMIER BIEN - IDENTIFICATION (5 questions)\n            {\n                id: 'setupProperty',\n                bot: \"Excellent ! Maintenant, configurons ensemble votre premier bien. Les autres pourront \u00eatre ajout\u00e9s plus tard depuis votre tableau de bord.\",\n                type: 'continue',\n                buttonText: \"Configurer mon bien\",\n                category: 'property'\n            },\n            {\n                id: 'propertyName',\n                bot: \"Comment s'appelle ce bien ? (ce nom appara\u00eetra sur votre guide)\",\n                type: 'text',\n                placeholder: 'Ex: Villa Les Mouettes, G\u00eete de la For\u00eat',\n                required: true,\n                category: 'property'\n            },\n            {\n                id: 'propertyAddress',\n                bot: \"Quelle est l'adresse compl\u00e8te de {propertyName} ?\",\n                type: 'text',\n                placeholder: 'Ex: 12 rue de la Plage, 35400 Saint-Malo',\n                required: true,\n                category: 'property'\n            },\n            {\n                id: 'propertyType',\n                bot: \"Quel type de bien est {propertyName} ?\",\n                type: 'options',\n                options: ['Appartement', 'Maison', 'Villa', 'Chalet', 'Studio', 'Loft', 'G\u00eete', 'Chambre d\\'h\u00f4tes'],\n                required: true,\n                category: 'property'\n            },\n            {\n                id: 'propertySize',\n                bot: \"Quelle est la surface de {propertyName} ?\",\n                type: 'options',\n                options: ['Moins de 30m\u00b2', '30-50m\u00b2', '50-80m\u00b2', '80-120m\u00b2', '120-200m\u00b2', 'Plus de 200m\u00b2'],\n                required: true,\n                category: 'property'\n            },\n            \n            \/\/ PHASE 5 : CAPACIT\u00c9 ET CHAMBRES (6 questions)\n            {\n                id: 'maxGuests',\n                bot: \"Combien de personnes peuvent s\u00e9journer dans {propertyName} (maximum) ?\",\n                type: 'options',\n                options: ['2 personnes', '3 personnes', '4 personnes', '5 personnes', '6 personnes', '7 personnes', '8 personnes', '9 personnes', '10 personnes', 'Plus de 10'],\n                required: true,\n                category: 'capacity'\n            },\n            {\n                id: 'bedrooms',\n                bot: \"Combien de chambres compte {propertyName} ?\",\n                type: 'options',\n                options: ['Studio', '1 chambre', '2 chambres', '3 chambres', '4 chambres', '5 chambres', 'Plus de 5'],\n                required: true,\n                category: 'capacity'\n            },\n            {\n                id: 'bathrooms',\n                bot: \"Combien de salles de bain\/douche ?\",\n                type: 'options',\n                options: ['1 salle de bain', '2 salles de bain', '3 salles de bain', 'Plus de 3'],\n                required: true,\n                category: 'capacity'\n            },\n            {\n                id: 'toilets',\n                bot: \"Et combien de WC au total ?\",\n                type: 'options',\n                options: ['1 WC', '2 WC', '3 WC', 'Plus de 3'],\n                required: true,\n                category: 'capacity'\n            },\n            {\n                id: 'bedTypes',\n                bot: \"Quels types de couchages proposez-vous ? (plusieurs choix possibles)\",\n                type: 'multiple',\n                options: ['Lit double', 'Lit Queen Size', 'Lit King Size', 'Lits simples', 'Lits superpos\u00e9s', 'Canap\u00e9-lit', 'Lit b\u00e9b\u00e9', 'Futon'],\n                buttonText: 'Continuer',\n                required: true,\n                category: 'capacity'\n            },\n            {\n                id: 'kidsFriendly',\n                bot: \"Votre location est-elle adapt\u00e9e aux enfants ?\",\n                type: 'options',\n                options: ['Oui, tr\u00e8s adapt\u00e9e', 'Oui, avec pr\u00e9cautions', 'Non, d\u00e9conseill\u00e9e', 'Non, interdite'],\n                required: true,\n                category: 'capacity'\n            },\n            \n            \/\/ PHASE 6 : HORAIRES ET ACC\u00c8S (7 questions)\n            {\n                id: 'checkInTime',\n                bot: \"\u00c0 partir de quelle heure les locataires peuvent-ils arriver ?\",\n                type: 'options',\n                options: ['14h00', '15h00', '16h00', '17h00', '18h00', 'Flexible', 'Autre horaire'],\n                required: true,\n                category: 'access'\n            },\n            {\n                id: 'checkOutTime',\n                bot: \"Et l'heure de d\u00e9part maximum ?\",\n                type: 'options',\n                options: ['9h00', '10h00', '11h00', '12h00', 'Flexible', 'Autre horaire'],\n                required: true,\n                category: 'access'\n            },\n            {\n                id: 'accessType',\n                bot: \"Comment les locataires r\u00e9cup\u00e8rent-ils les cl\u00e9s ?\",\n                type: 'options',\n                options: ['Bo\u00eete \u00e0 cl\u00e9s', 'Remise en main propre', 'Serrure connect\u00e9e', 'Code d\\'acc\u00e8s', 'Conciergerie', 'Voisin\/Gardien'],\n                required: true,\n                category: 'access'\n            },\n            {\n                id: 'accessCode',\n                bot: \"Quel est le code d'acc\u00e8s ou l'emplacement de la bo\u00eete \u00e0 cl\u00e9s ? (Cette info restera confidentielle)\",\n                type: 'text',\n                placeholder: 'Ex: Bo\u00eete \u00e0 cl\u00e9s derri\u00e8re le volet gauche, code 1234',\n                required: false,\n                skip: true,\n                showIf: ['Bo\u00eete \u00e0 cl\u00e9s', 'Code d\\'acc\u00e8s'],\n                category: 'access'\n            },\n            {\n                id: 'parking',\n                bot: \"Y a-t-il un parking disponible ?\",\n                type: 'options',\n                options: ['Parking priv\u00e9 gratuit', 'Parking priv\u00e9 payant', 'Parking public gratuit', 'Parking public payant', 'Pas de parking', 'Garage priv\u00e9'],\n                required: true,\n                category: 'access'\n            },\n            {\n                id: 'parkingSpots',\n                bot: \"Combien de places de parking ?\",\n                type: 'options',\n                options: ['1 place', '2 places', '3 places', 'Plus de 3 places'],\n                required: true,\n                showIf: ['Parking priv\u00e9 gratuit', 'Parking priv\u00e9 payant', 'Garage priv\u00e9'],\n                category: 'access'\n            },\n            {\n                id: 'transportAccess',\n                bot: \"Comment vos locataires arrivent-ils g\u00e9n\u00e9ralement ?\",\n                type: 'multiple',\n                options: ['Voiture', 'Train', 'Avion', 'Bus', 'V\u00e9lo', '\u00c0 pied', 'Bateau'],\n                buttonText: 'Continuer',\n                required: false,\n                skip: true,\n                category: 'access'\n            },\n            \n            \/\/ PHASE 7 : \u00c9QUIPEMENTS ESSENTIELS (8 questions)\n            {\n                id: 'wifi',\n                bot: \"Y a-t-il le WiFi dans {propertyName} ?\",\n                type: 'options',\n                options: ['Oui, fibre optique', 'Oui, ADSL', 'Oui, 4G\/5G', 'Non, pas de WiFi'],\n                required: true,\n                category: 'amenities'\n            },\n            {\n                id: 'wifiPassword',\n                bot: \"Quel est le mot de passe WiFi ?\",\n                type: 'text',\n                placeholder: 'Ex: VillaMouettes2024',\n                required: true,\n                showIf: ['Oui, fibre optique', 'Oui, ADSL', 'Oui, 4G\/5G'],\n                category: 'amenities'\n            },\n            {\n                id: 'heating',\n                bot: \"Quel type de chauffage avez-vous ?\",\n                type: 'options',\n                options: ['Central gaz', 'Central fioul', '\u00c9lectrique', 'Pompe \u00e0 chaleur', 'Po\u00eale \u00e0 bois', 'Chemin\u00e9e', 'Climatisation r\u00e9versible', 'Pas de chauffage'],\n                required: true,\n                category: 'amenities'\n            },\n            {\n                id: 'airConditioning',\n                bot: \"Y a-t-il la climatisation ?\",\n                type: 'options',\n                options: ['Oui, dans toutes les pi\u00e8ces', 'Oui, dans les chambres', 'Oui, dans le salon', 'Non'],\n                required: true,\n                category: 'amenities'\n            },\n            {\n                id: 'kitchen',\n                bot: \"Comment est \u00e9quip\u00e9e la cuisine ?\",\n                type: 'options',\n                options: ['Cuisine \u00e9quip\u00e9e compl\u00e8te', 'Cuisine \u00e9quip\u00e9e basique', 'Kitchenette', 'Cuisine partag\u00e9e', 'Pas de cuisine'],\n                required: true,\n                category: 'amenities'\n            },\n            {\n                id: 'kitchenAppliances',\n                bot: \"Quels \u00e9quipements de cuisine sont disponibles ? (plusieurs choix)\",\n                type: 'multiple',\n                options: ['Four', 'Micro-ondes', 'Lave-vaisselle', 'R\u00e9frig\u00e9rateur', 'Cong\u00e9lateur', 'Plaque de cuisson', 'Cafeti\u00e8re', 'Nespresso', 'Grille-pain', 'Bouilloire', 'Mixeur', 'Robot'],\n                buttonText: 'Continuer',\n                required: true,\n                showIf: ['Cuisine \u00e9quip\u00e9e compl\u00e8te', 'Cuisine \u00e9quip\u00e9e basique', 'Kitchenette'],\n                category: 'amenities'\n            },\n            {\n                id: 'laundry',\n                bot: \"Y a-t-il un lave-linge \u00e0 disposition ?\",\n                type: 'options',\n                options: ['Oui, priv\u00e9', 'Oui, partag\u00e9', 'Non', 'Laverie \u00e0 proximit\u00e9'],\n                required: true,\n                category: 'amenities'\n            },\n            {\n                id: 'dryer',\n                bot: \"Et un s\u00e8che-linge ?\",\n                type: 'options',\n                options: ['Oui', 'Non', '\u00c9tendoir uniquement'],\n                required: false,\n                skip: true,\n                category: 'amenities'\n            },\n            \n            \/\/ PHASE 8 : \u00c9QUIPEMENTS DE LOISIRS (6 questions)\n            {\n                id: 'tv',\n                bot: \"Quels \u00e9quipements multim\u00e9dia proposez-vous ?\",\n                type: 'multiple',\n                options: ['TV \u00e9cran plat', 'Smart TV', 'Netflix', 'Prime Video', 'Disney+', 'Canal+', 'Cha\u00eene Hi-Fi', 'Enceinte Bluetooth', 'Console de jeux'],\n                buttonText: 'Continuer',\n                required: false,\n                skip: true,\n                category: 'entertainment'\n            },\n            {\n                id: 'outdoorSpace',\n                bot: \"Quels espaces ext\u00e9rieurs sont disponibles ?\",\n                type: 'multiple',\n                options: ['Jardin priv\u00e9', 'Terrasse', 'Balcon', 'Piscine priv\u00e9e', 'Piscine partag\u00e9e', 'Jacuzzi', 'Barbecue', 'Salon de jardin', 'Transat', 'Pas d\\'ext\u00e9rieur'],\n                buttonText: 'Continuer',\n                required: true,\n                category: 'entertainment'\n            },\n            {\n                id: 'poolSize',\n                bot: \"Quelles sont les dimensions de la piscine ?\",\n                type: 'text',\n                placeholder: 'Ex: 8x4m, profondeur 1.2-1.8m',\n                required: false,\n                skip: true,\n                showIf: ['Piscine priv\u00e9e', 'Piscine partag\u00e9e'],\n                category: 'entertainment'\n            },\n            {\n                id: 'poolSeason',\n                bot: \"Quand la piscine est-elle accessible ?\",\n                type: 'options',\n                options: ['Toute l\\'ann\u00e9e (chauff\u00e9e)', 'Mai \u00e0 septembre', 'Juin \u00e0 ao\u00fbt', 'Selon m\u00e9t\u00e9o'],\n                required: false,\n                skip: true,\n                showIf: ['Piscine priv\u00e9e', 'Piscine partag\u00e9e'],\n                category: 'entertainment'\n            },\n            {\n                id: 'activities',\n                bot: \"Quelles activit\u00e9s proposez-vous sur place ?\",\n                type: 'multiple',\n                options: ['Ping-pong', 'Baby-foot', 'Billard', 'P\u00e9tanque', 'V\u00e9los', 'Kayak', 'Paddle', 'Jeux de soci\u00e9t\u00e9', 'Livres', 'Jeux enfants', 'Aucune'],\n                buttonText: 'Continuer',\n                required: false,\n                skip: true,\n                category: 'entertainment'\n            },\n            {\n                id: 'view',\n                bot: \"Quelle vue offre votre location ?\",\n                type: 'options',\n                options: ['Vue mer', 'Vue montagne', 'Vue campagne', 'Vue ville', 'Vue jardin', 'Vue piscine', 'Pas de vue particuli\u00e8re'],\n                required: false,\n                skip: true,\n                category: 'entertainment'\n            },\n            \n            \/\/ PHASE 9 : R\u00c8GLES ET RESTRICTIONS (7 questions)\n            {\n                id: 'petsAllowed',\n                bot: \"Acceptez-vous les animaux ?\",\n                type: 'options',\n                options: ['Oui, tous animaux', 'Petits animaux uniquement', 'Chiens uniquement', 'Chats uniquement', 'Non, aucun animal', 'Sur demande'],\n                required: true,\n                category: 'rules'\n            },\n            {\n                id: 'smokingAllowed',\n                bot: \"Peut-on fumer dans la location ?\",\n                type: 'options',\n                options: ['Interdit partout', 'Autoris\u00e9 \u00e0 l\\'ext\u00e9rieur', 'Autoris\u00e9 partout', 'E-cigarette uniquement'],\n                required: true,\n                category: 'rules'\n            },\n            {\n                id: 'eventsAllowed',\n                bot: \"Autorisez-vous les f\u00eates ou \u00e9v\u00e9nements ?\",\n                type: 'options',\n                options: ['Non, strictement interdit', 'Petits \u00e9v\u00e9nements familiaux', 'Sur demande', 'Oui, sans restriction'],\n                required: true,\n                category: 'rules'\n            },\n            {\n                id: 'quietHours',\n                bot: \"Y a-t-il des heures de silence \u00e0 respecter ?\",\n                type: 'options',\n                options: ['22h - 8h', '23h - 7h', 'Minuit - 9h', 'Pas d\\'horaires', 'Selon r\u00e8glement copropri\u00e9t\u00e9'],\n                required: false,\n                skip: true,\n                category: 'rules'\n            },\n            {\n                id: 'minimumStay',\n                bot: \"Quelle est la dur\u00e9e minimum de s\u00e9jour ?\",\n                type: 'options',\n                options: ['1 nuit', '2 nuits', '3 nuits', '1 semaine', '1 mois', 'Variable selon saison'],\n                required: true,\n                category: 'rules'\n            },\n            {\n                id: 'deposit',\n                bot: \"Quel est le montant de la caution ?\",\n                type: 'options',\n                options: ['Pas de caution', '200\u20ac', '300\u20ac', '500\u20ac', '800\u20ac', '1000\u20ac', 'Plus de 1000\u20ac'],\n                required: true,\n                category: 'rules'\n            },\n            {\n                id: 'cleaning',\n                bot: \"Comment sont g\u00e9r\u00e9s les frais de m\u00e9nage ?\",\n                type: 'options',\n                options: ['Inclus dans le prix', 'Forfait obligatoire', 'Forfait optionnel', '\u00c0 faire soi-m\u00eame'],\n                required: true,\n                category: 'rules'\n            },\n            \n            \/\/ PHASE 10 : INFORMATIONS PRATIQUES (8 questions)\n            {\n                id: 'emergencyPhone',\n                bot: \"Quel num\u00e9ro d'urgence les locataires peuvent-ils appeler 24h\/24 ?\",\n                type: 'text',\n                placeholder: 'Ex: 06 12 34 56 78',\n                validation: 'phone',\n                required: true,\n                category: 'practical'\n            },\n            {\n                id: 'trashDay',\n                bot: \"Quels jours faut-il sortir les poubelles ?\",\n                type: 'multiple',\n                options: ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche'],\n                buttonText: 'Continuer',\n                required: true,\n                category: 'practical'\n            },\n            {\n                id: 'trashSorting',\n                bot: \"Comment fonctionne le tri s\u00e9lectif chez vous ?\",\n                type: 'text',\n                placeholder: 'Ex: Jaune = recyclage, Vert = verre, Noir = ordures',\n                required: false,\n                skip: true,\n                category: 'practical'\n            },\n            {\n                id: 'nearestShops',\n                bot: \"\u00c0 quelle distance se trouvent les commerces les plus proches ?\",\n                type: 'options',\n                options: ['Moins de 500m', '500m - 1km', '1-2km', '2-5km', 'Plus de 5km'],\n                required: true,\n                category: 'practical'\n            },\n            {\n                id: 'nearestBeach',\n                bot: \"Distance de la plage\/lac\/montagne la plus proche ?\",\n                type: 'options',\n                options: ['Sur place', 'Moins de 500m', '500m - 1km', '1-5km', '5-10km', 'Plus de 10km', 'Non applicable'],\n                required: false,\n                skip: true,\n                category: 'practical'\n            },\n            {\n                id: 'publicTransport',\n                bot: \"Y a-t-il des transports en commun \u00e0 proximit\u00e9 ?\",\n                type: 'options',\n                options: ['Arr\u00eat \u00e0 moins de 200m', 'Arr\u00eat \u00e0 200-500m', 'Arr\u00eat \u00e0 plus de 500m', 'Pas de transports'],\n                required: false,\n                skip: true,\n                category: 'practical'\n            },\n            {\n                id: 'doctorInfo',\n                bot: \"Avez-vous les coordonn\u00e9es d'un m\u00e9decin de garde \u00e0 communiquer ?\",\n                type: 'text',\n                placeholder: 'Ex: Dr Martin - 02 99 12 34 56',\n                required: false,\n                skip: true,\n                category: 'practical'\n            },\n            {\n                id: 'specialInstructions',\n                bot: \"Y a-t-il des instructions particuli\u00e8res pour le logement ? (chaudi\u00e8re, alarme, etc.)\",\n                type: 'textarea',\n                placeholder: 'Ex: Pour rallumer la chaudi\u00e8re, appuyer 3 fois sur le bouton rouge...',\n                required: false,\n                skip: true,\n                category: 'practical'\n            },\n            \n            \/\/ PHASE 11 : RECOMMANDATIONS LOCALES (5 questions)\n            {\n                id: 'localRecommendations',\n                bot: \"Avez-vous d\u00e9j\u00e0 des bonnes adresses \u00e0 partager avec vos locataires ?\",\n                type: 'options',\n                options: ['Oui, j\\'ai ma liste', 'J\\'en ai quelques-unes', 'Non, pas encore', 'Je pr\u00e9f\u00e8re que les locataires d\u00e9couvrent'],\n                required: false,\n                skip: true,\n                category: 'recommendations'\n            },\n            {\n                id: 'favoriteRestaurant',\n                bot: \"Votre restaurant pr\u00e9f\u00e9r\u00e9 dans le coin ?\",\n                type: 'text',\n                placeholder: 'Ex: La Table du P\u00eacheur - fruits de mer',\n                required: false,\n                skip: true,\n                showIf: ['Oui, j\\'ai ma liste', 'J\\'en ai quelques-unes'],\n                category: 'recommendations'\n            },\n            {\n                id: 'mustSeePlace',\n                bot: \"Un lieu incontournable \u00e0 visiter ?\",\n                type: 'text',\n                placeholder: 'Ex: Le sentier des douaniers au coucher du soleil',\n                required: false,\n                skip: true,\n                showIf: ['Oui, j\\'ai ma liste', 'J\\'en ai quelques-unes'],\n                category: 'recommendations'\n            },\n            {\n                id: 'hiddenGem',\n                bot: \"Un endroit secret que seuls les locaux connaissent ?\",\n                type: 'text',\n                placeholder: 'Ex: La crique cach\u00e9e derri\u00e8re le phare',\n                required: false,\n                skip: true,\n                showIf: ['Oui, j\\'ai ma liste', 'J\\'en ai quelques-unes'],\n                category: 'recommendations'\n            },\n            {\n                id: 'localMarket',\n                bot: \"Jours et horaires du march\u00e9 local ?\",\n                type: 'text',\n                placeholder: 'Ex: Mercredi et samedi matin, place de l\\'\u00e9glise',\n                required: false,\n                skip: true,\n                category: 'recommendations'\n            },\n            \n            \/\/ PHASE 12 : PERSONNALISATION (4 questions)\n            {\n                id: 'welcomeMessage',\n                bot: \"Quel message de bienvenue souhaitez-vous afficher sur votre guide ?\",\n                type: 'textarea',\n                placeholder: 'Ex: Bienvenue \u00e0 la Villa Les Mouettes ! Nous sommes ravis de vous accueillir...',\n                required: false,\n                skip: true,\n                category: 'personalization'\n            },\n            {\n                id: 'hostAvailability',\n                bot: \"Quand \u00eates-vous disponible pour vos locataires ?\",\n                type: 'options',\n                options: ['24h\/24 7j\/7', 'En journ\u00e9e uniquement', 'Semaine uniquement', 'Sur rendez-vous', 'Urgences uniquement'],\n                required: true,\n                category: 'personalization'\n            },\n            {\n                id: 'customUrl',\n                bot: \"Derni\u00e8re \u00e9tape ! Choisissez l'adresse web de votre guide :\",\n                type: 'text',\n                placeholder: 'villa-les-mouettes',\n                prefix: 'https:\/\/',\n                suffix: '.guide',\n                validation: 'url',\n                required: true,\n                category: 'personalization'\n            },\n            {\n                id: 'language',\n                bot: \"Dans quelles langues souhaitez-vous proposer votre guide ?\",\n                type: 'multiple',\n                options: ['Fran\u00e7ais', 'Anglais', 'Espagnol', 'Allemand', 'Italien', 'N\u00e9erlandais'],\n                buttonText: 'Continuer',\n                required: true,\n                category: 'personalization'\n            },\n            \n            \/\/ PHASE 13 : FINALISATION (3 questions)\n            {\n                id: 'newsletter',\n                bot: \"Souhaitez-vous recevoir nos conseils pour optimiser vos locations (1 email\/mois max) ?\",\n                type: 'options',\n                options: ['Oui, avec plaisir', 'Non merci'],\n                required: false,\n                skip: true,\n                category: 'finalization'\n            },\n            {\n                id: 'referral',\n                bot: \"Comment avez-vous entendu parler de nous ?\",\n                type: 'options',\n                options: ['Bouche \u00e0 oreille', 'Google', 'R\u00e9seaux sociaux', 'Conciergerie', 'Autre'],\n                required: false,\n                skip: true,\n                category: 'finalization'\n            },\n            {\n                id: 'terms',\n                bot: \"Pour finaliser, acceptez-vous nos conditions d'utilisation et notre politique de confidentialit\u00e9 ?\",\n                type: 'options',\n                options: ['J\\'accepte les CGU et la politique de confidentialit\u00e9', 'Je veux les lire d\\'abord'],\n                required: true,\n                category: 'finalization'\n            }\n        ];\n\n        \/\/ Am\u00e9lioration du syst\u00e8me de cat\u00e9gories\n        const categories = {\n            intro: { name: 'Introduction', icon: '\ud83d\udc4b', count: 1 },\n            identification: { name: 'Identification', icon: '\ud83d\udc64', count: 6 },\n            portfolio: { name: 'Portefeuille', icon: '\ud83c\udfe0', count: 5 },\n            distribution: { name: 'Distribution', icon: '\ud83d\udcf1', count: 2 },\n            property: { name: 'Votre bien', icon: '\ud83c\udfe1', count: 5 },\n            capacity: { name: 'Capacit\u00e9', icon: '\ud83d\udc65', count: 6 },\n            access: { name: 'Acc\u00e8s', icon: '\ud83d\udd11', count: 7 },\n            amenities: { name: '\u00c9quipements', icon: '\ud83d\udec1', count: 8 },\n            entertainment: { name: 'Loisirs', icon: '\ud83c\udfca', count: 6 },\n            rules: { name: 'R\u00e8glement', icon: '\ud83d\udccb', count: 7 },\n            practical: { name: 'Pratique', icon: '\ud83d\udccd', count: 8 },\n            recommendations: { name: 'Recommandations', icon: '\u2b50', count: 5 },\n            personalization: { name: 'Personnalisation', icon: '\ud83c\udfa8', count: 4 },\n            finalization: { name: 'Finalisation', icon: '\u2705', count: 3 }\n        };\n\n        let currentStep = 0;\n        let answers = {};\n        let currentCategory = '';\n\n        function init() {\n            showQuestion(0);\n        }\n\n        function showTyping(callback, duration = 800) {\n            const typingHtml = `\n                <div class=\"message bot-message typing-message\">\n                    <div class=\"typing-indicator\">\n                        <div class=\"typing-dot\"><\/div>\n                        <div class=\"typing-dot\"><\/div>\n                        <div class=\"typing-dot\"><\/div>\n                    <\/div>\n                <\/div>\n            `;\n            \n            const chatArea = document.getElementById('chatArea');\n            chatArea.insertAdjacentHTML('beforeend', typingHtml);\n            chatArea.scrollTop = chatArea.scrollHeight;\n            \n            setTimeout(() => {\n                document.querySelector('.typing-message')?.remove();\n                callback();\n            }, duration);\n        }\n\n        function updateCategoryStatus(category) {\n            if (category && category !== currentCategory) {\n                currentCategory = category;\n                const categoryInfo = categories[category];\n                if (categoryInfo) {\n                    document.getElementById('status').innerHTML = `\n                        ${categoryInfo.icon} ${categoryInfo.name}\n                    `;\n                }\n            }\n        }\n\n        function showQuestion(index) {\n            if (index >= questions.length) {\n                showSuccess();\n                return;\n            }\n\n            const question = questions[index];\n            \n            \/\/ Mise \u00e0 jour de la cat\u00e9gorie\n            updateCategoryStatus(question.category);\n            \n            \/\/ Check conditions d'affichage\n            if (question.showIf) {\n                let shouldShow = false;\n                \n                if (Array.isArray(question.showIf)) {\n                    \/\/ Pour les tableaux, v\u00e9rifier si la r\u00e9ponse correspond \u00e0 une des valeurs\n                    const relevantAnswers = Object.values(answers);\n                    shouldShow = question.showIf.some(condition => \n                        relevantAnswers.includes(condition)\n                    );\n                } else {\n                    \/\/ Pour les valeurs simples\n                    shouldShow = Object.values(answers).includes(question.showIf);\n                }\n                \n                if (!shouldShow) {\n                    currentStep++;\n                    showQuestion(currentStep);\n                    return;\n                }\n            }\n\n            \/\/ Update progress\n            const progress = ((index + 1) \/ questions.length) * 100;\n            document.getElementById('progress').style.width = progress + '%';\n\n            \/\/ Replace variables in bot message\n            let botMessage = question.bot;\n            Object.keys(answers).forEach(key => {\n                botMessage = botMessage.replace(`{${key}}`, answers[key]);\n            });\n\n            \/\/ Show bot message with typing\n            showTyping(() => {\n                addBotMessage(botMessage);\n                showInput(question);\n            });\n        }\n\n        function addBotMessage(text) {\n            const chatArea = document.getElementById('chatArea');\n            const messageHtml = `\n                <div class=\"message bot-message\">\n                    <div class=\"message-bubble\">${text}<\/div>\n                <\/div>\n            `;\n            chatArea.insertAdjacentHTML('beforeend', messageHtml);\n            chatArea.scrollTop = chatArea.scrollHeight;\n        }\n\n        function addUserMessage(text) {\n            const chatArea = document.getElementById('chatArea');\n            const messageHtml = `\n                <div class=\"message user-message\">\n                    <div class=\"message-bubble\">${text}<\/div>\n                <\/div>\n            `;\n            chatArea.insertAdjacentHTML('beforeend', messageHtml);\n            chatArea.scrollTop = chatArea.scrollHeight;\n        }\n\n        function showInput(question) {\n            const inputArea = document.getElementById('inputArea');\n            let inputHtml = '';\n\n            switch(question.type) {\n                case 'continue':\n                    inputHtml = `\n                        <div class=\"input-wrapper\">\n                            <button class=\"submit-btn\" onclick=\"handleContinue()\">\n                                ${question.buttonText} \u2192\n                            <\/button>\n                        <\/div>\n                    `;\n                    break;\n\n                case 'text':\n                    let inputField = `<input type=\"text\" class=\"text-input\" id=\"textInput\" \n                        placeholder=\"${question.placeholder || ''}\"\n                        onkeypress=\"if(event.key==='Enter') handleTextSubmit('${question.id}')\"\n                        autocomplete=\"off\">`;\n                    \n                    if (question.prefix || question.suffix) {\n                        inputField = `\n                            <div style=\"display: flex; align-items: center; gap: 8px;\">\n                                ${question.prefix ? `<span style=\"color: var(--gray);\">${question.prefix}<\/span>` : ''}\n                                <input type=\"text\" class=\"text-input\" id=\"textInput\" \n                                    placeholder=\"${question.placeholder || ''}\"\n                                    onkeypress=\"if(event.key==='Enter') handleTextSubmit('${question.id}')\"\n                                    style=\"flex: 1;\"\n                                    autocomplete=\"off\">\n                                ${question.suffix ? `<span style=\"color: var(--gray);\">${question.suffix}<\/span>` : ''}\n                            <\/div>\n                        `;\n                    }\n                    \n                    inputHtml = `\n                        <div class=\"input-wrapper\">\n                            ${inputField}\n                            <div class=\"error-message hidden\" id=\"errorMessage\"><\/div>\n                            <button class=\"submit-btn\" onclick=\"handleTextSubmit('${question.id}')\">\n                                Continuer \u2192\n                            <\/button>\n                            ${question.skip ? `<button class=\"skip-btn\" onclick=\"handleSkip()\">Passer cette \u00e9tape<\/button>` : ''}\n                        <\/div>\n                    `;\n                    break;\n\n                case 'textarea':\n                    inputHtml = `\n                        <div class=\"input-wrapper\">\n                            <textarea class=\"textarea-input\" id=\"textInput\" \n                                placeholder=\"${question.placeholder || ''}\"\n                                autocomplete=\"off\"><\/textarea>\n                            <button class=\"submit-btn\" onclick=\"handleTextSubmit('${question.id}')\">\n                                Continuer \u2192\n                            <\/button>\n                            ${question.skip ? `<button class=\"skip-btn\" onclick=\"handleSkip()\">Passer cette \u00e9tape<\/button>` : ''}\n                        <\/div>\n                    `;\n                    break;\n\n                case 'options':\n                    const gridClass = question.options.length > 6 ? '' : 'options-grid';\n                    inputHtml = `\n                        <div class=\"input-wrapper\">\n                            <div class=\"${gridClass}\">\n                                ${question.options.map(option => `\n                                    <button class=\"option-btn\" onclick=\"handleOption('${question.id}', '${option}')\">\n                                        ${option}\n                                    <\/button>\n                                `).join('')}\n                            <\/div>\n                            ${question.skip ? `<button class=\"skip-btn\" onclick=\"handleSkip()\">Passer cette \u00e9tape<\/button>` : ''}\n                        <\/div>\n                    `;\n                    break;\n\n                case 'multiple':\n                    inputHtml = `\n                        <div class=\"input-wrapper\">\n                            <div class=\"section-title\">Cliquez pour s\u00e9lectionner (plusieurs choix possibles)<\/div>\n                            <div class=\"options-grid\" id=\"multipleOptions\">\n                                ${question.options.map(option => `\n                                    <button class=\"option-btn\" onclick=\"toggleOption('${option}')\" data-option=\"${option}\">\n                                        ${option}\n                                    <\/button>\n                                `).join('')}\n                            <\/div>\n                            <button class=\"submit-btn\" onclick=\"handleMultipleSubmit('${question.id}')\" disabled id=\"multipleSubmit\">\n                                ${question.buttonText || 'Continuer'} \u2192\n                            <\/button>\n                            ${question.skip ? `<button class=\"skip-btn\" onclick=\"handleSkip()\">Passer cette \u00e9tape<\/button>` : ''}\n                        <\/div>\n                    `;\n                    break;\n            }\n\n            inputArea.innerHTML = inputHtml;\n            \n            setTimeout(() => {\n                const input = document.getElementById('textInput');\n                if (input) input.focus();\n            }, 100);\n        }\n\n        function handleContinue() {\n            currentStep++;\n            showQuestion(currentStep);\n        }\n\n        function handleOption(questionId, value) {\n            answers[questionId] = value;\n            addUserMessage(value);\n            currentStep++;\n            showQuestion(currentStep);\n        }\n\n        function handleTextSubmit(questionId) {\n            const input = document.getElementById('textInput');\n            const value = input.value.trim();\n            const question = questions.find(q => q.id === questionId);\n            \n            if (question.required && !value) {\n                showError('Ce champ est requis');\n                return;\n            }\n\n            if (value && question.validation) {\n                if (!validateInput(value, question.validation)) {\n                    showError(getValidationMessage(question.validation));\n                    return;\n                }\n            }\n\n            let displayValue = value;\n            if (question.prefix) displayValue = question.prefix + displayValue;\n            if (question.suffix) displayValue = displayValue + question.suffix;\n            \n            answers[questionId] = value;\n            if (value) addUserMessage(displayValue);\n            currentStep++;\n            showQuestion(currentStep);\n        }\n\n        function toggleOption(option) {\n            const btn = document.querySelector(`[data-option=\"${option}\"]`);\n            btn.classList.toggle('selected');\n            \n            const selected = document.querySelectorAll('#multipleOptions .selected');\n            document.getElementById('multipleSubmit').disabled = selected.length === 0;\n        }\n\n        function handleMultipleSubmit(questionId) {\n            const selected = Array.from(document.querySelectorAll('#multipleOptions .selected'))\n                .map(btn => btn.dataset.option);\n            \n            if (selected.length > 0) {\n                answers[questionId] = selected;\n                addUserMessage(selected.join(', '));\n                currentStep++;\n                showQuestion(currentStep);\n            }\n        }\n\n        function handleSkip() {\n            addUserMessage('(pass\u00e9)');\n            currentStep++;\n            showQuestion(currentStep);\n        }\n\n        function validateInput(value, type) {\n            const validations = {\n                email: \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/,\n                phone: \/^(?:(?:\\+|00)33|0)\\s*[1-9](?:[\\s.-]*\\d{2}){4}$\/,\n                name: \/^[a-zA-Z\u00c0-\u00ff\\s-']{2,}$\/,\n                url: \/^[a-z0-9-]+$\/\n            };\n            \n            return validations[type] ? validations[type].test(value) : true;\n        }\n\n        function getValidationMessage(type) {\n            const messages = {\n                email: 'Veuillez entrer une adresse email valide',\n                phone: 'Veuillez entrer un num\u00e9ro de t\u00e9l\u00e9phone valide',\n                name: 'Veuillez entrer un nom valide',\n                url: 'Utilisez uniquement des lettres minuscules, chiffres et tirets'\n            };\n            \n            return messages[type] || 'Format invalide';\n        }\n\n        function showError(message) {\n            const errorElement = document.getElementById('errorMessage');\n            if (errorElement) {\n                errorElement.textContent = message;\n                errorElement.classList.remove('hidden');\n                setTimeout(() => {\n                    errorElement.classList.add('hidden');\n                }, 3000);\n            }\n        }\n\n        function showSuccess() {\n            const chatArea = document.getElementById('chatArea');\n            const inputArea = document.getElementById('inputArea');\n            \n            document.getElementById('progress').style.width = '100%';\n            \n            showTyping(() => {\n                addBotMessage(\"F\u00e9licitations ! \ud83c\udf89 Votre guide collaboratif est cr\u00e9\u00e9 !\");\n                \n                setTimeout(() => {\n                    chatArea.innerHTML = `\n                        <div class=\"success-container\">\n                            <div class=\"success-icon\">\u2713<\/div>\n                            <h2 style=\"margin-bottom: 16px;\">Configuration termin\u00e9e !<\/h2>\n                            <p style=\"color: var(--gray); margin-bottom: 24px;\">\n                                <strong>${answers.propertyName || 'Votre guide'}<\/strong> est maintenant en ligne !<br>\n                                URL: https:\/\/${answers.customUrl || 'votre-guide'}.guide\n                            <\/p>\n                            <div style=\"background: var(--light); padding: 16px; border-radius: var(--radius); margin-bottom: 24px; text-align: left;\">\n                                <p style=\"font-size: 14px; margin-bottom: 12px;\"><strong>R\u00e9capitulatif :<\/strong><\/p>\n                                <ul style=\"font-size: 14px; margin-left: 20px; line-height: 1.8;\">\n                                    <li>${answers.bedrooms || '2 chambres'} - ${answers.maxGuests || '4 personnes'}<\/li>\n                                    <li>Check-in: ${answers.checkInTime || '16h'} \/ Check-out: ${answers.checkOutTime || '11h'}<\/li>\n                                    <li>WiFi: ${answers.wifi || 'Disponible'}<\/li>\n                                    <li>${answers.parking || 'Parking disponible'}<\/li>\n                                    <li>${answers.petsAllowed || 'Animaux selon conditions'}<\/li>\n                                <\/ul>\n                            <\/div>\n                            <button class=\"submit-btn\" onclick=\"goToDashboard()\">\n                                Acc\u00e9der \u00e0 mon tableau de bord \u2192\n                            <\/button>\n                        <\/div>\n                    `;\n                    \n                    inputArea.innerHTML = `\n                        <div style=\"text-align: center; padding: 12px; color: var(--gray); font-size: 14px;\">\n                            <p>\ud83d\udce7 Un email de confirmation a \u00e9t\u00e9 envoy\u00e9 \u00e0 ${answers.email}<\/p>\n                        <\/div>\n                    `;\n                }, 1000);\n                \n                \/\/ Log pour int\u00e9gration backend\n                console.log('Donn\u00e9es compl\u00e8tes:', answers);\n                \n                \/\/ Envoi au serveur\n                if (window.gc_ajax) {\n                    sendDataToServer();\n                }\n            });\n        }\n\n        function sendDataToServer() {\n            const formData = new FormData();\n            Object.keys(answers).forEach(key => {\n                if (Array.isArray(answers[key])) {\n                    answers[key].forEach(value => {\n                        formData.append(key + '[]', value);\n                    });\n                } else {\n                    formData.append(key, answers[key]);\n                }\n            });\n            formData.append('action', 'gc_save_registration');\n            formData.append('nonce', window.gc_ajax.nonce);\n\n            fetch(window.gc_ajax.ajax_url, {\n                method: 'POST',\n                body: formData\n            })\n            .then(response => response.json())\n            .then(data => {\n                if (data.success) {\n                    console.log('Inscription r\u00e9ussie !', data);\n                } else {\n                    console.error('Erreur:', data);\n                }\n            });\n        }\n\n        function goToDashboard() {\n            console.log('Redirection vers le dashboard avec:', answers);\n            \/\/ window.location.href = '\/dashboard';\n        }\n\n        \/\/ D\u00e9marrage\n        init();\n    <\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Inscription Compl\u00e8te &#8211; Guide Collaboratif \ud83c\udfe0 Assistant Guide Collaboratif Configuration d\u00e9taill\u00e9e<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-7","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/jugo.grabuge.dev\/index.php?rest_route=\/wp\/v2\/pages\/7","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jugo.grabuge.dev\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/jugo.grabuge.dev\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/jugo.grabuge.dev\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jugo.grabuge.dev\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7"}],"version-history":[{"count":36,"href":"https:\/\/jugo.grabuge.dev\/index.php?rest_route=\/wp\/v2\/pages\/7\/revisions"}],"predecessor-version":[{"id":57,"href":"https:\/\/jugo.grabuge.dev\/index.php?rest_route=\/wp\/v2\/pages\/7\/revisions\/57"}],"wp:attachment":[{"href":"https:\/\/jugo.grabuge.dev\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}