<!-- NEW7 — TEST 7 · THE WOVEN CITY · part 3 -->
y(PLOT - 3, 0.14, PLOT - 3);
    s.translate(p.x, SLAB_TOP + 0.07, p.z);
    pushGeo(THREE, slabBucket, s, 0xa39a88);       // bare plaza stone
  }

  /* ---- the list of 800, each face unique inside the fashion ---- */
  const seen = new Set();
  const buildings = [];
  let tallest = 0;
  for (const p of built) {
    /* the height field: a tall heart, tapering to the edges */
    const dn = Math.min(1, Math.hypot(p.x / 550, p.z / 495));
    let b = null;
    for (let tries = 0; tries < 60 && !b; tries++) {
      const target = 4 + 61 * Math.pow(1 - dn, 1.7);
      const floors = Math.max(4, Math.min(65, Math.round(target * (0.8 + rng() * 0.45))));
      const w = 16 + Math.floor(rng() * 12);       // 16..27, inside the plot
      const d = 16 + Math.floor(rng() * 12);
      const tiers = floors >= 34 && rng() < 0.5 ? 2 : (floors >= 16 && rng() < 0.55 ? 1 : 0);
      const variant = Math.floor(rng() * FASHION.variants);
      const crown = FASHION.crowns[Math.floor(rng() * (floors >= 40 ? 4 : 3))];
      const tint = FASHION.tints[Math.floor(rng() * FASHION.tints.length)];
      const sig = [variant, floors, w, d, tiers, crown, tint].join('|');
      if (seen.has(sig)) continue;                 // a face already standing — redraw
      seen.add(sig);
      b = { x: p.x, z: p.z, w, d, floors, tiers, variant, crown, tint };
    }
    if (!b) continue; // unreachable in practice; the count gate would speak
    b.h = b.floors * FASHION.floorH;
    tallest = Math.max(tallest, b.h);
    buildings.push(b);

    /* stand the tiers */
    const spec = variantSpec(b.variant);
    const splits = b.tiers === 0 ? [b.floors]
      : b.tiers === 1 ? [Math.round(b.floors * 0.6), 0]
      : [Math.round(b.floors * 0.5), Math.round(b.floors * 0.3), 0];
    splits[splits.length - 1] = b.floors - splits.slice(0, -1).reduce((s, x) => s + x, 0);
    let y = SLAB_TOP, tw = b.w, td = b.d;
    for (const tf of splits) {
      if (tf < 1) continue;
      const th = tf * FASHION.floorH;
      const geo = dressBox(THREE, tw, th, td, tf, spec);
      geo.translate(b.x, y + th / 2, b.z);
      pushGeo(THREE, facadeBuckets[b.variant], geo, b.tint);
      y += th;
      tw = Math.max(8, tw * (0.78 + rng() * 0.1));
      td = Math.max(8, td * (0.78 + rng() * 0.1));
    }

    /* the crown — one family, in stone, tinted per building */
    const ct = FASHION.crownStone[Math.floor(rng() * FASHION.crownStone.length)];
    const crownBox = (cw2, ch, cd2, cy) => {
      const geo = new THREE.BoxGeometry(cw2, ch, cd2);
      geo.translate(b.x, cy, b.z);
      pushGeo(THREE, crownBucket, geo, ct);
    };
    if (b.crown === 'lip') crownBox(tw + 0.7, 1.1, td + 0.7, y + 0.55);
    else if (b.crown === 'cap') crownBox(tw * 0.66, 2.6, td * 0.66, y + 1.3);
    else if (b.crown === 'step') {
      crownBox(tw * 0.8, 1.6, td * 0.8, y + 0.8);
      crownBox(tw * 0.56, 1.6, td * 0.56, y + 2.4);
    } else { // spire
      const sh = 7 + rng() * 5;
      crownBox(1.5, sh, 1.5, y + sh / 2);
      crownBox(0.8, 2, 0.8, y + sh + 1);
    }
  }

  /* ---- assemble: plates, crowns, slabs, asphalt ---- */
  for (let v = 0; v < FASHION.variants; v++) {
    if (facadeBuckets[v].vert === 0) continue;
    group.add(buildMesh(THREE, facadeBuckets[v], facadeMats[v]));
  }
  group.add(buildMesh(THREE, crownBucket,
    new THREE.MeshStandardMaterial({ vertexColors: true, roughness: 0.9, metalness: 0.02 })));
  const slabMesh = buildMesh(THREE, slabBucket,
    new THREE.MeshStandardMaterial({ vertexColors: true, roughness: 0.95, metalness: 0 }));
  slabMesh.castShadow = false;
  group.add(slabMesh);
  const asphalt = new THREE.Mesh(
    new THREE.PlaneGeometry(1100, 990),
    new THREE.MeshStandardMaterial({ color: 0x2f3034, roughness: 1, metalness: 0 })
  );
  asphalt.rotation.x = -Math.PI / 2;
  asphalt.position.y = 0.01;
  asphalt.receiveShadow = true;
  group.add(asphalt);

  const xs = [], zs = [];
  for (let i = 0; i <= COLS; i++) xs.push(-550 + i * PITCH);
  for (let j = 0; j <= ROWS; j++) zs.push(-495 + j * PITCH);

  const meta = {
    count: buildings.length,
    uniqueFaces: seen.size,
    tallest,
    buildings,
    streets: { xs, zs },
    district: { w: 1100, d: 990 },
  };
  return { group, meta };
}

export { buildDistrict };
export default buildDistrict;


===== FILE: public/new7/citizens.js =====
/* citizens.js — THE NERVESMITH's population for the King's /new1 test.
 *
 * Computer-generated citizens whose motion is OUR NEW NERVES: every figure
 * is a jointed humanoid (hips, spine, head, shoulders, elbows, knees) and
 * every pose is COMPUTED from joint angles each frame — procedural nerves,
 * no keyframes, no assets, no network. THREE is handed in by the page.
 *
 * Feet stay honest at local y=0; the page's invisible stand layer does the
 * rest. Deterministic: one seed grows the whole crowd the same way, always.
 *
 * Behaviors: WALKERS on a sidewalk loop, RUNNERS on a park oval, BIKE RIDERS
 * peda