@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.
- package/.bongos-core.json +95 -80
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +4 -0
- package/clients/bongos-client/index.cjs +4 -0
- package/clients/bongos-client/index.d.ts +5 -0
- package/clients/bongos-client/index.mjs +4 -0
- package/docs/adr/0402-helm-is-the-halls-look-and-the-hall-is-dark-only.md +4 -0
- package/docs/api/openapi.json +86 -2
- package/docs/api-reference.md +4 -2
- package/docs/copy-inventory.md +39 -33
- package/docs/copy-registry.json +107 -52
- package/docs/module-api-changelog.md +4 -0
- package/docs/page-inventory.json +1 -0
- package/docs/page-readings.json +207 -201
- package/modules/builder-settings/hall-view-prefs.js +50 -0
- package/modules/builder-settings/routes/settings.js +32 -0
- package/modules/hall-ui/public/ai-studio.html +3 -3
- package/modules/hall-ui/public/atlas.html +3 -3
- package/modules/hall-ui/public/blockers.html +3 -3
- package/modules/hall-ui/public/board-room.html +3 -3
- package/modules/hall-ui/public/city.html +5 -5
- package/modules/hall-ui/public/collab.html +3 -3
- package/modules/hall-ui/public/commands.html +3 -3
- package/modules/hall-ui/public/controls.css +10 -2
- package/modules/hall-ui/public/copy-desk.html +3 -3
- package/modules/hall-ui/public/deploy.html +3 -3
- package/modules/hall-ui/public/goal-map.html +5 -5
- package/modules/hall-ui/public/goals.html +3 -3
- package/modules/hall-ui/public/government.html +3 -3
- package/modules/hall-ui/public/idea.html +3 -3
- package/modules/hall-ui/public/ideas.html +3 -3
- package/modules/hall-ui/public/index.html +6 -6
- package/modules/hall-ui/public/market-watch-item.html +3 -3
- package/modules/hall-ui/public/market-watch-rules.html +3 -3
- package/modules/hall-ui/public/market-watch.html +3 -3
- package/modules/hall-ui/public/modules.html +3 -3
- package/modules/hall-ui/public/money.html +3 -3
- package/modules/hall-ui/public/my-agents.html +3 -3
- package/modules/hall-ui/public/options-menu.js +22 -1
- package/modules/hall-ui/public/primer.html +3 -3
- package/modules/hall-ui/public/profile.html +3 -3
- package/modules/hall-ui/public/project-settings.html +3 -3
- package/modules/hall-ui/public/roster.html +3 -3
- package/modules/hall-ui/public/settings-view.js +75 -0
- package/modules/hall-ui/public/settings.css +113 -46
- package/modules/hall-ui/public/settings.html +18 -5
- package/modules/hall-ui/public/shell-game.css +10 -0
- package/modules/hall-ui/public/shell-game.js +98 -33
- package/modules/hall-ui/public/shell.js +4 -3
- package/modules/hall-ui/public/street.html +3 -3
- package/modules/hall-ui/public/studio.html +3 -3
- package/modules/hall-ui/public/style.css +149 -61
- package/modules/hall-ui/public/task.html +3 -3
- package/modules/hall-ui/public/thinking.html +5 -5
- package/modules/hall-ui/public/tweak-editor.html +3 -3
- package/modules/hall-ui/public/visor.css +2 -2
- package/modules/hall-ui/public/visor.js +7 -1
- package/modules/hall-ui/public/watch.html +3 -3
- package/modules/hall-ui/public/work.html +3 -3
- package/modules/hall-ui/records/craft-mode.md +9 -0
- package/modules/hall-ui/records/game-mode.md +5 -4
- package/modules/hall-ui/records/options-menu.md +11 -0
- package/modules/hall-ui/records/start-screen.md +4 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +12 -0
- package/scripts/hall-preview/pref-writes.js +8 -1
- package/src/module-api.js +1 -1
- package/tests/design_tokens_shared.mjs +5 -1
- package/tests/hall_controls.mjs +1 -1
- package/tests/hall_fullscreen.mjs +42 -21
- package/tests/hall_helm.mjs +103 -1
- package/tests/hall_start_screen.mjs +38 -3
- package/tests/hall_topbar_320.mjs +7 -4
- package/tests/hall_view_prefs.mjs +42 -0
- package/tests/hall_visor.mjs +3 -2
- package/tests/nav_permission_atoms.mjs +1 -1
|
@@ -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-
|
|
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/project-settings.css?v=2026-11-02-outflow">
|
|
14
14
|
</head>
|
|
@@ -80,10 +80,10 @@
|
|
|
80
80
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
81
81
|
|
|
82
82
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
83
|
-
<script src="/builders/shell-game.js?v=2026-11-11-
|
|
83
|
+
<script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
|
|
84
84
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
85
85
|
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
86
|
-
<script src="/builders/shell.js?v=2026-11-11-
|
|
86
|
+
<script src="/builders/shell.js?v=2026-11-11-view2"></script>
|
|
87
87
|
<script src="/builders/hall-dialog.js"></script>
|
|
88
88
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
89
89
|
<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-
|
|
11
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
|
|
12
12
|
<!-- The oversight family's archetype: a titled row with facts and actions, the
|
|
13
13
|
group head and the foot line (records/oversight-family.md). This page's
|
|
14
14
|
repeated thing is that row at the desk's one-line density. -->
|
|
@@ -82,10 +82,10 @@
|
|
|
82
82
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
83
83
|
|
|
84
84
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
85
|
-
<script src="/builders/shell-game.js?v=2026-11-11-
|
|
85
|
+
<script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
|
|
86
86
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
87
87
|
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
88
|
-
<script src="/builders/shell.js?v=2026-11-11-
|
|
88
|
+
<script src="/builders/shell.js?v=2026-11-11-view2"></script>
|
|
89
89
|
<script src="/builders/hall-dialog.js"></script>
|
|
90
90
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
91
91
|
<script src="/builders/palette.js" defer></script>
|
|
@@ -66,7 +66,8 @@
|
|
|
66
66
|
] },
|
|
67
67
|
] },
|
|
68
68
|
{ head: 'Preferences', items: [
|
|
69
|
-
{ id: 'preferences', label: 'Preferences', native: true, gate: 'signed', words: 'usage reports'
|
|
69
|
+
{ id: 'preferences', label: 'Preferences', native: true, gate: 'signed', words: 'usage reports view game classic mode sidebar',
|
|
70
|
+
anchors: [{ label: 'View: game or classic', anchor: 'view-scroll', words: 'game classic mode full screen sidebar' }] },
|
|
70
71
|
{ id: 'sound', label: 'Sound', native: true, gate: 'signed', words: 'sounds audio chime event volume mute' },
|
|
71
72
|
] },
|
|
72
73
|
{ head: 'The project', items: [
|
|
@@ -253,6 +254,7 @@
|
|
|
253
254
|
if (!state.menu.some(function (g) { return g.items.some(function (it) { return it.id === id; }); })) return false;
|
|
254
255
|
state.active = id;
|
|
255
256
|
groupsEl.dataset.active = id;
|
|
257
|
+
nameScreen(e);
|
|
256
258
|
Array.prototype.forEach.call(groupsEl.querySelectorAll('.opt-embed'), function (s) { s.classList.remove('opt-embed--on'); });
|
|
257
259
|
if (e.embed) frameFor(e, anchor).classList.add('opt-embed--on');
|
|
258
260
|
else if (state.onNative) state.onNative(id, anchor);
|
|
@@ -270,6 +272,22 @@
|
|
|
270
272
|
return true;
|
|
271
273
|
}
|
|
272
274
|
|
|
275
|
+
// The open screen's name, over the screen (Helm, task 1005194): the entry's own
|
|
276
|
+
// label, so no new words. Drawn for the eye only: the rail's aria-current link
|
|
277
|
+
// and each frame's aria-label already say which screen is open.
|
|
278
|
+
function nameScreen(e) {
|
|
279
|
+
if (!groupsEl || !groupsEl.insertBefore || typeof document === 'undefined') return;
|
|
280
|
+
var h = document.getElementById('opt-screen');
|
|
281
|
+
if (!h) {
|
|
282
|
+
h = document.createElement('p');
|
|
283
|
+
h.id = 'opt-screen';
|
|
284
|
+
h.className = 'opt-screen';
|
|
285
|
+
h.setAttribute('aria-hidden', 'true');
|
|
286
|
+
groupsEl.insertBefore(h, groupsEl.firstChild);
|
|
287
|
+
}
|
|
288
|
+
h.textContent = e.label;
|
|
289
|
+
}
|
|
290
|
+
|
|
273
291
|
function markActive() {
|
|
274
292
|
if (!railEl) return;
|
|
275
293
|
Array.prototype.forEach.call(railEl.querySelectorAll('.opt-link'), function (a) {
|
|
@@ -305,7 +323,10 @@
|
|
|
305
323
|
// The rail: the search box, then the groups. Typing filters; Enter opens the first match.
|
|
306
324
|
function draw() {
|
|
307
325
|
railEl.classList.add('opt-rail');
|
|
326
|
+
// The panel's own name shows only where the top bar is away (settings.css); the
|
|
327
|
+
// <nav> already carries the same word as its aria-label.
|
|
308
328
|
railEl.innerHTML =
|
|
329
|
+
'<p class="opt-title" aria-hidden="true">Options</p>' +
|
|
309
330
|
'<label class="opt-search"><span class="sr-only">Search settings</span>' +
|
|
310
331
|
'<input type="search" id="opt-search" placeholder="Search settings" autocomplete="off" spellcheck="false"></label>' +
|
|
311
332
|
'<div class="opt-list"></div>';
|
|
@@ -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-
|
|
11
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
|
|
12
12
|
<link rel="stylesheet" href="/builders/room.css">
|
|
13
13
|
<link rel="stylesheet" href="/builders/primer.css?v=2026-07-02-shell1">
|
|
14
14
|
<link rel="stylesheet" href="/builders/diagram-viewer.css?v=2026-11-04-reading-room">
|
|
@@ -111,10 +111,10 @@
|
|
|
111
111
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
112
112
|
|
|
113
113
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
114
|
-
<script src="/builders/shell-game.js?v=2026-11-11-
|
|
114
|
+
<script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
|
|
115
115
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
116
116
|
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
117
|
-
<script src="/builders/shell.js?v=2026-11-11-
|
|
117
|
+
<script src="/builders/shell.js?v=2026-11-11-view2"></script>
|
|
118
118
|
<script src="/builders/hall-dialog.js"></script>
|
|
119
119
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
120
120
|
<script src="/builders/palette.js" defer></script>
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
|
|
15
15
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
16
16
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
17
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-11-11-
|
|
17
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
|
|
18
18
|
<!-- The PANEL archetype (task 1003308) before the page's own sheet. -->
|
|
19
19
|
<link rel="stylesheet" href="/builders/panel.css">
|
|
20
20
|
<link rel="stylesheet" href="/builders/hall-ask.css">
|
|
@@ -248,10 +248,10 @@
|
|
|
248
248
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
249
249
|
chrome exists before the page script runs. -->
|
|
250
250
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
251
|
-
<script src="/builders/shell-game.js?v=2026-11-11-
|
|
251
|
+
<script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
|
|
252
252
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
253
253
|
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
254
|
-
<script src="/builders/shell.js?v=2026-11-11-
|
|
254
|
+
<script src="/builders/shell.js?v=2026-11-11-view2"></script>
|
|
255
255
|
<script src="/builders/hall-dialog.js"></script>
|
|
256
256
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
257
257
|
<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-
|
|
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/project-settings.css?v=2026-11-02-outflow">
|
|
14
14
|
</head>
|
|
@@ -75,10 +75,10 @@
|
|
|
75
75
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
76
76
|
|
|
77
77
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
78
|
-
<script src="/builders/shell-game.js?v=2026-11-11-
|
|
78
|
+
<script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
|
|
79
79
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
80
80
|
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
81
|
-
<script src="/builders/shell.js?v=2026-11-11-
|
|
81
|
+
<script src="/builders/shell.js?v=2026-11-11-view2"></script>
|
|
82
82
|
<script src="/builders/hall-dialog.js"></script>
|
|
83
83
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
84
84
|
<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-
|
|
11
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
|
|
12
12
|
<!-- task 1003441: the identity cell (avatar, name, login). It was shared with
|
|
13
13
|
the cross-project /people page until task 1003444 deleted it. -->
|
|
14
14
|
<link rel="stylesheet" href="/builders/roster.css">
|
|
@@ -57,10 +57,10 @@
|
|
|
57
57
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
58
58
|
chrome exists before the page script runs. -->
|
|
59
59
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
60
|
-
<script src="/builders/shell-game.js?v=2026-11-11-
|
|
60
|
+
<script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
|
|
61
61
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
62
62
|
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
63
|
-
<script src="/builders/shell.js?v=2026-11-11-
|
|
63
|
+
<script src="/builders/shell.js?v=2026-11-11-view2"></script>
|
|
64
64
|
<script src="/builders/hall-dialog.js"></script>
|
|
65
65
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
66
66
|
<script src="/builders/palette.js" defer></script>
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// modules/hall-ui/public/settings-view.js — Options → Preferences → View: game or
|
|
2
|
+
// classic (task 1005200; owner, 2026-11-11). The one place the view is switched after
|
|
3
|
+
// sign-in. The two never mix: classic is the hall with its sidebar, game is the city
|
|
4
|
+
// full screen with only the game's places (shell-game.js).
|
|
5
|
+
//
|
|
6
|
+
// The account holds the choice (GET/PATCH /api/bongos/me/hall-view, builder-settings
|
|
7
|
+
// hall-view-prefs.js), so it follows the builder to any browser. This panel saves it
|
|
8
|
+
// there first and only then switches the page, so a failed save never leaves the page
|
|
9
|
+
// in one view and the account in the other.
|
|
10
|
+
//
|
|
11
|
+
// Own file on the settings-usage-reports.js precedent: it shares nothing with the rest
|
|
12
|
+
// of the page.
|
|
13
|
+
|
|
14
|
+
(() => {
|
|
15
|
+
'use strict';
|
|
16
|
+
|
|
17
|
+
const PATH = '/api/bongos/me/hall-view';
|
|
18
|
+
const { $ } = window.OTB;
|
|
19
|
+
const toast = (msg) => window.OTB.toast(msg);
|
|
20
|
+
const api = window.BongosClient.createClient({ baseUrl: '', credentials: 'same-origin', throwOnError: false });
|
|
21
|
+
const game = () => window.OTBShellGame;
|
|
22
|
+
|
|
23
|
+
const CHOICES = [
|
|
24
|
+
{ value: 'game', label: 'Game', desc: 'The project city, full screen. Only the game’s places: the city, the skies and the atlas.' },
|
|
25
|
+
{ value: 'classic', label: 'Classic', desc: 'The hall with its sidebar and every page.' },
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
function render(view) {
|
|
29
|
+
const wrap = $('#view-rows');
|
|
30
|
+
if (!wrap) return;
|
|
31
|
+
wrap.innerHTML =
|
|
32
|
+
'<fieldset class="pgroup" id="view-group">' +
|
|
33
|
+
'<legend class="prow__label">How you see the project</legend>' +
|
|
34
|
+
CHOICES.map((c) => {
|
|
35
|
+
const id = `view-${c.value}`;
|
|
36
|
+
return (
|
|
37
|
+
`<label class="prow prow--pick" for="${id}">` +
|
|
38
|
+
`<input class="pradio" type="radio" name="hall-view" id="${id}" value="${c.value}"${view === c.value ? ' checked' : ''}>` +
|
|
39
|
+
'<span class="prow__main">' +
|
|
40
|
+
`<span class="prow__label">${c.label}</span>` +
|
|
41
|
+
`<span class="prow__desc">${c.desc}</span>` +
|
|
42
|
+
'</span></label>'
|
|
43
|
+
);
|
|
44
|
+
}).join('') +
|
|
45
|
+
'</fieldset>';
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async function save(view) {
|
|
49
|
+
const status = $('#view-status');
|
|
50
|
+
if (status) status.textContent = 'Saving…';
|
|
51
|
+
const res = await api.request('PATCH', PATH, { body: { view } });
|
|
52
|
+
if (!res.ok) {
|
|
53
|
+
render(game() && game().on() ? 'game' : 'classic');
|
|
54
|
+
if (status) status.textContent = 'Could not save. Try again.';
|
|
55
|
+
toast('Could not switch the view. Try again.');
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const msg = view === 'game' ? 'Saved. You are in the game view.' : 'Saved. You are in the classic view.';
|
|
59
|
+
if (status) status.textContent = msg;
|
|
60
|
+
if (game()) game().set(view === 'game', { local: true });
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function setup() {
|
|
64
|
+
const section = $('#view-scroll');
|
|
65
|
+
if (!section || !game()) return;
|
|
66
|
+
render(game().on() ? 'game' : 'classic');
|
|
67
|
+
section.hidden = false;
|
|
68
|
+
$('#view-rows').addEventListener('change', (e) => {
|
|
69
|
+
if (e.target && e.target.name === 'hall-view') save(e.target.value);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', setup);
|
|
74
|
+
else setup();
|
|
75
|
+
})();
|
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
/* settings.css — what Settings has and the rest of the panel family does not
|
|
2
|
-
(task 1003308, goal 1000081; the archetype is panel.css). The
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
(task 1003308, goal 1000081; the archetype is panel.css). The options menu
|
|
3
|
+
and the screen it opens, the token ladder, the volume line and the image-key
|
|
4
|
+
banner. Every colour is a `var()` of the world's tier; the one literal pair
|
|
5
|
+
is the Discord mark, named below.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
the
|
|
7
|
+
THE OPTIONS MENU IS A HELM SCREEN (task 1005194, ADR 0402; the menu is ADR
|
|
8
|
+
0401). Left, the menu: one night panel closed left and right by the strong
|
|
9
|
+
ice hairline, the search over the entries, each entry a full-width row in
|
|
10
|
+
the name voice on a hairline, the open one the accent bar. Right, the open
|
|
11
|
+
screen: its name in the name voice over the strong hairline, then its
|
|
12
|
+
sections as plain rows on hairlines, not cards. In game mode the panel runs
|
|
13
|
+
the window's full height and names itself. The Helm pieces are the hall
|
|
14
|
+
tier's tokens (style.css); the rows' words, order and addresses are
|
|
15
|
+
options-menu.js's, unchanged. */
|
|
10
16
|
|
|
11
|
-
/* ----
|
|
17
|
+
/* ---- the layout: the menu panel + the one open screen --------------------- */
|
|
12
18
|
.settings-layout {
|
|
13
19
|
display: grid;
|
|
14
|
-
grid-template-columns:
|
|
15
|
-
gap:
|
|
20
|
+
grid-template-columns: minmax(0, min(var(--helm-panel-w), 32%)) minmax(0, 1fr);
|
|
21
|
+
gap: var(--ds-space-xl);
|
|
16
22
|
align-items: start;
|
|
17
23
|
}
|
|
18
24
|
.settings-layout[hidden] { display: none !important; }
|
|
@@ -30,43 +36,98 @@
|
|
|
30
36
|
.settings-groups > [data-group][hidden] { display: none !important; }
|
|
31
37
|
/* A screen opened in the menu's frame (options-menu.js): one shows at a time. */
|
|
32
38
|
.settings-groups > .opt-embed.opt-embed--on { display: block; }
|
|
33
|
-
|
|
39
|
+
/* ---- the open screen: its name, then its sections as rows on hairlines -------
|
|
40
|
+
options-menu.js writes the open entry's own label into .opt-screen. A section
|
|
41
|
+
is not a card here: no ground, no corner, one soft hairline under it, its
|
|
42
|
+
title in the name voice. */
|
|
43
|
+
.settings-groups { --opt-screen-h: calc(var(--ds-space-xl) + var(--ds-space-lg)); }
|
|
44
|
+
.opt-screen {
|
|
45
|
+
margin: 0;
|
|
46
|
+
padding: 0 0 var(--ds-space-sm);
|
|
47
|
+
border-bottom: var(--line-strong) solid var(--rule);
|
|
48
|
+
font-family: var(--name-face);
|
|
49
|
+
font-size: var(--ds-text-figure);
|
|
50
|
+
font-weight: var(--name-weight);
|
|
51
|
+
letter-spacing: var(--name-space-tight);
|
|
52
|
+
text-transform: var(--name-case);
|
|
53
|
+
line-height: 1;
|
|
54
|
+
overflow-wrap: anywhere;
|
|
55
|
+
color: var(--ink);
|
|
56
|
+
text-shadow: var(--name-glow);
|
|
57
|
+
}
|
|
58
|
+
.settings-groups .scroll {
|
|
59
|
+
margin: 0;
|
|
60
|
+
padding: var(--ds-space-md) 0;
|
|
61
|
+
background: none;
|
|
62
|
+
border: 0;
|
|
63
|
+
border-bottom: var(--line) solid var(--rule-soft);
|
|
64
|
+
border-radius: var(--press-radius);
|
|
65
|
+
}
|
|
66
|
+
.settings-groups .scroll__h {
|
|
67
|
+
font-family: var(--name-face);
|
|
68
|
+
font-size: var(--ds-text-2xl);
|
|
69
|
+
font-weight: var(--name-weight);
|
|
70
|
+
letter-spacing: var(--name-space-tight);
|
|
71
|
+
text-transform: var(--name-case);
|
|
72
|
+
color: var(--ink);
|
|
73
|
+
}
|
|
34
74
|
.settings-groups .scroll__lede { font-size: 14.5px; }
|
|
35
|
-
/* the rail's items at the mock's height: the shell's 28px rows are Standing's
|
|
36
|
-
density, and a settings group is a destination, not a scroll-spy stop */
|
|
37
|
-
/* ---- the options menu rail (task 1005144, ADR 0401) ------------------------
|
|
38
|
-
A search box over a vertical list of groups. Sticky beside the open screen, so
|
|
39
|
-
the menu stays in reach while a long screen scrolls. */
|
|
40
|
-
.opt-rail { position: sticky; top: 72px; display: flex; flex-direction: column; gap: 2px; max-height: calc(100vh - 96px); overflow-y: auto; }
|
|
41
|
-
html[data-fullscreen="on"] .opt-rail { top: 24px; max-height: calc(100vh - 48px); }
|
|
42
|
-
.opt-search { display: block; margin: 0 0 var(--sp-xs); }
|
|
43
|
-
.opt-search input { width: 100%; min-height: 38px; padding: 0 14px; border-radius: var(--radius-pill); border: var(--line) solid var(--glass-edge); background: var(--glass); color: var(--ink); font: inherit; font-size: var(--ds-text-md); }
|
|
44
|
-
.opt-search input:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
45
|
-
.opt-head { margin: var(--sp-sm) 0 2px; padding: 0 14px; font-family: var(--label-face); font-size: var(--label-size); letter-spacing: var(--label-space); text-transform: var(--label-case); color: var(--ink-faint); }
|
|
46
|
-
.opt-link { position: relative; display: flex; flex-direction: column; justify-content: center; min-height: 38px; padding: 4px 14px; border-radius: var(--radius-pill); color: var(--ink-soft); font-size: var(--ds-text-md); text-decoration: none; }
|
|
47
|
-
.opt-link:hover { color: var(--ink); background: var(--glass); }
|
|
48
|
-
.opt-link:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
|
|
49
|
-
.opt-link--active { color: var(--ink); background: var(--glass); }
|
|
50
|
-
.opt-link--active::before { content: ""; position: absolute; left: 0; top: 9px; bottom: 9px; width: 3px; border-radius: var(--radius-pill); background: var(--accent); }
|
|
51
|
-
.opt-link__where { font-size: var(--ds-text-xs); color: var(--ink-faint); }
|
|
52
|
-
.opt-none { margin: var(--sp-xs) 0; padding: 0 14px; font-size: var(--ds-text-sm-plus); color: var(--ink-soft); }
|
|
53
|
-
/* The frame fills the column to the bottom of the window; the screen in it scrolls itself. */
|
|
54
|
-
.opt-embed__frame { display: block; width: 100%; height: calc(100vh - 96px); min-height: 480px; border: 0; border-radius: var(--radius); background: transparent; }
|
|
55
|
-
html[data-fullscreen="on"] .opt-embed__frame { height: calc(100vh - 48px); }
|
|
56
75
|
|
|
57
|
-
/*
|
|
58
|
-
|
|
59
|
-
.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
border-
|
|
76
|
+
/* ---- the options menu (task 1005144, ADR 0401; Helm, task 1005194) -----------
|
|
77
|
+
The night panel: the search, then the entries. Sticky beside the open screen,
|
|
78
|
+
so the menu stays in reach while a long screen scrolls; it scrolls itself. */
|
|
79
|
+
.opt-rail {
|
|
80
|
+
position: sticky; top: 72px; box-sizing: border-box;
|
|
81
|
+
display: flex; flex-direction: column;
|
|
82
|
+
max-height: calc(100vh - 96px); overflow-y: auto;
|
|
83
|
+
padding: var(--ds-space-md) 0;
|
|
84
|
+
background: var(--night-glass);
|
|
85
|
+
border: 0 solid var(--rule); border-left-width: var(--line-strong); border-right-width: var(--line-strong);
|
|
86
|
+
}
|
|
87
|
+
/* the panel's own name: only where the top bar is away (full screen, game mode),
|
|
88
|
+
since with the bars up the top bar already says it */
|
|
89
|
+
.opt-title {
|
|
90
|
+
display: none;
|
|
91
|
+
margin: 0 0 var(--ds-space-md); padding: 0 var(--ds-space-lg);
|
|
92
|
+
font-family: var(--name-face); font-size: var(--ds-text-headline); font-weight: var(--name-weight);
|
|
93
|
+
letter-spacing: var(--name-space-wide); text-transform: var(--name-case); line-height: 1.15;
|
|
94
|
+
color: var(--ink); text-shadow: var(--name-glow);
|
|
95
|
+
}
|
|
96
|
+
html[data-fullscreen="on"] .opt-title { display: block; }
|
|
97
|
+
/* the search: the hall's one field (controls.css), on the glass, as wide as the panel */
|
|
98
|
+
.opt-search { display: block; margin: 0 0 var(--ds-space-sm); padding: 0 var(--ds-space-lg); }
|
|
99
|
+
.opt-search input { width: 100%; min-height: 46px; background: var(--glass); font-size: var(--ds-text-xl); }
|
|
100
|
+
.opt-head {
|
|
101
|
+
margin: var(--ds-space-sm) 0 0; padding: var(--ds-space-hair) var(--ds-space-lg);
|
|
102
|
+
font-family: var(--label-face); font-size: var(--label-size); letter-spacing: var(--label-space);
|
|
103
|
+
text-transform: var(--label-case); color: var(--ink-soft);
|
|
104
|
+
}
|
|
105
|
+
/* an entry: a full-width row in the name voice on a soft hairline. The ring sits
|
|
106
|
+
inside the row (the start screen's rule), so it reads on the accent bar too. */
|
|
107
|
+
.opt-link {
|
|
108
|
+
display: flex; flex-direction: column; justify-content: center; box-sizing: border-box;
|
|
109
|
+
min-height: var(--ds-space-xl); padding: var(--ds-space-hair) var(--ds-space-lg);
|
|
110
|
+
border-bottom: var(--line) solid var(--rule-soft);
|
|
111
|
+
color: var(--ink); text-decoration: none;
|
|
112
|
+
font-family: var(--name-face); font-size: var(--ds-text-3xl); font-weight: 400;
|
|
113
|
+
letter-spacing: var(--name-space-tight); text-transform: var(--name-case); line-height: 1.2;
|
|
114
|
+
transition: background-color var(--ds-dur-fast) var(--ds-ease);
|
|
115
|
+
}
|
|
116
|
+
.opt-list > .opt-link:last-child { border-bottom-color: transparent; }
|
|
117
|
+
.opt-link:hover { color: var(--ink); background: var(--glass); text-decoration: none; }
|
|
118
|
+
.opt-link:focus-visible { outline: 0; border-radius: var(--press-radius); box-shadow: var(--press-focus); }
|
|
119
|
+
/* the open entry is the one thing lit: the accent bar under its dark ink */
|
|
120
|
+
.opt-link--active, .opt-link--active:hover {
|
|
121
|
+
color: var(--accent-on); background: var(--accent); border-bottom-color: transparent;
|
|
122
|
+
font-weight: var(--name-weight-lit); box-shadow: var(--accent-glow);
|
|
67
123
|
}
|
|
68
|
-
.
|
|
69
|
-
|
|
124
|
+
.opt-link--active:focus-visible { box-shadow: var(--press-focus), var(--accent-glow); }
|
|
125
|
+
/* where a search hit lives: said, not named, so it is the body voice */
|
|
126
|
+
.opt-link__where { font-family: var(--font-body); font-size: var(--ds-text-xs); letter-spacing: 0; text-transform: none; color: var(--ink-faint); }
|
|
127
|
+
.opt-none { margin: var(--ds-space-xs) 0; padding: 0 var(--ds-space-lg); font-size: var(--ds-text-sm-plus); color: var(--ink-soft); }
|
|
128
|
+
/* The frame fills the column to the bottom of the window, under the screen's name; the screen in it scrolls itself. */
|
|
129
|
+
.opt-embed__frame { display: block; width: 100%; height: calc(100vh - 96px - var(--opt-screen-h)); min-height: 480px; border: 0; border-radius: var(--press-radius); background: transparent; }
|
|
130
|
+
html[data-fullscreen="on"] .opt-embed__frame { height: calc(100vh - 48px - var(--opt-screen-h)); }
|
|
70
131
|
|
|
71
132
|
@media (max-width: 860px) {
|
|
72
133
|
/* Collapse to one column: the menu sits above the open screen, no longer sticky. */
|
|
@@ -74,8 +135,14 @@ html[data-fullscreen="on"] .opt-embed__frame { height: calc(100vh - 48px); }
|
|
|
74
135
|
.opt-rail { position: static; max-height: none; }
|
|
75
136
|
.opt-embed__frame { height: 80vh; }
|
|
76
137
|
}
|
|
77
|
-
@media (
|
|
78
|
-
|
|
138
|
+
@media (min-width: 861px) {
|
|
139
|
+
/* Full screen and game mode: the panel is the window's full height, from the top
|
|
140
|
+
edge. The pull is the room the shell leaves a plain page above its content for
|
|
141
|
+
the corner button (style.css, data-fullscreen-plain). */
|
|
142
|
+
html[data-fullscreen="on"] .opt-rail {
|
|
143
|
+
top: 0; height: 100vh; max-height: none;
|
|
144
|
+
margin-top: -60px; padding-top: var(--ds-space-xl);
|
|
145
|
+
}
|
|
79
146
|
}
|
|
80
147
|
|
|
81
148
|
/* ---- the token ladder (CLI access) ------------------------------------------
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
<link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
|
|
12
12
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
13
13
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
14
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-11-11-
|
|
14
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-11-helm2">
|
|
15
15
|
<!-- The PANEL archetype (task 1003308): the row, the switch, the field, the
|
|
16
16
|
chip control and the family's voices, shared with profile and pair.
|
|
17
17
|
settings.css then holds only what this page
|
|
18
18
|
has — the rail layout, the group head, the token ladder, the voices grid. -->
|
|
19
19
|
<link rel="stylesheet" href="/builders/panel.css">
|
|
20
|
-
<link rel="stylesheet" href="/builders/settings.css">
|
|
20
|
+
<link rel="stylesheet" href="/builders/settings.css?v=2026-11-11-helm2">
|
|
21
21
|
<!-- task 1005094: the device cards and their Run button in Your Autobongos runner. -->
|
|
22
22
|
<link rel="stylesheet" href="/builders/runner-button.css">
|
|
23
23
|
</head>
|
|
@@ -287,6 +287,18 @@
|
|
|
287
287
|
on the same routes. They live on My agents only now; this line is where
|
|
288
288
|
they were. Old deep links (#interaction, #wandering, #rendering, …) are
|
|
289
289
|
sent there by settings-moved.js. -->
|
|
290
|
+
<!-- VIEW — game or classic (task 1005200): the one place the view is switched
|
|
291
|
+
after sign-in. Kept on the account (GET/PATCH /me/hall-view); drawn by
|
|
292
|
+
settings-view.js. -->
|
|
293
|
+
<section class="scroll" id="view-scroll" aria-labelledby="view-h" data-group="preferences" hidden>
|
|
294
|
+
<h2 id="view-h" class="scroll__h">View</h2>
|
|
295
|
+
<p class="scroll__lede">
|
|
296
|
+
Game or classic, never both. You also choose each time you sign in.
|
|
297
|
+
</p>
|
|
298
|
+
<div class="sound-rows" id="view-rows"></div>
|
|
299
|
+
<p class="settings-status" id="view-status" role="status" aria-live="polite"></p>
|
|
300
|
+
</section>
|
|
301
|
+
|
|
290
302
|
<section class="scroll" id="agents-moved-preferences" aria-labelledby="agents-moved-preferences-h" data-group="preferences">
|
|
291
303
|
<h2 id="agents-moved-preferences-h" class="scroll__h">Your agents</h2>
|
|
292
304
|
<p class="scroll__lede">
|
|
@@ -405,10 +417,10 @@
|
|
|
405
417
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
406
418
|
chrome exists before the page scripts run. -->
|
|
407
419
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
408
|
-
<script src="/builders/shell-game.js?v=2026-11-11-
|
|
420
|
+
<script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
|
|
409
421
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
410
422
|
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
411
|
-
<script src="/builders/shell.js?v=2026-11-11-
|
|
423
|
+
<script src="/builders/shell.js?v=2026-11-11-view2"></script>
|
|
412
424
|
<script src="/builders/hall-dialog.js"></script>
|
|
413
425
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
414
426
|
<script src="/builders/palette.js" defer></script>
|
|
@@ -420,7 +432,7 @@
|
|
|
420
432
|
<!-- task 1005044: the old deep links to the agent settings that moved to My agents -->
|
|
421
433
|
<script src="/builders/settings-moved.js?v=2026-11-03-moved"></script>
|
|
422
434
|
<!-- task 1005144: the ONE options menu — the rail, its search, and the screens it opens in a frame. -->
|
|
423
|
-
<script src="/builders/options-menu.js?v=2026-11-
|
|
435
|
+
<script src="/builders/options-menu.js?v=2026-11-11-helm2"></script>
|
|
424
436
|
<script src="/builders/settings.js?v=2026-11-10-options"></script>
|
|
425
437
|
<!-- task 1003341: the Active sessions panel. Its own file rather than more of
|
|
426
438
|
settings.js, which sits close to the 1500-line size ratchet. -->
|
|
@@ -437,6 +449,7 @@
|
|
|
437
449
|
<script src="/builders/runner-button.js"></script>
|
|
438
450
|
<script src="/builders/settings-autobongos.js?v=2026-11-09-run-button"></script>
|
|
439
451
|
<!-- task 1003793: Settings → Module install reports. Own file on the same precedent. -->
|
|
452
|
+
<script src="/builders/settings-view.js?v=2026-11-11-view"></script>
|
|
440
453
|
<script src="/builders/settings-usage-reports.js?v=2026-10-08-usage-reports"></script>
|
|
441
454
|
</body>
|
|
442
455
|
</html>
|
|
@@ -85,6 +85,16 @@ html.gs-open { overflow: hidden; }
|
|
|
85
85
|
.gs__foot { padding: var(--ds-space-md) var(--ds-space-lg) 0; border-top: var(--line-strong) solid var(--rule); }
|
|
86
86
|
.gs__line, .gs__note { margin: 0; font-size: var(--ds-text-lg); line-height: 1.5; text-wrap: pretty; color: var(--ink-soft); }
|
|
87
87
|
.gs__note { margin-top: var(--ds-space-xs); color: var(--ink); }
|
|
88
|
+
/* the view chooser in front of the menu (task 1005200): Game or Classic as two rows in the
|
|
89
|
+
panel's own voice, each with one line saying what it is; the view chosen last time is lit
|
|
90
|
+
with the accent on its edge and says so */
|
|
91
|
+
.gs__ask { margin: 0; padding: 0 var(--ds-space-lg) var(--ds-space-sm); font-size: var(--ds-text-lg); color: var(--ink-soft); }
|
|
92
|
+
.gs__ask[hidden] { display: none; }
|
|
93
|
+
.gs__item--view { flex-direction: column; align-items: flex-start; justify-content: center; gap: var(--ds-space-hair); padding-top: var(--ds-space-sm); padding-bottom: var(--ds-space-sm); }
|
|
94
|
+
.gs__item--last { box-shadow: inset var(--line-strong) 0 0 var(--accent); }
|
|
95
|
+
.gs__view { display: inline-flex; align-items: baseline; gap: var(--ds-space-sm); }
|
|
96
|
+
.gs__sub { font-family: var(--font-body); font-size: var(--ds-text-md); letter-spacing: 0; text-transform: none; color: var(--ink-soft); }
|
|
97
|
+
.gs__last { font-family: var(--font-body); font-size: var(--label-size); letter-spacing: var(--label-space); text-transform: uppercase; color: var(--accent); }
|
|
88
98
|
.gs__note[hidden] { display: none; }
|
|
89
99
|
|
|
90
100
|
/* the load screen: the week it is showing, a segment per week, the city, and the tip under it */
|