diff --git a/assets/sw.js b/assets/sw.js
index 0903383..c9ebaff 100644
--- a/assets/sw.js
+++ b/assets/sw.js
@@ -434,8 +434,12 @@ router.get('/api/bookmark', () => bookmarkFragment(''));
// straight in and processes no out-of-band elements -- and
// when a worker first appears under a page boot.html
// composed.
-// chapter=ch3 the verses of that chapter, and land on the chapter.
-// verse=v3_16 the same verses, that one selected, and land on the verse.
+// at=ch3 the verses of that chapter, and land on the chapter.
+// at=v3_16 the same verses, that one selected, and land on the verse.
+//
+// One parameter for both selects: at is the id of the element to land on, and
+// ch3 and v3_16 are told apart by their shape. Which select it came from is
+// not a second fact.
//
// Neither the book nor the anchor is in the URL, deliberately. Both come from
// HX-Current-URL, which htmx sets from location.href on every request it
@@ -467,19 +471,17 @@ router.get('/api/bookmark', () => bookmarkFragment(''));
router.get('/api/reference', async (call) => {
const params = call.url.searchParams;
const page = call.currentUrl();
- // Which select the reader moved, if either did -- by whether the parameter
- // is there, not by whether it says anything. A select posts an empty value
- // when it has no options, and reading that as "no select moved" answers it
- // with a whole picker: htmx swaps a