@bongos/core 1.19.457 → 1.19.459
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 +126 -46
- package/.claude/skills/design/SKILL.md +10 -0
- package/docs/adr/0219-a-look-is-a-branding-pack-the-style-library.md +30 -0
- package/docs/adr/README.md +1 -0
- package/docs/branding-contract.md +1 -1
- package/docs/copy-inventory.md +160 -177
- package/docs/copy-registry.json +445 -606
- package/docs/file-map.md +2 -2
- package/docs/module-api-changelog.md +4 -0
- package/docs/recipes/ui-look-before-you-ship.md +2 -0
- package/modules/hall-ui/public/gate.css +20 -88
- package/modules/hall-ui/public/gate.html +24 -12
- package/modules/hall-ui/public/gate.js +77 -60
- package/modules/hall-ui/public/gate.states.json +19 -1
- package/modules/hall-ui/public/government.css +96 -154
- package/modules/hall-ui/public/government.html +80 -52
- package/modules/hall-ui/public/government.js +227 -136
- package/modules/hall-ui/public/government.states.json +71 -1
- package/modules/hall-ui/public/harbor.css +9 -120
- package/modules/hall-ui/public/harbor.html +23 -11
- package/modules/hall-ui/public/harbor.js +109 -83
- package/modules/hall-ui/public/harbor.states.json +19 -1
- package/modules/hall-ui/public/oversight.css +296 -0
- package/modules/hall-ui/public/watch.css +56 -170
- package/modules/hall-ui/public/watch.html +48 -37
- package/modules/hall-ui/public/watch.js +363 -298
- package/modules/hall-ui/public/watch.states.json +48 -1
- package/modules/ui-design/kit/README.md +7 -5
- package/modules/ui-design/kit/check-mock.js +12 -5
- package/modules/ui-design/kit/contrast.js +13 -6
- package/modules/ui-design/kit/lib.js +39 -2
- package/modules/ui-design/kit/probe.js +4 -1
- package/modules/ui-design/kit/render.js +7 -4
- package/modules/ui-design/kit/serve.js +9 -2
- package/modules/ui-design/styles/README.md +54 -2
- package/modules/ui-design/styles/chrome-world/DESIGN.md +56 -0
- package/modules/ui-design/styles/chrome-world/mock.html +275 -0
- package/modules/ui-design/styles/chrome-world/mock.states.json +11 -0
- package/modules/ui-design/styles/chrome-world/pack.json +33 -0
- package/modules/ui-design/styles/expedition/DESIGN.md +141 -0
- package/modules/ui-design/styles/expedition/mock.html +285 -0
- package/modules/ui-design/styles/expedition/mock.states.json +11 -0
- package/modules/ui-design/styles/expedition/pack.json +33 -0
- package/modules/ui-design/styles/grove/DESIGN.md +148 -0
- package/modules/ui-design/styles/grove/mock.html +294 -0
- package/modules/ui-design/styles/grove/mock.states.json +11 -0
- package/modules/ui-design/styles/grove/pack.json +33 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/src/module-api.js +1 -1
- package/tests/cosmos_token_contrast.mjs +9 -2
- package/tests/hall_oversight_world.mjs +118 -0
- package/tests/hall_tokens.mjs +15 -6
- package/tests/ui_design_styles.mjs +218 -0
- package/tests/world_tokens.mjs +9 -2
|
@@ -1,172 +1,114 @@
|
|
|
1
|
-
/* government.css — Page-local styles for the Government page (
|
|
2
|
-
permissions / assignments
|
|
3
|
-
|
|
1
|
+
/* government.css — Page-local styles for the Government page (task 1003469
|
|
2
|
+
rebuild; the ranks / permissions / assignments surface is BV1.R111, ADR 0151,
|
|
3
|
+
the three-section IA is ADR 0175). Every panel is the shell's .scroll, every
|
|
4
|
+
row the oversight family's .ov-row (oversight.css); what lives here is what
|
|
5
|
+
only this page has — the two-panel Permissions layout, the sitting card of
|
|
6
|
+
the Board Room and its ballot, and two names a test pins. The ?v= cache-bust
|
|
4
7
|
is stamped from this file's content hash at boot (src/asset-version.js). */
|
|
5
8
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
.gov-rank-list { display: flex; flex-direction: column; gap: 8px; }
|
|
20
|
-
.gov-rank {
|
|
21
|
-
text-align: left; font: inherit; cursor: pointer;
|
|
22
|
-
border: var(--line) solid var(--rule-soft); border-radius: var(--radius-sm);
|
|
23
|
-
background: var(--bg-card); padding: 10px 12px;
|
|
24
|
-
display: flex; flex-direction: column; gap: 4px;
|
|
9
|
+
/* Two names tests/government_board_room_copy.mjs pins by their literal markup:
|
|
10
|
+
the panel heading and its one-line lede. They carry the shell's own voice —
|
|
11
|
+
.scroll__h and .scroll__lede — under the pinned names, so the markup the test
|
|
12
|
+
reads is the markup the world renders. */
|
|
13
|
+
.gov-h {
|
|
14
|
+
margin: 0 0 8px;
|
|
15
|
+
font-family: var(--font-display);
|
|
16
|
+
font-weight: 300;
|
|
17
|
+
font-size: 21px;
|
|
18
|
+
line-height: 1.15;
|
|
19
|
+
letter-spacing: -0.03em;
|
|
20
|
+
color: var(--ink);
|
|
21
|
+
text-shadow: var(--type-halo);
|
|
25
22
|
}
|
|
26
|
-
.gov-
|
|
27
|
-
.gov-
|
|
28
|
-
.gov-
|
|
29
|
-
|
|
30
|
-
.gov-rank__meta { color: var(--ink-faint); font-size: 11.5px; }
|
|
31
|
-
|
|
32
|
-
/* The base is the shell's .fact-pill (task 1003307) — this sheet's copy spelled
|
|
33
|
-
the label voice as literals, so it never flipped to the body face in dark.
|
|
34
|
-
Only the states are the page's own, and a state is a HAIRLINE in its own
|
|
35
|
-
colour: the archetype's .status carries no fill, so the pill never competes
|
|
36
|
-
with the row it sits on. */
|
|
37
|
-
.gov-pill--seeded { color: var(--info); }
|
|
38
|
-
.gov-pill--custom { color: var(--ok); }
|
|
39
|
-
.gov-pill--locked { color: var(--danger); }
|
|
40
|
-
.gov-pill--floor { font-variant-numeric: tabular-nums; }
|
|
41
|
-
|
|
42
|
-
/* ---- permission grid ---------------------------------------------------- */
|
|
43
|
-
.gov-section { margin: 0 0 18px; border: var(--line) solid var(--rule-soft); border-radius: var(--radius); background: var(--bg-card); overflow: hidden; }
|
|
44
|
-
.gov-section__head {
|
|
45
|
-
padding: 8px 14px; font-size: 11.5px; font-weight: 600;
|
|
46
|
-
letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-soft);
|
|
47
|
-
background: var(--glass); border-bottom: var(--line) solid var(--rule-soft);
|
|
23
|
+
.gov-grid-note { margin: 0 0 14px; font-size: 13.5px; line-height: 1.5; color: var(--ink-soft); max-width: var(--measure); }
|
|
24
|
+
.gov-grid-note strong { color: var(--ink); font-weight: 500; }
|
|
25
|
+
.gov-grid-note code, .ov-row__sub code, .ov-row__title code, .ov-foot code {
|
|
26
|
+
font-family: var(--font-mono); font-size: 12.5px; color: var(--ink); overflow-wrap: anywhere;
|
|
48
27
|
}
|
|
49
|
-
.gov-perm { display: flex; align-items: center; gap: 10px; padding: 8px 14px; border-bottom: var(--line) solid var(--rule-soft); }
|
|
50
|
-
.gov-perm:last-child { border-bottom: 0; }
|
|
51
|
-
.gov-perm__main { flex: 1 1 auto; min-width: 0; }
|
|
52
|
-
.gov-perm__key {
|
|
53
|
-
font-family: var(--font-mono); font-size: 12.5px;
|
|
54
|
-
color: var(--accent-ink); background: var(--glass);
|
|
55
|
-
padding: 1px 5px; border-radius: 4px;
|
|
56
|
-
}
|
|
57
|
-
.gov-perm__guards { color: var(--ink-soft); font-size: 12px; margin-top: 2px; overflow-wrap: anywhere; }
|
|
58
|
-
|
|
59
|
-
/* The toggle: a small pill button. Held = filled; not held = outline. */
|
|
60
|
-
.gov-toggle {
|
|
61
|
-
font: inherit; font-size: 12px; font-weight: 600; cursor: pointer;
|
|
62
|
-
padding: 4px 12px; border-radius: var(--radius-pill); white-space: nowrap;
|
|
63
|
-
border: var(--line) solid var(--rule); background: var(--bg-card); color: var(--ink-soft);
|
|
64
|
-
}
|
|
65
|
-
.gov-toggle[aria-pressed="true"] { background: var(--accent); border-color: var(--accent); color: var(--accent-on); }
|
|
66
|
-
.gov-toggle:hover:not(:disabled) { border-color: var(--accent); }
|
|
67
|
-
.gov-toggle:disabled { opacity: 0.55; cursor: default; }
|
|
68
|
-
.gov-held-note { color: var(--ok); font-size: 12px; white-space: nowrap; }
|
|
69
28
|
|
|
70
|
-
/*
|
|
71
|
-
|
|
72
|
-
.gov-
|
|
73
|
-
.gov-input {
|
|
74
|
-
font: inherit; font-size: 13px; color: var(--ink);
|
|
75
|
-
background: var(--bg-card); border: var(--line) solid var(--rule);
|
|
76
|
-
border-radius: var(--radius-sm); padding: 7px 10px;
|
|
77
|
-
}
|
|
78
|
-
.gov-input:focus { outline: none; border-color: var(--accent); }
|
|
79
|
-
.gov-input--id { width: 110px; }
|
|
80
|
-
.gov-btn {
|
|
81
|
-
font: inherit; font-size: 13px; font-weight: 600;
|
|
82
|
-
padding: 7px 16px; border: var(--line) solid var(--accent);
|
|
83
|
-
background: var(--accent); color: var(--accent-on);
|
|
84
|
-
border-radius: var(--radius-sm); cursor: pointer; align-self: flex-start;
|
|
85
|
-
}
|
|
86
|
-
.gov-btn:hover:not(:disabled) { background: var(--accent-lift); border-color: var(--accent-lift); }
|
|
87
|
-
.gov-btn:disabled { opacity: 0.45; cursor: default; }
|
|
88
|
-
.gov-btn--ghost { background: var(--bg-card); color: var(--ink); border-color: var(--rule); }
|
|
89
|
-
.gov-btn--ghost:hover:not(:disabled) { background: var(--glass); }
|
|
90
|
-
.gov-btn--small { font-size: 12px; padding: 4px 10px; }
|
|
91
|
-
|
|
92
|
-
/* ---- assignments + principals ------------------------------------------ */
|
|
93
|
-
.gov-assign-row { display: flex; align-items: center; gap: 10px; padding: 8px 14px; border-bottom: var(--line) solid var(--rule-soft); }
|
|
94
|
-
.gov-assign-row:last-child { border-bottom: 0; }
|
|
95
|
-
.gov-assign-row__who { flex: 1 1 auto; color: var(--ink); font-size: 13px; min-width: 0; overflow-wrap: anywhere; }
|
|
96
|
-
.gov-assign-row__who .muted { color: var(--ink-faint); }
|
|
97
|
-
.gov-principal { padding: 8px 14px; border-bottom: var(--line) solid var(--rule-soft); font-size: 12.5px; color: var(--ink-soft); }
|
|
98
|
-
.gov-principal:last-child { border-bottom: 0; }
|
|
99
|
-
.gov-principal code {
|
|
100
|
-
font-family: var(--font-mono); font-size: 12px;
|
|
101
|
-
color: var(--accent-ink); background: var(--glass); padding: 1px 5px; border-radius: 4px;
|
|
102
|
-
}
|
|
29
|
+
/* Holds the ladder-rank reset button. Empty for every other rank, so it collapses
|
|
30
|
+
rather than reserving a gap — hence no margin on the empty box itself. */
|
|
31
|
+
.gov-grid-actions:not(:empty) { margin: 0 0 var(--sp-sm); }
|
|
103
32
|
|
|
104
|
-
/* ----
|
|
105
|
-
The
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
title, the ballot sits directly under it, the idea's own words are body text,
|
|
109
|
-
and the constitutional metadata is the only thing behind a click. */
|
|
110
|
-
.gov-item {
|
|
111
|
-
margin: 0 0 18px; border: var(--line) solid var(--rule-soft); border-radius: var(--radius);
|
|
112
|
-
background: var(--bg-card); overflow: hidden;
|
|
113
|
-
}
|
|
114
|
-
.gov-item__head {
|
|
115
|
-
display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between;
|
|
116
|
-
gap: 6px 12px; padding: 12px 14px 10px;
|
|
117
|
-
}
|
|
118
|
-
.gov-item__title {
|
|
119
|
-
margin: 0; min-width: 0; font-size: 16px; font-weight: 600; line-height: 1.35;
|
|
120
|
-
color: var(--ink); overflow-wrap: anywhere;
|
|
121
|
-
}
|
|
122
|
-
.gov-item__title a { color: inherit; }
|
|
123
|
-
.gov-item__state { display: inline-flex; align-items: center; gap: 8px; font-size: 12px; }
|
|
124
|
-
.gov-item__amend { margin: 0; padding: 0 14px 10px; color: var(--ink-soft); font-size: 12.5px; overflow-wrap: anywhere; }
|
|
33
|
+
/* ---- Permissions: two panels side by side on a wide screen ------------------
|
|
34
|
+
The rank list is the narrow one; picking a row there fills the wide one. */
|
|
35
|
+
.gov-layout { display: grid; grid-template-columns: 284px minmax(0, 1fr); gap: 0 var(--sp-md); align-items: start; }
|
|
36
|
+
@media (max-width: 900px) { .gov-layout { grid-template-columns: minmax(0, 1fr); } }
|
|
125
37
|
|
|
126
|
-
/* The
|
|
127
|
-
|
|
128
|
-
.gov-
|
|
38
|
+
/* The permission key is the machine's word and the row's title: the mono face in
|
|
39
|
+
ink, wrapping anywhere so a long key never widens the panel. */
|
|
40
|
+
.gov-perm__key { font-family: var(--font-mono); font-size: 13px; color: var(--ink); overflow-wrap: anywhere; }
|
|
41
|
+
.gov-held-note { font-size: 12.5px; color: var(--ok); white-space: nowrap; }
|
|
129
42
|
|
|
130
|
-
/* The
|
|
131
|
-
|
|
132
|
-
.gov-
|
|
133
|
-
.gov-
|
|
134
|
-
|
|
135
|
-
margin: 0
|
|
136
|
-
|
|
43
|
+
/* The create-rank form sits under the rank list behind one full rule, with its
|
|
44
|
+
own heading in the label voice — a sub-form, not a second panel. */
|
|
45
|
+
.gov-create { margin: var(--sp-md) 0 0; padding-top: var(--sp-sm); border-top: var(--line) solid var(--rule); }
|
|
46
|
+
.gov-create__h {
|
|
47
|
+
flex: 1 1 100%;
|
|
48
|
+
margin: 0 0 2px;
|
|
49
|
+
font-family: var(--label-face);
|
|
50
|
+
font-size: var(--label-size);
|
|
51
|
+
font-weight: 400;
|
|
52
|
+
letter-spacing: var(--label-space);
|
|
53
|
+
text-transform: var(--label-case);
|
|
54
|
+
color: var(--ink);
|
|
137
55
|
}
|
|
138
56
|
|
|
139
|
-
/*
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
57
|
+
/* ---- the Board Room: one sitting, one panel -------------------------------------
|
|
58
|
+
The card order is task 1003270's (title, ballot, the idea, the apparatus); the
|
|
59
|
+
surface is the shell's .scroll (task 1003469). The subject of the vote is the
|
|
60
|
+
panel heading; the ballot sits directly under it; the idea is prose; the
|
|
61
|
+
constitutional apparatus stays one disclosure away with the tally on its summary. */
|
|
62
|
+
.gov-item__head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 6px 14px; }
|
|
63
|
+
.gov-item__title {
|
|
64
|
+
margin: 0 0 8px;
|
|
65
|
+
min-width: 0;
|
|
66
|
+
font-family: var(--font-display);
|
|
67
|
+
font-weight: 300;
|
|
68
|
+
font-size: 21px;
|
|
69
|
+
line-height: 1.15;
|
|
70
|
+
letter-spacing: -0.03em;
|
|
71
|
+
color: var(--ink);
|
|
72
|
+
text-shadow: var(--type-halo);
|
|
73
|
+
overflow-wrap: anywhere;
|
|
145
74
|
}
|
|
75
|
+
.gov-item__title a { color: inherit; text-decoration: none; }
|
|
76
|
+
.gov-item__title a:hover { color: var(--accent-ink); text-decoration: underline; text-underline-offset: 3px; }
|
|
77
|
+
.gov-item__title .fact-pill { vertical-align: middle; margin-left: 10px; text-shadow: none; }
|
|
78
|
+
.gov-item__state { display: inline-flex; align-items: center; gap: 10px; font-size: 12.5px; color: var(--ink-faint); font-variant-numeric: tabular-nums; }
|
|
79
|
+
.gov-item__amend { margin: 0 0 12px; font-size: 13.5px; line-height: 1.5; color: var(--ink-soft); max-width: var(--measure); overflow-wrap: anywhere; }
|
|
80
|
+
.gov-item__act { margin: 8px 0 4px; }
|
|
81
|
+
.gov-item__cast { margin: 0; font-size: 13.5px; color: var(--ink-soft); }
|
|
82
|
+
.gov-item__meta { margin: var(--sp-sm) 0 0; border-top: var(--line) solid var(--rule-soft); }
|
|
83
|
+
.gov-item__summary { padding: 12px 0 0; min-height: 24px; cursor: pointer; font-size: 12.5px; color: var(--ink-soft); list-style-position: inside; }
|
|
146
84
|
.gov-item__summary:hover { color: var(--ink); }
|
|
147
|
-
.gov-item__metabody { padding:
|
|
148
|
-
.gov-item__metabody .gov-
|
|
149
|
-
.gov-item__metabody .gov-
|
|
85
|
+
.gov-item__metabody { padding: 12px 0 0; }
|
|
86
|
+
.gov-item__metabody .gov-grid-note { margin: 0 0 8px; }
|
|
87
|
+
.gov-item__metabody .gov-grid-note:last-child { margin-bottom: 0; }
|
|
88
|
+
.gov-item__metabody .ov-rows { margin-top: 12px; }
|
|
89
|
+
/* The head over the closed sittings sits on the ground between panels, so it
|
|
90
|
+
carries the air a panel would. */
|
|
91
|
+
.gov-board__divider { margin: var(--sp-md) 0 var(--sp-sm); }
|
|
150
92
|
|
|
151
|
-
/* ---- the ballot controls
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
.gov-
|
|
93
|
+
/* ---- the ballot controls ------------------------------------------------------ */
|
|
94
|
+
/* The two ballot controls sit on one row; the objection disclosure takes the
|
|
95
|
+
whole row only once it is open, so its form drops under both buttons. */
|
|
96
|
+
.gov-vote { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 10px; }
|
|
97
|
+
.gov-vote > .gov-grid-note { flex: 1 1 100%; margin: 0; }
|
|
98
|
+
.gov-vote__no { flex: 0 1 auto; }
|
|
99
|
+
.gov-vote__no[open] { flex: 1 1 100%; }
|
|
155
100
|
/* The disclosure IS the secondary button, so its marker must go — otherwise the
|
|
156
101
|
triangle sits inside the pill. */
|
|
157
|
-
.gov-vote__no > summary { display: inline-
|
|
102
|
+
.gov-vote__no > summary { display: inline-flex; cursor: pointer; }
|
|
158
103
|
.gov-vote__no > summary::marker { content: ''; }
|
|
159
104
|
.gov-vote__no > summary::-webkit-details-marker { display: none; }
|
|
160
|
-
.gov-vote__no > *:not(summary) { margin-top:
|
|
161
|
-
.gov-vote__no
|
|
162
|
-
.gov-vote__sections { display: flex; flex-wrap: wrap; gap:
|
|
163
|
-
.gov-
|
|
164
|
-
|
|
165
|
-
}
|
|
105
|
+
.gov-vote__no > *:not(summary) { margin-top: 10px; }
|
|
106
|
+
.gov-vote__no textarea { display: block; width: 100%; max-width: var(--measure); box-sizing: border-box; }
|
|
107
|
+
.gov-vote__sections { display: flex; flex-wrap: wrap; gap: 6px 16px; }
|
|
108
|
+
.gov-vote__section { display: inline-flex; align-items: center; gap: 8px; min-height: 24px; font-size: 13px; color: var(--ink); cursor: pointer; }
|
|
109
|
+
.gov-vote__section input { width: 16px; height: 16px; margin: 0; }
|
|
166
110
|
|
|
167
|
-
/*
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
.gov-item__metabody .gov-assign-row { flex-wrap: wrap; }
|
|
172
|
-
.gov-item__metabody .gov-assign-row .gov-perm__guards { flex: 1 1 100%; margin-top: 4px; }
|
|
111
|
+
/* ---- the charter library ------------------------------------------------------- */
|
|
112
|
+
/* The configuration line under a charter: what an owner would type, in the
|
|
113
|
+
machine's face and the faint ink, under the prose that explains it. */
|
|
114
|
+
.gov-charter__how { margin: 6px 0 0; font-family: var(--font-mono); font-size: 12px; line-height: 1.5; color: var(--ink-faint); max-width: 72ch; overflow-wrap: anywhere; }
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
10
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
11
11
|
<link rel="stylesheet" href="/builders/style.css?v=2026-07-02-shell1">
|
|
12
|
+
<link rel="stylesheet" href="/builders/oversight.css">
|
|
12
13
|
<link rel="stylesheet" href="/builders/government.css">
|
|
13
14
|
</head>
|
|
14
15
|
<body data-page="government" data-page-title="Government">
|
|
@@ -19,18 +20,22 @@
|
|
|
19
20
|
<div class="app-body">
|
|
20
21
|
<header class="app-topbar" id="app-topbar"></header>
|
|
21
22
|
<div class="app-content">
|
|
22
|
-
<!--
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
is the LABEL voice, not a display line: on a working surface the
|
|
26
|
-
page's own name is the least interesting thing on it. -->
|
|
23
|
+
<!-- The board page head (task 1003307): the LABEL voice, not a display
|
|
24
|
+
line, because on a working surface the page's own name is the least
|
|
25
|
+
interesting thing on it. -->
|
|
27
26
|
<div class="page-head page-head--board">
|
|
28
27
|
<h1 class="page-head__h">Government</h1>
|
|
29
28
|
<p class="page-head__sub" id="gov-sub">Loading…</p>
|
|
30
29
|
</div>
|
|
31
30
|
|
|
32
31
|
<main id="hall-main">
|
|
33
|
-
|
|
32
|
+
<!-- task 1003469: the sealed state is a panel with a heading, not a bare
|
|
33
|
+
line on the ground. government.js writes the real floor into the
|
|
34
|
+
lede from the pack's rank label, so the copy cannot drift. -->
|
|
35
|
+
<section class="scroll" id="gov-sealed" aria-labelledby="gov-sealed-h" hidden>
|
|
36
|
+
<h2 class="scroll__h" id="gov-sealed-h">Restricted</h2>
|
|
37
|
+
<p class="scroll__lede" id="gov-sealed-body">This page opens at a higher rank.</p>
|
|
38
|
+
</section>
|
|
34
39
|
|
|
35
40
|
<section id="gov-body" hidden>
|
|
36
41
|
<!-- The three-section IA (R15 of goal 1000069, ADR 0175): the page that
|
|
@@ -39,64 +44,87 @@
|
|
|
39
44
|
#board-room, #ranks. -->
|
|
40
45
|
<div id="gov-tabs"></div>
|
|
41
46
|
|
|
42
|
-
<!-- §1 Constitution — what this project runs. The live view
|
|
43
|
-
|
|
44
|
-
|
|
47
|
+
<!-- §1 Constitution — what this project runs. The live view is the
|
|
48
|
+
panel below; the change history and the charter library render as
|
|
49
|
+
their own panels after it (government.js loadConstitution). The
|
|
50
|
+
heading and its one-line lede keep the names
|
|
51
|
+
tests/government_board_room_copy.mjs pins. -->
|
|
45
52
|
<section id="gov-panel-constitution" hidden>
|
|
46
|
-
<
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
53
|
+
<section class="scroll" aria-labelledby="gov-constitution-h">
|
|
54
|
+
<div id="gov-constitution-h"><h2 class="gov-h">Constitution</h2></div>
|
|
55
|
+
<p class="gov-grid-note">Three dials, all settings rather than code: <strong>who sits on the board</strong>, <strong>what counts as passing</strong>, and <strong>how long a vote stays open</strong>.</p>
|
|
56
|
+
<div id="gov-constitution-live"><span class="kit-skel"></span></div>
|
|
57
|
+
</section>
|
|
51
58
|
<div id="gov-constitution"></div>
|
|
52
59
|
</section>
|
|
53
60
|
|
|
54
|
-
<!-- §2 Board Room — open items, the clock, your vote (R16/R17).
|
|
55
|
-
|
|
61
|
+
<!-- §2 Board Room — open items, the clock, your vote (R16/R17). In v3 a
|
|
62
|
+
sitting IS the panel, so the room itself is bare ground: the heading
|
|
63
|
+
and its lede sit over the sittings, each of which is a .scroll. -->
|
|
64
|
+
<section class="scroll scroll--bare" id="gov-panel-board" hidden>
|
|
56
65
|
<h2 class="gov-h">Board Room</h2>
|
|
57
|
-
<!-- Task 1003270: one line, then the ballot. Everything the old
|
|
58
|
-
~50-word paragraph explained is now said by the cards themselves
|
|
59
|
-
— each one carries who votes and how it passes, in plain words,
|
|
60
|
-
under its own summary. -->
|
|
61
66
|
<p class="gov-grid-note">Read an idea, then decide. An objection needs a reason and the section it faults.</p>
|
|
62
|
-
<div id="gov-board"></div>
|
|
67
|
+
<div id="gov-board"><span class="kit-skel"></span></div>
|
|
63
68
|
</section>
|
|
64
69
|
|
|
65
|
-
<!-- §3
|
|
70
|
+
<!-- §3 Permissions — the administration surface: the rank list and the
|
|
71
|
+
permission grid side by side as two panels, then assignments and
|
|
72
|
+
the machine principals as panels of their own. Every id here is
|
|
73
|
+
load-bearing for government.js. -->
|
|
66
74
|
<section id="gov-panel-ranks" hidden>
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
<
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
75
|
+
<div class="gov-layout">
|
|
76
|
+
<section class="scroll" aria-labelledby="gov-ranks-h">
|
|
77
|
+
<h2 class="scroll__h" id="gov-ranks-h">Ranks</h2>
|
|
78
|
+
<p class="scroll__lede">Pick a rank to see what it may do. The four ladder ranks ship with the platform; a custom rank is yours to shape.</p>
|
|
79
|
+
<div class="ov-rows ov-rows--select" id="gov-rank-list" role="group" aria-label="Ranks"></div>
|
|
80
|
+
<form class="ov-form gov-create" id="gov-create-form" autocomplete="off">
|
|
81
|
+
<h3 class="gov-create__h">New custom rank</h3>
|
|
82
|
+
<div class="ov-field">
|
|
83
|
+
<label class="ov-field__l" for="gov-create-key">Key</label>
|
|
84
|
+
<input id="gov-create-key" type="text" placeholder="rank-key (kebab-case)" maxlength="64" required>
|
|
85
|
+
</div>
|
|
86
|
+
<div class="ov-field">
|
|
87
|
+
<label class="ov-field__l" for="gov-create-label">Label</label>
|
|
88
|
+
<input id="gov-create-label" type="text" placeholder="What builders will see" maxlength="200" required>
|
|
89
|
+
</div>
|
|
90
|
+
<div class="ov-field ov-field--wide">
|
|
91
|
+
<label class="ov-field__l" for="gov-create-desc">Description</label>
|
|
92
|
+
<input id="gov-create-desc" type="text" placeholder="What this rank is for (optional)" maxlength="2000">
|
|
93
|
+
</div>
|
|
94
|
+
<button class="btn-accent" type="submit">Create rank</button>
|
|
95
|
+
</form>
|
|
96
|
+
</section>
|
|
79
97
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
98
|
+
<section class="scroll" aria-labelledby="gov-grid-title">
|
|
99
|
+
<h2 class="scroll__h" id="gov-grid-title">Permissions</h2>
|
|
100
|
+
<p class="scroll__lede" id="gov-grid-note"></p>
|
|
101
|
+
<div class="gov-grid-actions" id="gov-reset"></div>
|
|
102
|
+
<div id="gov-grid"><span class="kit-skel"></span></div>
|
|
103
|
+
</section>
|
|
85
104
|
</div>
|
|
86
|
-
</div>
|
|
87
105
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
106
|
+
<section class="scroll" aria-labelledby="gov-assign-h">
|
|
107
|
+
<h2 class="scroll__h" id="gov-assign-h">Assignments</h2>
|
|
108
|
+
<p class="scroll__lede">Hand a custom rank to a builder. The four ladder ranks are assigned by rank itself and cannot be granted here.</p>
|
|
109
|
+
<form class="ov-form" id="gov-assign-form" autocomplete="off">
|
|
110
|
+
<div class="ov-field ov-field--sm">
|
|
111
|
+
<label class="ov-field__l" for="gov-assign-builder">Builder id</label>
|
|
112
|
+
<input id="gov-assign-builder" type="number" min="1" placeholder="e.g. 95" required>
|
|
113
|
+
</div>
|
|
114
|
+
<div class="ov-field">
|
|
115
|
+
<label class="ov-field__l" for="gov-assign-rank">Custom rank</label>
|
|
116
|
+
<select id="gov-assign-rank" required></select>
|
|
117
|
+
</div>
|
|
118
|
+
<button class="btn-accent" type="submit">Assign</button>
|
|
119
|
+
</form>
|
|
120
|
+
<div id="gov-assignments"><span class="kit-skel"></span></div>
|
|
121
|
+
</section>
|
|
96
122
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
123
|
+
<section class="scroll" aria-labelledby="gov-principals-h">
|
|
124
|
+
<h2 class="scroll__h" id="gov-principals-h">Machine principals</h2>
|
|
125
|
+
<p class="scroll__lede">Capabilities held by a machine identity, never by a person or a rank. Shown for completeness; nothing here can be granted.</p>
|
|
126
|
+
<div id="gov-principals"><span class="kit-skel"></span></div>
|
|
127
|
+
</section>
|
|
100
128
|
</section>
|
|
101
129
|
</section>
|
|
102
130
|
</main>
|
|
@@ -113,6 +141,6 @@
|
|
|
113
141
|
<script src="/builders/palette.js" defer></script>
|
|
114
142
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
115
143
|
<script src="/builders/hall-kit.js"></script>
|
|
116
|
-
<script src="/builders/government.js?v=2026-
|
|
144
|
+
<script src="/builders/government.js?v=2026-09-02-gov-rows"></script>
|
|
117
145
|
</body>
|
|
118
146
|
</html>
|