<!-- RUBY-BACKUP · part 110 -->
new THREE.Mesh(new THREE.BoxGeometry(0.5, 0.8, 0.6), goldMat);
      tooth.position.set(Math.cos(angle)*2.2, 0, Math.sin(angle)*2.2);
      tooth.rotation.y = -angle;
      g.add(tooth);
    }
    /* center hole visual */
    var hole = new THREE.Mesh(new THREE.CylinderGeometry(0.3, 0.3, 1.1, 8), blackMat);
    g.add(hole);
    g.position.set(0, 1, -24);
    /* lay flat like a gear on the ground, or stand it up */
    /* keep upright for visibility */
    if(typeof scene!=='undefined') scene.add(g);
    /* spin it slowly — dynamics! */
    var spinGear = function(){
      try{ g.rotation.y += 0.02; }catch(e){}
      if(g.parent) requestAnimationFrame(spinGear);
    };
    spinGear();
    window._lastGear = g;
    codeStatus('gear crafted — it turns');
  }catch(e){ codeStatus('gear failed'); }
}
/* PISTON — craft a mechanical piston, pumps back and forth */
function buildPiston(){
  try{
    var g = new THREE.Group();
    var goldMat = new THREE.MeshStandardMaterial({color:0xffd700, emissive:0xffd700, emissiveIntensity:0.3, roughness:0.4, metalness:0.6});
    var steelMat = new THREE.MeshStandardMaterial({color:0x888888, roughness:0.3, metalness:0.8});
    var blackMat = new THREE.MeshStandardMaterial({color:0x1a1a1a, roughness:0.6});
    /* chamber — the cylinder body */
    var chamber = new THREE.Mesh(new THREE.CylinderGeometry(1.2, 1.2, 3, 16), steelMat);
    chamber.rotation.z = Math.PI/2;
    chamber.position.set(0, 1.5, 0);
    g.add(chamber);
    /* end caps */
    for(var ci=0; ci<2; ci++){
      var cap = new THREE.Mesh(new THREE.CylinderGeometry(1.3, 1.3, 0.3, 16), blackMat);
      cap.rotation.z = Math.PI/2;
      cap.position.set(ci===0 ? -1.6 : 1.6, 1.5, 0);
      g.add(cap);
    }
    /* the rod — this is what pumps */
    var rod = new THREE.Mesh(new THREE.CylinderGeometry(0.4, 0.4, 4, 10), goldMat);
    rod.rotation.z = Math.PI/2;
    rod.position.set(2, 1.5, 0);
    g.add(rod);
    /* piston head */
    var head = new THREE.Mesh(new THREE.CylinderGeometry(0.9, 0.9, 0.5, 12), goldMat);
    head.rotation.z = Math.PI/2;
    head.position.set(0.5, 1.5, 0);
    g.add(head);
    g.position.set(6, 0, -24);
    if(typeof scene!=='undefined') scene.add(g);
    /* pump it — back and forth, dynamics! */
    var t = 0;
    var pumpPiston = function(){
      try{
        t += 0.05;
        var off = Math.sin(t) * 1.2;
        rod.position.x = 2 + off;
        head.position.x = 0.5 + off;
      }catch(e){}
      if(g.parent) requestAnimationFrame(pumpPiston);
    };
    pumpPiston();
    window._lastPiston = g;
    codeStatus('piston crafted — it pumps');
  }catch(e){ codeStatus('piston failed'); }
}
/* HUMAN BODY — intricate design, articulated */
function buildHumanBody(){
  try{
    var g = new THREE.Group();
    var skin = new THREE.MeshStandardMaterial({color:0xc8966a, roughness:0.6});
    var darkSkin = new THREE.MeshStandardMaterial({color:0xa8764a, roughness:0.6});
    var eyeW = new THREE.MeshStandardMaterial({color:0xffffff, roughness:0.3});
    var pupil = new THREE.MeshStandardMaterial({color:0x1a1a1a, roughness:0.3});
    var hairM = new THREE.MeshStandardMaterial({color:0x2a1a0a, roughness:0.8});
    var clothM = new THREE.MeshStandardMaterial({color:0x8a1a1a, roughness:0.7});
    function M(geo, mat, x, y, z){
      var m = new THREE.Mesh(geo, mat);
      m.position.set(x, y, z);
      g.add(m);
      return m;
    }
    /* HEAD */
    M(new THREE.SphereGeometry(0.9, 20, 16), skin, 0, 7.5, 0).name='head';
    /* eyes */
    M(new THREE.SphereGeometry(0.14, 10, 8), eyeW, -0.32, 7.6, 0.78);
    M(new THREE.SphereGeometry(0.14, 10, 8), eyeW, 0.32, 7.6, 0.78);
    M(new THREE.SphereGeometry(0.06, 8, 6), pupil, -0.32, 7.6, 0.9);
    M(new THREE.SphereGeometry(0.06, 8, 6), pupil, 0.32, 7.6, 0.9);
    /* nose */
    M(new THREE.ConeGeometry(0.1, 0.35, 8), darkSkin, 0, 7.35, 0.9).rotation.x = Math.PI/2;
    /* mouth */
    var mouth = M(new THREE.BoxGeometry(0.4, 0.06, 0.05), new THREE.MeshStandardMaterial({color:0x8a3a3a}), 0, 7.05, 0.85);
    /* ears */
    M(new THREE.SphereGeometry(0.15, 8, 6), skin, -0.92, 7.5, 0);
    M(new THREE.SphereGeometry(0.15, 8, 6), skin, 0.92, 7.5, 0);
    /* hair */
    var hair = M(new THREE.SphereGeometry(0.95, 20, 16, 0, Math.PI*2, 0, Math.PI/2.2), hairM, 0, 7.65, -0.05);
    /* NECK */
    M(new THREE.CylinderGeometry(0.3, 0.35, 0.6, 10), skin, 0, 6.4, 0).name='neck';
    /* TORSO — chest and abdomen */
    M(new THREE.CylinderGeometry(0.85, 0.65, 1.8, 14), clothM, 0, 5.2, 0).name='chest';
    M(new THREE.CylinderGeometry(0.65, 0.55, 1.2, 12), darkSkin, 0, 3.7, 0).name='abdomen';
    /* shoulders */
    M(new THREE.SphereGeometry(0.35, 10, 8), clothM, -1.0, 5.9, 0);
    M(new THREE.SphereGeometry(0.35, 10, 8), clothM, 1.0, 5.9, 0);
    /* ARMS — upper, elbow, forearm, wrist, hand, fingers */
    [-1, 1].forEach(function(s){
      var sx = s*1.0;
      M(new THREE.CylinderGeometry(0.22, 0.2, 1.4, 10), skin, sx+s*0.15, 5.0, 0).na