/* global React */ const { useState: useStateShop, useEffect: useEffectShop, useMemo: useMemoShop } = React; // Fallback dataset used if /api/products is unreachable (e.g. local dev). const PRESS_ON_DESIGNS = [ { id: 1, name: 'Aurora Chrome', price: 999, cat: 'Chrome', shape: 'Almond', tone: 1, tags: ['Bestseller'] }, { id: 2, name: 'Vintage Rose', price: 1199, cat: 'Florals', shape: 'Coffin', tone: 2, tags: ['Hand-painted'] }, { id: 3, name: 'Micro French', price: 899, cat: 'French', shape: 'Stiletto', tone: 3, tags: [] }, { id: 4, name: 'Pearl Drop', price: 1499, cat: '3D Charms', shape: 'Square', tone: 4, tags: ['Bridal'] }, { id: 5, name: 'Cat Eye Galaxy', price: 1099, cat: 'Glitter', shape: 'Almond', tone: 1, tags: ['New'] }, { id: 6, name: 'Butter Nude', price: 799, cat: 'Minimal', shape: 'Short Square', tone: 2, tags: [] }, { id: 7, name: 'Cherry Blossom', price: 1199, cat: 'Florals', shape: 'Oval', tone: 3, tags: ['Hand-painted'] }, { id: 8, name: 'Mirror Chrome', price: 999, cat: 'Chrome', shape: 'Stiletto', tone: 4, tags: ['Bestseller'] }, { id: 9, name: 'Lavender French', price: 949, cat: 'French', shape: 'Ballerina', tone: 1, tags: [] }, { id: 10, name: 'Bow Charms', price: 1399, cat: '3D Charms', shape: 'Short Oval', tone: 2, tags: ['New'] }, { id: 11, name: 'Gilded Tips', price: 1099, cat: 'French', shape: 'Almond', tone: 3, tags: [] }, { id: 12, name: 'Marble Mocha', price: 1099, cat: 'Minimal', shape: 'Coffin', tone: 4, tags: [] }, { id: 13, name: 'Holo Drift', price: 999, cat: 'Glitter', shape: 'Square', tone: 1, tags: [] }, { id: 14, name: 'Wildflower', price: 1299, cat: 'Florals', shape: 'Almond', tone: 2, tags: ['Hand-painted'] }, { id: 15, name: 'Star Dust', price: 949, cat: 'Glitter', shape: 'Stiletto', tone: 3, tags: [] }, { id: 16, name: 'Plum Velvet', price: 899, cat: 'Minimal', shape: 'Oval', tone: 4, tags: [] }, { id: 17, name: 'Crystal Ombré', price: 1299, cat: 'Chrome', shape: 'Coffin', tone: 1, tags: ['Bridal'] }, { id: 18, name: 'Polka Pearl', price: 1199, cat: '3D Charms', shape: 'Almond', tone: 2, tags: ['New'] }, { id: 19, name: 'Cinnamon Sugar', price: 849, cat: 'Minimal', shape: 'Short Square', tone: 3, tags: [] }, { id: 20, name: 'Dahlia Noir', price: 1399, cat: 'Florals', shape: 'Stiletto', tone: 4, tags: ['Hand-painted'] }]; const SHOP_CATS = ['All', 'Chrome', 'Florals', 'French', 'Glitter', '3D Charms', 'Minimal']; window.ShopHero = function ShopHero() { return (
The Press-On Atelier

Reusable. Reapplied.
Reimagined.

20 hand-crafted designs to choose from — or send your inspiration on WhatsApp and we'll make a one-of-one set, sized to your nail beds.

02 Lasts up to 2 weeks per wear
10 10 sizes per set
48 Custom orders ship in 48h
); }; const PRESS_ON_SIZES = ['S', 'M', 'L']; const SIZE_LABELS = { S: 'Small (slim, shorter beds)', M: 'Medium (most common fit)', L: 'Large (wider beds)' }; window.Shop = function Shop() { const [cat, setCat] = useStateShop('All'); const [sort, setSort] = useStateShop('featured'); const [quickView, setQuickView] = useStateShop(null); const [products, setProducts] = useStateShop(null); // null = loading const [selectedSize, setSelectedSize] = useStateShop({}); // { [productId]: 'S'|'M'|'L' } useEffectShop(() => { if (!window.LQ_PUB) { setProducts([]); return; } window.LQ_PUB.fetchProducts().then((rows) => { setProducts((rows || []).map((p) => ({ id: p.id, name: p.name, price: p.price, cat: p.category, tone: ((p.id || 0) % 4) + 1, tags: p.tags || [], photo: p.photo_path || null, }))); }).catch(() => {}); }, []); const filtered = useMemoShop(() => { let r = products || []; if (cat !== 'All') r = r.filter((d) => d.cat === cat); if (sort === 'low') r = [...r].sort((a, b) => a.price - b.price);else if (sort === 'high') r = [...r].sort((a, b) => b.price - a.price); return r; }, [products, cat, sort]); const sizeFor = (d) => selectedSize[d.id] || 'M'; const waLink = (design) => { const sz = design ? sizeFor(design) : 'M'; const msg = design ? `Hi Lacquery! I'd like to order the *${design.name}* press-on set (size ${sz}). Could you confirm fit details and shipping?` : `Hi Lacquery! I'd like to design a custom press-on set. Here's what I'm thinking:`; return window.LQ_PUB ? window.LQ_PUB.waLink(msg) : ('https://wa.me/918317451779?text=' + encodeURIComponent(msg)); }; if (products === null) return (
Loading…
); if (products.length === 0) return (

No press-on sets listed yet — check back soon.

Book an appointment instead
); return (
{SHOP_CATS.map((c) => )}
{filtered.length}{cat !== 'All' ? ` of ${products.length}` : ''} designs
{filtered.map((d) =>
{d.tags.length > 0 &&
{d.tags.map((t) => {t})}
}
{d.cat}

{d.name}

Size
{PRESS_ON_SIZES.map((sz) => ( ))}
₹{d.price.toLocaleString('en-IN')} Order
)}
{/* CUSTOMISE BANNER */}
customise

Don't see the one?
Make it yours.

Send us your inspiration a Pinterest pin, a Reel, a hand-drawn idea and we'll hand-craft a custom set tailored to your nail size and shape. Ships in 48 hours.

Start customising on WhatsApp Or DM us @lacquerynails
{/* QUICK VIEW MODAL */} {quickView &&
setQuickView(null)}>
e.stopPropagation()}>
{quickView.cat}

{quickView.name}

₹{quickView.price.toLocaleString('en-IN')}
Choose size
{PRESS_ON_SIZES.map((sz) => ( ))}
WearUp to 2 weeks
Includes10 nails + glue + file
Delivery2–3 days · Bengaluru

Each Lacquery set is hand-finished in studio. Send us your nail measurements on WhatsApp after ordering — we'll match the perfect fit.

}
); };