# 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.
