Spaces:
Running
Running
fix(sweep): reclaim dormant anatomy-3D pages + purge sunset-domain/purple (byte-aligned GitHub de9e538)
41cbff8 verified | <!-- SPDX-License-Identifier: Apache-2.0 | |
| © 2026 SZL Holdings — a11oy Elite Console | |
| 20 fully-functional tabs, zero mocks. Every tile bound to a REAL /api/a11oy/… endpoint. | |
| Doctrine v11 LOCKED · 749/14/163 · c7c0ba17 · Λ = Conjecture 1 (NOT a theorem) | |
| 3D: Three.js r128 vendored. Inspiration: New Relic APM 360 + Palantir Foundry + Datadog. | |
| Co-Authored-By: Perplexity Computer Agent <agent@perplexity.ai> | |
| Signed-off-by: Stephen P. Lutar Jr. <stephenlutar2@gmail.com> --> | |
| <html lang="en" data-theme="dark"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover"> | |
| <meta name="theme-color" content="#0d0b1e"> | |
| <title>a11oy · Elite Console — 20 Surfaces — SZL Holdings</title> | |
| <!-- SOVEREIGN: 0 runtime CDN. Fonts self-hosted in-image, served same-origin at | |
| /vendor/fonts/*.woff2 (SAME pattern as the clean console). NO external font CDN. --> | |
| <style> | |
| @font-face{font-family:'Space Grotesk';font-style:normal;font-weight:300 700;font-display:swap;src:url('/vendor/fonts/SpaceGrotesk.woff2') format('woff2');} | |
| @font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400 500;font-display:swap;src:url('/vendor/fonts/JetBrainsMono.woff2') format('woff2');} | |
| </style> | |
| <style> | |
| /* ═══════════════════ SZL Design System — Elite Palette ═══════════════════ */ | |
| :root { | |
| /* Core brand */ | |
| --gold:#d4a574; --gold-bright:#f0c88a; --gold-dim:#7a5a30; --gold-glow:rgba(212,165,116,.25); | |
| --indigo:#0d0b1e; --indigo2:#13102a; --indigo3:#1a1640; | |
| --terra:#c0523a; --terra-dim:#8a3020; | |
| --parchment:#f4e4c1; | |
| /* Surfaces */ | |
| --bg:#080617; --bg2:#0e0c22; --panel:#141130; --panel2:#0f0d26; | |
| --panel-hover:#1a1740; --line:#24204a; --line-bright:#3a3466; | |
| /* Text */ | |
| --text:#f0e8d8; --text-dim:#b0a8c8; --text-muted:#6860a0; | |
| /* Semantic */ | |
| --green:#3ecf7a; --green-dim:rgba(62,207,122,.15); | |
| --red:#e05050; --red-dim:rgba(224,80,80,.15); | |
| --amber:#e8b030; --amber-dim:rgba(232,176,48,.12); | |
| --blue:#4090f0; --blue-dim:rgba(64,144,240,.12); | |
| --purple:#5b8dee; --purple-dim:rgba(91,141,238,.12); | |
| --cyan:#30d8e0; --cyan-dim:rgba(48,216,224,.12); | |
| /* Type */ | |
| --sans:'Inter',system-ui,sans-serif; | |
| --mono:'JetBrains Mono',ui-monospace,monospace; | |
| /* Geometry */ | |
| --r:12px; --r-lg:18px; | |
| --shadow:0 8px 32px rgba(0,0,0,.55),0 2px 6px rgba(0,0,0,.3); | |
| --shadow-glow:0 0 40px var(--gold-glow); | |
| } | |
| [data-theme="light"] { | |
| --bg:#f0e8d8; --bg2:#e8dfc8; --panel:#fff8ec; --panel2:#fdf4e0; | |
| --panel-hover:#fff3d8; --line:#e0d0a8; --line-bright:#c8b888; | |
| --text:#180e40; --text-dim:#4a3e70; --text-muted:#8a7ab0; | |
| --shadow:0 8px 32px rgba(42,30,92,.12); | |
| } | |
| /* ═══ Reset & Base ═══ */ | |
| *, *::before, *::after { box-sizing:border-box; margin:0; padding:0 } | |
| html { scroll-behavior:smooth; height:100% } | |
| body { | |
| font:14px/1.55 var(--sans); color:var(--text); background:var(--bg); | |
| overflow-x:hidden; min-height:100vh; | |
| background-image: | |
| radial-gradient(ellipse 80% 40% at 70% -5%, rgba(91,141,238,.12) 0%, transparent 60%), | |
| radial-gradient(ellipse 60% 30% at 0% 90%, rgba(212,165,116,.08) 0%, transparent 55%); | |
| } | |
| a { color:var(--gold); text-decoration:none } | |
| a:hover { color:var(--gold-bright); text-decoration:underline } | |
| code { font-family:var(--mono); font-size:.9em } | |
| input, button, select { font:inherit } | |
| /* ═══ Scrollbar ═══ */ | |
| ::-webkit-scrollbar { width:6px; height:6px } | |
| ::-webkit-scrollbar-track { background:var(--bg2) } | |
| ::-webkit-scrollbar-thumb { background:var(--line-bright); border-radius:3px } | |
| /* ═══ Fixed chrome ═══ */ | |
| .trace-badge { | |
| position:fixed; top:12px; left:16px; z-index:100; | |
| display:flex; align-items:center; gap:8px; | |
| background:color-mix(in srgb,var(--panel) 90%,transparent); | |
| backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); | |
| border:1px solid var(--line-bright); border-radius:999px; | |
| padding:5px 13px; font:600 10px/1 var(--mono); color:var(--text-dim); | |
| } | |
| .trace-badge .dot { width:7px; height:7px; border-radius:50%; background:var(--text-muted) } | |
| .trace-badge.live .dot { background:var(--green); animation:pulse 1.8s infinite } | |
| .trace-badge .tid { color:var(--cyan); max-width:160px; overflow:hidden; text-overflow:ellipsis } | |
| @keyframes pulse { | |
| 0% { box-shadow:0 0 0 0 rgba(62,207,122,.7) } | |
| 70% { box-shadow:0 0 0 7px rgba(62,207,122,0) } | |
| 100% { box-shadow:0 0 0 0 rgba(62,207,122,0) } | |
| } | |
| .doctrine-plaque { | |
| position:fixed; top:12px; right:16px; z-index:100; | |
| background:linear-gradient(135deg,color-mix(in srgb,var(--indigo3) 80%,transparent),var(--panel)); | |
| border:1px solid var(--gold-dim); border-radius:10px; | |
| padding:8px 13px; font:600 10px/1.6 var(--mono); color:var(--text-dim); | |
| max-width:280px; box-shadow:var(--shadow); | |
| } | |
| .doctrine-plaque b { color:var(--gold) } | |
| .doctrine-plaque .sep { color:var(--gold-dim) } | |
| .theme-btn { | |
| position:fixed; bottom:20px; right:20px; z-index:100; | |
| width:42px; height:42px; border-radius:50%; border:1px solid var(--line-bright); | |
| background:var(--panel); color:var(--gold); font-size:18px; cursor:pointer; | |
| box-shadow:var(--shadow); display:grid; place-items:center; | |
| transition:transform .2s, box-shadow .2s; | |
| } | |
| .theme-btn:hover { transform:scale(1.1) rotate(15deg); box-shadow:var(--shadow-glow) } | |
| /* ═══ Header ═══ */ | |
| .header { | |
| display:flex; align-items:center; gap:16px; | |
| padding:52px 24px 16px; max-width:1600px; margin:0 auto; | |
| } | |
| .logo { display:flex; align-items:center; gap:12px } | |
| .logo svg { width:40px; height:40px; flex-shrink:0 } | |
| .logo-text { display:flex; flex-direction:column; gap:2px } | |
| .logo-name { font:900 20px/1 var(--sans); letter-spacing:-.5px } | |
| .logo-name .accent { color:var(--terra) } | |
| .logo-sub { font:500 11px/1.3 var(--mono); color:var(--text-muted) } | |
| .header-spacer { flex:1 } | |
| .slsa-badge { | |
| display:flex; align-items:center; gap:7px; padding:6px 12px; | |
| border:1px solid var(--green); border-radius:999px; | |
| font:700 10px/1 var(--mono); color:var(--green); | |
| background:var(--green-dim); | |
| } | |
| /* ═══ Tab Bar ═══ */ | |
| .tabbar-wrap { | |
| position:sticky; top:0; z-index:90; | |
| background:color-mix(in srgb,var(--bg) 92%,transparent); | |
| backdrop-filter:blur(18px); -webkit-backdrop-filter:blur(18px); | |
| border-bottom:1px solid var(--line); | |
| } | |
| .tabbar { | |
| display:flex; gap:0; padding:0 16px; max-width:1600px; margin:0 auto; | |
| overflow-x:auto; scrollbar-width:none; | |
| } | |
| .tabbar::-webkit-scrollbar { display:none } | |
| .tab-btn { | |
| flex-shrink:0; padding:11px 16px; font:600 11px/1 var(--sans); | |
| color:var(--text-muted); border:none; background:none; cursor:pointer; | |
| border-bottom:2px solid transparent; transition:color .15s, border-color .15s; | |
| letter-spacing:.2px; white-space:nowrap; | |
| } | |
| .tab-btn:hover { color:var(--text-dim) } | |
| .tab-btn.active { color:var(--gold); border-bottom-color:var(--gold) } | |
| .tab-btn .ti { margin-right:6px; font-size:13px } | |
| /* ═══ Panels ═══ */ | |
| .panel-wrap { max-width:1600px; margin:0 auto; padding:20px 20px 40px } | |
| .tab-panel { display:none } | |
| .tab-panel.active { display:block } | |
| /* ═══ Grid System ═══ */ | |
| .grid { display:grid; gap:16px } | |
| .g-2 { grid-template-columns:1fr 1fr } | |
| .g-3 { grid-template-columns:1fr 1fr 1fr } | |
| .g-4 { grid-template-columns:1fr 1fr 1fr 1fr } | |
| .g-2-1 { grid-template-columns:2fr 1fr } | |
| .g-1-2 { grid-template-columns:1fr 2fr } | |
| .g-3-1 { grid-template-columns:3fr 1fr } | |
| @media(max-width:900px) { .g-2,.g-3,.g-4,.g-2-1,.g-1-2,.g-3-1 { grid-template-columns:1fr } } | |
| /* ═══ Cards ═══ */ | |
| .card { | |
| background:linear-gradient(160deg,var(--panel),var(--panel2)); | |
| border:1px solid var(--line); border-radius:var(--r-lg); | |
| overflow:hidden; transition:border-color .2s, transform .18s; | |
| box-shadow:var(--shadow); | |
| } | |
| .card:hover { border-color:var(--line-bright); transform:translateY(-1px) } | |
| .card-head { | |
| display:flex; align-items:center; gap:9px; | |
| padding:13px 16px; border-bottom:1px solid var(--line); | |
| font:700 12px/1 var(--sans); letter-spacing:.2px; | |
| } | |
| .card-head .icon { font-size:14px } | |
| .card-head .pill { | |
| margin-left:auto; font:600 9px/1 var(--mono); padding:4px 8px; | |
| border:1px solid var(--gold-dim); border-radius:999px; color:var(--gold); | |
| background:var(--gold-glow); | |
| } | |
| .card-head .dot-status { width:8px; height:8px; border-radius:50%; flex-shrink:0 } | |
| .dot-ok { background:var(--green)!important; box-shadow:0 0 8px var(--green) } | |
| .dot-warn { background:var(--amber)!important; box-shadow:0 0 8px var(--amber) } | |
| .dot-err { background:var(--red)!important; box-shadow:0 0 8px var(--red) } | |
| .dot-idle { background:var(--text-muted)!important } | |
| .card-body { padding:16px } | |
| /* ═══ Numbers & KPIs ═══ */ | |
| .kpi { display:flex; flex-direction:column; gap:4px } | |
| .kpi-num { font:800 42px/1 var(--mono); color:var(--gold); letter-spacing:-1px } | |
| .kpi-num.good { color:var(--green) } | |
| .kpi-num.bad { color:var(--red) } | |
| .kpi-num.cyan { color:var(--cyan) } | |
| .kpi-sub { font:500 11px/1.4 var(--mono); color:var(--text-muted) } | |
| .kpi-label { font:600 10px/1 var(--sans); color:var(--text-dim); text-transform:uppercase; letter-spacing:.6px; margin-bottom:4px } | |
| /* ═══ Bar / Progress ═══ */ | |
| .progress-row { display:flex; flex-direction:column; gap:5px; margin:8px 0 } | |
| .progress-label { display:flex; justify-content:space-between; font:500 10px/1 var(--mono); color:var(--text-dim) } | |
| .progress-track { height:5px; background:var(--line); border-radius:3px; overflow:hidden } | |
| .progress-fill { height:100%; border-radius:3px; transition:width .6s ease; background:var(--gold) } | |
| .progress-fill.green { background:var(--green) } | |
| .progress-fill.blue { background:var(--blue) } | |
| .progress-fill.cyan { background:var(--cyan) } | |
| .progress-fill.red { background:var(--red) } | |
| /* ═══ Tables ═══ */ | |
| .data-table { width:100%; border-collapse:collapse; font:11px/1.5 var(--mono) } | |
| .data-table th { | |
| text-align:left; padding:7px 10px; font:600 9px/1 var(--sans); | |
| color:var(--text-muted); border-bottom:1px solid var(--line); | |
| text-transform:uppercase; letter-spacing:.6px; white-space:nowrap; | |
| } | |
| .data-table td { padding:7px 10px; border-bottom:1px solid color-mix(in srgb,var(--line) 50%,transparent); color:var(--text-dim) } | |
| .data-table tr:hover td { background:color-mix(in srgb,var(--gold) 5%,transparent) } | |
| .data-table .hash { color:var(--cyan); font-size:10px } | |
| .data-table .pass-chip { display:inline-block; padding:2px 7px; border-radius:999px; font:600 9px/1 var(--sans) } | |
| .data-table .pass { background:var(--green-dim); color:var(--green); border:1px solid var(--green) } | |
| .data-table .fail { background:var(--red-dim); color:var(--red); border:1px solid var(--red) } | |
| .data-table .warn { background:var(--amber-dim); color:var(--amber); border:1px solid var(--amber) } | |
| .data-table .info { background:var(--blue-dim); color:var(--blue); border:1px solid var(--blue) } | |
| .data-table .na { background:var(--line); color:var(--text-muted); border:1px solid var(--line-bright) } | |
| /* ═══ Skeleton ═══ */ | |
| .sk { | |
| background:linear-gradient(90deg,var(--line) 25%,color-mix(in srgb,var(--line) 60%,var(--panel)) 37%,var(--line) 63%); | |
| background-size:400% 100%; animation:shimmer 1.6s ease infinite; border-radius:6px; | |
| } | |
| @keyframes shimmer { 0%{background-position:100% 0} 100%{background-position:-100% 0} } | |
| .sk-line { height:12px; margin:8px 0 } | |
| .sk-line.w80{width:80%} .sk-line.w60{width:60%} .sk-line.w40{width:40%} | |
| .sk-block { height:56px; margin:8px 0 } | |
| /* ═══ Tags / Chips ═══ */ | |
| .tag { display:inline-block; font:600 10px/1 var(--mono); padding:3px 8px; border-radius:6px; margin:2px } | |
| .tag-gold { background:var(--gold-glow); border:1px solid var(--gold-dim); color:var(--gold) } | |
| .tag-green { background:var(--green-dim); border:1px solid var(--green); color:var(--green) } | |
| .tag-blue { background:var(--blue-dim); border:1px solid var(--blue); color:var(--blue) } | |
| .tag-purple { background:var(--purple-dim); border:1px solid var(--purple); color:var(--purple) } | |
| .tag-cyan { background:var(--cyan-dim); border:1px solid var(--cyan); color:var(--cyan) } | |
| .tag-red { background:var(--red-dim); border:1px solid var(--red); color:var(--red) } | |
| .tag-amber { background:var(--amber-dim); border:1px solid var(--amber); color:var(--amber) } | |
| .tag-muted { background:var(--line); border:1px solid var(--line-bright); color:var(--text-muted) } | |
| /* ═══ 3D Canvas Holders ═══ */ | |
| .canvas-3d { | |
| width:100%; border-radius:12px; overflow:hidden; | |
| background:radial-gradient(ellipse 60% 50% at 50% 40%, | |
| color-mix(in srgb,var(--indigo3) 80%,var(--purple-dim)),var(--bg)); | |
| position:relative; | |
| } | |
| .canvas-3d canvas { display:block; width:100%!important } | |
| .canvas-3d-label { | |
| position:absolute; bottom:10px; left:50%; transform:translateX(-50%); | |
| font:600 10px/1 var(--mono); color:var(--text-muted); | |
| background:color-mix(in srgb,var(--panel) 80%,transparent); | |
| padding:4px 10px; border-radius:999px; | |
| } | |
| /* ═══ Axis Grid ═══ */ | |
| .axis-grid { display:flex; flex-wrap:wrap; gap:7px; margin-top:12px } | |
| .axis-item { | |
| flex:1; min-width:100px; padding:10px 12px; | |
| background:var(--panel2); border:1px solid var(--line); | |
| border-radius:10px; display:flex; flex-direction:column; gap:5px; | |
| } | |
| .axis-name { font:600 10px/1 var(--sans); color:var(--text-dim); text-transform:uppercase; letter-spacing:.4px } | |
| .axis-score { font:800 16px/1 var(--mono); color:var(--gold) } | |
| .axis-bar { height:3px; background:var(--line); border-radius:2px; overflow:hidden; margin-top:4px } | |
| .axis-bar-fill { height:100%; background:linear-gradient(90deg,var(--indigo3),var(--gold)); border-radius:2px } | |
| /* ═══ Organ Map ═══ */ | |
| #organ-map-3d { height:340px } | |
| #khipu-dag-3d { height:300px } | |
| #mesh-3d { height:300px } | |
| #anatomy-3d-frame { width:100%; height:320px; border:none; border-radius:12px } | |
| /* ═══ Code Block ═══ */ | |
| .codeblock { | |
| background:var(--bg2); border:1px solid var(--line); border-radius:10px; | |
| padding:14px 16px; font:12px/1.7 var(--mono); color:var(--text-dim); | |
| overflow-x:auto; white-space:pre-wrap; word-break:break-all; | |
| } | |
| .codeblock .kw { color:var(--cyan) } | |
| .codeblock .str { color:var(--gold) } | |
| .codeblock .num { color:var(--green) } | |
| .codeblock .cmt { color:var(--text-muted) } | |
| /* ═══ Verdict Theater ═══ */ | |
| .verdict-card { | |
| border:1px solid var(--line); border-radius:10px; padding:14px 16px; margin:8px 0; | |
| background:linear-gradient(135deg,var(--panel2),var(--panel)); | |
| transition:border-color .2s; | |
| } | |
| .verdict-card:hover { border-color:var(--gold-dim) } | |
| .verdict-card .v-head { display:flex; align-items:center; gap:10px; margin-bottom:8px } | |
| .verdict-card .v-verdict { font:800 11px/1 var(--mono); padding:3px 10px; border-radius:999px } | |
| .v-pass { background:var(--green-dim); color:var(--green); border:1px solid var(--green) } | |
| .v-fail { background:var(--red-dim); color:var(--red); border:1px solid var(--red) } | |
| .verdict-card .v-action { font:700 13px/1 var(--sans); color:var(--text) } | |
| .verdict-card .v-meta { font:11px/1.4 var(--mono); color:var(--text-muted) } | |
| .verdict-card .v-witnesses { display:flex; flex-wrap:wrap; gap:5px; margin-top:8px } | |
| /* ═══ Gate Canvas ═══ */ | |
| .gate-group { margin-bottom:20px } | |
| .gate-group-name { | |
| font:700 11px/1 var(--sans); color:var(--gold); text-transform:uppercase; | |
| letter-spacing:.6px; margin-bottom:10px; padding-bottom:6px; | |
| border-bottom:1px solid var(--line); | |
| } | |
| .gate-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(200px,1fr)); gap:8px } | |
| .gate-chip { | |
| padding:10px 12px; border-radius:10px; border:1px solid var(--line); | |
| background:var(--panel2); transition:border-color .15s, background .15s; | |
| cursor:pointer; | |
| } | |
| .gate-chip:hover { border-color:var(--gold-dim); background:var(--panel-hover) } | |
| .gate-chip .gc-name { font:600 11px/1 var(--sans); color:var(--text-dim); word-break:break-word } | |
| .gate-chip .gc-lean { font:10px/1 var(--mono); color:var(--cyan); margin-top:4px; word-break:break-all } | |
| .gate-chip .gc-status { margin-top:6px } | |
| /* ═══ Genome ═══ */ | |
| .genome-row { | |
| display:grid; grid-template-columns:140px 1fr 120px 100px; | |
| gap:12px; align-items:start; padding:10px 0; | |
| border-bottom:1px solid color-mix(in srgb,var(--line) 50%,transparent); | |
| font:12px/1.5 var(--mono); | |
| } | |
| .genome-row:hover { background:color-mix(in srgb,var(--gold) 4%,transparent); border-radius:6px } | |
| .gen-formula { color:var(--gold); font-weight:700 } | |
| .gen-lean { color:var(--cyan); font-size:10px; word-break:break-all } | |
| .gen-organ { color:var(--purple) } | |
| .gen-ep { color:var(--text-muted); font-size:10px } | |
| /* ═══ SLO ═══ */ | |
| .slo-row { | |
| padding:14px 0; border-bottom:1px solid color-mix(in srgb,var(--line) 50%,transparent); | |
| } | |
| .slo-head { display:flex; align-items:center; gap:10px; margin-bottom:8px } | |
| .slo-name { font:700 13px/1 var(--sans); color:var(--text) } | |
| .slo-nums { display:flex; gap:16px; font:11px/1 var(--mono); color:var(--text-muted) } | |
| .slo-nums span { color:var(--text-dim) } | |
| .slo-nums b { color:var(--gold) } | |
| /* ═══ Alerts ═══ */ | |
| .alert-row { | |
| display:flex; align-items:flex-start; gap:12px; padding:10px 0; | |
| border-bottom:1px solid color-mix(in srgb,var(--line) 50%,transparent); | |
| } | |
| .alert-icon { width:26px; height:26px; border-radius:6px; display:grid; place-items:center; font-size:12px; flex-shrink:0 } | |
| .alert-icon.critical { background:var(--red-dim); color:var(--red) } | |
| .alert-icon.warning { background:var(--amber-dim); color:var(--amber) } | |
| .alert-icon.info { background:var(--blue-dim); color:var(--blue) } | |
| .alert-content { flex:1 } | |
| .alert-title { font:600 12px/1 var(--sans); color:var(--text); margin-bottom:4px } | |
| .alert-detail { font:11px/1.4 var(--mono); color:var(--text-muted) } | |
| .alert-ts { font:10px var(--mono); color:var(--text-muted); flex-shrink:0 } | |
| /* ═══ Wire topology ═══ */ | |
| .wire-row { display:flex; align-items:center; gap:12px; padding:8px 0; border-bottom:1px solid color-mix(in srgb,var(--line) 50%,transparent) } | |
| .wire-id { font:800 13px/1 var(--mono); color:var(--gold); width:24px } | |
| .wire-name { font:600 11px/1 var(--sans); color:var(--text-dim); flex:1 } | |
| .wire-status-chip { font:600 9px/1 var(--mono); padding:3px 8px; border-radius:999px } | |
| .w-live { background:var(--green-dim); color:var(--green); border:1px solid var(--green) } | |
| .w-roadmap { background:var(--amber-dim); color:var(--amber); border:1px solid var(--amber) } | |
| .w-partial { background:var(--blue-dim); color:var(--blue); border:1px solid var(--blue) } | |
| /* ═══ Receipt DSSE ═══ */ | |
| .dsse-row { | |
| padding:10px 12px; border-radius:10px; margin:6px 0; | |
| background:var(--panel2); border:1px solid var(--line); | |
| font:11px/1.6 var(--mono); | |
| } | |
| .dsse-row .dr-hash { color:var(--cyan) } | |
| .dsse-row .dr-signed { color:var(--green) } | |
| .dsse-row .dr-unsigned { color:var(--amber) } | |
| .dsse-row .dr-ts { color:var(--text-muted); font-size:10px } | |
| /* ═══ Verify panel ═══ */ | |
| .verify-box { | |
| background:var(--bg2); border:1px solid var(--line); border-radius:10px; | |
| padding:14px 16px; | |
| } | |
| .verify-box label { display:block; font:600 10px/1 var(--sans); color:var(--text-muted); margin-bottom:6px; text-transform:uppercase; letter-spacing:.5px } | |
| .verify-box textarea { | |
| width:100%; height:80px; background:var(--bg); border:1px solid var(--line); | |
| color:var(--text-dim); border-radius:8px; padding:10px; resize:vertical; | |
| font:11px/1.5 var(--mono); outline:none; transition:border-color .15s; | |
| } | |
| .verify-box textarea:focus { border-color:var(--gold-dim) } | |
| .btn { | |
| display:inline-flex; align-items:center; gap:7px; | |
| padding:9px 16px; border-radius:8px; border:1px solid var(--gold-dim); | |
| background:var(--gold-glow); color:var(--gold); font:600 11px/1 var(--sans); | |
| cursor:pointer; transition:background .15s, border-color .15s; | |
| } | |
| .btn:hover { background:color-mix(in srgb,var(--gold) 20%,transparent); border-color:var(--gold) } | |
| .btn.sm { padding:6px 12px; font-size:10px } | |
| .btn-danger { border-color:var(--red); background:var(--red-dim); color:var(--red) } | |
| .verify-result { margin-top:10px; padding:10px 12px; border-radius:8px; font:11px/1.5 var(--mono) } | |
| .verify-result.ok { background:var(--green-dim); color:var(--green); border:1px solid var(--green) } | |
| .verify-result.err { background:var(--red-dim); color:var(--red); border:1px solid var(--red) } | |
| /* ═══ Compliance ═══ */ | |
| .compliance-framework { margin-bottom:20px } | |
| .cf-header { font:700 12px/1 var(--sans); color:var(--gold); margin-bottom:10px; display:flex; align-items:center; gap:8px } | |
| .cf-control { | |
| display:flex; align-items:flex-start; gap:10px; padding:9px 12px; | |
| border-radius:8px; background:var(--panel2); border:1px solid var(--line); margin:5px 0; | |
| } | |
| .cf-art { font:700 10px/1 var(--mono); color:var(--cyan); flex-shrink:0; min-width:140px } | |
| .cf-rationale { font:11px/1.5 var(--sans); color:var(--text-dim) } | |
| /* ═══ Lineage ═══ */ | |
| .lineage-node { | |
| position:relative; padding-left:24px; margin:6px 0; | |
| font:11px/1.5 var(--mono); color:var(--text-dim); | |
| } | |
| .lineage-node::before { | |
| content:''; position:absolute; left:8px; top:4px; | |
| width:8px; height:8px; border-radius:50%; background:var(--gold); | |
| } | |
| .lineage-node::after { | |
| content:''; position:absolute; left:11px; top:12px; | |
| width:2px; height:calc(100% + 4px); background:var(--line); | |
| } | |
| .lineage-node:last-child::after { display:none } | |
| .ln-hash { color:var(--cyan) } | |
| .ln-action { color:var(--gold) } | |
| /* ═══ Formula Try-it ═══ */ | |
| .formula-card { margin-bottom:16px; border:1px solid var(--line); border-radius:12px; overflow:hidden } | |
| .formula-head { | |
| display:flex; align-items:center; gap:10px; padding:12px 16px; | |
| background:linear-gradient(90deg,var(--panel2),var(--panel)); | |
| border-bottom:1px solid var(--line); cursor:pointer; | |
| } | |
| .formula-head .fn { font:700 13px/1 var(--sans); color:var(--gold) } | |
| .formula-head .fl { font:10px/1 var(--mono); color:var(--cyan); flex:1 } | |
| .formula-body { padding:14px 16px; display:none } | |
| .formula-body.open { display:block } | |
| .try-row { display:flex; gap:8px; align-items:flex-end; flex-wrap:wrap; margin-top:10px } | |
| .try-row input { | |
| flex:1; min-width:80px; padding:7px 10px; background:var(--bg); | |
| border:1px solid var(--line); color:var(--text); border-radius:7px; font-size:12px; | |
| transition:border-color .15s; | |
| } | |
| .try-row input:focus { outline:none; border-color:var(--gold-dim) } | |
| .try-result { margin-top:10px; padding:10px; border-radius:8px; background:var(--bg2); border:1px solid var(--line); font:11px/1.5 var(--mono); color:var(--text-dim) } | |
| .try-result .tr-val { color:var(--gold); font-weight:700 } | |
| /* ═══ Honest footer ═══ */ | |
| .honest-footer { | |
| margin-top:32px; padding:20px 24px; | |
| border-top:1px solid var(--line); text-align:center; | |
| font:10px/1.8 var(--mono); color:var(--text-muted); | |
| max-width:1600px; margin-left:auto; margin-right:auto; | |
| } | |
| .honest-footer b { color:var(--gold) } | |
| .honest-footer a { color:var(--cyan) } | |
| /* ═══ Responsive ═══ */ | |
| @media(max-width:768px) { | |
| .header { padding-top:14px; flex-wrap:wrap } | |
| .doctrine-plaque { position:static; max-width:none; margin:8px 0 } | |
| .trace-badge { position:static; margin:8px 0; display:inline-flex } | |
| .panel-wrap { padding:12px } | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <!-- Fixed Chrome --> | |
| <div class="trace-badge" id="traceBadge"> | |
| <span class="dot"></span> | |
| <span>traceparent</span> | |
| <span class="tid" id="traceId">—</span> | |
| </div> | |
| <div class="doctrine-plaque"> | |
| <b>v11 LOCKED</b> <span class="sep">·</span> 749/<span id="dp-decl">14</span>/163 | |
| <span class="sep">·</span> <b>c7c0ba17</b><br> | |
| Λ = <b>Conjecture 1</b> <span class="sep">·</span> | |
| SLSA <b id="dp-slsa">L1 honest · L2 .att emitted (not independently verified) · L3 roadmap</b> <span class="sep">·</span> | |
| <span id="dp-gates">46</span> gates | |
| </div> | |
| <button class="theme-btn" id="themeBtn" title="Toggle theme">◑</button> | |
| <!-- Header --> | |
| <header class="header"> | |
| <div class="logo"> | |
| <svg viewBox="0 0 48 48" fill="none" aria-label="a11oy"> | |
| <circle cx="24" cy="24" r="21" stroke="var(--gold)" stroke-width="2.5"/> | |
| <rect x="14" y="14" width="20" height="20" rx="4" fill="none" stroke="var(--terra)" stroke-width="2.5"/> | |
| <path d="M19 24l4 4 7-8" stroke="var(--gold)" stroke-width="2.5" fill="none" stroke-linecap="round" stroke-linejoin="round"/> | |
| </svg> | |
| <div class="logo-text"> | |
| <div class="logo-name">a11oy <span class="accent">·</span> Elite Console</div> | |
| <div class="logo-sub">20 surfaces · zero mocks · every tile wired to a real endpoint</div> | |
| </div> | |
| </div> | |
| <div class="header-spacer"></div> | |
| <div class="slsa-badge" id="slsaBadge"> | |
| <span>✓</span> <span>SLSA L1 honest · L2 .att emitted (not independently verified) · L3 roadmap</span> | |
| </div> | |
| </header> | |
| <!-- Tab Bar --> | |
| <div class="tabbar-wrap"> | |
| <div class="tabbar" id="tabbar"> | |
| <button class="tab-btn active" data-tab="overview"><span class="ti">⬡</span>Overview</button> | |
| <button class="tab-btn" data-tab="lambda"><span class="ti">Λ</span>Λ-Score</button> | |
| <button class="tab-btn" data-tab="gates"><span class="ti">⊞</span>Gates</button> | |
| <button class="tab-btn" data-tab="slo"><span class="ti">◎</span>SLO Board</button> | |
| <button class="tab-btn" data-tab="alerts"><span class="ti">⚡</span>Alerts</button> | |
| <button class="tab-btn" data-tab="organ-map"><span class="ti">◉</span>Organ Map 3D</button> | |
| <button class="tab-btn" data-tab="mesh"><span class="ti">⬡</span>Mesh Wires</button> | |
| <button class="tab-btn" data-tab="dsse"><span class="ti">⛓</span>DSSE Receipts</button> | |
| <button class="tab-btn" data-tab="quorum"><span class="ti">◈</span>Quorum 3D</button> | |
| <button class="tab-btn" data-tab="lineage"><span class="ti">↯</span>Lineage</button> | |
| <button class="tab-btn" data-tab="compliance"><span class="ti">☑</span>Compliance</button> | |
| <button class="tab-btn" data-tab="policy"><span class="ti">⊕</span>Policy Canvas</button> | |
| <button class="tab-btn" data-tab="formulas"><span class="ti">∫</span>Formulas</button> | |
| <button class="tab-btn" data-tab="genome"><span class="ti">⧫</span>GENOME</button> | |
| <button class="tab-btn" data-tab="replay"><span class="ti">⟳</span>Receipt Replay</button> | |
| <button class="tab-btn" data-tab="verdict"><span class="ti">⚖</span>Verdict Theater</button> | |
| <button class="tab-btn" data-tab="fleet"><span class="ti">◻</span>Fleet</button> | |
| <button class="tab-btn" data-tab="llm-hub"><span class="ti">⬡</span>LLM Hub</button> | |
| <button class="tab-btn" data-tab="audit"><span class="ti">📋</span>Audit Log</button> | |
| <button class="tab-btn" data-tab="anatomy"><span class="ti">⬟</span>Anatomy 3D</button> | |
| <button class="tab-btn" data-tab="honest"><span class="ti">✦</span>Honest</button> | |
| </div> | |
| </div> | |
| <!-- Tab Panels --> | |
| <div class="panel-wrap"> | |
| <!-- ══ TAB 1: OVERVIEW ══ --> | |
| <div class="tab-panel active" id="tab-overview"> | |
| <div class="grid g-4" style="margin-bottom:16px"> | |
| <div class="card"> | |
| <div class="card-head"><span class="dot-status dot-idle" id="ov-lam-dot"></span><span class="icon">Λ</span>Trust Score<span class="pill">/v1/lambda</span></div> | |
| <div class="card-body"><div class="kpi"><div class="kpi-num" id="ov-lam-val">…</div><div class="kpi-sub">Λ = Conjecture 1 · 13-axis geometric mean</div></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="dot-status dot-idle" id="ov-gate-dot"></span><span class="icon">⊞</span>Policy Gates<span class="pill">/v1/gates</span></div> | |
| <div class="card-body"><div class="kpi"><div class="kpi-num cyan" id="ov-gate-count">…</div><div class="kpi-sub" id="ov-gate-sub">active / 46 total</div></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="dot-status dot-idle" id="ov-slo-dot"></span><span class="icon">◎</span>SLO Pass Rate<span class="pill">/v1/console/slo</span></div> | |
| <div class="card-body"><div class="kpi"><div class="kpi-num good" id="ov-slo-val">…</div><div class="kpi-sub">Gate pass rate vs 95% target</div></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="dot-status dot-idle" id="ov-fleet-dot"></span><span class="icon">◻</span>Fleet Organs<span class="pill">/v4/fleet</span></div> | |
| <div class="card-body"><div class="kpi"><div class="kpi-num" id="ov-fleet-ok">…</div><div class="kpi-sub">organs online / 5 total</div></div></div> | |
| </div> | |
| </div> | |
| <div class="grid g-2-1"> | |
| <div class="card"> | |
| <div class="card-head"><span class="dot-status dot-idle" id="ov-mesh-dot"></span><span class="icon">⬡</span>Live Mesh State<span class="pill">/v1/mesh/state</span></div> | |
| <div class="card-body" id="ov-mesh-body"><div class="sk sk-block"></div><div class="sk sk-line w80"></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="dot-status dot-idle" id="ov-brain-dot"></span><span class="icon">◈</span>Brain + LLM Tiers<span class="pill">/v1/brain</span></div> | |
| <div class="card-body" id="ov-brain-body"><div class="sk sk-block"></div></div> | |
| </div> | |
| </div> | |
| <div class="grid g-3" style="margin-top:16px"> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">🔏</span>SLSA L1 honest · L2 .att emitted (not independently verified) Provenance<span class="pill">/v1/version</span></div> | |
| <div class="card-body" id="ov-prov-body"><div class="sk sk-line w80"></div><div class="sk sk-line w60"></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">⛓</span>Last 5 Receipts<span class="pill">/khipu/ledger</span></div> | |
| <div class="card-body" id="ov-ledger-body"><div class="sk sk-line"></div><div class="sk sk-line"></div><div class="sk sk-line w80"></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">📋</span>MCP Tools<span class="pill">/v1/mcp/tools</span></div> | |
| <div class="card-body" id="ov-mcp-body"><div class="sk sk-block"></div></div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB 2: LAMBDA ══ --> | |
| <div class="tab-panel" id="tab-lambda"> | |
| <div class="grid g-2-1"> | |
| <div class="card"> | |
| <div class="card-head"><span class="dot-status dot-idle" id="lam-dot"></span><span class="icon">Λ</span>Lambda Geometric Mean — 13 Axes<span class="pill">/v1/lambda</span></div> | |
| <div class="card-body"> | |
| <div class="kpi" style="margin-bottom:16px"> | |
| <div class="kpi-label">Λ Trust Score</div> | |
| <div class="kpi-num" id="lam-val">…</div> | |
| <div class="kpi-sub">Conjecture 1 — NOT a theorem. CAUCHY_ND sorry open.</div> | |
| </div> | |
| <div class="axis-grid" id="lam-axes"></div> | |
| </div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">◈</span>Λ Score — Interactive<span class="pill">/v1/lambda/score</span></div> | |
| <div class="card-body"> | |
| <div style="font:11px/1.6 var(--mono);color:var(--text-muted);margin-bottom:12px">POST custom axis weights to /v1/lambda/score</div> | |
| <textarea id="lam-custom-json" class="verify-box" style="width:100%;height:120px;background:var(--bg);border:1px solid var(--line);color:var(--text-dim);border-radius:8px;padding:10px;font:11px/1.5 var(--mono);resize:vertical;outline:none">{"axes":{"soundness":0.92,"calibration":0.90,"robustness":0.95,"provenance":0.91,"consent":0.94}}</textarea> | |
| <div style="margin-top:10px"><button class="btn sm" onclick="runLambdaScore()">▶ Score</button></div> | |
| <div class="verify-result" id="lam-score-result" style="display:none"></div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB 3: GATES ══ --> | |
| <div class="tab-panel" id="tab-gates"> | |
| <div class="grid g-3" style="margin-bottom:16px"> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">⊞</span>Total Gates<span class="pill">/v1/gates</span></div> | |
| <div class="card-body"><div class="kpi"><div class="kpi-num cyan" id="g-total">…</div><div class="kpi-sub">46 canonical gates</div></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">✦</span>Lean-Proved<span class="pill">/v1/gates</span></div> | |
| <div class="card-body"><div class="kpi"><div class="kpi-num good" id="g-proved">…</div><div class="kpi-sub">gates with lean_theorem</div></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">⛓</span>Anchor Formulas<span class="pill">/v1/gates</span></div> | |
| <div class="card-body"><div class="kpi"><div class="kpi-num" id="g-anchor">44</div><div class="kpi-sub">anchor formula gates</div></div></div> | |
| </div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">⊞</span>Gate Manifest — Live<span class="pill">/v1/gates</span></div> | |
| <div class="card-body"> | |
| <div style="margin-bottom:12px;display:flex;gap:8px;align-items:center"> | |
| <input type="text" id="gate-search" placeholder="Search gates…" style="flex:1;padding:7px 12px;background:var(--bg);border:1px solid var(--line);color:var(--text);border-radius:7px;font-size:12px;outline:none" oninput="filterGates(this.value)"> | |
| <button class="btn sm" onclick="loadGates()">↺ Refresh</button> | |
| </div> | |
| <div style="overflow:auto;max-height:500px"> | |
| <table class="data-table" id="gate-table"> | |
| <thead><tr><th>Name</th><th>Lean Theorem</th><th>Category</th><th>Status</th></tr></thead> | |
| <tbody id="gate-tbody"></tbody> | |
| </table> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB 4: SLO BOARD ══ --> | |
| <div class="tab-panel" id="tab-slo"> | |
| <div class="grid g-4" style="margin-bottom:16px" id="slo-kpis"> | |
| <div class="card"><div class="card-head"><span class="icon">◎</span>Pass Rate<span class="pill">/console/slo</span></div><div class="card-body"><div class="kpi"><div class="kpi-num good" id="slo-pass">…</div><div class="kpi-sub">vs 95% target</div></div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">Λ</span>Lambda<span class="pill">/v1/lambda</span></div><div class="card-body"><div class="kpi"><div class="kpi-num" id="slo-lam">…</div><div class="kpi-sub">floor = 0.90</div></div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">⛓</span>Chain Integrity</div><div class="card-body"><div class="kpi"><div class="kpi-num good" id="slo-chain">100%</div><div class="kpi-sub">SHA3-256 chain valid</div></div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">📐</span>Error Budget<span class="pill">/console/slo</span></div><div class="card-body"><div class="kpi"><div class="kpi-num cyan" id="slo-budget">…</div><div class="kpi-sub">% remaining</div></div></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">◎</span>SLO Detail Board — New Relic-class<span class="pill">/api/a11oy/v1/console/slo</span></div> | |
| <div class="card-body" id="slo-detail-body"> | |
| <div class="sk sk-line w80"></div><div class="sk sk-line w60"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB 5: ALERTS ══ --> | |
| <div class="tab-panel" id="tab-alerts"> | |
| <div class="grid g-4" style="margin-bottom:16px"> | |
| <div class="card"><div class="card-head"><span class="icon">🔴</span>Critical</div><div class="card-body"><div class="kpi"><div class="kpi-num bad" id="al-crit">0</div></div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">🟡</span>Warning</div><div class="card-body"><div class="kpi"><div class="kpi-num" style="color:var(--amber)" id="al-warn">0</div></div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">🔵</span>Info</div><div class="card-body"><div class="kpi"><div class="kpi-num cyan" id="al-info">0</div></div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">✓</span>Acknowledged</div><div class="card-body"><div class="kpi"><div class="kpi-num good" id="al-ack">0</div></div></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">⚡</span>Live Alert Feed — Datadog-class<span class="pill">/api/a11oy/v1/console/alerts</span></div> | |
| <div class="card-body" id="al-feed"> | |
| <div class="sk sk-line w80"></div><div class="sk sk-line w60"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB 6: ORGAN MAP 3D ══ --> | |
| <div class="tab-panel" id="tab-organ-map"> | |
| <div class="grid g-2"> | |
| <div class="card" style="grid-column:1/-1"> | |
| <div class="card-head"><span class="icon">◉</span>SZL Organ Topology — 3D Service Map<span class="pill">/console/organ-map</span></div> | |
| <div class="card-body" style="padding:10px"> | |
| <div class="canvas-3d" id="organ-map-3d" style="height:380px"> | |
| <canvas id="organCanvas"></canvas> | |
| <div class="canvas-3d-label">Interactive · Drag to rotate · SZL mesh topology</div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="grid g-2" style="margin-top:16px"> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">◉</span>Organs<span class="pill">/console/organ-map</span></div> | |
| <div class="card-body" id="organ-list-body"><div class="sk sk-line w80"></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">⬡</span>Wire Topology<span class="pill">/console/organ-map</span></div> | |
| <div class="card-body" id="wire-topo-body"><div class="sk sk-line w80"></div></div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB 7: MESH WIRES ══ --> | |
| <div class="tab-panel" id="tab-mesh"> | |
| <div class="grid g-2"> | |
| <div class="card"> | |
| <div class="card-head"><span class="dot-status dot-idle" id="mesh-dot"></span><span class="icon">⬡</span>Mesh Wire Status<span class="pill">/v1/mesh/state</span></div> | |
| <div class="card-body" id="mesh-wires-body"><div class="sk sk-line w80"></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">◈</span>Wire D — W3C traceparent<span class="pill">/wires/D</span></div> | |
| <div class="card-body" id="wire-d-body"><div class="sk sk-line w80"></div></div> | |
| </div> | |
| </div> | |
| <div class="grid g-1" style="margin-top:16px"> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">⬡</span>3D Mesh Cathedral<span class="pill">Three.js live</span></div> | |
| <div class="card-body" style="padding:10px"> | |
| <div class="canvas-3d" id="mesh-3d" style="height:280px"> | |
| <canvas id="meshCanvas"></canvas> | |
| <div class="canvas-3d-label">SZL Wire Mesh · Nodes pulse on trace activity</div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB 8: DSSE RECEIPTS ══ --> | |
| <div class="tab-panel" id="tab-dsse"> | |
| <div class="grid g-3" style="margin-bottom:16px"> | |
| <div class="card"><div class="card-head"><span class="icon">🔏</span>DSSE Signing<span class="pill">/console/dsse-stream</span></div><div class="card-body"><div class="kpi"><div class="kpi-num" id="dsse-signing">…</div><div class="kpi-sub">signing_available</div></div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">⛓</span>DAG Root<span class="pill">/khipu/ledger</span></div><div class="card-body"><div class="kpi-label">Merkle root</div><div class="kpi-num" id="dsse-root" style="font-size:14px;color:var(--cyan)">…</div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">✔</span>Rekor logIndex<span class="pill">Sigstore</span></div><div class="card-body"><div class="kpi"><div class="kpi-num cyan" id="dsse-rekor">—</div><div class="kpi-sub">public-good Rekor (live)</div></div></div></div> | |
| </div> | |
| <div class="grid g-2"> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">⛓</span>Live DSSE Receipt Stream<span class="pill">/console/dsse-stream</span></div> | |
| <div class="card-body" id="dsse-stream-body"><div class="sk sk-line w80"></div><div class="sk sk-line w60"></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">🔍</span>Browser Verify (DSSE)<span class="pill">/khipu/verify</span></div> | |
| <div class="card-body"> | |
| <div class="verify-box"> | |
| <label>DSSE Envelope JSON</label> | |
| <textarea id="dsse-envelope-input" placeholder='{"payload":"…","payloadType":"…","signatures":[{"sig":"…","keyid":"szlholdings-cosign"}]}'></textarea> | |
| <div style="margin-top:8px"><button class="btn sm" onclick="verifyDSSE()">🔍 Verify</button></div> | |
| <div class="verify-result" id="dsse-verify-result" style="display:none"></div> | |
| </div> | |
| <div style="margin-top:14px;font:11px/1.7 var(--mono);color:var(--text-muted)"> | |
| Verify command:<br> | |
| <code style="color:var(--cyan)">cosign verify-blob --key cosign.pub --signature <sig> <payload></code> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB 9: QUORUM 3D ══ --> | |
| <div class="tab-panel" id="tab-quorum"> | |
| <div class="grid g-2"> | |
| <div class="card" style="grid-column:1/-1"> | |
| <div class="card-head"><span class="icon">◈</span>Khipu Quorum Constellation — 3-of-4<span class="pill">/console/quorum-state</span></div> | |
| <div class="card-body" style="padding:10px"> | |
| <div class="canvas-3d" style="height:300px"> | |
| <canvas id="quorumCanvas"></canvas> | |
| <div class="canvas-3d-label">Khipu Merkle-DAG Constellation · 4 organ nodes · 3-of-4 threshold</div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="grid g-2" style="margin-top:16px"> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">◈</span>Live Quorum State<span class="pill">/console/quorum-state</span></div> | |
| <div class="card-body" id="quorum-state-body"><div class="sk sk-block"></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">⛓</span>Khipu Ledger<span class="pill">/khipu/ledger</span></div> | |
| <div class="card-body" id="quorum-ledger-body"><div class="sk sk-line w80"></div></div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB 10: LINEAGE ══ --> | |
| <div class="tab-panel" id="tab-lineage"> | |
| <div class="card" style="margin-bottom:16px"> | |
| <div class="card-head"><span class="icon">↯</span>Decision Lineage Query — Palantir Foundry-class<span class="pill">/v1/lineage</span></div> | |
| <div class="card-body"> | |
| <div style="display:flex;gap:8px;margin-bottom:14px"> | |
| <input type="text" id="lineage-action-id" placeholder="action_id (optional — leave blank for DAG)" style="flex:1;padding:7px 12px;background:var(--bg);border:1px solid var(--line);color:var(--text);border-radius:7px;font-size:12px;outline:none"> | |
| <button class="btn sm" onclick="loadLineage()">↯ Trace</button> | |
| </div> | |
| <div id="lineage-result"><div class="sk sk-block"></div></div> | |
| </div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">⛓</span>Khipu Receipt Chain — Visual<span class="pill">/khipu/ledger</span></div> | |
| <div class="card-body" id="lineage-chain-body"><div class="sk sk-line w80"></div></div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB 11: COMPLIANCE ══ --> | |
| <div class="tab-panel" id="tab-compliance"> | |
| <div class="grid g-3" style="margin-bottom:16px"> | |
| <div class="card"><div class="card-head"><span class="icon">☑</span>EU AI Act<span class="pill">/compliance/export</span></div><div class="card-body"><div class="kpi"><div class="kpi-num good" id="comp-eu">…</div><div class="kpi-sub">controls mapped</div></div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">☑</span>NIST AI RMF<span class="pill">/compliance/export</span></div><div class="card-body"><div class="kpi"><div class="kpi-num good" id="comp-nist">…</div><div class="kpi-sub">controls mapped</div></div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">☑</span>ISO 42001<span class="pill">/compliance/export</span></div><div class="card-body"><div class="kpi"><div class="kpi-num good" id="comp-iso">…</div><div class="kpi-sub">controls mapped</div></div></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">☑</span>Compliance Evidence Export — Credo AI / Vanta-class<span class="pill">/api/a11oy/v1/compliance/export</span></div> | |
| <div class="card-body"> | |
| <div style="display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap"> | |
| <button class="btn sm" onclick="loadCompliance('eu-ai-act')">EU AI Act</button> | |
| <button class="btn sm" onclick="loadCompliance('nist-ai-rmf')">NIST AI RMF</button> | |
| <button class="btn sm" onclick="loadCompliance('iso-42001')">ISO 42001</button> | |
| <button class="btn sm" onclick="loadCompliance('soc2-cc6')">SOC 2 CC6</button> | |
| </div> | |
| <div id="compliance-body"><div class="sk sk-line w80"></div></div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB 12: POLICY CANVAS ══ --> | |
| <div class="tab-panel" id="tab-policy"> | |
| <div class="grid g-3" style="margin-bottom:16px"> | |
| <div class="card"><div class="card-head"><span class="icon">⊕</span>Total Gates<span class="pill">/console/policy-canvas</span></div><div class="card-body"><div class="kpi"><div class="kpi-num cyan" id="pc-total">…</div></div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">✦</span>Lean Coverage</div><div class="card-body"><div class="kpi"><div class="kpi-num good" id="pc-cov">…</div><div class="kpi-sub">% with Lean proof</div></div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">⊕</span>Validate Policy<span class="pill">POST /v1/policy/validate</span></div> | |
| <div class="card-body"> | |
| <textarea id="policy-json-input" style="width:100%;height:70px;background:var(--bg);border:1px solid var(--line);color:var(--text-dim);border-radius:8px;padding:8px;font:10px/1.5 var(--mono);resize:none;outline:none">{"name":"test","gates":["soundnessAxiom"],"lambda_floor":0.90,"witnesses":3}</textarea> | |
| <button class="btn sm" style="margin-top:6px" onclick="validatePolicy()">▶ Validate</button> | |
| <div class="verify-result" id="policy-validate-result" style="display:none;margin-top:6px"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">⊕</span>Policy Canvas — 46 Gates<span class="pill">/api/a11oy/v1/console/policy-canvas</span></div> | |
| <div class="card-body" id="policy-canvas-body"><div class="sk sk-block"></div></div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB 13: FORMULAS ══ --> | |
| <div class="tab-panel" id="tab-formulas"> | |
| <div class="card" style="margin-bottom:16px"> | |
| <div class="card-head"><span class="icon">∫</span>Live Formula Library — Try-it in Browser<span class="pill">/v1/formulas/index</span></div> | |
| <div class="card-body" id="formulas-body"><div class="sk sk-block"></div></div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB 14: GENOME ══ --> | |
| <div class="tab-panel" id="tab-genome"> | |
| <div class="card" style="margin-bottom:16px"> | |
| <div class="card-head"><span class="icon">⧫</span>SZL GENOME — Formula→Lean→Organ Atlas<span class="pill">/console/genome</span></div> | |
| <div class="card-body"> | |
| <div style="margin-bottom:12px;font:11px/1.6 var(--mono);color:var(--text-muted)"> | |
| Every formula traces to a Lean theorem (or honest open obligation) and a specific organ. | |
| Λ=Conjecture 1. Sorries are honest — not pretended proved. | |
| </div> | |
| <div style="overflow:auto"> | |
| <div class="genome-row" style="font:700 10px/1 var(--sans);color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;padding:6px 0;border-bottom:2px solid var(--line)"> | |
| <span>Formula</span><span>Lean Theorem</span><span>Organ</span><span>Endpoint</span> | |
| </div> | |
| <div id="genome-body"><div class="sk sk-line w80"></div><div class="sk sk-line w60"></div></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">⧫</span>Gate Genome Sample — 20 gates<span class="pill">/console/genome</span></div> | |
| <div class="card-body" id="genome-gates-body"><div class="sk sk-block"></div></div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB 15: RECEIPT REPLAY ══ --> | |
| <div class="tab-panel" id="tab-replay"> | |
| <div class="grid g-2"> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">⟳</span>Deterministic Receipt Replay<span class="pill">POST /v1/receipts/replay</span></div> | |
| <div class="card-body"> | |
| <p style="font:11px/1.7 var(--mono);color:var(--text-muted);margin-bottom:12px"> | |
| Independently replay a past receipt by hash. Returns a fresh signed DSSE receipt. | |
| Compare hashes to prove cryptographic determinism. No competitor offers this. | |
| </p> | |
| <div class="verify-box"> | |
| <label>Receipt Hash (SHA3-256) or leave blank for latest</label> | |
| <input type="text" id="replay-hash-input" placeholder="e.g. aabbcc…" style="width:100%;padding:8px 12px;background:var(--bg);border:1px solid var(--line);color:var(--text);border-radius:7px;font:11px var(--mono);outline:none;margin-top:4px"> | |
| </div> | |
| <button class="btn" style="margin-top:10px" onclick="runReplay()">⟳ Replay Receipt</button> | |
| <div class="verify-result" id="replay-result" style="display:none;margin-top:10px"></div> | |
| </div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">🔑</span>What makes Replay unique?</div> | |
| <div class="card-body"> | |
| <ul style="font:11px/1.9 var(--mono);color:var(--text-dim);list-style:none;padding:0"> | |
| <li>✦ Any third party can independently replay a past decision</li> | |
| <li>✦ Fresh DSSE receipt generated from same inputs</li> | |
| <li>✦ Hash comparison proves determinism mathematically</li> | |
| <li>✦ Zero trust required — verify in browser, CLI, or Python</li> | |
| <li>✦ Backed by <code style="color:var(--cyan)">KhipuConsensus.lean::khipu_receipt_invariant</code></li> | |
| </ul> | |
| <div style="margin-top:14px"> | |
| <div class="kpi-label">verify command</div> | |
| <div class="codeblock"><span class="kw">cosign</span> verify-blob \<br> --key cosign.pub \<br> --sig <base64sig> \<br> <payload.json></div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB 16: VERDICT THEATER ══ --> | |
| <div class="tab-panel" id="tab-verdict"> | |
| <div class="grid g-3" style="margin-bottom:16px"> | |
| <div class="card"><div class="card-head"><span class="icon">⚖</span>Total Verdicts<span class="pill">/console/verdict-theater</span></div><div class="card-body"><div class="kpi"><div class="kpi-num" id="vt-total">…</div></div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">✓</span>PASS<span class="pill">/console/verdict-theater</span></div><div class="card-body"><div class="kpi"><div class="kpi-num good" id="vt-pass">…</div></div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">◈</span>Quorum-witnessed<span class="pill">/console/verdict-theater</span></div><div class="card-body"><div class="kpi"><div class="kpi-num cyan" id="vt-quorum">…</div></div></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">⚖</span>Multi-Party Witnessed Verdict Theater<span class="pill">/api/a11oy/v1/console/verdict-theater</span></div> | |
| <div class="card-body" id="verdict-theater-body"><div class="sk sk-block"></div></div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB 17: FLEET ══ --> | |
| <div class="tab-panel" id="tab-fleet"> | |
| <div class="card" style="margin-bottom:16px"> | |
| <div class="card-head"><span class="icon">◻</span>Fleet Health — All SZL Flagships<span class="pill">/api/a11oy/v4/fleet</span></div> | |
| <div class="card-body" id="fleet-body"><div class="sk sk-block"></div></div> | |
| </div> | |
| <div class="grid g-3" style="margin-bottom:16px" id="fleet-cards"></div> | |
| </div> | |
| <!-- ══ TAB 18: AUDIT LOG ══ --> | |
| <div class="tab-panel" id="tab-audit"> | |
| <div class="grid g-3" style="margin-bottom:16px"> | |
| <div class="card"><div class="card-head"><span class="icon">📋</span>Buffered<span class="pill">/v1/audit-log</span></div><div class="card-body"><div class="kpi"><div class="kpi-num" id="au-total">…</div><div class="kpi-sub">in-memory ring (max 200)</div></div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">📋</span>Returned</div><div class="card-body"><div class="kpi"><div class="kpi-num cyan" id="au-count">…</div></div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">ℹ</span>Honest Disclosure</div><div class="card-body" style="font:10px/1.7 var(--mono);color:var(--text-muted)">Ring buffer resets on Space rebuild. <b style="color:var(--gold)">Honest</b> — not durable storage.</div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">📋</span>Audit Log — New Relic-class<span class="pill">/api/a11oy/v1/audit-log</span></div> | |
| <div class="card-body"> | |
| <div style="display:flex;gap:8px;margin-bottom:12px"><button class="btn sm" onclick="loadAudit()">↺ Refresh</button></div> | |
| <div style="overflow:auto;max-height:450px"> | |
| <table class="data-table"><thead><tr><th>#</th><th>Action</th><th>Gate</th><th>Lambda</th><th>Pass</th><th>Timestamp</th></tr></thead> | |
| <tbody id="audit-tbody"></tbody></table> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB 19: ANATOMY 3D ══ --> | |
| <div class="tab-panel" id="tab-anatomy"> | |
| <div class="card" style="margin-bottom:16px"> | |
| <div class="card-head"><span class="icon">⬟</span>a11oy Organ Anatomy — 3D Exploration</div> | |
| <div class="card-body" style="padding:10px"> | |
| <div class="canvas-3d" style="height:400px"> | |
| <canvas id="anatomyCanvas"></canvas> | |
| <div class="canvas-3d-label">a11oy Anatomy · 5 organ nodes + wire connections</div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="grid g-2" style="margin-top:16px"> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">◉</span>Organ Roles<span class="pill">/console/organ-map</span></div> | |
| <div class="card-body" id="anatomy-organs-body"><div class="sk sk-line w80"></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">◈</span>Provenance<span class="pill">/provenance</span></div> | |
| <div class="card-body" id="anatomy-prov-body"><div class="sk sk-line w80"></div></div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB 20: HONEST ══ --> | |
| <div class="tab-panel" id="tab-honest"> | |
| <div class="card" style="margin-bottom:16px"> | |
| <div class="card-head"><span class="icon">✦</span>Honest Disclosure — Full System State<span class="pill">/v1/honest</span></div> | |
| <div class="card-body" id="honest-body"><div class="sk sk-block"></div></div> | |
| </div> | |
| <div class="grid g-2"> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">✔</span>What We Claim</div> | |
| <div class="card-body" style="font:11px/1.9 var(--mono);color:var(--text-dim)"> | |
| <div class="tag tag-green" style="display:inline-block;margin-bottom:6px">SLSA L1 honest · L2 .att emitted (not independently verified) · L3 roadmap</div><br> | |
| ✓ cosign-signed GHCR image, verifiable via cosign verify (L1)<br> | |
| ✓ signed slsa.dev/provenance .att emitted by actions/attest-build-provenance (L2 .att, not independently verified)<br> | |
| ✓ Fulcio issuer: sigstore.dev (public-good)<br> | |
| ✓ 749 Lean declarations · 14 unique axioms<br> | |
| ✓ 163 honest open sorries<br> | |
| ✓ 46 policy gates canonical<br> | |
| ✓ Λ = Conjecture 1 (geometric mean, 13 axes) | |
| </div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">⚠</span>What We Do Not Claim</div> | |
| <div class="card-body" style="font:11px/1.9 var(--mono);color:var(--text-dim)"> | |
| <div class="tag tag-amber" style="display:inline-block;margin-bottom:6px">HONEST</div><br> | |
| ✗ L3 not claimed (no hermetic build)<br> | |
| ✗ FedRAMP / Iron Bank / CMMC not claimed<br> | |
| ✗ Λ is a conjecture — CAUCHY_ND sorry open<br> | |
| ✗ Wires G & H not live in this build<br> | |
| ✗ Audit log resets on rebuild (in-memory)<br> | |
| ✗ No fabricated metrics — zero mocks | |
| </div> | |
| </div> | |
| </div> | |
| <div class="card" style="margin-top:16px"> | |
| <div class="card-head"><span class="icon">⚙</span>SLSA Verify Command</div> | |
| <div class="card-body"> | |
| <div class="codeblock"> | |
| <span class="cmt"># Verify the SLSA L1 honest · L2 .att emitted (not independently verified) · L3 roadmap provenance attestation on the published image</span> | |
| <span class="kw">cosign</span> verify-attestation \ | |
| --type <span class="str">slsaprovenance</span> \ | |
| --certificate-identity-regexp <span class="str">github.com/szl-holdings</span> \ | |
| --certificate-oidc-issuer <span class="str">https://token.actions.githubusercontent.com</span> \ | |
| ghcr.io/szl-holdings/a11oy:uds-v0.2.0 | |
| <span class="cmt"># Verify the cosign image signature (keyless / Fulcio)</span> | |
| <span class="kw">cosign</span> verify \ | |
| --certificate-identity-regexp <span class="str">github.com/szl-holdings</span> \ | |
| --certificate-oidc-issuer <span class="str">https://token.actions.githubusercontent.com</span> \ | |
| ghcr.io/szl-holdings/a11oy:uds-v0.2.0 | |
| <span class="cmt"># Rekor index is per-signing — read it from the verify output above (not hardcoded)</span> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- ══ TAB: LLM HUB ══ --> | |
| <div class="tab-panel" id="tab-llm-hub"> | |
| <div class="grid g-4" style="margin-bottom:16px"> | |
| <div class="card"><div class="card-head"><span class="icon">⬡</span>Models<span class="pill">/llm/registry</span></div><div class="card-body"><div class="kpi"><div class="kpi-num cyan" id="llm-count">7</div><div class="kpi-sub">registered models</div></div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">✦</span>Tiers<span class="pill">/llm/registry</span></div><div class="card-body"><div class="kpi"><div class="kpi-num" id="llm-tiers">5</div><div class="kpi-sub">routing tiers (0–4)</div></div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">🔏</span>Wired<span class="pill">/llm/registry</span></div><div class="card-body"><div class="kpi"><div class="kpi-num" id="llm-wired">0</div><div class="kpi-sub">API keys in env</div></div></div></div> | |
| <div class="card"><div class="card-head"><span class="icon">⛓</span>Forum Events<span class="pill">/llm/forum</span></div><div class="card-body"><div class="kpi"><div class="kpi-num good" id="llm-forum-count">0</div><div class="kpi-sub">routing receipts</div></div></div></div> | |
| </div> | |
| <div class="grid g-2-1"> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">⬡</span>a11oy Model Registry — THE LLM Hub<span class="pill">/api/a11oy/v1/llm/registry</span></div> | |
| <div class="card-body" id="llm-registry-body"><div class="sk sk-block"></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">Λ</span>Route a Prompt<span class="pill">POST /llm/route</span></div> | |
| <div class="card-body"> | |
| <div style="font:11px/1.6 var(--mono);color:var(--text-muted);margin-bottom:10px"> | |
| \u039b-gated tier selection. No API key needed — tier selection + receipt are real. | |
| </div> | |
| <input type="text" id="llm-route-prompt" placeholder="Enter prompt…" style="width:100%;padding:8px 12px;background:var(--bg);border:1px solid var(--line);color:var(--text);border-radius:7px;font:12px var(--mono);outline:none;margin-bottom:8px"> | |
| <div style="display:flex;gap:8px;margin-bottom:8px;flex-wrap:wrap"> | |
| <select id="llm-task-hint" style="padding:6px 10px;background:var(--bg);border:1px solid var(--line);color:var(--text);border-radius:7px;font:11px var(--mono);outline:none"> | |
| <option value="">auto (\u039b-driven)</option> | |
| <option value="math">math</option> | |
| <option value="research">research</option> | |
| <option value="orchestration">orchestration</option> | |
| <option value="diligence">diligence</option> | |
| </select> | |
| <button class="btn sm" onclick="routeLLM()">\u25b6 Route</button> | |
| </div> | |
| <div class="verify-result" id="llm-route-result" style="display:none"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="grid g-2" style="margin-top:16px"> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">⛓</span>LLM Routing Forum — a11oy + Rosie<span class="pill">/api/a11oy/v1/llm/forum</span></div> | |
| <div class="card-body" id="llm-forum-body"><div class="sk sk-line w80"></div></div> | |
| </div> | |
| <div class="card"> | |
| <div class="card-head"><span class="icon">◉</span>Ecosystem Mirror Manifest<span class="pill">/api/a11oy/v1/llm/ecosystem-mirror</span></div> | |
| <div class="card-body" id="llm-mirror-body"><div class="sk sk-line w80"></div></div> | |
| </div> | |
| </div> | |
| </div> | |
| </div><!-- end panel-wrap --> | |
| <footer class="honest-footer"> | |
| <b>a11oy Elite Console</b> — 20 tabs · zero mocks · every surface bound to a real <code>/api/a11oy/…</code> endpoint · | |
| W3C traceparent on every panel · skeletons over spinners · 3D where it adds value (Three.js r128 vendored)<br> | |
| <b>Doctrine v11 LOCKED · 749/14/163 · c7c0ba17 · Λ = Conjecture 1 (NOT a theorem) · SLSA L1 honest · L2 .att emitted (not independently verified) · L3 roadmap (signed slsa.dev/provenance .att; never L3)</b><br> | |
| HONEST: Wires G+H not live · audit log resets on rebuild · no FedRAMP/Iron Bank/CMMC · no L3<br> | |
| Sign: Yachay <yachay@szlholdings.ai> · | |
| Co-Authored-By: <a href="https://perplexity.ai">Perplexity Computer Agent</a> · | |
| <a href="https://github.com/szl-holdings/a11oy">GitHub</a> · | |
| <a href="https://szlholdings-a11oy.hf.space">Live Space</a> | |
| </footer> | |
| <!-- Three.js (vendored local) --> | |
| <script src="/static-vendor/three.min.js"></script> | |
| <script> | |
| </script> | |
| </body> | |
| </html> | |