// ═══════════════════════════════════════════════════════ // IP Lookup // ═══════════════════════════════════════════════════════ async function lookupIP() { const ip = document.getElementById('ipInput').value.trim(); setStatus('ipStatus','info','Looking up...'); const d = await apiGet(ip ? '/api/ip/' + ip : '/api/ip'); if (d.success && d.status !== 'fail') { const fields = [ ['IP Address', d.query], ['Country', d.country], ['Region', d.regionName], ['City', d.city], ['ZIP', d.zip], ['Latitude', d.lat], ['Longitude', d.lon], ['Timezone', d.timezone], ['ISP', d.isp], ['Organization', d.org], ['AS', d.as] ]; document.getElementById('ipResults').innerHTML = fields.map(([l, v]) => `
${l}
${v || '—'}
`).join(''); setStatus('ipStatus','success','Lookup complete ✓'); } else setStatus('ipStatus','error', d.message || d.error || 'Lookup failed'); } // Keyboard shortcut document.getElementById('ipInput').addEventListener('keydown', e => { if(e.key==='Enter') lookupIP(); });