@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,581 +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=JetBrains+Mono:wght@400;500&family=Manrope:wght@200..700&display=swap">
13
- <link rel="stylesheet" href="_tokens.css">
14
- <style>
15
- /* landing-b, the second landing composition for the chrome world (taste-led track).
16
- It links _tokens.css and consumes it as-is. Every page-local token here is DERIVED and
17
- prefixed --b-; no contract token is redefined. Mode-varying values live in three blocks:
18
- :root (light), :root[data-mode="dark"], and the byte-identical prefers-color-scheme twin.
19
- Narrow-screen geometry is plain CSS (mode-invariant), so it needs no twins.
20
- Corners follow the candidate's system: pill for interactive, 28px for the black field. */
21
-
22
- :root {
23
- /* invariant */
24
- --b-top-h: 68px;
25
- --b-gut: clamp(20px, 4.4vw, 64px);
26
- --b-pad-b: clamp(26px, 5vh, 64px);
27
- --b-leader: clamp(44px, 5.6vw, 86px);
28
-
29
- /* mode-varying (light) */
30
- --b-field-top: 22px;
31
- --b-field-bottom: 22px;
32
- --b-field-right: 59%;
33
- --b-field-radius: 0 28px 28px 0;
34
- --b-blob-pos: 42% 44%;
35
- --b-blob-mask: radial-gradient(150% 150% at 30% 46%, #000 0 70%, rgba(0, 0, 0, .85) 88%, transparent 100%);
36
- --b-copy-w: min(54%, 690px);
37
- --b-h1-size: clamp(32px, 4.3vw, 60px);
38
- --b-h1-shift: 0px;
39
- --b-halo: none;
40
- --b-obj: url(../../../../../.impeccable/mocks/world-assets/r2-bongos-chrome-a-cut.png);
41
- --b-obj-blend: normal;
42
- --b-obj-filter: drop-shadow(0 22px 34px rgba(0, 0, 0, .55));
43
- --b-obj-w: min(30vw, 352px);
44
- --b-obj-left: 30%;
45
- --b-obj-bottom: 14%;
46
- --b-lit: #a33f12;
47
- --b-pill-bg: #ffffff;
48
- --b-pill-edge: rgba(23, 24, 26, .14);
49
- --b-pill-shadow: 0 1px 2px rgba(23, 24, 26, .07), 0 16px 34px rgba(23, 24, 26, .09);
50
- --b-nav-hover: rgba(23, 24, 26, .06);
51
- --b-moon: block;
52
- --b-sun: none;
53
- }
54
-
55
- :root[data-mode="dark"] {
56
- --b-field-top: 0px;
57
- --b-field-bottom: calc(var(--b-pad-b) * -1);
58
- --b-field-right: 37%;
59
- --b-field-radius: 0px;
60
- --b-blob-pos: 46% 40%;
61
- --b-blob-mask: radial-gradient(104% 150% at 4% 40%, #000 0 40%, rgba(0, 0, 0, .42) 70%, transparent 90%);
62
- --b-copy-w: min(48%, 612px);
63
- --b-h1-size: clamp(34px, 5.4vw, 78px);
64
- --b-h1-shift: -168px;
65
- --b-halo: 0 2px 18px rgba(0, 0, 0, .95), 0 0 48px rgba(0, 0, 0, .72);
66
- --b-obj: url(../../../../../.impeccable/mocks/world-assets/r2-bongos-chrome-b.jpg);
67
- --b-obj-blend: lighten;
68
- --b-obj-filter: none;
69
- --b-obj-w: min(46vw, 548px);
70
- --b-obj-left: 1%;
71
- --b-obj-bottom: -6%;
72
- --b-lit: var(--accent);
73
- --b-pill-bg: rgba(255, 255, 255, .07);
74
- --b-pill-edge: rgba(255, 255, 255, .17);
75
- --b-pill-shadow: 0 24px 60px rgba(0, 0, 0, .6);
76
- --b-nav-hover: rgba(255, 255, 255, .09);
77
- --b-moon: none;
78
- --b-sun: block;
79
- }
80
-
81
- @media (prefers-color-scheme: dark) {
82
- :root:not([data-mode="light"]) {
83
- --b-field-top: 0px;
84
- --b-field-bottom: calc(var(--b-pad-b) * -1);
85
- --b-field-right: 37%;
86
- --b-field-radius: 0px;
87
- --b-blob-pos: 46% 40%;
88
- --b-blob-mask: radial-gradient(104% 150% at 4% 40%, #000 0 40%, rgba(0, 0, 0, .42) 70%, transparent 90%);
89
- --b-copy-w: min(48%, 612px);
90
- --b-h1-size: clamp(34px, 5.4vw, 78px);
91
- --b-h1-shift: -168px;
92
- --b-halo: 0 2px 18px rgba(0, 0, 0, .95), 0 0 48px rgba(0, 0, 0, .72);
93
- --b-obj: url(../../../../../.impeccable/mocks/world-assets/r2-bongos-chrome-b.jpg);
94
- --b-obj-blend: lighten;
95
- --b-obj-filter: none;
96
- --b-obj-w: min(46vw, 548px);
97
- --b-obj-left: 1%;
98
- --b-obj-bottom: -6%;
99
- --b-lit: var(--accent);
100
- --b-pill-bg: rgba(255, 255, 255, .07);
101
- --b-pill-edge: rgba(255, 255, 255, .17);
102
- --b-pill-shadow: 0 24px 60px rgba(0, 0, 0, .6);
103
- --b-nav-hover: rgba(255, 255, 255, .09);
104
- --b-moon: none;
105
- --b-sun: block;
106
- }
107
- }
108
-
109
- *, *::before, *::after { box-sizing: border-box; }
110
- html, body { margin: 0; padding: 0; }
111
- body {
112
- background: var(--bg);
113
- color: var(--ink);
114
- font: 400 16px/1.55 var(--font-body);
115
- -webkit-font-smoothing: antialiased;
116
- }
117
- ::selection { background: var(--accent); color: var(--accent-on); }
118
- :focus-visible { outline: 2px solid var(--focus); outline-offset: 3px; }
119
- a, a:visited { color: inherit; }
120
- h1, p, ol, ul { margin: 0; }
121
- ol, ul { list-style: none; padding: 0; }
122
-
123
- /* ---------- top bar: a real surface with its own ground and a bottom edge ---------- */
124
- .bar {
125
- height: var(--b-top-h);
126
- display: flex;
127
- align-items: center;
128
- gap: 16px;
129
- padding: 0 var(--b-gut);
130
- background: var(--bg-frame);
131
- border-bottom: 1px solid var(--rule-soft);
132
- }
133
- .brand {
134
- display: inline-flex;
135
- align-items: center;
136
- gap: 11px;
137
- text-decoration: none;
138
- border-radius: 999px;
139
- padding: 6px 12px 6px 6px;
140
- margin-left: -6px;
141
- }
142
- .brand:hover { background: var(--b-nav-hover); }
143
- /* the inherited mark, recoloured to chrome through its own tokens so the warm accent
144
- stays reserved for what is live or pressable. Mixed off --ink, so it follows the mode. */
145
- .mark {
146
- width: 34px; height: 25px; display: block; flex: none;
147
- --accent: color-mix(in srgb, var(--ink) 60%, var(--bg));
148
- --accent-deep: color-mix(in srgb, var(--ink) 86%, var(--bg));
149
- --terracotta: color-mix(in srgb, var(--ink) 50%, var(--bg));
150
- }
151
- .wordmark { font-weight: 500; font-size: 15.5px; letter-spacing: -.005em; white-space: nowrap; }
152
- .bar-right { margin-left: auto; display: flex; align-items: center; gap: 4px; }
153
- .bar-nav { display: flex; align-items: center; gap: 2px; }
154
- .bar-nav a, .bar-nav a:visited {
155
- display: inline-flex; align-items: center; min-height: 34px;
156
- padding: 0 14px; border-radius: 999px;
157
- font-size: 13.5px; color: var(--ink-soft); text-decoration: none;
158
- }
159
- .bar-nav a:hover { background: var(--b-nav-hover); color: var(--ink); }
160
- .mode-toggle {
161
- width: 34px; height: 34px; display: grid; place-items: center;
162
- border: 0; border-radius: 999px; background: transparent; color: var(--ink-soft);
163
- cursor: pointer; margin-left: 4px;
164
- }
165
- .mode-toggle:hover { background: var(--b-nav-hover); color: var(--ink); }
166
- .mode-toggle svg { width: 17px; height: 17px; }
167
- .i-moon { display: var(--b-moon); }
168
- .i-sun { display: var(--b-sun); }
169
- .chip {
170
- min-height: 34px; padding: 0 17px; border-radius: 999px;
171
- border: 1px solid var(--rule); background: transparent; color: var(--ink);
172
- font: 500 13.5px var(--font-body); cursor: pointer; margin-left: 6px;
173
- }
174
- .chip:hover { background: var(--b-nav-hover); }
175
-
176
- /* ---------- hero ---------- */
177
- .hero {
178
- min-height: calc(100dvh - var(--b-top-h));
179
- padding: 0 var(--b-gut) var(--b-pad-b);
180
- display: grid;
181
- grid-template-rows: auto 1fr;
182
- }
183
-
184
- /* the pipeline rail: a hairline strip on the page ground, above the void */
185
- .rail {
186
- position: relative;
187
- z-index: 3;
188
- grid-row: 1;
189
- display: flex;
190
- align-items: center;
191
- gap: clamp(10px, 1.6vw, 22px);
192
- margin: 0 calc(var(--b-gut) * -1);
193
- padding: 19px var(--b-gut) 17px;
194
- background: var(--bg);
195
- border-bottom: 1px solid var(--rule-soft);
196
- }
197
- .rail li {
198
- display: inline-flex; align-items: center; gap: 8px;
199
- font: 400 11px/1 var(--font-mono);
200
- text-transform: uppercase; letter-spacing: .15em;
201
- color: var(--ink-faint);
202
- white-space: nowrap;
203
- }
204
- .rail li + li::before {
205
- content: ""; display: block;
206
- width: clamp(14px, 3.2vw, 62px); height: 1px;
207
- background: var(--rule);
208
- margin-right: clamp(10px, 1.6vw, 22px);
209
- }
210
- .rail li[aria-current] {
211
- color: var(--b-lit);
212
- animation: b-warm 900ms cubic-bezier(.16, 1, .3, 1) both;
213
- }
214
- .rail .dot {
215
- width: 6px; height: 6px; border-radius: 999px;
216
- background: var(--accent);
217
- box-shadow: 0 0 12px var(--accent), 0 0 26px color-mix(in srgb, var(--accent) 45%, transparent);
218
- animation: b-warm-dot 1200ms cubic-bezier(.16, 1, .3, 1) both;
219
- }
220
- @keyframes b-warm { from { color: var(--ink-faint); } }
221
- @keyframes b-warm-dot { from { opacity: .18; box-shadow: none; } }
222
-
223
- /* the stage holds the void and the copy; everything below the rail */
224
- .stage {
225
- grid-row: 2;
226
- position: relative;
227
- display: grid;
228
- align-items: end;
229
- }
230
-
231
- /* the black field: the window the chrome composites in. In dark it IS the page. */
232
- .field {
233
- position: absolute;
234
- top: var(--b-field-top);
235
- bottom: var(--b-field-bottom);
236
- left: calc(var(--b-gut) * -1);
237
- right: var(--b-field-right);
238
- background: #000;
239
- border-radius: var(--b-field-radius);
240
- isolation: isolate;
241
- z-index: 0;
242
- }
243
- .blobwrap { position: absolute; inset: 0; border-radius: inherit; overflow: hidden; }
244
- .blobs {
245
- position: absolute; inset: -8% -14% -10% -16%;
246
- background: url(../../../../../.impeccable/mocks/world-assets/r2-chrome-blobs-set.jpg) var(--b-blob-pos) / cover no-repeat;
247
- mix-blend-mode: lighten;
248
- -webkit-mask-image: var(--b-blob-mask);
249
- mask-image: var(--b-blob-mask);
250
- }
251
- .obj {
252
- position: absolute;
253
- left: var(--b-obj-left);
254
- bottom: var(--b-obj-bottom);
255
- width: var(--b-obj-w);
256
- aspect-ratio: 1 / 1;
257
- background: var(--b-obj) center / contain no-repeat;
258
- mix-blend-mode: var(--b-obj-blend);
259
- filter: var(--b-obj-filter);
260
- z-index: 2;
261
- }
262
-
263
- /* leader-line stat callouts, real ledger figures, always over the black field */
264
- .callouts { position: absolute; inset: 0; z-index: 3; }
265
- .callouts li {
266
- position: absolute;
267
- text-shadow: 0 1px 12px rgba(0, 0, 0, .92), 0 0 30px rgba(0, 0, 0, .75);
268
- }
269
- .callouts .fig {
270
- display: block;
271
- font: 300 clamp(23px, 2.05vw, 30px)/1 var(--font-display);
272
- letter-spacing: -.012em;
273
- font-variant-numeric: tabular-nums;
274
- color: #fff;
275
- }
276
- .callouts .cap {
277
- display: block; margin-top: 8px;
278
- font: 400 10px/1.2 var(--font-mono);
279
- text-transform: uppercase; letter-spacing: .15em;
280
- color: rgba(255, 255, 255, .72);
281
- white-space: nowrap;
282
- }
283
- .callouts li::after {
284
- content: ""; position: absolute; top: 13px; height: 1px; width: var(--b-leader);
285
- }
286
- .lead-r::after {
287
- left: calc(100% + 14px);
288
- background: linear-gradient(90deg, rgba(255, 255, 255, .55), rgba(255, 255, 255, 0));
289
- }
290
- .lead-l::after {
291
- right: calc(100% + 14px);
292
- background: linear-gradient(270deg, rgba(255, 255, 255, .55), rgba(255, 255, 255, 0));
293
- }
294
- .c1 { top: 15%; left: 5%; }
295
- .c2 { top: 40%; right: 6%; text-align: right; }
296
- .c3 { bottom: 15%; right: 8%; text-align: right; }
297
-
298
- /* the copy column: bottom-right, right-aligned, the headline overhanging the chrome in dark */
299
- .copy {
300
- position: relative;
301
- z-index: 3;
302
- justify-self: end;
303
- align-self: end;
304
- width: var(--b-copy-w);
305
- text-align: right;
306
- text-shadow: var(--b-halo);
307
- }
308
- .h1 {
309
- margin-left: var(--b-h1-shift);
310
- font: 300 var(--b-h1-size)/1.03 var(--font-display);
311
- letter-spacing: -.028em;
312
- text-transform: lowercase;
313
- }
314
- .h1 span { display: block; }
315
- .lede {
316
- margin: clamp(16px, 2vh, 26px) 0 0 auto;
317
- max-width: 40ch;
318
- font-size: clamp(15px, 1.15vw, 17.5px);
319
- line-height: 1.6;
320
- color: var(--ink-soft);
321
- }
322
-
323
- /* the two doors, joined in one pill, equal halves */
324
- .doors {
325
- display: flex;
326
- gap: 6px;
327
- margin: clamp(22px, 3.2vh, 38px) 0 0 auto;
328
- width: min(100%, 520px);
329
- padding: 6px;
330
- border-radius: 999px;
331
- background: var(--b-pill-bg);
332
- border: 1px solid var(--b-pill-edge);
333
- box-shadow: var(--b-pill-shadow);
334
- -webkit-backdrop-filter: blur(10px);
335
- backdrop-filter: blur(10px);
336
- }
337
- .door, .door:visited {
338
- flex: 1 1 0;
339
- min-height: 50px;
340
- display: grid;
341
- place-items: center;
342
- border-radius: 999px;
343
- text-decoration: none;
344
- font: 500 14.5px var(--font-body);
345
- white-space: nowrap;
346
- text-shadow: none;
347
- transition: transform 180ms cubic-bezier(.16, 1, .3, 1), background-color 180ms ease;
348
- }
349
- .door-join, .door-join:visited { color: var(--ink); }
350
- .door-join:hover { background: var(--b-nav-hover); }
351
- .door-start, .door-start:visited { background: var(--accent); color: var(--accent-on); }
352
- .door-start:hover { background: var(--accent-lift); }
353
- .door:active { transform: translateY(1px); }
354
-
355
- /* ---------- the quiet band and the footer ---------- */
356
- .band {
357
- padding: clamp(30px, 6vh, 60px) var(--b-gut);
358
- border-top: 1px solid var(--rule-soft);
359
- }
360
- .band p {
361
- max-width: 62ch;
362
- font-size: clamp(15px, 1.1vw, 17px);
363
- color: var(--ink-soft);
364
- }
365
- .foot {
366
- display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px 20px;
367
- padding: 0 var(--b-gut) clamp(30px, 5vh, 54px);
368
- font-size: 13.5px;
369
- color: var(--ink-faint);
370
- }
371
- .foot a { color: var(--ink-soft); text-decoration: none; border-bottom: 1px solid var(--rule); padding-bottom: 1px; }
372
- .foot a:hover { color: var(--ink); border-bottom-color: var(--ink); }
373
-
374
- /* ---------- narrow: one column, the void becomes a black card under the rail ---------- */
375
- @media (max-width: 900px) {
376
- :root { --b-top-h: 60px; }
377
- .rail { gap: 8px; padding: 15px var(--b-gut) 14px; }
378
- .rail li { font-size: 10px; letter-spacing: .12em; }
379
- .rail li + li::before { width: 10px; margin-right: 8px; }
380
-
381
- .stage { display: flex; flex-direction: column; align-items: stretch; }
382
- .field {
383
- position: relative;
384
- top: auto; bottom: auto; right: auto;
385
- left: auto;
386
- margin: 20px calc(var(--b-gut) * -1) 0;
387
- height: 236px;
388
- border-radius: 0;
389
- overflow: hidden;
390
- }
391
- .blobs { inset: -14% -6% -10% -6%; }
392
- .obj {
393
- left: 50%; right: auto; bottom: auto; top: 4px;
394
- width: min(58vw, 232px);
395
- transform: translateX(-50%);
396
- filter: none;
397
- }
398
- .callouts {
399
- inset: auto 0 0 0;
400
- display: flex; justify-content: space-between; align-items: flex-end;
401
- gap: 10px;
402
- padding: 0 var(--b-gut) 16px;
403
- }
404
- /* the figures sit on the chrome at this width, so the band gets a real footing under them */
405
- .callouts::before {
406
- content: ""; position: absolute; inset: auto 0 0 0; height: 104px; z-index: -1;
407
- background: linear-gradient(to top, rgba(0, 0, 0, .92), rgba(0, 0, 0, .62) 46%, rgba(0, 0, 0, 0));
408
- }
409
- .callouts li { position: static; text-align: left; }
410
- .callouts li::after { display: none; }
411
- .callouts .fig { font-size: 20px; }
412
- .callouts .cap { margin-top: 5px; font-size: 8.5px; letter-spacing: .11em; }
413
-
414
- .copy {
415
- width: 100%;
416
- text-align: left;
417
- padding-top: 24px;
418
- }
419
- .h1 { margin-left: 0; font-size: clamp(31px, 8.6vw, 40px); }
420
- .h1 span { display: inline; }
421
- .lede { margin-left: 0; font-size: 15px; }
422
- .doors { flex-direction: column; margin-left: 0; width: 100%; border-radius: 26px; }
423
- .door { min-height: 52px; border-radius: 22px; }
424
- }
425
-
426
- @media (max-width: 560px) {
427
- .wordmark {
428
- position: absolute; width: 1px; height: 1px;
429
- overflow: hidden; clip-path: inset(50%); white-space: nowrap;
430
- }
431
- .bar { gap: 8px; }
432
- .brand { padding: 6px; }
433
- .bar-nav a { padding: 0 10px; font-size: 13px; }
434
- .chip { padding: 0 14px; font-size: 13px; margin-left: 4px; }
435
- }
436
-
437
- @media (max-width: 420px) {
438
- .field { height: 214px; }
439
- .obj { width: min(56vw, 200px); }
440
- .callouts .cap { font-size: 8px; letter-spacing: .08em; }
441
- }
442
- </style>
443
- </head>
444
- <body>
445
-
446
- <header class="bar">
447
- <a class="brand" href="/">
448
- <svg class="mark bongos" viewBox="0 0 440 320" aria-hidden="true" focusable="false">
449
- <defs>
450
- <linearGradient id="shellBig" x1="0" y1="0" x2="1" y2="0.35">
451
- <stop offset="0%" stop-color="var(--accent-deep)"/><stop offset="16%" stop-color="var(--accent)"/>
452
- <stop offset="48%" stop-color="var(--accent)"/><stop offset="86%" stop-color="var(--accent-deep)"/>
453
- <stop offset="100%" stop-color="var(--accent-deep)"/>
454
- </linearGradient>
455
- <linearGradient id="shellSml" x1="0" y1="0" x2="1" y2="0.35">
456
- <stop offset="0%" stop-color="var(--accent-deep)"/><stop offset="18%" stop-color="var(--terracotta)"/>
457
- <stop offset="55%" stop-color="var(--terracotta)"/><stop offset="100%" stop-color="var(--accent-deep)"/>
458
- </linearGradient>
459
- <radialGradient id="skin" cx="0.36" cy="0.26" r="0.9">
460
- <stop offset="0%" stop-color="var(--skin-hi)"/><stop offset="58%" stop-color="var(--skin-mid)"/>
461
- <stop offset="100%" stop-color="var(--skin-lo)"/>
462
- </radialGradient>
463
- </defs>
464
- <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)"/>
465
- <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"/>
466
- <g class="drumBig">
467
- <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)"/>
468
- <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"/>
469
- <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"/>
470
- <ellipse cx="150" cy="121" rx="80" ry="29" fill="var(--accent-deep)"/>
471
- <ellipse cx="150" cy="117" rx="80" ry="29" fill="var(--accent)"/>
472
- <ellipse cx="150" cy="117" rx="80" ry="29" fill="#fff" opacity=".13"/>
473
- <ellipse cx="150" cy="118" rx="70" ry="24" fill="url(#skin)"/>
474
- <ellipse cx="150" cy="118" rx="70" ry="24" fill="none" stroke="var(--ink)" stroke-opacity=".09" stroke-width="1.4"/>
475
- <g fill="var(--accent-deep)">
476
- <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"/>
477
- <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"/>
478
- </g>
479
- </g>
480
- <g class="drumSml">
481
- <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)"/>
482
- <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"/>
483
- <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"/>
484
- <ellipse cx="296" cy="137" rx="60" ry="22" fill="var(--accent-deep)"/>
485
- <ellipse cx="296" cy="133" rx="60" ry="22" fill="var(--terracotta)"/>
486
- <ellipse cx="296" cy="133" rx="60" ry="22" fill="#fff" opacity=".13"/>
487
- <ellipse cx="296" cy="134" rx="51" ry="18" fill="url(#skin)"/>
488
- <ellipse cx="296" cy="134" rx="51" ry="18" fill="none" stroke="var(--ink)" stroke-opacity=".09" stroke-width="1.4"/>
489
- <g fill="var(--accent-deep)">
490
- <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"/>
491
- <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"/>
492
- </g>
493
- </g>
494
- </svg>
495
- <span class="wordmark">Cloud Bongos</span>
496
- </a>
497
-
498
- <div class="bar-right">
499
- <nav class="bar-nav" aria-label="Main">
500
- <a href="/projects">Projects</a>
501
- <a href="/builders">Hall</a>
502
- </nav>
503
- <button class="mode-toggle" id="mode" type="button" aria-label="Toggle light or dark" aria-pressed="false">
504
- <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" focusable="false">
505
- <path d="M20 14.2A8.4 8.4 0 0 1 9.8 4 8.4 8.4 0 1 0 20 14.2Z"/>
506
- </svg>
507
- <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" focusable="false">
508
- <circle cx="12" cy="12" r="4.2"/>
509
- <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"/>
510
- </svg>
511
- </button>
512
- <button class="chip" type="button">Sign in</button>
513
- </div>
514
- </header>
515
-
516
- <main>
517
- <section class="hero">
518
-
519
- <ol class="rail" aria-label="How work moves">
520
- <li>claim</li>
521
- <li aria-current="step"><span class="dot" aria-hidden="true"></span>build</li>
522
- <li>grade</li>
523
- <li>ship</li>
524
- <li>credit</li>
525
- </ol>
526
-
527
- <div class="stage">
528
- <div class="field">
529
- <div class="blobwrap"><div class="blobs"></div></div>
530
- <ul class="callouts">
531
- <li class="c1 lead-r"><span class="fig">1,107</span><span class="cap">tasks shipped</span></li>
532
- <li class="c2 lead-l"><span class="fig">69,751</span><span class="cap">credits of value</span></li>
533
- <li class="c3 lead-l"><span class="fig">6</span><span class="cap">builders</span></li>
534
- </ul>
535
- <div class="obj"></div>
536
- </div>
537
-
538
- <div class="copy">
539
- <h1 class="h1"><span>Building Digitally,</span> <span>as simple as Bongos.</span></h1>
540
- <p class="lede">AI agents claim tasks and ship the code. You set the direction and the gates.</p>
541
- <div class="doors">
542
- <a class="door door-join" href="/projects">Find a project to join</a>
543
- <a class="door door-start" href="/projects?view=new">Start a project</a>
544
- </div>
545
- </div>
546
- </div>
547
-
548
- </section>
549
-
550
- <section class="band" aria-label="How the platform works">
551
- <p>Every change is a claimed task in one ledger, graded on the real diff, and paid only once it is live.</p>
552
- </section>
553
- </main>
554
-
555
- <footer class="foot">
556
- <p>Built by agents, on Cloud Bongos.</p>
557
- <a href="https://www.gnu.org/licenses/agpl-3.0.html">Open source (AGPL-3.0)</a>
558
- </footer>
559
-
560
- <script>
561
- (function () {
562
- var root = document.documentElement;
563
- var btn = document.getElementById('mode');
564
- function isDark() {
565
- var a = root.getAttribute('data-mode');
566
- if (a === 'dark') return true;
567
- if (a === 'light') return false;
568
- return window.matchMedia('(prefers-color-scheme: dark)').matches;
569
- }
570
- function sync() { btn.setAttribute('aria-pressed', isDark() ? 'true' : 'false'); }
571
- btn.addEventListener('click', function () {
572
- var next = isDark() ? 'light' : 'dark';
573
- root.setAttribute('data-mode', next);
574
- try { localStorage.setItem('cb-color-mode', next); } catch (e) {}
575
- sync();
576
- });
577
- sync();
578
- })();
579
- </script>
580
- </body>
581
- </html>