@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,475 +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=Archivo:wght@300;400;500;600;700&display=swap">
13
- <link rel="stylesheet" href="_tokens.css">
14
- <style>
15
- *{box-sizing:border-box}
16
- html,body{margin:0;padding:0}
17
- body{
18
- background:var(--bg); color:var(--ink);
19
- font-family:var(--font-body); font-weight:400;
20
- font-variant-numeric:tabular-nums;
21
- -webkit-font-smoothing:antialiased;
22
- min-height:100dvh; display:flex; flex-direction:column;
23
- --pl:21%; /* the editorial margin: the page's one vertical rule sits on it */
24
- --pr:4%;
25
- --gut:clamp(168px, 14vw, 212px);
26
- }
27
- ::selection{background:var(--sel-bg); color:var(--sel-ink)}
28
- a{color:inherit}
29
- :focus-visible{outline:none; box-shadow:0 0 0 2px var(--bg), 0 0 0 4px var(--focus)}
30
- .vh{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
31
-
32
- /* the one vertical rule, running the whole page behind everything */
33
- .rule-v{position:fixed;z-index:0;left:var(--pl);top:0;bottom:0;width:1px;background:var(--grid-line);pointer-events:none}
34
-
35
- /* ---------- top bar ---------- */
36
- .topbar{
37
- position:relative; z-index:2; flex:0 0 auto;
38
- height:88px; display:flex; align-items:center; justify-content:space-between;
39
- background:var(--bg); border-bottom:var(--line) solid var(--rule);
40
- padding:0 var(--pr) 0 var(--pl);
41
- }
42
- .brand{display:flex;align-items:center;gap:14px;text-decoration:none}
43
- .mark-plate{
44
- width:32px;height:40px;flex:0 0 32px;
45
- display:grid;place-items:center;border-radius:var(--radius);
46
- box-shadow:inset 0 0 0 1.5px var(--mark-bg);
47
- }
48
- .mark-plate svg{width:24px;height:16px;display:block}
49
- .mark-plate .ring,.mark-plate .glow,.mark-plate .bshadow{display:none}
50
- .wordmark{
51
- font-size:.9375rem;font-weight:500;line-height:1.16;letter-spacing:-.004em;
52
- color:var(--ink);white-space:nowrap;
53
- }
54
- .topnav{display:flex;align-items:center;gap:30px}
55
- .topnav a{
56
- text-decoration:none;color:var(--ink);font-size:.9375rem;font-weight:400;
57
- padding:6px 2px;border-radius:var(--radius);
58
- }
59
- .topnav a:hover{color:var(--ink-soft)}
60
- .mode-toggle{
61
- width:54px;height:28px;border:0;cursor:pointer;
62
- background:transparent;color:var(--ink-soft);
63
- border-radius:var(--radius-pill); display:grid; place-items:center;
64
- box-shadow:inset 0 0 0 var(--line) var(--rule);
65
- }
66
- .mode-toggle:hover{color:var(--ink)}
67
- .mode-toggle svg{width:16px;height:16px;display:block}
68
- .mode-toggle .i-moon{display:var(--moon-display)}
69
- .mode-toggle .i-sun{display:var(--sun-display)}
70
- .chip{
71
- border:0;background:none;cursor:pointer;color:var(--ink);white-space:nowrap;
72
- font:inherit;font-size:.9375rem;padding:6px 2px;border-radius:var(--radius);
73
- }
74
- .chip:hover{color:var(--ink-soft)}
75
-
76
- /* ---------- hero ---------- */
77
- main{flex:1 1 auto;display:flex;flex-direction:column;position:relative;z-index:1}
78
- .hero{
79
- position:relative; overflow:hidden; isolation:isolate; background:var(--bg);
80
- flex:1 1 auto;
81
- min-height:calc(100dvh - 88px - 96px);
82
- display:flex; flex-direction:column; justify-content:center;
83
- padding:44px var(--pr) 44px var(--pl);
84
- }
85
- /* the limb: the plate bleeds past the container on every side so its border never shows */
86
- .limb{
87
- position:absolute;z-index:0;pointer-events:none;
88
- left:-9%;right:-9%;top:-16%;height:122%;
89
- background-image:var(--limb-plate);
90
- background-repeat:no-repeat;background-size:cover;background-position:52% 26%;
91
- mix-blend-mode:var(--limb-blend);
92
- filter:var(--limb-filter);
93
- opacity:var(--limb-op);
94
- -webkit-mask-image:linear-gradient(to bottom,#000 0 40%,rgba(0,0,0,.5) 68%,transparent 88%);
95
- mask-image:linear-gradient(to bottom,#000 0 40%,rgba(0,0,0,.5) 68%,transparent 88%);
96
- }
97
- /* the halftone screen sits over the ground and over the photograph alike */
98
- .screen{
99
- position:absolute;inset:0;z-index:1;pointer-events:none;
100
- background-image:radial-gradient(circle, var(--dots) var(--dot-r), transparent calc(var(--dot-r) + .4px));
101
- background-size:var(--dot-pitch) var(--dot-pitch);
102
- }
103
- .rule-r{position:absolute;z-index:1;top:0;bottom:0;right:var(--pr);width:1px;background:var(--grid-line)}
104
-
105
- .stage{
106
- position:relative;z-index:2;
107
- display:grid;grid-template-columns:minmax(0,1fr) var(--gut) minmax(0,1fr);
108
- align-items:start;row-gap:56px;
109
- }
110
- .headline{
111
- grid-area:1 / 1 / 2 / -1;margin:0;
112
- display:grid;grid-template-columns:minmax(0,1fr) var(--gut) minmax(0,1fr);
113
- font-family:var(--font-display);font-weight:700;
114
- font-size:clamp(2.35rem, 5.6vw, 5.05rem);
115
- line-height:.98;letter-spacing:-.032em;color:var(--ink);
116
- }
117
- .hl{grid-column:1;text-align:right;white-space:nowrap}
118
- .hr{grid-column:3;text-align:left;white-space:nowrap}
119
- .lede{
120
- grid-area:1 / 2 / 2 / 3;position:relative;
121
- margin:.36em 0 0;padding:2px 16px 0 20px;
122
- color:var(--lede-ink);font-size:1rem;line-height:1.44;
123
- }
124
- .lede::before{
125
- content:'';position:absolute;left:0;top:0;bottom:0;width:1px;
126
- background:linear-gradient(to bottom, var(--ink-faint) 0 46%, transparent 100%);
127
- }
128
- .doors{grid-area:2 / 1 / 3 / -1;display:flex;gap:44px;flex-wrap:wrap;align-items:center}
129
- .door{
130
- display:inline-flex;align-items:center;gap:16px;
131
- text-decoration:none;color:var(--ink);cursor:pointer;
132
- border-radius:var(--radius-pill);
133
- }
134
- .disc{
135
- width:58px;height:58px;flex:0 0 58px;border-radius:var(--radius-pill);
136
- display:grid;place-items:center;
137
- transition:background-color .2s cubic-bezier(.16,1,.3,1), color .2s cubic-bezier(.16,1,.3,1);
138
- }
139
- .disc svg{width:20px;height:20px;display:block}
140
- .door-primary .disc{background:var(--accent);color:var(--ink-on-accent)}
141
- .door-primary:hover .disc{background:#ffdf52}
142
- .door-secondary .disc{box-shadow:inset 0 0 0 1.5px var(--ink);color:var(--ink)}
143
- .door-secondary:hover .disc{background:var(--ink);color:var(--bg)}
144
- .dl{font-size:1.0625rem;font-weight:600;letter-spacing:.002em;white-space:nowrap}
145
-
146
- /* ---------- pipeline rail ---------- */
147
- .rail{
148
- flex:0 0 auto;position:relative;z-index:1;background:var(--bg);
149
- border-top:var(--line) solid var(--rule);
150
- padding:28px var(--pr) 32px 6%;
151
- }
152
- .rail ol{
153
- list-style:none;margin:0;padding:0;
154
- display:flex;justify-content:space-between;align-items:center;gap:12px;
155
- }
156
- .rail li{
157
- position:relative;
158
- font-size:.75rem;font-weight:500;letter-spacing:.19em;text-transform:uppercase;
159
- color:var(--ink-faint);
160
- }
161
- .rail li.on{color:var(--ink);font-weight:700}
162
- .dot{
163
- position:absolute;left:50%;bottom:-19px;
164
- width:7px;height:7px;border-radius:50%;background:var(--accent);
165
- transform:translateX(-50%);
166
- }
167
- .dot.go{animation:slide 900ms cubic-bezier(.16,1,.3,1) both}
168
- @keyframes slide{from{transform:translateX(calc(-50% + var(--dx, 0px)))}to{transform:translateX(-50%)}}
169
-
170
- /* ---------- the specimen band ---------- */
171
- .band{
172
- position:relative;overflow:hidden;isolation:isolate;background:var(--bg);
173
- border-top:var(--line) solid var(--rule);
174
- min-height:460px;
175
- padding:66px var(--pr) 70px var(--pl);
176
- }
177
- .band::before{
178
- content:'';position:absolute;inset:0;z-index:0;pointer-events:none;
179
- background-image:var(--band-hatch);
180
- }
181
- .band-line{
182
- position:relative;z-index:3;margin:0;max-width:30ch;
183
- color:var(--ink-soft);font-size:1.0625rem;line-height:1.6;
184
- }
185
- .specimen{position:absolute;z-index:1;margin:0;top:0;bottom:0;right:2%;aspect-ratio:1/1}
186
- .specimen-plate{
187
- position:absolute;inset:0;
188
- background-image:var(--bongo-plate);
189
- background-repeat:no-repeat;background-size:contain;background-position:center;
190
- mix-blend-mode:var(--bongo-blend);
191
- filter:var(--bongo-filter);
192
- opacity:var(--bongo-op);
193
- /* the plate is square; dissolve its corners so the photograph has no container edge */
194
- -webkit-mask-image:radial-gradient(closest-side at 50% 54%, #000 0 78%, transparent 100%);
195
- mask-image:radial-gradient(closest-side at 50% 54%, #000 0 78%, transparent 100%);
196
- }
197
- .callouts{position:absolute;inset:0;z-index:3;margin:0;padding:0;list-style:none}
198
- .callouts li{
199
- position:absolute;top:var(--y);right:calc(100% - var(--dx));
200
- display:flex;align-items:center;gap:0;
201
- }
202
- .co-1{--y:50%;--dx:13%;--len:104px}
203
- .co-2{--y:30%;--dx:74%;--len:380px}
204
- .co-3{--y:72%;--dx:40%;--len:224px}
205
- .co-text{display:flex;flex-direction:column;align-items:flex-end;gap:2px;padding-right:10px}
206
- .co-label{
207
- font-size:.625rem;letter-spacing:.17em;text-transform:uppercase;color:var(--ink-faint);
208
- white-space:nowrap;
209
- }
210
- .co-value{font-size:1.125rem;font-weight:600;color:var(--ink);line-height:1;white-space:nowrap}
211
- .co-line{position:relative;display:block;height:1px;width:var(--len);background:var(--ink-faint)}
212
- .co-line::after{
213
- content:'';position:absolute;right:-2px;top:-2.5px;
214
- width:6px;height:6px;border-radius:50%;background:var(--ink-soft);
215
- }
216
- .specimen figcaption{
217
- position:absolute;left:0;bottom:34px;z-index:3;
218
- font-size:.75rem;letter-spacing:.03em;color:var(--ink-faint);
219
- }
220
- .fig-list{display:none}
221
-
222
- footer{
223
- position:relative;z-index:1;background:var(--bg);
224
- border-top:var(--line) solid var(--rule);
225
- padding:26px var(--pr) 34px var(--pl);
226
- display:flex;gap:26px;flex-wrap:wrap;align-items:baseline;
227
- font-size:.8125rem;color:var(--ink-faint);
228
- }
229
- footer a{color:var(--ink-soft);text-decoration:none;border-bottom:var(--line) solid var(--rule)}
230
- footer a:hover{color:var(--ink);border-bottom-color:var(--ink)}
231
-
232
- @media (max-width:1180px){
233
- body{--pl:17%}
234
- .band{min-height:420px}
235
- .co-1{--len:70px}
236
- .co-2{--len:250px}
237
- .co-3{--len:140px}
238
- }
239
- @media (max-width:900px){
240
- body{--pl:28px;--pr:28px;--gut:0px}
241
- .rule-v{display:none}
242
- .hero{padding:40px 28px}
243
- .stage,.headline{grid-template-columns:minmax(0,1fr)}
244
- .headline{font-size:clamp(2.35rem,8.2vw,4rem)}
245
- .hl,.hr{grid-column:1;text-align:left}
246
- .lede{grid-area:auto;padding-left:18px;margin-top:26px;max-width:46ch}
247
- .doors{grid-area:auto;gap:26px}
248
- .rail{padding:24px 28px 30px}
249
- .band{padding:52px 28px 60px;min-height:0}
250
- .specimen{position:relative;right:auto;top:auto;bottom:auto;aspect-ratio:auto;height:340px;margin:28px -28px 0}
251
- .callouts{display:none}
252
- .specimen figcaption{position:static;margin-top:10px;padding-left:28px}
253
- .fig-list{
254
- display:flex;flex-wrap:wrap;gap:26px;margin:22px 0 0;padding:0;list-style:none;
255
- position:relative;z-index:3;
256
- }
257
- .fig-list div{display:flex;flex-direction:column;gap:3px}
258
- footer{padding:24px 28px 32px}
259
- }
260
- @media (max-width:640px){
261
- body{--pl:20px;--pr:20px}
262
- .topbar{height:64px;padding:0 20px}
263
- .mark-plate{width:24px;height:31px;flex-basis:24px}
264
- .mark-plate svg{width:18px;height:12px}
265
- .brand{gap:10px}
266
- .wordmark{font-size:.8125rem}
267
- .topnav{gap:12px}
268
- .topnav a,.chip{font-size:.8125rem}
269
- .mode-toggle{width:44px;height:26px}
270
- .mode-toggle svg{width:15px;height:15px}
271
- .hero{padding:30px 20px;min-height:calc(100dvh - 64px - 108px)}
272
- .stage{row-gap:34px}
273
- .lede{font-size:1rem;margin-top:22px}
274
- .doors{flex-direction:column;align-items:flex-start;gap:16px}
275
- .disc{width:48px;height:48px;flex-basis:48px}
276
- .rail{padding:20px 20px 26px}
277
- .rail ol{display:grid;grid-template-columns:repeat(3,1fr);row-gap:22px;justify-content:initial}
278
- .rail li{font-size:.6875rem;letter-spacing:.15em}
279
- .dot{bottom:-14px}
280
- .band{padding:42px 20px 50px}
281
- .specimen{height:270px;margin:24px -20px 0}
282
- .specimen figcaption{padding-left:20px}
283
- footer{padding:20px 20px 28px;gap:14px}
284
- }
285
- </style>
286
- </head>
287
- <body>
288
-
289
- <div class="rule-v" aria-hidden="true"></div>
290
-
291
- <header class="topbar">
292
- <a class="brand" href="/">
293
- <span class="mark-plate" aria-hidden="true">
294
- <svg class="bongos" viewBox="62 100 316 208" role="img" aria-label="A pair of bongo drums being played">
295
- <defs>
296
- <linearGradient id="shellBig" x1="0" y1="0" x2="1" y2="0.35">
297
- <stop offset="0%" stop-color="var(--accent-deep)"/><stop offset="16%" stop-color="var(--accent)"/>
298
- <stop offset="48%" stop-color="var(--accent)"/><stop offset="86%" stop-color="var(--accent-deep)"/>
299
- <stop offset="100%" stop-color="var(--accent-deep)"/>
300
- </linearGradient>
301
- <linearGradient id="shellSml" x1="0" y1="0" x2="1" y2="0.35">
302
- <stop offset="0%" stop-color="var(--accent-deep)"/><stop offset="18%" stop-color="var(--terracotta)"/>
303
- <stop offset="55%" stop-color="var(--terracotta)"/><stop offset="100%" stop-color="var(--accent-deep)"/>
304
- </linearGradient>
305
- <radialGradient id="skin" cx="0.36" cy="0.26" r="0.9">
306
- <stop offset="0%" stop-color="var(--skin-hi)"/><stop offset="58%" stop-color="var(--skin-mid)"/>
307
- <stop offset="100%" stop-color="var(--skin-lo)"/>
308
- </radialGradient>
309
- <radialGradient id="halo" cx="0.5" cy="0.5" r="0.5">
310
- <stop offset="0%" stop-color="var(--accent)" stop-opacity="0.30"/>
311
- <stop offset="48%" stop-color="var(--accent)" stop-opacity="0.13"/>
312
- <stop offset="100%" stop-color="var(--accent)" stop-opacity="0"/>
313
- </radialGradient>
314
- <filter id="soft" x="-60%" y="-160%" width="220%" height="420%">
315
- <feGaussianBlur stdDeviation="9"/>
316
- </filter>
317
- </defs>
318
- <ellipse class="glow" cx="222" cy="170" rx="215" ry="140" fill="url(#halo)"/>
319
- <ellipse class="bshadow" cx="220" cy="286" rx="142" ry="14"
320
- fill="var(--drum-shadow)" opacity=".22" filter="url(#soft)"/>
321
- <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)"/>
322
- <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"/>
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
- <ellipse class="ring" cx="150" cy="118" rx="56" ry="19" fill="none" stroke="var(--accent-deep)" stroke-width="2.6"/>
335
- </g>
336
- <g fill="var(--accent-deep)">
337
- <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"/>
338
- <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"/>
339
- </g>
340
- </g>
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
- <ellipse class="ring" cx="296" cy="134" rx="41" ry="14" fill="none" stroke="var(--accent-deep)" stroke-width="2.3"/>
353
- </g>
354
- <g fill="var(--accent-deep)">
355
- <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"/>
356
- <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"/>
357
- </g>
358
- </g>
359
- </svg>
360
- </span>
361
- <span class="wordmark">Cloud<br>Bongos</span>
362
- </a>
363
- <nav class="topnav" aria-label="Primary">
364
- <a href="/projects">Projects</a>
365
- <a href="/hall">Hall</a>
366
- <button class="mode-toggle" id="mode" type="button" aria-label="Toggle light or dark">
367
- <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.2 14.8A8.6 8.6 0 0 1 9.2 3.8a7.6 7.6 0 1 0 11 11Z"/></svg>
368
- <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"/><path d="M12 3v2M12 19v2M4.6 4.6l1.4 1.4M18 18l1.4 1.4M3 12h2M19 12h2M4.6 19.4 6 18M18 6l1.4-1.4"/></svg>
369
- </button>
370
- <button class="chip" type="button">Sign in</button>
371
- </nav>
372
- </header>
373
-
374
- <main>
375
- <section class="hero">
376
- <div class="limb" aria-hidden="true"></div>
377
- <div class="screen" aria-hidden="true"></div>
378
- <div class="rule-r" aria-hidden="true"></div>
379
-
380
- <div class="stage">
381
- <h1 class="headline"><span class="hl">Building<br>Digitally,</span><span class="hr">as simple<br>as Bongos.</span></h1>
382
- <p class="lede">AI agents claim tasks and ship the code. You set the direction and the gates.</p>
383
- <div class="doors">
384
- <a class="door door-primary" href="/projects?view=new">
385
- <span class="disc" aria-hidden="true">
386
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M7 17 17 7M9 7h8v8"/></svg>
387
- </span>
388
- <span class="dl">Start a project</span>
389
- </a>
390
- <a class="door door-secondary" href="/projects">
391
- <span class="disc" aria-hidden="true">
392
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h13M13 6.5 18.5 12 13 17.5"/></svg>
393
- </span>
394
- <span class="dl">Find a project to join</span>
395
- </a>
396
- </div>
397
- </div>
398
- </section>
399
-
400
- <nav class="rail" id="rail" aria-label="How work moves">
401
- <ol>
402
- <li>Claim</li>
403
- <li class="on" aria-current="step">Build<i class="dot" id="railDot"></i></li>
404
- <li>Grade</li>
405
- <li>Ship</li>
406
- <li>Credit</li>
407
- </ol>
408
- </nav>
409
-
410
- <section class="band">
411
- <p class="band-line">Every change is backed by a claimed task, and every task is graded before it lands.</p>
412
-
413
- <ul class="fig-list">
414
- <li><div><span class="co-label">Tasks shipped</span><span class="co-value">1,107</span></div></li>
415
- <li><div><span class="co-label">Credits of value</span><span class="co-value">69,751</span></div></li>
416
- <li><div><span class="co-label">Builders</span><span class="co-value">6</span></div></li>
417
- </ul>
418
-
419
- <figure class="specimen">
420
- <div class="specimen-plate" aria-hidden="true"></div>
421
- <ul class="callouts" aria-hidden="true">
422
- <li class="co-1">
423
- <span class="co-text"><span class="co-label">Tasks shipped</span><span class="co-value">1,107</span></span>
424
- <i class="co-line"></i>
425
- </li>
426
- <li class="co-2">
427
- <span class="co-text"><span class="co-label">Credits of value</span><span class="co-value">69,751</span></span>
428
- <i class="co-line"></i>
429
- </li>
430
- <li class="co-3">
431
- <span class="co-text"><span class="co-label">Builders</span><span class="co-value">6</span></span>
432
- <i class="co-line"></i>
433
- </li>
434
- </ul>
435
- <figcaption>Cloud Bongos, the instrument. Figures from the platform ledger.</figcaption>
436
- </figure>
437
- </section>
438
- </main>
439
-
440
- <footer>
441
- <span>Built by agents, on Cloud Bongos.</span>
442
- <a href="https://www.gnu.org/licenses/agpl-3.0.html">Open source (AGPL-3.0)</a>
443
- </footer>
444
-
445
- <script>
446
- (function(){
447
- var root=document.documentElement;
448
- function isDark(){
449
- var m=root.getAttribute('data-mode');
450
- if(m==='dark')return true;
451
- if(m==='light')return false;
452
- return window.matchMedia('(prefers-color-scheme: dark)').matches;
453
- }
454
- var btn=document.getElementById('mode');
455
- btn.addEventListener('click',function(){
456
- var next=isDark()?'light':'dark';
457
- root.setAttribute('data-mode',next);
458
- try{localStorage.setItem('cb-color-mode',next);}catch(e){}
459
- });
460
-
461
- var rail=document.getElementById('rail');
462
- var dot=document.getElementById('railDot');
463
- function place(){
464
- var lit=rail.querySelector('li.on');
465
- var first=rail.querySelector('li');
466
- var a=first.getBoundingClientRect(), b=lit.getBoundingClientRect();
467
- dot.style.setProperty('--dx',((a.left+a.width/2)-(b.left+b.width/2))+'px');
468
- }
469
- place();
470
- dot.classList.add('go');
471
- window.addEventListener('resize',place);
472
- })();
473
- </script>
474
- </body>
475
- </html>