diff --git a/public/assets/my.js b/public/assets/my.js
index 6f51266..8b8b755 100644
--- a/public/assets/my.js
+++ b/public/assets/my.js
@@ -953,6 +953,33 @@
const sw = $('promoSwipeWrap');
sw.innerHTML = '';
sw.appendChild(promoBlock('Subject: ' + PROMO_SWIPE.subject + '\n\n' + PROMO_SWIPE.body.replace('{{LINK}}', link)));
+ // banner kit
+ const bwrap = $('promoBanners');
+ if (bwrap && !bwrap.dataset.filled) {
+ bwrap.dataset.filled = '1';
+ const BANNERS = [
+ { file: 'iap-hero-1200x630.png', size: '1200×630 (social / hero)' },
+ { file: 'iap-728x90.png', size: '728×90 (leaderboard)' },
+ { file: 'iap-300x250.png', size: '300×250 (rectangle)' }
+ ];
+ bwrap.innerHTML = '';
+ for (const b of BANNERS) {
+ const url = location.origin + '/banners/' + b.file;
+ const d = document.createElement('div');
+ d.className = 'pb-item';
+ d.innerHTML = ' '
+ + '
' + b.size + '
';
+ const btn = document.createElement('button');
+ btn.className = 'btn small sec';
+ btn.textContent = 'Copy image URL';
+ btn.addEventListener('click', async () => {
+ try { await navigator.clipboard.writeText(url); IAP.status('Banner URL copied.', 'ok'); }
+ catch (e) { IAP.status('Copy failed.', 'bad'); }
+ });
+ d.querySelector('.pb-row').appendChild(btn);
+ bwrap.appendChild(d);
+ }
+ }
}
// ── profile ── (busy2 defers the busy lookup past its TDZ)
diff --git a/public/assets/site.css b/public/assets/site.css
index 84acd5e..0d1b3f0 100644
--- a/public/assets/site.css
+++ b/public/assets/site.css
@@ -259,6 +259,11 @@ textarea{resize:vertical;font:inherit}
#boBurger{display:block}
.bo-content{padding:18px}
}
+/* ── promo banners ── */
+.promo-banners{display:flex;flex-direction:column;gap:14px;margin-top:12px}
+.pb-item img{max-width:100%;border-radius:8px;border:1px solid var(--line-strong);display:block}
+.pb-item .pb-row{display:flex;gap:10px;align-items:center;margin-top:6px;flex-wrap:wrap}
+.pb-item .pb-size{font-family:var(--mono);font-size:11px;color:var(--muted)}
/* ── featured day-slot picker ── */
.feat-days{display:flex;gap:8px;flex-wrap:wrap}
.feat-day{flex:0 0 auto;min-width:82px;padding:8px 10px;border:1px solid var(--line-strong);border-radius:10px;
diff --git a/public/banners/iap-300x250.png b/public/banners/iap-300x250.png
new file mode 100644
index 0000000..ed8e3f2
Binary files /dev/null and b/public/banners/iap-300x250.png differ
diff --git a/public/banners/iap-728x90.png b/public/banners/iap-728x90.png
new file mode 100644
index 0000000..22b8127
Binary files /dev/null and b/public/banners/iap-728x90.png differ
diff --git a/public/banners/iap-hero-1200x630.png b/public/banners/iap-hero-1200x630.png
new file mode 100644
index 0000000..52d9fb6
Binary files /dev/null and b/public/banners/iap-hero-1200x630.png differ
diff --git a/public/contract.html b/public/contract.html
index c48e481..073292b 100644
--- a/public/contract.html
+++ b/public/contract.html
@@ -5,7 +5,7 @@
The contract | InstantAdPay
-
+
@@ -129,8 +129,8 @@
Advertising services with a performance referral program. Not an investment product; no income guarantees. Crypto transactions are irreversible. Never spend what you cannot afford.
-
-
-
+
+
+