@bongos/core 1.19.726 → 1.19.728

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 (227) hide show
  1. package/.bongos-core.json +177 -492
  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/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_package.mjs +40 -1
  122. package/tests/cli_token_reissue.mjs +7 -7
  123. package/tests/cloud_bongos_pack.mjs +1 -1
  124. package/tests/currency_label.mjs +8 -8
  125. package/tests/dev_lib.mjs +4 -4
  126. package/tests/devbox_dmg_backdrop.mjs +1 -1
  127. package/tests/devbox_downloads.mjs +2 -2
  128. package/tests/devbox_icons.mjs +1 -1
  129. package/tests/discord_approvals.mjs +1 -1
  130. package/tests/discord_oauth.mjs +2 -2
  131. package/tests/executed_closure.mjs +6 -1
  132. package/tests/first_admin_bootstrap.mjs +1 -1
  133. package/tests/gate_approvals.mjs +5 -5
  134. package/tests/grade_aggregates_unavailable.mjs +1 -1
  135. package/tests/hook_user_agents.mjs +2 -2
  136. package/tests/init.mjs +6 -6
  137. package/tests/instance_config.mjs +1 -1
  138. package/tests/instance_manifest.mjs +5 -5
  139. package/tests/instance_mismatch_guard.mjs +13 -13
  140. package/tests/leak_scan_allowlist.mjs +94 -0
  141. package/tests/migrate_root_resolution.mjs +4 -4
  142. package/tests/mirror_redact.mjs +28 -4
  143. package/tests/module_catalog.mjs +5 -5
  144. package/tests/module_submissions.mjs +3 -3
  145. package/tests/package_core.mjs +1 -1
  146. package/tests/parallel-load.mjs +6 -6
  147. package/tests/projects_hub.mjs +2 -2
  148. package/tests/provision.mjs +50 -50
  149. package/tests/provisioning_github_app_routes.mjs +1 -1
  150. package/tests/provisioning_onboard_mode.mjs +2 -2
  151. package/tests/publish_reconciler.mjs +4 -4
  152. package/tests/sandbox_stage.mjs +1 -1
  153. package/tests/scrubber_corpus.mjs +3 -3
  154. package/tests/search_isolation.mjs +1 -1
  155. package/tests/session_records.mjs +1 -1
  156. package/tests/ship_card.mjs +6 -6
  157. package/tests/ship_ci_deploy.mjs +1 -1
  158. package/tests/single_host_hall.mjs +9 -9
  159. package/tests/smoke_preflight.mjs +1 -1
  160. package/tests/smoke_target.mjs +1 -1
  161. package/tests/status-probe.mjs +1 -1
  162. package/tests/status_mirror_sync.mjs +1 -1
  163. package/docs/adr/0004-amazonprimea-name-and-trademark-acceptance.md +0 -45
  164. package/docs/design/mocks/_schemes.css +0 -604
  165. package/docs/design/mocks/component-sheet.html +0 -428
  166. package/docs/design/mocks/hall/_tokens.css +0 -370
  167. package/docs/design/mocks/hall/board/v1.html +0 -846
  168. package/docs/design/mocks/hall/board/v2.html +0 -858
  169. package/docs/design/mocks/hall/board/v3.html +0 -884
  170. package/docs/design/mocks/hall/goals/v1.html +0 -1212
  171. package/docs/design/mocks/hall/goals/v2.html +0 -1192
  172. package/docs/design/mocks/hall/goals/v3.html +0 -1205
  173. package/docs/design/mocks/hall/hall-sheet.html +0 -244
  174. package/docs/design/mocks/hall/reading/v1.html +0 -1125
  175. package/docs/design/mocks/hall/reading/v2.html +0 -1177
  176. package/docs/design/mocks/hall/reading/v3.html +0 -1150
  177. package/docs/design/mocks/hall/settings/v1.html +0 -1238
  178. package/docs/design/mocks/hall/settings/v2.html +0 -1235
  179. package/docs/design/mocks/hall/settings/v3.html +0 -1299
  180. package/docs/design/mocks/hall/task/v1.html +0 -633
  181. package/docs/design/mocks/hall/task/v2.html +0 -646
  182. package/docs/design/mocks/hall/task/v3.html +0 -647
  183. package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg +0 -0
  184. package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg.json +0 -13
  185. package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg +0 -0
  186. package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg.json +0 -13
  187. package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg +0 -0
  188. package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg.json +0 -13
  189. package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg +0 -0
  190. package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg.json +0 -13
  191. package/docs/design/mocks/hub/hub-sheet.html +0 -192
  192. package/docs/design/mocks/hub/mine.html +0 -465
  193. package/docs/design/mocks/hub/picker.html +0 -421
  194. package/docs/design/mocks/hub/planets.html +0 -356
  195. package/docs/design/mocks/hub/v1.html +0 -1209
  196. package/docs/design/mocks/hub/v2.html +0 -1257
  197. package/docs/design/mocks/hub/v3.html +0 -1496
  198. package/docs/design/mocks/hub/wizard.html +0 -421
  199. package/docs/design/mocks/landing/landing-sheet.html +0 -131
  200. package/docs/design/mocks/landing/v1.html +0 -956
  201. package/docs/design/mocks/landing/v2.html +0 -708
  202. package/docs/design/mocks/landing/v3.html +0 -911
  203. package/docs/design/mocks/landing-page-mock.html +0 -687
  204. package/docs/design/mocks/landing-palettes.html +0 -103
  205. package/docs/design/mocks/projects-hub-mock.html +0 -991
  206. package/docs/design/mocks/projects-hub-variants.html +0 -146
  207. package/docs/design/mocks/projects-page-mock.html +0 -167
  208. package/docs/design/mocks/world/blue-hud/_tokens.css +0 -246
  209. package/docs/design/mocks/world/blue-hud/hall.html +0 -595
  210. package/docs/design/mocks/world/blue-hud/landing.html +0 -424
  211. package/docs/design/mocks/world/blue-hud/status.html +0 -410
  212. package/docs/design/mocks/world/chrome-blobs/_tokens.css +0 -479
  213. package/docs/design/mocks/world/chrome-blobs/hall.html +0 -553
  214. package/docs/design/mocks/world/chrome-blobs/landing-b.html +0 -581
  215. package/docs/design/mocks/world/chrome-blobs/landing.html +0 -328
  216. package/docs/design/mocks/world/chrome-blobs/status.html +0 -416
  217. package/docs/design/mocks/world/natgeo-editorial/_tokens.css +0 -377
  218. package/docs/design/mocks/world/natgeo-editorial/hall.html +0 -649
  219. package/docs/design/mocks/world/natgeo-editorial/landing-b.html +0 -743
  220. package/docs/design/mocks/world/natgeo-editorial/landing.html +0 -475
  221. package/docs/design/mocks/world/natgeo-editorial/status.html +0 -437
  222. package/docs/design/mocks/world/organic-cards/_tokens.css +0 -462
  223. package/docs/design/mocks/world/organic-cards/hall.html +0 -625
  224. package/docs/design/mocks/world/organic-cards/landing-b.html +0 -736
  225. package/docs/design/mocks/world/organic-cards/landing.html +0 -420
  226. package/docs/design/mocks/world/organic-cards/status.html +0 -458
  227. 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>