<!-- SAGA2 · part 74 -->
for(var fl=0;fl<4;fl++){ var fly=5.5-fl*0.5, flp=[];
      for(var fx2=-3;fx2<=3;fx2+=0.3){
        flp.push([fx2, fly+Math.sin(fx2*1.5)*0.08, 4.9-fl*0.05]);
      }
      L(flp, iD);
    }
    // Nasolabial folds (nose to mouth corners)
    L([[-1.2,-0.8,5.8],[-1.5,-1.8,5.5],[-1.7,-2.6,5.2]], iD); // left
    L([[1.3,-0.8,5.8],[1.6,-1.8,5.5],[1.8,-2.6,5.2]], iD); // right (asymmetric)
    // Mouth — asymmetric (left corner higher)
    // (mouth already built, add asymmetry overlay)
    L([[-1.6,-2.35,5.15],[-0.8,-2.45,5.2],[0,-2.4,5.22]], iG); // left higher
    L([[0,-2.4,5.22],[0.8,-2.55,5.2],[1.6,-2.5,5.15]], iG); // right lower
    // Crow's feet (tiny, at eye outer corners)
    L([[-3.2,2.1,4.5],[-3.5,2.0,4.4],[-3.7,1.9,4.3]], iD);
    L([[3.3,2.05,4.5],[3.6,1.95,4.4],[3.8,1.85,4.3]], iD);
    // Chin crease
    L([[-0.8,-4.2,5.2],[0,-4.35,5.25],[0.8,-4.2,5.2]], iD);


    // CENTRAL PROFILE — nose line (King: bring side lines to center on nose)
    L([[0,7,4.2],[0,5,5.0],[0,3.5,5.8]], iG); // forehead to brow
    L([[0,3.5,5.8],[0,2,6.3],[0,0.5,6.9]], iG); // nose bridge
    L([[0,0.5,6.9],[0,-0.8,7.2],[0,-1.5,6.8]], iG); // nose tip (sharp point)
    L([[0,-1.5,6.8],[0,-2.2,6.7],[0,-2.8,6.8]], iC); // to upper lip (protruding)
    L([[0,-2.8,6.5],[0,-3.5,6.2],[0,-4.2,6.3]], iC); // lower lip to chin (sharp)


    // 3D HUMAN — ear, dense profile, wrapped cheeks, protruding lips
    // EAR (intaglio, both sides) — 5 concentric C-curves at temple
    for(var er2=0;er2<5;er2++){ var erd2=0.8-er2*0.14, eep=[];
      for(var ean2=-1.2;ean2<=1.2;ean2+=0.15){
        eep.push([5.2+Math.cos(ean2)*erd2*0.4, 0.5+Math.sin(ean2)*erd2, 1.5+erd2*0.3]);
      }
      L(eep, er2%2?iG:iD);
      var eep2=[];
      for(var ean3=-1.2;ean3<=1.2;ean3+=0.15){
        eep2.push([-5.2-Math.cos(ean3)*erd2*0.4, 0.5+Math.sin(ean3)*erd2, 1.5+erd2*0.3]);
      }
      L(eep2, er2%2?iG:iD);
    }
    // PROFILE DENSITY — cheek (3), temple (2), jaw (3), both sides
    for(var pd=0;pd<3;pd++){ var pdy=-1-pd*0.8;
      L([[4.8,pdy,4.5],[5.1,pdy-0.3,3.5],[5.2,pdy-0.5,2.5]], iC); // right cheek
      L([[-4.8,pdy,4.5],[-5.1,pdy-0.3,3.5],[-5.2,pdy-0.5,2.5]], iC); // left cheek
    }
    for(var pt=0;pt<2;pt++){ var pty=3+pt*1.2;
      L([[4.9,pty,3.8],[5.2,pty,2.8],[5.3,pty,1.8]], iD); // right temple
      L([[-4.9,pty,3.8],[-5.2,pty,2.8],[-5.3,pty,1.8]], iD); // left temple
    }
    for(var pj=0;pj<3;pj++){ var pjy=-3.5-pj*0.5;
      L([[4.7,pjy,5.0],[5.0,pjy-0.2,4.0],[5.1,pjy-0.4,3.0],[5.2,pjy-0.8,1.0],[5.1,pjy-1.2,-1.0],[4.0,pjy-1.5,0.5]], iG); // right folds back then INWARD
      L([[-4.7,pjy,5.0],[-5.0,pjy-0.2,4.0],[-5.1,pjy-0.4,3.0],[-5.2,pjy-0.8,1.0],[-5.1,pjy-1.2,-1.0],[-4.0,pjy-1.5,0.5]], iG); // left folds back then INWARD
    }
    // LIPS PROTRUSION — push forward in central profile (z+0.3)


    // PRACTICE HEADS — removed (ball heads, rebuilding)
    // PRACTICE HEADS — proper human form (not balls), 10 numbered
    var practiceHeads = new THREE.Group();
    function makeNumber2(n, x, y, z){
      var cv = document.createElement('canvas'); cv.width=128; cv.height=128;
      var c2 = cv.getContext('2d');
      c2.fillStyle='#000'; c2.fillRect(0,0,128,128);
      c2.fillStyle='#0ff'; c2.font='bold 80px Arial';
      c2.textAlign='center'; c2.textBaseline='middle';
      c2.fillText(n.toString(), 64, 64);
      var tex = new THREE.CanvasTexture(cv);
      var spm = new THREE.SpriteMaterial({map:tex, transparent:true});
      var spo = new THREE.Sprite(spm); spo.position.set(x,y,z); spo.scale.set(4,4,1);
      return spo;
    }
    var vars2 = [
      [1.0,1.0,1.0,1.0],[1.5,1.0,1.0,1.0],[0.6,1.0,1.0,1.0],
      [1.0,1.5,1.0,1.0],[1.0,0.6,1.0,1.0],[1.0,1.0,1.4,1.0],
      [1.0,1.0,0.7,1.0],[1.0,1.0,1.0,1.3],[1.0,1.0,1.0,0.7],
      [1.2,1.2,1.1,1.1],
    ];
    for(var pv2=0;pv2<10;pv2++){
      var vv = vars2[pv2];
      var pg2 = new THREE.Group();
      var pL2 = function(pts, mat){
        var gg = new THREE.BufferGeometry().setFromPoints(pts.map(function(p){ return new THREE.Vector3(p[0],p[1],p[2]); }));
        pg2.add(new THREE.Line(gg, mat));
      };
      // CRANIUM — egg-shaped (longer front-back, not sphere)
      for(var pmm=0;pmm<10;pmm++){ var pmp2=[];
        for(var ptt=0;ptt<=14;ptt++){ var pta2=(ptt/14)*Math.PI;
          var px2=Math.cos(pmm/10*Math.PI*2)*4.5*Math.sin(pta2);
          var py2=5.5*Math.cos(pta2)+1;
          var pz2=Math.sin(pmm/10*Math.PI*2)*5.5*Math.sin(pta2); // longer Z
          pmp2.push([px2,py2,pz2]);
        }
        pL2(pmp2, iC);
      }
      // JAW — tapered, angular (not round)
      pL2([[-3.5,-2,3.5],[-2.5,-5,4.2],[-1.5,-6.5,4.5]], iG); // left jaw
      pL2([[3.5,-2,3.5],[2.5,-5,4.2],[1.5,-6.5,4.5]], iG); // right jaw
      pL2([[-1.5,-6.5,4.5],[0,-7,4.6],[1.5,-6.5,4.5]], iG); // chin
      // FACE PLANE — flat front
      pL2([[-3.5,3,4.8],[3.5,3,4.8]], iD); // brow line
      pL2([[-3.2,-1,5.0],[3.2,-1,5.0]], iD); // cheek line
      // Ear