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

# Số Dư Đóng Băng

> Bảo vệ thu nhập marketing cho các lời mời vào cấp cao hơn.

export const FrozenBalanceSimulator = ({lang}) => {
  if (typeof window === 'undefined') {
    return null;
  }
  var L = lang === 'ru' ? 'ru' : 'en';
  var T = ({
    en: {
      title: 'Frozen Balance Simulator',
      interactive: 'Interactive',
      yourNft: 'Your NFT',
      yourNftHint: 'Your current Income Limit',
      inviteeNft: "Invitee's First NFT",
      inviteeNftHint: 'First purchase by direct personal invitee',
      commission: 'Sponsor Commission',
      commissionHint: '30% of NFT price (first purchase)',
      remaining: 'Your Remaining Income Limit',
      remainingHint: 'Available room before compression',
      triggerOff: 'No freeze — commission fits in your limit',
      triggerOffSub: 'Full amount credited immediately under the standard 75 / 20 / 5 split.',
      triggerOn: 'Frozen Balance triggered',
      triggerOnSub: 'Excess above your limit is held for 72 hours while you decide.',
      immediate: 'Credited immediately',
      immediateHint: 'Within your Income Limit · 75 / 20 / 5 split',
      frozen: 'Frozen for 72 h',
      frozenHint: 'Excess above your Income Limit',
      lostHeader: 'Standard split applied to the credited part',
      reg: 'Regular Balance',
      acc: 'Accumulative Balance',
      pool: 'DA Liquidity Pool',
      regHint: 'Withdraw anytime',
      accHint: 'Decay timer',
      poolHint: 'New DA minting',
      timerHeader: '72-hour window',
      timerSub: 'Choose how the freeze resolves',
      tabUpgrade: 'Upgrade NFT',
      tabAutobuy: 'Autobuy fires',
      tabForfeit: 'Miss deadline',
      upgradeTitle: 'You upgrade to a higher tier',
      upgradeBody: 'Frozen funds are released and credited under the same 75 / 20 / 5 split. The released amount is deducted from the new NFT\'s Income Limit.',
      upgradeChoose: 'Pick the NFT you upgrade to',
      upgradeReleased: 'Frozen amount released',
      upgradeNewLimit: 'New NFT Income Limit',
      upgradeRemaining: 'Remaining limit after release',
      upgradeImpossible: 'Pick a tier above your current NFT — and at least the invitee\'s tier — to absorb the frozen amount in full.',
      autobuyTitle: 'Autobuy fires first and refreshes your limit',
      autobuyBody: 'Autobuy repurchases the same-level NFT before the commission is applied. The freshly refreshed Income Limit absorbs the commission first; only the leftover (if any) goes into Frozen Balance.',
      autobuyRefreshed: 'Refreshed Income Limit',
      autobuyAbsorbed: 'Absorbed by autobuy',
      autobuyLeftover: 'Still goes to freeze',
      autobuyNote: 'If your own NFT and refreshed limit are sufficient, Frozen Balance never activates.',
      forfeitTitle: 'You miss the 72-hour window',
      forfeitBody: 'The frozen amount is permanently forfeited and split between the DA Liquidity Pool and your upline sponsor.',
      forfeitPool: 'To DA Liquidity Pool',
      forfeitSponsor: 'To upline sponsor',
      forfeitCascade: 'If your upline sponsor has zero Income Limit, the 30% cascades upward to the next active sponsor. If no upline has an active limit, 100% routes to the DA Liquidity Pool.',
      footerNote: 'Frozen Balance applies only to the first purchase of each direct personal invitee. Repeat purchases that exceed your limit go to Lost Income via standard compression.',
      noFreezeFooter: 'Increase the invitee\'s NFT level — or pick a smaller NFT for yourself — to see the freeze trigger.',
      hours: 'h',
      level: 'L'
    },
    ru: {
      title: 'Симулятор Frozen Balance',
      interactive: 'Интерактив',
      yourNft: 'Ваш NFT',
      yourNftHint: 'Текущий Лимит дохода',
      inviteeNft: 'Первый NFT личника',
      inviteeNftHint: 'Первая покупка прямого приглашённого',
      commission: 'Спонсорская комиссия',
      commissionHint: '30% от цены NFT (первая покупка)',
      remaining: 'Ваш оставшийся Лимит',
      remainingHint: 'Запас перед компрессией',
      triggerOff: 'Фриз не сработал — комиссия укладывается в Лимит',
      triggerOffSub: 'Вся сумма зачисляется сразу по стандарту 75 / 20 / 5.',
      triggerOn: 'Frozen Balance активирован',
      triggerOnSub: 'Излишек над Лимитом удерживается 72 часа — пока вы принимаете решение.',
      immediate: 'Зачисляется сразу',
      immediateHint: 'В рамках вашего Лимита · распределение 75 / 20 / 5',
      frozen: 'Заморожено на 72 ч',
      frozenHint: 'Излишек над вашим Лимитом',
      lostHeader: 'Стандартное распределение зачисленной части',
      reg: 'Обычный баланс',
      acc: 'Накопительный баланс',
      pool: 'Пул ликвидности DA',
      regHint: 'Вывод в любой момент',
      accHint: 'Таймер распада',
      poolHint: 'Минтинг нового DA',
      timerHeader: '72-часовое окно',
      timerSub: 'Выберите, как разрешится фриз',
      tabUpgrade: 'Апгрейд NFT',
      tabAutobuy: 'Автопокупка',
      tabForfeit: 'Пропуск дедлайна',
      upgradeTitle: 'Вы апгрейдите NFT на более высокий уровень',
      upgradeBody: 'Замороженные средства высвобождаются и зачисляются по тому же распределению 75 / 20 / 5. Высвобожденная сумма списывается с Лимита нового NFT.',
      upgradeChoose: 'Выберите NFT, на который апгрейдитесь',
      upgradeReleased: 'Высвобождено из фриза',
      upgradeNewLimit: 'Лимит нового NFT',
      upgradeRemaining: 'Остаток Лимита после высвобождения',
      upgradeImpossible: 'Выберите уровень выше текущего — и не ниже уровня личника — чтобы вместить замороженную сумму.',
      autobuyTitle: 'Сначала срабатывает автопокупка и обновляет Лимит',
      autobuyBody: 'Автопокупка переоткупает NFT того же уровня до того, как применяется комиссия. Новый Лимит сначала впитывает комиссию, и только остаток (если есть) уходит во фриз.',
      autobuyRefreshed: 'Обновлённый Лимит дохода',
      autobuyAbsorbed: 'Поглощено автопокупкой',
      autobuyLeftover: 'Уходит во фриз',
      autobuyNote: 'Если вашего NFT и обновлённого Лимита достаточно — Frozen Balance не активируется вовсе.',
      forfeitTitle: 'Вы пропустили 72-часовой дедлайн',
      forfeitBody: 'Замороженная сумма окончательно теряется и делится между Пулом ликвидности DA и вышестоящим спонсором.',
      forfeitPool: 'В Пул ликвидности DA',
      forfeitSponsor: 'Спонсору в апплайн',
      forfeitCascade: 'Если у спонсора Лимит дохода ноль — 30% передаются дальше вверх по цепочке до первого активного спонсора. Если ни у кого в апплайне нет активного Лимита — все 100% уходят в Пул ликвидности DA.',
      footerNote: 'Frozen Balance работает только на первую покупку каждого прямого приглашённого. Повторные покупки сверх Лимита уходят в Lost Income по стандартной компрессии.',
      noFreezeFooter: 'Поднимите уровень NFT личника — или возьмите меньший NFT для себя — чтобы увидеть срабатывание фриза.',
      hours: 'ч',
      level: 'L'
    }
  })[L];
  var NFT_DATA = [{
    level: 1,
    name: 'GENESIS',
    price: 28,
    limit: 75,
    tier: 'Basic'
  }, {
    level: 2,
    name: 'ADVANCE',
    price: 55,
    limit: 160,
    tier: 'Basic'
  }, {
    level: 3,
    name: 'ASCEND',
    price: 140,
    limit: 375,
    tier: 'Basic'
  }, {
    level: 4,
    name: 'ECLIPSE',
    price: 275,
    limit: 650,
    tier: 'Basic'
  }, {
    level: 5,
    name: 'HYDRO',
    price: 550,
    limit: 1400,
    tier: 'Premium'
  }, {
    level: 6,
    name: 'QUANTUM',
    price: 1100,
    limit: 2700,
    tier: 'Premium'
  }, {
    level: 7,
    name: 'PULSE',
    price: 2200,
    limit: 5800,
    tier: 'Premium'
  }, {
    level: 8,
    name: 'AURORA',
    price: 5500,
    limit: 12800,
    tier: 'Premium'
  }, {
    level: 9,
    name: 'FLAME',
    price: 11000,
    limit: 28000,
    tier: 'Elite'
  }, {
    level: 10,
    name: 'INFINITY',
    price: 24000,
    limit: 70000,
    tier: 'Elite'
  }];
  var fmtUsd = function (n) {
    var digits = Math.abs(n) >= 1000 ? 0 : 2;
    return new Intl.NumberFormat('en-US', {
      style: 'currency',
      currency: 'USD',
      maximumFractionDigits: digits
    }).format(n);
  };
  var [yourLevel, setYourLevel] = useState(2);
  var [inviteeLevel, setInviteeLevel] = useState(7);
  var [scenario, setScenario] = useState('upgrade');
  var [upgradeLevel, setUpgradeLevel] = useState(7);
  var [hour, setHour] = useState(18);
  var hourRef = useRef(null);
  useEffect(function () {
    if (hourRef.current) clearInterval(hourRef.current);
    hourRef.current = setInterval(function () {
      setHour(function (h) {
        var next = h + 1;
        if (next > 72) return 0;
        return next;
      });
    }, 700);
    return function () {
      if (hourRef.current) clearInterval(hourRef.current);
    };
  }, []);
  var yourNft = NFT_DATA[yourLevel - 1];
  var inviteeNft = NFT_DATA[inviteeLevel - 1];
  var commission = inviteeNft.price * 0.30;
  var inLimit = Math.min(commission, yourNft.limit);
  var frozen = Math.max(commission - yourNft.limit, 0);
  var triggered = frozen > 0;
  useEffect(function () {
    if (upgradeLevel <= yourLevel) {
      var next = Math.min(yourLevel + 1, 10);
      setUpgradeLevel(next);
    }
  }, [yourLevel]);
  var upgradeNft = NFT_DATA[upgradeLevel - 1];
  var upgradeRemaining = Math.max(upgradeNft.limit - frozen, 0);
  var upgradeCovers = upgradeNft.limit >= frozen && upgradeLevel > yourLevel;
  var refreshedLimit = yourNft.limit;
  var autobuyAbsorbed = Math.min(commission, refreshedLimit);
  var autobuyLeftover = Math.max(commission - refreshedLimit, 0);
  var forfeitPool = frozen * 0.70;
  var forfeitSponsor = frozen * 0.30;
  var tierColor = function (t) {
    if (t === 'Elite') return {
      color: '#fbbf24',
      bg: 'rgba(251,191,36,0.15)',
      border: 'rgba(251,191,36,0.4)'
    };
    if (t === 'Premium') return {
      color: '#FFFFFF',
      bg: 'rgba(255,255,255,0.12)',
      border: 'rgba(255,255,255,0.3)'
    };
    return {
      color: '#FFFFFF',
      bg: 'rgba(255,255,255,0.08)',
      border: 'rgba(255,255,255,0.18)'
    };
  };
  var nftSelectStyle = {
    backgroundColor: 'rgba(56,56,56,0.7)',
    color: '#FFFFFF',
    border: '1px solid rgba(255,255,255,0.1)',
    borderRadius: '8px',
    padding: '8px 28px 8px 10px',
    fontSize: '13px',
    fontWeight: 600,
    width: '100%',
    outline: 'none',
    cursor: 'pointer',
    WebkitAppearance: 'none',
    appearance: 'none',
    backgroundImage: 'url("data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' width=\'10\' height=\'6\'%3E%3Cpath d=\'M0 0l5 6 5-6z\' fill=\'%23999\'/%3E%3C/svg%3E")',
    backgroundRepeat: 'no-repeat',
    backgroundPosition: 'right 10px center'
  };
  var tabStyle = function (name) {
    var active = scenario === name;
    return {
      flex: '1 1 0%',
      minWidth: '120px',
      padding: '10px 12px',
      borderRadius: '10px',
      fontSize: '12px',
      fontWeight: 700,
      cursor: 'pointer',
      transition: 'all 0.2s',
      backgroundColor: active ? '#FFFFFF' : 'rgba(56,56,56,0.7)',
      color: active ? '#000000' : 'rgba(255,255,255,0.7)',
      border: active ? '1px solid rgba(255,255,255,0.3)' : '1px solid rgba(255,255,255,0.05)'
    };
  };
  var clockSize = 140;
  var clockR = 56;
  var clockCx = clockSize / 2;
  var clockCy = clockSize / 2;
  var hourFrac = hour / 72;
  var hourAngle = -Math.PI / 2 + hourFrac * Math.PI * 2;
  var hourX = clockCx + clockR * 0.78 * Math.cos(hourAngle);
  var hourY = clockCy + clockR * 0.78 * Math.sin(hourAngle);
  var sweepEndX = clockCx + clockR * Math.cos(hourAngle);
  var sweepEndY = clockCy + clockR * Math.sin(hourAngle);
  var largeArc = hourFrac > 0.5 ? 1 : 0;
  var sweepPath = 'M ' + clockCx + ' ' + (clockCy - clockR) + ' A ' + clockR + ' ' + clockR + ' 0 ' + largeArc + ' 1 ' + sweepEndX + ' ' + sweepEndY + ' L ' + clockCx + ' ' + clockCy + ' Z';
  var pulseKf = '@keyframes fbPulse{0%,100%{opacity:0.55;transform:scale(1)}50%{opacity:1;transform:scale(1.08)}}@keyframes fbFlow{0%{stroke-dashoffset:24}100%{stroke-dashoffset:0}}';
  var youColor = tierColor(yourNft.tier);
  var inviteeColor = tierColor(inviteeNft.tier);
  return <div style={{
    backgroundColor: '#000000',
    color: '#FFFFFF',
    border: '1px solid rgba(255,255,255,0.05)'
  }} className="p-6 rounded-xl not-prose">
      <style>{pulseKf}</style>

      {}
      <div className="flex items-center justify-between mb-6">
        <h3 style={{
    color: '#FFFFFF',
    margin: 0
  }} className="text-lg font-serif italic">{T.title}</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)',
    fontSize: '11px',
    padding: '4px 12px',
    borderRadius: '9999px',
    fontWeight: 500
  }}>{T.interactive}</span>
      </div>

      {}
      <div className="grid grid-cols-1 sm:grid-cols-2 gap-4 mb-5">
        {}
        <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.05)'
  }} className="rounded-xl p-4">
          <div className="flex items-center justify-between mb-2">
            <label style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '11px',
    fontWeight: 600,
    textTransform: 'uppercase',
    letterSpacing: '0.05em'
  }}>{T.yourNft}</label>
            <span style={{
    color: youColor.color,
    backgroundColor: youColor.bg,
    border: '1px solid ' + youColor.border,
    fontSize: '9px',
    padding: '2px 8px',
    borderRadius: '9999px',
    fontWeight: 700,
    textTransform: 'uppercase'
  }}>{yourNft.tier}</span>
          </div>
          <select value={yourLevel} onChange={function (e) {
    setYourLevel(Number(e.target.value));
  }} style={nftSelectStyle}>
            {NFT_DATA.map(function (n) {
    return <option key={n.level} value={n.level}>{T.level + n.level + ' — ' + n.name + ' · ' + fmtUsd(n.limit)}</option>;
  })}
          </select>
          <div style={{
    color: 'rgba(255,255,255,0.4)',
    fontSize: '10px',
    marginTop: '6px'
  }}>{T.yourNftHint}: <span style={{
    color: '#FFFFFF',
    fontWeight: 700
  }}>{fmtUsd(yourNft.limit)}</span></div>
        </div>

        {}
        <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.05)'
  }} className="rounded-xl p-4">
          <div className="flex items-center justify-between mb-2">
            <label style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '11px',
    fontWeight: 600,
    textTransform: 'uppercase',
    letterSpacing: '0.05em'
  }}>{T.inviteeNft}</label>
            <span style={{
    color: inviteeColor.color,
    backgroundColor: inviteeColor.bg,
    border: '1px solid ' + inviteeColor.border,
    fontSize: '9px',
    padding: '2px 8px',
    borderRadius: '9999px',
    fontWeight: 700,
    textTransform: 'uppercase'
  }}>{inviteeNft.tier}</span>
          </div>
          <select value={inviteeLevel} onChange={function (e) {
    setInviteeLevel(Number(e.target.value));
  }} style={nftSelectStyle}>
            {NFT_DATA.map(function (n) {
    return <option key={n.level} value={n.level}>{T.level + n.level + ' — ' + n.name + ' · ' + fmtUsd(n.price)}</option>;
  })}
          </select>
          <div style={{
    color: 'rgba(255,255,255,0.4)',
    fontSize: '10px',
    marginTop: '6px'
  }}>{T.inviteeNftHint}</div>
        </div>
      </div>

      {}
      <div className="grid grid-cols-2 gap-3 mb-5">
        <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.05)'
  }} className="rounded-xl p-4">
          <div style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '10px',
    textTransform: 'uppercase',
    letterSpacing: '0.05em'
  }}>{T.commission}</div>
          <div style={{
    color: '#FFFFFF',
    fontSize: '24px',
    fontWeight: 900,
    lineHeight: 1.2,
    marginTop: '4px'
  }}>{fmtUsd(commission)}</div>
          <div style={{
    color: 'rgba(255,255,255,0.4)',
    fontSize: '10px',
    marginTop: '4px'
  }}>{T.commissionHint}</div>
        </div>
        <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.05)'
  }} className="rounded-xl p-4">
          <div style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '10px',
    textTransform: 'uppercase',
    letterSpacing: '0.05em'
  }}>{T.remaining}</div>
          <div style={{
    color: '#FFFFFF',
    fontSize: '24px',
    fontWeight: 900,
    lineHeight: 1.2,
    marginTop: '4px'
  }}>{fmtUsd(yourNft.limit)}</div>
          <div style={{
    color: 'rgba(255,255,255,0.4)',
    fontSize: '10px',
    marginTop: '4px'
  }}>{T.remainingHint}</div>
        </div>
      </div>

      {}
      <div style={{
    backgroundColor: triggered ? 'rgba(96,165,250,0.08)' : 'rgba(74,222,128,0.06)',
    border: '1px solid ' + (triggered ? 'rgba(96,165,250,0.3)' : 'rgba(74,222,128,0.2)'),
    padding: '12px 16px',
    borderRadius: '12px',
    marginBottom: '16px',
    display: 'flex',
    alignItems: 'center',
    gap: '12px'
  }}>
        <div style={{
    width: '32px',
    height: '32px',
    borderRadius: '50%',
    backgroundColor: triggered ? 'rgba(96,165,250,0.18)' : 'rgba(74,222,128,0.15)',
    display: 'flex',
    alignItems: 'center',
    justifyContent: 'center',
    flexShrink: 0,
    fontSize: '16px'
  }}>
          {triggered ? '❄' : '✓'}
        </div>
        <div>
          <div style={{
    color: triggered ? '#60a5fa' : '#4ade80',
    fontSize: '13px',
    fontWeight: 700
  }}>
            {triggered ? T.triggerOn : T.triggerOff}
          </div>
          <div style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '11px',
    marginTop: '2px'
  }}>
            {triggered ? T.triggerOnSub : T.triggerOffSub}
          </div>
        </div>
      </div>

      {}
      <div className="grid grid-cols-1 sm:grid-cols-2 gap-3 mb-5">
        {}
        <div style={{
    backgroundColor: 'rgba(74,222,128,0.06)',
    border: '1px solid rgba(74,222,128,0.25)',
    borderRadius: '12px',
    padding: '16px'
  }}>
          <div className="flex items-center justify-between mb-1">
            <span style={{
    color: 'rgba(255,255,255,0.6)',
    fontSize: '10px',
    textTransform: 'uppercase',
    letterSpacing: '0.05em',
    fontWeight: 600
  }}>{T.immediate}</span>
            <span style={{
    color: '#4ade80',
    backgroundColor: 'rgba(74,222,128,0.12)',
    border: '1px solid rgba(74,222,128,0.3)',
    fontSize: '9px',
    fontWeight: 700,
    padding: '2px 8px',
    borderRadius: '9999px'
  }}>NOW</span>
          </div>
          <div style={{
    color: '#4ade80',
    fontSize: '26px',
    fontWeight: 900
  }}>{fmtUsd(inLimit)}</div>
          <div style={{
    color: 'rgba(255,255,255,0.45)',
    fontSize: '11px',
    marginTop: '4px'
  }}>{T.immediateHint}</div>
        </div>

        {}
        <div style={{
    backgroundColor: triggered ? 'rgba(96,165,250,0.07)' : 'rgba(255,255,255,0.02)',
    border: '1px solid ' + (triggered ? 'rgba(96,165,250,0.3)' : 'rgba(255,255,255,0.08)'),
    borderRadius: '12px',
    padding: '16px',
    opacity: triggered ? 1 : 0.55
  }}>
          <div className="flex items-center justify-between mb-1">
            <span style={{
    color: 'rgba(255,255,255,0.6)',
    fontSize: '10px',
    textTransform: 'uppercase',
    letterSpacing: '0.05em',
    fontWeight: 600
  }}>{T.frozen}</span>
            <span style={{
    color: triggered ? '#60a5fa' : 'rgba(255,255,255,0.4)',
    backgroundColor: triggered ? 'rgba(96,165,250,0.12)' : 'rgba(255,255,255,0.05)',
    border: '1px solid ' + (triggered ? 'rgba(96,165,250,0.3)' : 'rgba(255,255,255,0.1)'),
    fontSize: '9px',
    fontWeight: 700,
    padding: '2px 8px',
    borderRadius: '9999px'
  }}>72{T.hours}</span>
          </div>
          <div style={{
    color: triggered ? '#60a5fa' : 'rgba(255,255,255,0.35)',
    fontSize: '26px',
    fontWeight: 900
  }}>{fmtUsd(frozen)}</div>
          <div style={{
    color: 'rgba(255,255,255,0.45)',
    fontSize: '11px',
    marginTop: '4px'
  }}>{T.frozenHint}</div>
        </div>
      </div>

      {}
      {inLimit > 0 && <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.05)',
    padding: '12px 14px',
    borderRadius: '12px',
    marginBottom: '20px'
  }}>
          <div style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '10px',
    textTransform: 'uppercase',
    letterSpacing: '0.05em',
    marginBottom: '10px'
  }}>{T.lostHeader}</div>
          <div style={{
    display: 'flex',
    height: '8px',
    borderRadius: '4px',
    overflow: 'hidden',
    marginBottom: '10px'
  }}>
            <div style={{
    width: '75%',
    backgroundColor: '#4ade80'
  }} />
            <div style={{
    width: '20%',
    backgroundColor: '#fbbf24'
  }} />
            <div style={{
    width: '5%',
    backgroundColor: '#60a5fa'
  }} />
          </div>
          <div className="grid grid-cols-3 gap-2">
            <div>
              <div style={{
    display: 'flex',
    alignItems: 'center',
    gap: '6px',
    marginBottom: '2px'
  }}>
                <span style={{
    width: '8px',
    height: '8px',
    borderRadius: '2px',
    backgroundColor: '#4ade80',
    display: 'inline-block'
  }} />
                <span style={{
    color: 'rgba(255,255,255,0.6)',
    fontSize: '10px',
    fontWeight: 600
  }}>75% {T.reg}</span>
              </div>
              <div style={{
    color: '#FFFFFF',
    fontSize: '13px',
    fontWeight: 700
  }}>{fmtUsd(inLimit * 0.75)}</div>
              <div style={{
    color: 'rgba(255,255,255,0.35)',
    fontSize: '9px'
  }}>{T.regHint}</div>
            </div>
            <div>
              <div style={{
    display: 'flex',
    alignItems: 'center',
    gap: '6px',
    marginBottom: '2px'
  }}>
                <span style={{
    width: '8px',
    height: '8px',
    borderRadius: '2px',
    backgroundColor: '#fbbf24',
    display: 'inline-block'
  }} />
                <span style={{
    color: 'rgba(255,255,255,0.6)',
    fontSize: '10px',
    fontWeight: 600
  }}>20% {T.acc}</span>
              </div>
              <div style={{
    color: '#FFFFFF',
    fontSize: '13px',
    fontWeight: 700
  }}>{fmtUsd(inLimit * 0.20)}</div>
              <div style={{
    color: 'rgba(255,255,255,0.35)',
    fontSize: '9px'
  }}>{T.accHint}</div>
            </div>
            <div>
              <div style={{
    display: 'flex',
    alignItems: 'center',
    gap: '6px',
    marginBottom: '2px'
  }}>
                <span style={{
    width: '8px',
    height: '8px',
    borderRadius: '2px',
    backgroundColor: '#60a5fa',
    display: 'inline-block'
  }} />
                <span style={{
    color: 'rgba(255,255,255,0.6)',
    fontSize: '10px',
    fontWeight: 600
  }}>5% {T.pool}</span>
              </div>
              <div style={{
    color: '#FFFFFF',
    fontSize: '13px',
    fontWeight: 700
  }}>{fmtUsd(inLimit * 0.05)}</div>
              <div style={{
    color: 'rgba(255,255,255,0.35)',
    fontSize: '9px'
  }}>{T.poolHint}</div>
            </div>
          </div>
        </div>}

      {}
      {triggered && <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.05)',
    padding: '16px',
    borderRadius: '12px'
  }}>
          <div className="flex flex-col sm:flex-row sm:items-center gap-4 mb-4">
            {}
            <div style={{
    flexShrink: 0,
    display: 'flex',
    justifyContent: 'center'
  }}>
              <svg width={clockSize} height={clockSize} viewBox={'0 0 ' + clockSize + ' ' + clockSize}>
                <circle cx={clockCx} cy={clockCy} r={clockR} fill="rgba(96,165,250,0.05)" stroke="rgba(96,165,250,0.2)" strokeWidth="1" />
                <path d={sweepPath} fill="rgba(96,165,250,0.18)" />
                {[0, 18, 36, 54].map(function (t) {
    var a = -Math.PI / 2 + t / 72 * Math.PI * 2;
    var x1 = clockCx + (clockR - 6) * Math.cos(a);
    var y1 = clockCy + (clockR - 6) * Math.sin(a);
    var x2 = clockCx + clockR * Math.cos(a);
    var y2 = clockCy + clockR * Math.sin(a);
    return <line key={t} x1={x1} y1={y1} x2={x2} y2={y2} stroke="rgba(255,255,255,0.3)" strokeWidth="1" />;
  })}
                <line x1={clockCx} y1={clockCy} x2={hourX} y2={hourY} stroke="#60a5fa" strokeWidth="2.5" strokeLinecap="round" />
                <circle cx={clockCx} cy={clockCy} r="3" fill="#60a5fa" />
                <text x={clockCx} y={clockCy - 18} textAnchor="middle" fill="rgba(255,255,255,0.45)" style={{
    fontSize: '9px',
    textTransform: 'uppercase',
    letterSpacing: '0.1em'
  }}>72{T.hours}</text>
                <text x={clockCx} y={clockCy + 22} textAnchor="middle" fill="#FFFFFF" style={{
    fontSize: '15px',
    fontWeight: 800
  }}>{hour}{T.hours}</text>
              </svg>
            </div>
            <div style={{
    flex: '1 1 0%'
  }}>
              <div style={{
    color: '#FFFFFF',
    fontSize: '14px',
    fontWeight: 700,
    marginBottom: '4px'
  }}>{T.timerHeader}</div>
              <div style={{
    color: 'rgba(255,255,255,0.55)',
    fontSize: '12px',
    marginBottom: '12px'
  }}>{T.timerSub}</div>
              <div className="flex flex-wrap gap-2">
                <button onClick={function () {
    setScenario('upgrade');
  }} style={tabStyle('upgrade')}>{T.tabUpgrade}</button>
                <button onClick={function () {
    setScenario('autobuy');
  }} style={tabStyle('autobuy')}>{T.tabAutobuy}</button>
                <button onClick={function () {
    setScenario('forfeit');
  }} style={tabStyle('forfeit')}>{T.tabForfeit}</button>
              </div>
            </div>
          </div>

          {}
          {scenario === 'upgrade' && <div style={{
    borderTop: '1px solid rgba(255,255,255,0.05)',
    paddingTop: '14px'
  }}>
              <div style={{
    color: '#FFFFFF',
    fontSize: '13px',
    fontWeight: 700,
    marginBottom: '4px'
  }}>{T.upgradeTitle}</div>
              <div style={{
    color: 'rgba(255,255,255,0.55)',
    fontSize: '12px',
    lineHeight: 1.5,
    marginBottom: '12px'
  }}>{T.upgradeBody}</div>

              <div style={{
    marginBottom: '12px'
  }}>
                <label style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '10px',
    fontWeight: 600,
    textTransform: 'uppercase',
    letterSpacing: '0.05em',
    marginBottom: '6px',
    display: 'block'
  }}>{T.upgradeChoose}</label>
                <select value={upgradeLevel} onChange={function (e) {
    setUpgradeLevel(Number(e.target.value));
  }} style={nftSelectStyle}>
                  {NFT_DATA.filter(function (n) {
    return n.level > yourLevel;
  }).map(function (n) {
    return <option key={n.level} value={n.level}>{T.level + n.level + ' — ' + n.name + ' · ' + fmtUsd(n.price)}</option>;
  })}
                </select>
              </div>

              <div className="grid grid-cols-1 sm:grid-cols-3 gap-2">
                <div style={{
    backgroundColor: 'rgba(74,222,128,0.06)',
    border: '1px solid rgba(74,222,128,0.2)',
    borderRadius: '10px',
    padding: '10px 12px'
  }}>
                  <div style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '9px',
    textTransform: 'uppercase',
    letterSpacing: '0.05em'
  }}>{T.upgradeReleased}</div>
                  <div style={{
    color: '#4ade80',
    fontSize: '16px',
    fontWeight: 800,
    marginTop: '2px'
  }}>{fmtUsd(frozen)}</div>
                </div>
                <div style={{
    backgroundColor: 'rgba(255,255,255,0.04)',
    border: '1px solid rgba(255,255,255,0.08)',
    borderRadius: '10px',
    padding: '10px 12px'
  }}>
                  <div style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '9px',
    textTransform: 'uppercase',
    letterSpacing: '0.05em'
  }}>{T.upgradeNewLimit}</div>
                  <div style={{
    color: '#FFFFFF',
    fontSize: '16px',
    fontWeight: 800,
    marginTop: '2px'
  }}>{fmtUsd(upgradeNft.limit)}</div>
                </div>
                <div style={{
    backgroundColor: 'rgba(255,255,255,0.04)',
    border: '1px solid rgba(255,255,255,0.08)',
    borderRadius: '10px',
    padding: '10px 12px'
  }}>
                  <div style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '9px',
    textTransform: 'uppercase',
    letterSpacing: '0.05em'
  }}>{T.upgradeRemaining}</div>
                  <div style={{
    color: '#FFFFFF',
    fontSize: '16px',
    fontWeight: 800,
    marginTop: '2px'
  }}>{fmtUsd(upgradeRemaining)}</div>
                </div>
              </div>

              {!upgradeCovers && <div style={{
    marginTop: '10px',
    color: 'rgba(251,191,36,0.85)',
    fontSize: '11px'
  }}>{T.upgradeImpossible}</div>}
            </div>}

          {scenario === 'autobuy' && <div style={{
    borderTop: '1px solid rgba(255,255,255,0.05)',
    paddingTop: '14px'
  }}>
              <div style={{
    color: '#FFFFFF',
    fontSize: '13px',
    fontWeight: 700,
    marginBottom: '4px'
  }}>{T.autobuyTitle}</div>
              <div style={{
    color: 'rgba(255,255,255,0.55)',
    fontSize: '12px',
    lineHeight: 1.5,
    marginBottom: '12px'
  }}>{T.autobuyBody}</div>
              <div className="grid grid-cols-1 sm:grid-cols-3 gap-2">
                <div style={{
    backgroundColor: 'rgba(255,255,255,0.04)',
    border: '1px solid rgba(255,255,255,0.08)',
    borderRadius: '10px',
    padding: '10px 12px'
  }}>
                  <div style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '9px',
    textTransform: 'uppercase',
    letterSpacing: '0.05em'
  }}>{T.autobuyRefreshed}</div>
                  <div style={{
    color: '#FFFFFF',
    fontSize: '16px',
    fontWeight: 800,
    marginTop: '2px'
  }}>{fmtUsd(refreshedLimit)}</div>
                </div>
                <div style={{
    backgroundColor: 'rgba(74,222,128,0.06)',
    border: '1px solid rgba(74,222,128,0.2)',
    borderRadius: '10px',
    padding: '10px 12px'
  }}>
                  <div style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '9px',
    textTransform: 'uppercase',
    letterSpacing: '0.05em'
  }}>{T.autobuyAbsorbed}</div>
                  <div style={{
    color: '#4ade80',
    fontSize: '16px',
    fontWeight: 800,
    marginTop: '2px'
  }}>{fmtUsd(autobuyAbsorbed)}</div>
                </div>
                <div style={{
    backgroundColor: autobuyLeftover > 0 ? 'rgba(96,165,250,0.06)' : 'rgba(255,255,255,0.04)',
    border: '1px solid ' + (autobuyLeftover > 0 ? 'rgba(96,165,250,0.25)' : 'rgba(255,255,255,0.08)'),
    borderRadius: '10px',
    padding: '10px 12px'
  }}>
                  <div style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '9px',
    textTransform: 'uppercase',
    letterSpacing: '0.05em'
  }}>{T.autobuyLeftover}</div>
                  <div style={{
    color: autobuyLeftover > 0 ? '#60a5fa' : 'rgba(255,255,255,0.6)',
    fontSize: '16px',
    fontWeight: 800,
    marginTop: '2px'
  }}>{fmtUsd(autobuyLeftover)}</div>
                </div>
              </div>
              <div style={{
    marginTop: '10px',
    color: 'rgba(255,255,255,0.45)',
    fontSize: '11px',
    fontStyle: 'italic'
  }}>{T.autobuyNote}</div>
            </div>}

          {scenario === 'forfeit' && <div style={{
    borderTop: '1px solid rgba(255,255,255,0.05)',
    paddingTop: '14px'
  }}>
              <div style={{
    color: '#f87171',
    fontSize: '13px',
    fontWeight: 700,
    marginBottom: '4px'
  }}>{T.forfeitTitle}</div>
              <div style={{
    color: 'rgba(255,255,255,0.55)',
    fontSize: '12px',
    lineHeight: 1.5,
    marginBottom: '12px'
  }}>{T.forfeitBody}</div>

              {}
              <div style={{
    display: 'flex',
    height: '10px',
    borderRadius: '5px',
    overflow: 'hidden',
    marginBottom: '10px'
  }}>
                <div style={{
    width: '70%',
    backgroundColor: '#60a5fa'
  }} />
                <div style={{
    width: '30%',
    backgroundColor: '#f87171'
  }} />
              </div>

              <div className="grid grid-cols-1 sm:grid-cols-2 gap-2">
                <div style={{
    backgroundColor: 'rgba(96,165,250,0.06)',
    border: '1px solid rgba(96,165,250,0.25)',
    borderRadius: '10px',
    padding: '10px 12px'
  }}>
                  <div style={{
    display: 'flex',
    alignItems: 'center',
    gap: '6px'
  }}>
                    <span style={{
    width: '8px',
    height: '8px',
    borderRadius: '2px',
    backgroundColor: '#60a5fa',
    display: 'inline-block'
  }} />
                    <span style={{
    color: 'rgba(255,255,255,0.6)',
    fontSize: '10px',
    fontWeight: 600
  }}>70% — {T.forfeitPool}</span>
                  </div>
                  <div style={{
    color: '#60a5fa',
    fontSize: '18px',
    fontWeight: 800,
    marginTop: '4px'
  }}>{fmtUsd(forfeitPool)}</div>
                </div>
                <div style={{
    backgroundColor: 'rgba(248,113,113,0.06)',
    border: '1px solid rgba(248,113,113,0.25)',
    borderRadius: '10px',
    padding: '10px 12px'
  }}>
                  <div style={{
    display: 'flex',
    alignItems: 'center',
    gap: '6px'
  }}>
                    <span style={{
    width: '8px',
    height: '8px',
    borderRadius: '2px',
    backgroundColor: '#f87171',
    display: 'inline-block'
  }} />
                    <span style={{
    color: 'rgba(255,255,255,0.6)',
    fontSize: '10px',
    fontWeight: 600
  }}>30% — {T.forfeitSponsor}</span>
                  </div>
                  <div style={{
    color: '#f87171',
    fontSize: '18px',
    fontWeight: 800,
    marginTop: '4px'
  }}>{fmtUsd(forfeitSponsor)}</div>
                </div>
              </div>
              <div style={{
    marginTop: '10px',
    color: 'rgba(255,255,255,0.45)',
    fontSize: '11px'
  }}>{T.forfeitCascade}</div>
            </div>}
        </div>}

      {}
      <p style={{
    color: 'rgba(255,255,255,0.4)',
    fontSize: '11px',
    lineHeight: 1.6,
    marginTop: '14px',
    marginBottom: 0
  }}>
        {triggered ? T.footerNote : T.noFreezeFooter}
      </p>
    </div>;
};

Số Dư Đóng Băng là cơ chế bảo vệ thu nhập marketing của bạn trong hai tình huống liên quan: khi **người bạn trực tiếp mời cá nhân thực hiện giao dịch mua NFT đầu tiên của họ**, hoặc khi **Autobuy của người được mời kích hoạt** (gia hạn tự động NFT của họ, tạo ra Sponsor Bonus rebuy 20% cho bạn), và hoa hồng phát sinh vượt quá Giới Hạn Thu Nhập còn lại của NFT của bạn.

Nếu không có Số Dư Đóng Băng, phần vượt quá đó sẽ bị mất do nén — chuyển lên cấu trúc trên. Số Dư Đóng Băng đóng băng phần đó trong **72 giờ** và cho bạn một khoảng thời gian để nâng cấp NFT và nhận toàn bộ số tiền.

<Info>
  Đây là mạng lưới an toàn marketing cho cả các lời mời "lên cấp" và doanh thu định kỳ từ những người được mời đã thiết lập: bạn có thể tự tin mời đối tác vào bất kỳ cấp NFT nào và tin tưởng vào các lần gia hạn Autobuy của họ, mà không lo hoa hồng sẽ bị mất vì Giới Hạn Thu Nhập của bạn quá nhỏ.
</Info>

## Khi Nào Số Dư Đóng Băng Kích Hoạt

Số Dư Đóng Băng kích hoạt **chỉ khi tất cả ba điều kiện được đáp ứng**:

<Steps>
  <Step title="Người mua là người bạn trực tiếp mời cá nhân">
    Không phải người được spillover, không phải đối tác tuyến dưới ở năm cấp sâu — cụ thể là người mà bạn đã mời cá nhân vào cấu trúc của mình.
  </Step>

  <Step title="Đó là giao dịch mua NFT đầu tiên của người được mời đó hoặc Autobuy của họ">
    Số Dư Đóng Băng bao phủ hai sự kiện từ người được mời của bạn: **giao dịch mua NFT đầu tiên** của họ và **Autobuy** của họ (gia hạn tự động NFT của cùng người được mời, trả cho bạn Sponsor Bonus rebuy 20%). Các giao dịch mua lặp lại thủ công và nâng cấp thủ công của cùng một người được mời **không** được bao phủ — xem phần Thu Nhập Bị Mất bên dưới.
  </Step>

  <Step title="Hoa hồng vượt quá Giới Hạn Thu Nhập còn lại của bạn">
    Nếu Giới Hạn Thu Nhập còn lại của bạn đủ lớn để hấp thụ toàn bộ hoa hồng, không có sự đóng băng nào xảy ra — mọi thứ được ghi có bình thường.
  </Step>
</Steps>

## Cách Phân Chia Số Tiền

Khi Số Dư Đóng Băng kích hoạt, hợp đồng thông minh chia hoa hồng thành hai phần:

* **Trong phạm vi Giới Hạn Thu Nhập còn lại của bạn** — được ghi có ngay lập tức theo phân chia tiêu chuẩn: **75% Số Dư Thông Thường / 20% Số Dư Tích Lũy / 5% Pool Thanh Khoản DA**.
* **Phần vượt quá Giới Hạn Thu Nhập của bạn** — được đặt vào Số Dư Đóng Băng với **bộ đếm thời gian 72 giờ**.

## Điều Gì Xảy Ra Trong 72 Giờ

Bạn có ba kịch bản:

<Tabs>
  <Tab title="Bạn nâng cấp NFT của mình">
    Bạn mua một NFT cấp cao hơn (với Giới Hạn Thu Nhập lớn hơn). Tiền đóng băng sẽ tự động được giải phóng và ghi có theo cùng phân chia **75/20/5**. Số tiền được giải phóng được khấu trừ từ Giới Hạn Thu Nhập của NFT **mới**.

    **Ví dụ.** Giới Hạn Thu Nhập của NFT của bạn = 160 USDT. Người được bạn mời mua một NFT giá 2.200 USDT; hoa hồng = 660 USDT. 160 USDT được ghi có ngay lập tức (75/20/5). 500 USDT đi vào Số Dư Đóng Băng. Bạn nâng cấp lên Eclipse (Giới Hạn Thu Nhập 650 USDT). 500 USDT được giải phóng và ghi có. Giới Hạn Thu Nhập còn lại mới: 650 − 500 = **150 USDT**.
  </Tab>

  <Tab title="Autobuy đã được kích hoạt">
    Nếu Autobuy đang hoạt động, thứ tự thay đổi. Autobuy kích hoạt **trước**, mua lại NFT cùng cấp và làm mới Giới Hạn Thu Nhập của bạn. Hoa hồng sau đó được đánh giá lại so với giới hạn đã làm mới, phần trong giới hạn được ghi có, và **chỉ phần còn lại** (nếu có) đi vào Số Dư Đóng Băng với bộ đếm thời gian 72 giờ.

    Điều này có nghĩa: nếu NFT của riêng bạn và Giới Hạn Thu Nhập đã làm mới đủ sau khi Autobuy, Số Dư Đóng Băng có thể không kích hoạt.
  </Tab>

  <Tab title="Bạn lỡ hạn chót">
    Nếu bạn không nâng cấp trong vòng 72 giờ và Autobuy không bao phủ phần vượt quá, tiền đóng băng sẽ **bị tịch thu vĩnh viễn** và phân phối lại:

    * **70%** được chuyển vào Pool Thanh khoản DA để đúc DA mới.
    * **30%** được chuyển cho người tài trợ tuyến trên trực tiếp của bạn.

    Quy tắc cascade giống với cascade phân rã Số Dư Tích Lũy: nếu Giới Hạn Thu Nhập của người tài trợ tuyến trên bằng 0, 30% sẽ chuyển tiếp lên chuỗi đến người tham gia đầu tiên có Giới Hạn Thu Nhập đang hoạt động. Nếu không có tuyến trên nào có giới hạn đang hoạt động, toàn bộ 100% sẽ được chuyển vào Pool Thanh khoản DA.
  </Tab>
</Tabs>

## Mua Lặp Lại Từ Cùng Một Người Được Mời

Số Dư Đóng Băng bảo vệ hai sự kiện của mỗi người được mời cá nhân: **giao dịch mua NFT đầu tiên** của họ và **Autobuy** của họ (gia hạn tự động NFT của cùng người được mời — Sponsor Bonus rebuy 20%). Các giao dịch mua lặp lại **thủ công** và nâng cấp thủ công của cùng một người được mời **không** được bao phủ: nếu Giới Hạn Thu Nhập của bạn không thể hấp thụ hoa hồng, phần vượt quá sẽ được đánh dấu là **Thu Nhập Bị Mất** và phân phối theo quy tắc nén tiêu chuẩn — chuyển lên cấu trúc trên đến người tham gia tiếp theo có Giới Hạn Thu Nhập đang hoạt động.

<Warning>
  Nếu người được mời thực hiện nhiều rebuy/nâng cấp thủ công trong khi **Giới Hạn Thu Nhập của bạn đã cạn kiệt**, mỗi giao dịch mua thủ công như vậy sẽ bỏ qua bạn thông qua nén. Hãy giữ Giới Hạn Thu Nhập của bạn hoạt động — thông qua Autobuy của chính bạn hoặc gia hạn thủ công — để bạn không bị mất thu nhập từ các đối tác đã thiết lập.
</Warning>

## Kịch Bản Khối Lượng Cao — Cascade Qua Cấu Trúc

Số Dư Đóng Băng **chỉ** bảo vệ hoa hồng từ giao dịch mua lần đầu của người được mời trực tiếp hoặc Autobuy của họ. Nhưng trong một cấu trúc lớn, hầu hết thu nhập của bạn không đến từ doanh số cá nhân — nó đến từ độ sâu, thông qua phân phối theo cây (4% ở cấp 9 × hơn 500 vị trí có thể mang lại hàng chục nghìn USDT trong một chu kỳ tích lũy).

Khi khối lượng đó đến và Giới Hạn Thu Nhập của bạn là 1.100 USDT với Autobuy có khả năng làm mới tối đa ba lần (3/3 trên các cấp L1–L8), hệ thống:

1. Ghi có cho bạn 1.100 USDT theo phân chia tiêu chuẩn.
2. Kích hoạt Autobuy, làm mới Giới Hạn, ghi có thêm 1.100 USDT.
3. Lặp lại tối đa 3 lần.
4. **Tất cả khối lượng còn lại bị nén** — chuyển lên trên đến người tham gia tiếp theo có Giới Hạn Thu Nhập đang hoạt động.

Số Dư Đóng Băng **không** kích hoạt trong kịch bản này vì nguồn không phải là giao dịch mua lần đầu hoặc Autobuy của người được mời trực tiếp mà là phân phối theo cây từ độ sâu.

<Info>
  Bài học cho quy mô: ở khối lượng mạng lưới lớn, đòn bẩy chính là **cấp NFT của chính bạn**. Các cấp cao hơn mang Giới Hạn Thu Nhập lớn hơn và giảm tỷ lệ bị mất do nén. Các cấp Elite (L9–L10), với Autobuy không giới hạn, giải quyết điều này một cách hệ thống.
</Info>

<FrozenBalanceSimulator lang="vi" />

## Tham Số Số Dư Đóng Băng (On-Chain)

| Tham số                                | Giá trị                                                                  | Khả năng thay đổi                    |
| -------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------ |
| Cửa sổ đóng băng                       | 72 giờ                                                                   | Bất biến                             |
| Tỷ lệ Pool Thanh khoản DA khi tịch thu | 70%                                                                      | DAO có thể điều chỉnh (50–100%)      |
| Tỷ lệ tài trợ tuyến trên khi tịch thu  | 30%                                                                      | DAO có thể điều chỉnh (0–30%)        |
| Kích hoạt                              | Giao dịch mua đầu tiên hoặc Autobuy của người được mời cá nhân trực tiếp | Bất biến                             |
| Phân phối khi giải phóng               | 75/20/5                                                                  | Phân chia tiêu chuẩn — xem Kiến trúc |

Xem thêm: [Giới Hạn Thu Nhập trên trang Hệ Sinh Thái NFT](/vi/nft-ecosystem), [Ưu Tiên Thanh Toán trong Kiến Trúc](/vi/architecture).
