<!-- SAGA-SOLID · part 15 -->
tion.x = 0.28; g.add(shoulderR);

  // Arms — reaching forward and down, hands cupped together
  var armL = new THREE.Group(); armL.position.set(-0.30, 1.26, 0.10);
  armL.rotation.x = -1.0; armL.rotation.z = 0.30;  // Forward and inward
  var upperL = M(new THREE.CylinderGeometry(0.08, 0.09, 0.35, 8), MAT.grayCloth);
  upperL.position.y = -0.17; armL.add(upperL);
  var foreL = M(new THREE.CylinderGeometry(0.07, 0.08, 0.32, 8), MAT.skinTone);
  foreL.position.y = -0.48; armL.add(foreL);
  // Cupped hand — palm up, fingers curved
  var handL = M(new THREE.SphereGeometry(0.08, 8, 6), MAT.skinTone);
  handL.position.set(0.05, -0.70, 0.05); handL.scale.set(1.1, 0.6, 1.2); armL.add(handL);
  g.add(armL);

  var armR = new THREE.Group(); armR.position.set(0.30, 1.26, 0.10);
  armR.rotation.x = -1.0; armR.rotation.z = -0.30;
  var upperR = upperL.clone(); upperR.position.y = -0.17; armR.add(upperR);
  var foreR = foreL.clone(); foreR.position.y = -0.48; armR.add(foreR);
  var handR = handL.clone(); handR.position.set(-0.05, -0.70, 0.05); armR.add(handR);
  g.add(armR);

  // The light — what the Keeper holds (small, warm, precious)
  var lightOrb = M(new THREE.SphereGeometry(0.07, 12, 10), MAT.goldGlow);
  lightOrb.position.set(0, 0.95, 0.42); g.add(lightOrb);
  // Faint glow shell
  var glowShell = M(new THREE.SphereGeometry(0.11, 12, 10), MAT.ghost);
  glowShell.position.copy(lightOrb.position); g.add(glowShell);

  // Head — bowed over the light (attention, not sorrow)
  var neck = M(new THREE.CylinderGeometry(0.09, 0.10, 0.12, 8), MAT.skinTone);
  neck.position.set(0, 1.38, 0.12); neck.rotation.x = 0.3; g.add(neck);
  var head = M(new THREE.SphereGeometry(0.16, 12, 10), MAT.skinTone);
  head.position.set(0, 1.50, 0.20); head.rotation.x = 0.50; head.scale.set(0.95, 1.05, 0.95); g.add(head);
  // Hood — draped, framing the bowed head
  var hood = M(new THREE.SphereGeometry(0.20, 10, 8, 0, Math.PI*2, 0, Math.PI*0.6), MAT.grayCloth);
  hood.position.set(0, 1.62, 0.10); hood.rotation.x = 0.5; hood.scale.set(1.1, 1.2, 1.1); g.add(hood);

  // Robe pooling on ground around knees — covers thighs
  var robePool = M(new THREE.CylinderGeometry(0.40, 0.60, 0.35, 12), MAT.grayCloth);
  robePool.position.set(0, 0.18, -0.02); g.add(robePool);

  g.userData.avatarId = 'keeper';
  g.userData.avatarName = 'THE KEEPER';
  g.userData.legL = null; g.userData.legR = null;  // Kneeling — no leg animation
  g.userData.armL = armL; g.userData.armR = armR;
  return g;
}


/* ============================================================
   10. THE STARGAZER — Lying on back, hands behind head, looking up (MACRO)
   Vulnerability, wonder. The throat exposed, the belly open.
   Not facing threat or work or others — facing the sky.
   Length: ~1.9 units lying down
   Who you become: Someone who remembers how to wonder
   ============================================================ */
function buildStargazer() {
  initMaterials();
  var g = new THREE.Group();

  // === MACRO: Reclining, open, vulnerable ===

  // Back on ground — the foundation
  // Torso lying flat, head slightly elevated (looking up)
  var torso = M(new THREE.CylinderGeometry(0.26, 0.30, 0.75, 10), MAT.tanCloth);
  torso.position.set(0, 0.28, 0.05); torso.rotation.x = Math.PI/2; g.add(torso);

  // Hips
  var pelvis = M(new THREE.CylinderGeometry(0.28, 0.30, 0.30, 10), MAT.brownCloth);
  pelvis.position.set(0, 0.26, -0.42); pelvis.rotation.x = Math.PI/2; g.add(pelvis);

  // Legs — extended, slightly apart, relaxed
  var legL = new THREE.Group(); legL.position.set(-0.15, 0.22, -0.55);
  legL.rotation.x = -Math.PI/2 + 0.08;  // Extended along ground, slightly relaxed
  var thighL = M(new THREE.CylinderGeometry(0.12, 0.11, 0.45, 8), MAT.brownCloth);
  thighL.position.y = 0.22; legL.add(thighL);
  var shinL = M(new THREE.CylinderGeometry(0.10, 0.09, 0.45, 8), MAT.skinTone);
  shinL.position.y = 0.65; legL.add(shinL);
  var footL = M(new THREE.BoxGeometry(0.14, 0.08, 0.26), MAT.skinTone);
  footL.position.set(0, 0.90, 0.05); legL.add(footL);
  g.add(legL);

  var legR = new THREE.Group(); legR.position.set(0.15, 0.22, -0.55);
  legR.rotation.x = -Math.PI/2 - 0.05; legR.rotation.z = -0.08;  // Slightly splayed
  var thighR = thighL.clone(); thighR.position.y = 0.22; legR.add(thighR);
  var shinR = shinL.clone(); shinR.position.y = 0.65; legR.add(shinR);
  var footR = footL.clone(); footR.position.set(0, 0.90, 0.05); legR.add(footR);
  g.add(legR);

  // Arms — hands behind head (the classic stargazing pose)
  var armL = new THREE.Group(); armL.position.set(-0.30, 0.35, 0.25);
  armL.rotation.x = 2.6; armL.rotation.z = 0.5;  // Up and behind head
  var upperL = M(new THREE.CylinderGeometry(0.08, 0.09, 0.35, 8), MAT.tanCloth);
  upperL.position.y = -0.17; armL.add(upperL);
  var foreL = M(new THREE.CylinderGeometry(0.07, 0.08, 0.30, 8), MAT.skinTone);
  foreL.position.y = -0.45; armL.add(foreL);
  var handL = M(new THREE.SphereGeometry(0.08, 8, 6),