<!-- RUBY-BACKUP · part 109 -->
ardMaterial({color:0x1a1a1a, roughness:0.5, metalness:0.3});
    var roofMat = new THREE.MeshStandardMaterial({color:0x0a0a0a, roughness:0.4});
    var trimMat = new THREE.MeshStandardMaterial({color:0xffd700, emissive:0xffd700, emissiveIntensity:0.9});
    /* raised floor */
    var pfloor = new THREE.Mesh(new THREE.BoxGeometry(10, 0.5, 8), floorMat);
    pfloor.position.set(0, 0.25, 0);
    pav.add(pfloor);
    var pgold = new THREE.Mesh(new THREE.BoxGeometry(10.2, 0.15, 8.2), trimMat);
    pgold.position.set(0, 0.55, 0);
    pav.add(pgold);
    /* four corner columns + two mid columns, open sides */
    var colPos = [[-4.5,-3.5],[4.5,-3.5],[-4.5,3.5],[4.5,3.5],[0,-3.5],[0,3.5]];
    colPos.forEach(function(cp){
      var col = new THREE.Mesh(new THREE.CylinderGeometry(0.3, 0.35, 5, 10), colMat);
      col.position.set(cp[0], 3, cp[1]);
      pav.add(col);
      var cap = new THREE.Mesh(new THREE.BoxGeometry(0.9, 0.3, 0.9), trimMat);
      cap.position.set(cp[0], 5.6, cp[1]);
      pav.add(cap);
    });
    /* pitched roof — two slabs meeting at ridge */
    var roofL = new THREE.Mesh(new THREE.BoxGeometry(11, 0.3, 5), roofMat);
    roofL.position.set(0, 6.5, -2);
    roofL.rotation.x = 0.35;
    pav.add(roofL);
    var roofR = new THREE.Mesh(new THREE.BoxGeometry(11, 0.3, 5), roofMat);
    roofR.position.set(0, 6.5, 2);
    roofR.rotation.x = -0.35;
    pav.add(roofR);
    var ridge = new THREE.Mesh(new THREE.BoxGeometry(11.2, 0.25, 0.4), trimMat);
    ridge.position.set(0, 7.3, 0);
    pav.add(ridge);
    /* warm light inside */
    var lampMat = new THREE.MeshStandardMaterial({color:0xffaa00, emissive:0xffaa00, emissiveIntensity:1.5});
    var lamp = new THREE.Mesh(new THREE.SphereGeometry(0.4, 10, 10), lampMat);
    lamp.position.set(0, 4.5, 0);
    pav.add(lamp);
    pav.position.set(18, 0, 14);
    g.add(pav);
    if(typeof scene!=='undefined') scene.add(g);
    codeStatus('the outpost stands');
  }catch(e){ codeStatus('outpost failed'); }
}
/* THE CUTAWAY — square block, half cut out, layers black to white */
function buildCutaway(){
  try{
    var g = new THREE.Group();
    /* enable clipping */
    if(typeof renderer!=='undefined'){ renderer.localClippingEnabled = true; }
    var clipPlane = new THREE.Plane(new THREE.Vector3(-1, 0, 0), 0);
    var layers = [
      {s:2.0, c:0x0a0a0a},
      {s:1.6, c:0x333333},
      {s:1.2, c:0x666666},
      {s:0.8, c:0x999999},
      {s:0.4, c:0xffffff}
    ];
    layers.forEach(function(L){
      var mat = new THREE.MeshStandardMaterial({color:L.c, roughness:0.5, clippingPlanes:[clipPlane], side:THREE.DoubleSide});
      var box = new THREE.Mesh(new THREE.BoxGeometry(L.s, L.s, L.s), mat);
      box.position.y = L.s/2;
      g.add(box);
    });
    g.position.set(-18, 0, -8);
    if(typeof scene!=='undefined') scene.add(g);
    codeStatus('the cutaway stands');
  }catch(e){ codeStatus('cutaway failed'); }
}
/* SHAPE GARDEN — a good amount of each shape */
function buildShapes(){
  try{
    var g = new THREE.Group();
    var goldMat = new THREE.MeshStandardMaterial({color:0xffd700, emissive:0xffd700, emissiveIntensity:0.3, roughness:0.4});
    var blackMat = new THREE.MeshStandardMaterial({color:0x1a1a1a, roughness:0.6});
    var shapes = [];
    /* boxes */
    for(var i=0;i<3;i++){
      var b = new THREE.Mesh(new THREE.BoxGeometry(2,2,2), i%2?goldMat:blackMat);
      b.position.set(-24+i*4, 1, -20);
      shapes.push(b);
    }
    /* spheres */
    for(var j=0;j<3;j++){
      var s = new THREE.Mesh(new THREE.SphereGeometry(1.2, 16, 12), j%2?blackMat:goldMat);
      s.position.set(-24+j*4, 1.2, -14);
      shapes.push(s);
    }
    /* cylinders */
    for(var k=0;k<3;k++){
      var cy = new THREE.Mesh(new THREE.CylinderGeometry(1, 1, 2.5, 12), k%2?goldMat:blackMat);
      cy.position.set(-24+k*4, 1.25, -8);
      shapes.push(cy);
    }
    /* cones */
    for(var m=0;m<3;m++){
      var co = new THREE.Mesh(new THREE.ConeGeometry(1.2, 2.5, 4), m%2?blackMat:goldMat);
      co.position.set(-24+m*4, 1.25, -2);
      shapes.push(co);
    }
    shapes.forEach(function(sh){ g.add(sh); });
    if(typeof scene!=='undefined') scene.add(g);
    codeStatus('shapes stand');
  }catch(e){ codeStatus('shapes failed'); }
}
/* GEAR — craft a mechanical gear, the dynamics benchmark */
function buildGear(){
  try{
    var g = new THREE.Group();
    var goldMat = new THREE.MeshStandardMaterial({color:0xffd700, emissive:0xffd700, emissiveIntensity:0.4, roughness:0.3, metalness:0.7});
    var blackMat = new THREE.MeshStandardMaterial({color:0x1a1a1a, roughness:0.5, metalness:0.4});
    /* gear body — cylinder */
    var body = new THREE.Mesh(new THREE.CylinderGeometry(2, 2, 0.8, 24), goldMat);
    g.add(body);
    /* hub */
    var hub = new THREE.Mesh(new THREE.CylinderGeometry(0.6, 0.6, 1.0, 12), blackMat);
    g.add(hub);
    /* teeth — 12 around the edge */
    for(var i=0; i<12; i++){
      var angle = (i/12) * Math.PI * 2;
      var tooth = 