fix: blank.mjs — measure wrapped description text to position BUY button below it
Use text.box() to get actual wrapped height instead of hardcoded y=90,
so the button never overlaps the prose on narrow screens.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>