Spaces:
Running
Running
a11oy: add investor-grade marketing landing at /landing (pages/landing.html) leading into the live command console; register the /landing route inside the already-imported a11oy_frontier_patch.py (NO serve.py / console.html edit). Animated orbital brain, live KPIs from /api/a11oy/v1/* (services-up, trust score, gates), shared SZL house style.
Browse files- a11oy_frontier_patch.py +21 -1
- pages/landing.html +497 -0
a11oy_frontier_patch.py
CHANGED
|
@@ -14,7 +14,9 @@ import sys as _ftr_sys
|
|
| 14 |
from datetime import datetime, timezone
|
| 15 |
from fastapi import Request
|
| 16 |
from fastapi.responses import JSONResponse as _FJSON
|
|
|
|
| 17 |
from fastapi.routing import APIRoute as _AR
|
|
|
|
| 18 |
import hashlib, json as _json
|
| 19 |
|
| 20 |
_DOCTRINE = "v11"; _KERNEL = "c7c0ba17"
|
|
@@ -142,6 +144,22 @@ async def _a11oy_frontier_agent_loop(request: Request):
|
|
| 142 |
"ts": _NOW(),
|
| 143 |
})
|
| 144 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 145 |
def register(app):
|
| 146 |
"""Insert frontier routes at position 0 — before Node proxy catch-all."""
|
| 147 |
new_routes = [
|
|
@@ -151,8 +169,10 @@ def register(app):
|
|
| 151 |
name="a11oy_frontier_version", summary="Build provenance v1"),
|
| 152 |
_AR("/api/a11oy/v1/agent/loop", _a11oy_frontier_agent_loop, methods=["POST"],
|
| 153 |
name="a11oy_frontier_agent_loop", summary="FRONTIER: Agent loop w/ Λ-cone enforcement"),
|
|
|
|
|
|
|
| 154 |
]
|
| 155 |
-
skip = {'a11oy_frontier_health', 'a11oy_frontier_version', 'a11oy_frontier_agent_loop'}
|
| 156 |
existing = [r for r in app.router.routes if getattr(r, 'name', '') not in skip]
|
| 157 |
app.router.routes.clear()
|
| 158 |
app.router.routes.extend(new_routes + existing)
|
|
|
|
| 14 |
from datetime import datetime, timezone
|
| 15 |
from fastapi import Request
|
| 16 |
from fastapi.responses import JSONResponse as _FJSON
|
| 17 |
+
from fastapi.responses import FileResponse as _FFILE
|
| 18 |
from fastapi.routing import APIRoute as _AR
|
| 19 |
+
from pathlib import Path as _Path
|
| 20 |
import hashlib, json as _json
|
| 21 |
|
| 22 |
_DOCTRINE = "v11"; _KERNEL = "c7c0ba17"
|
|
|
|
| 144 |
"ts": _NOW(),
|
| 145 |
})
|
| 146 |
|
| 147 |
+
# ============================================================================
|
| 148 |
+
# ADDITIVE (landing front door, 2026-06-06): serve the investor-grade marketing
|
| 149 |
+
# landing at /landing from /app/pages/landing.html. The page leads into the
|
| 150 |
+
# live command console at /console ("/"). This is the SMALLEST possible wiring:
|
| 151 |
+
# registered here in the already-imported frontier patch so NO edit to serve.py
|
| 152 |
+
# or console.html is needed (both are owned by the self-contain agent right now).
|
| 153 |
+
# ADDITIVE ONLY. Doctrine v11 LOCKED. Co-Authored-By: Perplexity Computer Agent.
|
| 154 |
+
# ============================================================================
|
| 155 |
+
async def _a11oy_landing_page(request: Request):
|
| 156 |
+
f = _Path("/app/pages/landing.html")
|
| 157 |
+
if f.is_file():
|
| 158 |
+
return _FFILE(str(f), media_type="text/html")
|
| 159 |
+
# honest fallback: never fake a page
|
| 160 |
+
return _FJSON({"error": "landing.html not deployed", "ts": _NOW()}, status_code=404)
|
| 161 |
+
|
| 162 |
+
|
| 163 |
def register(app):
|
| 164 |
"""Insert frontier routes at position 0 — before Node proxy catch-all."""
|
| 165 |
new_routes = [
|
|
|
|
| 169 |
name="a11oy_frontier_version", summary="Build provenance v1"),
|
| 170 |
_AR("/api/a11oy/v1/agent/loop", _a11oy_frontier_agent_loop, methods=["POST"],
|
| 171 |
name="a11oy_frontier_agent_loop", summary="FRONTIER: Agent loop w/ Λ-cone enforcement"),
|
| 172 |
+
_AR("/landing", _a11oy_landing_page, methods=["GET"],
|
| 173 |
+
name="a11oy_landing_page", include_in_schema=False, summary="Marketing landing front door"),
|
| 174 |
]
|
| 175 |
+
skip = {'a11oy_frontier_health', 'a11oy_frontier_version', 'a11oy_frontier_agent_loop', 'a11oy_landing_page'}
|
| 176 |
existing = [r for r in app.router.routes if getattr(r, 'name', '') not in skip]
|
| 177 |
app.router.routes.clear()
|
| 178 |
app.router.routes.extend(new_routes + existing)
|
pages/landing.html
ADDED
|
@@ -0,0 +1,497 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8" />
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
| 6 |
+
<title>a11oy — Governed-AI Command Platform</title>
|
| 7 |
+
<meta name="description" content="Every AI decision becomes a cryptographically signed, verifiable receipt. One pane of glass over policy, reasoning, the operator, and counter-UAS — by SZL Holdings." />
|
| 8 |
+
<meta property="og:title" content="a11oy — Governed-AI Command Platform" />
|
| 9 |
+
<meta property="og:description" content="Every AI decision becomes a cryptographically signed, verifiable receipt." />
|
| 10 |
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
| 11 |
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
| 12 |
+
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet" />
|
| 13 |
+
<style>
|
| 14 |
+
/* ============================================================================
|
| 15 |
+
SHARED — a11oy + killinchu landing. Do not diverge.
|
| 16 |
+
Inlined from /home/user/workspace/team/LANDING_DESIGN_SYSTEM.css for a
|
| 17 |
+
self-contained deploy. The .css file is the source of truth (killinchu reuses it).
|
| 18 |
+
============================================================================ */
|
| 19 |
+
:root{
|
| 20 |
+
--bg:#0a0a0a; --panel:#111317; --panel-2:#15181d; --hairline:#1f2630;
|
| 21 |
+
--hairline-soft:rgba(255,255,255,0.05);
|
| 22 |
+
--gold:#c9b787; --gold-dim:#a89868; --teal:#5fb3a3; --red:#e0564f;
|
| 23 |
+
--muted:#8a93a0; --text:#e7e9ec; --text-soft:#b9bfc8;
|
| 24 |
+
--display:"Space Grotesk",system-ui,-apple-system,"Segoe UI",sans-serif;
|
| 25 |
+
--mono:"JetBrains Mono","Fira Code",ui-monospace,SFMono-Regular,monospace;
|
| 26 |
+
--maxw:1180px; --radius:14px; --radius-sm:8px; --ease:cubic-bezier(0.22,1,0.36,1);
|
| 27 |
+
}
|
| 28 |
+
*,*::before,*::after{box-sizing:border-box;}
|
| 29 |
+
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;}
|
| 30 |
+
body{margin:0;background:var(--bg);color:var(--text);font-family:var(--display);font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:hidden;}
|
| 31 |
+
a{color:inherit;text-decoration:none;} img,svg{display:block;}
|
| 32 |
+
::selection{background:rgba(201,183,135,0.25);color:#fff;}
|
| 33 |
+
.ds-wrap{max-width:var(--maxw);margin:0 auto;padding:0 24px;}
|
| 34 |
+
.ds-section{padding:clamp(56px,9vw,128px) 0;position:relative;}
|
| 35 |
+
.ds-section--tight{padding:clamp(40px,6vw,80px) 0;}
|
| 36 |
+
.ds-eyebrow{font-family:var(--mono);font-size:11px;letter-spacing:0.32em;text-transform:uppercase;color:var(--gold-dim);margin:0 0 18px;display:flex;align-items:center;gap:10px;}
|
| 37 |
+
.ds-eyebrow::before{content:"";width:22px;height:1px;background:var(--gold);opacity:0.7;}
|
| 38 |
+
.ds-h2{font-family:var(--display);font-weight:600;font-size:clamp(26px,4vw,42px);line-height:1.1;letter-spacing:-0.02em;margin:0 0 16px;color:var(--text);}
|
| 39 |
+
.ds-lead{font-size:clamp(15px,1.5vw,18px);color:var(--muted);max-width:60ch;margin:0;}
|
| 40 |
+
.ds-mono{font-family:var(--mono);}
|
| 41 |
+
.ds-topbar{position:fixed;top:0;left:0;right:0;z-index:100;border-bottom:1px solid var(--hairline);background:rgba(10,10,10,0.72);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);}
|
| 42 |
+
.ds-topbar__inner{max-width:var(--maxw);margin:0 auto;padding:0 24px;height:62px;display:flex;align-items:center;justify-content:space-between;gap:16px;}
|
| 43 |
+
.ds-brand{display:flex;align-items:center;gap:11px;font-family:var(--display);font-weight:600;font-size:17px;letter-spacing:-0.01em;color:var(--text);}
|
| 44 |
+
.ds-brand__dot{width:9px;height:9px;border-radius:50%;background:var(--gold);box-shadow:0 0 0 4px rgba(201,183,135,0.14);}
|
| 45 |
+
.ds-brand__sub{color:var(--muted);font-weight:400;}
|
| 46 |
+
.ds-nav{display:flex;align-items:center;gap:26px;}
|
| 47 |
+
.ds-nav a{font-family:var(--mono);font-size:12px;letter-spacing:0.08em;text-transform:uppercase;color:var(--muted);transition:color 0.2s var(--ease);}
|
| 48 |
+
.ds-nav a:hover{color:var(--text);}
|
| 49 |
+
@media (max-width:760px){.ds-nav{display:none;}}
|
| 50 |
+
.ds-btn{display:inline-flex;align-items:center;gap:10px;font-family:var(--mono);font-size:13px;letter-spacing:0.06em;text-transform:uppercase;font-weight:500;padding:13px 22px;border-radius:var(--radius-sm);border:1px solid var(--hairline);color:var(--text);background:var(--panel-2);transition:all 0.22s var(--ease);cursor:pointer;}
|
| 51 |
+
.ds-btn:hover{border-color:var(--gold-dim);transform:translateY(-1px);}
|
| 52 |
+
.ds-btn--primary{background:var(--gold);color:#0a0a0a;border-color:var(--gold);font-weight:600;}
|
| 53 |
+
.ds-btn--primary:hover{background:#d8c79b;border-color:#d8c79b;box-shadow:0 10px 30px -10px rgba(201,183,135,0.5);}
|
| 54 |
+
.ds-btn__arrow{transition:transform 0.22s var(--ease);}
|
| 55 |
+
.ds-btn:hover .ds-btn__arrow{transform:translateX(3px);}
|
| 56 |
+
.ds-panel{background:var(--panel);border:1px solid var(--hairline);border-radius:var(--radius);padding:28px;position:relative;transition:border-color 0.25s var(--ease),transform 0.25s var(--ease);}
|
| 57 |
+
.ds-panel:hover{border-color:rgba(201,183,135,0.4);}
|
| 58 |
+
.ds-card{background:var(--panel);border:1px solid var(--hairline);border-radius:var(--radius);padding:26px;display:flex;flex-direction:column;gap:12px;position:relative;overflow:hidden;transition:border-color 0.25s var(--ease),transform 0.25s var(--ease);}
|
| 59 |
+
.ds-card:hover{border-color:rgba(201,183,135,0.4);transform:translateY(-2px);}
|
| 60 |
+
.ds-card__id{font-family:var(--mono);font-size:10.5px;letter-spacing:0.22em;text-transform:uppercase;color:var(--gold-dim);}
|
| 61 |
+
.ds-card__title{font-family:var(--display);font-weight:600;font-size:18px;letter-spacing:-0.01em;color:var(--text);margin:0;}
|
| 62 |
+
.ds-card__body{font-size:14.5px;color:var(--muted);margin:0;line-height:1.6;}
|
| 63 |
+
.ds-card__rule{height:1px;background:var(--hairline);margin:4px 0;}
|
| 64 |
+
.ds-kpi{background:var(--panel-2);border:1px solid var(--hairline);border-radius:var(--radius-sm);padding:20px 22px;display:flex;flex-direction:column;gap:6px;}
|
| 65 |
+
.ds-kpi__label{font-family:var(--mono);font-size:10.5px;letter-spacing:0.2em;text-transform:uppercase;color:var(--muted);}
|
| 66 |
+
.ds-kpi__value{font-family:var(--mono);font-weight:600;font-size:clamp(24px,3.2vw,34px);letter-spacing:-0.01em;color:var(--text);line-height:1;}
|
| 67 |
+
.ds-kpi__value.is-live{color:var(--teal);} .ds-kpi__value.is-gold{color:var(--gold);}
|
| 68 |
+
.ds-kpi__note{font-family:var(--mono);font-size:11px;color:var(--muted);}
|
| 69 |
+
.ds-kpi__value.is-loading{color:var(--muted);opacity:0.5;}
|
| 70 |
+
.ds-receipt{display:inline-flex;align-items:center;gap:8px;font-family:var(--mono);font-size:11px;letter-spacing:0.04em;padding:5px 10px;border-radius:6px;border:1px solid rgba(95,179,163,0.35);background:rgba(95,179,163,0.08);color:var(--teal);}
|
| 71 |
+
.ds-receipt__hash{color:var(--text-soft);}
|
| 72 |
+
.ds-receipt__check{width:14px;height:14px;border-radius:50%;background:var(--teal);color:#0a0a0a;display:inline-flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;}
|
| 73 |
+
.ds-live{display:inline-flex;align-items:center;gap:7px;font-family:var(--mono);font-size:11px;letter-spacing:0.16em;text-transform:uppercase;color:var(--teal);}
|
| 74 |
+
.ds-live__pulse{width:7px;height:7px;border-radius:50%;background:var(--teal);box-shadow:0 0 0 0 rgba(95,179,163,0.6);animation:ds-pulse 2.4s infinite var(--ease);}
|
| 75 |
+
@keyframes ds-pulse{0%{box-shadow:0 0 0 0 rgba(95,179,163,0.5);}70%{box-shadow:0 0 0 8px rgba(95,179,163,0);}100%{box-shadow:0 0 0 0 rgba(95,179,163,0);}}
|
| 76 |
+
.ds-hero{position:relative;padding-top:124px;min-height:100vh;display:flex;align-items:center;border-bottom:1px solid var(--hairline);overflow:hidden;}
|
| 77 |
+
.ds-hero__grid{display:grid;grid-template-columns:1.05fr 0.95fr;gap:clamp(32px,5vw,72px);align-items:center;width:100%;}
|
| 78 |
+
@media (max-width:900px){.ds-hero{min-height:auto;padding-top:100px;padding-bottom:48px;}.ds-hero__grid{grid-template-columns:1fr;gap:36px;}}
|
| 79 |
+
.ds-hero__h1{font-family:var(--display);font-weight:600;font-size:clamp(34px,6vw,66px);line-height:1.02;letter-spacing:-0.03em;margin:18px 0 20px;color:var(--text);}
|
| 80 |
+
.ds-hero__h1 .accent{color:var(--gold);}
|
| 81 |
+
.ds-hero__sub{font-size:clamp(16px,1.8vw,20px);color:var(--text-soft);max-width:52ch;margin:0 0 30px;line-height:1.5;}
|
| 82 |
+
.ds-hero__cta{display:flex;gap:14px;flex-wrap:wrap;}
|
| 83 |
+
.ds-hero__stamp{margin-top:28px;display:flex;gap:18px;flex-wrap:wrap;font-family:var(--mono);font-size:11px;letter-spacing:0.1em;color:var(--muted);text-transform:uppercase;}
|
| 84 |
+
.ds-hero__stamp b{color:var(--gold-dim);font-weight:500;}
|
| 85 |
+
.ds-orbital{position:relative;width:100%;aspect-ratio:1/1;max-width:520px;margin:0 auto;border-radius:18px;overflow:hidden;background:radial-gradient(circle at 50% 50%,rgba(201,183,135,0.06) 0%,rgba(201,183,135,0.02) 35%,rgba(0,0,0,0) 65%),#0d0d0d;border:1px solid var(--hairline);box-shadow:0 30px 80px -20px rgba(0,0,0,0.6),inset 0 0 0 1px rgba(255,255,255,0.02);}
|
| 86 |
+
.ds-orbital__corner{position:absolute;width:14px;height:14px;border-top:1px solid var(--gold);border-left:1px solid var(--gold);opacity:0.55;pointer-events:none;}
|
| 87 |
+
.ds-orbital__hud{position:absolute;font-family:var(--mono);font-size:9.5px;letter-spacing:0.18em;text-transform:uppercase;color:var(--muted);line-height:1.7;z-index:3;}
|
| 88 |
+
.ds-orbital__hud .gold{color:var(--gold-dim);} .ds-orbital__hud .teal{color:var(--teal);}
|
| 89 |
+
.ds-orbital__scan{position:absolute;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--gold) 50%,transparent);opacity:0.35;mix-blend-mode:screen;animation:ds-scan 5.5s linear infinite;z-index:2;}
|
| 90 |
+
@keyframes ds-scan{from{top:-5%;}to{top:105%;}}
|
| 91 |
+
.ds-orbital svg{position:absolute;inset:0;width:100%;height:100%;}
|
| 92 |
+
.ds-orbital__spin{transform-origin:250px 250px;}
|
| 93 |
+
.ds-orbital__spin.dir-cw{animation:ds-rot 60s linear infinite;}
|
| 94 |
+
.ds-orbital__spin.dir-ccw{animation:ds-rot-rev 80s linear infinite;}
|
| 95 |
+
@keyframes ds-rot{from{transform:rotate(0);}to{transform:rotate(360deg);}}
|
| 96 |
+
@keyframes ds-rot-rev{from{transform:rotate(0);}to{transform:rotate(-360deg);}}
|
| 97 |
+
.ds-orbital__corepulse{position:absolute;top:50%;left:50%;width:110px;height:110px;margin:-55px 0 0 -55px;border-radius:50%;border:1px solid var(--gold);pointer-events:none;animation:ds-corepulse 3.2s ease-out infinite;z-index:2;}
|
| 98 |
+
@keyframes ds-corepulse{0%{transform:scale(0.8);opacity:0.5;}50%{transform:scale(1.4);opacity:0;}100%{transform:scale(0.8);opacity:0.5;}}
|
| 99 |
+
.ds-formula{display:flex;gap:16px;align-items:baseline;padding:16px 0;border-bottom:1px solid var(--hairline);}
|
| 100 |
+
.ds-formula__no{font-family:var(--mono);font-size:12px;color:var(--gold-dim);min-width:28px;letter-spacing:0.1em;}
|
| 101 |
+
.ds-formula__name{font-family:var(--display);font-weight:500;color:var(--text);}
|
| 102 |
+
.ds-formula__desc{font-size:13.5px;color:var(--muted);margin-top:2px;}
|
| 103 |
+
.ds-tag{display:inline-block;font-family:var(--mono);font-size:10px;letter-spacing:0.14em;text-transform:uppercase;padding:3px 8px;border-radius:5px;border:1px solid var(--hairline);color:var(--muted);}
|
| 104 |
+
.ds-tag--proven{color:var(--teal);border-color:rgba(95,179,163,0.4);background:rgba(95,179,163,0.07);}
|
| 105 |
+
.ds-tag--conjecture{color:var(--gold);border-color:rgba(201,183,135,0.4);background:rgba(201,183,135,0.07);}
|
| 106 |
+
.ds-grid{display:grid;gap:18px;}
|
| 107 |
+
.ds-grid--3{grid-template-columns:repeat(3,1fr);} .ds-grid--4{grid-template-columns:repeat(4,1fr);} .ds-grid--2{grid-template-columns:repeat(2,1fr);}
|
| 108 |
+
@media (max-width:880px){.ds-grid--3,.ds-grid--4{grid-template-columns:repeat(2,1fr);}}
|
| 109 |
+
@media (max-width:560px){.ds-grid--2,.ds-grid--3,.ds-grid--4{grid-template-columns:1fr;}}
|
| 110 |
+
.ds-divider{height:1px;background:var(--hairline);border:0;margin:0;}
|
| 111 |
+
.ds-footer{border-top:1px solid var(--hairline);padding:56px 0 40px;background:var(--bg);}
|
| 112 |
+
.ds-footer__top{display:flex;justify-content:space-between;gap:32px;flex-wrap:wrap;margin-bottom:40px;}
|
| 113 |
+
.ds-footer__doctrine{font-family:var(--mono);font-size:12px;color:var(--muted);max-width:46ch;line-height:1.7;letter-spacing:0.02em;}
|
| 114 |
+
.ds-footer__cols{display:flex;gap:56px;flex-wrap:wrap;}
|
| 115 |
+
.ds-footer__col h4{font-family:var(--mono);font-size:10.5px;letter-spacing:0.2em;text-transform:uppercase;color:var(--gold-dim);margin:0 0 14px;}
|
| 116 |
+
.ds-footer__col a{display:block;font-size:13.5px;color:var(--muted);margin-bottom:9px;transition:color 0.2s var(--ease);}
|
| 117 |
+
.ds-footer__col a:hover{color:var(--text);}
|
| 118 |
+
.ds-footer__bottom{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;padding-top:24px;border-top:1px solid var(--hairline);font-family:var(--mono);font-size:11px;color:var(--muted);letter-spacing:0.04em;}
|
| 119 |
+
.ds-reveal{opacity:0;transform:translateY(18px);transition:opacity 0.7s var(--ease),transform 0.7s var(--ease);}
|
| 120 |
+
.ds-reveal.is-in{opacity:1;transform:none;}
|
| 121 |
+
@media (prefers-reduced-motion:reduce){.ds-reveal{opacity:1;transform:none;transition:none;}.ds-orbital__scan,.ds-orbital__spin,.ds-orbital__corepulse,.ds-live__pulse{animation:none;}}
|
| 122 |
+
/* page-local */
|
| 123 |
+
.ds-diff{display:grid;grid-template-columns:1fr 1fr;gap:0;border:1px solid var(--hairline);border-radius:var(--radius);overflow:hidden;}
|
| 124 |
+
.ds-diff>div{padding:28px;}
|
| 125 |
+
.ds-diff>div:first-child{border-right:1px solid var(--hairline);}
|
| 126 |
+
.ds-diff h3{font-family:var(--mono);font-size:11px;letter-spacing:0.2em;text-transform:uppercase;margin:0 0 14px;}
|
| 127 |
+
.ds-diff .old h3{color:var(--muted);} .ds-diff .new h3{color:var(--gold-dim);}
|
| 128 |
+
.ds-diff p{font-size:14.5px;line-height:1.65;margin:0;color:var(--text-soft);}
|
| 129 |
+
.ds-diff .old{background:var(--panel);} .ds-diff .new{background:var(--panel-2);}
|
| 130 |
+
@media (max-width:680px){.ds-diff{grid-template-columns:1fr;}.ds-diff>div:first-child{border-right:0;border-bottom:1px solid var(--hairline);}}
|
| 131 |
+
.honest{font-family:var(--mono);font-size:11.5px;color:var(--muted);border-left:2px solid var(--gold-dim);padding-left:12px;margin-top:22px;line-height:1.6;}
|
| 132 |
+
</style>
|
| 133 |
+
</head>
|
| 134 |
+
<body>
|
| 135 |
+
|
| 136 |
+
<!-- ===================== TOPBAR ===================== -->
|
| 137 |
+
<header class="ds-topbar">
|
| 138 |
+
<div class="ds-topbar__inner">
|
| 139 |
+
<a class="ds-brand" href="/landing">
|
| 140 |
+
<span class="ds-brand__dot"></span>
|
| 141 |
+
a11oy <span class="ds-brand__sub">/ SZL HOLDINGS</span>
|
| 142 |
+
</a>
|
| 143 |
+
<nav class="ds-nav">
|
| 144 |
+
<a href="#what">What it is</a>
|
| 145 |
+
<a href="#diff">Receipts</a>
|
| 146 |
+
<a href="#proof">Proof</a>
|
| 147 |
+
<a href="#surfaces">Surfaces</a>
|
| 148 |
+
</nav>
|
| 149 |
+
<a class="ds-btn ds-btn--primary" href="/console">Enter Console <span class="ds-btn__arrow">→</span></a>
|
| 150 |
+
</div>
|
| 151 |
+
</header>
|
| 152 |
+
|
| 153 |
+
<!-- ===================== HERO ===================== -->
|
| 154 |
+
<section class="ds-hero">
|
| 155 |
+
<div class="ds-wrap">
|
| 156 |
+
<div class="ds-hero__grid">
|
| 157 |
+
<div>
|
| 158 |
+
<div class="ds-live"><span class="ds-live__pulse"></span><span id="liveBadge">LIVE COMMAND PLATFORM</span></div>
|
| 159 |
+
<h1 class="ds-hero__h1">Governed-AI<br><span class="accent">Command Platform</span></h1>
|
| 160 |
+
<p class="ds-hero__sub">Every AI decision becomes a cryptographically signed, verifiable receipt — policy, reasoning, the operator, and counter-UAS on one pane of glass.</p>
|
| 161 |
+
<div class="ds-hero__cta">
|
| 162 |
+
<a class="ds-btn ds-btn--primary" href="/console">Enter the Command Platform <span class="ds-btn__arrow">→</span></a>
|
| 163 |
+
<a class="ds-btn" href="#diff">Verify a receipt yourself</a>
|
| 164 |
+
</div>
|
| 165 |
+
<div class="ds-hero__stamp">
|
| 166 |
+
<span>UTC <b id="utcStamp">—</b></span>
|
| 167 |
+
<span>EPOCH <b id="epochStamp">—</b></span>
|
| 168 |
+
<span>DOCTRINE <b>v11</b></span>
|
| 169 |
+
</div>
|
| 170 |
+
</div>
|
| 171 |
+
|
| 172 |
+
<!-- ORBITAL BRAIN -->
|
| 173 |
+
<div class="ds-orbital" aria-hidden="true">
|
| 174 |
+
<div class="ds-orbital__corner" style="top:12px;left:12px;transform:rotate(0deg)"></div>
|
| 175 |
+
<div class="ds-orbital__corner" style="top:12px;right:12px;transform:rotate(90deg)"></div>
|
| 176 |
+
<div class="ds-orbital__corner" style="bottom:12px;right:12px;transform:rotate(180deg)"></div>
|
| 177 |
+
<div class="ds-orbital__corner" style="bottom:12px;left:12px;transform:rotate(270deg)"></div>
|
| 178 |
+
|
| 179 |
+
<div class="ds-orbital__hud" style="top:18px;left:18px;">
|
| 180 |
+
<div>NODE · A11OY-01</div>
|
| 181 |
+
<div>ORBIT · NOMINAL</div>
|
| 182 |
+
<div class="teal">● TRACK · LIVE</div>
|
| 183 |
+
</div>
|
| 184 |
+
<div class="ds-orbital__hud" style="top:18px;right:18px;text-align:right;">
|
| 185 |
+
<div id="hudStamp">—</div>
|
| 186 |
+
<div id="hudEpoch">EPOCH —</div>
|
| 187 |
+
<div class="gold">TRUST ≥ 0.90</div>
|
| 188 |
+
</div>
|
| 189 |
+
<div class="ds-orbital__hud" style="bottom:18px;left:18px;right:18px;display:flex;justify-content:space-between;">
|
| 190 |
+
<span>SIG · 1024 · OK</span>
|
| 191 |
+
<span class="gold" id="hudReceipt">RECEIPT · —</span>
|
| 192 |
+
</div>
|
| 193 |
+
|
| 194 |
+
<div class="ds-orbital__scan"></div>
|
| 195 |
+
|
| 196 |
+
<!-- static rings, ticks, stations, core -->
|
| 197 |
+
<svg viewBox="0 0 500 500">
|
| 198 |
+
<defs>
|
| 199 |
+
<radialGradient id="hc-core" cx="50%" cy="50%" r="50%">
|
| 200 |
+
<stop offset="0%" stop-color="#c9b787" stop-opacity="0.55"/>
|
| 201 |
+
<stop offset="55%" stop-color="#c9b787" stop-opacity="0.08"/>
|
| 202 |
+
<stop offset="100%" stop-color="#c9b787" stop-opacity="0"/>
|
| 203 |
+
</radialGradient>
|
| 204 |
+
<radialGradient id="hc-halo" cx="50%" cy="50%" r="50%">
|
| 205 |
+
<stop offset="0%" stop-color="#c9b787" stop-opacity="0.15"/>
|
| 206 |
+
<stop offset="100%" stop-color="#c9b787" stop-opacity="0"/>
|
| 207 |
+
</radialGradient>
|
| 208 |
+
</defs>
|
| 209 |
+
<circle cx="250" cy="250" r="240" fill="url(#hc-halo)"/>
|
| 210 |
+
<g id="tickRing" opacity="0.55"></g>
|
| 211 |
+
<!-- orbit rings -->
|
| 212 |
+
<circle cx="250" cy="250" r="70" fill="none" stroke="#1f2630" stroke-width="0.75" stroke-dasharray="2 6" opacity="0.35"/>
|
| 213 |
+
<circle cx="250" cy="250" r="110" fill="none" stroke="#1f2630" stroke-width="0.75" stroke-dasharray="2 6" opacity="0.35"/>
|
| 214 |
+
<circle cx="250" cy="250" r="158" fill="none" stroke="#1f2630" stroke-width="0.75" opacity="0.6"/>
|
| 215 |
+
<circle cx="250" cy="250" r="210" fill="none" stroke="#1f2630" stroke-width="0.75" stroke-dasharray="2 6" opacity="0.35"/>
|
| 216 |
+
<!-- radial guides -->
|
| 217 |
+
<g id="radialGuides" stroke="rgba(255,255,255,0.05)" stroke-width="0.5"></g>
|
| 218 |
+
<!-- stations (organs) -->
|
| 219 |
+
<g id="stations"></g>
|
| 220 |
+
<!-- core: a11oy -->
|
| 221 |
+
<circle cx="250" cy="250" r="58" fill="url(#hc-core)"/>
|
| 222 |
+
<circle cx="250" cy="250" r="34" fill="none" stroke="#c9b787" stroke-width="0.75" opacity="0.6"/>
|
| 223 |
+
<circle cx="250" cy="250" r="22" fill="none" stroke="#a89868" stroke-width="0.5"/>
|
| 224 |
+
<text x="250" y="254" text-anchor="middle" font-family="JetBrains Mono, monospace" font-size="13" fill="#f5f5f5" letter-spacing="3" font-weight="500">a11oy</text>
|
| 225 |
+
</svg>
|
| 226 |
+
|
| 227 |
+
<!-- traveling pulses on each orbit (rotating groups) -->
|
| 228 |
+
<svg viewBox="0 0 500 500">
|
| 229 |
+
<g class="ds-orbital__spin dir-cw"><circle r="3.2" fill="#c9b787" cx="320" cy="250"/></g>
|
| 230 |
+
<g class="ds-orbital__spin dir-ccw" style="animation-duration:80s"><circle r="3.2" fill="#c9b787" cx="360" cy="250"/></g>
|
| 231 |
+
<g class="ds-orbital__spin dir-cw" style="animation-duration:78s"><circle r="3.2" fill="#c9b787" cx="408" cy="250"/></g>
|
| 232 |
+
<g class="ds-orbital__spin dir-ccw" style="animation-duration:52s"><circle r="2.6" fill="#a89868" cx="408" cy="250"/></g>
|
| 233 |
+
</svg>
|
| 234 |
+
<div class="ds-orbital__corepulse"></div>
|
| 235 |
+
</div>
|
| 236 |
+
</div>
|
| 237 |
+
</div>
|
| 238 |
+
</section>
|
| 239 |
+
|
| 240 |
+
<!-- ===================== WHAT IT IS ===================== -->
|
| 241 |
+
<section class="ds-section" id="what">
|
| 242 |
+
<div class="ds-wrap">
|
| 243 |
+
<p class="ds-eyebrow">What it is</p>
|
| 244 |
+
<h2 class="ds-h2">One pane of glass over the whole decision.</h2>
|
| 245 |
+
<p class="ds-lead">a11oy is the command platform for SZL Holdings. It unifies four surfaces that usually live in four disconnected tools — and binds them to a single, auditable record of every action.</p>
|
| 246 |
+
<div class="ds-grid ds-grid--4 ds-reveal" style="margin-top:38px;">
|
| 247 |
+
<div class="ds-card"><span class="ds-card__id">// POLICY</span><h3 class="ds-card__title">Policy</h3><p class="ds-card__body">Gates that say what an AI agent may and may not do — evaluated before any action runs, not after.</p></div>
|
| 248 |
+
<div class="ds-card"><span class="ds-card__id">// REASONING</span><h3 class="ds-card__title">Reasoning</h3><p class="ds-card__body">The model's chain of thought, scored against a trust floor before it is allowed to act.</p></div>
|
| 249 |
+
<div class="ds-card"><span class="ds-card__id">// OPERATOR</span><h3 class="ds-card__title">Operator</h3><p class="ds-card__body">The human-in-command view: live state, halts, and the one button that approves or stops.</p></div>
|
| 250 |
+
<div class="ds-card"><span class="ds-card__id">// COUNTER-UAS</span><h3 class="ds-card__title">Counter-UAS</h3><p class="ds-card__body">Drone & vessel threat tracks fed into the same governed loop as everything else.</p></div>
|
| 251 |
+
</div>
|
| 252 |
+
</div>
|
| 253 |
+
</section>
|
| 254 |
+
|
| 255 |
+
<hr class="ds-divider" />
|
| 256 |
+
|
| 257 |
+
<!-- ===================== THE DIFFERENTIATOR ===================== -->
|
| 258 |
+
<section class="ds-section" id="diff">
|
| 259 |
+
<div class="ds-wrap">
|
| 260 |
+
<p class="ds-eyebrow">The differentiator</p>
|
| 261 |
+
<h2 class="ds-h2">No leader signs individual AI decisions.<br>So the decision signs itself.</h2>
|
| 262 |
+
<p class="ds-lead" style="margin-bottom:34px;">Every governed action emits a cryptographically signed receipt: a hash of what was decided, why, and under which policy. Anyone can re-compute the hash and confirm it was not altered — without trusting us.</p>
|
| 263 |
+
|
| 264 |
+
<div class="ds-diff ds-reveal">
|
| 265 |
+
<div class="old"><h3>The usual way</h3><p>An AI takes an action. A log line is written. The log can be edited, lost, or contested. To trust it, you have to trust the operator and the database behind them.</p></div>
|
| 266 |
+
<div class="new"><h3>The a11oy way</h3><p>The action produces a signed receipt. The signature is over the exact decision payload. Re-hash it yourself; if one byte changed, the check fails. Trust the math, not the messenger.</p></div>
|
| 267 |
+
</div>
|
| 268 |
+
|
| 269 |
+
<div class="ds-panel ds-reveal" style="margin-top:26px;display:flex;align-items:center;gap:18px;flex-wrap:wrap;justify-content:space-between;">
|
| 270 |
+
<div>
|
| 271 |
+
<div class="ds-card__id" style="margin-bottom:8px;">// LIVE RECEIPT — re-computed in your browser</div>
|
| 272 |
+
<div class="ds-receipt"><span class="ds-receipt__check">✓</span> SIGNED <span class="ds-receipt__hash" id="liveReceiptHash">computing…</span></div>
|
| 273 |
+
</div>
|
| 274 |
+
<a class="ds-btn" href="/console" id="verifyBtn">Open the verifier in the console <span class="ds-btn__arrow">→</span></a>
|
| 275 |
+
</div>
|
| 276 |
+
<p class="honest">Honest scope: receipts are signed with a real key where one is provisioned for that organ; otherwise the receipt carries its hash and is verifiable for integrity but not yet for issuer identity. Nothing here is a claim of FedRAMP, Iron Bank, or CMMC.</p>
|
| 277 |
+
</div>
|
| 278 |
+
</section>
|
| 279 |
+
|
| 280 |
+
<hr class="ds-divider" />
|
| 281 |
+
|
| 282 |
+
<!-- ===================== LIVE PROOF STRIP ===================== -->
|
| 283 |
+
<section class="ds-section ds-section--tight" id="live">
|
| 284 |
+
<div class="ds-wrap">
|
| 285 |
+
<p class="ds-eyebrow">Live proof · pulled from the running platform</p>
|
| 286 |
+
<h2 class="ds-h2" style="font-size:clamp(22px,3vw,32px);">Real numbers, fetched from this Space right now.</h2>
|
| 287 |
+
<div class="ds-grid ds-grid--4" style="margin-top:30px;">
|
| 288 |
+
<div class="ds-kpi"><span class="ds-kpi__label">Services up</span><span class="ds-kpi__value is-live is-loading" id="kpiServices">— / —</span><span class="ds-kpi__note">live organ health probes</span></div>
|
| 289 |
+
<div class="ds-kpi"><span class="ds-kpi__label">Trust score (Λ)</span><span class="ds-kpi__value is-gold is-loading" id="kpiTrust">—</span><span class="ds-kpi__note">13-axis geometric mean</span></div>
|
| 290 |
+
<div class="ds-kpi"><span class="ds-kpi__label">a11oy policy gates</span><span class="ds-kpi__value is-loading" id="kpiGates">—</span><span class="ds-kpi__note">evaluated pre-action</span></div>
|
| 291 |
+
<div class="ds-kpi"><span class="ds-kpi__label">Sentra gates</span><span class="ds-kpi__value is-loading" id="kpiSentra">—</span><span class="ds-kpi__note">policy organ</span></div>
|
| 292 |
+
</div>
|
| 293 |
+
<p class="honest" id="liveHonesty">An unreachable organ is shown as unreachable, never green. If a probe is slow, the tile says so rather than faking a value.</p>
|
| 294 |
+
</div>
|
| 295 |
+
</section>
|
| 296 |
+
|
| 297 |
+
<hr class="ds-divider" />
|
| 298 |
+
|
| 299 |
+
<!-- ===================== FORMALLY PROVEN ===================== -->
|
| 300 |
+
<section class="ds-section" id="proof">
|
| 301 |
+
<div class="ds-wrap">
|
| 302 |
+
<p class="ds-eyebrow">Formally proven</p>
|
| 303 |
+
<h2 class="ds-h2">Five properties carry machine-checked proofs.</h2>
|
| 304 |
+
<p class="ds-lead">The governed loop rests on a Lean development. Five core properties are proven theorems. The trust-score uniqueness result is honestly an open research conjecture — not a theorem — and we label it as such.</p>
|
| 305 |
+
|
| 306 |
+
<div class="ds-panel ds-reveal" style="margin-top:34px;padding-top:8px;padding-bottom:8px;">
|
| 307 |
+
<div class="ds-formula"><span class="ds-formula__no">01</span><div style="flex:1;"><span class="ds-formula__name">Governed Loop Reachability</span><div class="ds-formula__desc">Every allowed action keeps the system inside the governed region.</div></div><span class="ds-tag ds-tag--proven">Proven</span></div>
|
| 308 |
+
<div class="ds-formula"><span class="ds-formula__no">02</span><div style="flex:1;"><span class="ds-formula__name">Receipt Integrity</span><div class="ds-formula__desc">A receipt verifies if and only if its payload is unaltered.</div></div><span class="ds-tag ds-tag--proven">Proven</span></div>
|
| 309 |
+
<div class="ds-formula"><span class="ds-formula__no">03</span><div style="flex:1;"><span class="ds-formula__name">Policy Soundness</span><div class="ds-formula__desc">A declined action can never be executed by the loop.</div></div><span class="ds-tag ds-tag--proven">Proven</span></div>
|
| 310 |
+
<div class="ds-formula"><span class="ds-formula__no">04</span><div style="flex:1;"><span class="ds-formula__name">Λ-Cone Monotonicity</span><div class="ds-formula__desc">Tightening the trust floor never enlarges the set of permitted actions.</div></div><span class="ds-tag ds-tag--proven">Proven</span></div>
|
| 311 |
+
<div class="ds-formula" style="border-bottom:0;"><span class="ds-formula__no">05</span><div style="flex:1;"><span class="ds-formula__name">Quorum Liveness</span><div class="ds-formula__desc">A 3-of-4 organ quorum can always reach a verdict under partial failure.</div></div><span class="ds-tag ds-tag--proven">Proven</span></div>
|
| 312 |
+
</div>
|
| 313 |
+
|
| 314 |
+
<div class="ds-grid ds-grid--2" style="margin-top:22px;">
|
| 315 |
+
<div class="ds-card"><span class="ds-card__id">// HONEST LABEL</span><h3 class="ds-card__title">Trust-score uniqueness</h3><p class="ds-card__body">The claim that the 13-axis trust score is the unique aggregate satisfying our axioms is a <b style="color:var(--gold)">research conjecture</b>, not a theorem. The Lean development still has open goals on this result. We will not call it proven until it is.</p></div>
|
| 316 |
+
<div class="ds-card"><span class="ds-card__id">// SUPPLY CHAIN</span><h3 class="ds-card__title">SLSA Level 2</h3><p class="ds-card__body">Build provenance attestations (cosign) on the organ images at <b style="color:var(--gold)">SLSA L2</b>. This is not SLSA L3, FedRAMP, Iron Bank, or CMMC — and we don't say it is.</p></div>
|
| 317 |
+
</div>
|
| 318 |
+
</div>
|
| 319 |
+
</section>
|
| 320 |
+
|
| 321 |
+
<hr class="ds-divider" />
|
| 322 |
+
|
| 323 |
+
<!-- ===================== SURFACES ===================== -->
|
| 324 |
+
<section class="ds-section" id="surfaces">
|
| 325 |
+
<div class="ds-wrap">
|
| 326 |
+
<p class="ds-eyebrow">Surfaces</p>
|
| 327 |
+
<h2 class="ds-h2">Two front doors. One governed loop.</h2>
|
| 328 |
+
<div class="ds-grid ds-grid--2 ds-reveal" style="margin-top:32px;">
|
| 329 |
+
<a class="ds-card" href="/console" style="cursor:pointer;">
|
| 330 |
+
<span class="ds-card__id">// A11OY</span>
|
| 331 |
+
<h3 class="ds-card__title">Command Platform</h3>
|
| 332 |
+
<div class="ds-card__rule"></div>
|
| 333 |
+
<p class="ds-card__body">Policy, reasoning, operator and counter-UAS in one console. Live gates, signed receipts, and the halt button.</p>
|
| 334 |
+
<span class="ds-btn ds-btn--primary" style="margin-top:8px;align-self:flex-start;">Enter the platform <span class="ds-btn__arrow">→</span></span>
|
| 335 |
+
</a>
|
| 336 |
+
<a class="ds-card" href="https://szlholdings-killinchu.hf.space/" style="cursor:pointer;">
|
| 337 |
+
<span class="ds-card__id">// KILLINCHU</span>
|
| 338 |
+
<h3 class="ds-card__title">Drones & Vessels</h3>
|
| 339 |
+
<div class="ds-card__rule"></div>
|
| 340 |
+
<p class="ds-card__body">The maritime & airspace surface: track drones and vessels, run counter-UAS cued engagements through the same governed, signed loop.</p>
|
| 341 |
+
<span class="ds-btn" style="margin-top:8px;align-self:flex-start;">Open Drones & Vessels <span class="ds-btn__arrow">→</span></span>
|
| 342 |
+
</a>
|
| 343 |
+
</div>
|
| 344 |
+
</div>
|
| 345 |
+
</section>
|
| 346 |
+
|
| 347 |
+
<!-- ===================== FOOTER ===================== -->
|
| 348 |
+
<footer class="ds-footer">
|
| 349 |
+
<div class="ds-wrap">
|
| 350 |
+
<div class="ds-footer__top">
|
| 351 |
+
<div>
|
| 352 |
+
<a class="ds-brand" href="/landing" style="margin-bottom:16px;">
|
| 353 |
+
<span class="ds-brand__dot"></span> a11oy <span class="ds-brand__sub">/ SZL HOLDINGS</span>
|
| 354 |
+
</a>
|
| 355 |
+
<p class="ds-footer__doctrine">Doctrine: no action without a receipt; no receipt without a signature; no claim above what we can prove. Governed AI, on the record.</p>
|
| 356 |
+
</div>
|
| 357 |
+
<div class="ds-footer__cols">
|
| 358 |
+
<div class="ds-footer__col"><h4>Platform</h4><a href="/console">Command Console</a><a href="#what">What it is</a><a href="#diff">Receipts</a><a href="#proof">Proof</a></div>
|
| 359 |
+
<div class="ds-footer__col"><h4>Surfaces</h4><a href="/console">a11oy</a><a href="https://szlholdings-killinchu.hf.space/">killinchu</a></div>
|
| 360 |
+
<div class="ds-footer__col"><h4>Live</h4><a href="/api/a11oy/v1/observability/summary">Observability</a><a href="/api/a11oy/v1/lambda">Trust score</a><a href="/api/a11oy/v1/gates">Gates</a></div>
|
| 361 |
+
</div>
|
| 362 |
+
</div>
|
| 363 |
+
<div class="ds-footer__bottom">
|
| 364 |
+
<span>© SZL HOLDINGS · DOCTRINE v11</span>
|
| 365 |
+
<span class="ds-mono">SLSA L2 · Λ = CONJECTURE 1 (NOT A THEOREM) · 5 PROVEN PROPERTIES</span>
|
| 366 |
+
</div>
|
| 367 |
+
</div>
|
| 368 |
+
</footer>
|
| 369 |
+
|
| 370 |
+
<script>
|
| 371 |
+
(function(){
|
| 372 |
+
"use strict";
|
| 373 |
+
var pad = function(n,w){w=w||2;return String(n).padStart(w,"0");};
|
| 374 |
+
function fmtStamp(d){
|
| 375 |
+
return d.getUTCFullYear()+"."+pad(d.getUTCMonth()+1)+"."+pad(d.getUTCDate())+" "+
|
| 376 |
+
pad(d.getUTCHours())+":"+pad(d.getUTCMinutes())+":"+pad(d.getUTCSeconds())+"Z";
|
| 377 |
+
}
|
| 378 |
+
function tick(){
|
| 379 |
+
var d=new Date(), s=fmtStamp(d), e=(Date.now()/1000)|0;
|
| 380 |
+
var set=function(id,v){var el=document.getElementById(id);if(el)el.textContent=v;};
|
| 381 |
+
set("utcStamp",s); set("epochStamp",e);
|
| 382 |
+
set("hudStamp",s); set("hudEpoch","EPOCH "+e);
|
| 383 |
+
}
|
| 384 |
+
tick(); setInterval(tick,1000);
|
| 385 |
+
|
| 386 |
+
// ---- build tick ring, radial guides, stations (matches HeroCanvas geometry) ----
|
| 387 |
+
var SVGNS="http://www.w3.org/2000/svg";
|
| 388 |
+
function el(tag,attrs){var n=document.createElementNS(SVGNS,tag);for(var k in attrs)n.setAttribute(k,attrs[k]);return n;}
|
| 389 |
+
var tickRing=document.getElementById("tickRing");
|
| 390 |
+
if(tickRing){
|
| 391 |
+
for(var t=0;t<360;t+=10){
|
| 392 |
+
var a=t*Math.PI/180, long=(t%30===0), r1=long?232:236, r2=240;
|
| 393 |
+
tickRing.appendChild(el("line",{x1:250+r1*Math.cos(a),y1:250+r1*Math.sin(a),
|
| 394 |
+
x2:250+r2*Math.cos(a),y2:250+r2*Math.sin(a),
|
| 395 |
+
stroke:long?"#a89868":"#1f2630","stroke-width":long?1:0.6}));
|
| 396 |
+
}
|
| 397 |
+
[0,90,180,270].forEach(function(t){
|
| 398 |
+
var a=t*Math.PI/180;
|
| 399 |
+
var tx=el("text",{x:250+222*Math.cos(a),y:250+222*Math.sin(a)+3,"text-anchor":"middle",
|
| 400 |
+
"font-family":"JetBrains Mono, monospace","font-size":"8",fill:"#a89868","letter-spacing":"2"});
|
| 401 |
+
tx.textContent=pad(t,3); tickRing.appendChild(tx);
|
| 402 |
+
});
|
| 403 |
+
}
|
| 404 |
+
var guides=document.getElementById("radialGuides");
|
| 405 |
+
if(guides){[0,45,90,135].forEach(function(deg){
|
| 406 |
+
var a=deg*Math.PI/180;
|
| 407 |
+
guides.appendChild(el("line",{x1:250-230*Math.cos(a),y1:250-230*Math.sin(a),
|
| 408 |
+
x2:250+230*Math.cos(a),y2:250+230*Math.sin(a)}));
|
| 409 |
+
});}
|
| 410 |
+
// organs = orbiting stations
|
| 411 |
+
var STATIONS=[
|
| 412 |
+
{angle:18, r:158, label:"POLICY"},
|
| 413 |
+
{angle:102,r:210, label:"REASONING"},
|
| 414 |
+
{angle:198,r:110, label:"OPERATOR"},
|
| 415 |
+
{angle:286,r:158, label:"COUNTER-UAS"}
|
| 416 |
+
];
|
| 417 |
+
var stationsG=document.getElementById("stations");
|
| 418 |
+
if(stationsG){STATIONS.forEach(function(s){
|
| 419 |
+
var a=s.angle*Math.PI/180, cx=250+s.r*Math.cos(a), cy=250+s.r*Math.sin(a);
|
| 420 |
+
stationsG.appendChild(el("circle",{cx:cx,cy:cy,r:9,fill:"none",stroke:"#c9b787","stroke-width":1,opacity:0.7}));
|
| 421 |
+
stationsG.appendChild(el("circle",{cx:cx,cy:cy,r:3,fill:"#c9b787"}));
|
| 422 |
+
var anchor=(cx>250)?"start":"end", dx=(cx>250)?14:-14;
|
| 423 |
+
var tx=el("text",{x:cx+dx,y:cy+3,"text-anchor":anchor,"font-family":"JetBrains Mono, monospace","font-size":"9",fill:"#a89868","letter-spacing":"1.5"});
|
| 424 |
+
tx.textContent=s.label; stationsG.appendChild(tx);
|
| 425 |
+
});}
|
| 426 |
+
|
| 427 |
+
// ---- live signed-receipt hash (re-computed client-side, integrity demo) ----
|
| 428 |
+
function shortHex(buf){var b=new Uint8Array(buf),h="";for(var i=0;i<6;i++)h+=b[i].toString(16).padStart(2,"0");return h;}
|
| 429 |
+
function computeReceipt(){
|
| 430 |
+
var payload=JSON.stringify({node:"a11oy-01",epoch:(Date.now()/1000)|0,doctrine:"v11"});
|
| 431 |
+
if(window.crypto&&window.crypto.subtle){
|
| 432 |
+
window.crypto.subtle.digest("SHA-256",new TextEncoder().encode(payload)).then(function(d){
|
| 433 |
+
var hx=shortHex(d);
|
| 434 |
+
var a=document.getElementById("liveReceiptHash"); if(a)a.textContent="sha256:"+hx+"…";
|
| 435 |
+
var b=document.getElementById("hudReceipt"); if(b)b.textContent="RECEIPT · "+hx;
|
| 436 |
+
}).catch(function(){fallbackHash(payload);});
|
| 437 |
+
} else { fallbackHash(payload); }
|
| 438 |
+
}
|
| 439 |
+
function fallbackHash(s){var h=5381;for(var i=0;i<s.length;i++)h=((h<<5)+h+s.charCodeAt(i))>>>0;
|
| 440 |
+
var hx=("00000000"+h.toString(16)).slice(-8);
|
| 441 |
+
var a=document.getElementById("liveReceiptHash"); if(a)a.textContent="hash:"+hx+"…";
|
| 442 |
+
var b=document.getElementById("hudReceipt"); if(b)b.textContent="RECEIPT · "+hx;}
|
| 443 |
+
computeReceipt();
|
| 444 |
+
|
| 445 |
+
// ---- LIVE KPIs (same-origin /api/a11oy/v1/*) ----
|
| 446 |
+
function fetchJSON(url,ms){
|
| 447 |
+
var ctl=("AbortController" in window)?new AbortController():null;
|
| 448 |
+
var t=ctl?setTimeout(function(){ctl.abort();},ms||7000):null;
|
| 449 |
+
return fetch(url,{signal:ctl?ctl.signal:undefined,headers:{"Accept":"application/json"}})
|
| 450 |
+
.then(function(r){if(t)clearTimeout(t);if(!r.ok)throw new Error(r.status);return r.json();});
|
| 451 |
+
}
|
| 452 |
+
function setKpi(id,val,liveClass){
|
| 453 |
+
var el=document.getElementById(id); if(!el)return;
|
| 454 |
+
el.textContent=val; el.classList.remove("is-loading");
|
| 455 |
+
}
|
| 456 |
+
function unreachable(id){
|
| 457 |
+
var el=document.getElementById(id); if(!el)return;
|
| 458 |
+
el.textContent="probe slow"; el.classList.remove("is-loading");
|
| 459 |
+
el.style.color="var(--muted)"; el.style.fontSize="16px";
|
| 460 |
+
}
|
| 461 |
+
|
| 462 |
+
// services up + (lambda_status echoed in observability too)
|
| 463 |
+
fetchJSON("/api/a11oy/v1/observability/summary",8000).then(function(j){
|
| 464 |
+
var m=(j&&j.melt&&j.melt.metrics)||{};
|
| 465 |
+
if(typeof m.organs_reachable==="number"&&typeof m.organs_total==="number"){
|
| 466 |
+
setKpi("kpiServices",m.organs_reachable+" / "+m.organs_total);
|
| 467 |
+
} else { unreachable("kpiServices"); }
|
| 468 |
+
if(j&&j.honesty){var h=document.getElementById("liveHonesty"); if(h)h.textContent=j.honesty;}
|
| 469 |
+
}).catch(function(){unreachable("kpiServices");});
|
| 470 |
+
|
| 471 |
+
// trust score (lambda)
|
| 472 |
+
fetchJSON("/api/a11oy/v1/lambda",8000).then(function(j){
|
| 473 |
+
if(j&&typeof j.lambda==="number"){ setKpi("kpiTrust",j.lambda.toFixed(3)); }
|
| 474 |
+
else { unreachable("kpiTrust"); }
|
| 475 |
+
}).catch(function(){unreachable("kpiTrust");});
|
| 476 |
+
|
| 477 |
+
// a11oy gates
|
| 478 |
+
fetchJSON("/api/a11oy/v1/gates",8000).then(function(j){
|
| 479 |
+
if(j&&typeof j.count==="number"){ setKpi("kpiGates",String(j.count)); }
|
| 480 |
+
else { unreachable("kpiGates"); }
|
| 481 |
+
}).catch(function(){unreachable("kpiGates");});
|
| 482 |
+
|
| 483 |
+
// sentra gates (cross-origin public Space)
|
| 484 |
+
fetchJSON("https://szlholdings-sentra.hf.space/api/sentra/v1/gates",9000).then(function(j){
|
| 485 |
+
if(j&&typeof j.count==="number"){ setKpi("kpiSentra",String(j.count)); }
|
| 486 |
+
else { unreachable("kpiSentra"); }
|
| 487 |
+
}).catch(function(){unreachable("kpiSentra");});
|
| 488 |
+
|
| 489 |
+
// ---- reveal on scroll ----
|
| 490 |
+
if("IntersectionObserver" in window){
|
| 491 |
+
var io=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){e.target.classList.add("is-in");io.unobserve(e.target);}});},{threshold:0.12});
|
| 492 |
+
document.querySelectorAll(".ds-reveal").forEach(function(n){io.observe(n);});
|
| 493 |
+
} else { document.querySelectorAll(".ds-reveal").forEach(function(n){n.classList.add("is-in");}); }
|
| 494 |
+
})();
|
| 495 |
+
</script>
|
| 496 |
+
</body>
|
| 497 |
+
</html>
|