screens
Title, how-to-fight, the intro place card, pause, victory and defeat. Each is a pure function of a small view table.
ui/screens — the cards
Title, how-to-fight, the intro place card, pause, victory and defeat. Each is a pure function of a small view table.
The frame is 1080 x 1440, so every card is ONE column no wider than 800 and the composition runs down the tall axis: a mark, a display line stacked in two rows, a rule, a sentence, then the choices. Nothing is a row of things spanning the width — a headline that fits a monitor does not fit this frame, which is why the display lockups are two lines rather than one.
| card | ground | figure |
|---|---|---|
title | ember bloom, drifting motes | the saint kneeling, looming out of the bottom of the frame |
howto | frosted over the live fight | key caps and mouse diagrams |
intro | none — staging's shot shows through | a place card and SKIP |
pause | frosted over the live fight | — |
victory | quench-blue; the furnace is cold | the saint, cooled |
defeat | blood; desaturated | the Emberward's blade, planted |
The end cards carry the run's real numbers — time in the basin, parries rung,
quenches driven, times you were hit — counted by Screens.component off the
event bus.
Callback ids
Screens.ACTION names every one; Screens.component handles them all. A menu
choice is a whole plate with onClick on it, never an invisible button laid
over a box.
Frosting
scrim() frosts what is behind it, and backdropFilter samples the scene
behind the whole UI stack rather than the card under it. So it appears only on
pause and howto, where seeing the fight behind the card is the point. The
full-bleed cards paint their own opaque ground instead — a scrim on one of
those punches the lit fight straight back through it.
Scoped to this part · feeds back into the world's score.