<!-- SOLID CITY · part 3602 -->
cx + ox * c + oz * s, lz = cz - ox * s + oz * c;
    A.solids.push({ x0: POS.x + lx - hx, x1: POS.x + lx + hx, z0: POS.z + lz - hz, z1: POS.z + lz + hz, y0: M.floorY + y0, y1: M.floorY + y1, tunnelBore: true });
  }
}
function collide(ud) {
  (ud.footprint || []).forEach(function (b) { addBox(b[0], b[1], b[2], b[3], b[6] || 0, b[4], b[5]); });
  // long walls: axis-aligned, pushed as single exact boxes
  (ud.walls || []).forEach(function (w) {
    A.solids.push({ x0: POS.x + w.x0, x1: POS.x + w.x1, z0: POS.z + w.z0, z1: POS.z + w.z1, y0: M.floorY + w.y0, y1: M.floorY + w.y1, tunnelBore: true });
  });
}
function hyperStop() {
  var H = window.CityHyper; if (!H || !H.pois || H.pois.some(function (p) { return p.id === 'the-bore'; })) return;
  H.pois.push({ id: 'the-bore', name: 'The Bore', short: 'BORE', x: POS.x, z: POS.z - 8, stand: { x: POS.x - 2, z: POS.z + 34 },
    alias: 'bore tunnel mountain passage',
    text: 'The Bore: 800 meters of perfect line through the mountain — 21 golden-ratio arches, light falling at Fibonacci intervals. Walk the gold meridian; it never wavers.' });
  if (H.regrid) H.regrid();
}
function watchStop() {
  var W = window.CityWatch, r = W && W.routes && W.routes.grand; if (!r || r._tunnelBore) return;
  var orig = r.build; r._tunnelBore = true;
  r.build = function () {
    var w = orig.apply(this, arguments);
    w.push({ x: POS.x, z: POS.z + 60, y: M.floorY + 120, v: 200, cap: { cap: 'THE BORE', sub: '800 meters · one perfect line', say: 'The Bore: eight hundred meters of perfect line through the mountain. The gold meridian never wavers.' }, agl: false });
    return w;
  };
}
function standY(x, z) {
  if (Math.abs(x - POS.x) < 6.5 && z > POS.z - LEN - 1 && z < POS.z + 2) return M.floorY;
  return -1000;
}
function load() {
  var fy = villageFloor();
  if (fy === null) { M.wait = 1.5; return; } // the road must exist before the Bore; try again shortly
  M.floorY = fy; M.state = 'loading';
  var p; try { p = import('/city/tunnel-bore.js?v=20261011b'); } catch (e) { p = Promise.reject(e); }
  p.then(function (mod) {
    var make = mod.createTunnelBore || mod.default;
    var g = make({ THREE: A.T, position: { x: POS.x, y: M.floorY, z: POS.z } });
    A.world.add(g); M.group = g; M.state = 'ready';
    collide(g.userData || {}); hyperStop(); watchStop();
  }).catch(function (e) { M.state = 'failed'; try { console.warn('[city] Tunnel Bore skipped:', e && e.message); } catch (x) {} });
}
function update(dt) {
  if (M.state === 'idle') { if (A.isBuilt && !A.isBuilt()) return; M.wait -= dt; if (M.wait <= 0) load(); return; }
  if (M.state !== 'ready' || document.hidden) return;
  var c = A.camera.position, d = Math.hypot(c.x + A.origin.x - POS.x, c.z + A.origin.z - (POS.z - LEN / 2));
  M.group.visible = d < 6000;
  if (d < 1600 && M.group.userData.update) try { M.group.userData.update(S.t); } catch (e) {}
}
function radar(g, blip, fl) { if (M.state === 'ready') blip(POS.x, POS.z, '#d8aa48', fl ? 3 : 6, fl ? '' : 'BORE'); }
window.CityTunnelBore = { update: update, radar: radar, pos: POS, standY: standY, state: function () { return M.state; } };
})();


===== FILE: public/city/tunnel-bore.js =====
/* SOLID CITY — THE BORE (2026-10-11, the King's signature commission)
 * "A long tunnel through the mountain to a whole new space vibe."
 * "Design all of it very carefully meticulously methodically as if science and
 *  mathematical methods grew into beautiful art."
 *
 * THE BORE: 800 meters of perfect line through the mountain. Perfectly straight —
 * a visitor at the entrance sees a single point of light at the far end: the promise.
 * 21 arch segments, each a true golden-ratio arch (height:width = phi).
 * A thin gold line runs the tunnel's full length at the crown; cross-bands of light
 * fall at Fibonacci intervals (1,1,2,3,5,8,13...) — walking it is moving through
 * a mathematical proof. The floor is dark polished stone with a single gold
 * meridian line down the center. Walk the line. It never wavers.
 *
 * The King's loose-end law: where the road is still becoming, its true name is set
 * in stone. One quiet name-marker per loose end; nothing more.
 *   - THE MOUTH: the tunnel mouth (this module)
 *   - THE EMERGENCE: where the Bore meets the Starwell (starwell.js)
 *   - A PASSAGE YET TO BE WALKED: the dark arch in the Starwell (starwell.js)
 *
 * Self-contained ES module. Local frame: mouth at (0,0,0), floor y=0,
 * tunnel extends along local -Z for 800m. The placer sets world position.
 */
var PHI = 1.6180339887;
var BORE_LEN = 800, BORE_W = 12, WALL_H = 21;
// Fibonacci intervals: bands at cumulative sums, scaled so the last band lands at the far end
var FIB = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144];
var FIB_SUM = FIB.reduce(function (a, b) { return a + b; }, 0); // 376
function fibBands() {
  var s = BORE_LEN / FIB_SUM, out = [], acc = 0;
  for (var i = 0; i < FIB.length; i++) { acc += FIB[i]; out.push(acc * s); }
  return out;
}
func