Atelier
The
Unique
Fabrics
Something beautiful is being woven.

We are crafting an extraordinary collection of premium textiles, artisanal weaves, and curated fabrics from across the world. Be the first to know when we open our doors.

Thank you — you'll be the first to know.

The Unique Fabrics ©
neTo(x - wobble, H); const a = 0.3 + 0.15 * Math.sin(offset + x * 0.05); ctx.strokeStyle = `rgba(201,169,110,${a})`; ctx.lineWidth = 0.6; ctx.stroke(); } for (let y = 0; y < H; y += spacing) { ctx.beginPath(); const wobble = Math.sin(offset + y * 0.02) * 2; ctx.moveTo(0, y + wobble); ctx.lineTo(W, y - wobble); const a = 0.25 + 0.1 * Math.sin(offset * 1.3 + y * 0.05); ctx.strokeStyle = `rgba(168,146,122,${a})`; ctx.lineWidth = 0.6; ctx.stroke(); } for (let x = 0; x < W; x += spacing * 2) { for (let y = 0; y < H; y += spacing * 2) { ctx.beginPath(); ctx.arc(x, y, 1.2, 0, Math.PI * 2); const a = 0.2 + 0.15 * Math.sin(offset * 2 + x * 0.03 + y * 0.03); ctx.fillStyle = `rgba(201,169,110,${a})`; ctx.fill(); } } requestAnimationFrame(animateWeave); } animateWeave(); // ── Copyright year ───────────────────────────────────────────── document.getElementById('copy-year').textContent = new Date().getFullYear(); function handleSubmit(e) { e.preventDefault(); const form = document.getElementById('notifyForm'); const msg = document.getElementById('successMsg'); form.style.opacity = '0'; form.style.transform = 'translateY(-8px)'; form.style.transition = 'all 0.4s ease'; setTimeout(() => { form.style.display = 'none'; msg.style.display = 'block'; msg.style.animation = 'fadeUp 0.8s ease forwards'; }, 400); }