// Apricus — fiche détaillée d'un séjour (pop-up animé) function RetreatModal({ retreat, onClose }) { const D = 'var(--font-display)'; const [shown, setShown] = React.useState(false); React.useEffect(() => { if (retreat) { const id = setTimeout(() => setShown(true), 20); const onKey = e => { if (e.key === 'Escape') onClose(); }; window.addEventListener('keydown', onKey); const prev = document.body.style.overflow; document.body.style.overflow = 'hidden'; return () => { clearTimeout(id); window.removeEventListener('keydown', onKey); document.body.style.overflow = prev; }; } else { setShown(false); } }, [retreat]); if (!retreat) return null; const r = retreat; return (
e.stopPropagation()} style={{ width: 'min(940px, 100%)', maxHeight: '92vh', overflowY: 'auto', background: 'var(--apr-linen)', borderRadius: 26, boxShadow: 'var(--shadow-lg)', position: 'relative', transform: shown ? 'scale(1) translateY(0)' : 'scale(0.93) translateY(16px)', opacity: shown ? 1 : 0, transition: 'transform .44s var(--ease-soft), opacity .3s var(--ease-out)' }}> {/* ---- héros ---- */}
Photographie · placeholder
{r.dates}
{r.place} · séjour entre femmes

{r.name.split(' ')[0]} {r.name.split(' ').slice(1).join(' ')}

{r.place}
{(Array.isArray(r.long) ? r.long : [r.long]).map((para, i) => (

{para}

))} {/* ---- galerie ---- */}
{r.gallery.map((g, i) => (
photo
))}
{/* ---- programme + inclus ---- */}

Au programme

{r.programme.map(([ic, txt], i) => (
{txt}
))}

Tout compris

{r.inclus.map((txt, i) => (
{txt}
))}
{r.tags.map(t => ( {t} ))}
{/* ---- ce qu'elles en ont pensé ---- */}

Ce qu'elles en ont pensé

{r.avis.map((a, i) => (
{[0, 1, 2, 3, 4].map(s => )}
« {a.quote} »
{a.name}
))}
{/* ---- CTA (séjour passé : pas de réservation, juste la liste d'attente) ---- */}
); } window.RetreatModal = RetreatModal;