<!-- SOLID CITY · part 1974 -->
.MeshBasicMaterial({ color: 0xff4455 })); rear.position.set(0, 0.8, -2.42); g.add(rear);
    var glowM = new T.MeshBasicMaterial({ color: accent, transparent: true, opacity: 0.32 });
    var glow = new T.Mesh(new T.PlaneGeometry(2.3, 4.7), glowM); glow.rotation.x = -Math.PI / 2; glow.position.y = 0.07; g.add(glow);
    glowMats.push(glowM);
    [-1, 1].forEach(function (sd) {
      var seam = new T.Mesh(new T.BoxGeometry(0.04, 0.5, 1.7), dashM); seam.position.set(sd * 0.97, 0.72, 0.15); g.add(seam);
      var step = new T.Mesh(new T.BoxGeometry(0.3, 0.07, 1.5), steel); step.position.set(sd * 1.05, 0.3, 0.15); g.add(step);
    });
    return g;
  }
  function makeHauler(hex, accent) {
    var g = new T.Group(), body = paint(hex);
    var base = new T.Mesh(new T.BoxGeometry(2.1, 0.78, 5.2), body); base.position.y = 0.92; g.add(base);
    var hood = new T.Mesh(new T.BoxGeometry(2.0, 0.3, 1.0), body); hood.position.set(0, 1.32, 2.2); g.add(hood);
    seats(g, -0.5, 0.55);
    var cab = new T.Mesh(new T.BoxGeometry(2.0, 0.66, 2.7), darkGlass); cab.position.set(0, 1.66, -0.35); g.add(cab);
    var roof = new T.Mesh(new T.BoxGeometry(2.05, 0.1, 2.8), body); roof.position.set(0, 2.03, -0.35); g.add(roof);
    var rack = new T.Mesh(new T.BoxGeometry(1.7, 0.07, 0.5), gold); rack.position.set(0, 2.14, 0.6); g.add(rack);
    wheels(g, 0.5, 0.3, [-0.95, 0.95], [1.7, -1.7], 0.5);
    var bar = new T.Mesh(new T.BoxGeometry(1.7, 0.1, 0.08), new T.MeshBasicMaterial({ color: 0xffe8a0 })); bar.position.set(0, 1.42, 2.76); g.add(bar);
    var guard = new T.Mesh(new T.BoxGeometry(2.0, 0.5, 0.12), dashM); guard.position.set(0, 0.62, 2.68); g.add(guard);
    var rear = new T.Mesh(new T.BoxGeometry(1.8, 0.09, 0.07), new T.MeshBasicMaterial({ color: 0xff4455 })); rear.position.set(0, 1.1, -2.66); g.add(rear);
    var glowM = new T.MeshBasicMaterial({ color: accent, transparent: true, opacity: 0.3 });
    var glow = new T.Mesh(new T.PlaneGeometry(2.5, 5.3), glowM); glow.rotation.x = -Math.PI / 2; glow.position.y = 0.07; g.add(glow);
    glowMats.push(glowM);
    return g;
  }
  var PAINTS = [[0x9aa4b5, 0x37c8d9], [0x23272e, 0xd8aa48], [0xe8e4da, 0x37c8d9], [0x8a1622, 0xff8855], [0x14586e, 0x7ae8ff], [0xc99a3a, 0xffe8a0], [0x3a2a5e, 0xb48aff]];
  function parkCar(kind, x, z, yaw, pi, name) {
    var pr = PAINTS[pi % PAINTS.length];
    var mesh = kind === 'dart' ? makeDart(pr[0], pr[1]) : makeHauler(pr[0], pr[1]);
    mesh.position.set(x, lotY, z); mesh.rotation.y = yaw;
    root.add(mesh);
    var rec = { id: 'car' + cars.length, kind: kind, name: name, mesh: mesh, x: x, z: z, y: lotY, yaw: yaw, state: 'parked' };
    cars.push(rec);
    foot.push([x, z, 2.6, 5.6, lotY, lotY + 2.1, 0, 'car:' + rec.id]);
    return rec;
  }
  // north row (z 88.5), south row (z 155.5); stalls every 12 from -120
  var dartNames = ['THE DART', 'THE COMET', 'THE NEEDLE', 'THE WASP', 'THE FALCON', 'THE QUICK', 'THE ARROW'];
  var haulNames = ['THE HAULER', 'THE MULE', 'THE OX', 'THE TUG', 'THE BEAR', 'THE CART', 'THE VAN'];
  var di = 0, hi = 0;
  [-108, -84, -60, -36, -12, 12, 36, 60, 84, 108].forEach(function (x, i) {
    if (i % 3 !== 2) parkCar('dart', x, 88.5, Math.PI + (R() - 0.5) * 0.05, di, dartNames[di++ % dartNames.length]);
    if (i % 4 !== 1) parkCar('hauler', x, 155.5, (R() - 0.5) * 0.05, hi + 2, haulNames[hi++ % haulNames.length]);
  });

  // ---------- THE LONG ROAD (lot -> the capital shelf) ----------
  var ROAD_W = 13;
  var roadSegs = [];
  function groundY(x, z) { return groundAt(-1300 + x, -620 + z); }
  function addRoadSlab(x1, z1, y1, x2, z2, y2, depth) {
    var worstQ = 0;
    [0.25, 0.5, 0.75].forEach(function (t) {
      var qx = x1 + (x2 - x1) * t, qz = z1 + (z2 - z1) * t;
      var d = Math.abs((y1 + (y2 - y1) * t) - (groundY(qx, qz) + 0.32));
      if (d > worstQ) worstQ = d;
    });
    if (worstQ > 0.30 && depth < 4) {
      var xm = (x1 + x2) / 2, zm = (z1 + z2) / 2, midG = groundY(xm, zm) + 0.32;
      addRoadSlab(x1, z1, y1, xm, zm, midG, depth + 1);
      addRoadSlab(xm, zm, midG, x2, z2, y2, depth + 1);
      return;
    }
    var run = Math.hypot(x2 - x1, z2 - z1), len3 = Math.hypot(run, y2 - y1);
    var grp = new T.Group();
    grp.position.set((x1 + x2) / 2, (y1 + y2) / 2, (z1 + z2) / 2);
    grp.rotation.y = -Math.atan2(z2 - z1, x2 - x1);
    var pitchG = new T.Group();
    pitchG.rotation.z = Math.asin(Math.max(-0.98, Math.min(0.98, (y2 - y1) / len3)));
    grp.add(pitchG);
    var slab = new T.Mesh(new T.BoxGeometry(len3 + 1.5, 0.5, ROAD_W), asphalt);
    slab.position.y = -0.25;   // the slab's TOP lies exactly on the y1..y2 line the standY walks
    pitchG.add(slab);
    for (var dd = -len3 / 2 + 5; dd < len3 / 2 - 3; dd += 11) {
      var dash = new T.Mesh(new T.BoxGeometry(4.5, 0.07, 0.7), goldTrim);
      dash.position.set(dd, 0.04, 0); pitchG.add(dash);
    }
    [-ROAD_W / 2 + 0.4, ROAD_W / 2 - 0.4].forEach(function (ez) {
      var edge = new T.Mesh(new T.BoxGeometry(l