METALS
AuOroLoading…
AgPlata
PtPlatino
PdPaladio
RhRodio
🛢Oil (WTI)
AuOro
AgPlata
PtPlatino
PdPaladio
RhRodio
🛢Oil (WTI)

☕ Invitar un café

Enjoying this Platino analysis? Support further development with a coffee!

Your support helps maintain and improve this Platino analysis tool. Thank you! ❤️
Payment processed securely via PayPal as a donation.

Pt Precio del Platino Hoy (XPT/USD)

Live spot price · Historical charts · Inflation-adjusted price · Autocatalyst & Hydrogen demand · Physical buy calculator

Precio en Vivo 18 Divisas Gráfico 5 Años Siempre Gratis
Pt
Precio al Contado del Platino (XPT/USD) · LIVE
Loading…
per troy oz · Actualizado cada 5 min · Fuente: Yahoo Finance
EUR
GBP
CHF
JPY
CAD
CNY
Precio del Platino en Todas las Unidades
per troy oz (31.1035 g)
por gramo
por kilogramo
por tola (11.664 g)
Platino Price Chart (XPT/USD)
Current Price
52-Week High
$1,108
52-Week Low
$876
Máximo Histórico
$2,308 (Mar 2008)
Inflation-Adjusted Platino Price

Platino's all-time high of $2,308/oz (March 2008) equals approximately $3,400 in 2026 dollars. At current prices (~$980), platinum trades at a significant discount to its inflation-adjusted ATH – a key argument for the platinum investment thesis.

Platino Price Seasonality (Avg. Monthly Returns)

Platino historically shows strength in January–March (auto industry restocking) and October. Summer months (June–August) tend to be weaker due to reduced industrial activity. Source: WPIC historical data 2000–2025.

Platino Industrial Demand – Key Sectors (2025)
Sector Demand (koz) Share Trend Visual
🚗 Autocatalysts (Gasoline) 1,050 28% → Stable
🚌 Autocatalysts (Diesel) 870 23% ↓ Declining
💎 Jewellery (Japan, China) 560 15% → Stable
🔬 Chemical Industry (catalysts) 450 12% ↑ Growing
Hydrogen Fuel Cells 180 5% ↑↑ Fast Growing
🖥️ Electronics & Glass 260 7% ↑ Growing
💊 Medical (cisplatin, devices) 120 3% ↑ Growing
📦 Investment (ETF + bars) 260 7% ↑ Growing

Source: World Platino Investment Council (WPIC) Platino Quarterly Q4 2025. Total demand ~3,750 koz.

Global Platino Mine Supply – País Concentration (2025)

Platino supply is uniquely concentrated – over 70% comes from a single country. This geographic concentration creates a significant geopolitical risk premium.

🇿🇦 South Africa
73%
🇷🇺 Russia
11%
🇿🇼 Zimbabwe
8%
🇨🇦 Canada
4%
🌍 Other
4%

Source: World Platino Investment Council (WPIC), 2025. Total mine supply ~5,500 koz.

Platino ETF Holdings (Top Funds)
Aberdeen Std. Phys. Plat.
PPLT (NYSE Arca)
~470 koz
▲ +2.1% YTD
WisdomTree Platino
PHPT (LSE)
~185 koz
▲ +1.4% YTD
iShares Platino Trust
IPLT (NYSE)
~95 koz
▼ -0.8% YTD
Sprott Phys. Platino
SPPP (NYSE Arca)
~62 koz
▲ +3.2% YTD

Source: WPIC, fund prospectuses. Holdings as of Q4 2025 estimates.

Hydrogen Economy – Platino Demand Outlook

Projected platinum demand from hydrogen fuel cells and electrolysers (koz/year). Source: WPIC, BloombergNEF, IEA Hydrogen Report 2025.

Physical Platino Buy Calculator

How much physical platinum can you buy? Ingrese un monto y elija su divisa.

Pt Platino (troy oz)
Au Oro equivalent
ℹ️ Rate info
Platino Coins & Bars – Estimated Retail Prices

Estimated retail prices including typical dealer premiums. Actual prices may vary.

Preguntas Frecuentes – Precio del Platino
What is the platinum price today?
The current platinum spot price (XPT/USD) is displayed live at the top of this page, updated every 5 minutes from Yahoo Finance (NYMEX Platino Futures, PL=F). Platino is quoted in USD por onza troy and automatically converted to EUR, GBP, CHF and 15 other currencies using real-time exchange rates from the Frankfurter API (ECB data).
Why is platinum currently cheaper than gold?
Platino traded above gold for most of the 20th century. The reversal since 2015 is primarily driven by the decline of diesel vehicles in Europe (diesel autocatalysts use platinum), the rise of gasoline and hybrid vehicles (which use palladium instead), and reduced investment demand. Many analysts consider the current gold-to-platinum premium a historical anomaly that may reverse as hydrogen fuel cell demand grows.
What is platinum used for?
Approximately 51% of annual platinum demand comes from autocatalysts – catalytic converters that reduce harmful emissions in gasoline and diesel vehicles. Platino is also essential for hydrogen fuel cells (PEM technology), jewellery (especially in Japan and China), chemical industry catalysts, glass manufacturing (LCD screens, fibre optic cables), and medical devices including the cancer treatment drug cisplatin.
Will platinum benefit from the hydrogen economy?
Yes – platinum is the primary catalyst in hydrogen fuel cells (PEM fuel cells) and in electrolysers for green hydrogen production. Each fuel cell stack requires 30–60 gramos of platinum. As governments invest heavily in hydrogen infrastructure (EU Hydrogen Strategy, US Inflation Reduction Act, Japan's Green Growth Strategy), demand for platinum from this sector is projected to grow from ~180,000 oz today to potentially 500,000–1,000,000 oz per year by 2030 (WPIC, BloombergNEF).
How rare is platinum compared to gold?
Platino is approximately 30 times rarer than gold in the Earth's crust. Annual platinum mine production is around 5,500,000 onzas troy, compared to approximately 100,000,000 onzas troy of gold. Furthermore, over 70% of global platinum supply comes from a single country – South Africa – making supply highly concentrated and sensitive to geopolitical and operational disruptions.
What is the platinum price por gramo?
The platinum price por gramo is calculated by dividing the troy ounce price by 31.1035. Use the unit converter above to see the live platinum price por gramo, kilogram and tola in USD and EUR. At a platinum price of $980/oz, the price por gramo is approximately $31.50.

Precio del Platino Hoy — Precio al Contado en Vivo y Análisis

Numexo.io proporciona el precio del platino en tiempo real (XPT/USD). El platino es uno de los metales más raros del mundo, producido principalmente en Sudáfrica (aproximadamente el 70% de la producción mundial) y Rusia. Es esencial en catalizadores de automóviles, pilas de combustible de hidrógeno y joyería de alta gama.

Platino vs Oro — Dinámica de Precios

Históricamente, el platino cotizaba con una prima respecto al oro debido a su mayor rareza. Desde 2015, esta relación se ha invertido, con el platino cotizando con un descuento significativo respecto al oro. Esta divergencia refleja la caída de la demanda de catalizadores diésel tras el escándalo Volkswagen de 2015 y el auge de los vehículos eléctricos.

`; }).join(''); } // ── LIGHTWEIGHT CHARTS ────────────────────────────────────────── // Historical platinum los datos de precios (XPT/USD) – approximate values const DATA_90D = [{"time":"2025-12-03","value":952},{"time":"2025-12-04","value":958},{"time":"2025-12-05","value":945},{"time":"2025-12-08","value":961},{"time":"2025-12-09","value":968},{"time":"2025-12-10","value":955},{"time":"2025-12-11","value":972},{"time":"2025-12-12","value":980},{"time":"2025-12-15","value":975},{"time":"2025-12-16","value":982},{"time":"2025-12-17","value":990},{"time":"2025-12-18","value":985},{"time":"2025-12-19","value":978},{"time":"2025-12-22","value":992},{"time":"2025-12-23","value":998},{"time":"2025-12-24","value":1005},{"time":"2025-12-26","value":1010},{"time":"2025-12-29","value":1002},{"time":"2025-12-30","value":995},{"time":"2025-12-31","value":988},{"time":"2026-01-02","value":995},{"time":"2026-01-05","value":1002},{"time":"2026-01-06","value":998},{"time":"2026-01-07","value":1008},{"time":"2026-01-08","value":1015},{"time":"2026-01-09","value":1022},{"time":"2026-01-12","value":1018},{"time":"2026-01-13","value":1025},{"time":"2026-01-14","value":1032},{"time":"2026-01-15","value":1028},{"time":"2026-01-16","value":1035},{"time":"2026-01-19","value":1042},{"time":"2026-01-20","value":1038},{"time":"2026-01-21","value":1045},{"time":"2026-01-22","value":1040},{"time":"2026-01-23","value":1048},{"time":"2026-01-26","value":1052},{"time":"2026-01-27","value":1058},{"time":"2026-01-28","value":1055},{"time":"2026-01-29","value":1062},{"time":"2026-01-30","value":1068},{"time":"2026-02-02","value":1072},{"time":"2026-02-03","value":1065},{"time":"2026-02-04","value":1070},{"time":"2026-02-05","value":1078},{"time":"2026-02-06","value":1082},{"time":"2026-02-09","value":1075},{"time":"2026-02-10","value":1080},{"time":"2026-02-11","value":1088},{"time":"2026-02-12","value":1085},{"time":"2026-02-16","value":1078},{"time":"2026-02-17","value":1072},{"time":"2026-02-18","value":1068},{"time":"2026-02-19","value":1075},{"time":"2026-02-20","value":1080},{"time":"2026-02-23","value":1072},{"time":"2026-02-24","value":1065},{"time":"2026-02-25","value":1058},{"time":"2026-02-26","value":1062},{"time":"2026-02-27","value":1068},{"time":"2026-03-02","value":1072}]; const DATA_1Y = [{"time":"2025-03-03","value":920},{"time":"2025-04-01","value":935},{"time":"2025-05-01","value":948},{"time":"2025-06-02","value":932},{"time":"2025-07-01","value":918},{"time":"2025-08-01","value":925},{"time":"2025-09-01","value":942},{"time":"2025-10-01","value":958},{"time":"2025-11-03","value":965},{"time":"2025-12-01","value":952},{"time":"2026-01-02","value":995},{"time":"2026-02-02","value":1072},{"time":"2026-03-02","value":1072}]; const DATA_5Y = [{"time":"2021-03-01","value":1225},{"time":"2021-06-01","value":1185},{"time":"2021-09-01","value":1020},{"time":"2021-12-01","value":975},{"time":"2022-03-01","value":1085},{"time":"2022-06-01","value":952},{"time":"2022-09-01","value":882},{"time":"2022-12-01","value":1012},{"time":"2023-03-01","value":988},{"time":"2023-06-01","value":1008},{"time":"2023-09-01","value":912},{"time":"2023-12-01","value":905},{"time":"2024-03-01","value":895},{"time":"2024-06-01","value":985},{"time":"2024-09-01","value":942},{"time":"2024-12-01","value":928},{"time":"2025-03-01","value":920},{"time":"2025-06-01","value":932},{"time":"2025-09-01","value":942},{"time":"2025-12-01","value":952},{"time":"2026-03-02","value":1072}]; const DATA_1M = DATA_90D.slice(-22); const DATA_1W = DATA_90D.slice(-7); const DATASETS = { '1W': DATA_1W, '1M': DATA_1M, '3M': DATA_90D, '1Y': DATA_1Y, '5Y': DATA_5Y }; function initChart() { const container = document.getElementById('platinumChart'); if (!container || typeof LightweightCharts === 'undefined') return; lwChart = LightweightCharts.createChart(container, { width: container.clientWidth, height: 340, layout: { background: { color: 'transparent' }, textColor: '#94a3b8' }, grid: { vertLines: { color: 'rgba(255,255,255,0.04)' }, horzLines: { color: 'rgba(255,255,255,0.04)' } }, crosshair: { mode: LightweightCharts.CrosshairMode.Normal }, rightPriceScale: { borderColor: 'rgba(255,255,255,0.1)' }, timeScale: { borderColor: 'rgba(255,255,255,0.1)', timeVisible: true }, }); lwSeries = lwChart.addAreaSeries({ lineColor: '#e2e8f0', topColor: 'rgba(226,232,240,0.3)', bottomColor: 'rgba(226,232,240,0.0)', lineWidth: 2, }); lwSeries.setData(DATA_90D); lwChart.timeScale().fitContent(); window.addEventListener('resize', () => { if (lwChart) lwChart.applyOptions({ width: container.clientWidth }); }); document.querySelectorAll('.tf-btn').forEach(btn => { btn.addEventListener('click', () => { document.querySelectorAll('.tf-btn').forEach(b => b.classList.remove('active')); btn.classList.add('active'); const tf = btn.dataset.tf; const data = DATASETS[tf] || DATA_90D; lwSeries.setData(data); lwChart.timeScale().fitContent(); }); }); } // ── INFLATION CHART ───────────────────────────────────────────── function initInflationChart() { const ctx = document.getElementById('inflationChart'); if (!ctx) return; new Chart(ctx, { type: 'line', data: { labels: ['2000','2002','2004','2006','2008','2010','2012','2014','2016','2018','2020','2022','2024','2026'], datasets: [ { label: 'Nominal Price (USD)', data: [450, 540, 845, 1145, 2100, 1720, 1545, 1385, 985, 820, 875, 1020, 935, 980], borderColor: '#e2e8f0', backgroundColor: 'rgba(226,232,240,0.1)', borderWidth: 2, fill: true, tension: 0.3, pointRadius: 0, }, { label: 'Inflation-Adjusted (2026 USD)', data: [780, 900, 1320, 1680, 3050, 2380, 2050, 1780, 1220, 980, 1020, 1120, 980, 980], borderColor: '#f59e0b', backgroundColor: 'transparent', borderWidth: 2, borderDash: [5,3], fill: false, tension: 0.3, pointRadius: 0, } ] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { labels: { color: '#94a3b8', font: { size: 10 }, boxWidth: 12 } }, tooltip: { callbacks: { label: ctx => `$${ctx.parsed.y.toLocaleString()}` } } }, scales: { x: { ticks: { color: '#64748b', font: { size: 10 } }, grid: { display: false } }, y: { ticks: { color: '#64748b', font: { size: 10 }, callback: v => '$' + v.toLocaleString() }, grid: { color: 'rgba(255,255,255,0.04)' } } } } }); } // ── SEASONALITY CHART ─────────────────────────────────────────── function initSeasonalityChart() { const ctx = document.getElementById('seasonalityChart'); if (!ctx) return; const months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; const avgReturns = [2.1, 1.4, 1.8, 0.6, -0.3, -1.2, -0.8, -0.4, 0.5, 1.6, 0.9, 0.3]; new Chart(ctx, { type: 'bar', data: { labels: months, datasets: [{ label: 'Avg. Monthly Return (%)', data: avgReturns, backgroundColor: avgReturns.map(v => v >= 0 ? 'rgba(226,232,240,0.7)' : 'rgba(239,68,68,0.6)'), borderColor: avgReturns.map(v => v >= 0 ? '#e2e8f0' : '#ef4444'), borderWidth: 1, }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: false }, tooltip: { callbacks: { label: ctx => (ctx.parsed.y >= 0 ? '+' : '') + ctx.parsed.y.toFixed(1) + '%' } } }, scales: { x: { ticks: { color: '#64748b', font: { size: 10 } }, grid: { display: false } }, y: { ticks: { color: '#64748b', font: { size: 10 }, callback: v => v + '%' }, grid: { color: 'rgba(255,255,255,0.04)' }, suggestedMin: -2, suggestedMax: 3 } } } }); } // ── HYDROGEN DEMAND CHART ─────────────────────────────────────── function initHydrogenChart() { const ctx = document.getElementById('hydrogenChart'); if (!ctx) return; new Chart(ctx, { type: 'bar', data: { labels: ['2022','2023','2024','2025','2026E','2027E','2028E','2029E','2030E'], datasets: [{ label: 'Hydrogen Pt Demand (koz)', data: [35, 65, 110, 180, 260, 360, 480, 640, 850], backgroundColor: ctx2 => { const i = ctx2.dataIndex; return i >= 4 ? 'rgba(16,185,129,0.5)' : 'rgba(226,232,240,0.6)'; }, borderColor: ctx2 => { const i = ctx2.dataIndex; return i >= 4 ? '#10b981' : '#e2e8f0'; }, borderWidth: 1, }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: false }, tooltip: { callbacks: { label: ctx => ctx.parsed.y.toLocaleString() + ' koz' } } }, scales: { x: { ticks: { color: '#64748b', font: { size: 10 } }, grid: { display: false } }, y: { ticks: { color: '#64748b', font: { size: 10 }, callback: v => v + 'k' }, grid: { color: 'rgba(255,255,255,0.04)' } } } } }); } // ── API HELPERS ───────────────────────────────────────────────── function getYesterdayStr() { const d = new Date(); d.setDate(d.getDate() - 1); if (d.getDay() === 0) d.setDate(d.getDate() - 2); if (d.getDay() === 6) d.setDate(d.getDate() - 1); return d.toISOString().split('T')[0]; } async function fetchFawazPrice(code) { const url = `https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/${code.toLowerCase()}.json`; const res = await fetch(url, { signal: AbortSignal.timeout(8000) }); if (!res.ok) throw new Error('API error'); const data = await res.json(); return data[code.toLowerCase()]['usd']; } async function fetchFawazPriceYesterday(code) { const url = `https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@${getYesterdayStr()}/v1/currencies/${code.toLowerCase()}.json`; try { const res = await fetch(url, { signal: AbortSignal.timeout(8000) }); if (!res.ok) return null; const data = await res.json(); return data[code.toLowerCase()]['usd']; } catch { return null; } } async function fetchFrankfurterRates() { const CURRENCIES = 'AUD,BRL,CAD,CHF,CNY,CZK,DKK,EUR,GBP,HUF,INR,JPY,MXN,NOK,PLN,SEK,TRY,USD'; const res = await fetch(`https://api.frankfurter.dev/v1/latest?base=USD&symbols=${CURRENCIES}`, { signal: AbortSignal.timeout(8000) }); if (!res.ok) throw new Error('Frankfurter error'); const data = await res.json(); fxRates = { USD: 1, ...data.rates }; } async function fetchYahooPrices() { const proxyUrl = '/assets/data/yahoo_prices.php'; try { const res = await fetch(proxyUrl, { signal: AbortSignal.timeout(6000) }); if (!res.ok) throw new Error('proxy error'); const data = await res.json(); if (data.success && data.prices) return data.prices; } catch (e) { /* fallback below */ } return null; } // ── MAIN API FETCH ────────────────────────────────────────────── async function loadAllData() { try { const yahooPrices = await fetchYahooPrices(); let yahooOro = null, yahooPlatino = null, yahooPlata = null, yahooPaladio = null, yahooOil = null; if (yahooPrices) { if (yahooPrices.gold) yahooOro = yahooPrices.gold.price; if (yahooPrices.platinum) yahooPlatino = yahooPrices.platinum.price; if (yahooPrices.silver) yahooPlata = yahooPrices.silver.price; if (yahooPrices.palladium) yahooPaladio = yahooPrices.palladium.price; if (yahooPrices.oil) yahooOil = yahooPrices.oil; } const [platinumT, goldT, silverT, palladiumT, platinumYT, goldYT] = await Promise.allSettled([ yahooPlatino ? Promise.resolve(yahooPlatino) : fetchFawazPrice('XPT'), yahooOro ? Promise.resolve(yahooOro) : fetchFawazPrice('XAU'), yahooPlata ? Promise.resolve(yahooPlata) : fetchFawazPrice('XAG'), yahooPaladio ? Promise.resolve(yahooPaladio) : fetchFawazPrice('XPD'), fetchFawazPriceYesterday('XPT'), fetchFawazPriceYesterday('XAU'), ]); await fetchFrankfurterRates(); platinumPrice = platinumT.status === 'fulfilled' ? platinumT.value : null; goldPrice = goldT.status === 'fulfilled' ? goldT.value : null; const silverPrice = silverT.status === 'fulfilled' ? silverT.value : null; const palladiumPrice = palladiumT.status === 'fulfilled' ? palladiumT.value : null; platinumPriceYesterday = platinumYT.status === 'fulfilled' ? platinumYT.value : null; const goldYesterday = goldYT.status === 'fulfilled' ? goldYT.value : null; // Update source label let srcLabel = 'fawazahmed0 API'; let updateInterval = '15 min'; if (yahooPlatino) { srcLabel = 'Yahoo Finance (NYMEX)'; updateInterval = '5 min'; } const srcEl = document.getElementById('priceSource'); if (srcEl) srcEl.textContent = `per troy oz · Updated every ${updateInterval} · Source: ${srcLabel}`; // Update oil price if (yahooOil && typeof yahooOil === 'object') { OIL_LIVE_PRICE = yahooOil.price || OIL_LIVE_PRICE; OIL_LIVE_CHANGE_PCT = yahooOil.change_pct || OIL_LIVE_CHANGE_PCT; OIL_LIVE_CHANGE_NOM = yahooOil.change || OIL_LIVE_CHANGE_NOM; } const rhodiumPrice = 4800; const rhodiumYesterday = 4750; if (platinumPrice) { updatePriceHero(platinumPrice, platinumPriceYesterday); updateUnits(platinumPrice); updateCoins(platinumPrice); updateCalculator(); // Update live chart if (lwSeries) { const today = new Date().toISOString().split('T')[0]; try { lwSeries.update({ time: today, value: platinumPrice }); } catch(e) {} } } updateTicker({ gold: goldPrice, goldY: goldYesterday, silver: silverPrice, silverY: null, platinum: platinumPrice, platinumY: platinumPriceYesterday, palladium: palladiumPrice, palladiumY: null, rhodium: rhodiumPrice, rhodiumY: rhodiumYesterday, }); } catch (err) { console.error('loadAllData error:', err); } } // ── FAQ ACCORDION ─────────────────────────────────────────────── document.querySelectorAll('.faq-question').forEach(q => { q.addEventListener('click', () => { const item = q.closest('.faq-item'); const wasOpen = item.classList.contains('open'); document.querySelectorAll('.faq-item').forEach(i => i.classList.remove('open')); if (!wasOpen) item.classList.add('open'); }); }); // ── LANG DROPDOWN ─────────────────────────────────────────────── const langBtn = document.getElementById('langButton'); const langDrop = document.getElementById('langDropdown'); langBtn.addEventListener('click', e => { e.stopPropagation(); langDrop.classList.toggle('active'); }); document.addEventListener('click', () => langDrop.classList.remove('active')); // ── INIT ──────────────────────────────────────────────────────── document.addEventListener('DOMContentLoaded', () => { initChart(); initInflationChart(); initSeasonalityChart(); initHydrogenChart(); loadAllData(); setInterval(loadAllData, 5 * 60 * 1000); // ── BOOKMARK BUTTON ── document.getElementById('bookmarkBtn').addEventListener('click', () => { if (window.sidebar && window.sidebar.addPanel) { window.sidebar.addPanel(document.title, window.location.href, ''); } else if (window.external && ('AddFavorite' in window.external)) { window.external.AddFavorite(window.location.href, document.title); } else { const isMac = navigator.platform.toUpperCase().includes('MAC'); const key = isMac ? '⌘' : 'Ctrl'; alert(`Press ${key}+D to bookmark this page.`); } }); // ── COFFEE MODAL ── const coffeeModal = document.getElementById('coffeeModal'); const coffeeClose = document.getElementById('coffeeClose'); const coffeeDonateBtn = document.getElementById('coffeeDonateBtn'); let selectedCoffeeAmount = 3.00; let selectedCoffeeDescription = 'One Coffee'; document.getElementById('coffeeBtn').addEventListener('click', () => { coffeeModal.classList.add('active'); document.body.style.overflow = 'hidden'; }); coffeeClose.addEventListener('click', () => { coffeeModal.classList.remove('active'); document.body.style.overflow = 'auto'; }); coffeeModal.addEventListener('click', (e) => { if (e.target === coffeeModal) { coffeeModal.classList.remove('active'); document.body.style.overflow = 'auto'; } }); document.querySelectorAll('.coffee-amount').forEach(btn => { btn.addEventListener('click', () => { document.querySelectorAll('.coffee-amount').forEach(b => b.classList.remove('active')); btn.classList.add('active'); selectedCoffeeAmount = parseFloat(btn.dataset.amount); const counts = {3: 'One Coffee', 9: 'Three Coffees', 15: 'Five Coffees'}; selectedCoffeeDescription = counts[selectedCoffeeAmount] || 'Coffee'; coffeeDonateBtn.textContent = `Donate $${selectedCoffeeAmount.toFixed(2)} via PayPal`; }); }); coffeeDonateBtn.addEventListener('click', (e) => { e.preventDefault(); const paypalEmail = 'paypal@scopewire.de'; const amount = selectedCoffeeAmount.toFixed(2); const itemName = encodeURIComponent(`Donation for Numexo Platino Analysis: ${selectedCoffeeDescription}`); const currency = 'USD'; const paypalLink = `https://www.paypal.com/send?money=${amount}¤cy_code=${currency}&from=website&email=${encodeURIComponent(paypalEmail)}&item_name=${itemName}`; window.open(paypalLink, '_blank', 'noopener,noreferrer'); setTimeout(() => { alert(`Thank you for your support! ❤️\nYou will be redirected to PayPal to complete your $${amount} donation to ${paypalEmail}.`); }, 500); }); });