Protogen YCH

AB: $600 + 𝗜𝗖𝗢𝗡

---

---
---
(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); const utcYear = date.getUTCFullYear(); const utcMonthIdx = date.getUTCMonth(); const utcDay = date.getUTCDate(); const utcHours = date.getUTCHours(); const utcMinutes = date.getUTCMinutes(); const utcSeconds = date.getUTCSeconds(); if (isTopSection) { const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; const month = months[utcMonthIdx]; const ampm = utcHours >= 12 ? 'PM' : 'AM'; const hours12 = utcHours % 12 || 12; return utcYear + ' ' + month + ' ' + utcDay + ' | ' + hours12 + ' ' + ampm + ' UTC'; } else { const month = String(utcMonthIdx + 1).padStart(2, '0'); const day = String(utcDay).padStart(2, '0'); const hStr = String(utcHours).padStart(2, '0'); const mStr = String(utcMinutes).padStart(2, '0'); const sStr = String(utcSeconds).padStart(2, '0'); return utcYear + '-' + month + '-' + day + ' | ' + hStr + ':' + mStr + ':' + sStr + ' UTC'; } }; 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('|', '') + ' +08:00'); 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('|', '') + ' +08:00'); 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('|', '') + ' +08:00'); 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

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.
If payment is not received within 24 hours, the runner-up bidder will win the art.

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.