<!-- SOLID CITY · part 2844 -->
.poolFloor, group, 0, -0.98, 0, 36.6, 0.26, 24.6);
  mesh(BOX, MAT.poolWall, group, 0, -0.43, -11.95, 36.4, 0.85, 0.3);
  mesh(BOX, MAT.poolWall, group, 0, -0.43, 11.95, 36.4, 0.85, 0.3);
  mesh(BOX, MAT.poolWall, group, -17.95, -0.43, 0, 0.3, 0.85, 23.6);
  mesh(BOX, MAT.poolWall, group, 17.95, -0.43, 0, 0.3, 0.85, 23.6);
  // coping — the pale rim you sit on; the south rim leaves a gap for steps
  mesh(BOX, MAT.coping, group, 0, 0.07, -12, 38.6, 0.14, 1.3);
  mesh(BOX, MAT.coping, group, -10.9, 0.07, 12, 16.8, 0.14, 1.3);
  mesh(BOX, MAT.coping, group, 10.9, 0.07, 12, 16.8, 0.14, 1.3);
  mesh(BOX, MAT.coping, group, -18, 0.07, 0, 1.3, 0.14, 25.3);
  mesh(BOX, MAT.coping, group, 18, 0.07, 0, 1.3, 0.14, 25.3);
  // steps down into the water (south, through the gap)
  mesh(BOX, MAT.coping, group, 0, -0.11, 11.4, 5, 0.22, 0.9);
  mesh(BOX, MAT.coping, group, 0, -0.24, 10.5, 5, 0.48, 0.9);
  mesh(BOX, MAT.coping, group, 0, -0.36, 9.6, 5, 0.72, 0.9);
  // the water — two shimmering layers, scrolled against each other
  function causticTexture(seed) {
    var c = document.createElement('canvas'); c.width = 256; c.height = 256;
    var g = c.getContext('2d');
    g.clearRect(0, 0, 256, 256);
    var n = 46;
    for (var i = 0; i < n; i++) {
      var x = ((i * 67 + seed * 31) % 240) + 8, y = ((i * 97 + seed * 57) % 240) + 8, r = 9 + ((i * 13) % 22);
      var gr = g.createRadialGradient(x, y, 1, x, y, r);
      gr.addColorStop(0, 'rgba(255,255,255,0.20)'); gr.addColorStop(1, 'rgba(255,255,255,0)');
      g.fillStyle = gr; g.beginPath(); g.arc(x, y, r, 0, 6.3); g.fill();
    }
    var t = new THREE.CanvasTexture(c);
    t.wrapS = t.wrapT = THREE.RepeatWrapping; t.repeat.set(3, 2);
    return t;
  }
  var waterTexA = causticTexture(1), waterTexB = causticTexture(7);
  var waterMatA = new THREE.MeshLambertMaterial({ color: 0x35b6c9, transparent: true, opacity: 0.62, map: waterTexA });
  var waterMatB = new THREE.MeshLambertMaterial({ color: 0x9fe8f2, transparent: true, opacity: 0.30, map: waterTexB });
  var waterA = new THREE.Mesh(new THREE.PlaneGeometry(35.8, 23.8), waterMatA);
  waterA.rotation.x = -Math.PI / 2; waterA.position.y = -0.30; group.add(waterA);
  var waterB = new THREE.Mesh(new THREE.PlaneGeometry(35.8, 23.8), waterMatB);
  waterB.rotation.x = -Math.PI / 2; waterB.position.y = -0.36; group.add(waterB);

  /* ================= SECTION 2 — THE OCTAHEDRON ========================
     Solid's face, forged from the King's own image: gold faces, cyan light
     in art-deco engraved cuts — sunbursts, chevrons, wheat borders. It rests
     half-risen from the pool floor, breathing light very slowly. */
  function decoTextures() {
    var W = 1024, H = 512;
    var c = document.createElement('canvas'); c.width = W; c.height = H;
    var g = c.getContext('2d');
    var grad = g.createLinearGradient(0, 0, 0, H);
    grad.addColorStop(0, '#e9c766'); grad.addColorStop(0.5, '#c9962e'); grad.addColorStop(1, '#a87b1f');
    g.fillStyle = grad; g.fillRect(0, 0, W, H);
    var e = document.createElement('canvas'); e.width = W; e.height = H;
    var ge = e.getContext('2d');
    ge.fillStyle = '#000000'; ge.fillRect(0, 0, W, H);
    function lines(ctx, stroke) {
      ctx.strokeStyle = stroke; ctx.lineWidth = 3;
      // sunburst fans
      for (var f = 0; f < 4; f++) {
        var cx = 128 + f * 256, cy = 300;
        for (var r = 0; r <= 12; r++) {
          var a = Math.PI * (0.08 + 0.84 * (r / 12));
          ctx.beginPath(); ctx.moveTo(cx, cy);
          ctx.lineTo(cx + Math.cos(a) * 118, cy - Math.sin(a) * 118); ctx.stroke();
        }
        ctx.beginPath(); ctx.arc(cx, cy, 118, Math.PI * 1.05, Math.PI * 1.95); ctx.stroke();
        ctx.beginPath(); ctx.arc(cx, cy, 84, Math.PI * 1.05, Math.PI * 1.95); ctx.stroke();
      }
      // chevron rows
      for (var row = 0; row < 3; row++) {
        var y0 = 60 + row * 44;
        for (var x = 0; x < W; x += 64) {
          ctx.beginPath(); ctx.moveTo(x, y0 + 22); ctx.lineTo(x + 32, y0); ctx.lineTo(x + 64, y0 + 22); ctx.stroke();
        }
      }
      // stepped pyramid hearts
      for (var p = 0; p < 4; p++) {
        var px = 128 + p * 256;
        for (var s = 0; s < 5; s++) {
          var w = 96 - s * 19, yy = 428 - s * 17;
          ctx.beginPath(); ctx.moveTo(px - w / 2, yy); ctx.lineTo(px + w / 2, yy); ctx.stroke();
        }
      }
      // wheat borders top and bottom
      [18, H - 18].forEach(function (yy) {
        for (var wx = 16; wx < W; wx += 42) {
          ctx.beginPath(); ctx.moveTo(wx, yy); ctx.lineTo(wx + 12, yy - 10); ctx.stroke();
          ctx.beginPath(); ctx.moveTo(wx, yy); ctx.lineTo(wx + 12, yy + 10); ctx.stroke();
        }
      });
      // frame lines
      ctx.lineWidth = 5; ctx.strokeRect(8, 8, W - 16, H - 16);
    }
    lines(g, 'rgba(64,42,6,0.85)');
    lines(ge, '#54e0f0');
    var map = new THREE.CanvasTexture(c);
    var glow = new THREE.CanvasTexture(e);
    return { map: map, glow: glow }