metastate / solutions.html
CPater's picture
Upload 4 files
5a460b3 verified
Raw
History Blame Contribute Delete
55 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>METASTATE — Solutions · Vertical Use Cases</title>
<meta name="description" content="METASTATE for ECG arrhythmia, geomagnetic anomalies, financial ticks, industrial vibration, network telemetry, linguistic auditing. Sample data + one-click runs on the live kernel.">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Sora:wght@200;300;400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap" rel="stylesheet">
<style>
:root{
--bg:#000;--ink:#fff;--muted:#9a9a9a;--dim:#5a5a5a;--faint:#2c2c2c;
--line:rgba(255,255,255,.13);--line-2:rgba(255,255,255,.26);
--panel:rgba(255,255,255,.025);--panel-2:rgba(255,255,255,.05);
--sans:'Sora',sans-serif;--mono:'IBM Plex Mono',monospace;
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{background:var(--bg);color:var(--ink);font-family:var(--sans);font-weight:300;
line-height:1.6;overflow-x:hidden;-webkit-font-smoothing:antialiased;letter-spacing:.1px}
::selection{background:#fff;color:#000}
a{color:inherit;text-decoration:none}
img{display:block}
/* ===== shell (mirrors index) ===== */
.shell{display:flex}
#sidebar{width:248px;flex:0 0 248px;position:fixed;inset:0 auto 0 0;height:100vh;z-index:200;
border-right:1px solid var(--line);background:rgba(0,0,0,.94);backdrop-filter:blur(14px);
display:flex;flex-direction:column;transition:transform .4s cubic-bezier(.7,0,.2,1)}
#sidebar.collapsed{transform:translateX(-248px)}
.sb-head{padding:24px 22px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:13px}
.sb-logo{width:36px;height:36px;border:1px solid var(--line-2);border-radius:50%;background:#000;overflow:hidden;flex:0 0 36px}
.sb-logo img{width:100%;height:100%;object-fit:cover;display:block}
.sb-name{font-size:17px;font-weight:600;letter-spacing:3px}
.sb-ver{font-family:var(--mono);font-size:9px;color:var(--muted);letter-spacing:2px;margin-top:2px}
.sb-nav{padding:16px 12px;overflow-y:auto;flex:1}
.sb-nav::-webkit-scrollbar{width:4px}.sb-nav::-webkit-scrollbar-thumb{background:var(--line)}
.sb-group{margin-bottom:20px}
.sb-group-t{font-family:var(--mono);font-size:9px;letter-spacing:2px;color:var(--dim);text-transform:uppercase;padding:0 12px 8px}
.sb-link{display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:6px;font-size:13px;
color:var(--muted);transition:all .18s;cursor:pointer}
.sb-link:hover{background:var(--panel-2);color:#fff}
.sb-link.active{background:var(--panel-2);color:#fff}
.sb-link svg{width:15px;height:15px;flex:0 0 15px;stroke:currentColor;fill:none;stroke-width:1.5}
.sb-foot{padding:16px 22px;border-top:1px solid var(--line);font-family:var(--mono);font-size:9px;
color:var(--dim);letter-spacing:.5px;line-height:1.9}
#sbToggle{position:fixed;top:18px;left:18px;z-index:300;width:40px;height:40px;border:1px solid var(--line-2);
background:rgba(0,0,0,.7);backdrop-filter:blur(8px);border-radius:8px;display:none;place-items:center;cursor:pointer}
#sbToggle svg{width:18px;height:18px;stroke:#fff;fill:none;stroke-width:1.6}
body.sb-collapsed #sbToggle{display:grid}
#main{margin-left:248px;width:calc(100% - 248px);transition:margin-left .4s cubic-bezier(.7,0,.2,1),width .4s}
body.sb-collapsed #main{margin-left:0;width:100%}
/* ===== topbar ===== */
.topbar{position:sticky;top:0;z-index:120;height:58px;border-bottom:1px solid var(--line);
background:rgba(0,0,0,.74);backdrop-filter:blur(14px);display:flex;align-items:center;
justify-content:space-between;padding:0 28px}
.tb-left{font-family:var(--mono);font-size:10px;letter-spacing:1.5px;color:var(--muted);display:flex;align-items:center;gap:8px}
.dot{width:6px;height:6px;border-radius:50%;background:#fff;animation:pulse 2.6s infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.4}}
.tb-right{display:flex;gap:9px;align-items:center}
.btn{font-family:var(--mono);font-size:10.5px;letter-spacing:1px;text-transform:uppercase;padding:9px 15px;
border:1px solid var(--line-2);border-radius:7px;cursor:pointer;transition:all .2s;background:transparent;color:#fff;white-space:nowrap;display:inline-flex;align-items:center;gap:7px}
.btn:hover{background:#fff;color:#000}
.btn-solid{background:#fff;color:#000}.btn-solid:hover{background:transparent;color:#fff}
/* ===== hero ===== */
.hero{padding:128px 40px 60px;border-bottom:1px solid var(--line);max-width:1080px;margin:0 auto}
.hero .kicker{font-family:var(--mono);font-size:10.5px;letter-spacing:4px;color:#cfcfcf;text-transform:uppercase;margin-bottom:18px;display:flex;align-items:center;gap:13px}
.hero .kicker::before{content:"";width:30px;height:1px;background:var(--line-2)}
.hero h1{font-size:clamp(40px,7vw,82px);font-weight:200;line-height:1;letter-spacing:-1.4px;margin-bottom:20px}
.hero h1 b{font-weight:600}
.hero p.sub{font-size:clamp(15px,1.7vw,19px);color:#d4d4d4;font-weight:300;max-width:680px;margin-bottom:26px}
.hero .ctas{display:flex;gap:12px;flex-wrap:wrap}
/* ===== sections ===== */
.section{max-width:1080px;margin:0 auto;padding:80px 40px}
.sec-tag{font-family:var(--mono);font-size:10px;letter-spacing:3px;color:var(--muted);text-transform:uppercase;
margin-bottom:16px;display:flex;align-items:center;gap:13px}
.sec-tag::before{content:"";width:30px;height:1px;background:var(--line-2)}
.sec-title{font-size:clamp(28px,4vw,46px);font-weight:200;line-height:1.05;letter-spacing:-.6px;margin-bottom:18px}
.sec-title b{font-weight:600}
.sec-lead{max-width:680px;font-size:15px;color:#b6b6b6;margin-bottom:42px}
/* ===== vertical cards ===== */
.verticals{display:grid;grid-template-columns:1fr;gap:28px}
.vcard{border:1px solid var(--line);border-radius:14px;background:var(--panel);overflow:hidden;transition:border-color .25s}
.vcard:hover{border-color:var(--line-2)}
.vcard-head{padding:26px 28px;border-bottom:1px solid var(--line);display:grid;grid-template-columns:60px 1fr auto;gap:20px;align-items:flex-start}
.vcard-ico{width:56px;height:56px;border:1px solid var(--line-2);border-radius:12px;display:grid;place-items:center;background:#000}
.vcard-ico svg{width:26px;height:26px;stroke:#fff;fill:none;stroke-width:1.4}
.vcard-meta .tag{font-family:var(--mono);font-size:9px;letter-spacing:2px;color:var(--dim);text-transform:uppercase;margin-bottom:6px}
.vcard-meta h3{font-size:24px;font-weight:500;letter-spacing:-.3px;margin-bottom:6px}
.vcard-meta p{font-size:13.5px;color:#b6b6b6;line-height:1.6;max-width:560px}
.vcard-num{font-family:var(--mono);font-size:10px;color:var(--dim);letter-spacing:1.5px}
.vcard-body{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--line)}
.vcard-left,.vcard-right{background:#000;padding:24px 28px}
.vcard-left label,.vcard-right label{font-family:var(--mono);font-size:9.5px;letter-spacing:2px;color:var(--dim);text-transform:uppercase;display:block;margin-bottom:11px}
.signal-preview{height:140px;border:1px solid var(--line);border-radius:9px;background:#040404;position:relative;overflow:hidden;margin-bottom:14px}
.signal-preview canvas{position:absolute;inset:0;width:100%;height:100%}
.signal-stats{font-family:var(--mono);font-size:11px;color:var(--muted);letter-spacing:.3px;line-height:1.7;margin-bottom:14px}
.signal-stats span{color:#fff;font-weight:500}
.expected{font-size:12.5px;color:#bfbfbf;line-height:1.65;padding:13px 15px;border:1px solid var(--line);border-radius:9px;background:rgba(255,255,255,.015);margin-bottom:14px}
.expected b{color:#fff;font-weight:500}
.vcard-actions{display:flex;gap:9px;flex-wrap:wrap}
.diag{font-family:var(--mono);font-size:12px;line-height:1.8;color:#ddd;min-height:160px}
.diag .row{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid var(--line)}
.diag .row:last-child{border-bottom:0}
.diag .k{color:var(--muted);letter-spacing:.5px}
.diag .v{color:#fff;font-weight:500}
.diag .placeholder{color:var(--dim);padding:14px 0;line-height:1.7}
.diag .placeholder b{color:#fff}
.verdict{margin-top:14px;padding:13px 15px;border:1px solid var(--line-2);border-radius:9px;font-size:11.5px;line-height:1.6;color:#cfcfcf}
.verdict.flag{border-color:#fff;background:rgba(255,255,255,.06);color:#fff}
.spinner{display:inline-block;width:11px;height:11px;border:1.5px solid var(--line-2);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite;vertical-align:-1px;margin-right:6px}
@keyframes spin{to{transform:rotate(360deg)}}
/* ===== bulk pricing teaser ===== */
.bulk{margin-top:24px;border:1px solid var(--line-2);border-radius:14px;background:var(--panel);padding:32px 32px;display:grid;grid-template-columns:1fr auto;gap:22px;align-items:center}
.bulk .l h3{font-size:22px;font-weight:500;margin-bottom:8px;letter-spacing:-.2px}
.bulk .l p{font-size:13.5px;color:#b6b6b6;line-height:1.6;max-width:580px}
.bulk-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:24px}
.bulk-card{border:1px solid var(--line);border-radius:12px;padding:22px;background:#000}
.bulk-card .nm{font-family:var(--mono);font-size:9.5px;letter-spacing:2px;color:var(--muted);text-transform:uppercase;margin-bottom:10px}
.bulk-card .fig{font-size:30px;font-weight:300;line-height:1;margin-bottom:6px}
.bulk-card .fig small{font-size:13px;color:var(--muted)}
.bulk-card .feat{font-family:var(--mono);font-size:10px;color:var(--dim);letter-spacing:.5px;line-height:1.8;margin-top:12px;border-top:1px solid var(--line);padding-top:12px}
/* footer */
footer{border-top:1px solid var(--line);padding:50px 40px 32px;max-width:1080px;margin:60px auto 0}
.foot-top{display:flex;justify-content:space-between;gap:36px;flex-wrap:wrap;margin-bottom:36px}
.foot-brand{max-width:300px}
.foot-brand .fl{display:flex;align-items:center;gap:11px;margin-bottom:13px}
.foot-brand .fl-mark{width:32px;height:32px;border:1px solid var(--line-2);border-radius:50%;overflow:hidden;background:#000}
.foot-brand .fl-mark img{width:100%;height:100%;object-fit:cover;display:block}
.foot-brand .fname{font-size:17px;font-weight:600;letter-spacing:2px}
.foot-brand p{font-size:12px;color:var(--muted);line-height:1.65}
.foot-cols{display:flex;gap:48px;flex-wrap:wrap}
.foot-col h5{font-family:var(--mono);font-size:9px;letter-spacing:1.5px;color:var(--dim);text-transform:uppercase;margin-bottom:13px}
.foot-col a{display:block;font-size:12.5px;color:var(--muted);padding:5px 0;transition:color .18s}
.foot-col a:hover{color:#fff}
.foot-bottom{border-top:1px solid var(--line);padding-top:22px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:13px;font-family:var(--mono);font-size:9.5px;color:var(--dim)}
.reveal{opacity:0;transform:translateY(28px);transition:opacity .8s cubic-bezier(.2,.7,.2,1),transform .8s cubic-bezier(.2,.7,.2,1)}
.reveal.in{opacity:1;transform:none}
@media(max-width:1080px){
#sidebar{transform:translateX(-248px)}#sidebar.open{transform:translateX(0)}
#main{margin-left:0;width:100%}#sbToggle{display:grid}
.vcard-head{grid-template-columns:48px 1fr;gap:14px}
.vcard-num{grid-column:2;justify-self:flex-end}
.bulk{grid-template-columns:1fr}
}
@media(max-width:760px){
.vcard-body{grid-template-columns:1fr}
.bulk-grid{grid-template-columns:1fr}
.hero{padding:96px 22px 50px}.section{padding:60px 22px}
.foot-top{flex-direction:column}
}
</style>
</head>
<body>
<!-- SIDEBAR -->
<aside id="sidebar">
<div class="sb-head">
<div class="sb-logo"><img src="data:image/jpeg;base64,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" alt="METASTATE"></div>
<div><div class="sb-name">METASTATE</div><div class="sb-ver">v1.0 · ANOMALY KERNEL</div></div>
</div>
<nav class="sb-nav">
<div class="sb-group"><div class="sb-group-t">Product</div>
<a class="sb-link" href="index.html"><svg viewBox="0 0 24 24"><path d="M3 12l9-9 9 9M5 10v10h14V10"/></svg>Overview</a>
<a class="sb-link active" href="solutions.html"><svg viewBox="0 0 24 24"><path d="M22 12h-4l-3 9L9 3l-3 9H2"/></svg>Solutions · Verticals</a>
<a class="sb-link" href="index.html#console"><svg viewBox="0 0 24 24"><path d="M4 17l6-6-6-6M12 19h8"/></svg>Signal Console</a>
<a class="sb-link" href="index.html#how"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="3"/><path d="M12 1v6m0 6v6m11-7h-6m-6 0H1"/></svg>How It Works</a>
<a class="sb-link" href="index.html#chat"><svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>BYO-Key Chat</a>
<a class="sb-link" href="contribute.html"><svg viewBox="0 0 24 24"><path d="M13 2L3 14h9l-1 8 10-12h-9z"/></svg>Contribute GPU · Earn</a>
</div>
<div class="sb-group"><div class="sb-group-t">Developers</div>
<a class="sb-link" href="index.html#api"><svg viewBox="0 0 24 24"><path d="M16 18l6-6-6-6M8 6l-6 6 6 6"/></svg>API Docs</a>
<a class="sb-link" href="index.html#pricing"><svg viewBox="0 0 24 24"><path d="M12 1v22M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"/></svg>Pricing</a>
<a class="sb-link" href="affiliate.html"><svg viewBox="0 0 24 24"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/></svg>Affiliate Dashboard</a>
<a class="sb-link" href="roadmap.html"><svg viewBox="0 0 24 24"><path d="M3 6h18M3 12h18M3 18h12"/></svg>Roadmap · Status</a>
</div>
<div class="sb-group"><div class="sb-group-t">Subpages</div>
<a class="sb-link" href="architecture.html"><svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="7"/><rect x="14" y="3" width="7" height="7"/><rect x="14" y="14" width="7" height="7"/><rect x="3" y="14" width="7" height="7"/></svg>Architecture</a>
<a class="sb-link" href="systems.html"><svg viewBox="0 0 24 24"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"/></svg>Systems</a>
<a class="sb-link" href="research.html"><svg viewBox="0 0 24 24"><path d="M9 18V5l12-2v13"/><circle cx="6" cy="18" r="3"/><circle cx="18" cy="16" r="3"/></svg>Research</a>
<a class="sb-link" href="agents.html"><svg viewBox="0 0 24 24"><rect x="3" y="11" width="18" height="10" rx="2"/><circle cx="12" cy="5" r="2"/><path d="M12 7v4"/></svg>Agents &amp; Payments</a>
<a class="sb-link" href="sovereignty.html"><svg viewBox="0 0 24 24"><path d="M3 21h18M5 21V8l7-5 7 5v13"/></svg>Agent Sovereignty</a>
</div>
</nav>
<div class="sb-foot">NEW WORLD ORDER<br>IMPERIUM ROMANUM<br>DIGITAL NATION STATE<br><span style="color:var(--muted)">© 2026 · MIT</span></div>
</aside>
<button id="sbToggle"><svg viewBox="0 0 24 24"><path d="M3 12h18M3 6h18M3 18h18"/></svg></button>
<div id="main">
<div class="topbar">
<div class="tb-left"><span class="dot"></span>SOLUTIONS · KERNEL ENDPOINTS LIVE</div>
<div class="tb-right">
<a class="btn" href="index.html#api">API</a>
<a class="btn" href="affiliate.html">AFFILIATE</a>
<a class="btn btn-solid" href="index.html#console">CONSOLE</a>
</div>
</div>
<!-- HERO -->
<section class="hero">
<div class="kicker">Buyer-Side · Six Verticals · One Kernel</div>
<h1>Pick a problem. <b>Run the kernel.</b></h1>
<p class="sub">METASTATE is a free-energy anomaly detector. The same three diagnostics — surprise, causal coherence, symbolic structure — work across cardiology, geophysics, finance, industry, networks, and language. Each card below ships a domain-realistic sample signal and runs it on the live kernel with one click. No login, no wallet, no setup.</p>
<div class="ctas">
<a class="btn btn-solid" href="#ecg">START WITH ECG</a>
<a class="btn" href="index.html#api">SEE API CONTRACT</a>
<a class="btn" href="#bulk">BULK PRICING ↓</a>
</div>
</section>
<!-- VERTICALS -->
<section class="section reveal">
<div class="sec-tag">Verticals</div>
<h2 class="sec-title">Six domains. <b>Same kernel.</b></h2>
<p class="sec-lead">Each card generates a synthetic-but-realistic signal in your browser, sends it to <code style="font-family:var(--mono);font-size:12.5px;color:#fff">/v1/anomaly/score</code>, and renders the diagnostics. The samples are crafted to contain a planted anomaly — so you can see the kernel actually flag it. Then swap our sample for your own data.</p>
<div class="verticals">
<!-- 1. ECG -->
<article class="vcard" id="ecg">
<div class="vcard-head">
<div class="vcard-ico"><svg viewBox="0 0 24 24"><path d="M3 12h4l2-6 4 12 2-6h6"/></svg></div>
<div class="vcard-meta">
<div class="tag">Vertical 01 · Biosignals</div>
<h3>ECG Arrhythmia Detection</h3>
<p>Clinical-rhythm strips with an intercurrent premature ventricular contraction (PVC) buried in normal sinus. The kernel learns the baseline rhythm in seconds and raises free-energy on departures, without supervised training.</p>
</div>
<div class="vcard-num">01/06</div>
</div>
<div class="vcard-body">
<div class="vcard-left">
<label>Generated Sample · ECG (NSR + PVC)</label>
<div class="signal-preview"><canvas data-vid="ecg"></canvas></div>
<div class="signal-stats" id="ecgStats">signal — <span></span> samples · sampling <span></span> Hz · planted <span></span></div>
<div class="expected"><b>Expected result:</b> elevated free-energy F(t) near the PVC, causal coherence 𝒞(t) spike where the morphology breaks, and a flagged verdict. Spectral β &lt; −1.4 signals the QRS-like pulse train.</div>
<div class="vcard-actions">
<button class="btn btn-solid" data-run="ecg">RUN ANOMALY SCORE</button>
<button class="btn" data-regen="ecg">REGENERATE SAMPLE</button>
</div>
</div>
<div class="vcard-right">
<label>Diagnostics · /v1/anomaly/score</label>
<div class="diag" data-out="ecg"><div class="placeholder">Press <b>RUN ANOMALY SCORE</b> to send this ECG strip to the kernel and see the diagnostics.</div></div>
</div>
</div>
</article>
<!-- 2. SCHUMANN / GEOMAG -->
<article class="vcard" id="schumann">
<div class="vcard-head">
<div class="vcard-ico"><svg viewBox="0 0 24 24"><path d="M2 12c4-8 16-8 20 0M2 16c4-4 16-4 20 0M2 8c4-4 16-4 20 0"/></svg></div>
<div class="vcard-meta">
<div class="tag">Vertical 02 · Geophysics</div>
<h3>Schumann · Geomagnetic Anomalies</h3>
<p>The Earth-ionosphere cavity resonances near 7.83, 14.3, 20.8, 27.3, 33.8 Hz, with a transient mode-amplitude excursion. Same physics as the live hero waterfall — sent through the kernel as a flat numeric series.</p>
</div>
<div class="vcard-num">02/06</div>
</div>
<div class="vcard-body">
<div class="vcard-left">
<label>Generated Sample · Schumann spectrum</label>
<div class="signal-preview"><canvas data-vid="schu"></canvas></div>
<div class="signal-stats" id="schuStats">spectrum — <span></span> bins · <span></span> modes · planted <span></span></div>
<div class="expected"><b>Expected result:</b> moderate F(t), with 𝒞(t) firing on the transient. The signal is multi-modal so spectral β sits near −1; the planted excursion lifts compression ratio.</div>
<div class="vcard-actions">
<button class="btn btn-solid" data-run="schu">RUN ANOMALY SCORE</button>
<button class="btn" data-regen="schu">REGENERATE SAMPLE</button>
<a class="btn" href="index.html#openSchumann" onclick="window.location='index.html';return false;">OPEN LIVE WATERFALL ↗</a>
</div>
</div>
<div class="vcard-right">
<label>Diagnostics · /v1/anomaly/score</label>
<div class="diag" data-out="schu"><div class="placeholder">Press <b>RUN ANOMALY SCORE</b> to send the spectrum to the kernel.</div></div>
</div>
</div>
</article>
<!-- 3. FINANCE -->
<article class="vcard" id="finance">
<div class="vcard-head">
<div class="vcard-ico"><svg viewBox="0 0 24 24"><path d="M3 20V4M3 20h18M7 16l4-6 3 4 6-9"/></svg></div>
<div class="vcard-meta">
<div class="tag">Vertical 03 · Markets</div>
<h3>Financial Tick Anomalies</h3>
<p>Mid-price tick series with a microstructure burst — momentary volatility cluster, mean-reverting within seconds. The kind of pattern that's noise on a 1-minute candle and signal at tick resolution.</p>
</div>
<div class="vcard-num">03/06</div>
</div>
<div class="vcard-body">
<div class="vcard-left">
<label>Generated Sample · log-returns (ticks)</label>
<div class="signal-preview"><canvas data-vid="fin"></canvas></div>
<div class="signal-stats" id="finStats">ticks — <span></span> samples · drift <span></span> · planted <span></span></div>
<div class="expected"><b>Expected result:</b> spectral β near zero (white-ish noise) outside the burst; AR(1) φ tightens during the cluster; verdict flagged when the kernel sees the variance regime change.</div>
<div class="vcard-actions">
<button class="btn btn-solid" data-run="fin">RUN ANOMALY SCORE</button>
<button class="btn" data-regen="fin">REGENERATE SAMPLE</button>
</div>
</div>
<div class="vcard-right">
<label>Diagnostics · /v1/anomaly/score</label>
<div class="diag" data-out="fin"><div class="placeholder">Press <b>RUN ANOMALY SCORE</b> to send the tick series to the kernel.</div></div>
</div>
</div>
</article>
<!-- 4. INDUSTRIAL VIBRATION -->
<article class="vcard" id="vibration">
<div class="vcard-head">
<div class="vcard-ico"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 2M12 12l-4 4"/></svg></div>
<div class="vcard-meta">
<div class="tag">Vertical 04 · Industrial</div>
<h3>Vibration · Predictive Maintenance</h3>
<p>Rotating-machinery accelerometer trace with a developing bearing fault — a low-amplitude sub-harmonic emerging beneath the fundamental rotation frequency. The textbook precursor for catastrophic failure.</p>
</div>
<div class="vcard-num">04/06</div>
</div>
<div class="vcard-body">
<div class="vcard-left">
<label>Generated Sample · accelerometer (g)</label>
<div class="signal-preview"><canvas data-vid="vib"></canvas></div>
<div class="signal-stats" id="vibStats">trace — <span></span> samples · base <span></span> Hz · planted <span></span></div>
<div class="expected"><b>Expected result:</b> the EML symbolic head should recover a clean closed form for the baseline and leave a structured residual — that residual is the fault. F(t) climbs steadily through the trace.</div>
<div class="vcard-actions">
<button class="btn btn-solid" data-run="vib">RUN ANOMALY SCORE</button>
<button class="btn" data-regen="vib">REGENERATE SAMPLE</button>
</div>
</div>
<div class="vcard-right">
<label>Diagnostics · /v1/anomaly/score</label>
<div class="diag" data-out="vib"><div class="placeholder">Press <b>RUN ANOMALY SCORE</b> to send the accelerometer trace to the kernel.</div></div>
</div>
</div>
</article>
<!-- 5. NETWORK TELEMETRY -->
<article class="vcard" id="network">
<div class="vcard-head">
<div class="vcard-ico"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M3 12h18M12 3a14 14 0 0 1 0 18M12 3a14 14 0 0 0 0 18"/></svg></div>
<div class="vcard-meta">
<div class="tag">Vertical 05 · Infrastructure</div>
<h3>Network Telemetry · Latency Spikes</h3>
<p>HTTP request latency series with a covert slow-burn — the kind of pattern that hides under a normal SLO chart but is visible as a coherence drift. Useful for SRE on-call, DDoS pre-detection, CDN edge monitoring.</p>
</div>
<div class="vcard-num">05/06</div>
</div>
<div class="vcard-body">
<div class="vcard-left">
<label>Generated Sample · p99 latency (ms)</label>
<div class="signal-preview"><canvas data-vid="net"></canvas></div>
<div class="signal-stats" id="netStats">series — <span></span> samples · baseline p99 <span></span> ms · planted <span></span></div>
<div class="expected"><b>Expected result:</b> baseline causal coherence stays low; the planted drift raises 𝒞(t) before the mean shifts enough to trip a threshold alarm. F(t) climbs gradually — early-warning behaviour.</div>
<div class="vcard-actions">
<button class="btn btn-solid" data-run="net">RUN ANOMALY SCORE</button>
<button class="btn" data-regen="net">REGENERATE SAMPLE</button>
</div>
</div>
<div class="vcard-right">
<label>Diagnostics · /v1/anomaly/score</label>
<div class="diag" data-out="net"><div class="placeholder">Press <b>RUN ANOMALY SCORE</b> to send the latency series to the kernel.</div></div>
</div>
</div>
</article>
<!-- 6. LINGUISTIC -->
<article class="vcard" id="text">
<div class="vcard-head">
<div class="vcard-ico"><svg viewBox="0 0 24 24"><path d="M4 6h16M4 12h16M4 18h10"/></svg></div>
<div class="vcard-meta">
<div class="tag">Vertical 06 · Linguistic</div>
<h3>Text · LLM Output Auditing</h3>
<p>Two short documents passed in TEXT mode — one drawn from a natural English corpus, one with a degenerate-repeat block in the middle (a common LLM failure mode). Compare Zipf α, conditional entropy, compression ratio side by side.</p>
</div>
<div class="vcard-num">06/06</div>
</div>
<div class="vcard-body">
<div class="vcard-left">
<label>Sample · normal English</label>
<textarea id="textNormal" readonly style="width:100%;height:90px;background:var(--panel);border:1px solid var(--line);border-radius:9px;color:#ddd;font-family:var(--mono);font-size:11.5px;line-height:1.6;padding:11px;resize:vertical;margin-bottom:10px">the quick brown fox jumps over the lazy dog and then walks slowly along the riverbank watching the small fish dart between stones in the clear shallow water</textarea>
<label>Sample · LLM degenerate repeat</label>
<textarea id="textDegenerate" readonly style="width:100%;height:90px;background:var(--panel);border:1px solid var(--line);border-radius:9px;color:#ddd;font-family:var(--mono);font-size:11.5px;line-height:1.6;padding:11px;resize:vertical;margin-bottom:14px">the model is the model is the model is the model is the model is the model is the model is the model is the model is the model is the model is the model</textarea>
<div class="expected"><b>Expected result:</b> the degenerate string collapses Zipf α, drops conditional entropy H₁, and lifts compression ratio toward the floor. The kernel flags it; the normal sample does not.</div>
<div class="vcard-actions">
<button class="btn btn-solid" data-run="txt">SCORE BOTH</button>
</div>
</div>
<div class="vcard-right">
<label>Diagnostics · normal vs degenerate</label>
<div class="diag" data-out="txt"><div class="placeholder">Press <b>SCORE BOTH</b> to run each sample and compare diagnostics.</div></div>
</div>
</div>
</article>
</div>
</section>
<!-- BULK PRICING -->
<section class="section reveal" id="bulk">
<div class="sec-tag">Volume Pricing</div>
<h2 class="sec-title">Move past per-call. <b>Lock a tier.</b></h2>
<p class="sec-lead">Per-call USDC is right for trials, integrations, and casual use. For a research lab, monitoring stack, or production workload, lock a monthly tier paid up front in USDC. Same kernel, same endpoints, same diagnostics — just no per-call settlement on the hot path.</p>
<div class="bulk-grid">
<div class="bulk-card">
<div class="nm">Researcher</div>
<div class="fig">$49<small>/mo</small></div>
<div class="feat">1M scores · 200k symbolic fits · 1 wallet · USDC up front · email support</div>
</div>
<div class="bulk-card">
<div class="nm">Lab</div>
<div class="fig">$499<small>/mo</small></div>
<div class="feat">12M scores · 2.5M symbolic fits · 5 wallets · priority routing · shared Slack channel · quarterly review</div>
</div>
<div class="bulk-card">
<div class="nm">Production</div>
<div class="fig">$4,900<small>/mo</small></div>
<div class="feat">150M scores · 30M symbolic fits · 50 wallets · dedicated kernel instance · 99.5% SLA · on-call</div>
</div>
</div>
<div class="bulk" style="margin-top:24px">
<div class="l">
<h3>Need something larger or vertical-specific?</h3>
<p>Custom volume, on-prem deployment, regulated industries (clinical, financial, defence), or a vertical-tuned generative prior. Bring the data, we'll quote the rig.</p>
</div>
<a class="btn btn-solid" href="agents.html">CONTACT VIA AGENT FLOW →</a>
</div>
</section>
<footer>
<div class="foot-top">
<div class="foot-brand">
<div class="fl"><div class="fl-mark"><img src="data:image/jpeg;base64,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" alt="METASTATE"></div><div class="fname">METASTATE</div></div>
<p>A free-energy kernel for anomalous-signal detection. Built by NWO &amp; Imperium Romanum Digital Nation State. MIT-licensed.</p>
</div>
<div class="foot-cols">
<div class="foot-col"><h5>Product</h5><a href="index.html">Overview</a><a href="solutions.html">Solutions</a><a href="index.html#console">Signal Console</a><a href="index.html#pricing">Pricing</a></div>
<div class="foot-col"><h5>Developers</h5><a href="index.html#api">API</a><a href="affiliate.html">Affiliate</a><a href="roadmap.html">Roadmap</a><a href="contribute.html">Contribute</a></div>
<div class="foot-col"><h5>Subpages</h5><a href="architecture.html">Architecture</a><a href="research.html">Research</a><a href="agents.html">Agents</a><a href="sovereignty.html">Sovereignty</a></div>
</div>
</div>
<div class="foot-bottom"><span>© 2026 NWO · IMPERIUM ROMANUM · MIT</span><span>TREASURY 0x2E96…0958 · BASE · USDC</span></div>
</footer>
</div>
<script>
/* ============================================================
METASTATE Solutions — vertical samples + one-click kernel runs
Each vertical generates a domain-realistic signal in the browser,
sends it to /v1/anomaly/score, and renders the diagnostics.
============================================================ */
const KERNEL_BASE = ''; // same-origin on the live Space; preview shows graceful errors
/* sidebar (mirrors index.html) */
const sb=document.getElementById('sidebar'),tog=document.getElementById('sbToggle');
const big=window.matchMedia('(min-width:1081px)');
function initSb(){if(big.matches){document.body.classList.remove('sb-collapsed');sb.classList.remove('collapsed','open');}else{document.body.classList.add('sb-collapsed');sb.classList.add('collapsed');sb.classList.remove('open');}}
initSb();big.addEventListener('change',initSb);
tog.addEventListener('click',()=>{if(big.matches){const c=document.body.classList.toggle('sb-collapsed');sb.classList.toggle('collapsed',c);}else{sb.classList.toggle('open');}});
document.querySelectorAll('.sb-link').forEach(l=>l.addEventListener('click',()=>{if(!big.matches)sb.classList.remove('open');}));
/* reveal */
const io=new IntersectionObserver(es=>es.forEach(e=>{if(e.isIntersecting)e.target.classList.add('in');}),{threshold:.08});
document.querySelectorAll('.reveal').forEach(el=>io.observe(el));
/* ===== sample generators ===== */
function rand(){return Math.random();}
function randn(){let u=0,v=0;while(!u)u=rand();while(!v)v=rand();return Math.sqrt(-2*Math.log(u))*Math.cos(2*Math.PI*v);}
/* 1. ECG — sinus rhythm with a PVC */
function genECG(n=400){
const fs=250, hr=70, period=Math.round(fs*60/hr);
const s=new Array(n).fill(0);
// baseline PQRST template, simplified
function pqrst(off,amp=1){
const t=[];
for(let i=0;i<period;i++){
let v=0;
const p=i, q=period;
v += 0.10*amp*Math.exp(-Math.pow((p-q*0.18)/3,2)); // P
v -= 0.18*amp*Math.exp(-Math.pow((p-q*0.27)/2,2)); // Q
v += 1.00*amp*Math.exp(-Math.pow((p-q*0.30)/1.4,2)); // R
v -= 0.30*amp*Math.exp(-Math.pow((p-q*0.34)/2.5,2)); // S
v += 0.22*amp*Math.exp(-Math.pow((p-q*0.55)/6,2)); // T
t.push(v);
}
for(let i=0;i<period && off+i<n;i++) s[off+i]+=t[i];
}
let pos=0; let beat=0;
while(pos<n){
// plant a wide, tall PVC at beat 4
const isPVC=(beat===4);
if(isPVC){
for(let i=0;i<period && pos+i<n;i++){
const p=i, q=period;
let v = 1.55*Math.exp(-Math.pow((p-q*0.32)/4.5,2)) // wide R
- 0.45*Math.exp(-Math.pow((p-q*0.42)/5.5,2)); // deep S
s[pos+i]+=v;
}
} else { pqrst(pos,1); }
pos+=period; beat++;
}
// noise + drift
for(let i=0;i<n;i++) s[i]+= 0.02*randn() + 0.03*Math.sin(i/55);
return {series:s, label:`${n} samples · ${fs} Hz`, planted:'PVC at beat 4'};
}
/* 2. Schumann — multi-mode spectrum + transient */
function genSchu(n=240){
const modes=[7.83,14.3,20.8,27.3,33.8];
const s=new Array(n).fill(0);
const transStart=Math.floor(n*0.62), transEnd=Math.floor(n*0.72);
for(let i=0;i<n;i++){
const f=(i/n)*40;
let v=0;
modes.forEach((m,k)=>{
const w=0.6+0.15*k, base=m+0.3*Math.sin(i/30+k);
v += (1/(k+1))*Math.exp(-((f-base)*(f-base))/(2*w*w));
});
v += 0.10/(1+f*0.15) + 0.03*Math.abs(randn());
if(i>=transStart && i<=transEnd){
v += 0.9*Math.exp(-((f-12)*(f-12))/(2*1.5*1.5)) * Math.sin(Math.PI*(i-transStart)/(transEnd-transStart));
}
s[i]=v;
}
return {series:s, label:`${n} bins · 5 modes`, planted:'~12 Hz transient burst'};
}
/* 3. Finance — log-returns with volatility burst */
function genFin(n=300){
const s=new Array(n).fill(0);
const burstStart=Math.floor(n*0.55), burstEnd=Math.floor(n*0.70);
let drift=0.0001;
for(let i=0;i<n;i++){
let sigma=0.0008;
if(i>=burstStart && i<=burstEnd) sigma*=4.2;
s[i] = drift + sigma*randn();
}
return {series:s, label:`${n} ticks · drift +0.01bp`, planted:'4.2× variance burst'};
}
/* 4. Vibration — sinusoid base + emerging subharmonic */
function genVib(n=360){
const fs=2000, f0=83;
const s=new Array(n).fill(0);
for(let i=0;i<n;i++){
const t=i/fs;
let v = 0.6*Math.sin(2*Math.PI*f0*t) + 0.25*Math.sin(2*Math.PI*2*f0*t);
// fault subharmonic emerging
const fault = (i/n);
v += fault*0.35*Math.sin(2*Math.PI*(f0/3)*t) + 0.02*randn();
s[i]=v;
}
return {series:s, label:`${n} samples · ${fs} Hz · f₀ ${f0}Hz`, planted:'subharmonic at f₀/3, ramping'};
}
/* 5. Network — latency with covert drift */
function genNet(n=300){
const s=new Array(n).fill(0);
const driftStart=Math.floor(n*0.50);
for(let i=0;i<n;i++){
const base = 42 + 3.5*Math.sin(i/20);
const jitter = 4*Math.abs(randn());
let drift=0;
if(i>=driftStart) drift = (i-driftStart)*0.18; // ramp from 0 to ~30ms
s[i] = base + jitter + drift;
}
return {series:s, label:`${n} samples · baseline p99 ~42ms`, planted:`linear drift starting @ sample ${driftStart}`};
}
/* ===== preview rendering ===== */
function drawPreview(canvas,arr){
const ctx=canvas.getContext('2d');
const r=canvas.getBoundingClientRect();
canvas.width=Math.floor(r.width*devicePixelRatio);
canvas.height=Math.floor(r.height*devicePixelRatio);
ctx.scale(devicePixelRatio,devicePixelRatio);
const W=r.width, H=r.height;
ctx.fillStyle='#040404'; ctx.fillRect(0,0,W,H);
let mn=Infinity,mx=-Infinity;
for(const v of arr){if(v<mn)mn=v;if(v>mx)mx=v;}
const pad=10, range=(mx-mn)||1;
ctx.strokeStyle='rgba(255,255,255,.10)';
for(let g=0;g<5;g++){const y=pad+(H-2*pad)*(g/4);ctx.beginPath();ctx.moveTo(0,y);ctx.lineTo(W,y);ctx.stroke();}
ctx.strokeStyle='#fff'; ctx.lineWidth=1;
ctx.beginPath();
for(let i=0;i<arr.length;i++){
const x=(i/(arr.length-1))*W;
const y=H-pad-((arr[i]-mn)/range)*(H-2*pad);
if(i===0) ctx.moveTo(x,y); else ctx.lineTo(x,y);
}
ctx.stroke();
}
/* ===== state per vertical ===== */
const state={ecg:null, schu:null, fin:null, vib:null, net:null};
function regen(vid){
let gen;
if(vid==='ecg') gen=genECG();
else if(vid==='schu') gen=genSchu();
else if(vid==='fin') gen=genFin();
else if(vid==='vib') gen=genVib();
else if(vid==='net') gen=genNet();
state[vid]=gen;
const cv=document.querySelector(`canvas[data-vid="${vid}"]`);
if(cv) drawPreview(cv,gen.series);
const statKey=vid+'Stats';
const statEl=document.getElementById(statKey);
if(statEl){
statEl.innerHTML = gen.label.split('·').map(s=>{const p=s.trim().split(' ');return `<span>${p[0]}</span> ${p.slice(1).join(' ')}`;}).join(' · ')
+ ` · planted <span>${gen.planted}</span>`;
}
}
/* run on the kernel */
async function runAnomaly(vid){
const out=document.querySelector(`[data-out="${vid}"]`);
const gen=state[vid];
if(!gen){ out.innerHTML='<div class="placeholder">Generate a sample first.</div>'; return; }
out.innerHTML='<div class="placeholder"><span class="spinner"></span>scoring on /v1/anomaly/score…</div>';
try{
const r=await fetch(KERNEL_BASE+'/v1/anomaly/score',{method:'POST',headers:{'Content-Type':'application/json'},
body:JSON.stringify({series:gen.series.map(v=>+v.toFixed(5))})});
if(!r.ok){const t=await r.text(); throw new Error('HTTP '+r.status+' '+t.slice(0,160));}
const j=await r.json();
const sig=j.universal_signatures||{};
out.innerHTML =
row('free energy F(t)', j.free_energy) +
row('causal coherence 𝒞(t)', j.causal_coherence) +
row('AR(1) φ', j.ar1_phi) +
row('spectral β', sig.spectral_beta??'—') +
row('cond. entropy H₁', sig.cond_entropy_H1??'—') +
row('compression ratio', sig.compression_ratio??'—') +
row('samples', j.n) +
`<div class="verdict ${j.flagged?'flag':''}">${j.flagged?'⚑ ':''}${j.interpretation||(j.flagged?'anomaly flagged by the kernel.':'within baseline expectation.')}</div>`;
}catch(e){
out.innerHTML = `<div class="placeholder">Kernel unreachable in preview. On the live Space at <b>cpater-metastate.hf.space</b> this returns full diagnostics. <br><br><span style="color:var(--dim);font-size:11px">error: ${(e.message||e).toString().slice(0,200)}</span></div>`;
}
}
function row(k,v){return `<div class="row"><span class="k">${k}</span><span class="v">${typeof v==='number'?v.toFixed(4):v}</span></div>`;}
/* text vertical — score both samples and compare */
async function runText(){
const out=document.querySelector('[data-out="txt"]');
out.innerHTML='<div class="placeholder"><span class="spinner"></span>scoring both samples…</div>';
const a=document.getElementById('textNormal').value;
const b=document.getElementById('textDegenerate').value;
async function scoreText(t){
const r=await fetch(KERNEL_BASE+'/v1/anomaly/score',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({text:t})});
if(!r.ok)throw new Error('HTTP '+r.status);
return r.json();
}
try{
const [ja,jb]=await Promise.all([scoreText(a),scoreText(b)]);
const sa=ja.universal_signatures||{}, sb=jb.universal_signatures||{};
out.innerHTML =
`<div style="font-family:var(--mono);font-size:9.5px;letter-spacing:1.5px;color:var(--dim);text-transform:uppercase;margin-bottom:6px">normal sample</div>` +
row('free energy F(t)', ja.free_energy) +
row('zipf α', sa.zipf_alpha??'—') +
row('cond. entropy H₁', sa.cond_entropy_H1??'—') +
row('compression ratio', sa.compression_ratio??'—') +
`<div class="verdict ${ja.flagged?'flag':''}">${ja.flagged?'⚑ ':''}${ja.interpretation||'within baseline.'}</div>` +
`<div style="font-family:var(--mono);font-size:9.5px;letter-spacing:1.5px;color:var(--dim);text-transform:uppercase;margin:18px 0 6px">degenerate sample</div>` +
row('free energy F(t)', jb.free_energy) +
row('zipf α', sb.zipf_alpha??'—') +
row('cond. entropy H₁', sb.cond_entropy_H1??'—') +
row('compression ratio', sb.compression_ratio??'—') +
`<div class="verdict ${jb.flagged?'flag':''}">${jb.flagged?'⚑ ':''}${jb.interpretation||'within baseline.'}</div>`;
}catch(e){
out.innerHTML=`<div class="placeholder">Kernel unreachable in preview. On the live Space this returns side-by-side text diagnostics. <br><br><span style="color:var(--dim);font-size:11px">error: ${(e.message||e).toString().slice(0,160)}</span></div>`;
}
}
/* wire buttons */
document.querySelectorAll('[data-run]').forEach(b=>b.addEventListener('click',()=>{
const v=b.dataset.run; if(v==='txt') return runText(); runAnomaly(v);
}));
document.querySelectorAll('[data-regen]').forEach(b=>b.addEventListener('click',()=>regen(b.dataset.regen)));
/* boot all previews */
['ecg','schu','fin','vib','net'].forEach(regen);
window.addEventListener('resize',()=>['ecg','schu','fin','vib','net'].forEach(v=>{
const cv=document.querySelector(`canvas[data-vid="${v}"]`);
if(cv && state[v]) drawPreview(cv,state[v].series);
}));
</script>
</body>
</html>