<!-- SOLID CITY · part 2106 -->
Material({color:0x3a3f47}),
    register:new T.MeshLambertMaterial({color:0x1a1c20}),
    table:new T.MeshLambertMaterial({color:0x8a6a48}),
    chair:new T.MeshLambertMaterial({color:0x6a4a3a}),
    rackBar:new T.MeshLambertMaterial({color:0xb0b6be}),
    caseGlass:new T.MeshLambertMaterial({color:0xcfe4f8,transparent:true,opacity:0.3}),
    glowA:new T.MeshBasicMaterial({color:0x7ad8ff}),
    glowB:new T.MeshBasicMaterial({color:0xffb86a}),
    sign:function(name){
      var c=document.createElement('canvas');c.width=512;c.height=128;
      var x2=c.getContext('2d');
      x2.fillStyle='#14161a';x2.fillRect(0,0,512,128);
      x2.strokeStyle='#d8aa48';x2.lineWidth=4;x2.strokeRect(6,6,500,116);
      x2.fillStyle='#e8c86a';x2.textAlign='center';x2.textBaseline='middle';
      var fs=name.length>14?34:44;
      x2.font='bold '+fs+'px Georgia,serif';x2.fillText(name,256,66);
      var t=new T.CanvasTexture(c);t.encoding=T.sRGBEncoding;t.anisotropy=4;return t;
    }
  };
  var prodCols=[0xc84a4a,0x4a8ac8,0x4ac86a,0xc8a44a,0x8a4ac8,0x4ac8c8].map(function(c){
    return new T.MeshLambertMaterial({color:c});
  });
  var bookCols=[0x8a2a2a,0x2a4a8a,0x2a6a3a,0x8a6a2a,0x5a2a8a,0x2a8a7a].map(function(c){
    return new T.MeshLambertMaterial({color:c});
  });
  var clothCols=[0xd84a6a,0x4a7ad8,0x4ad88a,0xe8c86a,0x9a5ad8,0x5ad8d8].map(function(c){
    return new T.MeshLambertMaterial({color:c});
  });
  var foodCols=[0xe86a3a,0x7ad83a,0xe8d83a,0xd83a5a,0x3ad88a].map(function(c){
    return new T.MeshLambertMaterial({color:c});
  });
  var goldCols=[0xd8aa48,0xf2d88a,0xb8862a].map(function(c){
    return new T.MeshLambertMaterial({color:c,emissive:0x4a2e08,emissiveIntensity:0.5});
  });

  // local helpers that need box/solid — defined per store via fit()
  function tableSet(bx,sl,x,z){
    var tm=new T.Mesh(new T.CylinderGeometry(1.1,1.1,0.14,10),M.table);
    // fallback: use bx for top
    bx(2.2,0.14,2.2,M.table, x,0.85,z);
    bx(0.25,0.85,0.25,M.table, x,0.42,z);
    [[-1.6,0],[1.6,0],[0,-1.6],[0,1.6]].forEach(function(p){
      bx(0.9,0.9,0.9,M.chair, x+p[0],0.45,z+p[1]);
      sl(x+p[0],z+p[1],0.9,0.9,0,0.9);
    });
    sl(x,z,2.2,2.2,0,0.9);
  }
  function rack(bx,sl,x,z){
    bx(0.18,1.7,0.18,M.rackBar, x-1.5,0.85,z);
    bx(0.18,1.7,0.18,M.rackBar, x+1.5,0.85,z);
    bx(3.2,0.12,0.12,M.rackBar, x,1.65,z);
    for(var i=0;i<5;i++){
      var px=x-1.2+i*0.6;
      bx(0.45,0.9,0.25,clothCols[i%clothCols.length], px,1.1,z);
    }
    sl(x,z,3.4,0.6,0,1.7);
  }
  function produceStand(bx,sl,x,z,w){
    bx(w,0.9,2.2,M.table, x,0.45,z);
    for(var i=0;i<Math.floor(w/1.4);i++){
      var px=x-w/2+0.7+i*1.4;
      var s=new T.Mesh(new T.SphereGeometry(0.32,8,6),foodCols[i%foodCols.length]);
      // use bx with a box approx (sphere needs mesh) — do small boxes
      bx(0.55,0.5,0.55,foodCols[i%foodCols.length], px,1.15,z-0.4);
      bx(0.55,0.5,0.55,foodCols[(i+2)%foodCols.length], px,1.15,z+0.4);
    }
    sl(x,z,w,2.2,0,1.4);
  }
  function jewelryCase(bx,sl,x,z,w){
    bx(w,1.0,1.4,M.counter, x,0.5,z);
    bx(w,0.9,1.2,M.caseGlass, x,1.45,z);
    for(var i=0;i<3;i++){
      var px=x-w/2+1+i*(w-2)/2;
      bx(0.5,0.35,0.5,goldCols[i%3], px,1.2,z);
    }
    sl(x,z,w,1.4,0,1.9);
  }
  function flowerStand(bx,sl,x,z){
    bx(1.2,1.0,1.2,M.counter, x,0.5,z);
    var cols=[0xe84a7a,0xe8e84a,0xd84ad8,0xff8a5a];
    for(var i=0;i<4;i++){
      var a=i*Math.PI/2;
      bx(0.5,0.5,0.5,new T.MeshLambertMaterial({color:cols[i]}), x+Math.cos(a)*0.35,1.25,z+Math.sin(a)*0.35);
    }
    bx(0.12,0.5,0.12,M.shelf, x,1.0,z);
    sl(x,z,1.2,1.2,0,1.5);
  }

  var stores=[
    {x:-139,z:-10,ry:-Math.PI/2,name:'THE GOLDEN CRUMB',fit:function(bx,sl){
      fxCounter(bx,sl,M,-4,-4.5,8);
      for(var i=0;i<3;i++) bx(1.6,0.5,1.0,foodCols[i%5], -6+i*2,1.45,-4.5); // pastries on counter
      tableSet(bx,sl,3,-2); tableSet(bx,sl,3,3); tableSet(bx,sl,-2,2);
      fxShelf(bx,sl,M,-6,4.5,5,prodCols);
    }},
    {x:-139,z:15,ry:-Math.PI/2,name:'THREAD & TIDE',fit:function(bx,sl){
      rack(bx,sl,-5,-3); rack(bx,sl,0,-3); rack(bx,sl,5,-3);
      rack(bx,sl,-5,2); rack(bx,sl,5,2);
      fxShelf(bx,sl,M,0,4.5,6,clothCols);
      fxCounter(bx,sl,M,5.5,4.5,4);
    }},
    {x:-93.5,z:35.5,ry:0,name:'VOLT & CIRCUIT',fit:function(bx,sl){
      [-5,0,5].forEach(function(px){
        bx(4,0.9,2,M.counter, px,0.45,0);
        for(var i=0;i<3;i++) bx(0.7,0.12,0.5,i%2?M.glowA:M.glowB, px-1.2+i*1.2,1.0,0);
        sl(px,0,4,2,0,1.0);
      });
      bx(10,3,0.3,M.glowA, 0,3.5,-6.5); // screen wall
      fxCounter(bx,sl,M,0,4.8,6);
    }},
    {x:-120,z:-28.5,ry:Math.PI,name:'HARVEST ROW',fit:function(bx,sl){
      produceStand(bx,sl,-4,-2,6); produceStand(bx,sl,4,-2,6);
      produceStand(bx,sl,0,2.5,8);
      fxShelf(bx,sl,M,-6,4.8,4,prodCols);
      fxCounter(bx,sl,M,6,4.8,4);
    }},
    {x:-95,z:-28.5,ry:Math.PI,name:'THE GILDED CASE',fit:function(bx,sl){
      jewelryCase(bx,sl,-4,0,6); jewelryCase(bx,sl,3.5,0,6);
