<!-- SOLID CITY · part 1977 -->
(s);
      var hd = new T.Mesh(new T.BoxGeometry(0.5, 0.3, 0.18), seatM); hd.position.set(x, 1.28, z1 - 0.18); g.add(hd);
    });
    var dash = new T.Mesh(new T.BoxGeometry(1.6, 0.3, 0.35), dashM); dash.position.set(0, 0.98, z2); g.add(dash);
    var yoke = new T.Mesh(new T.TorusGeometry(0.21, 0.045, 6, 14), steel); yoke.position.set(-0.48, 1.0, z2 - 0.3); g.add(yoke);
  }
  function makeDart(hex, accent) {
    var g = new T.Group(), body = paint(hex);
    var base = new T.Mesh(new T.BoxGeometry(1.9, 0.42, 4.6), body); base.position.y = 0.56; g.add(base);
    var nose = new T.Mesh(new T.BoxGeometry(1.8, 0.28, 1.2), body); nose.position.set(0, 0.6, 1.95); nose.rotation.x = -0.16; g.add(nose);
    var tail = new T.Mesh(new T.BoxGeometry(1.85, 0.3, 0.9), body); tail.position.set(0, 0.72, -1.95); g.add(tail);
    var fin = new T.Mesh(new T.BoxGeometry(1.5, 0.08, 0.5), gold); fin.position.set(0, 1.06, -2.1); g.add(fin);
    seats(g, -0.35, 0.62);
    var canopy = new T.Mesh(new T.BoxGeometry(1.58, 0.52, 2.3), darkGlass); canopy.position.set(0, 1.06, -0.15); g.add(canopy);
    var spine = new T.Mesh(new T.BoxGeometry(0.3, 0.1, 2.3), body); spine.position.set(0, 1.36, -0.15); g.add(spine);
    wheels(g, 0.36, 0.26, [-0.84, 0.84], [1.45, -1.45], 0.36);
    var bar = new T.Mesh(new T.BoxGeometry(1.5, 0.09, 0.07), new T.MeshBasicMaterial({ color: 0xcdf4ff })); bar.position.set(0, 0.74, 2.42); g.add(bar);
    var rear = new T.Mesh(new T.BoxGeometry(1.6, 0.08, 0.07), new T.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 = [];
  fun