> ## Documentation Index
> Fetch the complete documentation index at: https://whitepaper.rwanftfi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# NFT Ecosystem

> All 10 RWANFTFI NFT tiers from Genesis (28 USDT) to Infinity (24,000 USDT) — with Income Limits, marketing tree depth, NFTM mining and lending eligibility, Autobuy 3/3, Gift NFTs, Vouchers, and Ambassador/VIP editions.

export const NftTierExplorer = () => {
  const [filter, setFilter] = useState("All");
  const [selected, setSelected] = useState(null);
  const [compare, setCompare] = useState([]);
  const VIDEO_SRCS = [null, '/videos/01_1.mp4', '/videos/02_1.mp4', '/videos/03_1.mp4', '/videos/04_1.mp4', '/videos/05_1.mp4', '/videos/06_1.mp4', '/videos/07_1.mp4', '/videos/08_1.mp4', '/videos/09_1.mp4', '/videos/10_1.mp4'];
  const fmtUsd = n => new Intl.NumberFormat('en-US', {
    style: 'currency',
    currency: 'USD',
    maximumFractionDigits: 0
  }).format(n);
  const NFT_DATA = [{
    name: "GENESIS",
    tier: "Basic",
    level: 1,
    price: 28,
    limit: 75,
    depth: 2,
    mining: null,
    matchingBonus: false,
    lending: false,
    daMining: false,
    autobuy: "3/3",
    cycles: 0,
    c1: 0,
    c2: 0
  }, {
    name: "ADVANCE",
    tier: "Basic",
    level: 2,
    price: 55,
    limit: 160,
    depth: 3,
    mining: null,
    matchingBonus: false,
    lending: false,
    daMining: false,
    autobuy: "3/3",
    cycles: 0,
    c1: 0,
    c2: 0
  }, {
    name: "ASCEND",
    tier: "Basic",
    level: 3,
    price: 140,
    limit: 375,
    depth: 4,
    mining: null,
    matchingBonus: false,
    lending: false,
    daMining: false,
    autobuy: "3/3",
    cycles: 0,
    c1: 0,
    c2: 0
  }, {
    name: "ECLIPSE",
    tier: "Basic",
    level: 4,
    price: 275,
    limit: 650,
    depth: 6,
    mining: null,
    matchingBonus: true,
    lending: false,
    daMining: false,
    autobuy: "3/3",
    cycles: 0,
    c1: 0,
    c2: 0
  }, {
    name: "HYDRO",
    tier: "Premium",
    level: 5,
    price: 550,
    limit: 1400,
    depth: 9,
    mining: 45,
    matchingBonus: true,
    lending: true,
    daMining: true,
    autobuy: "3/3",
    cycles: 1,
    c1: 0.10,
    c2: 0
  }, {
    name: "QUANTUM",
    tier: "Premium",
    level: 6,
    price: 1100,
    limit: 2700,
    depth: 11,
    mining: 44,
    matchingBonus: true,
    lending: true,
    daMining: true,
    autobuy: "3/3",
    cycles: 1,
    c1: 0.10,
    c2: 0
  }, {
    name: "PULSE",
    tier: "Premium",
    level: 7,
    price: 2200,
    limit: 5800,
    depth: 12,
    mining: 43,
    matchingBonus: true,
    lending: true,
    daMining: true,
    autobuy: "3/3",
    cycles: 1,
    c1: 0.10,
    c2: 0
  }, {
    name: "AURORA",
    tier: "Premium",
    level: 8,
    price: 5500,
    limit: 12800,
    depth: 13,
    mining: 42,
    matchingBonus: true,
    lending: true,
    daMining: true,
    autobuy: "3/3",
    cycles: 2,
    c1: 0.10,
    c2: 0.15
  }, {
    name: "FLAME",
    tier: "Elite",
    level: 9,
    price: 11000,
    limit: 28000,
    depth: 15,
    mining: 41,
    matchingBonus: true,
    lending: true,
    daMining: true,
    autobuy: "Unlimited",
    cycles: 2,
    c1: 0.10,
    c2: 0.15
  }, {
    name: "INFINITY",
    tier: "Elite",
    level: 10,
    price: 24000,
    limit: 70000,
    depth: 19,
    mining: 40,
    matchingBonus: true,
    lending: true,
    daMining: true,
    autobuy: "Unlimited",
    cycles: 2,
    c1: 0.10,
    c2: 0.15
  }];
  const TIER_COLORS = {
    Basic: {
      border: '1px solid rgba(255,255,255,0.25)',
      textColor: '#FFFFFF',
      badgeBg: 'rgba(255,255,255,0.15)',
      badgeBorder: 'rgba(255,255,255,0.25)'
    },
    Premium: {
      border: '1px solid rgba(255,255,255,0.35)',
      textColor: '#FFFFFF',
      badgeBg: 'rgba(255,255,255,0.15)',
      badgeBorder: 'rgba(255,255,255,0.35)'
    },
    Elite: {
      border: '1px solid rgba(251,191,36,0.5)',
      textColor: '#fbbf24',
      badgeBg: 'rgba(251,191,36,0.2)',
      badgeBorder: 'rgba(251,191,36,0.4)'
    }
  };
  var RADAR_AXES = ['Afford', 'Income', 'Depth', 'Mining', 'ROI'];
  var normalize = nft => {
    var roi = nft.limit / nft.price;
    return [(24000 - nft.price) / 24000 * 100, nft.limit / 70000 * 100, nft.depth / 22 * 100, nft.cycles > 0 ? (45 - nft.mining) / (45 - 40) * 100 : 0, Math.min(roi / 3.0 * 100, 100)];
  };
  var filtered = filter === "All" ? NFT_DATA : NFT_DATA.filter(n => n.tier === filter);
  var toggleCompare = nft => {
    setCompare(prev => {
      var exists = prev.find(c => c.level === nft.level);
      if (exists) return prev.filter(c => c.level !== nft.level);
      if (prev.length >= 2) return [prev[1], nft];
      return [...prev, nft];
    });
  };
  var RadarChart = ({items, size}) => {
    var s = size || 240;
    var cx = s / 2, cy = s / 2, r = s * 0.36;
    var axes = 5, step = 2 * Math.PI / axes, start = -Math.PI / 2;
    var pt = (ai, val) => ({
      x: cx + r * (val / 100) * Math.cos(start + ai * step),
      y: cy + r * (val / 100) * Math.sin(start + ai * step)
    });
    var colors = ['#FFFFFF', '#F59E0B'];
    return <svg viewBox={'0 0 ' + s + ' ' + s} className="w-full max-w-[260px] mx-auto">
        {[25, 50, 75, 100].map(lv => <polygon key={lv} points={Array.from({
      length: axes
    }, (_, i) => pt(i, lv)).map(p => p.x + ',' + p.y).join(' ')} fill="none" stroke="white" strokeOpacity="0.08" strokeWidth="0.5" />)}
        {Array.from({
      length: axes
    }, (_, i) => <line key={i} x1={cx} y1={cy} x2={pt(i, 100).x} y2={pt(i, 100).y} stroke="white" strokeOpacity="0.08" strokeWidth="0.5" />)}
        {items.map((item, idx) => {
      var vals = normalize(item);
      var pts = vals.map((v, i) => pt(i, v));
      return <g key={item.level}>
              <polygon points={pts.map(p => p.x + ',' + p.y).join(' ')} fill={colors[idx]} fillOpacity="0.15" stroke={colors[idx]} strokeWidth="1.5" />
              {pts.map((p, i) => <circle key={i} cx={p.x} cy={p.y} r="3" fill={colors[idx]} />)}
            </g>;
    })}
        {Array.from({
      length: axes
    }, (_, i) => {
      var lp = pt(i, 120);
      return <text key={i} x={lp.x} y={lp.y} textAnchor="middle" dominantBaseline="middle" fill="rgba(255,255,255,0.5)" style={{
        fontSize: '7.5px'
      }}>{RADAR_AXES[i]}</text>;
    })}
      </svg>;
  };
  var FeaturePill = ({on, label}) => <span style={on ? {
    color: '#4ade80',
    backgroundColor: 'rgba(34,197,94,0.1)',
    border: '1px solid rgba(34,197,94,0.2)'
  } : {
    color: 'rgba(255,255,255,0.4)',
    backgroundColor: 'rgba(255,255,255,0.05)',
    border: '1px solid rgba(255,255,255,0.05)'
  }} className="inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[10px] font-medium">
      {on ? '✓' : '✗'} {label}
    </span>;
  var videoStyle = {
    width: '100%',
    aspectRatio: '1 / 1',
    objectFit: 'cover',
    display: 'block',
    backgroundColor: '#1a1a2e'
  };
  return <div style={{
    backgroundColor: '#000000',
    color: '#FFFFFF',
    borderColor: 'rgba(255,255,255,0.05)'
  }} className="p-6 rounded-xl not-prose border">
      {}
      <div className="flex items-center justify-between mb-6">
        <h3 style={{
    color: '#FFFFFF'
  }} className="text-lg font-serif italic">NFT Tier Explorer</h3>
        <span style={{
    color: 'rgba(255,255,255,0.6)',
    backgroundColor: 'rgba(255,255,255,0.1)',
    border: '1px solid rgba(255,255,255,0.2)'
  }} className="text-xs px-3 py-1 rounded-full font-medium">Interactive</span>
      </div>

      {}
      <div className="flex gap-2 mb-5 flex-wrap">
        {['All', 'Basic', 'Premium', 'Elite'].map(f => <button key={f} onClick={() => {
    setFilter(f);
    setSelected(null);
    setCompare([]);
  }} style={filter === f ? {
    backgroundColor: '#FFFFFF',
    color: '#000000'
  } : {
    backgroundColor: 'rgba(56,56,56,0.7)',
    color: 'rgba(255,255,255,0.7)'
  }} className="px-4 py-1.5 rounded-full text-xs font-medium transition-all">
            {f}
          </button>)}
      </div>

      {}
      {(() => {
    var renderCard = nft => {
      var isSel = selected?.level === nft.level;
      var isCmp = compare.find(c => c.level === nft.level);
      var tc = TIER_COLORS[nft.tier];
      return <button key={nft.level} onClick={() => setSelected(isSel ? null : nft)} style={{
        backgroundColor: '#383838',
        borderColor: isSel ? 'rgba(255,255,255,0.6)' : isCmp ? 'rgba(255,255,255,0.35)' : 'rgba(255,255,255,0.05)',
        textAlign: 'left',
        boxShadow: isSel ? '0 0 15px rgba(255,255,255,0.15)' : 'none',
        padding: 0,
        overflow: 'hidden'
      }} className="relative rounded-xl transition-all duration-300 border">
              <div style={{
        width: '100%',
        overflow: 'hidden',
        aspectRatio: '1 / 1',
        backgroundColor: '#1a1a2e'
      }}>
                <video autoPlay muted loop playsInline src={VIDEO_SRCS[nft.level]} style={{
        width: '100%',
        height: '100%',
        objectFit: 'cover',
        display: 'block'
      }} />
              </div>
              <div style={{
        padding: '12px'
      }}>
                <div className="flex items-center justify-between mb-2">
                  <span style={{
        color: tc.textColor,
        backgroundColor: tc.badgeBg,
        border: tc.border
      }} className="text-[10px] font-bold uppercase tracking-wider px-1.5 py-0.5 rounded-full">{nft.tier}</span>
                  <span style={{
        color: 'rgba(255,255,255,0.4)'
      }} className="text-[10px]">L{nft.level}</span>
                </div>
                <div style={{
        color: '#FFFFFF'
      }} className="text-sm font-bold mb-1">{nft.name}</div>
                <div style={{
        color: '#FFFFFF'
      }} className="text-xl font-black">{fmtUsd(nft.price)}</div>
                <div style={{
        color: 'rgba(255,255,255,0.4)'
      }} className="text-[11px] mt-1">Income Limit: {fmtUsd(nft.limit)}</div>
                <div style={{
        color: 'rgba(255,255,255,0.4)'
      }} className="text-[11px]">Mkt Depth: {nft.depth} levels</div>
              </div>
              {isCmp && <div style={{
        backgroundColor: '#FFFFFF',
        boxShadow: '0 0 8px rgba(255,255,255,0.3)'
      }} className="absolute -top-1.5 -right-1.5 w-5 h-5 rounded-full flex items-center justify-center">
                  <span style={{
        color: '#000000'
      }} className="text-[10px] font-bold">{compare.indexOf(isCmp) + 1}</span>
                </div>}
            </button>;
    };
    if (filter === "All") {
      var basic = NFT_DATA.filter(n => n.tier === 'Basic');
      var premium = NFT_DATA.filter(n => n.tier === 'Premium');
      var elite = NFT_DATA.filter(n => n.tier === 'Elite');
      return <div className="mb-6">
              <div style={{
        fontSize: '11px',
        color: 'rgba(255,255,255,0.4)',
        marginBottom: '8px'
      }} className="uppercase tracking-wider">Basic · L1–L4</div>
              <div className="grid grid-cols-2 sm:grid-cols-4 gap-3">{basic.map(renderCard)}</div>
              <div style={{
        fontSize: '11px',
        color: 'rgba(255,255,255,0.4)',
        marginBottom: '8px',
        marginTop: '12px'
      }} className="uppercase tracking-wider">Premium · L5–L8</div>
              <div className="grid grid-cols-2 sm:grid-cols-4 gap-3">{premium.map(renderCard)}</div>
              <div style={{
        fontSize: '11px',
        color: 'rgba(255,255,255,0.4)',
        marginBottom: '8px',
        marginTop: '12px'
      }} className="uppercase tracking-wider">Elite · L9–L10</div>
              <div className="grid grid-cols-2 sm:grid-cols-2 max-w-[420px] mx-auto gap-3">{elite.map(renderCard)}</div>
            </div>;
    }
    var isElite = filter === "Elite";
    return <div className={`grid gap-3 mb-6 ${isElite ? 'grid-cols-2 max-w-[420px] mx-auto' : 'grid-cols-2 sm:grid-cols-4'}`}>
            {filtered.map(renderCard)}
          </div>;
  })()}

      {}
      {selected && (() => {
    var tc = TIER_COLORS[selected.tier];
    return <div style={{
      backgroundColor: '#383838',
      borderColor: 'rgba(255,255,255,0.05)'
    }} className="p-5 rounded-xl border mb-6">
            <div className="flex flex-col md:flex-row md:items-start gap-6">
              <div className="flex-1">
                <div className="flex items-center gap-3 mb-4">
                  <span style={{
      color: tc.textColor,
      backgroundColor: tc.badgeBg,
      border: tc.border
    }} className="text-[10px] font-bold uppercase px-2.5 py-0.5 rounded-full">{selected.tier}</span>
                  <h4 style={{
      color: '#FFFFFF'
    }} className="text-base font-bold">Level {selected.level} — {selected.name}</h4>
                </div>
                <div className="grid grid-cols-2 sm:grid-cols-3 gap-2 mb-4">
                  {[['Price', fmtUsd(selected.price)], ['Income Limit', fmtUsd(selected.limit)], ['Mkt Depth', selected.depth + ' levels'], ['Mining Cycle', selected.cycles === 0 ? 'Not available' : selected.cycles === 1 ? selected.mining + ' days' : '42 – 40 days', selected.cycles === 0 ? null : selected.cycles === 1 ? '10% per cycle' : '10% + 15% (2 cycles)'], ['Autobuy Slots', selected.autobuy === 'Unlimited' ? 'Unlimited' : '3 of 3 slots', selected.autobuy === 'Unlimited' ? 'Elite: no autobuy cap' : 'Auto-reinvest limit'], ['ROI Ratio', (selected.limit / selected.price).toFixed(2) + 'x']].map(([label, val, subtext]) => <div key={label} style={{
      backgroundColor: 'rgba(56,56,56,0.7)'
    }} className="rounded-lg p-3">
                      <div style={{
      color: 'rgba(255,255,255,0.4)'
    }} className="text-[10px] uppercase tracking-wide">{label}</div>
                      <div style={{
      color: '#FFFFFF'
    }} className="text-lg font-bold">{val}</div>
                      {subtext && <div style={{
      color: 'rgba(255,255,255,0.35)',
      fontSize: '9px'
    }}>{subtext}</div>}
                    </div>)}
                </div>
                <div className="flex flex-wrap gap-1.5">
                  <FeaturePill on={true} label="RWA Access" />
                  <FeaturePill on={true} label="FinPro" />
                  <FeaturePill on={selected.matchingBonus} label="Matching Bonus" />
                  <FeaturePill on={selected.lending} label="Lending" />
                  <FeaturePill on={selected.daMining} label={selected.daMining ? 'DA Mining · ' + selected.cycles + ' cycle' + (selected.cycles > 1 ? 's' : '') : 'DA Mining'} />
                </div>
              </div>
              <div className="w-full md:w-auto flex flex-col items-center">
                <div style={{
      backgroundColor: '#1a1a2e',
      borderRadius: '8px',
      overflow: 'hidden',
      aspectRatio: '1 / 1',
      width: '100%',
      maxWidth: '260px',
      marginBottom: '12px'
    }}>
                  <video autoPlay muted loop playsInline src={VIDEO_SRCS[selected.level]} style={videoStyle} />
                </div>
                <RadarChart items={[selected]} size={200} />
                <button onClick={() => toggleCompare(selected)} style={compare.find(c => c.level === selected.level) ? {
      backgroundColor: '#FFFFFF',
      color: '#000000',
      boxShadow: '0 0 12px rgba(255,255,255,0.2)'
    } : {
      color: 'rgba(255,255,255,0.4)',
      border: '1px solid rgba(255,255,255,0.1)'
    }} className="mt-3 px-5 py-2 rounded-full text-xs font-semibold transition-all">
                  {compare.find(c => c.level === selected.level) ? '✓ In comparison' : '+ Add to compare'}
                </button>
              </div>
            </div>
          </div>;
  })()}

      {}
      {compare.length === 2 && <div style={{
    backgroundColor: '#383838',
    borderColor: 'rgba(255,255,255,0.05)'
  }} className="p-5 rounded-xl border mb-4">
          <h4 style={{
    color: '#FFFFFF'
  }} className="text-base font-bold mb-5 text-center">
            {compare[0].name} <span style={{
    color: 'rgba(255,255,255,0.4)'
  }} className="mx-2">vs</span> {compare[1].name}
          </h4>
          <div className="flex flex-col items-center gap-6">
            <div className="flex justify-center gap-4 w-full">
              {compare.map(item => <div key={item.level} style={{
    backgroundColor: '#1a1a2e',
    borderRadius: '8px',
    overflow: 'hidden',
    aspectRatio: '1 / 1',
    width: '100%',
    maxWidth: '180px'
  }}>
                  <video autoPlay muted loop playsInline src={VIDEO_SRCS[item.level]} style={videoStyle} />
                </div>)}
            </div>
            <div className="w-full max-w-[280px]">
              <RadarChart items={compare} size={260} />
              <div className="flex justify-center gap-6 mt-2">
                {compare.map((item, idx) => <div key={item.level} className="flex items-center gap-2">
                    <span className="w-3 h-3 rounded-full" style={{
    backgroundColor: idx === 0 ? '#FFFFFF' : '#F59E0B'
  }} />
                    <span style={{
    color: 'rgba(255,255,255,0.5)'
  }} className="text-xs font-semibold">{item.name}</span>
                  </div>)}
              </div>
            </div>
            <div className="w-full overflow-x-auto">
              <table className="w-full text-sm">
                <thead><tr style={{
    borderBottom: '1px solid rgba(255,255,255,0.05)'
  }}>
                  <th style={{
    color: 'rgba(255,255,255,0.4)'
  }} className="text-left py-2 font-medium">Metric</th>
                  <th style={{
    color: '#FFFFFF'
  }} className="text-right py-2 font-semibold">{compare[0].name}</th>
                  <th style={{
    color: '#F59E0B'
  }} className="text-right py-2 font-semibold">{compare[1].name}</th>
                </tr></thead>
                <tbody style={{
    color: '#FFFFFF'
  }}>
                  {[['Price', fmtUsd(compare[0].price), fmtUsd(compare[1].price)], ['Income Limit', fmtUsd(compare[0].limit), fmtUsd(compare[1].limit)], ['ROI', (compare[0].limit / compare[0].price).toFixed(2) + 'x', (compare[1].limit / compare[1].price).toFixed(2) + 'x'], ['Mkt Depth', compare[0].depth + ' lvls', compare[1].depth + ' lvls'], ['Mining', compare[0].mining ? compare[0].mining + 'd' : '—', compare[1].mining ? compare[1].mining + 'd' : '—'], ['Matching Bonus', compare[0].matchingBonus ? '✓' : '✗', compare[1].matchingBonus ? '✓' : '✗'], ['Lending', compare[0].lending ? '✓' : '✗', compare[1].lending ? '✓' : '✗'], ['DA Mining', compare[0].daMining ? '✓' : '✗', compare[1].daMining ? '✓' : '✗']].map(([label, v1, v2], i) => <tr key={i} style={{
    borderBottom: '1px solid rgba(255,255,255,0.05)'
  }}>
                      <td style={{
    color: 'rgba(255,255,255,0.4)'
  }} className="py-2">{label}</td>
                      <td className="py-2 text-right font-semibold">{v1}</td>
                      <td className="py-2 text-right font-semibold">{v2}</td>
                    </tr>)}
                </tbody>
              </table>
            </div>
          </div>
          <button onClick={() => setCompare([])} style={{
    color: 'rgba(255,255,255,0.4)'
  }} className="mt-4 text-xs transition-colors">Clear comparison</button>
        </div>}

      <p style={{
    color: 'rgba(255,255,255,0.4)'
  }} className="text-xs mt-4">Click any card to expand details. Select two cards to compare side-by-side with radar chart.</p>
    </div>;
};

<CardGroup cols={3}>
  <Card title="Basic · L1–L4" icon="circle">
    28 – 275 USDT · RWA & FinPro access
  </Card>

  <Card title="Premium · L5–L8" icon="circle-half-stroke">
    550 – 5,500 USDT · Mining, Lending, Matching
  </Card>

  <Card title="Elite · L9–L10" icon="circle-dot">
    11,000 – 24,000 USDT · Max depth, shortest cycles
  </Card>
</CardGroup>

Owning an NFT is mandatory to participate in marketing, mine DA, and access financial tools. One active NFT per account — upgrading replaces the previous one automatically.

## All 10 Tiers at a Glance

The complete tier specification. Income Limit is the maximum cumulative income an NFT can generate before it must be renewed. Depth is the maximum marketing tree depth from which the holder earns Tree Distribution rewards. Mining cycle duration shrinks as tier grows.

|  L | Name     | Group   | Price (USDT) | Income Limit (USDT) | Tree Depth | Mining Cycle | Mining Cycles | NFTM (Cycle 1 / 2) | Matching Bonus | DA Mining | Lending | Autobuy   |
| -: | -------- | ------- | -----------: | ------------------: | ---------: | -----------: | ------------: | ------------------ | -------------- | --------- | ------- | --------- |
|  1 | Genesis  | Basic   |           28 |                  75 |          2 |            — |             0 | —                  | —              | —         | —       | 3/3       |
|  2 | Advance  | Basic   |           55 |                 160 |          3 |            — |             0 | —                  | —              | —         | —       | 3/3       |
|  3 | Ascend   | Basic   |          140 |                 375 |          4 |            — |             0 | —                  | —              | —         | —       | 3/3       |
|  4 | Eclipse  | Basic   |          275 |                 650 |          6 |            — |             0 | —                  | ✓              | —         | —       | 3/3       |
|  5 | Hydro    | Premium |          550 |               1,400 |          9 |      45 days |             1 | 10% / —            | ✓              | ✓         | ✓       | 3/3       |
|  6 | Quantum  | Premium |        1,100 |               2,700 |         11 |      44 days |             1 | 10% / —            | ✓              | ✓         | ✓       | 3/3       |
|  7 | Pulse    | Premium |        2,200 |               5,800 |         12 |      43 days |             1 | 10% / —            | ✓              | ✓         | ✓       | 3/3       |
|  8 | Aurora   | Premium |        5,500 |              12,800 |         13 |      42 days |             2 | 10% / 15%          | ✓              | ✓         | ✓       | 3/3       |
|  9 | Flame    | Elite   |       11,000 |              28,000 |         15 |      41 days |             2 | 10% / 15%          | ✓              | ✓         | ✓       | Unlimited |
| 10 | Infinity | Elite   |       24,000 |              70,000 |         19 |      40 days |             2 | 10% / 15%          | ✓              | ✓         | ✓       | Unlimited |

<Note>
  **Tree Depth values reflect Phase 1 (current).** When **Phase 2** is activated by DAO vote (planned Q4 2026), Levels 16–22 of the marketing structure unlock and Infinity (L10) earns up to the full 22 levels deep. Other tiers expand proportionally. **Matching Bonus** column indicates Level 1 eligibility (Eclipse / L4+); Levels 2 and 3 require cumulative personal sales of 1,000 and 3,000 USDT respectively. **NFTM (Cycle 1 / 2)** is expressed as a percentage of the NFT price.
</Note>

<NftTierExplorer />

## Income Limits & Auto-Renewal

<AccordionGroup>
  <Accordion title="How Income Limits Work" icon="gauge-high">
    Every NFT has a strict Income Limit — the maximum cumulative income that NFT can generate before renewal. The Income Limit is consumed by **two sources**:

    1. **Marketing rewards** — Sponsor Bonus, Tree Distribution, Matching Bonus, any payouts from your structure's activity.
    2. **DA sales** — every manual or auto-sell of DA reduces your remaining Income Limit by the USDT payout amount.

    When the limit reaches zero, you stop receiving **all** marketing rewards **and** lose the ability to sell DA: on a manual sale, the system cannot credit you the payout; on an auto-sell, 100% of proceeds are routed to the DA Liquidity Pool or to burn (the exact mechanism is determined by DAO settings). To prevent this, renew your NFT — via Autobuy, manual same-level repurchase, or upgrade to a higher tier. Manual repurchase is locked while your remaining limit is above 30% of the original.
  </Accordion>

  <Accordion title="Autobuy (3/3 System)" icon="rotate">
    Activate Autobuy to automatically repurchase the same NFT when its
    limit hits zero. **For Levels 1–8**, the 3/3 counter allows up to
    3 automatic renewals after the original manual purchase — so the
    same NFT level can be active a maximum of 4 times total (1 manual

    * 3 auto). The counter tracks only automatic renewals; the original
      purchase is separate. After all 3 autobuys are used, the function
      locks and you must upgrade or lose rewards. **For Elite (L9–L10)**,
      autobuys are unlimited — the top-tier NFTs renew without a cap.
      All autobuys require sufficient USDT on Regular or Accumulative
      Balance (both can be combined). On L1–L8, the 3/3 counter resets to
      0/3 when a higher-tier NFT is purchased. The unused portion of the
      previous NFT's Income Limit does **not** carry over to the new NFT —
      it is voided.
  </Accordion>

  <Accordion title="Business Sale" icon="handshake">
    Transfer your entire business structure (partner tree and downline) to
    another user through a DAO-authorized process. The transfer is gated by a
    smart-contract **transfer commission**, not a sale price: **the seller
    pays a fixed 500 USDT fee** (DAO-adjustable in the range **0–500 USDT**)
    in order to execute the transfer. The **buyer pays no on-chain commission
    to the protocol** and receives the entire structure on execution. The
    underlying on-chain parameter is `businessTransferFee` (renamed from the
    legacy `businessSalePrice` to reflect its true commission semantics).
    Individual NFT sales without the structure are not supported.
  </Accordion>
</AccordionGroup>

<Warning>
  **Income Limit:** Once your NFT reaches its income limit, you stop receiving
  ALL marketing rewards. Enable Autobuy to prevent this — or manually renew
  when your limit drops below 30%.
</Warning>

### Frozen Balance — Income Protection on First Personal Sales

When a marketing reward from a **first-time purchase** by your direct invitee exceeds your NFT's remaining Income Limit, the excess is not lost — it freezes for 72 hours, giving you a window to upgrade your NFT and claim the funds. This is the core mechanic that protects income from inviting partners into higher-tier NFTs.

<Card title="Full Frozen Balance Mechanics" icon="snowflake" href="/en/frozen-balance">
  Detailed walkthrough of the 72-hour window, interaction with Autobuy, the 70/30 forfeiture split, structure-level cascade, and why repeat purchases from the same invitee are handled differently.
</Card>

## Gift NFTs & Vouchers

<CardGroup cols={2}>
  <Card title="Gift NFTs" icon="gift">
    Non-sellable promotional assets that place users permanently in the marketing
    structure. Cannot be purchased — awarded through promotions or Career Rank
    achievements. Up to 100 per address (DAO-adjustable, current).
  </Card>

  <Card title="Gift Vouchers" icon="ticket">
    User-generated coupons with a smart-contract-enforced minimum of **5 USDT**
    (zero-value vouchers are rejected on-chain), valid for **365 days**. Cover up to
    100% of an NFT purchase. Transferable at 0% commission, except during the
    **last 24 hours** before expiry, when transfers are locked. Cannot combine
    with Accumulative Balance. If unused for the full 365-day lifetime,
    **100% of the voucher value is directed to the DA Liquidity Pool**.
  </Card>
</CardGroup>

## Ambassador & VIP Edition

<CardGroup cols={2}>
  <Card title="Ambassador NFT" icon="crown">
    Limited to **100 units** (Q4 2026). No income limits. Own dedicated reward
    system. Not transferred on Business Sale.
  </Card>

  <Card title="VIP Edition NFT" icon="gem">
    Limited to **100 units** (Q4 2026). Access granted for achieving
    **Leader** Career Rank or higher.
  </Card>
</CardGroup>
