File size: 5,587 Bytes
96d1644
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5c701a1
 
 
96d1644
5c701a1
 
96d1644
5c701a1
96d1644
 
5c701a1
96d1644
 
 
5c701a1
96d1644
5c701a1
96d1644
 
5c701a1
 
 
 
 
 
 
 
 
 
 
 
 
96d1644
5684452
55e5019
96d1644
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5684452
55e5019
96d1644
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>PINN · Physical-Bounds Certifier — a11oy</title>
<!--
  Dedicated PINN surface — NOT the generic Command Center. Boots the shared szl3d
  stage and mounts ONLY the PINN physical-bounds surface (static/3d/surfaces/pinn.js),
  which renders its own 3D scene + interactive cert HUD bound LIVE to
  /api/a11oy/v1/pinn/certificate (+ /pinn/residual, /pnt/limits). The certificate is
  the HONEST INVERSE of a free-energy claim: it proves a real compute job sits FAR
  BELOW the fundamental compute/energy ceilings (Landauer / Margolus-Levitin /
  Bremermann / Bekenstein), with DSSE/cosign verify badges and a residual plot.

  Doctrine v11 (HARD): MEASURED inputs (watts × seconds) → DERIVED joules via CITED
  physics; UNSIGNED == STRUCTURAL-ONLY (never a false green). The surface renders
  exactly the honesty label + signature state the JSON carries. 0 runtime CDN — all
  3D libs vendored same-origin via the importmap. System fonts only. WebGL2 default.
-->
<script type="importmap">
{
  "imports": {
    "three": "/static/3d/vendor/three/three.module.min.js",
    "three/webgpu": "/static/3d/vendor/three/three.webgpu.min.js",
    "three/addons/": "/static/3d/vendor/three/addons/"
  }
}
</script>
<style>
 :root{--bg:#05070d;--line:#1b2734;--teal:#39d3c4;--gold:#e8c074;--cream:#eef3f6;--para:#9fb1bf}
 *{box-sizing:border-box}
 html,body{margin:0;height:100%}
 /* Flex column so the 3D stage always fills whatever space the header leaves,
    no matter how far the badges/nav wrap on a narrow phone. dvh tracks the mobile
    address-bar collapse; svh/100vh are fallbacks for older engines. */
 body{background:var(--bg);color:var(--cream);
  font:14px/1.5 ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Arial;
  overflow:hidden;display:flex;flex-direction:column;height:100vh;height:100svh;height:100dvh}
 header{padding:10px 16px;border-bottom:1px solid var(--line);
  background:linear-gradient(180deg,#08101a,#05070d);display:flex;align-items:center;gap:12px;flex-wrap:wrap;flex:0 0 auto}
 h1{font-size:16px;margin:0;letter-spacing:.4px}
 .badge{display:inline-block;font:10.5px ui-monospace,Menlo,monospace;padding:2px 7px;border-radius:6px;
  border:1px solid var(--line);color:var(--gold);background:#10171f;white-space:nowrap}
 #backend{color:var(--teal)}
 .nav{margin-left:auto;display:flex;gap:12px;font:11px ui-monospace,Menlo,monospace}
 a{color:var(--teal);text-decoration:none}
 #stage-wrap{position:relative;flex:1 1 auto;min-height:0;width:100%}
 #stage{position:absolute;inset:0}
 #stage canvas{display:block;width:100%;height:100%;touch-action:none}
 #fallback{position:absolute;inset:0;display:none;align-items:center;justify-content:center;
  text-align:center;color:var(--para);padding:24px;font:13px ui-monospace,Menlo,monospace}

 /* ---- Mobile / touch (<=640px) ---------------------------------------- */
 @media (max-width:640px){
  header{padding:8px 12px;gap:8px}
  h1{font-size:14px;flex:1 1 100%}
  .badge{font-size:9.5px;padding:2px 6px}
  .nav{margin-left:0;flex:1 1 100%;flex-wrap:wrap;gap:10px}
  /* Give the 3D stage a guaranteed usable share of the screen on phones. */
  #stage-wrap{min-height:52vh}
 }
 @media (max-width:640px) and (orientation:landscape){
  #stage-wrap{min-height:60vh}
 }
</style>
  <link rel="stylesheet" href="/assets/szl-flow.css" data-szl-flow-asset="style" />
  <link rel="stylesheet" href="/assets/szl-holo-v2.css" data-szl-holo-asset="style-v2" />
</head>
<body>
<header>
 <h1>◇ PINN · Physical-Bounds Certifier</h1>
 <span class="badge" id="backend">renderer: …</span>
 <span class="badge">three r<span id="three-rev"></span></span>
 <span class="badge">0 runtime CDN</span>
 <span class="badge">MEASURED → DERIVED</span>
 <span class="badge">Λ = Conjecture 1</span>
 <nav class="nav">
   <a href="/holographic#pinn">all surfaces</a>
   <a href="/pnt">PNT →</a>
   <a href="/">← a11oy</a>
 </nav>
</header>
<div id="stage-wrap">
 <div id="stage"></div>
 <div id="fallback">3D unavailable on this device — the PINN certifier surface needs a WebGL2 or WebGPU canvas.<br>
  The signed physical-bounds certificate is still available as JSON at /api/a11oy/v1/pinn/certificate.</div>
</div>
<script type="module">
import szl3d from "/static/3d/szl3d/szl3d_boot.js";
import * as live from "/static/3d/szl3d/szl3d_live.js";
import * as label from "/static/3d/szl3d/szl3d_label.js";
import * as THREE from "three";
import surface from "/static/3d/surfaces/pinn.js";

const $ = (id) => document.getElementById(id);
$("three-rev").textContent = THREE.REVISION;

(async function main() {
  try {
    const wantWebGPU = /[?&]webgpu=1\b/.test(location.search);
    const stage = await szl3d.boot($("stage"), {
      bloom: { strength: 0.85, radius: 0.5, threshold: 0.18 },
      cameraPos: [0, 4, 16],
      forceWebGL: !wantWebGPU,
    });
    $("backend").textContent = "renderer: " + stage.backend.toUpperCase();
    stage.start();
    const ctx = { stage, container: $("stage"), live, label, THREE, szl3d };
    surface.mount(ctx);
    window.__SZL3D_PINN__ = { stage, surface };
  } catch (e) {
    $("fallback").style.display = "flex";
    $("backend").textContent = "renderer: UNAVAILABLE";
    console.error("[pinn] stage boot failed:", e);
  }
})();
</script>
  <script src="/assets/szl-flow.js" defer data-szl-flow-asset="script"></script>
  <script src="/assets/szl-holo-v2.js" defer data-szl-holo-asset="script-v2"></script>
</body>
</html>