Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="utf-8" /> | |
| <!-- SAFE-NOW hardening (R2). This Space is sdk:static on HF; HF's static serving | |
| only honors COOP/COEP/CORP via README custom_headers and does NOT pass through | |
| arbitrary response headers (no _headers file, no CSP/HSTS/Referrer at the edge). | |
| So we set what the browser actually honors from a <meta http-equiv>: an enforced, | |
| non-breaking CSP + nosniff + Referrer-Policy. HSTS and CSP frame-ancestors are | |
| intentionally NOT set here because browsers IGNORE them in <meta> — putting them | |
| here would be security theater (doctrine v11: never fabricate). Embed protection | |
| instead relies on HF's edge COOP and the README disable_embedding posture. | |
| The CSP keeps 'unsafe-inline' for script/style: the 3D atlas ships heavy inline | |
| JS + inline styles + WebGL canvas, so a strict nonce CSP would white-screen it. | |
| What this still buys: locks resource ORIGINS (no rogue external script/CDN/img), | |
| object-src 'none', base-uri 'self', and an explicit connect-src allow-list. --> | |
| <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; font-src 'self'; connect-src 'self' https://szlholdings-a11oy.hf.space https://szlholdings-killinchu.hf.space https://szlholdings-amaru.hf.space https://szlholdings-sentra.hf.space; object-src 'none'; base-uri 'self'; form-action 'self'" /> | |
| <meta http-equiv="X-Content-Type-Options" content="nosniff" /> | |
| <meta name="referrer" content="strict-origin-when-cross-origin" /> | |
| <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2" /> | |
| <title>SZL Agent Body v5 (evolves v4) — Living Anatomy · WILLAY conscience · Sovereign Mesh · buyer-verifiable receipts</title> | |
| <meta name="description" content="The SZL Agent Body v4 — a genuine anatomical organism. Two bodies (a11oy + killinchu) sharing one circulatory (YAWAR receipt bus) + nervous (span lineage) mesh, with proven formulas flowing through the organs and the Λ heart beating at the center." /> | |
| <style> | |
| /* ============ DESIGN TOKENS — cinematic dark scientific ============ */ | |
| :root{ | |
| --bg:#04060c; --bg2:#0a0e1a; | |
| --surface:rgba(13,18,33,0.72); --surface-2:rgba(20,26,46,0.92); | |
| --border:rgba(120,150,210,0.16); --border-strong:rgba(150,180,240,0.32); | |
| --text:#eef2ff; --text-muted:#9aa8cc; --text-dim:#5d6a8f; | |
| --heart:#ff5d8f; --blood:#ff3b5c; --brain:#7c5cff; --nerve:#5ad1ff; | |
| --skel:#ffd166; --audit:#9ef0c0; | |
| --a11oy:#3fe0c5; --killinchu:#ffb13f; | |
| --warn:#ff7eb6; --ok:#5ad1ff; --gate:#ffd166; | |
| --radius:16px; --blur:20px; | |
| --font-d:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Inter,Roboto,"Helvetica Neue",sans-serif; | |
| --font-m:ui-monospace,"SF Mono","JetBrains Mono",Menlo,Consolas,"Liberation Mono",monospace; | |
| --shadow:0 18px 60px rgba(0,0,0,0.55); | |
| } | |
| *{box-sizing:border-box;margin:0;padding:0} | |
| html,body{height:100%;overflow:hidden;background:var(--bg);color:var(--text);font-family:var(--font-d);-webkit-font-smoothing:antialiased;letter-spacing:0.005em} | |
| #scene{position:fixed;inset:0;z-index:0;display:block;touch-action:none} | |
| canvas{display:block} | |
| /* cinematic vignette + subtle grain over the canvas */ | |
| #vignette{position:fixed;inset:0;z-index:10;pointer-events:none; | |
| background:radial-gradient(120% 90% at 50% 42%,transparent 48%,rgba(2,4,9,0.55) 100%)} | |
| /* ============ loading ============ */ | |
| #loader{position:fixed;inset:0;z-index:60;display:flex;flex-direction:column;align-items:center;justify-content:center; | |
| background:radial-gradient(circle at 50% 40%,#0c1430 0%,#05070d 70%);transition:opacity .6s ease} | |
| #loader.hidden{opacity:0;pointer-events:none} | |
| .pulse-ring{width:64px;height:64px;border-radius:50%;border:2px solid rgba(255,93,143,.25);border-top-color:var(--heart);animation:spin 1s linear infinite} | |
| @keyframes spin{to{transform:rotate(360deg)}} | |
| #loader .lt{margin-top:18px;font-family:var(--font-m);font-size:12px;letter-spacing:.18em;color:var(--text-muted);text-transform:uppercase} | |
| /* ============ HUD ============ */ | |
| .hud{position:fixed;z-index:20;pointer-events:none} | |
| .hud .card{pointer-events:auto} | |
| /* top-left title */ | |
| #title{top:22px;left:24px;max-width:min(440px,72vw)} | |
| #title .eyebrow{font-family:var(--font-m);font-size:9.5px;letter-spacing:.26em;text-transform:uppercase;color:var(--text-dim);margin-bottom:7px} | |
| #title h1{font-size:21px;font-weight:600;letter-spacing:-.01em;line-height:1.12} | |
| #title h1 .v3{color:var(--heart);font-weight:700} | |
| #title .sub{font-size:12px;color:var(--text-muted);margin-top:7px;letter-spacing:.01em;line-height:1.45;max-width:38ch} | |
| #title .bodies{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap} | |
| .body-tag{font-family:var(--font-m);font-size:10.5px;letter-spacing:.04em;padding:5px 11px;border-radius:99px;border:1px solid var(--border);background:var(--surface);backdrop-filter:blur(var(--blur))} | |
| .body-tag.a{color:var(--a11oy);border-color:rgba(63,224,197,.4)} | |
| .body-tag.k{color:var(--killinchu);border-color:rgba(255,177,63,.4)} | |
| /* honesty strip */ | |
| #honesty{top:22px;right:24px;max-width:min(360px,82vw)} | |
| #honesty .card{background:var(--surface);backdrop-filter:blur(var(--blur));border:1px solid var(--border);border-radius:var(--radius);padding:15px 16px;box-shadow:var(--shadow)} | |
| #honesty .hdr{font-family:var(--font-m);font-size:9.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--text-dim);margin-bottom:11px;padding-bottom:9px;border-bottom:1px solid var(--border)} | |
| #honesty .row{display:flex;gap:9px;align-items:flex-start;font-size:11px;line-height:1.42;color:var(--text-muted);margin-bottom:9px} | |
| #honesty .row:last-child{margin-bottom:0} | |
| #honesty .dot{flex:0 0 auto;width:7px;height:7px;border-radius:50%;margin-top:4px;box-shadow:0 0 8px currentColor} | |
| #honesty b{color:var(--text);font-weight:600} | |
| #honesty .gpd-row{cursor:pointer;border-top:1px solid var(--border);padding-top:10px;margin-top:11px;transition:opacity .15s} | |
| #honesty .gpd-row:hover{opacity:.82} | |
| .chip{display:inline-block;font-family:var(--font-m);font-size:9.5px;letter-spacing:.03em;padding:2px 7px;border-radius:7px;border:1px solid currentColor;white-space:nowrap} | |
| /* systems legend bottom-left */ | |
| #legend{bottom:24px;left:24px;max-width:min(360px,82vw)} | |
| #legend .card{background:var(--surface);backdrop-filter:blur(var(--blur));border:1px solid var(--border);border-radius:var(--radius);padding:15px 16px;box-shadow:var(--shadow)} | |
| #legend h3{font-family:var(--font-m);font-size:9.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--text-dim);margin-bottom:12px} | |
| .sys-row{display:flex;gap:11px;align-items:baseline;margin-bottom:11px;cursor:pointer;transition:opacity .15s,transform .15s} | |
| .sys-row:last-child{margin-bottom:0} | |
| .sys-row:hover{opacity:.85;transform:translateX(2px)} | |
| .sys-row .sw{flex:0 0 auto;width:11px;height:11px;border-radius:4px;margin-top:3px;box-shadow:0 0 10px currentColor} | |
| .sys-row .nm{font-size:12.5px;font-weight:600} | |
| .sys-row .qn{font-family:var(--font-m);font-size:10px;color:var(--text-muted)} | |
| .sys-row .fnx{font-size:10.5px;color:var(--text-dim);display:block;line-height:1.4;margin-top:2px} | |
| /* controls bottom-center */ | |
| #controls{bottom:24px;left:50%;transform:translateX(-50%);display:flex;gap:9px;flex-wrap:wrap;justify-content:center} | |
| .btn{pointer-events:auto;font-family:var(--font-m);font-size:11px;letter-spacing:.03em;color:var(--text-muted);background:var(--surface); | |
| backdrop-filter:blur(var(--blur));border:1px solid var(--border);border-radius:99px;padding:9px 15px;cursor:pointer;transition:all .18s;user-select:none;box-shadow:var(--shadow)} | |
| .btn:hover{border-color:var(--border-strong);background:var(--surface-2);color:var(--text);transform:translateY(-1px)} | |
| .btn.active{color:var(--heart);border-color:rgba(255,93,143,.5);background:rgba(255,93,143,.08)} | |
| /* hint */ | |
| #hint{bottom:72px;left:50%;transform:translateX(-50%);font-family:var(--font-m);font-size:10.5px;color:var(--text-dim);letter-spacing:.06em;text-align:center} | |
| /* ============ ORGAN PANEL ============ */ | |
| #panel{position:fixed;z-index:40;top:0;right:0;height:100%;width:min(460px,94vw); | |
| background:linear-gradient(180deg,var(--surface-2),rgba(8,11,22,.97));backdrop-filter:blur(26px); | |
| border-left:1px solid var(--border-strong);transform:translateX(102%);transition:transform .46s cubic-bezier(.16,1,.3,1); | |
| overflow-y:auto;overscroll-behavior:contain;box-shadow:-40px 0 100px rgba(0,0,0,.6)} | |
| #panel.open{transform:translateX(0)} | |
| #panel .ph{position:sticky;top:0;z-index:2;padding:24px 26px 16px;background:linear-gradient(180deg,rgba(13,17,32,.99),rgba(13,17,32,.84));border-bottom:1px solid var(--border)} | |
| #panel .ph .sys-pill{font-family:var(--font-m);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--text-dim)} | |
| #panel .ph .quechua{font-size:29px;font-weight:700;line-height:1.04;margin-top:6px;letter-spacing:-.01em} | |
| #panel .ph .fn{font-size:13px;color:var(--text-muted);margin-top:5px;line-height:1.4} | |
| #panel .pb{padding:20px 26px 100px} | |
| #panel .blurb{font-size:13.5px;line-height:1.62;color:var(--text);opacity:.94} | |
| #panel .axes{font-family:var(--font-m);font-size:10.5px;line-height:1.75;color:var(--text-muted);background:rgba(255,93,143,.06);border:1px solid rgba(255,93,143,.2);border-radius:12px;padding:13px 14px;margin-top:16px} | |
| .sec-h{font-family:var(--font-m);font-size:9.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--text-dim);margin:24px 0 12px;padding-bottom:8px;border-bottom:1px solid var(--border)} | |
| .formula{border:1px solid var(--border);border-left:3px solid var(--border-strong);border-radius:12px;padding:14px 15px;margin-bottom:12px;background:var(--surface);transition:border-color .15s,transform .15s} | |
| .formula:hover{border-color:var(--border-strong);transform:translateY(-1px)} | |
| .formula .ftop{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap} | |
| .formula .fid{font-family:var(--font-m);font-size:11.5px;font-weight:700;letter-spacing:.04em} | |
| .formula .fname{font-size:13.5px;font-weight:600;margin-top:3px} | |
| .formula .math{font-family:var(--font-m);font-size:13px;line-height:1.65;color:#e3ebff;background:rgba(6,9,18,.8);border:1px solid rgba(120,150,210,.10);border-radius:9px;padding:10px 12px;margin:10px 0;overflow-x:auto;white-space:pre-wrap} | |
| .formula .fplain{font-size:11.5px;line-height:1.55;color:var(--text-muted)} | |
| .formula .fax{font-family:var(--font-m);font-size:9.5px;color:var(--text-dim);margin-top:9px;line-height:1.5;word-break:break-word} | |
| .formula .fref{font-family:var(--font-m);font-size:9.5px;color:var(--text-dim);margin-top:4px} | |
| /* GPD lens presentation */ | |
| .gpd-grid{display:grid;gap:9px;margin-top:16px} | |
| .gpd-cell{border:1px solid var(--border);border-radius:11px;padding:11px 13px;background:var(--surface)} | |
| .gpd-cell .gpd-k{display:block;font-family:var(--font-m);font-size:10.5px;letter-spacing:.04em;color:var(--brain);font-weight:700} | |
| .gpd-cell .gpd-v{display:block;font-size:12px;line-height:1.5;color:var(--text-muted);margin-top:4px} | |
| .gpd-dois{display:grid;gap:7px} | |
| .gpd-dois .doi{display:flex;justify-content:space-between;gap:10px;align-items:baseline;text-decoration:none; | |
| border:1px solid var(--border);border-radius:10px;padding:9px 12px;background:var(--surface);transition:border-color .15s} | |
| .gpd-dois .doi:hover{border-color:var(--border-strong)} | |
| .gpd-dois .doi{font-size:12px;color:var(--text)} | |
| .gpd-dois .doi span{font-family:var(--font-m);font-size:9.5px;color:var(--text-dim);white-space:nowrap} | |
| .lambda-honesty{border:1px solid var(--warn);border-radius:12px;padding:13px 14px;margin:14px 0;background:rgba(255,126,182,.08)} | |
| .lambda-honesty .lh-h{font-family:var(--font-m);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--warn);margin-bottom:7px} | |
| .lambda-honesty p{font-size:12px;line-height:1.5;color:var(--text)} | |
| .lambda-honesty .false{color:var(--warn);font-weight:700} | |
| #panel .close{position:absolute;top:18px;right:18px;width:32px;height:32px;border-radius:50%;border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:17px;cursor:pointer;line-height:1;z-index:3} | |
| #panel .close:hover{border-color:var(--border-strong)} | |
| /* ============ VESSEL TOOLTIP ============ */ | |
| #tip{position:fixed;z-index:30;pointer-events:none;opacity:0;transition:opacity .12s;max-width:280px; | |
| background:var(--surface-2);backdrop-filter:blur(12px);border:1px solid var(--border-strong);border-radius:10px;padding:9px 11px; | |
| font-size:11px;line-height:1.4;box-shadow:0 12px 40px rgba(0,0,0,.5)} | |
| #tip.show{opacity:1} | |
| #tip .tt{font-family:var(--font-m);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--text-dim);margin-bottom:3px} | |
| #tip .tf{font-weight:600;color:var(--text)} | |
| #tip .tm{font-family:var(--font-m);font-size:10px;color:#dfe7ff;margin-top:4px} | |
| @media (max-width:680px){ | |
| /* Keep proof state VISIBLE on phones (never display:none) — reposition the | |
| honesty card to a compact, scrollable strip under the title so the | |
| locked-8 / Λ / Khipu / SLSA proof pills still pop on mobile. */ | |
| #title{max-width:calc(100vw - 32px)} | |
| #title h1{font-size:17px;line-height:1.18;text-wrap:balance;overflow-wrap:break-word} | |
| #title .sub{display:none} | |
| /* park the proof card in the open space directly under the title — | |
| clear of the bottom control bar so nothing overlaps the proof text */ | |
| #honesty{position:fixed;top:128px;left:16px;right:16px;bottom:auto;max-width:none; | |
| max-height:calc(100vh - 128px - 132px);overflow-y:auto;-webkit-overflow-scrolling:touch} | |
| #honesty .card{padding:12px 13px} | |
| #honesty .row{font-size:10.5px;margin-bottom:8px} | |
| #legend{display:none} | |
| #hint{display:none} | |
| #controls{bottom:18px;gap:7px;max-width:calc(100vw - 24px)} | |
| #panel .ph .quechua{font-size:22px} | |
| } | |
| @media (max-width:380px){ | |
| #title h1{font-size:15px} | |
| #honesty{top:120px;max-height:calc(100vh - 120px - 124px)} | |
| #honesty .row{font-size:10px} | |
| #controls{gap:6px} | |
| .btn{font-size:10px;padding:8px 11px} | |
| } | |
| /* ============ STATIC VERIFICATION / NO-JS FALLBACK ============ */ | |
| #vf-static{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden; | |
| clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0} | |
| body.nojs #vf-static, #vf-static.show{position:fixed;inset:0;z-index:80;width:auto;height:auto; | |
| margin:0;padding:28px 22px 80px;overflow-y:auto;white-space:normal;clip:auto;clip-path:none; | |
| background:linear-gradient(180deg,#0a0e1a,#05070d);color:var(--text);font-family:var(--font-d)} | |
| #vf-close{display:none} | |
| #vf-static.show #vf-close, body.nojs #vf-close{display:inline-block;position:fixed;top:16px;right:16px;z-index:81; | |
| font-family:var(--font-m);font-size:12px;color:var(--text);background:var(--surface-2); | |
| border:1px solid var(--border-strong);border-radius:99px;padding:8px 14px;cursor:pointer} | |
| #vf-static .vf-head h2{font-size:18px;margin-bottom:10px;max-width:880px} | |
| #vf-static .vf-honest{font-size:12px;line-height:1.5;color:var(--text-muted);max-width:880px;margin-bottom:12px} | |
| #vf-static .vf-tier-locked{color:var(--skel);font-weight:700} | |
| #vf-static .vf-tier-exp{color:var(--nerve);font-weight:700} | |
| #vf-static .vf-lambda{border:1px solid var(--warn);border-radius:10px;padding:11px 13px;margin:12px 0; | |
| background:rgba(255,126,182,.08);font-size:12px;line-height:1.5;max-width:880px} | |
| #vf-static .vf-organ{border:1px solid var(--border);border-radius:12px;padding:12px 14px;margin:12px 0; | |
| background:var(--surface);max-width:880px} | |
| #vf-static .vf-organ h3{font-size:14px;margin-bottom:8px} | |
| #vf-static .vf-sys{font-family:var(--font-m);font-size:10px;color:var(--text-dim)} | |
| #vf-static .vf-formula{border-left:2px solid var(--border-strong);padding:6px 0 6px 12px;margin:9px 0} | |
| #vf-static .vf-formula h4{font-size:12.5px;margin-bottom:4px} | |
| #vf-static .vf-chip{font-family:var(--font-m);font-size:9.5px;color:var(--nerve);border:1px solid currentColor;border-radius:6px;padding:1px 6px;margin-left:6px} | |
| #vf-static .vf-formula[data-maturity=LOCKED] .vf-chip{color:var(--skel)} | |
| #vf-static .vf-formula[data-maturity=CONDITIONAL] .vf-chip{color:var(--audit)} | |
| #vf-static .vf-formula[data-maturity=AXIOM_GATED] .vf-chip{color:#c9a0ff} | |
| #vf-static .vf-cond{border-left-color:var(--audit)} | |
| #vf-static .vf-plain{font-size:11.5px;color:var(--text-muted);line-height:1.45} | |
| #vf-static .vf-ax{font-family:var(--font-m);font-size:10px;color:var(--text-dim);margin-top:4px;word-break:break-word} | |
| #vf-static .vf-ref{font-family:var(--font-m);font-size:9.5px;color:var(--text-dim)} | |
| /* ============================================================ | |
| v4 DISSECTION TOOLS — additive layer (evolves v3, never a | |
| rewrite). Dissection layer stack, clip-plane scalpel, explode | |
| slider, search/jump, always-on visibility HUD, focus mode. | |
| All controls keyboard-reachable, ARIA-labeled, non-overlapping. | |
| ============================================================ */ | |
| /* dissection dock — top-left, below the title, never over #controls */ | |
| #dissect{top:206px;left:24px;width:min(290px,76vw);max-height:calc(100vh - 430px);overflow-y:auto;z-index:22} | |
| #dissect .card{background:var(--surface);backdrop-filter:blur(var(--blur));border:1px solid var(--border); | |
| border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden} | |
| #dissect .dz-head{display:flex;align-items:center;justify-content:space-between;gap:8px; | |
| font-family:var(--font-m);font-size:9.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--text-dim); | |
| padding:12px 14px;border-bottom:1px solid var(--border);cursor:pointer;user-select:none} | |
| #dissect .dz-head .v4tag{color:var(--audit);letter-spacing:.04em} | |
| #dissect .dz-head .caret{transition:transform .2s} | |
| #dissect.collapsed .dz-head .caret{transform:rotate(-90deg)} | |
| #dissect .dz-body{padding:12px 14px;display:flex;flex-direction:column;gap:14px; | |
| max-height:min(58vh,520px);overflow-y:auto;overscroll-behavior:contain} | |
| #dissect.collapsed .dz-body{display:none} | |
| .dz-sec{display:flex;flex-direction:column;gap:8px} | |
| .dz-sec > .dz-label{font-family:var(--font-m);font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--text-dim)} | |
| /* layer rows */ | |
| .dz-layer{display:grid;grid-template-columns:auto 1fr auto;gap:8px;align-items:center} | |
| .dz-layer .lname{font-size:11px;color:var(--text-muted);display:flex;align-items:center;gap:6px;min-width:0} | |
| .dz-layer .lsw{flex:0 0 auto;width:9px;height:9px;border-radius:3px;box-shadow:0 0 8px currentColor} | |
| .dz-layer input[type=range]{width:74px} | |
| .dz-toggle{position:relative;width:30px;height:17px;flex:0 0 auto;cursor:pointer;border-radius:99px; | |
| border:1px solid var(--border-strong);background:rgba(120,150,210,.12);transition:background .18s;padding:0} | |
| .dz-toggle::after{content:"";position:absolute;top:2px;left:2px;width:11px;height:11px;border-radius:50%; | |
| background:var(--text-muted);transition:transform .18s,background .18s} | |
| .dz-toggle[aria-pressed=true]{background:rgba(94,209,255,.22)} | |
| .dz-toggle[aria-pressed=true]::after{transform:translateX(13px);background:var(--nerve)} | |
| .dz-toggle:focus-visible{outline:2px solid var(--nerve);outline-offset:2px} | |
| /* sliders */ | |
| input[type=range].dz-range{-webkit-appearance:none;appearance:none;height:4px;border-radius:99px; | |
| background:rgba(120,150,210,.22);outline:none;cursor:pointer} | |
| input[type=range].dz-range::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:13px;height:13px; | |
| border-radius:50%;background:var(--nerve);box-shadow:0 0 8px rgba(94,209,255,.6);border:none;cursor:pointer} | |
| input[type=range].dz-range::-moz-range-thumb{width:13px;height:13px;border-radius:50%;background:var(--nerve); | |
| box-shadow:0 0 8px rgba(94,209,255,.6);border:none;cursor:pointer} | |
| input[type=range].dz-range:focus-visible{outline:2px solid var(--nerve);outline-offset:3px} | |
| .dz-row{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:11px;color:var(--text-muted)} | |
| .dz-row .val{font-family:var(--font-m);font-size:10px;color:var(--nerve);min-width:34px;text-align:right} | |
| .dz-axis{display:flex;gap:5px} | |
| .dz-axis button{flex:1;font-family:var(--font-m);font-size:10px;color:var(--text-muted);background:var(--surface); | |
| border:1px solid var(--border);border-radius:8px;padding:5px 0;cursor:pointer;transition:all .15s} | |
| .dz-axis button[aria-pressed=true]{color:var(--nerve);border-color:rgba(94,209,255,.5);background:rgba(94,209,255,.1)} | |
| .dz-axis button:focus-visible{outline:2px solid var(--nerve);outline-offset:2px} | |
| .dz-mini{font-family:var(--font-m);font-size:10px;color:var(--text-muted);background:var(--surface); | |
| border:1px solid var(--border);border-radius:8px;padding:5px 10px;cursor:pointer;transition:all .15s} | |
| .dz-mini:hover{border-color:var(--border-strong);color:var(--text)} | |
| .dz-mini:focus-visible{outline:2px solid var(--nerve);outline-offset:2px} | |
| .dz-mini.active{color:var(--audit);border-color:rgba(158,240,192,.5);background:rgba(158,240,192,.1)} | |
| /* search / jump */ | |
| .dz-search{position:relative} | |
| .dz-search input{width:100%;font-family:var(--font-d);font-size:12px;color:var(--text);background:rgba(6,9,18,.7); | |
| border:1px solid var(--border);border-radius:9px;padding:8px 10px} | |
| .dz-search input::placeholder{color:var(--text-dim)} | |
| .dz-search input:focus-visible{outline:2px solid var(--nerve);outline-offset:1px;border-color:var(--border-strong)} | |
| .dz-results{list-style:none;margin:6px 0 0;padding:0;max-height:182px;overflow-y:auto; | |
| border:1px solid var(--border);border-radius:9px;background:var(--surface-2);display:none} | |
| .dz-results.show{display:block} | |
| .dz-results li{padding:7px 10px;font-size:11px;color:var(--text-muted);cursor:pointer;border-bottom:1px solid var(--border); | |
| display:flex;gap:7px;align-items:baseline} | |
| .dz-results li:last-child{border-bottom:none} | |
| .dz-results li:hover,.dz-results li[aria-selected=true]{background:rgba(94,209,255,.1);color:var(--text)} | |
| .dz-results li .rk{font-family:var(--font-m);font-size:9px;color:var(--nerve);flex:0 0 auto} | |
| .dz-results li .rt{font-family:var(--font-m);font-size:8.5px;color:var(--text-dim);margin-left:auto;flex:0 0 auto} | |
| .dz-results .empty{color:var(--text-dim);cursor:default;font-style:italic} | |
| .dz-results .empty:hover{background:none;color:var(--text-dim)} | |
| /* always-on visibility HUD — bottom-right, compact, non-intrusive */ | |
| #vis-hud{bottom:24px;right:24px;z-index:21;max-width:min(290px,82vw)} | |
| #vis-hud .card{background:var(--surface);backdrop-filter:blur(var(--blur));border:1px solid var(--border); | |
| border-radius:var(--radius);box-shadow:var(--shadow);padding:11px 13px} | |
| #vis-hud .vh-head{display:flex;align-items:center;gap:7px;font-family:var(--font-m);font-size:9px;letter-spacing:.16em; | |
| text-transform:uppercase;color:var(--text-dim);margin-bottom:9px} | |
| #vis-hud .pulse-tick{width:7px;height:7px;border-radius:50%;background:var(--heart);box-shadow:0 0 8px var(--heart)} | |
| #vis-hud .vh-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px 12px} | |
| #vis-hud .vh-stat{display:flex;flex-direction:column;line-height:1.2} | |
| #vis-hud .vh-stat .k{font-family:var(--font-m);font-size:8.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim)} | |
| #vis-hud .vh-stat .v{font-size:13px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums} | |
| #vis-hud .vh-stat .v.locked{color:var(--skel)} | |
| #vis-hud .vh-stat .v.exp{color:var(--nerve)} | |
| #vis-hud .vh-stat .v.conj{color:var(--warn);font-size:11px} | |
| #vis-hud .vh-foot{margin-top:8px;padding-top:8px;border-top:1px solid var(--border); | |
| font-family:var(--font-m);font-size:9px;color:var(--text-dim);line-height:1.5} | |
| #vis-hud .vh-foot code{color:var(--audit)} | |
| /* dissect handle button in #controls inherits .btn; active state in audit hue */ | |
| #btn-dissect.active{color:var(--audit);border-color:rgba(158,240,192,.5);background:rgba(158,240,192,.08)} | |
| #btn-focus.active{color:var(--audit);border-color:rgba(158,240,192,.5);background:rgba(158,240,192,.08)} | |
| /* respect reduced motion: stop the pulse-tick animation */ | |
| @media (prefers-reduced-motion: reduce){ | |
| #vis-hud .pulse-tick{animation:none} | |
| .pulse-ring{animation:none} | |
| } | |
| @keyframes vh-pulse{0%,100%{opacity:.35;transform:scale(.85)}50%{opacity:1;transform:scale(1.15)}} | |
| #vis-hud .pulse-tick{animation:vh-pulse 1.6s ease-in-out infinite} | |
| /* ===== v4 responsive: tablet ===== */ | |
| @media (min-width:681px) and (max-width:1024px){ | |
| #dissect{top:132px;width:248px;max-height:calc(100vh - 300px)} | |
| #legend{max-width:min(300px,60vw)} | |
| #honesty{max-width:min(320px,46vw)} | |
| #vis-hud{max-width:min(260px,46vw)} | |
| } | |
| /* ===== v4 responsive: phone — dissection dock becomes a bottom sheet, | |
| NEVER hidden (it's the headline v4 feature). Toggle via a FAB. ===== */ | |
| @media (max-width:680px){ | |
| #vis-hud{left:16px;right:16px;bottom:64px;max-width:none} | |
| #vis-hud .vh-grid{grid-template-columns:repeat(3,1fr)} | |
| /* dock docks to the bottom as a draggable sheet */ | |
| #dissect{position:fixed;top:auto;left:0;right:0;bottom:0;width:100%;max-width:none; | |
| max-height:72vh;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:60; | |
| transform:translateY(calc(100% - 0px));transition:transform .42s cubic-bezier(.16,1,.3,1)} | |
| #dissect.sheet-open{transform:translateY(0)} | |
| #dissect .card{border-radius:18px 18px 0 0;border-bottom:none;max-height:72vh} | |
| #dissect .dz-head{position:sticky;top:0;background:var(--surface-2);padding:14px 16px; | |
| font-size:11px} | |
| /* grab handle */ | |
| #dissect .card::before{content:"";display:block;width:40px;height:4px;border-radius:99px; | |
| background:var(--border-strong);margin:8px auto 2px} | |
| /* floating action button to open/close the sheet */ | |
| #dissect-fab{position:fixed;right:16px;bottom:118px;z-index:61;width:auto;height:44px; | |
| padding:0 16px;border-radius:99px;border:1px solid var(--border-strong); | |
| background:var(--surface-2);color:var(--text);font-family:var(--font-m);font-size:12px; | |
| letter-spacing:.04em;display:inline-flex;align-items:center;gap:7px;cursor:pointer; | |
| box-shadow:var(--shadow);backdrop-filter:blur(var(--blur))} | |
| #dissect-fab .fi{color:var(--audit);font-size:14px} | |
| #title h1{font-size:16px} | |
| #title .sub{display:none} | |
| } | |
| /* FAB only exists on phone widths */ | |
| #dissect-fab{display:none} | |
| @media (max-width:680px){ #dissect-fab{display:inline-flex} } | |
| /* ============================================================ | |
| v5 DEEPEN — additive layer (deepens v4, never a rewrite). | |
| Formula Atlas (every formula, tier-grouped, searchable), | |
| per-organ Lean drill-down, honest forecast timeline, guided | |
| tour, leader-line labels. Everything reads from data.js. | |
| ============================================================ */ | |
| /* --- Formula Atlas: a full-height right drawer (like #panel) --- */ | |
| #atlas{position:fixed;z-index:42;top:0;right:0;height:100%;width:min(520px,96vw); | |
| background:linear-gradient(180deg,var(--surface-2),rgba(8,11,22,.98));backdrop-filter:blur(26px); | |
| border-left:1px solid var(--border-strong);transform:translateX(102%); | |
| transition:transform .46s cubic-bezier(.16,1,.3,1);overflow:hidden;display:flex;flex-direction:column; | |
| box-shadow:-40px 0 100px rgba(0,0,0,.6)} | |
| #atlas.open{transform:translateX(0)} | |
| #atlas .at-head{position:sticky;top:0;z-index:2;padding:22px 24px 14px; | |
| background:linear-gradient(180deg,rgba(13,17,32,.99),rgba(13,17,32,.86));border-bottom:1px solid var(--border)} | |
| #atlas .at-eyebrow{font-family:var(--font-m);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--text-dim)} | |
| #atlas .at-title{font-size:23px;font-weight:700;line-height:1.05;margin-top:6px;letter-spacing:-.01em} | |
| #atlas .at-note{font-size:11px;color:var(--text-muted);margin-top:6px;line-height:1.45} | |
| #atlas .at-close{position:absolute;top:16px;right:16px;width:32px;height:32px;border-radius:50%; | |
| border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:17px;cursor:pointer;line-height:1;z-index:3} | |
| #atlas .at-close:hover{border-color:var(--border-strong)} | |
| #atlas .at-search{margin-top:13px;position:relative} | |
| #atlas .at-search input{width:100%;font-family:var(--font-d);font-size:13px;color:var(--text); | |
| background:rgba(6,9,18,.7);border:1px solid var(--border);border-radius:10px;padding:9px 11px} | |
| #atlas .at-search input::placeholder{color:var(--text-dim)} | |
| #atlas .at-search input:focus-visible{outline:2px solid var(--nerve);outline-offset:1px;border-color:var(--border-strong)} | |
| #atlas .at-filters{display:flex;gap:6px;flex-wrap:wrap;margin-top:11px} | |
| .at-pill{font-family:var(--font-m);font-size:10px;letter-spacing:.02em;padding:5px 10px;border-radius:99px; | |
| border:1px solid var(--border);background:var(--surface);color:var(--text-muted);cursor:pointer;transition:all .15s; | |
| display:inline-flex;align-items:center;gap:6px} | |
| .at-pill:hover{border-color:var(--border-strong);color:var(--text)} | |
| .at-pill[aria-pressed=true]{color:var(--text);background:var(--surface-2);border-color:var(--border-strong)} | |
| .at-pill .ct{font-size:9.5px;padding:1px 6px;border-radius:99px;background:rgba(120,150,210,.18);color:inherit} | |
| .at-pill:focus-visible{outline:2px solid var(--nerve);outline-offset:2px} | |
| #atlas .at-body{padding:16px 24px 110px;overflow-y:auto;overscroll-behavior:contain;flex:1} | |
| .at-tier{margin-bottom:22px} | |
| .at-tier-h{font-family:var(--font-m);font-size:11px;letter-spacing:.08em;text-transform:uppercase; | |
| display:flex;align-items:center;gap:9px;margin:0 0 12px;padding-bottom:8px;border-bottom:1px solid var(--border)} | |
| .at-tier-h .tn{font-weight:700} | |
| .at-tier-h .tc{font-family:var(--font-m);font-size:10px;padding:2px 9px;border-radius:99px; | |
| border:1px solid currentColor;margin-left:auto} | |
| .at-tier-h .td{font-family:var(--font-d);font-size:10px;color:var(--text-dim);letter-spacing:0;text-transform:none; | |
| flex-basis:100%;line-height:1.4;margin-top:2px;font-weight:400} | |
| .at-empty{font-size:11px;color:var(--text-dim);font-style:italic;padding:6px 0} | |
| /* shared formula-card detail/drill-down used in Atlas + organ panel */ | |
| .fdrill{margin-top:9px} | |
| .fdrill summary{font-family:var(--font-m);font-size:9.5px;letter-spacing:.04em;color:var(--nerve); | |
| cursor:pointer;list-style:none;display:inline-flex;align-items:center;gap:6px;padding:3px 0;user-select:none} | |
| .fdrill summary::-webkit-details-marker{display:none} | |
| .fdrill summary::before{content:"\25b8";display:inline-block;transition:transform .15s;color:var(--text-dim)} | |
| .fdrill[open] summary::before{transform:rotate(90deg)} | |
| .fdrill .fdd{margin-top:8px;border-left:2px solid var(--border-strong);padding-left:11px} | |
| .fdrill .fax2{font-family:var(--font-m);font-size:9.5px;color:var(--text-dim);line-height:1.55;word-break:break-word} | |
| .lean-link{display:inline-flex;align-items:center;gap:6px;margin-top:8px;font-family:var(--font-m);font-size:10px; | |
| color:var(--audit);text-decoration:none;border:1px solid rgba(158,240,192,.4);border-radius:8px;padding:5px 10px;transition:all .15s} | |
| .lean-link:hover{background:rgba(158,240,192,.1);border-color:var(--audit)} | |
| .formula.lit{border-color:var(--audit);box-shadow:0 0 0 1px rgba(158,240,192,.35),0 8px 28px rgba(0,0,0,.4)} | |
| .formula{cursor:default} | |
| /* --- Forecast overlay: honest maturity timeline --- */ | |
| #forecast{position:fixed;z-index:41;top:0;right:0;height:100%;width:min(520px,96vw); | |
| background:linear-gradient(180deg,var(--surface-2),rgba(8,11,22,.98));backdrop-filter:blur(26px); | |
| border-left:1px solid var(--border-strong);transform:translateX(102%); | |
| transition:transform .46s cubic-bezier(.16,1,.3,1);overflow-y:auto;overscroll-behavior:contain; | |
| box-shadow:-40px 0 100px rgba(0,0,0,.6)} | |
| #forecast.open{transform:translateX(0)} | |
| #forecast .fc-head{position:sticky;top:0;z-index:2;padding:22px 24px 14px; | |
| background:linear-gradient(180deg,rgba(13,17,32,.99),rgba(13,17,32,.86));border-bottom:1px solid var(--border)} | |
| #forecast .at-close{position:absolute;top:16px;right:16px;width:32px;height:32px;border-radius:50%; | |
| border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:17px;cursor:pointer;line-height:1;z-index:3} | |
| #forecast .fc-eyebrow{font-family:var(--font-m);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--text-dim)} | |
| #forecast .fc-title{font-size:23px;font-weight:700;line-height:1.05;margin-top:6px;letter-spacing:-.01em} | |
| #forecast .fc-note{font-size:11px;color:var(--text-muted);margin-top:6px;line-height:1.5} | |
| #forecast .fc-body{padding:18px 24px 110px} | |
| .fc-spark{background:rgba(6,9,18,.6);border:1px solid var(--border);border-radius:12px;padding:14px 14px 10px;margin-bottom:18px} | |
| .fc-spark .sp-h{font-family:var(--font-m);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim);margin-bottom:10px} | |
| .fc-spark svg{display:block;width:100%;height:auto;overflow:visible} | |
| .fc-legend{display:flex;gap:14px;flex-wrap:wrap;margin-top:10px;font-family:var(--font-m);font-size:9.5px;color:var(--text-muted)} | |
| .fc-legend span{display:inline-flex;align-items:center;gap:6px} | |
| .fc-legend i{width:9px;height:9px;border-radius:2px;display:inline-block} | |
| .fc-sec-h{font-family:var(--font-m);font-size:9.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--text-dim);margin:20px 0 11px;padding-bottom:8px;border-bottom:1px solid var(--border)} | |
| .fc-event{display:grid;grid-template-columns:auto 1fr;gap:12px;border:1px solid var(--border);border-radius:11px;padding:11px 13px;margin-bottom:9px;background:var(--surface)} | |
| .fc-event .ev-when{font-family:var(--font-m);font-size:10px;color:var(--skel);white-space:nowrap} | |
| .fc-event .ev-what{font-size:11.5px;line-height:1.5;color:var(--text-muted)} | |
| .fc-event .ev-what b{color:var(--text)} | |
| .fc-event.roadmap{border-style:dashed;border-color:rgba(120,150,210,.3)} | |
| .fc-event.roadmap .ev-when{color:var(--brain)} | |
| .fc-tag{display:inline-block;font-family:var(--font-m);font-size:8.5px;letter-spacing:.06em;padding:1px 6px;border-radius:6px; | |
| border:1px solid currentColor;margin-left:6px;vertical-align:middle} | |
| .fc-tag.done{color:var(--skel)} | |
| .fc-tag.proj{color:var(--brain)} | |
| .fc-disc{border:1px solid var(--warn);border-radius:11px;padding:12px 14px;margin-top:16px; | |
| background:rgba(255,126,182,.07);font-size:11px;line-height:1.55;color:var(--text)} | |
| .fc-disc b{color:var(--warn)} | |
| /* --- v5 Quantum-Bio Layer panel (additive; mirrors atlas/forecast styling) --- */ | |
| #qbio{position:fixed;z-index:42;top:0;right:0;height:100%;width:min(540px,96vw); | |
| background:linear-gradient(180deg,var(--surface-2),rgba(8,11,22,.98));backdrop-filter:blur(26px); | |
| border-left:1px solid var(--border-strong);transform:translateX(102%); | |
| transition:transform .46s cubic-bezier(.16,1,.3,1);overflow-y:auto;overscroll-behavior:contain; | |
| box-shadow:-40px 0 100px rgba(0,0,0,.6);display:flex;flex-direction:column} | |
| #qbio.open{transform:translateX(0)} | |
| #qbio .qb-head{position:sticky;top:0;z-index:2;padding:22px 24px 14px; | |
| background:linear-gradient(180deg,rgba(13,17,32,.99),rgba(13,17,32,.86));border-bottom:1px solid var(--border)} | |
| #qbio .at-close{position:absolute;top:16px;right:16px;width:32px;height:32px;border-radius:50%; | |
| border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:17px;cursor:pointer;line-height:1;z-index:3} | |
| #qbio .at-close:hover{border-color:var(--border-strong)} | |
| #qbio .qb-eyebrow{font-family:var(--font-m);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--nerve)} | |
| #qbio .qb-title{font-size:23px;font-weight:700;line-height:1.05;margin-top:6px;letter-spacing:-.01em} | |
| #qbio .qb-note{font-size:11px;color:var(--text-muted);margin-top:6px;line-height:1.5} | |
| #qbio .qb-body{padding:18px 24px 110px;overflow-y:auto;flex:1} | |
| .qb-card{background:rgba(6,9,18,.55);border:1px solid var(--border);border-radius:13px;padding:14px 15px;margin-bottom:15px} | |
| .qb-card .qc-h{font-family:var(--font-m);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--text-dim);margin-bottom:9px;display:flex;align-items:center;gap:8px;flex-wrap:wrap} | |
| .qb-card .qc-h b{color:var(--text);font-size:13px;letter-spacing:0;text-transform:none;font-weight:700} | |
| .qb-card .qc-row{display:flex;justify-content:space-between;gap:10px;font-size:11.5px;line-height:1.7;color:var(--text-muted)} | |
| .qb-card .qc-row b{color:var(--text);font-family:var(--font-m);font-size:11.5px} | |
| .qb-card .qc-math{font-family:var(--font-m);font-size:11px;color:var(--nerve);background:rgba(0,0,0,.22);border-radius:7px;padding:6px 9px;margin:6px 0;line-height:1.5;word-break:break-word} | |
| .qb-card .qc-plain{font-size:11px;line-height:1.55;color:var(--text-muted);margin-top:4px} | |
| .qb-card svg{display:block;width:100%;height:auto;overflow:visible;margin-top:4px} | |
| .qb-stat{font-family:var(--font-m);font-size:9px;letter-spacing:.05em;padding:2px 7px;border-radius:6px;border:1px solid currentColor;text-transform:uppercase} | |
| .qb-stat.verified{color:var(--audit)} | |
| .qb-stat.proposed{color:var(--brain)} | |
| .qb-stat.narrative{color:var(--warn)} | |
| .qb-sec-h{font-family:var(--font-m);font-size:9.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--text-dim);margin:22px 0 12px;padding-bottom:8px;border-bottom:1px solid var(--border)} | |
| .qb-compass{display:flex;align-items:center;gap:16px;flex-wrap:wrap} | |
| .qb-compass svg{width:128px;flex:0 0 auto;margin:0} | |
| .qb-leader{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:baseline;font-size:11.5px;line-height:1.5;padding:7px 0;border-bottom:1px solid rgba(120,150,210,.1)} | |
| .qb-leader .ql-name{color:var(--text);font-weight:600} | |
| .qb-leader .ql-work{color:var(--text-muted)} | |
| .qb-src{display:block;font-size:11px;color:var(--nerve);text-decoration:none;padding:5px 0;border-bottom:1px solid rgba(120,150,210,.1);word-break:break-word} | |
| .qb-src:hover{color:var(--text)} | |
| .qb-src .qs-tag{font-family:var(--font-m);font-size:8.5px;margin-left:6px} | |
| .qb-thm{border-left:2px solid var(--audit);padding-left:11px;margin-bottom:11px} | |
| .qb-thm .qt-id{font-family:var(--font-m);font-size:10px;color:var(--audit);font-weight:700} | |
| .qb-thm .qt-lean{font-family:var(--font-m);font-size:9.5px;color:var(--text-dim);line-height:1.5;margin-top:3px;word-break:break-word} | |
| .qb-thm .qt-plain{font-size:11px;color:var(--text-muted);line-height:1.5;margin-top:3px} | |
| .qb-disc{border:1px solid var(--warn);border-radius:11px;padding:12px 14px;margin-top:8px; | |
| background:rgba(255,126,182,.07);font-size:11px;line-height:1.55;color:var(--text)} | |
| .qb-disc b{color:var(--warn)} | |
| /* per-organ Λ-v5 mini block injected into the organ panel */ | |
| .qb-organ{border:1px solid var(--border);border-radius:12px;padding:12px 13px;margin:14px 0;background:rgba(90,209,255,.05)} | |
| .qb-organ .qo-h{font-family:var(--font-m);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--nerve);margin-bottom:8px;display:flex;align-items:center;gap:8px} | |
| .qb-organ .qo-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px 14px;font-size:11px;color:var(--text-muted)} | |
| .qb-organ .qo-grid b{color:var(--text);font-family:var(--font-m)} | |
| .qb-organ .qo-verdict{margin-top:9px;font-family:var(--font-m);font-size:11px;font-weight:700;padding:6px 10px;border-radius:8px;text-align:center} | |
| .qb-organ .qo-verdict.exec{color:var(--audit);background:rgba(158,240,192,.1);border:1px solid rgba(158,240,192,.4)} | |
| .qb-organ .qo-verdict.recharge{color:var(--warn);background:rgba(255,126,182,.08);border:1px solid rgba(255,126,182,.4)} | |
| .qb-organ svg{margin-top:8px} | |
| #btn-qbio.active{color:var(--nerve);border-color:rgba(90,209,255,.5);background:rgba(90,209,255,.09)} | |
| @media (min-width:681px) and (max-width:1024px){ #qbio{width:min(460px,74vw)} } | |
| @media (max-width:680px){ | |
| #qbio{top:auto;left:0;right:0;bottom:0;width:100%;height:auto;max-height:88vh; | |
| border-left:none;border-top:1px solid var(--border-strong);border-radius:18px 18px 0 0;transform:translateY(102%)} | |
| #qbio.open{transform:translateY(0)} | |
| #qbio .qb-body{padding-bottom:40px} | |
| #qbio .qb-head::before{content:"";display:block;width:40px;height:4px;border-radius:99px;background:var(--border-strong);margin:0 auto 10px} | |
| } | |
| /* --- floating 3D organ leader-line labels --- */ | |
| #labels{position:fixed;inset:0;z-index:15;pointer-events:none;overflow:hidden} | |
| .olabel{position:absolute;transform:translate(-50%,-50%);font-family:var(--font-m);font-size:10px; | |
| letter-spacing:.04em;color:var(--text);background:rgba(8,11,22,.78);border:1px solid var(--border); | |
| border-radius:8px;padding:3px 8px;white-space:nowrap;backdrop-filter:blur(8px);opacity:0;transition:opacity .3s; | |
| box-shadow:0 6px 18px rgba(0,0,0,.4)} | |
| .olabel.show{opacity:.94} | |
| .olabel .od{font-size:8.5px;color:var(--text-dim);margin-left:5px} | |
| #labels.off .olabel{opacity:0} | |
| /* --- guided tour narration bar --- */ | |
| #tour{position:fixed;z-index:43;left:50%;bottom:118px;transform:translateX(-50%) translateY(20px); | |
| width:min(540px,92vw);background:var(--surface-2);backdrop-filter:blur(var(--blur)); | |
| border:1px solid var(--border-strong);border-radius:14px;box-shadow:var(--shadow); | |
| padding:14px 16px;opacity:0;pointer-events:none;transition:opacity .3s,transform .3s} | |
| #tour.show{opacity:1;transform:translateX(-50%) translateY(0);pointer-events:auto} | |
| #tour .tr-top{display:flex;align-items:center;gap:9px;margin-bottom:7px} | |
| #tour .tr-step{font-family:var(--font-m);font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--audit)} | |
| #tour .tr-name{font-size:14px;font-weight:700} | |
| #tour .tr-prog{margin-left:auto;font-family:var(--font-m);font-size:9.5px;color:var(--text-dim)} | |
| #tour .tr-body{font-size:11.5px;line-height:1.5;color:var(--text-muted)} | |
| #tour .tr-ctrl{display:flex;gap:7px;margin-top:11px} | |
| #tour .tr-ctrl button{font-family:var(--font-m);font-size:10.5px;color:var(--text-muted);background:var(--surface); | |
| border:1px solid var(--border);border-radius:8px;padding:6px 12px;cursor:pointer;transition:all .15s} | |
| #tour .tr-ctrl button:hover{border-color:var(--border-strong);color:var(--text)} | |
| #tour .tr-ctrl button.primary{color:var(--audit);border-color:rgba(158,240,192,.5);background:rgba(158,240,192,.1)} | |
| #tour .tr-bar{height:2px;border-radius:99px;background:rgba(120,150,210,.18);margin-top:11px;overflow:hidden} | |
| #tour .tr-bar i{display:block;height:100%;background:var(--audit);width:0;transition:width .2s linear} | |
| #btn-atlas.active,#btn-forecast.active,#btn-tour.active,#btn-labels.active{color:var(--audit);border-color:rgba(158,240,192,.5);background:rgba(158,240,192,.08)} | |
| /* v5 responsive: tablet — sized drawers (not full bleed) */ | |
| @media (min-width:681px) and (max-width:1024px){ | |
| #atlas,#forecast{width:min(440px,72vw)} | |
| } | |
| /* v5 responsive: phone — Atlas + forecast become full bottom sheets, | |
| NEVER display:none. They slide up from the bottom like the dock. */ | |
| @media (max-width:680px){ | |
| #atlas,#forecast{top:auto;left:0;right:0;bottom:0;width:100%;height:auto;max-height:88vh; | |
| border-left:none;border-top:1px solid var(--border-strong);border-radius:18px 18px 0 0; | |
| transform:translateY(102%)} | |
| #atlas.open,#forecast.open{transform:translateY(0)} | |
| #atlas .at-body,#forecast .fc-body{padding-bottom:40px} | |
| #atlas .at-head::before,#forecast .fc-head::before{content:"";display:block;width:40px;height:4px; | |
| border-radius:99px;background:var(--border-strong);margin:0 auto 10px} | |
| #tour{bottom:auto;top:96px;width:calc(100vw - 24px)} | |
| #labels{display:none} | |
| } | |
| @media (prefers-reduced-motion: reduce){ | |
| #tour .tr-bar i{transition:none} | |
| .olabel{transition:none} | |
| } | |
| /* ===================== v8 LIVE AGENTIC LENS (additive) ===================== */ | |
| /* per-organ live-lens block appended into #p-body */ | |
| .v8-lens{margin:0 0 16px;padding:12px 13px;border:1px solid var(--border-strong);border-radius:12px; | |
| background:linear-gradient(180deg,rgba(63,224,197,.06),rgba(13,18,33,.0))} | |
| .v8-title{font-family:var(--font-m);font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--ok);margin-bottom:9px} | |
| .v8-head{display:flex;align-items:center;gap:7px;margin-bottom:9px;font-family:var(--font-m);font-size:10px} | |
| .v8-dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex:none} | |
| .v8-dot.live{background:var(--ok);box-shadow:0 0 8px var(--ok)} | |
| .v8-dot.off{background:var(--text-dim)} | |
| .v8-state{color:var(--ok);font-family:var(--font-m);font-size:10px;letter-spacing:.04em} | |
| .v8-state.off{color:var(--text-dim)} | |
| .v8-kv{display:grid;grid-template-columns:1fr 1fr;gap:5px 12px;margin-bottom:6px} | |
| .v8-row{display:flex;flex-direction:column;line-height:1.25} | |
| .v8-k{font-family:var(--font-m);font-size:8.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--text-dim)} | |
| .v8-v{font-size:12.5px;color:var(--text);font-variant-numeric:tabular-nums} | |
| .v8-v code,.v8-vitals code{color:var(--audit);font-family:var(--font-m);font-size:11px} | |
| .v8-conj{color:var(--warn);font-weight:700} | |
| .v8-note{font-size:11.5px;color:var(--text-muted);line-height:1.45;margin:7px 0 0} | |
| .v8-note.v8-warn{color:var(--warn)} | |
| .v8-load{font-family:var(--font-m);font-size:10.5px;color:var(--text-dim)} | |
| .v8-rows{display:flex;flex-direction:column;gap:4px} | |
| .v8-r{display:grid;grid-template-columns:1.4fr .6fr auto;gap:8px;align-items:center;font-size:12px} | |
| .v8-q{color:var(--text-muted)} | |
| .v8-val{color:var(--text);font-variant-numeric:tabular-nums;font-weight:600} | |
| .v8-tag{font-family:var(--font-m);font-size:8px;letter-spacing:.04em;padding:2px 6px;border-radius:6px;border:1px solid currentColor;white-space:nowrap} | |
| .v8-tag.VERIFIED{color:var(--ok)} | |
| .v8-tag.PROPOSED{color:var(--skel)} | |
| .v8-tag.NARRATIVE{color:var(--text-dim)} | |
| /* live vital-signs row inside the always-on HUD */ | |
| #v8-vitals{margin-top:9px;padding-top:9px;border-top:1px solid var(--border)} | |
| #v8-vitals .v8-vrow{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:10.5px;line-height:1.5} | |
| #v8-vitals .v8-vk{font-family:var(--font-m);font-size:8px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim)} | |
| #v8-vitals .v8-vv{color:var(--text);font-variant-numeric:tabular-nums} | |
| #v8-vitals #v8-vitals-state{display:flex;align-items:center;gap:6px;font-family:var(--font-m);color:var(--ok)} | |
| #v8-vitals #v8-vitals-locked{font-size:9.5px} | |
| /* WATCH A DECISION FLOW — HEART-anchored control */ | |
| #v8-flow-fab{position:fixed;left:24px;bottom:24px;z-index:23;display:inline-flex;align-items:center;gap:8px; | |
| font-family:var(--font-m);font-size:11px;letter-spacing:.06em;padding:10px 15px;border-radius:99px;cursor:pointer; | |
| color:var(--heart);border:1px solid rgba(255,93,143,.5);background:var(--surface);backdrop-filter:blur(var(--blur)); | |
| box-shadow:0 6px 24px rgba(0,0,0,.4)} | |
| #v8-flow-fab:hover{border-color:rgba(255,93,143,.85);background:rgba(255,93,143,.1)} | |
| #v8-flow-fab:focus-visible{outline:2px solid var(--heart);outline-offset:2px} | |
| #v8-flow-fab .hb{width:9px;height:9px;border-radius:50%;background:var(--heart);box-shadow:0 0 8px var(--heart)} | |
| #v8-flow{position:fixed;left:24px;bottom:74px;z-index:23;width:min(380px,86vw); | |
| border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface-2);backdrop-filter:blur(var(--blur)); | |
| box-shadow:0 12px 40px rgba(0,0,0,.5);padding:15px 16px;display:none} | |
| #v8-flow.open{display:block} | |
| #v8-flow .v8-flow-close{position:absolute;top:9px;right:11px;background:none;border:none;color:var(--text-muted);font-size:20px;line-height:1;cursor:pointer} | |
| #v8-flow .v8-flow-close:hover{color:var(--text)} | |
| #v8-flow .v8-flow-eyebrow{font-family:var(--font-m);font-size:9px;letter-spacing:.18em;text-transform:uppercase;color:var(--heart);margin-bottom:4px} | |
| #v8-flow .v8-flow-title{font-size:14px;font-weight:700;color:var(--text);margin-bottom:3px} | |
| #v8-flow .v8-flow-sub{font-size:11px;color:var(--text-muted);margin-bottom:11px;line-height:1.4} | |
| #v8-flow .v8-flow-bar{display:flex;gap:8px;margin-bottom:11px} | |
| #v8-flow-input{flex:1;background:rgba(0,0,0,.25);border:1px solid var(--border);border-radius:9px;color:var(--text); | |
| font-size:12px;padding:8px 10px;font-family:inherit} | |
| #v8-flow-input:focus{outline:none;border-color:var(--heart)} | |
| #v8-flow-run{flex:none;font-family:var(--font-m);font-size:10.5px;letter-spacing:.04em;padding:8px 13px;border-radius:9px;cursor:pointer; | |
| color:var(--heart);border:1px solid rgba(255,93,143,.5);background:rgba(255,93,143,.08)} | |
| #v8-flow-run:hover{background:rgba(255,93,143,.16)} | |
| #v8-flow-run:disabled{opacity:.5;cursor:wait} | |
| #v8-flow-run:focus-visible{outline:2px solid var(--heart);outline-offset:2px} | |
| .v8-flow-head{font-size:11px;color:var(--text-muted);margin-bottom:9px;display:flex;align-items:center;gap:6px;flex-wrap:wrap} | |
| .v8-flow-head i{color:var(--text)} | |
| ol.v8-flow-steps{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px} | |
| .v8-step{display:flex;gap:9px;opacity:.32;transition:opacity .35s ease} | |
| .v8-step.on{opacity:1} | |
| .v8-step-dot{width:10px;height:10px;border-radius:50%;flex:none;margin-top:3px;background:var(--c,var(--heart));box-shadow:0 0 0 0 var(--c,var(--heart))} | |
| .v8-step.on .v8-step-dot{box-shadow:0 0 10px 1px var(--c,var(--heart))} | |
| .v8-step-l{font-size:11px;line-height:1.4} | |
| .v8-step-d{color:var(--text-muted);font-size:11px} | |
| @media (prefers-reduced-motion: reduce){ | |
| .v8-step{transition:none} | |
| #v8-flow-fab .hb{box-shadow:none} | |
| } | |
| @media (max-width:680px){ | |
| #v8-flow-fab{left:16px;bottom:120px} | |
| #v8-flow{left:16px;right:16px;bottom:170px;width:auto} | |
| } | |
| /* ===================== /v8 ===================== */ | |
| /* ===================== v9 FLY-HIGH ===================== */ | |
| .v9-dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex:none;vertical-align:middle} | |
| .v9-dot.live{background:var(--ok);box-shadow:0 0 8px var(--ok);animation:v9pulse 2.4s ease-in-out infinite} | |
| .v9-dot.off{background:var(--text-dim)} | |
| @keyframes v9pulse{0%,100%{opacity:1}50%{opacity:.45}} | |
| /* master ●LIVE / ○offline indicator (lives in the live-proof-state HUD) */ | |
| #v9-master{margin-top:9px;padding-top:9px;border-top:1px solid var(--border);font-size:10.5px;line-height:1.55} | |
| #v9-master .v9-mrow{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-bottom:2px} | |
| #v9-master #v9-master-state{display:flex;align-items:center;gap:6px;font-family:var(--font-m);font-size:10px;color:var(--ok)} | |
| #v9-master-ago{font-family:var(--font-m);font-size:8.5px;color:var(--text-dim);margin-left:auto} | |
| #v9-master-rate,#v9-master-lambda{font-size:9.5px;color:var(--text-muted)} | |
| #v9-master-rate b,#v9-master-lambda b{color:var(--text)} | |
| #v9-master-proxy{font-size:8.5px;color:var(--text-dim);margin-top:3px;font-style:italic} | |
| .v9-beat-row{display:flex;align-items:center;gap:7px;margin-top:5px} | |
| #v9-beat-pause{font-family:var(--font-m);font-size:9px;letter-spacing:.04em;padding:3px 8px;border-radius:7px;cursor:pointer; | |
| color:var(--text-muted);border:1px solid var(--border);background:var(--surface)} | |
| #v9-beat-pause:hover{border-color:var(--border-strong);color:var(--text)} | |
| #v9-beat-pause:focus-visible{outline:2px solid var(--ok);outline-offset:2px} | |
| #v9-beat-state{} | |
| /* cinematic vital-tour launcher button (eyebrow row) */ | |
| #v9-tour-btn.active{color:var(--heart);border-color:rgba(255,93,143,.5);background:rgba(255,93,143,.1)} | |
| /* vital tour narration card */ | |
| #v9-tour{position:fixed;z-index:44;left:50%;bottom:118px;transform:translateX(-50%) translateY(20px); | |
| width:min(440px,90vw);border:1px solid rgba(255,93,143,.4);border-radius:var(--radius);background:var(--surface-2); | |
| backdrop-filter:blur(var(--blur));box-shadow:0 14px 44px rgba(0,0,0,.55);padding:14px 16px;opacity:0;pointer-events:none; | |
| transition:transform .46s cubic-bezier(.16,1,.3,1),opacity .3s ease} | |
| #v9-tour.show{opacity:1;transform:translateX(-50%) translateY(0);pointer-events:auto} | |
| #v9-tour .v9-tour-top{display:flex;align-items:center;gap:9px;margin-bottom:6px} | |
| #v9-tour .v9-tour-eyebrow{font-family:var(--font-m);font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--heart)} | |
| #v9-tour-prog{margin-left:auto;font-family:var(--font-m);font-size:9.5px;color:var(--text-dim)} | |
| #v9-tour-name{font-size:14px;font-weight:700;color:var(--text);margin-bottom:4px} | |
| #v9-tour-body{font-size:11.5px;line-height:1.5;color:var(--text-muted);min-height:32px} | |
| #v9-tour .v9-tour-ctrl{display:flex;gap:7px;margin-top:11px} | |
| #v9-tour .v9-tour-ctrl button{font-family:var(--font-m);font-size:10.5px;color:var(--text-muted);background:var(--surface); | |
| border:1px solid var(--border);border-radius:8px;padding:6px 11px;cursor:pointer} | |
| #v9-tour .v9-tour-ctrl button:hover{border-color:var(--border-strong);color:var(--text)} | |
| #v9-tour .v9-tour-bar{height:2px;border-radius:99px;background:rgba(120,150,210,.18);margin-top:11px;overflow:hidden} | |
| #v9-tour .v9-tour-bar i{display:block;height:100%;background:var(--heart);width:0;transition:width .2s linear} | |
| /* honest agent trace card + killinchu 2nd-body card (inside the decision-flow dialog) */ | |
| #v9-trace,#v9-killinchu{margin-top:12px;padding-top:11px;border-top:1px solid var(--border);display:none} | |
| #v9-trace.show,#v9-killinchu.show{display:block} | |
| .v9-trace-head,.v9-k-head{display:flex;align-items:center;gap:6px;font-family:var(--font-m);font-size:10px;color:var(--text-muted);margin-bottom:8px;flex-wrap:wrap} | |
| .v9-k-title{font-size:12.5px;font-weight:700;color:var(--text);margin-bottom:7px} | |
| .v9-trace-rows{display:flex;flex-direction:column;gap:6px} | |
| .v9-trace-r{display:flex;flex-direction:column;line-height:1.4} | |
| .v9-trace-k{font-family:var(--font-m);font-size:8.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--text-dim)} | |
| .v9-trace-v{font-size:11px;color:var(--text)} | |
| .v9-trace-v code{color:var(--audit);font-family:var(--font-m);font-size:10.5px} | |
| .v9-dim{color:var(--text-dim);font-size:10px} | |
| .v9-trace-note{font-size:10.5px;line-height:1.45;color:var(--text-muted);margin:9px 0 0;padding:8px 10px; | |
| background:rgba(255,209,102,.06);border:1px solid rgba(255,209,102,.18);border-radius:8px} | |
| @media (prefers-reduced-motion: reduce){ | |
| .v9-dot.live{animation:none} | |
| #v9-tour{transition:none} | |
| #v9-tour .v9-tour-bar i{transition:none} | |
| } | |
| @media (max-width:680px){ | |
| #v9-tour{left:12px;right:12px;width:auto;bottom:auto;top:150px} | |
| } | |
| /* ===================== /v9 ===================== */ | |
| /* ============================================================ | |
| UX2 REFACTOR (additive, layout/CSS-first) — 3D is the hero. | |
| Panels start COLLAPSED as slim toggles; default copy is minimal | |
| plain language; mobile uses ONE-AT-A-TIME bottom sheets via a | |
| tab-bar. No three.js / scene logic touched. Honest doctrine | |
| content preserved verbatim behind a Details expander. | |
| ============================================================ */ | |
| body.ux2{} | |
| /* --- Default-hide the heavy always-open HUD walls. They become | |
| opt-in (opened via toolbar / tab-bar). The 3D scene gets the | |
| whole screen on first load. --- */ | |
| body.ux2 #legend{display:none ;} | |
| body.ux2 #hint{display:none ;} | |
| /* Dissection dock + live-proof HUD start closed; surfaced on demand. */ | |
| body.ux2 #dissect{display:none;} | |
| body.ux2 #dissect.ux-show{display:block;} | |
| body.ux2 #vis-hud{display:none;} | |
| body.ux2 #vis-hud.ux-show{display:block;} | |
| /* Old floating FABs that overlapped body text: fold into toolbar/sheet. */ | |
| body.ux2 #v8-flow-fab{display:none ;} | |
| body.ux2 #v8-flow-fab.ux-show{display:inline-flex ;} | |
| body.ux2 #dissect-fab{display:none ;} | |
| /* --- Lighter title: plain one-line hero, smaller, no jargon sub by default --- */ | |
| body.ux2 #title{top:18px;left:20px;max-width:min(520px,70vw);} | |
| body.ux2 #title h1{font-size:19px;font-weight:600;line-height:1.14;} | |
| body.ux2 #title .eyebrow{margin-bottom:5px;} | |
| body.ux2 #title .sub{font-size:11.5px;color:var(--text-muted);margin-top:6px;max-width:46ch;} | |
| body.ux2 #title .bodies{margin-top:9px;} | |
| /* --- Compact TRUST CHIP replacing the doctrine wall on the right --- | |
| A small premium card: one plain headline + key honest facts as chips, | |
| and a Details expander holding the full (verbatim) doctrine rows. --- */ | |
| body.ux2 #honesty{top:18px;right:20px;max-width:min(300px,40vw);} | |
| body.ux2 #honesty .card{padding:13px 14px;} | |
| body.ux2 #honesty .hdr{display:none;} /* replaced by trust-chip header */ | |
| body.ux2 #ux-trust{pointer-events:auto;} | |
| .ux-trust-head{display:flex;align-items:center;gap:8px;margin-bottom:9px} | |
| .ux-trust-head .tdot{width:8px;height:8px;border-radius:50%;background:var(--audit);box-shadow:0 0 8px var(--audit);flex:0 0 auto} | |
| .ux-trust-head .tlabel{font-family:var(--font-m);font-size:9.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--text-dim)} | |
| .ux-trust-line{font-size:12.5px;line-height:1.5;color:var(--text);font-weight:500} | |
| .ux-trust-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px} | |
| .ux-tchip{font-family:var(--font-m);font-size:10px;letter-spacing:.02em;padding:4px 9px;border-radius:99px; | |
| border:1px solid var(--border);background:var(--surface);color:var(--text-muted);white-space:nowrap} | |
| .ux-tchip.ok{color:var(--audit);border-color:rgba(158,240,192,.4)} | |
| .ux-tchip.conj{color:var(--warn);border-color:rgba(255,126,182,.4)} | |
| .ux-tchip.lock{color:var(--skel);border-color:rgba(255,209,102,.4)} | |
| /* the verbatim honest doctrine, now behind a Details expander */ | |
| .ux-details{margin-top:11px} | |
| .ux-details > summary{list-style:none;cursor:pointer;user-select:none;display:inline-flex;align-items:center;gap:7px; | |
| font-family:var(--font-m);font-size:10px;letter-spacing:.04em;color:var(--nerve);padding:5px 0} | |
| .ux-details > summary::-webkit-details-marker{display:none} | |
| .ux-details > summary::before{content:"\25b8";color:var(--text-dim);transition:transform .15s} | |
| .ux-details[open] > summary::before{transform:rotate(90deg)} | |
| .ux-details .ux-details-in{margin-top:9px;padding-top:10px;border-top:1px solid var(--border); | |
| max-height:min(56vh,520px);overflow-y:auto;overscroll-behavior:contain} | |
| /* doctrine rows shrink a touch inside the expander */ | |
| body.ux2 #honesty .row{font-size:11px;margin-bottom:9px} | |
| /* --- TOOLBAR: tidy grouped primary actions + a More menu --- | |
| Hide the raw 16-button row; show a compact toolbar instead. --- */ | |
| body.ux2 #controls{display:none ;} | |
| #ux-toolbar{position:fixed;z-index:24;left:50%;bottom:22px;transform:translateX(-50%); | |
| display:flex;gap:9px;align-items:center;pointer-events:none} | |
| #ux-toolbar .uxb{pointer-events:auto;font-family:var(--font-m);font-size:12px;letter-spacing:.02em; | |
| color:var(--text);background:var(--surface-2);backdrop-filter:blur(var(--blur));border:1px solid var(--border-strong); | |
| border-radius:99px;padding:11px 17px;cursor:pointer;transition:all .16s;display:inline-flex;align-items:center;gap:7px; | |
| box-shadow:var(--shadow);min-height:44px;white-space:nowrap} | |
| #ux-toolbar .uxb:hover{background:rgba(40,52,90,.95);transform:translateY(-1px)} | |
| #ux-toolbar .uxb.primary{color:#06241f;background:linear-gradient(180deg,#7fe9d2,#3fe0c5);border-color:rgba(63,224,197,.6);font-weight:700} | |
| #ux-toolbar .uxb.primary:hover{background:linear-gradient(180deg,#92eedb,#52e6cd)} | |
| #ux-toolbar .uxb.on{color:var(--heart);border-color:rgba(255,93,143,.55);background:rgba(255,93,143,.1)} | |
| #ux-toolbar .uxb.qb.on{color:var(--nerve);border-color:rgba(90,209,255,.55);background:rgba(90,209,255,.1)} | |
| /* More menu (popover above the toolbar) */ | |
| #ux-more-wrap{position:relative;pointer-events:auto} | |
| #ux-more-menu{position:absolute;bottom:54px;right:0;min-width:210px;background:var(--surface-2); | |
| backdrop-filter:blur(var(--blur));border:1px solid var(--border-strong);border-radius:14px;box-shadow:var(--shadow); | |
| padding:7px;display:none;flex-direction:column;gap:2px} | |
| #ux-more-menu.open{display:flex} | |
| #ux-more-menu .uxm{font-family:var(--font-m);font-size:12px;color:var(--text-muted);background:none;border:none; | |
| text-align:left;padding:10px 12px;border-radius:9px;cursor:pointer;min-height:44px;display:flex;align-items:center;gap:9px} | |
| #ux-more-menu .uxm:hover{background:rgba(120,150,210,.12);color:var(--text)} | |
| #ux-more-menu .uxm.on{color:var(--heart)} | |
| #ux-more-menu .uxm-div{height:1px;background:var(--border);margin:4px 6px} | |
| /* --- MOBILE BOTTOM TAB-BAR: opens panels ONE at a time --- */ | |
| #ux-tabbar{display:none} | |
| #ux-scrim{display:none} | |
| /* ===== UX2 DESKTOP/TABLET: keep drawers as overlays (already fine) ===== */ | |
| body.ux2 #ux-toolbar{display:flex} | |
| /* ============ UX2 MOBILE (<=680px): canvas hero + tab-bar ============ */ | |
| @media (max-width:680px){ | |
| body.ux2 #ux-toolbar{display:none ;} | |
| /* but the More popover must still work on mobile: render the toolbar | |
| wrapper as a zero-size fixed anchor when its menu is open, so the | |
| fixed-positioned menu (detached) is not hidden by an ancestor. */ | |
| body.ux2.ux-more-open #ux-toolbar{display:block ;position:fixed;width:0;height:0;left:auto;right:0;bottom:0;overflow:visible;pointer-events:none;z-index:71} | |
| body.ux2.ux-more-open #ux-toolbar > *:not(#ux-more-wrap){display:none } | |
| body.ux2.ux-more-open #ux-more-wrap{pointer-events:auto} | |
| body.ux2 #ux-more-menu.open{pointer-events:auto;z-index:72;bottom:78px;right:10px;left:auto;min-width:200px;max-height:calc(100vh - 160px);overflow-y:auto} | |
| /* minimal floating top title only */ | |
| body.ux2 #title{top:14px;left:14px;right:14px;max-width:none;} | |
| body.ux2 #title h1{font-size:16px;line-height:1.18;} | |
| body.ux2 #title .sub{display:none;} | |
| body.ux2 #title .bodies{display:none;} | |
| /* hide ALL fixed HUD walls by default — surfaced one-at-a-time via sheets */ | |
| body.ux2 #honesty{display:none ;} | |
| body.ux2 #honesty.ux-sheet{display:block ;position:fixed;left:0;right:0;bottom:0;top:auto; | |
| max-width:none;z-index:62;} | |
| body.ux2 #vis-hud{left:0;right:0;bottom:0;top:auto;max-width:none;z-index:62;} | |
| body.ux2 #vis-hud.ux-show.ux-sheet{display:block ;} | |
| body.ux2 #dissect{z-index:62;} | |
| /* sheet shell shared look for honesty/vis-hud when surfaced as sheet */ | |
| body.ux2 #honesty.ux-sheet .card, | |
| body.ux2 #vis-hud.ux-sheet .card{border-radius:18px 18px 0 0;border:1px solid var(--border-strong); | |
| border-bottom:none;max-height:62vh;overflow-y:auto;-webkit-overflow-scrolling:touch; | |
| padding-bottom:78px;box-shadow:0 -20px 60px rgba(0,0,0,.6)} | |
| body.ux2 #honesty.ux-sheet .ux-details .ux-details-in{max-height:none} | |
| body.ux2 #honesty.ux-sheet .ux-details[open] .ux-details-in, | |
| body.ux2 #honesty.ux-sheet .ux-details > summary{} | |
| /* grab handle on sheets */ | |
| body.ux2 #honesty.ux-sheet .card::before, | |
| body.ux2 #vis-hud.ux-sheet .card::before{content:"";display:block;width:40px;height:4px;border-radius:99px; | |
| background:var(--border-strong);margin:2px auto 12px} | |
| /* drawers (atlas/forecast/qbio/panel/dissect) already become bottom sheets in earlier media block; bump z + leave room for tab-bar */ | |
| body.ux2 #panel,body.ux2 #atlas,body.ux2 #forecast,body.ux2 #qbio{z-index:63;} | |
| body.ux2 #panel{top:auto ;left:0 ;right:0 ;bottom:0 ; | |
| width:100% ;height:auto ;max-height:86vh ;border-left:none; | |
| border-top:1px solid var(--border-strong);border-radius:18px 18px 0 0;transform:translateY(102%);} | |
| body.ux2 #panel.open{transform:translateY(0);} | |
| body.ux2 #panel .pb{padding-bottom:90px;} | |
| /* scrim behind any open sheet */ | |
| body.ux2 #ux-scrim{display:block;position:fixed;inset:0;z-index:55;background:rgba(2,4,9,.45); | |
| opacity:0;pointer-events:none;transition:opacity .25s} | |
| body.ux2 #ux-scrim.show{opacity:1;pointer-events:auto} | |
| /* the always-visible bottom tab-bar */ | |
| body.ux2 #ux-tabbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:70; | |
| background:linear-gradient(180deg,rgba(10,14,26,.86),rgba(4,6,12,.97));backdrop-filter:blur(var(--blur)); | |
| border-top:1px solid var(--border-strong);padding:6px max(10px,env(safe-area-inset-left)) calc(6px + env(safe-area-inset-bottom)); | |
| justify-content:space-around;align-items:stretch;gap:4px} | |
| body.ux2 #ux-tabbar .uxt{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px; | |
| min-height:52px;background:none;border:none;color:var(--text-muted);font-family:var(--font-m);font-size:9.5px; | |
| letter-spacing:.04em;cursor:pointer;border-radius:11px;padding:5px 2px;transition:background .15s,color .15s} | |
| body.ux2 #ux-tabbar .uxt .ic{font-size:17px;line-height:1} | |
| body.ux2 #ux-tabbar .uxt[aria-pressed=true]{color:var(--text);background:rgba(120,150,210,.14)} | |
| body.ux2 #ux-tabbar .uxt.cta{color:var(--a11oy)} | |
| body.ux2 #ux-tabbar .uxt.cta[aria-pressed=true]{color:#06241f;background:var(--a11oy)} | |
| /* mobile: lift toolbar-less drawers above tab-bar; tab-bar always on top */ | |
| body.ux2 #tour,body.ux2 #v9-tour{z-index:64 ;} | |
| } | |
| /* small phones */ | |
| @media (max-width:380px){ | |
| body.ux2 #ux-tabbar .uxt{font-size:9px} | |
| body.ux2 #title h1{font-size:15px} | |
| } | |
| /* reduced clutter on tablet: toolbar stays, drawers overlay */ | |
| @media (min-width:681px) and (max-width:1024px){ | |
| body.ux2 #honesty{max-width:min(300px,42vw)} | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <div id="loader"><div class="pulse-ring"></div><div class="lt">Assembling the body…</div></div> | |
| <canvas id="scene"></canvas> | |
| <div id="vignette"></div> | |
| <!-- ============================================================ | |
| STATIC VERIFICATION BLOCK (no-JS fallback + curl-discoverable). | |
| Auto-generated from data.js (single source of truth). Mirrors exactly what | |
| the WebGL organ panels render. Honest two-tier labeling; Λ = Conjecture 1. | |
| ============================================================ --> | |
| <noscript> | |
| <style>#vf-static{display:block}</style> | |
| </noscript> | |
| <div id="vf-static" aria-label="SZL Agent Body v4 — proven-formula instillment (text fallback)"> | |
| <button id="vf-close" aria-label="close text view">× close</button> | |
| <header class="vf-head"> | |
| <h2>SZL Agent Body v4 — proven formulas instilled in the organs</h2> | |
| <p class="vf-honest"> | |
| <strong>Two honest tiers.</strong> | |
| <span class="vf-tier-locked">8 LOCKED-proven (kernel-verified)</span> {F1, F4, F7, F11, F12, F18, F19, F22} @ c7c0ba17 — | |
| locked kernel: 749 decl / 14 axioms / 163 sorries, sorry-free, Lean-core axioms only. <b>The locked count is EXACTLY 8 (was 5 until 2026-06-10; F4 Khipu DAG acyclicity, F7 Chaski FIFO ordering, F22 Khipu emit monotonicity upgraded to genuine proofs) and never inflated.</b> | |
| <span class="vf-tier-exp">EXPERIMENTAL · CI-green on main</span> @ 044eb098 — | |
| experimental scope: 1323 decl / 23 axioms (22 unique) / 307 sorries; waves 5–18 (≈119 instilled cards, incl. CUT-2, CF-13/17 and the Wave13–18 packs — CF-22 DPO-KL-simplex, CF-23 binary Pinsker, CF-24 Aczél, CF-25 Λ scale-invariance, CF-26 abacus, CF-27 monDEQ, CF-28 recurrent-depth, CUT-1 forward fragment) are EXPERIMENTAL · CI-green, additive, never folded into the locked 8. | |
| SLSA L1 honest · product images (a11oy, killinchu) L2 build-attested (container provenance, Sigstore keyless) · L3 roadmap. No fabricated metrics · no AGI. | |
| </p> | |
| <div class="vf-lambda vf-lambda-top"> | |
| <strong>Λ = Conjecture 1.</strong> Unconditional uniqueness under the original A1–A5 axioms is | |
| <strong>machine-checked FALSE</strong> (Round13.maxAgg_ne_Lambda). The Λ heart aggregates trust by geometric mean across the 13 | |
| conjunctive axes — never a weighted average. | |
| <br><br><strong style="color:#9ef0c0">NEW · CUT-2 (Wave12, axiom-free, kernel-clean):</strong> | |
| <code>Lutar.Round13.lambda_unique_of_separable</code> proves Λ uniqueness as a theorem <strong>CONDITIONAL</strong> on slice-multiplicativity (separability) under A1,A2,A3,A5 — <strong>with no new axiom</strong>. This gets Λ off bare conjecture (conditionally); the UNCONDITIONAL claim stays Conjecture 1. | |
| </div> | |
| </header> | |
| <section class="vf-organ" data-organ="GPD"> | |
| <h3>Governed Post-Determinism (GPD) — SZL’s own lens <span class="vf-sys">[participant-general model]</span></h3> | |
| <p class="vf-plain">The five organs ARE the participant-general governed-AI model. The unit of agreement shifts from identical output to <b>certified semantic admissibility</b>: the BRAIN/YACHAY reasons (divergent paths OK), the HEART/YUYAY 13-axis gate certifies admissibility (deny-by-default), the SKELETON/Khipu BFT quorum = Semantic Quorum Assurance (Wave23 conditional safety theorem; unconditional = Conjecture 2), the CIRCULATORY/YAWAR append-only receipt bus = Epistemic State Replication + Verifiable Semantic Rollback (receipts/replay live; full ESR = roadmap), and the NERVOUS/OTel spans carry provenance.</p> | |
| <p class="vf-ax">Honest scope: locked-proven stays EXACTLY 8; Λ = Conjecture 1; Khipu BFT safety = Conjecture 2 (Wave23 conditional only). Grounded entirely in SZL’s own DOI-stamped prior art — NO external paper is the source of GPD.</p> | |
| <p class="vf-ref">SZL Zenodo prior art: 10.5281/zenodo.19867281 · .19934129 · .20020846 · .20020845 · .20020841 · .20174600</p> | |
| </section> | |
| <section class="vf-organ" data-organ="YUYAY"> | |
| <h3>YUYAY — 13-axis CONJUNCTIVE truth gate <span class="vf-sys">[heart]</span></h3> | |
| <div class="vf-lambda"> | |
| <strong>Λ honesty label:</strong> Λ is Conjecture 1, not a theorem. Unconditional uniqueness under the original A1–A5 axioms is machine-checked FALSE (in-tree counterexample <code>Round13.maxAgg_ne_Lambda</code> satisfies A1–A5 yet is not Λ). Uniqueness holds only within strengthened classes (Setα / Setδ, conditional on declared bridge axioms). | |
| </div> | |
| <article class="vf-formula" data-fid="L3" data-maturity="EXPERIMENTAL"> | |
| <h4>L3 — Λ Strict Monotonicity <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">The geometric-mean trust aggregator is per-component strictly monotone: improving any input strictly raises the fused trust. NO uniqueness of Λ asserted — Conjecture 1 untouched.</p> | |
| <p class="vf-ax"><code>#print axioms: Lutar.Wave8.LambdaMono.gmean_strict_mono — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">PR #197 @ 7885fd9 · Wave8/LambdaMono.lean</p> | |
| </article> | |
| <article class="vf-formula" data-fid="L2" data-maturity="EXPERIMENTAL"> | |
| <h4>L2 — Deny-by-Default Uniqueness <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">The min-gate vmin is the UNIQUE monotone, diagonal, conservative gate — the weakest-link trust gate is the ONLY policy satisfying the safety axioms; no permissive aggregator can sneak in. Backs the YUYAY deny-by-default conjunction.</p> | |
| <p class="vf-ax"><code>#print axioms: Lutar.Wave8.MinGate.deny_by_default_unique — [propext]</code></p> | |
| <p class="vf-ref">PR #196 @ b1c840f · Wave8/MinGate.lean</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CP1" data-maturity="EXPERIMENTAL"> | |
| <h4>CP1 — Conformal Marginal Coverage <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">Split-conformal coverage satisfies a two-sided ⌈·⌉ bound — finite-sample, distribution-free marginal-coverage guarantee for the trust intervals on Λ.</p> | |
| <p class="vf-ax"><code>#print axioms: Lutar.Wave8.Conformal.conformal_marginal_coverage — [propext, Quot.sound]</code></p> | |
| <p class="vf-ref">PR #196 @ b1c840f · Wave8/Conformal.lean</p> | |
| </article> | |
| <article class="vf-formula" data-fid="W5-1" data-maturity="EXPERIMENTAL"> | |
| <h4>W5-1 — AM–GM No-Inflation <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">Geometric mean ≤ arithmetic mean: the Λ aggregator can never inflate trust above the naive average.</p> | |
| <p class="vf-ax"><code>#print axioms: wave-5 — 0 new axioms (Mathlib-dep CI-green)</code></p> | |
| <p class="vf-ref">PR #186 @ b71114cf</p> | |
| </article> | |
| </section> | |
| <section class="vf-organ" data-organ="YACHAY"> | |
| <h3>YACHAY — read-only reasoning cortex (5 regions + quantum mind) · proposer <span class="vf-sys">[brain]</span></h3> | |
| <article class="vf-formula" data-fid="Q1" data-maturity="EXPERIMENTAL"> | |
| <h4>Q1 — Density-Matrix Mixture PSD <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">A convex combination of PSD, unit-trace matrices is again a valid density matrix — convexity of the mixed-state set. Underpins probabilistic ensemble reasoning in the YACHAY quantum-mind region.</p> | |
| <p class="vf-ax"><code>#print axioms: Lutar.Wave8.DensityMixture.density_matrix_mixture — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">PR #197 @ 7885fd9 · Wave8/DensityMixture.lean</p> | |
| </article> | |
| <article class="vf-formula" data-fid="Q2" data-maturity="EXPERIMENTAL"> | |
| <h4>Q2 — Gershgorin Governance Non-Degeneracy (real) <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">A strictly diagonally-dominant real governance weight matrix is invertible, so weighted aggregation has a unique solution — no zero-eigenvalue collapse of the governance operator. (ℂ variant left honestly as ROADMAP — shipped real-valued only, sorryAx-free.)</p> | |
| <p class="vf-ax"><code>#print axioms: Lutar.Wave8.Gershgorin.governance_nonsingular_real — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">PR #197 @ 7885fd9 · Wave8/Gershgorin.lean</p> | |
| </article> | |
| <article class="vf-formula" data-fid="W7-5" data-maturity="EXPERIMENTAL"> | |
| <h4>W7-5 — PAC-Bayes Routing Envelope <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">A PAC-Bayes generalization envelope bounds true routing risk by empirical risk plus a KL complexity term — confidence on model routing.</p> | |
| <p class="vf-ax"><code>#print axioms: wave-7 — 0 new axioms</code></p> | |
| <p class="vf-ref">PR #190 @ d6a232ba</p> | |
| </article> | |
| </section> | |
| <section class="vf-organ" data-organ="YAWAR"> | |
| <h3>YAWAR — append-only SHA-256 receipt bus <span class="vf-sys">[blood]</span></h3> | |
| <article class="vf-formula" data-fid="M2" data-maturity="EXPERIMENTAL"> | |
| <h4>M2 — Hash-Chain Tamper-Evidence <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">For an injective hash step H, if any payload entry differs then the resulting head-hash differs — append-only hash chains are tamper-evident. The formal core behind receipt/audit-trail integrity.</p> | |
| <p class="vf-ax"><code>#print axioms: Lutar.Wave8.HashChain.hashchain_tamper_evident — [propext]</code></p> | |
| <p class="vf-ref">PR #196 @ b1c840f · Wave8/HashChain.lean</p> | |
| </article> | |
| <article class="vf-formula" data-fid="P1" data-maturity="EXPERIMENTAL"> | |
| <h4>P1 — Receipt-Completeness <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">Every hop in the governed loop leaves exactly one chained receipt — no silent drop or reorder.</p> | |
| <p class="vf-ax"><code>#print axioms: agentic-loop — axiom-free core</code></p> | |
| <p class="vf-ref">PR #188 @ 2ede47a2</p> | |
| </article> | |
| <article class="vf-formula" data-fid="F18" data-maturity="LOCKED"> | |
| <h4>F18 — Reed–Solomon RS(10,6) Recovery <span class="vf-chip">LOCKED · kernel-verified</span></h4> | |
| <p class="vf-plain">Erasure tolerance: data is recoverable IFF at least 6 of 10 shards survive — the resilience arithmetic for the receipt/payload encoding.</p> | |
| <p class="vf-ax"><code>#print axioms: f18_* — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">lutar-lean @ c7c0ba17</p> | |
| </article> | |
| <article class="vf-formula" data-fid="F1" data-maturity="LOCKED"> | |
| <h4>F1 — Replay-Hash Determinism <span class="vf-chip">LOCKED · kernel-verified</span></h4> | |
| <p class="vf-plain">Replaying the SAME recorded log from the same initial state yields a BIT-IDENTICAL trace — no drift. Underpins the Khipu replay-hash gate.</p> | |
| <p class="vf-ax"><code>#print axioms: f1_replay_fold_deterministic — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">lutar-lean PuriqFormulaLean.lean @ c7c0ba17</p> | |
| </article> | |
| </section> | |
| <section class="vf-organ" data-organ="RUWAY"> | |
| <h3>RUWAY — sole authorized write surface <span class="vf-sys">[blood]</span></h3> | |
| <article class="vf-formula" data-fid="P4" data-maturity="EXPERIMENTAL"> | |
| <h4>P4 — Replay-Determinism (loop) <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">Re-running a recorded run reproduces a byte-identical receipt chain.</p> | |
| <p class="vf-ax"><code>#print axioms: P4 — PROVEN, axiom-free</code></p> | |
| <p class="vf-ref">PR #188 @ 2ede47a2</p> | |
| </article> | |
| <article class="vf-formula" data-fid="F11" data-maturity="LOCKED"> | |
| <h4>F11 — Ayni Reciprocity Conservation <span class="vf-chip">LOCKED · kernel-verified</span></h4> | |
| <p class="vf-plain">Fold-replay of an append-only reciprocity log conserves the balance invariant (Axelrod–Hamilton tit-for-tat parity).</p> | |
| <p class="vf-ax"><code>#print axioms: f11_ayni_reciprocity_conservation — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">lutar-lean PuriqFormulaLean.lean @ c7c0ba17</p> | |
| </article> | |
| </section> | |
| <section class="vf-organ" data-organ="CHAPAQ"> | |
| <h3>CHAPAQ — egress immune inspector <span class="vf-sys">[blood]</span></h3> | |
| <article class="vf-formula" data-fid="P5" data-maturity="AXIOM_GATED"> | |
| <h4>P5 — Tamper-Evidence (loop) <span class="vf-chip">AXIOM-GATED (disclosed)</span></h4> | |
| <p class="vf-plain">Any single-receipt mutation makes re-verify reject. AXIOM-GATED on hashFn_collision_resistant (NIST FIPS 180-4, disclosed).</p> | |
| <p class="vf-ax"><code>#print axioms: P5 — AXIOM-GATED [hashFn_collision_resistant]</code></p> | |
| <p class="vf-ref">PR #188 @ 2ede47a2</p> | |
| </article> | |
| <article class="vf-formula" data-fid="M2" data-maturity="EXPERIMENTAL"> | |
| <h4>M2 — Hash-Chain Tamper-Evidence <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">For an injective hash step H, if any payload entry differs then the resulting head-hash differs — append-only hash chains are tamper-evident. The formal core behind receipt/audit-trail integrity.</p> | |
| <p class="vf-ax"><code>#print axioms: Lutar.Wave8.HashChain.hashchain_tamper_evident — [propext]</code></p> | |
| <p class="vf-ref">PR #196 @ b1c840f · Wave8/HashChain.lean</p> | |
| </article> | |
| </section> | |
| <section class="vf-organ" data-organ="HUKLLA"> | |
| <h3>HUKLLA — deadman tripwire (reflex arc) <span class="vf-sys">[nerve]</span></h3> | |
| <article class="vf-formula" data-fid="S2" data-maturity="EXPERIMENTAL"> | |
| <h4>S2 — Simplex Safety Invariant <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">Simplex/RTA run-time-assurance: a monitored switch to a verified recovery controller keeps the system in the safe set for ALL time. Backbone of fail-safe autonomy and the HUKLLA deadman reflex.</p> | |
| <p class="vf-ax"><code>#print axioms: Lutar.Wave8.Simplex.simplex_safety_invariant — [propext]</code></p> | |
| <p class="vf-ref">PR #196 @ b1c840f · Wave8/Simplex.lean</p> | |
| </article> | |
| <article class="vf-formula" data-fid="B1" data-maturity="EXPERIMENTAL"> | |
| <h4>B1 — Byzantine Impossibility (n=3, f=1) <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">The classic 3-node / 1-fault Byzantine impossibility — the formal n ≥ 3f+1 lower bound. Justifies consensus/quorum sizing in the shared mesh and rejects under-provisioned fault tolerance.</p> | |
| <p class="vf-ax"><code>#print axioms: Lutar.Wave8.Byzantine.byzantine_impossibility_3_1 — does not depend on any axioms</code></p> | |
| <p class="vf-ref">PR #196 @ b1c840f · Wave8/Byzantine.lean</p> | |
| </article> | |
| </section> | |
| <section class="vf-organ" data-organ="VSP / OTel"> | |
| <h3>VSP / OTel — span lineage (efferent · afferent · proprioceptive) <span class="vf-sys">[nerve]</span></h3> | |
| <article class="vf-formula" data-fid="P4" data-maturity="EXPERIMENTAL"> | |
| <h4>P4 — Replay-Determinism (loop) <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">Re-running a recorded run reproduces a byte-identical receipt chain.</p> | |
| <p class="vf-ax"><code>#print axioms: P4 — PROVEN, axiom-free</code></p> | |
| <p class="vf-ref">PR #188 @ 2ede47a2</p> | |
| </article> | |
| <article class="vf-formula" data-fid="F1" data-maturity="LOCKED"> | |
| <h4>F1 — Replay-Hash Determinism <span class="vf-chip">LOCKED · kernel-verified</span></h4> | |
| <p class="vf-plain">Replaying the SAME recorded log from the same initial state yields a BIT-IDENTICAL trace — no drift. Underpins the Khipu replay-hash gate.</p> | |
| <p class="vf-ax"><code>#print axioms: f1_replay_fold_deterministic — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">lutar-lean PuriqFormulaLean.lean @ c7c0ba17</p> | |
| </article> | |
| </section> | |
| <section class="vf-organ" data-organ="HATUN"> | |
| <h3>HATUN — sovereign orchestrator + seal (the crown) <span class="vf-sys">[skeleton]</span></h3> | |
| <article class="vf-formula" data-fid="Q2" data-maturity="EXPERIMENTAL"> | |
| <h4>Q2 — Gershgorin Governance Non-Degeneracy (real) <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">A strictly diagonally-dominant real governance weight matrix is invertible, so weighted aggregation has a unique solution — no zero-eigenvalue collapse of the governance operator. (ℂ variant left honestly as ROADMAP — shipped real-valued only, sorryAx-free.)</p> | |
| <p class="vf-ax"><code>#print axioms: Lutar.Wave8.Gershgorin.governance_nonsingular_real — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">PR #197 @ 7885fd9 · Wave8/Gershgorin.lean</p> | |
| </article> | |
| <article class="vf-formula" data-fid="P1" data-maturity="EXPERIMENTAL"> | |
| <h4>P1 — Receipt-Completeness <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">Every hop in the governed loop leaves exactly one chained receipt — no silent drop or reorder.</p> | |
| <p class="vf-ax"><code>#print axioms: agentic-loop — axiom-free core</code></p> | |
| <p class="vf-ref">PR #188 @ 2ede47a2</p> | |
| </article> | |
| <article class="vf-formula" data-fid="Ph1" data-maturity="EXPERIMENTAL"> | |
| <h4>Ph1 — Axiom-Disclosure Soundness <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">The axiom-disclosure gate is sound; locked_count_eight proves there are EXACTLY 8 locked entries with kernel-only axioms (= by decide, no axioms). Mechanically enforces "no hidden axioms".</p> | |
| <p class="vf-ax"><code>#print axioms: Lutar.Wave8.AxiomDisclosure.disclosure_sound — [propext, Quot.sound] · locked_count_eight — no axioms</code></p> | |
| <p class="vf-ref">PR #196 @ b1c840f · Wave8/AxiomDisclosure.lean</p> | |
| </article> | |
| </section> | |
| <section class="vf-organ" data-organ="R0513 / OVERWATCH"> | |
| <h3>R0513 / OVERWATCH — read-only 5-invariant audit <span class="vf-sys">[audit]</span></h3> | |
| <article class="vf-formula" data-fid="M2" data-maturity="EXPERIMENTAL"> | |
| <h4>M2 — Hash-Chain Tamper-Evidence <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">For an injective hash step H, if any payload entry differs then the resulting head-hash differs — append-only hash chains are tamper-evident. The formal core behind receipt/audit-trail integrity.</p> | |
| <p class="vf-ax"><code>#print axioms: Lutar.Wave8.HashChain.hashchain_tamper_evident — [propext]</code></p> | |
| <p class="vf-ref">PR #196 @ b1c840f · Wave8/HashChain.lean</p> | |
| </article> | |
| <article class="vf-formula" data-fid="B1" data-maturity="EXPERIMENTAL"> | |
| <h4>B1 — Byzantine Impossibility (n=3, f=1) <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">The classic 3-node / 1-fault Byzantine impossibility — the formal n ≥ 3f+1 lower bound. Justifies consensus/quorum sizing in the shared mesh and rejects under-provisioned fault tolerance.</p> | |
| <p class="vf-ax"><code>#print axioms: Lutar.Wave8.Byzantine.byzantine_impossibility_3_1 — does not depend on any axioms</code></p> | |
| <p class="vf-ref">PR #196 @ b1c840f · Wave8/Byzantine.lean</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CP1" data-maturity="EXPERIMENTAL"> | |
| <h4>CP1 — Conformal Marginal Coverage <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">Split-conformal coverage satisfies a two-sided ⌈·⌉ bound — finite-sample, distribution-free marginal-coverage guarantee for the trust intervals on Λ.</p> | |
| <p class="vf-ax"><code>#print axioms: Lutar.Wave8.Conformal.conformal_marginal_coverage — [propext, Quot.sound]</code></p> | |
| <p class="vf-ref">PR #196 @ b1c840f · Wave8/Conformal.lean</p> | |
| </article> | |
| </section> | |
| <section class="vf-organ" data-organ="TUKUY"> | |
| <h3>TUKUY — egress actuator <span class="vf-sys">[skeleton]</span></h3> | |
| <article class="vf-formula" data-fid="S2" data-maturity="EXPERIMENTAL"> | |
| <h4>S2 — Simplex Safety Invariant <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">Simplex/RTA run-time-assurance: a monitored switch to a verified recovery controller keeps the system in the safe set for ALL time. Backbone of fail-safe autonomy and the HUKLLA deadman reflex.</p> | |
| <p class="vf-ax"><code>#print axioms: Lutar.Wave8.Simplex.simplex_safety_invariant — [propext]</code></p> | |
| <p class="vf-ref">PR #196 @ b1c840f · Wave8/Simplex.lean</p> | |
| </article> | |
| <article class="vf-formula" data-fid="G1" data-maturity="EXPERIMENTAL"> | |
| <h4>G1 — CPA Minimality <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">The closest-point-of-approach time is the UNIQUE minimizer of squared separation. Formal anchor for killinchu collision / conflict-risk timing.</p> | |
| <p class="vf-ax"><code>#print axioms: Lutar.Wave8.CPA.cpa_unique — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">PR #197 @ 7885fd9 · Wave8/CPA.lean</p> | |
| </article> | |
| </section> | |
| <section class="vf-organ" data-organ="MUSQUY"> | |
| <h3>MUSQUY — K-candidate simulation (parietal) <span class="vf-sys">[brain]</span></h3> | |
| <article class="vf-formula" data-fid="Q1" data-maturity="EXPERIMENTAL"> | |
| <h4>Q1 — Density-Matrix Mixture PSD <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">A convex combination of PSD, unit-trace matrices is again a valid density matrix — convexity of the mixed-state set. Underpins probabilistic ensemble reasoning in the YACHAY quantum-mind region.</p> | |
| <p class="vf-ax"><code>#print axioms: Lutar.Wave8.DensityMixture.density_matrix_mixture — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">PR #197 @ 7885fd9 · Wave8/DensityMixture.lean</p> | |
| </article> | |
| <article class="vf-formula" data-fid="W7-5" data-maturity="EXPERIMENTAL"> | |
| <h4>W7-5 — PAC-Bayes Routing Envelope <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">A PAC-Bayes generalization envelope bounds true routing risk by empirical risk plus a KL complexity term — confidence on model routing.</p> | |
| <p class="vf-ax"><code>#print axioms: wave-7 — 0 new axioms</code></p> | |
| <p class="vf-ref">PR #190 @ d6a232ba</p> | |
| </article> | |
| </section> | |
| <!-- ===================== WAVE 9/10 candidate-theorem pack (EXPERIMENTAL · CI-green) ===================== --> | |
| <!-- Honest tier: these are wave 9/10 candidate theorems, CI-green on main (experimental scope 1304 decl / 22 axioms). --> | |
| <!-- They are ADDITIVE and NEVER folded into the locked 8 {F1,F4,F7,F11,F12,F18,F19,F22}. Λ = Conjecture 1 stays a conjecture. --> | |
| <section class="vf-organ" data-organ="WAVE 9/10"> | |
| <h3>WAVE 9/10 — candidate-theorem pack <span class="vf-sys">[both bodies · edge + substrate]</span></h3> | |
| <article class="vf-formula" data-fid="RA-1" data-maturity="EXPERIMENTAL"> | |
| <h4>RA-1 — STL Robustness (two-sided Donzé–Maler) <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">A runtime monitor that computes a signed robustness margin ρ: <code>Sat ⇒ ρ≥0</code> and <code>ρ>0 ⇒ Sat</code> (NOT the false iff at ρ=0). Backs Sensor-Fusion / STL Monitor.</p> | |
| <p class="vf-ax"><code>#print axioms stl_robustness_sound — kernel-only [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Wave10/STLRobustness.lean · PR #200</p> | |
| </article> | |
| <article class="vf-formula" data-fid="OE-2" data-maturity="EXPERIMENTAL"> | |
| <h4>OE-2 — Covariance-Intersection PSD <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">Fuse two sensors without cross-covariance; the fused information matrix is a non-negative convex combination of PSD matrices ⇒ valid (PSD), conservative uncertainty. Powers Sensor-Fusion.</p> | |
| <p class="vf-ax"><code>#print axioms covariance_intersection_psd — kernel-only [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Wave9/CovarianceIntersection.lean · PR #199</p> | |
| </article> | |
| <article class="vf-formula" data-fid="MA1" data-maturity="EXPERIMENTAL"> | |
| <h4>MA1 — Gershgorin Spectral Non-Degeneracy <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">Pre-flight gate: a strictly diagonally-dominant command/trust-weight matrix has 0 in no Gershgorin disc ⇒ nonsingular (det ≠ 0). Field-general (incl. ℂ) — distinct from the Wave8 ℝ determinant card.</p> | |
| <p class="vf-ax"><code>#print axioms gershgorin_nonsingular — kernel-only [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Wave9/Gershgorin.lean · PR #199</p> | |
| </article> | |
| <article class="vf-formula" data-fid="MR-1" data-maturity="EXPERIMENTAL"> | |
| <h4>MR-1 — Reachability-Redundancy + Menger <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">k edge-disjoint routes survive any k-1 link failures; by Menger cut/path duality the min-cut equals the number of edge-disjoint paths. Pairs with Tactical Routing. (cut_disconnects · path_refutes_cut)</p> | |
| <p class="vf-ax"><code>#print axioms avoiding_reach_le_full · cut_disconnects · path_refutes_cut — kernel-only</code></p> | |
| <p class="vf-ref">Wave10/ReachabilityRedundancy.lean + Wave9/Menger.lean · PR #200</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CP-1/AU-1" data-maturity="EXPERIMENTAL"> | |
| <h4>CP-1 / AU-1 — Merkle Transparency + Replay-Determinism <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">Re-verifiable Merkle inclusion proofs; deterministic replay of an ordered log yields the same final state and <b>localizes</b> a tampered entry (first divergence). Backs the signed-receipt / audit surface.</p> | |
| <p class="vf-ax"><code>#print axioms replay_deterministic · tamper_localized — kernel-only [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Wave10/ReplayDeterminism.lean + Wave9/Merkle.lean · PR #200</p> | |
| </article> | |
| <article class="vf-formula" data-fid="C1/CN-1" data-maturity="EXPERIMENTAL"> | |
| <h4>C1 / CN-1 — Basilic BDB + Quorum-Intersection <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">Safety holds iff <code>n > 3t + d + 2q</code> (sharper than n>3t); any two intersecting majority quorums can never decide differently ⇒ no split-brain (unique decision). Sizes the 3-of-4 C2 consensus mesh.</p> | |
| <p class="vf-ax"><code>#print axioms quorum_unique_decision · majority_quorums_intersect — kernel-only</code></p> | |
| <p class="vf-ref">Wave10/QuorumIntersection.lean + Wave9/BasilicBDB.lean · PR #200</p> | |
| </article> | |
| </section> | |
| <!-- ===================== WAVE 11–18 + CUT-2 + CUT-1 fwd frontier pack (on main @ 044eb098) ===================== --> | |
| <!-- CUT-2 + CUT-1 forward fragment are CONDITIONAL, axiom-free THEOREMS (get Λ off bare conjecture, conditionally). The rest are EXPERIMENTAL · CI-green. --> | |
| <!-- ALL are ADDITIVE and NEVER folded into the locked 8 {F1,F4,F7,F11,F12,F18,F19,F22}. Unconditional Λ = Conjecture 1 stays a conjecture; CUT-1 gap dyadic_image_dense is an open roadmap sorry. --> | |
| <section class="vf-organ" data-organ="WAVE 11–18 + CUT-1/2"> | |
| <h3>WAVE 11–18 + CUT-1/2 — newly-proven frontier pack <span class="vf-sys">[main @ 044eb098 · PRs #201–#208]</span></h3> | |
| <article class="vf-formula vf-cond" data-fid="CUT-2" data-maturity="CONDITIONAL"> | |
| <h4>CUT-2 — Λ Conditional Uniqueness (slice-multiplicativity) <span class="vf-chip">CONDITIONAL · axiom-free</span></h4> | |
| <p class="vf-plain">Λ uniqueness PROVEN as a theorem <strong>CONDITIONAL</strong> on slice-multiplicativity (separability) under A1,A2,A3,A5 — kernel-clean, <strong>no new axiom</strong>. Gets Λ off bare conjecture (conditionally). UNCONDITIONAL Λ uniqueness stays Conjecture 1 (machine-checked FALSE). NOT folded into the locked 8.</p> | |
| <p class="vf-ax"><code>#print axioms Lutar.Round13.lambda_unique_of_separable — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Round13/LambdaSeparable.lean · PR #202 (Wave12)</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CF-13" data-maturity="EXPERIMENTAL"> | |
| <h4>CF-13 — DEQ Input-Lipschitz Well-Posedness <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">A deep-equilibrium / fixed-point layer has a UNIQUE equilibrium, Lipschitz in its input with constant Lx/(1−K): <code>dist(z*(x),z*(y)) ≤ Lx/(1−K)·dist(x,y)</code>. Equilibrium reasoning is provably well-posed — a stability margin for code/forecast routing.</p> | |
| <p class="vf-ax"><code>#print axioms equilibrium_dist_le / equilibrium_lipschitz — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">round5/OuroLoopInputLipschitz.lean · PR #202 (Wave12)</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CF-17" data-maturity="EXPERIMENTAL"> | |
| <h4>CF-17 — Floating-Point Summation Error Bound <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">Recursive fp summation under the standard rounding model has a forward error bound <code>|recSum − Σxi| ≤ ((1+u)^(n−1)−1)·Σ|xi|</code> (Higham §2.2). A numeric-stability badge for any aggregation/scoring sum.</p> | |
| <p class="vf-ax"><code>#print axioms Lutar.Khipu.NumericStability.recSum_error_le — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Khipu/NumericStability.lean · PR #202 (Wave12)</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CF-RR" data-maturity="EXPERIMENTAL"> | |
| <h4>CF-RR — Replay-Root Completeness <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">If a valid replay-root exists among candidates, the search provably finds one — PRNG replay-root lookup is complete. Closed a baseline sorry.</p> | |
| <p class="vf-ax"><code>#print axioms Lutar.PRNG.findReplayRoot_complete — [propext, Quot.sound]</code></p> | |
| <p class="vf-ref">PRNG/K10v2_ReplayRoot.lean · PR #203 (Wave13)</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CF-QV" data-maturity="EXPERIMENTAL"> | |
| <h4>CF-QV — Quorum Single-Valued Vote (non-Byzantine shadow) <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">Under n ≥ 3f+1, two large quorums of single-valued voters must agree. HONEST SCOPE: explicitly the NON-Byzantine shadow — it is NOT Khipu Conjecture 2, which stays OPEN (a faulty organ can still equivocate).</p> | |
| <p class="vf-ax"><code>#print axioms quorum_agreement_single_valued_vote — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Wave13/Sweep.lean · PR #203 (Wave13)</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CF-HM" data-maturity="EXPERIMENTAL"> | |
| <h4>CF-HM — HLP Harmonic-Mean Bottleneck <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">If the harmonic mean of positive resources falls below a threshold, some single resource must too — a clean Hardy–Littlewood–Pólya bottleneck detector for the mesh.</p> | |
| <p class="vf-ax"><code>#print axioms Lutar.Wave13.Sweep.hm_bottleneck_clean — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Wave13/Sweep.lean · PR #203 (Wave13)</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CF-18" data-maturity="EXPERIMENTAL"> | |
| <h4>CF-18 — Mādhava / Leibniz Alternating-Series Remainder <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">For an alternating series with antitone terms, the truncation error is bounded by the first omitted term: <code>|Σ_{i<N}(−1)^i a_i − L| ≤ a_N</code>. A certified π/series error budget.</p> | |
| <p class="vf-ax"><code>#print axioms leibniz_remainder_bound / madhava_alt_series_bound_clean — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Wave14/LeibnizRemainder.lean · PR #204 (Wave14)</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CF-19" data-maturity="EXPERIMENTAL"> | |
| <h4>CF-19 — Reed–Solomon MDS Distance Lower Bound <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">Two distinct degree-<k RS codewords differ in ≥ n−k+1 of n points — the achievability (lower) half of the Singleton/MDS bound. HONEST: the upper bound / full MDS equality stays a sorry.</p> | |
| <p class="vf-ax"><code>#print axioms rs_distance_lower_bound / agreement_card_lt_of_degree_lt — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Wave14/ReedSolomonDistance.lean · PR #204 (Wave14)</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CF-20" data-maturity="EXPERIMENTAL"> | |
| <h4>CF-20 — VCG Efficiency + Truthfulness Core <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">An efficient (social-welfare-maximising) outcome always exists and the VCG truthfulness core holds — honest reporting is the dominant-strategy ingredient. Incentive-compatibility anchor.</p> | |
| <p class="vf-ax"><code>#print axioms exists_efficient_outcome / efficientOutcome_maximises / vcg_truthfulness_core — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Wave14/VCGEfficiency.lean · PR #204 (Wave14)</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CF-21" data-maturity="EXPERIMENTAL"> | |
| <h4>CF-21 — Cover–Thomas Log-Sum + Gibbs Inequality <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">The log-sum and Gibbs inequalities — the correctly-stated information-theory DPI core (Cover–Thomas 2.7.1 / 2.6.3). HONEST: does NOT repair the in-tree DPO klDivergence/pinsker, which stay FALSE-as-stated (no simplex hypothesis).</p> | |
| <p class="vf-ax"><code>#print axioms log_sum_inequality / gibbs_inequality — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Wave14/LogSumInequality.lean · PR #204 (Wave14)</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CF-22" data-maturity="EXPERIMENTAL"> | |
| <h4>CF-22 — DPO KL-Divergence Nonneg on the Simplex (conditional repair) <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">CONDITIONALLY repairs the FALSE-as-stated in-tree DPO axiom: <code>KL(p‖q) ≥ 0</code> once p,q ∈ the probability simplex (Gibbs). Live demo KL=0.0880 ≥ 0 (χ²=0.1917). HONEST: the UNCONDITIONAL DPO axiom klDivergence_nonneg stays FALSE-as-stated. Independent confirmation: χPO (arXiv:2407.13399), f-DPO (arXiv:2309.16240).</p> | |
| <p class="vf-ax"><code>#print axioms klDivergence_nonneg_simplex / dpo_klDivergence_nonneg_on_simplex — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Wave15/DPOKLSimplex.lean · PR #205 (Wave15)</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CF-23" data-maturity="EXPERIMENTAL"> | |
| <h4>CF-23 — Full Binary Pinsker Inequality <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">The full binary Pinsker inequality <code>2·(p−q)² ≤ KL(Bern p ‖ Bern q)</code> — the long-sought headline (previously only a named Lean axiom). Live demo KL=0.0823 ≥ 2·TV²=0.0800. A confidence-margin bound for any binary gate. HONEST: experimental CI-green, NOT folded into the locked 8.</p> | |
| <p class="vf-ax"><code>#print axioms binary_pinsker / binary_inv_sum_ge_four — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Wave17/BinaryPinsker.lean · PR #207 (Wave17)</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CF-24" data-maturity="EXPERIMENTAL"> | |
| <h4>CF-24 — geoBin Full Aczél Quasi-Arithmetic Axioms <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">The geometric-binary mean satisfies the FULL Aczél QAM axiom set (idempotency, commutativity, homogeneity, strict monotonicity) — real progress on the CUT-1 route. Regularity-free QAM characterization (Burai–Kiss–Szokol, arXiv:2107.07391) shows bisymmetry gives continuity for free.</p> | |
| <p class="vf-ax"><code>#print axioms geoBin_idem / geoBin_comm / geoBin_homog / geoBin_mono — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Wave16/GeoBinAczel.lean · PR #206 (Wave16)</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CF-25" data-maturity="EXPERIMENTAL"> | |
| <h4>CF-25 — Λ Scale-Invariance (affine reparam of generator) <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">Λ is invariant under affine reparametrization of its quasi-arithmetic generator and under axis normalization — rescaling the trust axes leaves the Λ verdict fixed. Convex-duality backing (Nielsen, arXiv:2301.10980).</p> | |
| <p class="vf-ax"><code>#print axioms lambda_scale_axes / lambda_normalization_invariant — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Wave16/LambdaScaleInvariance.lean · PR #206 (Wave16)</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CF-26" data-maturity="EXPERIMENTAL"> | |
| <h4>CF-26 — Abacus Place-Value Soundness <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">Place-value (abacus) encode/decode round-trips exactly <code>Σ digit_i·base^i = value</code> — a positional-number-system soundness lemma underpinning deterministic integer serialization in receipts.</p> | |
| <p class="vf-ax"><code>#print axioms Lutar.Wave16.abacus_place_value — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Wave16/Abacus.lean · PR #206 (Wave16)</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CF-27" data-maturity="EXPERIMENTAL"> | |
| <h4>CF-27 — monDEQ Strong-Monotonicity ⇒ Unique Equilibrium <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">A strongly-monotone deep-equilibrium operator has a UNIQUE equilibrium <code>∃! z*, F(z*)=z*</code> — the fixed-point reasoning layer is provably well-posed. Backs fusion fixed-point and tool-call uniqueness (Winston–Kolter monDEQ).</p> | |
| <p class="vf-ax"><code>#print axioms Lutar.Wave17.monDEQ_unique_equilibrium — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Wave17/MonDEQUnique.lean · PR #207 (Wave17)</p> | |
| </article> | |
| <article class="vf-formula" data-fid="CF-28" data-maturity="EXPERIMENTAL"> | |
| <h4>CF-28 — Recurrent-Depth Kʳ-Lipschitz Contraction <span class="vf-chip">EXPERIMENTAL · CI-green</span></h4> | |
| <p class="vf-plain">An r-fold recurrent-depth block from a K-Lipschitz step is Kʳ-Lipschitz overall — depth amplifies (K<1 ⇒ contraction; K>1 ⇒ honest blow-up bound). A stability budget for recurrent-depth estimators (mcleish7/retrofitting-recurrence, Apache-2.0).</p> | |
| <p class="vf-ax"><code>#print axioms Lutar.Wave17.recurrent_depth_lipschitz — [propext, Classical.choice, Quot.sound]</code></p> | |
| <p class="vf-ref">Wave17/RecurrentDepthLipschitz.lean · PR #207 (Wave17)</p> | |
| </article> | |
| <article class="vf-formula vf-cond" data-fid="CUT-1" data-maturity="CONDITIONAL"> | |
| <h4>CUT-1 — Forward Fragment (generator unique up to affine) <span class="vf-chip">CONDITIONAL · axiom-free</span></h4> | |
| <p class="vf-plain">The forward fragment of the CUT-1 unconditional-uniqueness program: generator unique up to affine reparam, exponential midpoint = geometric mean √(xy), and Λ follows CONDITIONALLY (19 axiom-clean theorems). <strong>HONEST OPEN GAP:</strong> <code>dyadic_image_dense</code> (the dense-domain density step, n-adic recursive construction per Kiss–Shulman 2026) is NOT proven — multi-week roadmap. Λ unconditional uniqueness stays Conjecture 1. NOT folded into the locked 8.</p> | |
| <p class="vf-ax"><code>#print axioms generator_unique_up_to_affine / expMidpoint_eq_geom / cut1_conditional_lambda — [propext, Classical.choice, Quot.sound] · GAP: dyadic_image_dense (open sorry)</code></p> | |
| <p class="vf-ref">Wave18/CUT1Forward.lean · PR #208 (Wave18)</p> | |
| </article> | |
| </section> | |
| </div> | |
| <!-- HUD --> | |
| <div class="hud" id="title"> | |
| <div class="eyebrow">SZL Holdings · Living Anatomy</div> | |
| <h1>SZL Agent Body <span class="v3">v5</span> <span style="font-size:.5em;color:var(--text-dim,#8aa);font-weight:600;letter-spacing:.04em">(evolves v4)</span> — the governed-AI organ substrate</h1> | |
| <div class="sub">An interactive 3D body for governed AI. Click an organ, or take the guided tour. <a href="./live-body.html" style="color:var(--nerve);text-decoration:underline">▶ live body view →</a></div> | |
| <div class="bodies"> | |
| <span class="body-tag a">a11oy · governed-AI decision body</span> | |
| <span class="body-tag k">killinchu · maritime / drone C2 body</span> | |
| </div> | |
| </div> | |
| <div class="hud" id="honesty"> | |
| <div class="card"> | |
| <div class="hdr">Absolute Honesty Doctrine</div> | |
| <div id="honesty-card"></div> | |
| </div> | |
| </div> | |
| <div class="hud" id="legend"> | |
| <div class="card"> | |
| <h3>The Five Systems</h3> | |
| <div id="sys-list"></div> | |
| </div> | |
| </div> | |
| <div class="hud" id="hint">drag to orbit · scroll to zoom · click an organ · hover a vessel</div> | |
| <div class="hud" id="controls"> | |
| <button class="btn active" id="btn-rotate">◍ auto-rotate</button> | |
| <button class="btn active" id="btn-pulse">⟿ pulses</button> | |
| <button class="btn" id="btn-mesh">⇆ focus mesh</button> | |
| <button class="btn" id="btn-reset">⟲ reset view</button> | |
| <button class="btn" id="btn-gpd">◆ GPD lens</button> | |
| <button class="btn" id="btn-formulas">≣ formulas (text)</button> | |
| <button class="btn" id="btn-focus" aria-pressed="false" title="Focus mode: fade other organs when one is selected">⊙ focus</button> | |
| <button class="btn active" id="btn-dissect" aria-expanded="true" aria-controls="dissect" title="Toggle the v4 dissection tools dock">⌖ dissect</button> | |
| <!-- v5 deepen controls (additive) --> | |
| <button class="btn" id="btn-atlas" aria-expanded="false" aria-controls="atlas" title="Formula Atlas: every formula in data.js, grouped by maturity tier">⎙ formula atlas</button> | |
| <button class="btn" id="btn-forecast" aria-expanded="false" aria-controls="forecast" title="Honest proof-maturity timeline + roadmap">⌁ forecast</button> | |
| <button class="btn" id="btn-tour" aria-pressed="false" title="Guided tour: fly organ-to-organ with narration (pausable)">▷ guided tour</button> | |
| <!-- v9: cinematic hands-free vital tour (auto-fly, narrates live organ values, ends on the Λ-heart) --> | |
| <button class="btn" id="v9-tour-btn" aria-pressed="false" title="Cinematic vital tour: a hands-free ~50s auto-fly that narrates each organ's LIVE value and ends on the Λ-heart (Esc to skip)">◈ vital tour</button> | |
| <button class="btn active" id="btn-labels" aria-pressed="true" title="Toggle floating organ labels (leader lines)">⌗ labels</button> | |
| <!-- v5 quantum-bio layer (additive · verified model mirroring a11oy /api/a11oy/v1/qbio) --> | |
| <button class="btn" id="btn-qbio" aria-expanded="false" aria-controls="qbio" title="Quantum-Bio Layer (v5): coherence · bioenergetic charge · Λ-v5 closure floor · radical-pair compass">⌬ quantum-bio (v5)</button> | |
| <!-- v5 (evolves v4) additive organs/overlays — wired by v5_organs.js, honest labels --> | |
| <button class="btn" id="btn-v5-willay" aria-expanded="false" aria-controls="v5panel" title="WILLAY conscience / immune-gate: 5 inspectable signed-refusal classifiers (trust ceiling 0.97) read live · tamper-EVIDENT not tamper-proof">⛨ conscience</button> | |
| <button class="btn" id="btn-v5-mesh" aria-expanded="false" aria-controls="v5panel" title="Sovereign Mesh (circulatory upgrade): live per-node up/DOWN from /govern/health · never a fabricated green light · VRAM-fusion ROADMAP">⬡ sovereign mesh</button> | |
| <button class="btn" id="btn-v5-proofs" aria-expanded="false" aria-controls="v5panel" title="8 locked-proven → organ map: verbatim Lean statement + #print axioms, kernel-verified sorry-free @ c7c0ba17 · Λ=Conjecture 1">≣ proofs → organs</button> | |
| <button class="btn" id="btn-v5-assurance" aria-expanded="false" aria-controls="v5panel" title="AI-Assurance overlay (WDP/CDAO): organ → assurance artifact with honest LIVE/PARTIAL/ROADMAP chips">⚖ assurance</button> | |
| <button class="btn" id="btn-v5-physics" aria-expanded="false" aria-controls="v5panel" title="yarqa CFD + thermal PINN physics-governed layer · MODELED (not measured), bounded error">∿ physics (v5)</button> | |
| <button class="btn" id="btn-v5-stack" aria-expanded="false" aria-controls="v5panel" title="GPU-Sovereign Stack (SUBSTRATE): the vertical compute anatomy — owned GPU fabric → runtime → sovereign mesh → open-weight model → native governance → buyer-verifiable receipts · honest posture on every layer, never a fabricated green light">▤ sovereign stack</button> | |
| </div> | |
| <!-- v5: floating 3D organ leader-line labels (positioned by app.js each frame) --> | |
| <div id="labels" aria-hidden="true"></div> | |
| <!-- v5: guided-tour narration bar --> | |
| <div id="tour" role="region" aria-label="Guided tour narration" aria-live="polite"> | |
| <div class="tr-top"> | |
| <span class="tr-step" id="tr-step">stop</span> | |
| <span class="tr-name" id="tr-name"></span> | |
| <span class="tr-prog" id="tr-prog"></span> | |
| </div> | |
| <div class="tr-body" id="tr-body"></div> | |
| <div class="tr-ctrl"> | |
| <button id="tr-prev" title="Previous organ">‹ prev</button> | |
| <button id="tr-pause" class="primary" title="Pause / resume auto-advance">⏸ pause</button> | |
| <button id="tr-next" title="Next organ">next ›</button> | |
| <button id="tr-stop" title="End the guided tour">■ end</button> | |
| </div> | |
| <div class="tr-bar"><i id="tr-bar-i"></i></div> | |
| </div> | |
| <!-- ============ v4 DISSECTION DOCK (additive) ============ --> | |
| <div class="hud" id="dissect"> | |
| <div class="card"> | |
| <div class="dz-head" id="dz-head" role="button" tabindex="0" aria-expanded="true" aria-controls="dz-body"> | |
| <span>Dissection tools <span class="v4tag">· v4</span></span> | |
| <span class="caret" aria-hidden="true">▾</span> | |
| </div> | |
| <div class="dz-body" id="dz-body"> | |
| <!-- search / jump --> | |
| <div class="dz-sec"> | |
| <span class="dz-label">Search / jump</span> | |
| <div class="dz-search"> | |
| <input type="search" id="dz-q" placeholder="Find organ or formula…" autocomplete="off" | |
| role="combobox" aria-expanded="false" aria-controls="dz-results" aria-autocomplete="list" | |
| aria-label="Search organs and formulas; press Enter to jump"> | |
| <ul class="dz-results" id="dz-results" role="listbox" aria-label="Search results"></ul> | |
| </div> | |
| </div> | |
| <!-- dissection layer stack --> | |
| <div class="dz-sec" id="dz-layers"> | |
| <span class="dz-label">Layer stack</span> | |
| <!-- populated by app.js: toggle + opacity per conceptual layer --> | |
| </div> | |
| <!-- clip-plane scalpel --> | |
| <div class="dz-sec"> | |
| <span class="dz-label">Clip-plane scalpel</span> | |
| <div class="dz-row"> | |
| <button class="dz-mini" id="dz-clip-on" aria-pressed="false">enable cut</button> | |
| <button class="dz-mini" id="dz-clip-reset" title="Reset the cross-section plane">reset</button> | |
| </div> | |
| <div class="dz-axis" role="group" aria-label="Clip-plane axis"> | |
| <button id="dz-axis-x" aria-pressed="true">X</button> | |
| <button id="dz-axis-y" aria-pressed="false">Y</button> | |
| <button id="dz-axis-z" aria-pressed="false">Z</button> | |
| </div> | |
| <div class="dz-row"> | |
| <input type="range" class="dz-range" id="dz-clip" min="-6" max="6" step="0.05" value="0" | |
| aria-label="Cross-section plane position" style="flex:1"> | |
| <span class="val" id="dz-clip-val">0.0</span> | |
| </div> | |
| </div> | |
| <!-- explode view --> | |
| <div class="dz-sec"> | |
| <span class="dz-label">Explode view</span> | |
| <div class="dz-row"> | |
| <input type="range" class="dz-range" id="dz-explode" min="0" max="1" step="0.01" value="0" | |
| aria-label="Explode organs radially outward" style="flex:1"> | |
| <span class="val" id="dz-explode-val">0%</span> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- mobile-only: floating button to open/close the dissection bottom-sheet --> | |
| <button id="dissect-fab" type="button" aria-controls="dissect" aria-expanded="false" aria-label="Open dissection tools"><span class="fi" aria-hidden="true">⦿</span> Dissect</button> | |
| <!-- ============ v4 ALWAYS-ON VISIBILITY HUD (honest counts from D.KERNEL) ============ --> | |
| <div class="hud" id="vis-hud" aria-label="Live proof-state visibility"> | |
| <div class="card"> | |
| <div class="vh-head"><span class="pulse-tick" id="vh-tick" aria-hidden="true"></span> live proof state</div> | |
| <div class="vh-grid" id="vh-grid"><!-- populated from D.KERNEL by app.js --></div> | |
| <div class="vh-foot" id="vh-foot"><!-- kernel sha + Λ posture, from data.js --></div> | |
| <div id="v8-vitals" aria-live="polite"> | |
| <div class="v8-vrow"><span id="v8-vitals-state"><span class="v8-dot off"></span>connecting…</span><span class="pulse-tick" id="v8-vitals-tick" aria-hidden="true"></span></div> | |
| <div class="v8-vrow"><span class="v8-vk">kernel</span><span class="v8-vv" id="v8-vitals-kernel"><code>c7c0ba17</code></span></div> | |
| <div class="v8-vrow"><span class="v8-vk">locked-8</span><span class="v8-vv" id="v8-vitals-locked">8</span></div> | |
| <div class="v8-vrow"><span class="v8-vk">Λ posture</span><span class="v8-vv" id="v8-vitals-lambda"><span class="v8-conj">Conjecture 1</span></span></div> | |
| </div> | |
| <!-- v9: master ●LIVE/○offline indicator + autonomous-telemetry pause --> | |
| <div id="v9-master" aria-live="polite"> | |
| <div class="v9-mrow"><span id="v9-master-state"><span class="v9-dot off"></span>○ offline · static snapshot</span><span id="v9-master-ago">updated never</span></div> | |
| <div class="v9-mrow" id="v9-master-rate">PURIQ floor <b>0.62</b> · <b>49</b> gates (static)</div> | |
| <div class="v9-mrow" id="v9-master-lambda">Λ-v5 gate offline · PROPOSED engineering gate</div> | |
| <div id="v9-master-proxy">receipt bloodstream is a live proxy visual of real scalars (PURIQ / Λ-v5 / gate count) — not individual receipts.</div> | |
| <div class="v9-beat-row"><span class="v9-dot off" id="v9-beat-state"></span><span id="v9-master-beat" style="font-family:var(--font-m);font-size:8.5px;color:var(--text-dim);flex:1">telemetry every ~17s</span><button id="v9-beat-pause" type="button" aria-pressed="false">⏸ pause telemetry</button></div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- ============ v5 FORMULA ATLAS (additive) ============ --> | |
| <aside id="atlas" aria-hidden="true" aria-label="Formula Atlas"> | |
| <div class="at-head"> | |
| <button class="at-close" id="atlas-close" aria-label="close formula atlas">×</button> | |
| <div class="at-eyebrow">data.js · single source of truth</div> | |
| <div class="at-title">Formula Atlas</div> | |
| <div class="at-note" id="atlas-note"></div> | |
| <div class="at-search"> | |
| <input type="search" id="atlas-q" placeholder="Search id, name, axioms, plain English…" autocomplete="off" | |
| aria-label="Search every formula"> | |
| </div> | |
| <div class="at-filters" id="atlas-filters" role="group" aria-label="Filter by maturity tier"></div> | |
| </div> | |
| <div class="at-body" id="atlas-body"></div> | |
| </aside> | |
| <!-- ============ v5 FORECAST OVERLAY (honest, additive) ============ --> | |
| <aside id="forecast" aria-hidden="true" aria-label="Proof-maturity forecast"> | |
| <div class="fc-head"> | |
| <button class="at-close" id="forecast-close" aria-label="close forecast">×</button> | |
| <div class="fc-eyebrow">transparency forecast · not a fabricated metric</div> | |
| <div class="fc-title">Proof-maturity forecast</div> | |
| <div class="fc-note" id="forecast-note"></div> | |
| </div> | |
| <div class="fc-body" id="forecast-body"></div> | |
| </aside> | |
| <!-- ============ v5 QUANTUM-BIO LAYER panel (additive) ============ --> | |
| <aside id="qbio" aria-hidden="true" aria-label="Quantum-Bio Layer (v5)"> | |
| <div class="qb-head"> | |
| <button class="at-close" id="qbio-close" aria-label="close quantum-bio layer">×</button> | |
| <div class="qb-eyebrow">verified model · mirrors a11oy /api/a11oy/v1/qbio</div> | |
| <div class="qb-title">Quantum-Bio Layer (v5)</div> | |
| <div class="qb-note" id="qbio-note"></div> | |
| </div> | |
| <div class="qb-body" id="qbio-body"></div> | |
| </aside> | |
| <!-- Organ panel --> | |
| <aside id="panel" aria-hidden="true"> | |
| <button class="close" id="panel-close" aria-label="close">×</button> | |
| <div class="ph"> | |
| <div class="sys-pill" id="p-sys"></div> | |
| <div class="quechua" id="p-quechua"></div> | |
| <div class="fn" id="p-fn"></div> | |
| </div> | |
| <div class="pb" id="p-body"></div> | |
| </aside> | |
| <!-- Vessel tooltip --> | |
| <div id="tip"><div class="tt" id="tip-t"></div><div class="tf" id="tip-f"></div><div class="tm" id="tip-m"></div></div> | |
| <!-- text-fallback toggle + no-WebGL safety: reveal the static instillment block --> | |
| <script> | |
| (function(){ | |
| var vf=document.getElementById('vf-static'); | |
| var btn=document.getElementById('btn-formulas'); | |
| var cls=document.getElementById('vf-close'); | |
| function close(){vf.classList.remove('show');if(btn)btn.classList.remove('active');} | |
| if(btn&&vf){btn.addEventListener('click',function(){var o=vf.classList.toggle('show');this.classList.toggle('active',o);});} | |
| if(cls)cls.addEventListener('click',close); | |
| // deep-link: #formulas or ?view=formulas opens the instilled-formula text view instantly | |
| if(location.hash==='#formulas'||/[?&]view=formulas/.test(location.search)){ | |
| if(vf){vf.classList.add('show');if(btn)btn.classList.add('active');} | |
| } | |
| try{var c=document.createElement('canvas'); | |
| if(!(window.WebGLRenderingContext&&(c.getContext('webgl')||c.getContext('experimental-webgl')))){ | |
| document.body.classList.add('nojs'); | |
| }}catch(e){document.body.classList.add('nojs');} | |
| })(); | |
| </script> | |
| <!-- ============ v8 WATCH A DECISION FLOW — HEART-anchored agentic showcase ============ --> | |
| <button id="v8-flow-fab" type="button" aria-controls="v8-flow" aria-expanded="false" aria-label="Watch a decision flow through the body"> | |
| <span class="hb" aria-hidden="true"></span> watch a decision flow | |
| </button> | |
| <div id="v8-flow" role="dialog" aria-label="Watch a decision flow" aria-modal="false"> | |
| <button class="v8-flow-close" id="v8-flow-close" aria-label="close decision flow">×</button> | |
| <div class="v8-flow-eyebrow">● live read-only · a11oy agent loop</div> | |
| <div class="v8-flow-title">Watch a decision flow</div> | |
| <div class="v8-flow-sub">A request propagates HEART gate → BRAIN reason → CIRCULATORY receipt → SKELETON quorum, driven by REAL <code>/code/healthz</code> + <code>/v1/qbio/lambda</code> values. Model prose stays a labeled stub — never fabricated.</div> | |
| <div class="v8-flow-bar"> | |
| <input id="v8-flow-input" type="text" placeholder="Should I execute this action?" aria-label="decision request" autocomplete="off"> | |
| <button id="v8-flow-run" type="button">run ▶</button> | |
| </div> | |
| <div id="v8-flow-out" aria-live="polite"></div> | |
| <!-- v9: honest agent trace card (tier · PURIQ vs 0.62 · Λ-v5 λ + closure_ok · stub note) from REAL /code/healthz + /v1/qbio/lambda --> | |
| <div id="v9-trace" aria-live="polite"></div> | |
| <!-- v9: second body — killinchu live posture (rendered IFF its honest endpoint returns 200; effector SIMULATED) --> | |
| <div id="v9-killinchu" aria-live="polite"></div> | |
| </div> | |
| <!-- v9: cinematic hands-free vital-tour narration card (auto-fly; narrates REAL live organ values; ends on the Λ-heart) --> | |
| <div id="v9-tour" role="region" aria-label="Cinematic vital tour" aria-live="polite"> | |
| <div class="v9-tour-top"> | |
| <span class="v9-tour-eyebrow">◈ vital tour · live values</span> | |
| <span id="v9-tour-prog">1 / 5</span> | |
| </div> | |
| <div id="v9-tour-name">HEART · YUYAY</div> | |
| <div id="v9-tour-body">starting the cinematic fly-through…</div> | |
| <div class="v9-tour-ctrl"> | |
| <button id="v9-tour-next" title="Skip to next organ">next ›</button> | |
| <button id="v9-tour-stop" title="End the vital tour (Esc)">■ skip</button> | |
| </div> | |
| <div class="v9-tour-bar"><i id="v9-tour-bar-i"></i></div> | |
| </div> | |
| <!-- ============ UX2 toolbar (desktop/tablet) ============ --> | |
| <div id="ux-toolbar" role="toolbar" aria-label="Primary actions"> | |
| <button class="uxb primary" id="ux-tour" type="button">▷ Guided Tour</button> | |
| <button class="uxb" id="ux-dissect" type="button">⌖ Dissect</button> | |
| <button class="uxb" id="ux-forecast" type="button">⌁ Forecast</button> | |
| <button class="uxb qb" id="ux-qbio" type="button">⌬ Quantum-Bio</button> | |
| <div id="ux-more-wrap"> | |
| <button class="uxb" id="ux-more" type="button" aria-haspopup="true" aria-expanded="false">⋯ More</button> | |
| <div id="ux-more-menu" role="menu" aria-label="More actions"> | |
| <button class="uxm" id="ux-m-trust" role="menuitem" type="button">◈ Trust & proof</button> | |
| <button class="uxm" id="ux-m-atlas" role="menuitem" type="button">⎙ Formula atlas</button> | |
| <button class="uxm" id="ux-m-vital" role="menuitem" type="button">◈ Vital tour</button> | |
| <button class="uxm" id="ux-m-flow" role="menuitem" type="button">♥ Watch a decision flow</button> | |
| <button class="uxm" id="ux-m-gpd" role="menuitem" type="button">◆ GPD lens</button> | |
| <button class="uxm" id="ux-m-text" role="menuitem" type="button">≣ Formulas (text)</button> | |
| <div class="uxm-div"></div> | |
| <button class="uxm" id="ux-m-rotate" role="menuitem" type="button">◍ Auto-rotate</button> | |
| <button class="uxm" id="ux-m-pulse" role="menuitem" type="button">⟿ Pulses</button> | |
| <button class="uxm" id="ux-m-labels" role="menuitem" type="button">⌗ Labels</button> | |
| <button class="uxm" id="ux-m-focus" role="menuitem" type="button">⊙ Focus mode</button> | |
| <button class="uxm" id="ux-m-reset" role="menuitem" type="button">⟲ Reset view</button> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- ============ UX2 mobile bottom tab-bar (one panel at a time) ============ --> | |
| <div id="ux-scrim" aria-hidden="true"></div> | |
| <nav id="ux-tabbar" aria-label="Sections"> | |
| <button class="uxt cta" id="uxt-tour" type="button" aria-pressed="false"><span class="ic" aria-hidden="true">▷</span>Tour</button> | |
| <button class="uxt" id="uxt-tools" type="button" aria-pressed="false"><span class="ic" aria-hidden="true">⌖</span>Tools</button> | |
| <button class="uxt" id="uxt-doctrine" type="button" aria-pressed="false"><span class="ic" aria-hidden="true">◈</span>Trust</button> | |
| <button class="uxt" id="uxt-proof" type="button" aria-pressed="false"><span class="ic" aria-hidden="true">≡</span>Proof</button> | |
| <button class="uxt" id="uxt-more" type="button" aria-pressed="false"><span class="ic" aria-hidden="true">⋯</span>More</button> | |
| </nav> | |
| <!-- ============ UX2 controller (layout only; delegates to existing buttons) ============ --> | |
| <script> | |
| (function(){ | |
| document.body.classList.add('ux2'); | |
| var $=function(id){return document.getElementById(id);}; | |
| function click(id){ var b=$(id); if(b) b.click(); } | |
| function isPressed(id){ var b=$(id); return b && (b.classList.contains('active')||b.getAttribute('aria-pressed')==='true'); } | |
| var MOBILE=function(){ return window.matchMedia('(max-width:680px)').matches; }; | |
| /* ---------- Build the compact Trust chip (plain language) ---------- | |
| The verbatim honest doctrine (#honesty-card, filled by app.js) is | |
| moved INTO a Details expander — nothing deleted, just folded. */ | |
| function buildTrust(){ | |
| var honesty=$('honesty'); if(!honesty) return; | |
| var card=honesty.querySelector('.card'); if(!card) return; | |
| if($('ux-trust')) return; // once | |
| var src=$('honesty-card'); // app.js fills this with the full honest rows | |
| var wrap=document.createElement('div'); wrap.id='ux-trust'; | |
| wrap.innerHTML= | |
| '<div class="ux-trust-head"><span class="tdot"></span><span class="tlabel">Trust & proof</span></div>'+ | |
| '<div class="ux-trust-line">8 results machine-proven. Λ uniqueness is still an open conjecture — we never claim it as a theorem, and trust is never 100%.</div>'+ | |
| '<div class="ux-trust-chips">'+ | |
| '<span class="ux-tchip lock">8 locked-proven</span>'+ | |
| '<span class="ux-tchip conj">Λ = Conjecture 1</span>'+ | |
| '<span class="ux-tchip conj">Khipu BFT = Conjecture 2</span>'+ | |
| '<span class="ux-tchip ok">SLSA L1+L2 · L3 roadmap</span>'+ | |
| '<span class="ux-tchip">no fabricated data</span>'+ | |
| '</div>'; | |
| var det=document.createElement('details'); det.className='ux-details'; | |
| det.innerHTML='<summary>Full honesty doctrine</summary>'; | |
| var din=document.createElement('div'); din.className='ux-details-in'; | |
| det.appendChild(din); | |
| // relocate the existing honest rows under the expander (preserves listeners is N/A; gpd-row listener re-added by app already attached to node which we move) | |
| card.insertBefore(wrap, card.firstChild); | |
| card.appendChild(det); | |
| if(src){ din.appendChild(src); } // moves the live node, keeping its content + #gpd-row handler | |
| } | |
| /* ---------- Mobile one-at-a-time sheet manager ---------- */ | |
| var SHEETS={ | |
| tools: { open:function(){ ensureDockOpen(); $('dissect').classList.add('ux-show'); openSheet($('dissect'),'sheet-open'); }, close:function(){ $('dissect').classList.remove('sheet-open'); if(MOBILE()) $('dissect').classList.remove('ux-show'); } }, | |
| doctrine: { open:function(){ $('honesty').classList.add('ux-sheet'); }, close:function(){ $('honesty').classList.remove('ux-sheet'); } }, | |
| proof: { open:function(){ $('vis-hud').classList.add('ux-show','ux-sheet'); }, close:function(){ $('vis-hud').classList.remove('ux-sheet'); if(MOBILE()) $('vis-hud').classList.remove('ux-show'); } } | |
| }; | |
| var openKey=null; | |
| function ensureDockOpen(){ var d=$('dissect'); if(d){ d.classList.add('ux-show'); d.classList.remove('collapsed'); var b=$('dz-body'); } } | |
| function openSheet(el,cls){ if(el) el.classList.add(cls||'open'); } | |
| function closeAllSheets(){ | |
| Object.keys(SHEETS).forEach(function(k){ try{SHEETS[k].close();}catch(e){} }); | |
| // also close app drawers | |
| ['panel','atlas','forecast','qbio'].forEach(function(id){ var e=$(id); if(e) e.classList.remove('open'); }); | |
| // stop tours | |
| openKey=null; | |
| scrim(false); | |
| setTabPressed(null); | |
| } | |
| function scrim(on){ var s=$('ux-scrim'); if(s) s.classList.toggle('show',!!on); } | |
| function setTabPressed(key){ | |
| [['tour','uxt-tour'],['tools','uxt-tools'],['doctrine','uxt-doctrine'],['proof','uxt-proof']].forEach(function(p){ | |
| var b=$(p[1]); if(b) b.setAttribute('aria-pressed', String(p[0]===key)); | |
| }); | |
| } | |
| function toggleSheet(key){ | |
| if(openKey===key){ closeAllSheets(); return; } | |
| closeAllSheets(); | |
| var s=SHEETS[key]; if(!s) return; | |
| s.open(); openKey=key; scrim(true); setTabPressed(key); | |
| } | |
| /* ---------- Wire desktop toolbar ---------- */ | |
| $('ux-tour').addEventListener('click',function(){ click('btn-tour'); }); | |
| $('ux-dissect').addEventListener('click',function(){ | |
| // open the dissection dock as an on-demand drawer (desktop) | |
| var d=$('dissect'); if(!d) return; | |
| var show=!d.classList.contains('ux-show'); | |
| d.classList.toggle('ux-show',show); | |
| if(show){ d.classList.remove('collapsed'); } | |
| this.classList.toggle('on',show); | |
| }); | |
| $('ux-forecast').addEventListener('click',function(){ click('btn-forecast'); }); | |
| $('ux-qbio').addEventListener('click',function(){ click('btn-qbio'); }); | |
| // reflect active states from underlying buttons onto toolbar | |
| function syncToolbar(){ | |
| $('ux-tour').classList.toggle('on', isPressed('btn-tour')); | |
| $('ux-forecast').classList.toggle('on', isPressed('btn-forecast')); | |
| $('ux-qbio').classList.toggle('on', isPressed('btn-qbio')); | |
| } | |
| setInterval(syncToolbar, 600); | |
| /* ---------- More menu ---------- */ | |
| var moreMenu=$('ux-more-menu'); | |
| function setMore(open){ | |
| moreMenu.classList.toggle('open',open); | |
| document.body.classList.toggle('ux-more-open',open); | |
| $('ux-more').setAttribute('aria-expanded',String(open)); | |
| var t=$('uxt-more'); if(t) t.setAttribute('aria-pressed',String(open)); | |
| if(MOBILE()) scrim(open); | |
| } | |
| function closeMore(){ setMore(false); } | |
| $('ux-more').addEventListener('click',function(e){ | |
| e.stopPropagation(); | |
| setMore(!moreMenu.classList.contains('open')); | |
| }); | |
| document.addEventListener('click',function(e){ | |
| if(moreMenu.classList.contains('open') && !$('ux-more-wrap').contains(e.target) && e.target.id!=='uxt-more' && !(e.target.closest && e.target.closest('#uxt-more'))){ | |
| closeMore(); | |
| } | |
| }); | |
| function menuAct(id, underlying, opt){ | |
| var b=$(id); if(!b) return; | |
| b.addEventListener('click',function(){ | |
| if(typeof underlying==='function'){ underlying(); } | |
| else { click(underlying); } | |
| if(!opt||!opt.keepOpen){ closeMore(); } | |
| }); | |
| } | |
| menuAct('ux-m-trust', function(){ | |
| // pop the trust card details open + scroll into view (desktop) | |
| var det=document.querySelector('#honesty .ux-details'); if(det){ det.open=true; det.scrollIntoView({block:'nearest'}); } | |
| }); | |
| menuAct('ux-m-atlas','btn-atlas'); | |
| menuAct('ux-m-vital','v9-tour-btn'); | |
| menuAct('ux-m-flow', function(){ click('v8-flow-fab'); }); | |
| menuAct('ux-m-gpd','btn-gpd'); | |
| menuAct('ux-m-text','btn-formulas'); | |
| menuAct('ux-m-rotate','btn-rotate',{keepOpen:true}); | |
| menuAct('ux-m-pulse','btn-pulse',{keepOpen:true}); | |
| menuAct('ux-m-labels','btn-labels',{keepOpen:true}); | |
| menuAct('ux-m-focus','btn-focus',{keepOpen:true}); | |
| menuAct('ux-m-reset','btn-reset'); | |
| /* ---------- Mobile tab-bar ---------- */ | |
| $('uxt-tour').addEventListener('click',function(){ | |
| // Guided tour: not a sheet — it narrates over the scene. Start/stop it. | |
| closeAllSheets(); | |
| click('btn-tour'); | |
| var on=isPressed('btn-tour'); this.setAttribute('aria-pressed',String(on)); | |
| }); | |
| $('uxt-tools').addEventListener('click',function(){ toggleSheet('tools'); }); | |
| $('uxt-doctrine').addEventListener('click',function(){ toggleSheet('doctrine'); }); | |
| $('uxt-proof').addEventListener('click',function(){ toggleSheet('proof'); }); | |
| $('uxt-more').addEventListener('click',function(e){ | |
| e.stopPropagation(); | |
| // close any open one-at-a-time sheet first, then toggle the More menu | |
| var wantOpen=!moreMenu.classList.contains('open'); | |
| if(wantOpen){ closeAllSheets(); } | |
| setMore(wantOpen); | |
| }); | |
| $('ux-scrim').addEventListener('click',function(){ closeAllSheets(); closeMore(); }); | |
| // Esc closes any open mobile sheet | |
| window.addEventListener('keydown',function(e){ if(e.key==='Escape'){ if(MOBILE()) closeAllSheets(); closeMore(); } }); | |
| // When app drawers (atlas/forecast/qbio/panel) open on mobile, show scrim + clear tab state | |
| function watchDrawers(){ | |
| var anyOpen=['panel','atlas','forecast','qbio'].some(function(id){ var e=$(id); return e && e.classList.contains('open'); }); | |
| if(MOBILE()){ scrim(anyOpen||!!openKey); } | |
| } | |
| setInterval(watchDrawers, 400); | |
| // (More menu positioning is governed by CSS at each breakpoint.) | |
| // init after app.js has filled the honesty card | |
| function init(){ | |
| buildTrust(); | |
| if($('honesty-card')) return true; | |
| return false; | |
| } | |
| var tries=0; var iv=setInterval(function(){ if(init()||++tries>40){ clearInterval(iv); } }, 150); | |
| // also try once DOM settled | |
| setTimeout(buildTrust, 1200); | |
| })(); | |
| </script> | |
| <!-- ZERO CDN: vendored Three.js r160 + local data + local app --> | |
| <script src="./lib/three.min.js"></script> | |
| <script src="./data.js"></script> | |
| <script src="./app.js"></script> | |
| <!-- v5 (evolves v4): WILLAY · Sovereign Mesh · buyer-verifiable receipt · 8-proof map · assurance · physics. Additive, read-only, 0-CDN. --> | |
| <script src="./v5_organs.js"></script> | |
| </body> | |
| </html> | |