-
+
+
+
Deciding well is solved. For me. · Robert Blust
diff --git a/blog/deciding-well-solved/og.sha b/blog/deciding-well-solved/og.sha
index 622307c..c33016c 100644
--- a/blog/deciding-well-solved/og.sha
+++ b/blog/deciding-well-solved/og.sha
@@ -1 +1 @@
-bd374b662595438d2a64b876e5b5be50461e7bead089ad51c80660101ab023c8
+3274f855772bd4fcf795724a133bd0d12b2b2b4556527921387f8e7605796e79
diff --git a/blog/index.html b/blog/index.html
index 76edc19..a90c229 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -2,8 +2,10 @@
-
+
+
+
Robert Blust — blog
diff --git a/blog/og.sha b/blog/og.sha
index 11d4d35..d1ddfae 100644
--- a/blog/og.sha
+++ b/blog/og.sha
@@ -1 +1 @@
-159693450fffd0499d27c4771bd1fef9d4fdea78dc8132077fc431dd9e2fe1e0
+fce80270adc14503fff77ff3140a56d4424a989109ba53c5629e536a19157a34
diff --git a/blog/one-question-answered/index.html b/blog/one-question-answered/index.html
index 4cd8892..65be049 100644
--- a/blog/one-question-answered/index.html
+++ b/blog/one-question-answered/index.html
@@ -2,8 +2,10 @@
-
+
+
+
One question answered. One still open. · Robert Blust
diff --git a/blog/one-question-answered/og.sha b/blog/one-question-answered/og.sha
index cca29a2..06060c9 100644
--- a/blog/one-question-answered/og.sha
+++ b/blog/one-question-answered/og.sha
@@ -1 +1 @@
-fc05950ec498af33cfe68fe0052ac42617ff4bcb4967ec3071eb751ec45d8b5a
+4a6701b8391793f15187417f7bc9ce80cdcf5e222cf1fba5c2ca7b25d24da434
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..1932484
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..61f08af
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..8f46ed7
Binary files /dev/null and b/icon-maskable-512.png differ
diff --git a/ideas/index.html b/ideas/index.html
index 4a60139..eb2edd2 100644
--- a/ideas/index.html
+++ b/ideas/index.html
@@ -2,8 +2,10 @@
-
+
+
+
Ideas — Robert Blust
diff --git a/ideas/og.sha b/ideas/og.sha
index 5f31ed9..49926a7 100644
--- a/ideas/og.sha
+++ b/ideas/og.sha
@@ -1 +1 @@
-efb34d150fee15baedbebc1ae578fd7171fdea4e0357534de1d7c80f90ab93d5
+01393f5591b97b8fe31f4d3092560989eca74e4f77b1f307ee2daa1b7a7bcda0
diff --git a/index.html b/index.html
index 8689287..b236914 100644
--- a/index.html
+++ b/index.html
@@ -2,8 +2,10 @@
-
+
+
+
Robert Blust — Software Engineer & Architect
diff --git a/manifest.webmanifest b/manifest.webmanifest
new file mode 100644
index 0000000..19cbeab
--- /dev/null
+++ b/manifest.webmanifest
@@ -0,0 +1,14 @@
+{
+ "name": "Robert Blust",
+ "short_name": "Robert Blust",
+ "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 babeb4b..e262289 100644
--- a/model/index.html
+++ b/model/index.html
@@ -2,10 +2,12 @@
-
+
Model — Robert Blust
+
+
diff --git a/model/og.sha b/model/og.sha
index 61045ad..fad55d8 100644
--- a/model/og.sha
+++ b/model/og.sha
@@ -1 +1 @@
-f5d058c57b8eaf551a82868e0f800b4f484bf1605c84eb216c34b46ba7f0292f
+70aad435ddd178da2c75362f76faa0bf9d1d434f544194fd9c36f33e47b6ec5a
diff --git a/og.sha b/og.sha
index 9a57489..b6c58dd 100644
--- a/og.sha
+++ b/og.sha
@@ -1 +1 @@
-49b0520b27bf571c8eafd5d34fc33f6a0014f6e543df2de49437efdb31b82c0b
+65d2597f4e1a5d9e3a3e455b344da59db0e410054728e59858f8db33db1c4b83
diff --git a/package-lock.json b/package-lock.json
index 04e167a..8f3f702 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"
@@ -95,8 +95,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 9bd061e..84fe180 100644
--- a/package.json
+++ b/package.json
@@ -29,7 +29,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 ee7c5f1..e6498dd 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 a[aria-current="page"]{color:var(--c-firm)}
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 b5c2a9d..16ca570 100644
--- a/principles/index.html
+++ b/principles/index.html
@@ -2,10 +2,12 @@
-
+
Principles — Robert Blust
+
+
diff --git a/principles/og.sha b/principles/og.sha
index dd361e8..577878e 100644
--- a/principles/og.sha
+++ b/principles/og.sha
@@ -1 +1 @@
-f45905b861b5f56bb3f0ac6491144203cc73a6e6b237d8c6dfafad7bfd84e0b1
+f40876c7addb3c12b0bfa968bc158e23ff76d73830c227b55ce241847e4f81e6
diff --git a/privacy/index.html b/privacy/index.html
index e60c0b8..0bd417b 100644
--- a/privacy/index.html
+++ b/privacy/index.html
@@ -2,10 +2,12 @@
-
+
Privacy — Robert Blust
+
+
diff --git a/privacy/og.sha b/privacy/og.sha
index bafcb97..c83e771 100644
--- a/privacy/og.sha
+++ b/privacy/og.sha
@@ -1 +1 @@
-7fe64499c47835e939288df92bc1f361a7b5a82b1457756966280895300c5b4a
+7e299a2a5f93af2981aa4d3955986d0ee0d75a413853dca0cb089a0aec247bf9
diff --git a/processes/index.html b/processes/index.html
index 688bf29..66c7efa 100644
--- a/processes/index.html
+++ b/processes/index.html
@@ -2,10 +2,12 @@
-
+
Processes — Robert Blust
+
+
diff --git a/processes/og.sha b/processes/og.sha
index e644e88..07a939b 100644
--- a/processes/og.sha
+++ b/processes/og.sha
@@ -1 +1 @@
-2221bcc0b19df3bb7b73174860ea24a8e7861b5b9dffe65abf28cb8d5189b4de
+4afce114c4e16545b9b288a7597f85bb60fd08a7e1ff8f08f36b2f91c5f27622
diff --git a/surfaces/index.html b/surfaces/index.html
index 207c791..766130d 100644
--- a/surfaces/index.html
+++ b/surfaces/index.html
@@ -2,10 +2,12 @@
-
+
Surfaces — Robert Blust
+
+
diff --git a/surfaces/og.sha b/surfaces/og.sha
index 73cd911..4ed149e 100644
--- a/surfaces/og.sha
+++ b/surfaces/og.sha
@@ -1 +1 @@
-b592f2a14943bcebe661077b4f365787d797a668f19e444d5e5fb3ab5ba7fc36
+c67f6848cca0ce229f405efd5626842b7052fa3f821fe4f0db62861a6d70de05
diff --git a/talks/deciding-well/cost/index.html b/talks/deciding-well/cost/index.html
index be1074f..37ea651 100644
--- a/talks/deciding-well/cost/index.html
+++ b/talks/deciding-well/cost/index.html
@@ -2,10 +2,12 @@
-
+
What a team would have cost — Robert Blust
+
+
diff --git a/talks/deciding-well/cost/og.sha b/talks/deciding-well/cost/og.sha
index f195bad..84d3b81 100644
--- a/talks/deciding-well/cost/og.sha
+++ b/talks/deciding-well/cost/og.sha
@@ -1 +1 @@
-3b333865ff23a1a27ef5efa792624358fa0ab9c0638c5f215f6de31c8d962b5c
+8bec185abb822e06c7f172a220a6cda8df6d65852a00fa57268b3c3f4ece6b53
diff --git a/talks/deciding-well/index.html b/talks/deciding-well/index.html
index af02275..9625940 100644
--- a/talks/deciding-well/index.html
+++ b/talks/deciding-well/index.html
@@ -2,8 +2,10 @@
-
+
+
+