diff --git a/public/assets/home.js b/public/assets/home.js index e30021d..9b8234e 100644 --- a/public/assets/home.js +++ b/public/assets/home.js @@ -98,6 +98,41 @@ })); } + // what-if calculator: pure arithmetic on the locked constants + const dc = document.getElementById('dcDirects'); + if (dc) { + const $id = x => document.getElementById(x); + const usd = n => '$' + n.toLocaleString(undefined, { maximumFractionDigits: 2 }); + const recalc = () => { + const d = Number($id('dcDirects').value); + const p = Number($id('dcPkg').value); + const r = Number($id('dcSpread').value); + $id('dcDirectsV').textContent = d; + $id('dcSpreadV').textContent = r; + const qualifies = p >= 20; // sub-$20 packages never count toward qualification + const l2open = qualifies && d >= 2; + const l3open = qualifies && d >= 5; + const g2 = d * r, g3 = g2 * r; + const e1 = d * p * 0.5; + const e2 = l2open ? g2 * p * 0.2 : 0; + const e3 = l3open ? g3 * p * 0.1 : 0; + $id('dcN1').textContent = d; $id('dcN2').textContent = g2; $id('dcN3').textContent = g3; + $id('dcE1').textContent = usd(e1); + $id('dcE2').textContent = l2open ? usd(e2) : 'passes up'; + $id('dcE3').textContent = l3open ? usd(e3) : 'passes up'; + $id('dcTotal').textContent = usd(e1 + e2 + e3); + const setB = (el, open, need) => { el.textContent = open ? 'open' : 'locked: ' + need; el.className = 'badge' + (open ? '' : ' amber'); }; + setB($id('dcB1'), true, ''); + setB($id('dcB2'), l2open, qualifies ? (2 - d) + ' more buyer(s)' : 'needs $20+ buyers'); + setB($id('dcB3'), l3open, qualifies ? (5 - d) + ' more buyer(s)' : 'needs $20+ buyers'); + $id('dcQualNote').textContent = qualifies + ? 'Buyers of $20 or more count toward your qualification. 2 unlock level 2, 5 unlock level 3.' + : 'Heads up: $5 packages pay your level 1 but do not qualify buyers, so levels 2 and 3 stay locked in this scenario.'; + }; + ['dcDirects', 'dcPkg', 'dcSpread'].forEach(x => $id(x).addEventListener('input', recalc)); + recalc(); + } + loadLadder(); loadStats(); loadTicker(); diff --git a/public/assets/site.css b/public/assets/site.css index 06dd114..da357f6 100644 --- a/public/assets/site.css +++ b/public/assets/site.css @@ -216,6 +216,7 @@ footer{border-top:1px solid var(--line);margin-top:90px;padding:34px 0 0;color:v #status.bad{border-color:var(--bad)} input,select{background:rgba(4,8,7,.65);border:1px solid var(--line-strong);color:var(--ink);border-radius:11px; padding:11px 14px;font-size:14.5px;font-family:inherit} +input[type=range]{padding:0;border:0;background:transparent;accent-color:var(--mint);height:28px;vertical-align:middle} input:focus,select:focus{border-color:var(--mint)} :focus-visible{outline:2px solid var(--mint);outline-offset:2px} .hero-note{font-family:var(--mono);font-size:12px;color:var(--muted);margin-top:26px} diff --git a/public/contract.html b/public/contract.html index 6df0384..9bfd5e5 100644 --- a/public/contract.html +++ b/public/contract.html @@ -5,7 +5,7 @@