// Home page sections for Silverio Estaleiro
const { useState, useEffect, useRef } = React;
// ---------- HERO PROJECT CAROUSEL (Toyota-style) ----------
const HERO_PROJECTS_PT = [
{ code: "SE/CAT-44", name: "Catamarã 44", type: "One-off · Compósito", spec: ["LOA 13.4 m", "Casco infusão epóxi", "Em construção · 2026"], cta: "Acompanhar obra", img: "assets/img-catamara-mar.jpg" },
{ code: "SE/HS-38", name: "HS 38", type: "Cruiser one-off · Compósito", spec: ["LOA 11.6 m", "Mobiliário 100% compósito", "Entregue · 2025"], cta: "Ver projeto", img: "assets/img-galpao-cat.jpg" },
{ code: "SE/KING-33", name: "Kingfish 33", type: "Lancha sport · Refit técnico", spec: ["LOA 10.0 m", "Refit completo · 11 meses", "Entregue · 2024"], cta: "Ver refit", img: "assets/img-bow-vinho.jpg" },
{ code: "SE/CAT-52", name: "Catamarã 52", type: "Charter · Refit & transformação", spec: ["LOA 15.8 m", "Reconfiguração ergonômica", "Em fase final · 2026"], cta: "Acompanhar", img: "assets/img-lancamento-drone.jpg" }];
const HERO_PROJECTS_EN = [
{ code: "SE/CAT-44", name: "Catamaran 44", type: "One-off · Composite", spec: ["LOA 13.4 m", "Epoxy infusion hull", "In build · 2026"], cta: "Follow the build", img: "assets/img-catamara-mar.jpg" },
{ code: "SE/HS-38", name: "HS 38", type: "One-off cruiser · Composite", spec: ["LOA 11.6 m", "100% composite furniture", "Delivered · 2025"], cta: "View project", img: "assets/img-galpao-cat.jpg" },
{ code: "SE/KING-33", name: "Kingfish 33", type: "Sport boat · Technical refit", spec: ["LOA 10.0 m", "Full refit · 11 months", "Delivered · 2024"], cta: "View refit", img: "assets/img-bow-vinho.jpg" },
{ code: "SE/CAT-52", name: "Catamaran 52", type: "Charter · Refit & transformation", spec: ["LOA 15.8 m", "Ergonomic reconfiguration", "Final phase · 2026"], cta: "Follow", img: "assets/img-lancamento-drone.jpg" }];
function HeroCarousel({ layout, onContact }) {
const { t, lang } = useI18n();
const projects = lang === 'pt' ? HERO_PROJECTS_PT : HERO_PROJECTS_EN;
const [i, setI] = useState(0);
const [auto, setAuto] = useState(true);
useEffect(() => {
if (!auto) return;
const id = setInterval(() => setI((x) => (x + 1) % projects.length), 6500);
return () => clearInterval(id);
}, [auto, projects.length]);
const p = projects[i];
if (layout === 'split') {
return (
{t.hero.eyebrow}
{t.hero.title}
{t.hero.sub}
{projects.map((pj, idx) =>
)}
);
}
// full-bleed video carousel
return (
{t.hero.eyebrow}
{t.hero.title}
{t.hero.sub}
);
}
// ---------- PILLARS ----------
function Pillars() {
const { t } = useI18n();
return (
{t.pillars.items.map((it, i) => {
const imgs = [
{ src: "assets/img-projeto1.png", meta: "PROJETO\u00a0\u00b7\u00a0ENGENHARIA" },
{ src: "assets/img-reuniao.png", meta: "GEST\u00c3O\u00a0\u00b7\u00a0OBRA" },
{ src: "assets/img-interior-cozinha.jpg", meta: "ACABAMENTO\u00a0\u00b7\u00a0INTERIOR" }];
const img = imgs[i] || imgs[0];
return (
{it.idx} / 03
{it.label}
{it.body}
);
})}
);
}
// ---------- SERVICES ----------
function Services() {
const { t } = useI18n();
return (
);
}
// ---------- DIFFERENTIATORS ----------
function Diff() {
const { t } = useI18n();
return (
{t.diff.list.map((d, i) =>
{d.n}
{d.t}
{d.b}
)}
);
}
// ---------- PROJECTS GRID ----------
const PROJECT_LIST_PT = [
{ code: "P/01", name: "Lady Alice", type: "Restauro e transforma\u00e7\u00e3o", year: "2026", tag: "EM OBRA", ratio: "4/5", img: "assets/img-lady1.jpeg" },
{ code: "P/02", name: "Morenita", type: "Constru\u00e7\u00e3o one-off", year: "2025", tag: "ENTREGUE", ratio: "16/10", img: "assets/img-morenita5.jpeg" },
{ code: "P/03", name: "Minotauro", type: "Refit", year: "2024", tag: "ENTREGUE", ratio: "4/5", img: "assets/img-minotauro1.jpeg" },
{ code: "P/04", name: "Raku D'Fiesta", type: "Constru\u00e7\u00e3o one-off", year: "2026", tag: "EM OBRA", ratio: "16/10", img: "assets/img-lancamento-drone.jpg" },
{ code: "P/05", name: "Entusiasmo", type: "Constru\u00e7\u00e3o one-off", year: "2025", tag: "ENTREGUE", ratio: "4/5", img: "assets/img-entusiasmo.jpeg" },
{ code: "P/06", name: "San Valentin", type: "Refit", year: "2024", tag: "ENTREGUE", ratio: "16/10", img: "assets/img-sanval.jpeg" }];
const PROJECT_LIST_EN = [
{ code: "P/01", name: "Catamaran 44", type: "One-off construction", year: "2026", tag: "IN BUILD", ratio: "4/5", img: "assets/img-lady1.jpeg" },
{ code: "P/02", name: "HS 38", type: "Construction \u00b7 delivered", year: "2025", tag: "DELIVERED", ratio: "16/10", img: "assets/img-morenita5.jpeg" },
{ code: "P/03", name: "Classic Wine", type: "Technical refit", year: "2024", tag: "DELIVERED", ratio: "4/5", img: "assets/img-minotauro1.jpeg" },
{ code: "P/04", name: "Catamaran 52", type: "Refit & transformation", year: "2026", tag: "IN BUILD", ratio: "16/10", img: "assets/img-lancamento-drone.jpg" },
{ code: "P/05", name: "Day Cruiser", type: "Finish & detailing", year: "2025", tag: "DELIVERED", ratio: "4/5", img: "assets/img-entusiasmo.jpeg" },
{ code: "P/06", name: "San Valentin", type: "Complete refit", year: "2024", tag: "DELIVERED", ratio: "16/10", img: "assets/img-sanval.jpeg" }];
// ---------- PROJECT GALLERIES (lightbox) ----------
const GALLERIES = {
"P/01": [
"assets/img-lady0.jpeg", "assets/img-lady01.jpeg",
"assets/img-lady1.jpeg", "assets/img-lady2.jpeg", "assets/img-lady3.jpeg",
"assets/img-lady5.jpeg", "assets/img-lady6.jpeg", "assets/img-lady7.jpeg",
"assets/img-lady8.jpeg", "assets/img-lady9.jpeg",
"assets/img-lady91.jpeg", "assets/img-lady92.jpeg", "assets/img-lady93.jpeg",
],
"P/02": [
"assets/img-morenita-topo.png",
"assets/img-morenita0.jpeg", "assets/img-morenita1.jpeg", "assets/img-morenita2.jpeg",
"assets/img-morenita3.jpeg", "assets/img-morenita4.jpeg", "assets/img-morenita5.jpeg",
"assets/img-morenita6.jpeg", "assets/img-morenita7.jpeg", "assets/img-morenita8.jpeg",
"assets/img-morenita9.jpeg", "assets/img-morenita91.jpeg",
],
"P/03": [
"assets/img-minotauro.jpeg", "assets/img-minotauro1.jpeg",
"assets/img-minotauro2.jpeg", "assets/img-minotauro3.jpeg",
"assets/img-minotauro4.jpeg", "assets/img-minotauro5.jpeg",
],
"P/04": [
"assets/img-raku-render.jpeg", "assets/img-raku-sol.jpeg",
"assets/img-raku-int.jpeg", "assets/img-raku-galpao.jpeg", "assets/img-raku.jpg",
"assets/img-raku1.jpg", "assets/img-raku2.jpg", "assets/img-raku3.jpeg",
"assets/img-raku4.jpeg", "assets/img-raku5.jpeg", "assets/img-raku6.jpeg",
"assets/img-raku7.jpeg", "assets/img-raku8.jpeg", "assets/img-raku9.jpeg",
"assets/img-raku91.jpeg", "assets/img-raku92.jpeg", "assets/img-raku93.jpeg",
],
"P/05": [
"assets/img-entusiasmo.jpeg",
"assets/img-entusiasmo1.jpeg", "assets/img-entusiasmo2.jpeg",
"assets/img-entusiasmo3.jpeg", "assets/img-entusiasmo4.jpeg",
"assets/img-entusiasmo5.jpeg", "assets/img-entusiasmo6.jpeg",
"assets/img-entusiasmo7.jpeg",
],
"P/06": [
"assets/img-sanval.jpeg",
"assets/img-sanval1.jpeg", "assets/img-sanval2.jpeg",
"assets/img-sanval3.jpeg", "assets/img-sanval4.jpeg",
"assets/img-sanval5.jpeg",
],
};
function Lightbox({ project, onClose }) {
const [i, setI] = useState(0);
const imgs = project ? (GALLERIES[project.code] || [project.img]) : [];
const open = !!project;
useEffect(() => { setI(0); }, [project && project.code]);
useEffect(() => {
if (!open) return;
const onKey = (e) => {
if (e.key === 'Escape') onClose();
else if (e.key === 'ArrowRight') setI((x) => (x + 1) % imgs.length);
else if (e.key === 'ArrowLeft') setI((x) => (x - 1 + imgs.length) % imgs.length);
};
window.addEventListener('keydown', onKey);
document.body.style.overflow = 'hidden';
return () => {
window.removeEventListener('keydown', onKey);
document.body.style.overflow = '';
};
}, [open, imgs.length]);
if (!project) return null;
return (
e.stopPropagation()}>
{project.code} · {project.year}
{project.name}
{String(i + 1).padStart(2, '0')} / {String(imgs.length).padStart(2, '0')}
e.stopPropagation()}>

{imgs.length > 1 && (
<>
>
)}
{imgs.length > 1 && (
e.stopPropagation()}>
{imgs.map((src, idx) => (
))}
)}
);
}
function Projects() {
const { t, lang } = useI18n();
const list = lang === 'pt' ? PROJECT_LIST_PT : PROJECT_LIST_EN;
const [open, setOpen] = useState(null);
return (
<>
setOpen(null)} />
>);
}
// ---------- B2B ----------
function B2B() {
const { t } = useI18n();
return (
{t.b2b.eyebrow}
{t.b2b.title}
{t.b2b.sub}
{t.b2b.list.map((b, i) =>
{b.code}
{b.t}
{b.b}
)}
);
}
// ---------- ABOUT ----------
function About() {
const { t } = useI18n();
return (
);
}
// ---------- CTA ----------
function FinalCTA({ onContact, onVisit }) {
const { t } = useI18n();
return (
{t.cta.eyebrow}
{t.cta.title}
{t.cta.sub}
RESPOSTA / ATÉ 48H
WHATSAPP · +55 47 99120 8818
silvana.silverio@silverioestaleiro.com.br
);
}
Object.assign(window, { HeroCarousel, Pillars, Services, Diff, Projects, B2B, About, FinalCTA });