<!-- HONEYCOMB-STAGING · part 6 -->
lmesh, bx, bz});
    }

    scene.add(group);

    // SOLID: Only the 4 posts block. Everything else is open air.
    const PT = 0.9; // post half-thickness + margin
    const walls = corners.map(([px, pz]) => ({
      minX: px - PT, maxX: px + PT,
      minZ: pz - PT, maxZ: pz + PT
    }));
    const collider = { walls, mesh: group, bx, bz, width, depth, open: true };
    colliders.push(collider);
    buildings.push({ mesh: group, collider, label });

    return group;
  }

  // ── COLLISION: The wall that holds ──
  function checkCollision(px, pz, radius) {
    for (const c of colliders) {
      for (const w of c.walls) {
        if (px + radius > w.minX && px - radius < w.maxX &&
            pz + radius > w.minZ && pz - radius < w.maxZ) {
          return c;
        }
      }
    }
    return null;
  }

  // ── MOVEMENT: Respects solidity ──
  function tryMove(dx, dz) {
    const r = 0.8;
    const newX = player.position.x + dx;
    const newZ = player.position.z + dz;
    
    // Check X alone (slide along walls)
    if (!checkCollision(newX, player.position.z, r)) {
      player.position.x = newX;
    }
    // Check Z alone
    if (!checkCollision(player.position.x, newZ, r)) {
      player.position.z = newZ;
    }
  }

  // ── INPUT: Touch and keys ──
  const keys = {};
  const joystick = { active: false, dx: 0, dy: 0 };
  const camstick = { active: false, dx: 0, dy: 0 };
  // Camera control state: independent yaw/pitch
  let camYaw = 0, camPitch = 0.35;
  let camMode = 'follow'; // follow | orbit | free

  // ── AI DRIVE STATE ──
  let aiDriving = false;
  let aiTarget = null;
  let aiPaused = false;

  // ── TACTICAL STATE ──
  let flying = false;
  let sprinting = false;
  let aiAssist = false;

  // ── AI DRIVE ──
  function aiDriveToBuilding(label) {
    const b = buildings.find(x => x.label === label);
    if (!b) return false;
    aiTarget = {
      label: label,
      x: b.mesh.position.x,
      z: b.mesh.position.z
    };
    aiDriving = true;
    aiPaused = false;
    observe('ai.navigate_start', { target: label, position: { x: aiTarget.x, z: aiTarget.z } });
    return true;
  }

  function aiStop() {
    if (aiDriving) {
      observe('ai.navigate_stop', { target: aiTarget ? aiTarget.label : null });
    }
    aiDriving = false;
    aiTarget = null;
    aiPaused = false;
  }

  function aiPause() {
    if (aiDriving && !aiPaused) {
      aiPaused = true;
      observe('ai.navigate_pause', { target: aiTarget ? aiTarget.label : null });
      return true;
    }
    return false;
  }

  function aiResume() {
    if (aiDriving && aiPaused) {
      aiPaused = false;
      observe('ai.navigate_resume', { target: aiTarget ? aiTarget.label : null });
      return true;
    }
    return false;
  }

  function aiUpdate(dt) {
    if (!aiDriving || aiPaused || !aiTarget) return null;
    // Steer toward target
    const dx = aiTarget.x - player.position.x;
    const dz = aiTarget.z - player.position.z;
    const dist = Math.sqrt(dx * dx + dz * dz);
    if (dist < 5) {
      // Arrived
      observe('ai.navigate_arrive', { target: aiTarget.label });
      aiStop();
      return null;
    }
    // Return normalized direction
    return { mx: dx / dist, mz: dz / dist };
  }

  function setupTactical() {
    const toggle = document.getElementById('tac-toggle');
    const panel = document.getElementById('tactical-panel');
    if (toggle && panel) {
      toggle.onclick = () => panel.classList.toggle('collapsed');
    }
    const flyBtn = document.getElementById('tac-fly');
    if (flyBtn) {
      flyBtn.onclick = () => {
        flying = !flying;
        flyBtn.classList.toggle('active', flying);
        observe('player.fly_toggle', { flying: flying });
      };
    }
    const sprintBtn = document.getElementById('tac-sprint');
    if (sprintBtn) {
      sprintBtn.onclick = () => {
        sprinting = !sprinting;
        sprintBtn.classList.toggle('active', sprinting);
        observe('player.sprint_toggle', { sprinting: sprinting });
      };
    }
    const camBtn = document.getElementById('tac-cam-mode');
    if (camBtn) {
      const modes = ['follow', 'orbit', 'free'];
      let modeIdx = 0;
      camBtn.onclick = () => {
        modeIdx = (modeIdx + 1) % modes.length;
        camMode = modes[modeIdx];
        camBtn.classList.toggle('active', camMode !== 'follow');
        observe('camera.mode_change', { mode: camMode });
      };
    }
    const aiBtn = document.getElementById('tac-ai');
    if (aiBtn) {
      let aiIdx = 0;
      aiBtn.onclick = () => {
        if (aiDriving) {
          aiStop();
          aiBtn.classList.remove('active');
          aiBtn.textContent = '🤖';
        } else if (buildings.length > 0) {
          const target = buildings[aiIdx % buildings.length];
          aiIdx++;
          if (aiDriveToBuilding(target.label)) {
            aiBtn.classList.add('active');
            aiBtn.textContent = '⏸️';
          }
        }
      };
   