<!-- SOLID CITY · part 2666 -->
08.7],[896,-1390],[892,-1370],[900,-1350],[906,-1338],[916,-1328],[919,-1322],[914,-1306],[915,-1285],[945,-1360],[945,-1393.7],[945,-1427.5],[941.3,-1446.2],[937.5,-1450],[933.8,-1468.7],[933.8,-1472.5],[952.5,-1480],[945,-1487.5],[950,-1505],[960,-1520],[980,-1524],[990,-1525],[1012.5,-1547.5],[1027.5,-1577.5],[1012.5,-1600],[1018,-1618],[1010,-1638],[1037.5,-1625],[1053.8,-1626.2],[1065,-1637.5],[1075,-1626.7],[1084,-1610],[1072,-1602],[1065,-1592.5],[1065,-1585],[1080,-1588.7],[1080,-1577.5],[1098,-1568],[1112,-1562],[1126,-1550],[1136.3,-1547.5],[1155,-1543.7],[1170,-1543.7],[1182,-1538],[1197.5,-1550],[1200,-1555],[1218,-1549],[1222.5,-1547.5],[1237.5,-1558.7],[1250,-1552],[1263,-1547.9]],
    // C: the twisted north road — from the B junction over the Overlook pitches to the Far North
    [[945,-1487.5],[903.8,-1517.5],[892.5,-1513.7],[892.5,-1510],[851.3,-1536.2],[835,-1545],[835,-1552.5],[828.8,-1551.2],[820,-1552.5],[835,-1582.5],[862.5,-1600],[855,-1622.5],[896.3,-1663.7],[908,-1684],[904,-1702],[900,-1727.5],[918.8,-1731.2],[911.3,-1768.7],[903.8,-1787.5],[952.5,-1810],[963.8,-1858.7],[935,-1860],[890,-1897.5],[858.8,-1888.7],[836.3,-1903.7],[800,-1910],[791.3,-1903.7],[757.5,-1948.7],[757.5,-1997.5],[708.8,-2031.2],[650,-2015],[590,-2025],[547.5,-2057.5],[543.8,-2068.7],[525,-2125],[505,-2180],[480,-2230],[445,-2277.5],[436.3,-2336.2],[460,-2385]],
    // S: the East Plain Spur — from the column head to the East Plain 'ohana
    [[915,-1285],[915,-1281.2],[907.5,-1232.5],[907.5,-1221.2],[880,-1180]]
  ];
  var roadPts = [];
  var ROAD_SEGS = [];
  ROAD_DEFS.forEach(function (line) { for (var i = 0; i < line.length - 1; i++) ROAD_SEGS.push([line[i], line[i + 1]]); });
  function roadClear(x, z, lotR) {
    // THE ROAD'S VERGE (2026-10-13, on the King's report): no lot may reach
    // the carriageway — a home is sited only when its whole lot circle
    // clears every road segment by the road's half-width plus a verge.
    for (var i = 0; i < ROAD_SEGS.length; i++) {
      var a = ROAD_SEGS[i][0], b = ROAD_SEGS[i][1];
      var dx = b[0] - a[0], dz = b[1] - a[1], L2 = dx * dx + dz * dz;
      var t = L2 ? ((x - a[0]) * dx + (z - a[1]) * dz) / L2 : 0;
      t = Math.max(0, Math.min(1, t));
      if (Math.hypot(x - (a[0] + dx * t), z - (a[1] + dz * t)) < lotR + 4.6) return false;
    }
    return true;
  }
  /* ================= ROADS — THE ROAD SMITH (2026-10-13) =================
   * The old slab roads are REMOVED on the King's word and every road
   * in the district is built by the Road Smith (roads.js): one
   * station table per road, from which the mesh, the standing, and
   * the road points all read. Homes re-site by the verge law against
   * these very lines; driveways are served from the smith's
   * stations; lamps perch perpendicular to them. The Rim Step
   * demonstration is absorbed into Road B, whose whole length now
   * carries what the pitch proved. */
  var smithRoads = {};
  var apronSamples = [];   // the aprons' ring samples, recorded for the clearance law   // name -> the smith's built road
  function pourSurf(surf, batch, color) {
    if (!surf.pos.length) return;
    var g = new T.BufferGeometry();
    g.setAttribute('position', new T.Float32BufferAttribute(surf.pos, 3));
    g.setAttribute('normal', new T.Float32BufferAttribute(surf.nor, 3));
    batch.add(g, new T.Matrix4(), color);
  }
  function triPush(S, a, b, c) {
    var ux = b[0] - a[0], uy = b[1] - a[1], uz = b[2] - a[2];
    var vx = c[0] - a[0], vy = c[1] - a[1], vz = c[2] - a[2];
    var nx = uy * vz - uz * vy, ny = uz * vx - ux * vz, nz = ux * vy - uy * vx;
    var L = Math.hypot(nx, ny, nz) || 1;
    if (ny < 0) { var t = b; b = c; c = t; nx = -nx; ny = -ny; nz = -nz; }
    S.pos.push(a[0], a[1], a[2], b[0], b[1], b[2], c[0], c[1], c[2]);
    for (var i = 0; i < 3; i++) S.nor.push(nx / L, ny / L, nz / L);
  }
  /* ============ THE REJECTION + THE PORTS (the King's word,
   * 2026-10-14 ~01:48): "Reject the mountain roads entirely —
   * build the ports, terraces where the land demands." We had
   * started building on a flaw — lines drawn before the land
   * was read — and it morphed through two nights of lessons.
   * So the six mountain roads NEVER RISE: no ribbons, no banks,
   * no junction discs, no lamps along them, no road bodies, no
   * SOLID Bridge, and no driveways running to roads that do
   * not exist. The smith still SURVEYS the alignments inside
   * this factory — the houses were placed against that survey
   * and houses do not move — but the survey is a memory now,
   * not a build. What rises instead: SPACESHIP PORTS at the
   * settlements — level stone discs with a gold ring and a
   * beacon, standing on natural flat ground where the survey
   * found it, and standing as fill TERRACES where the land
   * demanded. The ports are the way between places now. */
  var ROADS_REJECTED = true;
  var ports = [];
  var PORT_SITES = [
    { name: 'GATE ROAD 