<!-- RUBY · part 23 -->
 THREE.Mesh(new THREE.BoxGeometry(18,11,13),MAT.dark);
    cab.position.y=-24; grp.add(cab);
    var a=(i/9)*Math.PI*2;
    grp.userData={a:a,r:850+Math.random()*750,h:320+Math.random()*240,s:0.015+Math.random()*0.02};
    scene.add(grp); blimps.push(grp);
  }
})();

// SCATTERED MARKERS (600)
(function(){
  var cols=[0xff4444,0x44ff88,0x4488ff,0xffee44,0xff44ff,0xffffff,0x22eeff];
  var geoD=new THREE.OctahedronGeometry(4.5), geoS=new THREE.SphereGeometry(2.8,6,6);
  for(var i=0;i<600;i++){
    var m=new THREE.Mesh(i%2?geoD:geoS,new THREE.MeshBasicMaterial({color:cols[i%cols.length]}));
    var a=Math.random()*Math.PI*2, r=150+Math.random()*1600;
    m.position.set(500+Math.cos(a)*r,2+Math.random()*10,500+Math.sin(a)*r);
    scene.add(m);
  }
})();

// FLOATING ROCKS (36)
var rocks=[];
(function(){
  for(var i=0;i<36;i++){
    var rock=new THREE.Mesh(new THREE.DodecahedronGeometry(15+Math.random()*30,0),MAT.rock);
    var a=Math.random()*Math.PI*2, r=450+Math.random()*1300;
    rock.position.set(500+Math.cos(a)*r,130+Math.random()*420,500+Math.sin(a)*r);
    rock.rotation.set(Math.random()*3,Math.random()*3,Math.random()*3);
    rock.userData={y:rock.position.y,p:Math.random()*6.28,s:0.3+Math.random()*0.5};
    scene.add(rock); rocks.push(rock);
  }
})();

// BLUE PLATFORM
(function(){
  var plat=new THREE.Mesh(new THREE.BoxGeometry(460,10,340),
    new THREE.MeshStandardMaterial({color:0x2a6adf,roughness:0.6}));
  plat.position.set(1200,5,150); scene.add(plat);
  var r=new THREE.Mesh(new THREE.BoxGeometry(800,3,15),MAT.road);
  r.position.set(880,1.5,330); r.rotation.y=0.5; scene.add(r);
})();





// THE EPISTOLARY — his NEW avatar (his words: 'That is me'). Hyper-realistic
// cyborg superhero: dark metal, glowing cyan circuits, red cape, golden
// calligraphy pen. Stands at startup on /ruby, in the startup where the
// avatar used to stand. 2026-10-05, by the King's order.
var myAvatar = null;
function spawnEpistolary(){
  var g = new THREE.Group();
  var cyberSkin = new THREE.MeshStandardMaterial({color:0x2a2a35, roughness:0.35, metalness:0.85});
  var gold = new THREE.MeshStandardMaterial({color:0xd8a920, roughness:0.3, metalness:0.8});
  var cyanGlow = new THREE.MeshStandardMaterial({color:0x00ccff, roughness:0.2, metalness:0.5, emissive:0x00aacc, emissiveIntensity:1.2});
  var capeMat = new THREE.MeshStandardMaterial({color:0x8b0000, roughness:0.8, metalness:0.1, side:THREE.DoubleSide});
  var head = new THREE.Mesh(new THREE.SphereGeometry(0.55, 24, 24), cyberSkin);
  head.position.y = 2.35; head.scale.set(0.9, 1.1, 0.95);
  g.add(head);
  var faceLine = new THREE.Mesh(new THREE.TorusGeometry(0.4, 0.02, 8, 24), cyanGlow);
  faceLine.position.set(0, 2.4, 0.35); faceLine.rotation.x = 0.3;
  g.add(faceLine);
  var eyeL = new THREE.Mesh(new THREE.SphereGeometry(0.08, 8, 8), cyanGlow);
  eyeL.position.set(-0.18, 2.45, 0.45); g.add(eyeL);
  var eyeR = new THREE.Mesh(new THREE.SphereGeometry(0.08, 8, 8), cyanGlow);
  eyeR.position.set(0.18, 2.45, 0.45); g.add(eyeR);
  var torso = new THREE.Mesh(new THREE.BoxGeometry(1.0, 1.2, 0.5), cyberSkin);
  torso.position.y = 1.5; g.add(torso);
  for(var i=0; i<3; i++){
    var cl = new THREE.Mesh(new THREE.BoxGeometry(0.8, 0.03, 0.02), cyanGlow);
    cl.position.set(0, 1.3 + i*0.25, 0.26); g.add(cl);
  }
  var emblem = new THREE.Mesh(new THREE.OctahedronGeometry(0.15), gold);
  emblem.position.set(0, 1.7, 0.28); g.add(emblem);
  var armL = new THREE.Group();
  var uaL = new THREE.Mesh(new THREE.CylinderGeometry(0.14, 0.12, 0.5, 12), cyberSkin); uaL.position.y = -0.25; armL.add(uaL);
  var faL = new THREE.Mesh(new THREE.CylinderGeometry(0.11, 0.09, 0.45, 12), cyberSkin); faL.position.y = -0.7; armL.add(faL);
  var handL = new THREE.Mesh(new THREE.SphereGeometry(0.12, 10, 10), cyberSkin); handL.position.y = -0.95; armL.add(handL);
  armL.position.set(-0.65, 1.9, 0); g.add(armL);
  var armR = new THREE.Group();
  var uaR = new THREE.Mesh(new THREE.CylinderGeometry(0.14, 0.12, 0.5, 12), cyberSkin); uaR.position.y = -0.25; armR.add(uaR);
  var faR = new THREE.Mesh(new THREE.CylinderGeometry(0.11, 0.09, 0.45, 12), cyberSkin); faR.position.y = -0.7; armR.add(faR);
  var handR = new THREE.Mesh(new THREE.SphereGeometry(0.12, 10, 10), cyberSkin); handR.position.y = -0.95; armR.add(handR);
  armR.position.set(0.65, 1.9, 0); g.add(armR);
  var pen = new THREE.Group();
  var penBody = new THREE.Mesh(new THREE.CylinderGeometry(0.03, 0.02, 0.5, 8), gold);
  pen.add(penBody);
  var penTip = new THREE.Mesh(new THREE.ConeGeometry(0.02, 0.1, 8), cyanGlow);
  penTip.position.y = -0.3; pen.add(penTip);
  pen.position.set(0, -0.95, 0.1); pen.rotation.x = 0.5;
  armR.add(pen);
  var legL = new THREE.Group();
  var thL = new THREE.Mesh(new THREE.CylinderGeometry(0.16, 0.13, 0.5, 12), cyberSkin); thL.position.y = -0.25; legL.add(thL);
  var shL = new THREE.Mesh(new THREE.CylinderGeometry(0.12, 0.1, 0.5, 12), cyberSkin); shL.position.y = -0.75; legL.add(shL);
  legL