// Attractions page with detail modal. window.CJAttractions function CJAttractions() { const D = window.CJDS; const { SectionHeading, AttractionCard, Tabs, Badge, Button } = D; const Icon = window.CJIcon; const data = window.CJ_DATA; const [filter, setFilter] = React.useState('all'); const [active, setActive] = React.useState(null); const filtered = data.attractions.filter((a) => { if (filter === 'all') return true; if (filter === 'little') return /2|4|5/.test(a.ageRange); if (filter === 'big') return /6|8/.test(a.ageRange); return true; }); return (
{filtered.map((a) => ( } onClick={() => setActive(a)} style={{ width: '100%' }} /> ))}
{active && (
setActive(null)} style={{ position: 'fixed', inset: 0, background: 'rgba(16,70,111,0.45)', backdropFilter: 'blur(4px)', display: 'flex', alignItems: 'center', justifyContent: 'center', padding: 24, zIndex: 50 }}>
e.stopPropagation()} style={{ width: 480, maxWidth: '100%', background: 'var(--surface-card)', borderRadius: 'var(--radius-2xl)', overflow: 'hidden', boxShadow: 'var(--shadow-xl)', animation: 'cjPop var(--dur-slow) var(--ease-spring)' }}>

{active.name}

{active.ageRange} Height: {active.heightReq}

{active.description}

Safety rules

    {active.rules.map((r) => (
  • {r}
  • ))}
)}
); } window.CJAttractions = CJAttractions;