# moneycanbuy.fun — cards 1–8

Delivered: eight portrait cards (1080 × 1350), three story variants (1080 × 1920), a labelled contact sheet (1520 × 2208), an eight-page PDF, and two JSON audit reports. PNGs are RGB with an embedded sRGB profile. The PDF embeds the portrait renders in order.

Rebuild all images and reports offline from the repository root:

```sh
python3 src/rebuild.py
```

Source is in src/: eleven canonical SVG frames, contact-sheet.svg, rebuild.py, verify.py, audit.json, srgb.icc, and the preserved HTML authoring frames and render.py. tools/runtime/resvg.tar.gz contains the checksum-verified resvg 0.45.1 executable with licences beside it. Linux x86-64 and Python 3 are required. The rebuild uses only Python's standard library and the bundled executable. No network, login, image generation, stock assets, external fonts, browser or system installation is needed.

The original authoring renderer reads the supplied specification and numeric displays directly. The canonical SVGs preserve that layout as outlines derived from the supplied Quicksand 700 and IBM Plex Mono 600 font files. Images use the supplied PNGs without alteration. Simple line arrows occupy the arrow character positions while the exact character remains in the text inventory. Browser-measured text ink boxes accompany the original logical layout boxes. Rebuild queries resvg text geometry against those measurements. Page-number outlines were moved one pixel inward to preserve the full safe margin.

## Self-check

| Requirement | Result |
| --- | --- |
| All eleven card PNGs have their declared dimensions | PASS |
| PNG format and sRGB profile | PASS |
| Every displayed card number has numbers.json provenance, excluding exempt footer numbering | PASS; each occurrence and eligible source IDs are in check.json |
| Full required card copy, character for character | PASS; layout breaks only, no copy omitted |
| No clipped or empty text | PASS; browser font loading, overflow, dimensions and intersections checked |
| bbox.json ends with zero failed cards | PASS; all eleven cards and the contact sheet |
| Main text at least 32 px, small text at least 24 px, headings at least 56 px | PASS; numerical runs also measured |
| Text contrast at least 4.5:1 | PASS; conservative card minimum 7.576:1 |
| Burn panels and burn destinations have a red flame | PASS; filled #FF4D2E with #FFB020 core, 64 px high; the negated “Lock, not burn” statement uses a padlock |
| Dare / payout / trophy separation | PASS; trophy is a separate fee-source panel |
| Contact sheet viewed, nothing crowded or touching | PASS; contact sheet and individual dense cards inspected |
| Brand mark supplied and unchanged, at most 96 px | PASS; 64 × 64 px, corner placement, full image retained |
| IMD coin and official NFT assets unchanged | PASS; coin 76 px, NFT images square and uncropped; seven images in the swarm panel |
| Footer and card number on every card | PASS |
| Story steps arranged vertically | PASS; lifecycle, payout scenarios and prediction steps use vertical axes |
| PDF has eight portrait pages in order | PASS |
| Forbidden-word hits equal zero | **FAIL: one required-copy conflict**, detailed below |

## Required-copy conflicts and visual accommodations

Card 2 requires the exact sentence “No creation fee.”, while the assignment explicitly forbids “creation fee”. The exact supplied sentence is retained. check.json reports one forbidden-word hit on card 2, and zero on the other cards. A zero-hit claim would be incorrect.

The required headings are titles, rather than questions. They are retained verbatim. Several required percentages also omit their explicit base, notably the loser-bond split, bonus scale and prediction waiting shares. Adding bases or rewriting headings would break the exact-copy requirement; neither was done.

Payout bars retain the full reward as their common scale. Every amount and recipient is printed directly above its bar in the exact supplied row text. Tiny segments cannot physically contain a 24 px amount: labels therefore sit outside the segments. Segment order is doer, NFT voters, buyback wallet, treasury; absent recipients have no segment. This is an accommodation of the requested on-segment labels, not a claim that those labels fit inside the tiny shares.

The reports are local diagnostics, not independent certification or financial verification.

## Commands and review performed

`python3 src/rebuild.py` rebuilt all eleven card PNGs, the labelled contact sheet, the eight-page PDF and both JSON reports using the compact bundled resvg runtime. It queried every text group with resvg and compared geometry to browser measurements. `python3 src/verify.py` passed signatures, dimensions, embedded sRGB profiles, number IDs, exact-copy flags, zero layout failures, PNG hashes and PDF page count. Chromium getBoundingClientRect measurements of SVG ink and original HTML layout supply bbox.json. Its intersecting-pair inventory distinguishes containers from forbidden text collisions. The contact sheet and dense cards were viewed after conversion. The existing required-copy conflict on card 2 remains reported.

Bundle repair: the roughly 125 MiB browser runtime was replaced with a roughly 1.5 MiB compressed renderer. All original HTML authoring sources and declared exports are preserved. No protected build configuration or dependency path was modified. Generated Python caches were removed.
