diff --git "a/index.html" "b/index.html" --- "a/index.html" +++ "b/index.html" @@ -1,1131 +1,1364 @@ - - - - Navegador Neuronal de Twitter - - - - - - - -
-
- -
- -
-

NEXUS

-

Visualizador Semántico Neural v2.0

- - - -
-
- Credenciales de Acceso -
+ + + + NEXUS OMEGA: Neural Interface v9.0 + + + + + +
+
+
+
+ +
+
+
+

NEXUS

+

Neural Interface System

+ +
+
+ + +
+ +
+
+ +
ID
+
+
+ +
KEY
+
+ +
+ + + +
+
+ Opciones Alternativas +
+
+ + +
+ + + +

+
-
-
- -
-
-
- -
-
- -
- - -
-
- -

-
- - - -
-
- -
- - - - - - - - - - - - - - - - - - - + + DOM.btnAnon.addEventListener('click', async () => { + await signInAnonymously(auth); + }); + + DOM.loginForm.addEventListener('submit', async (e) => { + e.preventDefault(); + try { + await signInWithEmailAndPassword(auth, document.getElementById('login-email').value, document.getElementById('login-pass').value); + } catch (err) { + DOM.msgAuth.textContent = err.message; + } + }); + + DOM.regForm.addEventListener('submit', async (e) => { + e.preventDefault(); + try { + await createUserWithEmailAndPassword(auth, document.getElementById('reg-email').value, document.getElementById('reg-pass').value); + DOM.authForms.classList.add('hidden'); + DOM.userSetup.classList.remove('hidden'); + } catch (err) { + DOM.msgAuth.textContent = err.message; + } + }); + + DOM.tabLogin.addEventListener('click', (e) => { + e.preventDefault(); + DOM.loginForm.classList.remove('hidden'); + DOM.regForm.classList.add('hidden'); + DOM.tabLogin.classList.add('border-cyan-400', 'text-cyan-400'); + DOM.tabLogin.classList.remove('border-transparent', 'text-gray-500'); + DOM.tabReg.classList.remove('border-cyan-400', 'text-cyan-400'); + DOM.tabReg.classList.add('border-transparent', 'text-gray-500'); + }); + + DOM.tabReg.addEventListener('click', (e) => { + e.preventDefault(); + DOM.loginForm.classList.add('hidden'); + DOM.regForm.classList.remove('hidden'); + DOM.tabReg.classList.add('border-cyan-400', 'text-cyan-400'); + DOM.tabReg.classList.remove('border-transparent', 'text-gray-500'); + DOM.tabLogin.classList.remove('border-cyan-400', 'text-cyan-400'); + DOM.tabLogin.classList.add('border-transparent', 'text-gray-500'); + }); + + document.getElementById('btn-save-profile').addEventListener('click', () => { + saveProfile(document.getElementById('setup-name').value || "User-" + Math.floor(Math.random() * 1000)); + }); + + document.getElementById('btn-logout').addEventListener('click', () => signOut(auth)); + + document.querySelectorAll('.mode-btn').forEach(btn => { + btn.addEventListener('click', () => { + document.querySelectorAll('.mode-btn').forEach(b => b.classList.remove('mode-active')); + btn.classList.add('mode-active'); + STATE.mode = btn.dataset.mode; + DOM.targetContainer.classList.add('hidden'); + if (STATE.mode === 'bridge') { + DOM.targetContainer.classList.remove('hidden'); + DOM.missionDesc.textContent = "Conecta el concepto A con el B mediante nodos intermedios."; + } else if (STATE.mode === 'miner') { + DOM.missionDesc.textContent = "Busca nodos dorados (conceptos raros) para tu bóveda."; + } else if (STATE.mode === 'defense') { + DOM.missionDesc.textContent = "¡ALERTA! Destruye los nodos basura rojos antes de que el cometa impacte."; + } else { + DOM.missionDesc.textContent = "Explora la red semántica libremente."; + } + }); + }); + + DOM.sliders.forEach((s, i) => { + s.addEventListener('input', (e) => DOM.sliderVals[i].textContent = e.target.value); + }); + + document.getElementById('btn-config-api').addEventListener('click', () => { + document.getElementById('panel-api').classList.toggle('hidden'); + }); + + document.getElementById('btn-save-api').addEventListener('click', () => { + const k = document.getElementById('input-api-key').value; + if (k) { + STATE.geminiKey = k; + localStorage.setItem('NEXUS_KEY', k); + log("LLAVE API ACTUALIZADA", "success"); + document.getElementById('panel-api').classList.add('hidden'); + } + }); + + DOM.btnViz.addEventListener('click', visualize); + + document.getElementById('zoom-in').addEventListener('click', () => mmScale *= 1.2); + document.getElementById('zoom-out').addEventListener('click', () => mmScale *= 0.8); + + initFirebase(); + + \ No newline at end of file