<!-- SAGA2 · part 99 -->
+Math.sin(tan)*0.3, 5.6+0.2*Math.cos(tan)]);
    }
    L(tipPts, iG);
    // Nostrils (comma, seated)
    for(var ns=-1; ns<=1; ns+=2){
      var nsx = ns*(0.7+ns*ASYM*2);
      L([[nsx,-0.6,5.3],[nsx+ns*0.25,-0.9,5.1],[nsx+ns*0.15,-1.2,4.9]], iG);
    }

    // 4. LIP VOLUME — upper/lower as 3D forms
    // Upper lip (Cupid's bow + lobes)
    var upLip=[];
    for(var ula=-1.5; ula<=1.5; ula+=0.15){
      var ulx = ula*(1+ASYM*ula); // asymmetry
      // Cupid's bow: dip at center
      var uly = -3.0 - 0.25*Math.exp(-ulx*ulx/0.3) + 0.1*Math.cos(ulx*2);
      var ulz = 4.9 + 0.3*Math.exp(-ulx*ulx/2);
      upLip.push([ulx, uly, ulz]);
    }
    L(upLip, iG);
    // Lower lip (full, pout)
    var loLip=[];
    for(var lla=-1.4; lla<=1.4; lla+=0.15){
      var llx = lla*(1-ASYM*lla);
      var lly = -3.7 + 0.15*Math.cos(llx*1.5);
      var llz = 4.85 + 0.35*Math.exp(-llx*llx/1.5);
      loLip.push([llx, lly, llz]);
    }
    L(loLip, iG);
    // Mouth line (between lips)
    var mth=[];
    for(var ma=-1.3; ma<=1.3; ma+=0.15){
      mth.push([ma, -3.35+0.05*Math.sin(ma*3), 4.95]);
    }
    L(mth, iD);

    // 6. SEATED FEATURES — brow ridge follows topography
    for(var brw=-1; brw<=1; brw+=2){
      var brPts=[];
      for(var bra=-1.8; bra<=1.8; bra+=0.2){
        var bx = brw*2.1 + bra;
        var by = 1.8 + 0.2*Math.cos(bra*1.5);
        var bz = 4.5 + 0.22*Math.exp(-(bx*bx)/4); // brow bulge
        brPts.push([bx, by, bz]);
      }
      L(brPts, iW);
    }

    // === PAINTED INTERIOR (v179) — warm, decorative, alive ===
    // Interior decorative ribbons (thinner, swirling, gold/amber)
    var iAmber = new THREE.LineBasicMaterial({color:0xffaa33,transparent:true,opacity:0.5});
    var riAmber = new THREE.MeshBasicMaterial({color:0xffaa33,transparent:true,opacity:0.5,side:THREE.DoubleSide});
    var iRose = new THREE.LineBasicMaterial({color:0xff6688,transparent:true,opacity:0.4});
    var riRose = new THREE.MeshBasicMaterial({color:0xff6688,transparent:true,opacity:0.4,side:THREE.DoubleSide});

    function Li(pts, mat){
      var g=new THREE.BufferGeometry().setFromPoints(pts.map(function(p){return new THREE.Vector3(p[0],p[1],p[2]);}));
      ig.add(new THREE.Line(g, mat));
    }

    // HEART — pulsing glow at center (0, 1, 0)
    var heartGeo = new THREE.SphereGeometry(0.6, 16, 16);
    var heartMat = new THREE.MeshBasicMaterial({color:0xff3344,transparent:true,opacity:0.8});
    var heart = new THREE.Mesh(heartGeo, heartMat);
    heart.position.set(0, 1, 0);
    ig.add(heart);
    // Heart glow (larger, transparent)
    var glowGeo = new THREE.SphereGeometry(1.2, 16, 16);
    var glowMat = new THREE.MeshBasicMaterial({color:0xff6688,transparent:true,opacity:0.25});
    var heartGlow = new THREE.Mesh(glowGeo, glowMat);
    heartGlow.position.set(0, 1, 0);
    ig.add(heartGlow);
    // Animate heart (in render loop)
    if(!window.heartAnim){
      window.heartAnim = true;
      var hs = 0;
      setInterval(function(){
        hs += 0.1;
        var pulse = 1 + 0.15*Math.sin(hs*3);
        heart.scale.set(pulse,pulse,pulse);
        heartGlow.scale.set(pulse*1.1,pulse*1.1,pulse*1.1);
      }, 50);
    }

    // === 1000 PASSES (v187) — bring the face OUT ===
    var passCount = 0;
    function faceSurfZ(x,y){
      var base = 4.8*Math.sqrt(Math.max(0.05,1-Math.pow(x/5.2,2)-Math.pow((y-2)/6.8,2)));
      return base + 0.05;
    }
    // EYES: 300 passes (150 per eye) — dense iris, lids, lashes
    for(var ep=0; ep<300 && passCount<1000; ep++){
      var side = ep<150 ? -1 : 1;
      var ecx = side*2.1;
      var which = ep % 5;
      var epts=[];
      if(which==0){ passCount++; continue; } // (eyes built in single pass v195)
      else if(which==1){ // upper lashes (short flicks)
        var lx=ecx+(Math.random()-0.5)*2.4, ly=0.5+Math.random()*0.3;
        epts=[[lx,ly,4.35],[lx+(Math.random()-0.5)*0.3, ly+0.2+Math.random()*0.2, 4.4]];
      } else if(which==2){ // lower lid detail
        var lx2=ecx+(Math.random()-0.5)*2.2, ly2=-0.4-Math.random()*0.2;
        epts=[[lx2,ly2,4.3],[lx2+0.2,ly2-0.1,4.32]];
      } else if(which==3){ // eye corner
        var cx=side>0?ecx+1.2:ecx-1.2;
        epts=[[cx,0.1,4.32],[cx+side*0.3,0,4.3]];
      } else { // brow hairs
        var bx=ecx+(Math.random()-0.5)*2.0, by=1.7+Math.random()*0.4;
        epts=[[bx,by,4.5],[bx+0.15,by+0.15,4.52]];
      }
      if(epts.length>1){ L(epts, iC); passCount++; }
    }
    // NOSE: 250 passes — bridge, tip, nostrils, wings
    for(var np=0; np<250 && passCount<1000; np++){
      var which2=np%4, npts=[];
      if(which2==0){ // bridge lines
        var nx=(Math.random()-0.5)*0.8, ny=2.5-Math.random()*3.0;
        npts=[[nx,ny,5.0],[nx+(Math.random()-0.5)*0.2,ny-0.3,5.05]];
      } else if(which2==1){ // tip detail
        var tx=(Math.random()-0.5)*0.8, ty=-0.8+(Math.random()-0.5)*0.4;
        npts=[[tx,ty,5.5],[tx+0.2,ty+0.1,5.55]];
      } else if(which2==2){ // nostril
        var sx=np%