/* Sybilhunt — modal bodies + partner/team data. window-exported. */

const SH_PARTNERS_ACTIVE = [
  { name: 'Polymarket',  cat: 'Prediction market',     accent: 'var(--cyan-500)',   logoUrl: 'https://github.com/Polymarket.png?size=64', pool: '$5,000,000', startDays: 20, live: true, endDays: 19,
    desc: 'The largest on-chain prediction market. Polymarket is opening a hunt to clear out wash-trading and reward-farming clusters before its next incentive distribution — keeping volume and user metrics honest.' },
  { name: 'Kalshi',      cat: 'Event exchange',         accent: 'var(--signal-500)', logoUrl: 'assets/partners/kalshi-k.png', pool: '$3,000,000', startDays: 62,
    desc: 'A regulated US event exchange. Kalshi is preparing a sybil sweep ahead of a community rewards round, targeting coordinated multi-account actors that distort market participation data.' },
  { name: 'Gitcoin',     cat: 'Sybil resistance',       accent: 'var(--signal-500)', logoUrl: 'https://github.com/gitcoinco.png?size=64', pool: '$1,200,000', startDays: 34,
    desc: 'The home of quadratic funding. Gitcoin runs sybil hunts every grants round — fake donors inflate matching pools and steal funds from real public-goods projects. This hunt protects the next round.' },
  { name: 'EigenLayer',  cat: 'Restaking · airdrop',    accent: 'var(--signal-500)', logoUrl: 'https://github.com/Layr-Labs.png?size=64', pool: '$8,000,000', startDays: 95,
    desc: 'The restaking layer for Ethereum. Ahead of a major airdrop, EigenLayer is funding the biggest hunt yet — large bridged-wallet clusters farm restaking points at scale, and the pool rewards whoever maps them.' },
];

const SH_PARTNERS_PAST = [
  { name: 'Arbitrum',    cat: 'L2 · airdrop sybil-filter', accent: 'var(--cyan-500)',   logoUrl: 'https://github.com/OffchainLabs.png?size=64' },
  { name: 'Optimism',    cat: 'L2 · airdrop',              accent: 'var(--coral-500)',  logoUrl: 'https://github.com/ethereum-optimism.png?size=64' },
  { name: 'Hop Protocol',cat: 'Bridge · sybil hunt',       accent: 'var(--signal-500)', logoUrl: 'https://github.com/hop-protocol.png?size=64' },
  { name: 'LayerZero',   cat: 'Interop · self-report',     accent: 'var(--ink-200)',    logoUrl: 'https://github.com/LayerZero-Labs.png?size=64' },
  { name: 'zkSync',      cat: 'L2 · airdrop rules',        accent: 'var(--cyan-500)',   logoUrl: 'https://github.com/matter-labs.png?size=64' },
  { name: 'Starknet',    cat: 'L2 · airdrop',              accent: 'var(--coral-500)',  logoUrl: 'https://github.com/starkware-industries.png?size=64' },
  { name: 'Celestia',    cat: 'DA · airdrop',              accent: 'var(--ink-200)',    logoUrl: 'https://github.com/celestiaorg.png?size=64' },
  { name: 'Galxe',       cat: 'On-chain credentials',      accent: 'var(--cyan-500)',   logoUrl: 'https://github.com/galxe.png?size=64' },
  { name: 'Linea',       cat: 'L2 · airdrop',              accent: 'var(--ink-200)',    logoUrl: 'https://github.com/Consensys.png?size=64' },
  { name: 'Scroll',      cat: 'L2 · airdrop',              accent: 'var(--coral-500)',  logoUrl: 'https://github.com/scroll-tech.png?size=64' },
  { name: 'Blast',       cat: 'L2 · airdrop',              accent: 'var(--gold-500)',   logoUrl: 'https://github.com/blast-io.png?size=64' },
  { name: 'Wormhole',    cat: 'Interop · airdrop',         accent: 'var(--cyan-500)',   logoUrl: 'https://github.com/wormhole-foundation.png?size=64' },
];

const SH_STEPS = [
  { n: '01', t: 'Pick an active hunt',        d: 'Open a partner campaign — say, Polymarket. Inside you see the exact pool size, the payout rules, the deadline, and the kind of Sybil behaviour that campaign is paying to catch.', tip: 'Start where the pool is big and the deadline is close — early, sharp reports earn the most.' },
  { n: '02', t: 'Analyze wallets & links',    d: 'Trace funding sources, transaction timing, shared contracts and repeated behaviour. Look for the tells: wallets funded from one address, acting in sync, moving in identical patterns.', tip: 'Our explorer highlights common funders and timing clusters so you don\u2019t start from a blank chart.' },
  { n: '03', t: 'Build the evidence',         d: 'Group the accounts one actor secretly controls into a single cluster, and attach the on-chain proof that ties them together — transactions, contracts, and the money trail.', tip: 'Strong proof is reproducible: anyone reading your report can follow the same links and reach the same wallets.' },
  { n: '04', t: 'Submit & claim your reward', d: 'Send the cluster for review. Confirmed clusters split the pool by what each hunter found — the earlier, larger, and better-documented your report, the bigger your share.', tip: 'Payouts are proportional: catch more of the network, and earlier than others, to claim a larger cut.' },
];

function HowItWorksBody() {
  return (
    <div>
      <p style={{ fontSize: 19, color: 'var(--text-body)', marginBottom: 30, lineHeight: 1.6 }}>
        Sybilhunt is a hunt for <strong style={{ color: 'var(--text-strong)' }}>Sybils</strong> — people who run dozens of accounts to drain rewards meant for real participants. You track them down across the chain, prove the accounts belong to one actor, and take a share of the pool for what you catch.
      </p>
      <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(300px, 1fr))', gap: 18 }}>
        {SH_STEPS.map((s) => (
          <div key={s.n} style={{ background: 'var(--surface-raised)', border: '1px solid var(--border-subtle)', borderRadius: 'var(--radius-lg)', padding: 26 }}>
            <div style={{ fontFamily: 'var(--font-mono)', fontWeight: 700, fontSize: 24, color: 'var(--signal-500)' }}>{s.n}</div>
            <div style={{ fontFamily: 'var(--font-display)', fontWeight: 600, fontSize: 20, color: 'var(--text-strong)', margin: '12px 0 10px' }}>{s.t}</div>
            <div style={{ fontSize: 15.5, color: 'var(--text-muted)', lineHeight: 1.6 }}>{s.d}</div>
            <div style={{ display: 'flex', gap: 9, alignItems: 'flex-start', marginTop: 16, paddingTop: 14, borderTop: '1px solid var(--border-subtle)' }}>
              <span style={{ color: 'var(--signal-500)', fontFamily: 'var(--font-mono)', fontSize: 13, lineHeight: 1.5, flex: 'none' }}>TIP</span>
              <span style={{ fontSize: 13.5, color: 'var(--text-faint)', lineHeight: 1.55 }}>{s.tip}</span>
            </div>
          </div>
        ))}
      </div>
    </div>
  );
}

Object.assign(window, { SH_PARTNERS_ACTIVE, SH_PARTNERS_PAST, SH_STEPS, HowItWorksBody });
