<!-- SAGA2 · part 101 -->
ry(0.7,24), irisBlue);
      iri.position.set(fex,0.3,4.45); ig.add(iri); // BIG iris
      var pup=new THREE.Mesh(new THREE.CircleGeometry(0.28,16), pupilBlack);
      pup.position.set(fex,0.3,4.48); ig.add(pup); // BIG pupil
      var hl=new THREE.Mesh(new THREE.CircleGeometry(0.08,10),
        new THREE.MeshBasicMaterial({color:0xffffff,side:THREE.FrontSide}));
      hl.position.set(fex+0.15,0.15,4.49); ig.add(hl);
    }
    // NOSE (one pass)
    var nB=new THREE.Mesh(new THREE.CylinderGeometry(0.15,0.2,1.0,8), skinMat);
    nB.position.set(0,0.5,5.0); nB.rotation.x=0.15; ig.add(nB); // TINY (cartoon)
    var nT=new THREE.Mesh(new THREE.SphereGeometry(0.25,12,10), skinMat);
    nT.scale.set(1.0,0.8,0.8); nT.position.set(0,-0.2,5.2); ig.add(nT); // TINY tip
    for(var fn=-1; fn<=1; fn+=2){
      var no=new THREE.Mesh(new THREE.SphereGeometry(0.18,8,8),
        new THREE.MeshBasicMaterial({color:0x331111}));
      no.position.set(fn*0.35,-0.75,5.15); ig.add(no);
    }
    // LIPS (one pass)
    var uL=new THREE.Mesh(new THREE.SphereGeometry(0.6,12,8), lipMat);
    uL.scale.set(2.2,0.5,0.7); uL.position.set(0,-3.1,4.9); ig.add(uL);
    var lL=new THREE.Mesh(new THREE.SphereGeometry(0.6,12,8), lipMat);
    lL.scale.set(2.0,0.7,0.8); lL.position.set(0,-3.7,4.85); ig.add(lL);

    // BLUSH (cartoon girl)
    var blushMat = new THREE.MeshBasicMaterial({color:0xff9999,transparent:true,opacity:0.6});
    for(var bl=-1; bl<=1; bl+=2){
      var blush=new THREE.Mesh(new THREE.CircleGeometry(0.6,16), blushMat);
      blush.position.set(bl*3.0, -1.5, 4.2);
      ig.add(blush);
    }
    // EARS (one pass)
    for(var fe2=-1; fe2<=1; fe2+=2){
      var ea=new THREE.Mesh(new THREE.SphereGeometry(0.8,10,8), skinMat);
      ea.scale.set(0.4,1.2,0.7); ea.position.set(fe2*5.0,0,0.5); ig.add(ea);
    }

    // === 200 PRACTICE PASSES (v198) — linework facial study ===
    for(var pr=0; pr<200; pr++){
      var ppts=[];
      var zone = pr % 4;
      if(zone==0){ // eye contour practice
        var sd=pr%2==0?-1:1, px=sd*2.1+(Math.random()-0.5)*2.0;
        var py=(Math.random()-0.5)*1.2;
        ppts=[[px,py,4.55],[px+0.25,py+0.1,4.57]];
        L(ppts, iC);
      } else if(zone==1){ // nose contour practice
        var nx=(Math.random()-0.5)*1.0, ny=2.0-Math.random()*2.8;
        ppts=[[nx,ny,5.05],[nx+0.2,ny-0.25,5.08]];
        L(ppts, iG);
      } else if(zone==2){ // lip contour practice
        var mx=(Math.random()-0.5)*2.4, my=-3.4+(Math.random()-0.5)*0.6;
        ppts=[[mx,my,4.92],[mx+0.25,my,4.94]];
        L(ppts, iG);
      } else { // cheek/jaw practice
        var sd2=pr%2==0?-1:1, cx=sd2*(2.0+Math.random()*2.0), cy=-1.0+Math.random()*2.5;
        ppts=[[cx,cy,4.3],[cx+sd2*0.3,cy-0.2,4.25]];
        L(ppts, iW);
      }
    }

    // === HUMAN AVATAR (v203) — full body ===
    var bodyMat = new THREE.MeshStandardMaterial({color:0xd4a574,roughness:0.75,metalness:0.0,transparent:true,opacity:0.95});
    // NECK
    var neck = new THREE.Mesh(new THREE.CylinderGeometry(1.2,1.4,2.5,12), bodyMat);
    neck.position.set(0, 11.5, 0); ig.add(neck);
    // TORSO (tapered, shoulders to hips)
    var torso = new THREE.Mesh(new THREE.CylinderGeometry(2.8,2.0,7.0,16), bodyMat);
    torso.position.set(0, 7.0, 0); ig.add(torso);
    // SHOULDERS
    for(var sh=-1; sh<=1; sh+=2){
      var sho=new THREE.Mesh(new THREE.SphereGeometry(1.2,10,8), bodyMat);
      sho.position.set(sh*2.8, 10.2, 0); ig.add(sho);
      // UPPER ARM
      var uArm=new THREE.Mesh(new THREE.CylinderGeometry(0.7,0.6,4.0,10), bodyMat);
      uArm.position.set(sh*3.2, 8.0, 0); uArm.rotation.z=sh*0.15; ig.add(uArm);
      // FOREARM
      var fArm=new THREE.Mesh(new THREE.CylinderGeometry(0.6,0.5,3.5,10), bodyMat);
      fArm.position.set(sh*3.5, 4.5, 0.2); fArm.rotation.z=sh*0.1; ig.add(fArm);
      // HAND
      var hand=new THREE.Mesh(new THREE.SphereGeometry(0.7,8,8), bodyMat);
      hand.scale.set(0.8,1.2,0.5); hand.position.set(sh*3.6, 2.5, 0.3); ig.add(hand);
    }
    // HIPS
    var hips=new THREE.Mesh(new THREE.SphereGeometry(2.2,14,10), bodyMat);
    hips.scale.set(1.1,0.8,0.9); hips.position.set(0, 3.0, 0); ig.add(hips);
    // LEGS
    for(var lg=-1; lg<=1; lg+=2){
      // THIGH
      var thigh=new THREE.Mesh(new THREE.CylinderGeometry(0.9,0.7,4.5,10), bodyMat);
      thigh.position.set(lg*1.2, 0.5, 0); ig.add(thigh);
      // SHIN
      var shin=new THREE.Mesh(new THREE.CylinderGeometry(0.7,0.5,4.0,10), bodyMat);
      shin.position.set(lg*1.2, -3.5, 0); ig.add(shin);
      // FOOT
      var foot=new THREE.Mesh(new THREE.SphereGeometry(0.7,8,8), bodyMat);
      foot.scale.set(0.9,0.6,1.5); foot.position.set(lg*1.2, -5.5, 0.5); ig.add(foot);
    }
    ig.position.set(0, 18, 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