diff --git a/public/assets/my.js b/public/assets/my.js
index 7ff05a2..1368645 100644
--- a/public/assets/my.js
+++ b/public/assets/my.js
@@ -1262,7 +1262,7 @@
const p = $('vidPlayer'); if (!p) return;
const was = !!vidState.token && !vidState.done;
try { p.pause(); p.ontimeupdate = null; p.onseeking = null; p.removeAttribute('src'); p.load(); } catch (e) {}
- vidState.token = null; vidState.done = false; vidState.credited = false; vidState.maxSeen = 0;
+ vidState.token = null; vidState.done = false; vidState.credited = false; vidState.maxSeen = 0; vidState.needsTap = false;
if ($('vidWrap')) $('vidWrap').hidden = true;
if ($('vidBox')) { $('vidBox').hidden = false; if (was) $('vidBox').innerHTML = 'Video stopped when you left the tab. Tap Load a video to start a fresh one.'; }
if ($('vidStartBtn')) { $('vidStartBtn').disabled = false; $('vidStartBtn').textContent = 'Load a video'; }
@@ -1274,10 +1274,17 @@
if (!r || !r.ad) {
// same done screen as Watch ads when the day's videos are finished (Marty, 2026-09-13)
const capHit = !!(r && r.status && r.status.left <= 0), allWatched = !!(r && r.allWatched);
- $('vidBox').innerHTML = (capHit || allWatched)
- ? '
✓Videos done for today' + (capHit ? 'That is today’s video set (' + r.status.count + ' watched). Fresh videos tomorrow.' : 'You have watched every live video for today; each one pays once a day. New ones appear as members launch video campaigns.') + '
'
- : 'No member videos are live right now. Check back when a campaign is running.';
- if ($('vidStartBtn')) $('vidStartBtn').hidden = capHit || allWatched;
+ // the tab can run dry while Shorts still has clips, and both count toward the same
+ // daily total, so say so instead of sending them away (Marty, 2026-09-22)
+ const toShorts = !capHit && r && r.otherFormat === 'shorts';
+ $('vidBox').innerHTML = toShorts
+ ? '✓That is every video on this tab'
+ + '
You have watched all ' + r.status.count + ' of today’s landscape videos. The rest are upright clips that play in Shorts, and they count toward the same daily ' + r.status.cap + '. You have ' + r.status.left + ' left.'
+ + '
Open Shorts '
+ : (capHit || allWatched)
+ ? '✓Videos done for today' + (capHit ? 'That is today’s video set (' + r.status.count + ' watched). Fresh videos tomorrow.' : 'You have watched every live video for today; each one pays once a day. New ones appear as members launch video campaigns.') + '
'
+ : 'No member videos are live right now. Check back when a campaign is running.';
+ if ($('vidStartBtn')) $('vidStartBtn').hidden = capHit || allWatched || toShorts;
$('vidBox').hidden = false;
$('vidWrap').hidden = true;
return;
@@ -1301,7 +1308,11 @@
};
$('vidStartBtn').textContent = 'Playing…';
$('vidStartBtn').disabled = true;
- try { await p.play(); } catch (e) { $('vidStartBtn').disabled = false; $('vidStartBtn').textContent = 'Tap to play'; }
+ vidState.needsTap = false;
+ // a browser that refuses to autoplay leaves the clip loaded and paused; the button then has to
+ // START it. Wired to loadVideoAd it threw the clip away and fetched another, so on a phone the
+ // video could never be played at all (Marty, 2026-09-22)
+ try { await p.play(); } catch (e) { vidState.needsTap = true; $('vidStartBtn').disabled = false; $('vidStartBtn').textContent = 'Tap to play'; }
$('vidCta').href = ad.ctaUrl;
$('vidCta').textContent = ad.ctaLabel || 'Learn more';
$('vidCta').hidden = false;
@@ -1320,7 +1331,16 @@
$('vidStartBtn').disabled = false;
$('vidStartBtn').textContent = 'Next video';
}
- $('vidStartBtn').addEventListener('click', () => loadVideoAd());
+ $('vidStartBtn').addEventListener('click', () => {
+ const p = $('vidPlayer');
+ if (vidState.needsTap && p && p.src && !vidState.done) { // a clip is loaded and waiting on a tap: start it, never replace it
+ vidState.needsTap = false;
+ $('vidStartBtn').textContent = 'Playing…'; $('vidStartBtn').disabled = true;
+ p.play().catch(() => { vidState.needsTap = true; $('vidStartBtn').disabled = false; $('vidStartBtn').textContent = 'Tap to play'; });
+ return;
+ }
+ loadVideoAd();
+ });
// presence enforcement: pause the watch-to-earn video when the tab/window loses focus,
// resume when it comes back — the viewer must stay on the page for the watch to complete
document.addEventListener('visibilitychange', () => {
diff --git a/public/my.html b/public/my.html
index 133be9d..c9e9246 100644
--- a/public/my.html
+++ b/public/my.html
@@ -1070,7 +1070,7 @@
-
+