<!-- RUBY-BACKUP · part 427 -->
tail */
  var tail = new THREE.Mesh(new THREE.SphereGeometry(0.07, 8, 8),
    new THREE.MeshStandardMaterial({color: 0xffffff, roughness: 1}));
  tail.position.set(-0.28, 0.3, 0); g.add(tail);
  /* hind legs */
  [-1,1].forEach(function(s){
    var leg = new THREE.Mesh(new THREE.SphereGeometry(0.09, 8, 8), gray);
    leg.position.set(-0.1, 0.12, s*0.12); leg.scale.set(1.3, 0.8, 1); g.add(leg);
  });
  return g;
}
function buildEagle(){
  var g = new THREE.Group();
  var brown = new THREE.MeshStandardMaterial({color: 0x5a3a1a, roughness: 0.8});
  var white = new THREE.MeshStandardMaterial({color: 0xffffff, roughness: 0.8});
  var yellow = new THREE.MeshStandardMaterial({color: 0xffcc00, roughness: 0.5});
  var dark = new THREE.MeshStandardMaterial({color: 0x222222});
  var body = new THREE.Mesh(new THREE.SphereGeometry(0.22, 12, 12), brown);
  body.scale.set(1.4, 1, 0.9); body.position.y = 0.5; g.add(body);
  /* head — white (bald eagle) */
  var head = new THREE.Mesh(new THREE.SphereGeometry(0.14, 10, 10), white);
  head.position.set(0.3, 0.65, 0); g.add(head);
  /* beak */
  var beak = new THREE.Mesh(new THREE.ConeGeometry(0.05, 0.12, 8), yellow);
  beak.position.set(0.42, 0.63, 0); beak.rotation.z = -Math.PI/2; g.add(beak);
  [-1,1].forEach(function(s){
    var eye = new THREE.Mesh(new THREE.SphereGeometry(0.03, 8, 8), dark);
    eye.position.set(0.36, 0.68, s*0.07); g.add(eye);
  });
  /* wings */
  [-1,1].forEach(function(s){
    var wing = new THREE.Mesh(new THREE.BoxGeometry(0.5, 0.04, 0.35), brown);
    wing.position.set(-0.05, 0.55, s*0.3); wing.rotation.x = s*0.2; g.add(wing);
    /* wingtip feathers */
    for(var i=0; i<3; i++){
      var feather = new THREE.Mesh(new THREE.BoxGeometry(0.15, 0.02, 0.08), brown);
      feather.position.set(-0.3, 0.55, s*(0.35+i*0.08)); g.add(feather);
    }
  });
  /* tail */
  var tail = new THREE.Mesh(new THREE.BoxGeometry(0.25, 0.03, 0.2), white);
  tail.position.set(-0.35, 0.5, 0); g.add(tail);
  /* talons */
  [-1,1].forEach(function(s){
    var leg = new THREE.Mesh(new THREE.CylinderGeometry(0.03, 0.03, 0.2, 6), yellow);
    leg.position.set(0.05, 0.25, s*0.1); g.add(leg);
  });
  return g;
}
function buildCrab(){
  var g = new THREE.Group();
  var red = new THREE.MeshStandardMaterial({color: 0xcc3311, roughness: 0.6});
  var dark = new THREE.MeshStandardMaterial({color: 0x222222});
  /* body — wide */
  var body = new THREE.Mesh(new THREE.SphereGeometry(0.2, 12, 12), red);
  body.scale.set(1.4, 0.7, 1.2); body.position.y = 0.2; g.add(body);
  /* eyes on stalks */
  [-1,1].forEach(function(s){
    var stalk = new THREE.Mesh(new THREE.CylinderGeometry(0.02, 0.02, 0.1, 6), red);
    stalk.position.set(0.2, 0.32, s*0.08); g.add(stalk);
    var eye = new THREE.Mesh(new THREE.SphereGeometry(0.035, 8, 8), dark);
    eye.position.set(0.2, 0.38, s*0.08); g.add(eye);
  });
  /* claws */
  [-1,1].forEach(function(s){
    var arm = new THREE.Mesh(new THREE.CylinderGeometry(0.04, 0.05, 0.25, 8), red);
    arm.position.set(0.25, 0.2, s*0.2); arm.rotation.z = -0.5; arm.rotation.x = s*0.4; g.add(arm);
    var claw = new THREE.Mesh(new THREE.SphereGeometry(0.09, 10, 10), red);
    claw.position.set(0.35, 0.25, s*0.28); claw.scale.set(1.2, 0.8, 1); g.add(claw);
  });
  /* walking legs */
  [-1,1].forEach(function(s){
    for(var i=0; i<3; i++){
      var leg = new THREE.Mesh(new THREE.CylinderGeometry(0.025, 0.02, 0.2, 6), red);
      leg.position.set(-0.05+i*0.12, 0.12, s*0.25);
      leg.rotation.x = s*0.6; g.add(leg);
    }
  });
  return g;
}
function buildDolphin(){
  var g = new THREE.Group();
  var blue = new THREE.MeshStandardMaterial({color: 0x4488cc, roughness: 0.4});
  var light = new THREE.MeshStandardMaterial({color: 0xaaccff, roughness: 0.5});
  var dark = new THREE.MeshStandardMaterial({color: 0x222222});
  /* streamlined body */
  var body = new THREE.Mesh(new THREE.SphereGeometry(0.25, 14, 14), blue);
  body.scale.set(2.2, 0.9, 0.9); body.position.y = 0.4; g.add(body);
  /* belly */
  var belly = new THREE.Mesh(new THREE.SphereGeometry(0.22, 12, 12), light);
  belly.scale.set(2.0, 0.7, 0.8); belly.position.y = 0.32; g.add(belly);
  /* beak */
  var beak = new THREE.Mesh(new THREE.CylinderGeometry(0.06, 0.09, 0.3, 10), blue);
  beak.position.set(0.6, 0.4, 0); beak.rotation.z = -Math.PI/2; g.add(beak);
  /* eyes */
  [-1,1].forEach(function(s){
    var eye = new THREE.Mesh(new THREE.SphereGeometry(0.035, 8, 8), dark);
    eye.position.set(0.45, 0.48, s*0.12); g.add(eye);
  });
  /* dorsal fin */
  var dorsal = new THREE.Mesh(new THREE.ConeGeometry(0.08, 0.25, 8), blue);
  dorsal.position.set(-0.05, 0.65, 0); dorsal.rotation.z = -0.3; g.add(dorsal);
  /* flippers */
  [-1,1].forEach(function(s){
    var flip = new THREE.Mesh(new THREE.BoxGeometry(0.2, 0.04, 0.12), blue);
    flip.position.set(0.1, 0.3, s*0.25); flip.rotation.x = s*0.4; g.add(flip);
  });
  /* tail fluke */
  var tail1 = new THREE.Mesh(new THREE.BoxGeometry(0.15,