@bongos/core 1.19.726 → 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 (226) hide show
  1. package/.bongos-core.json +176 -491
  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 +2 -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/gen-diagrams.js +1 -1
  64. package/scripts/gds/leak-scan-allowlist.js +293 -0
  65. package/scripts/gds/learning-capture.js +1 -1
  66. package/scripts/gds/linkify-refs.js +2 -2
  67. package/scripts/gds/local-preview-lib.js +1 -1
  68. package/scripts/gds/mirror-lineage-check.js +1 -1
  69. package/scripts/gds/mirror-redact.js +17 -2
  70. package/scripts/gds/newcomer-floor.templates.json +1 -1
  71. package/scripts/gds/package-core.js +18 -1
  72. package/scripts/gds/paste-token.js +1 -1
  73. package/scripts/gds/provision-units.js +2 -2
  74. package/scripts/gds/publish-manifest.js +15 -0
  75. package/scripts/gds/repo-metrics.js +1 -1
  76. package/scripts/gds/sandbox-stage.js +1 -1
  77. package/scripts/gds/seed-bongos-coreB-tranche1-tasks.js +1 -1
  78. package/scripts/gds/seed-bongos-coreB-tranche2-tasks.js +1 -1
  79. package/scripts/gds/seed-bongos-goal-hierarchy-tasks.js +1 -1
  80. package/scripts/gds/seed-bongos-tasks.js +2 -2
  81. package/scripts/gds/seed-gds-v4-tasks.js +1 -1
  82. package/scripts/gds/seed-medusa-tasks.js +10 -10
  83. package/scripts/gds/seed-module-upstreaming.js +1 -1
  84. package/scripts/gds/seed-productization-tasks.js +6 -6
  85. package/scripts/gds/seed-provisioning-tasks.js +2 -2
  86. package/scripts/gds/seed-staging.sh +19 -6
  87. package/scripts/gds/ship-deploy-target.js +1 -1
  88. package/scripts/gds/ship-flow.js +1 -1
  89. package/scripts/gds/smoke-gds.js +1 -1
  90. package/scripts/status-probe.mjs +2 -2
  91. package/src/bongos/auth-discord.js +2 -2
  92. package/src/bongos/live-channel.js +1 -1
  93. package/src/bongos/pool.js +1 -1
  94. package/src/bongos/routes/auth.js +11 -11
  95. package/src/bongos/routes/security.js +1 -1
  96. package/src/bongos/routes.js +1 -1
  97. package/src/branding.js +1 -1
  98. package/src/devbox-downloads.js +1 -1
  99. package/src/instance-config.js +2 -2
  100. package/src/module-api.js +1 -1
  101. package/src/module-loader/provenance.js +2 -2
  102. package/tests/art_stage.mjs +2 -2
  103. package/tests/auth_anthropic_identity.mjs +1 -1
  104. package/tests/auth_duplicate_cookie.mjs +1 -1
  105. package/tests/auth_error_brand.mjs +1 -1
  106. package/tests/auth_inactive_builder.mjs +1 -1
  107. package/tests/backup_cli.mjs +4 -4
  108. package/tests/bongos_box_connect.mjs +2 -2
  109. package/tests/bongos_downloads.mjs +2 -2
  110. package/tests/bongos_login.mjs +5 -5
  111. package/tests/box_connect_e2e.mjs +2 -2
  112. package/tests/box_dns_repoint.mjs +10 -10
  113. package/tests/box_host_keys.mjs +1 -1
  114. package/tests/box_onboard.mjs +9 -9
  115. package/tests/box_scope_session.mjs +1 -1
  116. package/tests/box_terminal_ssrf.mjs +7 -7
  117. package/tests/boxes.mjs +9 -9
  118. package/tests/branding.mjs +2 -2
  119. package/tests/bump_version.mjs +2 -2
  120. package/tests/cf_tunnel.mjs +40 -40
  121. package/tests/cli_token_reissue.mjs +7 -7
  122. package/tests/cloud_bongos_pack.mjs +1 -1
  123. package/tests/currency_label.mjs +8 -8
  124. package/tests/dev_lib.mjs +4 -4
  125. package/tests/devbox_dmg_backdrop.mjs +1 -1
  126. package/tests/devbox_downloads.mjs +2 -2
  127. package/tests/devbox_icons.mjs +1 -1
  128. package/tests/discord_approvals.mjs +1 -1
  129. package/tests/discord_oauth.mjs +2 -2
  130. package/tests/executed_closure.mjs +6 -1
  131. package/tests/first_admin_bootstrap.mjs +1 -1
  132. package/tests/gate_approvals.mjs +5 -5
  133. package/tests/grade_aggregates_unavailable.mjs +1 -1
  134. package/tests/hook_user_agents.mjs +2 -2
  135. package/tests/init.mjs +6 -6
  136. package/tests/instance_config.mjs +1 -1
  137. package/tests/instance_manifest.mjs +5 -5
  138. package/tests/instance_mismatch_guard.mjs +13 -13
  139. package/tests/leak_scan_allowlist.mjs +94 -0
  140. package/tests/migrate_root_resolution.mjs +4 -4
  141. package/tests/mirror_redact.mjs +28 -4
  142. package/tests/module_catalog.mjs +5 -5
  143. package/tests/module_submissions.mjs +3 -3
  144. package/tests/package_core.mjs +1 -1
  145. package/tests/parallel-load.mjs +6 -6
  146. package/tests/projects_hub.mjs +2 -2
  147. package/tests/provision.mjs +50 -50
  148. package/tests/provisioning_github_app_routes.mjs +1 -1
  149. package/tests/provisioning_onboard_mode.mjs +2 -2
  150. package/tests/publish_reconciler.mjs +4 -4
  151. package/tests/sandbox_stage.mjs +1 -1
  152. package/tests/scrubber_corpus.mjs +3 -3
  153. package/tests/search_isolation.mjs +1 -1
  154. package/tests/session_records.mjs +1 -1
  155. package/tests/ship_card.mjs +6 -6
  156. package/tests/ship_ci_deploy.mjs +1 -1
  157. package/tests/single_host_hall.mjs +9 -9
  158. package/tests/smoke_preflight.mjs +1 -1
  159. package/tests/smoke_target.mjs +1 -1
  160. package/tests/status-probe.mjs +1 -1
  161. package/tests/status_mirror_sync.mjs +1 -1
  162. package/docs/adr/0004-amazonprimea-name-and-trademark-acceptance.md +0 -45
  163. package/docs/design/mocks/_schemes.css +0 -604
  164. package/docs/design/mocks/component-sheet.html +0 -428
  165. package/docs/design/mocks/hall/_tokens.css +0 -370
  166. package/docs/design/mocks/hall/board/v1.html +0 -846
  167. package/docs/design/mocks/hall/board/v2.html +0 -858
  168. package/docs/design/mocks/hall/board/v3.html +0 -884
  169. package/docs/design/mocks/hall/goals/v1.html +0 -1212
  170. package/docs/design/mocks/hall/goals/v2.html +0 -1192
  171. package/docs/design/mocks/hall/goals/v3.html +0 -1205
  172. package/docs/design/mocks/hall/hall-sheet.html +0 -244
  173. package/docs/design/mocks/hall/reading/v1.html +0 -1125
  174. package/docs/design/mocks/hall/reading/v2.html +0 -1177
  175. package/docs/design/mocks/hall/reading/v3.html +0 -1150
  176. package/docs/design/mocks/hall/settings/v1.html +0 -1238
  177. package/docs/design/mocks/hall/settings/v2.html +0 -1235
  178. package/docs/design/mocks/hall/settings/v3.html +0 -1299
  179. package/docs/design/mocks/hall/task/v1.html +0 -633
  180. package/docs/design/mocks/hall/task/v2.html +0 -646
  181. package/docs/design/mocks/hall/task/v3.html +0 -647
  182. package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg +0 -0
  183. package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg.json +0 -13
  184. package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg +0 -0
  185. package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg.json +0 -13
  186. package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg +0 -0
  187. package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg.json +0 -13
  188. package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg +0 -0
  189. package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg.json +0 -13
  190. package/docs/design/mocks/hub/hub-sheet.html +0 -192
  191. package/docs/design/mocks/hub/mine.html +0 -465
  192. package/docs/design/mocks/hub/picker.html +0 -421
  193. package/docs/design/mocks/hub/planets.html +0 -356
  194. package/docs/design/mocks/hub/v1.html +0 -1209
  195. package/docs/design/mocks/hub/v2.html +0 -1257
  196. package/docs/design/mocks/hub/v3.html +0 -1496
  197. package/docs/design/mocks/hub/wizard.html +0 -421
  198. package/docs/design/mocks/landing/landing-sheet.html +0 -131
  199. package/docs/design/mocks/landing/v1.html +0 -956
  200. package/docs/design/mocks/landing/v2.html +0 -708
  201. package/docs/design/mocks/landing/v3.html +0 -911
  202. package/docs/design/mocks/landing-page-mock.html +0 -687
  203. package/docs/design/mocks/landing-palettes.html +0 -103
  204. package/docs/design/mocks/projects-hub-mock.html +0 -991
  205. package/docs/design/mocks/projects-hub-variants.html +0 -146
  206. package/docs/design/mocks/projects-page-mock.html +0 -167
  207. package/docs/design/mocks/world/blue-hud/_tokens.css +0 -246
  208. package/docs/design/mocks/world/blue-hud/hall.html +0 -595
  209. package/docs/design/mocks/world/blue-hud/landing.html +0 -424
  210. package/docs/design/mocks/world/blue-hud/status.html +0 -410
  211. package/docs/design/mocks/world/chrome-blobs/_tokens.css +0 -479
  212. package/docs/design/mocks/world/chrome-blobs/hall.html +0 -553
  213. package/docs/design/mocks/world/chrome-blobs/landing-b.html +0 -581
  214. package/docs/design/mocks/world/chrome-blobs/landing.html +0 -328
  215. package/docs/design/mocks/world/chrome-blobs/status.html +0 -416
  216. package/docs/design/mocks/world/natgeo-editorial/_tokens.css +0 -377
  217. package/docs/design/mocks/world/natgeo-editorial/hall.html +0 -649
  218. package/docs/design/mocks/world/natgeo-editorial/landing-b.html +0 -743
  219. package/docs/design/mocks/world/natgeo-editorial/landing.html +0 -475
  220. package/docs/design/mocks/world/natgeo-editorial/status.html +0 -437
  221. package/docs/design/mocks/world/organic-cards/_tokens.css +0 -462
  222. package/docs/design/mocks/world/organic-cards/hall.html +0 -625
  223. package/docs/design/mocks/world/organic-cards/landing-b.html +0 -736
  224. package/docs/design/mocks/world/organic-cards/landing.html +0 -420
  225. package/docs/design/mocks/world/organic-cards/status.html +0 -458
  226. 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>