LIVE PREVIEW
Memasak Struktur Magnetic...
WhatsApp Link Generator
{"page":{"_id":"69786a12e7e36511d77ac6d5","title":"NBE Generator Magnetic Version 1-0","sections":{"byId":{"bcb8":{"_id":"bcb8","key":"section","name":"Section 1","attributes":{"style":{"position":"initial","marginTop":"0px","paddingTop":"0px","paddingBottom":"0px","paddingLeft":"0px","paddingRight":"0px","width":"100%","alignSelf":"center","backgroundImage":"","backgroundColor":"#FFFFFFFF","color":"#000000FF","desktop":{"paddingTop":"0px","paddingBottom":"0px"},"tablet":{"paddingTop":"0px","paddingBottom":"0px","marginTop":"0px"},"mobile":{"paddingTop":"0px","paddingBottom":"0px","marginTop":"0px"}},"width":"xl","background":true,"backgroundImageStyle":"None","backgroundVideo":false,"backgroundVideoUrl":"","shadowOverride":false,"borderOverride":false,"cornerOverride":false,"border":false,"corner":false,"shadow":false,"className":""},"components":{"byId":{"AUuF":{"_id":"AUuF","key":"other-html","name":"HTML","attributes":{"htmlstring":"<!DOCTYPE html>\n<html lang=\"id\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>No Bullshit Engine v14.9.9 - Crash Fix</title>\n <script src=\"https://cdn.tailwindcss.com\"></script>\n <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;800;900&family=JetBrains+Mono:wght@400;700&family=Merriweather:ital,wght@0,700;1,400&display=swap\" rel=\"stylesheet\">\n <script src=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/js/all.min.js\"></script>\n <style>\n body { font-family: 'Inter', sans-serif; -webkit-font-smoothing: antialiased; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; }\n /* Allow text selection in inputs and editor */\n input, textarea, .rich-editor, .ads-card p, .select-text { -webkit-user-select: text; -moz-user-select: text; -ms-user-select: text; user-select: text; }\n \n .mono { font-family: 'JetBrains Mono', monospace; }\n ::-webkit-scrollbar { width: 6px; height: 6px; }\n ::-webkit-scrollbar-track { background: #111827; }\n ::-webkit-scrollbar-thumb { background: #374151; border-radius: 3px; }\n ::-webkit-scrollbar-thumb:hover { background: #4b5563; }\n \n /* Custom Editor Styles */\n .rich-editor {\n background: #1f2937; border: 1px solid #374151; color: #e5e7eb; width: 100%; padding: 12px; font-size: 14px; \n border-radius: 0 0 6px 6px; min-height: 80px; outline: none; overflow-y: auto; line-height: 1.6;\n }\n .rich-editor:focus { border-color: #ef4444; background: #1a202c; }\n .rich-toolbar {\n background: #111827; border: 1px solid #374151; border-bottom: none; border-radius: 6px 6px 0 0;\n padding: 6px; display: flex; gap: 4px; align-items: center;\n }\n .tool-btn {\n background: transparent; color: #9ca3af; border: none; border-radius: 4px; width: 24px; height: 24px;\n display: flex; align-items: center; justify-content: center; cursor: pointer; font-size: 12px; transition: all 0.2s;\n }\n .tool-btn:hover { background: #374151; color: white; }\n \n .edit-input { \n background: #1f2937; border: 1px solid #374151; color: white; width: 100%; padding: 10px; \n font-size: 13px; border-radius: 6px; margin-bottom: 8px; transition: border-color 0.2s;\n }\n .edit-input:focus { border-color: #ef4444; outline: none; }\n .edit-label { font-size: 11px; color: #9ca3af; text-transform: uppercase; font-weight: 700; letter-spacing: 0.5px; margin-bottom: 6px; display: flex; justify-content: space-between; align-items: center; margin-top: 12px;}\n \n /* Ads Card Style */\n .ads-card {\n background: #1f2937; border: 1px solid #374151; padding: 12px; border-radius: 8px; margin-bottom: 8px;\n position: relative; transition: all 0.2s;\n }\n .ads-card:hover { border-color: #4b5563; }\n .copy-btn-abs {\n position: absolute; top: 8px; right: 8px; font-size: 10px; background: #374151; \n color: white; padding: 2px 6px; border-radius: 4px; opacity: 0; transition: opacity 0.2s; cursor: pointer;\n }\n .ads-card:hover .copy-btn-abs { opacity: 1; }\n\n /* Loading Animation */\n .loader {\n width: 48px; height: 48px; border: 5px solid #FFF; border-bottom-color: #ef4444; border-radius: 50%;\n display: inline-block; box-sizing: border-box; animation: rotation 1s linear infinite;\n }\n @keyframes rotation { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }\n </style>\n</head>\n<!-- PROTECTED BODY -->\n<body class=\"bg-gray-950 text-gray-100 h-screen flex flex-col overflow-hidden\" oncontextmenu=\"return false;\">\n\n <!-- NAVBAR -->\n <nav class=\"bg-black border-b border-gray-800 h-14 px-4 flex justify-between items-center shrink-0 z-30\">\n <div class=\"flex items-center gap-3\">\n <div class=\"bg-gradient-to-br from-red-600 to-red-800 text-white font-black p-1 px-2 text-sm rounded transform -skew-x-6\">NBE</div>\n <h1 class=\"font-bold text-sm tracking-wide text-gray-200\">No Bullshit Engine <span class=\"text-[10px] bg-green-600 text-white px-2 py-0.5 rounded ml-2 border border-green-500 font-bold\">v14.9.9</span></h1>\n </div>\n <div class=\"flex items-center gap-4\">\n <!-- FIXED: Added saveStatus span back -->\n <span id=\"saveStatus\" class=\"text-xs text-green-500 hidden flex items-center gap-1 transition-opacity duration-500\"><i class=\"fa-solid fa-check-circle\"></i> Saved</span>\n \n <button onclick=\"manualSaveAndRender()\" class=\"bg-green-600 hover:bg-green-500 text-white text-xs font-bold py-1.5 px-4 rounded transition flex items-center gap-2 border border-green-500 shadow-lg shadow-green-900/50\">\n <i class=\"fa-solid fa-floppy-disk\"></i> SIMPAN & PREVIEW\n </button>\n <a href=\"https://lp.nobullshitengine.my.id/tutorial-nbe-magnetic\" target=\"_blank\" class=\"text-gray-400 hover:text-white text-xs font-medium transition flex items-center gap-2\">\n <i class=\"fa-regular fa-circle-question\"></i> Tutorial\n</a>\n </div>\n </nav>\n\n <!-- MAIN LAYOUT -->\n <div class=\"flex flex-1 h-full overflow-hidden\">\n \n <!-- LEFT SIDEBAR (INPUT & EDITOR) -->\n <aside class=\"w-full md:w-[480px] bg-gray-900 border-r border-gray-800 flex flex-col h-full overflow-y-auto z-20 shadow-2xl custom-scrollbar\">\n <div class=\"p-5 space-y-6 pb-20\">\n \n <!-- STEP 1: INPUT MODE -->\n <div id=\"inputSection\" class=\"space-y-5 animate-fade-in\">\n <!-- Niche Selector -->\n <div class=\"bg-gray-800 p-4 rounded-xl border border-gray-700 shadow-lg relative group\">\n <div class=\"absolute -right-2 -top-2 bg-yellow-500 text-black text-[10px] font-bold px-3 py-1 rounded-full shadow-lg transform rotate-6 group-hover:rotate-0 transition\">UPDATED: 200+ TEMPLATE</div>\n <label class=\"block text-xs font-bold text-gray-400 uppercase mb-2\">1. Pilih Niche (Kategori)</label>\n <div class=\"relative\">\n <i class=\"fa-solid fa-search absolute left-3 top-3 text-gray-500 text-xs\"></i>\n <select id=\"templateSelect\" onchange=\"loadTemplate()\" class=\"w-full bg-gray-900 text-white text-sm border border-gray-600 rounded-lg pl-9 pr-3 py-2.5 focus:border-red-500 focus:ring-1 focus:ring-red-500 outline-none appearance-none cursor-pointer hover:bg-gray-850 transition\">\n <option value=\"\">-- Loading 200+ Templates... --</option>\n </select>\n </div>\n </div>\n\n <!-- Angle & Product Info -->\n <div class=\"space-y-4\">\n <div>\n <label class=\"block text-xs font-bold text-blue-400 uppercase mb-2\">2. Sudut Pandang (Marketing Angle)</label>\n <select id=\"angleSelect\" class=\"w-full bg-gray-900 text-white text-sm border border-gray-600 rounded-lg px-3 py-2.5 focus:border-blue-500 focus:outline-none cursor-pointer\">\n <option value=\"Magnetic Storytelling\">📖 Magnetic Storytelling (Curhat & Emosional)</option>\n <option value=\"Brutal Truth\">🔥 Brutal Truth (Jujur & Menohok)</option>\n <option value=\"Fear & Scarcity\">😱 Fear & Scarcity (Takut Kehabisan)</option>\n <option value=\"Benefit Heavy\">💰 Benefit Heavy (Fokus Untung)</option>\n <option value=\"Logical Proof\">🧠 Logical Proof (Data & Fakta)</option>\n </select>\n </div>\n\n <div>\n <label class=\"block text-xs font-bold text-gray-400 uppercase mb-2\">3. Detail Produk</label>\n <input type=\"text\" id=\"productName\" placeholder=\"Nama Brand / Produk...\" class=\"w-full bg-gray-800 border border-gray-700 rounded-lg px-3 py-2.5 focus:border-red-500 focus:outline-none font-bold text-white mb-3 placeholder-gray-600\">\n <textarea id=\"productDesc\" rows=\"5\" placeholder=\"Jelaskan produkmu. Apa masalah yang diselesaikan? Apa hasil akhirnya (Impact)? Siapa yang butuh? Contoh: Madu maag, hasil: bisa makan pedas lagi tanpa nyeri.\" class=\"w-full bg-gray-800 border border-gray-700 rounded-lg px-3 py-2.5 text-sm focus:border-red-500 focus:outline-none leading-relaxed text-gray-300 placeholder-gray-600\"></textarea>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"grid grid-cols-1 gap-3 pt-2\">\n <button onclick=\"generateCopy()\" id=\"btnGenerate\" class=\"w-full bg-gradient-to-r from-red-600 to-red-700 hover:from-red-500 hover:to-red-600 text-white font-bold py-3.5 rounded-lg shadow-lg shadow-red-900/30 transition transform active:scale-[0.98] flex justify-center items-center gap-2 group\">\n <i class=\"fa-solid fa-bolt group-hover:animate-pulse\"></i> GENERATE MAGNETIC LP\n </button>\n \n <div id=\"restorePrompt\" class=\"hidden text-center bg-gray-800/50 p-3 rounded border border-gray-700 border-dashed\">\n <p class=\"text-xs text-gray-400 mb-2\">Draft tersimpan ditemukan.</p>\n <button onclick=\"restoreState()\" class=\"text-xs bg-gray-700 hover:bg-gray-600 px-4 py-1.5 rounded text-white font-medium transition\">Lanjutkan Edit</button>\n </div>\n </div>\n </div>\n\n <!-- STEP 2: EDITOR MODE -->\n <div id=\"editorSection\" class=\"hidden space-y-6 animate-fade-in\">\n <!-- Header Editor -->\n <div class=\"flex justify-between items-center border-b border-gray-800 pb-4 sticky top-0 bg-gray-900 z-10 pt-2\">\n <h3 class=\"font-bold text-white flex items-center gap-2\"><i class=\"fa-solid fa-pen-to-square text-red-500\"></i> Editor</h3>\n <button onclick=\"resetGenerator()\" class=\"text-xs text-gray-500 hover:text-red-400 transition underline\">Buat Baru</button>\n </div>\n\n <!-- Appearance Controls -->\n <div class=\"bg-gray-800 p-4 rounded-lg border border-gray-700\">\n <label class=\"block text-xs font-bold text-gray-400 uppercase mb-3\">🎨 Tampilan & Branding</label>\n <div class=\"flex items-center gap-3\">\n <div class=\"w-12\">\n <div class=\"relative w-full aspect-square rounded overflow-hidden border border-gray-600 cursor-pointer\">\n <input type=\"color\" id=\"brandColorPicker\" class=\"absolute -top-2 -left-2 w-16 h-16 cursor-pointer\" oninput=\"updateBrandColor(this.value)\">\n </div>\n </div>\n <div class=\"flex-1\">\n <select id=\"styleSelect\" onchange=\"switchTemplate(this.value)\" class=\"w-full bg-gray-900 text-white text-xs border border-gray-600 rounded px-2 py-2 focus:outline-none\">\n <option value=\"brutal\">🔥 Brutal & Bold (Standard)</option>\n <option value=\"modern\">✨ Modern Clean (Professional)</option>\n <option value=\"letter\">📝 Sales Letter (Story Focused)</option>\n <option value=\"luxury\">💎 Luxury Dark (High Ticket)</option>\n <option value=\"fresh\">🌿 Fresh Organic (Herbal/Natural)</option>\n </select>\n </div>\n </div>\n </div>\n\n <!-- ADS KIT PRO -->\n <details class=\"group bg-indigo-900/20 rounded-lg border border-indigo-500/30 overflow-hidden\" open>\n <summary class=\"p-3 text-sm font-bold cursor-pointer hover:bg-indigo-900/40 select-none text-indigo-300 flex justify-between items-center\">\n <span>🎁 5x Ads Kit (Magnetic)</span>\n <i class=\"fa-solid fa-chevron-down transition-transform group-open:rotate-180\"></i>\n </summary>\n <div class=\"p-3 border-t border-indigo-500/20 space-y-4 bg-gray-900/50\">\n <div id=\"adsContainer\" class=\"space-y-4\"></div>\n </div>\n </details>\n\n <!-- SECTIONS EDITOR -->\n <div class=\"space-y-2\">\n <!-- 1. Headline & Jack Words -->\n <details class=\"group bg-gray-800 rounded-lg border border-gray-700 overflow-hidden\">\n <summary class=\"p-3 text-sm font-bold cursor-pointer hover:bg-gray-700 select-none flex justify-between text-gray-200\">\n <span>1. Headline & Jack Words</span>\n <i class=\"fa-solid fa-chevron-down text-xs text-gray-500 transition-transform group-open:rotate-180\"></i>\n </summary>\n <div class=\"p-4 border-t border-gray-700 space-y-4\">\n <div>\n <label class=\"edit-label text-yellow-500\">Top Warning</label>\n <input type=\"text\" class=\"edit-input\" data-key=\"top_warning\" oninput=\"updateData(this)\">\n </div>\n <div class=\"flex items-center gap-2 mt-2 bg-gray-700/50 p-2 rounded border border-gray-600 mb-2\">\n <input type=\"checkbox\" id=\"stickyWarningCheck\" class=\"w-4 h-4 rounded bg-gray-700 border-gray-600 text-yellow-500 focus:ring-0 cursor-pointer\" onchange=\"updateStickyWarning(this.checked)\" checked>\n <label for=\"stickyWarningCheck\" class=\"text-xs text-gray-300 cursor-pointer select-none font-bold\">Sticky Warning (Nempel di Atas)</label>\n </div>\n <div>\n <label class=\"edit-label\">Headline (Message + Impact)</label>\n <div class=\"rich-wrapper\"><div class=\"toolbar-container\"></div><div class=\"rich-editor\" contenteditable=\"true\" data-key=\"headline\" oninput=\"updateData(this)\"></div></div>\n </div>\n <div>\n <label class=\"edit-label text-blue-400\">Jack Words (Perumpamaan/Penguat)</label>\n <div class=\"rich-wrapper\"><div class=\"toolbar-container\"></div><div class=\"rich-editor\" contenteditable=\"true\" data-key=\"jack_words\" oninput=\"updateData(this)\" style=\"min-height: 60px\"></div></div>\n </div>\n </div>\n </details>\n\n <!-- 2. Hero & Authority -->\n <details class=\"group bg-gray-800 rounded-lg border border-gray-700 overflow-hidden\">\n <summary class=\"p-3 text-sm font-bold cursor-pointer hover:bg-gray-700 select-none flex justify-between text-gray-200\">\n <span>2. Hero Image & Authority (Siapa Saya)</span>\n <i class=\"fa-solid fa-chevron-down text-xs text-gray-500 transition-transform group-open:rotate-180\"></i>\n </summary>\n <div class=\"p-4 border-t border-gray-700 space-y-4\">\n <div>\n <label class=\"edit-label flex justify-between\">\n Hero Image URL\n <a href=\"https://img.nobullshitengine.my.id/\" target=\"_blank\" class=\"text-[10px] text-blue-400 underline lowercase\">Upload disini</a>\n </label>\n <input type=\"text\" class=\"edit-input\" data-key=\"product_image\" oninput=\"updateData(this)\" placeholder=\"https://...\">\n </div>\n \n <div class=\"bg-gray-900/50 p-3 rounded border border-gray-600\">\n <label class=\"edit-label text-blue-300\">Galeri Produk (Tambahan)</label>\n <div id=\"product_galleryEditorContainer\" class=\"space-y-2\"></div>\n <button onclick=\"addItemToArray('product_gallery')\" class=\"w-full py-2 border border-dashed border-gray-600 rounded text-xs text-gray-400 hover:bg-gray-700 hover:text-white transition mt-2\">+ Tambah Foto</button>\n </div>\n\n <div class=\"bg-gray-700/30 p-3 rounded border border-gray-600\">\n <label class=\"edit-label text-green-400\">Authority (Decision Factor 1)</label>\n <input type=\"text\" class=\"edit-input\" data-key=\"founder_name\" oninput=\"updateData(this)\" placeholder=\"Nama Anda / Brand\">\n <div class=\"rich-wrapper\"><div class=\"toolbar-container\"></div><div class=\"rich-editor\" contenteditable=\"true\" data-key=\"authority_text\" oninput=\"updateData(this)\" style=\"min-height: 80px\" placeholder=\"Jelaskan kredibilitas anda...\"></div></div>\n </div>\n </div>\n </details>\n\n <!-- 3. Story & Agitation -->\n <details class=\"group bg-gray-800 rounded-lg border border-gray-700 overflow-hidden\">\n <summary class=\"p-3 text-sm font-bold cursor-pointer hover:bg-gray-700 select-none flex justify-between text-gray-200\">\n <span>3. Story & Masalah</span>\n <i class=\"fa-solid fa-chevron-down text-xs text-gray-500 transition-transform group-open:rotate-180\"></i>\n </summary>\n <div class=\"p-4 border-t border-gray-700 space-y-4\">\n <div>\n <label class=\"edit-label\">Story Opener (Curhat Mode)</label>\n <div class=\"rich-wrapper\"><div class=\"toolbar-container\"></div><div class=\"rich-editor\" contenteditable=\"true\" data-key=\"opener_story\" oninput=\"updateData(this)\" style=\"min-height: 150px;\"></div></div>\n </div>\n <div>\n <label class=\"edit-label text-red-400\">Agitasi Masalah</label>\n <div class=\"rich-wrapper\"><div class=\"toolbar-container\"></div><div class=\"rich-editor\" contenteditable=\"true\" data-key=\"pain_agitation\" oninput=\"updateData(this)\"></div></div>\n </div>\n <div>\n <label class=\"edit-label\">Pain Points (List)</label>\n <div class=\"rich-wrapper\"><div class=\"toolbar-container\"></div><div class=\"rich-editor\" contenteditable=\"true\" id=\"painPointsEditor\" oninput=\"updateArrayData(this, 'pain_points')\"></div></div>\n </div>\n </div>\n </details>\n\n <!-- 4. Solution & Social Proof -->\n <details class=\"group bg-gray-800 rounded-lg border border-gray-700 overflow-hidden\">\n <summary class=\"p-3 text-sm font-bold cursor-pointer hover:bg-gray-700 select-none flex justify-between text-gray-200\">\n <span>4. Solusi & Bukti (Decision Factor 2&3)</span>\n <i class=\"fa-solid fa-chevron-down text-xs text-gray-500 transition-transform group-open:rotate-180\"></i>\n </summary>\n <div class=\"p-4 border-t border-gray-700 space-y-4\">\n <div>\n <label class=\"edit-label\">Jembatan Solusi</label>\n <div class=\"rich-wrapper\"><div class=\"toolbar-container\"></div><div class=\"rich-editor\" contenteditable=\"true\" data-key=\"solution_bridge\" oninput=\"updateData(this)\"></div></div>\n </div>\n \n <div>\n <label class=\"edit-label flex justify-between\">\n Foto Produk Solusi\n <a href=\"https://img.nobullshitengine.my.id/\" target=\"_blank\" class=\"text-[10px] text-blue-400 underline lowercase\">Upload disini</a>\n </label>\n <input type=\"text\" class=\"edit-input\" data-key=\"solution_image\" oninput=\"updateData(this)\" placeholder=\"https://...\">\n </div>\n\n <div id=\"benefitsEditorContainer\"></div>\n <button onclick=\"addItemToArray('benefits')\" class=\"w-full py-2 border border-dashed border-gray-600 rounded text-xs text-gray-400 hover:bg-gray-700 hover:text-white transition\">+ Tambah Benefit</button>\n \n <div class=\"mt-4 pt-4 border-t border-gray-700\">\n <label class=\"edit-label text-yellow-400\">Fitur ke Emosi (Reptilian Brain)</label>\n <div id=\"feature_benefitsEditorContainer\" class=\"space-y-2\"></div>\n <button onclick=\"addItemToArray('feature_benefits')\" class=\"w-full py-2 border border-dashed border-yellow-600/50 rounded text-xs text-yellow-400 hover:bg-yellow-900/20 hover:text-white transition\">+ Tambah Poin Emosional</button>\n </div>\n\n <div class=\"mt-4 pt-4 border-t border-gray-700\">\n <label class=\"edit-label\">Testimonials (Social Proof)</label>\n <div id=\"testimonialsEditorContainer\" class=\"space-y-2\"></div>\n <button onclick=\"addItemToArray('testimonials')\" class=\"w-full py-2 border border-dashed border-gray-600 rounded text-xs text-gray-400 hover:bg-gray-700 hover:text-white transition\">+ Tambah Testimoni</button>\n </div>\n\n <div class=\"mt-4 pt-4 border-t border-gray-700 bg-gray-900/40 p-2 rounded\">\n <label class=\"edit-label text-blue-400\">Bukti Gambar / Transfer / Chat</label>\n <div class=\"flex gap-2 mb-2\">\n <select class=\"bg-gray-700 text-white text-xs border border-gray-600 rounded px-2 py-1 flex-1 cursor-pointer focus:border-blue-500 outline-none\" data-key=\"proof_layout\" onchange=\"updateData(this)\">\n <option value=\"grid\">Tampilan Galeri (Grid Rapi)</option>\n <option value=\"list\">Tampilan List (Scroll Chat)</option>\n </select>\n </div>\n <div id=\"proof_listEditorContainer\" class=\"space-y-2\"></div>\n <button onclick=\"addItemToArray('proof_list')\" class=\"w-full py-2 border border-dashed border-blue-500/50 rounded text-xs text-blue-400 hover:bg-blue-900/20 hover:text-white transition mt-2 flex items-center justify-center gap-2\">\n <i class=\"fa-solid fa-camera\"></i> Tambah Bukti Gambar\n </button>\n </div>\n </div>\n </details>\n\n <!-- 5. Offer & Push/Pull -->\n <details class=\"group bg-gray-800 rounded-lg border border-gray-700 overflow-hidden\" open>\n <summary class=\"p-3 text-sm font-bold cursor-pointer hover:bg-gray-700 select-none flex justify-between text-gray-200\">\n <span>5. Offer & CTA</span>\n <i class=\"fa-solid fa-chevron-down text-xs text-gray-500 transition-transform group-open:rotate-180\"></i>\n </summary>\n <div class=\"p-4 border-t border-gray-700 space-y-4\">\n <div class=\"mb-4\">\n <label class=\"edit-label text-purple-400\">Teks Tambahan (Sebelum Offer)</label>\n <div class=\"rich-wrapper\"><div class=\"toolbar-container\"></div><div class=\"rich-editor\" contenteditable=\"true\" data-key=\"custom_text_middle\" oninput=\"updateData(this)\" placeholder=\"Isi jika ingin ada teks sebelum tombol beli...\"></div></div>\n </div>\n\n <div id=\"bonusesEditorContainer\"></div>\n <button onclick=\"addItemToArray('bonuses')\" class=\"w-full py-2 border border-dashed border-gray-600 rounded text-xs text-gray-400 hover:bg-gray-700 hover:text-white transition mb-4\">+ Tambah Bonus</button>\n\n <div class=\"grid grid-cols-2 gap-3\">\n <div><label class=\"edit-label\">Harga Coret</label><input type=\"text\" class=\"edit-input\" data-key=\"price_anchor\" oninput=\"updateData(this)\"></div>\n <div><label class=\"edit-label text-green-400\">Harga Promo (Ganjil)</label><input type=\"text\" class=\"edit-input font-bold\" data-key=\"price_promo\" oninput=\"updateData(this)\"></div>\n </div>\n\n <div>\n <label class=\"edit-label text-yellow-400\">Call To Action (Tombol)</label>\n <input type=\"text\" class=\"edit-input mb-2\" data-key=\"cta_text\" oninput=\"updateData(this)\" placeholder=\"Teks Tombol\">\n <input type=\"text\" class=\"edit-input font-mono text-xs text-blue-300\" data-key=\"cta_link\" oninput=\"updateData(this)\" placeholder=\"Link (https://...)\">\n <button onclick=\"document.getElementById('waModal').classList.remove('hidden')\" class=\"text-[10px] text-green-400 hover:underline\"><i class=\"fa-brands fa-whatsapp\"></i> Generate WA Link</button>\n </div>\n \n <div class=\"flex items-center gap-2 mt-2 bg-gray-900 p-2 rounded\">\n <input type=\"checkbox\" id=\"stickyCheck\" class=\"w-4 h-4 rounded bg-gray-700 border-gray-600 text-red-600 focus:ring-0\" onchange=\"updateSticky(this.checked)\" checked>\n <label for=\"stickyCheck\" class=\"text-xs text-gray-300 cursor-pointer select-none\">Sticky Button di Mobile</label>\n </div>\n\n <div class=\"mt-4 pt-4 border-t border-gray-700\">\n <label class=\"edit-label text-green-400\">Teks Garansi</label>\n <input type=\"text\" class=\"edit-input\" data-key=\"guarantee\" oninput=\"updateData(this)\">\n </div>\n </div>\n </details>\n\n <!-- 6. Push Pull & Urgency & Custom Content -->\n <details class=\"group bg-gray-800 rounded-lg border border-gray-700 overflow-hidden\">\n <summary class=\"p-3 text-sm font-bold cursor-pointer hover:bg-gray-700 select-none flex justify-between text-gray-200\">\n <span>6. Push/Pull, Urgency & Konten</span>\n <i class=\"fa-solid fa-chevron-down text-xs text-gray-500 transition-transform group-open:rotate-180\"></i>\n </summary>\n <div class=\"p-4 border-t border-gray-700 space-y-4 bg-gray-900/30\">\n \n <!-- Push Pull (Moved) -->\n <div class=\"bg-blue-900/20 p-3 rounded border border-blue-800/50 mb-4\">\n <label class=\"edit-label text-blue-300\">Push & Pull (Sepadan gak?)</label>\n <div class=\"rich-wrapper\"><div class=\"toolbar-container\"></div><div class=\"rich-editor\" contenteditable=\"true\" data-key=\"push_pull_text\" oninput=\"updateData(this)\" style=\"min-height:120px;\" placeholder=\"Sepadan gak harga yang dibayar...\"></div></div>\n </div>\n\n <!-- Urgency (NEW) -->\n <div class=\"bg-red-900/20 p-3 rounded border border-red-800/50 mb-4\">\n <label class=\"edit-label text-red-400\"><i class=\"fa-solid fa-fire\"></i> Urgency (Kerugian Menunda)</label>\n <div class=\"rich-wrapper\"><div class=\"toolbar-container\"></div><div class=\"rich-editor\" contenteditable=\"true\" data-key=\"urgency_text\" oninput=\"updateData(this)\" style=\"min-height:120px;\" placeholder=\"APA UNTUNGNYA KLAIM SEKARANG?\"></div></div>\n </div>\n\n <p class=\"text-[10px] text-gray-400 mb-2\">Tambahkan Konten Tambahan (Gambar/List) di bawah Urgency:</p>\n <div id=\"custom_contentEditorContainer\" class=\"space-y-4\"></div>\n <div class=\"grid grid-cols-3 gap-2\">\n <button onclick=\"addItemToArray('custom_content', {type:'text'})\" class=\"py-2 border border-dashed border-gray-600 rounded text-[10px] text-gray-400 hover:bg-gray-700 hover:text-white transition\"><i class=\"fa-solid fa-font\"></i> Teks</button>\n <button onclick=\"addItemToArray('custom_content', {type:'image'})\" class=\"py-2 border border-dashed border-gray-600 rounded text-[10px] text-gray-400 hover:bg-gray-700 hover:text-white transition\"><i class=\"fa-solid fa-image\"></i> Gambar</button>\n <button onclick=\"addItemToArray('custom_content', {type:'list'})\" class=\"py-2 border border-dashed border-gray-600 rounded text-[10px] text-gray-400 hover:bg-gray-700 hover:text-white transition\"><i class=\"fa-solid fa-list-ul\"></i> List</button>\n </div>\n </div>\n </details>\n\n <!-- 7. FAQ (Moved) -->\n <details class=\"group bg-gray-800 rounded-lg border border-gray-700 overflow-hidden\">\n <summary class=\"p-3 text-sm font-bold cursor-pointer hover:bg-gray-700 select-none flex justify-between text-gray-200\">\n <span>7. FAQ (Pertanyaan Umum)</span>\n <i class=\"fa-solid fa-chevron-down text-xs text-gray-500 transition-transform group-open:rotate-180\"></i>\n </summary>\n <div class=\"p-4 border-t border-gray-700 space-y-4\">\n <div id=\"faqEditorContainer\" class=\"space-y-2\"></div>\n <button onclick=\"addItemToArray('faq')\" class=\"w-full py-2 border border-dashed border-gray-600 rounded text-xs text-gray-400 hover:bg-gray-700 hover:text-white transition\">+ Tambah FAQ</button>\n </div>\n </details>\n\n <!-- 8. Powerful Closing (New) -->\n <details class=\"group bg-gray-800 rounded-lg border border-gray-700 overflow-hidden\">\n <summary class=\"p-3 text-sm font-bold cursor-pointer hover:bg-gray-700 select-none flex justify-between text-gray-200\">\n <span>8. Powerful Closing & Footer</span>\n <i class=\"fa-solid fa-chevron-down text-xs text-gray-500 transition-transform group-open:rotate-180\"></i>\n </summary>\n <div class=\"p-4 border-t border-gray-700 space-y-4\">\n <div>\n <label class=\"edit-label text-red-400\">Closing Text (Penutup)</label>\n <div class=\"rich-wrapper\"><div class=\"toolbar-container\"></div><div class=\"rich-editor\" contenteditable=\"true\" data-key=\"closing_text\" oninput=\"updateData(this)\" placeholder=\"Jangan ragu lagi...\"></div></div>\n </div>\n <div>\n <label class=\"edit-label\">Tombol Balik ke Offer</label>\n <input type=\"text\" class=\"edit-input\" data-key=\"closing_cta_text\" oninput=\"updateData(this)\" placeholder=\"Ambil Promo Di Atas 👆\">\n </div>\n <div class=\"mt-4 pt-4 border-t border-gray-700\">\n <label class=\"edit-label text-gray-500\">Footer Text</label>\n <input type=\"text\" class=\"edit-input font-mono text-xs\" data-key=\"footer_text\" oninput=\"updateData(this)\">\n </div>\n </div>\n </details>\n\n </div>\n\n <!-- EXPORT -->\n <div class=\"pt-4 pb-20 grid grid-cols-2 gap-3\">\n <button onclick=\"copyHtmlCode()\" class=\"bg-gray-700 hover:bg-gray-600 text-white font-bold py-3 rounded-lg border border-gray-600 transition flex items-center justify-center gap-2\">\n <i class=\"fa-regular fa-copy\"></i> Copy Code\n </button>\n <button onclick=\"downloadHtml()\" class=\"bg-white hover:bg-gray-200 text-black font-bold py-3 rounded-lg transition flex items-center justify-center gap-2 shadow-lg\">\n <i class=\"fa-solid fa-download\"></i> Download\n </button>\n </div>\n </div>\n </div>\n </aside>\n\n <!-- RIGHT AREA (PREVIEW) -->\n <main class=\"flex-1 bg-gray-950 relative flex flex-col\">\n <!-- Toolbar Preview -->\n <div class=\"bg-gray-900 border-b border-gray-800 h-14 flex justify-between items-center px-6\">\n <span class=\"text-xs text-gray-500 font-mono flex items-center gap-2\">\n <span class=\"w-2 h-2 rounded-full bg-green-500 animate-pulse\"></span> LIVE PREVIEW\n </span>\n <div class=\"flex bg-gray-800 rounded p-1\">\n <button onclick=\"setPreviewSize('100%')\" class=\"p-1.5 px-3 text-gray-400 hover:text-white hover:bg-gray-700 rounded transition\" title=\"Desktop\"><i class=\"fa-solid fa-desktop\"></i></button>\n <button onclick=\"setPreviewSize('375px')\" class=\"p-1.5 px-3 text-gray-400 hover:text-white hover:bg-gray-700 rounded transition\" title=\"Mobile\"><i class=\"fa-solid fa-mobile-screen\"></i></button>\n </div>\n </div>\n \n <!-- Canvas -->\n <div class=\"flex-1 overflow-hidden flex justify-center bg-gray-950/50 p-4 md:p-8 relative\">\n <!-- Loading Overlay -->\n <div id=\"loadingOverlay\" class=\"absolute inset-0 bg-black/90 z-50 hidden flex-col justify-center items-center text-white backdrop-blur-sm\">\n <div class=\"loader mb-6\"></div>\n <p id=\"loadingText\" class=\"font-mono text-sm font-bold text-transparent bg-clip-text bg-gradient-to-r from-red-400 to-yellow-400 animate-pulse\">Memasak Struktur Magnetic...</p>\n </div>\n\n <div id=\"previewWrapper\" class=\"w-full h-full bg-white shadow-2xl transition-all duration-300 ease-in-out rounded-lg overflow-hidden border border-gray-800 mx-auto max-w-full\">\n <iframe id=\"previewFrame\" class=\"w-full h-full border-0 bg-white\"></iframe>\n </div>\n </div>\n </main>\n </div>\n\n <!-- MODALS -->\n <!-- Tooltip Template for Rich Editor -->\n <div id=\"toolbarTemplate\" class=\"hidden\">\n <div class=\"rich-toolbar\">\n <button class=\"tool-btn\" onclick=\"execCmd(this, 'bold')\"><i class=\"fa-solid fa-bold\"></i></button>\n <button class=\"tool-btn\" onclick=\"execCmd(this, 'italic')\"><i class=\"fa-solid fa-italic\"></i></button>\n <button class=\"tool-btn\" onclick=\"execCmd(this, 'underline')\"><i class=\"fa-solid fa-underline\"></i></button>\n <div class=\"h-3 w-[1px] bg-gray-700 mx-1\"></div>\n <button class=\"tool-btn text-yellow-500\" onclick=\"execCmd(this, 'hiliteColor', '#fef08a')\"><i class=\"fa-solid fa-highlighter\"></i></button>\n </div>\n </div>\n\n <!-- WA Modal -->\n <div id=\"waModal\" class=\"fixed inset-0 bg-black/80 z-50 hidden flex items-center justify-center p-4\">\n <div class=\"bg-gray-900 border border-gray-700 rounded-xl p-6 w-full max-w-sm\">\n <h3 class=\"text-lg font-bold text-white mb-4\"><i class=\"fa-brands fa-whatsapp text-green-500\"></i> WhatsApp Link Generator</h3>\n <input type=\"text\" id=\"waNumber\" placeholder=\"Nomor HP (Contoh: 62812345678)\" class=\"edit-input\">\n <input type=\"text\" id=\"waMessage\" placeholder=\"Pesan Otomatis (Halo gan, mau order...)\" class=\"edit-input\">\n <div class=\"flex gap-2 mt-4\">\n <button onclick=\"generateWALink()\" class=\"flex-1 bg-green-600 hover:bg-green-500 text-white py-2 rounded font-bold transition\">Pasang Link</button>\n <button onclick=\"document.getElementById('waModal').classList.add('hidden')\" class=\"flex-1 bg-gray-700 hover:bg-gray-600 text-white py-2 rounded font-bold transition\">Batal</button>\n </div>\n </div>\n </div>\n\n <!-- JAVASCRIPT LOGIC -->\n <script>\n // --- 0. SECURITY & PROTECTION LAYER ---\n document.addEventListener('contextmenu', (e) => e.preventDefault());\n document.addEventListener('keydown', (e) => {\n if(e.key === 'F12' || e.keyCode === 123 || (e.ctrlKey && e.shiftKey && (e.key === 'I' || e.key === 'J' || e.key === 'C')) || (e.ctrlKey && (e.key === 'u' || e.keyCode === 85))) {\n e.preventDefault(); return false;\n }\n });\n\n // --- 1. CONFIG & DATA ---\n const GEMINI_KEYS = [\n \"AIzaSyCHvO5rDVizT6SNAu7cL4JTlwYhecS75sg\", \"AIzaSyAOZylBfvhXY2hKq_Frzm1MVd5g6wIjX80\", \n \"AIzaSyB1iIJxKIFtUX6B-0JjNXYgR8inPxDAMhg\", \"AIzaSyBfLk1OhutscMDcgsofuvZAabdUT0pVDSw\", \n \"AIzaSyAL7mYdwInhOASmixmgDEX66te1cmrRYD8\", \"AIzaSyC_igYilzFaUyYDpbhcPjwLgh128oJxfrQ\"\n ];\n const DEEPSEEK_KEY = \"sk-7747e3d909f2413bb48a48655c157639\";\n \n let currentData = null;\n let currentTemplate = 'brutal';\n \n // --- 200 TEMPLATE GENERATOR ---\n const templateCategories = {\n \"Kesehatan & Herbal\": [\n \"Madu Lambung (Maag/GERD)\", \"Teh Detox Pelangsing\", \"Susu Tulang Lansia\", \"Vitamin Mata Minus\", \"Obat Kuat Pria\", \n \"Minyak Balur Keluarga\", \"Obat Wasir Herbal\", \"Suplemen Asam Urat\", \"Penyegar Bau Mulut\", \"Vitamin Nafsu Makan Anak\",\n \"Obat Kolesterol\", \"Diabetes Care\", \"Minyak Kemiri Rambut\", \"Teh Bunga Telang\", \"Sari Kurma Trombosit\",\n \"Bawang Hitam Tunggal\", \"Terapi Stroke\", \"Nutrisi Otak Anak\", \"Salep Gatal Eksim\", \"Peninggi Badan\", \"Penggemuk Badan\"\n ],\n \"Kecantikan & Skincare\": [\n \"Paket Glowing Instan\", \"Serum Flek Hitam\", \"Pemutih Badan Lotion\", \"Penumbuh Rambut/Brewok\", \"Acne Patch Jerawat\",\n \"Pemutih Ketiak\", \"Masker Komedo\", \"Sunscreen Anti Lengket\", \"Lip Serum Pink\", \"Sabun Jerawat Punggung\",\n \"Cream Leher Gelap\", \"Masker Mata Panda\", \"Lulur Tradisional\", \"Pensil Alis Tahan Air\", \"Lipcream Matte\",\n \"Setting Spray Makeup\", \"Cleansing Balm\", \"Toner Eksfoliasi\", \"Eye Cream Anti Aging\", \"Kutek Halal Peel-off\"\n ],\n \"Fashion Pria & Wanita\": [\n \"Sepatu Kerja Pantofel\", \"Tas Anti Maling\", \"Jam Tangan Mewah Murah\", \"Hijab Instan Premium\", \"Korset Pelangsing\",\n \"Dompet Kulit Asli\", \"Gamis Syari Set\", \"Sandal Kesehatan Refleksi\", \"Kacamata Photochromic\", \"Jaket Waterproof Motor\",\n \"Kaos Polos Premium\", \"Celana Chino Kerja\", \"Mukena Travel Mini\", \"Cincin Titanium Anti Karat\", \"Topi Distro Keren\",\n \"Daster Adem Rumahan\", \"Sneakers Lokal Keren\", \"Tas Laptop Kerja\", \"Batik Modern Pria\", \"Kemeja Flanel Santai\"\n ],\n \"Gadget & Elektronik\": [\n \"TWS Earphone Bass\", \"Smartwatch Kesehatan\", \"Powerbank Jumbo\", \"CCTV Wifi Murah\", \"Holder HP Motor\",\n \"Kabel Data Fast Charging\", \"Tripod Konten Creator\", \"Speaker Bluetooth Mini\", \"STB TV Digital\", \"Mic Wireless Vlog\",\n \"Keyboard Mechanical\", \"Mouse Silent Click\", \"Ring Light Makeup\", \"Smart Door Lock\", \"Pompa Galon Elektrik\",\n \"Webcam HD Streaming\", \"Wifi Extender\", \"Gamepad HP\", \"Cooler Fan HP\", \"Headset Gaming Surround\"\n ],\n \"Rumah Tangga\": [\n \"Pembersih Kerak Ajaib\", \"Robot Vacuum Cleaner\", \"Pisau Set Tajam\", \"Rak Piring Minimalis\", \"Alat Penghemat Listrik\",\n \"Sprei Anti Geser\", \"Lakban Anti Bocor\", \"Lampu Sensor Gerak\", \"Blender Portable Jus\", \"Alat Pengusir Tikus\",\n \"Spin Mop Pel Lantai\", \"Rak Sepatu Susun\", \"Timbangan Dapur Digital\", \"Botol Minum Motivasi\", \"Kipas Angin Portable\",\n \"Panci Anti Lengket\", \"Chopper Daging\", \"Sapu Karet Ajaib\", \"Lem Dinding Kuat\", \"Penutup Celah Pintu\"\n ],\n \"Otomotif\": [\n \"Penghilang Baret Mobil\", \"Penghemat BBM\", \"Lampu LED Mobil/Motor\", \"Parfum Mobil Mewah\", \"Penghitam Body Motor\",\n \"Sarung Jok Adem\", \"Kamera Mundur Mobil\", \"Pembersih Helm\", \"Cover Mobil/Motor\", \"Charger Mobil Fast\",\n \"Semir Ban Tahan Lama\", \"Gembok Alarm Motor\", \"Sarung Tangan Touring\", \"Jas Hujan Anti Rembes\", \"Vacuum Cleaner Mobil\"\n ],\n \"Edukasi & Anak\": [\n \"Mainan Montessori Kayu\", \"Buku Belajar Baca Cepat\", \"Flashcard Bayi Pintar\", \"Kursus Bahasa Inggris\", \"E-Course Bisnis Online\",\n \"Buku Cerita Islami\", \"Terapi Speech Delay\", \"Eksperimen Sains Anak\", \"Balance Bike\", \"Kelas Coding Anak\"\n ],\n \"Makanan & Minuman\": [\n \"Katering Diet Sehat\", \"Sambal Rumahan Pedas\", \"Frozen Food Praktis\", \"Kopi Literan\", \"Keripik Pedas Kaca\",\n \"Kue Kering Lebaran\", \"Minuman Kolagen\", \"Dimsum Ayam Udang\", \"Bumbu Masak Instan\", \"Dessert Box Lumer\",\n \"Susu Almond\", \"Madu Murni Hutan\", \"Kurma Premium\", \"Baso Aci Instan\", \"Pempek Palembang Asli\"\n ],\n \"Jasa & Layanan\": [\n \"Pembuatan PT/CV\", \"Jasa Arsitek Rumah\", \"Kelola Sosmed Admin\", \"Cuci Sepatu Premium\", \"Jasa Basmi Rayap\",\n \"Undangan Website Nikah\", \"Jasa Penerjemah\", \"Renovasi Rumah\", \"Desain Logo Bisnis\", \"Service AC Panggilan\"\n ],\n \"Hobi & Olahraga\": [\n \"Matras Yoga Anti Slip\", \"Dumbbell Set Adjustable\", \"Tali Skipping Speed\", \"Sepeda Lipat\", \"Alat Pancing Set\",\n \"Tenda Camping\", \"Sepatu Lari Ringan\", \"Baju Jersey Sepeda\", \"Resistance Band\", \"Tas Gym Sporty\"\n ]\n };\n\n window.onload = function() {\n const select = document.getElementById('templateSelect');\n select.innerHTML = '<option value=\"\">-- Pilih Niche Bisnis Anda --</option>';\n for (const [category, items] of Object.entries(templateCategories)) {\n const group = document.createElement('optgroup'); group.label = category;\n items.forEach((item) => { const opt = document.createElement('option'); opt.value = `${item}`; opt.text = item; group.appendChild(opt); });\n select.appendChild(group);\n }\n const toolbarHTML = document.getElementById('toolbarTemplate').innerHTML;\n document.querySelectorAll('.rich-wrapper .toolbar-container').forEach(el => el.innerHTML = toolbarHTML);\n if(localStorage.getItem('nbe_v14_data')) document.getElementById('restorePrompt').classList.remove('hidden');\n };\n\n function loadTemplate() {\n const val = document.getElementById('templateSelect').value;\n if(!val) return;\n document.getElementById('productName').value = val;\n document.getElementById('productDesc').value = `Produk ${val} berkualitas tinggi. Solusi terbaik untuk masalah pelanggan. Hasil cepat dan terjamin.`;\n }\n\n async function callAI(prompt) {\n const shuffledKeys = [...GEMINI_KEYS].sort(() => 0.5 - Math.random());\n for (const key of shuffledKeys) {\n try {\n const r = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-09-2025:generateContent?key=${key}`, {\n method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ contents: [{ parts: [{ text: prompt }] }] })\n });\n if (!r.ok) throw new Error(r.status);\n const d = await r.json();\n return d.candidates[0].content.parts[0].text;\n } catch (e) { console.warn(e); continue; }\n }\n return \"AI Error, try again.\"; \n }\n\n async function generateCopy() {\n const product = document.getElementById('productName').value;\n const desc = document.getElementById('productDesc').value;\n const angle = document.getElementById('angleSelect').value;\n if(!product || !desc) return alert(\"Isi Nama & Deskripsi dulu!\");\n\n document.getElementById('btnGenerate').disabled = true;\n document.getElementById('loadingOverlay').classList.remove('hidden');\n document.getElementById('loadingOverlay').classList.add('flex');\n\n const systemPrompt = `\n Role: Expert Copywriter \"Magnetic Market\" (Direct Response).\n Language: Indonesian. Product: \"${product}\". Context: ${desc}. Angle: ${angle}.\n \n STRUCTURE:\n 1. Headline & Jack Words\n 2. Authority\n 3. Pain & Story\n 4. Solution & Benefits\n 5. Pricing & Offer\n 6. Push & Pull Logic Stack (Price Anchoring vs Massive Value) - MUST be placed AFTER Offer in Preview.\n 7. Urgency Block (FOMO/Loss Aversion) - MUST be placed AFTER Push & Pull.\n 8. Custom Content Block.\n 9. FAQ (5 Q&A)\n 10. Closing (Powerful closing statement).\n\n IMPORTANT: \n - 'push_pull_text': Price vs Value Logic Stack.\n - 'urgency_text': Strong FOMO copy (Loss Aversion). Style: \"APA UNTUNGNYA KLAIM SEKARANG? Apa ruginya kalau gak klaim? 1. Bayar Mahal... 2. Peluang hilang...\"\n \n CRITICAL: \n - You MUST generate exactly 5 'headline_variants'.\n - You MUST generate exactly 5 'ads_copy' (different angles).\n - You MUST generate exactly 5 'image_prompts' (different concepts).\n\n OUTPUT JSON ONLY:\n {\n \"top_warning\": \"Diskon Berakhir...\",\n \"headline\": \"Headline...\",\n \"jack_words\": \"Analogi...\",\n \"founder_name\": \"Nama...\",\n \"authority_text\": \"Bio...\",\n \"pain_agitation\": \"Masalah...\",\n \"opener_story\": \"Story...\",\n \"pain_points\": [\"P1\", \"P2\"],\n \"solution_bridge\": \"Solusi...\",\n \"benefits\": [{\"icon\":\"✨\",\"title\":\"B1\",\"desc\":\"...\"}],\n \"feature_benefits\": [{\"feature\":\"F1\",\"benefit\":\"...\"}],\n \"testimonials\": [{\"name\":\"A\",\"text\":\"...\",\"role\":\"User\"}],\n \"proof_list\": [], \n \"custom_content\": [\n {\"type\": \"text\", \"value\": \"<h3>Kenapa Harus Sekarang?</h3><p>Jangan tunda lagi...</p>\"}\n ],\n \"faq\": [{\"q\":\"Q1\",\"a\":\"A1\"}],\n \"closing_text\": \"Ambil keputusan sekarang sebelum harga naik...\",\n \"closing_cta_text\": \"Ambil Promo Di Atas 👆\",\n \"push_pull_text\": \"Sepadan gak harga yang dibayar, dengan manfaat yang Anda dapat?<br>Mahal? mungkin Anda ngerasa demikian.<br><br>Yaah...,<br>Kalau fokus ke harganya sih, emang mahal.<br>Tapi kalau fokus ke:<br>✅ <b>Benefit 1:</b> [Benefit...]<br>✅ <b>Benefit 2:</b> [Benefit...]<br>✅ <b>Benefit 3:</b> [Benefit...]<br><br>Sepadan kah, terasa mahal kah?\",\n \"urgency_text\": \"<h3>APA UNTUNGNYA KLAIM SEKARANG?</h3><p>Saya tanya balik, Apa ruginya kalau gak klaim Sekarang?</p><br>🛡️ <b>Bayar lebih mahal!</b> Checkout sekarang cuma [Harga Promo]! Kalau Anda nunda dan spot habis, Anda bayar lebih mahal!<br><br>🛡️ <b>Peluang Profit, Tertunda!</b> Semakin Anda nunda, semakin peluang anda tertunda!<br><br>🛡️ <b>Putus asa hilang kesempatan</b> belajar ilmu yang mungkin tidak akan pernah anda temui lagi.\",\n \"bonuses\": [{\"title\":\"B1\",\"value\":\"Rp...\"}],\n \"price_anchor\": \"Rp 200rb\",\n \"price_promo\": \"Rp 99rb\",\n \"cta_text\": \"Beli Sekarang\",\n \"cta_link\": \"#\",\n \"guarantee\": \"Garansi...\",\n \"headline_variants\": [\"H1\", \"H2\", \"H3\", \"H4\", \"H5\"],\n \"ads_copy\": [\n {\"title\": \"Angle 1\", \"text\": \"...\"},\n {\"title\": \"Angle 2\", \"text\": \"...\"},\n {\"title\": \"Angle 3\", \"text\": \"...\"},\n {\"title\": \"Angle 4\", \"text\": \"...\"},\n {\"title\": \"Angle 5\", \"text\": \"...\"}\n ],\n \"image_prompts\": [\n {\"title\": \"Concept 1\", \"prompt\": \"...\"},\n {\"title\": \"Concept 2\", \"prompt\": \"...\"},\n {\"title\": \"Concept 3\", \"prompt\": \"...\"},\n {\"title\": \"Concept 4\", \"prompt\": \"...\"},\n {\"title\": \"Concept 5\", \"prompt\": \"...\"}\n ]\n }`;\n\n try {\n let raw = await callAI(systemPrompt);\n \n // --- JSON CLEANING LOGIC ---\n // Find the first '{' and the last '}' to strip Markdown and extra text\n const start = raw.indexOf('{');\n const end = raw.lastIndexOf('}');\n \n if (start === -1 || end === -1) {\n throw new Error(\"Invalid JSON format from AI\");\n }\n \n let cleanedRaw = raw.substring(start, end + 1);\n \n // Attempt to parse\n currentData = JSON.parse(cleanedRaw);\n \n // --- DEFAULT INITIALIZATION (Safeguard) ---\n if (!currentData.product_gallery) currentData.product_gallery = [];\n if (!currentData.proof_list) currentData.proof_list = [];\n if (!currentData.custom_content) currentData.custom_content = [];\n if (!currentData.headline_variants) currentData.headline_variants = [];\n if (!currentData.ads_copy) currentData.ads_copy = [];\n if (!currentData.image_prompts) currentData.image_prompts = [];\n \n currentData.cta_link = \"#\";\n currentData.brand_color = \"#dc2626\";\n currentData.product_image = \"\";\n currentData.solution_image = \"\";\n currentData.sticky_cta = true;\n currentData.sticky_warning = true;\n currentData.custom_text_middle = \"\"; \n if(!currentData.closing_cta_text) currentData.closing_cta_text = \"Ambil Promo Di Atas 👆\";\n currentData.footer_text = `© ${new Date().getFullYear()} ${currentData.founder_name || 'All Rights Reserved'}.`;\n\n saveState(); \n populateEditor(); \n updatePreview();\n \n document.getElementById('inputSection').classList.add('hidden');\n document.getElementById('editorSection').classList.remove('hidden');\n\n } catch (e) { \n console.error(e);\n alert(\"Gagal Generate: \" + e.message + \"\\n\\nCoba lagi, kadang AI sedang sibuk.\"); \n } finally { \n document.getElementById('btnGenerate').disabled = false;\n document.getElementById('loadingOverlay').classList.add('hidden');\n document.getElementById('loadingOverlay').classList.remove('flex');\n }\n }\n\n function populateEditor() {\n if(!currentData) return;\n \n try {\n const simpleMap = {\n 'top_warning': 'input', 'price_anchor': 'input', 'price_promo': 'input', \n 'cta_text': 'input', 'cta_link': 'input', 'product_image': 'input', 'founder_name': 'input',\n 'solution_image': 'input', 'guarantee': 'input', 'footer_text': 'input', 'proof_layout': 'select',\n 'closing_cta_text': 'input'\n };\n for(const [key, type] of Object.entries(simpleMap)) {\n const el = document.querySelector(`[data-key=\"${key}\"]`);\n if(el) el.value = currentData[key] || '';\n }\n \n const richMap = ['headline', 'jack_words', 'pain_agitation', 'opener_story', 'solution_bridge', 'authority_text', 'push_pull_text', 'urgency_text', 'custom_text_middle', 'closing_text'];\n richMap.forEach(key => {\n const el = document.querySelector(`[data-key=\"${key}\"]`);\n if(el) el.innerHTML = currentData[key] || '';\n });\n\n if(currentData.brand_color) document.getElementById('brandColorPicker').value = currentData.brand_color;\n if(document.getElementById('stickyWarningCheck')) document.getElementById('stickyWarningCheck').checked = currentData.sticky_warning !== false; \n\n const painEditor = document.getElementById('painPointsEditor');\n if(painEditor && currentData.pain_points) painEditor.innerHTML = currentData.pain_points.map(p => `<div>${p}</div>`).join('');\n\n renderDynamicList('benefits', ['icon', 'title', 'desc']);\n renderDynamicList('product_gallery', ['url']);\n renderDynamicList('feature_benefits', ['feature', 'benefit']);\n renderDynamicList('testimonials', ['name', 'text', 'image']);\n renderDynamicList('proof_list', ['url', 'caption']);\n renderDynamicList('bonuses', ['title', 'value']);\n renderDynamicList('faq', ['q', 'a']);\n \n renderCustomContentList();\n renderAdsKit();\n } catch (e) {\n console.error(\"Error populating editor:\", e);\n alert(\"Ada kesalahan saat memuat editor. Data mungkin tidak lengkap.\");\n }\n }\n\n function renderDynamicList(key, fields) {\n const container = document.getElementById(key + 'EditorContainer');\n if(!container || !currentData[key]) return;\n container.innerHTML = '';\n currentData[key].forEach((item, index) => {\n const div = document.createElement('div');\n div.className = \"bg-gray-700 p-2 rounded border border-gray-600 relative group mb-2\";\n let inputs = '';\n fields.forEach(f => {\n const val = item[f] || '';\n const isLong = f === 'desc' || f === 'text' || f === 'benefit' || f === 'a';\n let label = f === 'url' ? 'URL Gambar' : f;\n if(f === 'image' || f === 'url') {\n inputs += `<div class=\"mb-1\"><label class=\"text-[10px] text-gray-400 uppercase\">${label}</label><div class=\"flex gap-1\"><input type=\"text\" class=\"edit-input text-xs !mb-0\" value=\"${val}\" oninput=\"updateArrayItem('${key}', ${index}, '${f}', this.value)\" placeholder=\"https://...\"><a href=\"https://img.nobullshitengine.my.id/\" target=\"_blank\" class=\"bg-gray-600 px-2 rounded flex items-center text-white text-[10px] hover:bg-gray-500\"><i class=\"fa-solid fa-upload\"></i></a></div></div>`;\n } else if(isLong) {\n inputs += `<textarea class=\"edit-input mb-1 text-xs\" rows=\"2\" oninput=\"updateArrayItem('${key}', ${index}, '${f}', this.value)\" placeholder=\"${f}\">${val}</textarea>`;\n } else {\n inputs += `<input type=\"text\" class=\"edit-input mb-1 text-xs\" value=\"${val}\" oninput=\"updateArrayItem('${key}', ${index}, '${f}', this.value)\" placeholder=\"${f}\">`;\n }\n });\n div.innerHTML = `<button onclick=\"removeArrayItem('${key}', ${index})\" class=\"absolute top-1 right-1 text-red-400 hover:text-white text-xs p-1 opacity-50 group-hover:opacity-100 transition\"><i class=\"fa-solid fa-times\"></i></button>${inputs}`;\n container.appendChild(div);\n });\n }\n\n function renderCustomContentList() {\n const container = document.getElementById('custom_contentEditorContainer');\n if(!container) return;\n container.innerHTML = '';\n if(!currentData.custom_content) currentData.custom_content = [];\n\n currentData.custom_content.forEach((item, index) => {\n const div = document.createElement('div');\n div.className = \"bg-gray-700 p-2 rounded border border-gray-600 relative group mb-2\";\n \n let inputHtml = '';\n if(item.type === 'text') {\n inputHtml = `<div class=\"rich-wrapper\"><div class=\"toolbar-container\"></div><div class=\"rich-editor\" contenteditable=\"true\" oninput=\"updateCustomContent(${index}, 'value', this.innerHTML)\">${item.value}</div></div>`;\n } else if (item.type === 'image') {\n inputHtml = `<label class=\"text-[10px] text-gray-400 uppercase\">URL Gambar</label><div class=\"flex gap-1\"><input type=\"text\" class=\"edit-input text-xs !mb-0\" value=\"${item.value}\" oninput=\"updateCustomContent(${index}, 'value', this.value)\" placeholder=\"https://...\"><a href=\"https://img.nobullshitengine.my.id/\" target=\"_blank\" class=\"bg-gray-600 px-2 rounded flex items-center text-white text-[10px] hover:bg-gray-500\"><i class=\"fa-solid fa-upload\"></i></a></div>`;\n } else if (item.type === 'list') {\n inputHtml = `<label class=\"text-[10px] text-gray-400 uppercase\">List Item (Enter untuk baris baru)</label><textarea class=\"edit-input text-xs\" rows=\"4\" oninput=\"updateCustomContent(${index}, 'value', this.value)\">${item.value}</textarea>`;\n }\n\n div.innerHTML = `\n <div class=\"flex justify-between items-center mb-1\">\n <span class=\"text-[10px] uppercase font-bold text-gray-400 bg-gray-800 px-2 rounded\">${item.type}</span>\n <button onclick=\"removeArrayItem('custom_content', ${index})\" class=\"text-red-400 hover:text-white text-xs\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n ${inputHtml}\n `;\n container.appendChild(div);\n });\n\n // Re-init toolbars\n const toolbarHTML = document.getElementById('toolbarTemplate').innerHTML;\n container.querySelectorAll('.toolbar-container').forEach(el => el.innerHTML = toolbarHTML);\n }\n\n function updateCustomContent(index, field, val) {\n currentData.custom_content[index][field] = val;\n }\n\n function debounce(func, wait) {\n let timeout;\n return function(...args) {\n clearTimeout(timeout);\n timeout = setTimeout(() => func.apply(this, args), wait);\n };\n }\n \n // Manual save only\n const debouncedPreview = () => {}; \n\n function updateData(el) {\n const key = el.getAttribute('data-key');\n currentData[key] = el.isContentEditable ? el.innerHTML : el.value;\n }\n function updateArrayData(el, key) {\n currentData[key] = el.innerText.split('\\n').filter(l => l.trim());\n }\n function updateArrayItem(key, index, field, val) {\n currentData[key][index][field] = val;\n }\n function addItemToArray(key, extra={}) {\n let newItem = {};\n if(key === 'custom_content') {\n newItem = { type: extra.type, value: extra.type === 'text' ? '<p>Teks baru...</p>' : '' };\n } else if(key === 'benefits') newItem = {icon:'✨', title:'Benefit', desc:'...'};\n else if(key === 'feature_benefits') newItem = {feature:'Fitur', benefit:'...'};\n else if(key === 'testimonials') newItem = {name:'User', text:'...', role:'Pembeli', image:''};\n else if(key === 'bonuses') newItem = {title:'Bonus', value:'Rp 0'};\n else if(key === 'faq') newItem = {q: '?', a: '...'};\n else if(key === 'product_gallery') newItem = {url: ''};\n else if(key === 'proof_list') newItem = {url: '', caption: 'Bukti...'};\n\n if (!currentData[key]) currentData[key] = [];\n currentData[key].push(newItem);\n populateEditor(); saveState(); updatePreview();\n }\n function removeArrayItem(key, index) {\n if(confirm(\"Hapus item?\")) {\n currentData[key].splice(index, 1);\n populateEditor(); saveState(); updatePreview();\n }\n }\n function updateBrandColor(val) { currentData.brand_color = val; saveState(); updatePreview(); }\n function updateSticky(val) { currentData.sticky_cta = val; saveState(); updatePreview(); }\n function updateStickyWarning(val) { currentData.sticky_warning = val; saveState(); updatePreview(); }\n \n function manualSaveAndRender() {\n saveState();\n updatePreview();\n alert(\"Perubahan Disimpan & Preview Diupdate!\");\n }\n\n // --- 7. UTILS ---\n function escapeHtml(text) { if (!text) return ''; return text.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\").replace(/'/g, \"'\"); }\n function copyDataText(btn) {\n navigator.clipboard.writeText(btn.getAttribute('data-text'));\n const og = btn.innerText; btn.innerText = \"COPIED!\"; btn.classList.add('bg-green-500','text-white');\n setTimeout(() => { btn.innerText = og; btn.classList.remove('bg-green-500','text-white'); }, 1500);\n }\n function execCmd(btn, cmd, val=null) {\n const editor = btn.closest('.rich-wrapper').querySelector('.rich-editor');\n editor.focus(); document.execCommand(cmd, false, val); updateData(editor);\n }\n function renderAdsKit() {\n const container = document.getElementById('adsContainer');\n if(!container) return;\n container.innerHTML = '';\n \n if(currentData.headline_variants && currentData.headline_variants.length > 0) {\n container.innerHTML += `<div class=\"text-xs font-bold text-yellow-400 uppercase tracking-widest mb-2 border-b border-gray-700 pb-1\">5 Variasi Headline</div>`;\n currentData.headline_variants.forEach(h => {\n const safeText = escapeHtml(h);\n container.innerHTML += `<div class=\"ads-card group\"><button class=\"copy-btn-abs\" data-text=\"${safeText}\" onclick=\"copyDataText(this)\">COPY</button><p class=\"text-xs text-white leading-relaxed font-medium\">\"${h}\"</p></div>`;\n });\n }\n if(currentData.ads_copy && currentData.ads_copy.length > 0) {\n container.innerHTML += `<div class=\"text-xs font-bold text-cyan-400 uppercase tracking-widest mb-2 mt-4 border-b border-gray-700 pb-1\">5 Copy Iklan (FB/IG/TikTok)</div>`;\n currentData.ads_copy.forEach(ad => {\n const safeText = escapeHtml(ad.text);\n container.innerHTML += `<div class=\"ads-card group\"><button class=\"copy-btn-abs\" data-text=\"${safeText}\" onclick=\"copyDataText(this)\">COPY</button><span class=\"text-[10px] text-gray-500 font-bold uppercase mb-1 block\">${ad.title}</span><p class=\"text-xs text-gray-300 leading-relaxed whitespace-pre-wrap\">${ad.text}</p></div>`;\n });\n }\n if(currentData.image_prompts && currentData.image_prompts.length > 0) {\n container.innerHTML += `<div class=\"text-xs font-bold text-green-400 uppercase tracking-widest mb-2 mt-4 border-b border-gray-700 pb-1\">5 Prompt Gambar AI</div>`;\n currentData.image_prompts.forEach(p => {\n const safeText = escapeHtml(p.prompt);\n container.innerHTML += `<div class=\"ads-card group\"><button class=\"copy-btn-abs\" data-text=\"${safeText}\" onclick=\"copyDataText(this)\">COPY</button><span class=\"text-[10px] text-gray-500 font-bold uppercase mb-1 block\">${p.title}</span><p class=\"text-xs text-green-200/80 font-mono leading-relaxed select-all bg-black/20 p-1 rounded\">${p.prompt}</p></div>`;\n });\n }\n }\n\n // --- PREVIEW GENERATOR ---\n function getCommonElements(d) {\n const color = d.brand_color || '#dc2626';\n const heroImage = d.product_image ? `<div class=\"mb-8 rounded-xl overflow-hidden shadow-2xl border-4 border-white animate-zoom-in relative\"><div class=\"absolute top-4 right-4 bg-white/90 backdrop-blur px-3 py-1 rounded-full text-xs font-bold text-black shadow-lg\">⭐ Show Off Result</div><img src=\"${d.product_image}\" alt=\"Product\" class=\"w-full h-auto object-cover hover:scale-105 transition duration-700\"></div>` : '';\n \n let galleryHTML = '';\n if (d.product_gallery && d.product_gallery.length > 0) {\n galleryHTML = `<div class=\"grid grid-cols-2 gap-2 mb-8\">`;\n d.product_gallery.forEach(img => {\n if(img.url) galleryHTML += `<div class=\"rounded-lg overflow-hidden shadow border border-gray-200\"><img src=\"${img.url}\" class=\"w-full h-48 md:h-64 object-cover\"></div>`;\n });\n galleryHTML += `</div>`;\n }\n\n const solutionImage = d.solution_image ? `<div class=\"my-6 rounded-lg overflow-hidden shadow-lg border border-gray-200 animate-zoom-in\"><img src=\"${d.solution_image}\" alt=\"Solution Product\" class=\"w-full h-auto object-cover\"></div>` : '';\n const sticky = d.sticky_cta ? `<div class=\"fixed bottom-0 left-0 w-full bg-white border-t border-gray-200 p-3 z-50 md:hidden shadow-[0_-5px_15px_rgba(0,0,0,0.1)] animate-fade-up\"><a href=\"${d.cta_link}\" style=\"background: ${color}\" class=\"block w-full text-white text-center font-bold py-3 rounded-lg shadow-lg animate-pulse-slow text-lg\">${d.cta_text} 👉</a></div>` : '';\n \n const testis = `<div class=\"grid md:grid-cols-3 gap-4 my-8\">${(d.testimonials||[]).map(t => {\n const avatar = t.image ? `<img src=\"${t.image}\" class=\"w-8 h-8 rounded-full object-cover\">` : `<div class=\"w-8 h-8 bg-gray-200 rounded-full flex items-center justify-center font-bold text-gray-500 text-xs\">${t.name.charAt(0)}</div>`;\n return `<div class=\"bg-gray-50 p-6 rounded-xl border border-gray-100 shadow-sm hover:shadow-md transition\"><div class=\"flex text-yellow-400 text-xs mb-3\"><i class=\"fa-solid fa-star\"></i><i class=\"fa-solid fa-star\"></i><i class=\"fa-solid fa-star\"></i><i class=\"fa-solid fa-star\"></i><i class=\"fa-solid fa-star\"></i></div><p class=\"text-gray-700 italic text-sm mb-4 leading-relaxed\">\"${t.text}\"</p><div class=\"flex items-center gap-3\">${avatar}<div><p class=\"font-bold text-gray-900 text-xs\">${t.name}</p><p class=\"text-[10px] text-gray-500\">${t.role}</p></div></div></div>`;\n }).join('')}</div>`;\n \n let proofHTML = '';\n if(d.proof_list && d.proof_list.length > 0) {\n proofHTML += `<div class=\"my-10 px-2\"><h3 class=\"font-bold text-lg text-center uppercase tracking-widest text-gray-400 mb-6\">Bukti Nyata</h3>`;\n if(d.proof_layout === 'grid') {\n proofHTML += `<div class=\"grid grid-cols-2 md:grid-cols-3 gap-3\">`;\n d.proof_list.forEach(p => { if(p.url) proofHTML += `<div class=\"relative group rounded-lg overflow-hidden shadow-md border border-gray-200 bg-white\"><img src=\"${p.url}\" class=\"w-full h-auto object-cover hover:scale-105 transition duration-500\">${p.caption ? `<div class=\"absolute bottom-0 left-0 w-full bg-black/60 text-white text-[10px] p-2 text-center backdrop-blur-sm\">${p.caption}</div>` : ''}</div>`; });\n proofHTML += `</div>`;\n } else {\n proofHTML += `<div class=\"space-y-4 max-w-md mx-auto\">`;\n d.proof_list.forEach(p => { if(p.url) proofHTML += `<div class=\"rounded-lg overflow-hidden shadow-lg border border-gray-200 bg-white\"><img src=\"${p.url}\" class=\"w-full h-auto\">${p.caption ? `<div class=\"p-3 bg-gray-50 text-xs text-gray-600 text-center border-t border-gray-100 italic\">\"${p.caption}\"</div>` : ''}</div>`; });\n proofHTML += `</div>`;\n }\n proofHTML += `</div>`;\n }\n\n // NEW: Custom Content Section (Section 6)\n let customContentHTML = '';\n if(d.custom_content && d.custom_content.length > 0) {\n customContentHTML += `<div class=\"my-12 prose prose-lg mx-auto text-gray-700\">`;\n d.custom_content.forEach(c => {\n if(c.type === 'text') customContentHTML += `<div class=\"mb-6 leading-relaxed\">${c.value}</div>`;\n else if(c.type === 'image') customContentHTML += `<img src=\"${c.value}\" class=\"w-full rounded-xl shadow-lg my-6\">`;\n else if(c.type === 'list') {\n const items = c.value.split('\\n').filter(i=>i);\n customContentHTML += `<ul class=\"space-y-2 mb-6\">${items.map(i => `<li class=\"flex items-start gap-2\"><i class=\"fa-solid fa-check text-green-500 mt-1\"></i> <span>${i}</span></li>`).join('')}</ul>`;\n }\n });\n customContentHTML += `</div>`;\n }\n\n // NEW: Closing Section (Section 8)\n const closingSection = `\n <div class=\"mt-12 mb-8 text-center px-4\">\n <div class=\"prose prose-lg mx-auto text-gray-800 font-medium italic mb-8\">\n \"${d.closing_text}\"\n </div>\n <a href=\"#offer\" class=\"inline-flex items-center justify-center gap-2 bg-gray-900 text-white font-bold py-3 px-8 rounded-full shadow-lg hover:scale-105 transition hover:bg-black\">\n ${d.closing_cta_text} <i class=\"fa-solid fa-arrow-up\"></i>\n </a>\n </div>\n `;\n\n const bonuses = `<div class=\"bg-yellow-50 border-2 border-yellow-400 border-dashed rounded-xl p-6 my-6 relative overflow-hidden\"><div class=\"absolute top-0 right-0 bg-yellow-400 text-yellow-900 text-[10px] font-bold px-3 py-1 rounded-bl-lg\">SPECIAL BONUS</div><ul class=\"space-y-3 mt-2\">${(d.bonuses||[]).map(b => `<li class=\"flex justify-between items-center text-sm border-b border-yellow-200 pb-2 last:border-0\"><span class=\"font-bold text-gray-800 flex items-center gap-2\"><i class=\"fa-solid fa-gift text-red-500\"></i> ${b.title}</span><span class=\"bg-white px-2 py-0.5 rounded text-gray-500 text-xs line-through decoration-red-500\">${b.value}</span></li>`).join('')}</ul></div>`;\n const featureBenefits = d.feature_benefits && d.feature_benefits.length > 0 ? `<div class=\"my-10 bg-gray-50 border-l-4 p-6 rounded-r-xl\" style=\"border-color: ${color}\"><h3 class=\"font-bold text-lg mb-4 text-gray-800 uppercase tracking-wide\">Sehingga dengan ${document.getElementById('productName').value}...</h3><ul class=\"space-y-4\">${d.feature_benefits.map(fb => `<li class=\"flex items-start gap-3\"><div class=\"mt-1 text-green-500\"><i class=\"fa-solid fa-circle-check\"></i></div><div><span class=\"font-bold text-gray-900 block text-sm\">${fb.feature}</span><span class=\"text-sm text-gray-600 italic\">\"Membuat kamu ${fb.benefit}\"</span></div></li>`).join('')}</ul></div>` : '';\n const customMiddle = d.custom_text_middle ? `<div class=\"prose prose-lg mx-auto my-8 text-gray-700 leading-relaxed\">${d.custom_text_middle}</div>` : '';\n const faq = `<div class=\"max-w-2xl mx-auto my-12 px-4\"><h3 class=\"font-bold text-xl text-center mb-6 uppercase tracking-widest text-gray-800\">Sering Ditanyakan</h3><div class=\"space-y-3\">${(d.faq||[]).map(f => `<details class=\"group bg-white border border-gray-200 rounded-lg overflow-hidden\"><summary class=\"flex justify-between items-center p-4 font-bold text-gray-800 cursor-pointer hover:bg-gray-50 transition select-none\"><span>${f.q}</span><i class=\"fa-solid fa-chevron-down text-xs text-gray-400 transition-transform group-open:rotate-180\"></i></summary><div class=\"p-4 pt-0 text-gray-600 text-sm leading-relaxed border-t border-transparent group-open:border-gray-100\">${f.a}</div></details>`).join('')}</div></div>`;\n\n return { color, heroImage, galleryHTML, solutionImage, sticky, testis, proofHTML, bonuses, featureBenefits, customMiddle, customContentHTML, faq, closingSection };\n }\n\n function getBrutalTemplate(d, c) {\n const stickyWarningClass = (d.sticky_warning !== false) ? 'sticky top-0 z-50' : 'relative';\n return `\n <!DOCTYPE html>\n <html lang=\"id\" class=\"scroll-smooth\">\n <head>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <script src=\"https://cdn.tailwindcss.com\"><\\/script>\n <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@400;700;900&family=Merriweather:ital,wght@0,400;0,700;1,400&display=swap\" rel=\"stylesheet\">\n <script src=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/js/all.min.js\"><\\/script>\n <style>\n body { font-family: 'Inter', sans-serif; }\n .serif { font-family: 'Merriweather', serif; }\n @keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }\n @keyframes pulseSlow { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.02); } }\n .animate-fade-up { animation: fadeInUp 0.8s ease-out forwards; opacity: 0; }\n .animate-pulse-slow { animation: pulseSlow 2s infinite; }\n </style>\n <script>\n document.addEventListener('contextmenu', function(e) { e.preventDefault(); });\n document.addEventListener('keydown', function(e) {\n // F12\n if (e.key === 'F12' || e.keyCode === 123) { e.preventDefault(); return false; }\n // Windows: Ctrl + Shift + I/J/C\n if (e.ctrlKey && e.shiftKey && (['I','J','C'].includes(e.key) || [73,74,67].includes(e.keyCode))) { e.preventDefault(); return false; }\n // Mac: Cmd + Option + I/J/C\n if (e.metaKey && e.altKey && (['I','J','C'].includes(e.key) || [73,74,67].includes(e.keyCode))) { e.preventDefault(); return false; }\n // View Source: Ctrl/Cmd + U\n if ((e.ctrlKey || e.metaKey) && (e.key === 'u' || e.keyCode === 85)) { e.preventDefault(); return false; }\n });\n <\\/script>\n </head>\n <body class=\"bg-gray-100 text-gray-900 pb-20 md:pb-0\" oncontextmenu=\"return false;\">\n <div style=\"background: ${c.color}\" class=\"text-white text-center py-2 px-4 text-xs font-bold uppercase tracking-widest ${stickyWarningClass} shadow-md\">⚠️ ${d.top_warning}</div>\n <div class=\"max-w-3xl mx-auto bg-white shadow-xl overflow-hidden min-h-screen\">\n <header class=\"p-6 md:p-10 text-center border-b-4 border-black pb-8\">\n <h1 class=\"text-3xl md:text-5xl font-black leading-tight mb-4 animate-fade-up tracking-tight\">${d.headline}</h1>\n <div class=\"bg-gray-100 p-4 rounded-lg border-l-4 border-black italic text-gray-700 font-serif text-lg leading-relaxed animate-fade-up\" style=\"animation-delay: 0.1s\">\"${d.jack_words}\"</div>\n </header>\n <div class=\"p-6 md:p-10\">\n ${c.heroImage} ${c.galleryHTML}\n <div class=\"flex items-center gap-4 bg-gray-50 p-4 rounded-xl border border-gray-200 mb-8 animate-fade-up\" style=\"animation-delay: 0.2s\">\n <div class=\"w-12 h-12 rounded-full bg-gray-300 flex items-center justify-center font-bold text-xl text-gray-500 overflow-hidden\"><i class=\"fa-solid fa-user\"></i></div>\n <div><p class=\"text-xs text-gray-500 uppercase font-bold tracking-wider\">SIAPA SAYA?</p><p class=\"font-bold text-gray-900\">${d.founder_name}</p><p class=\"text-sm text-gray-600 italic\">\"${d.authority_text}\"</p></div>\n </div>\n <div class=\"bg-red-50 border-l-4 border-red-500 p-6 rounded-r-lg mb-8 animate-fade-up\" style=\"animation-delay: 0.3s\">\n <p class=\"font-bold text-red-800 text-lg mb-2\"><i class=\"fa-solid fa-triangle-exclamation\"></i> Masalahnya...</p><div class=\"text-red-900/80 leading-relaxed\">${d.pain_agitation}</div>\n </div>\n <div class=\"prose prose-lg mx-auto text-gray-700 leading-relaxed mb-10 animate-fade-up\" style=\"animation-delay: 0.4s\">\n <h3 class=\"font-bold text-black text-xl mb-4\">Mungkin Anda Merasakan Ini...</h3>\n <ul class=\"space-y-3 mb-8 list-none pl-0\">${(d.pain_points||[]).map(p => `<li class=\"flex items-start gap-3\"><i class=\"fa-solid fa-xmark text-red-500 mt-1\"></i> <span>${p}</span></li>`).join('')}</ul>\n <div class=\"bg-gray-50 p-6 rounded-xl border border-gray-200 italic text-gray-600 font-serif\">\"${d.opener_story}\"</div>\n </div>\n <div class=\"bg-black text-white p-8 rounded-2xl shadow-xl text-center transform rotate-1 hover:rotate-0 transition duration-500 mb-12\">\n <h2 class=\"text-2xl font-bold text-yellow-400 mb-4 uppercase tracking-widest\">Solusi Baru</h2><p class=\"text-lg text-gray-300\">${d.solution_bridge}</p>\n </div>\n ${c.solutionImage}\n <div class=\"grid gap-6 mb-12\">${(d.benefits||[]).map((b, i) => `<div class=\"flex items-start gap-4 p-4 rounded-xl hover:bg-gray-50 transition border border-transparent hover:border-gray-200\"><div class=\"text-3xl bg-gray-100 w-12 h-12 flex items-center justify-center rounded-full shrink-0\" style=\"color:${c.color}\">${b.icon}</div><div><h4 class=\"font-bold text-lg text-gray-900\">${b.title}</h4><p class=\"text-sm text-gray-600 leading-relaxed\">${b.desc}</p></div></div>`).join('')}</div>\n ${c.featureBenefits}\n <div class=\"text-center mb-10\"><h3 class=\"font-bold text-xl uppercase tracking-widest text-gray-400 mb-4\">Apa Kata Mereka?</h3>${c.testis}</div>\n ${c.proofHTML}\n ${c.customMiddle}\n \n <div id=\"offer\" class=\"border-4 p-8 rounded-3xl text-center relative mt-16 shadow-2xl bg-white overflow-hidden\" style=\"border-color: ${c.color}\">\n <div class=\"absolute -top-10 -right-10 w-32 h-32 bg-yellow-400 rotate-45 z-0\"></div>\n <div class=\"relative z-10\">\n <h3 class=\"text-3xl font-black mb-6 uppercase\">Penawaran Spesial</h3>\n ${c.bonuses}\n <div class=\"my-8\"><p class=\"text-gray-400 line-through text-lg font-bold\">${d.price_anchor}</p><p class=\"text-5xl font-black tracking-tighter\" style=\"color: ${c.color}\">${d.price_promo}</p></div>\n <a href=\"${d.cta_link}\" style=\"background: ${c.color}; box-shadow: 0 10px 25px -5px ${c.color}80;\" class=\"block w-full text-white text-xl font-bold py-5 rounded-xl hover:scale-105 transition transform animate-pulse-slow mb-4\">${d.cta_text} <i class=\"fa-solid fa-arrow-right ml-2\"></i></a>\n <div class=\"flex items-center justify-center gap-2 text-xs text-gray-500 font-bold uppercase tracking-wider\"><i class=\"fa-solid fa-shield-halved text-green-500\"></i> ${d.guarantee}</div>\n </div>\n </div>\n\n <!-- MOVED PUSH PULL HERE (AFTER OFFER) -->\n <div class=\"bg-blue-50 border-l-4 border-blue-500 p-6 my-10 prose prose-lg mx-auto\">\n ${d.push_pull_text}\n </div>\n\n <!-- NEW URGENCY BLOCK HERE -->\n <div class=\"bg-red-50 border-l-4 border-red-500 p-6 my-8 prose prose-lg mx-auto\">\n ${d.urgency_text}\n </div>\n\n <!-- SECTION 6: CUSTOM CONTENT -->\n ${c.customContentHTML}\n\n <!-- SECTION 7: FAQ -->\n ${c.faq}\n\n <!-- SECTION 8: CLOSING -->\n ${c.closingSection}\n\n <footer class=\"text-center mt-12 text-gray-400 text-xs pb-10\">${d.footer_text}</footer>\n </div>\n </div>\n ${c.sticky}\n </body>\n </html>\n `;\n }\n \n function switchTemplate(tpl) { currentTemplate = tpl; const colors = {'brutal':'#dc2626', 'modern':'#2563eb', 'luxury':'#d4af37', 'fresh':'#16a34a', 'letter':'#333'}; if(colors[tpl]) updateBrandColor(colors[tpl]); updatePreview(); }\n function updatePreview() { if(!currentData) return; const common = getCommonElements(currentData); const html = getBrutalTemplate(currentData, common); const iframe = document.getElementById('previewFrame'); iframe.contentWindow.document.open(); iframe.contentWindow.document.write(html); iframe.contentWindow.document.close(); }\n function copyHtmlCode() { const common = getCommonElements(currentData); const html = getBrutalTemplate(currentData, common); navigator.clipboard.writeText(html).then(() => alert(\"Copied!\")); }\n function downloadHtml() { const common = getCommonElements(currentData); const html = getBrutalTemplate(currentData, common); const blob = new Blob([html], { type: 'text/html' }); const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = `landingpage.html`; document.body.appendChild(a); a.click(); document.body.removeChild(a); }\n function generateWALink() { const num = document.getElementById('waNumber').value.replace(/\\D/g,''); const msg = encodeURIComponent(document.getElementById('waMessage').value); const link = `https://wa.me/${num}?text=${msg}`; document.querySelector('[data-key=\"cta_link\"]').value = link; currentData.cta_link = link; saveState(); updatePreview(); document.getElementById('waModal').classList.add('hidden'); }\n function saveState() { if(currentData) { localStorage.setItem('nbe_v14_data', JSON.stringify(currentData)); const status = document.getElementById('saveStatus'); status.classList.remove('hidden'); setTimeout(() => status.classList.add('hidden'), 2000); } }\n function restoreState() { const data = localStorage.getItem('nbe_v14_data'); if(data) { currentData = JSON.parse(data); populateEditor(); updatePreview(); document.getElementById('inputSection').classList.add('hidden'); document.getElementById('editorSection').classList.remove('hidden'); } }\n function resetGenerator() { if(confirm(\"Reset?\")) { localStorage.removeItem('nbe_v14_data'); location.reload(); } }\n function setPreviewSize(size) { const wrapper = document.getElementById('previewWrapper'); wrapper.style.maxWidth = size; if(size === '100%') wrapper.style.maxWidth = '100%'; }\n </script>\n</body>\n</html>","portalselector":"html-head","inhead":false,"overrideStyle":{"shadow":{"default":{}}},"dynamicStyleKey":[],"dirty":null},"components":{"byId":{},"allIds":[]}}},"allIds":["AUuF"]}}},"allIds":["bcb8"]},"slug":"vip2-access-x99-secure-entry-point-774823-no-bullshit-engine-pro-v10-unlock-boost","canvas":"0","state":"publish","userUuid":"69740f4bde2126df5ae83752","publishSlug":"vip2-access-x99-secure-entry-point-774823-no-bullshit-engine-pro-v10-unlock-boost","slugName":"nbengine","isOriginal":true,"isABTesting":false,"autoSave":false,"index":false,"settings":{"keyword_phrase":"","keyword_phrase_options":[],"seo_title":["title","separator","keyword"],"meta_description":"","search_engine_display":true,"search_engine_follow":true,"scripts":{"disable_global":false,"head":"<head>\n <style id=\"lock-style\">\n html { display: none; }\n </style>\n\n <script type=\"text/javascript\">\n (function() {\n // Password Anda\n var passCode = \"RQuQNlj7B9728E4F404fSXV\";\n \n // Nama kunci sesi (bebas, asal unik)\n var sessionKey = \"access_granted\";\n\n // Fungsi untuk membuka halaman\n function unlockPage() {\n var styleTag = document.getElementById('lock-style');\n if (styleTag) {\n styleTag.remove(); // Menghapus CSS yang menyembunyikan halaman\n }\n }\n\n // LOGIKA UTAMA:\n // Cek apakah user sudah pernah memasukkan password di sesi tab ini?\n if (sessionStorage.getItem(sessionKey) === \"true\") {\n // JIKA SUDAH: Langsung buka halaman (tanpa prompt)\n // Kita perlu menunggu sebentar agar DOM siap, atau gunakan event listener\n document.addEventListener(\"DOMContentLoaded\", unlockPage);\n // Backup jika DOM sudah terlanjur siap\n if (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n unlockPage();\n }\n } else {\n // JIKA BELUM: Munculkan Prompt Password\n var input = prompt(\"Halaman Terkunci. Masukkan Password:\", \"\");\n\n if (input === passCode) {\n // Password Benar: Simpan status ke sessionStorage & Buka halaman\n sessionStorage.setItem(sessionKey, \"true\");\n unlockPage();\n } else {\n // Password Salah: Redirect\n alert(\"Password Salah!\");\n window.location.href = \"https://www.google.com\"; \n }\n }\n })();\n </script>\n \n <title>Proteksi Session</title>\n</head>","head_desktop":"","head_mobile":"","footer":"","footer_desktop":"","footer_mobile":""},"utm_trackings":{"utm_source":false,"utm_medium":false,"utm_campaign":false,"utm_term":false,"utm_content":false},"published_on":null,"cloakValue":{"device":[],"os":[],"countries":[],"url_redirect":""},"limiterValue":{"limit":0,"reset":0,"refer":["direct"],"whiteList":[],"urlRedirectTo":""},"boost":true,"formulirBoost":false},"permalink":"https://nbengine.buat.page/vip2-access-x99-secure-entry-point-774823-no-bullshit-engine-pro-v10-unlock-boost","pageContentId":"69786a12e7e36511d77ac6d7"},"pixel":{"_id":"697413384c9e3f0cd2f84a5c","pixel":{"tiktok":{"autoPageView":false,"byId":{},"allIds":[]},"facebook":{"autoPageView":false,"byId":{"tCT3":{"id":"1686607428984901","name":"No Bullshit Engine","_id":"tCT3"}},"allIds":["tCT3"]},"snackvideo":{"autoPageView":false,"byId":{},"allIds":[]},"googletagmanager":{"autoPageView":false,"byId":{},"allIds":[]},"_id":"6974133848bfe9d30d5167d4"}}}