<!DOCTYPE html>
<html lang="id"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>META AI SUPER PREMIUM V37 - MIABLOG.WEB.ID</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js"></script>
<style>
*{box-sizing:border-box} body{margin:0;background:linear-gradient(135deg,#0f0f0f,#1a1a2e);font-family:Inter,system-ui,sans-serif;min-height:100vh}
.wrapper{max-width:820px;margin:0 auto;min-height:100vh;background:#fff;display:flex;flex-direction:column;box-shadow:0 0 50px rgba(0,0,0,.5);border-radius:0 0 16px 16px;overflow:hidden}
/* META AI SUPER PREMIUM HEADER - FIX DOUBLE BUKA */
.header-premium{
background:linear-gradient(135deg,#0f0c29 0%,#302b63 35%,#24243e 100%);
color:#fff;padding:18px 18px;display:flex;align-items:center;justify-content:space-between;gap:14px;
position:sticky;top:0;z-index:10000;box-shadow:0 8px 32px rgba(0,0,0,.4);border-bottom:3px solid #ffd700;min-height:80px;
}
.header-left{display:flex;align-items:center;gap:14px;flex:1;min-width:0}
.avatar-premium{width:52px;height:52px;border-radius:14px;background:linear-gradient(135deg,#ffd700,#ffb700);color:#000;display:flex;align-items:center;justify-content:center;font-weight:900;font-size:22px;flex-shrink:0;box-shadow:0 4px 16px rgba(255,215,0,.4);border:2px solid #fff}
.header-text{flex:1;min-width:0}
.header-text b{font-size:16px;display:block;line-height:1.2;letter-spacing:.5px;background:linear-gradient(90deg,#ffd700,#fff);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:900}
.header-text span{font-size:11px;display:block;opacity:.9;margin-top:4px;line-height:1.3;color:#e0e0e0}
.btn-premium{
background:linear-gradient(135deg,#ffd700,#ffb700)!important;color:#000!important;border:2px solid #ffd700!important;
padding:12px 22px!important;border-radius:30px!important;font-weight:900!important;font-size:13px!important;cursor:pointer!important;
min-width:110px!important;box-shadow:0 4px 16px rgba(255,215,0,.4)!important;transition:.3s!important;letter-spacing:.5px!important;
display:flex!important;align-items:center!important;justify-content:center!important;gap:6px!important;
}
.btn-premium:hover{transform:translateY(-2px) scale(1.03);box-shadow:0 8px 24px rgba(255,215,0,.6)!important}
.btn-premium.tutup{background:#fff!important;color:#302b63!important;border:2px solid #fff!important;box-shadow:0 4px 16px rgba(255,255,255,.3)!important}
.setup{margin:0;padding:0;background:#fff;border:none;border-bottom:2px solid #e8eaf6;font-size:12px;overflow:hidden;position:relative;z-index:9}
.setup-info{padding:12px 16px;background:linear-gradient(90deg,#f8f9ff,#e8f0fe);border-bottom:1px solid #d0d8f0;display:flex;justify-content:space-between;align-items:center;gap:12px}
.setup-info b{color:#302b63;font-size:12px;letter-spacing:.3px}
.setup-info small{font-size:10px;color:#5f6368}
.setup-body{padding:14px;max-height:5000px;overflow:hidden;transition:max-height .5s cubic-bezier(.4,0,.2,1), padding .3s ease;}
.setup-body.collapsed{max-height:0!important;padding:0 14px!important;overflow:hidden!important}
.key-group{border:1.5px solid #e8eaf6;border-radius:12px;padding:12px;margin:10px 0;background:linear-gradient(135deg,#fafbff,#f5f7ff)}
.key-group b{color:#302b63;font-size:12px}
.key-group textarea{width:100%;min-height:62px;padding:10px;border:1.5px solid #d0d8f0;border-radius:10px;font-family:monospace;font-size:11px;margin:7px 0;background:#fff;transition:.2s}
.key-group textarea:focus{border-color:#302b63;box-shadow:0 0 0 3px rgba(48,43,99,.1);outline:none}
.key-group input{width:100%;padding:10px;border:1.5px solid #d0d8f0;border-radius:10px;font-family:monospace;font-size:11px;margin:7px 0;background:#fff}
#chatBox{flex:1;overflow-y:auto;padding:16px;background:linear-gradient(180deg,#f8f9ff 0%,#f0f2f5 100%);display:flex;flex-direction:column;gap:14px;min-height:380px;max-height:68vh}
.msg-user{align-self:flex-end;background:linear-gradient(135deg,#302b63,#24243e);color:#fff;padding:12px 16px;border-radius:20px 20px 4px 20px;max-width:78%;font-size:14px;word-break:break-word;white-space:pre-wrap;box-shadow:0 4px 12px rgba(48,43,99,.25)}
.msg-ai{align-self:flex-start;background:#fff;padding:16px 18px;border-radius:18px 18px 18px 4px;max-width:96%;font-size:14px;box-shadow:0 4px 20px rgba(0,0,0,.08);line-height:1.75;word-break:break-word;white-space:normal;border:1.5px solid #eef2ff}
.formula-box{background:linear-gradient(135deg,#f8f9ff 0%,#e8f0fe 100%);border:2px solid #302b63;border-radius:14px;padding:16px;margin:14px 0;text-align:center;box-shadow:0 4px 12px rgba(48,43,99,.15)}
.formula-label{font-size:10px;font-weight:900;color:#302b63;letter-spacing:1px;margin-bottom:8px;text-transform:uppercase}
.table-pro-wrapper{width:100%;overflow-x:auto;margin:14px 0;border-radius:12px;box-shadow:0 2px 10px rgba(0,0,0,.08);border:1px solid #e8eaf6}
.table-plain{width:100%;border-collapse:collapse;font-size:13px;min-width:380px;margin:0!important;background:#fff}
.table-plain thead th{background:linear-gradient(135deg,#302b63 0%,#24243e 100%)!important;color:#ffd700!important;padding:12px 14px!important;text-align:left!important;font-weight:800!important;font-size:12px!important;white-space:nowrap!important;border:none!important}
.table-plain tbody td{padding:10px 14px!important;border:none!important;border-bottom:1px solid #eef2f7!important;background:#fff!important;vertical-align:top!important;font-size:13px!important}
.table-plain tbody tr:nth-child(even) td{background:#f8f9ff!important}
.table-plain tbody tr:hover td{background:#e8f0fe!important}
.input-area{padding:12px 14px;display:flex;gap:10px;border-top:2px solid #eef2ff;background:#fff;position:sticky;bottom:0}
.input-area select{padding:10px 12px;border:1.5px solid #e8eaf6;background:#f8f9ff;border-radius:24px;font-size:11px;font-weight:800;max-width:130px;color:#302b63}
.input-area input{flex:1;padding:12px 18px;border:1.5px solid #e8eaf6;background:#f8f9ff;border-radius:24px;outline:none;font-size:14px;transition:.2s}
.input-area input:focus{border-color:#302b63;background:#fff;box-shadow:0 0 0 3px rgba(48,43,99,.1)}
.input-area button{background:linear-gradient(135deg,#302b63,#24243e);color:#ffd700;border:none;width:42px;height:42px;border-radius:50%;font-weight:900;cursor:pointer;flex-shrink:0;box-shadow:0 4px 12px rgba(48,43,99,.3);transition:.2s;font-size:16px}
.input-area button:hover{transform:scale(1.05)}
.perm{padding:12px 14px;background:linear-gradient(90deg,#f8f9ff,#f0f2f5);font-size:11px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;align-items:center;border-top:1px solid #eef2ff}
.perm button{border:none;padding:8px 14px;border-radius:20px;font-weight:800;font-size:11px;cursor:pointer;transition:.2s}
.code-block-wrapper{margin:14px 0;border-radius:12px;overflow:hidden;border:1.5px solid #1e1e1e;background:#0d1117;box-shadow:0 6px 20px rgba(0,0,0,.2);position:relative;}
.code-header{display:flex;align-items:center;justify-content:space-between;background:linear-gradient(90deg,#161b22 0%,#1f2937 100%);padding:10px 14px;border-bottom:1px solid #30363d;gap:8px;}
.code-lang{display:flex;align-items:center;gap:8px;font-weight:800;font-size:12px;color:#e6edf3;text-transform:uppercase;letter-spacing:.5px;}
.code-lang .dot{width:10px;height:10px;border-radius:50%;display:inline-block;box-shadow:0 0 6px currentColor}
.code-actions{display:flex;gap:6px}
.btn-code{border:none;padding:7px 13px;border-radius:20px;font-weight:800;font-size:11px;cursor:pointer;display:flex;align-items:center;gap:5px;transition:.2s;letter-spacing:.3px;}
.btn-copy{background:#238636;color:#fff;} .btn-copy:hover{background:#2ea043;transform:translateY(-1px)} .btn-copy.copied{background:#1f883d}
.btn-download{background:#1f6feb;color:#fff;} .btn-download:hover{background:#388bfd;transform:translateY(-1px)}
.code-block-wrapper pre{margin:0;padding:16px 16px;overflow-x:auto;background:#0d1117;color:#e6edf3;font-family:'JetBrains Mono','Fira Code',Consolas,monospace;font-size:13px;line-height:1.6;max-height:520px}
.code-block-wrapper code{white-space:pre;word-break:normal}
.inline-code{background:#eef2ff;color:#302b63;padding:3px 7px;border-radius:7px;font-family:monospace;font-size:12px;font-weight:700;border:1px solid #d0d8f0}
.gscript-status{display:flex;align-items:center;gap:10px;padding:10px 14px;background:linear-gradient(90deg,#fff8e1,#fff3c4);border:1.5px solid #ffd700;border-radius:12px;margin:8px 0;font-size:11px;font-weight:700;color:#5d4037}
.gscript-dot{width:9px;height:9px;border-radius:50%;background:#4caf50;box-shadow:0 0 8px #4caf50;animation:blink 1.5s infinite}
@keyframes blink{0%,100%{opacity:1}50%{opacity:.3}}
.premium-badge{background:linear-gradient(135deg,#ffd700,#ffb700);color:#000;padding:3px 8px;border-radius:8px;font-size:9px;font-weight:900;letter-spacing:.8px;margin-left:6px}
</style></head><body>
<div class="wrapper">
<!-- META AI SUPER PREMIUM HEADER - 1 TOMBOL ONLY -->
<div class="header-premium" id="headerSuperJelas">
<div class="header-left">
<div class="avatar-premium">M</div>
<div class="header-text">
<b id="headerTitle">META AI SUPER PREMIUM <span class="premium-badge">V37 PRO</span></b>
<span id="keyStatus">GScript Permanen • Code Wrapper Salin+Download • Premium Edition</span>
</div>
</div>
<button class="btn-premium" id="btnHeaderToggle" onclick="toggleSetup()">✨ BUKA</button>
</div>
<div class="setup" id="setupPanel">
<div class="setup-info">
<div>
<b>⚙️ PENGATURAN SUPER PREMIUM</b><br>
<small>Klik tombol emas di header untuk buka/tutup • Penyimpanan permanen aktif</small>
</div>
<div style="font-size:20px">👑</div>
</div>
<div class="setup-body" id="setupBody">
<div class="gscript-status" id="gscriptStatus">
<span class="gscript-dot"></span>
<span id="gscriptText">Menghubungkan ke Google Script V37...</span>
<span id="gscriptCount" style="margin-left:auto;background:#fff;padding:4px 10px;border-radius:14px;border:1.5px solid #ffd700;font-weight:900">0 chat</span>
</div>
<div class="key-group">
<b>🌐 Google Script URL - Penyimpanan Permanen</b>
<input id="gscriptUrl" value="https://script.google.com/macros/s/AKfycbwpKGVbB5ZGFTqh2lj0kBqty2PgJFT-hyNhN4kUo1575uWCuiKOn4eOFLuBEB5y-m3eKA/exec">
<small>URL baru kamu sudah terisi otomatis - Deployment = Anyone</small>
<div style="display:flex;gap:6px;margin-top:8px;flex-wrap:wrap">
<button onclick="testGScript()" style="background:#00c851;color:#fff;border:none;padding:7px 14px;border-radius:20px;font-weight:800;cursor:pointer;font-size:11px">🔗 Test Koneksi</button>
<button onclick="syncFromGScript()" style="background:#302b63;color:#ffd700;border:none;padding:7px 14px;border-radius:20px;font-weight:800;cursor:pointer;font-size:11px">☁️ Load Cloud</button>
<button onclick="syncToGScript(true)" style="background:#ffb700;color:#000;border:none;padding:7px 14px;border-radius:20px;font-weight:800;cursor:pointer;font-size:11px">⬆️ Upload Cloud</button>
</div>
</div>
<div class="key-group">
<b>🔑 Gemini API Key</b>
<textarea id="geminiKey" placeholder="AIza..."></textarea>
</div>
<div class="key-group">
<b>🔑 Groq API Keys (1 per baris, auto rotate)</b>
<textarea id="groqKeys" placeholder="gsk_..."></textarea>
</div>
<div class="key-group">
<b>👤 User ID - Pisah Data Cloud</b>
<input id="userId" placeholder="papahqiqi" value="papahqiqi">
</div>
<div class="key-group">
<b>🧠 System Prompt Premium</b>
<textarea id="systemPrompt" style="min-height:95px">Kamu adalah META AI SUPER PREMIUM untuk blogger miablog.web.id. Jawab dengan formula LaTeX pakai \[...\] untuk display, tabel markdown rapi pro, dan kode dengan pembungkus bahasa yang jelas (contoh ```python). Selalu berikan tombol salin & download.
Bahasa yang didukung: Dart, Flutter, JavaScript, JS, HTML, CSS, Python, PHP, Java, C, C++, C#, SQL, JSON, XML dan lainnya. Fokus kejelasan premium.</textarea>
</div>
<div style="display:flex;gap:6px;flex-wrap:wrap;margin-top:10px">
<button onclick="saveKeys()" style="background:linear-gradient(135deg,#302b63,#24243e);color:#ffd700;border:none;padding:9px 16px;border-radius:22px;font-weight:900;cursor:pointer">💾 Simpan Premium</button>
<button onclick="testAllLang()" style="background:#1f6feb;color:#fff;border:none;padding:9px 16px;border-radius:22px;font-weight:800;cursor:pointer">💻 Test Wrapper</button>
<button onclick="clearCloud()" style="background:#ff3b30;color:#fff;border:none;padding:9px 16px;border-radius:22px;font-weight:800;cursor:pointer">🗑️ Clear Cloud</button>
</div>
</div>
</div>
<div id="chatBox"></div>
<div class="input-area">
<select id="modelSelect">
<option value="gemini-2.5-pro">Gemini 2.5 Pro</option>
<option value="gemini-2.5-flash" selected>Gemini 2.5 Flash - Cepat & Stabil</option>
<option value="gemini-3.6-flash">Gemini 3.6 Flash - Preview Terbaru</option>
<option value="groq-20b">Groq 20B</option>
<option value="groq-120b">Groq 120B</option>
</select>
<input id="inputMsg" placeholder="Tanya apa saja... premium wrapper salin & download">
<button onclick="sendAI()">➤</button>
</div>
<div class="perm">
<div style="display:flex;gap:6px;flex-wrap:wrap">
<button onclick="exportJSON()" style="background:#fff;border:1.5px solid #e8eaf6;color:#302b63">📤 Export</button>
<button onclick="document.getElementById('importFile').click()" style="background:#fff;border:1.5px solid #e8eaf6;color:#302b63">📥 Import</button>
<input type="file" id="importFile" accept=".json" style="display:none" onchange="importJSON(event)">
<button onclick="clearChat()" style="background:#fff;border:1.5px solid #ffcdd2;color:#c62828">🗑️ Hapus Lokal</button>
</div>
<small style="color:#666;font-weight:600">META AI SUPER PREMIUM V37 • OFLuBEB5y-m3eKA/exec • Code Wrapper Premium</small>
</div>
</div>
<script>
const DEFAULT_GSCRIPT = "https://script.google.com/macros/s/AKfycbwpKGVbB5ZGFTqh2lj0kBqty2PgJFT-hyNhN4kUo1575uWCuiKOn4eOFLuBEB5y-m3eKA/exec";
let GEMINI_KEY = localStorage.getItem('metta_gemini_key')||'';
let GROQ_KEYS = (localStorage.getItem('metta_groq_keys')||'').split('\n').filter(Boolean);
let keyIdx = parseInt(localStorage.getItem('metta_key_idx_2026')||'0');
const SYSTEM_PROMPT_DEFAULT = document.getElementById('systemPrompt').value;
function getGScriptUrl(){return (document.getElementById('gscriptUrl')?.value.trim()||localStorage.getItem('metta_gscript_url')||DEFAULT_GSCRIPT);}
function getUserId(){return (document.getElementById('userId')?.value.trim()||localStorage.getItem('metta_user_id')||'papahqiqi').toLowerCase().replace(/\s+/g,'_');}
function getChats(){try{return JSON.parse(localStorage.getItem('metta_permanent_gemini_meta')||'[]')}catch{return []}}
function saveChats(a){const sliced=a.slice(-800); localStorage.setItem('metta_permanent_gemini_meta',JSON.stringify(sliced)); document.getElementById('gscriptCount').textContent=sliced.length+' chat'; debouncedSync();}
let syncTimer=null; function debouncedSync(){if(syncTimer) clearTimeout(syncTimer); syncTimer=setTimeout(()=>{syncToGScript(false)},1500);}
async function syncToGScript(showAlert=false){
const url=getGScriptUrl(); const userId=getUserId(); const chats=getChats(); const statusEl=document.getElementById('gscriptText');
try{
statusEl.textContent='⏫ Menyimpan ke Cloud Premium...';
const payload={action:'save', userId:userId, chats:chats, version:'V37 PREMIUM', timestamp:new Date().toISOString()};
try{await fetch(url,{method:'POST',mode:'no-cors',headers:{'Content-Type':'text/plain'},body:JSON.stringify(payload)});}catch(e){}
try{const fd=new URLSearchParams(); fd.append('action','save'); fd.append('userId',userId); fd.append('data',JSON.stringify(chats)); await fetch(url,{method:'POST',mode:'no-cors',body:fd});}catch(e){}
localStorage.setItem('metta_last_sync',new Date().toISOString());
statusEl.textContent='✅ Premium tersimpan: Lokal + Cloud ('+chats.length+' chat)';
if(showAlert) alert('✅ Upload '+chats.length+' chat ke Cloud Premium!\nUserID: '+userId);
updateKeyStatus();
}catch(err){statusEl.textContent='⚠️ Lokal aman, Cloud: '+err.message;}
}
async function syncFromGScript(){
const url=getGScriptUrl(); const userId=getUserId(); const statusEl=document.getElementById('gscriptText');
statusEl.textContent='⏬ Memuat Cloud Premium...';
try{
const loadUrl=url+(url.includes('?')?'&':'?')+'action=load&userId='+encodeURIComponent(userId)+'&t='+Date.now();
const r=await fetch(loadUrl); const txt=await r.text(); let data;
try{data=JSON.parse(txt);}catch{if(txt.includes('Metta AI')||txt.includes('Sheet Ready')){statusEl.textContent='✅ Cloud Premium konek, lokal '+getChats().length+' chat. Upload dulu.'; return;} const m=txt.match(/\{[\s\S]*\}/); if(m) try{data=JSON.parse(m[0]);}catch(e){}}
if(data && data.chats){
let chats=data.chats; if(typeof chats==='string') try{chats=JSON.parse(chats);}catch(e){}
if(Array.isArray(chats) && chats.length>0){
const existing=getChats(); const seen=new Set(existing.map(c=>c.q)); const merged=[...existing];
chats.forEach(c=>{if(!seen.has(c.q)){merged.push(c);seen.add(c.q)}});
saveChats(merged); localStorage.setItem('metta_permanent_gemini_meta', JSON.stringify(merged.slice(-800)));
document.getElementById('chatBox').innerHTML=''; merged.slice(-5).forEach(c=>{addMsg(c.q,true); addMsg(c.a,false,'groq')});
statusEl.textContent='✅ Loaded '+chats.length+' dari Cloud Premium, total '+merged.length; return;
}
}
statusEl.textContent='ℹ️ Cloud kosong, lokal '+getChats().length+' chat. Upload ke Cloud.';
}catch(err){statusEl.textContent='⚠️ Gagal: '+err.message;}
}
async function testGScript(){
const url=getGScriptUrl(); const userId=getUserId(); const statusEl=document.getElementById('gscriptText');
statusEl.textContent='🔍 Test Premium...';
try{
const testUrl=url+(url.includes('?')?'&':'?')+'action=test&userId='+encodeURIComponent(userId);
const r=await fetch(testUrl); const t=await r.text(); statusEl.textContent='✅ Premium Konek! '+t.slice(0,100); alert('✅ Premium konek!\n'+t.slice(0,500));
}catch(e){
try{await fetch(url,{method:'POST',mode:'no-cors',body:JSON.stringify({action:'test',userId:userId})}); statusEl.textContent='✅ Terkirim (no-cors) Premium'; alert('✅ Request terkirim Premium (no-cors). Cek Sheet kamu.');}catch(err2){statusEl.textContent='❌ Gagal: '+e.message;}
}
}
async function clearCloud(){if(!confirm('Hapus Cloud untuk '+getUserId()+' ?')) return; const url=getGScriptUrl(); const userId=getUserId(); try{await fetch(url,{method:'POST',mode:'no-cors',body:JSON.stringify({action:'clear',userId:userId})}); const fd=new URLSearchParams(); fd.append('action','clear'); fd.append('userId',userId); await fetch(url,{method:'POST',mode:'no-cors',body:fd}); alert('✅ Perintah hapus cloud dikirim');}catch(e){alert('Gagal: '+e.message)}}
function pushChat(q,a,model){const c=getChats();c.push({q,a,model,time:Date.now()});saveChats(c)}
function saveKeys(){
const g=document.getElementById('geminiKey').value.trim(); const groq=document.getElementById('groqKeys').value.trim();
const sp=document.getElementById('systemPrompt').value.trim(); const gs=document.getElementById('gscriptUrl').value.trim(); const uid=document.getElementById('userId').value.trim();
if(g){localStorage.setItem('metta_gemini_key',g);GEMINI_KEY=g} if(groq){localStorage.setItem('metta_groq_keys',groq);GROQ_KEYS=groq.split('\n').filter(Boolean)}
if(sp){localStorage.setItem('metta_system_prompt',sp)} if(gs){localStorage.setItem('metta_gscript_url',gs)} if(uid){localStorage.setItem('metta_user_id',uid)}
updateKeyStatus(); alert('✅ Premium disimpan!'); syncToGScript(false);
}
function updateKeyStatus(){
const s=document.getElementById('keyStatus'); const hasG=!!(localStorage.getItem('metta_gemini_key')||GEMINI_KEY);
const hasQ=(localStorage.getItem('metta_groq_keys')||'').length>5; const count=getChats().length; const lastSync=localStorage.getItem('metta_last_sync');
s.textContent=(hasG?'✅ Gemini':'❌ Gemini')+' | '+(hasQ?'✅ Groq '+GROQ_KEYS.length:'❌ Groq')+' • '+count+' chat • '+(lastSync?'Sync '+new Date(lastSync).toLocaleTimeString('id-ID'):'Belum sync')+' • PREMIUM';
document.getElementById('gscriptCount').textContent=count+' chat';
}
function toggleSetup(){
const b=document.getElementById('setupBody'); const btnH=document.getElementById('btnHeaderToggle'); const ht=document.getElementById('headerTitle');
const isCollapsed=b.classList.contains('collapsed');
if(isCollapsed){
b.classList.remove('collapsed'); btnH.textContent='✨ TUTUP'; btnH.classList.remove('tutup'); ht.innerHTML='META AI SUPER PREMIUM <span class="premium-badge">V37 PRO • BUKA</span>'; localStorage.setItem('metta_setup_collapsed','0');
}else{
b.classList.add('collapsed'); btnH.textContent='👑 BUKA'; btnH.classList.add('tutup'); ht.innerHTML='META AI SUPER PREMIUM <span class="premium-badge">V37 PRO</span>'; localStorage.setItem('metta_setup_collapsed','1');
}
}
// CODE WRAPPER PREMIUM
const LANG_MAP={'dart':{ext:'dart',color:'#00B4AB',icon:'🎯',name:'DART'},'flutter':{ext:'dart',color:'#02569B',icon:'📱',name:'FLUTTER'},'javascript':{ext:'js',color:'#f7df1e',icon:'🟨',name:'JAVASCRIPT'},'js':{ext:'js',color:'#f7df1e',icon:'🟨',name:'JS'},'typescript':{ext:'ts',color:'#3178c6',icon:'🔷',name:'TS'},'ts':{ext:'ts',color:'#3178c6',icon:'🔷',name:'TS'},'html':{ext:'html',color:'#e34f26',icon:'🌐',name:'HTML'},'css':{ext:'css',color:'#1572b6',icon:'🎨',name:'CSS'},'python':{ext:'py',color:'#3776ab',icon:'🐍',name:'PYTHON'},'py':{ext:'py',color:'#3776ab',icon:'🐍',name:'PYTHON'},'php':{ext:'php',color:'#777bb4',icon:'🐘',name:'PHP'},'java':{ext:'java',color:'#b07219',icon:'☕',name:'JAVA'},'c':{ext:'c',color:'#555555',icon:'©️',name:'C'},'cpp':{ext:'cpp',color:'#f34b7d',icon:'➕',name:'C++'},'c++':{ext:'cpp',color:'#f34b7d',icon:'➕',name:'C++'},'csharp':{ext:'cs',color:'#178600',icon:'#️⃣',name:'C#'},'c#':{ext:'cs',color:'#178600',icon:'#️⃣',name:'C#'},'cs':{ext:'cs',color:'#178600',icon:'#️⃣',name:'C#'},'sql':{ext:'sql',color:'#e38c00',icon:'🗄️',name:'SQL'},'json':{ext:'json',color:'#292929',icon:'📦',name:'JSON'},'xml':{ext:'xml',color:'#0060ac',icon:'📰',name:'XML'},'':{ext:'txt',color:'#8b949e',icon:'📄',name:'CODE'}};
function getLangInfo(k){const key=(k||'').toLowerCase().trim(); return LANG_MAP[key]||{ext:key||'txt',color:'#8b949e',icon:'📄',name:(key?key.toUpperCase():'CODE')};}
function escapeHtml(s){return s.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>')}
function buildCodeWrapper(code, langRaw){
const info=getLangInfo(langRaw); const id='code_'+Math.random().toString(36).slice(2,9); const escaped=escapeHtml(code);
return `<div class="code-block-wrapper"><div class="code-header"><div class="code-lang"><span class="dot" style="background:${info.color}"></span><span>${info.icon}</span><span>${info.name}</span><span style="font-weight:400;text-transform:lowercase;opacity:.7">.${info.ext}</span></div><div class="code-actions"><button class="btn-code btn-copy" onclick="copyCode(this)"><span>📋</span> Salin</button><button class="btn-code btn-download" onclick="downloadCode(this,'${info.ext}','${info.name.toLowerCase()}')"><span>⬇️</span> Download</button></div></div><pre><code id="${id}">${escaped}</code></pre></div>`;
}
function copyCode(btn){const w=btn.closest('.code-block-wrapper'); const c=w.querySelector('code'); navigator.clipboard.writeText(c.textContent).then(()=>{const o=btn.innerHTML; btn.innerHTML='<span>✅</span> Tersalin!'; btn.classList.add('copied'); setTimeout(()=>{btn.innerHTML=o;btn.classList.remove('copied')},1800);});}
function downloadCode(btn, ext, lang){const w=btn.closest('.code-block-wrapper'); const c=w.querySelector('code'); const blob=new Blob([c.textContent],{type:'text/plain'}); const a=document.createElement('a'); a.href=URL.createObjectURL(blob); a.download=`${lang}-${new Date().toISOString().slice(0,10)}.${ext}`; a.click(); URL.revokeObjectURL(a.href);}
function renderMarkdown(text){
if(!text) return ''; const formulas=[]; text=text.replace(/\\\[([\s\S]*?)\\\]/g,(m,c)=>{formulas.push(c);return `__FORMULA_${formulas.length-1}__`;});
const codeBlocks=[]; text=text.replace(/```([a-zA-Z0-9_#\+\-]+)?\n?([\s\S]*?)```/g,(m,lang,code)=>{codeBlocks.push({lang:lang||'',code:code.trim()});return `__CODEBLOCK_${codeBlocks.length-1}__`;});
text=text.replace(/`([^`]+)`/g,(m,c)=>`<span class="inline-code">${escapeHtml(c)}</span>`);
text=text.replace(/((?:\|.*\|\n?)+)/g,(m)=>{const rows=m.trim().split('\n').filter(r=>r.includes('|')); if(rows.length<2) return m; if(!rows[1].match(/^[|:\- ]+$/)) return m; let html='<div class="table-pro-wrapper"><table class="table-plain"><thead><tr>'; const headers=rows[0].split('|').filter(Boolean).map(s=>s.trim()); headers.forEach(h=>html+=`<th>${escapeHtml(h)}</th>`); html+='</tr></thead><tbody>'; for(let i=2;i<rows.length;i++){const cols=rows[i].split('|').filter(Boolean).map(s=>s.trim()); if(cols.length===0) continue; html+='<tr>'; cols.forEach(c=>html+=`<td>${escapeHtml(c)}</td>`); html+='</tr>';} html+='</tbody></table></div>'; return html;});
text=text.replace(/\*\*([^*]+)\*\*/g,'<b>$1</b>'); text=text.replace(/\n\n/g,'<br><br>'); text=text.replace(/\n/g,'<br>');
text=text.replace(/__CODEBLOCK_(\d+)__/g,(m,idx)=>{const b=codeBlocks[parseInt(idx)]; return buildCodeWrapper(b.code,b.lang);});
text=text.replace(/__FORMULA_(\d+)__/g,(m,idx)=>{const f=formulas[parseInt(idx)]; return `<div class="formula-box"><div class="formula-label">Formula Premium</div><div>\[${f}\]</div></div>`;});
return text;
}
function addMsg(txt,isUser,type){const box=document.getElementById('chatBox'); const div=document.createElement('div'); div.className=isUser?'msg-user':'msg-ai'; if(isUser){div.textContent=txt;}else{div.innerHTML=renderMarkdown(txt); setTimeout(()=>{if(window.renderMathInElement){try{renderMathInElement(div,{delimiters:[{left:"\\[",right:"\\]",display:true},{left:"$$",right:"$$",display:true},{left:"\\(",right:"\\)",display:false}]})}catch(e){}} },50);} box.appendChild(div); box.scrollTop=box.scrollHeight;}
function showThinking(){const box=document.getElementById('chatBox'); const d=document.createElement('div');d.id='thinking';d.className='msg-ai';d.textContent='⏳ Premium mengetik...';box.appendChild(d);box.scrollTop=box.scrollHeight;}
function hideThinking(){const e=document.getElementById('thinking');if(e)e.remove()}
function cleanNoCode(s){return s}
async function callGemini(msg,isFlash){if(!GEMINI_KEY) throw new Error('Buka setting!'); const model=isFlash?'gemini-2.0-flash':'gemini-1.5-pro'; const sys=localStorage.getItem('metta_system_prompt')||SYSTEM_PROMPT_DEFAULT; const url=`https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${GEMINI_KEY}`; const body={contents:[{role:'user',parts:[{text:msg}]}],systemInstruction:{parts:[{text:sys}]},generationConfig:{temperature:0.6,maxOutputTokens:4096}}; const r=await fetch(url,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(body)}); const j=await r.json(); if(!r.ok) throw new Error(j.error?.message||`Gemini ${r.status}`); const text=j.candidates?.[0]?.content?.parts?.[0]?.text; if(!text) throw new Error('Tidak balas'); return text;}
async function callGroq(msg,is120b=false){if(GROQ_KEYS.length===0) throw new Error('Buka setting!'); const model=is120b?'openai/gpt-oss-120b':'openai/gpt-oss-20b'; const sys=localStorage.getItem('metta_system_prompt')||SYSTEM_PROMPT_DEFAULT; let last=''; for(let k=0;k<Math.min(3,GROQ_KEYS.length);k++){let idx=(keyIdx+k)%GROQ_KEYS.length; let key=GROQ_KEYS[idx]; try{const r=await fetch("https://api.groq.com/openai/v1/chat/completions",{method:"POST",headers:{"Authorization":`Bearer ${key}`,"Content-Type":"application/json"},body:JSON.stringify({model: model,messages:[{role:"system",content:sys},{role:"user",content:msg}],max_tokens:4096,temperature:0.6})}); const j=await r.json(); if(r.ok&&j.choices?.[0]?.message?.content){keyIdx=(idx+1)%GROQ_KEYS.length; localStorage.setItem('metta_key_idx_2026',String(keyIdx)); return {text:j.choices[0].message.content,model:model};}else{last=j.error?.message||`HTTP ${r.status}`;} }catch(e){last=e.message;} } throw new Error(`Groq: ${last}`);}
async function sendAI(){const input=document.getElementById('inputMsg'); const msg=input.value.trim(); if(!msg) return; const sel=document.getElementById('modelSelect').value; if(sel.startsWith('gemini')&&!GEMINI_KEY){alert('Buka setting premium!'); return;} if(sel.startsWith('groq')&&GROQ_KEYS.length===0){alert('Buka setting premium!'); return;} addMsg(msg,true); input.value=''; showThinking(); try{let reply=''; if(sel==='gemini'){reply=await callGemini(msg,false);} else if(sel==='gemini-flash'){reply=await callGemini(msg,true);} else if(sel==='groq-120b'){const res=await callGroq(msg,true); reply=res.text;} else{const res=await callGroq(msg,false); reply=res.text;} hideThinking(); pushChat(msg,reply,sel); addMsg(reply,false);}catch(e){hideThinking(); addMsg(`Gagal: ${e.message}`,false);} updateKeyStatus();}
function testAllLang(){const txt=`META AI SUPER PREMIUM V37 - FIX DOUBLE BUKA DONE!
\[\boxed{E=mc^2}\]
| Fitur Premium | Status |
| :--- | :--- |
| 1 Tombol BUKA | ✅ Fixed |
| Header Gold | ✅ Premium |
| Code Wrapper | ✅ All Lang |
\`\`\`dart
void main(){ print('META AI SUPER PREMIUM V37'); }
\`\`\`
\`\`\`python
print('Premium V37 - Salin & Download aktif')
\`\`\`
\`\`\`javascript
console.log('V37 Premium - Single Button Fix');
\`\`\`
`; addMsg(txt,false);}
function exportJSON(){const chats=getChats(); if(chats.length===0){testAllLang(); return;} const data={version:"V37 PREMIUM",export_time:new Date().toLocaleString("id-ID"),total:chats.length,chats:chats,userId:getUserId(),gscript:getGScriptUrl()}; const blob=new Blob([JSON.stringify(data,null,2)],{type:'application/json'}); const a=document.createElement('a'); a.href=URL.createObjectURL(blob); a.download=`meta-premium-v37-${getUserId()}-${new Date().toISOString().slice(0,10)}-${chats.length}chat.json`; a.click();}
function importJSON(e){const file=e.target.files[0]; if(!file) return; const reader=new FileReader(); reader.onload=ev=>{try{const data=JSON.parse(ev.target.result); const chats=data.chats||data; if(!Array.isArray(chats)){alert('Invalid!');return;} const existing=getChats(); if(confirm(`Upload ${chats.length}? Sekarang ${existing.length}`)){const merged=existing.concat(chats); const seen=new Set(); const unique=[]; merged.forEach(c=>{if(!seen.has(c.q)){seen.add(c.q); unique.push(c);}}); saveChats(unique.slice(-800)); alert(`Total ${unique.length}`); location.reload();}}catch(err){alert('Rusak: '+err.message);}}; reader.readAsText(file); e.target.value='';}
function clearChat(){if(!confirm('Hapus lokal? Cloud aman.')) return; localStorage.removeItem('metta_permanent_gemini_meta'); document.getElementById('chatBox').innerHTML=''; updateKeyStatus();}
document.getElementById('inputMsg').addEventListener('keypress',e=>{if(e.key==='Enter') sendAI();});
(()=>{
if(GEMINI_KEY){document.getElementById('geminiKey').value=GEMINI_KEY;}
if(GROQ_KEYS.length>0){document.getElementById('groqKeys').value=GROQ_KEYS.join('\n');}
const sp=localStorage.getItem('metta_system_prompt'); if(sp){document.getElementById('systemPrompt').value=sp;}
const gs=localStorage.getItem('metta_gscript_url')||DEFAULT_GSCRIPT; document.getElementById('gscriptUrl').value=gs;
const uid=localStorage.getItem('metta_user_id')||'papahqiqi'; document.getElementById('userId').value=uid;
updateKeyStatus(); const chats=getChats(); chats.slice(-5).forEach(c=>{addMsg(c.q,true); addMsg(c.a,false);});
if(localStorage.getItem('metta_setup_collapsed')==='1'){document.getElementById('setupBody').classList.add('collapsed'); document.getElementById('btnHeaderToggle').textContent='👑 BUKA'; document.getElementById('btnHeaderToggle').classList.add('tutup');}
else{document.getElementById('btnHeaderToggle').textContent='✨ TUTUP';}
if(chats.length===0){setTimeout(testAllLang,800);} setTimeout(syncFromGScript,1800);
})();
</script>
</body></html>
===============
Publik Edit Bersama Terakhir diperbarui: 2026-08-29 06:51:28 AM
