<!-- NEW7 — TEST 7 · THE WOVEN CITY · part 448 -->
8, 11, 18).applyMatrix4(M4(THREE, R.x, 5.8, R.z - 10)));
        for (let bi = 0; bi < 3; bi++) bucket(0x2b2f36).push(new THREE.BoxGeometry(7.5, 6.5, 0.8).applyMatrix4(M4(THREE, R.x - 12 + bi * 12, 3.55, R.z - 0.6)));
        bucket(0xd8cfc0).push(new THREE.BoxGeometry(7, 19, 7).applyMatrix4(M4(THREE, R.x + 24, 9.8, R.z - 14)));
        bucket(0x596066).push(new THREE.BoxGeometry(8, 1.2, 8).applyMatrix4(M4(THREE, R.x + 24, 19.9, R.z - 14)));
        buildings.push({ x: R.x, z: R.z - 10, w: 38, d: 18, h: 11 });
        buildings.push({ x: R.x + 24, z: R.z - 14, w: 7, d: 7, h: 19 });
      } else if (sub === 'library') {
        bucket(0xd8c9a8).push(new THREE.BoxGeometry(40, 12, 18).applyMatrix4(M4(THREE, R.x, 6.3, R.z - 8)));
        bucket(0x93a7b8).push(new THREE.BoxGeometry(34, 5, 0.8).applyMatrix4(M4(THREE, R.x, 7.5, R.z + 1.4)));
        bucket(0x8a8175).push(new THREE.BoxGeometry(42, 1.4, 20).applyMatrix4(M4(THREE, R.x, 13, R.z - 8)));
        bucket(0xb0a890).push(new THREE.BoxGeometry(14, 1, 7).applyMatrix4(M4(THREE, R.x, 0.8, R.z + 8)));
        buildings.push({ x: R.x, z: R.z - 8, w: 40, d: 18, h: 12 });
      } else { // police
        bucket(0xb9bec4).push(new THREE.BoxGeometry(36, 12, 17).applyMatrix4(M4(THREE, R.x, 6.3, R.z - 8)));
        bucket(0x2c4a7c).push(new THREE.BoxGeometry(36.6, 2, 17.6).applyMatrix4(M4(THREE, R.x, 10.8, R.z - 8)));
        bucket(0x2b2f36).push(new THREE.BoxGeometry(6, 4.4, 0.8).applyMatrix4(M4(THREE, R.x, 2.5, R.z + 0.9)));
        buildings.push({ x: R.x, z: R.z - 8, w: 36, d: 17, h: 12 });
      }
      counts.municipal++;
      tree(R.x - 38, R.z + 34, 1); tree(R.x + 38, R.z + 34, 1);
    } else if (R.kind === 'gas') {
      const slab = new THREE.Mesh(new THREE.BoxGeometry(92, 0.3, 92), new THREE.MeshLambertMaterial({ color: 0x9aa0a2 }));
      slab.position.set(R.x, 0.15, R.z); slab.name = 'GAS_' + R.name; group.add(slab);
      bucket(0xe8e2d4).push(new THREE.BoxGeometry(20, 6.5, 12).applyMatrix4(M4(THREE, R.x - 22, 3.55, R.z - 24)));
      bucket(0xd8cfc0).push(new THREE.BoxGeometry(30, 0.9, 22).applyMatrix4(M4(THREE, R.x + 8, 6, R.z + 2)));
      for (const [ox, oz] of [[-5, -7], [21, -7], [-5, 11], [21, 11]]) trunkGeos.push(new THREE.CylinderGeometry(0.35, 0.35, 5.6, 6).applyMatrix4(M4(THREE, R.x + ox, 2.8, R.z + oz)));
      for (const ox of [2, 14]) { bucket(0xb03a30).push(new THREE.BoxGeometry(1.2, 2.4, 0.8).applyMatrix4(M4(THREE, R.x + ox, 1.5, R.z + 2))); bucket(0xf0ead8).push(new THREE.BoxGeometry(3.4, 0.5, 1.6).applyMatrix4(M4(THREE, R.x + ox, 0.55, R.z + 2))); }
      trunkGeos.push(new THREE.CylinderGeometry(0.3, 0.3, 13, 6).applyMatrix4(M4(THREE, R.x + 34, 6.5, R.z + 30)));
      bucket(0xf2c14e).push(new THREE.BoxGeometry(5, 3.6, 0.4).applyMatrix4(M4(THREE, R.x + 34, 12, R.z + 30)));
      buildings.push({ x: R.x - 22, z: R.z - 24, w: 20, d: 12, h: 6.5 }); counts.gas++;
    } else if (R.kind === 'parking') {
      const slab = new THREE.Mesh(new THREE.BoxGeometry(92, 0.3, 92), new THREE.MeshLambertMaterial({ color: 0x3f444a }));
      slab.position.set(R.x, 0.15, R.z); slab.name = 'PARKING_' + R.name; group.add(slab);
      for (let si = 0; si < 8; si++) { bucket(0xf0ead8).push(new THREE.BoxGeometry(0.5, 0.06, 8).applyMatrix4(M4(THREE, R.x - 35 + si * 10, 0.36, R.z - 26))); bucket(0xf0ead8).push(new THREE.BoxGeometry(0.5, 0.06, 8).applyMatrix4(M4(THREE, R.x - 35 + si * 10, 0.36, R.z + 26))); }
      const CARS = [0xb03a30, 0x2c4a7c, 0xd8cfc0, 0x596066, 0x3d6b34, 0xf2c14e];
      for (let ci = 0; ci < 7; ci++) {
        const cxp = R.x - 35 + Math.floor(rnd() * 8) * 10 + (rnd() - 0.5) * 2, czp = R.z + (rnd() < 0.5 ? -26 : 26), col = CARS[Math.floor(rnd() * CARS.length)];
        bucket(col).push(new THREE.BoxGeometry(4.4, 1.1, 2).applyMatrix4(M4(THREE, cxp, 0.95, czp)));
        bucket(0x22262c).push(new THREE.BoxGeometry(2.3, 0.85, 1.8).applyMatrix4(M4(THREE, cxp, 1.9, czp)));
      }
    } else if (R.kind === 'downtown') {
      // THE 800 THEMSELVES — Test 2's own forge, stood at this region's heart.
      const d = buildDistrict(THREE);
      d.group.position.set(R.x, 0, R.z); group.add(d.group);
      for (const b of d.meta.buildings) buildings.push({ x: b.x + R.x, z: b.z + R.z, w: b.w, d: b.d, h: b.h });
      counts.fashion += d.meta.count;
    } else if (R.kind === 'towers') {
      const slab = new THREE.Mesh(new THREE.BoxGeometry(R.w, 0.3, R.d), new THREE.MeshLambertMaterial({ color: 0x565b60 }));
      slab.position.set(R.x, 0.15, R.z); slab.name = 'TOWER_GROUND_' + R.name; group.add(slab);
      towersKit(THREE, group, R, rnd, buildings, counts, inWater);
    } else if (R.kind === 'suburb') {
      const slab = new THREE.Mesh(new THREE.BoxGeometry(R.w, 0.3, R.d), new THREE.MeshLambertMaterial({ color: 0x66755e }));
      slab.position.set(R.x, 0.15, R.z); slab.name = 'SUBURB_GROUND_' + R.name; group.add(slab);
      const px = 26, pz = 30, cols = Math.floor(R.w / px), rows = Math.fl