// site-tickets-submit.jsx — Tickets & venues + Submit a film form. function Tickets({ navigate }) { const d = useSite(); const page = d.festival.ticketsPage || {}; return (
{page.eyebrow || ("Box Office \u00b7 " + d.festival.year)}

{page.heading || "Tickets"}

{page.body || "Eight nights of student short cinema. Most screenings are free with online RSVP; the closing Paper Bird Awards night at SCALE is ticketed."}

{/* tiers */}
Passes & tickets
{d.tickets.map((t, i) => { const free = String(t.price) === "0"; const feature = i === 2; return (
0{i + 1} {feature && Best value}
{free ? "Free" : "£" + t.price}
{t.name}

{t.desc}

); })}
{/* venues */}
Venues

Where it happens.

{d.venues.map((v) => (
{v.name}
{v.address}
{v.capacity > 0 &&
Capacity {v.capacity}
}
))}
{/* info strip */}
{[["Access", "All venues are step-free. Captioned and relaxed screenings are marked in the programme."], ["Box office", "Opens one hour before the first daily screening. Card only at the door."], ["Students", "LJMU students attend free with valid ID — reserve seats online in advance."]].map(([h, b]) => (
{h}

{b}

))}
{/* Schedule strip */} {(d.schedule || []).length > 0 && (
Schedule

Eight nights.

{d.schedule.map((s) => (
{s.date}
{s.time}
{s.title}
{s.venue}
{s.strand}
))}
)}
); } // ── Submit ─────────────────────────────────────────────────────────────────── function renderSubmissionBody(text) { if (!text) return null; return text.split(/\n\n+/).map((para, i) => { const lines = para.split("\n").filter(l => l.trim()); if (!lines.length) return null; const isList = lines.every(l => /^[-•]/.test(l.trim())); if (isList) return ( ); return (

{lines.map((line, j) => ( {line}{j < lines.length - 1 &&
}
))}

); }); } function Submit({ navigate }) { const d = useSite(); const sub = d.festival.submissions || {}; const sections = sub.sections || []; const box = sub.box || {}; const submitOpen = box.submitOpen !== false; return ( {/* Dark hero */}
{sub.heroEyebrow || ("Submissions \u00b7 " + d.festival.year)}

{sub.heroTitle || "Submit a film."}

{sub.heroLead || "We accept short films from students at film schools and universities worldwide."}

{/* Left: editorial content sections */}
{sections.map((sec, i) => (
{sec.title}

{sec.title}.

{renderSubmissionBody(sec.body)}
))}
{/* Right: sticky submission box */}
); } Object.assign(window, { Tickets, Submit });