/* === ROAR shared components === */
const { useState, useEffect, useMemo, useRef } = React;
/* --- Logo: redrawn from the 524×156 outlined italic PNG wordmark ---
This is an editorial "roar" lockup in stroked italic script. Inline SVG so it scales.
*/
function RoarLogo({ size = 96, color = 'currentColor', stroke = 1.6 }) {
// Path roughly traces the outlined italic "roar" wordmark (4 stroked letterforms in italic).
// Drawn for legibility at small sizes; not pixel-perfect to the source PNG (which we'd redraw with the client).
return (
);
}
/* Small condensed "R" mark used for favicon-y spots and the footer monogram */
function RoarMark({ size = 32, color = 'currentColor' }) {
return (
);
}
/* --- Nav --- */
function Nav({ route, setRoute, lang, setLang, openEnquiry }) {
const items = [
{ id: 'projects', label: 'Projects' },
{ id: 'sectors', label: 'Sectors' },
{ id: 'studio', label: 'Studio' },
{ id: 'awards', label: 'Awards' },
{ id: 'contact', label: 'Contact' },
];
const labels = {
EN: items,
AR: [
{ id: 'projects', label: 'المشاريع' },
{ id: 'sectors', label: 'القطاعات' },
{ id: 'studio', label: 'الاستوديو' },
{ id: 'awards', label: 'الجوائز' },
{ id: 'contact', label: 'تواصل' },
],
};
return (
);
}
/* --- Footer --- */
function Footer({ setRoute, openEnquiry, lang }) {
return (
);
}
/* --- Project card --- */
function ProjectCard({ p, onClick, big = false }) {
const sector = SECTORS.find(s => s.id === p.sector);
return (
onClick(p)}>