// Shared atoms: Logo, Nav, Footer, small reused UI
const { useState, useEffect, useMemo, useRef } = React;
// --- LOGO ---------------------------------------------------------------
function AtgLogo({ height = 28, color = 'currentColor' }) {
// Hand-condensed glyph from media/atg-logo.svg (white→currentColor)
return (
);
}
// --- NAV ---------------------------------------------------------------
function Nav({ route, go, locale, setLocale }) {
const items = [
['projects', 'Projects'],
['sectors', 'Sectors'],
['services', 'Services'],
['capability', 'Capability'],
['about', 'About'],
['awards', 'Awards'],
['contact', 'Contact'],
];
// On hero pages we let the nav float dark; everything else, light.
const dark = route === 'home';
return (
);
}
// --- FOOTER ------------------------------------------------------------
function Footer({ go }) {
return (
);
}
// --- PROJECT CARD ------------------------------------------------------
function ProjectCard({ p, go, index, big }) {
const sectorName = (window.ATG.SECTORS.find(s => s.id === p.sector) || {}).name || '';
return (
{e.preventDefault(); go('project:' + p.id);}}>
{lead}
} {side}Sector, project type, location, brief, optional drawings or BOQ — that’s all we need to start a conversation. Replies typically within one working day.