← Back
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Congratulations!</title>
<style>
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;background:#0a0e27;color:#fff;min-height:100vh;display:flex;flex-direction:column;align-items:center;overflow-x:hidden}
.top-bar{width:100%;background:linear-gradient(90deg,#ff6b35,#f7c948);padding:8px;text-align:center;font-weight:700;font-size:13px;color:#000;letter-spacing:.5px}
.top-bar span{animation:pulse 1.5s infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.6}}
.container{max-width:420px;width:100%;padding:16px;text-align:center}
h1{font-size:22px;margin:16px 0 4px;background:linear-gradient(135deg,#f7c948,#ff6b35);-webkit-background-clip:text;-webkit-text-fill-color:transparent}
.subtitle{font-size:14px;color:#8b92b0;margin-bottom:16px}
.wheel-wrap{position:relative;width:300px;height:300px;margin:0 auto 20px}
.wheel-pointer{position:absolute;top:-12px;left:50%;transform:translateX(-50%);z-index:10;width:0;height:0;border-left:14px solid transparent;border-right:14px solid transparent;border-top:28px solid #ff6b35;filter:drop-shadow(0 2px 6px rgba(255,107,53,.6))}
canvas{width:300px;height:300px;border-radius:50%;box-shadow:0 0 30px rgba(247,201,72,.3),0 0 60px rgba(255,107,53,.15)}
.spin-btn{margin-top:16px;padding:14px 48px;font-size:18px;font-weight:700;color:#000;background:linear-gradient(135deg,#f7c948,#ff6b35);border:none;border-radius:50px;cursor:pointer;box-shadow:0 4px 20px rgba(255,107,53,.4);transition:transform .15s;text-transform:uppercase;letter-spacing:1px}
.spin-btn:active{transform:scale(.96)}
.spin-btn:disabled{opacity:.6;cursor:not-allowed}
.spin-btn.glow{animation:btnGlow 1.2s infinite alternate}
@keyframes btnGlow{0%{box-shadow:0 4px 20px rgba(255,107,53,.4)}100%{box-shadow:0 4px 35px rgba(255,107,53,.8),0 0 50px rgba(247,201,72,.3)}}
.result-overlay{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.85);z-index:100;justify-content:center;align-items:center}
.result-box{background:linear-gradient(145deg,#1a1f3d,#0f1229);border:2px solid #f7c948;border-radius:20px;padding:32px 24px;max-width:360px;width:90%;text-align:center;animation:popIn .4s ease}
@keyframes popIn{0%{transform:scale(.7);opacity:0}100%{transform:scale(1);opacity:1}}
.result-box .prize-icon{font-size:56px;margin-bottom:12px}
.result-box h2{font-size:22px;color:#f7c948;margin-bottom:8px}
.result-box p{font-size:14px;color:#8b92b0;margin-bottom:20px;line-height:1.5}
.claim-btn{display:inline-block;padding:14px 40px;font-size:16px;font-weight:700;color:#000;background:linear-gradient(135deg,#f7c948,#ff6b35);border:none;border-radius:50px;cursor:pointer;text-decoration:none;text-transform:uppercase;letter-spacing:1px;animation:btnGlow 1.2s infinite alternate}
.trust{display:flex;justify-content:center;gap:16px;margin-top:20px;font-size:11px;color:#555}
.trust span::before{content:"";display:inline-block;width:6px;height:6px;background:#22c55e;border-radius:50%;margin-right:4px;vertical-align:middle}
.remaining{background:rgba(255,107,53,.12);border:1px solid rgba(255,107,53,.3);border-radius:10px;padding:8px 16px;margin-bottom:12px;font-size:13px;color:#ff6b35}
.remaining strong{color:#f7c948}
.timer{font-size:12px;color:#ff6b35;margin-top:8px}
</style>
</head>
<body>

<div class="top-bar"><span>SPECIAL PROMOTION - Limited Time Only!</span></div>

<div class="container">
  <h1>You Have Been Selected!</h1>
  <p class="subtitle">Spin the wheel to claim your exclusive reward</p>

  <div class="remaining">Only <strong id="remaining">3</strong> prizes left in your area!</div>

  <div class="wheel-wrap">
    <div class="wheel-pointer"></div>
    <canvas id="wheel" width="600" height="600"></canvas>
  </div>

  <button class="spin-btn glow" id="spinBtn" onclick="spinWheel()">SPIN NOW</button>
  <p class="timer" id="timer">Offer expires in <strong>4:59</strong></p>

  <div class="trust">
    <span>Verified</span>
    <span>Secure</span>
    <span>Free</span>
  </div>
</div>

<div class="result-overlay" id="resultOverlay">
  <div class="result-box">
    <div class="prize-icon" id="prizeIcon"></div>
    <h2 id="prizeTitle"></h2>
    <p id="prizeDesc"></p>
    <a class="claim-btn" id="claimBtn" href="#">CLAIM NOW</a>
  </div>
</div>

<script>
(function(){
  // === CONFIG ===
  // Replace with your BeMob campaign URL
  var params=new URLSearchParams(window.location.search);var bd=params.get('bemobdata');var OFFER_URL=bd?'https://27zff.bemobtrcks.com/click?bemobdata='+encodeURIComponent(bd):'{{OFFER_URL}}';

  // Pass-through URL params (from BeMob/PopAds)
  var params = new URLSearchParams(window.location.search);
  if (OFFER_URL.indexOf('?') === -1) OFFER_URL += '?';
  params.forEach(function(v,k){ OFFER_URL += '&' + k + '=' + encodeURIComponent(v); });

  var prizes = [
    { label: 'iPhone 16', color: '#ff6b35', icon: '\uD83D\uDCF1', weight: 35 },
    { label: 'Try Again', color: '#1a1f3d', icon: '\u274C', weight: 5 },
    { label: 'Samsung S25', color: '#f7c948', icon: '\uD83D\uDCF1', weight: 25 },
    { label: '$500 Gift', color: '#22c55e', icon: '\uD83C\uDF81', weight: 10 },
    { label: 'AirPods Pro', color: '#3b82f6', icon: '\uD83C\uDFA7', weight: 15 },
    { label: 'Try Again', color: '#1a1f3d', icon: '\u274C', weight: 5 },
    { label: '$200 Cash', color: '#a855f7', icon: '\uD83D\uDCB0', weight: 3 },
    { label: 'Smart Watch', color: '#ec4899', icon: '\u231A', weight: 2 }
  ];

  // Always land on a "win" segment (not "Try Again")
  var winSegments = [];
  prizes.forEach(function(p,i){ if(p.label !== 'Try Again') winSegments.push(i); });

  var canvas = document.getElementById('wheel');
  var ctx = canvas.getContext('2d');
  var segments = prizes.length;
  var arc = (2 * Math.PI) / segments;
  var currentAngle = 0;
  var spinning = false;

  function drawWheel(angle) {
    ctx.clearRect(0,0,600,600);
    for (var i = 0; i < segments; i++) {
      var startAngle = angle + i * arc;
      ctx.beginPath();
      ctx.arc(300,300,290,startAngle,startAngle+arc);
      ctx.lineTo(300,300);
      ctx.fillStyle = prizes[i].color;
      ctx.fill();
      ctx.strokeStyle = 'rgba(255,255,255,0.15)';
      ctx.lineWidth = 2;
      ctx.stroke();

      ctx.save();
      ctx.translate(300,300);
      ctx.rotate(startAngle + arc/2);
      ctx.fillStyle = '#fff';
      ctx.font = 'bold 24px sans-serif';
      ctx.textAlign = 'center';
      ctx.fillText(prizes[i].icon, 180, 4);
      ctx.font = 'bold 16px sans-serif';
      ctx.fillText(prizes[i].label, 130, 4);
      ctx.restore();
    }
    // center circle
    ctx.beginPath();
    ctx.arc(300,300,40,0,2*Math.PI);
    ctx.fillStyle = '#0a0e27';
    ctx.fill();
    ctx.strokeStyle = '#f7c948';
    ctx.lineWidth = 3;
    ctx.stroke();
  }

  drawWheel(0);

  window.spinWheel = function() {
    if (spinning) return;
    spinning = true;
    var btn = document.getElementById('spinBtn');
    btn.disabled = true;
    btn.classList.remove('glow');
    btn.textContent = 'SPINNING...';

    // Pick winning segment
    var winIdx = winSegments[Math.floor(Math.random() * winSegments.length)];

    // Calculate target angle: pointer is at top (270deg / 3PI/2)
    // Segment center at: winIdx * arc + arc/2
    // We need: -(winIdx * arc + arc/2) + 3*PI/2 + random full rotations
    var fullRotations = 5 + Math.floor(Math.random() * 3);
    var targetAngle = (fullRotations * 2 * Math.PI) + (3 * Math.PI / 2) - (winIdx * arc + arc / 2);

    var startTime = null;
    var duration = 4000 + Math.random() * 1000;
    var startAngle = currentAngle;

    function easeOut(t) {
      return 1 - Math.pow(1 - t, 3);
    }

    function animate(ts) {
      if (!startTime) startTime = ts;
      var elapsed = ts - startTime;
      var progress = Math.min(elapsed / duration, 1);
      var easedProgress = easeOut(progress);

      currentAngle = startAngle + (targetAngle - startAngle) * easedProgress;
      drawWheel(currentAngle);

      if (progress < 1) {
        requestAnimationFrame(animate);
      } else {
        spinning = false;
        showResult(prizes[winIdx]);
      }
    }
    requestAnimationFrame(animate);
  };

  function showResult(prize) {
    document.getElementById('prizeIcon').textContent = prize.icon;
    document.getElementById('prizeTitle').textContent = 'You Won ' + prize.label + '!';
    document.getElementById('prizeDesc').textContent = 'Tap the button below to claim your ' + prize.label + '. Complete a quick verification to confirm delivery.';
    document.getElementById('claimBtn').href = OFFER_URL;
    var overlay = document.getElementById('resultOverlay');
    overlay.style.display = 'flex';
  }

  // Countdown timer
  var timeLeft = 299;
  setInterval(function(){
    if(timeLeft <= 0) return;
    timeLeft--;
    var m = Math.floor(timeLeft/60);
    var s = timeLeft%60;
    document.getElementById('timer').innerHTML = 'Offer expires in <strong>' + m + ':' + (s<10?'0':'') + s + '</strong>';
  }, 1000);

  // Fake remaining count
  setTimeout(function(){
    document.getElementById('remaining').textContent = '2';
    setTimeout(function(){ document.getElementById('remaining').textContent = '1'; }, 30000);
  }, 15000);

})();
</script>
</body>
</html>

📜 Git History

71dd65fchore: initial commit — version control setup5 weeks ago
Show last diff
Loading...