<!-- SAGA2 · part 65 -->
2)*0.15;
      pts.push(new THREE.Vector3(Math.cos(an)*(cr+wob), 13.5-cor*0.7, Math.sin(an)*(cr+wob)*0.8));
    }
    draw(pts, cor===1?lnGold:lnCyan);
  }
  // ===== WAIST SASH — decorative belt =====
  for(var ws=0; ws<4; ws++){
    var pts=[], wy = -1-ws*0.5, ww = 7.5-ws*0.2;
    for(var i=0;i<=32;i++){ var an=i/32*Math.PI*2;
      var wob = Math.sin(an*10+ws)*0.12;
      pts.push(new THREE.Vector3(Math.cos(an)*(ww+wob), wy, Math.sin(an)*(ww+wob)*0.75));
    }
    draw(pts, ws%2?lnGold:lnCyan);
  }

  // ===== ARMS — contour lines on cylinders =====
  [-1,1].forEach(function(sd){
    var ax = sd*13;
    // upper arm + forearm as one tapered form
    // ARM SURFACE — dense wrap
    for(var as2=0; as2<20; as2++){
      var apts=[], ay2 = 8-as2*1.0;
      for(var ai=0;ai<=16;ai++){ var aan=ai/16*Math.PI*2;
        apts.push(new THREE.Vector3(ax+Math.cos(aan)*2.4, ay2, 6.5+Math.sin(aan)*2.0));
      }
      draw(apts, as2%5===0?lnGold:lnCyan);
    }
    // RULED MECHANICAL — straight precision lines on arms
    for(var rl=0; rl<8; rl++){
      var pts=[];
      for(var ri=0; ri<=10; ri++){
        pts.push(new THREE.Vector3(ax-2.5+rl*0.7, 8-ri*1.9, 6.5));
      }
      draw(pts, lnDim);
    }
    for(var ar=0; ar<12; ar++){
      var ay = 8-ar*1.8;
      var aw = 2.8-ar*0.06;
      var pts=[];
      for(var i=0;i<=16;i++){ var an=i/16*Math.PI*2;
        pts.push(new THREE.Vector3(ax+Math.cos(an)*aw, ay, 4+Math.sin(an)*aw));
      }
      draw(pts, ar%4===0?lnGold:lnCyan);
    }
    // cannon: line-art barrel
    var bx = ax;
    for(var br=0; br<8; br++){
      var by = -10, bz = 7+br*1.8, bw = 1.6-br*0.05;
      var pts=[];
      for(var i=0;i<=12;i++){ var an=i/12*Math.PI*2;
        pts.push(new THREE.Vector3(bx+Math.cos(an)*bw, by+Math.sin(an)*bw, bz));
      }
      draw(pts, sd<0?lnGold:lnCyan);
    }
    // muzzle ring
    var mpts=[];
    for(var i=0;i<=16;i++){ var an=i/16*Math.PI*2;
      mpts.push(new THREE.Vector3(bx+Math.cos(an)*1.4, -10+Math.sin(an)*1.4, 21.5)); }
    draw(mpts, sd<0?lnGold:lnCyan);
    // hand — finger lines below cannon
    for(var fn=0; fn<4; fn++){
      var fpts=[];
      for(var fi=0; fi<=6; fi++){
        fpts.push(new THREE.Vector3(bx-1.2+fn*0.8, -13-fi*0.5, 4+Math.sin(fi)*0.3));
      }
      draw(fpts, lnDim);
    }
    // store tip for laser origin
    if(sd<0){ avatarCannonL = {userData:{tipPos:new THREE.Vector3(bx,-10,21.5)}}; }
    else { avatarCannonR = {userData:{tipPos:new THREE.Vector3(bx,-10,21.5)}}; }
  });

  // ===== LEGS — contour lines =====
  [-1,1].forEach(function(sd){
    var lx = sd*5;
    // LEG FILIGREE — decorative bands
    for(var lf=0; lf<4; lf++){
      var pts=[], ly=-4-lf*5;
      for(var i=0;i<=20;i++){ var an=i/20*Math.PI*2;
        var wob = Math.sin(an*8+lf)*0.2;
        pts.push(new THREE.Vector3(lx+Math.cos(an)*(3.8+wob), ly, Math.sin(an)*(3.8+wob)*0.8));
      }
      draw(pts, lf%2?lnGold:lnCyan);
    }
    for(var lr=0; lr<14; lr++){
      var ly = -2-lr*1.8;
      var lw = 3.6-lr*0.08;
      var pts=[];
      for(var i=0;i<=16;i++){ var an=i/16*Math.PI*2;
        pts.push(new THREE.Vector3(lx+Math.cos(an)*lw, ly, Math.sin(an)*lw*0.8));
      }
      draw(pts, lr%5===0?lnGold:lnCyan);
    }
  });

  // (halo removed at King order)


  // HUMAN FACE — pure linework, no shapes (King's order)
  (function(){
    function ellipse(cx,cy,cz,rx,ry,mat){
      var pts=[];
      for(var i=0;i<=24;i++){
        var a=(i/24)*Math.PI*2;
        pts.push(new THREE.Vector3(cx+Math.cos(a)*rx, cy+Math.sin(a)*ry, cz));
      }
      draw(pts, mat);
    }
    function curve(pts, mat){ draw(pts.map(function(p){return new THREE.Vector3(p[0],p[1],p[2]);}), mat); }
    // EYES — banknote intaglio (King's guide)
    function banknoteEye(cx, cy, cz){
      // outer almond — upper lid heavier
      var pts=[];
      for(var i=0;i<=30;i++){ var a=(i/30)*Math.PI*2;
        var rx=2.8, ry=1.5;
        // upper lid thicker (more lines)
        pts.push(new THREE.Vector3(cx+Math.cos(a)*rx, cy+Math.sin(a)*ry, cz));
      }
      draw(pts, lnCyan);
      // upper lid fold — parallel line above
      var fold=[];
      for(var f=0;f<=20;f++){ var fa=Math.PI*(f/20);
        fold.push(new THREE.Vector3(cx-Math.cos(fa)*2.6, cy+Math.sin(fa)*1.1+0.5, cz-0.1));
      }
      draw(fold, lnGold);
      // lower lid — fine single
      var low=[];
      for(var l=0;l<=20;l++){ var la=Math.PI*(l/20);
        low.push(new THREE.Vector3(cx+Math.cos(la)*2.5, cy-Math.sin(la)*1.2-0.15, cz-0.05));
      }
      draw(low, lnDim);
      // iris — concentric rings (5)
      for(var ir=0; ir<5; ir++){
        var irr = 1.1 - ir*0.18;
        var ipts=[];
        for(var ia=0; ia<=24; ia++){ var ang=(ia/24)*Math.PI*2;
          ipts.push(new THREE.Vector3(cx+Math.cos(ang)*irr, cy+Math.sin(ang)*irr, cz+0.15));
        }
        draw(ipts, ir%2?lnCyan:lnGold);
      }
      // pupil — dense dark center
      var ppts=[];
      for(var pa=0; pa<=16; pa++){ var p