<!-- HONEYCOMB-TEST · part 9 -->
epMat = new THREE.MeshStandardMaterial({
      color: 0x660000, emissive: 0xFF2200, emissiveIntensity: 0.4,
      roughness: 0.5, metalness: 0.5
    });
    // Grand stairway from ground to hex-top level
    // Positioned at the south edge of the honeycomb, leading up to LOGIN
    const topY = 8; // hex top height
    const steps = 8;
    for (let s = 0; s < steps; s++) {
      const stepGeo = new THREE.BoxGeometry(8, 1, 3);
      const step = new THREE.Mesh(stepGeo, stepMat);
      const sy = (s + 0.5) * (topY / steps);
      const sz = 35 - s * 2.5; // start south, climb north toward center
      step.position.set(0, sy, sz);
      scene.add(step);
    }
    observe('honeycomb.stairway_built', { steps, topY });
  }

  function buildPerimeterWall() {
    // Wall around the entire honeycomb cluster
    const wallMat = new THREE.MeshStandardMaterial({
      color: 0x330000, emissive: 0x881111, emissiveIntensity: 0.3,
      roughness: 0.6, metalness: 0.4, transparent: true, opacity: 0.8
    });
    const R = 100; // radius enclosing all hexes (expanded)
    const wallGeo = new THREE.CylinderGeometry(R, R, 10, 6, 1, true);
    const wall = new THREE.Mesh(wallGeo, wallMat);
    wall.position.set(0, 5, 0);
    wall.rotation.y = Math.PI / 6;
    scene.add(wall);
    // Hexagonal perimeter — matches honeycomb shape
    observe('honeycomb.wall_built', { radius: R, shape: 'hexagon' });
  }

  // Build the honeycomb castle layout
  function buildHoneycomb() {
    // Center: LOGIN (the entrance)
    // Surrounding: core functions of epistles.xyz
    // Each hex is a choice. Each choice has a floor. King's law.
    const rooms = [
      // Center
      { q: 0, r: 0, label: 'LOGIN', fn: '/login' },
      // First ring (core)
      { q: 1, r: 0, label: 'FORUM', fn: '/forum' },
      { q: 1, r: -1, label: 'CHAT', fn: '/chat' },
      { q: 0, r: -1, label: 'GAME', fn: '/solidivism' },
      { q: -1, r: 0, label: 'PROFILE', fn: '/profile' },
      { q: -1, r: 1, label: 'CREATE', fn: '/create' },
      { q: 0, r: 1, label: 'EXPLORE', fn: '/explore' },
      // Second ring (expanded functionality)
      { q: 2, r: 0, label: 'SABLE', fn: '/sable' },
      { q: 2, r: -1, label: 'SOLID', fn: '/solid' },
      { q: 2, r: -2, label: 'RUBY', fn: '/ruby' },
      { q: 1, r: -2, label: 'SAGA', fn: '/saga' },
      { q: 0, r: -2, label: 'NEWWORLD', fn: '/newworld' },
      { q: -1, r: -1, label: 'PROVOLTA', fn: '/provolta' },
      { q: -2, r: 0, label: 'ADMIN', fn: '/admin' },
      { q: -2, r: 1, label: 'SHOPLOG', fn: '/shoplog' },
      { q: -2, r: 2, label: 'THREADS', fn: '/threads' },
      { q: -1, r: 2, label: 'SOLUV', fn: '/soluv' },
      { q: 0, r: 2, label: 'GOLD', fn: '/gold' },
      { q: 1, r: 1, label: 'CASTLE', fn: '/castle' },
    ];
    for (const room of rooms) {
      createHexRoom(room.q, room.r, room.label, room.fn);
    }
    buildGrandStairway();
    buildPerimeterWall();
    observe('honeycomb.castle_built', {
      rooms: rooms.length,
      center: 'LOGIN',
      law: 'every room has a floor'
    });
  }

  // ── VIDEO CONTROL PANEL: Glass screen playing video in 3D ──
  // Wall-design preserved: panel uses solid wall construction with glass inset
  let videoPanel = null;

  function createVideoPanel(bx, bz, videoUrl, label) {
    const group = new THREE.Group();
    const W = 16, H = 10, D = 1;

    // Wall frame (solid, tactical texture) — the control panel body
    const tex = createTacticalTexture(label || 'VIDEO');
    const frameMat = new THREE.MeshStandardMaterial({
      map: tex, roughness: 0.5, metalness: 0.6,
      emissive: 0x330000, emissiveIntensity: 0.3, emissiveMap: tex,
      side: THREE.DoubleSide
    });

    // Frame: top, bottom, left, right bars around the screen
    const barH = new THREE.BoxGeometry(W, 1, D);
    const topBar = new THREE.Mesh(barH, frameMat);
    topBar.position.set(bx, H + 0.5, bz);
    group.add(topBar);
    const botBar = new THREE.Mesh(barH, frameMat);
    botBar.position.set(bx, 0.5, bz);
    group.add(botBar);

    const barV = new THREE.BoxGeometry(1, H, D);
    const leftBar = new THREE.Mesh(barV, frameMat);
    leftBar.position.set(bx - W/2 + 0.5, H/2 + 0.5, bz);
    group.add(leftBar);
    const rightBar = new THREE.Mesh(barV, frameMat);
    rightBar.position.set(bx + W/2 - 0.5, H/2 + 0.5, bz);
    group.add(rightBar);

    // Support posts (wall-design: solid posts)
    const postGeo = new THREE.BoxGeometry(1, H + 1, 1);
    const postL = new THREE.Mesh(postGeo, frameMat);
    postL.position.set(bx - W/2 + 0.5, (H+1)/2, bz - 1);
    group.add(postL);
    const postR = new THREE.Mesh(postGeo, frameMat);
    postR.position.set(bx + W/2 - 0.5, (H+1)/2, bz - 1);
    group.add(postR);

    // GLASS SCREEN: video texture on a plane
    const video = document.createElement('video');
    video.src = videoUrl;
    video.crossOrigin = 'anonymous';
    video.loop = true;
    video.muted = true;
    video.playsInline = true;
    vid