/* Studio 76 — The Studio. Fully interactive centrepiece. */ function formatINR(n) { n = Math.round(n / 100) * 100; const s = String(n); const last3 = s.slice(-3); const rest = s.slice(0, -3); const grouped = rest.replace(/\B(?=(\d{2})+(?!\d))/g, ','); return '₹' + (rest ? grouped + ',' : '') + last3; } function quoteRange(base) { return [formatINR(base * 0.9), formatINR(base * 1.12)]; } function Chip({ active, children, onClick }) { return ( ); } function QuoteCard({ kind, sub, base, accent, dark }) { const [lo, hi] = quoteRange(base); return (
{kind}

{sub}

{lo} {hi}

indicative · final quote after your design review

); } function Studio({ accent }) { const TABS = ['Upload', 'Paste a link', 'Describe it']; const [tab, setTab] = React.useState('Upload'); const [img, setImg] = React.useState(null); // dataURL const [url, setUrl] = React.useState(''); const [desc, setDesc] = React.useState(''); const [drag, setDrag] = React.useState(false); const [type, setType] = React.useState('Ring'); const [gold, setGold] = React.useState('18k'); const [presence, setPresence] = React.useState('Statement'); const [reserving, setReserving] = React.useState(false); const [reserved, setReserved] = React.useState(false); const fileRef = React.useRef(null); const readFile = (file) => { if (!file || !file.type.startsWith('image/')) return; const r = new FileReader(); r.onload = (e) => setImg(e.target.result); r.readAsDataURL(file); }; const onDrop = (e) => { e.preventDefault(); setDrag(false); readFile(e.dataTransfer.files[0]); }; const p = STUDIO_PRICING[type]; const m = GOLD_MULT[gold] * PRESENCE_MULT[presence]; const luxeBase = p.luxe * m; const deluxeBase = p.deluxe * m; const hasInput = (tab === 'Upload' && img) || (tab === 'Paste a link' && url.trim()) || (tab === 'Describe it' && desc.trim()); const reset = () => { setReserved(false); setReserving(false); }; return (
The Studio

Start the piece you’ve been carrying around.

Bring the image you love. Shape it. See both ways to own it, side by side — then reserve a stylist to make it real.

{/* LEFT — input + config */}
{/* tabs */}
{TABS.map(t => ( ))}
{/* input area */} {tab === 'Upload' && (
{e.preventDefault();setDrag(true);}} onDragLeave={()=>setDrag(false)} onDrop={onDrop} onClick={()=>fileRef.current && fileRef.current.click()} style={{ border:`1.5px dashed ${drag ? 'var(--gold-light)':'rgba(255,255,255,.28)'}`, borderRadius:14, padding: img ? 0 : '40px 24px', cursor:'pointer', background: drag ? 'rgba(232,201,122,.08)' : 'rgba(255,255,255,.03)', transition:'.25s', textAlign:'center', overflow:'hidden', position:'relative', minHeight: 220, display:'flex', alignItems:'center', justifyContent:'center', }}> readFile(e.target.files[0])} /> {img ? (
Your inspiration Your pin → real
) : (

Drop your inspiration here

or browse — a photo, costume piece, screenshot

)}
)} {tab === 'Paste a link' && (
setUrl(e.target.value)} placeholder="https://pin.it/… or image link" style={{width:'100%', padding:'16px 18px', borderRadius:12, border:'1.5px solid rgba(255,255,255,.2)', background:'rgba(255,255,255,.04)', color:'var(--on-ink)', fontSize:16, fontFamily:'var(--font-body)'}} />

{url.trim() ? '✓ Link received — we’ll pull the image in your design review.' : 'We accept Pinterest, Instagram saves, or any image URL.'}

)} {tab === 'Describe it' && (