@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,424 +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=Antonio:wght@400;600;700&family=Azeret+Mono:wght@400;500&family=Barlow:wght@400;500;600&display=swap">
13
- <link rel="stylesheet" href="_tokens.css">
14
- <style>
15
- body { --fi: 40px; overflow-x: hidden; }
16
- .viewport { min-height: 100dvh; display: flex; flex-direction: column; }
17
-
18
- /* ---------- top bar ---------- */
19
- .topbar {
20
- position: relative; flex: 0 0 auto; height: 72px;
21
- display: flex; align-items: center; justify-content: space-between; gap: 18px;
22
- padding: 0 clamp(18px, 2.8vw, 40px);
23
- background: var(--bg-frame); border-bottom: var(--line) solid var(--rule);
24
- }
25
- .topbar .node {
26
- position: absolute; left: 50%; bottom: -9px; transform: translateX(-50%);
27
- color: var(--ink-faint); background: var(--bg-frame); padding: 0 6px; line-height: 0;
28
- }
29
- .topbar .node svg { width: 18px; height: 18px; display: block; }
30
- .brand { display: inline-flex; align-items: center; gap: 12px; text-decoration: none; flex: 0 0 auto; }
31
- .brand-mark { width: 38px; height: 28px; display: block; }
32
- .brand-mark svg { width: 100%; height: 100%; display: block; }
33
- .brand-name { font: 600 15px/1 var(--font-body); letter-spacing: .2em; text-transform: uppercase; color: var(--ink); white-space: nowrap; }
34
- .topnav { display: flex; align-items: center; gap: clamp(12px, 1.9vw, 28px); }
35
- .topnav a, .navbtn {
36
- font: 500 13px/1 var(--font-body); letter-spacing: .16em; text-transform: uppercase;
37
- color: var(--ink-soft); text-decoration: none; background: none; border: 0; padding: 11px 2px;
38
- cursor: pointer; font-family: var(--font-body); white-space: nowrap;
39
- }
40
- .topnav a:hover, .navbtn:hover { color: var(--accent-text); }
41
- .mode-toggle {
42
- width: 38px; height: 38px; display: grid; place-items: center; padding: 0;
43
- background: none; border: var(--line) solid transparent; border-radius: var(--radius-pill);
44
- color: var(--ink-soft); cursor: pointer;
45
- }
46
- .mode-toggle:hover { color: var(--accent-text); border-color: var(--rule); }
47
- .mode-toggle svg { width: 19px; height: 19px; display: block; }
48
- .mode-toggle .i-moon { display: var(--icon-moon); }
49
- .mode-toggle .i-sun { display: var(--icon-sun); }
50
-
51
- /* ---------- hero ---------- */
52
- main { flex: 1 1 auto; display: flex; flex-direction: column; min-height: 0; }
53
- .hero {
54
- position: relative; flex: 1 1 auto;
55
- display: grid; grid-template-columns: 1.3fr 1fr; align-items: center;
56
- gap: clamp(18px, 2.5vw, 38px);
57
- padding: clamp(30px, 4.4vh, 60px) clamp(26px, 3.8vw, 56px);
58
- }
59
- .pbk { position: absolute; width: 26px; height: 26px; border: 0 solid var(--bracket); pointer-events: none; }
60
- .pbk-tl { top: var(--fi); left: var(--fi); border-top-width: var(--line); border-left-width: var(--line); }
61
- .pbk-tr { top: var(--fi); right: var(--fi); border-top-width: var(--line); border-right-width: var(--line); }
62
- .pbk-bl { bottom: var(--fi); left: var(--fi); border-bottom-width: var(--line); border-left-width: var(--line); }
63
- .pbk-br { bottom: var(--fi); right: var(--fi); border-bottom-width: var(--line); border-right-width: var(--line); }
64
- .xh { position: absolute; color: var(--ink-faint); line-height: 0; pointer-events: none; }
65
- .xh svg { width: 15px; height: 15px; display: block; }
66
- .xh-l { left: calc(var(--fi) - 7px); top: 50%; margin-top: -7px; }
67
- .xh-r { right: calc(var(--fi) - 7px); top: 50%; margin-top: -7px; }
68
-
69
- .eyebrow {
70
- margin: 0 0 14px; color: var(--accent-text);
71
- font: 600 12.5px/1 var(--font-body); letter-spacing: .22em; text-transform: uppercase;
72
- }
73
- h1 {
74
- margin: 0; font-family: var(--font-display); font-weight: 700;
75
- font-size: clamp(2.3rem, 6.15vw, 5.5rem); line-height: .93; letter-spacing: .004em;
76
- text-transform: uppercase; color: var(--ink);
77
- }
78
- h1 .l2 { color: var(--accent-ui); display: block; }
79
- .lede {
80
- margin: 26px 0 0; max-width: min(100%, 430px); color: var(--ink);
81
- font: 500 13px/1.95 var(--font-body); letter-spacing: .1em; text-transform: uppercase;
82
- }
83
- .lede .hi { color: var(--accent-text); }
84
-
85
- .doors { margin: 32px 0 0; display: grid; grid-template-columns: 1fr 1fr; gap: 16px; max-width: 580px; }
86
- .door {
87
- position: relative; display: flex; align-items: center; justify-content: space-between; gap: 12px;
88
- min-height: 56px; padding: 0 10px 0 24px; text-decoration: none;
89
- border: var(--line) solid var(--ink); border-radius: var(--radius-pill);
90
- color: var(--ink); background: none;
91
- font: 600 13px/1.15 var(--font-body); letter-spacing: .12em; text-transform: uppercase;
92
- transition: background-color .2s cubic-bezier(.16,1,.3,1), border-color .2s cubic-bezier(.16,1,.3,1);
93
- }
94
- .door:hover { background: var(--accent-faint); border-color: var(--accent-text); }
95
- .door .arw {
96
- flex: 0 0 auto; width: 36px; height: 36px; display: grid; place-items: center;
97
- border: var(--line) solid var(--rule); border-radius: 50%; color: var(--ink-soft);
98
- }
99
- .door .arw svg { width: 15px; height: 15px; display: block; }
100
- .door-primary .arw { border-color: var(--accent-text); color: var(--accent-text); }
101
-
102
- /* ---------- the halo, the mark, the info card ---------- */
103
- .figure {
104
- position: relative; display: flex; flex-direction: column; justify-content: center;
105
- min-height: clamp(330px, 52vh, 570px); padding: 26px;
106
- }
107
- .tick { position: absolute; top: 24px; right: 30px; color: var(--ink-soft); line-height: 0; }
108
- .tick svg { display: block; width: 22px; height: 22px; }
109
-
110
- .ringwrap { position: relative; flex: 1 1 auto; min-height: 270px; }
111
- .halo {
112
- position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
113
- width: min(34vw, 500px); aspect-ratio: 1 / 1; border-radius: 50%;
114
- border: 2.5px solid var(--halo);
115
- }
116
- .halo::before, .halo::after {
117
- content: ''; position: absolute; inset: -4px; border-radius: 50%;
118
- border: 6px solid var(--halo-bloom); opacity: 1;
119
- animation: halo-breathe 1.2s cubic-bezier(.16, 1, .3, 1) both;
120
- }
121
- .halo::before { filter: blur(12px); }
122
- .halo::after { filter: blur(42px); }
123
- @keyframes halo-breathe { from { opacity: 0; } to { opacity: 1; } }
124
-
125
- .bongos {
126
- position: absolute; left: 50%; top: 53%; transform: translate(-50%, -50%);
127
- width: min(36vw, 522px); height: auto; display: block;
128
- --accent: var(--drum-shell); --accent-deep: var(--drum-shell-deep);
129
- --terracotta: var(--drum-shell-2); --ink: var(--drum-ink);
130
- filter: drop-shadow(0 0 26px var(--drum-rim)) drop-shadow(0 2px 3px var(--drum-rim));
131
- }
132
- .bongos .ring, .bongos .glow { display: none; }
133
-
134
- .idcard {
135
- position: absolute; right: 4px; bottom: 10px; width: min(20vw, 216px);
136
- background: var(--bg-card); border: var(--line) solid var(--rule); border-radius: var(--radius);
137
- padding: 16px 16px 12px; box-shadow: var(--shadow-card);
138
- }
139
- .idcard-t { margin: 0 0 9px; font: 600 13px/1 var(--font-body); letter-spacing: .1em; text-transform: uppercase; color: var(--ink); }
140
- .idcard-l { margin: 0 0 5px; font: 400 12.5px/1.35 var(--font-body); color: var(--ink-soft); }
141
- .idcard-l.num { font-size: 11.5px; letter-spacing: .03em; }
142
- .idcard-foot { margin-top: 12px; display: flex; align-items: center; justify-content: space-between; }
143
- .dots { display: inline-flex; gap: 6px; }
144
- .dots i { width: 5px; height: 5px; border-radius: 50%; background: var(--ink-faint); display: block; }
145
- .dots i:first-child { background: var(--accent-ui); }
146
- .barcode {
147
- width: 44px; height: 12px;
148
- background:
149
- repeating-linear-gradient(90deg, var(--hatch) 0 1px, transparent 1px 3px),
150
- repeating-linear-gradient(90deg, var(--hatch) 0 2px, transparent 2px 7px);
151
- }
152
-
153
- /* ---------- pipeline strip ---------- */
154
- .railwrap { flex: 0 0 auto; border-top: var(--line) solid var(--rule); padding: 20px clamp(24px, 3.4vw, 54px) 24px; }
155
- .rail { display: grid; grid-template-columns: repeat(5, 1fr); margin: 0; padding: 0; list-style: none; }
156
- .rail li {
157
- display: flex; align-items: center; justify-content: center; gap: 13px; color: var(--ink);
158
- padding: 4px 10px; border-left: var(--line) solid var(--rule-soft);
159
- }
160
- .rail li:first-child { border-left: 0; }
161
- .rail svg { width: 27px; height: 27px; flex: 0 0 auto; color: var(--ink-soft); }
162
- .rail .lbl { font: 600 15px/1 var(--font-body); letter-spacing: .1em; text-transform: uppercase; }
163
- .rail .is-live svg, .rail .is-live .lbl { color: var(--accent-text); }
164
-
165
- /* ---------- below the fold ---------- */
166
- .foot {
167
- display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap;
168
- padding: 22px clamp(24px, 3.4vw, 54px); border-top: var(--line) solid var(--rule-soft);
169
- background: var(--bg-deep);
170
- }
171
- .foot p { margin: 0; font: 400 13.5px/1.4 var(--font-body); color: var(--ink-soft); }
172
- .foot a { color: var(--accent-text); text-decoration: none; border-bottom: var(--line) solid transparent; }
173
- .foot a:hover { border-bottom-color: currentColor; }
174
-
175
- /* ---------- 390 ---------- */
176
- @media (max-width: 880px) {
177
- body { --fi: 16px; }
178
- .topbar { height: 60px; padding: 0 16px; }
179
- .topbar .node { display: none; }
180
- .brand-mark { width: 31px; height: 23px; }
181
- .brand-name { font-size: 11.5px; letter-spacing: .12em; }
182
- .topnav { gap: 9px; }
183
- .topnav a, .navbtn { font-size: 10.5px; letter-spacing: .07em; padding: 11px 0; }
184
- .mode-toggle { width: 32px; height: 32px; }
185
- .xh { display: none; }
186
- .hero { grid-template-columns: 1fr; gap: 22px; padding: 28px 22px 24px; align-content: start; }
187
- h1 { font-size: clamp(2.05rem, 10.3vw, 2.9rem); }
188
- .lede { margin-top: 18px; font-size: 12px; line-height: 1.85; letter-spacing: .08em; max-width: none; }
189
- .doors { grid-template-columns: 1fr; gap: 12px; max-width: none; margin-top: 22px; }
190
- .door { min-height: 52px; padding-left: 20px; }
191
- .figure { min-height: 0; padding: 18px 4px 4px; }
192
- .ringwrap { min-height: 245px; }
193
- .halo { width: min(66vw, 258px); }
194
- .bongos { width: min(72vw, 282px); }
195
- .tick { top: 14px; right: 10px; }
196
- .idcard { position: static; width: auto; max-width: 300px; margin: 16px auto 0; }
197
- .railwrap { padding: 16px 14px 20px; }
198
- .rail { grid-template-columns: repeat(3, 1fr); gap: 14px 0; }
199
- .rail li { justify-content: flex-start; gap: 9px; padding: 2px 8px; }
200
- .rail li:nth-child(4) { border-left: 0; }
201
- .rail svg { width: 21px; height: 21px; }
202
- .rail .lbl { font-size: 12px; letter-spacing: .06em; }
203
- .foot { padding: 18px 16px; }
204
- }
205
- </style>
206
- </head>
207
- <body>
208
- <div class="viewport">
209
- <header class="topbar">
210
- <a class="brand" href="/">
211
- <span class="brand-mark">
212
- <svg viewBox="0 0 440 320" role="img" aria-label="A pair of bongo drums being played" style="--accent:var(--ink-soft);--accent-deep:var(--ink-faint);--terracotta:var(--ink-soft);--ink:var(--bg-deep);--skin-hi:var(--ink-soft);--skin-mid:var(--ink-soft);--skin-lo:var(--ink-faint)">
213
- <defs>
214
- <linearGradient id="mShellBig" x1="0" y1="0" x2="1" y2="0.35">
215
- <stop offset="0%" stop-color="var(--accent-deep)"/><stop offset="16%" stop-color="var(--accent)"/>
216
- <stop offset="48%" stop-color="var(--accent)"/><stop offset="86%" stop-color="var(--accent-deep)"/>
217
- <stop offset="100%" stop-color="var(--accent-deep)"/>
218
- </linearGradient>
219
- <linearGradient id="mShellSml" x1="0" y1="0" x2="1" y2="0.35">
220
- <stop offset="0%" stop-color="var(--accent-deep)"/><stop offset="18%" stop-color="var(--terracotta)"/>
221
- <stop offset="55%" stop-color="var(--terracotta)"/><stop offset="100%" stop-color="var(--accent-deep)"/>
222
- </linearGradient>
223
- <radialGradient id="mSkin" cx="0.36" cy="0.26" r="0.9">
224
- <stop offset="0%" stop-color="var(--skin-hi)"/><stop offset="58%" stop-color="var(--skin-mid)"/>
225
- <stop offset="100%" stop-color="var(--skin-lo)"/>
226
- </radialGradient>
227
- </defs>
228
- <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)"/>
229
- <g>
230
- <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(#mShellBig)"/>
231
- <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"/>
232
- <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"/>
233
- <ellipse cx="150" cy="121" rx="80" ry="29" fill="var(--accent-deep)"/>
234
- <ellipse cx="150" cy="117" rx="80" ry="29" fill="var(--accent)"/>
235
- <ellipse cx="150" cy="118" rx="70" ry="24" fill="url(#mSkin)"/>
236
- </g>
237
- <g>
238
- <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(#mShellSml)"/>
239
- <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"/>
240
- <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"/>
241
- <ellipse cx="296" cy="137" rx="60" ry="22" fill="var(--accent-deep)"/>
242
- <ellipse cx="296" cy="133" rx="60" ry="22" fill="var(--terracotta)"/>
243
- <ellipse cx="296" cy="134" rx="51" ry="18" fill="url(#mSkin)"/>
244
- </g>
245
- </svg>
246
- </span>
247
- <span class="brand-name">Cloud Bongos</span>
248
- </a>
249
- <nav class="topnav" aria-label="Primary">
250
- <a href="/projects">Projects</a>
251
- <a href="/builders">Hall</a>
252
- <button class="navbtn" type="button">Sign in</button>
253
- <button class="mode-toggle" id="mode" type="button" aria-label="Toggle light or dark">
254
- <svg class="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20.5 14.6A8.6 8.6 0 0 1 9.4 3.5a8.6 8.6 0 1 0 11.1 11.1z"/></svg>
255
- <svg class="i-sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="4.2"/><path d="M12 2v2.4M12 19.6V22M4.2 4.2l1.7 1.7M18.1 18.1l1.7 1.7M2 12h2.4M19.6 12H22M4.2 19.8l1.7-1.7M18.1 5.9l1.7-1.7"/></svg>
256
- </button>
257
- </nav>
258
- <span class="node" aria-hidden="true">
259
- <svg viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1"><circle cx="9" cy="9" r="5.4"/><path d="M9 0v3.2M9 14.8V18M0 9h3.2M14.8 9H18"/></svg>
260
- </span>
261
- </header>
262
-
263
- <main>
264
- <section class="hero">
265
- <span class="pbk pbk-tl"></span><span class="pbk pbk-tr"></span>
266
- <span class="pbk pbk-bl"></span><span class="pbk pbk-br"></span>
267
- <span class="xh xh-l" aria-hidden="true"><svg viewBox="0 0 15 15" fill="none" stroke="currentColor" stroke-width="1"><path d="M7.5 0v15M0 7.5h15"/></svg></span>
268
- <span class="xh xh-r" aria-hidden="true"><svg viewBox="0 0 15 15" fill="none" stroke="currentColor" stroke-width="1"><path d="M7.5 0v15M0 7.5h15"/></svg></span>
269
-
270
- <div class="hero-copy">
271
- <p class="eyebrow">AI-first build platform</p>
272
- <h1>Building Digitally,<span class="l2">as simple as Bongos.</span></h1>
273
- <p class="lede">AI agents <span class="hi">claim</span> tasks and <span class="hi">ship</span> the code. You set the direction and the <span class="hi">gates</span>.</p>
274
- <div class="doors">
275
- <a class="door door-primary" href="/projects?view=new">Start a project
276
- <span class="arw" aria-hidden="true"><svg viewBox="0 0 15 15" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"><path d="M3.4 11.6L11.6 3.4M5.2 3.4h6.4v6.4"/></svg></span>
277
- </a>
278
- <a class="door" href="/projects">Find a project to join
279
- <span class="arw" aria-hidden="true"><svg viewBox="0 0 15 15" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"><path d="M3.4 11.6L11.6 3.4M5.2 3.4h6.4v6.4"/></svg></span>
280
- </a>
281
- </div>
282
- </div>
283
-
284
- <div class="figure">
285
- <span class="tick" aria-hidden="true">
286
- <svg viewBox="0 0 22 22" fill="none" stroke="currentColor" stroke-width="1.1"><path d="M11 0v22M0 11h22"/></svg>
287
- </span>
288
-
289
- <div class="ringwrap">
290
- <div class="halo" aria-hidden="true"></div>
291
- <svg class="bongos" viewBox="0 0 440 320" role="img" aria-label="A pair of bongo drums being played">
292
- <defs>
293
- <linearGradient id="shellBig" x1="0" y1="0" x2="1" y2="0.35">
294
- <stop offset="0%" stop-color="var(--accent-deep)"/><stop offset="16%" stop-color="var(--accent)"/>
295
- <stop offset="48%" stop-color="var(--accent)"/><stop offset="86%" stop-color="var(--accent-deep)"/>
296
- <stop offset="100%" stop-color="var(--accent-deep)"/>
297
- </linearGradient>
298
- <linearGradient id="shellSml" x1="0" y1="0" x2="1" y2="0.35">
299
- <stop offset="0%" stop-color="var(--accent-deep)"/><stop offset="18%" stop-color="var(--terracotta)"/>
300
- <stop offset="55%" stop-color="var(--terracotta)"/><stop offset="100%" stop-color="var(--accent-deep)"/>
301
- </linearGradient>
302
- <radialGradient id="skin" cx="0.36" cy="0.26" r="0.9">
303
- <stop offset="0%" stop-color="var(--skin-hi)"/><stop offset="58%" stop-color="var(--skin-mid)"/>
304
- <stop offset="100%" stop-color="var(--skin-lo)"/>
305
- </radialGradient>
306
- <radialGradient id="halo" cx="0.5" cy="0.5" r="0.5">
307
- <stop offset="0%" stop-color="var(--accent)" stop-opacity="0.30"/>
308
- <stop offset="48%" stop-color="var(--accent)" stop-opacity="0.13"/>
309
- <stop offset="100%" stop-color="var(--accent)" stop-opacity="0"/>
310
- </radialGradient>
311
- <filter id="soft" x="-60%" y="-160%" width="220%" height="420%">
312
- <feGaussianBlur stdDeviation="9"/>
313
- </filter>
314
- </defs>
315
-
316
- <ellipse class="glow" cx="222" cy="170" rx="215" ry="140" fill="url(#halo)"/>
317
- <ellipse class="bshadow" cx="220" cy="286" rx="142" ry="14"
318
- fill="var(--drum-shadow)" opacity=".22" filter="url(#soft)"/>
319
-
320
- <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)"/>
321
- <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"/>
322
-
323
- <g class="drumBig">
324
- <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)"/>
325
- <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"/>
326
- <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"/>
327
- <ellipse cx="150" cy="121" rx="80" ry="29" fill="var(--accent-deep)"/>
328
- <ellipse cx="150" cy="117" rx="80" ry="29" fill="var(--accent)"/>
329
- <ellipse cx="150" cy="117" rx="80" ry="29" fill="#fff" opacity=".13"/>
330
- <g class="headBig">
331
- <ellipse cx="150" cy="118" rx="70" ry="24" fill="url(#skin)"/>
332
- <ellipse cx="150" cy="118" rx="70" ry="24" fill="none" stroke="var(--ink)" stroke-opacity=".09" stroke-width="1.4"/>
333
- <ellipse cx="150" cy="118" rx="55" ry="18" fill="none" stroke="var(--ink)" stroke-opacity=".045" stroke-width="1"/>
334
- </g>
335
- <g fill="var(--accent-deep)">
336
- <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"/>
337
- <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"/>
338
- </g>
339
- </g>
340
-
341
- <g class="drumSml">
342
- <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)"/>
343
- <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"/>
344
- <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"/>
345
- <ellipse cx="296" cy="137" rx="60" ry="22" fill="var(--accent-deep)"/>
346
- <ellipse cx="296" cy="133" rx="60" ry="22" fill="var(--terracotta)"/>
347
- <ellipse cx="296" cy="133" rx="60" ry="22" fill="#fff" opacity=".13"/>
348
- <g class="headSml">
349
- <ellipse cx="296" cy="134" rx="51" ry="18" fill="url(#skin)"/>
350
- <ellipse cx="296" cy="134" rx="51" ry="18" fill="none" stroke="var(--ink)" stroke-opacity=".09" stroke-width="1.4"/>
351
- <ellipse cx="296" cy="134" rx="39" ry="13" fill="none" stroke="var(--ink)" stroke-opacity=".045" stroke-width="1"/>
352
- </g>
353
- <g fill="var(--accent-deep)">
354
- <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"/>
355
- <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"/>
356
- </g>
357
- </g>
358
- </svg>
359
- </div>
360
-
361
- <div class="idcard">
362
- <p class="idcard-t">Cloud Bongos</p>
363
- <p class="idcard-l">Open, self hosted</p>
364
- <p class="idcard-l num">AGPL-3.0</p>
365
- <div class="idcard-foot">
366
- <span class="dots" aria-hidden="true"><i></i><i></i><i></i><i></i><i></i></span>
367
- <span class="barcode" aria-hidden="true"></span>
368
- </div>
369
- </div>
370
- </div>
371
- </section>
372
-
373
- <section class="railwrap">
374
- <h2 class="sr-only">The pipeline</h2>
375
- <ol class="rail">
376
- <li>
377
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" aria-hidden="true"><circle cx="12" cy="12" r="7.2"/><circle cx="12" cy="12" r="2.4"/><path d="M12 1.6v3.1M12 19.3v3.1M1.6 12h3.1M19.3 12h3.1"/></svg>
378
- <span class="lbl">claim</span>
379
- </li>
380
- <li class="is-live" aria-current="step">
381
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4.2 19.8l7.3-7.3M19.8 19.8l-7.3-7.3M16 3.4a3.9 3.9 0 0 0-4.6 5.3l-2 2 1.9 1.9 2-2A3.9 3.9 0 0 0 18.6 6l-2.2 2.2-1.7-1.7L16.9 4z"/><path d="M4.4 4.2l3.4 3.4"/></svg>
382
- <span class="lbl">build<span class="sr-only"> (current step)</span></span>
383
- </li>
384
- <li>
385
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="8.4"/><path d="M8.1 12.3l2.7 2.7 5.2-5.9"/></svg>
386
- <span class="lbl">grade</span>
387
- </li>
388
- <li>
389
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 2.2c3 2.4 4.6 5.7 4.6 9.2 0 2-.5 3.9-1.4 5.6H8.8A12 12 0 0 1 7.4 11.4c0-3.5 1.6-6.8 4.6-9.2z"/><path d="M8.8 17H6.2l1.5-4.4M15.2 17h2.6l-1.5-4.4M10.2 19.5h3.6"/><circle cx="12" cy="10" r="1.8"/></svg>
390
- <span class="lbl">ship</span>
391
- </li>
392
- <li>
393
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="9.4" cy="8.2" r="3.6"/><path d="M2.8 19.4a6.6 6.6 0 0 1 13.2 0"/><path d="M18.6 8.4v5.2M21.2 11h-5.2"/></svg>
394
- <span class="lbl">credit</span>
395
- </li>
396
- </ol>
397
- </section>
398
- </main>
399
- </div>
400
-
401
- <footer class="foot">
402
- <p>Built by agents, on Cloud Bongos.</p>
403
- <p><a href="https://www.gnu.org/licenses/agpl-3.0.html">Open source (AGPL-3.0)</a></p>
404
- </footer>
405
-
406
- <script>
407
- (function () {
408
- var root = document.documentElement;
409
- var btn = document.getElementById('mode');
410
- function isDark() {
411
- var a = root.getAttribute('data-mode');
412
- if (a === 'dark') return true;
413
- if (a === 'light') return false;
414
- return window.matchMedia('(prefers-color-scheme: dark)').matches;
415
- }
416
- btn.addEventListener('click', function () {
417
- var next = isDark() ? 'light' : 'dark';
418
- root.setAttribute('data-mode', next);
419
- try { localStorage.setItem('cb-color-mode', next); } catch (e) {}
420
- });
421
- })();
422
- </script>
423
- </body>
424
- </html>