> ## 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.

# Écosystème NFT

> 10 niveaux de 28 à 24 000 USDT.

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 · Accès RWA & FinPro
  </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 · Profondeur maximale, cycles les plus courts
  </Card>
</CardGroup>

Posséder un NFT est obligatoire pour participer au marketing, miner du DA et accéder aux outils financiers. Un seul NFT actif par compte — la mise à niveau remplace automatiquement le précédent.

<NftTierExplorer />

## Limites de Revenus & Renouvellement Automatique

<AccordionGroup>
  <Accordion title="Comment Fonctionnent les Limites de Revenus" icon="gauge-high">
    Chaque NFT possède une Limite de Revenus stricte — le revenu cumulatif maximal que ce NFT peut générer avant son renouvellement. La Limite de Revenus est consommée par **deux sources** :

    1. **Récompenses de marketing** — Bonus de Sponsor, Distribution de l'Arbre, Bonus de Matching, tout versement issu de l'activité de votre structure.
    2. **Ventes de DA** — chaque vente manuelle ou auto-vente de DA réduit votre Limite de Revenus restante du montant payé en USDT.

    Lorsque la limite atteint zéro, vous cessez de recevoir **toutes** les récompenses marketing **et** perdez la possibilité de vendre du DA : sur une vente manuelle, le système ne peut pas créditer le paiement ; sur une auto-vente, 100 % du produit est dirigé vers le Pool de Liquidité du DA ou vers le brûlage (le mécanisme exact est déterminé par les paramètres du DAO). Pour l'éviter, renouvelez votre NFT — via Autobuy, rachat manuel au même niveau, ou mise à niveau vers un niveau supérieur. Le rachat manuel est verrouillé tant que votre limite restante est supérieure à 30 % de la limite d'origine.
  </Accordion>

  <Accordion title="Autobuy (Système 3/3)" icon="rotate">
    Activez Autobuy pour racheter automatiquement le même NFT
    lorsque sa limite atteint zéro. **Pour les Niveaux 1–8**, le compteur 3/3 autorise jusqu'à
    3 renouvellements automatiques après l'achat manuel initial — ainsi, le
    même niveau de NFT peut être actif au maximum 4 fois au total (1 manuel

    * 3 automatiques). Le compteur ne suit que les renouvellements automatiques ; l'achat
      initial est comptabilisé séparément. Une fois les 3 autobuys consommés, la fonction
      se verrouille et vous devez monter en niveau ou perdre vos récompenses. **Pour Elite (L9–L10)**,
      les autobuys sont illimités — les NFT de plus haut niveau se renouvellent sans plafond.
      Tous les autobuys nécessitent suffisamment d'USDT sur le Solde Régulier ou Cumulatif
      (les deux peuvent être combinés). Sur les L1–L8, le compteur 3/3 est remis à
      0/3 lors de l'achat d'un NFT de niveau supérieur. La portion non utilisée de la
      Limite de Revenus du NFT précédent **n'est pas** reportée sur le nouveau NFT —
      elle est annulée.
  </Accordion>

  <Accordion title="Vente de Business" icon="handshake">
    Transférez l'intégralité de votre structure commerciale (arbre de partenaires et downline) à
    un autre utilisateur via une procédure autorisée par le DAO. Le transfert est soumis à une
    **commission de transfert** au niveau du smart contract, et non à un prix de vente : **le vendeur
    paie des frais fixes de 500 USDT** (ajustables par le DAO dans la fourchette **0–500 USDT**)
    afin d'exécuter le transfert. L'**acheteur ne paie aucune commission on-chain
    au protocole** et reçoit la totalité de la structure à l'exécution. Le
    paramètre on-chain sous-jacent est `businessTransferFee` (renommé depuis l'ancien
    `businessSalePrice` afin de refléter sa véritable nature de commission).
    Les ventes individuelles de NFT sans la structure ne sont pas prises en charge.
  </Accordion>
</AccordionGroup>

<Warning>
  **Limite de Revenus :** Une fois que votre NFT atteint sa limite de revenus, vous cessez de recevoir
  TOUTES les récompenses marketing. Activez Autobuy pour l'éviter — ou renouvelez manuellement
  lorsque votre limite passe sous 30 %.
</Warning>

### Solde Gelé — Protection des Revenus sur les Premières Ventes Personnelles

Lorsqu'une récompense marketing issue d'un **premier achat** par votre invité direct dépasse la Limite de Revenus restante de votre NFT, l'excédent n'est pas perdu — il est gelé pendant 72 heures, vous laissant une fenêtre pour mettre à niveau votre NFT et réclamer les fonds. C'est le mécanisme central qui protège les revenus en cas d'invitation de partenaires vers des NFT de niveau supérieur.

<Card title="Mécanique Complète du Solde Gelé" icon="snowflake" href="/fr/frozen-balance">
  Explication détaillée de la fenêtre de 72 heures, de l'interaction avec Autobuy, du partage de pénalité 70/30, de la cascade au niveau de la structure, et des raisons pour lesquelles les achats répétés du même invité sont traités différemment.
</Card>

## NFT Cadeaux & Vouchers

<CardGroup cols={2}>
  <Card title="NFT Cadeaux" icon="gift">
    Actifs promotionnels non revendables qui placent les utilisateurs de manière permanente dans la structure
    marketing. Ne peuvent pas être achetés — attribués via des promotions ou des
    accomplissements de Rang de Carrière. Jusqu'à 100 par adresse (ajustable par le DAO, valeur actuelle).
  </Card>

  <Card title="Vouchers Cadeaux" icon="ticket">
    Bons générés par les utilisateurs avec un minimum imposé par smart contract de **5 USDT**
    (les vouchers de valeur nulle sont rejetés on-chain), valides pendant **365 jours**. Couvrent jusqu'à
    100 % d'un achat de NFT. Transférables à 0 % de commission, sauf durant les
    **24 dernières heures** avant expiration, où les transferts sont bloqués. Ne peuvent pas être combinés
    avec le Solde Cumulatif. S'ils restent inutilisés pendant les 365 jours,
    **100 % de la valeur du voucher est dirigée vers le Pool de Liquidité du DA**.
  </Card>
</CardGroup>

## Édition Ambassadeur & VIP

<CardGroup cols={2}>
  <Card title="NFT Ambassadeur" icon="crown">
    Limité à **100 unités** (T4 2026). Sans limites de revenus. Système de récompenses
    propre et dédié. Non transféré lors d'une Vente de Business.
  </Card>

  <Card title="NFT Édition VIP" icon="gem">
    Limité à **100 unités** (T4 2026). Accès accordé pour l'obtention du
    Rang de Carrière **Leader** ou supérieur.
  </Card>
</CardGroup>
