git / moonbite-network / templates/free.html · raw

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
<meta name="theme-color" content="#0B0D12">
<!-- Honest where it is indexed and shared: the title and description give the
     joke away, so no link preview can mislead. The reveal is only a beat for
     someone already on the page, and the page never asks for anything. -->
<title>There Is No Airdrop — MoonBite</title>
<meta name="description" content="No premine, no presale, no founder allocation, no free MBITE. Every coin that exists was mined. Here is why that is the point.">
<link rel="icon" type="image/svg+xml" href="/static/moonbite-logo.svg">
<link rel="stylesheet" href="/static/fonts/moonbite-fonts.css">
<style>
/* Doc 04: three roles. A heavy grotesque for display, a quiet sans for
   reading, a monospace for anything that is a number.

   Archivo Black and Inter are self-hosted from /static/fonts (latin subset,
   OFL-licensed). They are deliberately not loaded from Google Fonts: /privacy
   states the site loads nothing that phones home, and a webfont CDN sends
   every visitor's IP to Google on every page load. Every figure that is
   money, a hash, an address or a block height is monospace with tabular
   figures — amounts that shift width as they update look untrustworthy. */
:root{
  --font-display:'Archivo Black','Helvetica Neue','Arial Black',sans-serif;
  --font-body:Inter,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  --font-data:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
}
h1,h2,.big,.reveal .big,.balance-amount,.elapsed,.mort-big{
  font-family:var(--font-display); font-weight:400; letter-spacing:-.02em;
}
.num,.mono,.addr,.cert .amt,.cl .v,.tot .v,.mcell .v,.odds .v,
.loss .v,.count .v,.zero-band .v,.total .v,.vault-v,td.n,th.n{
  font-family:var(--font-data); font-variant-numeric:tabular-nums;
}

* { margin:0; padding:0; box-sizing:border-box; }
body { background:#0B0D12; color:#F5F2EA;
  font-family:var(--font-body);
  overflow-x:hidden; -webkit-font-smoothing:antialiased; }
::selection { background:#D9A441; color:#0B0D12; }
a,button { -webkit-tap-highlight-color:transparent; font-family:inherit; }
#sky { position:fixed; inset:0; z-index:0; }
.wrap { position:relative; z-index:1; max-width:520px; margin:0 auto; padding:0 18px 70px; }
.num { font-variant-numeric:tabular-nums; }
.kicker { letter-spacing:.3em; font-size:.62rem; color:#D9A441; text-transform:uppercase;
  font-weight:800; }
.hidden { display:none !important; }

.stage { text-align:center; padding-top:6vh; }
h1 { font-size:clamp(2.1rem,9vw,3.4rem); font-weight:800; line-height:1.02;
  letter-spacing:-.025em; margin:13px 0 12px; }
h1 .g { color:#D9A441; }
h1 .r { color:#D9A441; }   /* accent word: Moongold; red stays functional-only */
.lede { color:#8A8580; font-size:.97rem; line-height:1.62; max-width:420px; margin:0 auto; }

.btn { border:none; border-radius:10px; padding:18px 30px; min-height:56px; font-weight:800;
  font-size:1.02rem; cursor:pointer; text-decoration:none; display:inline-flex;
  align-items:center; justify-content:center; gap:9px; transition:transform .15s ease; }
.btn:active { transform:scale(.97); }
.btn-gold { background:#D9A441; color:#0B0D12; box-shadow:0 14px 42px rgba(217,164,65,.32); }
.btn-gold:disabled { opacity:.6; }
.btn-ghost { background:transparent; color:#F5F2EA; border:1px solid rgba(245,242,234,.24); }
.actions { display:flex; gap:11px; justify-content:center; flex-wrap:wrap; margin-top:26px; }

/* ------------------------------------------------------------- SCANNER */
.scan { background:#161A22; border:1px solid rgba(217,164,65,.22); border-radius:20px;
  padding:20px 18px; margin-top:24px; text-align:left; min-height:236px; }
.scan-t { font-size:.6rem; letter-spacing:.2em; color:#8A8580; text-transform:uppercase;
  font-weight:800; display:flex; align-items:center; gap:8px; }
.scan-t i { width:7px; height:7px; border-radius:50%; background:#2E9E6B;
  animation:blip 1.2s infinite; }
@keyframes blip { 0%,100%{opacity:1} 50%{opacity:.2} }
.line { display:flex; align-items:center; gap:10px; padding:11px 0;
  border-bottom:1px solid rgba(245,242,234,.06); font-size:.87rem;
  opacity:0; transform:translateY(6px); transition:all .35s ease; }
.line.on { opacity:1; transform:none; }
.line .lt { flex:1; color:#8A8580; }
.line .rt { font-weight:800; font-size:.8rem; letter-spacing:.04em; }
.line .rt.none { color:#2E9E6B; }
.line .rt.zero { color:#C8402F; }
.total { display:flex; align-items:baseline; justify-content:space-between; padding-top:16px; }
.total .k { font-size:.62rem; letter-spacing:.18em; color:#8A8580; text-transform:uppercase;
  font-weight:800; }
.total .v { font-size:clamp(2rem,9vw,2.8rem); font-weight:800; color:#C8402F; line-height:1; }

/* -------------------------------------------------------------- REVEAL */
.reveal { text-align:center; }
.reveal .big { font-size:clamp(2.2rem,10vw,3.6rem); font-weight:800; line-height:1.03;
  letter-spacing:-.03em; }
.reveal .big .r { color:#C8402F; }
.stamp { display:inline-block; margin-top:20px; border:3px solid #C8402F; color:#C8402F;
  border-radius:10px; padding:11px 20px; font-size:clamp(1rem,4.4vw,1.3rem); font-weight:800;
  letter-spacing:.16em; transform:rotate(-4deg); }

.card { background:#161A22; border:1px solid rgba(245,242,234,.09); border-radius:20px;
  padding:20px 18px; margin-top:18px; text-align:left; }
.card-t { font-size:.6rem; letter-spacing:.2em; color:#D9A441; text-transform:uppercase;
  font-weight:800; margin-bottom:13px; }
.card p { color:#8A8580; font-size:.92rem; line-height:1.68; }
.card p + p { margin-top:11px; }
.card b { color:#F5F2EA; }
.fl { display:flex; align-items:flex-start; gap:11px; padding:11px 0;
  border-top:1px solid rgba(245,242,234,.07); }
.fl:first-of-type { border-top:none; }
.fl .ic { color:#2E9E6B; font-weight:800; }
.fl .tx { flex:1; font-size:.9rem; color:#F5F2EA; }
.fl .tx span { display:block; color:#8A8580; font-size:.79rem; margin-top:3px; }

.zero-band { text-align:center; padding:26px 16px; margin-top:18px;
  border-top:1px solid rgba(200,64,47,.25); border-bottom:1px solid rgba(200,64,47,.25); }
.zero-band .v { font-size:clamp(2.6rem,13vw,4rem); font-weight:800; color:#C8402F; line-height:1; }
.zero-band .k { font-size:.58rem; letter-spacing:.22em; color:#8A8580; text-transform:uppercase;
  margin-top:9px; font-weight:800; }

.fine { font-size:.73rem; color:#8A8580; line-height:1.72; text-align:center; margin-top:22px; }
.toast { position:fixed; left:50%; bottom:24px; transform:translateX(-50%) translateY(16px);
  background:#2E9E6B; color:#04160E; font-weight:800; padding:12px 22px; border-radius:10px;
  opacity:0; transition:all .3s; z-index:60; pointer-events:none; font-size:.88rem; }
.toast.show { opacity:1; transform:translateX(-50%) translateY(0); }
#card { display:none; }
@media (prefers-reduced-motion: reduce){ .line { transition:none; } .scan-t i { animation:none; } }
/* Doc 17: visible keyboard focus on every interactive element. */
a:focus-visible, button:focus-visible, input:focus-visible,
select:focus-visible, [tabindex]:focus-visible {
  outline:2px solid #D9A441; outline-offset:3px; border-radius:6px;
}
</style>
</head>
<body>
<canvas id="sky"></canvas>
{% include 'partials/nav.html' %}

<div class="wrap">

  <!-- ========================================================== STEP 1 -->
  <section class="stage" id="s1">
    <div class="kicker">MBITE DISTRIBUTION</div>
    <h1>Claim your<br>free <span class="g">MBITE</span>.</h1>
    <p class="lede">Check what you are entitled to from the MoonBite premine,
      presale and founder allocation. Takes a few seconds.</p>
    <div class="actions">
      <button class="btn btn-gold" id="btnClaim">CHECK MY ALLOCATION</button>
    </div>
    <p class="fine" style="margin-top:16px;">No wallet connection. No seed phrase.
      Nothing to sign. We do not ask you for anything — ever.</p>
  </section>

  <!-- ========================================================== STEP 2 -->
  <section class="stage hidden" id="s2">
    <div class="kicker">CHECKING ELIGIBILITY</div>
    <h1>Reading the<br>chain.</h1>
    <div class="scan">
      <div class="scan-t"><i></i><span id="scanT">QUERYING ALLOCATIONS</span></div>
      <div id="lines"></div>
      <div class="total hidden" id="totalRow">
        <div class="k">Your allocation</div>
        <div class="v num">0 MBITE</div>
      </div>
    </div>
  </section>

  <!-- ========================================================== STEP 3 -->
  <section class="stage hidden" id="s3">
    <div class="reveal">
      <div class="kicker" style="color:#C8402F;">RESULT</div>
      <div class="big">There is no airdrop.<br><span class="r">There never was.</span></div>
      <div class="stamp">ALLOCATION: 0 MBITE</div>
      <p class="lede" style="margin-top:22px;">Every check above was real, and every answer was
        zero. That is not a disappointment — it is the entire design.</p>
    </div>

    <div class="zero-band">
      <div class="v num">0</div>
      <div class="k">MBITE ever given away, to anyone</div>
    </div>

    <div class="card">
      <div class="card-t">WHY YOU SHOULD WANT THIS</div>
      <p>An airdrop means somebody was holding coins they did not mine, and chose to hand
        some to you. To give it away, <b>they had to own it first</b> — and whatever they kept,
        they can sell into you later.</p>
      <p>MoonBite has nothing to hand out because <b>nobody was ever given anything</b>.
        There is no premine to dump, no unlock cliff, no team wallet waiting to vest.
        Every MBITE that exists was found by a computer doing work.</p>
      <p>The free coins you were looking for are the reason most coins go to zero.</p>
    </div>

    <div class="card">
      <div class="card-t">WHAT IS ACTUALLY FREE</div>
      <div class="fl"><div class="ic"></div><div class="tx">The miner
        <span>No purchase, no licence, no signup. It runs on the CPU you already own.</span></div></div>
      <div class="fl"><div class="ic"></div><div class="tx">The wallet
        <span>Self-custodial. Your keys never leave your device.</span></div></div>
      <div class="fl"><div class="ic"></div><div class="tx">Every line of consensus code
        <span>Open source. The emission schedule is checkable, not promised.</span></div></div>
      <div class="fl"><div class="ic"></div><div class="tx">Your shot at the next block
        <span>Identical to everyone else's. That is the only equality worth having here.</span></div></div>
    </div>

    <div class="actions">
      <a class="btn btn-gold" href="/start">Go earn some instead</a>
      <button class="btn btn-ghost" id="btnShare">Share this</button>
    </div>

    <p class="fine">
      MBITE has no market value, is not an investment or a security, and mining income is never
      guaranteed. Anyone offering you free MBITE is lying to you —
      <a href="/scams" style="color:rgba(217,164,65,.75);">including about us</a>.
    </p>
  </section>
</div>

{% include 'partials/footer.html' %}
<canvas id="card" width="1080" height="1080"></canvas>
<div class="toast" id="toast"></div>

<script nonce="{{ csp_nonce }}">
(function () {
  'use strict';
  function $(id){ return document.getElementById(id); }
  function toast(m){ var t=$('toast'); t.textContent=m; t.classList.add('show');
    setTimeout(function(){ t.classList.remove('show'); },2400); }
  function copyText(s){
    try { if(navigator.clipboard && navigator.clipboard.writeText)
      return navigator.clipboard.writeText(s).catch(function(){}); } catch(e){}
    return null;
  }
  if (!CanvasRenderingContext2D.prototype.roundRect) {
    CanvasRenderingContext2D.prototype.roundRect=function(x,y,w,h,r){
      r=Math.min(r,w/2,h/2); this.moveTo(x+r,y); this.arcTo(x+w,y,x+w,y+h,r);
      this.arcTo(x+w,y+h,x,y+h,r); this.arcTo(x,y+h,x,y,r); this.arcTo(x,y,x+w,y,r);
      this.closePath(); return this; };
  }
  var reduced=window.matchMedia('(prefers-reduced-motion: reduce)').matches;

  /* --------------------------------------------------------------- sky */
  var sky=$('sky'), sg=sky.getContext('2d'), W,H,stars=[];
  var DPR=Math.min(window.devicePixelRatio||1,2);
  function resize(){
    W=innerWidth; H=innerHeight;
    sky.width=W*DPR; sky.height=H*DPR; sky.style.width=W+'px'; sky.style.height=H+'px';
    sg.setTransform(DPR,0,0,DPR,0,0); stars=[];
    for(var i=0,n=Math.min(130,(W*H/11000)|0);i<n;i++)
      stars.push({x:Math.random()*W,y:Math.random()*H,r:Math.random()*1.1+.25,tw:Math.random()*6.28});
  }
  addEventListener('resize',resize); resize();
  var t=0;
  (function loop(){
    t+=reduced?0:.008;
    sg.fillStyle='#0B0D12'; sg.fillRect(0,0,W,H);
    for(var i=0;i<stars.length;i++){ var s=stars[i];
      sg.globalAlpha=.14+.3*Math.abs(Math.sin(t+s.tw)); sg.fillStyle='#F5F2EA';
      sg.beginPath(); sg.arc(s.x,s.y,s.r,0,6.2832); sg.fill(); }
    sg.globalAlpha=1; requestAnimationFrame(loop);
  })();

  /* Every one of these is a true statement about this chain. The gag only
     works because none of it is invented. */
  var CHECKS = [
    ['Premine allocation',      'NONE',  'none'],
    ['Founder wallet',          'NONE',  'none'],
    ['Presale investors',       'NONE',  'none'],
    ['Team &amp; advisor unlocks',  'NONE',  'none'],
    ['Venture allocation',      'NONE',  'none'],
    ['Marketing treasury',      'NONE',  'none'],
    ['Your eligible balance',   '0 MBITE', 'zero']
  ];

  $('btnClaim').addEventListener('click', function(){
    this.disabled = true;
    $('s1').classList.add('hidden');
    $('s2').classList.remove('hidden');
    var box=$('lines');
    box.innerHTML = CHECKS.map(function(c){
      return '<div class="line"><span class="lt">'+c[0]+'</span>'+
             '<span class="rt '+c[2]+'">'+c[1]+'</span></div>';
    }).join('');
    var els=box.querySelectorAll('.line');
    var step = reduced ? 40 : 320;
    els.forEach(function(el,i){
      setTimeout(function(){
        el.classList.add('on');
        if(i===els.length-1){
          $('scanT').textContent='SCAN COMPLETE';
          $('totalRow').classList.remove('hidden');
          setTimeout(function(){
            $('s2').classList.add('hidden');
            $('s3').classList.remove('hidden');
            window.scrollTo({top:0, behavior: reduced?'auto':'smooth'});
          }, reduced?200:1100);
        }
      }, 260 + i*step);
    });
  });

  /* ------------------------------------------------------------ share */
  function shareText(){
    return 'I went to claim the MoonBite airdrop. Premine: none. Founder wallet: none. '+
      'Presale: none. My allocation: 0 MBITE. There is nothing to give away because nobody '+
      'was ever given anything — that is the point. moonbite.org/free';
  }
  $('btnShare').addEventListener('click', function(){
    if(navigator.share){ navigator.share({text:shareText()}).catch(function(){}); }
    else { copyText(shareText()); toast('Copied'); }
    var cv=$('card'), x=cv.getContext('2d');
    var bg=x.createLinearGradient(0,0,0,1080);
    bg.addColorStop(0,'#0B0D12'); bg.addColorStop(1,'#161A22');
    x.fillStyle=bg; x.fillRect(0,0,1080,1080);
    for(var i=0;i<80;i++){ x.globalAlpha=.12+Math.random()*.45; x.fillStyle='#F5F2EA';
      x.beginPath(); x.arc(Math.random()*1080,Math.random()*1080,Math.random()*1.8+.4,0,6.2832); x.fill(); }
    x.globalAlpha=1; x.textAlign='center';
    x.beginPath(); x.arc(540,152,66,0,6.2832); x.fillStyle='#F5F2EA'; x.fill();
    x.beginPath(); x.arc(576,101,52,0,6.2832); x.fillStyle='#0B0D12'; x.fill();
    x.fillStyle='#D9A441';
    x.beginPath(); x.roundRect(440,130,200,8,4); x.fill();
    x.beginPath(); x.roundRect(446,165,188,8,4); x.fill();
    x.fillStyle='#8A8580'; x.font='700 27px Arial';
    x.fillText('I CHECKED THE MOONBITE AIRDROP', 540, 262);
    /* the ledger of nothing */
    var rows=[['Premine','NONE'],['Founder wallet','NONE'],['Presale','NONE'],
              ['Team unlocks','NONE'],['VC allocation','NONE']];
    x.font='400 30px Arial';
    rows.forEach(function(r,i){
      var y=340+i*48;
      x.textAlign='left';  x.fillStyle='#8A8580'; x.fillText(r[0], 210, y);
      x.textAlign='right'; x.fillStyle='#2E9E6B'; x.font='800 30px Arial';
      x.fillText(r[1], 870, y); x.font='400 30px Arial';
    });
    x.textAlign='center';
    x.strokeStyle='rgba(245,242,234,.14)'; x.lineWidth=1;
    x.beginPath(); x.moveTo(210,600); x.lineTo(870,600); x.stroke();
    x.fillStyle='#C8402F'; x.font='800 104px Arial';
    x.fillText('0 MBITE', 540, 700);
    x.fillStyle='#F5F2EA'; x.font='400 34px Arial';
    x.fillText('my entire allocation', 540, 752);
    x.fillStyle='#F5F2EA'; x.font='italic 33px Arial';
    x.fillText('Nothing to give away, because nobody', 540, 838);
    x.fillText('was ever given anything.', 540, 882);
    x.fillStyle='#D9A441'; x.font='700 30px Arial';
    x.fillText('moonbite.org/free', 540, 952);
    x.fillStyle='rgba(245,242,234,.32)'; x.font='400 19px Arial';
    x.fillText('MBITE has no market value and is not an investment.', 540, 1008);
    var a=document.createElement('a');
    a.download='moonbite-no-airdrop.png'; a.href=cv.toDataURL('image/png'); a.click();
  });
})();
</script>
</body>
</html>