{"version":3,"file":"shared-lib.BeStXZX3.mjs","names":[],"sources":["https:/framerusercontent.com/modules/nZUTrtXwljoGpUgqEFcU/U0Q4mnhdzV01ARQPZFIr/siteMetadata.js"],"sourcesContent":["// Generated by Framer (a2fc4a2)\nexport default function metadata(params,activeLocale){return{customHTMLBodyEnd:\"<!-- MagicSalon Custom Chatbot -->\\n\\n<!-- AI Assistant Label (above floating button) -->\\n<div class=\\\"ai-label\\\" id=\\\"aiLabel\\\">\\n    <div class=\\\"ai-label-content\\\">\\n        <div class=\\\"ai-label-text\\\">\\n            <div>🤖 Vorbește cu</div>\\n            <div>asistentul nostru AI</div>\\n        </div>\\n        <button class=\\\"ai-label-close\\\" id=\\\"aiLabelClose\\\">-</button>\\n    </div>\\n</div>\\n\\n<!-- Floating Button -->\\n<button class=\\\"chat-floating-button\\\" id=\\\"chatFloatingBtn\\\">\\n    <svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\">\\n        <path d=\\\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z\\\"></path>\\n        <path d=\\\"M7 9h2v2H7zm4 0h2v2h-2zm4 0h2v2h-2z\\\"></path>\\n    </svg>\\n</button>\\n\\n<!-- Chat Window -->\\n<div class=\\\"chat-window\\\" id=\\\"chatWindow\\\">\\n    <!-- Welcome Form (arată c\\xe2nd user-ul nu e identificat) -->\\n    <div class=\\\"chat-welcome-form\\\" id=\\\"welcomeForm\\\">\\n        <button class=\\\"welcome-close\\\" id=\\\"welcomeCloseBtn\\\">-</button>\\n        <div class=\\\"welcome-content\\\">\\n            <h2>Bun venit! 👋</h2>\\n            <p>Pentru a \\xeencepe conversația, te rog să completezi:</p>\\n            \\n            <form id=\\\"userInfoForm\\\">\\n                <div class=\\\"form-field\\\">\\n                    <label for=\\\"userName\\\">Nume *</label>\\n                    <input type=\\\"text\\\" id=\\\"userName\\\" placeholder=\\\"Numele tău\\\" required=\\\"\\\" autocomplete=\\\"name\\\">\\n                </div>\\n                \\n                <div class=\\\"form-field\\\">\\n                    <label for=\\\"userEmail\\\">Email *</label>\\n                    <input type=\\\"email\\\" id=\\\"userEmail\\\" placeholder=\\\"email@exemplu.ro\\\" required=\\\"\\\" autocomplete=\\\"email\\\">\\n                </div>\\n                \\n                <!-- Cloudflare Turnstile Widget -->\\n                <div class=\\\"turnstile-container\\\">\\n                    <div class=\\\"cf-turnstile\\\" data-sitekey=\\\"0x4AAAAAAB8DAugZzCDc51WW\\\" data-callback=\\\"onTurnstileSuccess\\\" data-error-callback=\\\"onTurnstileError\\\"></div>\\n                </div>\\n                <div class=\\\"form-error\\\" id=\\\"turnstileError\\\" style=\\\"display:none;\\\">Verificarea de securitate a eșuat. Serverul va valida request-ul.</div>\\n                \\n                <button type=\\\"submit\\\" class=\\\"btn-start-chat\\\">\\xcencepe Conversația</button>\\n                <p class=\\\"privacy-note\\\">🔒 Datele tale sunt securizate și nu vor fi partajate</p>\\n            </form>\\n        </div>\\n    </div>\\n\\n    <!-- Chat Interface (arată după ce user-ul s-a identificat) -->\\n    <div class=\\\"chat-interface\\\" id=\\\"chatInterface\\\" style=\\\"display: none;\\\">\\n        <!-- Header -->\\n        <div class=\\\"chat-header\\\">\\n            <div>\\n                <h3>Bun venit ! </h3>\\n                <small class=\\\"version-tag\\\">⚠️ Versiune experimentală</small>\\n            </div>\\n            <div style=\\\"display: flex; gap: 10px; align-items: center;\\\">\\n                <!-- <button class=\\\"chat-reset-btn\\\" id=\\\"chatResetBtn\\\" title=\\\"Resetează Chat\\\">💗</button> -->\\n                <button class=\\\"chat-close\\\" id=\\\"chatCloseBtn\\\">-</button>\\n            </div>\\n        </div>\\n\\n        <!-- Messages -->\\n        <div class=\\\"chat-messages\\\" id=\\\"chatMessages\\\">\\n            <div class=\\\"typing-indicator\\\" id=\\\"typingIndicator\\\">\\n                <span></span>\\n                <span></span>\\n                <span></span>\\n            </div>\\n        </div>\\n\\n        <!-- Input Area -->\\n        <div class=\\\"chat-input-area\\\">\\n            <input type=\\\"text\\\" id=\\\"chatInput\\\" placeholder=\\\"Scrie mesajul tău aici...\\\" autocomplete=\\\"off\\\">\\n            <button class=\\\"chat-send-button\\\" id=\\\"chatSendBtn\\\">➤</button>\\n        </div>\\n\\n        <!-- Footer -->\\n        <div class=\\\"chat-footer\\\">\\n            Developed by <a href=\\\"https://magic360.ro\\\" target=\\\"_blank\\\">Magic360</a> \\n        </div>\\n    </div>\\n</div>\\n\\n<script>\\n// ========================================\\n// CHATBOT LOGIC - 100% CUSTOM\\n// ========================================\\n\\n// Silence console logs (production)\\nconst SILENCE_CHAT_LOGS = true;\\nif (SILENCE_CHAT_LOGS && typeof window !== 'undefined' && window.console) {\\n    const noop = function () {};\\n    console.log = noop;\\n    console.info = noop;\\n    console.debug = noop;\\n    console.warn = noop;\\n    console.error = noop;\\n}\\n\\n// API Configuration\\nconst API_PROXY_URL = 'https://magicsalon-chatbot-900842669753.europe-west1.run.app/api/k7p5w-chat';\\n\\n// Elements\\nconst floatingBtn = document.getElementById('chatFloatingBtn');\\nconst chatWindow = document.getElementById('chatWindow');\\nconst welcomeForm = document.getElementById('welcomeForm');\\nconst chatInterface = document.getElementById('chatInterface');\\nconst aiLabel = document.getElementById('aiLabel');\\nconst aiLabelClose = document.getElementById('aiLabelClose');\\nconst userInfoForm = document.getElementById('userInfoForm');\\nconst closeBtn = document.getElementById('chatCloseBtn');\\nconst welcomeCloseBtn = document.getElementById('welcomeCloseBtn');\\nconst messagesContainer = document.getElementById('chatMessages');\\nconst input = document.getElementById('chatInput');\\nconst sendBtn = document.getElementById('chatSendBtn');\\nlet typingIndicator = document.getElementById('typingIndicator'); // LET nu CONST - pentru re-assign\\nconst userGreeting = document.getElementById('userGreeting');\\nconst turnstileError = document.getElementById('turnstileError');\\n\\n// Turnstile Token\\nlet turnstileToken = null;\\n\\n// User Data\\nlet userData = {\\n    name: localStorage.getItem('magicsalon_user_name'),\\n    email: localStorage.getItem('magicsalon_user_email')\\n};\\n\\n// Cleanup old PromoVista data (if exists)\\nlocalStorage.removeItem('promovista_user_name');\\nlocalStorage.removeItem('promovista_user_email');\\nlocalStorage.removeItem('promovista_session_id');\\n\\n// Session ID\\nlet sessionId = localStorage.getItem('magicsalon_session_id');\\nif (!sessionId) {\\n    sessionId = 'session_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);\\n    localStorage.setItem('magicsalon_session_id', sessionId);\\n}\\n\\n// Turnstile Callbacks\\nwindow.onTurnstileSuccess = function(token) {\\n    turnstileToken = token;\\n    turnstileError.classList.remove('show');\\n};\\n\\nwindow.onTurnstileError = function() {\\n    turnstileToken = null;\\n    turnstileError.textContent = 'Verificarea de securitate a eșuat. Te rugăm să re\\xeencarci pagina.';\\n    turnstileError.classList.add('show');\\n};\\n\\n// Check if user is already identified\\nfunction checkUserIdentified() {\\n    if (userData.name && userData.email) {\\n        showChatInterface();\\n        return true;\\n    }\\n    return false;\\n}\\n\\n// Show Chat Interface\\nfunction showChatInterface(isReturningUser = false) {\\n    welcomeForm.style.display = 'none';\\n    chatInterface.style.display = 'flex';\\n    \\n    // Add welcome message for returning users\\n    if (isReturningUser) {\\n        addWelcomeMessage();\\n    }\\n}\\n\\n// Add Welcome Message to Chat\\nfunction addWelcomeMessage() {\\n    // Check if welcome message already exists\\n    const existingMessages = messagesContainer.querySelectorAll('.chat-message');\\n    if (existingMessages.length > 1) {\\n        return; // Already has messages, don't add welcome\\n    }\\n    \\n    const welcomeText = `Bună din nou, ${userData.name}! 👋\\\\n\\\\nSunt asistentul AI Magic, cu ce informații \\xeeți pot fi de folos?`;\\n    addMessageWithButtons(\\n        welcomeText,\\n        'assistant',\\n        [\\n            { text: '📅 Programare', action: 'programare' }\\n        ]\\n    );\\n}\\n\\n// Reset User Data (păstrează sessionId)\\nfunction resetUserData() {\\n    // Șterge doar datele user, NU sessionId!\\n    localStorage.removeItem('magicsalon_user_name');\\n    localStorage.removeItem('magicsalon_user_email');\\n    \\n    userData.name = null;\\n    userData.email = null;\\n    turnstileToken = null;\\n}\\n\\n// Show Welcome Form (pentru re-validare)\\nfunction showWelcomeForm() {\\n    chatInterface.style.display = 'none';\\n    welcomeForm.style.display = 'flex';\\n    \\n    // Reset Turnstile widget\\n    if (window.turnstile) {\\n        window.turnstile.reset();\\n    }\\n    \\n    // Focus pe input nume\\n    setTimeout(() => document.getElementById('userName').focus(), 300);\\n}\\n\\n// Handle Session Expired (server răspunde că sesiunea nu e validă)\\nfunction handleSessionExpired() {\\n    // Șterge datele user       \\n    resetUserData();\\n    \\n    // Arată formularul din nou (FĂRĂ refresh!)\\n    showWelcomeForm();\\n    \\n    // Mesaj informativ \\xeen chat\\n    addMessage('⚠️ Sesiunea a expirat. Te rugăm să te identifici din nou pentru a continua.', 'assistant');\\n}\\n\\n// Handle User Info Form Submit\\nuserInfoForm.addEventListener('submit', async (e) => {\\n    e.preventDefault();\\n    \\n    const name = document.getElementById('userName').value.trim();\\n    const email = document.getElementById('userEmail').value.trim();\\n    \\n    // Validate input fields\\n    if (!name || !email) {\\n        turnstileError.textContent = 'Te rugăm să completezi toate c\\xe2mpurile.';\\n        turnstileError.classList.add('show');\\n        return;\\n    }\\n    \\n    // Basic email validation\\n    const emailRegex = /^[^\\\\s@]+@[^\\\\s@]+\\\\.[^\\\\s@]+$/;\\n    if (!emailRegex.test(email)) {\\n        turnstileError.textContent = 'Te rugăm să introduci o adresă de email validă.';\\n        turnstileError.classList.add('show');\\n        return;\\n    }\\n    \\n    // SECURITY: Check if Turnstile widget is loaded and visible\\n    const turnstileWidget = document.querySelector('.cf-turnstile');\\n    const turnstileLoaded = turnstileWidget && window.turnstile;\\n    \\n    // Only enforce Turnstile if widget is loaded and visible\\n    if (turnstileLoaded && !turnstileToken) {\\n        turnstileError.textContent = 'Te rugăm să completezi verificarea de securitate.';\\n        turnstileError.classList.add('show');\\n        return;\\n    }\\n    \\n    // Hide any error messages\\n    turnstileError.classList.remove('show');\\n    \\n    // Save user data\\n    userData.name = name;\\n    userData.email = email;\\n    localStorage.setItem('magicsalon_user_name', name);\\n    localStorage.setItem('magicsalon_user_email', email);\\n    \\n    // Show chat interface\\n    showChatInterface();\\n    \\n    // Add welcome message with user's name and buttons\\n    setTimeout(() => {\\n        addMessageWithButtons(\\n            `Bună, ${name}! Sunt asistentul AI Magic, cu ce informații \\xeeți pot fi de folos?`, \\n            'assistant',\\n            [\\n                { text: '📅 Programare', action: 'programare' }\\n            ]\\n        );\\n        input.focus();\\n    }, 500);\\n});\\n\\n// Toggle Chat Window\\nfloatingBtn.addEventListener('click', () => {\\n    chatWindow.classList.add('open');\\n    aiLabel.style.display = 'none';\\n    \\n    // Check if user needs to fill info\\n    if (checkUserIdentified()) {\\n        input.focus();\\n    } else {\\n        // Focus on name field\\n        setTimeout(() => document.getElementById('userName').focus(), 300);\\n    }\\n});\\n\\ncloseBtn.addEventListener('click', () => {\\n    chatWindow.classList.remove('open');\\n    aiLabel.style.display = 'block';\\n});\\n\\nwelcomeCloseBtn.addEventListener('click', () => {\\n    chatWindow.classList.remove('open');\\n    aiLabel.style.display = 'block';\\n});\\n\\n// Close AI Label\\naiLabelClose.addEventListener('click', (e) => {\\n    e.stopPropagation();\\n    aiLabel.style.display = 'none';\\n});\\n\\n// Reset Chat Button - COMENTAT\\n// const resetBtn = document.getElementById('chatResetBtn');\\n// if (resetBtn) {\\n//     resetBtn.addEventListener('click', () => {\\n//         if (confirm('Sigur vrei să resetezi chat-ul? Vei trebui să te identifici din nou.')) {\\n//             // Clear toate mesajele\\n//             messagesContainer.innerHTML = `\\n//                 <div class=\\\"typing-indicator\\\" id=\\\"typingIndicator\\\">\\n//                     <span></span>\\n//                     <span></span>\\n//                     <span></span>\\n//                 </div>\\n//             `;\\n//             \\n//             // Re-assign typing indicator reference\\n//             typingIndicator = document.getElementById('typingIndicator');\\n//             \\n//             // Re-enable buttons dacă erau disabled\\n//             sendBtn.disabled = false;\\n//             input.disabled = false;\\n//             input.value = '';\\n//             \\n//             // Reset user data și arată formularul\\n//             resetUserData();\\n//             showWelcomeForm();\\n//         }\\n//     });\\n// }\\n\\n// Send Message\\nasync function sendMessage() {\\n    const message = input.value.trim();\\n    if (!message) return;\\n    \\n    // Verifică dacă butonul e deja disabled (mesaj \\xeen trimitere)\\n    if (sendBtn.disabled) {\\n        return;\\n    }\\n    \\n    // Add user message to chat\\n    addMessage(message, 'user');\\n    input.value = '';\\n    sendBtn.disabled = true;\\n    input.disabled = true; // Disable input temporar\\n    \\n    // Show typing indicator\\n    typingIndicator.classList.add('show');\\n    scrollToBottom();\\n    \\n    try {\\n        // Send to API Proxy\\n        const response = await fetch(API_PROXY_URL, {\\n                method: 'POST',\\n                headers: {\\n                    'Content-Type': 'application/json',\\n                },\\n                body: JSON.stringify({\\n                    turnstileToken: turnstileToken,\\n                    sessionId: sessionId,\\n                    chatInput: message,\\n                    userName: userData.name,\\n                    userEmail: userData.email,\\n                    turnstileValidated: true,\\n                    metadata: {\\n                        domain: window.location.hostname,\\n                        page: window.location.pathname,\\n                        timestamp: Date.now(),\\n                        userAgent: navigator.userAgent.substring(0, 100)\\n                    }\\n                })\\n        });\\n        \\n        const data = await response.json();\\n        \\n        if (!response.ok) {\\n            // Verifică dacă e eroare de sesiune expirată\\n            if (response.status === 400 || response.status === 403) {\\n                if (data.error && (data.error.includes('token') || data.error.includes('Missing'))) {\\n                    typingIndicator.classList.remove('show');\\n                    sendBtn.disabled = false;\\n                    input.disabled = false;\\n                    handleSessionExpired();\\n                    return; // Stop execution\\n                }\\n            }\\n            throw new Error(data.message || 'API Error');\\n        }\\n        \\n        // Extract response from API\\n        const reply = data.data.output || data.data.response || data.data.message;\\n        if (reply) {\\n            addMessage(reply, 'assistant');\\n        } else {\\n            addMessage('Mulțumesc pentru mesaj! Echipa noastră va răspunde \\xeen cur\\xe2nd.', 'assistant');\\n        }\\n        \\n        // Hide typing indicator\\n        typingIndicator.classList.remove('show');\\n        \\n    } catch (error) {\\n        typingIndicator.classList.remove('show');\\n        sendBtn.disabled = false;\\n        input.disabled = false;\\n        \\n        // Check dacă e eroare de sesiune expirată\\n        if (error.message && (error.message.includes('turnstile') || error.message.includes('verificare'))) {\\n            handleSessionExpired();\\n        }\\n        // Mesaje de eroare user-friendly\\n        else if (error.message && error.message.includes('Failed to fetch')) {\\n            addMessage('Nu am putut trimite mesajul. Verifică conexiunea la internet.', 'assistant');\\n        } else {\\n            addMessage('Scuze, a apărut o eroare. Te rog \\xeencearcă din nou.', 'assistant');\\n        }\\n    }\\n    \\n    // Re-enable butonul și input-ul\\n    sendBtn.disabled = false;\\n    input.disabled = false;\\n    input.focus();\\n}\\n\\n// Add Message to Chat\\nfunction addMessage(text, sender) {\\n    const messageDiv = document.createElement('div');\\n    messageDiv.className = `chat-message ${sender}`;\\n    \\n    const bubbleDiv = document.createElement('div');\\n    bubbleDiv.className = 'message-bubble';\\n    \\n    // SECURITY: Sanitize text to prevent XSS attacks\\n    // Escape HTML and then allow line breaks\\n    const sanitizedText = text\\n        .replace(/&/g, '&amp;')\\n        .replace(/</g, '&lt;')\\n        .replace(/>/g, '&gt;')\\n        .replace(/\\\"/g, '&quot;')\\n        .replace(/'/g, '&#039;')\\n        .replace(/\\\\n/g, '<br>');\\n    \\n    bubbleDiv.innerHTML = sanitizedText;\\n    \\n    messageDiv.appendChild(bubbleDiv);\\n    messagesContainer.insertBefore(messageDiv, typingIndicator);\\n    \\n    scrollToBottom();\\n}\\n\\n// Add Message with Interactive Buttons\\nfunction addMessageWithButtons(text, sender, buttons) {\\n    const messageDiv = document.createElement('div');\\n    messageDiv.className = `chat-message ${sender}`;\\n    \\n    const bubbleDiv = document.createElement('div');\\n    bubbleDiv.className = 'message-bubble';\\n    \\n    // SECURITY: Sanitize text to prevent XSS attacks\\n    const sanitizedText = text\\n        .replace(/&/g, '&amp;')\\n        .replace(/</g, '&lt;')\\n        .replace(/>/g, '&gt;')\\n        .replace(/\\\"/g, '&quot;')\\n        .replace(/'/g, '&#039;')\\n        .replace(/\\\\n/g, '<br>');\\n    \\n    bubbleDiv.innerHTML = sanitizedText;\\n    \\n    // Add buttons if provided\\n    if (buttons && buttons.length > 0) {\\n        const buttonsContainer = document.createElement('div');\\n        buttonsContainer.className = 'chat-buttons';\\n        \\n        buttons.forEach(btn => {\\n            const button = document.createElement('button');\\n            button.className = 'chat-button';\\n            button.textContent = btn.text;\\n            button.onclick = () => handleButtonClick(btn.action, btn.data);\\n            buttonsContainer.appendChild(button);\\n        });\\n        \\n        bubbleDiv.appendChild(buttonsContainer);\\n    }\\n    \\n    messageDiv.appendChild(bubbleDiv);\\n    messagesContainer.insertBefore(messageDiv, typingIndicator);\\n    \\n    scrollToBottom();\\n}\\n\\n// Handle Button Click Actions\\nfunction handleButtonClick(action, data) {\\n    if (action === 'programare') {\\n        addMessage('📅 Programare', 'user');\\n        setTimeout(() => {\\n            addMessageWithButtons(\\n                'Perfect! Alege cum vrei să te programezi:',\\n                'assistant',\\n                [\\n                    { text: 'Descarcă aplicația', action: 'download-app' },\\n                    { text: 'WhatsApp', action: 'whatsapp' },\\n                    { text: 'Sună la *3000', action: 'phone' }\\n                ]\\n            );\\n        }, 500);\\n    } else if (action === 'download-app') {\\n        addMessage('📱 Descarcă aplicația', 'user');\\n        setTimeout(() => {\\n            addMessage('Perfect! 🎉\\\\n\\\\nTe redirectionez pentru a descărca aplicația Magic Salon...\\\\n\\\\nCu aplicația poți:\\\\n✅ Programări 24/7\\\\n✅ Vezi toate locațiile\\\\n✅ Oferte exclusive\\\\n\\\\n\\xceți doresc o experiență minunată! 💖✨', 'assistant');\\n            // Deschide link-ul API pentru descărcare aplicație\\n            window.open('https://api.saloanelemagic.ro/api/redirect/qr?redirect_url=null', '_blank');\\n        }, 500);\\n    } else if (action === 'whatsapp') {\\n        addMessage('💬 Contactează-ne pe WhatsApp', 'user');\\n        setTimeout(() => {\\n            addMessage('Perfect! 🎉\\\\n\\\\nTe redirectionez către WhatsApp pentru a discuta cu echipa noastră...\\\\n\\\\nEchipa noastră \\xeeți va răspunde imediat și te va ajuta cu programarea! 💬✨', 'assistant');\\n            // Deschide WhatsApp direct\\n            window.open('https://api.whatsapp.com/send/?phone=%2B40786723486&text&type=phone_number&app_absent=0', '_blank');\\n        }, 500);\\n    } else if (action === 'phone') {\\n        addMessage('📞 Sună la *3000', 'user');\\n        setTimeout(() => {\\n            addMessage('Perfect! 📞\\\\n\\\\nPoți să ne suni direct la *3000 pentru programare sau informații!\\\\n\\\\nEchipa noastră este disponibilă să te ajute! 💖✨', 'assistant');\\n            // Deschide link-ul pentru apel telefonic\\n            window.open('tel:*3000', '_self');\\n        }, 500);\\n    } else if (action === 'preturi') {\\n        addMessage('💰 Prețuri', 'user');\\n        setTimeout(() => {\\n            addMessageWithButtons(\\n                'Cu drag! Pentru ce servicii dorești să afli prețurile?\\\\n\\\\nPoți să-mi scrii direct serviciul dorit (ex: \\\"manichiură\\\", \\\"coafat\\\", \\\"epilare\\\"), sau alege o categorie:',\\n                'assistant',\\n                [   \\n                    { text: '💅 Manichiură/Pedichiură', action: 'info', data: 'mani-pedi' },\\n                    { text: '💇‍♀️ Coafat', action: 'info', data: 'coafat' },\\n                    { text: '✨ Epilare', action: 'info', data: 'epilare' },\\n                    { text: '🧖‍♀️ Tratamente faciale', action: 'info', data: 'faciale' }\\n                ]\\n            );\\n        }, 500);\\n    } else if (action === 'locatii') {\\n        addMessage('📍 Locații', 'user');\\n        setTimeout(() => {\\n            addMessage('Avem 22 de locații \\xeen București! 🗺️✨\\\\n\\\\nPentru a vedea toate locațiile și a te programa la cea mai apropiată, folosește:\\\\n\\\\n📱 Aplicația Magic Salon:\\\\n• iOS: https://apps.apple.com/ro/app/magic-salon/id1138675616?l=ro\\\\n• Android: https://play.google.com/store/apps/details?id=ro.magicsalon.app&hl=ro\\\\n\\\\n💬 Sau scrie-ne pe WhatsApp:\\\\nhttps://api.whatsapp.com/send/?phone=%2B40786723486&text&type=phone_number&app_absent=0\\\\n\\\\nSau spune-mi zona ta și \\xeeți recomand cel mai apropiat salon! 😊', 'assistant');\\n        }, 500);\\n    }\\n}\\n\\n// Scroll to Bottom\\nfunction scrollToBottom() {\\n    messagesContainer.scrollTop = messagesContainer.scrollHeight;\\n}\\n\\n// Event Listeners\\nsendBtn.addEventListener('click', () => {\\n    sendMessage();\\n});\\n\\n// Enter key - folosim DOAR keydown (mai reliable)\\ninput.addEventListener('keydown', (e) => {\\n    if (e.key === 'Enter' && !e.shiftKey && !sendBtn.disabled) {\\n        e.preventDefault();\\n        e.stopPropagation();\\n        sendMessage();\\n    }\\n});\\n\\n// Check if user is already logged in on page load\\nif (userData.name && userData.email) {\\n    showChatInterface(true); // true = returning user\\n}\\n</script>\\n\\n\",customHTMLBodyStart:'<!-- Google Tag Manager (noscript) -->\\n<noscript><iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-KF2MWZ8Q\" height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe></noscript>\\n<!-- End Google Tag Manager (noscript) -->',customHTMLHeadEnd:\"<script src=\\\"https://elfsightcdn.com/platform.js\\\" defer=\\\"\\\"></script>\\n\\n<style>\\n/* Import Google Font - Poppins */\\n@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap');\\n\\n/* ========================================\\n   MAGICSALON CHATBOT - CULORI ROZ\\n======================================== */\\n\\n/* Force Poppins pe TOT chatbot-ul */\\n.chat-floating-button,\\n.chat-window,\\n.chat-window *, \\n.chat-header,\\n.chat-header *,\\n.chat-messages,\\n.chat-message,\\n.message-bubble,\\n.chat-input-area,\\n.chat-input-area input,\\n.chat-send-button,\\n.chat-footer,\\n.ai-label,\\n.ai-label * {\\n    font-family: 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif !important;\\n}\\n\\n/* AI Label (l\\xe2ngă floating button) */\\n.ai-label {\\n    position: fixed;\\n    bottom: 20px;\\n    right: 90px;\\n    background: linear-gradient(135deg, #FF1493, #FF69B4);\\n    color: white;\\n    padding: 10px 12px;\\n    border-radius: 16px;\\n    box-shadow: 0 4px 12px rgba(255, 20, 147, 0.4);\\n    z-index: 9999;\\n    opacity: 0;\\n    transform: translateY(10px);\\n    animation: aiLabelFadeIn 0.5s ease forwards 0.5s, aiLabelPulse 3s ease-in-out infinite 1s;\\n}\\n\\n.ai-label-content {\\n    display: flex;\\n    align-items: center;\\n    gap: 8px;\\n    width: 100%;\\n}\\n\\n.ai-label-text {\\n    font-size: 13px;\\n    font-weight: 600;\\n    font-family: 'Poppins', sans-serif;\\n    line-height: 1.4;\\n    text-align: center;\\n    flex: 1;\\n}\\n\\n.ai-label-text div {\\n    white-space: nowrap;\\n}\\n\\n.ai-label-close {\\n    background: rgba(255, 255, 255, 0.25);\\n    border: none;\\n    color: white;\\n    font-size: 18px;\\n    width: 20px;\\n    height: 20px;\\n    border-radius: 50%;\\n    cursor: pointer;\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n    transition: all 0.2s ease;\\n    padding: 0;\\n    line-height: 1;\\n    flex-shrink: 0;\\n    margin-left: auto;\\n}\\n\\n.ai-label-close:hover {\\n    background: rgba(255, 255, 255, 0.4);\\n    transform: scale(1.15);\\n}\\n\\n@keyframes aiLabelFadeIn {\\n    to {\\n        opacity: 1;\\n        transform: translateY(0);\\n    }\\n}\\n\\n@keyframes aiLabelPulse {\\n    0%, 100% {\\n        box-shadow: 0 4px 12px rgba(255, 20, 147, 0.4);\\n    }\\n    50% {\\n        box-shadow: 0 4px 12px rgba(255, 20, 147, 0.6), 0 0 0 3px rgba(255, 20, 147, 0.1);\\n    }\\n}\\n\\n/* Buton Floating - ROTUND ROZ INTENS MagicSalon */\\n.chat-floating-button {\\n    position: fixed;\\n    bottom: 20px;\\n    right: 20px;\\n    width: 60px;\\n    height: 60px;\\n    background: #FF1493;\\n    border: none;\\n    border-radius: 50%;\\n    cursor: pointer;\\n    box-shadow: 0 8px 24px rgba(255, 20, 147, 0.35);\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n    transition: all 0.3s ease;\\n    z-index: 9999;\\n    animation: chatPulse 2s ease-in-out infinite;\\n}\\n\\n.chat-floating-button:hover {\\n    background: #D01178;\\n    transform: translateY(-2px) scale(1.05);\\n    box-shadow: 0 12px 32px rgba(255, 20, 147, 0.45);\\n    animation: none;\\n}\\n\\n@keyframes chatPulse {\\n    0%, 100% {\\n        box-shadow: 0 8px 24px rgba(255, 20, 147, 0.35);\\n    }\\n    50% {\\n        box-shadow: 0 8px 24px rgba(255, 20, 147, 0.5), 0 0 0 8px rgba(255, 20, 147, 0.15);\\n    }\\n}\\n\\n.chat-floating-button svg {\\n    width: 28px;\\n    height: 28px;\\n    fill: white;\\n}\\n\\n/* Chat Window */\\n.chat-window {\\n    position: fixed;\\n    bottom: 90px;\\n    right: 20px;\\n    width: 380px;\\n    height: 550px;\\n    background: white;\\n    border-radius: 16px;\\n    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15);\\n    display: none;\\n    flex-direction: column;\\n    z-index: 9999;\\n    overflow: hidden;\\n}\\n\\n.chat-window.open {\\n    display: flex;\\n}\\n\\n/* Header - Gradient ROZ MagicSalon */\\n.chat-header {\\n    background: linear-gradient(135deg, #FF1493, #FF69B4);\\n    color: white;\\n    padding: 20px;\\n    display: flex;\\n    justify-content: space-between;\\n    align-items: center;\\n}\\n\\n.version-tag {\\n    display: inline-block;\\n    background: rgba(255, 255, 255, 0.2);\\n    color: white;\\n    padding: 3px 8px;\\n    border-radius: 12px;\\n    font-size: 10px;\\n    margin-top: 3px;\\n    font-weight: 500;\\n}\\n\\n.chat-header h3 {\\n    font-size: 18px;\\n    font-weight: 600;\\n    margin: 0;\\n    margin-bottom: 2px;\\n}\\n\\n.chat-close {\\n    background: none;\\n    border: none;\\n    color: white;\\n    font-size: 32px;\\n    cursor: pointer;\\n    padding: 0;\\n    width: 35px;\\n    height: 35px;\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n    font-weight: 300;\\n    line-height: 1;\\n}\\n\\n.chat-reset-btn {\\n    background: rgba(255, 20, 147, 0.3);\\n    border: 2px solid #FF1493;\\n    color: #FF1493;\\n    font-size: 18px;\\n    cursor: pointer;\\n    padding: 5px;\\n    width: 30px;\\n    height: 30px;\\n    border-radius: 50%;\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n    transition: all 0.3s ease;\\n}\\n\\n.chat-reset-btn:hover {\\n    background: #FF1493;\\n    border-color: #FF69B4;\\n    color: white;\\n    transform: rotate(180deg);\\n    box-shadow: 0 0 15px rgba(255, 20, 147, 0.8);\\n}\\n\\n/* Messages Area */\\n.chat-messages {\\n    flex: 1;\\n    padding: 20px;\\n    overflow-y: auto;\\n    background: #f8f9fa;\\n}\\n\\n.chat-message {\\n    margin-bottom: 16px;\\n    display: flex;\\n}\\n\\n.chat-message.user {\\n    justify-content: flex-end;\\n}\\n\\n.chat-message.assistant {\\n    justify-content: flex-start;\\n}\\n\\n.message-bubble {\\n    max-width: 75%;\\n    padding: 12px 16px;\\n    border-radius: 18px;\\n    word-wrap: break-word;\\n    line-height: 1.5;\\n}\\n\\n/* User Messages - ROZ MagicSalon */\\n.chat-message.user .message-bubble {\\n    background: #FF1493;\\n    color: white;\\n    border-radius: 18px 18px 4px 18px;\\n}\\n\\n.chat-message.assistant .message-bubble {\\n    background: white;\\n    color: #333;\\n    border-radius: 18px 18px 18px 4px;\\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\\n}\\n\\n/* Input Area */\\n.chat-input-area {\\n    padding: 16px;\\n    background: white;\\n    border-top: 1px solid #e9ecef;\\n    display: flex;\\n    gap: 10px;\\n    align-items: center;\\n}\\n\\n.chat-input-area input {\\n    flex: 1;\\n    min-width: 0;\\n    padding: 12px 16px;\\n    border: 2px solid #e9ecef;\\n    border-radius: 12px;\\n    font-family: 'Poppins', sans-serif;\\n    font-size: 14px;\\n    outline: none;\\n    transition: all 0.3s ease;\\n}\\n\\n.chat-input-area input:focus {\\n    border-color: #FF1493;\\n    box-shadow: 0 0 0 3px rgba(255, 20, 147, 0.1);\\n}\\n\\n/* Send Button - ROZ MagicSalon */\\n.chat-send-button {\\n    background: #FF1493;\\n    border: none;\\n    border-radius: 12px;\\n    padding: 12px 16px;\\n    color: white;\\n    font-weight: 400;\\n    cursor: pointer;\\n    transition: all 0.3s ease;\\n    flex-shrink: 0;\\n    min-width: 50px;\\n    max-width: 55px;\\n    white-space: nowrap;\\n    font-size: 20px;\\n    text-align: center;\\n    line-height: 1;\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n}\\n\\n.chat-send-button:hover {\\n    background: #D01178;\\n}\\n\\n.chat-send-button:disabled {\\n    background: #ccc;\\n    cursor: not-allowed;\\n}\\n\\n/* Footer */\\n.chat-footer {\\n    padding: 12px;\\n    text-align: center;\\n    font-size: 12px;\\n    color: #6c757d;\\n    background: #f8f9fa;\\n    border-top: 1px solid #e9ecef;\\n}\\n\\n.chat-footer a {\\n    color: #6c757d;\\n    text-decoration: underline;\\n    font-weight: 600;\\n}\\n\\n.chat-footer a:hover {\\n    color: #495057;\\n    text-decoration: underline;\\n}\\n\\n/* Typing Indicator */\\n.typing-indicator {\\n    display: none;\\n    padding: 12px 16px;\\n    background: white;\\n    border-radius: 18px;\\n    width: fit-content;\\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\\n}\\n\\n.typing-indicator.show {\\n    display: block;\\n}\\n\\n.typing-indicator span {\\n    display: inline-block;\\n    width: 8px;\\n    height: 8px;\\n    background: #6c757d;\\n    border-radius: 50%;\\n    margin: 0 2px;\\n    animation: typing 1.4s infinite;\\n}\\n\\n.typing-indicator span:nth-child(2) {\\n    animation-delay: 0.2s;\\n}\\n\\n.typing-indicator span: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/* Scrollbar - ROZ MagicSalon */\\n.chat-messages::-webkit-scrollbar {\\n    width: 6px;\\n}\\n\\n.chat-messages::-webkit-scrollbar-track {\\n    background: #f1f1f1;\\n}\\n\\n.chat-messages::-webkit-scrollbar-thumb {\\n    background: #FF1493;\\n    border-radius: 3px;\\n}\\n\\n.chat-messages::-webkit-scrollbar-thumb:hover {\\n    background: #D01178;\\n}\\n\\n/* Interactive Buttons - Workflow */\\n.chat-buttons {\\n    display: flex;\\n    flex-direction: column;\\n    gap: 8px;\\n    margin-top: 12px;\\n    justify-content: flex-start;\\n    width: 100%;\\n}\\n\\n.chat-button {\\n    background: white;\\n    color: #FF1493;\\n    border: 2px solid #FF1493;\\n    border-radius: 20px;\\n    padding: 10px 20px;\\n    font-size: 14px;\\n    font-weight: 600;\\n    cursor: pointer;\\n    transition: all 0.3s ease;\\n    box-shadow: 0 2px 8px rgba(255, 20, 147, 0.25);\\n    font-family: 'Poppins', sans-serif;\\n    width: 100%;\\n    text-align: center;\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n}\\n\\n.chat-button:hover {\\n    transform: translateY(-2px);\\n    box-shadow: 0 4px 12px rgba(255, 20, 147, 0.4);\\n    background: #FFF0F7;\\n    border-color: #D01178;\\n    color: #D01178;\\n}\\n\\n.chat-button:active {\\n    transform: translateY(0);\\n}\\n\\n.chat-button-secondary {\\n    background: white;\\n    color: #FF1493;\\n    border: 2px solid #FF1493;\\n    box-shadow: 0 2px 6px rgba(255, 20, 147, 0.15);\\n}\\n\\n.chat-button-secondary:hover {\\n    background: #FFF0F7;\\n    border-color: #D01178;\\n    color: #D01178;\\n}\\n\\n.message-bubble .chat-buttons {\\n    max-width: 100%;\\n}\\n\\n/* Welcome Form Styling */\\n.chat-welcome-form {\\n    padding: 40px 30px;\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n    height: 100%;\\n    background: linear-gradient(135deg, #fff0f7 0%, #ffffff 100%);\\n    position: relative;\\n}\\n\\n.welcome-close {\\n    position: absolute;\\n    top: 15px;\\n    right: 15px;\\n    background: none;\\n    border: none;\\n    color: #6c757d;\\n    font-size: 28px;\\n    cursor: pointer;\\n    padding: 0;\\n    width: 35px;\\n    height: 35px;\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n    transition: all 0.3s ease;\\n    border-radius: 50%;\\n}\\n\\n.welcome-close:hover {\\n    background: rgba(0, 0, 0, 0.05);\\n    color: #333;\\n}\\n\\n.welcome-content {\\n    width: 100%;\\n    max-width: 350px;\\n}\\n\\n.welcome-content h2 {\\n    color: #FF1493;\\n    margin-bottom: 10px;\\n    font-size: 24px;\\n}\\n\\n.welcome-content > p {\\n    color: #666;\\n    margin-bottom: 30px;\\n    font-size: 14px;\\n}\\n\\n.form-field {\\n    margin-bottom: 20px;\\n}\\n\\n.form-field label {\\n    display: block;\\n    color: #FF1493;\\n    font-weight: 600;\\n    margin-bottom: 8px;\\n    font-size: 14px;\\n}\\n\\n.form-field input {\\n    width: 100%;\\n    padding: 14px 16px;\\n    border: 2px solid #e9ecef;\\n    border-radius: 12px;\\n    font-family: 'Poppins', sans-serif;\\n    font-size: 14px;\\n    outline: none;\\n    transition: all 0.3s ease;\\n}\\n\\n.form-field input:focus {\\n    border-color: #FF1493;\\n    box-shadow: 0 0 0 3px rgba(255, 20, 147, 0.1);\\n}\\n\\n.form-field input::placeholder {\\n    color: #999;\\n}\\n\\n.btn-start-chat {\\n    width: 100%;\\n    background: linear-gradient(135deg, #FF1493, #FF69B4);\\n    color: white;\\n    border: none;\\n    border-radius: 12px;\\n    padding: 14px 20px;\\n    font-weight: 600;\\n    cursor: pointer;\\n    transition: all 0.3s ease;\\n    font-size: 16px;\\n    margin-top: 10px;\\n}\\n\\n.btn-start-chat:hover {\\n    transform: translateY(-2px);\\n    box-shadow: 0 8px 20px rgba(255, 20, 147, 0.4);\\n}\\n\\n.privacy-note {\\n    text-align: center;\\n    font-size: 11px;\\n    color: #999;\\n    margin-top: 15px;\\n    margin-bottom: 0;\\n}\\n\\n/* Turnstile Container */\\n.turnstile-container {\\n    margin: 20px 0;\\n    display: flex;\\n    justify-content: center;\\n}\\n\\n.form-error {\\n    color: #dc3545;\\n    font-size: 12px;\\n    margin-top: 8px;\\n    display: none;\\n}\\n\\n.form-error.show {\\n    display: block;\\n}\\n\\n/* Chat Interface */\\n.chat-interface {\\n    display: flex;\\n    flex-direction: column;\\n    height: 100%;\\n}\\n\\n/* Mobile Responsive */\\n@media (max-width: 768px) {\\n    .chat-window {\\n        width: calc(100vw - 20px);\\n        height: calc(100vh - 100px);\\n        max-height: 600px;\\n        bottom: 80px;\\n        right: 10px;\\n        left: 10px;\\n        border-radius: 16px;\\n        margin: 0 auto;\\n    }\\n    \\n    .chat-floating-button {\\n        bottom: 15px;\\n        right: 15px;\\n        width: 56px;\\n        height: 56px;\\n    }\\n    \\n    .chat-floating-button svg {\\n        width: 26px;\\n        height: 26px;\\n    }\\n    \\n    .ai-label {\\n        bottom: 15px;\\n        right: 80px;\\n    }\\n    \\n    .chat-welcome-form {\\n        padding: 30px 20px;\\n    }\\n    \\n    .message-bubble {\\n        max-width: 85%;\\n    }\\n    \\n    /* Mobile Buttons */\\n    .chat-button {\\n        font-size: 13px;\\n        padding: 9px 16px;\\n    }\\n    \\n    /* Mobile Form Fields - Prevent Zoom */\\n    .form-field input {\\n        font-size: 16px;\\n        padding: 12px 14px;\\n    }\\n    \\n    /* Mobile Input Area Adjustments */\\n    .chat-input-area {\\n        padding: 12px;\\n        gap: 8px;\\n    }\\n    \\n    .chat-input-area input {\\n        padding: 10px 12px;\\n        font-size: 16px;\\n    }\\n    \\n    .chat-send-button {\\n        padding: 10px 12px;\\n        min-width: 45px;\\n        max-width: 50px;\\n        font-size: 18px;\\n    }\\n}\\n\\n/* Mobile foarte mic */\\n@media (max-width: 480px) {\\n    .chat-window {\\n        width: calc(100vw - 16px);\\n        height: calc(100vh - 90px);\\n        max-height: 550px;\\n        bottom: 75px;\\n        right: 8px;\\n        left: 8px;\\n    }\\n    \\n    .chat-header h3 {\\n        font-size: 16px;\\n    }\\n    \\n    .chat-header p {\\n        font-size: 11px;\\n    }\\n    \\n    /* Extra Small Mobile - Buttons */\\n    .chat-button {\\n        font-size: 12px;\\n        padding: 8px 14px;\\n    }\\n    \\n    /* Extra Small Mobile - Form Fields */\\n    .form-field input {\\n        font-size: 16px;\\n        padding: 11px 12px;\\n    }\\n    \\n    /* Extra Small Mobile - Input optimizations */\\n    .chat-input-area {\\n        padding: 10px;\\n        gap: 6px;\\n    }\\n    \\n    .chat-input-area input {\\n        padding: 9px 10px;\\n        font-size: 16px;\\n        border-radius: 10px;\\n    }\\n    \\n    .chat-send-button {\\n        padding: 9px 10px;\\n        min-width: 42px;\\n        max-width: 48px;\\n        font-size: 16px;\\n        border-radius: 10px;\\n    }\\n}\\n</style>\\n\\n<!-- Cloudflare Turnstile Script -->\\n<script src=\\\"https://challenges.cloudflare.com/turnstile/v0/api.js\\\" async=\\\"\\\" defer=\\\"\\\"></script>\\n    \\n\",customHTMLHeadStart:\"<!-- Google Tag Manager -->\\n<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\\nj=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\\n'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\\n})(window,document,'script','dataLayer','GTM-KF2MWZ8Q');</script>\\n<!-- End Google Tag Manager -->\\n\\n<!-- Meta Pixel Code -->\\n<script>\\n!function(f,b,e,v,n,t,s)\\n{if(f.fbq)return;n=f.fbq=function(){n.callMethod?\\nn.callMethod.apply(n,arguments):n.queue.push(arguments)};\\nif(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\\nn.queue=[];t=b.createElement(e);t.async=!0;\\nt.src=v;s=b.getElementsByTagName(e)[0];\\ns.parentNode.insertBefore(t,s)}(window, document,'script',\\n'https://connect.facebook.net/en_US/fbevents.js');\\nfbq('init', '1628285644565283');\\nfbq('track', 'PageView');\\n</script>\\n<noscript></noscript>\",description:\"Magic Salon este destinația ta pentru servicii de coafor, manichiură, pedichiură, cosmetică, extensii gene fir cu fir, 2D, 3D și make-up.\",favicon:\"https://framerusercontent.com/assets/08Ojkuv60SQsq1Hp68OLlqAnEE.jpg\",robots:\"max-image-preview:large\",title:\"Saloanele Magic\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"2DACA,SAAwB,EAAS,EAAO,EAAa,CAAC,MAAM,CAAC,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAy6rB,oBAAoB;;4CAAwP,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA8sd,oBAAoB;;;;;;;;;;;;;;;;;;;;;uBAA07B,YAAY,4IAA4I,QAAQ,sEAAsE,OAAO,0BAA0B,MAAM,kBAAkB"}