<!-- SOLID CITY · part 2059 -->
eGeometry(1.92, 0.48),
    new T.MeshBasicMaterial({ map: textPlate(T, text), transparent: false }));
  face.position.set(0, 0.984, 0.754); face.rotation.x = -0.5; grp.add(face);
  var base = new T.Mesh(new T.BoxGeometry(3.6, 0.25, 1.9),
    new T.MeshLambertMaterial({ color: 0x141218 }));
  base.position.y = 0.12; grp.add(base);
  return grp;
}
export function createHallBecoming(o) {
  var T = o.THREE, P = o.position || { x: 0, y: 0, z: 0 };
  var root = new T.Group(); root.name = 'hall-becoming'; root.position.set(P.x, P.y, P.z);
  var foot = [];
  var stone = new T.MeshLambertMaterial({ color: 0x232028 });
  var slabM = new T.MeshLambertMaterial({ color: 0x2c2833 });
  // the ground the hall stands on
  var platform = new T.Mesh(new T.CylinderGeometry(48, 50, 0.5, 48), stone);
  platform.position.y = -0.05; root.add(platform);
  var rim = new T.Mesh(new T.TorusGeometry(48, 0.5, 8, 64),
    new T.MeshLambertMaterial({ color: 0xd8aa48, emissive: 0x1a0e02 }));
  rim.rotation.x = Math.PI / 2; rim.position.y = 0.25; root.add(rim);
  // Fibonacci chambers on the golden spiral
  var fib = [8, 5, 3, 2, 1, 1];
  var ringCols = [0x1c1a20, 0x6b4a2a, 0x8a4a2a, 0xa67a2a, 0xd8aa48, 0xe8d8a8];
  var discCols = [0x7a3a10, 0xb06a20, 0xd89a30, 0xe8b848, 0xf0d080, 0xfff8e8];
  var rings = [], i;
  var pts = [];
  for (i = 0; i < 6; i++) {
    var hole = fib[i] * 1.9;
    var r = hole / 0.42;
    var th = Math.PI + i * Math.PI / 2;
    pts.push({ x: r * Math.cos(th), z: r * Math.sin(th), hole: hole });
  }
  pts.push({ x: 0, z: 0, hole: 0 }); // the still center, for orientation
  var discs = [];
  for (i = 0; i < 6; i++) {
    (function (idx) {
      var pt = pts[idx], nxt = pts[idx + 1];
      var g = new T.Group();
      g.position.set(pt.x, 0, pt.z);
      g.rotation.y = Math.atan2(nxt.x - pt.x, nxt.z - pt.z);
      var tube = Math.max(0.18, pt.hole * 0.07);
      var ringM = new T.Mesh(new T.TorusGeometry(pt.hole, tube, 10, 40),
        new T.MeshLambertMaterial({ color: ringCols[idx], emissive: 0x0a0602 }));
      ringM.position.y = pt.hole; g.add(ringM);
      var disc = new T.Mesh(new T.CircleGeometry(pt.hole * 0.94, 36),
        new T.MeshBasicMaterial({ color: discCols[idx], transparent: true, opacity: 0.10, side: T.DoubleSide, depthWrite: false }));
      disc.position.y = pt.hole; g.add(disc); discs.push(disc);
      // feet that hold the ring; these alone are solid — the opening stays open
      [-1, 1].forEach(function (s) {
        var f = new T.Mesh(new T.BoxGeometry(tube * 3.2, pt.hole * 0.35 + 0.6, tube * 3.2), stone);
        f.position.set(s * (pt.hole + tube * 0.8), (pt.hole * 0.35 + 0.6) / 2, 0); g.add(f);
      });
      root.add(g); rings.push(g);
      // footprint of the two feet in world-local coords (approx: rotated boxes -> use AABB of spread)
      var c = Math.cos(g.rotation.y), s2 = Math.sin(g.rotation.y);
      [-1, 1].forEach(function (s) {
        var ox = s * (pt.hole + tube * 0.8), oz = 0;
        var wx = pt.x + ox * c + oz * s2, wz = pt.z - ox * s2 + oz * c;
        var w2 = tube * 1.8;
        foot.push([wx, wz, w2 * 2, w2 * 2, 0, pt.hole * 0.35 + 0.8, 0]);
      });
    })(i);
  }
  // the still center
  var dais = new T.Mesh(new T.CylinderGeometry(5, 5.6, 1.2, 24), stone);
  dais.position.y = 0.6; root.add(dais);
  foot.push([0, 0, 11, 11, 0, 1.4, 0]);
  var pool = new T.Mesh(new T.CircleGeometry(4.2, 32),
    new T.MeshLambertMaterial({ color: 0x060810, emissive: 0x0a1420 }));
  pool.rotation.x = -Math.PI / 2; pool.position.y = 1.25; root.add(pool);
  var column = new T.Mesh(new T.CylinderGeometry(1.0, 1.6, 26, 16, 1, true),
    new T.MeshBasicMaterial({ color: 0xfff2d8, transparent: true, opacity: 0.28, side: T.DoubleSide, blending: T.AdditiveBlending, depthWrite: false }));
  column.position.y = 14; root.add(column); column.name = 'still-column';
  var heart = new T.PointLight(0xffe8c0, 1.4, 60); heart.position.set(0, 8, 0); root.add(heart);
  // path slabs laid along the spiral, ring to ring
  var slabGeo = new T.BoxGeometry(2.3, 0.16, 1.5);
  for (i = 0; i < 6; i++) {
    (function (idx) {
      var a = pts[idx], b = pts[idx + 1], steps = 8;
      for (var k = 0; k < steps; k++) {
        var f0 = k / steps, f1 = (k + 1) / steps;
        var mx = a.x + (b.x - a.x) * f0, mz = a.z + (b.z - a.z) * f0;
        // ease the path onto the golden curve between the two ring centers
        var slab = new T.Mesh(slabGeo, slabM);
        slab.position.set(mx, 0.33, mz);
        slab.rotation.y = Math.atan2(b.x - a.x, b.z - a.z);
        root.add(slab);
      }
    })(i);
  }
  // true name + seam name: quiet markers, nothing more
  var nameMark = quietMarker(T, 'THE HALL OF BECOMING');
  nameMark.position.set(-30, 0, 9); nameMark.rotation.y = -Math.PI / 2 - 0.35; root.add(nameMark);
  var seamMark = quietMarker(T, 'THE ENTRANCE');
  seamMark.position.set(-45.5, 0, 0); seamMark.rotation.y = -Math.PI / 2; root.add(seamMark);
  // THE BATTENING (2026-10-14): 