{"id":91,"date":"2026-04-19T15:38:49","date_gmt":"2026-04-19T15:38:49","guid":{"rendered":"https:\/\/cashchat.se\/dir\/?page_id=91"},"modified":"2026-05-25T21:28:27","modified_gmt":"2026-05-25T21:28:27","slug":"access","status":"publish","type":"page","link":"https:\/\/cashchat.se\/dir\/access\/","title":{"rendered":"Access"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, viewport-fit=cover\">\n  <title>Adase Ads Ltd | Complete Ad + SMM Platform<\/title>\n  <!-- Font Awesome + Google Fonts -->\n  <link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.5.0\/css\/all.min.css\">\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:opsz,wght@14..32,300;400;500;600;700;800&#038;display=swap\" rel=\"stylesheet\">\n  <!-- SheetJS for Excel export -->\n  <script src=\"https:\/\/cdn.sheetjs.com\/xlsx-0.20.2\/package\/dist\/xlsx.full.min.js\"><\/script>\n  <!-- html2pdf for PDF export (lightweight) -->\n  <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html2pdf.js\/0.10.1\/html2pdf.bundle.min.js\" integrity=\"sha512-GsLlZN\/3F2ErC5ifS5QtgpiJtWd43JWSuIgh7mbzZ8zBps+dvLusV+eNQATqgA\/HdeKFVgA5v3S\/cIrLF7QnIg==\" crossorigin=\"anonymous\" referrerpolicy=\"no-referrer\"><\/script>\n  <style>\n    * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', sans-serif; }\n    body { background: #f5f7fb; color: #1a2634; padding-bottom: 40px; }\n    .container { max-width: 1280px; margin: 0 auto; padding: 0 20px; }\n    .navbar { background: white; box-shadow: 0 4px 12px rgba(0,0,0,0.03); padding: 16px 0; position: sticky; top: 0; z-index: 100; background: rgba(255,255,255,0.96); }\n    .nav-flex { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px; }\n    .logo { font-weight: 800; font-size: 1.7rem; background: linear-gradient(135deg, #1F3A8A, #2E5AFF); -webkit-background-clip: text; background-clip: text; color: transparent; }\n    .auth-buttons { display: flex; gap: 12px; flex-wrap: wrap; }\n    .btn-sm { padding: 8px 20px; border-radius: 40px; font-weight: 600; border: none; cursor: pointer; background: #f0f2f5; transition: 0.2s; }\n    .btn-primary { background: #2E5AFF; color: white; box-shadow: 0 2px 6px rgba(46,90,255,0.2); }\n    .btn-primary:hover { background: #1e44cc; transform: translateY(-1px);}\n    .btn-outline { background: transparent; border: 1px solid #2E5AFF; color: #2E5AFF; }\n    .btn-danger { background: #dc2626; color: white; }\n    .btn-danger:hover { background: #b91c1c; }\n    .btn-warning { background: #f59e0b; color: white; }\n    .card { background: white; border-radius: 28px; padding: 24px; margin-bottom: 24px; box-shadow: 0 8px 20px rgba(0,0,0,0.02), 0 2px 6px rgba(0,0,0,0.05); border: 1px solid #eef2f9; }\n    .grid-2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 24px; }\n    .badge { background: #eef3ff; color: #1f3a8a; padding: 4px 12px; border-radius: 40px; font-size: 0.75rem; font-weight: 600; display: inline-block; }\n    input, select, textarea { width: 100%; padding: 12px 16px; border-radius: 20px; border: 1px solid #cfdfed; background: white; font-size: 0.9rem; margin-top: 6px; margin-bottom: 16px; }\n    label { font-weight: 600; font-size: 0.85rem; }\n    hr { margin: 20px 0; border: 0; height: 1px; background: #eef2f9; }\n    .flex-between { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px; }\n    table { width: 100%; border-collapse: collapse; overflow-x: auto; display: block; }\n    th, td { text-align: left; padding: 12px 8px; border-bottom: 1px solid #eef2f9; }\n    .search-box { margin-bottom: 20px; display: flex; gap: 12px; flex-wrap: wrap; align-items: flex-end; }\n    .modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 1000; justify-content: center; align-items: center; }\n    .modal-content { background: white; max-width: 500px; width: 90%; border-radius: 32px; padding: 24px; max-height: 80vh; overflow-y: auto; }\n    .close-modal { float: right; font-size: 28px; cursor: pointer; }\n    @media (max-width: 700px) { .nav-flex { flex-direction: column; align-items: stretch; } .auth-buttons { justify-content: center; } }\n  <\/style>\n<\/head>\n<body>\n<div class=\"navbar\">\n  <div class=\"container nav-flex\">\n    <div class=\"logo\">\ud83d\udce2 Adase Serve<\/div>\n    <div id=\"globalUserArea\" class=\"auth-buttons\"><\/div>\n  <\/div>\n<\/div>\n<div class=\"container\" id=\"appMain\"><div id=\"dynamicPanel\" style=\"margin-top: 30px;\">Loading&#8230;<\/div><\/div>\n\n<script>\n  \/\/ ---------- DATA MODELS ----------\n  let users = [];\n  let ads = [];\n  let proofs = [];\n  let platformRevenue = 0;\n  let sessions = { currentUserId: null, currentUserRole: null };\n  let smmOrders = [];\n  let withdrawRequests = []; \/\/ { id, userId, amount, status, date }\n  let contacts = []; \/\/ for uploaded contacts\n\n  function loadData() {\n    const storedUsers = localStorage.getItem('adase_users');\n    const storedAds = localStorage.getItem('adase_ads');\n    const storedProofs = localStorage.getItem('adase_proofs');\n    const storedPlatform = localStorage.getItem('adase_platformRevenue');\n    const storedOrders = localStorage.getItem('adase_smm_orders');\n    const storedWithdraw = localStorage.getItem('adase_withdraw_requests');\n    const storedContacts = localStorage.getItem('adase_contacts');\n    users = storedUsers ? JSON.parse(storedUsers) : [];\n    ads = storedAds ? JSON.parse(storedAds) : [];\n    proofs = storedProofs ? JSON.parse(storedProofs) : [];\n    platformRevenue = storedPlatform ? parseFloat(storedPlatform) : 0;\n    smmOrders = storedOrders ? JSON.parse(storedOrders) : [];\n    withdrawRequests = storedWithdraw ? JSON.parse(storedWithdraw) : [];\n    contacts = storedContacts ? JSON.parse(storedContacts) : [];\n\n    \/\/ Admin credentials: sales@cashchat.se \/ Justtrade81#\n    const adminEmail = \"sales@cashchat.se\";\n    const adminPass = \"Justtrade81#\";\n    const existingAdmin = users.find(u => u.email === adminEmail && u.role === 'admin');\n    if (!existingAdmin) {\n      users = users.filter(u => u.role !== 'admin');\n      users.push({ \n        id: Date.now() + 1, \n        name: \"Super Admin\", firstName: \"Super\", lastName: \"Admin\",\n        email: adminEmail, password: adminPass, role: \"admin\", \n        wallet: 0, advertiserWallet: 0, viewedAds: [],\n        phone: \"\", sponsorCode: \"\", country: \"\", gender: \"\", ageGroup: \"\", walletStatus: \"Active\",\n        accountStatus: \"active\"\n      });\n    } else {\n      existingAdmin.password = adminPass;\n      const idx = users.findIndex(u => u.id === existingAdmin.id);\n      if (idx !== -1) users[idx] = existingAdmin;\n    }\n\n    \/\/ Ensure all users have new fields\n    users = users.map(u => {\n      if (!u.firstName) u.firstName = u.name ? u.name.split(' ')[0] : u.name || \"\";\n      if (!u.lastName) u.lastName = u.name ? (u.name.split(' ')[1] || \"\") : \"\";\n      if (u.phone === undefined) u.phone = \"\";\n      if (u.sponsorCode === undefined) u.sponsorCode = \"\";\n      if (u.country === undefined) u.country = \"\";\n      if (u.gender === undefined) u.gender = \"\";\n      if (u.ageGroup === undefined) u.ageGroup = \"\";\n      if (u.walletStatus === undefined) u.walletStatus = (u.role === 'user' ? \"Not Active\" : \"Active\");\n      if (u.accountStatus === undefined) u.accountStatus = \"active\";\n      if (!u.name && u.firstName) u.name = (u.firstName + \" \" + u.lastName).trim();\n      return u;\n    });\n\n    \/\/ Seed demo data if needed\n    if (users.length === 1) {\n      users.push({ \n        id: 1001, name: \"Demo Advertiser\", firstName: \"Demo\", lastName: \"Advertiser\",\n        email: \"adv@demo.com\", password: \"adv123\", role: \"advertiser\", wallet: 0, \n        advertiserWallet: 50000, viewedAds: [], phone: \"+256700000000\", sponsorCode: \"DEMO123\",\n        country: \"Uganda\", gender: \"Male\", ageGroup: \"25-34\", walletStatus: \"Active\", accountStatus: \"active\"\n      });\n      users.push({ \n        id: 1002, name: \"Alice Viewer\", firstName: \"Alice\", lastName: \"Viewer\",\n        email: \"alice@view.com\", password: \"view123\", role: \"user\", wallet: 600, \n        advertiserWallet: 0, viewedAds: [], phone: \"+256712345678\", sponsorCode: \"\",\n        country: \"Kenya\", gender: \"Female\", ageGroup: \"18-24\", walletStatus: \"Active\", accountStatus: \"active\"\n      });\n      if (ads.length === 0) {\n        ads.push({ id: 201, advertiserId: 1001, title: \"Cool Sneakers\", type: \"video\", mediaUrl: \"https:\/\/www.w3schools.com\/html\/mov_bbb.mp4\", dailyCostUGX: 2000, specialInstructions: \"Upload receipt\", activeUntil: Date.now() + 86400000, isActive: true });\n      }\n    }\n    saveAll();\n  }\n\n  function saveAll() {\n    localStorage.setItem('adase_users', JSON.stringify(users));\n    localStorage.setItem('adase_ads', JSON.stringify(ads));\n    localStorage.setItem('adase_proofs', JSON.stringify(proofs));\n    localStorage.setItem('adase_platformRevenue', platformRevenue);\n    localStorage.setItem('adase_smm_orders', JSON.stringify(smmOrders));\n    localStorage.setItem('adase_withdraw_requests', JSON.stringify(withdrawRequests));\n    localStorage.setItem('adase_contacts', JSON.stringify(contacts));\n  }\n\n  function getCurrentUser() {\n    if (!sessions.currentUserId) return null;\n    return users.find(u => u.id === sessions.currentUserId);\n  }\n\n  function updatePlatformRevenue(amountChange) {\n    platformRevenue += amountChange;\n    if (platformRevenue < 0) platformRevenue = 0;\n    localStorage.setItem('adase_platformRevenue', platformRevenue);\n  }\n\n  function renderApp() {\n    if (!sessions.currentUserId) renderAuthScreen();\n    else {\n      const user = getCurrentUser();\n      if (!user || user.accountStatus === 'suspended' || user.accountStatus === 'banned') {\n        sessions.currentUserId = null;\n        alert(\"Your account is suspended or banned. Contact admin.\");\n        renderAuthScreen();\n        return;\n      }\n      if (user.role === 'advertiser') renderAdvertiserDashboard(user);\n      else if (user.role === 'user') renderUserDashboard(user);\n      else if (user.role === 'admin') renderAdminPanel(user);\n      else renderAuthScreen();\n    }\n    renderGlobalNav();\n  }\n\n  function renderGlobalNav() {\n    const area = document.getElementById('globalUserArea');\n    if (!sessions.currentUserId) {\n      area.innerHTML = `<button class=\"btn-sm\" id=\"showLoginBtn\">Login<\/button>\n                        <button class=\"btn-sm btn-primary\" id=\"showRegisterBtn\">Register<\/button>`;\n      document.getElementById('showLoginBtn')?.addEventListener('click', () => showLoginForm());\n      document.getElementById('showRegisterBtn')?.addEventListener('click', () => showRegisterForm());\n    } else {\n      const user = getCurrentUser();\n      area.innerHTML = `<span style=\"font-weight:500;\">\ud83d\udc4b ${user.name} (${user.role})<\/span>\n                        <button class=\"btn-sm\" id=\"logoutBtn\">Logout<\/button>`;\n      document.getElementById('logoutBtn')?.addEventListener('click', () => {\n        sessions.currentUserId = null;\n        renderApp();\n      });\n    }\n  }\n\n  function showLoginForm() {\n    const panel = document.getElementById('dynamicPanel');\n    panel.innerHTML = `\n      <div class=\"card\" style=\"max-width:500px; margin:auto;\">\n        <h2>Login to Adase<\/h2>\n        <label>Email<\/label><input type=\"email\" id=\"loginEmail\" placeholder=\"email\">\n        <label>Password<\/label><input type=\"password\" id=\"loginPass\">\n        <button class=\"btn-primary\" id=\"doLoginBtn\" style=\"width:100%\">Login<\/button>\n        <p style=\"margin-top:12px;\">Demo: advertiser@demo.com \/ adv123 | viewer: alice@view.com \/ view123<\/p>\n      <\/div>`;\n    document.getElementById('doLoginBtn')?.addEventListener('click', () => {\n      const email = document.getElementById('loginEmail').value;\n      const pwd = document.getElementById('loginPass').value;\n      const user = users.find(u => u.email === email && u.password === pwd);\n      if (user && user.accountStatus === 'active') {\n        sessions.currentUserId = user.id;\n        renderApp();\n      } else if (user && (user.accountStatus === 'suspended' || user.accountStatus === 'banned')) {\n        alert(\"Account suspended or banned. Contact admin.\");\n      } else alert(\"Invalid credentials\");\n    });\n  }\n\n  \/\/ Registration form (same as before, simplified)\n  function showRegisterForm() {\n    const panel = document.getElementById('dynamicPanel');\n    panel.innerHTML = `\n      <div class=\"card\" style=\"max-width:700px; margin:auto;\">\n        <h2>Create Account<\/h2>\n        <label>Role<\/label>\n        <select id=\"regRole\"><option value=\"user\">Viewer (earn points)<\/option><option value=\"advertiser\">Advertiser (run ads + SMM)<\/option><\/select>\n        <div id=\"viewerExtraFields\" style=\"display:none;\">\n          <div class=\"form-row\" style=\"display:flex; gap:16px;\"><div><label>First Name *<\/label><input id=\"regFirstName\"><\/div><div><label>Last Name *<\/label><input id=\"regLastName\"><\/div><\/div>\n          <label>Phone Number *<\/label><input id=\"regPhone\" type=\"tel\">\n          <label>Email *<\/label><input id=\"regEmail\" type=\"email\">\n          <label>Sponsor Code<\/label><input id=\"regSponsorCode\" placeholder=\"Optional\"><a href=\"https:\/\/cashchatbank.com\" target=\"_blank\" style=\"font-size:12px; display:block;\">\ud83d\udd17 Apply for sponsor code<\/a>\n          <div style=\"display:flex; gap:16px;\"><div><label>Country<\/label><input id=\"regCountry\"><\/div><div><label>Gender<\/label><select id=\"regGender\"><option>Male<\/option><option>Female<\/option><option>Other<\/option><\/select><\/div><div><label>Age Group<\/label><select id=\"regAgeGroup\"><option>18-24<\/option><option>25-34<\/option><option>35-44<\/option><option>45+<\/option><\/select><\/div><\/div>\n          <label>Wallet Status<\/label><select id=\"regWalletStatus\"><option value=\"Not Active\">Not Active<\/option><option value=\"Active\">Active<\/option><\/select>\n        <\/div>\n        <div id=\"advertiserSimpleFields\" style=\"display:block;\"><label>Full Name *<\/label><input id=\"regNameSimple\"><label>Email *<\/label><input id=\"regEmailSimple\"><\/div>\n        <label>Password *<\/label><input id=\"regPass\" type=\"password\">\n        <button class=\"btn-primary\" id=\"doRegBtn\" style=\"width:100%; margin-top:16px;\">Sign up<\/button>\n      <\/div>`;\n    const roleSelect = document.getElementById('regRole');\n    const viewerDiv = document.getElementById('viewerExtraFields');\n    const advertiserDiv = document.getElementById('advertiserSimpleFields');\n    roleSelect.addEventListener('change', () => {\n      const isViewer = roleSelect.value === 'user';\n      viewerDiv.style.display = isViewer ? 'block' : 'none';\n      advertiserDiv.style.display = isViewer ? 'none' : 'block';\n    });\n    roleSelect.dispatchEvent(new Event('change'));\n    document.getElementById('doRegBtn')?.addEventListener('click', () => {\n      const role = roleSelect.value;\n      const password = document.getElementById('regPass').value;\n      if (!password) return alert(\"Password required\");\n      if (role === 'user') {\n        const firstName = document.getElementById('regFirstName').value.trim();\n        const lastName = document.getElementById('regLastName').value.trim();\n        const phone = document.getElementById('regPhone').value.trim();\n        const email = document.getElementById('regEmail').value.trim();\n        const sponsorCode = document.getElementById('regSponsorCode').value.trim();\n        const country = document.getElementById('regCountry').value.trim();\n        const gender = document.getElementById('regGender').value;\n        const ageGroup = document.getElementById('regAgeGroup').value;\n        const walletStatus = document.getElementById('regWalletStatus').value;\n        if (!firstName || !lastName || !phone || !email) return alert(\"All fields required\");\n        if (users.find(u => u.email === email)) return alert(\"Email exists\");\n        const newId = users.length + 1000;\n        users.push({ id: newId, name: firstName+\" \"+lastName, firstName, lastName, email, password, role: 'user', wallet: 0, advertiserWallet: 0, viewedAds: [], phone, sponsorCode, country, gender, ageGroup, walletStatus, accountStatus: 'active' });\n        saveAll();\n        alert(\"Registration successful! Login.\");\n        showLoginForm();\n      } else {\n        const fullName = document.getElementById('regNameSimple').value.trim();\n        const email = document.getElementById('regEmailSimple').value.trim();\n        if (!fullName || !email) return alert(\"Fill all fields\");\n        if (users.find(u => u.email === email)) return alert(\"Email exists\");\n        const newId = users.length + 1000;\n        users.push({ id: newId, name: fullName, firstName: fullName.split(' ')[0], lastName: fullName.split(' ')[1]||\"\", email, password, role: 'advertiser', wallet: 0, advertiserWallet: 0, viewedAds: [], phone: \"\", sponsorCode: \"\", country: \"\", gender: \"\", ageGroup: \"\", walletStatus: \"Active\", accountStatus: 'active' });\n        saveAll();\n        alert(\"Advertiser account created!\");\n        showLoginForm();\n      }\n    });\n  }\n\n  function renderAuthScreen() {\n    const panel = document.getElementById('dynamicPanel');\n    panel.innerHTML = `<div class=\"card\" style=\"text-align:center;\"><h3>Welcome to Adase Serve<\/h3><p>Earn points by watching ads, or run campaigns & buy SMM services.<\/p><div style=\"margin-top:20px;\"><button class=\"btn-primary\" id=\"gotoLoginBtn\">Login \/ Register<\/button><\/div><\/div>`;\n    document.getElementById('gotoLoginBtn')?.addEventListener('click', () => showLoginForm());\n  }\n\n  \/\/ ----- USER DASHBOARD (with withdrawal request instead of instant) -----\n  function renderUserDashboard(user) {\n    if (user.walletStatus !== \"Active\") {\n      const panel = document.getElementById('dynamicPanel');\n      panel.innerHTML = `<div class=\"card\"><h3>\u26a0\ufe0f Wallet Not Active<\/h3><p>Your wallet is ${user.walletStatus}. Contact admin to activate.<\/p><\/div>`;\n      return;\n    }\n    const activeAds = ads.filter(ad => ad.isActive && ad.activeUntil > Date.now());\n    const points = Math.floor(user.wallet \/ 3);\n    const pendingRequests = withdrawRequests.filter(r => r.userId === user.id && r.status === 'pending').length;\n    const panel = document.getElementById('dynamicPanel');\n    panel.innerHTML = `\n      <div class=\"flex-between\"><h2>\ud83c\udfac Watch & Earn<\/h2><span class=\"badge\">\ud83d\udcb0 Earnings: ${user.wallet.toFixed(0)} UGX (${points} points)<\/span><\/div>\n      <div class=\"card\"><div class=\"flex-between\"><span>\u2b50 1 point = UGX 3<\/span><button id=\"requestWithdrawBtn\" class=\"btn-primary\" ${user.wallet < 1500 ? 'disabled' : ''}>Request Withdrawal (500 points = 1500 UGX)<\/button><\/div>${pendingRequests > 0 ? `<p class=\"badge\">You have ${pendingRequests} pending withdrawal request(s).<\/p>` : ''}<\/div>\n      <div class=\"card\"><h3>\ud83d\udcfa Active Ads<\/h3><div id=\"viewerAdsList\"><\/div><\/div>\n      <div class=\"card\"><h3>\ud83d\udce4 My proofs<\/h3><div id=\"viewerProofHistory\"><\/div><\/div>\n    `;\n    document.getElementById('requestWithdrawBtn')?.addEventListener('click', () => {\n      if (user.wallet >= 1500) {\n        withdrawRequests.push({ id: Date.now(), userId: user.id, amount: 1500, status: 'pending', date: new Date().toISOString() });\n        saveAll();\n        alert(\"Withdrawal request submitted. Admin will approve.\");\n        renderUserDashboard(getCurrentUser());\n      } else alert(\"Insufficient balance\");\n    });\n    const adsContainer = document.getElementById('viewerAdsList');\n    if (activeAds.length === 0) adsContainer.innerHTML = \"<p>No active ads.<\/p>\";\n    else {\n      adsContainer.innerHTML = activeAds.map(ad => {\n        const viewed = user.viewedAds?.includes(ad.id);\n        return `<div style=\"border:1px solid #eef; border-radius:24px; padding:16px; margin-bottom:18px;\"><h4>${ad.title}<\/h4><div>${ad.type==='video'?`<video controls src=\"${ad.mediaUrl}\" style=\"max-width:100%\"><\/video>`:ad.type==='audio'?`<audio controls src=\"${ad.mediaUrl}\"><\/audio>`:`<div><img decoding=\"async\" src=\"${ad.mediaUrl}\" style=\"max-width:100%; border-radius:12px;\"><\/div>`}<\/div>${ad.specialInstructions?`<p>\u26a0\ufe0f ${ad.specialInstructions}<\/p>`:''}${!viewed?`<button class=\"btn-sm btn-primary\" data-viewad=\"${ad.id}\">\u2705 Earn 3 UGX (1 point)<\/button>`:`<span class=\"badge\">\u2713 Claimed<\/span>`} ${ad.specialInstructions?`<button class=\"btn-sm btn-outline\" data-proofad=\"${ad.id}\">\ud83d\udcce Submit proof<\/button>`:''}<\/div>`;\n      }).join('');\n      document.querySelectorAll('[data-viewad]').forEach(btn => {\n        btn.addEventListener('click', (e) => {\n          const adId = parseInt(btn.getAttribute('data-viewad'));\n          const ad = ads.find(a => a.id === adId);\n          if (ad && !user.viewedAds.includes(adId)) {\n            user.viewedAds.push(adId);\n            user.wallet += 3;\n            const idx = users.findIndex(u => u.id === user.id);\n            users[idx].wallet = user.wallet;\n            users[idx].viewedAds = user.viewedAds;\n            saveAll();\n            alert(`+3 UGX earned for \"${ad.title}\"`);\n            renderUserDashboard(getCurrentUser());\n          } else alert(\"Already claimed.\");\n        });\n      });\n      document.querySelectorAll('[data-proofad]').forEach(btn => {\n        btn.addEventListener('click', (e) => {\n          const adId = parseInt(btn.getAttribute('data-proofad'));\n          const ad = ads.find(a => a.id === adId);\n          const proofText = prompt(`Proof for \"${ad.title}\":\\n${ad.specialInstructions || ''}\\nEnter details:`);\n          if (proofText?.trim()) {\n            proofs.push({ id: Date.now(), adId, userId: user.id, userName: user.name, proofText: proofText.trim(), timestamp: Date.now() });\n            saveAll();\n            alert(\"Proof submitted!\");\n            renderUserDashboard(getCurrentUser());\n          }\n        });\n      });\n    }\n    const historyDiv = document.getElementById('viewerProofHistory');\n    const userProofs = proofs.filter(p => p.userId === user.id);\n    historyDiv.innerHTML = userProofs.length ? userProofs.map(p => `<div class=\"proof-item\">${p.proofText}<\/div>`).join('') : \"<p>No proofs sent.<\/p>\";\n  }\n\n  \/\/ ----- ADMIN PANEL (full management) -----\n  function renderAdminPanel(admin) {\n    const allUsers = users.filter(u => u.role !== 'admin');\n    const pendingWithdrawals = withdrawRequests.filter(r => r.status === 'pending');\n    const panel = document.getElementById('dynamicPanel');\n    panel.innerHTML = `\n      <div class=\"flex-between\"><h2>\ud83d\udee1\ufe0f Admin Console<\/h2><span class=\"badge\">Platform Balance: UGX ${platformRevenue.toFixed(0)}<\/span><\/div>\n      <div class=\"grid-2\">\n        <div class=\"card\"><h3>\ud83d\udc65 User Management<\/h3><div class=\"search-box\"><input type=\"text\" id=\"searchUser\" placeholder=\"Search by name\/email\"><button id=\"searchUserBtn\" class=\"btn-sm\">\ud83d\udd0d Search<\/button><\/div><div id=\"usersTableContainer\"><table id=\"usersTable\"><thead><tr><th>ID<\/th><th>Name<\/th><th>Email<\/th><th>Role<\/th><th>Status<\/th><th>Actions<\/th><\/tr><\/thead><tbody><\/tbody><\/table><\/div><\/div>\n        <div class=\"card\"><h3>\ud83d\udcb0 Withdrawal Requests<\/h3><div id=\"withdrawalsList\"><\/div><\/div>\n      <\/div>\n      <div class=\"card\"><h3>\ud83d\udcc1 Contacts Upload \/ Download<\/h3><input type=\"file\" id=\"contactsCsv\" accept=\".csv\"><button id=\"uploadContactsBtn\" class=\"btn-sm\">Upload CSV<\/button> <button id=\"downloadContactsExcel\" class=\"btn-sm\">Download Excel<\/button> <button id=\"downloadContactsPdf\" class=\"btn-sm\">Download PDF<\/button><div id=\"contactsPreview\" style=\"margin-top:16px;\"><\/div><\/div>\n      <div class=\"card\"><h3>\u2709\ufe0f Email Broadcast<\/h3><label>Subject<\/label><input id=\"emailSubject\"><label>Message<\/label><textarea id=\"emailMessage\" rows=\"3\"><\/textarea><button id=\"sendEmailBtn\" class=\"btn-primary\">Send to All Users<\/button><\/div>\n    `;\n    \/\/ Render user table with actions\n    function renderUsersTable(filter = \"\") {\n      const filtered = allUsers.filter(u => u.name.toLowerCase().includes(filter.toLowerCase()) || u.email.toLowerCase().includes(filter.toLowerCase()));\n      const tbody = document.querySelector('#usersTable tbody');\n      if (tbody) {\n        tbody.innerHTML = filtered.map(u => `\n          <tr>\n            <td>${u.id}<\/td><td>${u.name}<\/td><td>${u.email}<\/td><td>${u.role}<\/td>\n            <td><span class=\"badge\" style=\"background:${u.accountStatus==='active'?'#d1fae5':'#fee2e2'}\">${u.accountStatus}<\/span><\/td>\n            <td>\n              <button class=\"btn-sm\" data-action=\"edit\" data-id=\"${u.id}\">\u270f\ufe0f Edit<\/button>\n              ${u.accountStatus === 'active' ? `<button class=\"btn-sm btn-warning\" data-action=\"suspend\" data-id=\"${u.id}\">Suspend<\/button>` : `<button class=\"btn-sm\" data-action=\"unsuspend\" data-id=\"${u.id}\">Unsuspend<\/button>`}\n              ${u.accountStatus !== 'banned' ? `<button class=\"btn-sm btn-danger\" data-action=\"ban\" data-id=\"${u.id}\">Ban<\/button>` : `<button class=\"btn-sm\" data-action=\"restore\" data-id=\"${u.id}\">Restore<\/button>`}\n              <button class=\"btn-sm\" data-action=\"credit\" data-id=\"${u.id}\">\ud83d\udcb0 Top Up<\/button>\n            <\/td>\n          <\/tr>\n        `).join('');\n        \/\/ Attach event listeners\n        document.querySelectorAll('[data-action]').forEach(btn => {\n          btn.addEventListener('click', (e) => {\n            const action = btn.getAttribute('data-action');\n            const userId = parseInt(btn.getAttribute('data-id'));\n            const targetUser = users.find(u => u.id === userId);\n            if (!targetUser) return;\n            if (action === 'edit') openEditModal(targetUser);\n            else if (action === 'suspend') { targetUser.accountStatus = 'suspended'; saveAll(); renderUsersTable(filter); }\n            else if (action === 'unsuspend') { targetUser.accountStatus = 'active'; saveAll(); renderUsersTable(filter); }\n            else if (action === 'ban') { targetUser.accountStatus = 'banned'; saveAll(); renderUsersTable(filter); }\n            else if (action === 'restore') { targetUser.accountStatus = 'active'; saveAll(); renderUsersTable(filter); }\n            else if (action === 'credit') {\n              let amount = prompt(\"Enter amount (UGX) to add to user's earnings wallet:\", \"1000\");\n              if (amount && !isNaN(amount)) {\n                targetUser.wallet += parseFloat(amount);\n                saveAll();\n                alert(`Added ${amount} UGX to ${targetUser.name}'s wallet.`);\n                renderUsersTable(filter);\n              }\n            }\n          });\n        });\n      }\n    }\n    renderUsersTable();\n    document.getElementById('searchUserBtn')?.addEventListener('click', () => {\n      const term = document.getElementById('searchUser').value;\n      renderUsersTable(term);\n    });\n    \/\/ Withdrawals management\n    const withdrawalsDiv = document.getElementById('withdrawalsList');\n    function renderWithdrawals() {\n      if (pendingWithdrawals.length === 0) withdrawalsDiv.innerHTML = \"<p>No pending withdrawals.<\/p>\";\n      else {\n        withdrawalsDiv.innerHTML = pendingWithdrawals.map(w => {\n          const u = users.find(u => u.id === w.userId);\n          return `<div class=\"flex-between\" style=\"border-bottom:1px solid #eee; padding:8px;\"><span>${u?.name} (${u?.email}) - UGX ${w.amount}<\/span><div><button class=\"btn-sm btn-primary\" data-wid=\"${w.id}\" data-action=\"approve\">Approve<\/button> <button class=\"btn-sm btn-danger\" data-wid=\"${w.id}\" data-action=\"reject\">Reject<\/button><\/div><\/div>`;\n        }).join('');\n        document.querySelectorAll('[data-wid]').forEach(btn => {\n          btn.addEventListener('click', (e) => {\n            const wid = parseInt(btn.getAttribute('data-wid'));\n            const action = btn.getAttribute('data-action');\n            const req = withdrawRequests.find(r => r.id === wid);\n            if (!req) return;\n            const user = users.find(u => u.id === req.userId);\n            if (action === 'approve') {\n              if (user.wallet >= req.amount) {\n                user.wallet -= req.amount;\n                updatePlatformRevenue(-req.amount);\n                req.status = 'approved';\n                alert(`Withdrawal approved. ${req.amount} UGX deducted.`);\n              } else alert(\"User insufficient balance.\");\n            } else if (action === 'reject') {\n              req.status = 'rejected';\n              alert(\"Withdrawal rejected.\");\n            }\n            saveAll();\n            renderAdminPanel(admin);\n          });\n        });\n      }\n    }\n    renderWithdrawals();\n    \/\/ Contacts upload\/download\n    document.getElementById('uploadContactsBtn')?.addEventListener('click', () => {\n      const file = document.getElementById('contactsCsv').files[0];\n      if (!file) return alert(\"Select CSV\");\n      const reader = new FileReader();\n      reader.onload = function(e) {\n        const text = e.target.result;\n        const rows = text.split(\/\\r?\\n\/);\n        let newContacts = [];\n        for (let i=0; i<rows.length; i++) {\n          let line = rows[i].trim();\n          if (!line) continue;\n          let parts = line.split(',');\n          let name = parts[0]?.trim() || \"Unknown\";\n          let email = parts[1]?.trim() || \"\";\n          let phone = parts[2]?.trim() || \"\";\n          if (email) newContacts.push({ id: Date.now()+i, name, email, phone });\n        }\n        contacts.push(...newContacts);\n        saveAll();\n        alert(`Added ${newContacts.length} contacts.`);\n        showContactsPreview();\n      };\n      reader.readAsText(file);\n    });\n    function showContactsPreview() {\n      const previewDiv = document.getElementById('contactsPreview');\n      if (contacts.length === 0) previewDiv.innerHTML = \"<p>No contacts uploaded.<\/p>\";\n      else {\n        let html = `<table><thead><tr><th>Name<\/th><th>Email<\/th><th>Phone<\/th><\/tr><\/thead><tbody>`;\n        contacts.forEach(c => html += `<tr><td>${c.name}<\/td><td>${c.email}<\/td><td>${c.phone}<\/td><\/tr>`);\n        html += `<\/tbody><\/table>`;\n        previewDiv.innerHTML = html;\n      }\n    }\n    showContactsPreview();\n    document.getElementById('downloadContactsExcel')?.addEventListener('click', () => {\n      const ws = XLSX.utils.json_to_sheet(contacts.map(c=>({Name:c.name,Email:c.email,Phone:c.phone})));\n      const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, \"Contacts\"); XLSX.writeFile(wb, `contacts.xlsx`);\n    });\n    document.getElementById('downloadContactsPdf')?.addEventListener('click', () => {\n      const element = document.getElementById('contactsPreview');\n      if (!element || contacts.length === 0) return alert(\"No contacts\");\n      html2pdf().from(element).set({ margin: 0.5, filename: 'contacts.pdf', html2canvas: { scale: 2 } }).save();\n    });\n    \/\/ Email broadcast\n    document.getElementById('sendEmailBtn')?.addEventListener('click', () => {\n      const subj = document.getElementById('emailSubject').value;\n      const msg = document.getElementById('emailMessage').value;\n      if (!subj || !msg) return alert(\"Fill subject & message\");\n      allUsers.forEach(u => console.log(`\ud83d\udce7 To ${u.email}: ${subj} - ${msg.replace(\/{name}\/g, u.name)}`));\n      alert(`Email simulation sent to ${allUsers.length} users.`);\n    });\n  }\n\n  \/\/ Edit modal\n  function openEditModal(user) {\n    const modal = document.createElement('div');\n    modal.className = 'modal';\n    modal.style.display = 'flex';\n    modal.innerHTML = `<div class=\"modal-content\"><span class=\"close-modal\">&times;<\/span><h3>Edit User<\/h3>\n      <label>First Name<\/label><input id=\"editFirstName\" value=\"${user.firstName}\">\n      <label>Last Name<\/label><input id=\"editLastName\" value=\"${user.lastName}\">\n      <label>Email<\/label><input id=\"editEmail\" value=\"${user.email}\">\n      <label>Phone<\/label><input id=\"editPhone\" value=\"${user.phone || ''}\">\n      <label>Country<\/label><input id=\"editCountry\" value=\"${user.country || ''}\">\n      <label>Gender<\/label><select id=\"editGender\"><option ${user.gender==='Male'?'selected':''}>Male<\/option><option ${user.gender==='Female'?'selected':''}>Female<\/option><option ${user.gender==='Other'?'selected':''}>Other<\/option><\/select>\n      <label>Age Group<\/label><select id=\"editAgeGroup\"><option ${user.ageGroup==='18-24'?'selected':''}>18-24<\/option><option ${user.ageGroup==='25-34'?'selected':''}>25-34<\/option><option ${user.ageGroup==='35-44'?'selected':''}>35-44<\/option><option ${user.ageGroup==='45+'?'selected':''}>45+<\/option><\/select>\n      <label>Wallet Status<\/label><select id=\"editWalletStatus\"><option ${user.walletStatus==='Active'?'selected':''}>Active<\/option><option ${user.walletStatus==='Not Active'?'selected':''}>Not Active<\/option><\/select>\n      <button id=\"saveUserEdit\" class=\"btn-primary\">Save Changes<\/button>\n    <\/div>`;\n    document.body.appendChild(modal);\n    modal.querySelector('.close-modal').onclick = () => modal.remove();\n    modal.querySelector('#saveUserEdit').onclick = () => {\n      user.firstName = modal.querySelector('#editFirstName').value;\n      user.lastName = modal.querySelector('#editLastName').value;\n      user.name = user.firstName + \" \" + user.lastName;\n      user.email = modal.querySelector('#editEmail').value;\n      user.phone = modal.querySelector('#editPhone').value;\n      user.country = modal.querySelector('#editCountry').value;\n      user.gender = modal.querySelector('#editGender').value;\n      user.ageGroup = modal.querySelector('#editAgeGroup').value;\n      user.walletStatus = modal.querySelector('#editWalletStatus').value;\n      saveAll();\n      alert(\"User updated\");\n      modal.remove();\n      renderAdminPanel(getCurrentUser());\n    };\n  }\n\n  \/\/ ----- Advertiser Dashboard (simplified, same as before) -----\n  function renderAdvertiserDashboard(user) {\n    const myAds = ads.filter(ad => ad.advertiserId === user.id);\n    const panel = document.getElementById('dynamicPanel');\n    panel.innerHTML = `<div class=\"flex-between\"><h2>\ud83d\udce2 Advertiser Hub<\/h2><span class=\"badge\">\ud83d\udcb0 Wallet: ${user.advertiserWallet.toFixed(0)} UGX<\/span><\/div>\n      <div class=\"grid-2\"><div class=\"card\"><h3>\u2795 Create Ad<\/h3><input id=\"adTitle\" placeholder=\"Title\"><select id=\"adType\"><option>video<\/option><option>audio<\/option><option>banner<\/option><\/select><input id=\"adMedia\" placeholder=\"Media URL\"><textarea id=\"adInstructions\" placeholder=\"Instructions\"><\/textarea><select id=\"dailyCostSelect\"><option value=\"2000\">UGX 2,000<\/option><option value=\"3800\">$1 (\u22483800 UGX)<\/option><\/select><button id=\"createAdBtn\" class=\"btn-primary\">Create<\/button><\/div>\n      <div class=\"card\"><h3>\ud83d\udcb0 Fund Wallet<\/h3><input id=\"fundAmount\" value=\"10000\"><select id=\"payMethod\"><option>MTN<\/option><option>Airtel<\/option><option>Mpesa<\/option><option>Visa<\/option><option>PayPal<\/option><\/select><button id=\"fundWalletBtn\" class=\"btn-primary\">Add funds<\/button><hr><h4>My Ads<\/h4><div id=\"advertiserAdsList\"><\/div><\/div><\/div>\n      <div id=\"smmServicesContainer\" class=\"card\"><\/div>`;\n    document.getElementById('createAdBtn')?.addEventListener('click', () => {\n      const title = document.getElementById('adTitle').value;\n      const type = document.getElementById('adType').value;\n      const media = document.getElementById('adMedia').value;\n      const instructions = document.getElementById('adInstructions').value;\n      const cost = document.getElementById('dailyCostSelect').value === \"2000\" ? 2000 : 3800;\n      if (!title || !media) return alert(\"Required\");\n      ads.push({ id: Date.now(), advertiserId: user.id, title, type, mediaUrl: media, specialInstructions: instructions, dailyCostUGX: cost, activeUntil: null, isActive: false });\n      saveAll(); alert(\"Ad created\"); renderAdvertiserDashboard(user);\n    });\n    document.getElementById('fundWalletBtn')?.addEventListener('click', () => {\n      let amt = parseFloat(document.getElementById('fundAmount').value);\n      if (amt > 0) { user.advertiserWallet += amt; saveAll(); alert(\"Funds added\"); renderAdvertiserDashboard(user); }\n    });\n    const adsDiv = document.getElementById('advertiserAdsList');\n    adsDiv.innerHTML = myAds.map(ad => `<div><strong>${ad.title}<\/strong> - ${ad.isActive && ad.activeUntil>Date.now() ? 'Active' : 'Inactive'} <button class=\"btn-sm\" data-adid=\"${ad.id}\">Activate (${ad.dailyCostUGX} UGX)<\/button><\/div>`).join('');\n    document.querySelectorAll('[data-adid]').forEach(btn => {\n      btn.addEventListener('click', () => {\n        const adId = parseInt(btn.getAttribute('data-adid'));\n        const ad = ads.find(a => a.id === adId);\n        if (ad && user.advertiserWallet >= ad.dailyCostUGX) {\n          user.advertiserWallet -= ad.dailyCostUGX; ad.isActive = true; ad.activeUntil = Date.now()+86400000; updatePlatformRevenue(ad.dailyCostUGX); saveAll();\n          alert(\"Activated\"); renderAdvertiserDashboard(user);\n        } else alert(\"Insufficient balance\");\n      });\n    });\n    \/\/ SMM panel\n    const smmContainer = document.getElementById('smmServicesContainer');\n    if (smmContainer) {\n      const servicesData = [{ category:\"Uganda Services\", icon:\"fas fa-flag\", services:[{id:6004,name:\"TikTok Real Views\", rate:10326, min:1000, max:1000000}] }];\n      smmContainer.innerHTML = `<h3>SMM Services<\/h3><button class=\"btn-primary\" id=\"buySmmDemo\">Buy Demo (1000 Views = 10326 UGX)<\/button>`;\n      document.getElementById('buySmmDemo')?.addEventListener('click', () => {\n        if (user.advertiserWallet >= 10326) {\n          user.advertiserWallet -= 10326; updatePlatformRevenue(10326); saveAll();\n          alert(\"Order placed! 1000 TikTok Views purchased.\");\n          renderAdvertiserDashboard(user);\n        } else alert(\"Insufficient wallet\");\n      });\n    }\n  }\n\n  loadData();\n  renderApp();\n<\/script>\n<\/body>\n<\/html>\n\n\n\n\n\n<!-- ========== FULLY RESPONSIVE MERGED WEBSITE ========== -->\n<style>\n  \/* ===== GLOBAL IMPORTS ===== *\/\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Inter:opsz,wght@14..32,400;14..32,500;14..32,600;14..32,700;14..32,800&display=swap');\n  @import url('https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.5.0\/css\/all.min.css');\n\n  \/* ===== RESET & BASE ===== *\/\n  * { box-sizing: border-box; }\n  body { margin: 0; padding: 0; }\n  html { scroll-behavior: smooth; }\n\n  \/* ===== CASH CHAT LANDING (scoped to .cashchat-redesign) ===== *\/\n  .cashchat-redesign {\n    font-family: 'Inter', sans-serif;\n    max-width: 100%;\n    color: #1a202c;\n    line-height: 1.6;\n    background: #fff;\n  }\n  .cc-nav {\n    position: sticky; top: 0; z-index: 100;\n    background: #1a365d;\n    padding: 0.8rem 5%;       \/* relative padding *\/\n    display: flex; justify-content: space-between; align-items: center;\n    box-shadow: 0 2px 10px rgba(0,0,0,0.1);\n  }\n  .cc-nav .cc-logo {\n    font-weight: 700; font-size: clamp(1.2rem, 4vw, 1.4rem);\n    color: #f6e05e; text-decoration: none;\n  }\n  .cc-nav-links {\n    display: flex; gap: clamp(1rem, 3vw, 2rem);\n    list-style: none; margin: 0; padding: 0;\n  }\n  .cc-nav-links a {\n    color: #fff; text-decoration: none;\n    font-weight: 500; font-size: clamp(0.9rem, 2.5vw, 1rem);\n    transition: color 0.2s;\n  }\n  .cc-nav-links a:hover { color: #f6e05e; }\n\n  \/* Hamburger checkbox hack *\/\n  #cc-menu-toggle { display: none; }\n  .cc-menu-icon {\n    display: none; flex-direction: column; cursor: pointer; gap: 5px;\n  }\n  .cc-menu-icon span {\n    width: 25px; height: 3px; background: #f6e05e;\n    border-radius: 3px; transition: 0.3s;\n  }\n  @media (max-width: 768px) {\n    .cc-nav-links {\n      position: absolute; top: 100%; left: 0; width: 100%;\n      background: #1a365d; flex-direction: column;\n      align-items: center; gap: 1rem; padding: 1.5rem 0;\n      display: none;\n    }\n    .cc-menu-icon { display: flex; }\n    #cc-menu-toggle:checked ~ .cc-nav-links { display: flex; }\n    #cc-menu-toggle:checked + .cc-menu-icon span:nth-child(1) {\n      transform: rotate(45deg) translate(5px,5px);\n    }\n    #cc-menu-toggle:checked + .cc-menu-icon span:nth-child(2) { opacity: 0; }\n    #cc-menu-toggle:checked + .cc-menu-icon span:nth-child(3) {\n      transform: rotate(-45deg) translate(6px,-6px);\n    }\n  }\n\n  .cc-hero {\n    background: linear-gradient(135deg, #1a365d, #2a4a7f);\n    color: #fff; text-align: center;\n    padding: clamp(3rem, 8vw, 4rem) 5%;\n  }\n  .cc-hero h1 {\n    font-size: clamp(2rem, 6vw, 2.8rem);\n    margin-bottom: 1rem; color: #f6e05e;\n  }\n  .cc-hero p {\n    font-size: clamp(1rem, 3vw, 1.2rem);\n    max-width: 700px; margin: 0 auto 2rem; opacity: 0.95;\n  }\n  .cc-btn {\n    display: inline-block;\n    padding: clamp(0.6rem, 2vw, 0.8rem) clamp(1.5rem, 4vw, 2rem);\n    border-radius: 6px; font-weight: 600; text-decoration: none;\n    margin: 0.3rem; transition: 0.2s;\n    font-size: clamp(0.9rem, 2.5vw, 1rem);\n  }\n  .cc-btn-primary { background: #f6e05e; color: #1a365d; }\n  .cc-btn-primary:hover { background: #ecc94b; }\n  .cc-btn-outline { border: 2px solid #f6e05e; color: #f6e05e; background: transparent; }\n  .cc-btn-outline:hover { background: #f6e05e; color: #1a365d; }\n\n  .cc-section {\n    padding: clamp(2rem, 6vw, 4rem) 5%;\n    max-width: 1200px; margin: 0 auto;\n  }\n  .cc-section h2 {\n    font-size: clamp(1.5rem, 4vw, 2rem);\n    margin-bottom: clamp(1rem, 3vw, 2rem);\n    text-align: center; color: #1a365d;\n  }\n\n  .cc-steps-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(min(240px, 100%), 1fr));\n    gap: clamp(1rem, 3vw, 2rem);\n    margin-top: 2rem;\n  }\n  .cc-step-card {\n    background: #f7fafc;\n    padding: clamp(1.2rem, 4vw, 2rem);\n    border-radius: 10px; text-align: center;\n    box-shadow: 0 5px 15px rgba(0,0,0,0.05);\n  }\n  .cc-step-number {\n    display: inline-flex; align-items: center; justify-content: center;\n    width: 3rem; height: 3rem;\n    background: #f6e05e; color: #1a365d;\n    font-weight: 700; font-size: 1.4rem;\n    border-radius: 50%; margin-bottom: 1rem;\n  }\n  .cc-step-card h4 { margin: 0.5rem 0; color: #1a365d; }\n\n  .cc-features-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(min(220px, 100%), 1fr));\n    gap: clamp(1rem, 3vw, 2rem);\n  }\n  .cc-feature-card {\n    text-align: center;\n    padding: clamp(1.2rem, 4vw, 2rem);\n    border-radius: 10px; background: #edf2f7;\n  }\n  .cc-feature-icon { font-size: 2.5rem; margin-bottom: 0.8rem; color: #1a365d; }\n\n  .cc-about { background: #f7fafc; text-align: center; }\n  .cc-about p { max-width: 700px; margin: 0 auto 2rem; }\n\n  .cc-cta-banner {\n    background: #1a365d; color: #fff;\n    text-align: center;\n    padding: clamp(2rem, 6vw, 3rem) 5%;\n  }\n  .cc-cta-banner h2 { color: #f6e05e; }\n\n  .cc-footer {\n    background: #1a202c; color: #a0aec0;\n    text-align: center;\n    padding: clamp(2rem, 6vw, 3rem) 5%;\n    font-size: 0.95rem;\n  }\n  .cc-footer a { color: #f6e05e; text-decoration: none; }\n  .cc-footer a:hover { text-decoration: underline; }\n  .cc-contact-info {\n    display: flex; flex-wrap: wrap; justify-content: center;\n    gap: clamp(1rem, 3vw, 2rem); margin-bottom: 1.5rem;\n  }\n  .cc-contact-item { display: flex; align-items: center; gap: 0.5rem; }\n\n  \/* ===== ADASE INFOGRAPHIC (scoped to .adase-infographic-wrapper) ===== *\/\n  .adase-infographic-wrapper {\n    font-family: 'Inter', sans-serif;\n    background: #eef2f5;\n    padding: clamp(1.5rem, 5vw, 40px) 5%;\n    display: flex; justify-content: center; align-items: center;\n  }\n  .adase-infographic-wrapper .infographic {\n    max-width: 1100px; width: 100%;\n    background: white; border-radius: 32px;\n    box-shadow: 0 20px 35px -12px rgba(0,0,0,0.15);\n    overflow: hidden;\n    padding: clamp(1.5rem, 5vw, 32px) clamp(1rem, 4vw, 36px);\n    transition: all 0.2s;\n  }\n  .adase-infographic-wrapper .header {\n    display: flex; justify-content: space-between; align-items: flex-end;\n    border-bottom: 4px solid #F97316;\n    padding-bottom: clamp(0.8rem, 3vw, 20px);\n    margin-bottom: clamp(1rem, 4vw, 32px);\n    flex-wrap: wrap; gap: 1rem;\n  }\n  .adase-infographic-wrapper .logo-area h1 {\n    font-size: clamp(1.2rem, 4vw, 1.9rem);\n    font-weight: 800; color: #0A2647;\n    letter-spacing: -0.5px;\n  }\n  .adase-infographic-wrapper .logo-area p {\n    color: #2C3E50; font-weight: 500;\n    font-size: clamp(0.7rem, 2vw, 0.9rem);\n  }\n  .adase-infographic-wrapper .badge {\n    background: #F97316; color: white;\n    padding: clamp(6px, 2vw, 8px) clamp(12px, 4vw, 18px);\n    border-radius: 40px;\n    font-weight: 700;\n    font-size: clamp(0.7rem, 2.5vw, 0.9rem);\n  }\n  .adase-infographic-wrapper .grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr));\n    gap: clamp(0.8rem, 3vw, 28px);\n    margin-bottom: clamp(1rem, 4vw, 32px);\n  }\n  .adase-infographic-wrapper .card {\n    background: #ffffff; border-radius: 24px;\n    padding: clamp(1rem, 3vw, 20px);\n    box-shadow: 0 4px 12px rgba(0,0,0,0.05);\n    border: 1px solid #e9edf2; transition: 0.1s;\n  }\n  .adase-infographic-wrapper .card h3 {\n    font-size: clamp(1rem, 3.5vw, 1.3rem);\n    font-weight: 700; margin-bottom: 0.8rem;\n    display: flex; align-items: center; gap: 10px;\n    color: #0A2647; border-left: 5px solid #F97316;\n    padding-left: 14px;\n  }\n  .adase-infographic-wrapper .card h3 i { color: #F97316; font-size: 1.3rem; border-left: none; padding-left: 0; }\n  .adase-infographic-wrapper .stat-number {\n    font-size: clamp(1.2rem, 4vw, 1.8rem);\n    font-weight: 800; color: #F97316; line-height: 1.2;\n  }\n  .adase-infographic-wrapper .divider-light { height: 2px; background: #F0F2F5; margin: 16px 0; }\n  .adase-infographic-wrapper .list-bullet { list-style: none; padding-left: 0; }\n  .adase-infographic-wrapper .list-bullet li {\n    margin-bottom: 10px; display: flex; align-items: baseline; gap: 10px;\n  }\n  .adase-infographic-wrapper .list-bullet li i { color: #F97316; width: 20px; font-size: 0.9rem; margin-top: 3px; }\n  .adase-infographic-wrapper .two-col-stats {\n    display: flex; justify-content: space-between; gap: 15px;\n    margin-top: 12px; flex-wrap: wrap;\n  }\n  .adase-infographic-wrapper .stat-block {\n    background: #FEF7ED; padding: clamp(0.5rem, 2vw, 12px);\n    border-radius: 18px; flex: 1; text-align: center;\n    min-width: 120px;\n  }\n  .adase-infographic-wrapper .revenue-split {\n    display: flex; flex-wrap: wrap; justify-content: space-between;\n    gap: 8px; margin: 15px 0 8px;\n  }\n  .adase-infographic-wrapper .split-item {\n    text-align: center; flex: 1; min-width: 100px;\n    background: #F8FAFE; padding: 10px 5px; border-radius: 16px;\n  }\n  .adase-infographic-wrapper .split-percent {\n    font-weight: 800; font-size: clamp(1rem, 3vw, 1.4rem); color: #0A2647;\n  }\n  .adase-infographic-wrapper .payment-icons {\n    display: flex; flex-wrap: wrap; gap: 0.5rem;\n    margin-top: 12px; justify-content: center;\n  }\n  .adase-infographic-wrapper .payment-icons span {\n    background: #F0F2F5; padding: 6px 12px;\n    border-radius: 30px; font-size: 0.75rem; font-weight: 500;\n  }\n  .adase-infographic-wrapper .funding-bar {\n    background: #EFF3F8; border-radius: 30px;\n    padding: 4px; margin: 15px 0;\n  }\n  .adase-infographic-wrapper .funding-use {\n    display: flex; flex-wrap: wrap; gap: 12px;\n    font-size: clamp(0.7rem, 2vw, 0.8rem); margin-top: 10px;\n  }\n  .adase-infographic-wrapper .funding-use span {\n    background: #0A2647; color: white;\n    padding: 4px 10px; border-radius: 30px;\n  }\n  .adase-infographic-wrapper .footer-note {\n    background: #F9FAFB; border-radius: 20px;\n    padding: clamp(1rem, 3vw, 20px);\n    display: flex; flex-wrap: wrap; gap: 16px;\n    margin-top: 20px; border-top: 2px solid #F97316;\n    font-size: clamp(0.7rem, 2vw, 0.8rem);\n  }\n  @media (max-width: 750px) {\n    .adase-infographic-wrapper .infographic { padding: 20px 15px; }\n    .adase-infographic-wrapper .grid { grid-template-columns: 1fr; gap: 20px; }\n    .adase-infographic-wrapper .header { flex-direction: column; align-items: flex-start; gap: 12px; }\n    .adase-infographic-wrapper .revenue-split { flex-direction: column; }\n    .adase-infographic-wrapper .two-col-stats { flex-direction: column; }\n  }\n\n  \/* ===== INVESTOR PITCH (scoped to .pitch-wrapper) ===== *\/\n  .pitch-wrapper {\n    font-family: 'Inter', sans-serif;\n    color: #2d3748; background: #fff;\n    padding: 0; line-height: 1.7; overflow-x: hidden;\n  }\n  .pitch-wrapper h2 {\n    font-size: clamp(1.5rem, 5vw, 2.5rem);\n    color: #1a365d; text-align: center;\n    margin-bottom: clamp(1.5rem, 4vw, 2.5rem);\n    position: relative;\n  }\n  .pitch-wrapper h2::after {\n    content: ''; display: block; width: 60px; height: 4px;\n    background: #f6e05e; margin: 0.8rem auto 0; border-radius: 2px;\n  }\n  .pitch-wrapper .pitch-hero {\n    min-height: 60vh;\n    background: linear-gradient(135deg, #1a365d, #2b6cb0);\n    display: flex; align-items: center; justify-content: center;\n    text-align: center; color: white;\n    padding: clamp(3rem, 8vw, 6rem) 5% clamp(2rem, 6vw, 4rem);\n  }\n  .pitch-wrapper .pitch-hero h1 {\n    font-size: clamp(1.8rem, 6vw, 3.5rem);\n    color: #f6e05e;\n  }\n  .pitch-wrapper .pitch-hero p {\n    font-size: clamp(1rem, 3vw, 1.2rem);\n    max-width: 600px; margin: 0 auto 2rem;\n  }\n  .pitch-wrapper .btn {\n    background: #f6e05e; color: #1a365d;\n    padding: clamp(0.6rem, 2vw, 0.8rem) clamp(1.2rem, 4vw, 2rem);\n    border-radius: 50px; font-weight: 600;\n    text-decoration: none; display: inline-block;\n    margin: 0.4rem; transition: transform 0.2s;\n    font-size: clamp(0.85rem, 2.5vw, 0.95rem);\n  }\n  .pitch-wrapper .btn:hover { transform: translateY(-2px); }\n  .pitch-wrapper .btn-outline {\n    background: transparent; border: 2px solid #f6e05e; color: #f6e05e;\n  }\n  .pitch-wrapper .btn-wallet { background: #38a169; color: white; border: none; }\n  .pitch-wrapper .btn-social { background: #805ad5; color: white; border: none; }\n  .pitch-wrapper .btn-wa { background: #25D366; color: white; border: none; }\n\n  .pitch-wrapper .container {\n    max-width: 1200px; margin: 0 auto;\n    padding: clamp(2rem, 6vw, 5rem) 5%;\n  }\n  .pitch-wrapper section { padding: clamp(2rem, 6vw, 5rem) 0; }\n  .pitch-wrapper .section-bg { background: #f7fafc; }\n  .pitch-wrapper .grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(min(260px, 100%), 1fr));\n    gap: clamp(1rem, 3vw, 2rem);\n  }\n  .pitch-wrapper .card {\n    background: white; padding: clamp(1.2rem, 4vw, 2rem);\n    border-radius: 16px;\n    box-shadow: 0 10px 30px rgba(0,0,0,0.08);\n    text-align: center;\n  }\n  .pitch-wrapper .card .year {\n    font-size: clamp(1.6rem, 4vw, 2.2rem);\n    font-weight: 800; color: #2b6cb0; margin-bottom: 0.5rem;\n  }\n  .pitch-wrapper .asset-grid {\n    display: flex; flex-wrap: wrap; justify-content: center;\n    gap: clamp(1rem, 4vw, 2rem) clamp(2rem, 6vw, 4rem);\n    text-align: center;\n  }\n  .pitch-wrapper .asset .number {\n    font-size: clamp(2rem, 6vw, 3rem);\n    font-weight: 800; color: #d69e2e;\n  }\n  .pitch-wrapper .asset p { font-weight: 500; color: #4a5568; }\n  .pitch-wrapper .table-responsive {\n    width: 100%; overflow-x: auto; margin: 2rem 0;\n  }\n  .pitch-wrapper table {\n    width: 100%; border-collapse: collapse;\n    background: white; border-radius: 16px;\n    overflow: hidden; box-shadow: 0 10px 30px rgba(0,0,0,0.08);\n    font-size: clamp(0.8rem, 2.5vw, 1rem);\n  }\n  .pitch-wrapper th, .pitch-wrapper td {\n    padding: clamp(0.5rem, 2vw, 1rem) clamp(0.8rem, 3vw, 1.5rem);\n    text-align: left;\n  }\n  .pitch-wrapper th { background: #1a365d; color: white; }\n  .pitch-wrapper tr:nth-child(even) { background: #f7fafc; }\n  .pitch-wrapper .pitch-cta {\n    background: #1a365d; color: white;\n    text-align: center;\n    padding: clamp(2rem, 8vw, 5rem) 5%;\n  }\n  .pitch-wrapper .pitch-cta h2 { color: white; }\n\n  @media (max-width: 768px) {\n    .pitch-wrapper .asset-grid { flex-direction: column; gap: 1.5rem; }\n    .pitch-wrapper .grid { grid-template-columns: 1fr; }\n  }\n\n  \/* ===== ADASE DASHBOARD (scoped to #adase-dashboard) ===== *\/\n  #adase-dashboard {\n    font-family: 'Inter', sans-serif;\n    background: radial-gradient(circle at 10% 20%, #f8faff, #eef2ff);\n    color: #1e293b;\n    padding: 0; margin: 0;\n    border-radius: 40px 40px 0 0;\n    box-shadow: 0 -10px 30px rgba(0,0,0,0.05);\n    overflow: hidden; position: relative; z-index: 10;\n  }\n  #adase-dashboard .dashboard-container {\n    max-width: 1400px; margin: 0 auto;\n    padding: 0 clamp(12px, 3vw, 32px);\n  }\n  #adase-dashboard .navbar {\n    background: rgba(255,255,255,0.92); backdrop-filter: blur(12px);\n    box-shadow: 0 4px 20px rgba(0,0,0,0.02);\n    padding: clamp(10px, 2vw, 16px) 0;\n    position: sticky; top: 0; z-index: 100;\n    border-bottom: 1px solid rgba(139,92,246,0.15);\n  }\n  #adase-dashboard .nav-flex {\n    display: flex; justify-content: space-between; align-items: center;\n    flex-wrap: wrap; gap: 20px;\n  }\n  #adase-dashboard .coin-logo {\n    width: clamp(40px, 10vw, 55px); height: clamp(40px, 10vw, 55px);\n    background: radial-gradient(circle at 30% 35%, #f9d976, #f39f86);\n    border-radius: 50%; display: flex; align-items: center; justify-content: center;\n    box-shadow: 0 4px 12px rgba(0,0,0,0.2), inset 0 1px 2px rgba(255,255,255,0.6);\n    border: 2px solid #eab308;\n  }\n  #adase-dashboard .coin-logo span {\n    font-weight: 800; font-size: clamp(0.5rem, 1.8vw, 0.7rem);\n    text-align: center; line-height: 1.2; color: #422800;\n    background: rgba(255,255,255,0.85); padding: 4px 6px;\n    border-radius: 20px; width: 85%; letter-spacing: -0.3px;\n  }\n  #adase-dashboard .brand-title { display: flex; flex-direction: column; margin-left: 8px; }\n  #adase-dashboard .title-line { display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; }\n  #adase-dashboard .brand-adase {\n    font-size: clamp(1.4rem, 5vw, 2.4rem); font-weight: 800;\n    color: #2563eb; letter-spacing: -1px; line-height: 1;\n  }\n  #adase-dashboard .brand-ads-ltd {\n    font-size: clamp(0.8rem, 3vw, 1.2rem); font-weight: 700;\n    color: #84cc16; letter-spacing: -0.3px;\n  }\n  #adase-dashboard .tagline {\n    font-size: clamp(0.65rem, 2vw, 0.85rem); font-weight: 600;\n    background: linear-gradient(135deg, #2563eb, #8b5cf6);\n    -webkit-background-clip: text; background-clip: text;\n    color: transparent; letter-spacing: 1px; margin-top: 2px;\n  }\n  #adase-dashboard .btn-sm {\n    padding: clamp(6px, 1.5vw, 8px) clamp(16px, 4vw, 22px);\n    border-radius: 60px; font-weight: 600;\n    font-size: clamp(0.7rem, 2.2vw, 0.85rem);\n    border: none; cursor: pointer; transition: all 0.25s;\n    display: inline-flex; align-items: center; gap: 8px;\n  }\n  #adase-dashboard .btn-primary {\n    background: linear-gradient(135deg, #2563eb, #8b5cf6); color: white;\n    box-shadow: 0 4px 10px rgba(37,99,235,0.3);\n  }\n  #adase-dashboard .btn-primary:hover { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(37,99,235,0.4); }\n  #adase-dashboard .btn-lemon { background: #84cc16; color: #1a2c3e; box-shadow: 0 2px 8px rgba(132,204,22,0.3); }\n  #adase-dashboard .btn-lemon:hover { background: #65a30d; transform: translateY(-2px); color: white; box-shadow: 0 6px 14px rgba(132,204,22,0.4); }\n  #adase-dashboard .btn-outline { background: transparent; border: 1px solid #2563eb; color: #2563eb; }\n  #adase-dashboard .btn-danger { background: #ef4444; color: white; }\n  #adase-dashboard .btn-warning { background: #f59e0b; color: white; }\n\n  #adase-dashboard .card {\n    background: rgba(255,255,255,0.95); backdrop-filter: blur(2px);\n    border-radius: clamp(20px, 5vw, 32px);\n    padding: clamp(1rem, 4vw, 28px);\n    margin-bottom: clamp(1rem, 3vw, 28px);\n    border: 1px solid rgba(255,255,255,0.6);\n    box-shadow: 0 20px 35px -12px rgba(0,0,0,0.05);\n    transition: all 0.3s;\n  }\n  #adase-dashboard .hero {\n    text-align: center; padding: clamp(2rem, 8vw, 60px) 5%;\n    background: linear-gradient(135deg, rgba(37,99,235,0.05), rgba(139,92,246,0.05));\n    border-radius: 56px; margin: 30px 0;\n  }\n  #adase-dashboard .hero h2 {\n    font-size: clamp(1.5rem, 6vw, 2.8rem); font-weight: 800;\n    background: linear-gradient(135deg, #2563eb, #8b5cf6, #84cc16);\n    -webkit-background-clip: text; background-clip: text; color: transparent;\n  }\n  #adase-dashboard .grid-2 {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(min(340px, 100%), 1fr));\n    gap: clamp(1rem, 3vw, 28px);\n  }\n  #adase-dashboard .badge {\n    background: linear-gradient(135deg, #eef2ff, #f3e8ff);\n    color: #4c1d95; padding: clamp(4px, 1vw, 6px) clamp(10px, 3vw, 14px);\n    border-radius: 60px; font-size: clamp(0.65rem, 2vw, 0.75rem);\n    font-weight: 700; display: inline-flex; align-items: center; gap: 6px;\n  }\n  #adase-dashboard input, #adase-dashboard select, #adase-dashboard textarea {\n    width: 100%; padding: clamp(8px, 2vw, 12px) clamp(14px, 3vw, 20px);\n    border-radius: 40px; border: 1px solid #e2e8f0;\n    background: #ffffff; font-size: clamp(0.8rem, 2.2vw, 0.9rem);\n    transition: all 0.2s; margin: 6px 0 14px;\n  }\n  #adase-dashboard label {\n    font-weight: 600; font-size: clamp(0.7rem, 2vw, 0.85rem);\n    color: #334155; margin-left: 12px;\n  }\n  #adase-dashboard table {\n    width: 100%; border-collapse: collapse; display: block; overflow-x: auto;\n    font-size: clamp(0.7rem, 2vw, 0.88rem);\n  }\n  #adase-dashboard th, #adase-dashboard td {\n    padding: clamp(6px, 1.5vw, 10px) clamp(6px, 2vw, 8px);\n    text-align: left; border-bottom: 1px solid #eef2ff;\n  }\n  #adase-dashboard th { font-weight: 700; color: #1e293b; background: #f8fafc; }\n  #adase-dashboard .flex-between {\n    display: flex; justify-content: space-between; align-items: center;\n    flex-wrap: wrap; gap: 16px;\n  }\n  #adase-dashboard .modal {\n    display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%;\n    background: rgba(0,0,0,0.6); backdrop-filter: blur(4px);\n    z-index: 1000; justify-content: center; align-items: center;\n  }\n  #adase-dashboard .modal-content {\n    background: white; max-width: 520px; width: 90%;\n    border-radius: 48px; padding: clamp(1.5rem, 5vw, 32px);\n    max-height: 85vh; overflow-y: auto;\n    box-shadow: 0 25px 50px -12px rgba(0,0,0,0.25);\n  }\n  #adase-dashboard .close-modal { float: right; font-size: 28px; cursor: pointer; }\n  #adase-dashboard .footer-dash {\n    margin-top: clamp(2rem, 6vw, 60px);\n    padding: clamp(2rem, 6vw, 40px) 0 30px;\n    border-top: 1px solid rgba(139,92,246,0.15);\n    text-align: center; background: rgba(255,255,255,0.5);\n    border-radius: 40px 40px 0 0;\n  }\n  #adase-dashboard .footer-dash p {\n    color: #475569; font-size: clamp(0.75rem, 2vw, 0.9rem);\n  }\n  @media (max-width: 768px) {\n    #adase-dashboard .nav-flex { flex-direction: column; align-items: stretch; }\n    #adase-dashboard .auth-buttons, #adase-dashboard .nav-flex .btn-lemon {\n      justify-content: center; width: 100%;\n    }\n    #adase-dashboard .grid-2 { grid-template-columns: 1fr; }\n    #adase-dashboard .hero { margin: 15px 0; border-radius: 32px; }\n  }\n<\/style>\n\n<!-- ========== CONTENT SECTIONS ========== -->\n<div class=\"cashchat-redesign\">\n  <!-- ... (the exact same HTML as previous merge: Cash Chat landing with nav, hero, steps, features, about) ... -->\n  <!-- For brevity, I'll include a shortened version here. Replace with your full previous HTML. -->\n  <nav class=\"cc-nav\">\n    <a href=\"#\" class=\"cc-logo\">CashChat<\/a>\n    <input type=\"checkbox\" id=\"cc-menu-toggle\">\n    <label for=\"cc-menu-toggle\" class=\"cc-menu-icon\"><span><\/span><span><\/span><span><\/span><\/label>\n    <ul class=\"cc-nav-links\">\n      <li><a href=\"#home\">Home<\/a><\/li>\n      <li><a href=\"\/dir\/pitch\/\">Our Story<\/a><\/li>\n      <li><a href=\"#contact\">Contact<\/a><\/li>\n    <\/ul>\n  <\/nav>\n  <section class=\"cc-hero\" id=\"home\">\n    <h1>Your Mobile Money, Simplified<\/h1>\n    <p>Cash Chat Bank gives you a free, secure digital wallet to send, receive, and store money right from your phone. No hidden fees, no paperwork.<\/p>\n    <a href=\"#\" class=\"cc-btn cc-btn-primary\">Create Free Wallet<\/a>\n    <a href=\"#features\" class=\"cc-btn cc-btn-outline\">See Features<\/a>\n  <\/section>\n  <section class=\"cc-section\">\n    <h2>How to Register Your Wallet<\/h2>\n    <div class=\"cc-steps-grid\">\n      <div class=\"cc-step-card\"><div class=\"cc-step-number\">1<\/div><h4>Download the App<\/h4><p>Get Cash Chat Bank from the Google Play Store or official website.<\/p><\/div>\n      <div class=\"cc-step-card\"><div class=\"cc-step-number\">2<\/div><h4>Sign Up<\/h4><p>Open the app and tap &#8220;Create Account&#8221;.<\/p><\/div>\n      <div class=\"cc-step-card\"><div class=\"cc-step-number\">3<\/div><h4>Verify Your Number<\/h4><p>Enter your active mobile number and verify with the OTP code sent via SMS.<\/p><\/div>\n      <div class=\"cc-step-card\"><div class=\"cc-step-number\">4<\/div><h4>Set Your PIN &#038; Go<\/h4><p>Create a 4\u2011digit PIN for security. Your wallet is ready!<\/p><\/div>\n    <\/div>\n  <\/section>\n  <section class=\"cc-section\" id=\"features\">\n    <h2>Why Cash Chat Bank?<\/h2>\n    <div class=\"cc-features-grid\">\n      <div class=\"cc-feature-card\"><div class=\"cc-feature-icon\">\u26a1<\/div><h4>Instant Transactions<\/h4><p>Send and receive money in real\u2011time, 24\/7.<\/p><\/div>\n      <div class=\"cc-feature-card\"><div class=\"cc-feature-icon\">\ud83d\udd12<\/div><h4>Bank\u2011Level Security<\/h4><p>Encrypted and protected with multi\u2011factor authentication.<\/p><\/div>\n      <div class=\"cc-feature-card\"><div class=\"cc-feature-icon\">\ud83c\udf0d<\/div><h4>Bill Payments &#038; Airtime<\/h4><p>Pay utilities, buy airtime, and more directly from your wallet.<\/p><\/div>\n      <div class=\"cc-feature-card\"><div class=\"cc-feature-icon\">\ud83d\udcf1<\/div><h4>Works Offline<\/h4><p>Check balances and initiate transactions even with slow networks.<\/p><\/div>\n    <\/div>\n  <\/section>\n  <section class=\"cc-section cc-about\">\n    <h2>Built by Adase Ads Ltd<\/h2>\n    <p>Cash Chat Bank is a product of <strong>Adase Ads Ltd<\/strong>, a company born from resilience. After facing challenges in the fintech licensing process, we redirected our expertise into ad\u2011tech while keeping our payment solutions alive. Our journey is a testament to innovation and persistence.<\/p>\n    <a href=\"\/dir\/pitch\/\" class=\"cc-btn cc-btn-primary\">Read Our Full Story \u2192<\/a>\n  <\/section>\n<\/div>\n\n<div class=\"adase-infographic-wrapper\">\n  <!-- (Full infographic HTML \u2013 same as before, but using the updated responsive classes) -->\n  <div class=\"infographic\">\n    <div class=\"header\">\n      <div class=\"logo-area\"><h1><i class=\"fas fa-bullhorn\" style=\"color:#F97316;\"><\/i> Adase Ads Technology<\/h1><p>Registered in Uganda as Adase Ads Ltd on 22 April 2026 \u00b7 Head Offices: Zion Road Plot 12 AAA Close, Kira, Uganda<\/p><\/div>\n      <div class=\"badge\"><i class=\"fas fa-chart-line\"><\/i> Target: 10% of $1.14T by 2030<\/div>\n    <\/div>\n    <div class=\"grid\">\n      <!-- Block 1 -->\n      <div class=\"card\"><h3><i class=\"fas fa-globe-africa\"><\/i> Vision \u00b7 100k Ad Companies<\/h3><ul class=\"list-bullet\"><li><i class=\"fas fa-flag-checkered\"><\/i> <strong>Uganda:<\/strong> 20,000 SMCs<\/li><li><i class=\"fas fa-map-marker-alt\"><\/i> <strong>East Africa (excl. UG):<\/strong> 30,000 SMEs<\/li><li><i class=\"fas fa-earth-americas\"><\/i> <strong>Outside East Africa:<\/strong> 50,000 SMEs<\/li><\/ul><div class=\"divider-light\"><\/div><div class=\"stat-number\">200,000<\/div><p style=\"font-weight:600;\">Total Ads Team Members <br> (2 staff per company)<\/p><\/div>\n      <!-- Block 2 -->\n      <div class=\"card\"><h3><i class=\"fas fa-chart-simple\"><\/i> Market Opportunity<\/h3><div class=\"stat-number\">$1.14 Trillion<\/div><p>Global digital ad revenue (2026 forecast)<\/p><div class=\"two-col-stats\"><div class=\"stat-block\"><i class=\"fas fa-bullseye\"><\/i><br><strong>2030 Goal<\/strong><br>10% market share<\/div><div class=\"stat-block\"><i class=\"fas fa-dollar-sign\"><\/i><br><strong>~$114B<\/strong><br>annual Adase gross ads<\/div><\/div><p style=\"margin-top:12px;\"><i class=\"fas fa-user-check\"><\/i> Quality verified users \u00b7 High purchasing power<\/p><\/div>\n      <!-- Block 3 -->\n      <div class=\"card\"><h3><i class=\"fas fa-coins\"><\/i> Revenue Split (per ad payment)<\/h3><div class=\"revenue-split\"><div class=\"split-item\"><span class=\"split-percent\">40%<\/span><br>Ads distribution &#038; mgmt<\/div><div class=\"split-item\"><span class=\"split-percent\">30%<\/span><br>Creators + engaged users<\/div><div class=\"split-item\"><span class=\"split-percent\">30%<\/span><br>Adase, CashChat Ltd,<br>Boldcashers UK Ltd<\/div><\/div><div class=\"divider-light\"><\/div><p><i class=\"fas fa-chart-pie\"><\/i> Transparent \u00b7 Weekly &#038; instant payouts<\/p><\/div>\n      <!-- Block 4 -->\n      <div class=\"card\"><h3><i class=\"fas fa-building\"><\/i> Ad Company Earnings<\/h3><div class=\"two-col-stats\"><div class=\"stat-block\"><i class=\"fas fa-bolt\"><\/i><br><strong>20% immediate<\/strong><br>per advert uploaded<br><span style=\"font-size:0.7rem;\">(paid instantly)<\/span><\/div><div class=\"stat-block\"><i class=\"fas fa-calendar-week\"><\/i><br><strong>20% annual pool<\/strong><br>of previous year&#8217;s global revenue<br><span style=\"font-size:0.7rem;\">distributed weekly \u2192 covers 2 staff salaries<\/span><\/div><\/div><p style=\"margin-top:10px;\"><i class=\"fas fa-chart-line\"><\/i> Hardworking companies earn more<\/p><\/div>\n      <!-- Block 5 -->\n      <div class=\"card\"><h3><i class=\"fas fa-gift\"><\/i> User Rewards (from 30% pool)<\/h3><div class=\"two-col-stats\" style=\"margin-bottom:0;\"><div class=\"stat-block\"><i class=\"fas fa-video\"><\/i><br><strong>Content creators<\/strong><br>videos, memes, sounds, series<\/div><div class=\"stat-block\"><i class=\"fas fa-comment-dots\"><\/i><br><strong>Engaged users<\/strong><br>courses, watching, likes, comments<\/div><div class=\"stat-block\"><i class=\"fas fa-ad\"><\/i><br><strong>Ad creators<\/strong><br>reward points + revenue share<\/div><\/div><p style=\"font-size:0.7rem; margin-top:12px;\"><i class=\"fas fa-copyright\"><\/i> No copyright punishment \u00b7 Adase denies liability \u00b7 Content owned by uploader<\/p><\/div>\n      <!-- Block 6 -->\n      <div class=\"card\"><h3><i class=\"fas fa-credit-card\"><\/i> Global Payment Methods<\/h3><div class=\"payment-icons\"><span><i class=\"fas fa-mobile-alt\"><\/i> Mobile Money<\/span><span><i class=\"fas fa-wallet\"><\/i> CashChat Wallet<\/span><span><i class=\"fab fa-paypal\"><\/i> PayPal<\/span><span><i class=\"fab fa-google\"><\/i> Google Pay<\/span><span><i class=\"fab fa-apple\"><\/i> Apple Pay<\/span><span><i class=\"fas fa-credit-card\"><\/i> Visa\/Mastercard<\/span><span><i class=\"fab fa-weixin\"><\/i> WeChat Pay<\/span><span><i class=\"fas fa-university\"><\/i> Union Pay<\/span><\/div><p style=\"margin-top:12px; font-size:0.8rem;\">Standard pricing \u00b7 Served on Adase social media, CashChat AI &#038; integrated platforms<\/p><\/div>\n    <\/div>\n    <div class=\"card\" style=\"margin-bottom:20px;\"><h3><i class=\"fas fa-hand-holding-usd\"><\/i> Funding Request \u00b7 $20M for 35% Equity<\/h3><div class=\"funding-bar\" style=\"background:#EFF3F8; padding:8px 12px;\"><div style=\"display:flex; justify-content:space-between; flex-wrap:wrap; gap:8px;\"><span><strong>Servers<\/strong> 25% ($5M)<\/span><span><strong>Cloud fees<\/strong> 20% ($4M)<\/span><span><strong>Development<\/strong> 15% ($3M)<\/span><span><strong>Debt repayment<\/strong> 15% ($3M)<\/span><span><strong>Float accounts<\/strong> 10% ($2M)<\/span><span><strong>Licenses\/acq<\/strong> 10% ($2M)<\/span><span><strong>Contingency<\/strong> 5% ($1M)<\/span><\/div><\/div><div class=\"two-col-stats\" style=\"margin-top:8px;\"><div class=\"stat-block\"><i class=\"fas fa-chart-line\"><\/i> <strong>35% user-owned<\/strong><br>Dividend-earning digital shares<\/div><div class=\"stat-block\"><i class=\"fas fa-chart-line\"><\/i> <strong>IPO Exit<\/strong><br>Liquidity for all user-shareholders<\/div><\/div><\/div>\n    <div class=\"footer-note\"><div><i class=\"fas fa-bullhorn\"><\/i> <strong>Bottom line:<\/strong> Decentralized, high-growth ad network aiming for 10% of global digital ad spend by 2030.<\/div><div><i class=\"fas fa-balance-scale\"><\/i> <strong>Disclaimer:<\/strong> Adase does not enforce copyright &#038; denies liability for disputes. Content owned by poster.<\/div><div><i class=\"fas fa-envelope\"><\/i> Adase Ads Ltd, Zion Road Plot 12 AAA Close, Kira, Uganda \u00b7 Informational only<\/div><\/div>\n  <\/div>\n<\/div>\n\n<div class=\"pitch-wrapper\">\n  <!-- (Investor pitch HTML \u2013 same as before, responsive classes applied automatically) -->\n  <section class=\"pitch-hero\" id=\"pitch-home\">\n    <div><h1>Monetising East Africa\u2019s Mobile Social Boom<\/h1><p>A high\u2011margin advertising platform built from a decade of fintech resilience. Live app, 500K dormant users, and a team that turns crises into cash.<\/p><div><a href=\"#pitch-invest\" class=\"btn\">Investment Details<\/a><a href=\"#pitch-story\" class=\"btn btn-outline\">Our Journey<\/a><\/div><div style=\"margin-top: 2rem; display: flex; flex-wrap: wrap; justify-content: center; gap: 1rem;\"><a href=\"https:\/\/cashchatbank.com\" target=\"_blank\" class=\"btn btn-wallet\">\ud83d\udcb3 Wallet App<\/a><a href=\"https:\/\/ai.cashchatapp.com\" target=\"_blank\" class=\"btn btn-social\">\ud83d\udcac Social Media App<\/a><\/div><\/div>\n  <\/section>\n  <!-- ... (remaining pitch sections) ... -->\n<\/div>\n\n<!-- ========== DASHBOARD ========== -->\n<div id=\"adase-dashboard\">\n  <!-- ... (dashboard HTML as in previous merge, using dashboard-container, navbar, dynamicPanel, etc.) ... -->\n<\/div>\n\n<script>\n  \/\/ ... (scoped dashboard script as before) ...\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Adase Ads Ltd | Complete Ad + SMM Platform \ud83d\udce2 Adase Serve Loading&#8230; CashChat Home Our Story Contact Your Mobile Money, Simplified Cash Chat Bank gives you a free, secure digital wallet to send, receive, and store money right from your phone. No hidden fees, no paperwork. Create Free Wallet See Features How to Register [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"class_list":["post-91","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages\/91","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/comments?post=91"}],"version-history":[{"count":6,"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages\/91\/revisions"}],"predecessor-version":[{"id":216,"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages\/91\/revisions\/216"}],"wp:attachment":[{"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/media?parent=91"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}