<!-- SOLIDABILITY-WORLD · part 55 -->
dth = 6;
    const B = 16, L = 48;
    _x.beginPath(); _x.moveTo(B, B+L); _x.lineTo(B, B); _x.lineTo(B+L, B); _x.stroke();
    _x.beginPath(); _x.moveTo(256-B-L, B); _x.lineTo(256-B, B); _x.lineTo(256-B, B+L); _x.stroke();
    _x.beginPath(); _x.moveTo(B, 256-B-L); _x.lineTo(B, 256-B); _x.lineTo(B+L, 256-B); _x.stroke();
    _x.beginPath(); _x.moveTo(256-B-L, 256-B); _x.lineTo(256-B, 256-B); _x.lineTo(256-B, 256-B-L); _x.stroke();
    // Red horizontal stripes (tactical)
    _x.fillStyle = '#FF0000';
    _x.fillRect(0, 120, 256, 8);
    _x.fillRect(0, 136, 256, 4);
    // Circuit lines
    _x.strokeStyle = '#FF3333'; _x.lineWidth = 2;
    _x.beginPath(); _x.moveTo(32, 200); _x.lineTo(100, 200); _x.lineTo(100, 220); _x.lineTo(180, 220); _x.stroke();
    _x.beginPath(); _x.moveTo(224, 60); _x.lineTo(160, 60); _x.lineTo(160, 80); _x.stroke();
    _x.fillStyle = '#FF0000';
    _x.beginPath(); _x.arc(180, 220, 6, 0, 7); _x.fill();
    _x.beginPath(); _x.arc(160, 80, 6, 0, 7); _x.fill();
    // Warning chevrons bottom
    _x.fillStyle = '#FF0000';
    for (let i = 0; i < 8; i++) {
      _x.save(); _x.translate(i * 32 + 16, 245); _x.rotate(0);
      _x.fillRect(-10, -6, 20, 12);
      _x.fillStyle = '#0a0a0c';
      _x.fillRect(-10, -6, 8, 12);
      _x.fillStyle = '#FF0000';
      _x.restore();
    }
    // Center emblem diamond
    _x.strokeStyle = '#FF0000'; _x.lineWidth = 3;
    _x.beginPath();
    _x.moveTo(128, 40); _x.lineTo(168, 80); _x.lineTo(128, 120); _x.lineTo(88, 80);
    _x.closePath(); _x.stroke();
    _x.fillStyle = '#FF0000';
    _x.font = 'bold 20px monospace'; _x.textAlign = 'center';
    _x.fillText('\u2726', 128, 88);
    const _t = new THREE.CanvasTexture(_c);
    const mat = new THREE.MeshBasicMaterial({ map: _t });
    const mesh = new THREE.Mesh(geo, mat);
    // Place in a circle around origin, 20 units out
    const idx = parseInt(room.key.split('-')[1] || '0');
    const angle = (idx / 24) * Math.PI * 2;
    mesh.position.set(Math.cos(angle) * 20, 6, Math.sin(angle) * 20);
    mesh.userData.room = room;
    scene.add(mesh);
  }

  // Build a single file as a 3D building (private/full map)
  function buildFileBuilding(scene, room, detailed) {
    const { position, size } = room;
    const height = size.height;

    // Building body — color by type
    let color = 0x4a5a6a; // default blue-gray
    if (room.filePath === 'server.js') color = 0x8a6a2a; // gold for core
    else if (room.filePath.endsWith('.js')) color = 0x4a6a8a;
    else if (room.filePath.endsWith('.json')) color = 0x5a4a6a;
    else if (room.filePath.endsWith('.html')) color = 0x4a8a6a;
    else if (room.filePath.endsWith('.css')) color = 0x8a4a6a;

    const geo = new THREE.BoxGeometry(size.width, height, size.depth);
    const mat = new THREE.MeshStandardMaterial({
      color, transparent: true, opacity: 0.85
    });
    const building = new THREE.Mesh(geo, mat);
    building.position.set(position.x, height / 2, position.z);
    building.castShadow = true;
    building.receiveShadow = true;
    building.userData.room = room;
    scene.add(building);

    // Wireframe outline
    const edgeGeo = new THREE.EdgesGeometry(geo);
    const edgeMat = new THREE.LineBasicMaterial({ color: 0x00ffcc, transparent: true, opacity: 0.3 });
    const edges = new THREE.LineSegments(edgeGeo, edgeMat);
    edges.position.copy(building.position);
    scene.add(edges);

    if (detailed) {
      // Label for significant buildings — human name first, filename second
      // The world speaks in shared language, not technical names
      let displayLabel = room.label;
      let humanSub = null;
      if (typeof SWGuide !== 'undefined' && SWGuide.humanName) {
        const hn = SWGuide.humanName(room.filePath, room.label);
        if (hn) {
          displayLabel = `${hn.icon} ${hn.name}`;
          humanSub = room.label; // filename as subtitle
        }
      }
      addLabel(scene, displayLabel, position.x, height + 3, position.z, 0xffffff, 1.6);
      if (humanSub) {
        addLabel(scene, humanSub, position.x, height + 1.8, position.z, 0x666688, 0.9);
      } else if (room.routes.length > 0) {
        addLabel(scene, `${room.routes.length} routes`, position.x, height + 1.5,
                 position.z, 0xaaaabb, 1.0);
      }
      // Internal floor lines for complex buildings (visualize structure)
      if (room.floors && room.floors > 1) {
        const floorMat = new THREE.LineBasicMaterial({
          color: 0x00ffcc, transparent: true, opacity: 0.4
        });
        for (let f = 1; f < room.floors; f++) {
          const fy = (height / room.floors) * f;
          const floorGeo = new THREE.BufferGeometry().setFromPoints([
            new THREE.Vector3(position.x - size.width/2, fy, position.z - size.depth/2),
            new THREE.Vector3(position.x + size.width/2, fy, position.z - size.depth/2),
            new THREE.Vector3(position.x + size.width/2, fy, position.z + size.depth/2),
     