<!-- SOLID CITY · part 2441 -->
 pos = new Float32Array(N * 3);
    for (let i = 0; i < N; i++) { // phyllotaxis: the golden angle, laid flat in the sky
      const r = 0.34 * Math.sqrt(i), a = i * GOLDEN;
      pos[i * 3] = Math.cos(a) * r; pos[i * 3 + 1] = 0; pos[i * 3 + 2] = Math.sin(a) * r;
    }
    const pg = new THREE.BufferGeometry(); pg.setAttribute('position', new THREE.Float32BufferAttribute(pos, 3));
    const spiral = new THREE.Points(pg, new THREE.PointsMaterial({ color: 0xffd778, size: 1.5, transparent: true, opacity: 0.9, blending: THREE.AdditiveBlending, depthWrite: false }));
    spiral.name = 'crown-spiral'; crown.add(spiral);
    crown.userData.spiral = spiral;
  }
  group.add(crown);

  const state = { fired: -1 };
  function fire(i) { state.fired = i; columns[i].t = 0; columns[1 - i].t = 0; }
  function update(t, dt) {
    // the mouths' swirls turn in their plane; the crown's rings counter-rotate
    // and its spiral turns slow — the wormhole's own idiom, kept in the family.
    for (const sw of swirls) sw.rotation.z += 0.55 * dt;
    ringA.rotation.z += 0.22 * dt; ringB.rotation.z -= 0.31 * dt;
    crown.userData.spiral.rotation.y += 0.05 * dt;
    const sh = 1 + Math.sin(t * 2.2) * 0.03; crown.scale.set(sh, 1, sh);
    for (let i = 0; i < 2; i++) {
      const col = columns[i];
      if (col.t < 0) { col.pts.material.opacity = 0; continue; }
      col.t += dt;
      const f = col.t / 1.8;
      if (f >= 1) { col.t = -1; col.pts.material.opacity = 0; continue; }
      col.pts.material.opacity = Math.sin(Math.min(1, f) * Math.PI) * 0.95;
      col.pts.rotation.y += dt * (i === state.fired ? 2.4 : -2.4);
    }
  }
  group.userData = { update: update, fire: fire, mouths: MOUTHS, crown: CROWN };
  return group;
}


===== FILE: public/city/lost-wings-place.js =====
/* Solid City — places the LOST WINGS GROVE (public/city/lost-wings/) on the
   coastal bench south-west of the capital, by order of the King: "Anything
   built so far should be included with the build not hidden from the world we
   build it in truth and light." The grove is a real place in the world: a
   leveled clearing, the perch tree, the pillar, the barn, the shelter — and
   two living birds, the Carolina Parakeet and the Dodo, run by the shared
   Lost Wings engine. Adds: collision, standY (clearing + deck), radar
   ('WINGS' + live bird blips), a Hyper POI, a Watch (GRAND TOUR) stop, and a
   birdwatching LENS: a grove-local telephoto panel (1x-20x) with gentle
   focus tracking and true-scene photography. The lens renders the city's own
   scene through its own small renderer — the city camera and the Camera/Move
   toggles are never touched. */
(function () {
'use strict';
if (!window.SC || !SC.api) return;
var A = SC.api, S = A.S;
var POS = { x: -550, z: 700 }, NAME = 'Lost Wings Grove';
var M = { state: 'idle', group: null, wait: 4.5, said: false, baseY: 24, lensBuilt: false, panelOpen: false };
var Eng = function () { return window.LostWings && window.LostWings.Engine; };

/* ---------------- collision ------------------------------------------- */
function addBox(cx, cz, w, d, rot, y0, y1) {
  var nx = Math.max(1, Math.ceil(w / 2.5)), nz = Math.max(1, Math.ceil(d / 2.5)), cw = w / nx, cd = d / nz, c = Math.cos(rot), s = Math.sin(rot);
  var hx = cw / 2 * Math.abs(c) + cd / 2 * Math.abs(s), hz = cw / 2 * Math.abs(s) + cd / 2 * Math.abs(c);
  for (var i = 0; i < nx; i++) for (var j = 0; j < nz; j++) {
    var ox = -w / 2 + cw * (i + 0.5), oz = -d / 2 + cd * (j + 0.5), lx = 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.baseY + y0, y1: M.baseY + y1, lostWings: 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]); }); }

/* ---------------- Hyper POI + Watch ------------------------------------ */
function hyperStop() {
  var H = window.CityHyper; if (!H || !H.pois || H.pois.some(function (p) { return p.id === 'lost-wings-grove'; })) return;
  H.pois.push({ id: 'lost-wings-grove', name: NAME, short: 'WINGS', x: POS.x, z: POS.z, stand: { x: POS.x - 3, z: POS.z - 10 },
    alias: 'lost wings grove birds parakeet dodo extinct birdwatching carolina raphus',
    text: "Lost Wings Grove — a quiet clearing on the coastal bench where two birds the world lost are living again: the Carolina Parakeet, all green and gold, in the branches of the great tree, and the Dodo, slow and unbothered, foraging the meadow below. They are not statues. They watch you back. Stand on the deck, open the birdwatching lens, and see what they choose to do." });
  if (H.regrid) H.regrid();
}
function watchStop() {
  var W = window.CityWatch, r = W && W.routes && W.routes.grand; if (!r || r._lostWings) return;
  var orig = r.build; r._lostWings = true;
  r.build = function () {
    var w = orig.apply(this, arguments), at = Math.min(2, w.length);
    w.spl