Shopping Cart

Your cart is empty

Looks like you haven't added any fragrances yet. Discover our luxurious collection.

Explore Collections

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() {}); } })();