<!-- SOLID CITY · part 3636 -->
push(sheet);
    var pool = new T.Mesh(new T.CylinderGeometry(7, 7, 1, 18),
      new T.MeshBasicMaterial({ color: 0x3a6a8a, transparent: true, opacity: 0.9 }));
    pool.position.set(fx, 0.8, fz + 6); root.add(pool);
    var mist = new T.Mesh(new T.SphereGeometry(4.5, 10, 8),
      new T.MeshBasicMaterial({ color: 0xdff2ff, transparent: true, opacity: 0.35 }));
    mist.position.set(fx, 4, fz + 4); mist.scale.y = 0.6; root.add(mist);
    falls.push(mist);
    var sMat = new T.MeshBasicMaterial({ color: 0x5a9ac8, transparent: true, opacity: 0.85 });
    [[16, -168], [6, -152], [-4, -136], [-12, -120], [-16, -104]].forEach(function (sp) {
      var segm = new T.Mesh(new T.PlaneGeometry(3.2, 20), sMat);
      segm.rotation.x = -Math.PI / 2; segm.rotation.z = 0.35;
      segm.position.set(sp[0], 1.35, sp[1]); root.add(segm);
    });
    foot.push([fx, fz + 6, 14, 14, 0, 2, 0]);
  })();

  // ---------- SECOND FIRE: gathering circle on Terrace C ----------
  var fires = [];
  function firePit(x, z, ty) {
    var pit = new T.Mesh(new T.CylinderGeometry(2.2, 2.6, 1.1, 12), basaltMat);
    pit.position.set(x, ty + 0.55, z); root.add(pit);
    var flame = new T.Mesh(new T.ConeGeometry(1.4, 3.8, 10),
      new T.MeshBasicMaterial({ color: C.fire, transparent: true, opacity: 0.9 }));
    flame.position.set(x, ty + 3.1, z); root.add(flame);
    var light = new T.PointLight(0xff9a40, 2.0, 60);
    light.position.set(x, ty + 4.5, z); root.add(light);
    fires.push({ flame: flame, light: light, seed: R() * 10 });
    foot.push([x, z, 4.6, 4.6, ty, ty + 1.8, 0]);
  }
  (function () {
    var cx = -2, 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);
    }
  })();

  // ---------- TRUE-NAME PLATES ----------
  function plate(txt, x, y, z, ry) {
    var c = document.createElement('canvas'); c.width = 256; c.height = 64;
    var g = c.getContext('2d');
    g.fillStyle = '#1c1a20'; g.fillRect(0, 0, 256, 64);
    g.strokeStyle = '#d8aa48'; g.lineWidth = 4; g.strokeRect(3, 3, 250, 58);
    g.fillStyle = '#d8aa48'; g.textAlign = 'center'; g.textBaseline = 'middle';
    g.font = 'bold 25px Georgia, serif'; g.fillText(txt, 128, 34);
    var t = new T.CanvasTexture(c); t.encoding = T.sRGBEncoding;
    var m = new T.Mesh(new T.PlaneGeometry(7, 1.75), new T.MeshBasicMaterial({ map: t, side: T.DoubleSide }));
    m.position.set(x, y, z); m.rotation.y = ry || 0; root.add(m);
    var post = new T.Mesh(new T.BoxGeometry(0.8, 2.2, 0.8), basaltMat);
    post.position.set(x, y - 1.9, z); root.add(post);
    foot.push([x, z, 1, 1, y - 3, y - 0.8, 0]);
  }
  plate('THE FALL', 32, 3.4, -158, -0.5);
  plate('THE SECOND FIRE', -2, -32.6, 130, 0.1);
  plate('THE UPPER HUTS', -59, -14.6, 30, 1.57);
  plate('THE LOWER HUTS', 58, -32.6, 122, -1.57);
  plate("THE ROAD'S END", 24, 12.4, -170, 3.1);

  // ---------- fireflies of warm light: village glow ----------
  var glow = new T.PointLight(0xffb050, 1.4, 220, 1.2);
  glow.position.set(0, 14, 0); root.add(glow);

  root.userData = {
    footprint: foot, center: { x: 0, z: 0 }, radius: 320, height: 60,
    terraceTops: TER.map(function (t) { return { x: t.x, z: t.z, r: t.r, topY: t.y + 1.1 }; }),
    update: function (t) {
      var hale = haleRef.g;
      if (hale) {
        hale.userData.flame.scale.y = 1 + Math.sin(t * 5.2) * 0.16;
        hale.userData.fireLight.intensity = 2.1 + Math.sin(t * 5.2) * 0.5 + Math.sin(t * 13.7) * 0.2;
      }
      for (var k = 0; k < torches.length; k++) {
        var tc = torches[k];
        tc.fl.scale.y = 1 + Math.sin(t * 6 + tc.seed) * 0.18;
        tc.pl.intensity = 0.95 + Math.sin(t * 6 + tc.seed) * 0.22;
      }
      glow.intensity = 1.35 + Math.sin(t * 1.7) * 0.12;
      for (var fi = 0; fi < fires.length; fi++) { var f = fires[fi]; f.flame.scale.y = 1 + Math.sin(t * 5.6 + f.seed) * 0.16; f.light.intensity = 2.0 + Math.sin(t * 5.6 + f.seed) * 0.5; }
      for (var wi = 0; wi < falls.length; wi++) { falls[wi].material.opacity = 0.68 + Math.sin(t * 7 + wi * 2.1) * 0.14; }
    }
  };
  return root;
}
export default createMaunaVillage;


===== FILE: public/city/village-mauna.js.bak-oneroad-20261012 =====
/* SOLID CITY — KAUHALE MAUNA, THE MOUNTAIN VILLAGE (2026-10-11, by order of the King)
 * "Drive me to a road up in the mountains where we can make a mountain village with tr