<!-- RUBY-BACKUP · part 242 -->
add(oMouth);
  fearEyes.visible = false;
  fearEyes.name = 'fearface';
  group.add(fearEyes);
  return group;
}

/* RELUCTANT — "I don't want to do this" look when picking up */
var REL_MESH = null, REL_ANIM = null;
function buildReluctant(){
  if(typeof THREE==='undefined') return null;
  var group = new THREE.Group();
  var skin = new THREE.MeshStandardMaterial({color: 0xffccaa, roughness: 0.6});
  var dark = new THREE.MeshStandardMaterial({color: 0x222222, roughness: 0.8});
  /* body — slumped, doesn't want to be here */
  var body = new THREE.Mesh(new THREE.CylinderGeometry(0.26, 0.3, 0.9, 12), skin);
  body.position.y = 0.6;
  body.rotation.x = 0.08;
  group.add(body);
  /* head */
  var head = new THREE.Mesh(new THREE.SphereGeometry(0.2, 18, 18), skin);
  head.position.y = 1.25;
  group.add(head);
  /* normal face */
  var eyeMat = dark;
  [-1,1].forEach(function(s){
    var eye = new THREE.Mesh(new THREE.SphereGeometry(0.03, 10, 10), eyeMat);
    eye.position.set(s*0.07, 1.28, 0.17);
    eye.name = 'normaleye'+s;
    group.add(eye);
  });
  var mouth = new THREE.Mesh(new THREE.BoxGeometry(0.1, 0.015, 0.01), dark);
  mouth.position.set(0, 1.2, 0.18);
  mouth.name = 'normalmouth';
  group.add(mouth);
  /* RELUCTANT face — eye roll + flat annoyed mouth (hidden default) */
  var relFace = new THREE.Group();
  [-1,1].forEach(function(s){
    /* eyes rolled up */
    var reye = new THREE.Mesh(new THREE.SphereGeometry(0.035, 10, 10),
      new THREE.MeshStandardMaterial({color: 0xffffff}));
    reye.position.set(s*0.07, 1.3, 0.17);
    var pupil = new THREE.Mesh(new THREE.SphereGeometry(0.015, 8, 8), dark);
    pupil.position.set(s*0.07, 1.32, 0.2); /* looking up = eye roll */
    relFace.add(reye); relFace.add(pupil);
  });
  /* annoyed flat line, slightly downturned */
  var amouth = new THREE.Mesh(new THREE.BoxGeometry(0.12, 0.015, 0.01), dark);
  amouth.position.set(0, 1.19, 0.18);
  amouth.rotation.z = -0.1;
  relFace.add(amouth);
  /* sigh lines */
  relFace.visible = false;
  relFace.name = 'relface';
  group.add(relFace);
  /* arms — hanging, limp */
  [-1,1].forEach(function(s){
    var arm = new THREE.Mesh(new THREE.CylinderGeometry(0.06, 0.06, 0.5, 8), skin);
    arm.position.set(s*0.33, 0.6, 0);
    arm.rotation.z = s*0.1;
    group.add(arm);
  });
  return group;
}

/* MATRIARCH — a woman, grace and strength */
var MAT_MESH = null, MAT_ANIM = null;
function buildMatriarch(){
  if(typeof THREE==='undefined') return null;
  var group = new THREE.Group();
  var skin = new THREE.MeshStandardMaterial({color: 0xffccaa, roughness: 0.5});
  var gown = new THREE.MeshStandardMaterial({color: 0x990055, roughness: 0.6});
  var gold = new THREE.MeshStandardMaterial({color: 0xffcc00, roughness: 0.3, metalness: 0.7});
  var hairM = new THREE.MeshStandardMaterial({color: 0x331111, roughness: 0.7});
  var dark = new THREE.MeshStandardMaterial({color: 0x222222, roughness: 0.8});
  /* gown — flowing, feminine */
  var gownM = new THREE.Mesh(new THREE.CylinderGeometry(0.22, 0.45, 1.1, 16), gown);
  gownM.position.y = 0.65;
  group.add(gownM);
  /* torso */
  var torso = new THREE.Mesh(new THREE.CylinderGeometry(0.2, 0.24, 0.5, 12), gown);
  torso.position.y = 1.35;
  group.add(torso);
  /* gold belt */
  var belt = new THREE.Mesh(new THREE.TorusGeometry(0.23, 0.03, 8, 20), gold);
  belt.rotation.x = Math.PI/2;
  belt.position.y = 1.1;
  group.add(belt);
  /* head */
  var head = new THREE.Mesh(new THREE.SphereGeometry(0.17, 18, 18), skin);
  head.position.y = 1.75;
  group.add(head);
  /* hair — long, flowing */
  var hair = new THREE.Mesh(new THREE.SphereGeometry(0.19, 18, 18, 0, Math.PI*2, 0, Math.PI*0.6), hairM);
  hair.position.y = 1.78;
  hair.rotation.x = -0.3;
  group.add(hair);
  var hairBack = new THREE.Mesh(new THREE.BoxGeometry(0.25, 0.5, 0.1), hairM);
  hairBack.position.set(0, 1.5, -0.15);
  group.add(hairBack);
  /* circlet — gold */
  var circlet = new THREE.Mesh(new THREE.TorusGeometry(0.18, 0.025, 8, 20), gold);
  circlet.rotation.x = Math.PI/2 - 0.15;
  circlet.position.y = 1.85;
  group.add(circlet);
  var gem = new THREE.Mesh(new THREE.SphereGeometry(0.035, 10, 10),
    new THREE.MeshStandardMaterial({color: 0xff0066, emissive: 0xff0066, emissiveIntensity: 1.0}));
  gem.position.set(0, 1.86, 0.17);
  group.add(gem);
  /* eyes — warm, knowing */
  [-1,1].forEach(function(s){
    var eye = new THREE.Mesh(new THREE.SphereGeometry(0.028, 10, 10), dark);
    eye.position.set(s*0.065, 1.77, 0.15);
    group.add(eye);
  });
  /* gentle smile */
  var smile = new THREE.Mesh(new THREE.TorusGeometry(0.05, 0.012, 8, 14, Math.PI), dark);
  smile.position.set(0, 1.7, 0.15);
  smile.rotation.z = Math.PI;
  group.add(smile);
  /* arms — graceful */
  [-1,1].forEach(function(s){
    var arm = new THREE.Mesh(new THREE.CylinderGeometry(0.05, 0.05, 0.45, 8), skin);
    arm.position.set(s*0.28, 1.25, 0);
    arm.rotation.z = s*0.15;
    group.add(arm);
    var bracelet = new THREE