@bongos/core 1.24.81 → 1.24.83

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/.bongos-core.json +95 -80
  2. package/clients/bongos-client/README.md +1 -1
  3. package/clients/bongos-client/bongos-client.global.js +4 -0
  4. package/clients/bongos-client/index.cjs +4 -0
  5. package/clients/bongos-client/index.d.ts +5 -0
  6. package/clients/bongos-client/index.mjs +4 -0
  7. package/docs/adr/0402-helm-is-the-halls-look-and-the-hall-is-dark-only.md +4 -0
  8. package/docs/api/openapi.json +86 -2
  9. package/docs/api-reference.md +4 -2
  10. package/docs/copy-inventory.md +39 -33
  11. package/docs/copy-registry.json +107 -52
  12. package/docs/module-api-changelog.md +4 -0
  13. package/docs/page-inventory.json +1 -0
  14. package/docs/page-readings.json +207 -201
  15. package/modules/builder-settings/hall-view-prefs.js +50 -0
  16. package/modules/builder-settings/routes/settings.js +32 -0
  17. package/modules/hall-ui/public/ai-studio.html +3 -3
  18. package/modules/hall-ui/public/atlas.html +3 -3
  19. package/modules/hall-ui/public/blockers.html +3 -3
  20. package/modules/hall-ui/public/board-room.html +3 -3
  21. package/modules/hall-ui/public/city.html +5 -5
  22. package/modules/hall-ui/public/collab.html +3 -3
  23. package/modules/hall-ui/public/commands.html +3 -3
  24. package/modules/hall-ui/public/controls.css +10 -2
  25. package/modules/hall-ui/public/copy-desk.html +3 -3
  26. package/modules/hall-ui/public/deploy.html +3 -3
  27. package/modules/hall-ui/public/goal-map.html +5 -5
  28. package/modules/hall-ui/public/goals.html +3 -3
  29. package/modules/hall-ui/public/government.html +3 -3
  30. package/modules/hall-ui/public/idea.html +3 -3
  31. package/modules/hall-ui/public/ideas.html +3 -3
  32. package/modules/hall-ui/public/index.html +6 -6
  33. package/modules/hall-ui/public/market-watch-item.html +3 -3
  34. package/modules/hall-ui/public/market-watch-rules.html +3 -3
  35. package/modules/hall-ui/public/market-watch.html +3 -3
  36. package/modules/hall-ui/public/modules.html +3 -3
  37. package/modules/hall-ui/public/money.html +3 -3
  38. package/modules/hall-ui/public/my-agents.html +3 -3
  39. package/modules/hall-ui/public/options-menu.js +22 -1
  40. package/modules/hall-ui/public/primer.html +3 -3
  41. package/modules/hall-ui/public/profile.html +3 -3
  42. package/modules/hall-ui/public/project-settings.html +3 -3
  43. package/modules/hall-ui/public/roster.html +3 -3
  44. package/modules/hall-ui/public/settings-view.js +75 -0
  45. package/modules/hall-ui/public/settings.css +113 -46
  46. package/modules/hall-ui/public/settings.html +18 -5
  47. package/modules/hall-ui/public/shell-game.css +10 -0
  48. package/modules/hall-ui/public/shell-game.js +98 -33
  49. package/modules/hall-ui/public/shell.js +4 -3
  50. package/modules/hall-ui/public/street.html +3 -3
  51. package/modules/hall-ui/public/studio.html +3 -3
  52. package/modules/hall-ui/public/style.css +149 -61
  53. package/modules/hall-ui/public/task.html +3 -3
  54. package/modules/hall-ui/public/thinking.html +5 -5
  55. package/modules/hall-ui/public/tweak-editor.html +3 -3
  56. package/modules/hall-ui/public/visor.css +2 -2
  57. package/modules/hall-ui/public/visor.js +7 -1
  58. package/modules/hall-ui/public/watch.html +3 -3
  59. package/modules/hall-ui/public/work.html +3 -3
  60. package/modules/hall-ui/records/craft-mode.md +9 -0
  61. package/modules/hall-ui/records/game-mode.md +5 -4
  62. package/modules/hall-ui/records/options-menu.md +11 -0
  63. package/modules/hall-ui/records/start-screen.md +4 -0
  64. package/package-lock.json +2 -2
  65. package/package.json +1 -1
  66. package/release-notes.json +12 -0
  67. package/scripts/hall-preview/pref-writes.js +8 -1
  68. package/src/module-api.js +1 -1
  69. package/tests/design_tokens_shared.mjs +5 -1
  70. package/tests/hall_controls.mjs +1 -1
  71. package/tests/hall_fullscreen.mjs +42 -21
  72. package/tests/hall_helm.mjs +103 -1
  73. package/tests/hall_start_screen.mjs +38 -3
  74. package/tests/hall_topbar_320.mjs +7 -4
  75. package/tests/hall_view_prefs.mjs +42 -0
  76. package/tests/hall_visor.mjs +3 -2
  77. package/tests/nav_permission_atoms.mjs +1 -1
@@ -0,0 +1,50 @@
1
+ // modules/builder-settings/hall-view-prefs.js — which view of the hall a builder
2
+ // uses: the GAME or CLASSIC (task 1005200, BONGOS-V3; owner, 2026-11-11).
3
+ //
4
+ // The two views never mix. Classic is the hall as it always was; game is full
5
+ // screen, the game places only, with the visor (modules/hall-ui/public/shell-game.js).
6
+ // A builder picks one at every sign-in and switches only in Options → Preferences
7
+ // → View, and the choice follows them to any browser — so it is SERVER-side, not
8
+ // localStorage (the browser keeps a copy only so a page can paint the right view
9
+ // before this read answers).
10
+ //
11
+ // Storage: one reserved key ('hall_view') inside the `behavior_prefs` jsonb on
12
+ // `builders` (migration 119 — the blob the wandering/render/interaction knobs
13
+ // share), so this adds NO migration. A missing key means "never chosen": the
14
+ // sign-in chooser asks, and nothing else assumes a view for them.
15
+ //
16
+ // This is a look, never authority: it hides no route and gates nothing (ADR 0016).
17
+
18
+ const RESERVED_KEY = 'hall_view';
19
+ const VIEWS = ['game', 'classic'];
20
+
21
+ // The stored view, or null when the builder has never chosen.
22
+ function storedView(behaviorPrefs) {
23
+ const raw = behaviorPrefs && behaviorPrefs[RESERVED_KEY];
24
+ return VIEWS.includes(raw) ? raw : null;
25
+ }
26
+
27
+ function describeForApi(behaviorPrefs) {
28
+ return { view: storedView(behaviorPrefs), views: VIEWS.slice() };
29
+ }
30
+
31
+ // A PATCH body: { view: 'game' | 'classic' }. Anything else → 422.
32
+ function validatePatch(body) {
33
+ if (body == null || typeof body !== 'object' || Array.isArray(body)) {
34
+ return { ok: false, errors: [{ error: 'body_must_be_object' }] };
35
+ }
36
+ const errors = [];
37
+ for (const key of Object.keys(body)) {
38
+ if (key !== 'view') errors.push({ key, error: 'unknown_key', allowed: ['view'] });
39
+ }
40
+ if (!VIEWS.includes(body.view)) errors.push({ key: 'view', error: 'invalid_value', value: body.view, allowed: VIEWS });
41
+ if (errors.length > 0) return { ok: false, errors };
42
+ return { ok: true, view: body.view };
43
+ }
44
+
45
+ // Pure: the builder's behavior_prefs with the view set; sibling keys untouched.
46
+ function applyView(existing, view) {
47
+ return { ...(existing || {}), [RESERVED_KEY]: view };
48
+ }
49
+
50
+ module.exports = { RESERVED_KEY, VIEWS, storedView, describeForApi, validatePatch, applyView };
@@ -31,6 +31,7 @@ const lawLocks = require('../law-locks');
31
31
  const renderPrefs = require('../render-prefs');
32
32
  const profileNudgePrefs = require('../profile-nudge-prefs');
33
33
  const coreMoveSeen = require('../core-move-seen');
34
+ const hallViewPrefs = require('../hall-view-prefs'); // task 1005200
34
35
  const checkoutFreshness = require('../checkout-freshness'); // task 1005021
35
36
  const displayName = require('../display-name');
36
37
  const filterViews = require('../filter-views');
@@ -518,6 +519,37 @@ module.exports = function buildBuilderSettingsRouter() {
518
519
  }
519
520
  });
520
521
 
522
+ // Which view of the hall this builder uses, game or classic (task 1005200,
523
+ // hall-view-prefs.js): asked at every sign-in, switched in Options → View, and
524
+ // kept on the account so it follows them to any browser. A look, never authority.
525
+ // Body: { view: 'game' | 'classic' }.
526
+ //
527
+ // rank: any-builder — own view choice; same posture as /me/profile-nudge.
528
+ router.get('/me/hall-view', api.requireBuilder, async (req, res) => {
529
+ try {
530
+ res.json(hallViewPrefs.describeForApi(await db.getBuilderBehaviorPrefs(req.builder.id)));
531
+ } catch (err) {
532
+ log.error('GET /me/hall-view', err);
533
+ res.fail('read_failed', { status: 500, message: 'internal error' });
534
+ }
535
+ });
536
+ // rank: any-builder — own view choice; same posture as /me/profile-nudge.
537
+ router.patch('/me/hall-view', api.requireBuilder, async (req, res) => {
538
+ if (api.validateOrRespond(req, res, {
539
+ view: { required: true, type: 'string', maxLength: 16 },
540
+ }, { strict: true })) return undefined;
541
+ try {
542
+ const v = hallViewPrefs.validatePatch(req.body || {});
543
+ if (!v.ok) return res.fail('invalid_patch', 422, { errors: v.errors });
544
+ const existing = await db.getBuilderBehaviorPrefs(req.builder.id);
545
+ const saved = await db.setBuilderBehaviorPrefs(req.builder.id, hallViewPrefs.applyView(existing, v.view));
546
+ res.json(hallViewPrefs.describeForApi(saved));
547
+ } catch (err) {
548
+ log.error('PATCH /me/hall-view', err);
549
+ res.fail('write_failed', { status: 500, message: 'internal error' });
550
+ }
551
+ });
552
+
521
553
  // How far behind this builder's local project folder is (task 1005021,
522
554
  // checkout-freshness.js). Written by their own session start; read back by GET /me,
523
555
  // which tells the person (and their agent) when the folder could not update itself.
@@ -10,7 +10,7 @@
10
10
  <link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
11
11
  <link rel="preconnect" href="https://fonts.googleapis.com">
12
12
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
13
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
13
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
14
14
  <link rel="stylesheet" href="/builders/studio.css?v=2026-10-09-day">
15
15
  <link rel="stylesheet" href="/builders/ai-studio.css?v=2026-10-29-ais1">
16
16
  </head>
@@ -89,10 +89,10 @@
89
89
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
90
90
 
91
91
  <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
92
- <script src="/builders/shell-game.js?v=2026-11-11-helm"></script>
92
+ <script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
93
93
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
94
94
  <script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
95
- <script src="/builders/shell.js?v=2026-11-11-helm"></script>
95
+ <script src="/builders/shell.js?v=2026-11-11-view2"></script>
96
96
  <script src="/builders/hall-dialog.js"></script>
97
97
  <script src="/builders/palette.js" defer></script>
98
98
  <script src="/builders/tweak-editor-lib.js?v=2026-09-28-tw23"></script>
@@ -8,7 +8,7 @@
8
8
  <link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
11
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
12
12
  <!-- task 1003472: the island index under the map is a run of oversight rows,
13
13
  and the detail panel's facts are the family's lines, so the family sheet
14
14
  loads first and atlas.css holds only the scene. -->
@@ -90,10 +90,10 @@
90
90
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
91
91
 
92
92
  <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
93
- <script src="/builders/shell-game.js?v=2026-11-11-helm"></script>
93
+ <script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
94
94
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
95
95
  <script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
96
- <script src="/builders/shell.js?v=2026-11-11-helm"></script>
96
+ <script src="/builders/shell.js?v=2026-11-11-view2"></script>
97
97
  <script src="/builders/hall-dialog.js"></script>
98
98
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
99
99
  <script src="/builders/palette.js" defer></script>
@@ -8,7 +8,7 @@
8
8
  <link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
11
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
12
12
  <link rel="stylesheet" href="/builders/hall-ask.css">
13
13
  <!-- task 1003455: the row shape (title + facts) is the oversight family's,
14
14
  the same archetype collab/copy-desk/watch/gate already ride. -->
@@ -59,10 +59,10 @@
59
59
  <!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
60
60
  chrome exists before the page script runs. -->
61
61
  <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
62
- <script src="/builders/shell-game.js?v=2026-11-11-helm"></script>
62
+ <script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
63
63
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
64
64
  <script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
65
- <script src="/builders/shell.js?v=2026-11-11-helm"></script>
65
+ <script src="/builders/shell.js?v=2026-11-11-view2"></script>
66
66
  <script src="/builders/hall-dialog.js"></script>
67
67
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
68
68
  <script src="/builders/palette.js" defer></script>
@@ -8,7 +8,7 @@
8
8
  <link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
11
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
12
12
  <link rel="stylesheet" href="/builders/hall-ask.css">
13
13
  <link rel="stylesheet" href="/builders/oversight.css">
14
14
  <!-- The room's own sheet: the sitting card and the ballot controls moved here
@@ -61,10 +61,10 @@
61
61
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
62
62
 
63
63
  <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
64
- <script src="/builders/shell-game.js?v=2026-11-11-helm"></script>
64
+ <script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
65
65
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
66
66
  <script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
67
- <script src="/builders/shell.js?v=2026-11-11-helm"></script>
67
+ <script src="/builders/shell.js?v=2026-11-11-view2"></script>
68
68
  <script src="/builders/hall-dialog.js"></script>
69
69
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
70
70
  <script src="/builders/palette.js" defer></script>
@@ -11,8 +11,8 @@
11
11
  links, injected into this head by the server like every hall page's
12
12
  (tests/hall_tokens.mjs: no hall page hardcodes a web-font stylesheet).
13
13
  The prototype carried its own Google Fonts link for the same two faces. -->
14
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
15
- <link rel="stylesheet" href="/builders/visor.css?v=2026-11-10-visor">
14
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
15
+ <link rel="stylesheet" href="/builders/visor.css?v=2026-11-11-helm2">
16
16
  <link rel="stylesheet" href="/builders/city.css?v=2026-11-11-helm">
17
17
  <!-- the ask card in the glass language, shared with the street's deck (task 1004702) -->
18
18
  <link rel="stylesheet" href="/builders/street-deck.css?v=2026-10-17-tidy">
@@ -104,13 +104,13 @@
104
104
  </div>
105
105
 
106
106
  <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
107
- <script src="/builders/shell-game.js?v=2026-11-11-helm" defer></script>
107
+ <script src="/builders/shell-game.js?v=2026-11-11-view2" defer></script>
108
108
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers" defer></script>
109
109
  <script src="/builders/craft-mode.js?v=2026-11-10-visor" defer></script>
110
- <script src="/builders/shell.js?v=2026-11-11-helm" defer></script>
110
+ <script src="/builders/shell.js?v=2026-11-11-view2" defer></script>
111
111
  <script src="/builders/hall-dialog.js" defer></script>
112
112
  <!-- task 1005148: the visor (glass over the scene, game mode only; ADR 0399), after the shell and hall-dialog.js -->
113
- <script src="/builders/visor.js?v=2026-11-10-visor" defer></script>
113
+ <script src="/builders/visor.js?v=2026-11-11-view2" defer></script>
114
114
  <script src="/builders/palette.js" defer></script>
115
115
  <script src="/builders/gov-living.js?v=2026-10-09-positions1" defer></script>
116
116
  <script src="/builders/gov-feeds.js?v=2026-10-09-living3" defer></script>
@@ -8,7 +8,7 @@
8
8
  <link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
11
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
12
12
  <link rel="stylesheet" href="/builders/oversight.css">
13
13
  <link rel="stylesheet" href="/builders/collab.css">
14
14
  </head>
@@ -160,10 +160,10 @@
160
160
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
161
161
 
162
162
  <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
163
- <script src="/builders/shell-game.js?v=2026-11-11-helm"></script>
163
+ <script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
164
164
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
165
165
  <script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
166
- <script src="/builders/shell.js?v=2026-11-11-helm"></script>
166
+ <script src="/builders/shell.js?v=2026-11-11-view2"></script>
167
167
  <script src="/builders/hall-dialog.js"></script>
168
168
  <script src="/builders/palette.js" defer></script>
169
169
  <script src="/builders/collab-lib.js?v=2026-09-24-archive"></script>
@@ -8,7 +8,7 @@
8
8
  <link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
11
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
12
12
  <link rel="stylesheet" href="/builders/commands.css">
13
13
  </head>
14
14
  <body data-page="commands" data-page-title="Commands">
@@ -52,10 +52,10 @@
52
52
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
53
53
 
54
54
  <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
55
- <script src="/builders/shell-game.js?v=2026-11-11-helm"></script>
55
+ <script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
56
56
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
57
57
  <script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
58
- <script src="/builders/shell.js?v=2026-11-11-helm"></script>
58
+ <script src="/builders/shell.js?v=2026-11-11-view2"></script>
59
59
  <script src="/builders/hall-dialog.js"></script>
60
60
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
61
61
  <script src="/builders/palette.js" defer></script>
@@ -52,6 +52,14 @@
52
52
  field is findable (WCAG 1.4.11), the ink edge on focus inside DESIGN.md's
53
53
  two-tone ring.
54
54
 
55
+ WHAT IS NOT A BUTTON IS SQUARE IN THE HALL (task 1005194, ADR 0402). Helm
56
+ draws no pill: the hall's tier sets --radius-pill to a square corner, so
57
+ the field, the status tag, the view toggle and the dialog's close below are
58
+ square there with no rule of their own, and only what you press is cut. A
59
+ textarea spends --press-radius with the tile as its fallback. The status
60
+ page links this sheet without the hall's tier, so there the pill and the
61
+ tile stand and nothing moves.
62
+
55
63
  Every colour here is a token or a color-mix of tokens; both terms of every
56
64
  mix flip with the mode, so nothing here needs a dark twin.
57
65
  tests/hall_controls.mjs measures the pairs in both modes. */
@@ -250,7 +258,7 @@ select, input[type="text"], input[type="search"], textarea,
250
258
  }
251
259
  textarea {
252
260
  padding: var(--ds-space-xs) var(--ds-space-sm);
253
- border-radius: var(--radius-sm);
261
+ border-radius: var(--press-radius, var(--radius-sm));
254
262
  }
255
263
  select:hover, input[type="text"]:hover, input[type="search"]:hover, textarea:hover,
256
264
  :where(input[type="email"], input[type="url"], input[type="number"], input[type="password"]):hover,
@@ -265,7 +273,7 @@ select:focus-visible, input[type="text"]:focus-visible, input[type="search"]:foc
265
273
  border-color: var(--ink);
266
274
  border-radius: var(--radius-pill);
267
275
  }
268
- textarea:focus-visible { border-color: var(--ink); border-radius: var(--radius-sm); }
276
+ textarea:focus-visible { border-color: var(--ink); border-radius: var(--press-radius, var(--radius-sm)); }
269
277
  select:disabled, input[type="text"]:disabled, input[type="search"]:disabled, textarea:disabled,
270
278
  :where(input[type="email"], input[type="url"], input[type="number"], input[type="password"]):disabled,
271
279
  .input:disabled {
@@ -8,7 +8,7 @@
8
8
  <link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
11
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
12
12
  <link rel="stylesheet" href="/builders/oversight.css">
13
13
  <link rel="stylesheet" href="/builders/copy-desk.css">
14
14
  </head>
@@ -178,10 +178,10 @@
178
178
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
179
179
 
180
180
  <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
181
- <script src="/builders/shell-game.js?v=2026-11-11-helm"></script>
181
+ <script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
182
182
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
183
183
  <script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
184
- <script src="/builders/shell.js?v=2026-11-11-helm"></script>
184
+ <script src="/builders/shell.js?v=2026-11-11-view2"></script>
185
185
  <script src="/builders/hall-dialog.js"></script>
186
186
  <script src="/builders/palette.js" defer></script>
187
187
  <script src="/builders/hall-kit.js"></script>
@@ -8,7 +8,7 @@
8
8
  <link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
11
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
12
12
  <link rel="stylesheet" href="/builders/oversight.css">
13
13
  <link rel="stylesheet" href="/builders/hall-ask.css">
14
14
  <link rel="stylesheet" href="/builders/project-settings.css">
@@ -79,10 +79,10 @@
79
79
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
80
80
 
81
81
  <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
82
- <script src="/builders/shell-game.js?v=2026-11-11-helm"></script>
82
+ <script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
83
83
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
84
84
  <script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
85
- <script src="/builders/shell.js?v=2026-11-11-helm"></script>
85
+ <script src="/builders/shell.js?v=2026-11-11-view2"></script>
86
86
  <script src="/builders/hall-dialog.js"></script>
87
87
  <script src="/builders/palette.js" defer></script>
88
88
  <script src="/builders/hall-kit.js"></script>
@@ -11,8 +11,8 @@
11
11
  <!-- The faces (Manrope, JetBrains Mono) come from the branding pack's font
12
12
  links, injected into this head by the server like every hall page's
13
13
  (tests/hall_tokens.mjs: no hall page hardcodes a web-font stylesheet). -->
14
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
15
- <link rel="stylesheet" href="/builders/visor.css?v=2026-11-10-visor">
14
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
15
+ <link rel="stylesheet" href="/builders/visor.css?v=2026-11-11-helm2">
16
16
  <link rel="stylesheet" href="/builders/thinking.css?v=2026-11-10-visor">
17
17
  </head>
18
18
  <!-- THE PROJECT SKY (task 1004232 / sky part 4 of 5, goal 1000095; ADR 0331,
@@ -139,13 +139,13 @@
139
139
  </div>
140
140
 
141
141
  <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
142
- <script src="/builders/shell-game.js?v=2026-11-11-helm"></script>
142
+ <script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
143
143
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
144
144
  <script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
145
- <script src="/builders/shell.js?v=2026-11-11-helm"></script>
145
+ <script src="/builders/shell.js?v=2026-11-11-view2"></script>
146
146
  <script src="/builders/hall-dialog.js"></script>
147
147
  <!-- task 1005148: the visor (glass over the scene, game mode only; ADR 0399), after the shell and hall-dialog.js -->
148
- <script src="/builders/visor.js?v=2026-11-10-visor"></script>
148
+ <script src="/builders/visor.js?v=2026-11-11-view2"></script>
149
149
  <script src="/builders/palette.js" defer></script>
150
150
 
151
151
  <script src="/builders/idea-objects.js?v=2026-09-27-split"></script>
@@ -8,7 +8,7 @@
8
8
  <link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
11
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
12
12
  <!-- task 1003470: the family sheet the list's figure band and group heads
13
13
  come from (.ov-figs, .ov-group__head), linked before the page's own. -->
14
14
  <link rel="stylesheet" href="/builders/oversight.css">
@@ -251,10 +251,10 @@
251
251
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
252
252
 
253
253
  <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
254
- <script src="/builders/shell-game.js?v=2026-11-11-helm"></script>
254
+ <script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
255
255
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
256
256
  <script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
257
- <script src="/builders/shell.js?v=2026-11-11-helm"></script>
257
+ <script src="/builders/shell.js?v=2026-11-11-view2"></script>
258
258
  <script src="/builders/hall-dialog.js"></script>
259
259
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
260
260
  <script src="/builders/palette.js" defer></script>
@@ -8,7 +8,7 @@
8
8
  <link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
11
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
12
12
  <link rel="stylesheet" href="/builders/oversight.css">
13
13
  <link rel="stylesheet" href="/builders/government.css">
14
14
  </head>
@@ -155,10 +155,10 @@
155
155
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
156
156
 
157
157
  <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
158
- <script src="/builders/shell-game.js?v=2026-11-11-helm"></script>
158
+ <script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
159
159
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
160
160
  <script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
161
- <script src="/builders/shell.js?v=2026-11-11-helm"></script>
161
+ <script src="/builders/shell.js?v=2026-11-11-view2"></script>
162
162
  <script src="/builders/hall-dialog.js"></script>
163
163
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
164
164
  <script src="/builders/palette.js" defer></script>
@@ -8,7 +8,7 @@
8
8
  <link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
11
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
12
12
  <!-- The record archetype, shared with task.html (task 1003305). idea.css below
13
13
  carries only what an idea record has and a task record does not. -->
14
14
  <link rel="stylesheet" href="/builders/record.css">
@@ -51,10 +51,10 @@
51
51
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
52
52
 
53
53
  <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
54
- <script src="/builders/shell-game.js?v=2026-11-11-helm"></script>
54
+ <script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
55
55
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
56
56
  <script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
57
- <script src="/builders/shell.js?v=2026-11-11-helm"></script>
57
+ <script src="/builders/shell.js?v=2026-11-11-view2"></script>
58
58
  <script src="/builders/hall-dialog.js"></script>
59
59
  <script src="/builders/palette.js" defer></script>
60
60
  <!-- task-detail.js still owns the #/idea/N and #/blocker/N overlay, so a ref
@@ -12,7 +12,7 @@
12
12
  <link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
13
13
  <link rel="preconnect" href="https://fonts.googleapis.com">
14
14
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
15
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
15
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
16
16
  <link rel="stylesheet" href="/builders/ideas.css">
17
17
  </head>
18
18
  <body data-page="ideas" data-page-title="Ideas">
@@ -226,10 +226,10 @@
226
226
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
227
227
 
228
228
  <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
229
- <script src="/builders/shell-game.js?v=2026-11-11-helm"></script>
229
+ <script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
230
230
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
231
231
  <script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
232
- <script src="/builders/shell.js?v=2026-11-11-helm"></script>
232
+ <script src="/builders/shell.js?v=2026-11-11-view2"></script>
233
233
  <script src="/builders/hall-dialog.js"></script>
234
234
  <script src="/builders/palette.js" defer></script>
235
235
  <!-- task 1004727: the ONE karma vote control every task/idea list renders -->
@@ -18,10 +18,10 @@
18
18
  <link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
19
19
  <link rel="preconnect" href="https://fonts.googleapis.com">
20
20
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
21
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
22
- <link rel="stylesheet" href="/builders/visor.css?v=2026-11-10-visor">
21
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
22
+ <link rel="stylesheet" href="/builders/visor.css?v=2026-11-11-helm2">
23
23
  <link rel="stylesheet" href="/builders/welcome-boot.css?v=2026-11-07-brand-mark">
24
- <link rel="stylesheet" href="/builders/shell-game.css?v=2026-11-11-helm">
24
+ <link rel="stylesheet" href="/builders/shell-game.css?v=2026-11-11-view2">
25
25
  <link rel="stylesheet" href="/builders/hall-ask.css">
26
26
  <link rel="stylesheet" href="/builders/home-city.css?v=2026-11-10-visor">
27
27
  <link rel="stylesheet" href="/builders/home-gallery.css">
@@ -110,13 +110,13 @@
110
110
  <!-- task 1004785: the first-visit-of-the-day welcome (the tower). Before shell.js, which asks it
111
111
  before the craft picker so the two never stack. Home only. -->
112
112
  <script src="/builders/welcome-boot.js?v=2026-11-07-brand-mark" defer></script>
113
- <script src="/builders/shell-game.js?v=2026-11-11-helm" defer></script>
113
+ <script src="/builders/shell-game.js?v=2026-11-11-view2" defer></script>
114
114
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers" defer></script>
115
115
  <script src="/builders/craft-mode.js?v=2026-11-10-visor" defer></script>
116
- <script src="/builders/shell.js?v=2026-11-11-helm" defer></script>
116
+ <script src="/builders/shell.js?v=2026-11-11-view2" defer></script>
117
117
  <script src="/builders/hall-dialog.js" defer></script>
118
118
  <!-- task 1005148: the visor (glass over the scene, game mode only; ADR 0399), after the shell and hall-dialog.js -->
119
- <script src="/builders/visor.js?v=2026-11-10-visor" defer></script>
119
+ <script src="/builders/visor.js?v=2026-11-11-view2" defer></script>
120
120
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
121
121
  <script src="/builders/palette.js" defer></script>
122
122
  <!-- task 2166: the shared component kit (window.OTBKit) — pager/ledger/rail.
@@ -8,7 +8,7 @@
8
8
  <link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
11
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
12
12
  <link rel="stylesheet" href="/builders/market-watch.css">
13
13
  </head>
14
14
  <body data-page="market-watch-item" data-page-title="Market Watch">
@@ -72,10 +72,10 @@
72
72
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
73
73
 
74
74
  <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
75
- <script src="/builders/shell-game.js?v=2026-11-11-helm"></script>
75
+ <script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
76
76
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
77
77
  <script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
78
- <script src="/builders/shell.js?v=2026-11-11-helm"></script>
78
+ <script src="/builders/shell.js?v=2026-11-11-view2"></script>
79
79
  <script src="/builders/hall-dialog.js"></script>
80
80
  <script src="/builders/palette.js" defer></script>
81
81
  <script src="/builders/hall-kit.js"></script>
@@ -8,7 +8,7 @@
8
8
  <link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
11
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
12
12
  <link rel="stylesheet" href="/builders/hall-ask.css">
13
13
  <link rel="stylesheet" href="/builders/market-watch-rules.css">
14
14
  </head>
@@ -41,10 +41,10 @@
41
41
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
42
42
 
43
43
  <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
44
- <script src="/builders/shell-game.js?v=2026-11-11-helm"></script>
44
+ <script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
45
45
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
46
46
  <script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
47
- <script src="/builders/shell.js?v=2026-11-11-helm"></script>
47
+ <script src="/builders/shell.js?v=2026-11-11-view2"></script>
48
48
  <script src="/builders/hall-dialog.js"></script>
49
49
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
50
50
  <script src="/builders/palette.js" defer></script>
@@ -8,7 +8,7 @@
8
8
  <link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
11
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
12
12
  <link rel="stylesheet" href="/builders/market-watch.css">
13
13
  <link rel="stylesheet" href="/builders/market-watch-settings.css">
14
14
  </head>
@@ -183,10 +183,10 @@
183
183
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
184
184
 
185
185
  <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
186
- <script src="/builders/shell-game.js?v=2026-11-11-helm"></script>
186
+ <script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
187
187
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
188
188
  <script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
189
- <script src="/builders/shell.js?v=2026-11-11-helm"></script>
189
+ <script src="/builders/shell.js?v=2026-11-11-view2"></script>
190
190
  <script src="/builders/hall-dialog.js"></script>
191
191
  <script src="/builders/palette.js" defer></script>
192
192
  <script src="/builders/hall-kit.js"></script>
@@ -8,7 +8,7 @@
8
8
  <link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm">
11
+ <link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
12
12
  <!-- task 1004366: a store version's how-to reads as a document, so it borrows the
13
13
  reading room's article card (room.css is scoped to its own primer- classes). -->
14
14
  <link rel="stylesheet" href="/builders/room.css">
@@ -126,10 +126,10 @@
126
126
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
127
127
 
128
128
  <script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
129
- <script src="/builders/shell-game.js?v=2026-11-11-helm"></script>
129
+ <script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
130
130
  <script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
131
131
  <script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
132
- <script src="/builders/shell.js?v=2026-11-11-helm"></script>
132
+ <script src="/builders/shell.js?v=2026-11-11-view2"></script>
133
133
  <script src="/builders/hall-dialog.js"></script>
134
134
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
135
135
  <script src="/builders/palette.js" defer></script>