/* Maison Silya — Piece (the work itself). A gallery monograph: the piece is unveiled in a dark room, spoken of, examined in the hand, then offered — by appointment, never by price. No commerce, no size pickers: one quiet invitation to enquire. */ function PieceScreen({ piece, onNav, onPiece }) { const lang = window.__MS_LANG || 'en'; const L = (fr, en) => (lang === 'fr' ? fr : en); const p = piece || msPiece('Monolith I', { name: 'Monolith I', prov: t('p.prov.nepal'), detail: '300 × 400 cm', tone: 'stone-300', image: 'media/monolith-i.jpg' }); const enquire = () => { window.__MS_ORDER = { kind: 'enquiry', piece: p.name, size: p.detail }; onNav('contact'); }; const specs = [ [t('sp.materials'), p.materials || t('pd.materials')], [t('sp.dimensions'), L('Sur mesure — à vos dimensions', 'Made to order — to your dimensions')], [t('sp.pile'), p.pile || t('pc.pile.monolith')], [t('sp.knots'), p.knots || '200 / in²'], [t('sp.origin'), t('pd.origin')], [t('sp.edition'), p.edition || t('pd.open')], [t('pd.leadtime'), t('pd.leadtime_v')], ]; const allRelated = [ { name: 'Monolith I', prov: t('p.prov.nepal'), detail: '300 × 400 cm', tone: 'stone-300', image: 'media/monolith-i.jpg' }, { name: 'Sediment II', prov: t('p.prov.marrakech'), detail: '250 × 350 cm', tone: 'stone-200', image: 'media/sediment-ii.jpg' }, { name: 'Travertine', prov: t('p.prov.nepal'), detail: '270 × 360 cm', tone: 'travertine', image: 'media/travertine.jpg' }, { name: 'Plaster Field', prov: t('p.prov.marrakech'), detail: '240 × 300 cm', tone: 'champagne', image: 'media/plaster-field.jpg' }, ]; const related = allRelated.filter((r) => r.name !== p.name).slice(0, 3); return (
{/* ── I · The Unveiling — the piece, spotlit in a private gallery ── */}
{/* overhead key light + floor pooling */}
{/* back to collection */}
{p.prov} {p.edition && <>{p.edition}}

{p.name}

{/* the work, floating, with halo + contact shadow */}
{p.image && {p.name}}

{p.desc || t('pd.desc')}

{/* ── II · The detail — the evidence of the hand, examined close ── */}
{t('pd.detail_k')}
{(p.details && p.details.length === 3 ? p.details.map((img, i) => ({ img, label: [L('La matière', 'The matter'), L('Le motif', 'The pattern'), L('La lisière', 'The selvedge')][i] })) : [ { size: '300%', pos: '16% 20%', label: t('pd.d1') }, { size: '320%', pos: '82% 52%', label: t('pd.d2') }, { size: '300%', pos: '48% 86%', label: t('pd.d3') }, ] ).map((z, i) => (
{z.img ? {z.label} : (p.image ?
:
{z.label}
)}
{z.label}
))}
{/* ── III · The specifications & the invitation ── */}
{L('La pièce, en détail', 'The piece, in detail')}
{specs.map(([k, v], i) => (
{k}
{v}
))}

{L('Une pièce, une conversation', 'One piece, one conversation')}

{L('Chaque pièce est nouée à la commande, façonnée pour votre lumière et le plan de votre projet. Elle se découvre sur rendez-vous — à Paris, et partout où l’architecture l’appelle.', 'Each piece is knotted to order, made for your light and the plan of your project. It is shown by appointment — in Paris, and wherever the architecture calls for it.')}

{t('pd.enquire')}

{L('Réponse de l’atelier sous 48 h', 'A reply from the atelier within 48 hours')}

{/* ── IV · The architect's note ── */}
{t('pd.note_k')}

{t('pd.note')}

{t('pd.note_by')}
{/* ── V · Pieces of the same hand ── */}

{t('pd.related')}

{related.map((r) => (
onPiece(msPiece(r.name, r))} style={{ cursor: 'pointer' }}>
{r.prov}

{r.name}

))}
); } Object.assign(window, { PieceScreen });