<!-- RUBY-BACKUP · part 184 -->
el = glb.scene;
      /* scale to human size */
      var box = new THREE.Box3().setFromObject(model);
      var size = box.getSize(new THREE.Vector3());
      var targetHeight = 1.9;
      var scale = targetHeight / size.y;
      model.scale.set(scale, scale, scale);
      /* center on ground */
      var center = box.getCenter(new THREE.Vector3());
      model.position.set(-center.x*scale, -box.min.y*scale, -center.z*scale);
      try{ applyProvoltaScales(model); }catch(e){}
      try{ enhanceRobotLook(model); }catch(e){}
      try{ recordProvoltaHeight(model); }catch(e){}
      g.add(model);
      /* her nameplate */
      var nameCv = document.createElement('canvas');
      nameCv.width = 512; nameCv.height = 64;
      var nameCtx = nameCv.getContext('2d');
      nameCtx.fillStyle = 'rgba(0,0,0,0)';
      nameCtx.fillRect(0, 0, 512, 64);
      nameCtx.font = 'bold 36px Georgia';
      nameCtx.textAlign = 'center';
      nameCtx.shadowColor = '#00ccff';
      nameCtx.shadowBlur = 15;
      nameCtx.fillStyle = '#aaddff';
      nameCtx.fillText('PROVOLTA', 256, 44);
      var nameTex = new THREE.CanvasTexture(nameCv);
      var nameplate = new THREE.Mesh(new THREE.PlaneGeometry(1.5, 0.19),
        new THREE.MeshBasicMaterial({map: nameTex, transparent: true}));
      nameplate.position.set(0, 2.15, 0);
      g.add(nameplate);
      /* halo rings */
      for(var ar=0; ar<3; ar++){
        var halo = new THREE.Mesh(new THREE.TorusGeometry(0.7 + ar*0.15, 0.01, 6, 40),
          new THREE.MeshBasicMaterial({color: 0x00ccff, transparent: true, opacity: 0.25 - ar*0.06}));
        halo.position.y = 1.1;
        halo.rotation.x = Math.PI/2;
        g.add(halo);
      }
      g.userData.isGuardian = true;
      g.userData.name = 'PROVOLTA';
      g.userData.trueForm = true;
      codeStatus('PROVOLTA — true form loaded');
    },
    undefined,
    function(err){
      codeStatus('warrior model failed to load — using built form');
    }
  );
  return g;
}
function buildGuardian(x, y, z){
  var g = new THREE.Group();
  var chrome = new THREE.MeshStandardMaterial({color: 0xc0c8d8, metalness: 0.95, roughness: 0.12});
  var gold = new THREE.MeshStandardMaterial({color: 0xd4af37, metalness: 0.95, roughness: 0.1});
  var glowBlue = new THREE.MeshBasicMaterial({color: 0x00ccff, transparent: true, opacity: 0.85});
  var crimson = new THREE.MeshStandardMaterial({color: 0x6a1220, roughness: 0.5, metalness: 0.3});
  var skinMat = new THREE.MeshStandardMaterial({color: 0xd4a574, roughness: 0.45});
  /* === HEAD — articulate, beautiful === */
  var head = new THREE.Mesh(new THREE.SphereGeometry(0.14, 24, 18), skinMat);
  head.position.y = 1.62; g.add(head);
  /* intaglio lines on helm band — dense */
  var helmBand = new THREE.Mesh(new THREE.TorusGeometry(0.145, 0.025, 8, 32), chrome);
  helmBand.position.y = 1.70; helmBand.rotation.x = Math.PI/2; g.add(helmBand);
  for(var hb=0; hb<5; hb++){
    var hline = intaglioRing(0.145 + hb*0.008, 0.004, 0xd4af37, 0.7);
    hline.position.y = 1.70;
    hline.rotation.x = Math.PI/2;
    g.add(hline);
  }
  /* wings — layered feathers */
  [-1,1].forEach(function(s){
    for(var f=0; f<4; f++){
      var feather = new THREE.Mesh(new THREE.ConeGeometry(0.03, 0.22 - f*0.03, 6), chrome);
      feather.position.set(s*(0.15 + f*0.02), 1.78 + f*0.04, -0.06 - f*0.015);
      feather.rotation.z = s*(-0.5 - f*0.12);
      feather.rotation.x = -0.2;
      g.add(feather);
    }
  });
  /* holographic visor — layered */
  var visor = new THREE.Mesh(new THREE.PlaneGeometry(0.22, 0.07),
    new THREE.MeshBasicMaterial({color: 0x00ccff, transparent: true, opacity: 0.45}));
  visor.position.set(0, 1.62, 0.135); g.add(visor);
  var visorFrame = new THREE.Mesh(new THREE.BoxGeometry(0.24, 0.09, 0.01), gold);
  visorFrame.position.set(0, 1.62, 0.125); g.add(visorFrame);
  /* visor scanlines */
  for(var vs=0; vs<3; vs++){
    var scan = new THREE.Mesh(new THREE.PlaneGeometry(0.2, 0.005), glowBlue);
    scan.position.set(0, 1.60 + vs*0.02, 0.14);
    g.add(scan);
  }
  /* === NECK — articulated rings === */
  for(var nk=0; nk<3; nk++){
    var neckRing = new THREE.Mesh(new THREE.TorusGeometry(0.08, 0.015, 8, 20), gold);
    neckRing.position.y = 1.50 - nk*0.035;
    neckRing.rotation.x = Math.PI/2;
    g.add(neckRing);
  }
  /* === TORSO — intaglio breastplate === */
  var torso = new THREE.Mesh(new THREE.CylinderGeometry(0.17, 0.21, 0.65, 16), crimson);
  torso.position.y = 1.14; g.add(torso);
  /* intaglio guilloche — concentric engraved rings on chest */
  for(var gr=0; gr<6; gr++){
    var guilloche = intaglioRing(0.05 + gr*0.025, 0.003, 0xd4af37, 0.6);
    guilloche.position.set(0, 1.25, 0.19);
    g.add(guilloche);
  }
  /* gold chest plate — layered */
  var chestL = new THREE.Mesh(new THREE.SphereGeometry(0.13, 16, 12), gold);
  chestL.position.set(-0.09, 1.28, 0.12); chestL.scale.set(1, 0.85, 0.55); g.add(chestL);
  var chestR = new THREE.Mesh(new THREE.SphereGeometr