<!-- RUBY-BACKUP · part 304 -->
palace-tower'; scene.add(tower);
          var troof = new THREE.Mesh(new THREE.ConeGeometry(8, 10, 4), goldLeaf);
          troof.position.set(PX+cn[0], ppy+37, PZ+cn[1]); troof.rotation.y = Math.PI/4;
          troof.name='palace-tower-roof'; scene.add(troof);
        });
        /* TWO CENTER TOWERS — taller, front and rear */
        [[0,-22],[0,22]].forEach(function(cn){
          var ctower = new THREE.Mesh(new THREE.BoxGeometry(8, 42, 8), goldLeaf);
          ctower.position.set(PX+cn[0], ppy+21, PZ+cn[1]); ctower.name='palace-ctower'; scene.add(ctower);
          var croof = new THREE.Mesh(new THREE.SphereGeometry(6, 12, 8, 0, Math.PI*2, 0, Math.PI/2), goldMat);
          croof.position.set(PX+cn[0], ppy+42, PZ+cn[1]); croof.name='palace-cdome'; scene.add(croof);
        });
        /* WRAPAROUND LANAI — columns on both stories, all four sides */
        for(var side=0; side<4; side++){
          for(var col=0; col<8; col++){
            var ang = side*Math.PI/2;
            var lx = PX + Math.cos(ang)*(col<4?28:-28) + (side%2? (col-3.5)*6 : 0);
            var lz = PZ + Math.sin(ang)*(col<4?22:-22) + (side%2? 0 : (col-3.5)*6);
            /* simplify: columns around perimeter */
          }
        }
        /* columns — 24 around the palace */
        for(var ci=0; ci<24; ci++){
          var cang = (ci/24)*Math.PI*2;
          var cx = PX + Math.cos(cang)*30, cz = PZ + Math.sin(cang)*22;
          var column = new THREE.Mesh(new THREE.CylinderGeometry(1, 1.2, 20, 8), marbleMat);
          column.position.set(cx, ppy+16, cz); column.name='palace-column'; scene.add(column);
          var cap = new THREE.Mesh(new THREE.BoxGeometry(3, 1, 3), goldLeaf);
          cap.position.set(cx, ppy+26.5, cz); cap.name='palace-cap'; scene.add(cap);
        }
        /* GRAND KOA STAIRCASE — front entrance */
        for(var st=0; st<6; st++){
          var step = new THREE.Mesh(new THREE.BoxGeometry(16-st*2, 1, 4), koaMat);
          step.position.set(PX, ppy+0.5+st, PZ-26-st*2); step.name='palace-step'; scene.add(step);
        }
        /* PULOU'LOU — kapu sticks, gold orbs on staffs at entrances */
        [[PX-10,PZ-30],[PX+10,PZ-30],[PX-10,PZ+30],[PX+10,PZ+30]].forEach(function(pp){
          var staff = new THREE.Mesh(new THREE.CylinderGeometry(0.3, 0.3, 12, 6), koaMat);
          staff.position.set(pp[0], ppy+6, pp[1]); staff.name='pulo-staff'; scene.add(staff);
          var orb = new THREE.Mesh(new THREE.SphereGeometry(1.5, 12, 10), goldLeaf);
          orb.position.set(pp[0], ppy+13, pp[1]); orb.name='pulo-orb'; scene.add(orb);
          var halo = new THREE.Mesh(new THREE.TorusGeometry(2.2, 0.2, 6, 16), holoMat);
          halo.position.set(pp[0], ppy+13, pp[1]); halo.name='pulo-halo'; scene.add(halo);
        });
        /* BEACON TOWER — our Aloha Tower, extra fancy */
        var bpy = 10;
        try{ if(typeof fortifiedGroundY==='function') bpy = fortifiedGroundY(200, -200); }catch(e){}
        var bbase = new THREE.Mesh(new THREE.CylinderGeometry(8, 10, 6, 8), marbleMat);
        bbase.position.set(200, bpy+3, -200); bbase.name='beacon-base'; scene.add(bbase);
        var bshaft = new THREE.Mesh(new THREE.BoxGeometry(10, 50, 10), goldMat);
        bshaft.position.set(200, bpy+31, -200); bshaft.name='beacon-shaft'; scene.add(bshaft);
        /* clock faces — four sides */
        for(var cf=0; cf<4; cf++){
          var cfang = cf*Math.PI/2;
          var clock = new THREE.Mesh(new THREE.CircleGeometry(3, 16), glowMat);
          clock.position.set(200+Math.sin(cfang)*5.1, bpy+50, -200+Math.cos(cfang)*5.1);
          clock.rotation.y = cfang; clock.name='beacon-clock'; scene.add(clock);
        }
        var btop = new THREE.Mesh(new THREE.ConeGeometry(8, 12, 4), goldLeaf);
        btop.position.set(200, bpy+62, -200); btop.rotation.y = Math.PI/4; btop.name='beacon-top'; scene.add(btop);
        var blight = new THREE.Mesh(new THREE.SphereGeometry(2, 10, 8), glowMat);
        blight.position.set(200, bpy+70, -200); blight.name='beacon-light'; scene.add(blight);
        /* light beam shooting up */
        var bbeam = new THREE.Mesh(new THREE.CylinderGeometry(1, 2, 80, 8),
          new THREE.MeshBasicMaterial({color:0xfff8dc, transparent:true, opacity:0.3}));
        bbeam.position.set(200, bpy+110, -200); bbeam.name='beacon-beam'; scene.add(bbeam);
      }catch(e){}
    }, 28000);
    /* OUR FUTURE — sovereign spire, floating citadel, energy shield, transit rings */
    setTimeout(function(){
      try{
        var goldMat = new THREE.MeshStandardMaterial({color:0xffd700, metalness:0.9, roughness:0.2});
        var shieldMat = new THREE.MeshBasicMaterial({color:0xffd700, transparent:true, opacity:0.08});
        var holoMat = new THREE.MeshBasicMaterial({color:0x00ffff, transparent:true, opacity:0.35});
        var py = 10;
        try{ if(typeof fortifiedGroundY==='function') py = fortifiedGroundY(0, -100); }catch(e){}
        /* SOVEREIGN SPIRE — taller than ev