` +
`
${esc(x.name)} ${esc(x.commodity)}
` +
`
green${boxes(x.green, x.greenCap)}
` +
`
MEN AT WORK` +
x.maw
.map(
(m) => `${m ? esc(m) : '·'}`,
)
.join('') +
`
` +
`
red${boxes(x.red, x.redCap)}
` +
`
siding${boxes(x.track, x.trackCap)}
` +
`
` +
(x.jammed ? 'JAMMED' : x.canFinish ? 'ready' : 'no car spotted') +
`
`,
)
.join('');
// Name AND effect. A hand of names alone tells a player nothing about what they can do.
// Name and status stay on the page; what the card DOES is reference detail, so it hovers.
// The crosshatch says "not yet playable"; it used to be a `not yet` caption, which had to be read
// rather than seen. The tooltip still explains WHY, which a hatch cannot.
const cardRow = (name: string, why: string, playable: boolean | null): string =>
`