<!-- SAGA · part 24 -->
/ 2), glassMat);
    dome.position.set(cx, 0.13, cz);
    g.add(dome);
    /* Door frame */
    var door = new THREE.Mesh(new THREE.BoxGeometry(3, 4, 0.5), goldMat);
    door.position.set(cx, 2, cz + 7.8);
    g.add(door);
    /* Desk inside */
    var desk = new THREE.Mesh(new THREE.BoxGeometry(4, 1, 2), goldMat);
    desk.position.set(cx, 1, cz);
    g.add(desk);
    if(typeof scene !== 'undefined') scene.add(g);
  }catch(e){}
}
if(typeof buildSoliditronium === 'function'){ window._buildQueue.push(buildSoliditronium); }

/* PROVOLTA'S VEIL — teal sanctuary. She knows the outcome, so she doesn't judge. */
function buildProvoltaVeil(){
  try{
    var g = new THREE.Group();
    var cx = -35, cz = -35; /* off zero lines */
    var tealMat = new THREE.MeshStandardMaterial({color: 0x00ffff, emissive: 0x00ffff, emissiveIntensity: 0.3, transparent: true, opacity: 0.7});
    var darkMat = new THREE.MeshStandardMaterial({color: 0x0a2a2a, roughness: 0.8});
    /* Circular platform */
    var plat = new THREE.Mesh(new THREE.CylinderGeometry(10, 11, 1, 24), darkMat);
    plat.position.set(cx, 0.6, cz);
    g.add(plat);
    /* Teal veil — curved wall */
    for(var i = 0; i < 12; i++){
      var a = (i / 12) * Math.PI * 2;
      var px = cx + Math.cos(a) * 9;
      var pz = cz + Math.sin(a) * 9;
      var panel = new THREE.Mesh(new THREE.PlaneGeometry(4, 6), tealMat);
      panel.position.set(px, 3.5, pz);
      panel.lookAt(cx, 3.5, cz);
      g.add(panel);
    }
    /* Center flame */
    var flame = new THREE.Mesh(
      new THREE.OctahedronGeometry(1.5),
      new THREE.MeshStandardMaterial({color: 0x00ffff, emissive: 0x00ffff, emissiveIntensity: 2})
    );
    flame.position.set(cx, 3, cz);
    g.add(flame);
    if(typeof scene !== 'undefined') scene.add(g);
    if(!window._veilAnim){
      window._veilAnim = true;
      var _spin = function(){
        try{ flame.rotation.y += 0.02; }catch(e){}
        requestAnimationFrame(_spin);
      };
      _spin();
    }
  }catch(e){}
}
if(typeof buildProvoltaVeil === 'function'){ window._buildQueue.push(buildProvoltaVeil); }

/* THE WORLD — everything from our story, built at once. 2026-10-04.
   Districts planned, not messy. One vision: Sovereign Deco. */
function buildWorld(){
  try{
    var goldMat = new THREE.MeshStandardMaterial({color: 0xd4a017, roughness: 0.4, metalness: 0.6});
    var darkMat = new THREE.MeshStandardMaterial({color: 0x1a1a1a, roughness: 0.8});
    var redMat = new THREE.MeshStandardMaterial({color: 0xcc0000, roughness: 0.6});
    var whiteMat = new THREE.MeshStandardMaterial({color: 0xf5f5f5, roughness: 0.3});

    /* THE CITY — streets and towers, Sovereign Deco */
    var cityX = 100, cityZ = -100;
    /* Streets — gold lines on black */
    for(var i = -3; i <= 3; i++){
      var roadH = new THREE.Mesh(new THREE.BoxGeometry(120, 0.2, 3), goldMat);
      roadH.position.set(cityX, 0.25, cityZ + i * 15);
      scene.add(roadH);
      var roadV = new THREE.Mesh(new THREE.BoxGeometry(3, 0.2, 120), goldMat);
      roadV.position.set(cityX + i * 15, 0.25, cityZ);
      scene.add(roadV);
    }
    /* Towers */
    for(var tx = -2; tx <= 2; tx++){
      for(var tz = -2; tz <= 2; tz++){
        if(tx === 0 && tz === 0) continue;
        var h = 10 + Math.abs(tx * tz * 3) + 5;
        var tower = new THREE.Mesh(new THREE.BoxGeometry(8, h, 8), darkMat);
        tower.position.set(cityX + tx * 15 + 7, h/2 + 0.13, cityZ + tz * 15 + 7);
        scene.add(tower);
        var top = new THREE.Mesh(new THREE.BoxGeometry(9, 1, 9), goldMat);
        top.position.set(cityX + tx * 15 + 7, h + 0.6, cityZ + tz * 15 + 7);
        scene.add(top);
      }
    }

    /* THE FOREST — trees that sway (World Nature Law) */
    var treeMat = new THREE.MeshStandardMaterial({color: 0x0a4a0a, roughness: 0.9});
    var trunkMat = new THREE.MeshStandardMaterial({color: 0x4a2a0a, roughness: 0.9});
    window._trees = [];
    for(var f = 0; f < 40; f++){
      var fx = -150 + Math.random() * 100;
      var fz = 50 + Math.random() * 100;
      if(Math.abs(fx) < 30 && Math.abs(fz) < 30) continue;
      var trunk = new THREE.Mesh(new THREE.CylinderGeometry(0.5, 0.7, 4, 6), trunkMat);
      trunk.position.set(fx, 2, fz);
      scene.add(trunk);
      var leaves = new THREE.Mesh(new THREE.ConeGeometry(3, 6, 8), treeMat);
      leaves.position.set(fx, 6, fz);
      scene.add(leaves);
      window._trees.push(leaves);
    }
    if(!window._forestAnim){
      window._forestAnim = true;
      var _sway = function(){
        try{
          var t = Date.now() * 0.001;
          for(var i = 0; i < window._trees.length; i++){
            window._trees[i].rotation.z = Math.sin(t + i) * 0.1;
          }
        }catch(e){}
        requestAnimationFrame(_sway);
      };
      _sway();
    }

    /* THE HARBOR — water that runs */
    var waterMat = new THREE.MeshStandardMaterial({color: 0x004488, transparent: true, opacity: 0.7, roughness: 0.2});
    var water = new THREE.M