<!-- SOLID CITY · part 1973 -->
Lines(80, 1);    // north row: stalls z 80..97
  stallLines(164, -1);  // south row: stalls z 147..164
  // lane dashes down the middle
  for (var dx = -132; dx <= 132; dx += 16) {
    var dash = new T.Mesh(new T.BoxGeometry(7, 0.06, 0.7), goldTrim);
    dash.position.set(dx, lotY + 0.05, 122); root.add(dash);
  }
  // lamps
  var lampPoleG = new T.CylinderGeometry(0.22, 0.3, 7.5, 6);
  [[-120, 78], [-40, 78], [40, 78], [120, 78], [-120, 166], [-40, 166], [40, 166], [120, 166]].forEach(function (lp) { // behind the stop bars since 2026-10-13 — the King found a pole guarding THE VAN's stall mouth
    var pole = new T.Mesh(lampPoleG, steel); pole.position.set(lp[0], lotY + 3.75, lp[1]); root.add(pole);
    var bulb = new T.Mesh(new T.SphereGeometry(0.55, 8, 6), new T.MeshBasicMaterial({ color: 0xffe8a0 }));
    bulb.position.set(lp[0], lotY + 7.6, lp[1]); root.add(bulb);
    foot.push([lp[0], lp[1], 1, 1, lotY, lotY + 7.5, 0]);
  });

  // ---------- THE RAMP (apron -> lot, walkable + rollable) ----------
  var RAMP = { x0: -8, x1: 8, z0: 26, z1: 72 };
  var run = RAMP.z1 - RAMP.z0, drop = deckY - lotY;
  var rampLen = Math.hypot(run, drop) + 2;
  var ramp = new T.Mesh(new T.BoxGeometry(16, 1.1, rampLen), asphalt2);
  ramp.position.set(0, (deckY + lotY) / 2 - 0.55, (RAMP.z0 + RAMP.z1) / 2);
  ramp.rotation.x = Math.atan2(drop, run); root.add(ramp);
  var wedge = new T.Mesh(new T.BoxGeometry(17, 7.5, rampLen), concrete);
  wedge.position.set(0, (deckY + lotY) / 2 - 4.3, (RAMP.z0 + RAMP.z1) / 2);
  wedge.rotation.x = Math.atan2(drop, run); root.add(wedge);
  [-8.4, 8.4].forEach(function (cx) {
    var curb = new T.Mesh(new T.BoxGeometry(0.8, 0.7, rampLen), gold);
    curb.position.set(cx, (deckY + lotY) / 2 + 0.1, (RAMP.z0 + RAMP.z1) / 2);
    curb.rotation.x = Math.atan2(drop, run); root.add(curb);
  });
  zones.push({ kind: 'ramp', x0: RAMP.x0, x1: RAMP.x1, z0: RAMP.z0, z1: RAMP.z1, y0: deckY, y1: lotY });

  // signs
  function standingPlate(text, x, z, yBase, ry, fs) {
    var grp = new T.Group(); grp.position.set(x, yBase, z); grp.rotation.y = ry || 0;
    var post = new T.Mesh(new T.BoxGeometry(0.35, 3.4, 0.35), steel); post.position.y = 1.7; grp.add(post);
    var face = plateMesh(text, 7.6, 1.9, fs); face.position.set(0, 3.6, 0.25); grp.add(face);
    root.add(grp); foot.push([x, z, 1, 1, yBase, yBase + 4, 0]);
    return grp;
  }
  standingPlate('THE SOUTH LOT', -14, 18, deckY, Math.PI, 44);           // on the apron, beside the ramp head
  standingPlate('FIRST CITY — SOUTH LOT', -128, 100, lotY, 0.5, 30);     // the lot's west end
  standingPlate('RIDES ROLL: WALK TO A CAR, TAP ACTION', 24, 101, lotY, Math.PI, 26);  // the lane's edge

  // ---------- THE RIDES ----------
  var glowMats = [];
  function paint(hex) { return new T.MeshLambertMaterial({ color: hex, emissive: hex, emissiveIntensity: 0.12 }); }
  function wheels(g, r, w, xs, zs, y) {
    var wg = new T.CylinderGeometry(r, r, w, 12);
    var hg = new T.CylinderGeometry(r * 0.45, r * 0.45, w + 0.06, 8);
    xs.forEach(function (x) { zs.forEach(function (z) {
      var wh = new T.Mesh(wg, tyreM); wh.rotation.z = Math.PI / 2; wh.position.set(x, y, z); g.add(wh);
      var hub = new T.Mesh(hg, gold); hub.rotation.z = Math.PI / 2; hub.position.set(x, y, z); g.add(hub);
    }); });
  }
  function seats(g, z1, z2) {
    [-0.48, 0.48].forEach(function (x) {
      var s = new T.Mesh(new T.BoxGeometry(0.62, 0.75, 0.6), seatM); s.position.set(x, 0.78, z1); g.add(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