finance / static /panels.html
betterwithage's picture
PURIQ Finance Engine v2 — source 9e3fd501e50a
7477017 verified
Raw History Blame Contribute Delete
3 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/>
<title>PURIQ Finance — Verification Desk · SZL Holdings</title>
<style>
:root{--bg:#05070d;--panel:#0b1020;--edge:#1b2b4a;--ink:#dbe7ff;--dim:#5f7398;--acc:#35e0c2;--warn:#ffb454;--bad:#ff5470;--good:#54ff9f}
body{margin:0;background:radial-gradient(1000px 700px at 30% -10%,#0d1c33 0%,var(--bg) 55%);color:var(--ink);font:13px/1.55 "SF Mono",ui-monospace,Menlo,Consolas,monospace;min-height:100vh}
header{padding:20px 26px;border-bottom:1px solid var(--edge);display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;align-items:baseline}
h1{font-size:16px;letter-spacing:.22em;margin:0;color:var(--acc)}
main{max-width:1100px;margin:0 auto;padding:20px 26px;display:grid;gap:16px}
section{border:1px solid var(--edge);border-radius:10px;padding:16px 18px;background:linear-gradient(180deg,rgba(27,43,74,.2),rgba(11,16,32,.9))}
h2{font-size:11px;letter-spacing:.2em;color:var(--dim);margin:0 0 12px;text-transform:uppercase}
a{color:var(--acc)}
.badge{display:inline-block;padding:2px 10px;border-radius:20px;font-size:11px;border:1px solid}
.b-ok{color:var(--good);border-color:var(--good)}.b-bad{color:var(--bad);border-color:var(--bad)}
table{width:100%;border-collapse:collapse;font-size:11px}
td,th{padding:5px 8px;border-bottom:1px solid var(--edge);text-align:left;word-break:break-all}
th{color:var(--dim);font-weight:400;letter-spacing:.1em}
.err{color:var(--bad)}
</style></head>
<body>
<header><h1>&#9672; PURIQ Finance &mdash; Verification Desk</h1><span style="color:var(--warn);font-size:11px">ADVISORY-ONLY &middot; PAPER-ONLY &middot; NOT FINANCIAL ADVICE</span><a href="/">&larr; signal console</a></header>
<main>
<section><h2>Chain Integrity</h2><div id="v">probing&hellip;</div></section>
<section><h2>Receipt Ledger</h2><div id="ledger"><table><thead><tr><th>seq</th><th>kind</th><th>prev</th><th>receipt_sha256</th></tr></thead><tbody id="rows"></tbody></table></div></section>
</main>
<script>
const $=id=>document.getElementById(id);const esc=s=>String(s).replace(/[&<>"]/g,c=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"}[c]));
async function go(){
try{
const v=await (await fetch("/api/finance/v2/receipts/verify")).json();
$("v").innerHTML=v.state==="CONSISTENT"
?`<span class="badge b-ok">CONSISTENT</span> chain length ${v.length} &mdash; every receipt links`
:`<span class="badge b-bad">DIVERGENT</span> at seq ${v.at_seq} &middot; ${esc(v.reason)}`;
const r=await (await fetch("/api/finance/v2/receipts")).json();
$("rows").innerHTML=(r.entries||[]).map(e=>`<tr><td>${e.seq}</td><td>${esc(e.kind)}</td><td>${esc(e.prev_receipt.slice(0,16))}&hellip;</td><td>${esc(e.receipt_sha256.slice(0,24))}&hellip;</td></tr>`).join("");
}catch(e){$("v").innerHTML='<span class="err">ledger UNAVAILABLE</span>'}
}
go();setInterval(go,15000);
</script></body></html>