@bongos/core 1.19.386 → 1.19.388

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/.bongos-core.json +138 -53
  2. package/config/branding.neutral.json +19 -19
  3. package/config/design-tokens.neutral.json +31 -36
  4. package/docs/adr/0196-chrome-world-token-contract-and-the-landing-sheets.md +31 -0
  5. package/docs/adr/README.md +1 -0
  6. package/docs/branding-contract.md +1 -1
  7. package/docs/copy-inventory.md +156 -133
  8. package/docs/copy-registry.json +537 -286
  9. package/docs/file-map.md +14 -0
  10. package/modules/dev-box/app/assets/tray/win-alert.png +0 -0
  11. package/modules/dev-box/app/assets/tray/win-busy.png +0 -0
  12. package/modules/dev-box/app/assets/tray/win-off.png +0 -0
  13. package/modules/dev-box/app/assets/tray/win-on.png +0 -0
  14. package/modules/dev-box/app/build-resources/dmg-background.png +0 -0
  15. package/modules/dev-box/app/build-resources/dmg-background@2x.png +0 -0
  16. package/modules/dev-box/app/build-resources/icon.png +0 -0
  17. package/modules/dev-box/app/renderer/index.html +1 -1
  18. package/modules/dev-box/app/renderer/styles.css +3 -1
  19. package/modules/dev-box/app/renderer/theme.generated.css +13 -13
  20. package/modules/dev-box/app/scripts/gen-brand.js +13 -13
  21. package/modules/dev-box/app/scripts/gen-dmg-backdrop.py +3 -3
  22. package/modules/dev-box/app/scripts/gen-icons.js +3 -3
  23. package/modules/dev-box/app/src/brand.generated.json +1 -1
  24. package/modules/hall-ui/public/government.css +70 -0
  25. package/modules/hall-ui/public/government.html +9 -2
  26. package/modules/hall-ui/public/government.js +175 -32
  27. package/modules/provisioning/routes/provisioning.js +4 -4
  28. package/modules/status-ui/public/explore.html +12 -6
  29. package/package-lock.json +2 -2
  30. package/package.json +1 -1
  31. package/public-landing/assets/cosmos.css +82 -64
  32. package/public-landing/assets/world/og-card.jpg +0 -0
  33. package/public-landing/assets/world/r2-bongos-chrome-a-cut.webp +0 -0
  34. package/public-landing/assets/world/r2-bongos-chrome-a-cut.webp.json +12 -0
  35. package/public-landing/assets/world/r2-bongos-chrome-b.jpg +0 -0
  36. package/public-landing/assets/world/r2-bongos-chrome-b.jpg.json +12 -0
  37. package/public-landing/assets/world/r2-chrome-blob-one-cut.webp +0 -0
  38. package/public-landing/assets/world/r2-chrome-blob-one-cut.webp.json +13 -0
  39. package/public-landing/assets/world/r2-chrome-blob-one.jpg +0 -0
  40. package/public-landing/assets/world/r2-chrome-blob-one.jpg.json +12 -0
  41. package/public-landing/assets/world/r2-chrome-blobs-set-cut.webp +0 -0
  42. package/public-landing/assets/world/r2-chrome-blobs-set-cut.webp.json +13 -0
  43. package/public-landing/assets/world/r2-chrome-blobs-set.jpg +0 -0
  44. package/public-landing/assets/world/r2-chrome-blobs-set.jpg.json +12 -0
  45. package/public-landing/assets/world.css +241 -0
  46. package/public-landing/contact.html +1 -1
  47. package/public-landing/index.html +1139 -580
  48. package/public-landing/privacy.html +1 -1
  49. package/public-landing/projects.html +2 -2
  50. package/public-landing/terms.html +1 -1
  51. package/src/bongos/platform-visibility-gate.js +8 -7
  52. package/src/bongos/stealth-gate.js +9 -8
  53. package/src/module-api.js +5 -1
  54. package/src/ui/adapters/claude-design/index.js +2 -2
  55. package/tests/cloud_bongos_pack.mjs +22 -18
  56. package/tests/cosmos_token_contrast.mjs +23 -8
  57. package/tests/government_board_room_copy.mjs +131 -0
  58. package/tests/landing_legal_pages.mjs +8 -5
  59. package/tests/landing_page.mjs +295 -166
  60. package/tests/platform_boot.mjs +3 -1
  61. package/tests/projects_hub.mjs +9 -5
  62. package/tests/projects_hub_pre_uat.mjs +3 -1
  63. package/tests/world_tokens.mjs +351 -0
@@ -0,0 +1,241 @@
1
+ /* ═══════════════════════════════════════════════════════════════════════════
2
+ THE CHROME WORLD — token layer for the apex landing (`/`).
3
+ Ported from docs/design/mocks/world/chrome-blobs/_tokens.css at the build of
4
+ the approved landing composition (task 1003298, goal 1000080). The mock's
5
+ composition switches (hero geometry, field rectangles, shell and crest
6
+ surfaces) did NOT come with it: those belong to the page that arranges the
7
+ sculpture, not to the world. What lives here is what any surface in this
8
+ world needs to be the same world.
9
+
10
+ THE WORLD. Pure black space in dark, pale paper in light, with iridescent
11
+ liquid-chrome sculpture as the only thing in it. One warm salmon lights only
12
+ what is pressable or live. Type is a light geometric grotesque (Manrope 300),
13
+ lowercase at display sizes, tabular in figures; JetBrains Mono carries labels
14
+ and ids. Nothing else is decorated: the chrome is the decoration.
15
+
16
+ PALETTE STRATEGY — restrained. A neutral ground-to-ink scale and exactly one
17
+ hue. Dark is a true #000 ground (sampled from the owner's reference) so the
18
+ plates, which are rendered ON black, composite into it with `lighten` and
19
+ have no seam. Light is the same sculpture cut out with real alpha, standing
20
+ on paper under a contact shadow — no black panel anywhere.
21
+
22
+ MATERIALS. Six rendered plates, in pairs: each black-ground JPEG for dark and
23
+ its alpha cutout for light (`--plate-set` / `--plate-set-cut`, `--plate-bead`
24
+ / `--plate-bead-cut`, `--plate-bongos` / `--plate-bongos-cut`). Every path is
25
+ ROOT-ABSOLUTE: Chromium resolves a url() inside a custom property against the
26
+ DOCUMENT, not the stylesheet that declared it, so a relative path here would
27
+ 404 from every route but this file's own folder. Beyond the plates: dark
28
+ glass (translucent white over black with a backdrop blur and a 1px light
29
+ edge), a black pill ground for controls that must stay readable over bright
30
+ chrome, and 1px leader lines.
31
+
32
+ THE RULE. The fifteen contract tokens at the top of `:root` are the ONLY
33
+ colour source, and a host branding pack overrides exactly those (the server
34
+ splices them into `:root` at the end of <head>, at (0,1,0)). Everything below
35
+ them — every glass, tint, hatch, state colour, ramp and halo — is a var() or
36
+ a color-mix() of the fifteen, so a re-themed instance still gets a coherent
37
+ world. The two dark blocks are byte-identical twins at (0,2,0), so they win
38
+ over the pack; neither pins --accent, --sea or --terracotta to a literal,
39
+ because a re-themed instance has to be able to reach dark.
40
+
41
+ The sheet opens on `html { color-scheme: light }` rather than carrying the
42
+ hint in the token block: the browser's own surfaces (form controls, the
43
+ caret, the default scrollbar) are part of the world too, so light is the
44
+ sheet's opening state and each dark block below flips it with the palette.
45
+ ═══════════════════════════════════════════════════════════════════════════ */
46
+ html { color-scheme: light; }
47
+
48
+ :root {
49
+ /* ---- contract tier: the fifteen a host branding pack overrides ---- */
50
+ --bg: #edecee;
51
+ --bg-card: #fbfafc;
52
+ --bg-deep: #e2e1e4;
53
+ --bg-frame: #f6f5f7;
54
+ --ink: #17181a;
55
+ --ink-soft: #55565a;
56
+ --ink-faint: #65656a;
57
+ --rule: #c6c6c8;
58
+ --rule-soft: #dcdbdd;
59
+ --accent: #fb9569;
60
+ --accent-deep: #a3481a;
61
+ --sea: #5b6fd0;
62
+ --terracotta: #c9512c;
63
+ --font-display: "Manrope", "Segoe UI", system-ui, -apple-system, sans-serif;
64
+ --font-body: "Manrope", "Segoe UI", system-ui, -apple-system, sans-serif;
65
+
66
+ /* ---- derived: the second face ---- */
67
+ --font-mono: 'JetBrains Mono', ui-monospace, 'Cascadia Mono', Consolas, monospace;
68
+
69
+ /* ---- derived: the plates, in pairs (black-ground plate / alpha cutout) ---- */
70
+ --plate-set: url(/assets/world/r2-chrome-blobs-set.jpg);
71
+ --plate-set-cut: url(/assets/world/r2-chrome-blobs-set-cut.webp);
72
+ --plate-bead: url(/assets/world/r2-chrome-blob-one.jpg);
73
+ --plate-bead-cut: url(/assets/world/r2-chrome-blob-one-cut.webp);
74
+ --plate-bongos: url(/assets/world/r2-bongos-chrome-b.jpg);
75
+ --plate-bongos-cut: url(/assets/world/r2-bongos-chrome-a-cut.webp);
76
+ --blob-blend: lighten;
77
+
78
+ /* ---- derived: the void (the black the chrome composites on) ---- */
79
+ --void: #050508;
80
+ --void-ink: #ffffff;
81
+ --void-ink-soft: rgba(255, 255, 255, .70);
82
+ --void-edge: rgba(255, 255, 255, .14);
83
+ --void-pill: rgba(0, 0, 0, .5);
84
+ --void-glass: rgba(23, 24, 26, .05);
85
+ --void-glass-strong: rgba(23, 24, 26, .09);
86
+ --void-glass-edge: rgba(23, 24, 26, .12);
87
+ --door-bg: var(--void-glass);
88
+
89
+ /* ---- derived: glass ---- */
90
+ --glass: rgba(23, 24, 26, .05);
91
+ --glass-strong: rgba(23, 24, 26, .08);
92
+ --glass-edge: rgba(23, 24, 26, .12);
93
+ --glass-blur: 0px;
94
+
95
+ /* ---- derived: accent behaviours (the accent lights only what is live or pressable) ---- */
96
+ --accent-ink: color-mix(in srgb, var(--accent) 45%, #240e00);
97
+ --accent-lift: color-mix(in srgb, var(--accent) 58%, #ffffff);
98
+ --accent-tint: color-mix(in srgb, var(--accent) 30%, #fffdf9);
99
+ --accent-on: #2a1305;
100
+ /* light gives the primary door no lift, but this token is COMPOSED into shadow lists
101
+ (.door--go:focus-visible stacks the focus halo behind it), and the `none` keyword makes
102
+ any such list invalid. A zero-spread transparent shadow paints nothing and composes. */
103
+ --accent-glow: 0 0 0 0 transparent;
104
+
105
+ /* ---- derived: state ---- */
106
+ --ok: var(--accent-deep);
107
+ --warn: var(--terracotta);
108
+ --err: var(--terracotta);
109
+ --focus: color-mix(in srgb, var(--accent-deep) 82%, #3a1400);
110
+
111
+ /* ---- derived: geometry ---- */
112
+ --line: 1px;
113
+ --radius: 16px;
114
+ --radius-sm: 10px;
115
+ --radius-pill: 999px;
116
+ --top-h: 72px;
117
+
118
+ /* ---- derived: the bongo pair as line and fill, chrome ramp rather than ceramic ---- */
119
+ --chrome-hi: #ffffff;
120
+ --chrome-mid: #a9b2bd;
121
+ --chrome-cool: #949eaa;
122
+ --chrome-lo: #2e343c;
123
+ --skin-hi: #ffffff;
124
+ --skin-mid: #8e97a3;
125
+ --skin-lo: #333941;
126
+ --drum-shadow: #17181a;
127
+ --type-halo: none;
128
+
129
+ /* ---- derived: drawn chrome that cannot take a var() inline ---- */
130
+ --chev: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'><path d='M1 1l4 4 4-4' fill='none' stroke='%2365656a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'/></svg>");
131
+ --check: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'><path d='M2 6.4l2.6 2.6L10 3.4' fill='none' stroke='%232a1305' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'/></svg>");
132
+ --hatch: repeating-linear-gradient(45deg, transparent 0 5px, rgba(23, 24, 26, .12) 5px 6px);
133
+
134
+ /* ---- derived: the label face ---- */
135
+ --label-face: var(--font-mono);
136
+ --label-size: 11px;
137
+ --label-space: .12em;
138
+ }
139
+
140
+ :root[data-mode="dark"] {
141
+ color-scheme: dark;
142
+ --bg: #000000;
143
+ --bg-card: #101012;
144
+ --bg-deep: #000000;
145
+ --bg-frame: #08080a;
146
+ --ink: #ffffff;
147
+ --ink-soft: #c0c0c0;
148
+ --ink-faint: #a8a8a8;
149
+ --rule: rgba(255, 255, 255, .16);
150
+ --rule-soft: rgba(255, 255, 255, .08);
151
+ --accent-deep: color-mix(in srgb, var(--accent) 70%, #ffffff);
152
+ --void: #000000;
153
+ --void-ink: var(--ink);
154
+ --void-ink-soft: var(--ink-soft);
155
+ --void-edge: rgba(255, 255, 255, .16);
156
+ --void-pill: rgba(0, 0, 0, .5);
157
+ --void-glass: rgba(255, 255, 255, .075);
158
+ --void-glass-strong: rgba(255, 255, 255, .14);
159
+ --void-glass-edge: rgba(255, 255, 255, .11);
160
+ --door-bg: var(--void-pill);
161
+ --glass: rgba(255, 255, 255, .11);
162
+ --glass-strong: rgba(255, 255, 255, .17);
163
+ --glass-edge: rgba(255, 255, 255, .13);
164
+ --glass-blur: 18px;
165
+ --accent-ink: var(--accent);
166
+ --accent-lift: color-mix(in srgb, var(--accent) 58%, #ffffff);
167
+ --accent-tint: color-mix(in srgb, var(--accent) 22%, #0b0a09);
168
+ --accent-on: #2a1305;
169
+ --accent-glow: 0 8px 28px color-mix(in srgb, var(--accent) 38%, transparent);
170
+ --ok: var(--accent);
171
+ --warn: var(--accent);
172
+ --err: var(--terracotta);
173
+ --focus: var(--accent);
174
+ --drum-shadow: #000000;
175
+ --type-halo: 0 2px 18px rgba(0, 0, 0, .94), 0 0 54px rgba(0, 0, 0, .72);
176
+ --chev: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'><path d='M1 1l4 4 4-4' fill='none' stroke='%23a8a8a8' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'/></svg>");
177
+ --check: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'><path d='M2 6.4l2.6 2.6L10 3.4' fill='none' stroke='%232a1305' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'/></svg>");
178
+ --hatch: repeating-linear-gradient(45deg, transparent 0 5px, rgba(255, 255, 255, .14) 5px 6px);
179
+ --label-face: var(--font-body);
180
+ --label-size: 11.5px;
181
+ --label-space: .1em;
182
+ }
183
+
184
+ @media (prefers-color-scheme: dark) {
185
+ :root:not([data-mode="light"]) {
186
+ color-scheme: dark;
187
+ --bg: #000000;
188
+ --bg-card: #101012;
189
+ --bg-deep: #000000;
190
+ --bg-frame: #08080a;
191
+ --ink: #ffffff;
192
+ --ink-soft: #c0c0c0;
193
+ --ink-faint: #a8a8a8;
194
+ --rule: rgba(255, 255, 255, .16);
195
+ --rule-soft: rgba(255, 255, 255, .08);
196
+ --accent-deep: color-mix(in srgb, var(--accent) 70%, #ffffff);
197
+ --void: #000000;
198
+ --void-ink: var(--ink);
199
+ --void-ink-soft: var(--ink-soft);
200
+ --void-edge: rgba(255, 255, 255, .16);
201
+ --void-pill: rgba(0, 0, 0, .5);
202
+ --void-glass: rgba(255, 255, 255, .075);
203
+ --void-glass-strong: rgba(255, 255, 255, .14);
204
+ --void-glass-edge: rgba(255, 255, 255, .11);
205
+ --door-bg: var(--void-pill);
206
+ --glass: rgba(255, 255, 255, .11);
207
+ --glass-strong: rgba(255, 255, 255, .17);
208
+ --glass-edge: rgba(255, 255, 255, .13);
209
+ --glass-blur: 18px;
210
+ --accent-ink: var(--accent);
211
+ --accent-lift: color-mix(in srgb, var(--accent) 58%, #ffffff);
212
+ --accent-tint: color-mix(in srgb, var(--accent) 22%, #0b0a09);
213
+ --accent-on: #2a1305;
214
+ --accent-glow: 0 8px 28px color-mix(in srgb, var(--accent) 38%, transparent);
215
+ --ok: var(--accent);
216
+ --warn: var(--accent);
217
+ --err: var(--terracotta);
218
+ --focus: var(--accent);
219
+ --drum-shadow: #000000;
220
+ --type-halo: 0 2px 18px rgba(0, 0, 0, .94), 0 0 54px rgba(0, 0, 0, .72);
221
+ --chev: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'><path d='M1 1l4 4 4-4' fill='none' stroke='%23a8a8a8' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'/></svg>");
222
+ --check: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'><path d='M2 6.4l2.6 2.6L10 3.4' fill='none' stroke='%232a1305' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'/></svg>");
223
+ --hatch: repeating-linear-gradient(45deg, transparent 0 5px, rgba(255, 255, 255, .14) 5px 6px);
224
+ --label-face: var(--font-body);
225
+ --label-size: 11.5px;
226
+ --label-space: .1em;
227
+ }
228
+ }
229
+
230
+ /* ---- narrow: the bar tightens; the world is otherwise mode- and width-invariant ---- */
231
+ @media (max-width: 900px) {
232
+ :root {
233
+ --top-h: 60px;
234
+ }
235
+ }
236
+
237
+ /* The kill switch. Every animation in this world is authored on a plate or a
238
+ control, and every one of them stops here. Nothing may escape it. */
239
+ @media (prefers-reduced-motion: reduce) {
240
+ *, *::before, *::after { animation: none !important; transition: none !important; }
241
+ }
@@ -15,7 +15,7 @@
15
15
  <link rel="canonical" href="{{publicOrigin}}/contact">
16
16
  <link rel="preconnect" href="https://fonts.googleapis.com">
17
17
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
18
- <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Baloo+2:wght@500;600;700&family=Quicksand:wght@400;500;600;700&family=Fira+Code:wght@400;500&display=swap">
18
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400&family=Manrope:wght@300;400;500;600&display=swap">
19
19
  <link rel="stylesheet" href="/assets/cosmos.css">
20
20
  <script>
21
21
  /* Mode, resolved before first paint — the same contract as every landing page. */