<!-- SAGA-STAGING · part 8 -->

  // Arms — slim, elegant
  var armL = new THREE.Group(); armL.position.set(-0.35, 1.9, 0);
  var aL = M(new THREE.CylinderGeometry(0.07, 0.09, 0.6, 8), MAT.blackCloth);
  aL.position.y = -0.3; armL.add(aL);
  var handL = M(new THREE.SphereGeometry(0.08, 8, 8), MAT.skinTone);
  handL.position.y = -0.62; armL.add(handL);
  g.add(armL);
  var armR = new THREE.Group(); armR.position.set(0.35, 1.9, 0);
  var aR = aL.clone(); aR.position.y = -0.3; armR.add(aR);
  var handR = handL.clone(); handR.position.y = -0.62; armR.add(handR);
  // Architect's tool — glowing caliper in right hand
  var tool = M(new THREE.TorusGeometry(0.1, 0.02, 6, 12, Math.PI*1.5), MAT.goldGlow);
  tool.position.y = -0.62; tool.rotation.z = 0.5; armR.add(tool);
  g.add(armR);

  // Head — refined, minimal
  var head = M(new THREE.SphereGeometry(0.18, 12, 10), MAT.skinTone);
  head.position.y = 2.32; head.scale.y = 1.1; g.add(head);
  // Luminous circlet
  var circlet = M(new THREE.TorusGeometry(0.19, 0.025, 8, 20), MAT.cyanGlow);
  circlet.rotation.x = Math.PI/2 - 0.2; circlet.position.y = 2.4; g.add(circlet);

  g.userData.avatarId = 'architect';
  g.userData.avatarName = 'THE ARCHITECT';
  g.userData.legL = legL; g.userData.legR = legR;
  g.userData.armL = armL; g.userData.armR = armR;
  return g;
}

/* ============================================================
   3. THE NOMAD — Lightweight explorer
   Hooded, pack, layered clothing, rugged boots
   Height: ~1.85 units
   ============================================================ */
function buildNomad() {
  initMaterials();
  var g = new THREE.Group();

  // Rugged boots — chunky, wrapped
  var bootL = M(new THREE.BoxGeometry(0.28, 0.3, 0.42), MAT.brownCloth);
  bootL.position.set(-0.18, 0.15, 0.03); g.add(bootL);
  var bootR = bootL.clone(); bootR.position.x = 0.18; g.add(bootR);
  // Boot straps
  var strapL = M(new THREE.BoxGeometry(0.3, 0.06, 0.44), MAT.blackCloth);
  strapL.position.set(-0.18, 0.28, 0.03); g.add(strapL);
  var strapR = strapL.clone(); strapR.position.x = 0.18; g.add(strapR);

  // Legs — layered wraps
  var legL = new THREE.Group(); legL.position.set(-0.18, 0.3, 0);
  var wrapL = M(new THREE.CylinderGeometry(0.12, 0.14, 0.6, 8), MAT.tanCloth);
  wrapL.position.y = 0.3; legL.add(wrapL);
  var wrapL2 = M(new THREE.CylinderGeometry(0.13, 0.13, 0.2, 8), MAT.brownCloth);
  wrapL2.position.y = 0.45; legL.add(wrapL2);
  g.add(legL);
  var legR = new THREE.Group(); legR.position.set(0.18, 0.3, 0);
  var wrapR = wrapL.clone(); wrapR.position.y = 0.3; legR.add(wrapR);
  var wrapR2 = wrapL2.clone(); wrapR2.position.y = 0.45; legR.add(wrapR2);
  g.add(legR);

  // Torso — layered tunic
  var tunic = M(new THREE.CylinderGeometry(0.28, 0.42, 0.7, 10), MAT.tanCloth);
  tunic.position.y = 1.2; g.add(tunic);
  var overTunic = M(new THREE.CylinderGeometry(0.32, 0.36, 0.4, 10), MAT.brownCloth);
  overTunic.position.y = 1.35; g.add(overTunic);
  // Belt with pouches
  var belt = M(new THREE.TorusGeometry(0.33, 0.04, 8, 14), MAT.blackCloth);
  belt.rotation.x = Math.PI/2; belt.position.y = 0.95; g.add(belt);
  for (var pi = 0; pi < 3; pi++) {
    var pouch = M(new THREE.BoxGeometry(0.12, 0.14, 0.08), MAT.brownCloth);
    var pa = (pi - 1) * 0.5;
    pouch.position.set(Math.sin(pa)*0.34, 0.88, Math.cos(pa)*0.34);
    g.add(pouch);
  }

  // Backpack — compact, with bedroll
  var pack = M(new THREE.BoxGeometry(0.4, 0.5, 0.25), MAT.brownCloth);
  pack.position.set(0, 1.35, -0.32); g.add(pack);
  var bedroll = M(new THREE.CylinderGeometry(0.09, 0.09, 0.45, 8), MAT.tanCloth);
  bedroll.rotation.z = Math.PI/2; bedroll.position.set(0, 1.65, -0.32); g.add(bedroll);
  // Pack glow marker (subtle wayfinder light)
  var marker = M(new THREE.SphereGeometry(0.04, 8, 8), MAT.goldGlow);
  marker.position.set(0.15, 1.5, -0.45); g.add(marker);

  // Arms — layered sleeves
  var armL = new THREE.Group(); armL.position.set(-0.38, 1.55, 0); armL.rotation.z = 0.08;
  var slL = M(new THREE.CylinderGeometry(0.09, 0.11, 0.55, 8), MAT.tanCloth);
  slL.position.y = -0.28; armL.add(slL);
  var gloveL = M(new THREE.BoxGeometry(0.12, 0.16, 0.12), MAT.brownCloth);
  gloveL.position.y = -0.6; armL.add(gloveL);
  g.add(armL);
  var armR = new THREE.Group(); armR.position.set(0.38, 1.55, 0); armR.rotation.z = -0.08;
  var slR = slL.clone(); slR.position.y = -0.28; armR.add(slR);
  var gloveR = gloveL.clone(); gloveR.position.y = -0.6; armR.add(gloveR);
  g.add(armR);
  // Walking staff in right hand
  var staff = M(new THREE.CylinderGeometry(0.025, 0.03, 1.6, 6), MAT.brownCloth);
  staff.position.set(0.05, -0.3, 0.05); armR.add(staff);

  // Hooded head — cloak hood frame
  var hood = M(new THREE.ConeGeometry(0.28, 0.5, 10, 1, true), MAT.brownCloth);
  hood.position.y = 1.95; hood.material.side = THREE.DoubleSide; g.add(hood);
  var face = M(new THREE.SphereGeometry(0.15, 10, 8), MAT.skinTone);
  face.position.set(0, 1.88, 0.08); face.scale.z = 0.85; g.add(face);
  // Hood rim g