<!-- SOLID CITY · part 3142 -->
c === A_C ? [2.36] : [];                          // the Entree sector
    function clear(a) {
      for (var i = 0; i < skipA.length; i++) { var d = Math.abs(((a - skipA[i] + Math.PI * 3) % (Math.PI * 2)) - Math.PI); if (d < 0.42) return false; }
      for (var j = 0; j < skipB.length; j++) { var d2 = Math.abs(((a - skipB[j] + Math.PI * 3) % (Math.PI * 2)) - Math.PI); if (d2 < 0.34) return false; }
      return true;
    }
    var nH = 0;
    for (var hi = 0; hi < 14 && nH < 10; hi++) {
      var ha = hi / 14 * Math.PI * 2 + 0.22;
      if (!clear(ha)) continue;
      var hr = 62 + (hi % 3) * 22;
      house(frameOf(hr, ha, cx, cz), F, 1 + (hi % 2) * 0.2, hi % 3 === 0 ? 2 : 1); nH++;
    }
    /* the grand house of the hollow */
    var ga = Cc === A_C ? 5.5 : 0.85;
    var gf = frameOf(98, ga, cx, cz);
    (function () {
      function L(lx, ly, lz) { return mat4(gf.x + gf.tx * lx + gf.rx * lz, F + ly, gf.z + gf.tz * lx + gf.rz * lz, 0, Math.atan2(gf.tx, gf.tz), 0); }
      box(solid, 24, 11, 13, L(0, 5.5, 0), C.stone);
      box(solid, 26, 0.8, 15, L(0, 11.4, 0), C.stoneDark);
      box(solid, 16, 5, 10, L(0, 13.5, 0), C.stone);
      box(solid, 17.5, 0.7, 11.5, L(0, 16.3, 0), C.roof);
      box(glow, 2.6, 4.6, 0.2, L(0, 2.3, -6.6), C.door);
      for (var wI = -3; wI <= 3; wI++) { if (wI) box(glow, 1.4, 1.6, 0.16, L(wI * 3.1, 7.6, -6.58), C.win); }
      box(glow, 20, 0.5, 0.3, L(0, 10.6, -6.7), C.gold);
      footprints.push({ x: gf.x, z: gf.z, w: 25, d: 14.5, a: Math.atan2(gf.tx, gf.tz), y0: F, y1: F + 16.8 });
    })();
    /* market row on the plaza's edge */
    [0.5, 0.95, 1.4, 5.85].forEach(function (ma, mi) {
      if (!clear(ma)) return;
      stall(frameOf(38, ma, cx, cz), F, mi % 2 ? C.marbleRed : C.gold);
    });
    for (var li2 = 0; li2 < 8; li2++) { var la = li2 / 8 * Math.PI * 2 + 0.4; if (clear(la)) lamp(cx + Math.cos(la) * 52, F, cz + Math.sin(la) * 52, 1); }
    for (var ti = 0; ti < 6; ti++) { var ta = ti / 6 * Math.PI * 2 + 1.05; if (clear(ta)) tree(cx + Math.cos(ta) * 30, F, cz + Math.sin(ta) * 30, 1.1); }
    /* ---- THE LAYERS: ring terraces against the wall ---- */
    [34, 68].forEach(function (dy, li3) {
      var y = F + dy;
      var SEG = 40, prev = null;
      for (var si = 0; si <= SEG; si++) {
        var a = si / SEG * Math.PI * 2;
        var rOut = contourR(cx, cz, a, y + 7) + 3;
        var rIn = rOut - 27;
        var px = cx + Math.cos(a) * ((rIn + rOut) / 2), pz = cz + Math.sin(a) * ((rIn + rOut) / 2);
        box(solid, (rOut - rIn), 5, Math.PI * 2 * ((rIn + rOut) / 2) / SEG + 1.6, mat4(px, y - 2.5, pz, 0, -a + Math.PI / 2, 0), C.stoneDark);
        box(glow, 0.5, 0.3, Math.PI * 2 * ((rIn + rOut) / 2) / SEG + 1.6, mat4(cx + Math.cos(a) * (rIn + 0.4), y + 0.15, cz + Math.sin(a) * (rIn + 0.4), 0, -a + Math.PI / 2, 0), C.gold);
        if (si % 5 === 0) layers.push({ cx: cx, cz: cz, rIn: rIn - 1, rOut: rOut + 1, y: y });
        prev = rOut;
      }
      var want = li3 === 0 ? 6 : 5;
      for (var lh = 0; lh < want; lh++) {
        var la2 = (lh + li3 * 0.5) / want * Math.PI * 2 + 0.5;
        if (!clear(la2)) continue;
        var lr = contourR(cx, cz, la2, y + 7) - 12;
        house(frameOf(lr, la2, cx, cz), y, 0.92, lh % 2 ? 2 : 1);
      }
      for (var ll = 0; ll < 7; ll++) { var la3 = ll / 7 * Math.PI * 2 + 0.9; if (clear(la3)) { var lr3 = contourR(cx, cz, la3, y + 7) - 25; lamp(cx + Math.cos(la3) * lr3, y, cz + Math.sin(la3) * lr3, 0.9); } }
    });
    /* ---- THE ROOF RING + formations: a marble crown
     * leaving the light shaft open over the plaza ---- */
    var roofY = F + (big ? 118 : 104);
    var SEG2 = 44;
    for (var ri = 0; ri < SEG2; ri++) {
      var ra = ri / SEG2 * Math.PI * 2, rOut2 = contourR(cx, cz, ra, roofY) + 4;
      var mid = (146 + rOut2) / 2;
      box(solid, (rOut2 - 146), 1.6, Math.PI * 2 * mid / SEG2 + 1.8, mat4(cx + Math.cos(ra) * mid, roofY, cz + Math.sin(ra) * mid, 0, -ra + Math.PI / 2, 0), C.stoneDark);
      if (ri % 3 === 0) formation(cx + Math.cos(ra) * 152, roofY - 0.8, cz + Math.sin(ra) * 152, 1.5 + R(), true);
      if (ri % 4 === 1) formation(cx + Math.cos(ra) * (120 + R() * 12), F, cz + Math.sin(ra) * (120 + R() * 12), 1.2 + R() * 0.8, false);
    }
    cyl(glow, 146.5, 146.5, 0.3, 48, mat4(cx, roofY - 0.9, cz, 0, 0, 0), C.gold);
    /* arches over the shaft */
    for (var ai2 = 0; ai2 < 3; ai2++) {
      var arch = new T.Mesh(new T.TorusGeometry(150, 1.1, 6, 40, Math.PI), new T.MeshBasicMaterial({ color: C.gold }));
      arch.position.set(cx, roofY, cz); arch.rotation.y = ai2 * Math.PI / 3; arch.frustumCulled = false; group.add(arch);
    }
    return { roofY: roofY };
  }
  var builtA = buildCity(A_C, true);
  var builtB = buildCity(B_C, false);
  /* THE DEEP'S LOW PASS, WALLED (the gate's finding): the
   * Deep Hollow's south-western rim dips to within 15 m of
   * its floor — a marble palisade closes the stroll-out and
   * keeps the hollow honest. */
  (function () {
    f