# MTG Python Deckbuilder v4.2.1 ## Summary Patch release fixing two issues introduced in v4.2.0: budget/price styling missing from DockerHub image builds, and a crash in the CI similarity-cache workflow when rebuilding the price cache. ## Fixed ### Budget/price CSS missing from DockerHub builds All budget badges, price chart bars (category stacked bar + histogram), card price overlays, stale price indicators, and pickups page styles were invisible when pulling the image from DockerHub. The root cause: custom CSS was written into `styles.css` (the compiled Tailwind output) rather than `tailwind.css` (the source). The Dockerfile deletes and regenerates `styles.css` from `tailwind.css` during the image build, silently wiping all custom classes. All budget/price CSS has been moved into `tailwind.css` so it survives every Docker build. Affected elements: - `.budget-badge` / `.budget-badge--under/soft_exceeded/hard_exceeded` - `.tier-badge` / `.tier-badge--s/m/l` - `.card-price-overlay`, `.card-price-inline`, `.card-price-tip` - `.card-tile.over-budget`, `.stack-card.over-budget`, `.list-row.over-budget` - `.budget-price-bar`, `.budget-review-panel` and all child classes - `.price-cat-*` (stacked category bar) - `.price-hist-*` (histogram bars) - `.stale-price-indicator`, `.stale-price-badge`, `.stale-banner` - `.running-budget-chip`, `.pickups-table` ### Workflow price cache crash The `build-similarity-cache` CI workflow failed with `AttributeError: 'PriceService' object has no attribute '_lazy_ts'`. This attribute is only initialized when `start_lazy_refresh()` is called (which the web app does on startup), but the CI setup script instantiates `PriceService` bare. Added a `hasattr` guard in `_rebuild_cache()` to lazy-initialize `_lazy_ts` on first use.