<!-- SOLID CITY · part 2148 -->
 var leg = new T.Mesh(new T.BoxGeometry(0.4, 1.0, 1.0), basaltMat);
    leg.position.set(16 + s * 1.8, 1.0, 14); root.add(leg);
  });
  foot.push([16, 14, 4.5, 1.2, 0, 1.95, 0]);
  // its true name
  var depPlaque = namePlaque(T, 'THE DEPARTURE', 7, stoneMat);
  depPlaque.position.set(21, 2.6, 21); depPlaque.rotation.y = -0.6; root.add(depPlaque);
  foot.push([21, 21, 2, 2, 0, 4, 0]);
  // platform lamp
  var lampP = new T.Mesh(new T.CylinderGeometry(0.25, 0.35, 5, 8), basaltMat);
  lampP.position.set(11, 3.7, 4); root.add(lampP);
  var lampG = new T.Mesh(new T.SphereGeometry(0.55, 10, 8), goldGlow);
  lampG.position.set(11, 6.4, 4); root.add(lampG);
  var lampL = new T.PointLight(0xffd9a0, 1.2, 30); lampL.position.set(11, 6.4, 4); root.add(lampL);
  foot.push([11, 4, 0.7, 0.7, 0, 6.2, 0]);

  // ================= THE RAIL: one glowing gold line =================
  var rail = new T.Mesh(new T.BoxGeometry(0.5, 0.12, 810), goldBasic);
  rail.position.set(0, 0.32, -391); root.add(rail);
  // rail bed
  var bed = new T.Mesh(new T.BoxGeometry(3.2, 0.25, 810), basaltMat);
  bed.position.set(0, 0.12, -391); root.add(bed);

  // ================= THE HYPER TRAIN =================
  var train = new T.Group(); train.name = 'hyper-train-car';
  var body = new T.Mesh(new T.BoxGeometry(4, 2.4, 16), hullMat);
  body.position.y = 0.6; train.add(body);
  // pointed nose (toward -Z)
  var nose = new T.Mesh(new T.ConeGeometry(2, 5, 4), hullMat);
  nose.rotation.x = -Math.PI / 2; nose.rotation.y = Math.PI / 4;
  nose.position.set(0, 0.6, -10.5); nose.scale.set(1, 1, 0.72); train.add(nose);
  // gold stripe
  [-1, 1].forEach(function (s) {
    var stripe = new T.Mesh(new T.BoxGeometry(0.12, 0.5, 15), goldBasic);
    stripe.position.set(s * 2.02, 0.9, 0); train.add(stripe);
  });
  // glowing windows
  var winMat = new T.MeshBasicMaterial({ color: 0xffd9a0 });
  [-1, 1].forEach(function (s) {
    for (var wi = 0; wi < 5; wi++) {
      var win = new T.Mesh(new T.BoxGeometry(0.1, 0.8, 1.6), winMat);
      win.position.set(s * 2.03, 1.25, -5.5 + wi * 2.8); train.add(win);
    }
  });
  // crown light
  var crown = new T.Mesh(new T.SphereGeometry(0.5, 10, 8), goldGlow);
  crown.position.set(0, 2.1, -2); train.add(crown);
  var crownL = new T.PointLight(0xffd9a0, 1.0, 25); crownL.position.set(0, 2.5, 0); train.add(crownL);
  // maglev glow beneath
  var under = new T.Mesh(new T.BoxGeometry(3.4, 0.3, 15),
    new T.MeshBasicMaterial({ color: 0x7a5aff, transparent: true, opacity: 0.55, blending: T.AdditiveBlending, depthWrite: false }));
  under.position.y = -0.75; train.add(under);
  train.position.set(0, 1.7, Z_STATION);
  root.add(train);

  // ================= THE WORMHOLE =================
  var worm = new T.Group(); worm.name = 'wormhole';
  worm.position.set(0, 10, -793);
  var ringCols = [0xd8aa48, 0x7a4aff, 0x2a4aff, 0x7a4aff, 0xd8aa48];
  var rings = [];
  for (var ri = 0; ri < 5; ri++) {
    var rr = 3.5 + ri * 1.5;
    var ring = new T.Mesh(new T.TorusGeometry(rr, 0.32, 10, 64),
      new T.MeshBasicMaterial({ color: ringCols[ri], transparent: true, opacity: 0.92 }));
    worm.add(ring);
    // golden-angle beads: phyllotaxis on the ring
    var beads = new T.Group();
    for (var bi = 0; bi < 8; bi++) {
      var ba = bi * GOLDEN_ANGLE;
      var bead = new T.Mesh(new T.SphereGeometry(0.42, 8, 6), goldGlow);
      bead.position.set(Math.cos(ba) * rr, Math.sin(ba) * rr, 0);
      beads.add(bead);
    }
    worm.add(beads);
    rings.push({ m: ring, b: beads, sp: (ri % 2 ? -1 : 1) * (0.25 + ri * 0.12) });
  }
  // the throat: streaked star tunnel
  var throatTexC = document.createElement('canvas'); throatTexC.width = 256; throatTexC.height = 256;
  var tg = throatTexC.getContext('2d');
  tg.fillStyle = '#050510'; tg.fillRect(0, 0, 256, 256);
  for (var si = 0; si < 220; si++) {
    var sx = Math.random() * 256, sy = Math.random() * 256, sl = 4 + Math.random() * 14;
    tg.strokeStyle = 'rgba(255,255,255,' + (0.35 + Math.random() * 0.6) + ')';
    tg.lineWidth = 1 + Math.random();
    tg.beginPath(); tg.moveTo(sx, sy); tg.lineTo(sx, sy + sl); tg.stroke();
  }
  var throatTex = new T.CanvasTexture(throatTexC); throatTex.encoding = T.sRGBEncoding;
  var throat = new T.Mesh(new T.CylinderGeometry(3.2, 3.2, 26, 24, 1, true),
    new T.MeshBasicMaterial({ map: throatTex, side: T.DoubleSide, transparent: true, opacity: 0.95 }));
  throat.rotation.x = Math.PI / 2; throat.position.z = -10; worm.add(throat);
  var throatCap = new T.Mesh(new T.CircleGeometry(3.2, 24),
    new T.MeshBasicMaterial({ color: 0xffffff }));
  throatCap.position.z = -23; worm.add(throatCap);
  var wormLight = new T.PointLight(0x8a6aff, 2.4, 70); worm.add(wormLight);
  root.add(worm);

  // ================= THE ARRIVAL: Starwell platform =================
  var arr = new T.Mesh(new T.CylinderGeometry(9, 10, 1.0, 24), stoneMat);
  arr.position.set(0, 0.5, Z_ARRIVAL); root.add(arr);
  foot.push([0, Z_ARRIVAL, 18, 18, 0, 1.0, 0