<!-- SOLID CITY · part 1978 -->
ction 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(len3 + 1.5, 0.07, 0.35), lineWhite);
      edge.position.set(0, 0.04, ez); pitchG.add(edge);
    });
    root.add(grp);
    roadSegs.push({ x1: x1, z1: z1, y1: y1, x2: x2, z2: z2, y2: y2 });
  }
  var RX = 140, RZ = 122;                 // road starts at the lot's east edge, on the lane line
  var roadPts = [[RX, RZ, lotY]];
  for (var rx = RX + 30; rx <= 612; rx += 30) roadPts.push([rx, RZ, groundY(rx, RZ) + 0.32]);
  for (var pi2 = 0; pi2 < roadPts.length - 1; pi2++) {
    addRoadSlab(roadPts[pi2][0], roadPts[pi2][1], roadPts[pi2][2], roadPts[pi2 + 1][0], roadPts[pi2 + 1][1], roadPts[pi2 + 1][2], 0);
  }
  zones.push({ kind: 'road', segs: roadSegs });
  // junction disc on the capital shelf
  var jx = 628, jz = RZ, jy = groundY(jx, jz) + 0.3;
  var disc = new T.Mesh(new T.CylinderGeometry(16, 16, 0.5, 24), asphalt2);
  disc.position.set(jx, jy - 0.25, jz); root.add(disc);
  var discRing = new T.Mesh(new T.TorusGeometry(15.4, 0.35, 6, 32), goldTrim);
  discRing.rotation.x = Math.PI / 2; discRing.position.set(jx, jy + 0.05, jz); root.add(discRing);
  zones.push({ kind: 'flat', x0: jx - 16, x1: jx + 16, z0: jz - 16, z1: jz + 16, y: jy });
  standingPlate('TO THE CAPITAL', jx - 10, jz - 14, jy, 0.5, 34);
  standingPlate('THE LONG ROAD', RX + 8, RZ - 12, lotY, -0.6, 34);

  root.userData = {
    footprint: foot,
    zones: zones,
    cars: cars,
    lotY: lotY,
    deckY: deckY,
    update: function (t) {
      var p = 0.26 + 0.09 * Math.sin(t * 1.7);
      for (var i = 0; i < glowMats.length; i++) glowMats[i].opacity = p;
    }
  };
  return root;
}
export default createFirstParking;


===== FILE: public/city/first-ward-sign-place.js =====
/* ============================================================
   THE FIRST WARD SIGN — placer (King's commission, 2026-10-13).
   Stands at the roadside where the south plain road (Road A)
   enters the Ancestors' country — the gateway of the first
   hood, telling every traveler where we came from.
   ============================================================ */
(function () {
'use strict';
if (!window.SC || !SC.api) return;
var A = SC.api, S = A.S;
var POS = { x: 638, z: -997 }, NAME = 'THE FIRST WARD';
var F = { state: 'idle', group: null, wait: 4.5, said: false };

function radar(g, blip, fl) {
  if (F.group) blip(POS.x, POS.z, '#ffd27a', fl ? 3 : 6, fl ? '' : 'FIRST WARD');
  if (!F.said && F.group) {
    var dx = POS.x - S.p.x, dz = POS.z - S.p.z;
    if (dx * dx + dz * dz < 260 * 260) {
      F.said = true;
      A.help('🪧 A sign stands by the road: THE FIRST WARD — "WE GHETTO OUT HERE! BUT WE GO UP!"', 7);
    }
  }
}
function update(dt) { if (F.group) F.group.userData.update(S.t); }
function load() {
  import('/city/first-ward-sign.js?v=20261013a').then(function (mod) {
    return fetch('/city/city.js').then(function (r) { return r.text(); }).then(function (src) {
      var seg = src.slice(src.indexOf('var SEED'), src.indexOf('function mulberry'));
      var gnd = new Function(seg + '; return groundAt;')();
      return { mod: mod, gnd: gnd };
    });
  }).then(function (r) {
    var grp = r.mod.createFirstWardSign({ THREE: A.THREE, groundAt: function (lx, lz) { return r.gnd(POS.x + lx, POS.z + lz); } });
    grp.position.set(POS.x, 0, POS.z);
    grp.rotation.y = 2.864;   // face the road and the travelers coming from the city
    A.scene.add(grp); F.group = grp;
    var g0 = r.gnd(POS.x, POS.z);
    // one low solid across the posts — walk around the sign, not through i