<!-- SAGA2 · part 76 -->
.0-nw*0.15,-0.5-nw*0.2,5.9],[-0.7-nw*0.1,-0.8-nw*0.15,6.1]], iG); // left ala
      L([[1.0+nw*0.15,-0.5-nw*0.2,5.9],[0.7+nw*0.1,-0.8-nw*0.15,6.1]], iG); // right ala
    }
    // Lips defined (upper and lower, with cupid's bow)
    L([[-1.2,-2.6,6.0],[-0.4,-2.5,6.2],[0,-2.45,6.25],[0.4,-2.5,6.2],[1.2,-2.6,6.0]], iG); // upper lip
    L([[-1.0,-3.0,5.9],[0,-3.15,6.0],[1.0,-3.0,5.9]], iG); // lower lip
    L([[0,-2.45,6.25],[0,-2.7,6.15]], iC); // philtrum to mouth


    // NOSE FRONT — bridge width, nostrils defined
    for(var nb=0;nb<5;nb++){ var nby=3-nb*0.8;
      L([[-0.4-nb*0.08,nby,5.6+nb*0.15],[0.4+nb*0.08,nby,5.6+nb*0.15]], iG); // bridge width
    }
    // Nostrils — anatomical comma shape (not ovals)
    for(var no=0;no<3;no++){ var ns=1-no*0.25;
      // Left: comma (wide outer, narrow inner)
      L([[-1.1*ns,-1.0,6.0],[-0.85*ns,-1.25,6.05],[-0.6*ns,-1.3,6.05],[-0.45*ns,-1.15,6.0]], iD);
      // Right: mirrored comma
      L([[1.1*ns,-1.0,6.0],[0.85*ns,-1.25,6.05],[0.6*ns,-1.3,6.05],[0.45*ns,-1.15,6.0]], iD);
    }
    // Nose tip — rounded definition
    for(var nt=0;nt<3;nt++){ var nty=-0.6-nt*0.2, ntp=[];
      for(var ntx=-0.5;ntx<=0.5;ntx+=0.1){
        ntp.push([ntx, nty - Math.pow(ntx/0.5,2)*0.25, 6.2-nt*0.05]);
      }
      L(ntp, nt==1?iG:iD);
    }
    // MOUTH — larger, more present
    L([[-1.8,-2.7,5.8],[-0.9,-2.55,6.0],[0,-2.5,6.05],[0.9,-2.55,6.0],[1.8,-2.7,5.8]], iG); // upper lip (wider)
    L([[-1.5,-3.1,5.7],[-0.7,-3.25,5.85],[0,-3.3,5.9],[0.7,-3.25,5.85],[1.5,-3.1,5.7]], iG); // lower lip (fuller)
    L([[-1.8,-2.7,5.8],[1.8,-2.7,5.8]], iD); // mouth line


    // STIPPLING — skin texture (dots where light hits, R5)
    function stipple(cx, cy, cz, r, n, mat){
      for(var sd=0;sd<n;sd++){
        var sa=(sd/n)*Math.PI*2 + 0.3, sr=r*(0.3+0.7*((sd*7)%5)/5);
        var sx=cx+Math.cos(sa)*sr, sy=cy+Math.sin(sa)*sr*0.7;
        // tiny dot as 3-point ribbon
        L([[sx-0.03,sy,cz],[sx,sy+0.03,cz],[sx+0.03,sy,cz]], mat);
      }
    }
    stipple(2.5, 0.5, 5.2, 1.2, 12, iC); // right cheek
    stipple(-2.5, 0.5, 5.2, 1.2, 12, iC); // left cheek
    stipple(0, 4.5, 5.5, 0.8, 8, iC); // forehead
    stipple(0, 1.5, 5.8, 0.5, 6, iC); // nose bridge

    // PHILTRUM — two lines nose to lip
    L([[-0.25,-1.5,6.1],[-0.25,-2.2,6.05]], iD);
    L([[0.25,-1.5,6.1],[0.25,-2.2,6.05]], iD);
    // LIPS — more defined (Cupid's bow, full lower)
    L([[-1.8,-2.7,5.8],[-0.9,-2.6,6.0],[-0.3,-2.45,6.1],[0,-2.5,6.12],[0.3,-2.45,6.1],[0.9,-2.6,6.0],[1.8,-2.7,5.8]], iG);
    // CHIN — mental crease + form
    L([[-0.8,-3.8,5.7],[0,-3.9,5.75],[0.8,-3.8,5.7]], iD); // crease under lip
    L([[-1.2,-4.5,5.5],[-0.5,-4.8,5.6],[0,-4.9,5.65],[0.5,-4.8,5.6],[1.2,-4.5,5.5]], iG); // chin curve
    ig.position.set(0, 14, 120);
    ig.rotation.y = Math.PI; // face toward camera
    scene.add(ig);
  })();

})();





// 25 HEAD VARIANTS — pick the most human (King's order)
(function(){
  var headMat = new THREE.LineBasicMaterial({color:0x66eeff, transparent:true, opacity:0.9});
  var goldMat = new THREE.LineBasicMaterial({color:0xffcc44, transparent:true, opacity:0.9});
  function hline(pts, mat, grp){
    grp.add(new THREE.Line(new THREE.BufferGeometry().setFromPoints(pts.map(function(p){
      return new THREE.Vector3(p[0],p[1],p[2]); })), mat));
  }
  function hellipse(cx,cy,cz,rx,ry,mat,grp){
    var pts=[];
    for(var i=0;i<=16;i++){ var a=(i/16)*Math.PI*2;
      pts.push(new THREE.Vector3(cx+Math.cos(a)*rx, cy+Math.sin(a)*ry, cz)); }
    hline(pts, mat, grp);
  }
  function buildHeadVariant(idx, px){
    var grp = new THREE.Group();
    var es = idx % 5;
    var jw = Math.floor(idx/5);
    // slight variations — each one different
    var eyeDX = 1.9 + es*0.4 + (idx%3)*0.1;
    var eyeSize = 1.15 + (es%2)*0.25 + (idx%4)*0.05;
    var jawW = 2.6 + jw*0.65 + (idx%3)*0.12;
    var noseL = 2.1 + (jw%2)*0.5 + (idx%5)*0.08;
    var mouthW = 1.6 + es*0.28 + (idx%4)*0.07;
    var browH = 2.1 + (idx%3)*0.15;
    // head outline — cranium
    hellipse(0, 0.5, 0, 4.2, 5.5, headMat, grp);
    hellipse(0, 1.5, -0.5, 3.8, 4.8, headMat, grp);
    // jaw — varied
    hline([[-3.8,-1,0.5],[-jawW,-3.5,0.8],[-jawW*0.5,-5,1],[0,-5.5,1.2],[jawW*0.5,-5,1],[jawW,-3.5,0.8],[3.8,-1,0.5]], headMat, grp);
    // center line
    hline([[0,5.5,3.2],[0,3,4.0],[0,0.5,4.2],[0,-2,4.3],[0,-4,4.0]], goldMat, grp);
    // DETAILED EYES — banknote style
    function detailEye(cx){
      hellipse(cx, 0.5, 3.8, eyeSize, eyeSize*0.55, headMat, grp);
      // iris rings
      for(var ir=0; ir<3; ir++){
        hellipse(cx, 0.5, 3.85, eyeSize*0.55-ir*0.18, eyeSize*0.3-ir*0.1, ir%2?goldMat:headMat, grp);
      }
      hellipse(cx, 0.5, 3.9, 0.28, 0.28, goldMat, grp);
      // upper lid fold
      hline([[cx-eyeSize*0.9,1.6,3.7],[cx,1.9,3.85],[cx+eyeSize*0.9,1.6,3.7]], goldMat, grp);
      // lashes
      for(var lh=0; lh<5; lh++){
        var lx = cx-eyeSize*0.7+lh*eyeSize*0.35;
        hline([[lx,1.3,3.75],[lx