Web frontend and supporting services for lance.blue

feat(daily-challenge): a tile of the real ground, inset on the card master

The board on the card is a diagram: who is in the fight, in their own colours, on a schematic eight by three. It says nothing at all about the ground, which is half of what decides a fight. This puts the real terrain in the corner of it - where the water is, where the cover is, where the roads run. An inset rather than a replacement. The diagram is what a reader looks at first, and a true-shape 16x17 board is portrait, so it could never sit behind those sprites anyway. Top right because forces stack towards their own edges and the era mark takes the middle, which leaves the corners. The shapes come from MegaMek's own `.board` files, which are in the arena image and not on the website, so `scripts/boards.py` reads them at authoring time and commits what the tile draws: one character a hex for terrain class, one for level, an exit mask per road hex. Eleven boards come to nine kilobytes. No terrain table, no exit inference and no MegaMek data reach the browser. `mms index` now carries each scenario's `map:` so the card knows which boards to compose, and the V2 reader picks it up alongside the options and bot knobs.


+627 -4
8 changed files