<!-- SAGA2 · part 100 -->
2==0?-1:1, nx2=sx*(0.6+Math.random()*0.3);
        npts=[[nx2,-0.7,5.2],[nx2+sx*0.2,-1.0,5.0]];
      } else { // nose wing
        var sx2=np%2==0?-1:1;
        npts=[[sx2*0.5,-0.3,5.1],[sx2*0.9,-0.6,4.9]];
      }
      if(npts.length>1){ L(npts, iG); passCount++; }
    }
    // MOUTH: 250 passes — lips, corners, lines
    for(var mp=0; mp<250 && passCount<1000; mp++){
      var which3=mp%4, mpts=[];
      if(which3==0){ // upper lip
        var mx=(Math.random()-0.5)*2.6;
        mpts=[[mx,-3.0-Math.random()*0.2,4.9],[mx+0.2,-3.1,4.92]];
      } else if(which3==1){ // lower lip
        var mx2=(Math.random()-0.5)*2.4;
        mpts=[[mx2,-3.7+Math.random()*0.2,4.85],[mx2+0.2,-3.6,4.87]];
      } else if(which3==2){ // mouth corner
        var sx3=mp%2==0?-1:1;
        mpts=[[sx3*1.3,-3.35,4.9],[sx3*1.6,-3.3,4.85]];
      } else { // lip line
        var mx3=(Math.random()-0.5)*2.0;
        mpts=[[mx3,-3.35,4.95],[mx3+0.25,-3.35,4.95]];
      }
      if(mpts.length>1){ L(mpts, iG); passCount++; }
    }
    // FACE CONTOUR: 200 passes — cheeks, jaw, forehead
    for(var fp=0; fp<200 && passCount<1000; fp++){
      var which4=fp%3, fpts=[];
      if(which4==0){ // cheek
        var sx4=fp%2==0?-1:1, cx=sx4*(2.5+Math.random()*1.5), cy=-1+Math.random()*2;
        fpts=[[cx,cy,4.2],[cx+sx4*0.3,cy-0.2,4.15]];
      } else if(which4==1){ // jaw
        var sx5=fp%2==0?-1:1, jx=sx5*(3+Math.random()*1.5), jy=-2-Math.random()*1.5;
        fpts=[[jx,jy,3.8],[jx+sx5*0.2,jy-0.3,3.7]];
      } else { // forehead
        var fx=(Math.random()-0.5)*6, fy=3+Math.random()*2.5;
        fpts=[[fx,fy,4.6],[fx+0.3,fy+0.2,4.55]];
      }
      if(fpts.length>1){ L(fpts, iC); passCount++; }
    }



    // === BETTER RENDER (v202) — lights and shaded skin ===
    // Add lights to the head group
    var ambLight = new THREE.AmbientLight(0xffffff, 0.6);
    ig.add(ambLight);
    var dirLight = new THREE.DirectionalLight(0xffffff, 0.8);
    dirLight.position.set(5, 10, 7);
    ig.add(dirLight);
    var fillLight = new THREE.DirectionalLight(0x8888ff, 0.3);
    fillLight.position.set(-5, 0, 5);
    ig.add(fillLight);
    // === HEAD SURFACE (v196) — the face itself ===
    // Anatomical head: cranium + face + jaw as a solid form
    var headGeo = new THREE.SphereGeometry(5.2, 24, 18);
    var headMat = new THREE.MeshStandardMaterial({color:0xd4a574,roughness:0.75,metalness:0.0,transparent:true,opacity:0.9});
    var headMesh = new THREE.Mesh(headGeo, headMat);
    // Shape: scale to head proportions (not sphere)
    headMesh.scale.set(1.0, 1.25, 0.95);
    headMesh.position.set(0, 2, 0);
    ig.add(headMesh);
    // Jaw: narrower lower part
    var jawGeo = new THREE.SphereGeometry(3.8, 18, 12);
    var jawMesh = new THREE.Mesh(jawGeo, headMat);
    jawMesh.scale.set(0.9, 0.9, 0.85);
    jawMesh.position.set(0, -2.5, 0.5);
    ig.add(jawMesh);

    // === MORE MASS (v197) — brow, cheekbones, chin ===
    var boneMat = new THREE.MeshStandardMaterial({color:0xd4a574,roughness:0.7,metalness:0.0,transparent:true,opacity:0.95});
    // Brow ridge (solid, above eyes)
    for(var br=-1; br<=1; br+=2){
      var brow = new THREE.Mesh(new THREE.SphereGeometry(0.5, 10, 8), boneMat);
      brow.scale.set(2.0, 0.6, 0.8);
      brow.position.set(br*2.1, 1.5, 4.6);
      ig.add(brow);
    }
    // Cheekbones (solid, zygomatic)
    for(var cb=-1; cb<=1; cb+=2){
      var cheek = new THREE.Mesh(new THREE.SphereGeometry(0.7, 10, 8), boneMat);
      cheek.scale.set(1.2, 0.8, 0.9);
      cheek.position.set(cb*3.2, -0.5, 3.8);
      ig.add(cheek);
    }
    // Chin (solid, mentalis)
    var chin = new THREE.Mesh(new THREE.SphereGeometry(0.8, 12, 10), boneMat);
    chin.scale.set(1.5, 1.0, 1.0);
    chin.position.set(0, -4.2, 3.5);
    ig.add(chin);
    // Forehead (solid mass above brow)
    var fore = new THREE.Mesh(new THREE.SphereGeometry(2.5, 16, 12), boneMat);
    fore.scale.set(1.1, 0.8, 0.9);
    fore.position.set(0, 4.0, 2.5);
    ig.add(fore);
    // === FACE — SINGLE PASS (v195) — all 3D features, one build ===
    var skinMat = new THREE.MeshStandardMaterial({color:0xd4a574,roughness:0.7,metalness:0.0,transparent:true,opacity:0.95});
    var lipMat = new THREE.MeshStandardMaterial({color:0xcc6666,roughness:0.4,metalness:0.0,transparent:true,opacity:0.95});
    var eyeWhite = new THREE.MeshStandardMaterial({color:0xf0f0f0,roughness:0.2,metalness:0.0,transparent:true,opacity:0.95});
    var irisBlue = new THREE.MeshBasicMaterial({color:0x2288cc,transparent:true,opacity:0.95,side:THREE.FrontSide});
    var pupilBlack = new THREE.MeshBasicMaterial({color:0x000000,side:THREE.FrontSide});
    // EYES (both, one pass) — SETTLED into sockets (v199)
    for(var fe=-1; fe<=1; fe+=2){
      var fex=fe*2.1;
      var scl=new THREE.Mesh(new THREE.SphereGeometry(0.9,16,12), eyeWhite);
      scl.scale.set(2.0,1.2,0.6); scl.position.set(fex,0.3,3.9); ig.add(scl); // BIG (cartoon)
      var iri=new THREE.Mesh(new THREE.CircleGeomet