-
+
API — GuestGraph
+
+
diff --git a/api/og.sha b/api/og.sha
index 63d7424..50d955d 100644
--- a/api/og.sha
+++ b/api/og.sha
@@ -1 +1 @@
-02cbb467db5b72734f7a16c291a325c7600e54d5c9a270bd7fef59d01f3c6f68
+7f89701236e9f0dd971c0d4918f4fe8147cdaaf6d41f150ddffba01b168e8c57
diff --git a/billing/index.html b/billing/index.html
index 51d63a1..11611ab 100644
--- a/billing/index.html
+++ b/billing/index.html
@@ -2,10 +2,12 @@
-
+
Billing — GuestGraph
+
+
diff --git a/billing/og.sha b/billing/og.sha
index 3c2dea6..a03d077 100644
--- a/billing/og.sha
+++ b/billing/og.sha
@@ -1 +1 @@
-0e20ece60c5ce29baca8d8bab674af671d82e1be872f622fafb614cccc114804
+1250801f73db9fda8d674e1db6b61b021aa5bc4d1fd75b2048aaa1c792e05415
diff --git a/deck.js b/deck.js
index 4be611b..3749037 100644
--- a/deck.js
+++ b/deck.js
@@ -1,4 +1,4 @@
-// @robertblust/design — deck.js, assembled from the shared blocks: theme v5 · runtime v10 ·
+// @robertblust/design — deck.js, assembled from the shared blocks: theme v6 · runtime v10 ·
// fit v1.
// Editing this file in a site does nothing: the next npm run design overwrites it.
@@ -58,6 +58,26 @@ function applyTheme(){
}
function setTheme(v){ theme = v; themeRemember(v); applyTheme(); }
+/* A page opened from a phone's home screen has Android paint its system bars from the page's
+ `theme-color`. A page declares that meta with dark's ground, the default, and this keeps it
+ on the ground of the theme the visitor actually sees. It watches `data-theme` rather than
+ hooking `applyTheme`, because a page may switch the theme with a copy of its own — blust.ch's
+ pages do — and the attribute is the one thing every switch sets. The color is read from the
+ tokens rather than restated here, so a re-picked ground moves the bars with it. A page
+ without the meta is left as it is. */
+function themeColor(){
+ try {
+ var tc = document.querySelector('meta[name="theme-color"]');
+ if (!tc) return;
+ var g = getComputedStyle(document.documentElement).getPropertyValue("--ground").trim();
+ if (g) tc.setAttribute("content", g);
+ } catch (e) {}
+}
+themeColor();
+try {
+ new MutationObserver(themeColor).observe(document.documentElement, { attributes: true, attributeFilter: ["data-theme"] });
+} catch (e) {}
+
var slides = Array.prototype.slice.call(document.querySelectorAll('.slide'));
// slide numbering is zero-based everywhere the viewer can see it: the kicker on each
// slide, the transport's display window, and the audio filenames all say the same number.
diff --git a/icon-192.png b/icon-192.png
new file mode 100644
index 0000000..8aafb08
Binary files /dev/null and b/icon-192.png differ
diff --git a/icon-512.png b/icon-512.png
new file mode 100644
index 0000000..e060910
Binary files /dev/null and b/icon-512.png differ
diff --git a/icon-maskable-512.png b/icon-maskable-512.png
new file mode 100644
index 0000000..fbc8bc0
Binary files /dev/null and b/icon-maskable-512.png differ
diff --git a/index.html b/index.html
index c2e837a..5b7a8b2 100644
--- a/index.html
+++ b/index.html
@@ -2,10 +2,12 @@
-
+
GuestGraph — the open-source guest identity graph
+
+
diff --git a/manifest.webmanifest b/manifest.webmanifest
new file mode 100644
index 0000000..a90af4d
--- /dev/null
+++ b/manifest.webmanifest
@@ -0,0 +1,14 @@
+{
+ "name": "GuestGraph",
+ "short_name": "GuestGraph",
+ "start_url": "/",
+ "scope": "/",
+ "display": "standalone",
+ "background_color": "#0C0E13",
+ "theme_color": "#0C0E13",
+ "icons": [
+ { "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" },
+ { "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" },
+ { "src": "/icon-maskable-512.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable" }
+ ]
+}
diff --git a/model/index.html b/model/index.html
index 3c568ec..b6536e5 100644
--- a/model/index.html
+++ b/model/index.html
@@ -2,10 +2,12 @@
-
+
Model — GuestGraph
+
+
diff --git a/model/og.sha b/model/og.sha
index db9837a..4a1b432 100644
--- a/model/og.sha
+++ b/model/og.sha
@@ -1 +1 @@
-42a1b3d74a3ae0c49bef54f027e28ab85acd78c908104e68a2c2f0c2f222bb9f
+16ba3c1bf9e5f3bd1e31826bb56a3be50992912d351fa50461fd66251ba06977
diff --git a/og.sha b/og.sha
index d9f73a1..89576a9 100644
--- a/og.sha
+++ b/og.sha
@@ -1 +1 @@
-5bcf8837c4e2a0c81533477c7bbd6bf9ce7681e1064b75e1af372aa15f8e97a3
+cada76bf87f458158c3d785d1deaf9d79c2611b93cb90c8362e7a61fd530b44f
diff --git a/package-lock.json b/package-lock.json
index 72295b2..e2321be 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,7 +11,7 @@
"companygraph-meta-model": "github:companygraph/meta-model#v0.94.0"
},
"devDependencies": {
- "@robertblust/design": "github:robertblust/design#v0.156.0",
+ "@robertblust/design": "github:robertblust/design#v0.157.0",
"companygraph-mcp-server": "github:companygraph/mcp-server#v0.69.0",
"pdf-lib": "^1.17.1",
"playwright": "^1.63.0",
@@ -96,8 +96,8 @@
}
},
"node_modules/@robertblust/design": {
- "version": "0.156.0",
- "resolved": "git+ssh://git@github.com/robertblust/design.git#e9ae31386c3af4f16cd1f83faa0df5514ff56f6a",
+ "version": "0.157.0",
+ "resolved": "git+ssh://git@github.com/robertblust/design.git#fcd879fa7b86610fad28217bafb7df2aa7d1ee05",
"dev": true,
"license": "Apache-2.0",
"bin": {
diff --git a/package.json b/package.json
index 5cf3f7e..3e60cf2 100644
--- a/package.json
+++ b/package.json
@@ -25,7 +25,7 @@
"pin:check": "node pin-check.mjs"
},
"devDependencies": {
- "@robertblust/design": "github:robertblust/design#v0.156.0",
+ "@robertblust/design": "github:robertblust/design#v0.157.0",
"companygraph-mcp-server": "github:companygraph/mcp-server#v0.69.0",
"pdf-lib": "^1.17.1",
"playwright": "^1.63.0",
diff --git a/page.css b/page.css
index f4dcf3a..1420e06 100644
--- a/page.css
+++ b/page.css
@@ -1,5 +1,5 @@
/* @robertblust/design — page.css, assembled from the shared blocks: reset v3 · link v1 ·
- header v18 · title v2 · lines v3 · footer v3 · principles v1 · processes v1 · surfaces v2 ·
+ header v18 · title v2 · lines v3 · footer v4 · principles v1 · processes v1 · surfaces v2 ·
index v2 · home v1.
Editing this file in a site does nothing: the next npm run design overwrites it. */
@@ -241,7 +241,7 @@ nav a[aria-current="page"]{color:var(--c-firm)}
.keyline{margin:.6rem 0 1.4rem; max-width:54ch; font-size:1.2rem; font-weight:500;
line-height:1.45; color:var(--c-firm); text-wrap:balance}
-footer{padding:0 0 2rem; display:flex; flex-wrap:wrap; gap:.9rem 2.6rem; align-items:center;
+footer{padding:0 0 calc(2rem + env(safe-area-inset-bottom)); display:flex; flex-wrap:wrap; gap:.9rem 2.6rem; align-items:center;
font-family:"Plex Mono",monospace; font-size:.76rem; letter-spacing:.08em; color:var(--dim)}
footer .credit{display:inline-flex; align-items:center; gap:.5em; vertical-align:-.25em;
font-family:"Instrument Sans", ui-sans-serif, system-ui, sans-serif;
diff --git a/page.js b/page.js
index 1ade9c2..a030d9b 100644
--- a/page.js
+++ b/page.js
@@ -1,4 +1,4 @@
-// @robertblust/design — page.js, assembled from the shared blocks: lang v5 · theme v5 ·
+// @robertblust/design — page.js, assembled from the shared blocks: lang v5 · theme v6 ·
// navFit v3.
// Editing this file in a site does nothing: the next npm run design overwrites it.
@@ -136,6 +136,26 @@ function applyTheme(){
}
function setTheme(v){ theme = v; themeRemember(v); applyTheme(); }
+/* A page opened from a phone's home screen has Android paint its system bars from the page's
+ `theme-color`. A page declares that meta with dark's ground, the default, and this keeps it
+ on the ground of the theme the visitor actually sees. It watches `data-theme` rather than
+ hooking `applyTheme`, because a page may switch the theme with a copy of its own — blust.ch's
+ pages do — and the attribute is the one thing every switch sets. The color is read from the
+ tokens rather than restated here, so a re-picked ground moves the bars with it. A page
+ without the meta is left as it is. */
+function themeColor(){
+ try {
+ var tc = document.querySelector('meta[name="theme-color"]');
+ if (!tc) return;
+ var g = getComputedStyle(document.documentElement).getPropertyValue("--ground").trim();
+ if (g) tc.setAttribute("content", g);
+ } catch (e) {}
+}
+themeColor();
+try {
+ new MutationObserver(themeColor).observe(document.documentElement, { attributes: true, attributeFilter: ["data-theme"] });
+} catch (e) {}
+
(function(){
var root = document.documentElement, bar = document.querySelector(".bar");
// Loud, because the quiet version cost an afternoon. This fence belongs at the end of the
diff --git a/principles/index.html b/principles/index.html
index 1247f14..cf43889 100644
--- a/principles/index.html
+++ b/principles/index.html
@@ -2,10 +2,12 @@
-
+
Principles — GuestGraph
+
+
diff --git a/principles/og.sha b/principles/og.sha
index 6ad7e72..c2c30c8 100644
--- a/principles/og.sha
+++ b/principles/og.sha
@@ -1 +1 @@
-5488e06d1a8ea72a2253c6cc5dfd17da50ea6ac6091c3d03544be3d10a135545
+fa8d76d1b655591c7806c94c7ad8983cb55969b0ac6eb4cfe1c1410c9459d3cd
diff --git a/privacy/index.html b/privacy/index.html
index 6edc3ea..839a6bd 100644
--- a/privacy/index.html
+++ b/privacy/index.html
@@ -2,10 +2,12 @@
-
+
Privacy — GuestGraph
+
+
diff --git a/privacy/og.sha b/privacy/og.sha
index 1b86839..82160f2 100644
--- a/privacy/og.sha
+++ b/privacy/og.sha
@@ -1 +1 @@
-2ea411a14fc97ab48ff05bbb4e573f24f3715d127fe2b1dd9b9c572ea6039653
+d19136ba2f21a6c690db6799d4b913d54d537a949e49087702f213698b695a72
diff --git a/problems/index.html b/problems/index.html
index 8c36d81..6ebdc75 100644
--- a/problems/index.html
+++ b/problems/index.html
@@ -2,10 +2,12 @@
-
+
Problems — GuestGraph
+
+
diff --git a/problems/og.sha b/problems/og.sha
index ee0873d..2a5ba36 100644
--- a/problems/og.sha
+++ b/problems/og.sha
@@ -1 +1 @@
-1c1fd91883ecb85e5df984abdddec51c6579ea4dfaca9461695cc055f2912c99
+d52d08c4f6cdaabea8d3c4268a76d5a2697264811dc0cec6b699015f58abcef5
diff --git a/processes/index.html b/processes/index.html
index 7eee019..d90e299 100644
--- a/processes/index.html
+++ b/processes/index.html
@@ -2,10 +2,12 @@
-
+
Processes — GuestGraph
+
+
diff --git a/processes/og.sha b/processes/og.sha
index 69b8de0..f99ec2f 100644
--- a/processes/og.sha
+++ b/processes/og.sha
@@ -1 +1 @@
-ec12a703b14f241bda2fd59bc411dc9718d035546647680052cf57628ab8862b
+19923a20e8a741985e615962ecc597fca013c7791210b223a78098a15e2eed51
diff --git a/surfaces/index.html b/surfaces/index.html
index 6ee009e..f3c05dc 100644
--- a/surfaces/index.html
+++ b/surfaces/index.html
@@ -2,10 +2,12 @@
-
+
Surfaces — GuestGraph
+
+
diff --git a/surfaces/og.sha b/surfaces/og.sha
index 7d73ab5..09e5bae 100644
--- a/surfaces/og.sha
+++ b/surfaces/og.sha
@@ -1 +1 @@
-3c5ad94ad402d5c2b49b9852a072e3c428ea26de34330e314c9d0cb181a32d9b
+bfa578034b95bcbde96af762ed49055bd8818e8960331f0b54012ddf5a2bf46c
diff --git a/talks/index.html b/talks/index.html
index 6a4c849..b02c4e5 100644
--- a/talks/index.html
+++ b/talks/index.html
@@ -2,8 +2,10 @@
-
+
+
+