@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,420 +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 href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&family=Nunito:wght@400;600;800&display=swap" rel="stylesheet">
13
- <link rel="stylesheet" href="_tokens.css">
14
- <style>
15
- *,*::before,*::after{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-size:1rem;line-height:1.55;
20
- -webkit-font-smoothing:antialiased;
21
- }
22
- ::selection{background:var(--accent);color:var(--on-accent)}
23
- :focus-visible{outline:2px solid var(--focus);outline-offset:3px;border-radius:8px}
24
- a{color:inherit}
25
- .vh{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
26
- .wrap{width:min(1200px,100% - clamp(36px,8vw,120px));margin-inline:auto}
27
-
28
- /* ---------------- top bar: a real surface, a deeper fold of the same paper ---------------- */
29
- .bar{
30
- position:relative;z-index:6;height:68px;
31
- background:var(--bg-deep);
32
- border-bottom:var(--line) solid var(--rule-soft);
33
- display:flex;align-items:center;gap:20px;
34
- padding:0 clamp(18px,4vw,60px);
35
- }
36
- .brand{display:inline-flex;align-items:center;gap:11px;white-space:nowrap;text-decoration:none;color:var(--ink);font-weight:800;font-size:1.16rem;letter-spacing:-.012em}
37
- .brand svg{display:block;flex:none}
38
- .bar-right{margin-left:auto;display:flex;align-items:center;gap:clamp(14px,2.4vw,34px)}
39
- .bar-nav{display:flex;align-items:center;gap:clamp(14px,2.4vw,34px)}
40
- .bar-nav a{
41
- text-decoration:none;color:var(--ink-soft);font-weight:600;font-size:1rem;
42
- padding:8px 2px;border-radius:6px;transition:color .18s ease;
43
- }
44
- .bar-nav a:hover{color:var(--ink)}
45
- .mode-toggle{
46
- width:54px;height:30px;flex:none;padding:0;cursor:pointer;
47
- border-radius:var(--radius-pill);border:var(--line) solid var(--toggle-bd);
48
- background:var(--toggle-bg);color:var(--ink);
49
- display:inline-flex;align-items:center;justify-content:center;
50
- transition:background .2s ease,border-color .2s ease;
51
- }
52
- .mode-toggle:hover{border-color:var(--accent)}
53
- .mt-ico{position:relative;width:18px;height:18px;display:block}
54
- .mt-ico svg{position:absolute;inset:0;width:18px;height:18px;display:block}
55
- .i-moon{opacity:var(--moon-o)}
56
- .i-sun{opacity:var(--sun-o)}
57
- .chip-in{
58
- cursor:pointer;font:inherit;font-weight:700;font-size:.98rem;
59
- padding:9px 20px;border-radius:var(--radius-pill);
60
- border:var(--line) solid transparent;background:transparent;color:var(--ink);
61
- white-space:nowrap;transition:background .2s ease,border-color .2s ease;
62
- }
63
- .chip-in:hover{background:var(--nav-hover);border-color:var(--rule-soft)}
64
-
65
- /* ---------------- hero: the plate is the ground, not a picture pasted on one ---------------- */
66
- .hero{
67
- position:relative;overflow:hidden;
68
- min-height:calc(100dvh - 68px);
69
- display:grid;grid-template-rows:1fr auto;
70
- background:var(--hero-band);
71
- }
72
- .hero-media{position:absolute;inset:0;z-index:0}
73
- .hero-plate{
74
- position:absolute;inset:0;
75
- background-image:var(--plate-hero);
76
- background-size:var(--plate-size);background-position:var(--plate-pos);background-repeat:no-repeat;
77
- }
78
- .hero-scrim{
79
- position:absolute;inset:0;
80
- background:linear-gradient(94deg,
81
- var(--scrim-a) 0 calc(var(--scrim-reach) * .44),
82
- var(--scrim-mid) calc(var(--scrim-reach) * .70),
83
- var(--scrim-b) var(--scrim-reach));
84
- }
85
- .hero-grain{position:absolute;inset:0;background-image:var(--grain);opacity:var(--grain-op);mix-blend-mode:overlay}
86
-
87
- /* the rendered wood pair, hero scale, sitting in the leaves */
88
- .object{
89
- position:absolute;z-index:1;
90
- right:3%;top:4%;width:min(42vw,580px);aspect-ratio:1/1;
91
- background-image:var(--plate-object);
92
- background-size:contain;background-position:center;background-repeat:no-repeat;
93
- filter:drop-shadow(var(--mark-shadow));
94
- }
95
-
96
- /* ---------------- leader-line notes: the ledger, annotated onto the photograph ---------------- */
97
- .notes{list-style:none;margin:0;padding:0;position:absolute;inset:0;z-index:3;pointer-events:none}
98
- /* the notes ride the SAME entrance as the slab, one delay ladder, one authored moment */
99
- .note{
100
- position:absolute;display:flex;align-items:center;
101
- animation:rise .62s cubic-bezier(.16,1,.3,1) both;
102
- }
103
- .n1{left:44%;width:22%;top:12%;animation-delay:.41s}
104
- .n2{left:41%;width:27%;top:45%;animation-delay:.48s}
105
- .n3{left:46%;width:18%;top:66%;animation-delay:.55s}
106
- .note .card{
107
- flex:none;display:flex;align-items:baseline;gap:7px;
108
- padding:8px 14px;border-radius:var(--radius-sm);
109
- background:var(--field-brown);color:var(--on-brown-soft);
110
- border:var(--line) solid color-mix(in srgb,var(--cream) 18%,transparent);
111
- box-shadow:var(--shadow-card);
112
- font-size:.8rem;line-height:1.2;white-space:nowrap;
113
- }
114
- .note .card b{
115
- color:var(--on-brown);font-weight:800;font-size:1.06rem;letter-spacing:-.012em;
116
- font-variant-numeric:tabular-nums;
117
- }
118
- /* the leader is CASED, like a line on a map: a 1px core with a 1px halo of the opposite value, so the
119
- pair reads whether the run crosses flat paper or dark foliage. A bare hairline only holds over paper. */
120
- .note .line{flex:1 1 auto;height:1px;background:var(--lead);box-shadow:0 0 0 1px var(--lead-case)}
121
- .note .dot{
122
- flex:none;width:9px;height:9px;border-radius:50%;background:var(--lead-dot);
123
- box-shadow:0 0 0 1.5px var(--lead-case),0 0 0 5px color-mix(in srgb,var(--lead-dot) 26%,transparent);
124
- }
125
-
126
- /* ---------------- copy ---------------- */
127
- .copy{position:relative;z-index:4;align-self:center;padding:clamp(28px,6vh,72px) 0 clamp(20px,4vh,40px)}
128
- h1{
129
- margin:0;font-family:var(--font-display);font-weight:800;
130
- font-size:clamp(2.15rem,4.05vw,3.6rem);line-height:1.08;letter-spacing:-.026em;
131
- max-width:min(560px,100%);color:var(--ink);text-wrap:balance;
132
- }
133
- h1 .l{white-space:nowrap}
134
- .lede{
135
- margin:1.15rem 0 0;max-width:min(348px,100%);
136
- font-size:clamp(1.02rem,1.28vw,1.16rem);line-height:1.52;color:var(--ink-soft);
137
- }
138
-
139
- /* the two doors ride in one pill: equal columns, the primary lit */
140
- .doors{
141
- display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:4px;
142
- width:min(552px,100%);margin-top:2.2rem;padding:5px;
143
- border-radius:var(--radius-pill);
144
- background:color-mix(in srgb,var(--bg-deep) 62%,transparent);
145
- -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
146
- border:var(--line) solid var(--door-2-bd);
147
- box-shadow:var(--shadow-card);
148
- }
149
- .door{
150
- display:inline-flex;align-items:center;justify-content:center;
151
- padding:13px 22px;border-radius:var(--radius-pill);
152
- font-weight:700;font-size:1.02rem;text-decoration:none;white-space:nowrap;
153
- transition:background .2s ease,color .2s ease,transform .22s cubic-bezier(.16,1,.3,1);
154
- }
155
- .door-1{background:var(--accent);color:var(--on-accent);box-shadow:0 6px 14px -8px var(--shade),inset 0 1px 0 rgba(255,255,255,.34)}
156
- .door-1:hover{transform:translateY(-1px)}
157
- .door-2{color:var(--ink)}
158
- .door-2:hover{background:var(--nav-hover)}
159
-
160
- /* ---------------- the pipeline rail: the template's four-column slab, five columns ---------------- */
161
- .rail{position:relative;z-index:4;padding-bottom:clamp(28px,5vh,54px)}
162
- .slab{
163
- list-style:none;margin:0;padding:0;
164
- display:grid;grid-template-columns:repeat(5,1fr);
165
- border-radius:var(--radius);overflow:hidden;
166
- background:var(--slab);
167
- border:var(--line) solid var(--slab-edge);
168
- box-shadow:var(--shadow-lift);
169
- }
170
- .step{
171
- padding:26px 14px 24px;text-align:center;color:var(--on-sea-soft);
172
- animation:rise .62s cubic-bezier(.16,1,.3,1) both;
173
- }
174
- .step + .step{box-shadow:inset 1px 0 0 var(--slab-div)}
175
- .step:nth-child(1){animation-delay:.06s}
176
- .step:nth-child(2){animation-delay:.13s}
177
- .step:nth-child(3){animation-delay:.20s}
178
- .step:nth-child(4){animation-delay:.27s}
179
- .step:nth-child(5){animation-delay:.34s}
180
- @keyframes rise{from{opacity:0;transform:translateY(26px)}}
181
- .badge{
182
- width:54px;height:54px;margin:0 auto 14px;border-radius:50%;
183
- display:grid;place-items:center;
184
- border:1.6px solid color-mix(in srgb,var(--cream) 52%,transparent);color:var(--on-sea);
185
- }
186
- .badge svg{width:24px;height:24px;display:block}
187
- .step-label{font-weight:700;font-size:1.02rem;letter-spacing:-.006em}
188
- .is-live{color:var(--on-sea)}
189
- .is-live .step-label{font-weight:800}
190
- .is-live .badge{
191
- background:var(--accent);color:var(--on-accent);border-color:transparent;
192
- box-shadow:0 0 0 8px color-mix(in srgb,var(--accent) 17%,transparent),
193
- inset 0 1px 0 rgba(255,255,255,.38);
194
- }
195
-
196
- /* ---- the quiet band below the fold: the template's lower green field, raking ripple and all ---- */
197
- .band{
198
- position:relative;overflow:hidden;
199
- background:var(--bg);border-top:var(--line) solid var(--rule-soft);
200
- padding:clamp(44px,7vh,80px) 0;
201
- }
202
- .band::before,.band::after{content:"";position:absolute;inset:0;pointer-events:none}
203
- .band::before{background-image:var(--ripple);opacity:var(--ripple-op)}
204
- .band::after{background-image:var(--grain);opacity:var(--grain-op);mix-blend-mode:overlay}
205
- .band p{
206
- position:relative;margin:0;max-width:64ch;
207
- font-size:clamp(1.02rem,1.35vw,1.2rem);line-height:1.6;color:var(--ink-soft);
208
- }
209
-
210
- /* ---------------- footer ---------------- */
211
- .foot{
212
- background:var(--bg-deep);border-top:var(--line) solid var(--rule-soft);
213
- padding:26px 0;
214
- }
215
- .foot p{margin:0;color:var(--ink-soft);font-size:.96rem;display:flex;gap:10px;flex-wrap:wrap;align-items:center}
216
- .foot a{color:var(--ink);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:var(--accent)}
217
- .foot a:hover{text-decoration-color:var(--ink)}
218
-
219
- @media (max-width:1100px){
220
- .n1{left:42%;width:20%;top:11%}
221
- .n2{left:40%;width:24%;top:46%}
222
- .n3{left:44%;width:17%;top:67%}
223
- }
224
-
225
- @media (max-width:900px){
226
- .bar{height:64px;gap:12px;padding:0 18px}
227
- .brand{font-size:1.05rem}
228
- .bar-right{gap:12px}
229
- .bar-nav{gap:14px}
230
- .bar-nav a{font-size:.95rem}
231
- .chip-in{padding:8px 14px;font-size:.94rem}
232
- .hero{display:flex;flex-direction:column;min-height:calc(100dvh - 64px);gap:0}
233
- .copy{order:1;padding:26px 0 4px;align-self:auto}
234
- .hero-media{order:2}
235
- .notes{order:3}
236
- .rail{order:4}
237
- h1{max-width:none;font-size:2.1rem}
238
- h1 .l{white-space:normal}
239
- .lede{max-width:none;margin-top:.85rem}
240
- .doors{grid-auto-flow:row;width:100%;margin-top:1.6rem;border-radius:30px;gap:5px}
241
- .door{width:100%}
242
- .hero-media{
243
- position:relative;inset:auto;height:200px;margin:20px auto 0;
244
- width:min(1200px,100% - 36px);border-radius:var(--radius);overflow:hidden;
245
- box-shadow:var(--shadow-card);border:var(--line) solid var(--tile-edge);
246
- }
247
- .hero-plate{background-size:auto 200%;background-position:72% center}
248
- .hero-scrim{background:linear-gradient(94deg,var(--scrim-a) 0 3%,var(--scrim-mid) 14%,var(--scrim-b) 40%)}
249
- .object{
250
- position:absolute;right:2%;top:-4%;width:46%;
251
- filter:drop-shadow(0 12px 20px var(--shade));
252
- }
253
- /* mobile: ONE quiet ledger line, hairline-separated. Never three equal cards in a row. */
254
- .notes{
255
- position:static;inset:auto;pointer-events:auto;
256
- width:min(1200px,100% - 36px);margin:13px auto 0;
257
- display:flex;flex-wrap:wrap;align-items:baseline;gap:0;
258
- }
259
- .note{position:static;width:auto;flex:0 0 auto}
260
- .note .line,.note .dot{display:none}
261
- .note .card{
262
- background:transparent;border:0;box-shadow:none;border-radius:0;
263
- padding:3px 14px;color:var(--ink-soft);font-size:.82rem;gap:6px;
264
- }
265
- .note .card b{color:var(--ink);font-size:.95rem}
266
- .note:first-child .card{padding-left:0}
267
- .note + .note .card{border-left:var(--line) solid var(--rule)}
268
- .rail{padding:16px 0 26px}
269
- .step{padding:16px 6px 14px}
270
- .badge{width:42px;height:42px;margin-bottom:9px}
271
- .badge svg{width:20px;height:20px}
272
- .step-label{font-size:.9rem}
273
- }
274
- @media (max-width:430px){
275
- .bar{padding:0 10px;gap:8px}
276
- .brand{font-size:.86rem;gap:7px}
277
- .brand svg{width:24px;height:18px}
278
- .bar-nav{gap:9px}
279
- .bar-nav a{font-size:.8rem;padding:8px 0}
280
- .bar-right{gap:9px}
281
- .mode-toggle{width:44px;height:26px}
282
- .mt-ico,.mt-ico svg{width:16px;height:16px}
283
- .chip-in{padding:6px 9px;font-size:.8rem}
284
- .hero-media{height:172px}
285
- .note .card{padding:3px 9px;font-size:.72rem;gap:4px}
286
- .note .card b{font-size:.86rem}
287
- .step{padding:13px 2px 12px}
288
- .badge{width:34px;height:34px;margin-bottom:7px}
289
- .badge svg{width:17px;height:17px}
290
- .step-label{font-size:.72rem;letter-spacing:-.012em}
291
- .is-live .badge{box-shadow:0 0 0 5px color-mix(in srgb,var(--accent) 17%,transparent),inset 0 1px 0 rgba(255,255,255,.38)}
292
- }
293
- </style>
294
- </head>
295
- <body>
296
- <!--
297
- THESIS: the pipeline is the product, so the first viewport shows the beat laid out as one slab, not a
298
- claim stack. It refuses the SaaS hero of eyebrow, headline, two loose buttons and a logo strip.
299
- OWN-WORLD: the owner's green-and-brown organic card system. A photographic leaf plate over sculpted paper is
300
- the ground itself; sea green, bark brown and one lit tan; Nunito rounded sans; 22px cards, circular badges.
301
- STORY: an owner or a builder sees real work moving, reads one line of what this is, and takes one of two
302
- equal doors that sit in a single pill.
303
- FIRST VIEWPORT: headline and lede on the plate's plain left third; the joined door pill under them; the
304
- rendered wood bongo pair at hero scale upper right; three ledger figures on leader lines across the leaves;
305
- the five-step slab across the foot, tan lighting only the running step.
306
- FORM: no seed key. This is new-work section 3, extend an existing surface: the organic-cards world is
307
- already committed and the owner pinned site-4 as the comp, so no concept tournament was run by instruction.
308
- FINISH: unreviewed and undocumented is unfinished; this build ends with the finish review and the verdict.
309
- -->
310
-
311
- <header class="bar">
312
- <a class="brand" href="/" aria-label="Cloud Bongos, home">
313
- <svg width="34" height="26" viewBox="0 0 68 52" aria-hidden="true" focusable="false">
314
- <path d="M4 15c1 12 4 21 6 26a13 5 0 0 0 26 0c2-5 5-14 6-26Z" style="fill:var(--accent-deep)"/>
315
- <path d="M8 17c1 11 3 19 5 24a13 5 0 0 0 4 1c-2-5-5-14-6-25Z" fill="#fff" opacity=".18"/>
316
- <ellipse cx="23" cy="15" rx="19" ry="7" style="fill:var(--accent)"/>
317
- <ellipse cx="23" cy="15" rx="14" ry="4.6" style="fill:var(--skin-mid)"/>
318
- <path d="M40 21c1 9 3 16 5 20a10 4 0 0 0 20 0c2-4 4-11 5-20Z" style="fill:var(--terracotta)"/>
319
- <ellipse cx="55" cy="21" rx="15" ry="5.6" style="fill:var(--accent)"/>
320
- <ellipse cx="55" cy="21" rx="11" ry="3.6" style="fill:var(--skin-mid)"/>
321
- </svg>
322
- Cloud Bongos
323
- </a>
324
-
325
- <div class="bar-right">
326
- <nav class="bar-nav" aria-label="Main">
327
- <a href="/projects">Projects</a>
328
- <a href="/hall">Hall</a>
329
- </nav>
330
- <button class="mode-toggle" id="mode" type="button" aria-label="Toggle light or dark">
331
- <span class="mt-ico">
332
- <svg class="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 14.4A8.4 8.4 0 0 1 9.6 4 8.4 8.4 0 1 0 20 14.4Z"/></svg>
333
- <svg class="i-sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><circle cx="12" cy="12" r="4.2"/><path d="M12 2.6v2.2M12 19.2v2.2M2.6 12h2.2M19.2 12h2.2M5.4 5.4l1.6 1.6M17 17l1.6 1.6M18.6 5.4 17 7M7 17l-1.6 1.6"/></svg>
334
- </span>
335
- </button>
336
- <button class="chip-in" type="button">Sign in</button>
337
- </div>
338
- </header>
339
-
340
- <main>
341
- <section class="hero">
342
- <div class="hero-media" aria-hidden="true">
343
- <div class="hero-plate"></div>
344
- <div class="hero-scrim"></div>
345
- <div class="hero-grain"></div>
346
- <div class="object" role="img" aria-label="A pair of wood bongos resting among monstera leaves"></div>
347
- </div>
348
-
349
- <ul class="notes" aria-label="Cloud Bongos, in the ledger">
350
- <li class="note n1"><span class="card"><b>1,107</b> tasks shipped</span><span class="line"></span><span class="dot"></span></li>
351
- <li class="note n2"><span class="card"><b>69,751</b> credits of value</span><span class="line"></span><span class="dot"></span></li>
352
- <li class="note n3"><span class="card"><b>6</b> builders</span><span class="line"></span><span class="dot"></span></li>
353
- </ul>
354
-
355
- <div class="copy wrap">
356
- <h1><span class="l">Building Digitally,</span> <span class="l">as simple as Bongos.</span></h1>
357
- <p class="lede">AI agents claim tasks and ship the code. You set the direction and the gates.</p>
358
- <div class="doors">
359
- <a class="door door-1" href="/projects?view=new">Start a project</a>
360
- <a class="door door-2" href="/projects">Find a project to join</a>
361
- </div>
362
- </div>
363
-
364
- <div class="rail wrap">
365
- <ol class="slab" aria-label="How work moves through Cloud Bongos">
366
- <li class="step">
367
- <span class="badge"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5.5 3.6h13v16.8l-6.5-3.9-6.5 3.9z"/></svg></span>
368
- <span class="step-label">Claim</span>
369
- </li>
370
- <li class="step is-live" aria-current="step">
371
- <span class="badge"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M13.6 2.9 20.9 10.2 18.1 13 10.8 5.7z"/><path d="M11.2 7.3 4 14.5a2.1 2.1 0 0 0 0 3l1.8 1.8a2.1 2.1 0 0 0 3 0l7.2-7.2"/></svg></span>
372
- <span class="step-label">Build<span class="vh">, the step now running</span></span>
373
- </li>
374
- <li class="step">
375
- <span class="badge"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><circle cx="12" cy="8.9" r="5.3"/><path d="M9.1 13.4 7.9 21.1 12 18.7l4.1 2.4-1.2-7.7"/></svg></span>
376
- <span class="step-label">Grade</span>
377
- </li>
378
- <li class="step">
379
- <span class="badge"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4 15.6h16l-2 4.8H6z"/><path d="M12 3.4v12.2"/><path d="M12 5.1 18 9l-6 2.6z"/></svg></span>
380
- <span class="step-label">Ship</span>
381
- </li>
382
- <li class="step">
383
- <span class="badge"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="2.9" y="5.6" width="18.2" height="12.8" rx="2.6"/><path d="M2.9 10.1h18.2M6.6 14.6h3.6"/></svg></span>
384
- <span class="step-label">Credit</span>
385
- </li>
386
- </ol>
387
- </div>
388
- </section>
389
-
390
- <section class="band">
391
- <div class="wrap">
392
- <p>Every change is a claimed task in one ledger, locked to one agent, graded on the real diff, and paid only once it is live.</p>
393
- </div>
394
- </section>
395
- </main>
396
-
397
- <footer class="foot">
398
- <div class="wrap">
399
- <p>Built by agents, on Cloud Bongos. <a href="https://www.gnu.org/licenses/agpl-3.0.html">Open source (AGPL-3.0)</a></p>
400
- </div>
401
- </footer>
402
-
403
- <script>
404
- (function () {
405
- var root = document.documentElement;
406
- function isDark() {
407
- var m = root.getAttribute('data-mode');
408
- if (m === 'dark') return true;
409
- if (m === 'light') return false;
410
- return window.matchMedia('(prefers-color-scheme: dark)').matches;
411
- }
412
- document.getElementById('mode').addEventListener('click', function () {
413
- var next = isDark() ? 'light' : 'dark';
414
- root.setAttribute('data-mode', next);
415
- try { localStorage.setItem('cb-color-mode', next); } catch (e) {}
416
- });
417
- })();
418
- </script>
419
- </body>
420
- </html>