<!-- SAGA2 · part 32 -->
-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;
    var eyeDX = 1.7 + es*0.25;
    var jawW = 3.0 + jw*0.5;
    var headR = 4.8 + (idx%3)*0.3;
    var rotY = (idx%3-1)*0.6; // -0.6, 0, 0.6 (profile, front, 3/4)
    // cranium — 6 meridians
    for(var i=0;i<6;i++){ var a=(i/6)*Math.PI*2, pts=[];
      for(var j=0;j<=10;j++){ var ph=(j/10)*Math.PI, r=headR*Math.sin(ph);
        pts.push([Math.cos(a)*r, headR*Math.cos(ph)+2, Math.sin(a)*r*0.92]);
      }
      L(pts, i%2?cG:cC);
    }
    // brow line
    var br=[];
    for(var b=0;b<=16;b++){ var ba=(b/16)*Math.PI*2;
      br.push([Math.cos(ba)*headR*0.95, 2.5, Math.sin(ba)*headR*0.9]);
    }
    L(br, cG);
    // face
    L([[-eyeDX-1.5,3.5,4.2],[-eyeDX,3.7,4.5],[-0.8,3.4,4.6]], cG);
    L([[0.8,3.4,4.6],[eyeDX,3.7,4.5],[eyeDX+1.5,3.5,4.2]], cG);
    // eye sockets (indented)
    function sk(cx){
      var sp=[];
      for(var s2=0;s2<=12;s2++){ var sa=(s2/12)*Math.PI*2;
        sp.push([cx+Math.cos(sa)*1.1, 2.2+Math.sin(sa)*0.6, 4.0]);
      }
      L(sp, cC);
    }
    sk(-eyeDX); sk(eyeDX);
    // nose (protruding)
    L([[0,2.8,4.5],[0,1.0,5.2],[0,-0.5,5.8]], cG);
    L([[-0.8,1.5,4.7],[-0.9,0,5.3],[-0.8,-1.0,5.6]], cC);
    L([[0.8,1.5,4.7],[0.9,0,5.3],[0.8,-1.0,5.6]], cC);
    // mouth
    L([[-1.4,-2.2,4.9],[0,-2.4,5.0],[1.4,-2.2,4.9]], cG);
    // jaw
    L([[-jawW,1.0,3.0],[-jawW*0.7,-2.0,4.0],[0,-3.8,4.3]], cC);
    L([[0,-3.8,4.3],[jawW*0.7,-2.0,4.0],[jawW,1.0,3.0]], cC);
    g.position.set(px, 14, pz);
    g.rotation.y = rotY;
    scene.add(g);
  }
  // INTAGLIO HEAD — 35-year-old man, ultra-dense linework (King's order)
  (fu