@bongos/core 1.19.726 → 1.19.727

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/.bongos-core.json +176 -491
  2. package/.devcontainer/Dockerfile +1 -1
  3. package/.devcontainer/devcontainer.json +2 -2
  4. package/.devcontainer/healthcheck.sh +1 -1
  5. package/.devcontainer/init-firewall.sh +1 -1
  6. package/.devcontainer/post-create.sh +2 -2
  7. package/.env.local.example +1 -1
  8. package/Dockerfile +1 -1
  9. package/docs/copy-inventory.md +1 -1
  10. package/docs/copy-registry.json +9 -9
  11. package/docs/module-api-changelog.md +2 -0
  12. package/docs/recipes/devbox-app-release.md +4 -4
  13. package/modules/dev-box/app/scripts/dmgbuild-settings.py +5 -5
  14. package/modules/dev-box/app/scripts/gen-brand.js +1 -1
  15. package/modules/dev-box/app/src/brand.js +1 -1
  16. package/modules/dev-box/app/test/unit.mjs +16 -16
  17. package/modules/dev-box/box-access.js +1 -1
  18. package/modules/dev-box/routes/box.js +1 -1
  19. package/modules/discord/discord-approvals.js +1 -1
  20. package/modules/grading/grader-model.js +1 -1
  21. package/modules/grading/grader-prompt.js +1 -1
  22. package/modules/grading/grader-workers/quality.js +1 -1
  23. package/modules/hall-ui/module.json +1 -1
  24. package/modules/hall-ui/public/brand-apply.js +1 -1
  25. package/modules/hall-ui/public/shell.js +1 -1
  26. package/modules/hall-ui/public/work.js +1 -1
  27. package/modules/lifecycle/conflict-resolve.js +1 -1
  28. package/modules/lifecycle/db-analytics.js +1 -1
  29. package/modules/lifecycle/routes/analytics.js +1 -1
  30. package/modules/onboarding/approval-broadcast.js +1 -1
  31. package/modules/onboarding/onboarding.js +1 -1
  32. package/modules/provisioning/tests/liveness.mjs +1 -1
  33. package/modules/public-landing/public/index.html +1 -1
  34. package/modules/public-landing/public/projects-floor.states.json +2 -2
  35. package/modules/public-landing/public/projects.probes.json +4 -4
  36. package/modules/public-landing/public/projects.states.json +2 -2
  37. package/modules/status-ui/module.json +1 -1
  38. package/modules/status-ui/public/status.js +4 -4
  39. package/modules/status-ui/public/style.css +1 -1
  40. package/modules/ui-design/kit/fixtures/cost-summary.json +1 -1
  41. package/modules/ui-design/kit/fixtures/featured-hub.json +1 -1
  42. package/modules/ui-design/kit/fixtures/featured.json +1 -1
  43. package/modules/ui-design/kit/fixtures/leaderboard.json +1 -1
  44. package/modules/ui-design/kit/fixtures/my-projects.json +1 -1
  45. package/modules/ui-design/kit/fixtures/progress.json +1 -1
  46. package/modules/ui-design/kit/fixtures/recent-shipped.json +1 -1
  47. package/package-lock.json +2 -2
  48. package/package.json +1 -1
  49. package/scripts/cron/style_guide_audit.sh +1 -1
  50. package/scripts/discord/lib.js +1 -1
  51. package/scripts/discord/post.js +1 -1
  52. package/scripts/gds/audit-authorship.sh +1 -1
  53. package/scripts/gds/audit-replay.sh +29 -2
  54. package/scripts/gds/audit-ships.js +1 -1
  55. package/scripts/gds/backfill-sessions.js +2 -2
  56. package/scripts/gds/cf-tunnel.js +4 -4
  57. package/scripts/gds/claude-materialize.js +2 -2
  58. package/scripts/gds/cli-lib.js +6 -6
  59. package/scripts/gds/cutover-codemod.js +1 -1
  60. package/scripts/gds/dev-lib.js +2 -2
  61. package/scripts/gds/diagnose-achievements.js +2 -2
  62. package/scripts/gds/fitness-checks-identity.js +6 -4
  63. package/scripts/gds/gen-diagrams.js +1 -1
  64. package/scripts/gds/leak-scan-allowlist.js +293 -0
  65. package/scripts/gds/learning-capture.js +1 -1
  66. package/scripts/gds/linkify-refs.js +2 -2
  67. package/scripts/gds/local-preview-lib.js +1 -1
  68. package/scripts/gds/mirror-lineage-check.js +1 -1
  69. package/scripts/gds/mirror-redact.js +17 -2
  70. package/scripts/gds/newcomer-floor.templates.json +1 -1
  71. package/scripts/gds/package-core.js +18 -1
  72. package/scripts/gds/paste-token.js +1 -1
  73. package/scripts/gds/provision-units.js +2 -2
  74. package/scripts/gds/publish-manifest.js +15 -0
  75. package/scripts/gds/repo-metrics.js +1 -1
  76. package/scripts/gds/sandbox-stage.js +1 -1
  77. package/scripts/gds/seed-bongos-coreB-tranche1-tasks.js +1 -1
  78. package/scripts/gds/seed-bongos-coreB-tranche2-tasks.js +1 -1
  79. package/scripts/gds/seed-bongos-goal-hierarchy-tasks.js +1 -1
  80. package/scripts/gds/seed-bongos-tasks.js +2 -2
  81. package/scripts/gds/seed-gds-v4-tasks.js +1 -1
  82. package/scripts/gds/seed-medusa-tasks.js +10 -10
  83. package/scripts/gds/seed-module-upstreaming.js +1 -1
  84. package/scripts/gds/seed-productization-tasks.js +6 -6
  85. package/scripts/gds/seed-provisioning-tasks.js +2 -2
  86. package/scripts/gds/seed-staging.sh +19 -6
  87. package/scripts/gds/ship-deploy-target.js +1 -1
  88. package/scripts/gds/ship-flow.js +1 -1
  89. package/scripts/gds/smoke-gds.js +1 -1
  90. package/scripts/status-probe.mjs +2 -2
  91. package/src/bongos/auth-discord.js +2 -2
  92. package/src/bongos/live-channel.js +1 -1
  93. package/src/bongos/pool.js +1 -1
  94. package/src/bongos/routes/auth.js +11 -11
  95. package/src/bongos/routes/security.js +1 -1
  96. package/src/bongos/routes.js +1 -1
  97. package/src/branding.js +1 -1
  98. package/src/devbox-downloads.js +1 -1
  99. package/src/instance-config.js +2 -2
  100. package/src/module-api.js +1 -1
  101. package/src/module-loader/provenance.js +2 -2
  102. package/tests/art_stage.mjs +2 -2
  103. package/tests/auth_anthropic_identity.mjs +1 -1
  104. package/tests/auth_duplicate_cookie.mjs +1 -1
  105. package/tests/auth_error_brand.mjs +1 -1
  106. package/tests/auth_inactive_builder.mjs +1 -1
  107. package/tests/backup_cli.mjs +4 -4
  108. package/tests/bongos_box_connect.mjs +2 -2
  109. package/tests/bongos_downloads.mjs +2 -2
  110. package/tests/bongos_login.mjs +5 -5
  111. package/tests/box_connect_e2e.mjs +2 -2
  112. package/tests/box_dns_repoint.mjs +10 -10
  113. package/tests/box_host_keys.mjs +1 -1
  114. package/tests/box_onboard.mjs +9 -9
  115. package/tests/box_scope_session.mjs +1 -1
  116. package/tests/box_terminal_ssrf.mjs +7 -7
  117. package/tests/boxes.mjs +9 -9
  118. package/tests/branding.mjs +2 -2
  119. package/tests/bump_version.mjs +2 -2
  120. package/tests/cf_tunnel.mjs +40 -40
  121. package/tests/cli_token_reissue.mjs +7 -7
  122. package/tests/cloud_bongos_pack.mjs +1 -1
  123. package/tests/currency_label.mjs +8 -8
  124. package/tests/dev_lib.mjs +4 -4
  125. package/tests/devbox_dmg_backdrop.mjs +1 -1
  126. package/tests/devbox_downloads.mjs +2 -2
  127. package/tests/devbox_icons.mjs +1 -1
  128. package/tests/discord_approvals.mjs +1 -1
  129. package/tests/discord_oauth.mjs +2 -2
  130. package/tests/executed_closure.mjs +6 -1
  131. package/tests/first_admin_bootstrap.mjs +1 -1
  132. package/tests/gate_approvals.mjs +5 -5
  133. package/tests/grade_aggregates_unavailable.mjs +1 -1
  134. package/tests/hook_user_agents.mjs +2 -2
  135. package/tests/init.mjs +6 -6
  136. package/tests/instance_config.mjs +1 -1
  137. package/tests/instance_manifest.mjs +5 -5
  138. package/tests/instance_mismatch_guard.mjs +13 -13
  139. package/tests/leak_scan_allowlist.mjs +94 -0
  140. package/tests/migrate_root_resolution.mjs +4 -4
  141. package/tests/mirror_redact.mjs +28 -4
  142. package/tests/module_catalog.mjs +5 -5
  143. package/tests/module_submissions.mjs +3 -3
  144. package/tests/package_core.mjs +1 -1
  145. package/tests/parallel-load.mjs +6 -6
  146. package/tests/projects_hub.mjs +2 -2
  147. package/tests/provision.mjs +50 -50
  148. package/tests/provisioning_github_app_routes.mjs +1 -1
  149. package/tests/provisioning_onboard_mode.mjs +2 -2
  150. package/tests/publish_reconciler.mjs +4 -4
  151. package/tests/sandbox_stage.mjs +1 -1
  152. package/tests/scrubber_corpus.mjs +3 -3
  153. package/tests/search_isolation.mjs +1 -1
  154. package/tests/session_records.mjs +1 -1
  155. package/tests/ship_card.mjs +6 -6
  156. package/tests/ship_ci_deploy.mjs +1 -1
  157. package/tests/single_host_hall.mjs +9 -9
  158. package/tests/smoke_preflight.mjs +1 -1
  159. package/tests/smoke_target.mjs +1 -1
  160. package/tests/status-probe.mjs +1 -1
  161. package/tests/status_mirror_sync.mjs +1 -1
  162. package/docs/adr/0004-amazonprimea-name-and-trademark-acceptance.md +0 -45
  163. package/docs/design/mocks/_schemes.css +0 -604
  164. package/docs/design/mocks/component-sheet.html +0 -428
  165. package/docs/design/mocks/hall/_tokens.css +0 -370
  166. package/docs/design/mocks/hall/board/v1.html +0 -846
  167. package/docs/design/mocks/hall/board/v2.html +0 -858
  168. package/docs/design/mocks/hall/board/v3.html +0 -884
  169. package/docs/design/mocks/hall/goals/v1.html +0 -1212
  170. package/docs/design/mocks/hall/goals/v2.html +0 -1192
  171. package/docs/design/mocks/hall/goals/v3.html +0 -1205
  172. package/docs/design/mocks/hall/hall-sheet.html +0 -244
  173. package/docs/design/mocks/hall/reading/v1.html +0 -1125
  174. package/docs/design/mocks/hall/reading/v2.html +0 -1177
  175. package/docs/design/mocks/hall/reading/v3.html +0 -1150
  176. package/docs/design/mocks/hall/settings/v1.html +0 -1238
  177. package/docs/design/mocks/hall/settings/v2.html +0 -1235
  178. package/docs/design/mocks/hall/settings/v3.html +0 -1299
  179. package/docs/design/mocks/hall/task/v1.html +0 -633
  180. package/docs/design/mocks/hall/task/v2.html +0 -646
  181. package/docs/design/mocks/hall/task/v3.html +0 -647
  182. package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg +0 -0
  183. package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg.json +0 -13
  184. package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg +0 -0
  185. package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg.json +0 -13
  186. package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg +0 -0
  187. package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg.json +0 -13
  188. package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg +0 -0
  189. package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg.json +0 -13
  190. package/docs/design/mocks/hub/hub-sheet.html +0 -192
  191. package/docs/design/mocks/hub/mine.html +0 -465
  192. package/docs/design/mocks/hub/picker.html +0 -421
  193. package/docs/design/mocks/hub/planets.html +0 -356
  194. package/docs/design/mocks/hub/v1.html +0 -1209
  195. package/docs/design/mocks/hub/v2.html +0 -1257
  196. package/docs/design/mocks/hub/v3.html +0 -1496
  197. package/docs/design/mocks/hub/wizard.html +0 -421
  198. package/docs/design/mocks/landing/landing-sheet.html +0 -131
  199. package/docs/design/mocks/landing/v1.html +0 -956
  200. package/docs/design/mocks/landing/v2.html +0 -708
  201. package/docs/design/mocks/landing/v3.html +0 -911
  202. package/docs/design/mocks/landing-page-mock.html +0 -687
  203. package/docs/design/mocks/landing-palettes.html +0 -103
  204. package/docs/design/mocks/projects-hub-mock.html +0 -991
  205. package/docs/design/mocks/projects-hub-variants.html +0 -146
  206. package/docs/design/mocks/projects-page-mock.html +0 -167
  207. package/docs/design/mocks/world/blue-hud/_tokens.css +0 -246
  208. package/docs/design/mocks/world/blue-hud/hall.html +0 -595
  209. package/docs/design/mocks/world/blue-hud/landing.html +0 -424
  210. package/docs/design/mocks/world/blue-hud/status.html +0 -410
  211. package/docs/design/mocks/world/chrome-blobs/_tokens.css +0 -479
  212. package/docs/design/mocks/world/chrome-blobs/hall.html +0 -553
  213. package/docs/design/mocks/world/chrome-blobs/landing-b.html +0 -581
  214. package/docs/design/mocks/world/chrome-blobs/landing.html +0 -328
  215. package/docs/design/mocks/world/chrome-blobs/status.html +0 -416
  216. package/docs/design/mocks/world/natgeo-editorial/_tokens.css +0 -377
  217. package/docs/design/mocks/world/natgeo-editorial/hall.html +0 -649
  218. package/docs/design/mocks/world/natgeo-editorial/landing-b.html +0 -743
  219. package/docs/design/mocks/world/natgeo-editorial/landing.html +0 -475
  220. package/docs/design/mocks/world/natgeo-editorial/status.html +0 -437
  221. package/docs/design/mocks/world/organic-cards/_tokens.css +0 -462
  222. package/docs/design/mocks/world/organic-cards/hall.html +0 -625
  223. package/docs/design/mocks/world/organic-cards/landing-b.html +0 -736
  224. package/docs/design/mocks/world/organic-cards/landing.html +0 -420
  225. package/docs/design/mocks/world/organic-cards/status.html +0 -458
  226. package/docs/design/mocks/world/world-sheet.html +0 -156
@@ -1,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>