<!doctype html>
<html lang="en"><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Graphshell identity surface</title>
<style>
:root{color-scheme:dark;--bg:#090b12;--panel:#131827;--line:#2b3349;--ink:#f2f5ff;--muted:#a7afc2;--accent:#b9a4ff;--warn:#ffbc7a}*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 15% 0,#272146 0,transparent 35%),var(--bg);color:var(--ink);font:15px/1.45 Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif}.shell{width:min(1180px,calc(100% - 30px));margin:auto;padding:44px 0 64px}.eyebrow{color:var(--accent);font-size:12px;font-weight:800;letter-spacing:.16em;text-transform:uppercase}h1{margin:6px 0 10px;font-size:clamp(34px,5vw,58px);line-height:1.02;letter-spacing:-.04em}.lede{max-width:760px;color:var(--muted);font-size:17px}.grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-top:28px}.card{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:17px;background:rgba(19,24,39,.95);overflow:hidden}.card header{padding:17px 18px;border-bottom:1px solid var(--line)}h2{margin:0;font-size:19px}.badges{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px}.badge{padding:3px 8px;border:1px solid #4a5270;border-radius:999px;color:#cbd2e4;font-size:11px}.values{margin:0;padding:13px 18px}.row{padding:8px 0;border-bottom:1px solid #252c3e}.row:last-child{border:0}dt{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.06em}dd{margin:2px 0 0;overflow-wrap:anywhere}.actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:auto;padding:0 18px 18px}.actions button{border:1px solid #66579d;border-radius:9px;background:#251f3b;color:#f4efff;padding:8px 11px;font:inherit;font-weight:700}.actions button.deny{border-color:#7a4a4a;background:#301d24;color:#ffd6d2}@media(max-width:900px){.grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:610px){.shell{padding-top:26px}.grid{grid-template-columns:1fr}}
</style></head><body><main class="shell">
<p class="eyebrow">Graphshell H4 · Personae</p>
<h1>Your identities are graph objects.</h1>
<p class="lede">Public keys, devices, grants, vault posture, and real signing requests share one portable surface. Private material remains inside the native authority.</p>
<section class="grid">
<article class="card" data-key="identity:vault"><header><h2>Identity vault</h2><div class="badges"><span class="badge">Personae</span><span class="badge">native authority</span></div></header><dl class="values"><div class="row"><dt>Protection</dt><dd>ephemeral</dd></div><div class="row"><dt>State</dt><dd>unlocked</dd></div><div class="row"><dt>SSH agent</dt><dd>standalone agent retained</dd></div></dl><div class="actions"><button class="approve" data-intent="graphshell.identity.ssh.generate" data-schema="graphshell.identity.ssh.generate/v1" data-request-id="" data-payload="" data-native-only="true">Generate SSH key…</button><button class="approve" data-intent="graphshell.identity.ssh.import-native" data-schema="graphshell.identity.ssh.import-native/v1" data-request-id="" data-payload="" data-native-only="true">Import SSH key…</button></div></article><article class="card" data-key="identity:profile:research"><header><h2>Research</h2><div class="badges"><span class="badge">selected profile</span></div></header><dl class="values"><div class="row"><dt>Profile</dt><dd>research</dd></div><div class="row"><dt>Master public key</dt><dd>blake3:8c25139816f6aa2acbeaf7cbb6d2be7dc3b62c39e5c5a6b744076e9c4dffb552</dd></div><div class="row"><dt>Slots</dt><dd>1</dd></div></dl></article><article class="card" data-key="identity:ssh:SHA256:q+xqnBy+MlunasvchBD/SKAHKNMMWjPeoNajG0zZAvM"><header><h2>Graphshell receipt key</h2><div class="badges"><span class="badge">SSH</span><span class="badge">public export</span></div></header><dl class="values"><div class="row"><dt>Fingerprint</dt><dd>SHA256:q+xqnBy+MlunasvchBD/SKAHKNMMWjPeoNajG0zZAvM</dd></div><div class="row"><dt>Unlock</dt><dd>every use</dd></div><div class="row"><dt>Lineage</dt><dd>locally generated, externally registered</dd></div><div class="row"><dt>Device loss</dt><dd>Not recoverable from the vault alone: register a replacement with the service. A recovery phrase unlocks the vault; it does not regenerate this key.</dd></div><div class="row"><dt>Public key</dt><dd>ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAUu+3TQrfes88MCaEUjyFgFEoPDiWwAt7YKNGYC+ef3 Graphshell receipt key</dd></div></dl><div class="actions"><button class="approve" data-intent="graphshell.identity.ssh.remove" data-schema="graphshell.identity.ssh.remove/v1" data-request-id="" data-payload="{"confirmed":false,"fingerprint":"SHA256:q+xqnBy+MlunasvchBD/SKAHKNMMWjPeoNajG0zZAvM"}" data-native-only="true">Remove key…</button></div></article><article class="card" data-key="identity:pending:49525ae6-1ec0-4708-a877-5cd902a32ad5"><header><h2>Signing approval</h2><div class="badges"><span class="badge">pending</span><span class="badge">every use</span></div></header><dl class="values"><div class="row"><dt>Request</dt><dd>49525ae6-1ec0-4708-a877-5cd902a32ad5</dd></div><div class="row"><dt>Profile</dt><dd>research</dd></div><div class="row"><dt>Key</dt><dd>SHA256:q+xqnBy+MlunasvchBD/SKAHKNMMWjPeoNajG0zZAvM</dd></div><div class="row"><dt>Operation</dt><dd>ssh.sign</dd></div><div class="row"><dt>Requester</dt><dd>unknown</dd></div><div class="row"><dt>Process</dt><dd>unknown</dd></div><div class="row"><dt>Target</dt><dd>unknown</dd></div><div class="row"><dt>Payload digest</dt><dd>blake3:8aaba30dbb215582a8d498aa1b5270f43320798db51ad42c537cea038bee278c</dd></div></dl><div class="actions"><button class="approve" data-intent="graphshell.identity.signing.approve-once" data-schema="graphshell.identity.signing-decision/v1" data-request-id="49525ae6-1ec0-4708-a877-5cd902a32ad5" data-payload="{"request_id":"49525ae6-1ec0-4708-a877-5cd902a32ad5"}" data-native-only="true">Approve once</button><button class="deny" data-intent="graphshell.identity.signing.deny" data-schema="graphshell.identity.signing-decision/v1" data-request-id="49525ae6-1ec0-4708-a877-5cd902a32ad5" data-payload="{"request_id":"49525ae6-1ec0-4708-a877-5cd902a32ad5"}" data-native-only="true">Deny</button></div></article></section></main></body></html>