<!-- SOLID CITY · part 2847 -->
nder.position.y = 6.95; isle.add(under);
  var trunkMat = new THREE.MeshPhongMaterial({ color: 0x4a3626, shininess: 6 });
  var trunk = new THREE.Mesh(new THREE.CylinderGeometry(0.14, 0.22, 1.7, 7), trunkMat); trunk.position.set(0.3, 9.85, 0.2); trunk.rotation.z = 0.05; isle.add(trunk);
  var leafMat = new THREE.MeshPhongMaterial({ color: 0x2f7a3e, shininess: 14, flatShading: true });
  [[0.3, 10.9, 0.2, 1.25], [-0.5, 10.5, -0.3, 0.85], [1.1, 10.5, 0.7, 0.8]].forEach(function (s) {
    var leaf = new THREE.Mesh(new THREE.SphereGeometry(s[3], 7, 5), leafMat);
    leaf.scale.y = 0.55; leaf.position.set(s[0], s[1], s[2]); isle.add(leaf);
  });
  var branch = new THREE.Mesh(new THREE.CylinderGeometry(0.05, 0.07, 1.3, 5), trunkMat);
  branch.position.set(-0.55, 10.55, 0.2); branch.rotation.z = 1.15; isle.add(branch);
  var lantern = new THREE.Group(); lantern.position.set(-1.15, 10.7, 0.2); isle.add(lantern);
  var lampCord = new THREE.Mesh(new THREE.CylinderGeometry(0.012, 0.012, 0.25, 4), trunkMat); lampCord.position.y = -0.12; lantern.add(lampCord);
  var lampMesh = new THREE.Mesh(new THREE.OctahedronGeometry(0.17), new THREE.MeshPhongMaterial({ color: 0xd8a833, emissive: 0x54e0f0, emissiveIntensity: 1.4, shininess: 40 }));
  lampMesh.position.y = -0.3; lantern.add(lampMesh);
  var lampLight = new THREE.PointLight(0x54e0f0, 0.55, 13, 1.8); lampLight.position.y = -0.3; lantern.add(lampLight);

  /* __MORE_SECTIONS__ */

  /* ---------------- per-frame update (called by the placer) ------------ */
  function update(t, dt, A) {
    waterTexA.offset.set((t * 0.008) % 1, (t * 0.005) % 1);
    waterTexB.offset.set((-t * 0.006) % 1, (t * 0.009) % 1);
    octaMat.emissiveIntensity = 0.8 + 0.18 * Math.sin(t * 0.6);
    octaLight.intensity = 0.85 + 0.2 * Math.sin(t * 0.6);
    for (var i = 0; i < koi.length; i++) {
      var k = koi[i], th = k.ph + t * k.sp;
      var kx = Math.cos(th) * k.rx, kz = Math.sin(th) * k.rz;
      k.g.position.set(kx, k.yb + Math.sin(t * 0.7 + k.ph) * 0.03, kz);
      var vx = -Math.sin(th) * k.rx * Math.sign(k.sp), vz = Math.cos(th) * k.rz * Math.sign(k.sp);
      k.g.rotation.y = Math.atan2(vx, vz);
      k.g.rotation.z = Math.sin(t * 2.2 + k.ph) * 0.06;
      k.tail.rotation.y = Math.sin(t * 5 + k.ph) * 0.45;
    }
    fallTex.offset.y = (-t * 0.55) % 1;
    for (var f = 0; f < foams.length; f++) {
      var fs = 1 + 0.15 * Math.sin(t * 2.4 + f * 1.7);
      foams[f].scale.set(fs, fs, fs);
    }
    for (var ai2 = 0; ai2 < attendants.length; ai2++) {
      var am2 = attendants[ai2], aa = am2.userData.ph + t * 0.11;
      am2.position.set(Math.cos(aa) * 7.4, 0.55 + Math.sin(t * 0.5 + am2.userData.ph) * 0.2, Math.sin(aa) * 7.4 * 0.62);
      am2.rotation.y = t * 0.8 + am2.userData.ph;
      am2.rotation.x = Math.sin(t * 0.4 + am2.userData.ph) * 0.22;
    }
    for (var li2 = 0; li2 < lilies.length; li2++) {
      var lg2 = lilies[li2], la = lg2.userData.ph + t * lg2.userData.sp;
      lg2.position.set(Math.cos(la) * lg2.userData.r, -0.27 + Math.sin(t * 0.8 + lg2.userData.ph) * 0.015, Math.sin(la) * lg2.userData.r * 0.62);
      lg2.rotation.y = la * 0.5;
    }
    lantern.rotation.z = Math.sin(t * 0.7) * 0.05;
    lampLight.intensity = 0.5 + 0.14 * Math.sin(t * 0.6 + 2.1);
    /* __MORE_UPDATE__ */
  }

  group.userData = {
    update: update,
    standRects: [
      { cx: -8, cz: 0, hw: 2.9, hd: 2.9, y: 9.0 },
      { cx: 0, cz: 11.4, hw: 2.5, hd: 0.45, y: 0.0 },
      { cx: 0, cz: 10.5, hw: 2.5, hd: 0.45, y: -0.24 },
      { cx: 0, cz: 9.6, hw: 2.5, hd: 0.45, y: -0.48 },
      { cx: 0, cz: -12, hw: 19.3, hd: 0.65, y: 0.14 },
      { cx: -10.9, cz: 12, hw: 8.4, hd: 0.65, y: 0.14 },
      { cx: 10.9, cz: 12, hw: 8.4, hd: 0.65, y: 0.14 },
      { cx: -18, cz: 0, hw: 0.65, hd: 12.65, y: 0.14 },
      { cx: 18, cz: 0, hw: 0.65, hd: 12.65, y: 0.14 },
      { cx: 0, cz: 0, hw: 17.6, hd: 11.6, y: -0.85 },
      { cx: 0, cz: 0, hw: 28, hd: 22, y: 0.0 }
    ],
    footprint: [
      [0, -12, 38.6, 1.3, -0.85, 0.14, 0],
      [-10.9, 12, 16.8, 1.3, -0.85, 0.14, 0],
      [10.9, 12, 16.8, 1.3, -0.85, 0.14, 0],
      [-18, 0, 1.3, 25.3, -0.85, 0.14, 0],
      [18, 0, 1.3, 25.3, -0.85, 0.14, 0],
      [0, 0, 7.4, 7.4, -0.85, 5.6, 0],
      [-20.5, -14.5, 3.4, 2.2, 0, 1.15, 0], [20.5, -14.5, 3.4, 2.2, 0, 1.15, 0],
      [-20.5, 14.5, 3.4, 2.2, 0, 1.15, 0], [20.5, 14.5, 3.4, 2.2, 0, 1.15, 0]
    ].concat(palmPrints, colPrints, [
      [4.8, 15.9, 3.6, 0.35, 0, 2.2, -0.32],
      [-23.5, -6, 0.6, 2.2, 0, 1.1, 0], [-23.5, 6, 0.6, 2.2, 0, 1.1, 0],
      [-8, 0, 6.4, 6.4, 6.1, 9.0, 0]
    ])
  };
  return group;
}

export default createOctaPool;
export { createOctaPool };


===== FILE: public/city/overlook-mira-place.js =====
/* Solid City — places MIRA'S OVERLOOK (public/city/overlook-mira.js) east of the Ancestral Roads.
   Lazy: imported after the city is built; any import/build error is caught and the city carries on.
   Terrain-adaptive: samples groundAt over the deck, p