<!-- SOLID CITY · part 59 -->
phereGeometry(0.2, 12, 8), 0, 7.65, -3.1);
  st.add(new T.BoxGeometry(0.14, 0.14, 3.2), 0, 7.5, -1.55); gd.add(new T.CylinderGeometry(0.22, 0.42, 0.5, 16, 1, true), 0, 7.25, 0.1);
  // the open book on a lectern tilted toward the reader
  var lec = new T.Group(); lec.position.set(0, 2.62, 0.05); lec.rotation.x = 0.34;
  var lm = new Merge(), lg = new Merge();
  lm.add(new T.BoxGeometry(3.7, 0.07, 2.5), 0, 0.0, 0);                                 // black cover boards
  lg.add(new T.BoxGeometry(3.78, 0.03, 2.58), 0, -0.04, 0);                             // gilt edge of the boards
  lg.add(new T.BoxGeometry(1.7, 0.1, 2.3), -0.88, 0.07, 0); lg.add(new T.BoxGeometry(1.7, 0.1, 2.3), 0.88, 0.07, 0);   // gilded page blocks
  lg.add(new T.CylinderGeometry(0.07, 0.07, 2.4, 8), 0, 0.06, 0, Math.PI / 2);          // spine
  rd.add(new T.BoxGeometry(0.08, 0.01, 1.3), 0.12, 0.13, 1.6, 0.6);                      // red ribbon bookmark
  lec.add(lm.mesh(stone)); lec.add(lg.mesh(gold)); lec.add(rd.mesh(red));
  var W = A.MOBILE ? 1024 : 2048, cv = BookLawArt.engrave(W, W / 2, book);
  var tex = new T.CanvasTexture(cv); tex.encoding = T.sRGBEncoding; tex.anisotropy = 8; tex.generateMipmaps = true; tex.minFilter = T.LinearMipmapLinearFilter;
  var pm = curve(new T.MeshBasicMaterial({ map: tex }));
  var pg = new T.Mesh((function () { var a = pageGeo(1.72, 2.32, true), b = pageGeo(1.72, 2.32, false), m = new Merge(); m.g.push(a.toNonIndexed(), b.toNonIndexed()); a.dispose(); b.dispose(); return m.mesh(pm).geometry; })(), pm);
  pg.position.y = 0.1; lec.add(pg);
  // soft spotlight: additive cone + floor glow (no real light: adding one would recompile every material in the city)
  var cone = new T.Mesh(new T.CylinderGeometry(0.4, 2.6, 4.9, 32, 1, true), new T.MeshBasicMaterial({ map: gradTex(4, 128, function (g, w, h) { var gr = g.createLinearGradient(0, 0, 0, h); gr.addColorStop(0, 'rgba(255,214,130,0.42)'); gr.addColorStop(1, 'rgba(255,214,130,0)'); g.fillStyle = gr; g.fillRect(0, 0, w, h); }), transparent: true, blending: T.AdditiveBlending, depthWrite: false, side: T.DoubleSide, fog: true }));
  cone.position.set(0, 4.75, 0.15); cone.renderOrder = 2;
  var glow = new T.Mesh(new T.CircleGeometry(3.4, 40), new T.MeshBasicMaterial({ map: gradTex(64, 64, function (g, w) { var gr = g.createRadialGradient(w / 2, w / 2, 0, w / 2, w / 2, w / 2); gr.addColorStop(0, 'rgba(255,205,110,0.55)'); gr.addColorStop(1, 'rgba(255,205,110,0)'); g.fillStyle = gr; g.fillRect(0, 0, w, w); }), transparent: true, blending: T.AdditiveBlending, depthWrite: false }));
  glow.rotation.x = -Math.PI / 2; glow.position.y = 0.23; glow.renderOrder = 2;
  // engraved plaque on the plinth front
  var pc = document.createElement('canvas'); pc.width = 512; pc.height = 128; var q = pc.getContext('2d');
  q.fillStyle = '#070506'; q.fillRect(0, 0, 512, 128); q.strokeStyle = '#d9ab46'; q.lineWidth = 4; q.strokeRect(6, 6, 500, 116); q.lineWidth = 1; q.strokeRect(14, 14, 484, 100);
  q.fillStyle = '#ecc76e'; q.textAlign = 'center'; q.textBaseline = 'middle'; q.font = '700 34px Georgia, serif'; q.fillText("THE KING'S BOOK OF LAW", 256, 52); q.font = '600 20px Georgia, serif'; q.fillStyle = '#c9a24c'; q.fillText('THIRTEEN PAGES \u00b7 READ THE BOOK', 256, 90);
  var pt = new T.CanvasTexture(pc); pt.encoding = T.sRGBEncoding;
  var plaque = new T.Mesh(new T.PlaneGeometry(2.3, 0.575), curve(new T.MeshBasicMaterial({ map: pt }))); plaque.position.set(0, 1.0, 0.51); plaque.rotation.x = -0.02;
  var col = new T.Mesh(new T.BoxGeometry(1.6, 0.62, 0.02), stone); col.position.set(0, 1.0, 0.49);   // plaque backing on the column face
  var grp = new T.Group(); grp.name = 'kings-book-of-law'; grp.position.set(POS.x, Y, POS.z); grp.rotation.y = FACE;
  grp.add(st.mesh(stone)); grp.add(gd.mesh(gold)); grp.add(lec); grp.add(cone); grp.add(glow); grp.add(col); grp.add(plaque);
  A.world.add(grp); B.group = grp;
}
function solids() {
  var hw = 1.45, hd = 1.15, c = Math.cos(FACE), s = Math.sin(FACE), ex = Math.abs(c) * hw + Math.abs(s) * hd, ez = Math.abs(s) * hw + Math.abs(c) * hd;
  A.solids.push({ x0: POS.x - ex, x1: POS.x + ex, z0: POS.z - ez, z1: POS.z + ez, y0: Y, y1: Y + 3.4, book: true });
  var px = POS.x - s * 3.1, pz = POS.z - c * 3.1; A.solids.push({ x0: px - 0.25, x1: px + 0.25, z0: pz - 0.25, z1: pz + 0.25, y0: Y, y1: Y + 7.9, book: true });   // spotlight post
}
function stop() {
  var H = window.CityHyper; if (!H || !H.pois || H.pois.some(function (p) { return p.id === 'book'; })) return;
  H.pois.splice(1, 0, { id: 'book', name: 'The King\u2019s Book of Law', short: 'BOOK OF LAW', x: POS.x, z: POS.z, stand: { x: READ.x, z: READ.z }, act: 'book',
    alias: 'book law laws kings king covenant bookoflaw', text: 'The King\u2019s Book of Law, open on a black-and-gold pedestal in the Forum Plaza: thirteen pages, thirteen truths, engraved in gold. Walk up and tap READ THE BOOK.' });
  if (H.regrid) H.regrid();
}
function watchCap() {   // 