Is there a way to replace a color on a card with another color from the palette via the Listener?
The "image.map[]" function can be used to re-palette any Image interface, including card backgrounds. The simplest way to call it is to feed it a dictionary where the keys are the original pattern indices and the values are the replacement pattern indices:
card.image.map[colors.red dict colors.green]
Note that this operation modifies the image in-place.