`; } function addEmp() { const f=document.getElementById('empFirst').value,l=document.getElementById('empLast').value,r=document.getElementById('empRole').value; if(!f||!l) return alert('Compila nome e cognome'); const lns=f.toLowerCase()+'.'+l.toLowerCase()+'@'+(S.tenant?.domain||'acme.lns'); const kf={version:1,algorithm:'ML-DSA-65',lns_name:lns,tenant_id:'tnt-'+rnd(6),did:'did:lattice:'+rnd(16),public_key_hex:rnd(1952),secret_key_hex:rnd(4032),created_at:new Date().toISOString()}; S.emps.push({id:Date.now().toString(),lns_name:lns,display_name:f+' '+l,role:r,public_key:kf.public_key_hex}); save(); const blob=new Blob([JSON.stringify(kf,null,2)],{type:'application/json'}); const a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download=lns.replace(/[@.]/g,'_')+'_key.json';a.click(); navigate('dashboard'); } // ==================== EXPLORER ==================== function renderExplorer() { return `

πŸ” Blockchain Explorer

Dati reali dal backend Rust

Caricamento...
`; } // ==================== UTILS ==================== function logout() { S.user=null;S.tenant=null;S.token=null; localStorage.removeItem('lu');localStorage.removeItem('ltn');localStorage.removeItem('lt'); navigate('home'); } // Avvio if (S.token && S.user) navigate('certify'); else navigate('home');