{g.players.find((other) => other.id === p.player)?.name}:{' '} {p.answer ? 'Yes' : 'No'} to “ {planClaimText(p.claim, name)}” {p.released ? ' · No longer possible; released' : ''}.
Preparation · private
{b.compliantPreparation.waitingForIncome && (Revival income must resolve before this plan can be funded.
)} {b.compliantPreparation.actions.map((action, index) => ({index + 1}.{' '} {action.mode === 'special' ? `Spend Karama and discard ${(action.cards as string[]).map(name).join(', ')} to gain ${(action.cards as string[]).length * 3} spice` : typeof action.leader === 'string' ? `Play Ghola to revive ${action.leader === 'kwisatz' ? 'Kwisatz Haderach' : name(action.leader)}` : `Play Ghola to revive ${Number(action.amount)} force${Number(action.amount) === 1 ? '' : 's'}${Number(action.elite) ? `, including ${Number(action.elite)} elite` : ''}`} .
))}{b.compliantPreparation.actions.length ? 'The next card is still in your hand. Complete the preparation and any response before reviewing and sealing the plan.' : 'The revival is complete. Resolve its income response before reviewing and sealing the plan.'}{' '} Other legal ways to keep your answer remain available.
{b.compliantPreparation.actions[0] && ( )}
Dial {plan.dial} · Support {plan.support}
{!!plan.allyPayment && ` · CHOAM pays ${plan.allyPayment}`}
Leader: {name(plan.leader)}
Weapon: {name(plan.weapon)}
Defense: {name(plan.defense)}
Kwisatz: {plan.kwisatz ? 'Included' : 'Not included'}
These choices satisfy your current commitments. Review and change the other elements before sealing your plan.