<!-- SAGA2 · part 93 -->
1.0,-1.3,6.9]], cC); // nostrils (wide)
  // cheeks (surface, z=5.9)
  L([[-3.5,1.5,5.9],[-2.0,0,6.0]], cG);
  L([[3.5,1.5,5.9],[2.0,0,6.0]], cG);
  // lips — VOLUME (upper z=6.4, mouth z=6.0, lower z=6.5)
  L([[-2.0,-2.5,6.3],[-1.0,-2.3,6.4],[0,-2.35,6.45],[1.0,-2.3,6.4],[2.0,-2.5,6.3]], cG); // upper
  L([[-1.8,-2.8,6.0],[-0.9,-3.0,6.05],[0,-2.95,6.08],[0.9,-3.0,6.05],[1.8,-2.8,6.0]], cC); // mouth line
  L([[-1.6,-3.2,6.4],[-0.8,-3.6,6.5],[0,-3.7,6.55],[0.8,-3.6,6.5],[1.6,-3.2,6.4]], cG); // lower
  // center line (follows nose protrusion)
  L([[0,8,6.0],[0,4,6.1],[0,1,6.8],[0,-1,7.1],[0,-3,6.4],[0,-6,6.0]], cG);
  // jaw — cyan angular (follows form)
  L([[-6.5,1.0,4.5],[-5.0,-2.0,5.0],[-3.5,-4.5,5.3],[-2.0,-6.0,5.4]], cC);
  L([[2.0,-6.0,5.4],[3.5,-4.5,5.3],[5.0,-2.0,5.0],[6.5,1.0,4.5]], cC);
  // chin
  L([[-2.0,-6.0,5.4],[-1.0,-6.8,5.45],[0,-7.0,5.5],[1.0,-6.8,5.45],[2.0,-6.0,5.4]], cC);
  // neck — 3 rings
  for(var v=0;v<3;v++){ var vy=-8-v*2, vr=2.1, vp=[];
    for(var w=0;w<=16;w++){ var wa=(w/16)*Math.PI*2; vp.push([Math.cos(wa)*vr, vy, Math.sin(wa)*vr*0.9]); }
    L(vp, v%2?cG:cC);
  }

  // SIDE PROFILE — silhouette (King: build side profile, front is fine)
  // Right side profile (x=5.2)
  L([[5.2,7,3.5],[5.3,5.5,4.2],[5.2,4.5,5.0]], cG); // forehead
  L([[5.2,4.5,5.0],[5.1,3.0,5.8],[5.0,2.0,6.2]], cG); // brow to nose bridge
  L([[5.0,2.0,6.2],[4.9,0.5,6.9],[4.8,-1.0,7.2]], cG); // nose protrusion
  L([[4.8,-1.0,7.2],[4.9,-1.8,6.6],[5.0,-2.3,6.4]], cC); // under nose to upper lip
  L([[5.0,-2.3,6.4],[5.0,-3.0,6.0],[5.0,-3.7,6.5]], cC); // mouth to lower lip
  L([[5.0,-3.7,6.5],[5.1,-4.5,6.0],[5.2,-5.5,5.5]], cC); // chin
  L([[5.2,-5.5,5.5],[5.3,-4.0,4.0],[5.4,-2.0,2.5]], cC); // jaw back to ear
  // Left side profile (x=-5.2, mirrored)
  L([[-5.2,7,3.5],[-5.3,5.5,4.2],[-5.2,4.5,5.0]], cG);
  L([[-5.2,4.5,5.0],[-5.1,3.0,5.8],[-5.0,2.0,6.2]], cG);
  L([[-5.0,2.0,6.2],[-4.9,0.5,6.9],[-4.8,-1.0,7.2]], cG);
  L([[-4.8,-1.0,7.2],[-4.9,-1.8,6.6],[-5.0,-2.3,6.4]], cC);
  L([[-5.0,-2.3,6.4],[-5.0,-3.0,6.0],[-5.0,-3.7,6.5]], cC);
  L([[-5.0,-3.7,6.5],[-5.1,-4.5,6.0],[-5.2,-5.5,5.5]], cC);
  L([[-5.2,-5.5,5.5],[-5.3,-4.0,4.0],[-5.4,-2.0,2.5]], cC);

  g3.position.set(285, 18, -20);
  g3.rotation.y = -1.23; // face toward default camera
  scene.add(g3);
})();
// MANNEQUIN 4 — Loomis construction (King's reference)
(function(){ return; // BLACKOUT
  var g4 = new THREE.Group();
  var cC = new THREE.LineBasicMaterial({color:0x66eeff, transparent:true, opacity:0.9});
  var cG = new THREE.LineBasicMaterial({color:0xffcc44, transparent:true, opacity:0.9});
  function L(pts, mat){
    g4.add(new THREE.Line(new THREE.BufferGeometry().setFromPoints(pts.map(function(p){
      return new THREE.Vector3(p[0],p[1],p[2]); })), mat));
  }
  // CRANIUM — ball (sphere)
  for(var i=0;i<8;i++){ var a=(i/8)*Math.PI*2, pts=[];
    for(var j=0;j<=12;j++){ var ph=(j/12)*Math.PI, r=5*Math.sin(ph);
      pts.push([Math.cos(a)*r, 5*Math.cos(ph)+3, Math.sin(a)*r]);
    }
    L(pts, i%2?cG:cC);
  }
  // Brow line — wraps around ball at y=3 (Loomis)
  var brow=[];
  for(var b=0;b<=24;b++){ var ba=(b/24)*Math.PI*2;
    brow.push([Math.cos(ba)*5, 3, Math.sin(ba)*5]);
  }
  L(brow, cG);
  // Center line — vertical
  L([[0,8,5],[0,3,5.2],[0,0,5.5],[0,-3,5.0]], cG);
  // FACE PLANE — jaw from ears to chin
  L([[-5,3,2],[-4.5,0,4],[-3.5,-2.5,4.8],[-1.5,-4,5.0],[0,-4.5,5.1]], cC);
  L([[0,-4.5,5.1],[1.5,-4,5.0],[3.5,-2.5,4.8],[4.5,0,4],[5,3,2]], cC);
  // Features
  var ex=1.9;
  L([[-3.5,3.2,4.8],[-ex,3.5,5.0],[-0.8,3.2,5.1]], cG);
  L([[0.8,3.2,5.1],[ex,3.5,5.0],[3.5,3.2,4.8]], cG);
  L([[0,2.5,5.1],[0,1.0,5.6],[0,-0.5,6.0]], cG);
  L([[-0.8,1.5,5.2],[-0.9,0,5.7],[-0.8,-1.0,5.9]], cC);
  L([[0.8,1.5,5.2],[0.9,0,5.7],[0.8,-1.0,5.9]], cC);
  L([[-1.5,-2.5,5.2],[0,-2.7,5.3],[1.5,-2.5,5.2]], cG);
  L([[-1.3,-3.0,5.25],[0,-3.2,5.3],[1.3,-3.0,5.25]], cC);
  // Ears
  function ear(sx){
    var ep=[];
    for(var e=0;e<=12;e++){ var ea=(e/12)*Math.PI*2;
      ep.push([sx+Math.cos(ea)*0.6, 1.5+Math.sin(ea)*1.2, 1.5+Math.sin(ea)*0.3]);
    }
    L(ep, cC);
  }
  ear(-5); ear(5);
  // Neck
  for(var v=0;v<3;v++){ var vy=-5-v*2, vr=2.2, vp=[];
    for(var w=0;w<=16;w++){ var wa=(w/16)*Math.PI*2; vp.push([Math.cos(wa)*vr, vy, Math.sin(wa)*vr]); }
    L(vp, v%2?cG:cC);
  }
  g4.position.set(-60, 18, -20);
  g4.rotation.y = 0.5;
  scene.add(g4);
})();
// 20 PRACTICE HEADS — King: keep practicing, make 20 more
(function(){
  function buildPractice(idx, px, pz){
    var g = new THREE.Group();
    var cC = new THREE.LineBasicMaterial({color:0x66eeff, transparent:true, opacity:0.75});
    var cG = new THREE.LineBasicMaterial({color:0xffcc44, transparent:true, opacity:0.75});
    function L(pts, mat){
      g.add(new THREE.Line(new THREE.BufferGeometry().setFromPoints(pts.map(function(p){
        return new THREE.Vector3(p[0],p[1],p[2]); })), mat));
    }
    // variations
    var es = idx % 5, jw = Math.floor(idx/5) % 4;
    va