<!-- SAGA · part 70 -->
 solid #ffd700;border-radius:8px;padding:14px 16px;font-size:17px;cursor:pointer;min-height:60px;">📖 Teach Me</button>' +
    '<button id="m-creator" style="background:#1a1a2e;color:#ffd700;border:2px solid #ffd700;border-radius:8px;padding:14px 16px;font-size:17px;cursor:pointer;min-height:60px;font-weight:bold;">🔨 Creator</button>' +
    '<button id="m-chat" style="background:#1a1a2e;color:#ffd700;border:1px solid #ffd700;border-radius:8px;padding:14px 16px;font-size:17px;cursor:pointer;min-height:60px;">💬 Chat</button>' +
    '<button id="m-mic" style="background:#1a1a2e;color:#ffd700;border:1px solid #ffd700;border-radius:8px;padding:14px 16px;font-size:17px;cursor:pointer;min-height:60px;">🎙️ Mic</button>';
  /* v94 — CLEAR CACHE on the screen, next to the diamond (King's order) */
  var cb = document.createElement('button');
  cb.id = 'clearcache-btn';
  cb.innerHTML = '🧹';
  cb.title = 'Clear cache';
  cb.style.cssText = 'position:fixed;top:12px;right:64px;z-index:9999;' +
    'width:44px;height:44px;border-radius:50%;' +
    'background:#1a1a2e;color:#ffd700;font-size:20px;' +
    'border:2px solid #ffd700;cursor:pointer;' +
    'display:flex;align-items:center;justify-content:center;';
  cb.addEventListener('click', function(){ if(confirm('Clear?')) location.reload(); });
  document.body.appendChild(cb);
  document.body.appendChild(menu);
  var open = false;
  function toggleMenu(){ open = !open; menu.style.display = open ? 'flex' : 'none'; }
  b.addEventListener('click', function(e){ e.stopPropagation(); toggleMenu(); });
  b.addEventListener('touchstart', function(e){ e.stopPropagation(); toggleMenu(); }, {passive:true});
  // Wire menu buttons to original actions
  menu.querySelector('#m-chat').addEventListener('click', function(){
    var cb = document.getElementById('game-chat-btn'); if(cb) cb.click();
    toggleMenu();
  });
  menu.querySelector('#m-mic').addEventListener('click', function(){
    var mb = document.getElementById('transceiver-btn'); if(mb) mb.click();
    toggleMenu();
  });

  menu.querySelector('#m-teach').addEventListener('click', function(){
    toggleMenu();
    if(typeof window.openTeachMe === 'function') window.openTeachMe();
  });
  menu.querySelector('#m-creator').addEventListener('click', function(){
    toggleMenu();
    if(typeof window.openCreator === 'function') window.openCreator();
  });
  document.body.appendChild(b);
})();


/* IN-GAME CHAT — talk while building */
(function(){
  if(document.getElementById('game-chat')) return;

  // Chat toggle button (bottom-left)
  var chatBtn = document.createElement('button');
  chatBtn.id = 'game-chat-btn';
  chatBtn.innerHTML = '💬';
  chatBtn.style.cssText = 'position:fixed;top:12px;left:175px;z-index:9999;display:none;' +
    'width:44px;height:44px;border-radius:50%;' +
    'background:#1a1a2e;color:#ffd700;font-size:20px;' +
    'border:2px solid #ffd700;cursor:pointer;';
  document.body.appendChild(chatBtn);

  // Chat panel (hidden by default)
  var panel = document.createElement('div');
  panel.id = 'game-chat';
  panel.style.cssText = 'position:fixed;top:120px;left:12px;z-index:9998;' +
    'width:280px;height:300px;background:rgba(10,10,26,0.95);' +
    'border:2px solid #ffd700;border-radius:12px;display:none;' +
    'flex-direction:column;overflow:hidden;';
  panel.innerHTML =
    '<div id="game-chat-msgs" style="flex:1;overflow-y:auto;padding:8px;color:#ffd700;font-size:13px;"></div>' +
    '<div style="display:flex;border-top:1px solid #ffd700;">' +
    '<input id="game-chat-input" placeholder="Talk..." ' +
    'style="flex:1;background:transparent;border:none;color:#ffd700;padding:10px;font-size:14px;outline:none;">' +
    '<button id="game-chat-send" style="background:#ffd700;color:#1a1a2e;border:none;padding:10px 14px;cursor:pointer;">➤</button>' +
    '</div>';
  document.body.appendChild(panel);

  var open = false;
  function toggleChat(){
    open = !open;
    panel.style.display = open ? 'flex' : 'none';
    if(typeof sfx === 'function') sfx('click');
  }
  chatBtn.addEventListener('click', function(e){ e.stopPropagation(); toggleChat(); });
  chatBtn.addEventListener('touchstart', function(e){ e.stopPropagation(); toggleChat(); }, {passive:true});

  var msgs = panel.querySelector('#game-chat-msgs');
  var input = panel.querySelector('#game-chat-input');

  function addMsg(who, text){
    var d = document.createElement('div');
    d.style.cssText = 'margin:4px 0;padding:4px 8px;border-radius:8px;' +
      (who === 'King' ? 'background:rgba(255,215,0,0.15);text-align:right;' : 'background:rgba(255,255,255,0.05);');
    d.innerHTML = '<b>' + who + ':</b> ' + text.replace(/</g, '&lt;');
    msgs.appendChild(d);
    msgs.scrollTop = msgs.scrollHeight;
  }

  function send(){
    var t = input.value.trim();
    if(!t) return;
    addMsg('King', t);
    input.value = '';
    // Send to server (poll for Solid's replies)
    fetch('/api/game-chat', {
      method: 'POST',
 