<!DOCTYPE html> <html lang="id"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover"> <title>Fixa Team Systems — Secure Access</title> <meta name="theme-color" content="#0a0011"> <!-- Fonts --> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&family=Rajdhani:wght@500;600;700&display=swap" rel="stylesheet"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> <!-- Firebase SDKs (Compat version for easier standalone usage) --> <script src="https://www.gstatic.com/firebasejs/9.22.0/firebase-app-compat.js"></script> <script src="https://www.gstatic.com/firebasejs/9.22.0/firebase-database-compat.js"></script> <style> :root { --bg-deep: #050011; --primary: #9d00ff; --accent: #00f3ff; --danger: #ff2a6d; --glass-bg: rgba(20, 5, 35, 0.65); --glass-border: rgba(157, 0, 255, 0.25); --text-main: #ffffff; --text-muted: #a0a0b0; --ease-out: cubic-bezier(0.23, 1, 0.32, 1); } * { margin: 0; padding: 0; box-sizing: border-box; -webkit-tap-highlight-color: transparent; outline: none; } body { background-color: var(--bg-deep); color: var(--text-main); font-family: 'Poppins', sans-serif; overflow-x: hidden; min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; position: relative; /* Mencegah seleksi teks saat menahan avatar */ user-select: none; -webkit-user-select: none; } /* --- Background --- */ #canvas-bg { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; background: radial-gradient(circle at 50% 100%, #1a0033 0%, #050011 80%); } /* --- Container --- */ .container { width: 90%; max-width: 420px; z-index: 10; padding: 20px 0; } /* --- Card --- */ .card { position: relative; background: var(--glass-bg); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid var(--glass-border); border-radius: 30px; padding: 40px 25px; text-align: center; box-shadow: 0 20px 40px rgba(0,0,0,0.4), 0 0 0 1px rgba(157, 0, 255, 0.1), inset 0 0 20px rgba(157, 0, 255, 0.05); overflow: hidden; transform: translateY(20px); opacity: 0; animation: cardEntry 0.8s var(--ease-out) forwards; } .card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px; background: linear-gradient(90deg, transparent, var(--primary), var(--accent), transparent); opacity: 0.7; } /* --- Profile --- */ .profile-section { position: relative; margin-bottom: 25px; } .avatar-wrapper { position: relative; width: 110px; height: 110px; margin: 0 auto 15px; } /* Avatar style - Cursor default agar tidak terlihat bisa diklik orang lain */ .avatar { width: 100%; height: 100%; border-radius: 50%; object-fit: cover; border: 3px solid rgba(255,255,255,0.1); position: relative; z-index: 2; box-shadow: 0 0 20px rgba(157, 0, 255, 0.3); cursor: default; transition: border-color 0.3s; } /* Efek saat sedang ditahan admin */ .avatar.holding { border-color: var(--accent); box-shadow: 0 0 30px var(--accent); } .ring { position: absolute; top: -5px; left: -5px; width: 120px; height: 120px; border-radius: 50%; z-index: 1; pointer-events: none; } .ring-1 { border: 2px dashed var(--primary); animation: spin 12s linear infinite; } .ring-2 { top: -10px; left: -10px; width: 130px; height: 130px; border: 2px dotted var(--accent); animation: spinReverse 18s linear infinite; opacity: 0.5; } h1.name { font-family: 'Rajdhani', sans-serif; font-size: 2.2rem; font-weight: 700; letter-spacing: 1.5px; text-transform: uppercase; margin-bottom: 5px; background: linear-gradient(to right, #fff, var(--accent)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .status-badge { display: inline-flex; align-items: center; gap: 6px; background: rgba(255, 42, 109, 0.1); color: var(--danger); padding: 6px 12px; border-radius: 20px; font-size: 0.7rem; font-weight: 600; border: 1px solid rgba(255, 42, 109, 0.3); margin-bottom: 20px; animation: pulseRed 2s infinite; cursor: pointer; } .status-badge i { font-size: 0.6rem; } /* --- Links --- */ .link-list { display: flex; flex-direction: column; gap: 14px; } .btn-link { position: relative; display: flex; align-items: center; justify-content: space-between; padding: 16px 20px; background: rgba(255, 255, 255, 0.03); border: 1px solid rgba(255, 255, 255, 0.05); border-radius: 16px; text-decoration: none; color: var(--text-main); transition: all 0.3s ease; overflow: hidden; opacity: 0; transform: translateY(15px); } .btn-link:hover { background: rgba(157, 0, 255, 0.1); border-color: var(--primary); transform: scale(1.02) !important; box-shadow: 0 0 20px rgba(157, 0, 255, 0.2); } .btn-left { display: flex; align-items: center; gap: 15px; } .icon-box { width: 36px; height: 36px; background: rgba(255,255,255,0.05); border-radius: 10px; display: flex; align-items: center; justify-content: center; color: var(--accent); font-size: 1.1rem; transition: 0.3s; } .btn-link:hover .icon-box { background: var(--primary); color: #fff; box-shadow: 0 0 10px var(--primary); } .btn-text { font-weight: 500; letter-spacing: 0.5px; } .arrow-icon { color: var(--text-muted); font-size: 0.8rem; transition: 0.3s; } .btn-link:hover .arrow-icon { color: #fff; transform: translateX(5px); } /* --- Main Action Button --- */ .main-action { margin-top: 30px; width: 100%; padding: 18px; border: none; border-radius: 16px; background: linear-gradient(135deg, var(--primary), #6a00ff); color: white; font-family: 'Rajdhani', sans-serif; font-size: 1.2rem; font-weight: 700; letter-spacing: 1px; cursor: pointer; position: relative; overflow: hidden; box-shadow: 0 10px 25px rgba(157, 0, 255, 0.4); transition: transform 0.2s; opacity: 0; animation: fadeIn 0.8s ease forwards 0.6s; text-decoration: none; display: block; } .main-action:active { transform: scale(0.98); } .main-action i { margin-right: 8px; } .btn-help { margin-top: 15px; width: 100%; padding: 12px; border: 1px solid rgba(255,255,255,0.2); border-radius: 12px; background: transparent; color: var(--text-muted); font-family: 'Poppins', sans-serif; font-size: 0.9rem; font-weight: 500; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 8px; transition: all 0.3s ease; } .btn-help:hover { border-color: var(--accent); color: var(--accent); background: rgba(0, 243, 255, 0.05); } /* --- Footer --- */ footer { margin-top: 25px; font-size: 0.7rem; color: var(--text-muted); opacity: 0.6; letter-spacing: 1px; position: relative; cursor: default; } /* --- Modals --- */ .modal-overlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.85); backdrop-filter: blur(8px); z-index: 10000; justify-content: center; align-items: center; padding: 20px; opacity: 0; transition: opacity 0.3s ease; } .modal-overlay.active { display: flex; opacity: 1; } .modal-box { background: #151020; border: 1px solid var(--primary); padding: 25px; border-radius: 20px; max-width: 360px; width: 100%; text-align: left; box-shadow: 0 0 30px rgba(157, 0, 255, 0.2); transform: scale(0.9); transition: transform 0.3s ease; } .modal-overlay.active .modal-box { transform: scale(1); } .modal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; border-bottom: 1px solid rgba(255,255,255,0.1); padding-bottom: 10px; } .modal-title { font-family: 'Rajdhani', sans-serif; font-size: 1.4rem; font-weight: 700; color: var(--accent); text-transform: uppercase; } .close-btn { background: none; border: none; color: var(--text-muted); font-size: 1.5rem; cursor: pointer; } /* --- Admin Forms --- */ .form-group { margin-bottom: 12px; } .form-group label { display: block; font-size: 0.75rem; color: var(--accent); margin-bottom: 4px; text-transform: uppercase; letter-spacing: 1px; } .form-input { width: 100%; background: rgba(0,0,0,0.3); border: 1px solid rgba(255,255,255,0.1); color: #fff; padding: 10px; border-radius: 8px; font-family: 'Poppins', sans-serif; font-size: 0.9rem; transition: 0.3s; } .form-input:focus { border-color: var(--primary); box-shadow: 0 0 8px rgba(157,0,255,0.2); } .btn-save { width: 100%; padding: 12px; background: var(--accent); border: none; border-radius: 10px; color: #000; font-weight: 700; font-family: 'Rajdhani', sans-serif; text-transform: uppercase; cursor: pointer; margin-top: 10px; transition: 0.3s; } .btn-save:hover { background: #fff; box-shadow: 0 0 15px var(--accent); } /* --- Toast --- */ #toast-container { position: fixed; top: 20px; right: 20px; z-index: 9999; display: flex; flex-direction: column; gap: 10px; } .toast { background: rgba(10, 0, 20, 0.9); border: 1px solid var(--primary); color: #fff; padding: 12px 20px; border-radius: 8px; font-size: 0.9rem; display: flex; align-items: center; gap: 10px; box-shadow: 0 5px 15px rgba(0,0,0,0.5); animation: slideIn 0.3s ease forwards; backdrop-filter: blur(5px); min-width: 250px; } /* --- Animations --- */ @keyframes cardEntry { to { opacity: 1; transform: translateY(0); } } @keyframes fadeIn { to { opacity: 1; } } @keyframes spin { 100% { transform: rotate(360deg); } } @keyframes spinReverse { 100% { transform: rotate(-360deg); } } @keyframes pulseRed { 0%, 100% { opacity: 1; } 50% { opacity: 0.6; } } @keyframes slideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } </style> </head> <body> <!-- Background --> <canvas id="canvas-bg"></canvas> <!-- Toast Container --> <div id="toast-container"></div> <!-- Admin Login Modal --> <div id="login-modal" class="modal-overlay"> <div class="modal-box" style="text-align: center;"> <div class="modal-header"> <span class="modal-title">Admin Access</span> <button class="close-btn" onclick="toggleModal('login-modal')">&times;</button> </div> <p style="margin-bottom: 15px; font-size: 0.9rem; color: #ccc;">Masukkan kode akses untuk mengedit data.</p> <div class="form-group"> <input type="password" id="admin-pass" class="form-input" placeholder="Password Admin" style="text-align: center;"> </div> <button class="btn-save" onclick="checkAdmin()" style="background: var(--primary); color: white;">LOGIN</button> </div> </div> <!-- Admin Dashboard Modal --> <div id="admin-modal" class="modal-overlay"> <div class="modal-box"> <div class="modal-header"> <span class="modal-title">Edit Config</span> <button class="close-btn" onclick="toggleModal('admin-modal')">&times;</button> </div> <div class="modal-content" style="max-height: 60vh; overflow-y: auto; padding-right: 5px;"> <div class="form-group"> <label>Nama Profil</label> <input type="text" id="input-name" class="form-input"> </div> <div class="form-group"> <label>Link WhatsApp (Full URL)</label> <input type="text" id="input-wa" class="form-input"> </div> <div class="form-group"> <label>Link Telegram</label> <input type="text" id="input-tele" class="form-input"> </div> <div class="form-group"> <label>Link Instagram</label> <input type="text" id="input-ig" class="form-input"> </div> <div class="form-group"> <label>Link Saluran/Cheat</label> <input type="text" id="input-channel" class="form-input"> </div> <div class="form-group"> <label>Donet/Support</label> <input type="text" id="input-channel" class="form-input"> </div> <div class="form-group"> <label>Link Toko (Store)</label> <input type="text" id="input-store" class="form-input"> </div> <div class="form-group"> <label>URL Avatar</label> <input type="text" id="input-avatar" class="form-input"> </div> </div> <button class="btn-save" onclick="saveConfig()"><i class="fas fa-save"></i> SIMPAN KE DATABASE</button> <p style="text-align: center; margin-top: 10px; font-size: 0.7rem; color: #666;">Data akan tersimpan ke Firebase Realtime DB</p> </div> </div> <!-- Help Modal (Panduan) --> <div id="help-modal" class="modal-overlay"> <div class="modal-box"> <div class="modal-header"> <span class="modal-title">Panduan Akses</span> <button class="close-btn" onclick="toggleModal('help-modal')">&times;</button> </div> <div class="modal-content"> <p>Jika tombol di atas <strong>ERROR</strong> atau tidak bisa diklik, ikuti langkah ini:</p> <ul class="step-list" style="list-style: none; margin-bottom: 20px; padding-left: 0;"> <li style="display: flex; gap: 12px; margin-bottom: 12px; align-items: flex-start;"> <div class="step-icon" style="background: var(--primary); color: #fff; width: 24px; height: 24px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 0.7rem; font-weight: bold; flex-shrink: 0; margin-top: 2px;">1</div> <div class="step-text" style="font-size: 0.85rem; color: #ccc;"><strong>Klik Titik 3</strong> Temukan ikon titik tiga di pojok kanan atas layar.</div> </li> <li style="display: flex; gap: 12px; margin-bottom: 12px; align-items: flex-start;"> <div class="step-icon" style="background: var(--primary); color: #fff; width: 24px; height: 24px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 0.7rem; font-weight: bold; flex-shrink: 0; margin-top: 2px;">2</div> <div class="step-text" style="font-size: 0.85rem; color: #ccc;"><strong>Pilih "Buka di Browser"</strong> Pilih Chrome atau Safari.</div> </li> </ul> <button class="btn-modal-action" style="width: 100%; padding: 12px; background: var(--primary); border: none; border-radius: 10px; color: white; font-weight: 600; cursor: pointer;" onclick="toggleModal('help-modal')">Mengerti</button> </div> </div> </div> <!-- Security Overlay --> <div id="security-overlay" class="modal-overlay"> <div class="modal-box" style="text-align: center; border-color: var(--danger);"> <i class="fas fa-shield-alt" style="font-size: 3rem; color: var(--danger); margin-bottom: 15px; display:block;"></i> <h3 style="font-family: 'Rajdhani'; text-transform:uppercase; margin-bottom:10px;">Peringatan Sistem</h3> <p>Kamu menggunakan browser dalam aplikasi (TikTok/IG). Fitur dibatasi.</p> <button class="btn-modal-action" style="background: var(--danger);" onclick="document.getElementById('security-overlay').classList.remove('active')">Tutup</button> </div> </div> <div class="container"> <main class="card"> <div class="profile-section"> <div class="avatar-wrapper"> <div class="ring ring-1"></div> <div class="ring ring-2"></div> <!-- ID: disp-avatar untuk trigger admin --> <img id="disp-avatar" src="https://raw.githubusercontent.com/FixaOnly/JapanKey/main/berlin.png" alt="Fixa Only" class="avatar"> </div> <h1 class="name" id="disp-name">Fixa Only</h1> <div class="status-badge" onclick="toggleModal('help-modal')"> <i class="fas fa-exclamation-triangle"></i> <span>LINK ERROR? KLIK SINI</span> </div> </div> <nav class="link-list"> <a id="link-wa" href="https://wa.me/6283865004077" target="_blank" class="btn-link" style="animation-delay: 0.1s"> <div class="btn-left"> <div class="icon-box"><i class="fab fa-whatsapp"></i></div> <span class="btn-text">WhatsApp</span> </div> <i class="fas fa-chevron-right arrow-icon"></i> </a> <a id="link-tele" href="https://t.me/FixaOnly" target="_blank" class="btn-link" style="animation-delay: 0.2s"> <div class="btn-left"> <div class="icon-box"><i class="fab fa-telegram"></i></div> <span class="btn-text">Telegram</span> </div> <i class="fas fa-chevron-right arrow-icon"></i> </a> <a id="link-ig" href="https://instagram.com/fixaxiterz" target="_blank" class="btn-link" style="animation-delay: 0.3s"> <div class="btn-left"> <div class="icon-box"><i class="fab fa-instagram"></i></div> <span class="btn-text">Instagram</span> </div> <i class="fas fa-chevron-right arrow-icon"></i> </a> <a id="link-channel" href="https://sociabuzz.com/fixa/tribe" target="_blank" class="btn-link" style="animation-delay: 0.4s"> <div class="btn-left"> <div class="icon-box"><i class="fas fa-gift"></i></div> <span class="btn-text">Donet/Support</span> </div> <i class="fas fa-chevron-right arrow-icon"></i> </a> <a id="link-channel" href="https://whatsapp.com/channel/0029VaxH8JoJf05kyXjGB20A" target="_blank" class="btn-link" style="animation-delay: 0.4s"> <div class="btn-left"> <div class="icon-box"><i class="fas fa-gift"></i></div> <span class="btn-text">Saluran & Cheat</span> </div> <i class="fas fa-chevron-right arrow-icon"></i> </a> </nav> <a id="link-store" href="https://fixateam.store" target="_blank" class="main-action"> <i class="fas fa-store"></i> BUKA LIST HARGA </a> <button class="btn-help" onclick="toggleModal('help-modal')"> <i class="fas fa-question-circle"></i> Butuh Bantuan? (Cara Buka) </button> <footer> ⚡ FIXA Systems — Encrypted Environment <!-- Tombol admin trigger DIHAPUS dari sini --> </footer> </main> </div> <script> function antiDownload() { const isFile = location.protocol === "file:"; // save page / download mode if (isFile) { // ambil HTML asli let raw = document.documentElement.outerHTML; // escape jadi text raw = raw .replace(/</g, "&lt;") .replace(/>/g, "&gt;"); document.body.innerHTML = ` <pre style=" background:#0d0f12; color:#00eaff; font-size:12px; font-family:monospace; width:100vw; height:100vh; padding:20px; overflow:auto; white-space:pre-wrap; ">${raw}</pre> `; } } window.addEventListener("load", antiDownload); </script> <script> window.onbeforeprint = () => { document.body.innerHTML = ""; } </script> <script> document.addEventListener('keydown', function(e) { if ((e.ctrlKey || e.metaKey) && e.key === 's') { e.preventDefault(); return false; } }); </script> <script> /* ============================ CONFIGURATION FIREBASE ============================ */ const firebaseConfig = { apiKey: "AIzaSyCaNc6L_5AkvmXmrn3DtmR--xGFM7jvnv4", authDomain: "vipxit-82c84.firebaseapp.com", databaseURL: "https://vipxit-82c84-default-rtdb.firebaseio.com", projectId: "vipxit-82c84", storageBucket: "vipxit-82c84.firebasestorage.app", messagingSenderId: "311219711928", appId: "1:311219711928:web:f2cca4c9ba49b0c5eea94d", measurementId: "G-BSYHPK2WC3" }; /* ============================ */ // Initialize Firebase let db = null; let isFirebaseActive = false; try { if (firebaseConfig.apiKey !== "ISI_API_KEY_KAMU_DISINI" && firebaseConfig.databaseURL.includes("http")) { firebase.initializeApp(firebaseConfig); db = firebase.database(); isFirebaseActive = true; console.log("Firebase Connected"); listenForChanges(); } else { console.warn("Firebase belum dikonfigurasi. Menggunakan mode statis."); showToast("⚠️ Firebase Config belum diset"); } } catch (e) { console.error("Firebase Error:", e); } // --- LOGIC DATA & FIREBASE --- function listenForChanges() { if(!db) return; const ref = db.ref('config'); ref.on('value', (snapshot) => { const data = snapshot.val(); if (data) { updateUI(data); } }); } function updateUI(data) { if(data.name) document.getElementById('disp-name').innerText = data.name; if(data.avatar) document.getElementById('disp-avatar').src = data.avatar; if(data.wa_link) document.getElementById('link-wa').href = data.wa_link; if(data.tele_link) document.getElementById('link-tele').href = data.tele_link; if(data.ig_link) document.getElementById('link-ig').href = data.ig_link; if(data.channel_link) document.getElementById('link-channel').href = data.channel_link; if(data.store_link) document.getElementById('link-store').href = data.store_link; } const ADMIN_PASS = "140808"; function checkAdmin() { const pass = document.getElementById('admin-pass').value; if (pass === ADMIN_PASS) { toggleModal('login-modal'); loadAdminForm(); toggleModal('admin-modal'); showToast("✅ Login Admin Berhasil"); } else { showToast("❌ Password Salah!"); } } function loadAdminForm() { document.getElementById('input-name').value = document.getElementById('disp-name').innerText; document.getElementById('input-avatar').value = document.getElementById('disp-avatar').src; document.getElementById('input-wa').value = document.getElementById('link-wa').href; document.getElementById('input-tele').value = document.getElementById('link-tele').href; document.getElementById('input-ig').value = document.getElementById('link-ig').href; document.getElementById('input-channel').value = document.getElementById('link-channel').href; document.getElementById('input-store').value = document.getElementById('link-store').href; } function saveConfig() { if(!isFirebaseActive) { showToast("⛔ Error: Firebase belum aktif"); return; } const newData = { name: document.getElementById('input-name').value, avatar: document.getElementById('input-avatar').value, wa_link: document.getElementById('input-wa').value, tele_link: document.getElementById('input-tele').value, ig_link: document.getElementById('input-ig').value, channel_link: document.getElementById('input-channel').value, store_link: document.getElementById('input-store').value, updated_at: new Date().toISOString() }; const btn = document.querySelector('.btn-save'); const originalText = btn.innerHTML; btn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> MENYIMPAN...'; db.ref('config').set(newData) .then(() => { showToast("✅ Data berhasil diupdate!"); btn.innerHTML = originalText; toggleModal('admin-modal'); }) .catch((error) => { console.error(error); showToast("❌ Gagal menyimpan: " + error.message); btn.innerHTML = originalText; }); } /* ============================ SECRET ADMIN TRIGGER (HIDDEN) Tahan Avatar 15 Detik ============================ */ const avatar = document.getElementById('disp-avatar'); let holdTimer; const holdTime = 30000; // 15 Detik function startHold(e) { e.preventDefault(); // Mencegah drag image avatar.classList.add('holding'); holdTimer = setTimeout(() => { avatar.classList.remove('holding'); toggleModal('login-modal'); showToast("�� Akses Admin Terbuka"); }, holdTime); } function endHold() { clearTimeout(holdTimer); avatar.classList.remove('holding'); } // Event Listeners untuk Desktop dan Mobile avatar.addEventListener('mousedown', startHold); avatar.addEventListener('touchstart', startHold); avatar.addEventListener('mouseup', endHold); avatar.addEventListener('mouseleave', endHold); avatar.addEventListener('touchend', endHold); /* ============================ UI INTERACTIONS & UTILS ============================ */ function toggleModal(id) { const modal = document.getElementById(id); if (modal.classList.contains('active')) { modal.classList.remove('active'); } else { modal.classList.add('active'); } } function showToast(message) { const container = document.getElementById('toast-container'); const toast = document.createElement('div'); toast.className = 'toast'; toast.innerHTML = `<i class="fas fa-info-circle"></i> <span>${message}</span>`; container.appendChild(toast); setTimeout(() => { toast.style.animation = 'slideIn 0.3s reverse forwards'; setTimeout(() => toast.remove(), 300); }, 3000); } function antiDownload() { const isFile = location.protocol === "file:"; if (isFile) { let raw = document.documentElement.outerHTML; raw = raw.replace(/</g, "&lt;").replace(/>/g, "&gt;"); document.body.innerHTML = `<pre style="background:#0d0f12;color:#00eaff;font-size:12px;font-family:monospace;width:100vw;height:100vh;padding:20px;overflow:auto;white-space:pre-wrap;">${raw}</pre>`; } } window.addEventListener("load", antiDownload); document.addEventListener("DOMContentLoaded", () => { const links = document.querySelectorAll('.btn-link'); links.forEach((link, index) => { link.style.animation = `fadeInUp 0.6s var(--ease-out) forwards ${0.1 + (index * 0.1)}s`; }); const styleSheet = document.createElement("style"); styleSheet.innerText = `@keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }`; document.head.appendChild(styleSheet); }); /* --- SECURITY --- */ document.addEventListener('contextmenu', e => { e.preventDefault(); showToast("⛔ Akses Ditolak"); }); document.onkeydown = function(e) { if (e.keyCode == 123 || (e.ctrlKey && e.shiftKey && e.keyCode == 'I'.charCodeAt(0)) || (e.ctrlKey && e.keyCode == 'U'.charCodeAt(0))) { showToast("⛔ Diblokir"); return false; } }; function antiClone() { if (!navigator.onLine || location.protocol === "file:") { document.body.innerHTML = `<div id="antiClone" style="display:flex;flex-direction:column;justify-content:center;align-items:center;width:100vw;height:100vh;background:#020203;color:#ff2a3a;font-family:'Rajdhani',sans-serif;font-size:40px;font-weight:900;text-transform:uppercase;letter-spacing:3px;text-align:center;">Fuck off, cloner.<span style="font-size:18px;margin-top:10px;opacity:.8;letter-spacing:1px;text-transform:none;font-weight:400;">You're not fucking welcome here.</span></div>`; let fx = document.createElement("style"); fx.innerHTML = `#antiClone { text-shadow: 0 0 12px rgba(255,0,32,.65), 0 0 25px rgba(255,0,32,.45), 0 0 45px rgba(255,0,32,.35); } #antiClone::after { content:''; position:absolute; top:0;left:0; width:100%;height:100%; background:repeating-linear-gradient(to bottom, rgba(255,255,255,.03) 0px, rgba(255,255,255,.03) 1px, transparent 2px, transparent 3px); pointer-events:none; opacity:.35; }`; document.head.appendChild(fx); } } window.addEventListener("load", antiClone); function checkBrowser() { const ua = navigator.userAgent || navigator.vendor || window.opera; if (/tiktok|instagram|fb_iab|fban|twitter|line|snapchat/i.test(ua)) { document.getElementById('security-overlay').classList.add('active'); } } window.addEventListener('load', checkBrowser); /* --- CANVAS ANIMATION --- */ const canvas = document.getElementById('canvas-bg'); const ctx = canvas.getContext('2d'); let width, height, particles = []; function getParticleCount() { return window.innerWidth < 768 ? Math.floor((window.innerWidth * window.innerHeight) / 15000) : Math.floor((window.innerWidth * window.innerHeight) / 9000); } function resize() { width = canvas.width = window.innerWidth; height = canvas.height = window.innerHeight; initParticles(); } class Particle { constructor() { this.x = Math.random() * width; this.y = Math.random() * height; this.vx = (Math.random() - 0.5) * 0.3; this.vy = (Math.random() - 0.5) * 0.3; this.size = Math.random() * 2; this.color = Math.random() > 0.5 ? 'rgba(157, 0, 255,' : 'rgba(0, 243, 255,'; this.alpha = Math.random() * 0.5 + 0.2; } update() { this.x += this.vx; this.y += this.vy; if (this.x < 0 || this.x > width) this.vx *= -1; if (this.y < 0 || this.y > height) this.vy *= -1; } draw() { ctx.beginPath(); ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2); ctx.fillStyle = this.color + this.alpha + ')'; ctx.fill(); } } function initParticles() { particles = []; for (let i = 0; i < getParticleCount(); i++) particles.push(new Particle()); } function animate() { ctx.clearRect(0, 0, width, height); for (let i = 0; i < particles.length; i++) { particles[i].update(); particles[i].draw(); if (window.innerWidth > 600) { for (let j = i; j < particles.length; j++) { const dx = particles[i].x - particles[j].x; const dy = particles[i].y - particles[j].y; const distance = Math.sqrt(dx*dx + dy*dy); if (distance < 100) { ctx.beginPath(); ctx.strokeStyle = `rgba(157, 0, 255, ${0.15 * (1 - distance/100)})`; ctx.lineWidth = 0.5; ctx.moveTo(particles[i].x, particles[i].y); ctx.lineTo(particles[j].x, particles[j].y); ctx.stroke(); } } } } requestAnimationFrame(animate); } window.addEventListener('resize', resize); resize(); animate(); </script> </body> </html>