<!-- SAGA2 · part 70 -->
bowl, z dips in)
  function eyeSocket(cx){
    // socket rim (surface)
    mellipse(cx, 2.0, 4.9, eSZ+0.5, eSZ*0.5+0.4, mGold);
    // socket bowl — lines curving INWARD (z decreases toward center)
    for(var sb=0; sb<3; sb++){
      var sr = eSZ+0.3-sb*0.25, sz = 4.9-sb*0.25;
      mellipse(cx, 2.0, sz, sr, sr*0.5, mCyan);
    }
    // eyeball (recessed, z=4.1)
    mellipse(cx, 2.0, 4.1, eSZ*0.7, eSZ*0.35, mCyan);
    mellipse(cx, 2.0, 4.15, 0.3, 0.3, mGold); // pupil
  }
  eyeSocket(-eDX); eyeSocket(eDX);
  // NOSE — protruding (convex, z pushes OUT)
  // bridge (rises from face)
  mline([[0,2.5,4.9],[0,1.5,5.3],[0,0.5,5.6],[0,-0.5,5.9]], mGold);
  // nose sides (showing protrusion)
  mline([[-0.4,2.0,4.95],[-0.5,1.0,5.4],[-0.6,0,5.7],[-0.7,-1.0,5.8]], mCyan);
  mline([[0.4,2.0,4.95],[0.5,1.0,5.4],[0.6,0,5.7],[0.7,-1.0,5.8]], mCyan);
  // tip (most protruding, z=6.0)
  mellipse(0, -1.2, 5.95, 0.6, 0.4, mGold);
  // nostrils (under tip, recessed)
  mellipse(-0.45, -1.5, 5.7, 0.22, 0.15, mCyan);
  mellipse(0.45, -1.5, 5.7, 0.22, 0.15, mCyan);
  // nostril wings
  mline([[-0.7,-1.0,5.8],[-0.85,-1.5,5.6],[-0.7,-1.9,5.4]], mCyan);
  mline([[0.7,-1.0,5.8],[0.85,-1.5,5.6],[0.7,-1.9,5.4]], mCyan);
  // LIPS — volume (upper protrudes, mouth recessed, lower protrudes)
  // upper lip (z=5.4, full)
  mline([[-1.6,-2.6,5.2],[-1.0,-2.4,5.35],[-0.3,-2.3,5.4],[0,-2.35,5.42],[0.3,-2.3,5.4],[1.0,-2.4,5.35],[1.6,-2.6,5.2]], mGold);
  // mouth line (recessed, z=5.0)
  mline([[-1.5,-2.9,5.0],[-0.8,-3.05,5.05],[0,-3.0,5.08],[0.8,-3.05,5.05],[1.5,-2.9,5.0]], mCyan);
  // lower lip (z=5.5, fullest)
  mline([[-1.3,-3.2,5.3],[-0.7,-3.5,5.5],[0,-3.6,5.55],[0.7,-3.5,5.5],[1.3,-3.2,5.3]], mGold);
  // chin (recessed below lip, then jaw)
  mline([[-1.0,-4.2,5.2],[-0.4,-4.6,5.3],[0,-4.7,5.35],[0.4,-4.6,5.3],[1.0,-4.2,5.2]], mCyan);
  // jaw — mannequin smooth
  mline([[-4.5,1.5,3.5],[-3.8,-1,4.2],[-2.5,-3.5,4.6],[-1,-4.5,4.8],[0,-4.8,4.9]], mCyan);
  mline([[0,-4.8,4.9],[1,-4.5,4.8],[2.5,-3.5,4.6],[3.8,-1,4.2],[4.5,1.5,3.5]], mCyan);
  // NECK — mannequin column
  for(var nk=0; nk<6; nk++){
    var ny = -5 - nk*1.5, nr = 2.2 - nk*0.08;
    var npts=[];
    for(var na=0; na<=20; na++){ var nang=(na/20)*Math.PI*2;
      npts.push([Math.cos(nang)*nr, ny, Math.sin(nang)*nr*0.9]);
    }
    mline(npts, nk%2?mGold:mCyan);
  }
  // BASE — mannequin stand
  mellipse(0, -14.5, 0, 3.5, 0.6, mGold);
  mline([[0,-14.5,0],[0,-18,0]], mGold);
  mellipse(0, -18, 0, 5, 1.0, mGold);

  mg.position.set(20, 18, -20);
  scene.add(mg);
})();
// MANNEQUIN 2 — clean, minimal (King: so much scribbles, try new one)
(function(){ return; // BLACKOUT
  var g2 = 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){
    g2.add(new THREE.Line(new THREE.BufferGeometry().setFromPoints(pts.map(function(p){
      return new THREE.Vector3(p[0],p[1],p[2]); })), mat));
  }
  // CRANIUM — 6 meridians only
  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=5*Math.sin(ph);
      pts.push([Math.cos(a)*r, 5*Math.cos(ph)+2, Math.sin(a)*r*0.92]);
    }
    L(pts, i%2?cG:cC);
  }
  // 3 latitude rings
  for(var k=0;k<3;k++){ var ly=5-k*2.5, lr=5*Math.sqrt(Math.max(0,1-Math.pow((ly-2)/5,2))), rp=[];
    for(var n=0;n<=20;n++){ var an=(n/20)*Math.PI*2; rp.push([Math.cos(an)*lr, ly, Math.sin(an)*lr*0.92]); }
    L(rp, k%2?cC:cG);
  }
  // FACE — essential only, sculptural
  var ex=1.9;
  L([[0,7,4.6],[0,2,5.0],[0,-2,5.1]], cG); // center
  // brows
  L([[-3.0,3.2,4.3],[-ex,3.4,4.6],[-0.8,3.1,4.7]], cG);
  L([[0.8,3.1,4.7],[ex,3.4,4.6],[3.0,3.2,4.3]], cG);
  // eye sockets — single indented ring each
  function sock(cx){
    var sp=[];
    for(var s=0;s<=16;s++){ var sa=(s/16)*Math.PI*2;
      sp.push([cx+Math.cos(sa)*1.3, 2.0+Math.sin(sa)*0.7, 4.4]);
    }
    L(sp, cC);
    L([[cx-0.6,2.0,4.35],[cx+0.6,2.0,4.35]], cC); // eye line
  }
  sock(-ex); sock(ex);
  // nose — protruding, 3 lines
  L([[0,2.2,5.0],[0,0.5,5.6],[0,-1.0,6.0]], cG);
  L([[-0.5,1.0,5.2],[-0.6,-0.5,5.8],[-0.5,-1.3,5.7]], cC);
  L([[0.5,1.0,5.2],[0.6,-0.5,5.8],[0.5,-1.3,5.7]], cC);
  // lips — 2 lines
  L([[-1.4,-2.7,5.3],[0,-2.9,5.4],[1.4,-2.7,5.3]], cG);
  L([[-1.2,-3.3,5.4],[0,-3.5,5.5],[1.2,-3.3,5.4]], cC);
  // jaw
  L([[-4.2,1.0,3.8],[-3.0,-2.5,4.6],[0,-4.6,4.9]], cC);
  L([[0,-4.6,4.9],[3.0,-2.5,4.6],[4.2,1.0,3.8]], cC);
  // neck — 3 rings
  for(var v=0;v<3;v++){ var vy=-6-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);
  }
  g2.position.set(-25, 18, -20);
  scene.add(g2);
})();
// MANNEQUIN 3 — King's minimal face (from image)
(function(){ return; // BLACKOUT
  var g3 = new THREE.Group();
  var cC = new THREE.LineBasicMaterial({color:0x66eeff, transpar