<!-- SAGA2 · part 62 -->
) fpts1.push(pt);
    }
    if(fpts1.length>1) draw(fpts1, fs%6===0?lnGold:lnCyan, headGrp);
  }
  // DOME — geometric meridians to match face (King: 100% fill to match)
  for(var m=0; m<12; m++){
    var ma = (m/12)*Math.PI*2, mpts=[];
    for(var mh=0.15; mh<=1.35; mh+=0.12){
      mpts.push(headPt(ma, mh, 0.015));
    }
    draw(mpts, m%3===0?lnGold:lnCyan, headGrp);
  }
  // DOME — clean latitudinal rings (6, not 22)
  for(var f2=0; f2<6; f2++){
    var fp2 = 0.25+f2*0.2, pts2=[];
    for(var a2=-Math.PI; a2<=Math.PI; a2+=0.2) pts2.push(headPt(a2, fp2, 0.015));
    draw(pts2, f2%2?lnGold:lnCyan, headGrp);
  }
  // dome meridians
  for(var dm=0; dm<12; dm++){
    var an = dm/12*Math.PI*2, pts=[];
    for(var dp=0.15; dp<=1.35; dp+=0.1) pts.push(headPt(an, dp, 0.015));
    draw(pts, dm%4===0?lnGold:lnDim, headGrp);
  }
  // ===== DOME ORNAMENT — engraved crown pattern =====
  for(var orn=0; orn<8; orn++){
    var oa = orn/8*Math.PI*2, pts=[];
    for(var oi=0; oi<=20; oi++){
      var t = oi/20, phi = 0.5+t*0.3;
      // wave pattern (decorative)
      var wob = Math.sin(t*Math.PI*4)*0.08;
      pts.push(headPt(oa+wob, phi, 0.02));
    }
    draw(pts, lnGold, headGrp);
  }
  // filigree band around dome base
  for(var fb=0; fb<3; fb++){
    var pts=[], fphi = 0.12+fb*0.04;
    for(var fa=-Math.PI; fa<=Math.PI; fa+=0.1){
      var wob = Math.sin(fa*8)*0.03;
      pts.push(headPt(fa, fphi+wob, 0.02));
    }
    draw(pts, fb===1?lnGold:lnCyan, headGrp);
  }
  // cheeks + jaw (both sides)
  [-1,1].forEach(function(sd){
    for(var c=0; c<10; c++){
      var pts=[];
      for(var i=0;i<=10;i++){ var t=i/10; pts.push(headPt(sd*(0.5+t*0.7), 0.1-t*0.5-c*0.03, 0.015)); }
      draw(pts, c%3===0?lnGold:lnCyan, headGrp);
    }
    for(var j=0;j<8;j++){
      var pts=[];
      for(var i=0;i<=10;i++){ var t=i/10; pts.push(headPt(sd*(0.3+t*0.9), -0.35-t*0.25-j*0.035, 0.015)); }
      draw(pts, lnCyan, headGrp);
    }
    // eye rings (3)
    for(var e=0;e<3;e++){
      var pts=[];
      for(var i=0;i<=16;i++){ var an=i/16*Math.PI*2;
        pts.push(new THREE.Vector3(sd*2.3+Math.cos(an)*(1.6+e*0.45), 0.8+Math.sin(an)*(1.2+e*0.35), 5.6-e*0.15)); }
      draw(pts, lnDim, headGrp);
    }
    // brow shadow — cross-hatch (dense, dark)
    for(var bs=0; bs<6; bs++){
      var pts=[];
      for(var i=0;i<=10;i++){ var t=i/10;
        pts.push(new THREE.Vector3(sd*(1.0+t*2.5), 2.0-bs*0.18, 5.9-bs*0.05)); }
      draw(pts, lnCyan, headGrp);
      // cross layer
      var pts2=[];
      for(var i=0;i<=10;i++){ var t=i/10;
        pts2.push(new THREE.Vector3(sd*(1.2+t*2.2), 2.1-bs*0.18+t*0.5, 5.85-bs*0.05)); }
      draw(pts2, lnDim, headGrp);
    }
  });
  // nose ridge
  for(var n=-2;n<=2;n++){ var pts=[];
    for(var i=0;i<=8;i++){ var t=i/8; pts.push(new THREE.Vector3(n*0.35, 1.5-t*4.0, 6.0-t*0.3+Math.abs(n)*0.2)); }
    draw(pts, lnDim, headGrp);
  }
  // NEW MOUTH — defined lips
  // upper lip (M shape)
  var umpts=[];
  for(var i=0;i<=20;i++){ var t=i/20;
    var x = -2.5+t*5.0;
    var y = -2.8+Math.sin(t*Math.PI)*-0.6+Math.sin(t*Math.PI*2)*0.2;
    var z = 5.6+Math.sin(t*Math.PI)*0.5;
    umpts.push(new THREE.Vector3(x, y, z));
  }
  draw(umpts, lnGold, headGrp);
  draw(umpts, lnGold, headGrp);
  draw(umpts, lnWhite, headGrp);
  // lower lip (fuller)
  var lmpts=[];
  for(var i=0;i<=20;i++){ var t=i/20;
    var x = -2.3+t*4.6;
    var y = -3.6+Math.sin(t*Math.PI)*0.4;
    var z = 5.5+Math.sin(t*Math.PI)*0.4;
    lmpts.push(new THREE.Vector3(x, y, z));
  }
  draw(lmpts, lnCyan, headGrp);
  // mouth shadow (depth)
  var smpts=[];
  for(var i=0;i<=16;i++){ var t=i/16;
    smpts.push(new THREE.Vector3(-2.0+t*4.0, -3.2+Math.sin(t*Math.PI)*-0.3, 5.75));
  }
  draw(smpts, lnWhite, headGrp);
  // NEW CHIN — defined anchor
  for(var chn=0; chn<4; chn++){
    var cpts=[];
    for(var i=0;i<=14;i++){ var t=i/14;
      var x = -2.0+t*4.0;
      var y = -4.2-chn*0.35+Math.sin(t*Math.PI)*-0.5;
      var z = 5.0+Math.sin(t*Math.PI)*0.6-chn*0.15;
      cpts.push(new THREE.Vector3(x, y, z));
    }
    draw(cpts, chn===0?lnGold:lnCyan, headGrp);
  }
  // NOSTRILS
  [-1,1].forEach(function(sd){
    var pts=[];
    for(var i=0;i<=10;i++){ var an=i/10*Math.PI*1.5;
      pts.push(new THREE.Vector3(sd*0.8+Math.cos(an)*0.5, -2.8+Math.sin(an)*0.4, 5.9)); }
    draw(pts, lnCyan, headGrp);
  });
  // (old mouth removed, new above)
  // EARS
  [-1,1].forEach(function(sd){
    for(var er2=0; er2<2; er2++){
      var pts=[];
      for(var i=0;i<=14;i++){ var an=i/14*Math.PI*2;
        pts.push(new THREE.Vector3(sd*5.4+Math.cos(an)*(0.7+er2*0.25), 0.2+Math.sin(an)*(1.0+er2*0.3), 1.6));
      }
      draw(pts, er2===1?lnGold:lnDim, headGrp);
    }
  });
  headGrp.position.set(0, 20, 2);
  avatarGrp.add(headGrp);
  avatarGrp.userData.head = headGrp;

  // ===== EYES — kept, SMALLER, on the face =====
  [-1,1].forEach(function(sd){
    var iris = new THREE.Mesh(new THREE.CircleGeometry(0.45, 16),
      new THREE.MeshBasicMate