<!-- SOLID CITY · part 3623 -->
h(new T.CylinderGeometry(0.16, 0.16, 3.4, 6), woodDarkMat);
    arm.position.set(x, y + 3.2, z); root.add(arm);
    var orb = new T.Mesh(new T.SphereGeometry(0.65, 10, 8),
      new T.MeshBasicMaterial({ color: 0xffc060, transparent: true, opacity: 0.95 }));
    orb.position.set(x, y + 1.4, z); root.add(orb);
    var pl = new T.PointLight(0xffb050, 0.9, 26); pl.position.set(x, y + 1.6, z); root.add(pl);
    lanterns.push({ orb: orb, pl: pl, seed: R() * 10 });
    foot.push([x, z, 0.8, 0.8, y, y + 4.9, 0]);
  }
  lantern(-40, 0, -88); lantern(40, 0, -88); lantern(0, 0, -60);
  lantern(-28, -18, -5); lantern(8, -18, -15); lantern(34, -18, 10);
  lantern(-52, -18, 20); lantern(52, -18, 18);
  lantern(-30, -36, 78); lantern(6, -36, 72); lantern(36, -36, 98);
  lantern(-45, -36, 100); lantern(20, -36, 80);
  lantern(-95, -14, -14); lantern(90, -20, 26); lantern(10, -40, 146);

  // ---------- shrines (3): stone, small, glowing heart ----------
  function shrine(x, z, ty, ry) {
    var g = new T.Group();
    var base = new T.Mesh(new T.BoxGeometry(3.4, 1.2, 3.4), basaltMat); base.position.y = 0.6; g.add(base);
    var pillar = new T.Mesh(new T.BoxGeometry(1.6, 3.2, 1.6), basaltMat); pillar.position.y = 2.8; g.add(pillar);
    var cap = new T.Mesh(new T.BoxGeometry(2.6, 0.7, 2.6), basaltMat); cap.position.y = 4.7; g.add(cap);
    var heart = new T.Mesh(new T.SphereGeometry(0.55, 10, 8),
      new T.MeshBasicMaterial({ color: 0x7ae0ff, transparent: true, opacity: 0.95 }));
    heart.position.y = 2.8; heart.name = 'shrineHeart'; g.add(heart);
    var pl = new T.PointLight(0x7ae0ff, 0.8, 22); pl.position.y = 2.8; g.add(pl);
    g.position.set(x, ty, z); g.rotation.y = ry; root.add(g);
    lanterns.push({ orb: heart, pl: pl, seed: R() * 10 });
    foot.push([x, z, 3.6, 3.6, ty, ty + 5.1, ry]);
  }
  shrine(-14, -100, 0, 0.4); shrine(48, 30, -18, -0.8); shrine(-58, 118, -36, 1.9);

  // ---------- THE TARO TERRACES: stepped water patches (Terrace B south) ----------
  (function () {
    var wMat = new T.MeshBasicMaterial({ color: 0x2a5a3a, transparent: true, opacity: 0.92 });
    var mMat = new T.MeshLambertMaterial({ color: 0x3a2e22 });
    for (var r = 0; r < 3; r++) for (var c = 0; c < 4; c++) {
      var px = -24 + c * 9, pz = 44 + r * 8, py = -18;
      var bed = new T.Mesh(new T.BoxGeometry(7.6, 0.9, 6.6), mMat);
      bed.position.set(px, py + 0.45, pz); root.add(bed);
      var water = new T.Mesh(new T.PlaneGeometry(6.8, 5.8), wMat);
      water.rotation.x = -Math.PI / 2; water.position.set(px, py + 0.95, pz); root.add(water);
      for (var t2 = 0; t2 < 4; t2++) {
        var sprout = new T.Mesh(new T.ConeGeometry(0.5, 1.6, 6), leafMat);
        sprout.position.set(px + (R() - 0.5) * 5.5, py + 1.6, pz + (R() - 0.5) * 4.5); root.add(sprout);
      }
    }
    foot.push([-24 + 13.5, 44 + 8, 38, 26, -18, -16.9, 0]);   // one low solid for the beds
  })();

  // ---------- THE CRAG LOOKOUT: high rock perch east ----------
  (function () {
    var cx = 78, cz = -108, cy = 6;
    var crag = new T.Mesh(new T.DodecahedronGeometry(9, 0), basaltMat);
    crag.position.set(cx, cy - 2, cz); crag.scale.y = 1.5; root.add(crag);
    var deck = new T.Mesh(new T.BoxGeometry(10, 1, 8), woodMat);
    deck.position.set(cx, cy + 9.5, cz); root.add(deck);
    for (var i = -1; i <= 1; i++) {
      var pr = new T.Mesh(new T.CylinderGeometry(0.2, 0.2, 2.4, 6), woodDarkMat);
      pr.position.set(cx + i * 4.4, cy + 11.2, cz - 3.6); root.add(pr);
    }
    var rail = new T.Mesh(new T.BoxGeometry(10, 0.22, 0.22), woodDarkMat);
    rail.position.set(cx, cy + 12.3, cz - 3.6); root.add(rail);
    var lant = new T.Mesh(new T.SphereGeometry(0.5, 8, 6), winMat);
    lant.position.set(cx, cy + 13, cz - 3.6); root.add(lant);
    foot.push([cx, cz, 13, 12, cy - 9, cy + 9, 0]);       // the crag: solid rock
    foot.push([cx, cz, 10, 8, cy + 9, cy + 10.2, 0]);     // deck blocks from below
    walkRects.push({ x1: cx - 5, z1: cz - 4, x2: cx + 5, z2: cz + 4, y: cy + 10.1 });
  })();

  // ---------- THE HIDDEN GLOW: small cave with light inside (west) ----------
  (function () {
    var hx = -88, hz = 62, hy = -30;
    // three big rocks forming an overhang
    [[0, 0, 0], [-7, 2, 3], [7, 2, -3]].forEach(function (o, i) {
      var rk = new T.Mesh(new T.DodecahedronGeometry(6 - i, 0), basaltMat);
      rk.position.set(hx + o[0], hy + 4 + o[1], hz + o[2]); rk.rotation.set(i, i * 2, i * 0.5); root.add(rk);
    });
    var glowOrb = new T.Mesh(new T.SphereGeometry(1.4, 12, 10),
      new T.MeshBasicMaterial({ color: 0x9ae0ff, transparent: true, opacity: 0.9 }));
    glowOrb.position.set(hx, hy + 2.2, hz); glowOrb.name = 'caveGlow'; root.add(glowOrb);
    var cpl = new T.PointLight(0x9ae0ff, 1.6, 30); cpl.position.set(hx, hy + 2.5, hz); root.add(cpl);
    lanterns.push({ orb: glowOrb, pl: cpl, seed: R() * 10 });
    // mouth faces east: block the rocks, leave the mouth walkable-in
    foot.push([hx - 4, hz, 8, 14, hy, h