@bongos/core 1.21.42 → 1.21.43
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 +56 -56
- package/docs/copy-inventory.md +10 -11
- package/docs/copy-registry.json +11 -20
- package/docs/design/craft-mode-direction.md +1 -1
- package/docs/module-api-changelog.md +2 -0
- package/docs/page-readings.json +3465 -3532
- 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 +3 -3
- package/modules/hall-ui/public/collab.html +3 -3
- package/modules/hall-ui/public/commands.html +3 -3
- package/modules/hall-ui/public/copy-desk.html +3 -3
- package/modules/hall-ui/public/craft-mode.js +10 -15
- package/modules/hall-ui/public/deploy.html +3 -3
- package/modules/hall-ui/public/diagrams.html +3 -3
- package/modules/hall-ui/public/drachmae.html +3 -3
- package/modules/hall-ui/public/fleet.html +3 -3
- package/modules/hall-ui/public/gate.html +3 -3
- package/modules/hall-ui/public/goal-map.html +3 -3
- 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 +3 -3
- package/modules/hall-ui/public/modules.html +3 -3
- 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/ranks.html +3 -3
- package/modules/hall-ui/public/roadmap.html +3 -3
- package/modules/hall-ui/public/roster.html +3 -3
- package/modules/hall-ui/public/sessions.html +3 -3
- package/modules/hall-ui/public/settings.html +3 -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 +4 -22
- package/modules/hall-ui/public/task.html +3 -3
- package/modules/hall-ui/public/thinking.html +3 -3
- package/modules/hall-ui/public/tweak-editor.html +3 -3
- 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 +5 -5
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +6 -0
- package/src/module-api.js +1 -1
- package/tests/craft_mode.mjs +27 -10
- package/tests/craft_mode_looks.mjs +5 -5
- package/tests/craft_mode_nav.mjs +7 -7
- package/tests/hall_tweak_editor.mjs +1 -1
- package/tests/page_notes_panel.mjs +1 -1
|
@@ -91,9 +91,9 @@
|
|
|
91
91
|
|
|
92
92
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
93
93
|
|
|
94
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
95
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
96
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
94
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
95
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
96
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
97
97
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
98
98
|
<script src="/builders/palette.js" defer></script>
|
|
99
99
|
<script src="/builders/atlas.js?v=2026-09-02-index" defer></script>
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
|
|
51
51
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
52
52
|
chrome exists before the page script runs. -->
|
|
53
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
54
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
55
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
53
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
54
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
55
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
56
56
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
57
57
|
<script src="/builders/palette.js" defer></script>
|
|
58
58
|
<!-- shared frontend toolkit (window.OTB — rank labels, number formats) + the
|
|
@@ -60,9 +60,9 @@
|
|
|
60
60
|
|
|
61
61
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
62
62
|
|
|
63
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
64
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
65
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
63
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
64
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
65
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
66
66
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
67
67
|
<script src="/builders/palette.js" defer></script>
|
|
68
68
|
<script src="/builders/dom-utils.js?v=2026-06-16-board"></script>
|
|
@@ -83,9 +83,9 @@
|
|
|
83
83
|
</div>
|
|
84
84
|
</div>
|
|
85
85
|
|
|
86
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
87
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
88
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
86
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
87
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
88
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
89
89
|
<script src="/builders/palette.js" defer></script>
|
|
90
90
|
<script src="/builders/city-draw.js?v=2026-10-02-city1"></script>
|
|
91
91
|
<script src="/builders/city.js?v=2026-10-02-city1"></script>
|
|
@@ -148,9 +148,9 @@
|
|
|
148
148
|
|
|
149
149
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
150
150
|
|
|
151
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
152
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
153
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
151
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
152
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
153
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
154
154
|
<script src="/builders/palette.js" defer></script>
|
|
155
155
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
156
156
|
<script src="/builders/collab-lib.js?v=2026-09-24-archive"></script>
|
|
@@ -54,9 +54,9 @@
|
|
|
54
54
|
|
|
55
55
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
56
56
|
|
|
57
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
58
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
59
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
57
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
58
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
59
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></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>
|
|
62
62
|
<script src="/builders/dom-utils.js?v=2026-06-14-domutils"></script>
|
|
@@ -177,9 +177,9 @@
|
|
|
177
177
|
|
|
178
178
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
179
179
|
|
|
180
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
181
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
182
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
180
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
181
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
182
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
183
183
|
<script src="/builders/palette.js" defer></script>
|
|
184
184
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
185
185
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// craft-mode.js — the hall's craft mode (task 1004492, goal 1000095 WA6).
|
|
2
2
|
//
|
|
3
3
|
// On entering the hall (once per browser session) a picker asks "What are you
|
|
4
|
-
// doing now?": Building, Artistry, Ideating
|
|
4
|
+
// doing now?": Building, Artistry, Ideating or Governing. The
|
|
5
5
|
// answer is ONE attribute, html[data-craft="<mode>"], that every hall page can
|
|
6
6
|
// read, and a switch in the top bar changes it at any time without a reload.
|
|
7
7
|
// Each change also fires `otb:craft` on document ({ detail: { mode } }).
|
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
// It is a MODE the existing hall wears, never a second hall (the founding-mode
|
|
10
10
|
// precedent, docs/design/project-startup-direction.md). The nav follows the mode
|
|
11
11
|
// (task 1004493, MODE_TABS below), and so does the look (task 1004495, LOOKS
|
|
12
|
-
// below); the mode tools are their own tasks (1004496 onward). Legacy mode
|
|
13
|
-
//
|
|
12
|
+
// below); the mode tools are their own tasks (1004496 onward). Legacy mode, a
|
|
13
|
+
// fifth choice, was removed (task 1004567): Building already shows every tab,
|
|
14
|
+
// and a stored 'legacy' now reads as no mode.
|
|
14
15
|
//
|
|
15
16
|
// NO MODE is the default and the fallback: a reader who closes the picker, a
|
|
16
17
|
// browser whose storage throws, a page that opts out — none of them get the
|
|
@@ -29,25 +30,23 @@
|
|
|
29
30
|
artistry: '<path d="M8 2a6 6 0 1 0 0 12c.9 0 1.4-.6 1.4-1.3 0-.8-.6-1-.6-1.7 0-.6.5-1 1.2-1h1.6A2.4 2.4 0 0 0 14 7.6C14 4.5 11.3 2 8 2Z"/><path d="M5 6.2h.01M7.6 4.6h.01M10.4 5.2h.01M4.6 9h.01" stroke-width="2.2"/>',
|
|
30
31
|
ideating: '<path d="M6 12.5h4M6.6 14.5h2.8M8 1.8a4.2 4.2 0 0 0-2.6 7.5c.6.5 1 1.2 1 2h3.2c0-.8.4-1.5 1-2A4.2 4.2 0 0 0 8 1.8Z"/>',
|
|
31
32
|
governing: '<path d="M2 6 8 2.5 14 6M3.5 6.5v6M6.5 6.5v6M9.5 6.5v6M12.5 6.5v6M2 13.5h12"/>',
|
|
32
|
-
legacy: '<path d="M3 3.5h10v9H3z"/><path d="M3 6.5h10M6 6.5v6"/>',
|
|
33
33
|
modes: '<rect x="2.5" y="2.5" width="4.5" height="4.5" rx="1"/><rect x="9" y="2.5" width="4.5" height="4.5" rx="1"/><rect x="2.5" y="9" width="4.5" height="4.5" rx="1"/><rect x="9" y="9" width="4.5" height="4.5" rx="1"/>',
|
|
34
34
|
};
|
|
35
|
-
// The four crafts
|
|
35
|
+
// The four crafts. `short` is the switch's label; `line` is the
|
|
36
36
|
// picker's one sentence — what you do in the mode, never a feature not built yet.
|
|
37
37
|
var MODES = [
|
|
38
38
|
{ id: 'building', label: 'Building', short: 'Building', line: 'Claim tasks and ship code.' },
|
|
39
39
|
{ id: 'artistry', label: 'Artistry', short: 'Artistry', line: 'Review how pages look and read.' },
|
|
40
40
|
{ id: 'ideating', label: 'Ideating', short: 'Ideating', line: 'Turn thoughts into ideas.' },
|
|
41
41
|
{ id: 'governing', label: 'Governing', short: 'Governing', line: 'Decide, approve and keep it healthy.' },
|
|
42
|
-
{ id: 'legacy', label: 'Legacy mode', short: 'Legacy', line: 'The hall as it was: every tab, no mode tools or colour.' },
|
|
43
42
|
];
|
|
44
43
|
var IDS = MODES.map(function (m) { return m.id; });
|
|
45
44
|
|
|
46
45
|
// ---------- each mode's tabs (task 1004493) ----------
|
|
47
46
|
// A mode shows only the nav items its craft needs, by NAV id (shell.js). ALWAYS
|
|
48
47
|
// is the owner's list of tabs no mode may hide (2026-10-01: Builders first;
|
|
49
|
-
// 2026-10-03: Collab and Profile too), and every mode's list is ALWAYS plus its own.
|
|
50
|
-
//
|
|
48
|
+
// 2026-10-03: Collab and Profile too), and every mode's list is ALWAYS plus its own. With no mode at all, every tab
|
|
49
|
+
// shows, exactly as the hall did before.
|
|
51
50
|
// Government lives in Governing alone, and Governing is the shortest list.
|
|
52
51
|
// Hiding is cosmetic: a hidden tab's page still opens by its URL (ADR 0016).
|
|
53
52
|
var ALWAYS_TABS = ['roster', 'collab', 'profile'];
|
|
@@ -97,7 +96,7 @@
|
|
|
97
96
|
// style.css (keyed on html[data-craft]), plus two things only this script can
|
|
98
97
|
// draw — the mode's words beside the page title, and its door's scene framed
|
|
99
98
|
// under the brand (artHtml, the picker's own art, so the two never drift).
|
|
100
|
-
// Building
|
|
99
|
+
// Building and no mode have no entry here and wear nothing.
|
|
101
100
|
var LOOKS = { artistry: 'the studio · night', ideating: 'the sky', governing: 'the city' };
|
|
102
101
|
function remove(el) { if (el && el.parentNode) el.parentNode.removeChild(el); }
|
|
103
102
|
function applyLook(mode) {
|
|
@@ -328,13 +327,12 @@
|
|
|
328
327
|
return '<span class="craft-art craft-art--' + id + '" aria-hidden="true">' + html + '</span>';
|
|
329
328
|
}
|
|
330
329
|
function pickerHtml(preselect) {
|
|
331
|
-
var doors = MODES.
|
|
330
|
+
var doors = MODES.map(function (m) {
|
|
332
331
|
return '<button class="craft-door craft-door--' + m.id + (m.id === preselect ? ' craft-door--pre' : '') + '" type="button" data-craft-pick="' + m.id + '">' +
|
|
333
332
|
artHtml(m.id) +
|
|
334
333
|
'<span class="craft-door__head">' + icon(m.id, 'craft-door__icon') + '<span class="craft-door__name">' + esc(m.label) + '</span></span>' +
|
|
335
334
|
'<span class="craft-door__line">' + esc(m.line) + '</span></button>';
|
|
336
335
|
}).join('');
|
|
337
|
-
var legacy = MODES[MODES.length - 1];
|
|
338
336
|
return '<div class="craft-picker__panel" role="dialog" aria-modal="true" aria-labelledby="craft-picker-title" aria-describedby="craft-picker-lede">' +
|
|
339
337
|
'<button class="craft-picker__close" type="button" data-craft-close aria-label="Close without choosing">' +
|
|
340
338
|
'<svg viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" aria-hidden="true"><path d="M5 5l8 8M13 5l-8 8"/></svg></button>' +
|
|
@@ -344,10 +342,7 @@
|
|
|
344
342
|
'<div class="craft-picker__doors">' + doors + '</div>' +
|
|
345
343
|
'<div class="craft-picker__foot">' +
|
|
346
344
|
'<label class="craft-picker__again"><input type="checkbox" data-craft-again checked> Ask me again next session</label>' +
|
|
347
|
-
'<span class="craft-
|
|
348
|
-
(preselect === 'artistry' ? '<span class="craft-picker__hint">Artists start on Artistry.</span>' : '') +
|
|
349
|
-
'<button class="craft-picker__legacy" type="button" data-craft-pick="legacy" title="' + esc(legacy.line) + '">Legacy mode · the hall as it was</button>' +
|
|
350
|
-
'</span>' +
|
|
345
|
+
(preselect === 'artistry' ? '<span class="craft-picker__hint">Artists start on Artistry.</span>' : '') +
|
|
351
346
|
'</div>' +
|
|
352
347
|
'</div>';
|
|
353
348
|
}
|
|
@@ -74,9 +74,9 @@
|
|
|
74
74
|
|
|
75
75
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
76
76
|
|
|
77
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
78
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
79
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
77
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
78
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
79
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
80
80
|
<script src="/builders/palette.js" defer></script>
|
|
81
81
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
82
82
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -97,9 +97,9 @@
|
|
|
97
97
|
|
|
98
98
|
<!-- The app shell (sidebar + top bar + footer). Dependency-free; runs at parse
|
|
99
99
|
time so the chrome exists before the deferred page scripts execute. -->
|
|
100
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
101
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
102
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
100
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
101
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
102
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
103
103
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
104
104
|
<script src="/builders/palette.js" defer></script>
|
|
105
105
|
<script src="/builders/diagram-viewer.js?v=2026-06-14-diagviewer-1" defer></script>
|
|
@@ -98,9 +98,9 @@
|
|
|
98
98
|
|
|
99
99
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
100
100
|
|
|
101
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
102
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
103
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
101
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
102
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
103
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
104
104
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
105
105
|
<script src="/builders/palette.js" defer></script>
|
|
106
106
|
<script src="/builders/md-reader.js?v=2026-09-02-mdreader-2"></script>
|
|
@@ -54,9 +54,9 @@
|
|
|
54
54
|
|
|
55
55
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
56
56
|
|
|
57
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
58
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
59
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
57
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
58
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
59
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
60
60
|
<script src="/builders/palette.js" defer></script>
|
|
61
61
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
62
62
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -77,9 +77,9 @@
|
|
|
77
77
|
<div id="gate-modal-root"></div>
|
|
78
78
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
79
79
|
|
|
80
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
81
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
82
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
80
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
81
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
82
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></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>
|
|
85
85
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
@@ -137,9 +137,9 @@
|
|
|
137
137
|
</div>
|
|
138
138
|
</div>
|
|
139
139
|
|
|
140
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
141
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
142
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
140
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
141
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
142
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
143
143
|
<script src="/builders/palette.js" defer></script>
|
|
144
144
|
|
|
145
145
|
<script src="/builders/idea-objects.js?v=2026-09-27-split"></script>
|
|
@@ -230,9 +230,9 @@
|
|
|
230
230
|
|
|
231
231
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
232
232
|
|
|
233
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
234
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
235
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
233
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
234
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
235
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
236
236
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
237
237
|
<script src="/builders/palette.js" defer></script>
|
|
238
238
|
<script src="/builders/dom-utils.js?v=2026-06-14-domutils"></script>
|
|
@@ -134,9 +134,9 @@
|
|
|
134
134
|
|
|
135
135
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
136
136
|
|
|
137
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
138
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
139
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
137
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
138
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
139
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
140
140
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
141
141
|
<script src="/builders/palette.js" defer></script>
|
|
142
142
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
|
|
51
51
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
52
52
|
|
|
53
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
54
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
55
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
53
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
54
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
55
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
56
56
|
<script src="/builders/palette.js" defer></script>
|
|
57
57
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib" defer></script>
|
|
58
58
|
<!-- task-detail.js still owns the #/idea/N and #/blocker/N overlay, so a ref
|
|
@@ -225,9 +225,9 @@
|
|
|
225
225
|
|
|
226
226
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
227
227
|
|
|
228
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
229
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
230
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
228
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
229
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
230
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
231
231
|
<script src="/builders/palette.js" defer></script>
|
|
232
232
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
233
233
|
<!-- task 1003069 (R08) — the quick-filing form's routed result links a task
|
|
@@ -106,9 +106,9 @@
|
|
|
106
106
|
<script src="/builders/brand-apply.js?v=2026-06-27-r75" defer></script>
|
|
107
107
|
<!-- The app shell (sidebar + top bar + view router). Dependency-free; loaded
|
|
108
108
|
BEFORE builders.js so the chrome ids exist when events are wired. -->
|
|
109
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
110
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
111
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
109
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy" defer></script>
|
|
110
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy" defer></script>
|
|
111
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy" defer></script>
|
|
112
112
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
113
113
|
<script src="/builders/palette.js" defer></script>
|
|
114
114
|
<!-- task 2166: the shared component kit (window.OTBKit) — pager/ledger/rail.
|
|
@@ -101,9 +101,9 @@
|
|
|
101
101
|
|
|
102
102
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
103
103
|
|
|
104
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
105
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
106
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
104
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
105
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
106
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
107
107
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
108
108
|
<script src="/builders/palette.js" defer></script>
|
|
109
109
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
@@ -115,9 +115,9 @@
|
|
|
115
115
|
|
|
116
116
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
117
117
|
|
|
118
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
119
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
120
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
118
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
119
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
120
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
121
121
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
122
122
|
<script src="/builders/palette.js" defer></script>
|
|
123
123
|
<!-- the shared markdown reader (window.OTBMdReader) — primer.js renders through
|
|
@@ -206,9 +206,9 @@
|
|
|
206
206
|
|
|
207
207
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
208
208
|
chrome exists before the page script runs. -->
|
|
209
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
210
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
211
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
209
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
210
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
211
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
212
212
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
213
213
|
<script src="/builders/palette.js" defer></script>
|
|
214
214
|
<!-- shared frontend toolkit (window.OTB) — loaded before profile.js, which pulls from it. -->
|
|
@@ -58,9 +58,9 @@
|
|
|
58
58
|
|
|
59
59
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
60
60
|
|
|
61
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
62
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
63
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
61
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
62
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
63
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
64
64
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
65
65
|
<script src="/builders/palette.js" defer></script>
|
|
66
66
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
@@ -77,9 +77,9 @@
|
|
|
77
77
|
|
|
78
78
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
79
79
|
chrome exists before the page script runs. -->
|
|
80
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
81
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
82
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
80
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
81
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
82
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></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>
|
|
85
85
|
<!-- shared frontend toolkit (window.OTB) — loaded before ranks.js, which pulls from it. -->
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
|
|
42
42
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
43
43
|
|
|
44
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
45
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
46
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
44
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
45
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
46
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
47
47
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
48
48
|
<script src="/builders/palette.js" defer></script>
|
|
49
49
|
<script src="/builders/dom-utils.js?v=2026-06-14-domutils"></script>
|
|
@@ -53,9 +53,9 @@
|
|
|
53
53
|
|
|
54
54
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
55
55
|
chrome exists before the page script runs. -->
|
|
56
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
57
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
58
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
56
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
57
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
58
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
59
59
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
60
60
|
<script src="/builders/palette.js" defer></script>
|
|
61
61
|
<!-- shared frontend toolkit (window.OTB — rank labels, number formats) + the
|
|
@@ -111,9 +111,9 @@
|
|
|
111
111
|
|
|
112
112
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
113
113
|
chrome exists before the page script runs. -->
|
|
114
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
115
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
116
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
114
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
115
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
116
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
117
117
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
118
118
|
<script src="/builders/palette.js" defer></script>
|
|
119
119
|
<!-- shared frontend toolkit (window.OTB) — loaded BEFORE sessions.js so it can pull from it. -->
|
|
@@ -435,9 +435,9 @@
|
|
|
435
435
|
|
|
436
436
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
437
437
|
chrome exists before the page scripts run. -->
|
|
438
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
439
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
440
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
438
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
439
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
440
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
441
441
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
442
442
|
<script src="/builders/palette.js" defer></script>
|
|
443
443
|
<!-- shared frontend toolkit (window.OTB) — loaded before consuming IIFEs. -->
|
|
@@ -203,9 +203,9 @@
|
|
|
203
203
|
</div>
|
|
204
204
|
</div>
|
|
205
205
|
|
|
206
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
207
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
208
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
206
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
207
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
208
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
209
209
|
<script src="/builders/palette.js" defer></script>
|
|
210
210
|
<script src="/builders/city-draw.js?v=2026-10-02-street1"></script>
|
|
211
211
|
<script src="/builders/street-draw.js?v=2026-10-02-street1"></script>
|
|
@@ -176,9 +176,9 @@
|
|
|
176
176
|
|
|
177
177
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
178
178
|
|
|
179
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
180
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
181
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
179
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
180
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
181
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
182
182
|
<script src="/builders/palette.js" defer></script>
|
|
183
183
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
184
184
|
<!-- The kit, for its ONE renderer: the full-size ship-time visual figure
|
|
@@ -1204,7 +1204,7 @@ html[data-fullscreen="on"][data-fullscreen-plain="on"] .app-content { padding-to
|
|
|
1204
1204
|
}
|
|
1205
1205
|
|
|
1206
1206
|
/* THE CRAFT MODE (task 1004492, craft-mode.js). The top bar's switch: one pill
|
|
1207
|
-
holding the four crafts
|
|
1207
|
+
holding the four crafts, the current one lit. Narrower windows
|
|
1208
1208
|
drop the words, and a phone shows only the current mode (or "Mode"), which
|
|
1209
1209
|
opens the picker. The picker below asks once per session. Each mode's look
|
|
1210
1210
|
(its colour on the current pill) is THE CRAFT MODE LOOKS, further down. */
|
|
@@ -1251,7 +1251,7 @@ html[data-fullscreen="on"][data-fullscreen-plain="on"] .app-content { padding-to
|
|
|
1251
1251
|
.craft-switch--unset .craft-switch__open { display: inline-flex; padding: 0 7px; }
|
|
1252
1252
|
}
|
|
1253
1253
|
|
|
1254
|
-
/* The picker: a dialog over a scrim, four doors in a row
|
|
1254
|
+
/* The picker: a dialog over a scrim, four doors in a row above the
|
|
1255
1255
|
"ask me again" box. Each door carries its scene from the approved prototype,
|
|
1256
1256
|
which is night-dark in either theme because every scene is a night one. */
|
|
1257
1257
|
html.craft-picker-open { overflow: hidden; }
|
|
@@ -1396,24 +1396,7 @@ html.craft-picker-open { overflow: hidden; }
|
|
|
1396
1396
|
cursor: pointer;
|
|
1397
1397
|
}
|
|
1398
1398
|
.craft-picker__again input { width: 18px; height: 18px; margin: 0; accent-color: var(--accent); }
|
|
1399
|
-
.craft-picker__side { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 12px 18px; }
|
|
1400
1399
|
.craft-picker__hint { font-size: 13px; color: var(--ink-faint); }
|
|
1401
|
-
.craft-picker__legacy {
|
|
1402
|
-
display: inline-flex;
|
|
1403
|
-
align-items: center;
|
|
1404
|
-
height: 40px;
|
|
1405
|
-
padding: 0 18px;
|
|
1406
|
-
border: 0;
|
|
1407
|
-
border-radius: var(--radius-pill);
|
|
1408
|
-
background: none;
|
|
1409
|
-
color: var(--ink);
|
|
1410
|
-
font: inherit;
|
|
1411
|
-
font-size: 14px;
|
|
1412
|
-
cursor: pointer;
|
|
1413
|
-
box-shadow: inset 0 0 0 1px var(--rule);
|
|
1414
|
-
}
|
|
1415
|
-
.craft-picker__legacy:hover { background: var(--glass); }
|
|
1416
|
-
.craft-picker__legacy:focus-visible,
|
|
1417
1400
|
.craft-picker__close:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
|
|
1418
1401
|
@media (max-width: 900px) {
|
|
1419
1402
|
.craft-picker__doors { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
@@ -1428,12 +1411,11 @@ html.craft-picker-open { overflow: hidden; }
|
|
|
1428
1411
|
.craft-door__head { padding: 10px 16px 0; }
|
|
1429
1412
|
.craft-door__name { font-size: 18px; }
|
|
1430
1413
|
.craft-door__line { flex: 0 0 100%; padding: 0 16px; box-sizing: border-box; }
|
|
1431
|
-
.craft-picker__legacy { height: auto; min-height: 40px; white-space: normal; text-align: left; }
|
|
1432
1414
|
}
|
|
1433
1415
|
|
|
1434
1416
|
/* THE CRAFT MODE LOOKS (task 1004495; direction docs/design/craft-mode-direction.md).
|
|
1435
|
-
Three modes wear a look: Artistry, Ideating, Governing. Building
|
|
1436
|
-
|
|
1417
|
+
Three modes wear a look: Artistry, Ideating, Governing. Building and no mode
|
|
1418
|
+
wear none — nothing below names them, so they render as the hall always
|
|
1437
1419
|
did (tests/craft_mode_looks.mjs pins it). --craft marks WHERE you are, never
|
|
1438
1420
|
what to press: the accent stays the action colour in every mode. Light values
|
|
1439
1421
|
clear 5.4:1 on the hall's paper; the dark values are the prototype's. Light
|
|
@@ -54,9 +54,9 @@
|
|
|
54
54
|
|
|
55
55
|
<!-- The app shell (sidebar + top bar + footer). Dependency-free; runs at parse
|
|
56
56
|
time so the chrome exists before the deferred page scripts execute. -->
|
|
57
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
58
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
59
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
57
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
58
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
59
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></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>
|
|
62
62
|
<!-- shared frontend toolkit (window.OTB) — loaded FIRST so task.js can pull from it. -->
|
|
@@ -138,9 +138,9 @@
|
|
|
138
138
|
</div>
|
|
139
139
|
</div>
|
|
140
140
|
|
|
141
|
-
<script src="/builders/shell-trail.js?v=2026-10-04-
|
|
142
|
-
<script src="/builders/craft-mode.js?v=2026-10-04-
|
|
143
|
-
<script src="/builders/shell.js?v=2026-10-04-
|
|
141
|
+
<script src="/builders/shell-trail.js?v=2026-10-04-nolegacy"></script>
|
|
142
|
+
<script src="/builders/craft-mode.js?v=2026-10-04-nolegacy"></script>
|
|
143
|
+
<script src="/builders/shell.js?v=2026-10-04-nolegacy"></script>
|
|
144
144
|
<script src="/builders/palette.js" defer></script>
|
|
145
145
|
|
|
146
146
|
<script src="/builders/idea-objects.js?v=2026-09-27-split"></script>
|