Places · People · Adventures

Travel ✈️

Exploring the world and taking my curiosity across the globe. Every journey is an education in itself.

Places I've Been

Click any destination to read my stories (work in progress). Airport layovers don't count!

🗺 Maps are generated using open-source geographic data and are for illustrative purposes only. They do not express any position on the naming, sovereignty, or borders of any country or territory.

🌍 Countries I've Visited

"]); let worldMap = null; function openWorldMap() { document.getElementById('worldModalBackdrop').classList.add('open'); document.body.style.overflow = 'hidden'; document.getElementById('worldCountCount').textContent = `${VISITED_ADULT.size} countries · ${VISITED_CHILD.size} childhood destinations`; setTimeout(() => { if (worldMap) { worldMap.remove(); worldMap = null; } worldMap = L.map('world-map', { center:[20,10], zoom:2, zoomControl:true, scrollWheelZoom:true, minZoom:1 }); L.tileLayer('https://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}{r}.png', { attribution:'© OpenStreetMap © CARTO', subdomains:'abcd', maxZoom:10 }).addTo(worldMap); const renderWorld = (geojson) => { L.geoJSON(geojson, { style: f => { const n = f.properties.ADMIN||f.properties.name||''; if(VISITED_ADULT.has(n)) return {fillColor:'#40916C',fillOpacity:0.75,color:'#1B4332',weight:1.2}; if(VISITED_CHILD.has(n)) return {fillColor:'#B7E4C7',fillOpacity:0.65,color:'#40916C',weight:1.0}; return {fillColor:'#d6d0c8',fillOpacity:0.55,color:'#b0aba3',weight:0.4}; }, onEachFeature: (f,layer) => { const n=f.properties.ADMIN||f.properties.name||''; const a=VISITED_ADULT.has(n); const ch=VISITED_CHILD.has(n); if(a||ch){ const label=ch?`${n} (childhood)`:n; layer.bindTooltip(label,{sticky:true,className:a?'country-tooltip':'country-tooltip-child'}); } else { layer.bindTooltip(n,{sticky:true,className:'country-tooltip-plain'}); } } }).addTo(worldMap); }; if (worldGeoJSON) { renderWorld(worldGeoJSON); } else { fetch('https://raw.githubusercontent.com/datasets/geo-countries/master/data/countries.geojson').then(r=>r.json()).then(g=>{worldGeoJSON=g;renderWorld(g);}).catch(err=>console.warn('World GeoJSON failed:',err)); } }, 80); } function closeWorldMap() { document.getElementById('worldModalBackdrop').classList.remove('open'); document.body.style.overflow = ''; if (worldMap) { worldMap.remove(); worldMap = null; } } document.getElementById('worldModalBackdrop').addEventListener('click', e => { if (e.target === document.getElementById('worldModalBackdrop')) closeWorldMap(); }); // ── FILTER ── function filterTravel(continent, btn) { document.querySelectorAll('.filter-btn').forEach(b => b.classList.remove('active')); btn.classList.add('active'); document.querySelectorAll('.travel-card').forEach(card => { card.style.display = (continent === 'all' || card.dataset.continent === continent) ? 'block' : 'none'; }); }