'use strict'; // Base de datos de puertos mundiales principales (World Port Index subset) // Lat/Lon, nombre, país, zoom recomendado const WORLD_PORTS = [ // ── COLOMBIA ────────────────────────────────────────────────────────────── { name:'Barranquilla / Bocas de Ceniza', country:'Colombia', lat:10.9878, lon:-74.8040, zoom:13 }, { name:'Cartagena de Indias', country:'Colombia', lat:10.4236, lon:-75.5478, zoom:13 }, { name:'Santa Marta', country:'Colombia', lat:11.2408, lon:-74.2041, zoom:13 }, { name:'Buenaventura', country:'Colombia', lat:3.8800, lon:-77.0300, zoom:13 }, { name:'Tumaco', country:'Colombia', lat:1.8000, lon:-78.7600, zoom:13 }, { name:'Turbo', country:'Colombia', lat:8.0980, lon:-76.7220, zoom:13 }, { name:'Puerto Bolívar (Guajira)', country:'Colombia', lat:12.2358, lon:-71.9578, zoom:13 }, { name:'Coveñas', country:'Colombia', lat:9.4025, lon:-75.6861, zoom:13 }, { name:'Riohacha', country:'Colombia', lat:11.5444, lon:-72.9069, zoom:13 }, // ── USA — NEW YORK AREA ─────────────────────────────────────────────────── { name:'New York — Port Newark / Elizabeth', country:'USA', lat:40.6640, lon:-74.1435, zoom:13 }, { name:'New York — Bayonne', country:'USA', lat:40.6654, lon:-74.1151, zoom:13 }, { name:'New York — Staten Island', country:'USA', lat:40.6015, lon:-74.0707, zoom:12 }, { name:'New York — Upper Bay', country:'USA', lat:40.6501, lon:-74.0399, zoom:11 }, { name:'New York — Brooklyn / Red Hook', country:'USA', lat:40.6762, lon:-74.0102, zoom:13 }, { name:'New York — Manhattan', country:'USA', lat:40.7128, lon:-74.0059, zoom:12 }, { name:'New York — Jamaica Bay', country:'USA', lat:40.6130, lon:-73.8276, zoom:12 }, { name:'New York Anchorage', country:'USA', lat:40.5900, lon:-74.0500, zoom:11 }, { name:'Long Island Sound', country:'USA', lat:41.0534, lon:-73.5387, zoom:10 }, { name:'New Haven CT', country:'USA', lat:41.3082, lon:-72.9282, zoom:13 }, { name:'Bridgeport CT', country:'USA', lat:41.1670, lon:-73.2048, zoom:13 }, // ── USA — EAST COAST ────────────────────────────────────────────────────── { name:'Boston', country:'USA', lat:42.3554, lon:-71.0526, zoom:12 }, { name:'Providence RI', country:'USA', lat:41.8240, lon:-71.4128, zoom:13 }, { name:'Portland ME', country:'USA', lat:43.6591, lon:-70.2568, zoom:13 }, { name:'Baltimore', country:'USA', lat:39.2724, lon:-76.5790, zoom:12 }, { name:'Philadelphia', country:'USA', lat:39.9526, lon:-75.1652, zoom:12 }, { name:'Wilmington DE', country:'USA', lat:39.7447, lon:-75.5484, zoom:13 }, { name:'Norfolk / Hampton Roads', country:'USA', lat:36.8468, lon:-76.2951, zoom:12 }, { name:'Newport News', country:'USA', lat:36.9787, lon:-76.4300, zoom:13 }, { name:'Savannah', country:'USA', lat:32.0835, lon:-81.0998, zoom:12 }, { name:'Charleston SC', country:'USA', lat:32.7765, lon:-79.9311, zoom:12 }, { name:'Wilmington NC', country:'USA', lat:34.2257, lon:-77.9447, zoom:13 }, { name:'Jacksonville', country:'USA', lat:30.3322, lon:-81.6557, zoom:12 }, { name:'Miami', country:'USA', lat:25.7743, lon:-80.1937, zoom:12 }, { name:'Port Everglades (Fort Lauderdale)', country:'USA', lat:26.0931, lon:-80.1148, zoom:13 }, { name:'Tampa', country:'USA', lat:27.9506, lon:-82.4572, zoom:12 }, { name:'Key West', country:'USA', lat:24.5551, lon:-81.7800, zoom:13 }, // ── USA — GULF COAST ───────────────────────────────────────────────────── { name:'New Orleans', country:'USA', lat:29.9511, lon:-90.0715, zoom:12 }, { name:'Houston', country:'USA', lat:29.7604, lon:-95.3698, zoom:11 }, { name:'Texas City', country:'USA', lat:29.3838, lon:-94.9027, zoom:13 }, { name:'Galveston', country:'USA', lat:29.3013, lon:-94.7977, zoom:13 }, { name:'Beaumont', country:'USA', lat:30.0802, lon:-94.1266, zoom:12 }, { name:'Lake Charles', country:'USA', lat:30.2266, lon:-93.2174, zoom:12 }, { name:'Baton Rouge', country:'USA', lat:30.4515, lon:-91.1871, zoom:12 }, { name:'Mobile', country:'USA', lat:30.6954, lon:-88.0399, zoom:12 }, { name:'Pascagoula', country:'USA', lat:30.3460, lon:-88.5562, zoom:13 }, { name:'Corpus Christi', country:'USA', lat:27.8006, lon:-97.3964, zoom:12 }, { name:'Brownsville', country:'USA', lat:25.9017, lon:-97.4975, zoom:13 }, { name:'Pensacola', country:'USA', lat:30.4213, lon:-87.2169, zoom:13 }, // ── USA — WEST COAST ───────────────────────────────────────────────────── { name:'Los Angeles / Long Beach', country:'USA', lat:33.7454, lon:-118.2260, zoom:12 }, { name:'San Diego', country:'USA', lat:32.7157, lon:-117.1611, zoom:12 }, { name:'San Francisco', country:'USA', lat:37.7749, lon:-122.4194, zoom:12 }, { name:'Oakland', country:'USA', lat:37.8044, lon:-122.2711, zoom:12 }, { name:'Sacramento', country:'USA', lat:38.5816, lon:-121.4944, zoom:12 }, { name:'Stockton', country:'USA', lat:37.9577, lon:-121.2908, zoom:13 }, { name:'Portland OR', country:'USA', lat:45.5231, lon:-122.6765, zoom:12 }, { name:'Seattle / Puget Sound', country:'USA', lat:47.6062, lon:-122.3321, zoom:12 }, { name:'Tacoma', country:'USA', lat:47.2529, lon:-122.4443, zoom:12 }, { name:'Everett WA', country:'USA', lat:47.9790, lon:-122.2021, zoom:13 }, { name:'Olympia WA', country:'USA', lat:47.0379, lon:-122.9007, zoom:13 }, { name:'Astoria OR', country:'USA', lat:46.1879, lon:-123.8313, zoom:13 }, { name:'Coos Bay OR', country:'USA', lat:43.3665, lon:-124.2179, zoom:13 }, { name:'Eureka CA', country:'USA', lat:40.8021, lon:-124.1637, zoom:13 }, { name:'Anchorage', country:'USA', lat:61.2181, lon:-149.9003, zoom:11 }, { name:'Kodiak AK', country:'USA', lat:57.7900, lon:-152.4072, zoom:12 }, { name:'Juneau AK', country:'USA', lat:58.3005, lon:-134.4197, zoom:12 }, { name:'Dutch Harbor AK', country:'USA', lat:53.8836, lon:-166.5422, zoom:12 }, { name:'Honolulu HI', country:'USA', lat:21.3069, lon:-157.8583, zoom:12 }, { name:'Hilo HI', country:'USA', lat:19.7297, lon:-155.0900, zoom:13 }, // ── USA — INLAND / GREAT LAKES ─────────────────────────────────────────── { name:'Chicago', country:'USA', lat:41.8781, lon:-87.6298, zoom:12 }, { name:'Detroit', country:'USA', lat:42.3314, lon:-83.0458, zoom:12 }, { name:'Toledo OH', country:'USA', lat:41.6639, lon:-83.5552, zoom:13 }, { name:'Cleveland', country:'USA', lat:41.4993, lon:-81.6944, zoom:12 }, { name:'Buffalo NY', country:'USA', lat:42.8864, lon:-78.8784, zoom:12 }, { name:'Duluth', country:'USA', lat:46.7867, lon:-92.1005, zoom:12 }, { name:'Milwaukee', country:'USA', lat:43.0389, lon:-87.9065, zoom:12 }, { name:'Gary IN', country:'USA', lat:41.5934, lon:-87.3465, zoom:13 }, { name:'Burns Harbor IN', country:'USA', lat:41.6364, lon:-87.1928, zoom:13 }, // ── CANADA ─────────────────────────────────────────────────────────────── { name:'Vancouver', country:'Canada', lat:49.2827, lon:-123.1207, zoom:12 }, { name:'Prince Rupert', country:'Canada', lat:54.3150, lon:-130.3208, zoom:12 }, { name:'Victoria BC', country:'Canada', lat:48.4284, lon:-123.3656, zoom:13 }, { name:'Nanaimo BC', country:'Canada', lat:49.1659, lon:-123.9401, zoom:13 }, { name:'Kitimat BC', country:'Canada', lat:54.0534, lon:-128.6534, zoom:13 }, { name:'Montreal', country:'Canada', lat:45.5088, lon:-73.5878, zoom:12 }, { name:'Quebec City', country:'Canada', lat:46.8139, lon:-71.2080, zoom:12 }, { name:'Halifax', country:'Canada', lat:44.6488, lon:-63.5752, zoom:12 }, { name:'Saint John NB', country:'Canada', lat:45.2733, lon:-66.0633, zoom:12 }, { name:'St. John\'s NL', country:'Canada', lat:47.5615, lon:-52.7126, zoom:12 }, { name:'Thunder Bay ON', country:'Canada', lat:48.3809, lon:-89.2477, zoom:12 }, { name:'Hamilton ON', country:'Canada', lat:43.2557, lon:-79.8711, zoom:13 }, { name:'Windsor ON', country:'Canada', lat:42.3149, lon:-83.0364, zoom:13 }, // ── MÉXICO ──────────────────────────────────────────────────────────────── { name:'Veracruz', country:'Mexico', lat:19.2098, lon:-96.1322, zoom:12 }, { name:'Manzanillo MX', country:'Mexico', lat:19.0529, lon:-104.3188, zoom:13 }, { name:'Lázaro Cárdenas', country:'Mexico', lat:17.9510, lon:-102.2000, zoom:12 }, { name:'Altamira', country:'Mexico', lat:22.4086, lon:-97.9206, zoom:13 }, { name:'Tampico', country:'Mexico', lat:22.2475, lon:-97.8619, zoom:13 }, { name:'Coatzacoalcos', country:'Mexico', lat:18.1466, lon:-94.4363, zoom:13 }, { name:'Progreso (Yucatan)', country:'Mexico', lat:21.2800, lon:-89.6600, zoom:13 }, { name:'Ensenada', country:'Mexico', lat:31.8500, lon:-116.6000, zoom:13 }, { name:'Guaymas', country:'Mexico', lat:27.9270, lon:-110.9040, zoom:13 }, // ── CARIBE / CENTROAMÉRICA ──────────────────────────────────────────────── { name:'Panama Canal — Colon (Atlantic)', country:'Panama', lat:9.3606, lon:-79.9006, zoom:12 }, { name:'Panama Canal — Balboa (Pacific)', country:'Panama', lat:8.9533, lon:-79.5660, zoom:12 }, { name:'Panama City (Rodman)', country:'Panama', lat:8.9333, lon:-79.5500, zoom:13 }, { name:'Manzanillo Panama', country:'Panama', lat:9.3700, lon:-79.8500, zoom:13 }, { name:'Kingston', country:'Jamaica', lat:17.9957, lon:-76.7895, zoom:12 }, { name:'Puerto Limón', country:'Costa Rica',lat:9.9913, lon:-83.0281, zoom:13 }, { name:'Caldera', country:'Costa Rica',lat:9.9056, lon:-84.7153, zoom:13 }, { name:'Puerto Cortés', country:'Honduras', lat:15.8400, lon:-87.9500, zoom:13 }, { name:'Santo Tomás de Castilla', country:'Guatemala',lat:15.6833, lon:-88.6167, zoom:13 }, { name:'Acajutla', country:'El Salvador',lat:13.5944,lon:-89.8331, zoom:13 }, { name:'Managua (Corinto)', country:'Nicaragua', lat:12.4892, lon:-87.1747, zoom:13 }, { name:'Santo Domingo', country:'Dominican R.',lat:18.4672,lon:-69.9505,zoom:13 }, { name:'San Juan, PR', country:'USA', lat:18.4663, lon:-66.1185, zoom:13 }, { name:'Havana', country:'Cuba', lat:23.1423, lon:-82.3738, zoom:13 }, { name:'Santiago de Cuba', country:'Cuba', lat:20.0000, lon:-75.8333, zoom:13 }, { name:'Cienfuegos', country:'Cuba', lat:22.1416, lon:-80.4536, zoom:13 }, { name:'Port-au-Prince', country:'Haiti', lat:18.5481, lon:-72.3382, zoom:12 }, { name:'Bridgetown (Barbados)', country:'Barbados', lat:13.1132, lon:-59.6099, zoom:13 }, { name:'Willemstad (Curaçao)', country:'Netherlands A.',lat:12.1224,lon:-68.9420,zoom:13}, { name:'Oranjestad (Aruba)', country:'Aruba', lat:12.5092, lon:-70.0086, zoom:13 }, { name:'Paramaribo', country:'Suriname', lat:5.8520, lon:-55.2038, zoom:12 }, { name:'Georgetown (Guyana)', country:'Guyana', lat:6.8013, lon:-58.1553, zoom:12 }, // ── VENEZUELA ──────────────────────────────────────────────────────────── { name:'Maracaibo', country:'Venezuela', lat:10.6333, lon:-71.6333, zoom:12 }, { name:'La Guaira', country:'Venezuela', lat:10.6025, lon:-66.9289, zoom:13 }, { name:'Puerto Cabello', country:'Venezuela', lat:10.4767, lon:-68.0100, zoom:13 }, { name:'Barcelona (Venezuela)', country:'Venezuela', lat:10.1278, lon:-64.6868, zoom:13 }, { name:'Port of Spain', country:'Trinidad', lat:10.6518, lon:-61.5187, zoom:13 }, // ── SUDAMÉRICA ──────────────────────────────────────────────────────────── { name:'Guayaquil', country:'Ecuador', lat:-2.1667, lon:-79.9000, zoom:12 }, { name:'Esmeraldas', country:'Ecuador', lat:0.9500, lon:-79.6500, zoom:13 }, { name:'Callao (Lima)', country:'Peru', lat:-12.0567,lon:-77.1547, zoom:12 }, { name:'Ilo', country:'Peru', lat:-17.6500,lon:-71.3333, zoom:13 }, { name:'Salaverry', country:'Peru', lat:-8.2167, lon:-78.9833, zoom:13 }, { name:'Paita', country:'Peru', lat:-5.0833, lon:-81.1000, zoom:13 }, { name:'Arica', country:'Chile', lat:-18.4746,lon:-70.3194, zoom:13 }, { name:'Iquique', country:'Chile', lat:-20.2132,lon:-70.1534, zoom:13 }, { name:'Antofagasta', country:'Chile', lat:-23.6519,lon:-70.3954, zoom:13 }, { name:'Coquimbo', country:'Chile', lat:-29.9527,lon:-71.3386, zoom:13 }, { name:'Valparaíso', country:'Chile', lat:-33.0472,lon:-71.6127, zoom:12 }, { name:'San Antonio (Chile)', country:'Chile', lat:-33.5938,lon:-71.6161, zoom:13 }, { name:'Talcahuano / Concepción', country:'Chile', lat:-36.7167,lon:-73.1167, zoom:12 }, { name:'Puerto Montt', country:'Chile', lat:-41.4717,lon:-72.9333, zoom:13 }, { name:'Punta Arenas', country:'Chile', lat:-53.1638,lon:-70.9171, zoom:12 }, { name:'Buenos Aires', country:'Argentina',lat:-34.6037,lon:-58.3816, zoom:11 }, { name:'La Plata (Dock Sud)', country:'Argentina',lat:-34.6667,lon:-58.3333, zoom:12 }, { name:'Rosario', country:'Argentina',lat:-32.9442,lon:-60.6505, zoom:12 }, { name:'Bahía Blanca', country:'Argentina',lat:-38.7196,lon:-62.2724, zoom:12 }, { name:'Mar del Plata', country:'Argentina',lat:-38.0023,lon:-57.5575, zoom:13 }, { name:'Ushuaia', country:'Argentina',lat:-54.8019,lon:-68.3029, zoom:13 }, { name:'Montevideo', country:'Uruguay', lat:-34.9011,lon:-56.1915, zoom:12 }, { name:'Santos', country:'Brazil', lat:-23.9538,lon:-46.3328, zoom:12 }, { name:'São Sebastião', country:'Brazil', lat:-23.8035,lon:-45.4058, zoom:13 }, { name:'Rio de Janeiro', country:'Brazil', lat:-22.8938,lon:-43.1892, zoom:11 }, { name:'Itaguai (Sepetiba)', country:'Brazil', lat:-22.9300,lon:-43.7800, zoom:12 }, { name:'Vitória', country:'Brazil', lat:-20.3222,lon:-40.3381, zoom:13 }, { name:'Salvador de Bahia', country:'Brazil', lat:-12.9711,lon:-38.5108, zoom:12 }, { name:'Aratu', country:'Brazil', lat:-12.7833,lon:-38.5000, zoom:13 }, { name:'Ilhéus', country:'Brazil', lat:-14.7853,lon:-39.0394, zoom:13 }, { name:'Fortaleza', country:'Brazil', lat:-3.7172, lon:-38.5433, zoom:12 }, { name:'Natal', country:'Brazil', lat:-5.7945, lon:-35.2110, zoom:13 }, { name:'Recife', country:'Brazil', lat:-8.0476, lon:-34.8770, zoom:12 }, { name:'Maceió', country:'Brazil', lat:-9.6658, lon:-35.7350, zoom:13 }, { name:'Manaus', country:'Brazil', lat:-3.1190, lon:-60.0217, zoom:12 }, { name:'Belém', country:'Brazil', lat:-1.4558, lon:-48.5044, zoom:12 }, { name:'São Luís (Ponta da Madeira)', country:'Brazil', lat:-2.6297, lon:-44.3028, zoom:12 }, { name:'Santarém', country:'Brazil', lat:-2.4443, lon:-54.7082, zoom:13 }, // ── EUROPA — NORTE ──────────────────────────────────────────────────────── { name:'Rotterdam', country:'Netherlands',lat:51.9225,lon:4.4792, zoom:12 }, { name:'Amsterdam', country:'Netherlands',lat:52.3676,lon:4.9041, zoom:12 }, { name:'Hamburg', country:'Germany', lat:53.5753, lon:9.9935, zoom:12 }, { name:'Bremen / Bremerhaven', country:'Germany', lat:53.5386, lon:8.5833, zoom:12 }, { name:'Antwerp', country:'Belgium', lat:51.2213, lon:4.3997, zoom:12 }, { name:'Zeebrugge', country:'Belgium', lat:51.3478, lon:3.1972, zoom:13 }, { name:'Felixstowe', country:'UK', lat:51.9606, lon:1.3160, zoom:13 }, { name:'London (Tilbury)', country:'UK', lat:51.4509, lon:0.3553, zoom:12 }, { name:'Southampton', country:'UK', lat:50.8988, lon:-1.4044, zoom:12 }, { name:'Liverpool', country:'UK', lat:53.4084, lon:-2.9916, zoom:12 }, { name:'Grimsby / Immingham', country:'UK', lat:53.6150, lon:-0.1850, zoom:12 }, { name:'Bristol / Avonmouth', country:'UK', lat:51.4996, lon:-2.6956, zoom:12 }, { name:'Glasgow / Greenock', country:'UK', lat:55.9516, lon:-4.7540, zoom:12 }, { name:'Belfast', country:'UK', lat:54.5973, lon:-5.9301, zoom:12 }, { name:'Dublin', country:'Ireland', lat:53.3498, lon:-6.2603, zoom:12 }, { name:'Cork', country:'Ireland', lat:51.8979, lon:-8.4706, zoom:12 }, { name:'Le Havre', country:'France', lat:49.4944, lon:0.1079, zoom:12 }, { name:'Dunkerque', country:'France', lat:51.0343, lon:2.3767, zoom:12 }, { name:'Nantes / Saint-Nazaire', country:'France', lat:47.2184, lon:-2.2001, zoom:12 }, { name:'Bordeaux', country:'France', lat:44.8378, lon:-0.5792, zoom:12 }, { name:'Marseille', country:'France', lat:43.2965, lon:5.3818, zoom:12 }, { name:'Fos-sur-Mer', country:'France', lat:43.4378, lon:4.9436, zoom:13 }, { name:'Oslo', country:'Norway', lat:59.9139, lon:10.7522, zoom:12 }, { name:'Bergen', country:'Norway', lat:60.3913, lon:5.3221, zoom:12 }, { name:'Stavanger', country:'Norway', lat:58.9700, lon:5.7331, zoom:12 }, { name:'Tromsø', country:'Norway', lat:69.6492, lon:18.9553, zoom:12 }, { name:'Gothenburg', country:'Sweden', lat:57.7089, lon:11.9746, zoom:12 }, { name:'Stockholm', country:'Sweden', lat:59.3293, lon:18.0686, zoom:12 }, { name:'Malmö', country:'Sweden', lat:55.6050, lon:13.0038, zoom:13 }, { name:'Copenhagen', country:'Denmark', lat:55.6761, lon:12.5683, zoom:12 }, { name:'Aarhus', country:'Denmark', lat:56.1629, lon:10.2039, zoom:13 }, { name:'Esbjerg', country:'Denmark', lat:55.4764, lon:8.4594, zoom:13 }, { name:'Helsinki', country:'Finland', lat:60.1699, lon:24.9384, zoom:12 }, { name:'Turku', country:'Finland', lat:60.4518, lon:22.2666, zoom:13 }, { name:'Gdansk', country:'Poland', lat:54.3520, lon:18.6466, zoom:12 }, { name:'Gdynia', country:'Poland', lat:54.5189, lon:18.5305, zoom:13 }, { name:'Szczecin', country:'Poland', lat:53.4285, lon:14.5528, zoom:13 }, { name:'Rostock', country:'Germany', lat:54.0887, lon:12.1403, zoom:13 }, { name:'Kiel', country:'Germany', lat:54.3233, lon:10.1228, zoom:12 }, { name:'Tallinn', country:'Estonia', lat:59.4370, lon:24.7536, zoom:12 }, { name:'Riga', country:'Latvia', lat:56.9460, lon:24.1059, zoom:12 }, { name:'Klaipeda', country:'Lithuania',lat:55.7033, lon:21.1443, zoom:13 }, { name:'Kaliningrad', country:'Russia', lat:54.7104, lon:20.4522, zoom:12 }, { name:'St. Petersburg', country:'Russia', lat:59.9343, lon:30.3351, zoom:11 }, // ── EUROPA — SUR ───────────────────────────────────────────────────────── { name:'Barcelona', country:'Spain', lat:41.3851, lon:2.1734, zoom:12 }, { name:'Valencia', country:'Spain', lat:39.4699, lon:-0.3763, zoom:12 }, { name:'Algeciras', country:'Spain', lat:36.1388, lon:-5.4530, zoom:12 }, { name:'Bilbao', country:'Spain', lat:43.3630, lon:-3.0013, zoom:12 }, { name:'Vigo', country:'Spain', lat:42.2328, lon:-8.7226, zoom:12 }, { name:'Huelva', country:'Spain', lat:37.2614, lon:-6.9447, zoom:13 }, { name:'Tarragona', country:'Spain', lat:41.1189, lon:1.2445, zoom:13 }, { name:'Cartagena (Spain)', country:'Spain', lat:37.6012, lon:-0.9862, zoom:13 }, { name:'Las Palmas (Gran Canaria)', country:'Spain', lat:28.1472, lon:-15.4362, zoom:12 }, { name:'Santa Cruz de Tenerife', country:'Spain', lat:28.4636, lon:-16.2518, zoom:13 }, { name:'Lisbon', country:'Portugal', lat:38.7223, lon:-9.1393, zoom:12 }, { name:'Sines', country:'Portugal', lat:37.9513, lon:-8.8696, zoom:13 }, { name:'Leixões (Porto)', country:'Portugal', lat:41.1860, lon:-8.7058, zoom:13 }, { name:'Genoa', country:'Italy', lat:44.4056, lon:8.9463, zoom:12 }, { name:'La Spezia', country:'Italy', lat:44.1024, lon:9.8240, zoom:13 }, { name:'Livorno', country:'Italy', lat:43.5485, lon:10.3106, zoom:13 }, { name:'Civitavecchia (Rome)', country:'Italy', lat:42.0878, lon:11.7942, zoom:13 }, { name:'Naples', country:'Italy', lat:40.8358, lon:14.2488, zoom:12 }, { name:'Gioia Tauro', country:'Italy', lat:38.4265, lon:15.8992, zoom:13 }, { name:'Taranto', country:'Italy', lat:40.4644, lon:17.2470, zoom:13 }, { name:'Venice', country:'Italy', lat:45.4408, lon:12.3155, zoom:12 }, { name:'Trieste', country:'Italy', lat:45.6495, lon:13.7768, zoom:13 }, { name:'Piraeus (Athens)', country:'Greece', lat:37.9477, lon:23.6458, zoom:12 }, { name:'Thessaloniki', country:'Greece', lat:40.6401, lon:22.9444, zoom:12 }, { name:'Heraklion (Crete)', country:'Greece', lat:35.3387, lon:25.1442, zoom:13 }, { name:'Istanbul', country:'Turkey', lat:41.0082, lon:28.9784, zoom:12 }, { name:'Izmir', country:'Turkey', lat:38.4192, lon:27.1287, zoom:12 }, { name:'Mersin', country:'Turkey', lat:36.8000, lon:34.6333, zoom:13 }, { name:'Iskenderun', country:'Turkey', lat:36.5860, lon:36.1720, zoom:13 }, { name:'Izmit (Kocaeli)', country:'Turkey', lat:40.7654, lon:29.9408, zoom:12 }, { name:'Split', country:'Croatia', lat:43.5081, lon:16.4402, zoom:13 }, { name:'Rijeka', country:'Croatia', lat:45.3271, lon:14.4422, zoom:13 }, { name:'Koper', country:'Slovenia', lat:45.5517, lon:13.7301, zoom:13 }, { name:'Valletta (Malta)', country:'Malta', lat:35.8997, lon:14.5147, zoom:13 }, // ── MEDIO ORIENTE ──────────────────────────────────────────────────────── { name:'Dubai (Jebel Ali)', country:'UAE', lat:24.9969, lon:55.0613, zoom:12 }, { name:'Dubai (Port Rashid)', country:'UAE', lat:25.2697, lon:55.2786, zoom:13 }, { name:'Abu Dhabi (Khalifa)', country:'UAE', lat:24.8000, lon:54.6500, zoom:12 }, { name:'Sharjah', country:'UAE', lat:25.3463, lon:55.4209, zoom:13 }, { name:'Fujairah', country:'UAE', lat:25.1288, lon:56.3261, zoom:13 }, { name:'Muscat (Sultan Qaboos)', country:'Oman', lat:23.6138, lon:58.5922, zoom:12 }, { name:'Salalah', country:'Oman', lat:16.9450, lon:54.0050, zoom:12 }, { name:'Sohar', country:'Oman', lat:24.3442, lon:56.6450, zoom:13 }, { name:'Jeddah', country:'Saudi Arabia',lat:21.4858,lon:39.1925, zoom:12 }, { name:'Dammam / King Abdul Aziz', country:'Saudi Arabia',lat:26.4337,lon:50.1033, zoom:12 }, { name:'Yanbu', country:'Saudi Arabia',lat:24.0876,lon:38.0618, zoom:13 }, { name:'Aqaba', country:'Jordan', lat:29.5269, lon:35.0061, zoom:13 }, { name:'Kuwait City', country:'Kuwait', lat:29.3759, lon:47.9774, zoom:12 }, { name:'Shuwaikh', country:'Kuwait', lat:29.3500, lon:47.9333, zoom:13 }, { name:'Bandar Imam Khomeini', country:'Iran', lat:30.4350, lon:49.0758, zoom:12 }, { name:'Bandar Abbas', country:'Iran', lat:27.1865, lon:56.2808, zoom:12 }, { name:'Ashdod', country:'Israel', lat:31.8100, lon:34.6900, zoom:13 }, { name:'Haifa', country:'Israel', lat:32.8191, lon:34.9983, zoom:12 }, { name:'Beirut', country:'Lebanon', lat:33.8938, lon:35.5018, zoom:12 }, { name:'Latakia', country:'Syria', lat:35.5317, lon:35.7911, zoom:13 }, { name:'Tartus', country:'Syria', lat:34.8950, lon:35.8864, zoom:13 }, // ── AFRICA — NORTE ──────────────────────────────────────────────────────── { name:'Suez Canal — Port Said', country:'Egypt', lat:31.2565, lon:32.2841, zoom:12 }, { name:'Suez Canal — Suez', country:'Egypt', lat:29.9668, lon:32.5498, zoom:13 }, { name:'Alexandria', country:'Egypt', lat:31.2001, lon:29.9187, zoom:12 }, { name:'Damietta', country:'Egypt', lat:31.4167, lon:31.8167, zoom:13 }, { name:'Tripoli (Libya)', country:'Libya', lat:32.9020, lon:13.1803, zoom:12 }, { name:'Benghazi', country:'Libya', lat:32.1167, lon:20.0667, zoom:13 }, { name:'Tunis / La Goulette', country:'Tunisia', lat:36.8190, lon:10.2306, zoom:12 }, { name:'Sfax', country:'Tunisia', lat:34.7406, lon:10.7603, zoom:13 }, { name:'Annaba', country:'Algeria', lat:36.9167, lon:7.7667, zoom:13 }, { name:'Algiers', country:'Algeria', lat:36.7372, lon:3.0870, zoom:12 }, { name:'Oran', country:'Algeria', lat:35.6969, lon:-0.6331, zoom:13 }, { name:'Casablanca', country:'Morocco', lat:33.5731, lon:-7.5898, zoom:12 }, { name:'Tanger Med', country:'Morocco', lat:35.8833, lon:-5.5000, zoom:13 }, { name:'Agadir', country:'Morocco', lat:30.4278, lon:-9.5981, zoom:13 }, // ── AFRICA — OESTE ──────────────────────────────────────────────────────── { name:'Dakar', country:'Senegal', lat:14.6928, lon:-17.4467, zoom:12 }, { name:'Abidjan', country:'Ivory Coast',lat:5.3160,lon:-4.0167, zoom:12 }, { name:'Tema (Accra)', country:'Ghana', lat:5.6333, lon:-0.0167, zoom:12 }, { name:'Lagos (Apapa)', country:'Nigeria', lat:6.4541, lon:3.4110, zoom:12 }, { name:'Tin Can Island (Lagos)', country:'Nigeria', lat:6.4333, lon:3.3500, zoom:13 }, { name:'Port Harcourt', country:'Nigeria', lat:4.7742, lon:7.0134, zoom:12 }, { name:'Warri', country:'Nigeria', lat:5.5167, lon:5.7500, zoom:13 }, { name:'Douala', country:'Cameroon', lat:4.0511, lon:9.7679, zoom:12 }, { name:'Libreville', country:'Gabon', lat:0.3924, lon:9.4536, zoom:12 }, { name:'Pointe-Noire', country:'Congo', lat:-4.7769, lon:11.8656, zoom:12 }, { name:'Luanda', country:'Angola', lat:-8.8368, lon:13.2343, zoom:12 }, { name:'Lobito', country:'Angola', lat:-12.3500,lon:13.5500, zoom:13 }, { name:'Walvis Bay', country:'Namibia', lat:-22.9576,lon:14.5052, zoom:12 }, { name:'Freetown', country:'Sierra Leone',lat:8.4906,lon:-13.2317, zoom:12 }, { name:'Conakry', country:'Guinea', lat:9.5370, lon:-13.6773, zoom:12 }, // ── AFRICA — ESTE / SUR ─────────────────────────────────────────────────── { name:'Djibouti', country:'Djibouti', lat:11.5886, lon:43.1451, zoom:12 }, { name:'Berbera', country:'Somalia', lat:10.4394, lon:45.0146, zoom:13 }, { name:'Mogadishu', country:'Somalia', lat:2.0469, lon:45.3182, zoom:12 }, { name:'Mombasa', country:'Kenya', lat:-4.0435, lon:39.6682, zoom:12 }, { name:'Dar es Salaam', country:'Tanzania', lat:-6.7924, lon:39.2083, zoom:12 }, { name:'Zanzibar', country:'Tanzania', lat:-6.1659, lon:39.1989, zoom:13 }, { name:'Beira', country:'Mozambique',lat:-19.8436,lon:34.8389, zoom:12 }, { name:'Maputo', country:'Mozambique',lat:-25.9692,lon:32.5732, zoom:12 }, { name:'Toamasina (Tamatave)', country:'Madagascar',lat:-18.1492,lon:49.4022, zoom:12 }, { name:'Antananarivo / Mahajanga', country:'Madagascar',lat:-15.7167,lon:46.3167, zoom:12 }, { name:'Durban', country:'South Africa',lat:-29.8587,lon:31.0218,zoom:12 }, { name:'Port Elizabeth', country:'South Africa',lat:-33.9179,lon:25.5699, zoom:12 }, { name:'Cape Town', country:'South Africa',lat:-33.9249,lon:18.4241, zoom:12 }, { name:'Richards Bay', country:'South Africa',lat:-28.7816,lon:32.0804, zoom:13 }, { name:'Port Louis (Mauritius)', country:'Mauritius', lat:-20.1619,lon:57.4989, zoom:12 }, // ── ASIA — GOLFO PÉRSICO / SUBCONTINENTE ───────────────────────────────── { name:'Karachi', country:'Pakistan', lat:24.8607, lon:67.0011, zoom:12 }, { name:'Port Qasim', country:'Pakistan', lat:24.7753, lon:67.3100, zoom:13 }, { name:'Mumbai (JNPT)', country:'India', lat:18.9388, lon:72.8355, zoom:12 }, { name:'Mundra', country:'India', lat:22.8390, lon:69.7060, zoom:13 }, { name:'Kandla', country:'India', lat:23.0333, lon:70.2167, zoom:13 }, { name:'Nhava Sheva (Mumbai)', country:'India', lat:18.9486, lon:72.9489, zoom:13 }, { name:'Cochin / Kochi', country:'India', lat:9.9312, lon:76.2673, zoom:12 }, { name:'Chennai (Madras)', country:'India', lat:13.0827, lon:80.2707, zoom:12 }, { name:'Visakhapatnam', country:'India', lat:17.6868, lon:83.2185, zoom:12 }, { name:'Kolkata (Calcutta)', country:'India', lat:22.5726, lon:88.3639, zoom:12 }, { name:'Haldia', country:'India', lat:22.0667, lon:88.1000, zoom:13 }, { name:'Colombo', country:'Sri Lanka',lat:6.9271, lon:79.8612, zoom:12 }, { name:'Chittagong', country:'Bangladesh',lat:22.3569,lon:91.8350, zoom:12 }, { name:'Yangon (Rangoon)', country:'Myanmar', lat:16.8661, lon:96.1951, zoom:12 }, { name:'Thilawa', country:'Myanmar', lat:16.7000, lon:96.2500, zoom:13 }, // ── ASIA — SUDESTE ──────────────────────────────────────────────────────── { name:'Singapore', country:'Singapore',lat:1.2644, lon:103.8219, zoom:12 }, { name:'Port Klang', country:'Malaysia', lat:2.9983, lon:101.3667, zoom:12 }, { name:'Penang', country:'Malaysia', lat:5.3678, lon:100.4013, zoom:12 }, { name:'Tanjung Pelepas', country:'Malaysia', lat:1.3600, lon:103.5500, zoom:13 }, { name:'Laem Chabang', country:'Thailand', lat:13.0829, lon:100.8807, zoom:12 }, { name:'Bangkok', country:'Thailand', lat:13.7563, lon:100.5018, zoom:12 }, { name:'Ho Chi Minh City (Saigon)', country:'Vietnam', lat:10.7769, lon:106.7009, zoom:12 }, { name:'Haiphong', country:'Vietnam', lat:20.8449, lon:106.6881, zoom:12 }, { name:'Da Nang', country:'Vietnam', lat:16.0544, lon:108.2022, zoom:13 }, { name:'Manila', country:'Philippines',lat:14.5995,lon:120.9842, zoom:12 }, { name:'Subic Bay', country:'Philippines',lat:14.8222,lon:120.2705, zoom:13 }, { name:'Cebu', country:'Philippines',lat:10.3157,lon:123.8854, zoom:13 }, { name:'Jakarta (Tanjung Priok)', country:'Indonesia', lat:-6.1075, lon:106.8728, zoom:12 }, { name:'Surabaya', country:'Indonesia', lat:-7.2492, lon:112.7508, zoom:12 }, { name:'Batam / Batu Ampar', country:'Indonesia', lat:1.1000, lon:104.0333, zoom:13 }, { name:'Makassar', country:'Indonesia', lat:-5.1477, lon:119.4327, zoom:12 }, { name:'Balikpapan', country:'Indonesia', lat:-1.2379, lon:116.8529, zoom:13 }, { name:'Medan (Belawan)', country:'Indonesia', lat:3.7850, lon:98.6922, zoom:12 }, // ── ASIA — ESTE ────────────────────────────────────────────────────────── { name:'Shanghai', country:'China', lat:31.2304, lon:121.4737, zoom:11 }, { name:'Ningbo-Zhoushan', country:'China', lat:29.8683, lon:121.5440, zoom:11 }, { name:'Shenzhen (Yantian)', country:'China', lat:22.5635, lon:114.2467, zoom:12 }, { name:'Guangzhou (Nansha)', country:'China', lat:22.7333, lon:113.6500, zoom:12 }, { name:'Guangzhou (Huangpu)', country:'China', lat:23.1116, lon:113.4603, zoom:12 }, { name:'Hong Kong', country:'China', lat:22.3193, lon:114.1694, zoom:12 }, { name:'Tianjin (Xingang)', country:'China', lat:39.0211, lon:117.7108, zoom:12 }, { name:'Qingdao', country:'China', lat:36.0671, lon:120.3826, zoom:12 }, { name:'Dalian', country:'China', lat:38.9140, lon:121.6147, zoom:12 }, { name:'Xiamen', country:'China', lat:24.4795, lon:118.0881, zoom:12 }, { name:'Fuzhou', country:'China', lat:26.0745, lon:119.2965, zoom:12 }, { name:'Lianyungang', country:'China', lat:34.6004, lon:119.2212, zoom:12 }, { name:'Wuhan', country:'China', lat:30.5928, lon:114.3055, zoom:12 }, { name:'Busan', country:'South Korea',lat:35.1796,lon:129.0756, zoom:12 }, { name:'Incheon', country:'South Korea',lat:37.4563,lon:126.7052, zoom:12 }, { name:'Gwangyang', country:'South Korea',lat:34.9167,lon:127.7167, zoom:13 }, { name:'Ulsan', country:'South Korea',lat:35.5383,lon:129.3114, zoom:12 }, { name:'Tokyo / Yokohama', country:'Japan', lat:35.4437, lon:139.6380, zoom:11 }, { name:'Kobe / Osaka', country:'Japan', lat:34.6901, lon:135.1956, zoom:11 }, { name:'Nagoya', country:'Japan', lat:35.0702, lon:136.9344, zoom:12 }, { name:'Fukuoka / Hakata', country:'Japan', lat:33.5904, lon:130.4017, zoom:12 }, { name:'Hiroshima', country:'Japan', lat:34.3853, lon:132.4553, zoom:13 }, { name:'Kitakyushu', country:'Japan', lat:33.8834, lon:130.8751, zoom:12 }, { name:'Kaohsiung', country:'Taiwan', lat:22.6273, lon:120.3014, zoom:12 }, { name:'Taipei / Keelung', country:'Taiwan', lat:25.1276, lon:121.7392, zoom:12 }, { name:'Taichung', country:'Taiwan', lat:24.2793, lon:120.6628, zoom:13 }, { name:'Vladivostok', country:'Russia', lat:43.1056, lon:131.8735, zoom:12 }, // ── OCEANÍA ─────────────────────────────────────────────────────────────── { name:'Sydney', country:'Australia',lat:-33.8688,lon:151.2093, zoom:12 }, { name:'Melbourne', country:'Australia',lat:-37.8136,lon:144.9631, zoom:12 }, { name:'Brisbane', country:'Australia',lat:-27.4698,lon:153.0251, zoom:12 }, { name:'Fremantle (Perth)', country:'Australia',lat:-32.0568,lon:115.7444, zoom:12 }, { name:'Adelaide', country:'Australia',lat:-34.9285,lon:138.6007, zoom:12 }, { name:'Port Hedland', country:'Australia',lat:-20.3117,lon:118.5883, zoom:12 }, { name:'Darwin', country:'Australia',lat:-12.4634,lon:130.8456, zoom:12 }, { name:'Townsville', country:'Australia',lat:-19.2590,lon:146.8169, zoom:12 }, { name:'Auckland', country:'New Zealand',lat:-36.8485,lon:174.7633,zoom:12 }, { name:'Tauranga', country:'New Zealand',lat:-37.6878,lon:176.1651,zoom:13 }, { name:'Wellington', country:'New Zealand',lat:-41.2865,lon:174.7762,zoom:12 }, { name:'Christchurch / Lyttelton', country:'New Zealand',lat:-43.6028,lon:172.7280, zoom:13 }, { name:'Suva (Fiji)', country:'Fiji', lat:-18.1416,lon:178.4419, zoom:12 }, { name:'Port Moresby', country:'Papua NG', lat:-9.4438, lon:147.1803, zoom:12 }, { name:'Nouméa', country:'New Caledonia',lat:-22.2558,lon:166.4505,zoom:12}, // ── CARIBE ADICIONAL ───────────────────────────────────────────────────── { name:'Nassau (Bahamas)', country:'Bahamas', lat:25.0480, lon:-77.3587, zoom:12 }, { name:'Freeport (Bahamas)', country:'Bahamas', lat:26.5285, lon:-78.6960, zoom:13 }, { name:'Montego Bay', country:'Jamaica', lat:18.4762, lon:-77.9216, zoom:13 }, { name:'Fort-de-France (Martinique)', country:'Martinique',lat:14.6037,lon:-61.0766, zoom:13 }, { name:'Pointe-à-Pitre (Guadeloupe)', country:'Guadeloupe',lat:16.2401,lon:-61.5331, zoom:13 }, { name:'Charlotte Amalie (USVI)', country:'USA', lat:18.3419, lon:-64.9307, zoom:13 }, { name:'Road Town (BVI)', country:'UK', lat:18.4167, lon:-64.6167, zoom:13 }, { name:'Castries (St. Lucia)', country:'St. Lucia',lat:14.0101, lon:-60.9875, zoom:13 }, { name:'St. George\'s (Grenada)', country:'Grenada', lat:12.0539, lon:-61.7488, zoom:13 }, ]; // ── Buscador ───────────────────────────────────────────────────────────────── window.PortSearch = { init() { const input = document.getElementById('port-search'); const list = document.getElementById('port-suggestions'); if (!input) return; input.addEventListener('input', () => { const q = input.value.trim().toLowerCase(); if (q.length < 2) { list.classList.add('hidden'); return; } const matches = WORLD_PORTS.filter(p => p.name.toLowerCase().includes(q) || p.country.toLowerCase().includes(q) ).slice(0, 10); if (!matches.length) { list.classList.add('hidden'); return; } list.innerHTML = matches.map((p, i) => `