Protogen Adopt

AB: $𝟱𝟬𝟬 + 𝗜𝗖𝗢𝗡 + 𝗖𝗢𝗟𝗢𝗥𝗘𝗗 𝗦𝗞𝗘𝗧𝗖𝗛 𝗪/ 𝗣𝗥𝗜𝗦𝗠

---

---
---
(function() { let activeIntervals = []; const init = async () => { const root = document.getElementById('auc-root'); if (!root) return; const csvUrl = 'https://docs.google.com/spreadsheets/d/e/2PACX-1vSItPa7diwL78psP9GutaQUsh6Aci0FHrI4hwOPBnk-rltt3XicZuRobTsIPnFZxt7Ny9UYDRspiUvs/pub?gid=1552621399&output=csv'; const cardsContainer = root.querySelector('.auction-cards-display'); const mainTitleDisplay = root.querySelector('#auc-main-title'); const subTitleDisplay = root.querySelector('#auc-sub-title'); const dateDisplay = root.querySelector('#auc-date-display'); const subtitleDisplay = root.querySelector('#auc-subtitle-display'); const refreshBtn = root.querySelector('#auc-refresh-btn'); if (!cardsContainer || !refreshBtn || !mainTitleDisplay || !subTitleDisplay || !dateDisplay || !subtitleDisplay) return; const parse = (t) => { const row = []; let c = '', q = false; for (let i = 0; i < t.length; i++) { if (t[i] === '"') q = !q; else if (t[i] === ',' && !q) { row.push(c.trim()); c = ''; } else c += t[i]; } row.push(c.trim()); return row; }; const formatDate = (timestamp, isTopSection = false) => { if (!timestamp) return '---'; const date = new Date(timestamp); if (isTopSection) { const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; const month = months[date.getMonth()]; const day = date.getDate(); const year = date.getFullYear(); const hours24 = date.getHours(); const ampm = hours24 >= 12 ? 'PM' : 'AM'; const hours12 = hours24 % 12 || 12; return year + ' ' + month + ' ' + day + ' | ' + hours12 + ' ' + ampm; } else { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); const seconds = String(date.getSeconds()).padStart(2, '0'); return year + '-' + month + '-' + day + ' | ' + hours + ':' + minutes + ':' + seconds; } }; const render = async () => { let overlay = null; if (cardsContainer.children.length === 0) { const spinner = document.createElement('div'); spinner.className = 'loading-spinner'; cardsContainer.appendChild(spinner); } else { overlay = document.createElement('div'); overlay.className = 'loading-overlay'; const spinner = document.createElement('div'); spinner.className = 'loading-spinner'; spinner.style.margin = 'auto'; overlay.appendChild(spinner); cardsContainer.appendChild(overlay); } try { const response = await fetch(csvUrl); const data = await response.text(); if (data.indexOf('!DOCTYPE') !== -1 || data.indexOf('html') !== -1) { activeIntervals.forEach(clearInterval); activeIntervals = []; cardsContainer.innerHTML = ''; const errDiv = document.createElement('div'); errDiv.className = 'auc-status-msg'; errDiv.textContent = 'CONFIGURATION ERROR.'; cardsContainer.appendChild(errDiv); return; } const lines = data.split(/\r?\n/); const rows = lines.map(line => parse(line)); const getVal = (r, c) => (rows[r] && rows[r][c] ? rows[r][c].trim() : ''); const overrideChecked = getVal(0, 0).toLowerCase() === 'true'; const globalTitle = getVal(0, 1); const globalSub = getVal(0, 2); const globalDateRaw = getVal(2, 2); const globalExtra = getVal(2, 4); const endGlobalMs = Date.parse(globalDateRaw.replace('|', '')); const globalDateLocalized = !isNaN(endGlobalMs) ? formatDate(endGlobalMs, true) : globalDateRaw; mainTitleDisplay.textContent = globalTitle || 'Bidding Results'; subTitleDisplay.textContent = globalSub || ''; dateDisplay.textContent = globalDateLocalized || '---'; subtitleDisplay.textContent = globalExtra || ''; activeIntervals.forEach(clearInterval); activeIntervals = []; const fragment = document.createDocumentFragment(); if (rows[3]) { for (let c = 1; c < rows[3].length; c++) { const itemName = getVal(3, c); if (!itemName || itemName.indexOf('<') === 0 || itemName.indexOf('{') !== -1) continue; const columnDateRaw = getVal(5, c); const totalBids = getVal(22, c) || '0'; const endMs = Date.parse(columnDateRaw.replace('|', '')); if (!overrideChecked && !isNaN(endMs) && (endMs - Date.now() <= 0)) { continue; } const columnDateLocalized = !isNaN(endMs) ? formatDate(endMs, false) : columnDateRaw; const startBid = getVal(6, c); const minInc = getVal(7, c); const autoBuy = getVal(8, c); const bidders = [ { rank: '1st', time: getVal(10, c), name: getVal(11, c), amount: getVal(12, c), class: 'rank-1' }, { rank: '2nd', time: getVal(14, c), name: getVal(15, c), amount: getVal(16, c), class: 'rank-2' }, { rank: '3rd', time: getVal(18, c), name: getVal(19, c), amount: getVal(20, c), class: 'rank-3' } ]; const card = document.createElement('div'); card.className = 'item-card'; const header = document.createElement('div'); header.className = 'item-header'; const nameSpan = document.createElement('span'); nameSpan.className = 'item-name'; nameSpan.textContent = itemName; header.appendChild(nameSpan); card.appendChild(header); const metaDateDiv = document.createElement('div'); metaDateDiv.className = 'item-meta-date'; metaDateDiv.textContent = columnDateLocalized || '---'; card.appendChild(metaDateDiv); const timerDiv = document.createElement('div'); timerDiv.className = 'item-timer'; card.appendChild(timerDiv); if (!isNaN(endMs)) { const runTimer = () => { const remaining = endMs - Date.now(); const d = Math.max(0, Math.floor(remaining / 86400000)); const h = Math.max(0, Math.floor((remaining % 86400000) / 3600000)); const m = Math.max(0, Math.floor((remaining % 3600000) / 60000)); const s = Math.max(0, Math.floor((remaining % 60000) / 1000)); timerDiv.textContent = remaining <= 0 ? 'ENDED' : 'ENDS IN: ' + d + 'D ' + h + 'H ' + m + 'M ' + s + 'S'; }; runTimer(); activeIntervals.push(setInterval(runTimer, 1000)); } else { timerDiv.textContent = ''; } if (startBid || minInc || autoBuy) { const priceGrid = document.createElement('div'); priceGrid.className = 'item-pricing-grid'; const labels = ['Starting Bid', 'Min Increment', 'Auto Buy']; const values = [startBid, minInc, autoBuy]; labels.forEach((lbl, idx) => { if (!values[idx]) return; const block = document.createElement('div'); block.className = 'pricing-block'; const lSpan = document.createElement('span'); lSpan.className = 'pricing-label'; lSpan.textContent = lbl; const vSpan = document.createElement('span'); vSpan.className = 'pricing-value'; let displayValue = values[idx]; if (lbl === 'Min Increment' && displayValue && !displayValue.startsWith('+')) { displayValue = '+' + displayValue; } vSpan.textContent = displayValue; block.appendChild(lSpan); block.appendChild(vSpan); priceGrid.appendChild(block); }); card.appendChild(priceGrid); } bidders.forEach(b => { if (!b.name) return; const bRow = document.createElement('div'); bRow.className = 'bidder-row ' + b.class; const bInfo = document.createElement('div'); bInfo.className = 'bidder-info'; const bMetaLine = document.createElement('div'); bMetaLine.className = 'bidder-meta-line'; const rBadge = document.createElement('span'); rBadge.className = 'rank-badge'; rBadge.textContent = b.rank; const nSpan = document.createElement('span'); nSpan.className = 'bidder-name'; nSpan.textContent = b.name; bMetaLine.appendChild(rBadge); bMetaLine.appendChild(nSpan); bInfo.appendChild(bMetaLine); if (b.time) { const bTimeMs = Date.parse(b.time.replace('|', '')); const localizedBTime = !isNaN(bTimeMs) ? formatDate(bTimeMs, false) : b.time; const tSpan = document.createElement('span'); tSpan.className = 'bidder-time'; tSpan.textContent = localizedBTime; bInfo.appendChild(tSpan); } const aSpan = document.createElement('span'); aSpan.className = 'bid-amount'; aSpan.textContent = b.amount; bRow.appendChild(bInfo); bRow.appendChild(aSpan); card.appendChild(bRow); }); const countSpan = document.createElement('div'); countSpan.className = 'bid-count'; countSpan.textContent = totalBids + ' Bids'; card.appendChild(countSpan); fragment.appendChild(card); } } if (fragment.children.length === 0) { const msgDiv = document.createElement('div'); msgDiv.className = 'auc-status-msg'; if (globalDateRaw && !overrideChecked) { msgDiv.textContent = 'AUCTION ENDED'; } else { msgDiv.textContent = 'NO ACTIVE LISTING'; } fragment.appendChild(msgDiv); } cardsContainer.innerHTML = ''; cardsContainer.appendChild(fragment); } catch (err) { if (overlay && overlay.parentNode) { overlay.remove(); } if (cardsContainer.children.length === 0) { cardsContainer.textContent = 'Error loading auction results.'; } } }; refreshBtn.onclick = render; render(); setInterval(render, 60000); }; if (document.readyState === 'complete') init(); else window.addEventListener('load', init); })();

⚠️ NOTICE

Also please beware of scammers online impersonating or claiming the auction ended early.
You'll only be contacted from the email or profile you provided in the form.

RGB AUCTION

Fermentum porttitor iaculis et nunc, venenatis primis commodo elementum magna mi viverra dis curae.

Subscribed

Lacus convallis ultricies odio. Laoreet elementum dis duis laoreet tellus.