{ "readme": [ "Allowed XY scale range when a source footprint module is mapped onto an approved library asset.", "Shared contract: tools/city-massing/generate-oldtown-fill.mjs decides the module lattice with it,", "and tools/city-massing/assemble-lod-district.py refuses to place anything outside it.", "Below the minimum the facade windows/balconies stop reading as architecture; above the maximum", "the asset is stretched past a believable building. Keep both readers in sync through this file." ], "variants": { "house": { "nominal_m": [12, 9], "minScale": [0.55, 0.55], "maxScale": [1.7, 1.7] }, "slab": { "nominal_m": [30, 12], "minScale": [0.6, 0.62], "maxScale": [1.5, 1.5] }, "midrise": { "nominal_m": [20, 16], "minScale": [0.65, 0.65], "maxScale": [1.45, 1.45] }, "midrise-wide": { "nominal_m": [28, 24], "minScale": [0.7, 0.7], "maxScale": [1.4, 1.4] } }, "lattice": { "inset_m": 0.25, "gap_m": 0.8, "maxModulesPerFootprint": 24 } }