<!-- SOLID-PLAYTIME · part 185 -->
inButton(invBtn,true);

/* every button the inventory panel renders: nav chrome or slot */
function sweep(root){
  var btns=(root||document).querySelectorAll('#invPanel button');
  for(var i=0;i<btns.length;i++){
    var b=btns[i];
    if(b.querySelector('img')){
      if(!b.classList.contains('igl-slot')) b.classList.add('igl-slot');
    }else{
      skinButton(b,false);
    }
  }
}
sweep(document);
var panel=document.getElementById('invPanel');
if(panel&&window.MutationObserver){
  var mo=new MutationObserver(function(muts){
    for(var i=0;i<muts.length;i++){
      var m=muts[i];
      for(var j=0;j<m.addedNodes.length;j++){
        var n=m.addedNodes[j];
        if(n.nodeType!==1) continue;
        if(n.tagName==='BUTTON'){
          if(n.querySelector('img')){ if(!n.classList.contains('igl-slot')) n.classList.add('igl-slot'); }
          else skinButton(n,false);
        }else if(n.querySelectorAll){
          sweep(n);
        }
      }
    }
  });
  mo.observe(panel,{childList:true,subtree:true});
}
}catch(e){ if(window.console&&console.warn) console.warn('intaglio-pack:',e); }
})(),(function(){
try{
var T=window.THREE; if(!T) return;
if(window.buildPackLoaded) return; window.buildPackLoaded=true;

/* ============ shared defs ============ */
var VCOLOR={wood:0x8B5A2B, stone:0x8a8f98, gold:0xffd700, marble:0xe8e4da};
var VCSS={wood:'#8B5A2B', stone:'#8a8f98', gold:'#ffd700', marble:'#e8e4da'};
var CELL=2, GRIDSZ=13;
var VMAT={};
Object.keys(VCOLOR).forEach(function(v){
  VMAT[v]=new T.MeshStandardMaterial({color:VCOLOR[v],roughness:v==='gold'?0.35:0.85,metalness:v==='gold'?0.7:0.05});
});
function groundY(x,z){ try{ return Kt.ground(x,z); }catch(e){ return 0; } }
function toast(m,c){ try{ window.invToast(m,c); }catch(e){} }

/* ============ piece builders (base at y=0) ============ */
function box(grp,w,h,d,x,y,z){
  var m=new T.Mesh(new T.BoxGeometry(w,h,d),null);
  m.position.set(x,y,z); grp.add(m); return m;
}
function buildPiece(shape){
  var g=new T.Group();
  if(shape==='pillar'){ box(g,1,3.6,1,0,1.8,0); box(g,1.4,0.3,1.4,0,3.75,0); box(g,1.3,0.3,1.3,0,0.15,0); }
  else if(shape==='wall'){ box(g,2,3,0.5,0,1.5,0); }
  else if(shape==='step'){ box(g,2,0.5,2,0,0.25,0); }
  else if(shape==='roof'){ var m=new T.Mesh(new T.ConeGeometry(1.65,1.3,4),null); m.position.y=0.65; m.rotation.y=Math.PI/4; g.add(m); }
  else if(shape==='foundation'){ box(g,2,0.4,2,0,0.2,0); }
  else if(shape==='beam'){ box(g,2,0.5,0.5,0,0.25,0); }
  else if(shape==='arch'){ box(g,0.5,3,1,-0.75,1.5,0); box(g,0.5,3,1,0.75,1.5,0); box(g,2,0.7,1,0,3.35,0); }
  else if(shape==='stairs'){ for(var i=0;i<4;i++) box(g,2,0.4,0.55,0,0.2+i*0.4,0.8-i*0.5); }
  else if(shape==='platform'){ box(g,2,0.25,2,0,1.0,0);
    box(g,0.25,1,0.25,-0.85,0.5,-0.85); box(g,0.25,1,0.25,0.85,0.5,-0.85);
    box(g,0.25,1,0.25,-0.85,0.5,0.85); box(g,0.25,1,0.25,0.85,0.5,0.85); }
  else if(shape==='fence'){ box(g,2,0.12,0.12,0,0.9,0); box(g,2,0.12,0.12,0,0.5,0);
    for(var f=0;f<4;f++) box(g,0.12,1.1,0.12,-0.9+f*0.6,0.55,0); }
  else if(shape==='column'){ var cm=new T.Mesh(new T.CylinderGeometry(0.45,0.52,4.4,8),null); cm.position.y=2.45; g.add(cm);
    box(g,1.2,0.25,1.2,0,0.125,0); box(g,1.2,0.25,1.2,0,4.75,0); }
  else if(shape==='slab'){ box(g,2,0.25,2,0,0.125,0); }
  return g;
}
function paintPiece(g,variant){
  g.traverse(function(o){ if(o.isMesh) o.material=VMAT[variant]; });
  return g;
}

/* ============ persistence ============ */
var placed=[];
window.syncBuildAPI={piece:buildPiece,paint:paintPiece,setBuild:setBuild};
window.buildAimAt=function(x,z){ try{ moveGhostTo(x,z); }catch(e){} };
window.isBuildMode=function(){ try{ return !!buildOn; }catch(e){ return false; } };
function saveBuilds(){
  try{
    var arr=placed.map(function(p){ return {s:p.shape,v:p.variant,x:p.x,y:p.y,z:p.z,r:p.rot}; });
    localStorage.setItem('solid-builds-v1',JSON.stringify(arr));
  }catch(e){}
}
function spawnBlock(shape,variant,x,y,z,rot){
  var g=paintPiece(buildPiece(shape),variant);
  if(window.applyMinimum) window.applyMinimum(g);
  g.position.set(x,y,z); g.rotation.y=rot||0;
  Kt.scene.add(g);
  placed.push({mesh:g,shape:shape,variant:variant,x:x,y:y,z:z,rot:rot||0});
  markCell(x,z,y,shape);
  return g;
}
try{
  var sv=JSON.parse(localStorage.getItem('solid-builds-v1')||'[]');
  sv.forEach(function(b){ try{ spawnBlock(b.s,b.v,b.x,b.y,b.z,b.r); }catch(e){} });
}catch(e){}

/* ============ build mode state ============ */
var buildOn=false, ghost=null, ghostRot=0, ghostCell=null, ghostOK=false;
var gridH=null, tapLayer=null, buildBar=null, gridTimer=null;
var sessionPlaced=[];
var ghostMatOK=new T.MeshBasicMaterial({color:0x00ff88,transparent:true,opacity:0.35,depthWrite:false});
var ghostMatBad=new T.MeshBasicMaterial({color:0xff3344,transparent:true,opacity:0.35,depthWrite:false});
var ghostMatGold=new T.MeshBasicMaterial({color:0xffd700,transparent:true,opacity:0.55,depthWrite:false});

function heldKey(){
  try{ return wind