added on local at 2026-07-01 13:47:47
| 1 | <div class="page-head"> | |
| 2 | <div> | |
| 3 | <span class="page-eyebrow"><span class="dot"></span> Merchant broadcasts</span> | |
| 4 | <h1 class="page-title">Announcements</h1> | |
| 5 | <p class="page-subtitle">Send a heads-up to every approved affiliate in one of your programs. Real-time push + optional email blast.</p> | |
| 6 | </div> | |
| 7 | </div> | |
| 8 | ||
| 9 | <style> | |
| 10 | .ann-compose, .ann-history { background:#1a1f2a; border:1px solid rgba(255,255,255,.08); border-radius:12px; padding:20px; margin-bottom:18px; } | |
| 11 | .ann-compose label { display:block; font-size:12px; color:#889; margin-top:12px; margin-bottom:4px; } | |
| 12 | .ann-compose input[type=text], .ann-compose textarea, .ann-compose select { | |
| 13 | width:100%; background:#0e131c; color:#fff; border:1px solid rgba(255,255,255,.10); | |
| 14 | border-radius:8px; padding:10px; font-family:inherit; font-size:14px; | |
| 15 | } | |
| 16 | .ann-compose .row { display:flex; gap:14px; align-items:flex-end; margin-top:12px; flex-wrap:wrap; } | |
| 17 | .ann-compose .check { display:flex; gap:8px; align-items:center; font-size:13px; color:#cdd; } | |
| 18 | .ann-compose button { background:#5aa9ff; color:#fff; border:none; padding:10px 20px; border-radius:8px; font-weight:600; cursor:pointer; } | |
| 19 | .ann-table { width:100%; border-collapse:collapse; font-size:13px; } | |
| 20 | .ann-table th { text-align:left; padding:10px; border-bottom:1px solid rgba(255,255,255,.10); font-size:11px; font-weight:600; color:#889; text-transform:uppercase; letter-spacing:.04em; } | |
| 21 | .ann-table td { padding:10px; border-bottom:1px solid rgba(255,255,255,.06); color:#cdd; vertical-align:top; } | |
| 22 | .btn-danger-sm { background:#7f1d1d; color:#fff; border:none; padding:4px 10px; border-radius:4px; font-size:11px; cursor:pointer; } | |
| 23 | </style> | |
| 24 | ||
| 25 | <div class="ann-compose"> | |
| 26 | <h3 style="margin:0 0 4px;color:#fff">New broadcast</h3> | |
| 27 | <p style="margin:0 0 10px;font-size:12px;color:#889">Reaches every approved affiliate of the selected program. Web Push fires instantly; email blast (if checked) queues per-recipient.</p> | |
| 28 | <form action="/merchant_announcement_action.cgi" method="POST"> | |
| 29 | <input type="hidden" name="action" value="create"> | |
| 30 | <label>Program</label> | |
| 31 | <select name="program_id" required>$prog_opts</select> | |
| 32 | <label>Title</label> | |
| 33 | <input type="text" name="title" maxlength="200" required> | |
| 34 | <label>Body</label> | |
| 35 | <textarea name="body" rows="6" required placeholder="Hi affiliates..."></textarea> | |
| 36 | <div class="row"> | |
| 37 | <label class="check"><input type="checkbox" name="send_email" value="1"> Also send email blast (opt-in)</label> | |
| 38 | </div> | |
| 39 | <div class="row"> | |
| 40 | <button type="submit">Publish</button> | |
| 41 | </div> | |
| 42 | </form> | |
| 43 | </div> | |
| 44 | ||
| 45 | <div class="ann-history"> | |
| 46 | <h3 style="margin:0 0 10px;color:#fff">History</h3> | |
| 47 | <table class="ann-table"> | |
| 48 | <thead><tr><th>Published</th><th>Title</th><th>Program</th><th>Email blast</th><th>Reads</th><th></th></tr></thead> | |
| 49 | <tbody>$rows_html</tbody> | |
| 50 | </table> | |
| 51 | </div> |