Same four blocks and the same words as the live card, rebuilt so they survive an inbox. Every one of these is tables and inline styles at 600px, because the hosted card's flexbox, SVG logos and rounded pills are three things Outlook does not have.
What differs between them is how much container the card has: none, one, or one per block.
The Brief, with the scarcity in the finding and claim on the button. The counter counts their slots, not our calendar: 0 of 3 open on organic, 0 local advertisers on paid. Every number is a restatement of data the analysis already produced.
The lead names the three businesses holding the map spots when the names fit in a sentence, and falls back to "three competitors" when they don't. Gloucester falls back, because one of the three has commas in its Google Business name and a comma-separated list of it stops parsing. Left is what ships today; right is the same card with hand-written short forms.
Three sources of scarcity and the word claim, all built on The Brief so only the pressure changes. Open the scarcity comparison →
Outlook turns images off by default, so this is the first thing a good share of the list actually sees. All three hold, because nothing load-bearing is inside an image.
None of this is wired into the skill.
cards.py still renders the hosted browser card, which is the
right thing for a link. If the card is going to be the body of the email
rather than a link inside it, that's a second renderer, and one of these
three is what it should render.