Mohlèon is your destination for exclusive, hand-painted pieces—on canvas and on cloth. Each work is one-of-one, created to collect and to live with. Explore original paintings, limited wearable drops, and select commissions that bring urban energy and fine-art expression into your world.
(function(){
var SUPPORT_EMAIL = 'Info@mohleon.art';
function $id(id){ return document.getElementById(id); }
function parseList(str){ return (str||'').split(',').map(function(s){return s.trim();}).filter(Boolean); }
/* ---------- Filters ---------- */
function applyFilter(kind){
document.querySelectorAll('#shop-grid .product-card').forEach(function(card){
var k = (card.getAttribute('data-kind')||'').toLowerCase();
var show = (kind === 'all') || (k === kind);
card.style.display = show ? '' : 'none';
});
}
function bindFilters(){
var bar = $id('filterBar');
if(!bar) return;
bar.addEventListener('click', function(e){
var b = e.target.closest('.filter-btn'); if(!b) return;
bar.querySelectorAll('.filter-btn').forEach(function(btn){ btn.classList.remove('active'); });
b.classList.add('active');
applyFilter(b.getAttribute('data-filter') || 'all');
});
}
/* ---------- Build Inquiry/Buy buttons + badges ---------- */
function renderButtonsAndBadges(){
document.querySelectorAll('.product-card').forEach(function(card){
var kind = (card.getAttribute('data-kind')||'').toLowerCase(); // 'canvas' | 'wearable'
var name = card.getAttribute('data-name') || 'Artwork';
var size = card.getAttribute('data-size') || '';
var price = card.getAttribute('data-price') || 'Inquire';
var soldOut = String(card.getAttribute('data-soldout')||'false').toLowerCase() === 'true';
var badge = card.getAttribute('data-badge') || '';
// Clean previous badges/filters
card.querySelectorAll('.badge-left, .badge-right').forEach(function(el){ el.remove(); });
card.querySelectorAll('img').forEach(function(i){ i.style.filter = ''; });
// Build mailto
var subject = 'Inquiry: ' + name;
var body = ''
+ 'Hello MOHLÉON,%0D%0A%0D%0A'
+ 'I\'m interested in the following piece:%0D%0A'
+ '- Name: ' + encodeURIComponent(name) + '%0D%0A'
+ (kind ? ('- Type: ' + encodeURIComponent(kind === 'wearable' ? 'Wearable' : 'Canvas') + '%0D%0A') : '')
+ (size ? ('- Size: ' + encodeURIComponent(size) + '%0D%0A') : '')
+ (price ? ('- Price: ' + encodeURIComponent(price) + '%0D%0A') : '')
+ '%0D%0ACould you share availability, shipping, and payment details?%0D%0A%0D%0A'
+ 'Additional notes (you can edit below):%0D%0A—%20%0D%0A%0D%0A'
+ 'Name:%20%0D%0AEmail:%20%0D%0ALocation:%20';
var mailto = 'mailto:' + encodeURIComponent(SUPPORT_EMAIL)
+ '?subject=' + encodeURIComponent(subject)
+ '&body=' + body;
// Button
var btnBox = card.querySelector('.product-btn');
if(btnBox){
if(soldOut){
btnBox.innerHTML = 'Sold Out';
} else {
btnBox.innerHTML = 'Inquire / Buy';
}
}
// Left badge (1/1) if provided
if (badge) {
var left = document.createElement('div');
left.className = 'badge-left';
left.textContent = badge;
Object.assign(left.style, {
position:'absolute', top:'10px', left:'10px', background:'#000', color:'#fff',
padding:'6px 10px', fontWeight:'700', fontSize:'12px', borderRadius:'4px', opacity:'.9'
});
card.appendChild(left);
}
// Right badge if sold out
if (soldOut) {
var right = document.createElement('div');
right.className = 'badge-right';
right.textContent = 'SOLD OUT';
Object.assign(right.style, {
position:'absolute', top:'10px', right:'10px', background:'#e53935', color:'#fff',
padding:'6px 10px', fontWeight:'800', fontSize:'12px', borderRadius:'4px', opacity:'.95'
});
card.appendChild(right);
card.querySelectorAll('img').forEach(function(i){ i.style.filter = 'grayscale(25%) brightness(0.9)'; });
}
});
}
/* ---------- Lightbox ---------- */
var images = [], index = 0, caption = '';
function openFromCard(card, startSrc){
var arr = parseList(card.getAttribute('data-images'));
if(!arr.length){
arr = Array.prototype.map.call(card.querySelectorAll('img'), function(t){ return t.getAttribute('src'); }).filter(Boolean);
}
images = arr;
caption = card.getAttribute('data-name') || (card.querySelector('img') ? card.querySelector('img').alt : '') || '';
index = 0;
if(startSrc){
var i = images.indexOf(startSrc);
if(i >= 0) index = i;
}
show();
var lb=$id('lightbox'); if(lb) lb.style.display='flex';
}
function show(){
var im=$id('lightbox-img'), cp=$id('lightbox-caption');
if(!im || !cp || !images.length) return;
im.src = images[index];
im.alt = caption ? (caption + ' - Image ' + (index+1)) : '';
cp.textContent = caption || '';
}
function next(){ if(images.length){ index=(index+1)%images.length; show(); } }
function prev(){ if(images.length){ index=(index-1+images.length)%images.length; show(); } }
function close(){ var lb=$id('lightbox'); if(lb) lb.style.display='none'; }
/* ---------- Bind everything ---------- */
function bind(){
bindFilters();
applyFilter('all');
renderButtonsAndBadges();
var grid = $id('shop-grid');
if(grid){
grid.addEventListener('click', function(e){
var t = e.target;
if(t && t.classList && t.classList.contains('lb-thumb')){
var card = t.closest('.product-card');
if(card){ openFromCard(card, t.getAttribute('src')); }
}
});
}
var c=$id('lb-close'), n=$id('lb-next'), p=$id('lb-prev'), lb=$id('lightbox');
if(c) c.addEventListener('click', close);
if(n) n.addEventListener('click', next);
if(p) p.addEventListener('click', prev);
if(lb){ lb.addEventListener('click', function(e){ if(e.target === lb) close(); }); }
document.addEventListener('keydown', function(e){
var lbEl=$id('lightbox');
if(lbEl && lbEl.style.display==='flex'){
if(e.key==='Escape') close();
if(e.key==='ArrowRight') next();
if(e.key==='ArrowLeft') prev();
}
});
var y=$id('year'); if(y){ y.textContent = new Date().getFullYear(); }
}
if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded', bind); }
else { bind(); }
})();