<!-- SAGA2 · part 27 -->
,p[2]);}), mat); }
    function ellipse(cx,cy,cz,rx,ry,mat){
      var pts=[];
      for(var i=0;i<=20;i++){ var a=(i/20)*Math.PI*2;
        pts.push(new THREE.Vector3(cx+Math.cos(a)*rx, cy+Math.sin(a)*ry, cz)); }
      draw(pts, mat);
    }
    // SKULL — cranium, temples, cheekbones
    curve([[-3.5,24,6],[-4,22,7],[-3.8,20,7.5]], lnCyan); // left temple
    curve([[3.5,24,6],[4,22,7],[3.8,20,7.5]], lnCyan); // right temple
    curve([[-3,20.5,8.5],[-2,19.5,9],[-1,19,9.2]], lnGold); // left cheekbone
    curve([[3,20.5,8.5],[2,19.5,9],[1,19,9.2]], lnGold); // right cheekbone
    curve([[-1,16.5,9.2],[-0.5,15.8,9.4],[0.5,15.8,9.4],[1,16.5,9.2]], lnCyan); // chin
    // NASOLABIAL — smile lines
    curve([[-1.2,20,9.3],[-1.8,18.5,9.2],[-2,17.8,9]], lnDim);
    curve([[1.2,20,9.3],[1.8,18.5,9.2],[2,17.8,9]], lnDim);
    // NECK — sternocleidomastoid
    curve([[-1.5,16,7.5],[-2.5,13,7],[-3.5,11,6.5]], lnCyan);
    curve([[1.5,16,7.5],[2.5,13,7],[3.5,11,6.5]], lnCyan);
    // RIBCAGE
    for(var r=0; r<4; r++){
      var ry = 9 - r*1.2;
      ellipse(0, ry, 5, 4.5-r*0.3, 1.0, r%2?lnGold:lnCyan);
    }
    // OBLIQUES — waist taper
    curve([[-4,6,6],[-3.2,3,6.5],[-2.8,0,6.8]], lnCyan);
    curve([[4,6,6],[3.2,3,6.5],[2.8,0,6.8]], lnCyan);
    // NAVEL
    ellipse(0, 2.5, 8.2, 0.3, 0.4, lnGold);
    // HIP BONES
    curve([[-4,-1,6],[-2.5,-2,7],[0,-2.2,7.2]], lnCyan);
    curve([[0,-2.2,7.2],[2.5,-2,7],[4,-1,6]], lnCyan);
    // DELTOIDS — shoulder caps
    ellipse(-6.5, 9.5, 5, 2.0, 1.8, lnCyan);
    ellipse(6.5, 9.5, 5, 2.0, 1.8, lnCyan);
    // BICEPS
    curve([[-7,8,5],[-7.5,6,5],[-7.3,4,4.8]], lnGold);
    curve([[7,8,5],[7.5,6,5],[7.3,4,4.8]], lnGold);
    // TRICEPS
    curve([[-6,8,4],[-6.2,6,3.8],[-6,4,3.6]], lnCyan);
    curve([[6,8,4],[6.2,6,3.8],[6,4,3.6]], lnCyan);
    // FOREARM MUSCLES
    curve([[-7.3,3,4.5],[-7.5,1,4.3],[-7.4,-1,4.2]], lnCyan);
    curve([[7.3,3,4.5],[7.5,1,4.3],[7.4,-1,4.2]], lnCyan);
    // WRIST BONES
    ellipse(-7.4, -1.5, 4.2, 0.6, 0.4, lnGold);
    ellipse(7.4, -1.5, 4.2, 0.6, 0.4, lnGold);
    // KNUCKLES
    for(var k=0;k<4;k++){
      ellipse(-8.5+(k-1.5)*0.55, 3.5, 4.3, 0.18, 0.18, lnGold);
      ellipse(8.5+(k-1.5)*0.55, 3.5, 4.3, 0.18, 0.18, lnGold);
    }
    // QUADS
    curve([[-2.5,-3,5],[-2.8,-6,5.2],[-2.6,-9,5]], lnCyan);
    curve([[2.5,-3,5],[2.8,-6,5.2],[2.6,-9,5]], lnCyan);
    curve([[-1.5,-3,5.5],[-1.6,-6,5.7],[-1.5,-9,5.5]], lnGold);
    curve([[1.5,-3,5.5],[1.6,-6,5.7],[1.5,-9,5.5]], lnGold);
    // KNEECAPS
    ellipse(-2.2, -9.5, 5.8, 0.7, 0.8, lnCyan);
    ellipse(2.2, -9.5, 5.8, 0.7, 0.8, lnCyan);
    // SHINS
    curve([[-2.2,-10.5,5.5],[-2.2,-13,5.3],[-2.2,-15,5.2]], lnCyan);
    curve([[2.2,-10.5,5.5],[2.2,-13,5.3],[2.2,-15,5.2]], lnCyan);
    // CALVES
    ellipse(-2.2, -12.5, 4.5, 1.0, 1.5, lnGold);
    ellipse(2.2, -12.5, 4.5, 1.0, 1.5, lnGold);
    // ANKLE BONES
    ellipse(-2.2, -15.5, 5, 0.5, 0.4, lnCyan);
    ellipse(2.2, -15.5, 5, 0.5, 0.4, lnCyan);
    // HEELS
    curve([[-2.2,-16,4.5],[-2.2,-17,4],[-2,-17.5,4.2]], lnGold);
    curve([[2.2,-16,4.5],[2.2,-17,4],[2,-17.5,4.2]], lnGold);
  })();


  // LOOMIS HEAD CONSTRUCTION — structural lines (King's guide)
  (function(){
    function curve(pts, mat){ draw(pts.map(function(p){return new THREE.Vector3(p[0],p[1],p[2]);}), mat); }
    // CENTER LINE — forehead to chin (wraps with form)
    curve([[0,27,8.5],[0,24,9.2],[0,22,9.4],[0,20,9.5],[0,18,9.6],[0,16,9.4],[0,15.5,9.2]], lnGold);
    // EYE LINE — horizontal, wraps around
    curve([[-5.5,22,7.5],[-3,22.3,8.8],[0,22.4,9.4],[3,22.3,8.8],[5.5,22,7.5]], lnCyan);
    // BROW LINE
    curve([[-4.5,23.5,8],[0,24,9.3],[4.5,23.5,8]], lnDim);
    // NOSE LINE
    curve([[-3.5,19,8.5],[0,19.2,9.6],[3.5,19,8.5]], lnDim);
    // MOUTH LINE
    curve([[-3,17.5,8.8],[0,17.6,9.5],[3,17.5,8.8]], lnDim);
    // JAW STRUCTURE — ear to chin (both sides)
    curve([[-4.5,21,7],[-4,18.5,8],[-3,16.5,8.8],[-1.5,15.8,9.2]], lnCyan);
    curve([[4.5,21,7],[4,18.5,8],[3,16.5,8.8],[1.5,15.8,9.2]], lnCyan);
    // CRANIUM — sphere cross-sections
    for(var cr=0; cr<3; cr++){
      var cy = 25 + cr*1.2, crad = 4.5 - cr*0.8;
      var cpts=[];
      for(var ca=0; ca<=20; ca++){ var ang=(ca/20)*Math.PI*2;
        cpts.push(new THREE.Vector3(Math.cos(ang)*crad, cy, 6+Math.sin(ang)*crad*0.9));
      }
      draw(cpts, lnDim);
    }
    // SIDE PLANE — temple to jaw (form turn)
    curve([[-4.2,23,7.2],[-4.5,21,7.5],[-4.3,19,8]], lnGold);
    curve([[4.2,23,7.2],[4.5,21,7.5],[4.3,19,8]], lnGold);
  })();


  // FACE FILL disabled — minimal only (King's order)
  /*
  (function(){
    function fline(pts){ draw(pts.map(function(p){return new THREE.Vector3(p[0],p[1],p[2]);}), lnDim); }
    // FOREHEAD — horizontal lines following brow curve
    for(var fh=0; fh<6; fh++){
      var fy = 24.5 + fh*0.7;
      var fpts=[];
      for(var fa=0; fa<=12; fa++){ var t=fa/12;
        var fx = -3.5 + t*7.0;
        var fz = 8.8 - Math.abs(t-0.5)*1.