/* Variation 5 — CINEMATIC FULL-BLEED
Big number takes over. Question is a typographic poster.
Vibe: Vimeo-staff-pick / film title cards. */
function Variation5({ frameW = 1280, frameH = 820 }) {
const { lang, id, setLang } = useRoute();
const t = useT(lang);
const client = useClient(id);
const questions = useMemo(() => makeQuestions(t), [t]);
const total = questions.length;
const wiz = useWizard(id, total, 'v5');
const { state, setAnswer, next, back, start, finish } = wiz;
const stepIdx = state.step;
const isStart = !state.started;
const isDone = state.done;
const onLast = stepIdx === total - 1;
return (
{/* Vignette */}
{/* Top */}
{/* Vertical step rail */}
{state.started && !isDone && (
{questions.map((_, i) => (
))}
)}
{isStart ?
: isDone ?
: 0 ? back : null} />}
);
}
function StartV5({ t, client, onStart }) {
return (
{t.greetingKicker}
{t.greetingTitle(client.name)}
{t.greetingLead}
);
}
function StepV5({ q, t, answers, setAnswer, stepIdx, total, onNext, onBack }) {
return (
{String(stepIdx + 1).padStart(2, '0')}
/{String(total).padStart(2, '0')}
{q.kicker}
{q.title}
{q.lead}
{q.render(answers, setAnswer, onNext)}
{onBack && }
);
}
function DoneV5({ t }) {
return (
{t.done.kicker}
{t.done.title}
{t.done.lead}
{t.done.sub}
);
}
const v5Styles = {
frame: (w, h) => ({
width: w, height: h,
background: 'radial-gradient(ellipse at 30% 30%, oklch(0.24 0.02 45) 0%, var(--ink-bg) 60%)',
color: 'var(--text)',
fontFamily: "'Geist', system-ui, sans-serif",
display: 'flex', flexDirection: 'column', overflow: 'hidden', position: 'relative',
}),
vignette: {
position: 'absolute', inset: 0, pointerEvents: 'none',
background: 'radial-gradient(ellipse at center, transparent 40%, rgba(0,0,0,0.45) 100%)',
},
header: {
display: 'flex', justifyContent: 'space-between', alignItems: 'center',
padding: '28px 56px', position: 'relative', zIndex: 2,
},
rail: {
position: 'absolute', top: 100, right: 56, display: 'flex', flexDirection: 'column', gap: 10,
zIndex: 2,
},
railTick: { width: 24, height: 2, background: 'var(--ink-line)', transition: 'transform .3s, background .3s' },
main: { flex: 1, padding: '20px 80px 40px', display: 'flex', alignItems: 'center', overflowY: 'auto', position: 'relative', zIndex: 1 },
footer: {
display: 'flex', justifyContent: 'space-between',
padding: '20px 56px', color: 'var(--text-3)', position: 'relative', zIndex: 2,
},
center: { width: '100%', maxWidth: 880, margin: '0 auto', textAlign: 'center' },
heroH: { fontSize: 84, lineHeight: 1.02, fontWeight: 400, letterSpacing: '-0.025em' },
stepGrid: {
display: 'grid', gridTemplateColumns: 'auto 1fr', gap: 60,
width: '100%', maxWidth: 1100, margin: '0 auto', alignItems: 'start',
},
bigNum: {
fontFamily: 'Newsreader, Georgia, serif',
fontSize: 200, lineHeight: 0.85, letterSpacing: '-0.04em',
display: 'flex', flexDirection: 'column',
},
h2: { fontSize: 46, lineHeight: 1.08, fontWeight: 400, letterSpacing: '-0.018em', marginTop: 8 },
lead: { fontSize: 19, lineHeight: 1.55, color: 'var(--text-2)', marginTop: 18, maxWidth: 600 },
};
window.Variation5 = Variation5;