<!-- SAGA2 · part 23 -->
r r = 3.5*Math.sin(phi);
        pts.push(new THREE.Vector3(
          dx+Math.cos(an)*r,
          dy+3.5*Math.cos(phi),
          dz+Math.sin(an)*r*0.85
        ));
      }
      draw(pts, dl>5?lnGold:(dl<3?lnDim:lnCyan));
    }
    // deltoid meridians (fiber direction)
    for(var dm2=0; dm2<10; dm2++){
      var an = dm2/10*Math.PI*2, pts=[];
      for(var dp=0; dp<=8; dp++){
        var phi = dp/8*Math.PI*0.55, r = 3.5*Math.sin(phi);
        pts.push(new THREE.Vector3(
          dx+Math.cos(an)*r,
          dy+3.5*Math.cos(phi),
          dz+Math.sin(an)*r*0.85
        ));
      }
      draw(pts, dm2%3===0?lnGold:lnDim);
    }
    // TRAPEZIUS — sweep from neck to shoulder
    for(var tp=0; tp<3; tp++){
      var pts=[];
      for(var ti=0; ti<=12; ti++){
        var t = ti/12;
        pts.push(new THREE.Vector3(
          sd*t*13,
          14-t*4+tp*0.8-Math.sin(t*Math.PI)*1.0,
          0.5+t*3.5
        ));
      }
      draw(pts, tp%3===0?lnGold:lnCyan);
    }
  });
  // shoulder rank chevrons
  [-1,1].forEach(function(sd){
    for(var chv=0; chv<3; chv++){
      var pts=[
        new THREE.Vector3(sd*13-1.5+chv*0.5, 10-chv*0.8, 4),
        new THREE.Vector3(sd*13, 10.8-chv*0.8, 4),
        new THREE.Vector3(sd*13+1.5-chv*0.5, 10-chv*0.8, 4)
      ];
      draw(pts, lnGold);
    }
  });
  // PECS
  [-1,1].forEach(function(sd){
    for(var pc=0; pc<5; pc++){
      var pts=[];
      for(var i=0;i<=12;i++){ var t=i/12;
        pts.push(new THREE.Vector3(sd*(1.5+t*5.5), 10-pc*0.6-Math.sin(t*Math.PI)*1.6, 5.0+Math.cos(t*Math.PI)*1.2));
      }
      draw(pts, pc%3===0?lnGold:lnCyan);
    }
  });
  // ABS
  for(var ab=0; ab<4; ab++){
    var ay = 4-ab*1.8;
    for(var ai=0; ai<3; ai++){
      var pts=[];
      for(var i=0;i<=10;i++){ var t=i/10;
        pts.push(new THREE.Vector3(Math.sin(t*Math.PI)*6.2, ay+Math.cos(t*Math.PI*2+ai)*0.25, Math.cos(t*Math.PI)*4.0));
      }
      draw(pts, ab%2?lnGold:lnCyan);
    }
  }
  // NEW KIND 1: DOT-DASH bands (3x = 30 bands)
  for(var dd=0; dd<30; dd++){
    var dy = 12-dd*0.9;
    for(var ddi=0; ddi<3; ddi++){
      var pts=[];
      for(var i=0;i<=12;i++){ var t=i/12;
        var an = t*Math.PI*2;
        // dash for 2/3, gap for 1/3
        if((i+ddi)%3===2) continue;
        pts.push(new THREE.Vector3(Math.cos(an)*8.0, dy, Math.sin(an)*4.5));
        if(pts.length>=2){ draw([pts[pts.length-2], pts[pts.length-1]], dd%3===0?lnGold:lnDim); pts=[pts[pts.length-1]]; }
      }
    }
  }
  // NEW KIND 2: ZIGZAG accents (3x = 24 zigzags)
  for(var zg=0; zg<24; zg++){
    var pts=[], zy = 10-zg*0.8;
    for(var i=0;i<=20;i++){ var t=i/20;
      var zx = -7+t*14;
      var zz = 5.0+((i%2)?0.4:-0.4);
      pts.push(new THREE.Vector3(zx, zy, zz));
    }
    for(var zi=0; zi<pts.length-1; zi++) draw([pts[zi], pts[zi+1]], zg%4===0?lnGold:lnCyan);
  }
  // NEW KIND 3: SPIRAL details (3x = 18 spirals)
  [-1,1].forEach(function(sd){
    for(var sp=0; sp<9; sp++){
      var pts=[], sy = 8-sp*1.5;
      for(var i=0;i<=30;i++){ var t=i/30;
        var an = t*Math.PI*4, r = 2.5-t*2.0;
        pts.push(new THREE.Vector3(sd*8+Math.cos(an)*r, sy+t*1.0, 3.0+Math.sin(an)*r));
      }
      draw(pts, sp%3===0?lnGold:lnCyan);
    }
  });
  // TACTICAL PLATE CARRIER — black
  for(var pc2=0; pc2<6; pc2++){
    var ppts=[], py = 11-pc2*1.5;
    for(var i=0;i<=20;i++){ var t=i/20, an=t*Math.PI*2;
      if(Math.cos(an)<-0.3 || Math.cos(an)>0.3) continue;
      ppts.push(new THREE.Vector3(Math.cos(an)*8.5, py, Math.sin(an)*5.0));
    }
    for(var sgi=0; sgi<ppts.length-1; sgi++) drawDark([ppts[sgi], ppts[sgi+1]], lnBlack);
  }
  // STEEL SHOULDER PLATES
  [-1,1].forEach(function(sd){
    for(var sp2=0; sp2<4; sp2++){
      var pts=[];
      for(var i=0;i<=14;i++){ var an=i/14*Math.PI;
        pts.push(new THREE.Vector3(sd*13+Math.cos(an)*4.0, 12+Math.sin(an)*2.0-sp2*0.5, 4.0));
      }
      drawDark(pts, lnSteel);
    }
  });
  // CHROME CHEST PLATE
  for(var cp=0; cp<3; cp++){
    var pts=[];
    for(var i=0;i<=16;i++){ var t=i/16;
      pts.push(new THREE.Vector3(-4+t*8, 8-cp*1.2, 5.5-Math.sin(t*Math.PI)*0.5));
    }
    drawDark(pts, lnChrome);
  }
  // ===== COLLAR ORNAMENT — decorative neck ring =====
  for(var cor=0; cor<3; cor++){
    var pts=[], cr = 4.2-cor*0.4;
    for(var i=0;i<=32;i++){ var an=i/32*Math.PI*2;
      var wob = Math.sin(an*12)*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 a