{"id":32,"date":"2026-03-31T16:55:23","date_gmt":"2026-03-31T16:55:23","guid":{"rendered":"https:\/\/cashchat.se\/dir\/?page_id=32"},"modified":"2026-04-03T15:43:08","modified_gmt":"2026-04-03T15:43:08","slug":"shares","status":"publish","type":"page","link":"https:\/\/cashchat.se\/dir\/shares\/","title":{"rendered":"Shares"},"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, user-scalable=yes\">\n    <title>Cash Chat Limited \u2013 Shareholder Hub<\/title>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html2canvas\/1.4.1\/html2canvas.min.js\"><\/script>\n    <script src=\"https:\/\/cdn.sheetjs.com\/xlsx-0.20.2\/package\/dist\/xlsx.full.min.js\"><\/script>\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Alex+Brush&#038;display=swap\" rel=\"stylesheet\">\n    <style>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n            font-family: 'Segoe UI', 'Georgia', serif;\n        }\n        body {\n            background: #f4f3f7;\n            padding: 1rem;\n        }\n        .public-header {\n            max-width: 1400px;\n            margin: 0 auto 1rem;\n            background: white;\n            border-radius: 20px;\n            box-shadow: 0 4px 12px rgba(0,0,0,0.05);\n            overflow: hidden;\n        }\n        .navbar {\n            display: flex;\n            flex-wrap: wrap;\n            justify-content: space-between;\n            align-items: center;\n            gap: 0.8rem;\n            padding: 1rem;\n        }\n        .nav-links {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 0.8rem;\n            align-items: center;\n        }\n        .nav-links a, .nav-links span {\n            text-decoration: none;\n            color: #41009A;\n            font-weight: 500;\n            font-size: 0.85rem;\n            padding: 0.3rem 0.6rem;\n            border-radius: 30px;\n            transition: background 0.2s;\n            white-space: nowrap;\n        }\n        .admin-link {\n            background: #ede5f5;\n            border: 1px solid #a57152;\n            cursor: pointer;\n        }\n        .action-buttons {\n            display: flex;\n            gap: 12px;\n            flex-wrap: wrap;\n            margin: 0 1rem 1rem 1rem;\n        }\n        .action-btn {\n            background: #41009A;\n            color: white;\n            padding: 8px 18px;\n            border-radius: 40px;\n            font-weight: bold;\n            text-decoration: none;\n            font-size: 0.85rem;\n            display: inline-flex;\n            align-items: center;\n            gap: 6px;\n            transition: 0.2s;\n            box-shadow: 0 2px 6px rgba(0,0,0,0.1);\n        }\n        .action-btn:hover {\n            background: #2c006e;\n            transform: translateY(-1px);\n        }\n        .ticker-container {\n            background: #ede5f5;\n            border-radius: 48px;\n            margin: 0 1rem 1rem 1rem;\n            border: 1px solid #d0b9af;\n            overflow: hidden;\n            white-space: nowrap;\n        }\n        .ticker-wrapper {\n            display: inline-block;\n            will-change: transform;\n            animation: scrollTicker 90s linear infinite;\n        }\n        .ticker-item {\n            display: inline-block;\n            margin: 0 0.8rem;\n            padding: 0.3rem 1rem;\n            border-radius: 40px;\n            font-size: 0.8rem;\n            font-weight: 500;\n            color: white;\n            background: #2c7a2c;\n            box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n        }\n        .ticker-item.sell {\n            background: #9a3e3e;\n        }\n        @keyframes scrollTicker {\n            0% { transform: translateX(0); }\n            100% { transform: translateX(-100%); }\n        }\n        .support-card {\n            background: white;\n            max-width: 1400px;\n            margin: 1rem auto;\n            border-radius: 20px;\n            padding: 1rem;\n            border: 1px solid #e0d6f0;\n            display: flex;\n            flex-wrap: wrap;\n            gap: 1rem;\n            justify-content: space-between;\n        }\n        .support-card > div {\n            flex: 1;\n            min-width: 200px;\n        }\n        .support-card h3 {\n            color: #41009A;\n            margin-bottom: 0.5rem;\n            font-size: 1.1rem;\n        }\n        .support-card ul {\n            list-style: none;\n            padding-left: 0;\n        }\n        .support-card li {\n            margin: 0.4rem 0;\n            font-size: 0.85rem;\n        }\n        .verification-guide {\n            background: linear-gradient(145deg, #fffaf0 0%, #fff5e6 100%);\n            max-width: 1400px;\n            margin: 1rem auto;\n            border-radius: 24px;\n            padding: 1.2rem 1.5rem;\n            border-left: 8px solid #41009A;\n            box-shadow: 0 6px 14px rgba(0,0,0,0.05);\n        }\n        .verification-guide h3 {\n            color: #41009A;\n            font-size: 1.4rem;\n            margin-bottom: 0.75rem;\n            display: flex;\n            align-items: center;\n            gap: 8px;\n        }\n        .verification-guide ol, .verification-guide ul {\n            margin-left: 1.5rem;\n            margin-top: 0.5rem;\n        }\n        .verification-guide li {\n            margin: 0.6rem 0;\n            line-height: 1.4;\n            font-size: 0.9rem;\n        }\n        .verification-guide strong {\n            color: #1e5f1e;\n        }\n        .login-container, .admin-panel {\n            max-width: 1400px;\n            margin: 0 auto;\n        }\n        .login-container {\n            background: white;\n            max-width: 400px;\n            margin: 2rem auto;\n            padding: 1.5rem;\n            border-radius: 20px;\n            box-shadow: 0 10px 25px rgba(0,0,0,0.1);\n            text-align: center;\n            border-top: 6px solid #41009A;\n        }\n        .admin-panel {\n            display: none;\n            background: white;\n            border-radius: 20px;\n            box-shadow: 0 10px 30px rgba(0,0,0,0.1);\n            overflow: hidden;\n        }\n        .panel-header {\n            background: #41009A;\n            padding: 1rem;\n            color: white;\n            display: flex;\n            flex-wrap: wrap;\n            justify-content: space-between;\n            align-items: center;\n        }\n        .main-content {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 1.5rem;\n            padding: 1rem;\n        }\n        .form-section, .preview-section, .contrib-list-section {\n            flex: 1;\n            min-width: 280px;\n            background: #faf9ff;\n            padding: 1rem;\n            border-radius: 16px;\n            border: 1px solid #e0d6f0;\n        }\n        .form-section h3, .preview-section h3, .contrib-list-section h3 {\n            color: #41009A;\n            margin-bottom: 0.8rem;\n            border-left: 4px solid #41009A;\n            padding-left: 0.75rem;\n            font-size: 1.2rem;\n        }\n        .form-group {\n            margin-bottom: 0.8rem;\n        }\n        .form-group label {\n            display: block;\n            font-weight: 600;\n            margin-bottom: 0.2rem;\n            font-size: 0.8rem;\n        }\n        .form-group input, .form-group select {\n            width: 100%;\n            padding: 8px;\n            border: 1px solid #ccc;\n            border-radius: 8px;\n            font-size: 0.9rem;\n        }\n        .btn-group {\n            display: flex;\n            gap: 0.8rem;\n            margin-top: 1rem;\n            flex-wrap: wrap;\n        }\n        .btn {\n            background: #41009A;\n            color: white;\n            border: none;\n            padding: 8px 12px;\n            border-radius: 40px;\n            font-weight: bold;\n            cursor: pointer;\n            flex: 1;\n            text-align: center;\n            font-size: 0.9rem;\n        }\n        .btn-secondary {\n            background: #a57152;\n        }\n        .btn-outline {\n            background: white;\n            color: #41009A;\n            border: 1px solid #41009A;\n        }\n        .certificate-card {\n            background: #fffef7;\n            border: 2px solid #41009A;\n            border-radius: 16px;\n            padding: 1rem;\n            font-family: 'Georgia', serif;\n            overflow-x: auto;\n        }\n        .certificate-header {\n            text-align: center;\n            border-bottom: 2px solid #41009A;\n            padding-bottom: 0.6rem;\n            margin-bottom: 0.8rem;\n        }\n        .logo-star {\n            width: 50px;\n            margin: 0 auto 0.3rem;\n        }\n        .company-name {\n            font-size: 1.2rem;\n            font-weight: bold;\n            color: #41009A;\n        }\n        .cert-title h2 {\n            font-size: 1.2rem;\n            text-transform: uppercase;\n            color: #41009A;\n            border-bottom: 2px solid #41009A;\n            display: inline-block;\n            padding-bottom: 0.2rem;\n        }\n        .donor-box {\n            background: #f9f6ff;\n            padding: 0.6rem;\n            margin: 0.8rem 0;\n            border-left: 5px solid #41009A;\n        }\n        .donor-line {\n            margin: 0.3rem 0;\n            font-size: 0.8rem;\n        }\n        .verified-text {\n            font-family: 'Alex Brush', cursive;\n            font-size: 21px;\n            font-weight: bold;\n            color: blue;\n            margin-bottom: 4px;\n            display: block;\n            text-align: center;\n        }\n        .signature-area {\n            display: flex;\n            flex-wrap: wrap;\n            justify-content: space-between;\n            margin-top: 1rem;\n            padding-top: 0.8rem;\n            border-top: 1px solid #ccc;\n        }\n        .sign-line {\n            text-align: center;\n            width: 45%;\n            min-width: 120px;\n        }\n        .stamp-seal {\n            width: 70px;\n            height: 70px;\n            border-radius: 50%;\n            background: #fef7e0;\n            border: 2px solid #41009A;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            margin: 0 auto 0.3rem;\n            font-weight: bold;\n            font-size: 1rem;\n            color: #41009A;\n            text-align: center;\n            line-height: 1.2;\n        }\n        .footer-note {\n            text-align: center;\n            font-size: 0.65rem;\n            color: #666;\n            margin-top: 0.8rem;\n            border-top: 1px solid #eee;\n            padding-top: 0.6rem;\n        }\n        .contrib-table {\n            width: 100%;\n            border-collapse: collapse;\n            margin-top: 0.8rem;\n            font-size: 0.75rem;\n            display: block;\n            overflow-x: auto;\n            white-space: nowrap;\n        }\n        .contrib-table th, .contrib-table td {\n            border-bottom: 1px solid #ddd;\n            padding: 0.4rem;\n            text-align: left;\n        }\n        .contrib-table th {\n            background: #ede5f5;\n            color: #41009A;\n        }\n        .error-msg {\n            color: red;\n            margin-top: 10px;\n            font-size: 0.8rem;\n        }\n        @media (max-width: 700px) {\n            .navbar { flex-direction: column; align-items: stretch; }\n            .signature-area { flex-direction: column; align-items: center; gap: 1rem; }\n            .sign-line { width: 100%; }\n            .verification-guide { padding: 1rem; }\n        }\n    <\/style>\n<\/head>\n<body>\n\n<div class=\"public-header\">\n    <div class=\"navbar\">\n        <div class=\"logo-area\" style=\"display: flex; align-items: center;\">\n            <div class=\"logo-mark\" style=\"display: inline-block; background:#41009A; width:36px; height:36px; border-radius:10px; text-align:center; line-height:36px; color:white; font-weight:bold; margin-right:8px;\">CC<\/div>\n            <div class=\"logo-text\">\n                <h2>Cash Chat Limited<\/h2>\n                <p>Fintech \u00b7 Digital Ads \u00b7 Flicks Social<\/p>\n            <\/div>\n        <\/div>\n        <div class=\"nav-links\">\n            <a href=\"#\">Home<\/a>\n            <a href=\"#\">Shares<\/a>\n            <a href=\"#\">Flicks<\/a>\n            <a href=\"#\">Equity<\/a>\n            <span id=\"adminBtn\" class=\"admin-link\">\ud83d\udd10 Admin<\/span>\n        <\/div>\n    <\/div>\n    <div class=\"action-buttons\">\n        <a href=\"https:\/\/my.cashchatapp.coaccount\/register?id=23530191&#038;name=sengendo\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"action-btn\">\u2705 Get Verified Dashboard<\/a>\n        <a href=\"https:\/\/my.cashchatapp.com\/account\/trading\/app\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"action-btn\">\ud83d\udcc8 Access Shares<\/a>\n    <\/div>\n    <div class=\"ticker-container\">\n        <div class=\"ticker-wrapper\" id=\"globalTicker\"><\/div>\n    <\/div>\n<\/div>\n\n<div class=\"support-card\">\n    <div>\n        <h3>\ud83c\udfe2 Corporate Office<\/h3>\n        <p>Plot 146 Semawata Road, Ntinda, Kampala, Uganda<\/p>\n        <p>\ud83d\udcde +256 775 036603<\/p>\n        <p>\u2709\ufe0f info@cashchat.se<\/p>\n    <\/div>\n    <div>\n        <h3>\ud83d\udcc8 Share Classes<\/h3>\n        <ul>\n            <li><strong>Class C Shares<\/strong> \u2013 $30.00 per share (initial price)<\/li>\n            <li><strong>Class B Shares<\/strong> \u2013 $50.00 per share (initial price)<\/li>\n            <li>\u2705 Dividends paid directly to wallet (AGM decision)<\/li>\n            <li>\ud83d\udd01 Trade on internal platform (verified members only)<\/li>\n        <\/ul>\n    <\/div>\n<\/div>\n\n<!-- VERIFICATION INSTRUCTIONS - VISIBLE TO ALL -->\n<div class=\"verification-guide\">\n    <h3>\ud83d\udccb How to Get Verified &#038; Activate Your Account<\/h3>\n    <ol>\n        <li><strong>Fill the signup form with accuracy.<\/strong> Provide full names, a valid email, select your country, enter phone starting with a country code <strong>but no + sign<\/strong> (e.g., 256712345678).<\/li>\n        <li>Create a <strong>pin code password<\/strong> and confirm it (use <strong>6 numbers only<\/strong>). Accept terms and hit <strong>Signup<\/strong>.<\/li>\n        <li>After registration, click on <strong>Login<\/strong> to access your wallet.<\/li>\n        <li>Inside your dashboard: click on the <strong>blue wallet<\/strong> &#038; type <strong>start<\/strong>.<\/li>\n        <li>Type <strong>1<\/strong> (my wallet), then type <strong>2<\/strong> (Pay Subscription).<\/li>\n        <li>Select your <strong>currency<\/strong> and choose <strong>payment method<\/strong>. You must have a minimum of:\n            <ul>\n                <li>\ud83c\uddfa\ud83c\uddec <strong>UGX 76,000<\/strong> on MTN (Uganda)<\/li>\n                <li>\ud83c\uddf0\ud83c\uddea <strong>KES 1,550<\/strong> on Mpesa (Kenya)<\/li>\n                <li>\ud83c\udf0d <strong>$20 USD<\/strong> in your wallet (all other countries)<\/li>\n            <\/ul>\n        <\/li>\n        <li>Enter your mobile money number &amp; send. A prompt will appear on MTN\/Mpesa \u2014 <strong>accept it<\/strong> and your account will be <strong>Activated instantly<\/strong>.<\/li>\n    <\/ol>\n    <p style=\"margin-top: 12px; font-size:0.85rem; background:#e9e0f5; padding:6px 12px; border-radius:30px; display:inline-block;\">\u2b50 After activation you can trade shares, access dividends, and join the shareholder community.<\/p>\n<\/div>\n\n<div id=\"loginScreen\" class=\"login-container\">\n    <div style=\"font-size: 2rem;\">\ud83d\udd10<\/div>\n    <h2>Admin Access (Share Registrar)<\/h2>\n    <input type=\"email\" id=\"loginEmail\" placeholder=\"Email\">\n    <input type=\"password\" id=\"loginPassword\" placeholder=\"Password\">\n    <button id=\"loginBtn\">Login<\/button>\n    <div id=\"loginError\" class=\"error-msg\"><\/div>\n    <!-- No credential hints displayed anywhere -->\n<\/div>\n\n<div id=\"adminPanel\" class=\"admin-panel\">\n    <div class=\"panel-header\">\n        <h1>\ud83d\udcca Share Trading &#038; Certificate Manager<\/h1>\n        <button id=\"logoutBtn\" class=\"btn\" style=\"background:transparent; border:1px solid white;\">Logout<\/button>\n    <\/div>\n    <div class=\"main-content\">\n        <div class=\"form-section\">\n            <h3>\u2795 Buy \/ Sell Shares<\/h3>\n            <div class=\"form-group\">\n                <label>\ud83d\udc64 Shareholder (select or add new)<\/label>\n                <select id=\"existingShareholderSelect\">\n                    <option value=\"\">&#8212; Select Shareholder &#8212;<\/option>\n                <\/select>\n                <button type=\"button\" id=\"clearFormBtn\" class=\"btn btn-outline\" style=\"margin-top:5px;\">Clear \/ New<\/button>\n            <\/div>\n            <div class=\"form-group\"><label>Full Name *<\/label><input type=\"text\" id=\"holderName\" placeholder=\"Full legal name\"><\/div>\n            <div class=\"form-group\"><label>Address<\/label><input type=\"text\" id=\"holderAddress\" placeholder=\"Street, City, Country\"><\/div>\n            <div class=\"form-group\"><label>Phone \/ Contact<\/label><input type=\"text\" id=\"holderPhone\" placeholder=\"Phone with code\"><\/div>\n            <div class=\"form-group\"><label>Transaction Date<\/label><input type=\"date\" id=\"transDate\" value=\"2026-04-03\"><\/div>\n            <div class=\"form-group\"><label>Share Class<\/label>\n                <select id=\"shareClass\">\n                    <option value=\"C\">Class C ($30\/share)<\/option>\n                    <option value=\"B\">Class B ($50\/share)<\/option>\n                <\/select>\n            <\/div>\n            <div class=\"form-group\"><label>Transaction Type<\/label>\n                <select id=\"transType\">\n                    <option value=\"BUY\">BUY shares<\/option>\n                    <option value=\"SELL\">SELL shares<\/option>\n                <\/select>\n            <\/div>\n            <div class=\"form-group\"><label>Quantity<\/label><input type=\"number\" id=\"quantity\" placeholder=\"Number of shares\" min=\"1\"><\/div>\n            <div class=\"form-group\"><label>Total Amount (USD)<\/label><input type=\"text\" id=\"totalAmount\" readonly style=\"background:#f0f0f0;\"><\/div>\n            <div class=\"btn-group\">\n                <button id=\"executeTransactionBtn\" class=\"btn\">\ud83d\udcb8 Execute Buy\/Sell<\/button>\n                <button id=\"exportExcelBtn\" class=\"btn btn-secondary\">\ud83d\udcce Export All Transactions<\/button>\n            <\/div>\n            <button id=\"downloadCertBtn\" class=\"btn\" style=\"margin-top:1rem;\">\ud83d\uddbc\ufe0f Download Share Certificate (PNG)<\/button>\n        <\/div>\n        <div class=\"preview-section\">\n            <h3>\ud83d\udcdc Share Certificate Preview<\/h3>\n            <div id=\"certificatePreview\" class=\"certificate-card\"><\/div>\n        <\/div>\n    <\/div>\n    <div style=\"padding: 0 1rem 1rem 1rem;\">\n        <div class=\"contrib-list-section\">\n            <h3>\ud83d\udccb Shareholders &#038; Holdings (Class C \/ Class B)<\/h3>\n            <div id=\"holdingsByYear\"><\/div>\n            <h3 style=\"margin-top: 1.5rem;\">\ud83d\udd04 Recent Transactions<\/h3>\n            <div id=\"transactionsList\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>\n    \/\/ ==================== DATA MODELS ====================\n    let shareholders = [];      \/\/ { id, name, address, phone, sharesC, sharesB }\n    let transactions = [];      \/\/ { id, shareholderId, date, shareClass, type, quantity, pricePerShare, totalAmount, certNumber }\n    let certificateCounters = {};\n\n    \/\/ Helper: load\/save localStorage\n    function saveAllData() {\n        localStorage.setItem('cashchat_shareholders', JSON.stringify(shareholders));\n        localStorage.setItem('cashchat_transactions', JSON.stringify(transactions));\n        localStorage.setItem('cashchat_certCounters', JSON.stringify(certificateCounters));\n    }\n\n    function loadAllData() {\n        const storedSH = localStorage.getItem('cashchat_shareholders');\n        const storedTX = localStorage.getItem('cashchat_transactions');\n        const storedCounters = localStorage.getItem('cashchat_certCounters');\n        if (storedSH) shareholders = JSON.parse(storedSH);\n        else initSampleData();\n        if (storedTX) transactions = JSON.parse(storedTX);\n        if (storedCounters) certificateCounters = JSON.parse(storedCounters);\n        else certificateCounters = {};\n        recalcAllCertNumbers();\n        saveAllData();\n    }\n\n    function initSampleData() {\n        shareholders = [\n            { id: 1001, name: \"Asanasio Namanya\", address: \"Plot 146 Semawata Rd, Ntinda\", phone: \"+256712345678\", sharesC: 100, sharesB: 40 },\n            { id: 1002, name: \"Peter Knox Sengendo\", address: \"Kampala\", phone: \"+46704043920\", sharesC: 50, sharesB: 10 },\n            { id: 1003, name: \"Ruth Komusana\", address: \"Entebbe\", phone: \"+256783990878\", sharesC: 20, sharesB: 5 }\n        ];\n        transactions = [\n            { id: 5001, shareholderId: 1001, date: \"2026-03-15\", shareClass: \"C\", type: \"BUY\", quantity: 100, pricePerShare: 30, totalAmount: 3000, certNumber: \"CERT-2026-001\" },\n            { id: 5002, shareholderId: 1001, date: \"2026-03-20\", shareClass: \"B\", type: \"BUY\", quantity: 40, pricePerShare: 50, totalAmount: 2000, certNumber: \"CERT-2026-002\" },\n            { id: 5003, shareholderId: 1002, date: \"2026-03-22\", shareClass: \"C\", type: \"BUY\", quantity: 50, pricePerShare: 30, totalAmount: 1500, certNumber: \"CERT-2026-003\" }\n        ];\n    }\n\n    function recalcAllCertNumbers() {\n        const sorted = [...transactions].sort((a,b)=>new Date(a.date)-new Date(b.date));\n        const yearMap = {};\n        sorted.forEach(tx => {\n            const year = new Date(tx.date).getFullYear();\n            if (!yearMap[year]) yearMap[year] = 0;\n            yearMap[year]++;\n            const seq = String(yearMap[year]).padStart(3,'0');\n            tx.certNumber = `CASH-${year}-${seq}`;\n        });\n        for(let y in yearMap) certificateCounters[y] = yearMap[y];\n        saveAllData();\n    }\n\n    function getNextCertNumber(dateStr) {\n        const year = new Date(dateStr).getFullYear();\n        const existing = transactions.filter(t => new Date(t.date).getFullYear() == year).length;\n        const seq = String(existing + 1).padStart(3,'0');\n        return `CASH-${year}-${seq}`;\n    }\n\n    \/\/ update shareholder holdings based on all transactions\n    function rebuildHoldings() {\n        shareholders.forEach(sh => { sh.sharesC = 0; sh.sharesB = 0; });\n        transactions.forEach(tx => {\n            const sh = shareholders.find(s => s.id == tx.shareholderId);\n            if (!sh) return;\n            const delta = (tx.type === \"BUY\") ? tx.quantity : -tx.quantity;\n            if (tx.shareClass === \"C\") sh.sharesC += delta;\n            else sh.sharesB += delta;\n        });\n        shareholders.forEach(sh => { if(sh.sharesC<0) sh.sharesC=0; if(sh.sharesB<0) sh.sharesB=0; });\n        saveAllData();\n    }\n\n    function getSharePrice(shareClass) { return shareClass === \"C\" ? 30 : 50; }\n\n    function renderHoldingsAndTransactions() {\n        const holdingsDiv = document.getElementById(\"holdingsByYear\");\n        const transDiv = document.getElementById(\"transactionsList\");\n        if(!holdingsDiv) return;\n        let html = `<table class=\"contrib-table\"><thead><tr><th>Shareholder<\/th><th>Class C shares<\/th><th>Class B shares<\/th><th>Phone<\/th><th>Address<\/th><\/tr><\/thead><tbody>`;\n        shareholders.forEach(sh => {\n            html += `<tr><td>${escapeHtml(sh.name)}<\/td><td>${sh.sharesC}<\/td><td>${sh.sharesB}<\/td><td>${escapeHtml(sh.phone)}<\/td><td>${escapeHtml(sh.address)}<\/td><\/tr>`;\n        });\n        html += `<\/tbody><\/table>`;\n        holdingsDiv.innerHTML = html;\n\n        let transHtml = `<table class=\"contrib-table\"><thead><tr><th>Date<\/th><th>Shareholder<\/th><th>Class<\/th><th>Type<\/th><th>Qty<\/th><th>Price<\/th><th>Total<\/th><th>Certificate#<\/th><\/tr><\/thead><tbody>`;\n        [...transactions].sort((a,b)=>new Date(b.date)-new Date(a.date)).forEach(tx => {\n            const sh = shareholders.find(s=>s.id == tx.shareholderId);\n            const shName = sh ? sh.name : \"Unknown\";\n            transHtml += `<tr><td>${tx.date}<\/td><td>${escapeHtml(shName)}<\/td><td>${tx.shareClass}<\/td><td style=\"color:${tx.type==='BUY'?'green':'red'}\">${tx.type}<\/td><td>${tx.quantity}<\/td><td>$${tx.pricePerShare}<\/td><td>$${tx.totalAmount}<\/td><td>${tx.certNumber || ''}<\/td><\/tr>`;\n        });\n        transHtml += `<\/tbody><\/table>`;\n        transDiv.innerHTML = transHtml;\n        const select = document.getElementById(\"existingShareholderSelect\");\n        if(select) {\n            const selectedId = window.currentShareholderId || \"\";\n            select.innerHTML = '<option value=\"\">-- New Shareholder --<\/option>';\n            shareholders.forEach(sh => {\n                const opt = document.createElement(\"option\");\n                opt.value = sh.id;\n                opt.textContent = `${sh.name} (C:${sh.sharesC} B:${sh.sharesB})`;\n                select.appendChild(opt);\n            });\n            if(selectedId) select.value = selectedId;\n            else select.value = \"\";\n        }\n    }\n\n    function updateTicker() {\n        const tickerDiv = document.getElementById(\"globalTicker\");\n        if(!tickerDiv) return;\n        const recent = [...transactions].sort((a,b)=>new Date(b.date)-new Date(a.date)).slice(0,12);\n        tickerDiv.innerHTML = '';\n        recent.forEach(tx => {\n            const sh = shareholders.find(s=>s.id==tx.shareholderId);\n            const span = document.createElement('span');\n            span.className = `ticker-item ${tx.type === 'SELL' ? 'sell' : ''}`;\n            span.textContent = `${sh?.name || 'User'} ${tx.type} ${tx.quantity} Class ${tx.shareClass} shares @ $${tx.pricePerShare} (${tx.date})`;\n            tickerDiv.appendChild(span);\n        });\n        const parent = tickerDiv.parentNode;\n        const oldClone = parent.querySelector('.clone');\n        if(oldClone) oldClone.remove();\n        const clone = tickerDiv.cloneNode(true);\n        clone.classList.add('clone');\n        parent.appendChild(clone);\n        const width = tickerDiv.scrollWidth;\n        const duration = Math.max(40, width \/ 35);\n        const keyframes = `@keyframes scrollTicker { 0% { transform: translateX(0); } 100% { transform: translateX(-${width}px); } }`;\n        let style = document.getElementById('tickerAnim');\n        if (!style) { style = document.createElement('style'); style.id = 'tickerAnim'; document.head.appendChild(style); }\n        style.textContent = keyframes;\n        tickerDiv.style.animation = `scrollTicker ${duration}s linear infinite`;\n        clone.style.animation = `scrollTicker ${duration}s linear infinite`;\n    }\n\n    function updateCertificatePreview() {\n        const name = document.getElementById(\"holderName\").value.trim() || \"[Shareholder Name]\";\n        const address = document.getElementById(\"holderAddress\").value || \"\";\n        const phone = document.getElementById(\"holderPhone\").value || \"\";\n        const date = document.getElementById(\"transDate\").value || new Date().toISOString().slice(0,10);\n        const shareClass = document.getElementById(\"shareClass\").value;\n        const quantity = parseInt(document.getElementById(\"quantity\").value) || 0;\n        const transType = document.getElementById(\"transType\").value;\n        const price = getSharePrice(shareClass);\n        const total = quantity * price;\n        document.getElementById(\"totalAmount\").value = total.toFixed(2);\n        const certNumberPreview = (document.getElementById(\"existingShareholderSelect\").value && window.currentCertNum) ? window.currentCertNum : getNextCertNumber(date);\n        const previewDiv = document.getElementById(\"certificatePreview\");\n        const shareTypeLabel = shareClass === \"C\" ? \"Class C Ordinary Shares\" : \"Class B Preferred Shares\";\n        previewDiv.innerHTML = `\n            <div class=\"certificate-header\">\n                <div class=\"logo-star\"><img decoding=\"async\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='%2341009A'%3E%3Cpath d='M12 2l2.8 6.2L22 8.9l-4.5 4.8 1.2 7.3L12 17.5 5.3 21l1.2-7.3L2 8.9l7.2-1L12 2z'\/%3E%3C\/svg%3E\" alt=\"Logo\"><\/div>\n                <div class=\"company-name\">CASH CHAT LIMITED<\/div>\n                <div class=\"foundation-tagline\">Community Fintech & Digital Advertising<\/div>\n                <div style=\"font-size: 0.7rem;\">Plot 146 Semawata Road, Ntinda, Kampala, Uganda<\/div>\n                <div style=\"font-size: 0.7rem;\">Email: shares@cashchat.africa<\/div>\n            <\/div>\n            <div class=\"cert-title\"><h2>SHARE CERTIFICATE<\/h2><\/div>\n            <p style=\"margin-bottom: 0.6rem;\">This certifies that the following shareholder is the registered owner of the shares indicated, subject to the Memorandum and Articles of Cash Chat Limited.<\/p>\n            <div class=\"donor-box\">\n                <div class=\"donor-line\"><strong>Shareholder Name:<\/strong> ${escapeHtml(name)}<\/div>\n                <div class=\"donor-line\"><strong>Address:<\/strong> ${escapeHtml(address)}<\/div>\n                <div class=\"donor-line\"><strong>Contact:<\/strong> ${escapeHtml(phone)}<\/div>\n                <div class=\"donor-line\"><strong>Certificate Date:<\/strong> ${date}<\/div>\n                <div class=\"donor-line\"><strong>Share Class:<\/strong> ${shareTypeLabel}<\/div>\n                <div class=\"donor-line\"><strong>Number of Shares:<\/strong> ${quantity}<\/div>\n                <div class=\"donor-line\"><strong>Price per Share:<\/strong> $${price}<\/div>\n                <div class=\"donor-line\"><strong>Total Paid-Up Capital:<\/strong> $${total.toFixed(2)}<\/div>\n                <div class=\"donor-line\"><strong>Certificate No.:<\/strong> ${certNumberPreview}<\/div>\n                <div class=\"donor-line\"><strong>Transaction:<\/strong> ${transType}<\/div>\n            <\/div>\n            <div class=\"signature-area\">\n                <div class=\"sign-line\">\n                    <div class=\"verified-text\">authorized<\/div>\n                    <div>_______________________________<\/div>\n                    <div><strong>Asanasio Namanya<\/strong><\/div>\n                    <div>Chief Executive Officer<\/div>\n                <\/div>\n                <div class=\"sign-line\">\n                    <div class=\"stamp-seal\">EQUITY<\/div>\n                    <div>Company Seal<\/div>\n                <\/div>\n            <\/div>\n            <div class=\"footer-note\">\n                Cash Chat Limited \u2013 Registered in Uganda | Shareholders have 35% ownership of total 600,000 exchangeable shares.<br>\n                Dividends paid directly to CashChat wallet. This certificate is evidence of shareholding.\n            <\/div>\n        `;\n    }\n\n    function executeTransaction() { \/* same logic, full functional *\/ \n        const name = document.getElementById(\"holderName\").value.trim();\n        const address = document.getElementById(\"holderAddress\").value.trim();\n        const phone = document.getElementById(\"holderPhone\").value.trim();\n        const date = document.getElementById(\"transDate\").value;\n        const shareClass = document.getElementById(\"shareClass\").value;\n        const transType = document.getElementById(\"transType\").value;\n        const quantity = parseInt(document.getElementById(\"quantity\").value);\n        if(!name || isNaN(quantity) || quantity <=0) { alert(\"Enter valid name and quantity\"); return; }\n        let shareholder = shareholders.find(s => s.name.toLowerCase() === name.toLowerCase());\n        if(!shareholder) {\n            const newId = Date.now();\n            shareholder = { id: newId, name, address, phone, sharesC: 0, sharesB: 0 };\n            shareholders.push(shareholder);\n        } else {\n            shareholder.address = address || shareholder.address;\n            shareholder.phone = phone || shareholder.phone;\n        }\n        const price = getSharePrice(shareClass);\n        const total = quantity * price;\n        const currentShares = (shareClass === \"C\") ? (shareholder.sharesC||0) : (shareholder.sharesB||0);\n        if(transType === \"SELL\" && quantity > currentShares) { alert(`Cannot sell ${quantity} shares. Available: ${currentShares}`); return; }\n        const certNumber = getNextCertNumber(date);\n        const newTrans = { id: Date.now(), shareholderId: shareholder.id, date, shareClass, type: transType, quantity, pricePerShare: price, totalAmount: total, certNumber };\n        transactions.push(newTrans);\n        rebuildHoldings();\n        saveAllData();\n        renderHoldingsAndTransactions();\n        updateTicker();\n        updateCertificatePreview();\n        alert(`${transType} of ${quantity} Class ${shareClass} shares executed. Certificate: ${certNumber}`);\n        document.getElementById(\"holderName\").value = \"\"; document.getElementById(\"holderAddress\").value = \"\"; document.getElementById(\"holderPhone\").value = \"\";\n        document.getElementById(\"quantity\").value = \"\"; document.getElementById(\"totalAmount\").value = \"\";\n        document.getElementById(\"existingShareholderSelect\").value = \"\";\n        window.currentShareholderId = null;\n        updateCertificatePreview();\n    }\n    function downloadCertificate() { \/* unchanged but works *\/ const preview = document.getElementById(\"certificatePreview\"); if(!preview) return; const clone = preview.cloneNode(true); clone.style.width = \"794px\"; clone.style.position = \"absolute\"; clone.style.left = \"-9999px\"; clone.style.top = \"0\"; document.body.appendChild(clone); html2canvas(clone, { scale: 2, backgroundColor: \"#fffef7\" }).then(canvas => { const link = document.createElement(\"a\"); link.download = `share_cert_${Date.now()}.png`; link.href = canvas.toDataURL(\"image\/png\"); link.click(); document.body.removeChild(clone); }).catch(() => { alert(\"Error generating certificate\"); document.body.removeChild(clone); }); }\n    function loadShareholderFromDropdown() { const sel = document.getElementById(\"existingShareholderSelect\"); const id = parseInt(sel.value); if(id) { const sh = shareholders.find(s => s.id === id); if(sh) { document.getElementById(\"holderName\").value = sh.name; document.getElementById(\"holderAddress\").value = sh.address || \"\"; document.getElementById(\"holderPhone\").value = sh.phone || \"\"; window.currentShareholderId = id; } } else { document.getElementById(\"holderName\").value = \"\"; document.getElementById(\"holderAddress\").value = \"\"; document.getElementById(\"holderPhone\").value = \"\"; window.currentShareholderId = null; } updateCertificatePreview(); }\n    function exportToExcel() { const wsData = transactions.map(t => { const sh = shareholders.find(s=>s.id==t.shareholderId); return { Date: t.date, Shareholder: sh?.name, Class: t.shareClass, Type: t.type, Quantity: t.quantity, Price: t.pricePerShare, TotalUSD: t.totalAmount, Certificate: t.certNumber }; }); const ws = XLSX.utils.json_to_sheet(wsData); const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, \"ShareTransactions\"); XLSX.writeFile(wb, `CashChat_Transactions_${new Date().toISOString().slice(0,10)}.xlsx`); }\n    function clearForm() { document.getElementById(\"holderName\").value = \"\"; document.getElementById(\"holderAddress\").value = \"\"; document.getElementById(\"holderPhone\").value = \"\"; document.getElementById(\"quantity\").value = \"\"; document.getElementById(\"totalAmount\").value = \"\"; document.getElementById(\"existingShareholderSelect\").value = \"\"; window.currentShareholderId = null; updateCertificatePreview(); }\n    function bindEvents() { document.getElementById(\"executeTransactionBtn\").onclick = executeTransaction; document.getElementById(\"exportExcelBtn\").onclick = exportToExcel; document.getElementById(\"downloadCertBtn\").onclick = downloadCertificate; document.getElementById(\"clearFormBtn\").onclick = clearForm; document.getElementById(\"existingShareholderSelect\").onchange = loadShareholderFromDropdown; document.getElementById(\"shareClass\").onchange = updateCertificatePreview; document.getElementById(\"transType\").onchange = updateCertificatePreview; document.getElementById(\"quantity\").oninput = updateCertificatePreview; document.getElementById(\"holderName\").oninput = updateCertificatePreview; document.getElementById(\"holderAddress\").oninput = updateCertificatePreview; document.getElementById(\"holderPhone\").oninput = updateCertificatePreview; document.getElementById(\"transDate\").onchange = updateCertificatePreview; updateCertificatePreview(); renderHoldingsAndTransactions(); updateTicker(); }\n    function escapeHtml(str) { if(!str) return ''; return str.replace(\/[&<>]\/g, function(m){ if(m === '&') return '&amp;'; if(m === '<') return '&lt;'; if(m === '>') return '&gt;'; return m;}); }\n\n    \/\/ LOGIN - NO HINTS, credentials hidden in logic (no visible hint)\n    document.getElementById(\"loginBtn\").addEventListener(\"click\", () => {\n        const email = document.getElementById(\"loginEmail\").value.trim();\n        const pwd = document.getElementById(\"loginPassword\").value;\n        \/\/ secure check without revealing any default credentials on UI\n        if ((email === \"info@cashchat.se\" || email === \"admin.internal@cashchat.com\") && pwd === \"Sh@reH0lder2026!\") {\n            document.getElementById(\"loginScreen\").style.display = \"none\";\n            document.getElementById(\"adminPanel\").style.display = \"block\";\n            loadAllData();\n            bindEvents();\n        } else {\n            document.getElementById(\"loginError\").innerText = \"Invalid email or password.\";\n        }\n    });\n    document.getElementById(\"logoutBtn\").addEventListener(\"click\", () => { document.getElementById(\"adminPanel\").style.display = \"none\"; document.getElementById(\"loginScreen\").style.display = \"block\"; });\n    document.getElementById(\"adminBtn\").addEventListener(\"click\", () => { document.getElementById(\"loginScreen\").style.display = \"block\"; document.getElementById(\"adminPanel\").style.display = \"none\"; });\n    loadAllData();\n    updateTicker();\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Cash Chat Limited \u2013 Shareholder Hub CC Cash Chat Limited Fintech \u00b7 Digital Ads \u00b7 Flicks Social Home Shares Flicks Equity \ud83d\udd10 Admin \u2705 Get Verified Dashboard \ud83d\udcc8 Access Shares \ud83c\udfe2 Corporate Office Plot 146 Semawata Road, Ntinda, Kampala, Uganda \ud83d\udcde +256 775 036603 \u2709\ufe0f info@cashchat.se \ud83d\udcc8 Share Classes Class C Shares \u2013 $30.00 per [&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-32","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages\/32","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=32"}],"version-history":[{"count":19,"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages\/32\/revisions"}],"predecessor-version":[{"id":75,"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages\/32\/revisions\/75"}],"wp:attachment":[{"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/media?parent=32"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}