document.querySelectorAll('a[href^="#"]').forEach((n=>{n.addEventListener("click",(function(n){n.preventDefault();const s=document.querySelector(this.getAttribute("href"));s&&s.scrollIntoView({behavior:"smooth",block:"start"})}))})),window.addEventListener("scroll",(()=>{const n=document.querySelector("header");window.scrollY>100?n.style.background="rgba(15, 15, 35, 0.98)":n.style.background="rgba(15, 15, 35, 0.95)"}));const observerOptions={threshold:.1,rootMargin:"0px 0px -50px 0px"},observer=new IntersectionObserver((n=>{n.forEach((n=>{n.isIntersecting&&n.target.classList.add("revealed")}))}),observerOptions);document.querySelectorAll(".scroll-reveal").forEach((n=>{observer.observe(n)}));const codeExamples={python:{title:"Python Example",code:'<span class="keyword">from</span> pqcrypto <span class="keyword">import</span> keygen, encrypt, decrypt\n\n<span class="comment"># Setup parameters</span>\np = <span class="number">10007</span>\na = <span class="number">5</span>\nP0 = (<span class="number">1</span>, <span class="number">0</span>)\n\n<span class="comment"># Generate keypair</span>\nprivate_k, public_Q = keygen(p, a, P0)\n\n<span class="comment"># Encrypt message</span>\nmessage = <span class="number">2024</span>\nC1, C2 = encrypt(message, public_Q, p, a, P0)\n\n<span class="comment"># Decrypt</span>\nrecovered = decrypt(C1, C2, private_k, a, p)\n<span class="keyword">print</span>(<span class="string">f"Recovered: {recovered}"</span>)'},javascript:{title:"JavaScript Example",code:'<span class="comment">// Install: npm install pqlaicrypto</span>\n<span class="keyword">const</span> { keygen, encrypt, decrypt } = <span class="keyword">require</span>(<span class="string">"pqlaicrypto"</span>);\n\n<span class="comment">// Setup parameters</span>\n<span class="keyword">const</span> p = <span class="number">10007n</span>;\n<span class="keyword">const</span> a = <span class="number">5n</span>;\n<span class="keyword">const</span> P0 = [<span class="number">1n</span>, <span class="number">0n</span>];\n\n<span class="comment">// Generate keypair</span>\n<span class="keyword">const</span> { k, Q } = keygen(p, a, P0);\nconsole.log(<span class="string">"Private k:"</span>, k.toString());\n\n<span class="comment">// Encrypt message</span>\n<span class="keyword">const</span> m = <span class="number">2024n</span>;\n<span class="keyword">const</span> { C1, C2, r } = encrypt(m, Q, k, p, a, P0);\n\n<span class="comment">// Decrypt</span>\n<span class="keyword">const</span> recovered = decrypt(C1, C2, k, r, a, p);\nconsole.log(<span class="string">"Recovered:"</span>, recovered.toString());</span>'},ruby:{title:"Ruby Example",code:'<span class="comment"># Install: gem install laicrypto</span>\n<span class="keyword">require</span> <span class="string">"laicrypto"</span>\n\n<span class="comment"># Setup parameters</span>\np = <span class="number">10007</span>\na = <span class="number">5</span>\nP0 = [<span class="number">1</span>, <span class="number">0</span>]\n\n<span class="comment"># Generate keypair</span>\nk, Q = LAI.keygen(p, a, P0)\nputs <span class="string">"Private k: #{k}"</span>\nputs <span class="string">"Public Q: #{Q.inspect}"</span>\n\n<span class="comment"># Encrypt message</span>\nmessage = <span class="number">2024</span>\nC1, C2, r = LAI.encrypt(message, Q, k, p, a, P0)\n\n<span class="comment"># Decrypt</span>\nrecovered = LAI.decrypt(C1, C2, k, r, a, p)\nputs <span class="string">"Recovered: #{recovered}"</span>'},csharp:{title:".NET C# Example",code:'<span class="comment">// Install: PQCrypto.Lai via NuGet</span>\n<span class="keyword">using</span> System;\n<span class="keyword">using</span> System.Numerics;\n<span class="keyword">using</span> PQCrypto;\n\n<span class="comment">// Setup parameters</span>\nBigInteger p = <span class="number">10007</span>;\nBigInteger a = <span class="number">5</span>;\nLaiCrypto.Point P0 = <span class="keyword">new</span> LaiCrypto.Point(<span class="number">1</span>, <span class="number">0</span>);\n\n<span class="comment">// Generate keypair</span>\n<span class="keyword">var</span> kp = LaiCrypto.KeyGen(p, a, P0);\nConsole.WriteLine(<span class="string">$"Private k: {kp.k}"</span>);\n\n<span class="comment">// Encrypt message</span>\nBigInteger message = <span class="number">2024</span>;\n<span class="keyword">var</span> ct = LaiCrypto.Encrypt(message, kp.Q, p, a, P0);\n\n<span class="comment">// Decrypt</span>\nBigInteger recovered = LaiCrypto.Decrypt(ct.C1, ct.C2, kp.k, ct.r, a, p);\nConsole.WriteLine(<span class="string">$"Recovered: {recovered}"</span>);</span>'},java:{title:"Java Example",code:'<span class="comment">// Maven: com.pelajaran.pqcrypto:laicrypto</span>\n<span class="keyword">import</span> com.pelajaran.pqcrypto.LaiCrypto;\n<span class="keyword">import</span> com.pelajaran.pqcrypto.LaiCrypto.Point;\n<span class="keyword">import</span> java.math.BigInteger;\n\n<span class="comment">// Setup parameters</span>\nBigInteger p = BigInteger.valueOf(<span class="number">10007</span>);\nBigInteger a = BigInteger.valueOf(<span class="number">5</span>);\nPoint P0 = <span class="keyword">new</span> Point(BigInteger.ONE, BigInteger.ZERO);\n\n<span class="comment">// Generate keypair</span>\nLaiCrypto.KeyPair kp = LaiCrypto.keyGen(p, a, P0);\nSystem.out.println(<span class="string">"Private k: "</span> + kp.k);\n\n<span class="comment">// Encrypt message</span>\nBigInteger message = BigInteger.valueOf(<span class="number">2024</span>);\nLaiCrypto.Ciphertext ct = LaiCrypto.encrypt(message, kp.Q, p, a, P0);\n\n<span class="comment">// Decrypt</span>\nBigInteger recovered = LaiCrypto.decrypt(ct.C1, ct.C2, kp.k, ct.r, a, p);\nSystem.out.println(<span class="string">"Recovered: "</span> + recovered);</span>'}};function showCodeExample(n){const s=document.getElementById("code-content"),e=document.getElementById("code-language");document.querySelectorAll(".language-card").forEach((n=>n.classList.remove("active"))),event.target.closest(".language-card").classList.add("active"),s.style.opacity="0",s.style.transform="translateY(10px)",setTimeout((()=>{s.innerHTML=codeExamples[n].code,e.textContent=codeExamples[n].title,s.style.opacity="1",s.style.transform="translateY(0)"}),200)}function typeWriter(n,s,e=100){let a=0;n.innerHTML="",function t(){a<s.length&&(n.innerHTML+=s.charAt(a),a++,setTimeout(t,e))}()}window.addEventListener("load",(()=>{const n=document.querySelector(".hero h1"),s=n.textContent;setTimeout((()=>{typeWriter(n,s,80)}),500);const e=document.querySelector(".language-card");e&&e.classList.add("active")})),document.addEventListener("DOMContentLoaded",(()=>{const n=document.querySelector(".code-content");n&&(n.addEventListener("mouseenter",(()=>{n.style.transform="scale(1.02)",n.style.transition="transform 0.3s ease"})),n.addEventListener("mouseleave",(()=>{n.style.transform="scale(1)"})))})),window.addEventListener("scroll",(()=>{const n=-.5*window.pageYOffset,s=document.querySelector(".animated-bg");s&&(s.style.transform=`translateY(${n}px)`)})),document.querySelectorAll(".feature-card").forEach((n=>{n.addEventListener("mouseenter",(()=>{n.style.boxShadow="0 20px 40px rgba(99, 102, 241, 0.2)",n.style.transform="translateY(-10px) scale(1.02)"})),n.addEventListener("mouseleave",(()=>{n.style.boxShadow="none",n.style.transform="translateY(0) scale(1)"}))}));