/* 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 */}
onNav('signature')} style={{ position: 'absolute', top: 'clamp(6rem,12vh,8rem)', left: 'clamp(1.5rem,5vw,4rem)', zIndex: 3, background: 'none', border: 'none', cursor: 'pointer', display: 'inline-flex', alignItems: 'center', gap: 12, fontFamily: C('font-sans'), fontSize: 11, letterSpacing: '0.26em', textTransform: 'uppercase', color: C('ink-inverse-secondary') }}
onMouseEnter={(e) => { e.currentTarget.style.color = C('champagne'); }}
onMouseLeave={(e) => { e.currentTarget.style.color = C('ink-inverse-secondary'); }}>
{t('pd.back')}
{p.prov}
{p.edition && <>{p.edition} >}
{p.name}
{/* the work, floating, with halo + contact shadow */}
{p.image &&
}
{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
?
: (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')}
onNav('signature')} style={{ background: 'none', border: 'none', cursor: 'pointer', fontFamily: C('font-sans'), fontSize: 11, letterSpacing: '0.24em', textTransform: 'uppercase', color: C('ink-tertiary'), display: 'inline-flex', alignItems: 'center', gap: 10 }}
onMouseEnter={(e) => { e.currentTarget.style.color = C('accent'); }}
onMouseLeave={(e) => { e.currentTarget.style.color = C('ink-tertiary'); }}>
{t('pd.back')}
{related.map((r) => (
onPiece(msPiece(r.name, r))} style={{ cursor: 'pointer' }}>
))}
);
}
Object.assign(window, { PieceScreen });