Consume the upstream Norn graph SPA

This commit is contained in:
Meta Vens 2026-08-27 00:25:57 +02:00
commit 79f0757b8c
10 changed files with 49 additions and 28 deletions

View file

@ -1 +0,0 @@
html,body,#root{width:100%;min-height:100%;margin:0}body{background:radial-gradient(circle at 72% 12%,rgba(255,174,88,.16),transparent 24%),radial-gradient(circle at 10% 18%,rgba(142,223,176,.16),transparent 28%),linear-gradient(180deg,#03070d,#07110f 52%,#091712);color:#effcf8;font-family:Ubuntu,Segoe UI,sans-serif}.gamecult-epiphany-graph-app{box-sizing:border-box;width:100vw;min-height:100vh;padding:0}.gamecult-epiphany-graph-app *{box-sizing:border-box}.gamecult-epiphany-graph-root{position:fixed;inset:0;z-index:1000;width:100vw;height:100vh;min-height:100vh;margin:0!important;border:0!important;border-radius:0!important;background:#03070d}.gamecult-graph-error{white-space:pre-wrap;color:#fecaca;background:#450a0a99;border:1px solid rgba(248,113,113,.45);border-radius:16px;padding:16px}.gamecult-graph-loading{display:grid;min-height:320px;place-items:center;color:#cfeee4;font-size:.95rem}body.gamecult-graph-spa-active{overflow:hidden}.gamecult-graph-shell{width:100vw;height:100vh}.gamecult-graph-shell .epiphany-graph-overlay-panel{opacity:.25;transition:opacity .16s ease,transform .16s ease,box-shadow .16s ease}.gamecult-graph-shell .epiphany-graph-overlay-panel:hover,.gamecult-graph-shell .epiphany-graph-overlay-panel:focus-within{opacity:1;transform:translateY(-1px)}.gamecult-graph-shell aside.epiphany-graph-overlay-panel>section{display:none!important}.gamecult-graph-shell aside.epiphany-graph-overlay-panel>section:last-child{display:grid!important;grid-row:1 / -1}.gamecult-expanded-article-node{box-sizing:border-box;padding:var(--node-pad-y, .62rem) var(--node-pad-x, .82rem);scrollbar-color:rgba(142,223,176,.58) rgba(3,7,13,.32);transition:border-radius .12s ease,box-shadow .12s ease,padding .12s ease,opacity .12s ease}.gamecult-expanded-article-node .gamecult-spa-panel{max-height:none;overflow:visible}.gamecult-spa-panel{min-height:0;max-height:100%;overflow:auto;color:#effcf8}.gamecult-spa-panel h1{max-height:var(--node-title-max-height, 1.12em);margin:0;overflow:hidden;color:#f7fffb;font-size:var(--node-title-size, 1.08rem);line-height:1.04;letter-spacing:0}.gamecult-spa-kicker{margin:0 0 var(--node-kicker-margin, .12rem);color:#8edfb0;font-size:.76rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;opacity:var(--node-preview, 0);transition:opacity .12s ease}.gamecult-spa-summary,.gamecult-spa-status{color:#effcf8c2;line-height:1.55;max-height:var(--node-preview-height, 0rem);margin-block:var(--node-status-margin, 0rem);overflow:hidden;opacity:var(--node-preview, 0)}.gamecult-spa-status{margin:1rem 0;padding:.75rem .9rem;border:1px solid rgba(142,223,176,.16);border-radius:16px;background:#03070d73}.gamecult-spa-status-error{color:#fecaca;border-color:#f8717159}.gamecult-spa-article-header{display:grid;grid-template-columns:var(--node-badge-size, 3rem) minmax(0,1fr);align-items:center;gap:var(--node-panel-gap, .72rem);min-height:var(--node-badge-size, 3rem);margin-bottom:var(--node-header-margin, 0rem)}.gamecult-spa-node-badge{display:grid;width:var(--node-badge-size, 3rem);height:var(--node-badge-size, 3rem);place-items:center;border-radius:999px;background:linear-gradient(160deg,#69e2ef,#c2f5f0);color:#08313a;font-size:var(--node-title-size, 1.08rem);font-weight:900;line-height:1;box-shadow:inset 0 0 0 1px #ffffff47,0 0 var(--node-badge-glow, 1rem) #5eead44d}.gamecult-spa-title-cluster{min-width:0}.gamecult-spa-actions{display:flex;gap:.6rem;flex-wrap:wrap}.gamecult-spa-actions a,.gamecult-spa-note-list button{border:1px solid rgba(142,223,176,.18);border-radius:16px;background:#8edfb014;color:#effcf8}.gamecult-spa-actions a{padding:.5rem .7rem;text-decoration:none}.gamecult-spa-article{color:#effcf8db;line-height:1.65;max-height:var(--node-article-height, 0rem);overflow:hidden;opacity:var(--node-article, 0);transform:translateY(var(--node-article-offset, .65rem));transition:opacity .12s ease,transform .12s ease}.gamecult-spa-article h1{display:none}.gamecult-spa-article h2,.gamecult-spa-article h3{color:#f7fffb;line-height:1.12}.gamecult-spa-article a{color:#ffe0a8}.gamecult-spa-article img{max-width:100%;border-radius:18px}.gamecult-spa-note-list{display:grid;gap:.7rem;max-height:var(--node-note-list-height, 0rem);overflow:hidden;opacity:var(--node-article, 0)}.gamecult-spa-note-list button{display:grid;gap:.35rem;padding:.85rem;text-align:left;cursor:pointer}.gamecult-spa-note-list button:hover{border-color:#ffae5861;background:#ffae581c}.gamecult-spa-note-list strong{color:#f7fffb}.gamecult-spa-note-list span{color:#effcf8ad;font-size:.92rem;line-height:1.45}@media(max-width:900px){.gamecult-graph-shell aside.epiphany-graph-overlay-panel{left:12px;right:12px;top:auto!important;bottom:12px!important;width:auto!important;max-height:48vh}}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
html,body,#root{width:100%;min-height:100%;margin:0}body{background:radial-gradient(circle at 72% 12%,rgba(255,174,88,.16),transparent 24%),radial-gradient(circle at 10% 18%,rgba(142,223,176,.16),transparent 28%),linear-gradient(180deg,#03070d,#07110f 52%,#091712);color:#effcf8;font-family:Ubuntu,Segoe UI,sans-serif}.gamecult-norn-graph-app{box-sizing:border-box;width:100vw;min-height:100vh;padding:0}.gamecult-norn-graph-app *{box-sizing:border-box}.gamecult-norn-graph-root,.gamecult-epiphany-graph-root{position:fixed;inset:0;z-index:1000;width:100vw;height:100vh;min-height:100vh;margin:0!important;border:0!important;border-radius:0!important;background:#03070d}.gamecult-graph-error{white-space:pre-wrap;color:#fecaca;background:#450a0a99;border:1px solid rgba(248,113,113,.45);border-radius:16px;padding:16px}.gamecult-graph-loading{display:grid;min-height:320px;place-items:center;color:#cfeee4;font-size:.95rem}body.gamecult-graph-spa-active{overflow:hidden}.gamecult-graph-shell{width:100vw;height:100vh}.gamecult-graph-shell .norn-overlay-panel{opacity:.25;transition:opacity .16s ease,transform .16s ease,box-shadow .16s ease}.gamecult-graph-shell .norn-overlay-panel:hover,.gamecult-graph-shell .norn-overlay-panel:focus-within{opacity:1;transform:translateY(-1px)}.gamecult-graph-shell aside.norn-overlay-panel>section{display:none!important}.gamecult-graph-shell aside.norn-overlay-panel>section:last-child{display:grid!important;grid-row:1 / -1}.gamecult-expanded-article-node{box-sizing:border-box;padding:var(--node-pad-y, .62rem) var(--node-pad-x, .82rem);scrollbar-color:rgba(142,223,176,.58) rgba(3,7,13,.32);transition:border-radius .12s ease,box-shadow .12s ease,padding .12s ease,opacity .12s ease}.gamecult-expanded-article-node .gamecult-spa-panel{max-height:none;overflow:visible}.gamecult-spa-panel{min-height:0;max-height:100%;overflow:auto;color:#effcf8}.gamecult-spa-panel h1{max-height:var(--node-title-max-height, 1.12em);margin:0;overflow:hidden;color:#f7fffb;font-size:var(--node-title-size, 1.08rem);line-height:1.04;letter-spacing:0}.gamecult-spa-kicker{margin:0 0 var(--node-kicker-margin, .12rem);color:#8edfb0;font-size:.76rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;opacity:var(--node-preview, 0);transition:opacity .12s ease}.gamecult-spa-summary,.gamecult-spa-status{color:#effcf8c2;line-height:1.55;max-height:var(--node-preview-height, 0rem);margin-block:var(--node-status-margin, 0rem);overflow:hidden;opacity:var(--node-preview, 0)}.gamecult-spa-status{margin:1rem 0;padding:.75rem .9rem;border:1px solid rgba(142,223,176,.16);border-radius:16px;background:#03070d73}.gamecult-spa-status-error{color:#fecaca;border-color:#f8717159}.gamecult-spa-article-header{display:grid;grid-template-columns:var(--node-badge-size, 3rem) minmax(0,1fr);align-items:center;gap:var(--node-panel-gap, .72rem);min-height:var(--node-badge-size, 3rem);margin-bottom:var(--node-header-margin, 0rem)}.gamecult-spa-node-badge{display:grid;width:var(--node-badge-size, 3rem);height:var(--node-badge-size, 3rem);place-items:center;border-radius:999px;background:linear-gradient(160deg,#69e2ef,#c2f5f0);color:#08313a;font-size:var(--node-title-size, 1.08rem);font-weight:900;line-height:1;box-shadow:inset 0 0 0 1px #ffffff47,0 0 var(--node-badge-glow, 1rem) #5eead44d}.gamecult-spa-title-cluster{min-width:0}.gamecult-spa-actions{display:flex;gap:.6rem;flex-wrap:wrap}.gamecult-spa-actions a,.gamecult-spa-note-list button{border:1px solid rgba(142,223,176,.18);border-radius:16px;background:#8edfb014;color:#effcf8}.gamecult-spa-actions a{padding:.5rem .7rem;text-decoration:none}.gamecult-spa-article{color:#effcf8db;line-height:1.65;max-height:var(--node-article-height, 0rem);overflow:hidden;opacity:var(--node-article, 0);transform:translateY(var(--node-article-offset, .65rem));transition:opacity .12s ease,transform .12s ease}.gamecult-spa-article h1{display:none}.gamecult-spa-article h2,.gamecult-spa-article h3{color:#f7fffb;line-height:1.12}.gamecult-spa-article a{color:#ffe0a8}.gamecult-spa-article img{max-width:100%;border-radius:18px}.gamecult-spa-note-list{display:grid;gap:.7rem;max-height:var(--node-note-list-height, 0rem);overflow:hidden;opacity:var(--node-article, 0)}.gamecult-spa-note-list button{display:grid;gap:.35rem;padding:.85rem;text-align:left;cursor:pointer}.gamecult-spa-note-list button:hover{border-color:#ffae5861;background:#ffae581c}.gamecult-spa-note-list strong{color:#f7fffb}.gamecult-spa-note-list span{color:#effcf8ad;font-size:.92rem;line-height:1.45}@media(max-width:900px){.gamecult-graph-shell aside.norn-overlay-panel{left:12px;right:12px;top:auto!important;bottom:12px!important;width:auto!important;max-height:48vh}}

File diff suppressed because one or more lines are too long

View file

@ -9,6 +9,6 @@
<link rel="stylesheet" crossorigin href="./assets/viewer.css">
</head>
<body>
<div class="gamecult-epiphany-graph-root"></div>
<div class="gamecult-norn-graph-root"></div>
</body>
</html>

View file

@ -14,23 +14,29 @@ The site follows the same deployment pattern as `AetheriaLore`:
DNS should point `zyphos.gamecult.org` at GitHub Pages, not Yggdrasil.
## EpiphanyGraph Embed
## Norn Graph
The fractal biosphere graph uses a small React/Vite embed around the neighboring
`EpiphanyGraph` viewer source. The embed reads Quartz's generated
The fractal biosphere graph uses GameCult-Quartz's shared graph SPA around the
Norn viewer. The adapter reads Quartz's generated
`/static/contentIndex.json`, turns vault notes into architecture nodes, turns
wiki links into edges, computes incoming backlinks for node metadata, and rolls
folder-level link flow into the dataflow graph.
Quartz does not build this bundle during Pages deploys, so rebuild the static
assets before committing graph embed changes:
GameCult-Quartz owns that adapter; Norn owns graph interaction and rendering.
Zyphos owns its section order, filtering, placement, and styling in
`site/quartz.layout.ts` and `site/quartz/styles/custom.scss`.
The committed bundle was built from GameCult-Quartz revision `1cf053a` and Norn
revision `fa4a46b`. Rebuild it before committing adapter, renderer, or graph-policy
changes:
```powershell
cd "E:\Projects\Eusocial Interbeing\site\epiphany-graph-embed"
npm install
npm run build
node ..\GameCult-Quartz\scripts\build-graph-spa.mjs `
--siteRoot F:\Projects\Zyphos `
--outputDir "Eusocial Interbeing/static/norn-graph" `
--nornRoot F:\Projects\Norn
```
The build writes deployable assets into
`Eusocial Interbeing/static/epiphany-graph/`, which Quartz then copies into the
`Eusocial Interbeing/static/norn-graph/`, which Quartz then copies into the
site output.

View file

@ -6,9 +6,25 @@ import ZyphosSinglePageRedirect from "./quartz/components/ZyphosSinglePageRedire
import ZyphosThemeLock from "./quartz/components/ZyphosThemeLock"
const ZyphosGraphShell = Component.GameCultGraphSpaShell({
stylesheetHref:
"/static/epiphany-graph/assets/viewer.css?v=graph-20260524-flight-option",
moduleSrc: "/static/epiphany-graph/assets/viewer.js?v=graph-20260524-flight-option",
stylesheetHref: "/static/norn-graph/assets/viewer.css?v=norn-fa4a46b",
moduleSrc: "/static/norn-graph/assets/viewer.js?v=norn-fa4a46b",
rootClassName: "gamecult-norn-graph-root zyphos-norn-graph-root",
config: {
title: "Zyphos Biosphere Graph",
architectureDescription:
"Zyphos notes as a navigable ecological atlas. Wiki links connect species, habitats, technologies, conflicts, and the institutions that act through them.",
blockedSlugPrefixes: ["Inspirations/"],
sectionOrder: [
"World",
"Ecology",
"Species",
"Civilizations",
"Technologies",
"Conflicts",
"Themes",
"Root",
],
},
})
export const sharedPageComponents: SharedLayout = {

View file

@ -257,7 +257,7 @@ article th {
border-color: rgba(142, 223, 176, 0.12);
}
.zyphos-epiphany-graph-root {
.zyphos-norn-graph-root {
display: block;
width: 100%;
min-height: 820px;
@ -282,7 +282,7 @@ article th {
margin-inline: -1rem;
}
.zyphos-epiphany-graph-root {
.zyphos-norn-graph-root {
min-height: 780px;
}
}