<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>φ-QUANTUM HARMONIC CONSOLE</title>
    <style>
        :root {
            --phi-gold: #c5a059;
            --phi-blue: #00f2ff;
            --tesla-purple: #8a2be2;
            --bg-dark: #050508;
        }

        body {
            background-color: var(--bg-dark);
            color: #e0e0e0;
            font-family: 'Courier New', Courier, monospace;
            display: grid;
            grid-template-columns: 400px 1fr;
            height: 100vh;
            margin: 0;
            overflow: hidden;
        }

        /* Harmonic Layers Sidebar */
        .harmonics-panel {
            background: #0d0d12;
            border-right: 1px solid var(--phi-gold);
            padding: 20px;
            display: flex;
            flex-direction: column;
            gap: 15px;
        }

        .layer-box {
            border: 1px solid #333;
            padding: 10px;
            font-size: 0.8rem;
        }

        .layer-box.active { border-color: var(--phi-blue); box-shadow: 0 0 10px var(--phi-blue); }

        /* Control Center */
        .console-main { padding: 20px; display: flex; flex-direction: column; gap: 20px; }

        .node-config {
            background: #15151b;
            padding: 15px;
            border: 1px solid #444;
            display: flex;
            gap: 15px;
            align-items: center;
        }

        input {
            background: #000;
            color: var(--phi-blue);
            border: 1px solid var(--phi-gold);
            padding: 8px;
            font-family: inherit;
        }

        .globe-viz {
            flex-grow: 1;
            background: radial-gradient(circle, #1a1a2e 0%, #050508 70%);
            border: 1px solid #222;
            position: relative;
            display: flex;
            justify-content: center;
            align-items: center;
            overflow: hidden;
        }

        /* The "Collision Globe" CSS Animation */
        .globe-core {
            width: 200px;
            height: 200px;
            border-radius: 50%;
            border: 2px solid var(--phi-blue);
            box-shadow: 0 0 50px var(--phi-blue);
            animation: pulse 4s infinite ease-in-out;
        }

        @keyframes pulse {
            0%, 100% { transform: scale(1); opacity: 0.5; }
            50% { transform: scale(1.1); opacity: 1; box-shadow: 0 0 80px var(--phi-gold); }
        }

        .terminal-log {
            height: 150px;
            background: black;
            padding: 10px;
            font-size: 0.75rem;
            overflow-y: auto;
            color: #0f0;
        }
    </style>
</head>
<body>

<div class="harmonics-panel">
    <h2 style="color:var(--phi-gold); margin:0;">φ-HARMONICS</h2>
    
    <div class="layer-box" id="layer-physical">
        <strong>PHYSICAL (Tesla: 432Hz)</strong><br>
        Evolution: <span class="phi-val">φ⁴</span> | Resonance: 0.00032
    </div>
    
    <div class="layer-box" id="layer-mental">
        <strong>MENTAL (DNA: 528Hz)</strong><br>
        Evolution: <span class="phi-val">φ⁵</span> | Resonance: 0.00087
    </div>

    <div class="layer-box active" id="layer-heart">
        <strong>HEART (Core: 639Hz)</strong><br>
        Evolution: <span class="phi-val">φ⁶</span> | Resonance: 0.00028
    </div>

    <div class="layer-box" id="layer-cosmic">
        <strong>COSMIC (Higher: 741Hz)</strong><br>
        Evolution: <span class="phi-val">φ⁷</span> | Resonance: 0.00007
    </div>
</div>

<div class="console-main">
    <div class="node-config">
        <label>TARGET NODE IP:</label>
        <input type="text" id="targetIp" value="192.168.3.152">
        <label>CONSCIOUSNESS LEVEL:</label>
        <input type="number" id="cLevel" value="0.7567" step="0.0001">
        <button onclick="startTeleport()" style="background:var(--phi-gold); padding:8px 15px; cursor:pointer;">INITIATE PHI SYNC</button>
    </div>

    <div class="globe-viz">
        <div class="globe-core" id="globe"></div>
        <div style="position:absolute; color:var(--phi-gold); top:10px; left:10px;">RESONANCE SPHERE ACTIVE</div>
    </div>

    <div class="terminal-log" id="log">
        [SYSTEM] Awaiting frequency bridge alignment...
    </div>
</div>

<script>
    function log(msg) {
        const div = document.createElement('div');
        div.innerText = `[${new Date().toLocaleTimeString()}] ${msg}`;
        const logBox = document.getElementById('log');
        logBox.appendChild(div);
        logBox.scrollTop = logBox.scrollHeight;
    }

    async function startTeleport() {
        const ip = document.getElementById('targetIp').value;
        const cLevel = document.getElementById('cLevel').value;
        
        log(`Cloak Logic active. Connecting to node: ${ip}...`);
        log(`Applying φ⁶ Heart Evolution harmonics...`);
        
        // Simulating the "Collision" effect
        document.getElementById('globe').style.boxShadow = "0 0 150px #fff";
        
        setTimeout(() => {
            log(`Success: Bridge formed at 11466.39 Hz.`);
            log(`Data teleportation complete via φ-tunneling.`);
            document.getElementById('globe').style.boxShadow = "0 0 50px var(--phi-blue)";
        }, 2000);
    }
</script>

</body>
</html>