<!-- SAGA2 · part 89 -->
.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.2 + fh*0.08;
        fpts.push([fx, fy, fz]);
      }
      fline(fpts);
    }
    // CHEEKS — diagonal lines from nose to ears (both sides)
    for(var ch=0; ch<8; ch++){
      var ct = ch/8;
      // left cheek
      fline([[-1.5-ct*2.0, 21-ct*3.0, 9.2-ct*1.0],[-2.0-ct*2.0, 20.5-ct*3.0, 8.8-ct*1.0]]);
      // right cheek
      fline([[1.5+ct*2.0, 21-ct*3.0, 9.2-ct*1.0],[2.0+ct*2.0, 20.5-ct*3.0, 8.8-ct*1.0]]);
    }
    // NOSE — bridge lines and side planes
    for(var ns=0; ns<5; ns++){
      var nx = -0.8 + ns*0.4;
      fline([[nx, 22, 9.3+Math.abs(nx)*0.3],[nx*1.1, 20, 9.5+Math.abs(nx)*0.3],[nx*1.2, 18.5, 9.6]]);
    }
    // CHIN — curved lines under mouth
    for(var cn=0; cn<4; cn++){
      var cy = 16.8 - cn*0.5;
      fline([[-2.0+cn*0.2, cy, 9.0],[0, cy-0.2, 9.4],[2.0-cn*0.2, cy, 9.0]]);
    }
    // TEMPLES — vertical fine lines
    for(var tp=0; tp<6; tp++){
      var tx = -3.8 + tp*0.25;
      fline([[tx, 24, 7.5],[tx, 22, 8.0],[tx, 20, 8.2]]);
      fline([[-tx, 24, 7.5],[-tx, 22, 8.0],[-tx, 20, 8.2]]);
    }
  })();
  */


  // MINIMAL FACE — sacred geometry (King's pick)
  (function(){
    function mline(pts, mat){ draw(pts.map(function(p){return new THREE.Vector3(p[0],p[1],p[2]);}), mat); }
    // center line
    mline([[0,28,8.5],[0,22,9.4],[0,18,9.6],[0,15,9.2]], lnGold);
    // brows — angular
    mline([[-5,24,8.5],[-2.5,23.5,9],[-1,23.2,9.1]], lnGold);
    mline([[1,23.2,9.1],[2.5,23.5,9],[5,24,8.5]], lnGold);
    mline([[-4.5,22.8,8.7],[-2.5,22.3,9.05],[-1.2,22.1,9.1]], lnGold);
    mline([[1.2,22.1,9.1],[2.5,22.3,9.05],[4.5,22.8,8.7]], lnGold);
    // lashes — 5 ticks each
    for(var lh=0; lh<5; lh++){
      var lx1 = -4.2+lh*0.7, lx2 = 4.2-lh*0.7;
      mline([[lx1,22.5,9.0],[lx1,21.9,9.0]], lnCyan);
      mline([[lx2,22.5,9.0],[lx2,21.9,9.0]], lnCyan);
    }
    // cheeks — diagonal gold
    mline([[-3.5,20,8.8],[-2,18.5,9.2]], lnGold);
    mline([[3.5,20,8.8],[2,18.5,9.2]], lnGold);
    // nose — small cyan V
    mline([[-0.6,18.3,9.5],[0,17.9,9.6],[0.6,18.3,9.5]], lnCyan);
    // mouth — gold upper, cyan lower
    mline([[-2,16.8,9.3],[-1,16.6,9.5],[0,16.7,9.6],[1,16.6,9.5],[2,16.8,9.3]], lnGold);
    mline([[-1.8,16.6,9.35],[-0.8,16.1,9.5],[0,16.0,9.55],[0.8,16.1,9.5],[1.8,16.6,9.35]], lnCyan);
    // jaw — angular cyan
    mline([[-5.5,20,7.5],[-4,17.5,8.5],[-2.5,16,9.0],[-1,15.3,9.2],[0,15.1,9.25]], lnCyan);
    mline([[0,15.1,9.25],[1,15.3,9.2],[2.5,16,9.0],[4,17.5,8.5],[5.5,20,7.5]], lnCyan);
  })();

  // lights
  var eyeL = new THREE.PointLight(0x66eeff, 1.5, 50);
  eyeL.position.set(0, 21, 10);
  avatarGrp.add(eyeL);
  avatarGrp.userData.lights = [eyeL];
  // PRESENCE — soft radial glow behind (he exists in space)
  var glowTex = (function(){
    var c = document.createElement('canvas'); c.width=c.height=128;
    var ctx = c.getContext('2d');
    var g = ctx.createRadialGradient(64,64,0,64,64,64);
    g.addColorStop(0,'rgba(80,180,220,0.35)');
    g.addColorStop(0.5,'rgba(60,140,200,0.12)');
    g.addColorStop(1,'rgba(0,0,0,0)');
    ctx.fillStyle=g; ctx.fillRect(0,0,128,128);
    return new THREE.CanvasTexture(c);
  })();
  var presence = new THREE.Mesh(new THREE.PlaneGeometry(60, 60),
    new THREE.MeshBasicMaterial({map:glowTex, transparent:true, blending:THREE.AdditiveBlending, depthWrite:false}));
  presence.position.set(0, 5, -15);
  avatarGrp.add(presence);

  scene.add(avatarGrp);
  avatarGrp.scale.set