<!-- SOLID CITY · part 2442 -->
ice(at, 0, { x: POS.x, z: POS.z, y: 120, v: 200, cap: { cap: 'LOST WINGS GROVE', sub: 'Carolina Parakeet · Dodo · the reference habitat', say: 'Lost Wings Grove: two birds the world lost, living again on the coastal bench — a parakeet in the great tree, a dodo in the meadow. They decide for themselves where to go.' }, agl: false });
    return w;
  };
}

/* ---------------- standY: the leveled clearing + observation deck ------ */
function standY(x, z, py) {
  if (M.state !== 'ready' || !M.group) return -1000;
  var dx = x - POS.x, dz = z - POS.z, d2 = dx * dx + dz * dz;
  var best = -1000;
  if (d2 < 37 * 37 && (py == null || M.baseY <= py + 2.4)) best = M.baseY;
  var fl = M.group.userData.standFloors || [];
  for (var i = 0; i < fl.length; i++) {
    var f = fl[i], wx = POS.x + f.cx, wz = POS.z + f.cz;
    if (Math.hypot(x - wx, z - wz) < f.r && (py == null || M.baseY + f.y <= py + 1.6)) best = Math.max(best, M.baseY + f.y);
  }
  return best;
}

/* ---------------- the birdwatching lens (grove-local UI) --------------- */
var L = { zoom: 1, targetZoom: 1, sel: 0, track: false, photos: [], built: false, lastRender: 0, lastPanel: 0 };
function el(tag, cls, html) {
  var e = document.createElement(tag);
  if (cls) e.className = cls;
  if (html != null) e.innerHTML = html;
  return e;
}
function buildLens() {
  if (L.built) return; L.built = true;
  var css = el('style', null,
    '#lw-btn{position:fixed;right:14px;bottom:118px;z-index:60;background:rgba(16,20,16,.88);color:#cfe3b8;border:1px solid #58a83c;border-radius:22px;padding:10px 16px;font:600 14px system-ui;display:none;cursor:pointer}' +
    '#lw-btn.on{display:block}' +
    '#lw-panel{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);width:min(94vw,430px);z-index:70;background:rgba(12,15,12,.96);border:1px solid #58a83c;border-radius:16px;padding:12px;color:#e9e2cf;font:14px/1.45 system-ui;display:none;max-height:92vh;overflow-y:auto}' +
    '#lw-panel.on{display:block}' +
    '#lw-scopewrap{position:relative;width:100%;aspect-ratio:1/1;border-radius:50%;overflow:hidden;border:3px solid #2c3a24;background:#000;touch-action:none}' +
    '#lw-scope{width:100%;height:100%;display:block}' +
    '#lw-scopewrap:after{content:"";position:absolute;inset:0;border-radius:50%;box-shadow:inset 0 0 60px rgba(0,0,0,.55);pointer-events:none}' +
    '.lw-row{display:flex;align-items:center;gap:8px;margin-top:10px;flex-wrap:wrap}' +
    '.lw-btn{background:#1d2a1a;color:#cfe3b8;border:1px solid #58a83c;border-radius:10px;padding:7px 12px;font:600 13px system-ui;cursor:pointer}' +
    '.lw-btn.act{background:#58a83c;color:#0c120a}' +
    '.lw-tab{flex:1;text-align:center}' +
    '#lw-zoom{flex:1;accent-color:#58a83c}' +
    '#lw-state{display:inline-block;background:#58a83c;color:#0c120a;border-radius:6px;padding:1px 8px;font-weight:700;font-size:12px}' +
    '#lw-desc{margin-top:8px;min-height:42px;color:#f2ecd9}' +
    '.lw-small{font-size:12px;color:#9aa4b5;margin-top:4px}' +
    '#lw-gallery{position:fixed;inset:0;z-index:80;background:rgba(5,8,5,.97);display:none;padding:16px;overflow-y:auto;color:#e9e2cf;font:14px system-ui}' +
    '#lw-gallery.on{display:block}' +
    '.lw-photo{margin:0 auto 18px;max-width:520px}.lw-photo img{width:100%;border-radius:10px;border:1px solid #3c4a2c}.lw-photo figcaption{margin-top:6px;color:#cfe3b8}');
  document.head.appendChild(css);

  L.btn = el('button', null, '🔭 BIRDWATCH'); L.btn.id = 'lw-btn';
  L.btn.addEventListener('click', function () { openPanel(true); });
  document.body.appendChild(L.btn);

  var p = el('div'); p.id = 'lw-panel';
  p.innerHTML =
    '<div style="display:flex;justify-content:space-between;align-items:center"><b style="color:#cfe3b8">LOST WINGS — BIRDWATCH LENS</b><button class="lw-btn" id="lw-close">✕</button></div>' +
    '<div class="lw-row"><button class="lw-btn lw-tab act" id="lw-tab0">🦜 Carolina Parakeet</button><button class="lw-btn lw-tab" id="lw-tab1">🕊️ Dodo</button></div>' +
    '<div id="lw-scopewrap" style="margin-top:10px"><canvas id="lw-scope" width="420" height="420"></canvas></div>' +
    '<div class="lw-row"><button class="lw-btn" id="lw-zout">−</button><input type="range" id="lw-zoom" min="1" max="20" step="0.1" value="1"><button class="lw-btn" id="lw-zin">+</button><span id="lw-zlabel">1.0×</span></div>' +
    '<div class="lw-row"><button class="lw-btn" id="lw-track">◎ TRACK: OFF</button><button class="lw-btn" id="lw-cap">📸 CAPTURE</button><button class="lw-btn" id="lw-photos">PHOTOS (0)</button></div>' +
    '<div style="margin-top:10px"><span id="lw-name"></span> <span id="lw-state"></span></div>' +
    '<div id="lw-desc"></div><div class="lw-small" id="lw-ev"></div><div class="lw-small" id="lw-dec"></div>';
  document.body.appendChild(p); L.panel = p;
  L.canvas = p.querySelector('#lw-scope');
  L.zoomSlider = p.querySelector('#lw-zoom');
  p.querySelector('#lw-close').addEventListener('click', function () { openPanel(false)