diff --git a/public/assets/common.js b/public/assets/common.js
index 9dd379a..2348d5d 100644
--- a/public/assets/common.js
+++ b/public/assets/common.js
@@ -117,8 +117,9 @@ window.IAP = (function () {
const el = $(elId);
if (!ad || !el) return;
if (ad.imageUrl) {
+ el.style.textAlign = 'center';
el.innerHTML = ''
- + ' '
+ + ' '
+ '
member ad' + reportTag(ad) + '
';
} else {
el.innerHTML = '' + ad.title + ' '
diff --git a/public/assets/my.js b/public/assets/my.js
index ffd9fe7..7b38a37 100644
--- a/public/assets/my.js
+++ b/public/assets/my.js
@@ -46,6 +46,18 @@
renderOneFeatured(); // show ONE at a time (true rotation), cycle if more than one
clearInterval(featTimer);
if (featItems.length > 1) featTimer = setInterval(() => { featIdx++; renderOneFeatured(); }, 6000);
+ // self-sell: today's open slots + a CTA to feature your own link
+ try {
+ const st = await (await fetch('/api/featured/stats')).json();
+ const today = (st.occupancy || []).find(d => d.offset === 0);
+ const cta = $('featCta');
+ if (cta) {
+ cta.innerHTML = (today ? '' + today.open + ' of ' + today.cap + ' featured slots open today. ' : '')
+ + 'Feature your link → ';
+ const fb = $('featBuy');
+ if (fb) fb.addEventListener('click', e => { e.preventDefault(); setPane('campaigns'); const ct = $('cType'); if (ct) { ct.value = 'featured'; ct.dispatchEvent(new Event('change')); } });
+ }
+ } catch (e) {}
} catch (e) {}
}
@@ -376,6 +388,7 @@
if (name === 'earn') setEarnSub(earnSub); // refresh whichever sub-tab is active
if (name === 'profile') loadLineBanner();
if (name === 'line') { loadLineage(); loadUplineMessages(); }
+ if (name === 'campaigns') ['cTarget', 'cImage', 'cVideoUrl'].forEach(id => { if ($(id)) $(id).value = ''; }); // no residual URL between visits
document.getElementById('memberArea').classList.remove('side-open'); // close mobile drawer
if (location.hash !== '#' + name) history.replaceState(null, '', '#' + name);
}
diff --git a/public/assets/site.css b/public/assets/site.css
index 8b33446..bb79f41 100644
--- a/public/assets/site.css
+++ b/public/assets/site.css
@@ -274,7 +274,9 @@ textarea{resize:vertical;font:inherit}
.feat-day .fd-occ{font-family:var(--mono);font-size:11px;color:var(--muted)}
.feat-day.open2 .fd-occ{color:var(--mint)}
/* ── featured rotation strip ── */
-.feat-strip{display:flex;flex-direction:column;gap:8px;margin-top:10px}
+.feat-top{max-width:760px;margin:0 auto 16px}
+.feat-strip{display:flex;justify-content:center;margin-top:10px}
+.feat-strip a{max-width:728px;width:100%}
.feat-strip a{display:flex;justify-content:space-between;gap:10px;padding:11px 14px;border-radius:10px;
background:var(--panel);border:1px solid var(--line-strong);color:var(--ink);text-decoration:none;font-weight:600}
.feat-strip a:hover{border-color:var(--mint)}
diff --git a/public/contract.html b/public/contract.html
index 441d286..0f3bb22 100644
--- a/public/contract.html
+++ b/public/contract.html
@@ -140,7 +140,7 @@
Advertising services with a performance referral program. Not an investment product; no income guarantees. Crypto transactions are irreversible. Never spend what you cannot afford.
-
+
@@ -152,6 +152,11 @@
+
+
Featured member links in rotation
+
+
+
-
-
Featured links member links in rotation
-
-
-
+
Banner and text targets are shown full screen in the
ad viewer, so those URLs must allow framing — we check them the moment you submit. Login and
solo links open in a fresh tab, so any working page is fine.
-
+
@@ -367,7 +368,7 @@
-
+
-
+