<!-- SOLID CITY · part 1126 -->
the Annex floors
  if (window.CityQuadrantCrown && CityQuadrantCrown.standY) { var qcy = CityQuadrantCrown.standY(P.x, P.z); if (qcy > gy) gy = qcy; }   // stand on Quadrant Crown floors
  if (window.CitySpaceport && CitySpaceport.standY) { var spy = CitySpaceport.standY(P.x, P.z); if (spy > gy) gy = spy; }
  if (window.CityLostWings && CityLostWings.standY) { var lwy = CityLostWings.standY(P.x, P.z, P.y); if (lwy > gy) gy = lwy; }
  if (window.CityOctaPool && CityOctaPool.standY) { var opy = CityOctaPool.standY(P.x, P.z, P.y); if (opy > gy) gy = opy; }
  if (window.CitySkyward && CitySkyward.standY) { var sky = CitySkyward.standY(P.x, P.z, P.y); if (sky > gy) gy = sky; }   // stand on the Skyway Branch deck
  if (window.CityJubilee && CityJubilee.standY) { var jub = CityJubilee.standY(P.x, P.z, P.y); if (jub > gy) gy = jub; }   // stand on the Jubilee discs
  if (window.CityBetweenStones && CityBetweenStones.standY) { var bsy = CityBetweenStones.standY(P.x, P.z, P.y); if (bsy > gy) gy = bsy; }
  if (window.CityFirstParking && CityFirstParking.standY) { var pky = CityFirstParking.standY(P.x, P.z, P.y); if (pky > gy) gy = pky; }   // stand on the South Lot (apron, ramp, lot, Long Road) and the First City podium   // stand on the Between Stones platform   // stand at the Octahedron Pool (terrace + wading floor)   // stand in the Lost Wings Grove (clearing + deck)   // stand on the spaceport pads (Spatial Intelligence)
  if (window.CityImperialColosseum && CityImperialColosseum.pos) { var cp = CityImperialColosseum.pos; if (Math.hypot(P.x - cp.x, P.z - cp.z) < 290) { var cy = (function(){ try { return CityImperialColosseum.group().position.y + 2; } catch(e){ return -1000; } })(); if (cy > gy) gy = cy; } }   // stand on the Imperial Colosseum terrace
  if (!RF && gy < 1 && heightAt(P.x, P.z) < -1.5) { P.x -= (P.x - (P.lx || P.x)); P.z -= (P.z - (P.lz || P.z)); gy = groundAt(P.x, P.z); help('The sea is too deep to walk — take a ship from the spaceport.', 3); }
  P.lx = P.x; P.lz = P.z;
  if (RF) {
    if (S.rflyLand) { if (P.y <= gy + 0.02) { P.y = gy; S.rfly = false; S.rflyLand = false; S.rflyV = 0; if (window.CityRoyal && CityRoyal.onLand) CityRoyal.onLand(); } }
    else if (P.y < gy) P.y = gy;
  } else P.y += (gy - P.y) * Math.min(1, dt * 12);
  if (!RF && P.y < Y0 + 0.5 && Math.hypot(P.x, P.z) < 800 && gy < Y0 + 0.05) P.y = Y0 + (Math.hypot(P.x, P.z) < 110 ? 0.12 : 0.02);
  avatar.rotation.y = P.face;
  var sw = Math.sin(P.walk || 0) * (mag > 0.08 ? 0.5 : 0);
  avatar.children.forEach(function (c) { if (c.name === 'leg1' || c.name === 'arm-1') c.rotation.x = sw; if (c.name === 'leg-1' || c.name === 'arm1') c.rotation.x = -sw; });
  // context action
  actTarget = null;
  var dS = Math.hypot(P.x - SABLE_POS.x, P.z - SABLE_POS.z);
  if (dS < 7) actTarget = { kind: 'sable', label: 'TALK TO SABLE' };
  if (!actTarget && Math.hypot(P.x - SOUL.door.x, P.z - SOUL.door.z) < 8) actTarget = { kind: 'soul', label: 'ENTER SOUL PRINT TOWER' };
  if (!actTarget && window.CitySanctuary && window.CityCitizens && CitySanctuary.talkHere(P.x, P.z)) actTarget = { kind: 'citizen', id: 'provolta', label: 'TALK TO PROVOLTA' };   // the sanctuary's talk point
  if (!actTarget && window.CityPodium && CityPodium.actHere(P.x, P.z)) actTarget = { kind: 'podium', label: 'READ' };   // ALL THAT WE CAN DO! podium
  if (!actTarget && window.CityBook && CityBook.actHere(P.x, P.z)) actTarget = { kind: 'book', label: 'READ THE BOOK' };   // the King's Book of Law (Forum Plaza)
  if (!actTarget && window.CityCampus) { var cpt = CityCampus.actHere(P.x, P.z); if (cpt) actTarget = { kind: 'campus', id: cpt, label: 'OPEN COURSE CATALOG' }; }   // a campus hall's forecourt
  if (!actTarget && window.CityCitizens) { var cz = CityCitizens.near(P.x, P.z); if (cz) actTarget = { kind: 'citizen', id: cz.id, label: 'TALK TO ' + cz.name.toUpperCase() }; }
  if (!actTarget) for (var i = 0; i < portals.length; i++) {
    var po = portals[i], dp = Math.hypot(P.x - po.x, P.z - po.z);
    if (dp < 9) actTarget = { kind: 'portal', d: po.d, label: po.d.go ? po.d.go + ' →' : 'ENTER ' + po.d.label.toUpperCase() + ' →' };
    if (dp < 2.2 && S.portalCool <= 0) { openPortal(po.d); S.portalCool = 4; }
  }
  if (!actTarget && Math.hypot(P.x - PAD.x, P.z - PAD.z) < 34) actTarget = { kind: 'board', label: 'BOARD SHIP' };
  if (!actTarget && window.CityHyperTrain) { var trl = CityHyperTrain.actHere(P.x, P.z); if (trl) actTarget = { kind: 'train', label: trl }; }
  if (!actTarget && window.CityFirstParking) { var crt = CityFirstParking.actHere(P.x, P.z); if (crt) actTarget = crt; }
  if (!actTarget && window.CityHyperCity) { var elv = CityHyperCity.actHere(P.x, P.z); if (elv) actTarget = { kind: 'elevator', label: elv }; }
  if (!actTarget && window.CityAnnex) { var aelv = CityAnnex.actHere(P.x, P.z); if (aelv) actTarget = { kind: 'elevator', label: aelv }; }
  if (!actTarget && window.CityQuadrantCrown) { var qelv = CityQuadrantCrown.actH