<!-- RUBY-BACKUP · part 480 -->
   a.style.cssText = 'position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10000;background:rgba(0,0,0,0.95);border:2px solid #ffcc00;border-radius:12px;padding:20px;color:#fff;font:13px monospace;max-width:400px;';
    document.body.appendChild(a);
  }
  a.style.display = 'block';
  var html = '<b style="color:#fc0;font-size:16px;">CHOOSE YOUR AVATAR</b> ';
  html += '<button onclick="hideAvatars()">CLOSE</button><br><br>';
  getVisibleAvatars().forEach(function(av){
    var sel = CURRENT_AVATAR===av.id;
    var bg = av.img ? 'background-image:url('+av.img+');background-size:cover;background-position:center;' : '';
    html += '<div style="padding:10px;margin-bottom:8px;border:2px solid '+(sel?'#fc0':'#333')+';border-radius:8px;background:'+(sel?'#221100':'#111')+';'+bg+'min-height:120px;position:relative;">';
    html += '<div style="background:rgba(0,0,0,0.7);padding:8px;border-radius:6px;position:relative;z-index:1">';
    html += '<div style="width:40px;height:40px;border-radius:50%;background:'+av.color+';display:inline-block;vertical-align:middle;margin-right:10px"></div>';
    html += '<b style="color:#fc0">'+av.name+'</b>';
    if(isAdultOnly(av.id)) html += ' <span style="background:#f00;color:#fff;font-size:10px;padding:2px 4px;border-radius:3px">18+</span>';
    html += '<br>';
    html += '<i style="color:#aaa">'+av.desc+'</i><br>';
    if(!sel) html += '<button onclick="selectAvatar(\''+av.id+'\')" style="margin-top:5px">SELECT</button>';
    else html += '<span style="color:#fc0">ACTIVE</span>';
    html += '</div></div>';
  });
  a.innerHTML = html;
}
function hideAvatars(){
  var a = document.getElementById('avatars');
  if(a) a.style.display='none';
}

/* STRIDER — the avatar that moves */
var STRIDER_ANIM = null;

/* DANCER — the avatar that dances */
var DANCER_ANIM = null;

/* SWIFT — walks when walking, runs when running */
var SWIFT_ANIM = null;
var SWIFT_LAST = null;
var SWIFT_MODE = 'idle'; /* idle, walk, run */
var SWIFT_WAS_RUNNING = 0;

/* CYBORG — futuristic hyper-realistic superhero, same effect as the shoes */
var CYBORG_MESH = null;
function buildCyborg(){
  if(typeof THREE==='undefined') return null;
  var group = new THREE.Group();
  /* materials — like the shoes: carbon fiber, chrome, blue glow */
  var carbon = new THREE.MeshStandardMaterial({color: 0x111111, roughness: 0.6, metalness: 0.4});
  var chrome = new THREE.MeshStandardMaterial({color: 0xcccccc, roughness: 0.1, metalness: 1.0});
  var glow = new THREE.MeshStandardMaterial({color: 0x0088ff, emissive: 0x0088ff, emissiveIntensity: 1.5});
  var darkGlow = new THREE.MeshStandardMaterial({color: 0x003366, emissive: 0x0088ff, emissiveIntensity: 0.8});
  /* torso — carbon fiber with chrome chest plate */
  var torso = new THREE.Mesh(new THREE.BoxGeometry(0.6, 0.8, 0.35), carbon);
  torso.position.y = 1.2;
  group.add(torso);
  var chest = new THREE.Mesh(new THREE.BoxGeometry(0.4, 0.3, 0.05), chrome);
  chest.position.set(0, 1.3, 0.2);
  group.add(chest);
  /* glowing core */
  var core = new THREE.Mesh(new THREE.SphereGeometry(0.08, 16, 16), glow);
  core.position.set(0, 1.3, 0.23);
  group.add(core);
  /* head — chrome with blue glowing eyes */
  var head = new THREE.Mesh(new THREE.SphereGeometry(0.22, 24, 24), chrome);
  head.position.y = 1.95;
  group.add(head);
  var eyeL = new THREE.Mesh(new THREE.SphereGeometry(0.04, 12, 12), glow);
  eyeL.position.set(-0.08, 1.98, 0.18);
  group.add(eyeL);
  var eyeR = eyeL.clone(); eyeR.position.x = 0.08;
  group.add(eyeR);
  /* cyborg jaw — carbon fiber lower face */
  var jaw = new THREE.Mesh(new THREE.BoxGeometry(0.25, 0.12, 0.2), carbon);
  jaw.position.set(0, 1.82, 0.05);
  group.add(jaw);
  /* arms — chrome upper, carbon lower, glowing joints */
  [-1, 1].forEach(function(side){
    var upper = new THREE.Mesh(new THREE.CylinderGeometry(0.09, 0.09, 0.5, 12), chrome);
    upper.position.set(side*0.42, 1.35, 0);
    group.add(upper);
    var joint = new THREE.Mesh(new THREE.SphereGeometry(0.07, 12, 12), glow);
    joint.position.set(side*0.42, 1.08, 0);
    group.add(joint);
    var lower = new THREE.Mesh(new THREE.CylinderGeometry(0.07, 0.07, 0.45, 12), carbon);
    lower.position.set(side*0.42, 0.82, 0);
    group.add(lower);
    var hand = new THREE.Mesh(new THREE.BoxGeometry(0.12, 0.15, 0.12), chrome);
    hand.position.set(side*0.42, 0.55, 0);
    group.add(hand);
  });
  /* legs — carbon fiber with glowing knee joints */
  [-1, 1].forEach(function(side){
    var thigh = new THREE.Mesh(new THREE.CylinderGeometry(0.11, 0.11, 0.5, 12), carbon);
    thigh.position.set(side*0.18, 0.65, 0);
    group.add(thigh);
    var knee = new THREE.Mesh(new THREE.SphereGeometry(0.08, 12, 12), darkGlow);
    knee.position.set(side*0.18, 0.38, 0);
    group.add(knee);
    var shin = new THREE.Mesh(new THREE.CylinderGeometry(0.09, 0.09, 0.4, 12), chrome);
    shin.position.set(side*0.18, 0.15, 0);
    group.add(shin);
  });
  /* back thrus