<!-- SAGA3 · part 35 -->
ronds = new THREE.Mesh(new THREE.ConeGeometry(5, 3, 8), greenMat);
          fronds.position.set(px, 13, pz);
          scene.add(fronds);
        }
        /* Bridge to ocean */
        var bridge = new THREE.Mesh(new THREE.BoxGeometry(80, 2, 8),
          new THREE.MeshStandardMaterial({color: 0x8a6a3a, roughness: 0.8}));
        bridge.position.set(sx - 50, 1, sz);
        scene.add(bridge);
      })();
    }

    /* 3 SKY DISTRICTS — spaceships hovering */
    var skyD = [
      {x: 0, y: 300, z: 3000},
      {x: 500, y: 350, z: 3000},
      {x: -500, y: 400, z: 3000}
    ];
    for(var sk = 0; sk < 3; sk++){
      (function(){
        var kx = skyD[sk].x, ky = skyD[sk].y, kz = skyD[sk].z;
        /* Platform */
        var plat = new THREE.Mesh(new THREE.CylinderGeometry(40, 35, 6, 12),
          new THREE.MeshStandardMaterial({color: 0x2a2a3a, metalness: 0.7, roughness: 0.4}));
        plat.position.set(kx, ky, kz);
        scene.add(plat);
        /* Spaceships */
        for(var sp = 0; sp < 3; sp++){
          var ship = new THREE.Group();
          var hull = new THREE.Mesh(new THREE.CylinderGeometry(3, 5, 15, 8),
            new THREE.MeshStandardMaterial({color: 0xaaaaaa, metalness: 0.8, roughness: 0.3}));
          hull.rotation.z = Math.PI/2;
          ship.add(hull);
          var glow = new THREE.Mesh(new THREE.SphereGeometry(2, 12, 8),
            new THREE.MeshBasicMaterial({color: 0x00ffff}));
          glow.position.set(8, 0, 0);
          ship.add(glow);
          ship.position.set(kx + (sp-1)*25, ky + 15 + sp*5, kz + (sp-1)*10);
          scene.add(ship);
          var sph = Math.random() * 10;
          var sy = ship.position.y;
          window._dynamics.push(function(t){
            ship.position.y = sy + Math.sin(t * 1.2 + sph) * 3;
            ship.rotation.y += 0.002;
          });
        }
        /* Hover animation for platform */
        var py = ky;
        var pph = Math.random() * 10;
        window._dynamics.push(function(t){
          plat.position.y = py + Math.sin(t * 0.5 + pph) * 5;
        });
      })();
    }

    /* 3 SNOWY PEAK DISTRICTS — connected by rivers, bridges */
    var peaks = [
      {x: -3000, z: -2000},
      {x: -2500, z: -2000},
      {x: -2000, z: -2000}
    ];
    for(var pk = 0; pk < 3; pk++){
      (function(){
        var px = peaks[pk].x, pz = peaks[pk].z;
        /* Snowy peak */
        var mountain = new THREE.Mesh(new THREE.ConeGeometry(50, 100, 8), rockMat);
        mountain.position.set(px, 50, pz);
        scene.add(mountain);
        var snow = new THREE.Mesh(new THREE.ConeGeometry(25, 40, 8), snowMat);
        snow.position.set(px, 80, pz);
        scene.add(snow);
        /* River flowing down */
        var river = new THREE.Mesh(new THREE.PlaneGeometry(10, 150), waterMat);
        river.rotation.x = -Math.PI/2;
        river.position.set(px + 30, 0.35, pz + 50);
        river.rotation.z = 0.3;
        scene.add(river);
      })();
    }
    /* Bridges connecting the peaks */
    for(var br = 0; br < 2; br++){
      var x1 = peaks[br].x, x2 = peaks[br+1].x;
      var z1 = peaks[br].z, z2 = peaks[br+1].z;
      var bridgeLen = Math.sqrt((x2-x1)*(x2-x1) + (z2-z1)*(z2-z1));
      var mbridge = new THREE.Mesh(new THREE.BoxGeometry(bridgeLen, 3, 6),
        new THREE.MeshStandardMaterial({color: 0xd4a017, metalness: 0.6, roughness: 0.4}));
      mbridge.position.set((x1+x2)/2, 60, (z1+z2)/2);
      mbridge.rotation.y = Math.atan2(x2-x1, z2-z1) + Math.PI/2;
      scene.add(mbridge);
    }

  }catch(e){}
}
if(typeof buildHawaii === 'function'){ try{ buildHawaii(); }catch(e){} }

/* INFRASTRUCTURE — connecting all districts. Based on real cities.
   Tokyo rings, Dubai viaducts, Singapore green corridors. 2026-10-04. */
function buildInfrastructure(){
  try{
    window._dynamics = window._dynamics || [];
    var goldMat = new THREE.MeshStandardMaterial({color: 0xd4a017, roughness: 0.4, metalness: 0.6});
    var darkMat = new THREE.MeshStandardMaterial({color: 0x1a1a1a, roughness: 0.8});
    var greenMat = new THREE.MeshStandardMaterial({color: 0x1a5a1a, roughness: 0.9});

    /* GOLDEN RING EXPRESSWAY — circular highway (Tokyo Shuto C1) */
    function ringRoad(radius, y, width){
      var ring = new THREE.Mesh(new THREE.RingGeometry(radius - width/2, radius + width/2, 64),
        new THREE.MeshStandardMaterial({color: 0x333333, roughness: 0.8, side: THREE.DoubleSide}));
      ring.rotation.x = -Math.PI/2;
      ring.position.y = y;
      scene.add(ring);
      /* Gold edge lines */
      var edge1 = new THREE.Mesh(new THREE.RingGeometry(radius - width/2, radius - width/2 + 1, 64),
        new THREE.MeshBasicMaterial({color: 0xd4a017, side: THREE.DoubleSide}));
      edge1.rotation.x = -Math.PI/2;
      edge1.position.y = y + 0.1;
      scene.add(edge1);
      var edge2 = new THREE.Mesh(new THREE.RingGeometry(radius + width/2 - 1, radius + width/2, 64),
        new THREE.MeshBasicMaterial({color: 0xd4a017, side: