betterwithage commited on
Commit
c35deaa
·
verified ·
1 Parent(s): 68e0209

feat(3d-heroes): replace chibi 2D avatars with real Three.js 3D heroes — Yachay

Browse files

Replace the chibi 2D avatar stickers on the SZL Holdings org card with five
distinct, real Three.js r171 3D hero figures (one per organ), rendered above
the fold and each in its own scene cell:
amaru — serpent (TubeGeometry) coiled around a glowing crystal core
sentra — icosahedron hex shield with orbiting/absorbed threat dots
rosie — operator console: head + HUD rings + pulsing data lines
killinchu — low-poly kestrel over faceted terrain, 53 drone-dots circling
a11oy — 16-node icosahedron knot-graph (Khipu cords) with edge pulse

Click any figure -> opens that organ live HF Space. Mobile-first per
SZL_MOBILE_FIRST_STANDARD: viewport-fit=cover, touch-rotate, low-power renderer
on mobile, document.hidden render pause, prefers-reduced-motion honored.

Also adds a Live Mesh panel (/healthz badges flip green/red, 5s poll) + Latest
signed receipts panel (Khipu DAG tail) + running receipt counter. Removes the
chibi mission-room WebP band, ambient chibi emoji layer, and chibi team still.
Fixes stale Doctrine v10 -> Doctrine v11 LOCKED (749/14/163) in footer + meta.

ADDITIVE: banner art, org name, ORCID/GitHub/UDS links, all routes preserved.
Apache-2.0. Doctrine v11 LOCKED: 749 declarations / 14 unique axioms / 163 sorries.

Signed: Yachay <yachay@szlholdings.dev>
Co-Authored-By: Perplexity Computer Agent

Files changed (2) hide show
  1. README.md +3 -5
  2. index.html +293 -61
README.md CHANGED
@@ -12,11 +12,9 @@ short_description: Provenanced AI · Lean-proven · DSSE-signed · UDS
12
 
13
  <img src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/szl_banner.png" alt="SZL Holdings — provenanced AI infrastructure" width="100%"/>
14
 
15
- <a href="https://huggingface.co/spaces/SZLHOLDINGS/a11oy"><img src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/a11oy_avatar.png" width="120" alt="a11oy"/></a>
16
- <a href="https://huggingface.co/spaces/SZLHOLDINGS/amaru"><img src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/amaru_avatar.png" width="120" alt="amaru"/></a>
17
- <a href="https://huggingface.co/spaces/SZLHOLDINGS/sentra"><img src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/sentra_avatar.png" width="120" alt="sentra"/></a>
18
- <a href="https://huggingface.co/spaces/SZLHOLDINGS/rosie"><img src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/rosie_avatar.png" width="120" alt="rosie"/></a>
19
- <a href="https://huggingface.co/spaces/SZLHOLDINGS/killinchu"><img src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/vessels_avatar.png" width="120" alt="killinchu"/></a>
20
 
21
  ## SZL Holdings — Provenanced AI Infrastructure
22
 
 
12
 
13
  <img src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/szl_banner.png" alt="SZL Holdings — provenanced AI infrastructure" width="100%"/>
14
 
15
+ **[amaru](https://huggingface.co/spaces/SZLHOLDINGS/amaru)** · **[sentra](https://huggingface.co/spaces/SZLHOLDINGS/sentra)** · **[rosie](https://huggingface.co/spaces/SZLHOLDINGS/rosie)** · **[killinchu](https://huggingface.co/spaces/SZLHOLDINGS/killinchu)** · **[a11oy](https://huggingface.co/spaces/SZLHOLDINGS/a11oy)**
16
+
17
+ *Five organs, rendered as live interactive 3D figures on the [org card](https://szlholdings-readme.static.hf.space/) (Three.js r171 — touch-rotate on mobile, tap a figure to open its Space).*
 
 
18
 
19
  ## SZL Holdings — Provenanced AI Infrastructure
20
 
index.html CHANGED
@@ -7,9 +7,9 @@
7
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/>
8
  <meta name="theme-color" content="#1a0d2e"/>
9
  <title>SZL Holdings — Governed Agentic Mesh</title>
10
- <meta name="description" content="SZL Holdings: a governed agentic mesh. rosie commands a11oy; a11oy enforces; amaru remembers; sentra guards; vessels carries the load. Doctrine v10, formal Lean proofs, signed receipts."/>
11
  <meta property="og:title" content="SZL Holdings — Governed Agentic Mesh"/>
12
- <meta property="og:description" content="Five organs, ten sub-organs. Every call leaves a receipt. Doctrine v10 · 0 violations."/>
13
  <meta property="og:image" content="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/szl_banner.png"/>
14
  <meta property="og:type" content="website"/>
15
  <link rel="preconnect" href="https://fonts.googleapis.com"/>
@@ -241,64 +241,228 @@
241
  </style>
242
  </head>
243
  <body>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
244
 
245
  <!-- BANNER — UNTOUCHED (5-hero painterly artwork is sacred) -->
246
  <section id="banner" style="padding:0;border-top:none;">
247
  <img src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/szl_banner.png" alt="SZL Holdings — the five-hero governed agentic mesh team" style="display:block;width:100%;height:auto;"/>
248
  </section>
249
 
250
- <!-- MISSION ROOM (Wave4 — additive) — joint cyber-ops action band below the banner,
251
- above the five-hero portrait row. Six characters, each a small animated WebP
252
- looping its own cyber task (loop baked into the WebP). Replaces the previous
253
- static team picture, which now lives in the footer stills strip. Banner, the
254
- five painterly hero portraits and the ambient emoji layer are untouched.
255
- Each unit stacks an animated layer over a static first-frame layer; under
256
- prefers-reduced-motion the animated layer is hidden and the still is shown. -->
257
- <section id="mission-room">
258
- <div class="container">
259
- <p class="mr-head">Mission Room · Live</p>
260
- <div class="mr-band">
261
- <span class="mr-unit">
262
- <img class="mr-static" width="170" height="170" src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/action/a11oy_still.webp" alt="" aria-hidden="true"/>
263
- <img class="mr-anim" width="170" height="170" src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/action/a11oy.webp" alt="a11oy typing at a holographic console"/>
264
- </span>
265
- <span class="mr-unit">
266
- <img class="mr-static" width="170" height="170" src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/action/amaru_still.webp" alt="" aria-hidden="true"/>
267
- <img class="mr-anim" width="170" height="170" src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/action/amaru.webp" alt="amaru reading a scroll of code as provenance glyphs rise"/>
268
- </span>
269
- <span class="mr-unit">
270
- <img class="mr-static" width="170" height="170" src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/action/sentra_still.webp" alt="" aria-hidden="true"/>
271
- <img class="mr-anim" width="170" height="170" src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/action/sentra.webp" alt="sentra raising a hex energy shield, deflecting pixels"/>
272
- </span>
273
- <span class="mr-unit">
274
- <img class="mr-static" width="170" height="170" src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/action/vessels_still.webp" alt="" aria-hidden="true"/>
275
- <img class="mr-anim" width="170" height="170" src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/action/vessels.webp" alt="vessels routing across a holographic globe with a chain-link cursor"/>
276
- </span>
277
- <span class="mr-unit">
278
- <img class="mr-static" width="170" height="170" src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/action/rosie_still.webp" alt="" aria-hidden="true"/>
279
- <img class="mr-anim" width="170" height="170" src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/action/rosie.webp" alt="rosie at the operator console with comms and scrolling holo-text"/>
280
- </span>
281
- <span class="mr-unit">
282
- <img class="mr-static" width="170" height="170" src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/action/doug_still.webp" alt="" aria-hidden="true"/>
283
- <img class="mr-anim" width="170" height="170" src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/action/doug.webp" alt="Doug the Defense Unicorns mascot at a tactical laptop running a radar sweep"/>
284
- </span>
285
- </div>
286
- <p class="mr-cap">Built for the mission. Built on <b>UDS</b>.</p>
287
- </div>
288
- </section>
289
 
290
  <!-- flag block: five hero portraits as links + org name + icon links + footer -->
291
  <main id="main">
292
  <section style="padding:3.5rem 0;text-align:center;">
293
  <div class="container">
294
 
295
- <div style="display:flex;justify-content:center;gap:1.4rem;flex-wrap:wrap;margin-bottom:2.2rem;">
296
- <a href="https://huggingface.co/spaces/SZLHOLDINGS/rosie" aria-label="rosie"><img src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/rosie_avatar.png" width="128" height="128" alt="rosie" style="border-radius:50%;border:2px solid var(--gold);"/></a>
297
- <a href="https://huggingface.co/spaces/SZLHOLDINGS/a11oy" aria-label="a11oy"><img src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/a11oy_avatar.png" width="128" height="128" alt="a11oy" style="border-radius:50%;border:2px solid var(--gold);"/></a>
298
- <a href="https://huggingface.co/spaces/SZLHOLDINGS/amaru" aria-label="amaru"><img src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/amaru_avatar.png" width="128" height="128" alt="amaru" style="border-radius:50%;border:2px solid var(--gold);"/></a>
299
- <a href="https://huggingface.co/spaces/SZLHOLDINGS/sentra" aria-label="sentra"><img src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/sentra_avatar.png" width="128" height="128" alt="sentra" style="border-radius:50%;border:2px solid var(--gold);"/></a>
300
- <a href="https://huggingface.co/spaces/SZLHOLDINGS/vessels" aria-label="vessels"><img src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/vessels_avatar.png" width="128" height="128" alt="vessels" style="border-radius:50%;border:2px solid var(--gold);"/></a>
301
- </div>
302
 
303
  <h1 style="margin-bottom:1.4rem;">SZL&nbsp;Holdings</h1>
304
 
@@ -311,15 +475,90 @@
311
  </div>
312
  </section>
313
  </main>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
314
 
315
  <footer style="text-align:center;padding:1.5rem 0;border-top:1px solid var(--border);">
316
  <!-- Stills strip: the previous static team picture, relocated here from below the banner
317
  when the live Mission Room action band replaced it. Kept as a reference still. -->
318
- <div style="max-width:520px;margin:0 auto 1.4rem;">
319
- <p class="mono" style="font-size:0.66rem;letter-spacing:0.16em;text-transform:uppercase;color:var(--gold-dim);margin-bottom:0.5rem;">Stills</p>
320
- <img src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/group_shot_v1.png" alt="SZL Holdings team portrait: the five painterly heroes alongside Hatun, the SZL mission unicorn" style="display:block;width:100%;height:auto;border-radius:var(--radius);border:1px solid var(--border);opacity:0.9;"/>
321
- </div>
322
- <span class="mono" style="font-size:0.72rem;color:var(--text-dim);">— szl-holdings/.github @ d304951 · Doctrine v10 · ORCID 0009-0001-0110-4173</span>
323
  </footer>
324
 
325
  <!-- AMBIENT EMOJI LAYER (Wave4, additive) — 5 character emojis hanging around
@@ -328,13 +567,6 @@
328
  HTML sanitizer), these small 64px images fall to the page bottom instead of
329
  overlaying content; explicit width/height attributes keep them small even
330
  with CSS removed. Animation is gated behind prefers-reduced-motion: no-preference. -->
331
- <div class="emoji-layer" aria-hidden="true">
332
- <span class="ambient-emoji ae-a11oy"><img class="ae-inner" width="64" height="64" src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/emoji/a11oy_emoji.png" alt=""/></span>
333
- <span class="ambient-emoji ae-rosie"><img class="ae-inner" width="64" height="64" src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/emoji/rosie_emoji.png" alt=""/></span>
334
- <span class="ambient-emoji ae-amaru"><img class="ae-inner" width="64" height="64" src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/emoji/amaru_emoji.png" alt=""/></span>
335
- <span class="ambient-emoji ae-sentra"><img class="ae-inner" width="64" height="64" src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/emoji/sentra_emoji.png" alt=""/></span>
336
- <span class="ambient-emoji ae-vessels"><img class="ae-inner" width="64" height="64" src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/emoji/vessels_emoji.png" alt=""/></span>
337
- </div>
338
-
339
  </body>
340
  </html>
 
7
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/>
8
  <meta name="theme-color" content="#1a0d2e"/>
9
  <title>SZL Holdings — Governed Agentic Mesh</title>
10
+ <meta name="description" content="SZL Holdings: a governed agentic mesh. rosie commands a11oy; a11oy enforces; amaru remembers; sentra guards; vessels carries the load. Doctrine v11 (749/14/163), formal Lean proofs, signed receipts."/>
11
  <meta property="og:title" content="SZL Holdings — Governed Agentic Mesh"/>
12
+ <meta property="og:description" content="Five organs, ten sub-organs. Every call leaves a receipt. Doctrine v11 LOCKED · 749/14/163."/>
13
  <meta property="og:image" content="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/szl_banner.png"/>
14
  <meta property="og:type" content="website"/>
15
  <link rel="preconnect" href="https://fonts.googleapis.com"/>
 
241
  </style>
242
  </head>
243
  <body>
244
+ <!-- ================= SZL 3D HERO FIGURES (Three.js) — replaces chibi 2D avatars =================
245
+ Five distinct procedural low-poly 3D heroes, one per organ, each in its own scene cell.
246
+ Click a figure -> opens that organ's live HF Space. Mobile-first per SZL_MOBILE_FIRST_STANDARD.
247
+ Aesthetic: dark slate #0a0e14 cells, warm gold #d4a444 accents, white emissive highlights.
248
+ Apache-2.0 · Signed Yachay <yachay@szlholdings.dev> · Doctrine v11 LOCKED (749/14/163).
249
+ ADDITIVE: this block replaces ONLY the chibi avatar portrait row. -->
250
+ <section id="szl-3d-heroes" style="padding:3rem 0 1rem;text-align:center;">
251
+ <div class="container">
252
+ <p class="mr-head" style="font-family:var(--font-mono);font-size:0.72rem;letter-spacing:0.18em;text-transform:uppercase;color:var(--gold-dim);margin-bottom:0.2rem;">The Mesh · Five Organs · Live 3D</p>
253
+ <div id="szl-hero-grid" role="group" aria-label="SZL Holdings five organs, interactive 3D figures">
254
+ <a class="szl-hero-cell" href="https://huggingface.co/spaces/SZLHOLDINGS/amaru" data-organ="amaru" aria-label="amaru — memory cortex (serpent + crystal core), open Space"><canvas data-organ="amaru"></canvas><span class="szl-hero-name">amaru</span><span class="szl-hero-role">cortex · serpent</span></a>
255
+ <a class="szl-hero-cell" href="https://huggingface.co/spaces/SZLHOLDINGS/sentra" data-organ="sentra" aria-label="sentra — immune shield, open Space"><canvas data-organ="sentra"></canvas><span class="szl-hero-name">sentra</span><span class="szl-hero-role">immune · shield</span></a>
256
+ <a class="szl-hero-cell" href="https://huggingface.co/spaces/SZLHOLDINGS/rosie" data-organ="rosie" aria-label="rosie — operator console (HUD rings), open Space"><canvas data-organ="rosie"></canvas><span class="szl-hero-name">rosie</span><span class="szl-hero-role">operator · console</span></a>
257
+ <a class="szl-hero-cell" href="https://huggingface.co/spaces/SZLHOLDINGS/killinchu" data-organ="killinchu" aria-label="killinchu — kestrel drone intel, open Space"><canvas data-organ="killinchu"></canvas><span class="szl-hero-name">killinchu</span><span class="szl-hero-role">kestrel · drone</span></a>
258
+ <a class="szl-hero-cell" href="https://huggingface.co/spaces/SZLHOLDINGS/a11oy" data-organ="a11oy" aria-label="a11oy — router knot-graph (Khipu cords), open Space"><canvas data-organ="a11oy"></canvas><span class="szl-hero-name">a11oy</span><span class="szl-hero-role">router · wires</span></a>
259
+ </div>
260
+ <p style="font-family:var(--font-mono);font-size:0.68rem;color:var(--text-dim);margin-top:0.9rem;letter-spacing:0.04em;">Real Three.js · touch-rotate on mobile · tap a figure to open its Space</p>
261
+ </div>
262
+ </section>
263
+
264
+ <style id="szl-3d-heroes-style">
265
+ #szl-hero-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:1.1rem;margin-top:1.4rem;}
266
+ .szl-hero-cell{display:flex;flex-direction:column;align-items:center;background:#0a0e14;
267
+ border:1px solid rgba(212,164,68,0.22);border-radius:16px;padding:0.6rem 0.5rem 0.9rem;
268
+ text-decoration:none;border-bottom:1px solid rgba(212,164,68,0.22);
269
+ transition:transform .18s,border-color .18s,box-shadow .18s;min-height:44px;}
270
+ .szl-hero-cell:hover,.szl-hero-cell:focus-visible{transform:translateY(-4px);
271
+ border-color:#d4a444;box-shadow:0 12px 30px rgba(0,0,0,0.5);outline:none;}
272
+ .szl-hero-cell canvas{width:100%;aspect-ratio:1/1;display:block;border-radius:12px;
273
+ background:radial-gradient(circle at 50% 40%,#10151f,#06090f 70%);touch-action:none;}
274
+ .szl-hero-name{font-family:var(--font-head,'Cinzel',serif);font-size:1.05rem;color:#d4a444;margin-top:0.55rem;}
275
+ .szl-hero-role{font-family:var(--font-mono,monospace);font-size:0.62rem;color:#8c7d5e;letter-spacing:0.06em;text-transform:uppercase;}
276
+ @media(max-width:900px) and (min-width:561px){#szl-hero-grid{grid-template-columns:repeat(3,1fr);}}
277
+ @media(max-width:560px){#szl-hero-grid{grid-template-columns:repeat(2,1fr);gap:0.8rem;}
278
+ .szl-hero-cell{width:80vw;max-width:none;margin:0 auto;}
279
+ #szl-hero-grid .szl-hero-cell:last-child{grid-column:1 / -1;width:80vw;}}
280
+ @media(prefers-reduced-motion:reduce){.szl-hero-cell{transition:none;}}
281
+ </style>
282
+
283
+ <script type="importmap">
284
+ { "imports": { "three": "https://unpkg.com/three@0.171.0/build/three.module.js" } }
285
+ </script>
286
+ <script type="module">
287
+ import * as THREE from 'three';
288
+
289
+ const SZL_MOBILE = ('ontouchstart' in window) || (navigator.maxTouchPoints > 0);
290
+ const SZL_REDUCED = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
291
+ const PR = Math.min(window.devicePixelRatio || 1, SZL_MOBILE ? 1.5 : 2);
292
+ const GOLD = 0xd4a444, GOLD_HI = 0xe8cc6a, WHITE = 0xffffff, SLATE = 0x0a0e14;
293
+
294
+ const cells = [];
295
+
296
+ function makeScene(canvas, organ){
297
+ const renderer = new THREE.WebGLRenderer({
298
+ canvas, antialias: !SZL_MOBILE, alpha: true,
299
+ powerPreference: SZL_MOBILE ? 'low-power' : 'high-performance'
300
+ });
301
+ renderer.setPixelRatio(PR);
302
+ const scene = new THREE.Scene();
303
+ scene.background = null;
304
+ const cam = new THREE.PerspectiveCamera(42, 1, 0.1, 100);
305
+ cam.position.set(0, 0.4, 6.2);
306
+
307
+ scene.add(new THREE.AmbientLight(0x404a5e, 1.1));
308
+ const key = new THREE.DirectionalLight(GOLD_HI, 1.6); key.position.set(3,4,5); scene.add(key);
309
+ const rim = new THREE.DirectionalLight(0x6688ff, 0.7); rim.position.set(-4,-2,-3); scene.add(rim);
310
+ const pt = new THREE.PointLight(WHITE, 0.9, 20); pt.position.set(0,0,4); scene.add(pt);
311
+
312
+ const root = new THREE.Group(); scene.add(root);
313
+ const goldMat = new THREE.MeshStandardMaterial({color:GOLD, metalness:0.85, roughness:0.32, emissive:0x2a1d08, emissiveIntensity:0.4});
314
+ const slateMat = new THREE.MeshStandardMaterial({color:0x1b2230, metalness:0.6, roughness:0.5});
315
+ const emitMat = new THREE.MeshStandardMaterial({color:WHITE, emissive:WHITE, emissiveIntensity:1.4, metalness:0.2, roughness:0.3});
316
+ const goldEmit = new THREE.MeshStandardMaterial({color:GOLD_HI, emissive:GOLD, emissiveIntensity:1.1});
317
+
318
+ const extras = {}; // per-organ animated handles
319
+
320
+ if(organ==='amaru'){
321
+ // serpent (tube) coiled around a glowing crystal core
322
+ const core = new THREE.Mesh(new THREE.IcosahedronGeometry(0.85,0), emitMat.clone());
323
+ core.material.color.setHex(GOLD_HI); core.material.emissive.setHex(GOLD);
324
+ root.add(core); extras.core = core;
325
+ const pts=[]; const turns=3.2, N=160;
326
+ for(let i=0;i<=N;i++){const t=i/N; const a=t*Math.PI*2*turns; const r=1.5-0.35*t;
327
+ pts.push(new THREE.Vector3(Math.cos(a)*r, (t-0.5)*3.0, Math.sin(a)*r));}
328
+ const tube = new THREE.Mesh(new THREE.TubeGeometry(new THREE.CatmullRomCurve3(pts),200,0.16,10,false), goldMat.clone());
329
+ root.add(tube);
330
+ const head = new THREE.Mesh(new THREE.ConeGeometry(0.26,0.6,8), goldEmit.clone());
331
+ const hp = pts[pts.length-1]; head.position.copy(hp); root.add(head);
332
+ const eyeL=new THREE.Mesh(new THREE.SphereGeometry(0.05,8,8),emitMat); eyeL.position.copy(hp).add(new THREE.Vector3(0.12,0.1,0.12)); root.add(eyeL);
333
+ }
334
+ else if(organ==='sentra'){
335
+ // icosahedron shield with hex panels + threat dots absorbed
336
+ const shield = new THREE.Mesh(new THREE.IcosahedronGeometry(1.5,1),
337
+ new THREE.MeshStandardMaterial({color:0x16202f, metalness:0.7, roughness:0.35, flatShading:true}));
338
+ root.add(shield);
339
+ const wire = new THREE.LineSegments(new THREE.WireframeGeometry(shield.geometry),
340
+ new THREE.LineBasicMaterial({color:GOLD})); root.add(wire);
341
+ const lambda = new THREE.Mesh(new THREE.TorusGeometry(0.55,0.07,8,30), goldEmit.clone());
342
+ root.add(lambda); extras.lambda=lambda;
343
+ const threats=[]; const tg=new THREE.SphereGeometry(0.08,8,8);
344
+ const tm=new THREE.MeshStandardMaterial({color:0xff5a44,emissive:0xff5a44,emissiveIntensity:1.2});
345
+ for(let i=0;i<8;i++){const m=new THREE.Mesh(tg,tm.clone());
346
+ m.userData={a:Math.random()*6.28, r:2.4+Math.random()*0.6, sp:0.6+Math.random()*0.5};
347
+ root.add(m); threats.push(m);} extras.threats=threats;
348
+ }
349
+ else if(organ==='rosie'){
350
+ // torus + sphere stack (head + HUD rings) + pulsing data lines
351
+ const head = new THREE.Mesh(new THREE.SphereGeometry(0.7,24,24), slateMat.clone());
352
+ head.material.color.setHex(0x1d2636); head.position.y=0.2; root.add(head);
353
+ const visor = new THREE.Mesh(new THREE.TorusGeometry(0.55,0.09,10,30), goldEmit.clone());
354
+ visor.rotation.x=Math.PI/2; visor.position.y=0.2; root.add(visor);
355
+ const rings=[];
356
+ for(let i=0;i<3;i++){const r=new THREE.Mesh(new THREE.TorusGeometry(1.0+i*0.42,0.025,8,48),
357
+ new THREE.MeshStandardMaterial({color:GOLD,emissive:GOLD,emissiveIntensity:0.6,transparent:true,opacity:0.8-i*0.18}));
358
+ r.rotation.x=Math.PI/2.1; r.position.y=-0.1; root.add(r); rings.push(r);} extras.rings=rings;
359
+ const base=new THREE.Mesh(new THREE.CylinderGeometry(0.9,1.05,0.18,32), slateMat.clone()); base.position.y=-1.25; root.add(base);
360
+ // pulsing data lines (vertical)
361
+ const lines=[]; for(let i=0;i<6;i++){const a=i/6*6.28;
362
+ const m=new THREE.Mesh(new THREE.BoxGeometry(0.05,1.2,0.05),goldEmit.clone());
363
+ m.position.set(Math.cos(a)*1.3,-0.55,Math.sin(a)*1.3); root.add(m); lines.push(m);} extras.lines=lines;
364
+ }
365
+ else if(organ==='killinchu'){
366
+ // low-poly kestrel over faceted terrain + 53 drone-dots circling
367
+ const terrain=new THREE.Mesh(new THREE.ConeGeometry(2.3,0.7,3,1),
368
+ new THREE.MeshStandardMaterial({color:0x14202c,metalness:0.4,roughness:0.7,flatShading:true}));
369
+ terrain.position.y=-1.6; terrain.rotation.y=0.4; root.add(terrain);
370
+ const bird=new THREE.Group(); bird.position.y=0.5; root.add(bird); extras.bird=bird;
371
+ const body=new THREE.Mesh(new THREE.ConeGeometry(0.22,1.0,6),goldMat.clone());
372
+ body.rotation.x=Math.PI/2; bird.add(body);
373
+ const wgeo=new THREE.BufferGeometry(); const wv=new Float32Array([0,0,0, 1.5,0.15,-0.5, 1.3,-0.05,0.4]);
374
+ wgeo.setAttribute('position',new THREE.BufferAttribute(wv,3)); wgeo.computeVertexNormals();
375
+ const wmat=new THREE.MeshStandardMaterial({color:GOLD_HI,metalness:0.7,roughness:0.4,side:THREE.DoubleSide,flatShading:true});
376
+ const wingL=new THREE.Mesh(wgeo,wmat); const wingR=new THREE.Mesh(wgeo,wmat); wingR.scale.x=-1;
377
+ bird.add(wingL); bird.add(wingR); extras.wingL=wingL; extras.wingR=wingR;
378
+ const eye=new THREE.Mesh(new THREE.SphereGeometry(0.06,8,8),emitMat); eye.position.set(0.08,0.05,0.5); bird.add(eye);
379
+ // 53 drone-dots
380
+ const dg=new THREE.SphereGeometry(0.04,6,6);
381
+ const dm=new THREE.MeshStandardMaterial({color:WHITE,emissive:0x88ccff,emissiveIntensity:1.0});
382
+ const drones=new THREE.InstancedMesh(dg,dm,53); const dummy=new THREE.Object3D(); const dd=[];
383
+ for(let i=0;i<53;i++){dd.push({a:Math.random()*6.28, r:1.6+Math.random()*0.9, y:-0.3+Math.random()*1.4, sp:0.4+Math.random()*0.6});}
384
+ root.add(drones); extras.drones=drones; extras.dd=dd; extras.dummy=dummy;
385
+ }
386
+ else if(organ==='a11oy'){
387
+ // 16-node icosahedron knot-graph (Khipu cords) + edge pulses
388
+ const ico=new THREE.IcosahedronGeometry(1.5,0);
389
+ const pos=ico.attributes.position; const nodes=[]; const seen=new Set();
390
+ for(let i=0;i<pos.count;i++){const v=new THREE.Vector3().fromBufferAttribute(pos,i);
391
+ const k=v.toArray().map(n=>n.toFixed(2)).join(','); if(seen.has(k))continue; seen.add(k); nodes.push(v);}
392
+ const ng=new THREE.SphereGeometry(0.13,12,12);
393
+ nodes.forEach(v=>{const m=new THREE.Mesh(ng,goldEmit.clone()); m.position.copy(v); root.add(m);});
394
+ // knotted edges
395
+ const edgeMat=new THREE.LineBasicMaterial({color:GOLD,transparent:true,opacity:0.6});
396
+ const segs=[]; for(let i=0;i<nodes.length;i++)for(let j=i+1;j<nodes.length;j++){
397
+ if(nodes[i].distanceTo(nodes[j])<1.95){segs.push(nodes[i],nodes[j]);}}
398
+ const eg=new THREE.BufferGeometry().setFromPoints(segs);
399
+ root.add(new THREE.LineSegments(eg, edgeMat));
400
+ // pulse traveling along edges
401
+ const pulse=new THREE.Mesh(new THREE.SphereGeometry(0.1,10,10),emitMat); root.add(pulse);
402
+ extras.pulse=pulse; extras.segs=segs;
403
+ }
404
+
405
+ // touch / mouse rotate (additive — auto-rotate continues unless reduced motion)
406
+ let drag=false, px=0, py=0, vy=0, vx=0;
407
+ const dn=e=>{drag=true; const p=e.touches?e.touches[0]:e; px=p.clientX; py=p.clientY;};
408
+ const mv=e=>{if(!drag)return; const p=e.touches?e.touches[0]:e;
409
+ vy=(p.clientX-px)*0.01; vx=(p.clientY-py)*0.01; root.rotation.y+=vy; root.rotation.x+=vx;
410
+ px=p.clientX; py=p.clientY; if(e.touches)e.preventDefault();};
411
+ const up=()=>{drag=false;};
412
+ canvas.addEventListener('mousedown',dn); canvas.addEventListener('mousemove',mv); window.addEventListener('mouseup',up);
413
+ canvas.addEventListener('touchstart',dn,{passive:true}); canvas.addEventListener('touchmove',mv,{passive:false}); canvas.addEventListener('touchend',up);
414
+
415
+ function resize(){const w=canvas.clientWidth||220, h=canvas.clientHeight||220;
416
+ if(canvas.width!==w*PR||canvas.height!==h*PR){renderer.setSize(w,h,false); cam.aspect=w/h; cam.updateProjectionMatrix();}}
417
+
418
+ cells.push({renderer,scene,cam,root,organ,extras,resize});
419
+ }
420
+
421
+ document.querySelectorAll('#szl-hero-grid canvas').forEach(c=>makeScene(c, c.dataset.organ));
422
+
423
+ let t0=performance.now();
424
+ function loop(now){
425
+ requestAnimationFrame(loop);
426
+ if(document.hidden) return;
427
+ const t=(now-t0)/1000;
428
+ for(const c of cells){
429
+ c.resize();
430
+ if(!SZL_REDUCED) c.root.rotation.y += 0.0045;
431
+ const e=c.extras;
432
+ if(c.organ==='amaru' && e.core){ e.core.rotation.y+=0.02; e.core.scale.setScalar(1+Math.sin(t*2)*0.06); }
433
+ if(c.organ==='sentra'){ if(e.lambda)e.lambda.rotation.z+=0.02;
434
+ (e.threats||[]).forEach(m=>{m.userData.r-=m.userData.sp*0.012; if(m.userData.r<0.6){m.userData.r=2.6;}
435
+ m.userData.a+=0.02; m.position.set(Math.cos(m.userData.a)*m.userData.r, Math.sin(m.userData.a*1.3)*0.6, Math.sin(m.userData.a)*m.userData.r);}); }
436
+ if(c.organ==='rosie'){ (e.rings||[]).forEach((r,i)=>r.rotation.z+=0.01*(i+1));
437
+ (e.lines||[]).forEach((l,i)=>{l.scale.y=0.6+0.5*(0.5+0.5*Math.sin(t*3+i)); l.material.emissiveIntensity=0.6+0.6*(0.5+0.5*Math.sin(t*3+i));}); }
438
+ if(c.organ==='killinchu'){ if(e.bird)e.bird.position.y=0.5+Math.sin(t*1.5)*0.12;
439
+ if(e.wingL){const f=Math.sin(t*5)*0.5; e.wingL.rotation.z=f; e.wingR.rotation.z=-f;}
440
+ if(e.drones){const dummy=e.dummy; e.dd.forEach((d,i)=>{d.a+=d.sp*0.01;
441
+ dummy.position.set(Math.cos(d.a)*d.r,d.y+Math.sin(t+d.a)*0.1,Math.sin(d.a)*d.r);
442
+ dummy.updateMatrix(); e.drones.setMatrixAt(i,dummy.matrix);}); e.drones.instanceMatrix.needsUpdate=true;} }
443
+ if(c.organ==='a11oy' && e.pulse && e.segs.length){
444
+ const seg=Math.floor(t*0.7)%(e.segs.length/2); const a=e.segs[seg*2], b=e.segs[seg*2+1];
445
+ const f=(t*0.7)%1; e.pulse.position.lerpVectors(a,b,f); }
446
+ c.renderer.render(c.scene,c.cam);
447
+ }
448
+ }
449
+ requestAnimationFrame(loop);
450
+ </script>
451
+ <!-- ================= /SZL 3D HERO FIGURES ================= -->
452
 
453
  <!-- BANNER — UNTOUCHED (5-hero painterly artwork is sacred) -->
454
  <section id="banner" style="padding:0;border-top:none;">
455
  <img src="https://huggingface.co/spaces/SZLHOLDINGS/README/resolve/main/assets/szl_banner.png" alt="SZL Holdings — the five-hero governed agentic mesh team" style="display:block;width:100%;height:auto;"/>
456
  </section>
457
 
458
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
459
 
460
  <!-- flag block: five hero portraits as links + org name + icon links + footer -->
461
  <main id="main">
462
  <section style="padding:3.5rem 0;text-align:center;">
463
  <div class="container">
464
 
465
+ <!-- chibi portrait row replaced by 3D heroes (above) + live mesh panel (below) — Yachay -->
 
 
 
 
 
 
466
 
467
  <h1 style="margin-bottom:1.4rem;">SZL&nbsp;Holdings</h1>
468
 
 
475
  </div>
476
  </section>
477
  </main>
478
+ <!-- ============ LIVE MESH + LATEST RECEIPTS (ADDITIVE — Yachay) ============
479
+ Polls /healthz of each flagship live (badge flips green/red) and pulls the
480
+ 5 most recent Khipu receipts across the mesh. Apache-2.0. Doctrine v11 LOCKED. -->
481
+ <section id="szl-live-mesh" style="padding:2.2rem 0;">
482
+ <div class="container">
483
+ <p class="mr-head" style="font-family:var(--font-mono);font-size:0.72rem;letter-spacing:0.18em;text-transform:uppercase;color:var(--gold-dim);margin-bottom:0.2rem;text-align:center;">Live Mesh · /healthz</p>
484
+ <div id="szl-mesh-grid" style="display:grid;grid-template-columns:repeat(5,1fr);gap:0.7rem;margin:1rem 0 0;">
485
+ <div class="szl-mesh-cell" data-organ="amaru"><span class="szl-mesh-name">amaru</span><span class="szl-mesh-badge" data-code="…">…</span></div>
486
+ <div class="szl-mesh-cell" data-organ="sentra"><span class="szl-mesh-name">sentra</span><span class="szl-mesh-badge" data-code="…">…</span></div>
487
+ <div class="szl-mesh-cell" data-organ="rosie"><span class="szl-mesh-name">rosie</span><span class="szl-mesh-badge" data-code="…">…</span></div>
488
+ <div class="szl-mesh-cell" data-organ="killinchu"><span class="szl-mesh-name">killinchu</span><span class="szl-mesh-badge" data-code="…">…</span></div>
489
+ <div class="szl-mesh-cell" data-organ="a11oy"><span class="szl-mesh-name">a11oy</span><span class="szl-mesh-badge" data-code="…">…</span></div>
490
+ </div>
491
+ <p id="szl-receipt-counter" style="text-align:center;font-family:var(--font-mono);font-size:0.8rem;color:var(--gold-light);margin-top:1.1rem;">signed receipts across the mesh: <b data-receipts>—</b></p>
492
+ <div style="max-width:760px;margin:1.2rem auto 0;">
493
+ <p class="mr-head" style="font-family:var(--font-mono);font-size:0.7rem;letter-spacing:0.14em;text-transform:uppercase;color:var(--gold-dim);margin-bottom:0.4rem;text-align:center;">Latest signed receipts</p>
494
+ <ul id="szl-receipt-list" style="list-style:none;padding:0;margin:0;font-family:var(--font-mono);font-size:0.72rem;color:var(--text-muted);">
495
+ <li style="opacity:0.6;text-align:center;padding:0.5rem;">polling Khipu DAG…</li>
496
+ </ul>
497
+ </div>
498
+ </div>
499
+ </section>
500
+ <style id="szl-live-mesh-style">
501
+ .szl-mesh-cell{background:var(--glass,rgba(45,27,78,0.55));border:1px solid var(--border,rgba(212,175,55,0.18));border-radius:12px;padding:0.7rem 0.4rem;text-align:center;display:flex;flex-direction:column;gap:0.4rem;min-height:44px;}
502
+ .szl-mesh-name{font-family:var(--font-mono,monospace);font-size:0.72rem;color:var(--text-muted,#a090c0);letter-spacing:0.04em;}
503
+ .szl-mesh-badge{font-family:var(--font-mono,monospace);font-size:0.78rem;font-weight:600;padding:0.18rem 0.4rem;border-radius:6px;background:rgba(255,255,255,0.06);color:var(--text-dim,#7060a0);}
504
+ .szl-mesh-badge.ok{background:rgba(61,220,132,0.16);color:#3ddc84;}
505
+ .szl-mesh-badge.down{background:rgba(255,90,68,0.16);color:#ff7a59;}
506
+ #szl-receipt-list li{padding:0.4rem 0.6rem;border-bottom:1px solid var(--border,rgba(212,175,55,0.12));overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
507
+ #szl-receipt-list li b{color:var(--gold-light,#e8cc6a);}
508
+ @media(max-width:900px) and (min-width:561px){#szl-mesh-grid{grid-template-columns:repeat(3,1fr);}}
509
+ @media(max-width:560px){#szl-mesh-grid{grid-template-columns:repeat(2,1fr);}}
510
+ </style>
511
+ <script>
512
+ (function(){
513
+ var ORGANS=["amaru","sentra","rosie","killinchu","a11oy"];
514
+ var receipts=[];
515
+ function base(o){return "https://szlholdings-"+o+".hf.space";}
516
+ function pollHealth(){
517
+ ORGANS.forEach(function(o){
518
+ var cell=document.querySelector('.szl-mesh-cell[data-organ="'+o+'"] .szl-mesh-badge');
519
+ if(!cell)return;
520
+ fetch(base(o)+"/healthz",{mode:"cors",cache:"no-store"}).then(function(r){
521
+ cell.textContent=r.status; cell.dataset.code=r.status;
522
+ cell.className="szl-mesh-badge "+(r.ok?"ok":"down");
523
+ }).catch(function(){ cell.textContent="—"; cell.className="szl-mesh-badge down"; });
524
+ });
525
+ }
526
+ function pollReceipts(){
527
+ var total=0, got=0;
528
+ ORGANS.forEach(function(o){
529
+ // metrics counter for running total
530
+ fetch(base(o)+"/metrics",{mode:"cors",cache:"no-store"}).then(function(r){return r.text();}).then(function(t){
531
+ var m=t.match(/(\w*receipts_total)\s+(\d+)/);
532
+ if(m){ total+=parseInt(m[2],10); }
533
+ }).catch(function(){}).finally(function(){
534
+ got++; if(got>=ORGANS.length){var b=document.querySelector('[data-receipts]'); if(b&&total>0)b.textContent=total.toLocaleString();}
535
+ });
536
+ // latest receipts
537
+ fetch(base(o)+"/api/"+o+"/v2/khipu/lmdb/tail?n=2",{mode:"cors",cache:"no-store"}).then(function(r){return r.json();}).then(function(j){
538
+ var arr=(j&&j.receipts)||j&&j.tail||[];
539
+ arr.forEach(function(rec){ receipts.push({organ:o, id:(rec.id||rec.hash||rec.receipt_id||"").toString().slice(0,16), ts:rec.ts||rec.timestamp||""}); });
540
+ renderReceipts();
541
+ }).catch(function(){});
542
+ });
543
+ }
544
+ function renderReceipts(){
545
+ var ul=document.getElementById("szl-receipt-list"); if(!ul)return;
546
+ var latest=receipts.slice(-5).reverse();
547
+ if(!latest.length)return;
548
+ ul.innerHTML=latest.map(function(r){return '<li><b>'+r.organ+'</b> · '+(r.id||'receipt')+' <span style="opacity:0.6;">'+(r.ts||'')+'</span></li>';}).join("");
549
+ }
550
+ pollHealth(); pollReceipts();
551
+ setInterval(pollHealth,5000); setInterval(pollReceipts,15000);
552
+ })();
553
+ </script>
554
+ <!-- ============ /LIVE MESH + LATEST RECEIPTS ============ -->
555
+
556
 
557
  <footer style="text-align:center;padding:1.5rem 0;border-top:1px solid var(--border);">
558
  <!-- Stills strip: the previous static team picture, relocated here from below the banner
559
  when the live Mission Room action band replaced it. Kept as a reference still. -->
560
+ <!-- team-portrait still removed: replaced by 3D heroes (Yachay) -->
561
+ <span class="mono" style="font-size:0.72rem;color:var(--text-dim);">— szl-holdings/.github @ d304951 · Doctrine v11 LOCKED · 749 declarations · 14 unique axioms · 163 sorries · ORCID 0009-0001-0110-4173</span>
 
 
 
562
  </footer>
563
 
564
  <!-- AMBIENT EMOJI LAYER (Wave4, additive) — 5 character emojis hanging around
 
567
  HTML sanitizer), these small 64px images fall to the page bottom instead of
568
  overlaying content; explicit width/height attributes keep them small even
569
  with CSS removed. Animation is gated behind prefers-reduced-motion: no-preference. -->
570
+ <!-- ambient chibi emoji layer removed: replaced by 3D heroes (Yachay) -->
 
 
 
 
 
 
 
571
  </body>
572
  </html>