<!-- SOLID CITY · part 3640 -->
 cz = 120, ty = -36, i, a;
    for (i = 0; i < 12; i++) {
      a = (i / 12) * Math.PI * 2;
      var sx = cx + Math.cos(a) * 7.5, sz = cz + Math.sin(a) * 7.5;
      var st = new T.Mesh(new T.BoxGeometry(1.3, 1.5, 1.3), basaltMat);
      st.position.set(sx, ty + 0.75, sz); st.rotation.y = a; root.add(st);
      foot.push([sx, sz, 1.3, 1.3, ty, ty + 1.5, 0]);
    }
    firePit(cx, cz, ty);
    for (i = 0; i < 5; i++) {
      var ba = (i / 5) * Math.PI * 2 + 0.5;
      var bench = new T.Mesh(new T.CylinderGeometry(0.45, 0.45, 3.8, 8), woodDarkMat);
      bench.rotation.z = Math.PI / 2; bench.rotation.y = -ba;
      bench.position.set(cx + Math.cos(ba) * 11, ty + 0.8, cz + Math.sin(ba) * 11); root.add(bench);
    }
  })();


  // ================= EXPONENTIAL INFILL (2026-10-11) =================
  // The King's words: "fill every little nook and cranny of this mountain."
  // COLLISION LAW: every mesh below pushes a footprint. No pass-through.
  var walkRects = [];
  var goldMat = new T.MeshLambertMaterial({ color: C.gold });

  // ---------- hut variants ----------
  function familyHale(x, z, ty, ry) { hut(x, z, ty, ry, 1.45); }           // large family hale
  function hermitHut(x, z, ty, ry) {                                       // tiny hermit hut
    var s = 0.62, g = new T.Group();
    var w = 5 * s, d = 4.4 * s, h = 2.6 * s;
    var walls = new T.Mesh(new T.BoxGeometry(w, h, d), woodMat); walls.position.y = h / 2; g.add(walls);
    var roof = new T.Mesh(new T.ConeGeometry(w * 0.85, 2.2 * s, 4), thatchMat);
    roof.position.y = h + 1.1 * s; roof.rotation.y = Math.PI / 4; g.add(roof);
    var win = new T.Mesh(new T.PlaneGeometry(1.1 * s, 0.9 * s), winMat);
    win.position.set(0, h * 0.55, d / 2 + 0.05); g.add(win);
    var door = new T.Mesh(new T.PlaneGeometry(1.2 * s, 1.9 * s), new T.MeshBasicMaterial({ color: 0xffb050 }));
    door.position.set(0, 0.95 * s, d / 2 + 0.05); g.add(door);
    g.position.set(x, ty, z); g.rotation.y = ry; root.add(g);
    foot.push([x, z, w + 0.8, d + 0.8, ty, ty + h + 2.2 * s, ry]);
  }
  function stiltHut(x, z, ty, ry) {                                       // hut raised on poles
    var s = 1, g = new T.Group(), lift = 3.2;
    var w = 8 * s, d = 6.5 * s, h = 3.4 * s;
    [[-w/2+0.6,-d/2+0.6],[w/2-0.6,-d/2+0.6],[-w/2+0.6,d/2-0.6],[w/2-0.6,d/2-0.6]].forEach(function (p) {
      var pole = new T.Mesh(new T.CylinderGeometry(0.35, 0.4, lift + 1, 6), woodDarkMat);
      pole.position.set(p[0], (lift + 1) / 2 - 0.5, p[1]); g.add(pole);
    });
    var walls = new T.Mesh(new T.BoxGeometry(w, h, d), woodMat); walls.position.y = lift + h / 2; g.add(walls);
    var rl = Math.sqrt((w / 2 + 1) * (w / 2 + 1) + 4 * s * s), ang = Math.atan2(2 * s, w / 2 + 1);
    [-1, 1].forEach(function (sd) {
      var slab = new T.Mesh(new T.BoxGeometry(rl, 0.5 * s, d + 1.5 * s), thatchMat);
      slab.position.set(sd * (w / 4 + 0.4 * s), lift + h + 1.0 * s, 0); slab.rotation.z = sd * ang; g.add(slab);
    });
    var win = new T.Mesh(new T.PlaneGeometry(1.5, 1.1), winMat);
    win.position.set(-w / 4, lift + h * 0.55, d / 2 + 0.06); g.add(win);
    var win2 = win.clone(); win2.position.x = w / 4; g.add(win2);
    var ladder = new T.Mesh(new T.BoxGeometry(1.2, lift + 1.5, 0.3), woodDarkMat);
    ladder.position.set(w / 2 + 0.8, (lift + 1.5) / 2 - 0.5, 0); ladder.rotation.z = 0.25; g.add(ladder);
    g.position.set(x, ty, z); g.rotation.y = ry; root.add(g);
    foot.push([x, z, w + 1.5, d + 1.5, ty, ty + lift + h + 2.2, ry]);
  }

  // ---------- 30+ new huts in clusters ----------
  // THE HIGH LEDGES (Terrace A west)
  familyHale(-40, -95, 0, 0.4); hut(-48, -70, 0, 1.2, 1); hut(-30, -112, 0, -0.5, 0.95);
  // Terrace A east
  hut(40, -95, 0, -0.4, 1); hut(48, -70, 0, -1.2, 1.05);
  // THE HERMIT'S NOOK (far west, off-terrace)
  hermitHut(-95, -20, -14, 0.8); hermitHut(-105, -5, -14, 2.1); hermitHut(-90, 10, -14, -0.6);
  // Terrace B northeast grove
  hut(30, -30, -18, 0.7, 1); hut(45, -25, -18, -0.9, 1.05); familyHale(20, -42, -18, 0.2);
  // THE STILT ROW (Terrace B southwest)
  stiltHut(-20, 40, -18, 0.3); stiltHut(-35, 45, -18, 1.1); stiltHut(-10, 52, -18, -0.7);
  // Terrace C east + west
  hut(20, 75, -36, 0.5, 1); hut(50, 100, -36, -0.8, 0.95);
  hut(-45, 95, -36, 1.4, 1); hut(-20, 125, -36, 2.6, 1.05);
  // THE EASTERN GROVE (off-terrace)
  hut(90, 20, -20, 0.9, 1); hermitHut(100, 40, -22, -1.8); hut(85, 55, -22, 0.2, 0.95);
  // THE SOUTHERN SLOPE
  hut(10, 140, -40, 0.1, 1); hut(-15, 145, -40, 1.5, 1.05); hermitHut(30, 150, -40, -0.9);
  // Northern ridge near the road's end
  hut(-15, -140, 5, 0.6, 1); hut(10, -145, 5, -0.4, 0.95);
  // Terrace A south + B center-west
  familyHale(-20, -60, 0, 1.8); hut(20, -60, 0, -1.8, 1);
  hut(-50, -35, -18, 2.2, 0.95); stiltHut(-45, -52, -18, 0.9);

  // ---------- 100+ more trees: the forest closes in ----------
  var placed2 = 0, guard2 = 0;
  while (placed2 < 60 && guard2++ < 700) {          // denser inner rin