# moneycanbuy.fun — money movement cards

Delivered: 16 portrait cards (1080 × 1350), five story cards (1080 × 1920), a 21-image contact sheet (1784 × 1472), and a 16-page PDF in card order. All PNGs are lossless, explicitly tagged sRGB.

The diagrams were drawn in SVG, using the supplied Quicksand font, brand mark, original IMD coin and NFT PNGs. Site panels, bond rows, prediction tiles, vote bars, Claim buttons, Burn panel and trophy were rebuilt from the supplied screenshots. Every amount comes from `infographics/README.md`.

## Sources and rebuild

`artifacts/source/` contains the editable HTML, final fitted SVGs, build/render/review scripts, manifest and case evidence. The same scripts and all 21 final SVGs are also delivered in the repository's `infographic-source/` directory. Images and the font are embedded in the final SVGs, so those files can be opened offline.

Requirements: Python 3, Node with built-in WebSocket support, and headless Chromium. From the repository root:

```sh
python3 infographic-source/build.py
CHROMIUM_PATH=chromium node infographic-source/render.mjs
python3 infographic-source/review.py
```

Set `CHROMIUM_PATH` to an installed Chromium executable if it has another name. Rendering uses local files and embedded assets. No package installation or network is needed.

## Self-check

- 21/21 card variants pass; zero missing cases are recorded in `check.json`.
- PNG signatures, dimensions, CRCs, decompression and sRGB chunks pass. The PDF has 16 pages.
- All measured elements stay within the 64 px margins. Text collision, minimum font size and line count checks pass.
- Headlines use 64 px; labels 32 px or larger; footnotes 24 px; footers 28 px. Long one-line headings use SVG `textLength` to fit the available width.
- Minimum checked text contrast: 4.541:1.
- Card 7 payout rows each span 952 px; card 13 allocations are proportional. Maximum segment width error: 0.000029 px.
- All original image payloads match their supplied bytes and retain a uniform scale with no crop. All burn flames exceed 56 px of painted height.
- Visible numbers and prohibited terms were checked. Cases were reviewed against section 2 and linked to measured element IDs.

`bbox.json` uses Chromium `getBoundingClientRect` after font loading and fitting. Semantic icons are measured as complete groups; container backgrounds are excluded from content collision checks. Curved paths are sampled along their actual stroke instead of treating their empty bounding rectangle as painted content. The queued proof tile stacks behind the active proof as requested in the storyboard.

Unmet visual requirements: none identified in the self-check and visual review.
