<!-- SOLID-PLAYTIME · part 195 -->
r; c.fillRect(0,0,256,12);
  c.strokeStyle=b.border; c.lineWidth=6; c.strokeRect(5,5,246,118);
  c.fillStyle='#ffe9a8'; c.font='bold 30px Georgia,serif'; c.textAlign='center';
  c.fillText(b.label,128,76);
  b.tex.needsUpdate=true;
}
function refreshBorders(){
  for(var i=0;i<buttons.length;i++){
    var b=buttons[i], sel=false;
    if(b.kind==='variant') sel=(b.key===curVariant);
    else if(b.kind==='shape') sel=(b.key===curShape);
    b.border=sel?'#ffd700':'#5a5a66';
    drawBtn(b);
  }
}
function addButton(parent,d,gx,gy,fz){
  var grp=new T.Group();
  var base=new T.Mesh(new T.BoxGeometry(2.7,1.5,0.7),
    new T.MeshStandardMaterial({color:0x1a1a24,roughness:0.55,metalness:0.35}));
  base.position.set(gx,gy,fz);
  var cv=document.createElement('canvas'); cv.width=256; cv.height=128;
  var tex=new T.CanvasTexture(cv); tex.anisotropy=4;
  var face=new T.Mesh(new T.PlaneGeometry(2.5,1.3),new T.MeshBasicMaterial({map:tex}));
  face.position.set(gx,gy,fz+0.37);
  grp.add(base); grp.add(face);
  parent.add(grp);
  var b={id:d.id,label:d.label,color:d.color,kind:d.kind,key:d.key,fn:d.fn,
         base:base,ctx:cv.getContext('2d'),tex:tex,border:'#5a5a66'};
  base.userData.btn=b; face.userData.btn=b;
  buttons.push(b); hitMeshes.push(base); hitMeshes.push(face);
  drawBtn(b);
  return b;
}
function pressFx(b){
  try{
    b.base.scale.set(0.9,0.9,0.55);
    setTimeout(function(){ try{ b.base.scale.set(1,1,1); }catch(e){} },130);
  }catch(e){}
}
function buildConsoleGroup(title,defs){
  var g=new T.Group();
  var stone=new T.MeshStandardMaterial({color:0x3a3f4a,roughness:0.9,metalness:0.05});
  var gold=new T.MeshStandardMaterial({color:0xffd700,roughness:0.35,metalness:0.7});
  var body=new T.Mesh(new T.BoxGeometry(14,11,2.4),stone);
  body.position.set(0,7,0);
  var trim=new T.Mesh(new T.BoxGeometry(14.3,0.35,2.7),gold);
  trim.position.set(0,12.65,0);
  var trim2=new T.Mesh(new T.BoxGeometry(14.3,0.25,2.7),gold);
  trim2.position.set(0,1.45,0);
  var legG=new T.BoxGeometry(1.7,1.6,1.7);
  var l1=new T.Mesh(legG,stone); l1.position.set(-5,0.8,0);
  var l2=new T.Mesh(legG,stone); l2.position.set(5,0.8,0);
  g.add(body); g.add(trim); g.add(trim2); g.add(l1); g.add(l2);
  var tc=document.createElement('canvas'); tc.width=512; tc.height=96;
  var tctx=tc.getContext('2d');
  tctx.fillStyle='#0d0b16'; tctx.fillRect(0,0,512,96);
  tctx.fillStyle='#ffd700'; tctx.font='bold 44px Georgia,serif'; tctx.textAlign='center';
  tctx.fillText(title,256,62);
  var plate=new T.Mesh(new T.PlaneGeometry(9,1.7),new T.MeshBasicMaterial({map:new T.CanvasTexture(tc)}));
  plate.position.set(0,11.2,1.25);
  g.add(plate);
  for(var i=0;i<defs.length;i++){
    var d=defs[i], c=i%4, r=Math.floor(i/4);
    addButton(g,d,-5.25+c*3.5,9.4-r*1.75,1.55);
  }
  return g;
}
function eob(k){ var c=1.70158; return 1+(c+1)*Math.pow(k-1,3)+c*Math.pow(k-1,2); }
function saveConsoles(){
  try{ localStorage.setItem('solid-consoles-v1',JSON.stringify(deployed.map(function(d){ return {x:d.x,z:d.z,r:d.r}; }))); }catch(e){}
}
window.deployConsole=function(x,y,z,rot){
  dropHold();
  try{ if(window.consoleAimHide) window.consoleAimHide(); }catch(e){}
  lastCell='x';
  var g=buildConsoleGroup('THE CONSOLE',DEFS);
  g.position.set(x,y,z); g.rotation.y=rot||0;
  g.scale.set(0.06,0.06,0.06);
  Kt.scene.add(g);
  deployed.push({x:x,z:z,r:rot||0,grp:g});
  saveConsoles();
  var t0=Date.now();
  var iv=setInterval(function(){
    var k=(Date.now()-t0)/1500; if(k>=1) k=1;
    var s=0.06+0.94*eob(k); if(s<0.06) s=0.06;
    try{ g.scale.set(s,s,s); }catch(e){}
    if(k===1) clearInterval(iv);
  },33);
  try{ Kt.burst(x,y+2.5,z,0xffd700); }catch(e){}
  toast('THE CONSOLE UNFOLDS','#ffd700');
};

function boot(){
  DEFS=[
    {id:'v-wood',label:'WOOD',color:VCSS.wood,kind:'variant',key:'wood',fn:function(){setVariant('wood');}},
    {id:'v-stone',label:'STONE',color:VCSS.stone,kind:'variant',key:'stone',fn:function(){setVariant('stone');}},
    {id:'v-gold',label:'GOLD',color:VCSS.gold,kind:'variant',key:'gold',fn:function(){setVariant('gold');}},
    {id:'v-marble',label:'MARBLE',color:VCSS.marble,kind:'variant',key:'marble',fn:function(){setVariant('marble');}}
  ];
  SHAPES.forEach(function(s){
    DEFS.push({id:'s-'+s,label:s.toUpperCase(),color:'#8a8f98',kind:'shape',key:s,
      fn:(function(sh){ return function(){ pickShape(sh); }; })(s)});
  });
  DEFS.push({id:'fn-build',label:'BUILD',color:'#ffd700',kind:'fn',key:'',fn:fnBuild});
  DEFS.push({id:'fn-visit',label:'VISIT',color:'#9ad',kind:'fn',key:'',fn:fnVisit});
  DEFS.push({id:'fn-home',label:'HOME',color:'#9ad',kind:'fn',key:'',fn:fnHome});
  DEFS.push({id:'fn-more',label:'MORE',color:'#5a5a66',kind:'fn',key:'',fn:function(){
    toast('MORE BOXES WHEN WE NEED THEM','#ffd700'); }});

  var bb=document.createElement('button');
  bb.textContent='BOX';
  bb.style.cssText='position:fixed;top:124px;left:8px;z-index:9999;min-width:66px;min-height:40px;padding:8px 6px;font-siz