// Case study page (Tattu = hero model) + lightbox function PageCase({ go, id, showMaterials }) { const list = window.ATG.PROJECTS; const idx = list.findIndex(p => p.id === id); const p = idx >= 0 ? list[idx] : list[0]; const prev = list[(idx - 1 + list.length) % list.length]; const next = list[(idx + 1) % list.length]; const [lb, setLb] = useState(null); return (
{/* HERO */}
{p.name
{e.preventDefault(); go('projects');}} style={{ color: '#C8C1B0', borderBottom: '1px solid currentColor' }}>Projects {p.sectorName}

{p.name} {p.tagline}

{/* METADATA BAR */}
{[ ['Sector', p.sectorName], ['Location', p.location], ['Scope', p.scope], ['Size', p.size], ['Year', p.year], ['Client', p.client], ].map(([k,v]) => (
{k}
{v}
))}
{/* NARRATIVE */}
01Brief

What the operator asked us to deliver.

{p.brief}


02Concept

How we translated brief into place.

{p.concept}

{/* IMAGE LARGE 1 */}
setLb(p.img)}> {p.name

{p.credit}

01 / 03
{/* MATERIALS */} {showMaterials !== false && (
03Materials

Specified, sourced, and where possible made in-house.

Marked items below were fabricated in our 30,000 sq ft joinery facility.

{p.materials.map((m, i) => { const inhouse = i % 3 !== 1; // illustrative flag return (
{String(i+1).padStart(2,'0')} {m} {inhouse ? 'In-house joinery' : 'Specified · sourced'}
); })}
)} {/* PROCESS */}
04Process

In-house design, joinery and MEP, on one programme.

{p.process}

{[ { lbl: 'Design coordination', v: 'In-house' }, { lbl: 'Joinery fabrication', v: '30,000 sq ft' }, { lbl: 'MEP', v: 'In-house team' }, ].map(r => (
{r.lbl}
{r.v}
))}
{/* GALLERY */}
05Gallery
setLb(p.gallery[0] || p.img)}>
setLb(p.gallery[1] || p.img)}>
{p.gallery[2] && (
setLb(p.gallery[2])}>
)}

{p.credit}

{/* OUTCOME */}
06Outcome

{p.outcome}


Build a similar project

Tell us what you’re opening.

{/* PREV / NEXT */}
{e.preventDefault(); go('project:'+prev.id);}} style={{ textDecoration: 'none', color: 'inherit' }}>
← Previous
{prev.name}
{prev.name}
{prev.location}
{e.preventDefault(); go('project:'+next.id);}} style={{ textDecoration: 'none', color: 'inherit', textAlign: 'right' }}>
Next →
{next.name}
{next.location}
{next.name}
{lb && (
setLb(null)} style={{ position: 'fixed', inset: 0, background: 'rgba(0,0,0,.92)', zIndex: 80, display: 'flex', alignItems: 'center', justifyContent: 'center', padding: 24, cursor: 'zoom-out' }}>
)}
); } Object.assign(window, { PageCase });