@bongos/core 1.19.725 → 1.19.727

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 (229) hide show
  1. package/.bongos-core.json +179 -494
  2. package/.devcontainer/Dockerfile +1 -1
  3. package/.devcontainer/devcontainer.json +2 -2
  4. package/.devcontainer/healthcheck.sh +1 -1
  5. package/.devcontainer/init-firewall.sh +1 -1
  6. package/.devcontainer/post-create.sh +2 -2
  7. package/.env.local.example +1 -1
  8. package/Dockerfile +1 -1
  9. package/docs/copy-inventory.md +1 -1
  10. package/docs/copy-registry.json +9 -9
  11. package/docs/module-api-changelog.md +4 -0
  12. package/docs/recipes/devbox-app-release.md +4 -4
  13. package/modules/dev-box/app/scripts/dmgbuild-settings.py +5 -5
  14. package/modules/dev-box/app/scripts/gen-brand.js +1 -1
  15. package/modules/dev-box/app/src/brand.js +1 -1
  16. package/modules/dev-box/app/test/unit.mjs +16 -16
  17. package/modules/dev-box/box-access.js +1 -1
  18. package/modules/dev-box/routes/box.js +1 -1
  19. package/modules/discord/discord-approvals.js +1 -1
  20. package/modules/grading/grader-model.js +1 -1
  21. package/modules/grading/grader-prompt.js +1 -1
  22. package/modules/grading/grader-workers/quality.js +1 -1
  23. package/modules/hall-ui/module.json +1 -1
  24. package/modules/hall-ui/public/brand-apply.js +1 -1
  25. package/modules/hall-ui/public/shell.js +1 -1
  26. package/modules/hall-ui/public/work.js +1 -1
  27. package/modules/lifecycle/conflict-resolve.js +1 -1
  28. package/modules/lifecycle/db-analytics.js +1 -1
  29. package/modules/lifecycle/routes/analytics.js +1 -1
  30. package/modules/onboarding/approval-broadcast.js +1 -1
  31. package/modules/onboarding/onboarding.js +1 -1
  32. package/modules/provisioning/tests/liveness.mjs +1 -1
  33. package/modules/public-landing/public/index.html +1 -1
  34. package/modules/public-landing/public/projects-floor.states.json +2 -2
  35. package/modules/public-landing/public/projects.probes.json +4 -4
  36. package/modules/public-landing/public/projects.states.json +2 -2
  37. package/modules/status-ui/module.json +1 -1
  38. package/modules/status-ui/public/status.js +4 -4
  39. package/modules/status-ui/public/style.css +1 -1
  40. package/modules/ui-design/kit/fixtures/cost-summary.json +1 -1
  41. package/modules/ui-design/kit/fixtures/featured-hub.json +1 -1
  42. package/modules/ui-design/kit/fixtures/featured.json +1 -1
  43. package/modules/ui-design/kit/fixtures/leaderboard.json +1 -1
  44. package/modules/ui-design/kit/fixtures/my-projects.json +1 -1
  45. package/modules/ui-design/kit/fixtures/progress.json +1 -1
  46. package/modules/ui-design/kit/fixtures/recent-shipped.json +1 -1
  47. package/package-lock.json +2 -2
  48. package/package.json +1 -1
  49. package/scripts/cron/style_guide_audit.sh +1 -1
  50. package/scripts/discord/lib.js +1 -1
  51. package/scripts/discord/post.js +1 -1
  52. package/scripts/gds/audit-authorship.sh +1 -1
  53. package/scripts/gds/audit-replay.sh +29 -2
  54. package/scripts/gds/audit-ships.js +1 -1
  55. package/scripts/gds/backfill-sessions.js +2 -2
  56. package/scripts/gds/cf-tunnel.js +4 -4
  57. package/scripts/gds/claude-materialize.js +2 -2
  58. package/scripts/gds/cli-lib.js +6 -6
  59. package/scripts/gds/cutover-codemod.js +1 -1
  60. package/scripts/gds/dev-lib.js +2 -2
  61. package/scripts/gds/diagnose-achievements.js +2 -2
  62. package/scripts/gds/fitness-checks-identity.js +6 -4
  63. package/scripts/gds/gate-review.js +14 -6
  64. package/scripts/gds/gen-diagrams.js +1 -1
  65. package/scripts/gds/leak-scan-allowlist.js +293 -0
  66. package/scripts/gds/learning-capture.js +1 -1
  67. package/scripts/gds/linkify-refs.js +2 -2
  68. package/scripts/gds/local-preview-lib.js +1 -1
  69. package/scripts/gds/mirror-lineage-check.js +1 -1
  70. package/scripts/gds/mirror-redact.js +17 -2
  71. package/scripts/gds/newcomer-floor.templates.json +1 -1
  72. package/scripts/gds/package-core.js +18 -1
  73. package/scripts/gds/paste-token.js +1 -1
  74. package/scripts/gds/provision-units.js +2 -2
  75. package/scripts/gds/publish-manifest.js +15 -0
  76. package/scripts/gds/repo-metrics.js +1 -1
  77. package/scripts/gds/sandbox-stage.js +1 -1
  78. package/scripts/gds/seed-bongos-coreB-tranche1-tasks.js +1 -1
  79. package/scripts/gds/seed-bongos-coreB-tranche2-tasks.js +1 -1
  80. package/scripts/gds/seed-bongos-goal-hierarchy-tasks.js +1 -1
  81. package/scripts/gds/seed-bongos-tasks.js +2 -2
  82. package/scripts/gds/seed-gds-v4-tasks.js +1 -1
  83. package/scripts/gds/seed-medusa-tasks.js +10 -10
  84. package/scripts/gds/seed-module-upstreaming.js +1 -1
  85. package/scripts/gds/seed-productization-tasks.js +6 -6
  86. package/scripts/gds/seed-provisioning-tasks.js +2 -2
  87. package/scripts/gds/seed-staging.sh +19 -6
  88. package/scripts/gds/ship-deploy-target.js +1 -1
  89. package/scripts/gds/ship-flow.js +1 -1
  90. package/scripts/gds/smoke-gds.js +1 -1
  91. package/scripts/status-probe.mjs +2 -2
  92. package/src/bongos/auth-discord.js +2 -2
  93. package/src/bongos/live-channel.js +1 -1
  94. package/src/bongos/permission-path-check.js +80 -3
  95. package/src/bongos/pool.js +1 -1
  96. package/src/bongos/routes/auth.js +11 -11
  97. package/src/bongos/routes/security.js +1 -1
  98. package/src/bongos/routes.js +1 -1
  99. package/src/branding.js +1 -1
  100. package/src/devbox-downloads.js +1 -1
  101. package/src/instance-config.js +2 -2
  102. package/src/module-api.js +1 -1
  103. package/src/module-loader/provenance.js +2 -2
  104. package/tests/art_stage.mjs +2 -2
  105. package/tests/auth_anthropic_identity.mjs +1 -1
  106. package/tests/auth_duplicate_cookie.mjs +1 -1
  107. package/tests/auth_error_brand.mjs +1 -1
  108. package/tests/auth_inactive_builder.mjs +1 -1
  109. package/tests/backup_cli.mjs +4 -4
  110. package/tests/bongos_box_connect.mjs +2 -2
  111. package/tests/bongos_downloads.mjs +2 -2
  112. package/tests/bongos_login.mjs +5 -5
  113. package/tests/box_connect_e2e.mjs +2 -2
  114. package/tests/box_dns_repoint.mjs +10 -10
  115. package/tests/box_host_keys.mjs +1 -1
  116. package/tests/box_onboard.mjs +9 -9
  117. package/tests/box_scope_session.mjs +1 -1
  118. package/tests/box_terminal_ssrf.mjs +7 -7
  119. package/tests/boxes.mjs +9 -9
  120. package/tests/branding.mjs +2 -2
  121. package/tests/bump_version.mjs +2 -2
  122. package/tests/cf_tunnel.mjs +40 -40
  123. package/tests/cli_token_reissue.mjs +7 -7
  124. package/tests/cloud_bongos_pack.mjs +1 -1
  125. package/tests/currency_label.mjs +8 -8
  126. package/tests/dev_lib.mjs +4 -4
  127. package/tests/devbox_dmg_backdrop.mjs +1 -1
  128. package/tests/devbox_downloads.mjs +2 -2
  129. package/tests/devbox_icons.mjs +1 -1
  130. package/tests/discord_approvals.mjs +1 -1
  131. package/tests/discord_oauth.mjs +2 -2
  132. package/tests/executed_closure.mjs +6 -1
  133. package/tests/first_admin_bootstrap.mjs +1 -1
  134. package/tests/gate_approvals.mjs +5 -5
  135. package/tests/government_protected_surfaces.mjs +137 -0
  136. package/tests/grade_aggregates_unavailable.mjs +1 -1
  137. package/tests/hook_user_agents.mjs +2 -2
  138. package/tests/init.mjs +6 -6
  139. package/tests/instance_config.mjs +1 -1
  140. package/tests/instance_manifest.mjs +5 -5
  141. package/tests/instance_mismatch_guard.mjs +13 -13
  142. package/tests/leak_scan_allowlist.mjs +94 -0
  143. package/tests/migrate_root_resolution.mjs +4 -4
  144. package/tests/mirror_redact.mjs +28 -4
  145. package/tests/module_catalog.mjs +5 -5
  146. package/tests/module_submissions.mjs +3 -3
  147. package/tests/package_core.mjs +1 -1
  148. package/tests/parallel-load.mjs +6 -6
  149. package/tests/projects_hub.mjs +2 -2
  150. package/tests/provision.mjs +50 -50
  151. package/tests/provisioning_github_app_routes.mjs +1 -1
  152. package/tests/provisioning_onboard_mode.mjs +2 -2
  153. package/tests/publish_reconciler.mjs +4 -4
  154. package/tests/sandbox_stage.mjs +1 -1
  155. package/tests/scrubber_corpus.mjs +3 -3
  156. package/tests/search_isolation.mjs +1 -1
  157. package/tests/session_records.mjs +1 -1
  158. package/tests/ship_card.mjs +6 -6
  159. package/tests/ship_ci_deploy.mjs +1 -1
  160. package/tests/single_host_hall.mjs +9 -9
  161. package/tests/smoke_preflight.mjs +1 -1
  162. package/tests/smoke_target.mjs +1 -1
  163. package/tests/status-probe.mjs +1 -1
  164. package/tests/status_mirror_sync.mjs +1 -1
  165. package/docs/adr/0004-amazonprimea-name-and-trademark-acceptance.md +0 -45
  166. package/docs/design/mocks/_schemes.css +0 -604
  167. package/docs/design/mocks/component-sheet.html +0 -428
  168. package/docs/design/mocks/hall/_tokens.css +0 -370
  169. package/docs/design/mocks/hall/board/v1.html +0 -846
  170. package/docs/design/mocks/hall/board/v2.html +0 -858
  171. package/docs/design/mocks/hall/board/v3.html +0 -884
  172. package/docs/design/mocks/hall/goals/v1.html +0 -1212
  173. package/docs/design/mocks/hall/goals/v2.html +0 -1192
  174. package/docs/design/mocks/hall/goals/v3.html +0 -1205
  175. package/docs/design/mocks/hall/hall-sheet.html +0 -244
  176. package/docs/design/mocks/hall/reading/v1.html +0 -1125
  177. package/docs/design/mocks/hall/reading/v2.html +0 -1177
  178. package/docs/design/mocks/hall/reading/v3.html +0 -1150
  179. package/docs/design/mocks/hall/settings/v1.html +0 -1238
  180. package/docs/design/mocks/hall/settings/v2.html +0 -1235
  181. package/docs/design/mocks/hall/settings/v3.html +0 -1299
  182. package/docs/design/mocks/hall/task/v1.html +0 -633
  183. package/docs/design/mocks/hall/task/v2.html +0 -646
  184. package/docs/design/mocks/hall/task/v3.html +0 -647
  185. package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg +0 -0
  186. package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg.json +0 -13
  187. package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg +0 -0
  188. package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg.json +0 -13
  189. package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg +0 -0
  190. package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg.json +0 -13
  191. package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg +0 -0
  192. package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg.json +0 -13
  193. package/docs/design/mocks/hub/hub-sheet.html +0 -192
  194. package/docs/design/mocks/hub/mine.html +0 -465
  195. package/docs/design/mocks/hub/picker.html +0 -421
  196. package/docs/design/mocks/hub/planets.html +0 -356
  197. package/docs/design/mocks/hub/v1.html +0 -1209
  198. package/docs/design/mocks/hub/v2.html +0 -1257
  199. package/docs/design/mocks/hub/v3.html +0 -1496
  200. package/docs/design/mocks/hub/wizard.html +0 -421
  201. package/docs/design/mocks/landing/landing-sheet.html +0 -131
  202. package/docs/design/mocks/landing/v1.html +0 -956
  203. package/docs/design/mocks/landing/v2.html +0 -708
  204. package/docs/design/mocks/landing/v3.html +0 -911
  205. package/docs/design/mocks/landing-page-mock.html +0 -687
  206. package/docs/design/mocks/landing-palettes.html +0 -103
  207. package/docs/design/mocks/projects-hub-mock.html +0 -991
  208. package/docs/design/mocks/projects-hub-variants.html +0 -146
  209. package/docs/design/mocks/projects-page-mock.html +0 -167
  210. package/docs/design/mocks/world/blue-hud/_tokens.css +0 -246
  211. package/docs/design/mocks/world/blue-hud/hall.html +0 -595
  212. package/docs/design/mocks/world/blue-hud/landing.html +0 -424
  213. package/docs/design/mocks/world/blue-hud/status.html +0 -410
  214. package/docs/design/mocks/world/chrome-blobs/_tokens.css +0 -479
  215. package/docs/design/mocks/world/chrome-blobs/hall.html +0 -553
  216. package/docs/design/mocks/world/chrome-blobs/landing-b.html +0 -581
  217. package/docs/design/mocks/world/chrome-blobs/landing.html +0 -328
  218. package/docs/design/mocks/world/chrome-blobs/status.html +0 -416
  219. package/docs/design/mocks/world/natgeo-editorial/_tokens.css +0 -377
  220. package/docs/design/mocks/world/natgeo-editorial/hall.html +0 -649
  221. package/docs/design/mocks/world/natgeo-editorial/landing-b.html +0 -743
  222. package/docs/design/mocks/world/natgeo-editorial/landing.html +0 -475
  223. package/docs/design/mocks/world/natgeo-editorial/status.html +0 -437
  224. package/docs/design/mocks/world/organic-cards/_tokens.css +0 -462
  225. package/docs/design/mocks/world/organic-cards/hall.html +0 -625
  226. package/docs/design/mocks/world/organic-cards/landing-b.html +0 -736
  227. package/docs/design/mocks/world/organic-cards/landing.html +0 -420
  228. package/docs/design/mocks/world/organic-cards/status.html +0 -458
  229. package/docs/design/mocks/world/world-sheet.html +0 -156
@@ -1,736 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8">
5
- <script>
6
- (function(){try{var q=new URLSearchParams(location.search).get('mode');var m=(q==='light'||q==='dark')?q:localStorage.getItem('cb-color-mode');if(m==='light'||m==='dark')document.documentElement.setAttribute('data-mode',m);}catch(e){}})();
7
- </script>
8
- <meta name="viewport" content="width=device-width, initial-scale=1">
9
- <title>Cloud Bongos</title>
10
- <link rel="preconnect" href="https://fonts.googleapis.com">
11
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
12
- <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;800&display=swap">
13
- <link rel="stylesheet" href="_tokens.css">
14
- <style>
15
- /* organic-cards / landing-b: the second composition. The template's wide faceted panel is not a card
16
- sitting on the page, it IS the hero's ground: one rounded slab inset from the viewport, carrying the
17
- leaf plate, with the pipeline rail pinned to its top-left edge, the headline and the joined door pill
18
- standing on its floor bottom-left, and the wood bongos standing bottom-right among the leaves.
19
- The plates, the leader lines and every colour come from _tokens.css as they are, so the page never
20
- branches on mode. The four page-local values below are geometry and one derived sheen, prefixed
21
- --lb-; none is a contract token and none needs a dark twin. */
22
-
23
- :root {
24
- --lb-bar: 68px;
25
- --lb-inset: 22px;
26
- --lb-pad: 60px;
27
- --lb-seam: color-mix(in srgb, var(--ink) 7%, transparent);
28
- --lb-sheen: color-mix(in srgb, var(--cream) 22%, transparent);
29
- }
30
-
31
- *, *::before, *::after { box-sizing: border-box; }
32
-
33
- html { -webkit-text-size-adjust: 100%; }
34
-
35
- body {
36
- margin: 0;
37
- background: var(--bg);
38
- color: var(--ink);
39
- font-family: var(--font-body);
40
- font-size: 16px;
41
- line-height: 1.5;
42
- overflow-x: hidden;
43
- -webkit-font-smoothing: antialiased;
44
- }
45
-
46
- /* paper grain over the whole page, fixed so it never repaints on scroll */
47
- body::after {
48
- content: "";
49
- position: fixed;
50
- inset: 0;
51
- z-index: 60;
52
- pointer-events: none;
53
- background-image: var(--grain);
54
- background-size: 140px 140px;
55
- opacity: var(--grain-op);
56
- mix-blend-mode: soft-light;
57
- }
58
-
59
- ::selection { background: var(--accent); color: var(--on-accent); }
60
-
61
- a { color: inherit; }
62
-
63
- :focus-visible {
64
- outline: 2px solid var(--focus);
65
- outline-offset: 3px;
66
- }
67
-
68
- .sr {
69
- position: absolute;
70
- width: 1px; height: 1px;
71
- margin: -1px; padding: 0;
72
- overflow: hidden;
73
- clip-path: inset(50%);
74
- white-space: nowrap;
75
- }
76
-
77
- /* ------------------------------------------------------------------ top bar */
78
-
79
- .bar {
80
- position: relative;
81
- z-index: 3;
82
- height: var(--lb-bar);
83
- display: flex;
84
- align-items: center;
85
- gap: 20px;
86
- padding: 0 26px;
87
- background: var(--bg-frame);
88
- border-bottom: var(--line) solid var(--rule);
89
- }
90
-
91
- .brand {
92
- display: inline-flex;
93
- align-items: center;
94
- gap: 11px;
95
- text-decoration: none;
96
- font-family: var(--font-display);
97
- font-weight: 800;
98
- font-size: 1.06rem;
99
- letter-spacing: .002em;
100
- color: var(--ink);
101
- border-radius: var(--radius-sm);
102
- padding: 4px 6px;
103
- margin-left: -6px;
104
- white-space: nowrap;
105
- }
106
-
107
- .brand .bongos { width: 40px; height: 29px; display: block; }
108
- .brand .bongos .glow, .brand .bongos .ring { opacity: 0; }
109
-
110
- .bar nav {
111
- margin-left: auto;
112
- display: flex;
113
- align-items: center;
114
- gap: 6px;
115
- }
116
-
117
- .bar nav a {
118
- text-decoration: none;
119
- white-space: nowrap;
120
- color: var(--ink-soft);
121
- font-weight: 600;
122
- font-size: .93rem;
123
- padding: 9px 13px;
124
- border-radius: var(--radius-pill);
125
- transition: background .18s cubic-bezier(.16,1,.3,1), color .18s cubic-bezier(.16,1,.3,1);
126
- }
127
- .bar nav a:hover { background: var(--nav-hover); color: var(--ink); }
128
-
129
- .mode-toggle {
130
- width: 40px; height: 40px;
131
- display: grid;
132
- place-items: center;
133
- border-radius: var(--radius-pill);
134
- border: var(--line) solid var(--toggle-bd);
135
- background: var(--toggle-bg);
136
- color: var(--ink);
137
- cursor: pointer;
138
- padding: 0;
139
- transition: transform .2s cubic-bezier(.16,1,.3,1);
140
- }
141
- .mode-toggle:active { transform: scale(.94); }
142
- .mode-toggle .sun { opacity: var(--sun-o); }
143
- .mode-toggle .moon { opacity: var(--moon-o); }
144
-
145
- .chip {
146
- font-family: var(--font-body);
147
- font-weight: 700;
148
- white-space: nowrap;
149
- font-size: .9rem;
150
- color: var(--btn-o-fg);
151
- background: var(--btn-o-bg);
152
- border: var(--line) solid var(--btn-o-bd);
153
- border-radius: var(--radius-pill);
154
- padding: 9px 18px;
155
- min-height: 38px;
156
- cursor: pointer;
157
- transition: transform .2s cubic-bezier(.16,1,.3,1), background .2s cubic-bezier(.16,1,.3,1);
158
- }
159
- .chip:hover { background: var(--nav-hover); }
160
- .chip:active { transform: translateY(1px); }
161
-
162
- /* ------------------------------------------------- the hero panel (the slab) */
163
-
164
- .hero {
165
- position: relative;
166
- min-height: calc(100dvh - var(--lb-bar));
167
- padding: var(--lb-inset);
168
- display: flex;
169
- }
170
-
171
- .panel {
172
- position: relative;
173
- flex: 1;
174
- overflow: hidden;
175
- border-radius: var(--radius);
176
- background: var(--bg-deep);
177
- box-shadow: var(--shadow-lift), inset 0 var(--line) 0 var(--lb-sheen);
178
- isolation: isolate;
179
- display: grid;
180
- grid-template-rows: auto 1fr auto;
181
- padding: 30px var(--lb-pad) 46px;
182
- }
183
-
184
- /* the photographic ground, plus the scrim that keeps the floor readable */
185
- .panel::before {
186
- content: "";
187
- position: absolute;
188
- inset: 0;
189
- z-index: -2;
190
- background:
191
- radial-gradient(1150px 460px at 0% -14%, var(--scrim-a) 0 42%, var(--scrim-b) 88%) center/cover no-repeat,
192
- radial-gradient(1150px 460px at 0% -14%, var(--scrim-a) 0 42%, var(--scrim-b) 88%) center/cover no-repeat,
193
- linear-gradient(to top, var(--scrim-a) 0 20%, var(--scrim-mid) 42%, var(--scrim-b) 66%) center/cover no-repeat,
194
- linear-gradient(100deg, var(--scrim-a) 0 26%, var(--scrim-mid) 46%, var(--scrim-b) 68%) center/cover no-repeat,
195
- var(--plate-hero) center/cover no-repeat;
196
- }
197
-
198
- /* the template's raking ripple and the four faceted seams of its wide panel */
199
- .panel::after {
200
- content: "";
201
- position: absolute;
202
- inset: 0;
203
- z-index: -1;
204
- pointer-events: none;
205
- background-image:
206
- linear-gradient(90deg, transparent 0 19.6%, var(--lb-seam) 19.8% 20.2%, transparent 20.4% 100%),
207
- linear-gradient(90deg, transparent 0 39.6%, var(--lb-seam) 39.8% 40.2%, transparent 40.4% 100%),
208
- linear-gradient(90deg, transparent 0 59.6%, var(--lb-seam) 59.8% 60.2%, transparent 60.4% 100%),
209
- linear-gradient(90deg, transparent 0 79.6%, var(--lb-seam) 79.8% 80.2%, transparent 80.4% 100%),
210
- var(--ripple);
211
- opacity: var(--ripple-op);
212
- }
213
-
214
- /* ------------------------------------------------------------ pipeline rail */
215
-
216
- .rail {
217
- list-style: none;
218
- margin: 0;
219
- padding: 0;
220
- position: relative;
221
- display: grid;
222
- grid-template-columns: repeat(5, minmax(0, 84px));
223
- gap: 0;
224
- align-items: start;
225
- width: max-content;
226
- max-width: 100%;
227
- }
228
-
229
- /* the hairline the badges sit on; it stops at the last badge's centre in both layouts */
230
- .rail::before {
231
- content: "";
232
- position: absolute;
233
- left: 14px;
234
- right: calc(20% - 13px);
235
- top: 14px;
236
- height: var(--line);
237
- background: var(--rule);
238
- }
239
-
240
- .rail li {
241
- position: relative;
242
- display: grid;
243
- justify-items: start;
244
- align-content: start;
245
- gap: 9px;
246
- }
247
-
248
- .rail .pip {
249
- position: relative;
250
- width: 29px; height: 29px;
251
- border-radius: var(--radius-pill);
252
- border: var(--line) solid var(--rule);
253
- background: var(--tile-fill);
254
- }
255
-
256
- .rail .pip::before {
257
- content: "";
258
- position: absolute;
259
- inset: 7px;
260
- border-radius: var(--radius-pill);
261
- background: var(--ink-faint);
262
- opacity: .5;
263
- }
264
-
265
- .rail .t {
266
- font-size: .78rem;
267
- font-weight: 600;
268
- letter-spacing: .03em;
269
- white-space: nowrap;
270
- color: var(--ink-soft);
271
- }
272
-
273
- .rail li.on .pip {
274
- border-color: var(--accent);
275
- background: var(--accent);
276
- }
277
- .rail li.on .pip::before { background: var(--on-accent); opacity: 1; }
278
- .rail li.on .t { color: var(--ink); font-weight: 800; }
279
-
280
- /* the one authored moment: the live step's lamp warms up once on load. The lit state is the RESTING
281
- state, so cancelling the animation under reduced motion leaves the lamp on rather than off. */
282
- .rail li.on .pip::after {
283
- content: "";
284
- position: absolute;
285
- inset: -9px;
286
- border-radius: var(--radius-pill);
287
- background: radial-gradient(circle, color-mix(in srgb, var(--accent) 46%, transparent), transparent 70%);
288
- opacity: 1;
289
- animation: lb-warm 1100ms cubic-bezier(.16,1,.3,1) both;
290
- }
291
-
292
- @keyframes lb-warm {
293
- 0%, 24% { opacity: 0; transform: scale(.55); }
294
- 100% { opacity: 1; transform: scale(1); }
295
- }
296
-
297
- /* ------------------------------------------------------- the floor: copy + object */
298
-
299
- .floor {
300
- grid-row: 3;
301
- display: grid;
302
- grid-template-columns: minmax(0, 1fr) minmax(0, 540px);
303
- align-items: end;
304
- gap: 30px;
305
- }
306
-
307
- h1 {
308
- margin: 0 0 18px;
309
- font-family: var(--font-display);
310
- font-weight: 800;
311
- font-size: clamp(1.75rem, 4.2vw, 3.75rem);
312
- line-height: 1.06;
313
- letter-spacing: -.018em;
314
- color: var(--ink);
315
- }
316
-
317
- .lede {
318
- margin: 0 0 30px;
319
- max-width: 44ch;
320
- font-size: clamp(.98rem, 1.1vw, 1.14rem);
321
- line-height: 1.55;
322
- color: var(--ink-soft);
323
- }
324
-
325
- /* the joined door pill: two equal halves in one pill, the primary carries the accent */
326
- .doors {
327
- display: inline-flex;
328
- padding: 6px;
329
- gap: 6px;
330
- border-radius: var(--radius-pill);
331
- background: var(--tile-fill);
332
- border: var(--line) solid var(--rule);
333
- box-shadow: var(--shadow-card);
334
- }
335
-
336
- .door {
337
- flex: 1 1 0;
338
- min-width: 192px;
339
- min-height: 52px;
340
- display: inline-flex;
341
- align-items: center;
342
- justify-content: center;
343
- padding: 0 24px;
344
- border-radius: var(--radius-pill);
345
- text-decoration: none;
346
- white-space: nowrap;
347
- font-family: var(--font-display);
348
- font-weight: 700;
349
- font-size: 1rem;
350
- transition: transform .2s cubic-bezier(.16,1,.3,1), background .2s cubic-bezier(.16,1,.3,1);
351
- }
352
- .door:active { transform: translateY(1px); }
353
-
354
- .door-2 { color: var(--ink); }
355
- .door-2:hover { background: var(--row-hover); }
356
-
357
- .door-1 {
358
- background: var(--field-tan);
359
- color: var(--on-tan);
360
- font-weight: 800;
361
- box-shadow: inset 0 var(--line) 0 var(--lb-sheen);
362
- }
363
- .door-1:hover { background: color-mix(in srgb, var(--field-tan) 88%, var(--cream)); }
364
-
365
- .object {
366
- grid-column: 2;
367
- justify-self: end;
368
- align-self: end;
369
- width: min(540px, 100%);
370
- height: auto;
371
- margin: 0 calc(var(--lb-pad) * -0.55) -92px 0;
372
- display: block;
373
- filter: drop-shadow(var(--mark-shadow));
374
- pointer-events: none;
375
- }
376
-
377
- /* --------------------------------------------------- the quiet band below */
378
-
379
- .band {
380
- padding: 46px var(--lb-inset) 34px;
381
- }
382
-
383
- .band .wrap {
384
- display: grid;
385
- grid-template-columns: 108px minmax(0, 1fr);
386
- align-items: center;
387
- gap: 34px;
388
- max-width: 1120px;
389
- margin: 0 auto;
390
- padding: 0 calc(var(--lb-pad) - var(--lb-inset));
391
- }
392
-
393
- .seal {
394
- margin: 0;
395
- width: 108px; height: 108px;
396
- border-radius: var(--radius-pill);
397
- border: var(--line) solid var(--rule);
398
- background: var(--tile-fill);
399
- overflow: hidden;
400
- display: grid;
401
- place-items: center;
402
- box-shadow: var(--shadow-card);
403
- }
404
- .seal img { width: 152%; height: 152%; object-fit: contain; display: block; }
405
-
406
- .stats {
407
- list-style: none;
408
- margin: 0;
409
- padding: 0;
410
- position: relative;
411
- display: grid;
412
- grid-template-columns: repeat(3, minmax(0, 1fr));
413
- gap: 26px;
414
- }
415
-
416
- /* the leader rail: one hairline, a tan dot per callout, a short drop to each number */
417
- .stats::before {
418
- content: "";
419
- position: absolute;
420
- left: 0; right: 0; top: 0;
421
- height: var(--line);
422
- background: var(--lead);
423
- }
424
-
425
- .stats li {
426
- position: relative;
427
- padding-top: 30px;
428
- }
429
-
430
- .stats li::before {
431
- content: "";
432
- position: absolute;
433
- left: 0; top: 0;
434
- width: var(--line); height: 20px;
435
- background: var(--lead);
436
- }
437
-
438
- .stats li::after {
439
- content: "";
440
- position: absolute;
441
- left: -3px; top: -3px;
442
- width: 7px; height: 7px;
443
- border-radius: var(--radius-pill);
444
- background: var(--lead-dot);
445
- }
446
-
447
- .stats .n {
448
- display: block;
449
- font-family: var(--font-display);
450
- font-weight: 800;
451
- font-size: clamp(1.5rem, 2.1vw, 2rem);
452
- line-height: 1.1;
453
- font-variant-numeric: tabular-nums;
454
- color: var(--ink);
455
- }
456
-
457
- .stats .l {
458
- display: block;
459
- margin-top: 3px;
460
- font-size: .88rem;
461
- color: var(--ink-soft);
462
- }
463
-
464
- /* ------------------------------------------------------------------ footer */
465
-
466
- footer {
467
- padding: 0 var(--lb-inset) 40px;
468
- }
469
-
470
- footer p {
471
- max-width: 1120px;
472
- margin: 0 auto;
473
- padding: 20px calc(var(--lb-pad) - var(--lb-inset)) 0;
474
- border-top: var(--line) solid var(--rule-soft);
475
- font-size: .88rem;
476
- color: var(--ink-soft);
477
- }
478
-
479
- footer a {
480
- text-decoration-color: var(--lead);
481
- text-underline-offset: 3px;
482
- border-radius: var(--radius-sm);
483
- padding: 4px 5px;
484
- margin: 0 -5px;
485
- }
486
- footer a:hover { text-decoration-color: var(--accent); }
487
-
488
- /* ---------------------------------------------------------------- narrower */
489
-
490
- @media (max-width: 1180px) {
491
- :root { --lb-pad: 40px; }
492
- .floor { grid-template-columns: minmax(0, 1fr) minmax(0, 400px); }
493
- .object { width: min(400px, 100%); margin-bottom: -68px; }
494
- }
495
-
496
- @media (max-width: 860px) {
497
- :root { --lb-bar: 62px; --lb-inset: 12px; --lb-pad: 20px; }
498
-
499
- .bar { padding: 0 14px; gap: 10px; }
500
- .bar nav { gap: 2px; }
501
- .bar nav a { padding: 9px 9px; font-size: .88rem; }
502
- .brand span { font-size: .98rem; }
503
- .brand .bongos { width: 34px; height: 25px; }
504
- .chip { padding: 9px 13px; font-size: .85rem; }
505
-
506
- .hero { min-height: calc(100dvh - var(--lb-bar)); }
507
- .panel { padding: 20px var(--lb-pad) 24px; grid-template-rows: auto 1fr; row-gap: 22px; }
508
- /* the copy sits at the TOP of the panel on one column, so the scrim inverts and doubles up
509
- where the headline and lede cross the leaves */
510
- .panel::before {
511
- background:
512
- linear-gradient(to bottom, var(--scrim-a) 0 40%, var(--scrim-b) 62%) center/cover no-repeat,
513
- linear-gradient(to bottom, var(--scrim-a) 0 44%, var(--scrim-b) 70%) center/cover no-repeat,
514
- linear-gradient(to bottom, var(--scrim-a) 0 60%, var(--scrim-mid) 80%, var(--scrim-b) 97%) center/cover no-repeat,
515
- var(--plate-hero) 55% center/cover no-repeat;
516
- }
517
-
518
- .rail { grid-template-columns: repeat(5, minmax(0, 1fr)); width: 100%; }
519
- .rail::before { left: 12px; right: 12px; top: 12px; }
520
- .rail li { gap: 7px; }
521
- .rail .pip { width: 25px; height: 25px; }
522
- .rail .pip::before { inset: 6px; }
523
- .rail .t { font-size: .69rem; letter-spacing: .01em; }
524
-
525
- .floor { grid-row: 2; grid-template-columns: minmax(0, 1fr); gap: 0; align-items: start; align-content: space-between; }
526
- h1 { margin-bottom: 12px; }
527
- .lede { margin-bottom: 20px; font-size: .96rem; }
528
-
529
- .doors { display: flex; flex-direction: column; align-items: stretch; width: 100%; border-radius: var(--radius); }
530
- .door { min-width: 0; min-height: 50px; width: 100%; }
531
-
532
- .object {
533
- grid-column: 1;
534
- justify-self: center;
535
- width: min(280px, 82%);
536
- margin: 10px 0 -34px;
537
- }
538
-
539
- .band { padding: 34px var(--lb-inset) 26px; }
540
- .band .wrap { grid-template-columns: 84px minmax(0, 1fr); gap: 20px; padding: 0 8px; }
541
- .seal { width: 84px; height: 84px; }
542
- .stats { grid-template-columns: minmax(0, 1fr); gap: 16px; }
543
- .stats::before { left: 0; right: auto; top: 6px; bottom: 6px; width: var(--line); height: auto; }
544
- .stats li { padding-top: 0; padding-left: 20px; }
545
- .stats li::before { left: 0; top: 50%; width: 14px; height: var(--line); }
546
- .stats li::after { left: 11px; top: calc(50% - 3px); }
547
- .stats .n { font-size: 1.4rem; }
548
-
549
- footer { padding: 0 var(--lb-inset) 26px; }
550
- footer p { padding: 16px 8px 0; }
551
- }
552
-
553
- /* the bar must stay on one line: below this width every item in it is trimmed to fit */
554
- @media (max-width: 520px) {
555
- .bar { padding: 0 10px; gap: 6px; }
556
- .brand { padding: 0; margin-left: 0; gap: 8px; font-size: .88rem; }
557
- .brand .bongos { width: 28px; height: 20px; }
558
- .bar nav { gap: 3px; }
559
- .bar nav a { font-size: .8rem; padding: 8px 6px; }
560
- .mode-toggle { width: 34px; height: 34px; }
561
- .mode-toggle svg { width: 16px; height: 16px; }
562
- .chip { font-size: .78rem; padding: 8px 11px; min-height: 34px; }
563
- }
564
-
565
- @media (max-width: 420px) {
566
- .rail .t { font-size: .64rem; }
567
- .door { font-size: .95rem; }
568
- }
569
- </style>
570
- </head>
571
- <body>
572
-
573
- <header class="bar">
574
- <a class="brand" href="/" aria-label="Cloud Bongos, home">
575
- <svg class="bongos" viewBox="0 0 440 320" role="img" aria-label="A pair of bongo drums being played">
576
- <defs>
577
- <linearGradient id="shellBig" x1="0" y1="0" x2="1" y2="0.35">
578
- <stop offset="0%" stop-color="var(--accent-deep)"/><stop offset="16%" stop-color="var(--accent)"/>
579
- <stop offset="48%" stop-color="var(--accent)"/><stop offset="86%" stop-color="var(--accent-deep)"/>
580
- <stop offset="100%" stop-color="var(--accent-deep)"/>
581
- </linearGradient>
582
- <linearGradient id="shellSml" x1="0" y1="0" x2="1" y2="0.35">
583
- <stop offset="0%" stop-color="var(--accent-deep)"/><stop offset="18%" stop-color="var(--terracotta)"/>
584
- <stop offset="55%" stop-color="var(--terracotta)"/><stop offset="100%" stop-color="var(--accent-deep)"/>
585
- </linearGradient>
586
- <radialGradient id="skin" cx="0.36" cy="0.26" r="0.9">
587
- <stop offset="0%" stop-color="var(--skin-hi)"/><stop offset="58%" stop-color="var(--skin-mid)"/>
588
- <stop offset="100%" stop-color="var(--skin-lo)"/>
589
- </radialGradient>
590
- <radialGradient id="halo" cx="0.5" cy="0.5" r="0.5">
591
- <stop offset="0%" stop-color="var(--accent)" stop-opacity="0.30"/>
592
- <stop offset="48%" stop-color="var(--accent)" stop-opacity="0.13"/>
593
- <stop offset="100%" stop-color="var(--accent)" stop-opacity="0"/>
594
- </radialGradient>
595
- <filter id="soft" x="-60%" y="-160%" width="220%" height="420%">
596
- <feGaussianBlur stdDeviation="9"/>
597
- </filter>
598
- </defs>
599
-
600
- <ellipse class="glow" cx="222" cy="170" rx="215" ry="140" fill="url(#halo)"/>
601
- <ellipse class="bshadow" cx="220" cy="286" rx="142" ry="14"
602
- fill="var(--drum-shadow)" opacity=".22" filter="url(#soft)"/>
603
-
604
- <!-- the joining block, behind both shells -->
605
- <path d="M 214,196 C 232,188 250,188 264,196 L 258,232 C 244,225 230,225 219,232 Z" fill="var(--accent-deep)"/>
606
- <path d="M 214,196 C 232,188 250,188 264,196 L 262,205 C 247,197 231,197 216,205 Z" fill="var(--ink)" opacity=".22"/>
607
-
608
- <g class="drumBig">
609
- <path d="M 74,118 C 76,166 90,228 98,266 A 52,17 0 0 0 202,266 C 210,228 224,166 226,118 Z" fill="url(#shellBig)"/>
610
- <path d="M 172,124 C 174,176 186,232 192,268 A 52,17 0 0 0 202,266 C 210,228 224,166 226,118 Z" fill="var(--ink)" opacity=".17"/>
611
- <path d="M 92,126 C 94,174 104,230 110,266 A 52,17 0 0 1 100,267 C 92,230 78,172 76,124 Z" fill="#fff" opacity=".20"/>
612
- <ellipse cx="150" cy="121" rx="80" ry="29" fill="var(--accent-deep)"/>
613
- <ellipse cx="150" cy="117" rx="80" ry="29" fill="var(--accent)"/>
614
- <ellipse cx="150" cy="117" rx="80" ry="29" fill="#fff" opacity=".13"/>
615
- <g class="headBig">
616
- <ellipse cx="150" cy="118" rx="70" ry="24" fill="url(#skin)"/>
617
- <ellipse cx="150" cy="118" rx="70" ry="24" fill="none" stroke="var(--ink)" stroke-opacity=".09" stroke-width="1.4"/>
618
- <ellipse cx="150" cy="118" rx="55" ry="18" fill="none" stroke="var(--ink)" stroke-opacity=".045" stroke-width="1"/>
619
- <ellipse class="ring" cx="150" cy="118" rx="56" ry="19" fill="none" stroke="var(--accent-deep)" stroke-width="2.6"/>
620
- </g>
621
- <g fill="var(--accent-deep)">
622
- <path d="M 78,138 l 9,0 -1.5,20 -6,0 z"/><path d="M 120,148 l 9,0 -1,21 -7,0 z"/>
623
- <path d="M 172,148 l 9,0 -1,21 -7,0 z"/><path d="M 214,138 l 9,0 -1.5,20 -6,0 z"/>
624
- </g>
625
- </g>
626
-
627
- <g class="drumSml">
628
- <path d="M 240,134 C 242,178 252,230 258,266 A 40,13 0 0 0 338,266 C 344,230 354,178 356,134 Z" fill="url(#shellSml)"/>
629
- <path d="M 314,140 C 316,186 324,234 328,268 A 40,13 0 0 0 338,266 C 344,230 354,178 356,134 Z" fill="var(--ink)" opacity=".19"/>
630
- <path d="M 254,140 C 256,182 264,232 268,266 A 40,13 0 0 1 260,267 C 254,232 244,182 242,138 Z" fill="#fff" opacity=".17"/>
631
- <ellipse cx="296" cy="137" rx="60" ry="22" fill="var(--accent-deep)"/>
632
- <ellipse cx="296" cy="133" rx="60" ry="22" fill="var(--terracotta)"/>
633
- <ellipse cx="296" cy="133" rx="60" ry="22" fill="#fff" opacity=".13"/>
634
- <g class="headSml">
635
- <ellipse cx="296" cy="134" rx="51" ry="18" fill="url(#skin)"/>
636
- <ellipse cx="296" cy="134" rx="51" ry="18" fill="none" stroke="var(--ink)" stroke-opacity=".09" stroke-width="1.4"/>
637
- <ellipse cx="296" cy="134" rx="39" ry="13" fill="none" stroke="var(--ink)" stroke-opacity=".045" stroke-width="1"/>
638
- <ellipse class="ring" cx="296" cy="134" rx="41" ry="14" fill="none" stroke="var(--accent-deep)" stroke-width="2.3"/>
639
- </g>
640
- <g fill="var(--accent-deep)">
641
- <path d="M 243,152 l 8,0 -1,17 -6,0 z"/><path d="M 276,160 l 8,0 -1,18 -6,0 z"/>
642
- <path d="M 312,160 l 8,0 -1,18 -6,0 z"/><path d="M 345,152 l 8,0 -1,17 -6,0 z"/>
643
- </g>
644
- </g>
645
- </svg>
646
- <span>Cloud Bongos</span>
647
- </a>
648
-
649
- <nav aria-label="Main">
650
- <a href="/projects">Projects</a>
651
- <a href="/hall">Hall</a>
652
- <button class="mode-toggle" id="mode" type="button" aria-label="Toggle light or dark">
653
- <svg viewBox="0 0 24 24" width="18" height="18" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round">
654
- <g class="sun">
655
- <circle cx="12" cy="12" r="4.2"/>
656
- <path d="M12 3.1v2M12 18.9v2M3.1 12h2M18.9 12h2M5.8 5.8l1.4 1.4M16.8 16.8l1.4 1.4M18.2 5.8l-1.4 1.4M7.2 16.8l-1.4 1.4"/>
657
- </g>
658
- <g class="moon">
659
- <path d="M20.1 14.3A8.2 8.2 0 0 1 9.7 3.9a8.4 8.4 0 1 0 10.4 10.4z"/>
660
- </g>
661
- </svg>
662
- </button>
663
- <button class="chip" type="button">Sign in</button>
664
- </nav>
665
- </header>
666
-
667
- <main>
668
- <section class="hero">
669
- <div class="panel">
670
-
671
- <ol class="rail" aria-label="Build pipeline">
672
- <li><span class="pip" aria-hidden="true"></span><span class="t">claim</span></li>
673
- <li class="on" aria-current="step"><span class="pip" aria-hidden="true"></span><span class="t">build</span><span class="sr">, live now</span></li>
674
- <li><span class="pip" aria-hidden="true"></span><span class="t">grade</span></li>
675
- <li><span class="pip" aria-hidden="true"></span><span class="t">ship</span></li>
676
- <li><span class="pip" aria-hidden="true"></span><span class="t">credit</span></li>
677
- </ol>
678
-
679
- <div class="floor">
680
- <div class="say">
681
- <h1>Building Digitally,<br>as simple as Bongos.</h1>
682
- <p class="lede">AI agents claim tasks and ship the code. You set the direction and the gates.</p>
683
- <div class="doors">
684
- <a class="door door-2" href="/projects">Find a project to join</a>
685
- <a class="door door-1" href="/projects?view=new">Start a project</a>
686
- </div>
687
- </div>
688
-
689
- <img class="object" src="../../../../../.impeccable/mocks/world-assets/r2-bongos-organic-a-cut.png"
690
- alt="A pair of wooden bongo drums with a monstera leaf resting against them." width="1600" height="1600">
691
- </div>
692
-
693
- </div>
694
- </section>
695
-
696
- <section class="band" aria-label="The ledger so far">
697
- <div class="wrap">
698
- <figure class="seal">
699
- <img src="../../../../../.impeccable/mocks/world-assets/r2-bongos-organic-b-cut.png"
700
- alt="The same bongo pair seen from above." width="1600" height="1600">
701
- </figure>
702
- <ul class="stats">
703
- <li><span class="n">1,107</span><span class="l">tasks shipped</span></li>
704
- <li><span class="n">69,751</span><span class="l">credits of value</span></li>
705
- <li><span class="n">6</span><span class="l">builders</span></li>
706
- </ul>
707
- </div>
708
- </section>
709
- </main>
710
-
711
- <footer>
712
- <p>Built by agents, on Cloud Bongos. <a href="https://www.gnu.org/licenses/agpl-3.0.html">Open source (AGPL-3.0)</a></p>
713
- </footer>
714
-
715
- <script>
716
- (function () {
717
- var root = document.documentElement;
718
- var btn = document.getElementById('mode');
719
- function isDark() {
720
- var m = root.getAttribute('data-mode');
721
- if (m === 'dark') return true;
722
- if (m === 'light') return false;
723
- return window.matchMedia('(prefers-color-scheme: dark)').matches;
724
- }
725
- function sync() { btn.setAttribute('aria-pressed', isDark() ? 'true' : 'false'); }
726
- btn.addEventListener('click', function () {
727
- var next = isDark() ? 'light' : 'dark';
728
- root.setAttribute('data-mode', next);
729
- try { localStorage.setItem('cb-color-mode', next); } catch (e) {}
730
- sync();
731
- });
732
- sync();
733
- })();
734
- </script>
735
- </body>
736
- </html>