<!-- SOLID CITY · part 3097 -->
rim = new T.Mesh(new T.TorusGeometry(2.2, 0.1, 4, 32), new T.MeshBasicMaterial({ color: C.gold }));
  trim.rotation.x = Math.PI / 2; trim.position.y = 2.9; root.add(trim);
  foot.push([0, 0, 5.6, 5.6, 0, 2.9, 0]);

  // THE BADGE: the Order of Solid City, large, double-sided, slowly turning
  var badgeTex = new T.TextureLoader().load(badgeUrl);
  badgeTex.encoding = T.sRGBEncoding; badgeTex.anisotropy = 4;
  var badgeMat = new T.MeshBasicMaterial({ map: badgeTex, transparent: true, side: T.DoubleSide });
  var badge = new T.Mesh(new T.PlaneGeometry(7, 7), badgeMat);
  badge.position.y = 7.2; badge.name = 'badge'; root.add(badge);
  // soft gold glow behind the badge
  var glowTex = (function () {
    var c = document.createElement('canvas'); c.width = c.height = 128;
    var g = c.getContext('2d'), gr = g.createRadialGradient(64, 64, 4, 64, 64, 64);
    gr.addColorStop(0, 'rgba(216,170,72,0.55)'); gr.addColorStop(1, 'rgba(216,170,72,0)');
    g.fillStyle = gr; g.fillRect(0, 0, 128, 128);
    var t = new T.CanvasTexture(c); return t;
  })();
  var glow = new T.Mesh(new T.PlaneGeometry(11, 11), new T.MeshBasicMaterial({ map: glowTex, transparent: true, depthWrite: false, side: T.DoubleSide }));
  glow.position.y = 7.2; glow.position.z = -0.15; root.add(glow);

  // Gold halo ring above, like the fleet's crown
  var halo = new T.Mesh(new T.TorusGeometry(12, 0.22, 6, 72), new T.MeshBasicMaterial({ color: C.gold }));
  halo.rotation.x = Math.PI / 2; halo.position.y = 12.4; root.add(halo);

  // Spotlight from above onto the badge
  var spot = new T.SpotLight(0xffe0a0, 1.1, 40, 0.5, 0.4);
  spot.position.set(0, 16, 0); spot.target = badge; root.add(spot); root.add(spot.target);

  var gems = []; root.traverse(function (o) { if (o.userData.spin) gems.push(o); });

  root.userData = {
    footprint: foot, center: { x: 0, z: 0 }, radius: 24, height: 16,
    update: function (t) {
      badge.rotation.y = t * 0.25;
      glow.rotation.y = t * 0.25;
      for (var k = 0; k < gems.length; k++) { gems[k].rotation.y = t * 1.2 + k; gems[k].position.y = 10.6 + Math.sin(t * 1.4 + k * 0.9) * 0.18; }
      halo.rotation.z = t * 0.05;
    }
  };
  return root;
}
export default createSolidSanctuary;


===== FILE: public/city/servitude-place.js =====
/* Solid City — places THE SERVITUDE (public/city/
 * servitude.js): two layered cities inside the far massif,
 * dug by the carve in city.js's own height law. The placer's
 * work: solids for every dwelling and sign (the signs are
 * protected here), standing claims for the ring-terrace
 * layers, and the Hyper stops. Floors, the Entree shelf,
 * and the gallery slot are claimed by the carved land
 * itself — no hook needed where the mountain does the work.
 * By the hand of Solid, his good King. */
(function () {
'use strict';
if (!window.SC || !SC.api) return;
var A = SC.api, S = A.S;
var M = { state: 'idle', group: null, layers: [], wait: 6.4, texTier: null };
/* THE TWO CLOTHS (the King's word): the strong phone gets
 * the high cloth, the struggling phone the low — same
 * world, different hardware, everybody gets to play. */
function pickTier() {
  try {
    var c = navigator.hardwareConcurrency || 4, m = navigator.deviceMemory || 4;
    return (c >= 6 && m >= 4) ? 'hi' : 'lo';
  } catch (e) { return 'lo'; }
}
function hyperStops() {
  var H = window.CityHyper; if (!H || !H.pois) return;
  function add(id, name, short, x, z, sx, sz, text) {
    if (H.pois.some(function (p) { return p.id === id; })) return;
    H.pois.push({ id: id, name: name, short: short, x: x, z: z, stand: { x: sx, z: sz }, alias: 'servitude hollow mountain city cave tunnel gallery ' + id, text: text });
  }
  add('servitude-gate', 'THE SERVITUDE — THE ENTREE', 'SERVITUDE GATE', 2494, 1386, 2448, 1432, 'The Entree of the Servitude: a lamp-lit shelf cut into the mountain face, a great gate, and the name of the place lettered over the way in. Walk through, and the First Hollow opens around you.');
  add('servitude', 'THE SERVITUDE — FIRST HOLLOW', 'SERVITUDE', 2600, 1280, 2632, 1280, 'The First Hollow: a layered marble city inside the mountain — plaza, market, grand house, two ring terraces climbing the walls, the Great Crystal hanging in the light shaft, and falls from the roof ring. The gallery to the Deep Hollow leaves from the south wall.');
  add('servitude-deep', 'THE SERVITUDE — DEEP HOLLOW', 'SERVITUDE DEEP', 2600, 1660, 2632, 1660, 'The Deep Hollow: the second city, 80 metres deeper in the rock, reached by the lava-tube gallery past the Midway Shop. A standing crystal burns over its spring pool.');
  if (H.regrid) H.regrid();
}
async function build() {
  if (M.state !== 'idle') return;
  M.state = 'building';
  try {
    var mod = await import('/city/servitude.js?v=20261014c');
    M.texTier = pickTier();
    /* the cloth is rayscanned before the city is baked, so
     * the build waits for the image — but never longer than
     * five seconds: a slow picture must no