// ============================================================
// Tribeca Lisboa — RESPONSIVE sections (bilingual EN/PT)
// Content selects language via LangContext + tt(). Fixed product
// labels (More than a festival / What's new / Live & Soon /
// From the feed) stay English via FIX().
// ============================================================
const { useState: useStateR } = React;
const useCtx = React.useContext;
const R_TABS = ['all', 'film', 'podcasts', 'talks', 'vibes', 'nightlive', 'immersive', 'awards', 'industry'];
// event/news titles → EN fallback helper
const evTitle = (lang, ev) => tt(lang, ev.titleEn || ev.title, ev.title);
// ---- Hero ---------------------------------------------------
function RHero() {
const lang = useCtx(LangContext);
return (
{tt(lang, '14-21 June • LISBON', '14-21 junho • LISBOA')}
{tt(lang, 'The European hub for storytelling', 'O hub europeu de storytelling')}
{tt(lang, 'Where stories become culture.', 'Onde as histórias se transformam em cultura.')}
{}}>{tt(lang, 'Learn more', 'Saber mais')}
);
}
// ---- More than a festival -----------------------------------
function RMoreThanFestival() {
const lang = useCtx(LangContext);
return (
More than a festival
{tt(lang, 'A year-round cultural platform', 'Uma plataforma cultural durante todo o ano')}
{tt(lang,
'A European platform for contemporary storytelling where culture, entertainment, creativity and talent meet to explore the future of stories and culture.',
'Uma plataforma europeia de storytelling contemporâneo onde cultura, entretenimento, criatividade e talento se cruzam para explorar o futuro das histórias e da cultura.')}
{tt(lang, 'discover more', 'descobrir mais')}
);
}
// ---- Event card + tabs + carousel ---------------------------
function REventCard({ ev }) {
const lang = useCtx(LangContext);
const c = CAT[ev.cat] || CAT.film;
return (
{ location.href = urlFor('event', ev.id); }}>
{evTitle(lang, ev)}
{ev.date}
{ev.venue}
{tt(lang, 'get tickets', 'comprar bilhetes')}
{tt(lang, 'see more +', 'ver mais +')}
);
}
function RCategoryTabs({ active, onChange }) {
return (
{R_TABS.map((t) => {
const sel = active === t;
const c = CAT[t];
const bg = sel ? t === 'all' ? '#fff' : c.bg : 'transparent';
const border = sel ? t === 'all' ? '#fff' : c.bg : 'var(--fg-3)';
const markVariant = sel ? t === 'all' ? 'black' : 'hl' : 'grey';
return (