Forgot Password

Enter your email to reset your password

B2B Partner Portal

Access our wholesale portal

Forgot Password?

Mon Mélange

Online
Hello! Welcome to Mon Mélange 🌹 I'm your personal fragrance consultant. How can I help you today?

I can help you with:
• Finding your perfect perfume
• Product recommendations
• B2B partnership inquiries
• Shipping & order info

Before we start

Please share your details so we can assist you better.

var btn = event.currentTarget; btn.disabled = true; btn.innerHTML = ''; fetch('/api/index.php?action=cart_add', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ slug: slug, quantity: 1 }) }) .then(function(r) { return r.json(); }) .then(function(data) { if (data.success) { btn.classList.add('added'); btn.innerHTML = ''; // Update cart count badge if exists var cartBadge = document.querySelector('.cart-count'); if (cartBadge && data.count !== undefined) { cartBadge.textContent = data.count; cartBadge.style.display = data.count > 0 ? 'flex' : 'none'; } setTimeout(function() { btn.classList.remove('added'); btn.innerHTML = ''; btn.disabled = false; }, 2000); } else { btn.innerHTML = ''; setTimeout(function() { btn.innerHTML = ''; btn.disabled = false; }, 1500); } }) .catch(function() { btn.innerHTML = ''; btn.disabled = false; }); } (function() { var widget = document.getElementById('mmChatWidget'); var toggle = document.getElementById('mmChatToggle'); var window_ = document.getElementById('mmChatWindow'); var minimize = document.getElementById('mmChatMinimize'); var form = document.getElementById('mmChatForm'); var input = document.getElementById('mmChatInput'); var messages = document.getElementById('mmChatMessages'); var iconOpen = document.getElementById('mmChatIconOpen'); var iconClose = document.getElementById('mmChatIconClose'); var sendBtn = document.getElementById('mmChatSend'); var isOpen = false; // Session key persistence var sessionKey = localStorage.getItem('mm_chat_session') || ''; function toggleChat() { isOpen = !isOpen; if (isOpen) { window_.classList.add('open'); iconOpen.style.display = 'none'; iconClose.style.display = 'block'; document.getElementById('mmChatBadge').style.display = 'none'; input.focus(); if (sessionKey) loadHistory(); } else { window_.classList.remove('open'); iconOpen.style.display = 'block'; iconClose.style.display = 'none'; } } toggle.addEventListener('click', toggleChat); minimize.addEventListener('click', toggleChat); function addMessage(text, isBot) { var div = document.createElement('div'); div.className = 'mm-msg ' + (isBot ? 'mm-msg-bot' : 'mm-msg-user'); var icon = isBot ? 'fa-spray-can-sparkles' : 'fa-user'; var formatted = text; if (isBot) { // Extract product cards var productCards = ''; formatted = formatted.replace(/\[PRODUCT:([^|]+)\|([^|]+)\|([^|]+)\|([^\]]+)\]/g, function(match, slug, name, price, desc) { productCards += '
' + '
' + '' + name + '' + '' + price + '' + '' + desc + '' + '
' + '
' + '' + '' + '
' + '
'; return ''; }); // Format remaining text formatted = formatted .replace(/\*\*(.*?)\*\*/g, '$1') .replace(/\n{2,}/g, '

') .replace(/\n/g, '
') .replace(/^(
)+/, '').replace(/(
)+$/, ''); if (productCards) { formatted += '
' + productCards + '
'; } } else { formatted = formatted .replace(/\*\*(.*?)\*\*/g, '$1') .replace(/\n/g, '
'); } div.innerHTML = '
' + '
' + formatted + '
'; messages.appendChild(div); messages.scrollTop = messages.scrollHeight; } function showTyping() { var div = document.createElement('div'); div.className = 'mm-msg mm-msg-bot mm-msg-typing'; div.id = 'mmTyping'; div.innerHTML = '
' + '
'; messages.appendChild(div); messages.scrollTop = messages.scrollHeight; } function hideTyping() { var el = document.getElementById('mmTyping'); if (el) el.remove(); } function sendMessage(text) { if (!text.trim()) return; addMessage(text, false); input.value = ''; sendBtn.disabled = true; showTyping(); fetch('/api/index.php?action=chat_send', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ message: text, session_key: sessionKey }) }) .then(function(r) { return r.json(); }) .then(function(data) { hideTyping(); sendBtn.disabled = false; if (data.success) { addMessage(data.message, true); if (data.session_key) { sessionKey = data.session_key; localStorage.setItem('mm_chat_session', sessionKey); } } else { addMessage(data.message || 'Sorry, something went wrong. Please try again.', true); } input.focus(); }) .catch(function() { hideTyping(); sendBtn.disabled = false; addMessage('Connection error. Please try again.', true); }); } form.addEventListener('submit', function(e) { e.preventDefault(); sendMessage(input.value); }); function loadHistory() { if (!sessionKey) return; fetch('/api/index.php?action=chat_history&session_key=' + encodeURIComponent(sessionKey)) .then(function(r) { return r.json(); }) .then(function(data) { if (data.success && data.messages && data.messages.length > 0) { // Clear default welcome message and show history messages.innerHTML = ''; data.messages.forEach(function(m) { addMessage(m.content, m.role === 'assistant'); }); } }) .catch(function() {}); } })();