<!-- SOLID CITY · part 2067 -->
FORUM PLAZA', sub: 'the heart of the capital', say: '' } },
      { x: P.x - 600, z: P.z + 300, y: Y + 260, v: 160, cap: { cap: 'HOME', sub: 'Orbital Spaceport \u00b7 landing', say: '' } }];
  } };
}

/* ---------- UI: badge + resume (unchanged look) and the text panel ---------- */
var badge, resume, panel, statusEl;
function ui() {
  if (badge) return;
  var css = document.createElement('style');
  css.textContent = '#ha-badge{position:absolute;z-index:14;left:50%;transform:translateX(-50%);top:calc(64px + env(safe-area-inset-top));display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 14px;border-radius:20px;border:1px solid #5ff4ff;background:rgba(0,20,29,.85);color:#bff8ff;font:700 12px/1.1 system-ui,sans-serif;letter-spacing:.14em;box-shadow:0 0 14px #00d0ff55;pointer-events:none;max-width:70vw;text-align:center}' +
    '#ha-badge small{font:500 11px/1.2 system-ui,sans-serif;letter-spacing:.02em;color:#9fd8ff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:66vw}' +
    '#ha-badge.paused{border-color:#e8c36a;color:#ffd98a;box-shadow:0 0 12px #e8c36a44}' +
    '#ha-resume{position:absolute;z-index:14;left:50%;transform:translateX(-50%);top:calc(112px + env(safe-area-inset-top));min-height:48px;min-width:48px;padding:0 18px;border-radius:24px;border:1px solid #5ff4ff;background:#003040;color:#bff8ff;font:700 14px/1 system-ui,sans-serif;letter-spacing:.08em;pointer-events:auto;cursor:pointer}' +
    '#ai-panel{position:absolute;z-index:13;left:8px;top:calc(92px + env(safe-area-inset-top));max-width:min(320px,58vw);padding:6px 8px;border-radius:10px;border:1px solid #5ff4ff66;background:rgba(0,16,24,.82);color:#bff8ff;font:500 11px/1.35 system-ui,sans-serif;pointer-events:auto}' +
    '#ai-status{margin:0;max-height:6.8em;overflow:hidden}#ai-cmds summary{cursor:pointer;color:#5ff4ff;font-weight:700;letter-spacing:.06em;margin-top:4px;min-height:24px;line-height:24px}' +
    '#ai-cmds .row{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}#ai-cmds select{max-width:150px;min-height:32px;background:#00222e;color:#bff8ff;border:1px solid #5ff4ff66;border-radius:6px;font:500 12px system-ui,sans-serif}' +
    '#ai-cmds button{min-height:32px;min-width:44px;padding:0 10px;border-radius:16px;border:1px solid #5ff4ff;background:#003040;color:#bff8ff;font:700 12px system-ui,sans-serif;cursor:pointer}' +
    '@media (max-width:600px){#ha-badge{top:calc(112px + env(safe-area-inset-top))}#ha-resume{top:calc(160px + env(safe-area-inset-top))}#ai-panel{top:calc(232px + env(safe-area-inset-top));font-size:10px}}';
  document.head.appendChild(css);
  var hud = $('sc-hud') || document.body;
  badge = document.createElement('div'); badge.id = 'ha-badge'; hud.appendChild(badge);
  resume = document.createElement('button'); resume.type = 'button'; resume.id = 'ha-resume'; resume.textContent = '\u25B6 RESUME HYPER CONTROLLER'; resume.hidden = true; hud.appendChild(resume);
  resume.addEventListener('click', function (e) { e.stopPropagation(); st.paused = false; st.next = Date.now() + 800; st.status = 'resumed'; st.goal = busy() ? 'finishing the current trip' : ''; paint(); });
  panel = document.createElement('section'); panel.id = 'ai-panel'; panel.setAttribute('aria-label', 'AI pilot: text view of Solid City');
  panel.innerHTML = '<p id="ai-status" role="status" aria-live="off"></p>' +
    '<details id="ai-cmds"><summary>AI COMMANDS</summary>' +
    '<div class="row"><select id="ai-district" aria-label="District"></select><button type="button" data-ai="go">Go to district</button></div>' +
    '<div class="row"><select id="ai-citizen" aria-label="Citizen"></select><button type="button" data-ai="follow">Follow citizen</button></div>' +
    '<div class="row"><button type="button" data-ai="fly">Fly</button><button type="button" data-ai="land">Land</button><button type="button" data-ai="tour">Tour</button><button type="button" data-ai="resume">Resume auto</button></div></details>';
  hud.appendChild(panel); statusEl = $('ai-status');
  panel.addEventListener('click', function (e) { var b = e.target.closest('button[data-ai]'); if (!b) return; e.stopPropagation(); command(b.getAttribute('data-ai')); });
  panel.addEventListener('pointerdown', function (e) { e.stopPropagation(); });
  fillLists();
}
function fillLists() {
  var d = $('ai-district'), c = $('ai-citizen'); if (!d) return;
  var dv = d.value, cv = c.value;   // keep the current choices when the lists refresh
  d.innerHTML = HY.pois.filter(function (p) { return p.id !== 'sable'; }).map(function (p) { return '<option value="' + esc(p.id) + '">' + esc(p.name) + '</option>'; }).join('');
  var cz = (window.CityCitizens && CityCitizens.roster) || [];
  c.innerHTML = cz.filter(function (x) { return !x.fixed; }).map(function (x) { return '<option value="' + esc(x.id) + '">' + esc(x.name) + '</option>'; }).join('');
  if (dv && d.querySelector('option[value="' + dv + '"]')) d.value = dv;
  if (cv && c.quer