<!-- SOLID CITY · part 2565 -->
tion buildRoads() {
    var smith = createRoadSmith({ groundAt: groundAt });
    var triBase = standTris.length;   // the clearance law judges the roads' and aprons' triangles
    function buildOne(name, points, furniture, pinY, pinEndY, pinHost, taperStart, taperEnd) {
      var spec = { points: points, width: 7.6, furniture: furniture };
      if (pinY != null) spec.pinStartY = pinY;
      if (pinEndY != null) spec.pinEndY = pinEndY;
      if (pinHost) spec.pinHost = pinHost;
      if (taperStart) spec.taperStart = taperStart;
      if (taperEnd) spec.taperEnd = taperEnd;
      var built = smith.buildRoad(spec);
      pourSurf(built.ribbon, solid, C.road);
      /* THE SLOPES WEAR THE MOUNTAIN (the King's word, 2026-10-13
       * ~23:47): "these slopes could be grass colored and mesh
       * with the mountain." The whole slope — brow slabs and deep
       * banks alike — pours in lawn green now, one grass hillside
       * from the road's edge to the land it was cut from. The
       * stone brow stands down. */
      pourSurf(built.skirtL, solid, C.lawn); pourSurf(built.skirtR, solid, C.lawn);
      if (built.bankGrass) pourSurf(built.bankGrass, solid, C.lawn);   // the Grass Amendment: the road's deep banks wear lawn green
      if (built.cliffW) pourSurf(built.cliffW, solid, C.stone);        // the Cliff Walls: a cut through the slab stands in stone
      pourSurf(built.fans, solid, C.conc);
      if (furniture === 'bench') {
        pourSurf(built.shoL, solid, C.soil); pourSurf(built.shoR, solid, C.soil);
        pourSurf(built.rail, solid, 0x9aa4b5); pourSurf(built.posts, solid, C.stoneDark);
      } else {
        pourSurf(built.curbL, solid, C.stoneDark); pourSurf(built.curbR, solid, C.stoneDark);
        pourSurf(built.walk, solid, C.conc);
        pourSurf(built.goldL, glowB, 0xd8a833); pourSurf(built.goldR, glowB, 0xd8a833);
      }
      for (var i = 0; i < built.standTris.length; i++) standTris.push(built.standTris[i]);
      built.stations.forEach(function (s) { roadPts.push([s.x, s.z]); });
      smithRoads[name] = built;
      return built;
    }
    function surfSt(built, x, z) {
      var best = null, bd = 1e12;
      built.stations.forEach(function (s) { var d = (s.x - x) * (s.x - x) + (s.z - z) * (s.z - z); if (d < bd) { bd = d; best = s; } });
      return best;
    }
    var headIdx = ROAD_DEFS[1].findIndex(function (p) { return p[0] === 915 && p[1] === -1285; });
    // THE HEAD'S HEIGHT IS B2'S OWN: the traverse's natural first
    // height is probed first, and the climb is pinned to ARRIVE at
    // it — the junction pad stands on honest fill so the three
    // roads that meet here meet LEVEL, because the face east of
    // this shoulder forbids the traverse to dive to the climb.
    var probeB2 = smith.buildRoad({ points: ROAD_DEFS[1].slice(headIdx), width: 7.6, furniture: 'bench' });
    var nodeY = probeB2.stations[0].y;
    var bB1 = buildOne('B1', ROAD_DEFS[1].slice(0, headIdx + 1), 'bench', null, nodeY, null, null, { width: 5.6, over: 30 });
    var headSt = bB1.stations[bB1.stations.length - 1];
    var bB2 = buildOne('B2', ROAD_DEFS[1].slice(headIdx), 'bench', headSt.y, null, null, { width: 5.6, over: 30 });
    var hBC = surfSt(bB2, 945, -1487.5);
    buildOne('C', ROAD_DEFS[2], 'bench', hBC.y, null, hBC);
    // the spur is hosted by THE PAD: a junction is a level place,
    // and a guest leaving it should be held to the pad's own
    // plane — not to the arrival pitch of whichever road happened
    // to be built first. (Its host was the climb's last station,
    // and when the climb's line moved, the spur's first metres
    // were clamped to a falling plane: a 72% kink at the seam.)
    var headPad = { x: 915, z: -1285, y: headSt.y, grade: 0, bank: 0, fx: 0, fz: 1, rx: 1, rz: 0 };
    buildOne('S', ROAD_DEFS[3], 'bench', headSt.y, null, headPad);
    var hA = surfSt(bB1, 430, -1065);
    buildOne('A1', ROAD_DEFS[0].slice(1).reverse(), 'street', null, hA.y);
    buildOne('A2', [[430, -1065], [640, -1005]], 'street', hA.y, null, hA);
    apronAt(915, -1285, headSt);
    apronAt(945, -1487.5, hBC);
    apronAt(430, -1065, hA);
    // THE CLEARANCE OF SURFACES: the drive reads VOID at a
    // sample when the HIGHEST standing triangle there rises
    // above the world's gate — the road's own profile plus 1.6.
    // Where benches braid, an upper road's shoulder can be that
    // highest triangle over a lower road's line, and the lower
    // road is voided beneath a surface it cannot use. The law
    // therefore strikes the ARGMAX ONLY: the single highest
    // triangle at each voided sample, pass after pass, until no
    // centreline sample of any road is voided by a road's own
    // triangles. Nothing else is struck — a triangle that merely
    // rises over a neighbour's line is a bench, and benches are
    // the country these roads are built in. Struck triangles
    // remain in the eye; they are removed from the standing 