@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,421 +0,0 @@
1
- <!doctype html>
2
- <html lang="en" data-mode="dark">
3
- <head>
4
- <meta charset="utf-8">
5
- <meta name="viewport" content="width=device-width,initial-scale=1">
6
- <title>The planet picker on the manage page, in the world</title>
7
- <link rel="icon" href="data:,">
8
- <link rel="preconnect" href="https://fonts.googleapis.com">
9
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
- <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400&family=Manrope:wght@300;400;500;600&display=swap">
11
- <link rel="stylesheet" href="../../../../modules/public-landing/public/assets/cosmos.css">
12
- <style>
13
- body{
14
- /* The composition round for task 1003347 (docs/design/projects-hub-direction-v2.md §16): the
15
- planet picker in the manage page's "its planet" section, the slot task 1003345 left. cosmos.css
16
- carries the hub's contract and the planets (their crops, materials and styles); the manage
17
- frame is mine.html's (§14.1, built); this sheet adds only the picker's composition. Dark only
18
- (ADR 0204). Every colour is a token. */
19
- --orb-shadow:opacity(1);
20
- }
21
- /* ── the planet, docked: the sky's object, relative instead of absolute ── */
22
- .mock .worldOrb{position:relative;left:auto;top:auto;transform:none;display:block;cursor:default;}
23
- .mock .worldOrb .disc{display:block;margin:0;}
24
-
25
- /* ── the manage frame (mine.html §14.1, as built) ── */
26
- .view{max-width:1180px;margin:0 auto;padding:34px var(--gutter) 60px;}
27
- .vTitle{font-family:var(--font-display);font-weight:300;font-size:clamp(28px,3.4vw,44px);letter-spacing:-.035em;line-height:1.04;text-transform:lowercase;color:var(--ink);margin:0;}
28
- .vLede{font-size:15.5px;line-height:1.5;color:var(--ink-soft);max-width:62ch;margin:0 0 22px;}
29
- .backRow{font-family:var(--label-face);font-size:var(--label-size);letter-spacing:var(--label-space);text-transform:uppercase;}
30
- .backRow a{color:var(--ink-faint);text-decoration:none;display:inline-block;padding:3px 0;min-height:24px;line-height:18px;}
31
- .backRow a:hover{color:var(--ink);}
32
- .mHead{display:grid;grid-template-columns:auto 1fr;gap:0 26px;align-items:center;padding:22px 0 8px;}
33
- .mHead .titleRow{display:flex;align-items:baseline;gap:16px;flex-wrap:wrap;}
34
- .ledger{display:grid;grid-template-columns:172px 1fr;gap:0 22px;margin:14px 0 0;}
35
- .ledger > *{border-top:1px solid var(--rule-soft);padding:13px 0;}
36
- .ledger .k{font-family:var(--label-face);font-size:var(--label-size);letter-spacing:var(--label-space);text-transform:uppercase;color:var(--ink-faint);padding-top:16px;}
37
- .ledger .v{font-size:15px;line-height:1.5;color:var(--ink);}
38
- .ledger .v a{font-family:var(--font-mono);font-size:13.5px;color:var(--ink-soft);text-decoration:none;display:inline-block;padding:3px 0;min-height:24px;line-height:18px;}
39
- .ledger .v a:hover{color:var(--ink);text-decoration:underline;}
40
- .ledger .v small{display:block;font-size:13px;color:var(--ink-soft);}
41
- .swDot{display:inline-block;width:11px;height:11px;border-radius:50%;background:var(--sw);border:1px solid var(--rule);vertical-align:-1px;margin-right:8px;}
42
- .rail{display:grid;grid-template-columns:repeat(3,1fr);gap:0 10px;list-style:none;margin:0;padding:0;}
43
- .rail li{position:relative;border-top:1px solid var(--rule);padding:12px 0 0;font-family:var(--label-face);font-size:var(--label-size);letter-spacing:var(--label-space);text-transform:uppercase;color:var(--ink-faint);line-height:1.3;}
44
- .rail li::before{content:"";position:absolute;top:-4px;left:0;width:7px;height:7px;border-radius:50%;border:1px solid var(--rule);background:var(--bg);}
45
- .rail.isLive li.done{border-top-color:var(--ok);color:var(--ok);}
46
- .rail.isLive li.done::before{background:var(--ok);border-color:var(--ok);}
47
- .railNote{grid-column:1/-1;margin:8px 0 0;font-family:var(--font-body);font-size:13px;line-height:1.45;color:var(--ink-soft);}
48
- .railWrap{display:grid;gap:0;}
49
- .doors{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-start;align-items:center;}
50
- .door{display:inline-flex;align-items:center;justify-content:center;min-height:40px;padding:0 18px;border:1px solid var(--rule);border-radius:var(--radius-pill);background:none;font-family:var(--font-body);font-size:14.5px;color:var(--ink);text-transform:lowercase;text-decoration:none;cursor:pointer;white-space:nowrap;}
51
- .door:hover{border-color:var(--ink-faint);}
52
- .door.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-on);font-weight:500;}
53
- .door.primary:hover{background:color-mix(in srgb,var(--accent) 88%,var(--ink));}
54
- .door.danger{border-color:color-mix(in srgb,var(--err) 45%,transparent);color:var(--err);}
55
- .door.text{border-color:transparent;color:var(--ink-soft);text-decoration:underline;text-underline-offset:4px;padding:0 6px;}
56
- .door.text:hover{color:var(--ink);border-color:transparent;}
57
- .mSec{border-top:1px solid var(--rule);padding:30px 0 34px;display:grid;grid-template-columns:minmax(200px,300px) 1fr;gap:0 40px;}
58
- .mSec h2{font-family:var(--font-display);font-weight:300;font-size:clamp(22px,2.4vw,28px);letter-spacing:-.03em;line-height:1.08;text-transform:lowercase;color:var(--ink);margin:0 0 8px;}
59
- .mSec .why{font-size:13.5px;line-height:1.5;color:var(--ink-faint);max-width:34ch;margin:0;}
60
- .mSec .body{display:grid;gap:16px;align-content:start;}
61
- .choice{display:grid;grid-template-columns:repeat(2,1fr);border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);}
62
- .choice label{display:grid;gap:6px;padding:16px 18px 18px;border-left:1px solid var(--rule-soft);cursor:pointer;color:var(--ink-soft);}
63
- .choice label:first-child{border-left:0;padding-left:0;}
64
- .choice .ch{display:flex;align-items:center;gap:10px;font-family:var(--font-body);font-weight:500;font-size:15px;color:var(--ink);}
65
- .choice .ch::before{content:"";width:7px;height:7px;border-radius:50%;border:1px solid var(--rule);background:var(--bg);flex:none;}
66
- .choice label.on .ch::before{background:var(--accent);border-color:var(--accent);outline:4px solid color-mix(in srgb,var(--accent) 22%,transparent);}
67
- .choice .cb{font-size:13px;line-height:1.45;color:var(--ink-faint);}
68
- .runs{font-family:var(--label-face);font-size:var(--label-size);letter-spacing:var(--label-space);text-transform:uppercase;color:var(--ink-faint);}
69
- .runs b{color:var(--ok);font-weight:400;}
70
- .typed{display:grid;gap:10px;max-width:440px;}
71
- .hairField{display:flex;align-items:center;gap:12px;border-bottom:1px solid var(--rule);padding:10px 0;}
72
- .hairField input{flex:1;min-width:0;background:none;border:0;font-family:var(--font-body);font-size:15.5px;color:var(--ink);padding:4px 0;}
73
- .hairField input::placeholder{color:var(--ink-faint);}
74
- .hairField input:focus{outline:none;}
75
- .hairField:focus-within{border-bottom-color:var(--ink);}
76
- input.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);}
77
-
78
- /* ── THE PICKER: the preview planet on the left, the four bands on the right ── */
79
- .pick{display:grid;grid-template-columns:168px 1fr;gap:0 34px;align-items:start;}
80
- .pick .preview{display:grid;gap:12px;justify-items:center;padding-top:6px;}
81
- .pick .preview .worldOrb{--d:132px;}
82
- .pick .words{font-size:14px;line-height:1.45;color:var(--ink);text-align:center;max-width:168px;}
83
- .pick .words small{display:block;font-size:12.5px;color:var(--ink-soft);}
84
- .bands{display:grid;border-bottom:1px solid var(--rule);}
85
- .band{display:grid;grid-template-columns:88px 1fr;gap:0 18px;align-items:center;border-top:1px solid var(--rule);}
86
- .band:first-child{border-top-color:var(--rule);}
87
- .band .bl{font-family:var(--label-face);font-size:var(--label-size);letter-spacing:var(--label-space);text-transform:uppercase;color:var(--ink-faint);padding:14px 0;}
88
- /* v1 · the bands: hairline cells of one band, a word each, the chosen one carries the dot */
89
- .cells{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;}
90
- .cells label{display:flex;align-items:center;gap:10px;min-height:48px;padding:10px 16px;border-left:1px solid var(--rule-soft);cursor:pointer;font-family:var(--font-body);font-size:14.5px;color:var(--ink-soft);}
91
- .cells label::before{content:"";width:7px;height:7px;border-radius:50%;border:1px solid var(--rule);background:var(--bg);flex:none;}
92
- .cells label.on{color:var(--ink);}
93
- .cells label.on::before{background:var(--accent);border-color:var(--accent);outline:4px solid color-mix(in srgb,var(--accent) 22%,transparent);}
94
- .cells label:hover{color:var(--ink);}
95
- /* the colour: five swatches, the chosen one ringed by a hairline of the ink (a swatch is its own colour) */
96
- .swatches{display:flex;gap:14px;align-items:center;padding:12px 0 12px 16px;border-left:1px solid var(--rule-soft);}
97
- .sw{position:relative;width:28px;height:28px;border-radius:50%;border:1px solid var(--rule);background:var(--sw);cursor:pointer;}
98
- .sw.on{outline:1px solid var(--ink);outline-offset:3px;}
99
- /* v2 · the objects: the cell IS the planet, in the current material and colour; the chosen one
100
- sits in the relationship ring (a hairline circle behind the object, DESIGN.md), the word under it */
101
- .objs label{display:grid;justify-items:center;gap:6px;padding:12px 8px 12px;border-left:1px solid var(--rule-soft);cursor:pointer;}
102
- .objs label::before{display:none;}
103
- .objs .obj{position:relative;display:grid;place-items:center;width:78px;height:78px;}
104
- .objs label .worldOrb{--d:60px;}
105
- .objs label .nm{font-family:var(--label-face);font-size:11px;letter-spacing:var(--label-space);text-transform:uppercase;color:var(--ink-faint);}
106
- .objs label.on .nm{color:var(--ink);}
107
- .objs label .ring{position:absolute;inset:0;border-radius:50%;border:1px solid var(--accent);opacity:0;}
108
- .objs label.on .ring{opacity:1;}
109
- .objs label .worldOrb{position:relative;z-index:1;}
110
- .pickDoors{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-top:4px;}
111
- .receipt{margin:0;font-size:14px;line-height:1.5;color:var(--ok);}
112
- .receipt.note{color:var(--ink-soft);}
113
-
114
- /* ── the sheet furniture ── */
115
- section[data-state]{display:none;}
116
- body[data-state="bands"] section[data-state="bands"],
117
- body[data-state="objects"] section[data-state="objects"],
118
- body[data-state="saved"] section[data-state="saved"]{display:block;}
119
- .vh{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;}
120
- .skip{position:absolute;left:12px;top:-60px;background:var(--bg-card);color:var(--ink);padding:11px 18px;border-radius:999px;}
121
- .skip:focus{top:12px;}
122
- .bar{height:var(--top-h);display:flex;align-items:center;padding:0 var(--gutter);border-bottom:1px solid var(--rule);font-family:var(--font-body);font-weight:500;font-size:17px;letter-spacing:-.015em;color:var(--ink);}
123
- .mock .foot{padding:18px var(--gutter);font-size:14px;color:var(--ink-soft);text-align:center;}
124
- a:focus-visible,button:focus-visible,label:focus-within{outline:2px solid var(--accent);outline-offset:3px;}
125
-
126
- @media (max-width:900px){
127
- .mHead{grid-template-columns:1fr;gap:14px;}
128
- .ledger{grid-template-columns:1fr;gap:0;}
129
- .ledger .k{border-top:1px solid var(--rule-soft);padding-bottom:0;}
130
- .ledger .v{border-top:0;padding-top:6px;}
131
- .mSec{grid-template-columns:1fr;gap:14px;}
132
- .choice{grid-template-columns:1fr;}
133
- .choice label{border-left:0;padding-left:0;border-top:1px solid var(--rule-soft);}
134
- .choice label:first-child{border-top:0;}
135
- /* the picker stacks: the preview above; each band's label above its choices; the cells become
136
- the filter pills (hairline, the chosen one inverted to ink), so four bands stay one screen */
137
- .pick{grid-template-columns:1fr;gap:22px 0;}
138
- .pick .preview{justify-items:start;}
139
- .pick .words{text-align:left;max-width:none;}
140
- .band{grid-template-columns:1fr;gap:0;}
141
- .band .bl{padding:14px 0 6px;}
142
- .cells{display:flex;flex-wrap:wrap;gap:8px;padding:0 0 14px;}
143
- .cells label{min-height:36px;padding:0 14px;border:1px solid var(--rule);border-radius:var(--radius-pill);gap:0;font-size:14px;}
144
- .cells label::before{display:none;}
145
- .cells label.on{background:var(--ink);color:var(--bg);border-color:var(--ink);}
146
- .objs label{border:0;padding:6px 4px 8px;}
147
- .objs label.on{background:none;}
148
- .objs label .worldOrb{--d:52px;}
149
- .objs .obj{width:66px;height:66px;}
150
- .swatches{padding:6px 0 14px;border-left:0;}
151
- }
152
- </style>
153
- </head>
154
- <body class="mock" data-state="bands">
155
- <!--
156
- The planet picker on the manage page, the composition round (task 1003347, goal 1000080).
157
- ?state=bands v1 the bands: the preview planet, then shape, material, style and colour as hairline
158
- cells of one band each, a word per cell, the chosen one carrying the dot; the platform's
159
- own pick shown first, "chosen for it by the platform"
160
- ?state=objects v2 the objects: the same four bands, but the cell IS the planet, drawn in the current
161
- material and colour; the chosen one sits in the relationship ring; the word under it
162
- ?state=saved after the save: the receipt under the doors, the head and the ledger row repainted,
163
- "your choice", and the door back to the platform's pick
164
- The card's backdrop is not on this sheet: the poster's plate is the project's own art today, and a
165
- platform-drawn plate set is an art round of its own; deferred, see §16.
166
- -->
167
- <a class="skip" href="#main">Skip to content</a>
168
- <header class="bar">Cloud Bongos</header>
169
- <main id="main">
170
- <h1 class="vh">The planet picker on the manage page</h1>
171
-
172
- <section data-state="bands">
173
- <div class="view">
174
- <p class="backRow"><a href="#">your projects</a></p>
175
- <div class="mHead">
176
- <span class="worldOrb" data-shape="pair" data-material="gold" data-style="wash" style="--acc:var(--terracotta);--d:96px"><span class="disc"></span></span>
177
- <div>
178
- <div class="titleRow"><h2 class="vTitle">demo</h2><span class="chip live"><span class="cdot"></span>live <span class="rec">checked 3m ago</span></span></div>
179
- <p class="vLede" style="margin:8px 0 0">Its address, its repository, what the platform last verified about it, and the controls you have today.</p>
180
- </div>
181
- </div>
182
- <div class="ledger">
183
- <span class="k">repository</span><span class="v"><a href="#">builder/demo</a></span>
184
- <span class="k">address</span><span class="v">Answering at <a href="#">demo.cloudbongos.com</a><small>last answered 3 minutes ago</small></span>
185
- <span class="k">planet</span><span class="v"><span class="swDot" style="--sw:var(--terracotta)"></span>the bongo pair in gold, washed<small>chosen for it by the platform. Pick your own below.</small></span>
186
- </div>
187
- <div class="railWrap" style="margin:22px 0 0;max-width:520px"><ul class="rail isLive"><li class="done">Request filed</li><li class="done">Standing it up</li><li class="done">Live</li></ul><p class="railNote">Up and answering since 1 Aug.</p></div>
188
- <div class="doors" style="margin:22px 0 34px"><a class="door" href="#">open site</a><button type="button" class="door">restart it</button></div>
189
-
190
- <div class="mSec">
191
- <div><h2>who can see it</h2><p class="why">The platform's request. What the project runs is read back from its own manifest.</p></div>
192
- <div class="body">
193
- <div class="choice">
194
- <label class="on"><input class="vh" type="radio" name="vis" checked><span class="ch">Everyone</span><span class="cb">Anyone can open this project's pages. Signing in is only needed to take part.</span></label>
195
- <label><input class="vh" type="radio" name="vis"><span class="ch">Only signed-in members</span><span class="cb">Visitors meet a sign-in door first.</span></label>
196
- </div>
197
- <p class="runs">runs <b>everyone</b>, read from the project 2m ago</p>
198
- </div>
199
- </div>
200
-
201
- <div class="mSec">
202
- <div><h2>its planet</h2><p class="why">How this project shows on the sky, in your list and on its card. Saved here, the platform draws it that way everywhere; nothing on your project restarts for it.</p></div>
203
- <div class="body">
204
- <div class="pick">
205
- <div class="preview">
206
- <span class="worldOrb" data-shape="pair" data-material="gold" data-style="wash" style="--acc:var(--terracotta)"><span class="disc"></span></span>
207
- <p class="words">the bongo pair in gold, washed<small>the platform's pick for it</small></p>
208
- </div>
209
- <div class="bands">
210
- <div class="band"><span class="bl">shape</span>
211
- <div class="cells" role="radiogroup" aria-label="Shape">
212
- <label><input class="vh" type="radio" name="shape">the blob</label>
213
- <label class="on"><input class="vh" type="radio" name="shape" checked>the bongo pair</label>
214
- <label><input class="vh" type="radio" name="shape">the bead</label>
215
- </div>
216
- </div>
217
- <div class="band"><span class="bl">material</span>
218
- <div class="cells" role="radiogroup" aria-label="Material">
219
- <label><input class="vh" type="radio" name="material">chrome</label>
220
- <label><input class="vh" type="radio" name="material">frost</label>
221
- <label class="on"><input class="vh" type="radio" name="material" checked>gold</label>
222
- <label><input class="vh" type="radio" name="material">obsidian</label>
223
- </div>
224
- </div>
225
- <div class="band"><span class="bl">style</span>
226
- <div class="cells" role="radiogroup" aria-label="Style">
227
- <label><input class="vh" type="radio" name="style">tinted</label>
228
- <label class="on"><input class="vh" type="radio" name="style" checked>washed</label>
229
- <label><input class="vh" type="radio" name="style">plain</label>
230
- </div>
231
- </div>
232
- <div class="band"><span class="bl">colour</span>
233
- <div class="swatches" role="radiogroup" aria-label="Colour">
234
- <label class="sw" style="--sw:var(--sea)"><input class="vh" type="radio" name="colour"><span class="vh">sea</span></label>
235
- <label class="sw on" style="--sw:var(--terracotta)"><input class="vh" type="radio" name="colour" checked><span class="vh">terracotta</span></label>
236
- <label class="sw" style="--sw:var(--gold-soft)"><input class="vh" type="radio" name="colour"><span class="vh">soft gold</span></label>
237
- <label class="sw" style="--sw:var(--sun-lit)"><input class="vh" type="radio" name="colour"><span class="vh">sunlit</span></label>
238
- <label class="sw" style="--sw:var(--accent)"><input class="vh" type="radio" name="colour"><span class="vh">the accent</span></label>
239
- </div>
240
- </div>
241
- </div>
242
- </div>
243
- <div class="pickDoors"><button type="button" class="door primary">save its planet</button></div>
244
- </div>
245
- </div>
246
-
247
- <div class="mSec">
248
- <div><h2>take it offline</h2><p class="why">Stops the server and its nightly backups. It stays in your list, marked torn down, and the repository is untouched.</p></div>
249
- <div class="body">
250
- <div class="typed">
251
- <label class="hairField"><input type="text" placeholder="Type the project's name to confirm" aria-label="Type the project's name to confirm"></label>
252
- <div class="doors"><button type="button" class="door danger">tear it down</button></div>
253
- </div>
254
- </div>
255
- </div>
256
- </div>
257
- </section>
258
-
259
- <section data-state="objects">
260
- <div class="view">
261
- <p class="backRow"><a href="#">your projects</a></p>
262
- <div class="mHead">
263
- <span class="worldOrb" data-shape="pair" data-material="gold" data-style="wash" style="--acc:var(--terracotta);--d:96px"><span class="disc"></span></span>
264
- <div>
265
- <div class="titleRow"><h2 class="vTitle">demo</h2><span class="chip live"><span class="cdot"></span>live <span class="rec">checked 3m ago</span></span></div>
266
- <p class="vLede" style="margin:8px 0 0">Its address, its repository, what the platform last verified about it, and the controls you have today.</p>
267
- </div>
268
- </div>
269
- <div class="ledger">
270
- <span class="k">repository</span><span class="v"><a href="#">builder/demo</a></span>
271
- <span class="k">address</span><span class="v">Answering at <a href="#">demo.cloudbongos.com</a><small>last answered 3 minutes ago</small></span>
272
- <span class="k">planet</span><span class="v"><span class="swDot" style="--sw:var(--terracotta)"></span>the bongo pair in gold, washed<small>chosen for it by the platform. Pick your own below.</small></span>
273
- </div>
274
- <div class="doors" style="margin:22px 0 34px"><a class="door" href="#">open site</a><button type="button" class="door">restart it</button></div>
275
-
276
- <div class="mSec">
277
- <div><h2>its planet</h2><p class="why">How this project shows on the sky, in your list and on its card. Saved here, the platform draws it that way everywhere; nothing on your project restarts for it.</p></div>
278
- <div class="body">
279
- <div class="pick">
280
- <div class="preview">
281
- <span class="worldOrb" data-shape="pair" data-material="gold" data-style="wash" style="--acc:var(--terracotta)"><span class="disc"></span></span>
282
- <p class="words">the bongo pair in gold, washed<small>the platform's pick for it</small></p>
283
- </div>
284
- <div class="bands">
285
- <div class="band"><span class="bl">shape</span>
286
- <div class="cells objs" role="radiogroup" aria-label="Shape">
287
- <label><input class="vh" type="radio" name="shape2"><span class="obj"><span class="ring"></span><span class="worldOrb" data-shape="blob" data-material="gold" data-style="wash" style="--acc:var(--terracotta)"><span class="disc"></span></span></span><span class="nm">the blob</span></label>
288
- <label class="on"><input class="vh" type="radio" name="shape2" checked><span class="obj"><span class="ring"></span><span class="worldOrb" data-shape="pair" data-material="gold" data-style="wash" style="--acc:var(--terracotta)"><span class="disc"></span></span></span><span class="nm">the pair</span></label>
289
- <label><input class="vh" type="radio" name="shape2"><span class="obj"><span class="ring"></span><span class="worldOrb" data-shape="bead" data-material="gold" data-style="wash" style="--acc:var(--terracotta)"><span class="disc"></span></span></span><span class="nm">the bead</span></label>
290
- </div>
291
- </div>
292
- <div class="band"><span class="bl">material</span>
293
- <div class="cells objs" role="radiogroup" aria-label="Material">
294
- <label><input class="vh" type="radio" name="material2"><span class="obj"><span class="ring"></span><span class="worldOrb" data-shape="pair" data-style="wash" style="--acc:var(--terracotta)"><span class="disc"></span></span></span><span class="nm">chrome</span></label>
295
- <label><input class="vh" type="radio" name="material2"><span class="obj"><span class="ring"></span><span class="worldOrb" data-shape="pair" data-material="frost" data-style="wash" style="--acc:var(--terracotta)"><span class="disc"></span></span></span><span class="nm">frost</span></label>
296
- <label class="on"><input class="vh" type="radio" name="material2" checked><span class="obj"><span class="ring"></span><span class="worldOrb" data-shape="pair" data-material="gold" data-style="wash" style="--acc:var(--terracotta)"><span class="disc"></span></span></span><span class="nm">gold</span></label>
297
- <label><input class="vh" type="radio" name="material2"><span class="obj"><span class="ring"></span><span class="worldOrb" data-shape="pair" data-material="obsidian" data-style="wash" style="--acc:var(--terracotta)"><span class="disc"></span></span></span><span class="nm">obsidian</span></label>
298
- </div>
299
- </div>
300
- <div class="band"><span class="bl">style</span>
301
- <div class="cells objs" role="radiogroup" aria-label="Style">
302
- <label><input class="vh" type="radio" name="style2"><span class="obj"><span class="ring"></span><span class="worldOrb" data-shape="pair" data-material="gold" data-style="tint" style="--acc:var(--terracotta)"><span class="disc"></span></span></span><span class="nm">tinted</span></label>
303
- <label class="on"><input class="vh" type="radio" name="style2" checked><span class="obj"><span class="ring"></span><span class="worldOrb" data-shape="pair" data-material="gold" data-style="wash" style="--acc:var(--terracotta)"><span class="disc"></span></span></span><span class="nm">washed</span></label>
304
- <label><input class="vh" type="radio" name="style2"><span class="obj"><span class="ring"></span><span class="worldOrb" data-shape="pair" data-material="gold" data-style="plain" style="--acc:var(--terracotta)"><span class="disc"></span></span></span><span class="nm">plain</span></label>
305
- </div>
306
- </div>
307
- <div class="band"><span class="bl">colour</span>
308
- <div class="swatches" role="radiogroup" aria-label="Colour">
309
- <label class="sw" style="--sw:var(--sea)"><input class="vh" type="radio" name="colour2"><span class="vh">sea</span></label>
310
- <label class="sw on" style="--sw:var(--terracotta)"><input class="vh" type="radio" name="colour2" checked><span class="vh">terracotta</span></label>
311
- <label class="sw" style="--sw:var(--gold-soft)"><input class="vh" type="radio" name="colour2"><span class="vh">soft gold</span></label>
312
- <label class="sw" style="--sw:var(--sun-lit)"><input class="vh" type="radio" name="colour2"><span class="vh">sunlit</span></label>
313
- <label class="sw" style="--sw:var(--accent)"><input class="vh" type="radio" name="colour2"><span class="vh">the accent</span></label>
314
- </div>
315
- </div>
316
- </div>
317
- </div>
318
- <div class="pickDoors"><button type="button" class="door primary">save its planet</button></div>
319
- </div>
320
- </div>
321
-
322
- <div class="mSec">
323
- <div><h2>take it offline</h2><p class="why">Stops the server and its nightly backups. It stays in your list, marked torn down, and the repository is untouched.</p></div>
324
- <div class="body">
325
- <div class="typed">
326
- <label class="hairField"><input type="text" placeholder="Type the project's name to confirm" aria-label="Type the project's name to confirm"></label>
327
- <div class="doors"><button type="button" class="door danger">tear it down</button></div>
328
- </div>
329
- </div>
330
- </div>
331
- </div>
332
- </section>
333
-
334
- <section data-state="saved">
335
- <div class="view">
336
- <p class="backRow"><a href="#">your projects</a></p>
337
- <div class="mHead">
338
- <span class="worldOrb" data-shape="bead" data-material="obsidian" data-style="tint" style="--acc:var(--sea);--d:96px"><span class="disc"></span></span>
339
- <div>
340
- <div class="titleRow"><h2 class="vTitle">demo</h2><span class="chip live"><span class="cdot"></span>live <span class="rec">checked 3m ago</span></span></div>
341
- <p class="vLede" style="margin:8px 0 0">Its address, its repository, what the platform last verified about it, and the controls you have today.</p>
342
- </div>
343
- </div>
344
- <div class="ledger">
345
- <span class="k">repository</span><span class="v"><a href="#">builder/demo</a></span>
346
- <span class="k">address</span><span class="v">Answering at <a href="#">demo.cloudbongos.com</a><small>last answered 3 minutes ago</small></span>
347
- <span class="k">planet</span><span class="v"><span class="swDot" style="--sw:var(--sea)"></span>the bead in obsidian, tinted<small>your choice.</small></span>
348
- </div>
349
- <div class="doors" style="margin:22px 0 34px"><a class="door" href="#">open site</a><button type="button" class="door">restart it</button></div>
350
-
351
- <div class="mSec">
352
- <div><h2>its planet</h2><p class="why">How this project shows on the sky, in your list and on its card. Saved here, the platform draws it that way everywhere; nothing on your project restarts for it.</p></div>
353
- <div class="body">
354
- <div class="pick">
355
- <div class="preview">
356
- <span class="worldOrb" data-shape="bead" data-material="obsidian" data-style="tint" style="--acc:var(--sea)"><span class="disc"></span></span>
357
- <p class="words">the bead in obsidian, tinted<small>your choice</small></p>
358
- </div>
359
- <div class="bands">
360
- <div class="band"><span class="bl">shape</span>
361
- <div class="cells" role="radiogroup" aria-label="Shape">
362
- <label><input class="vh" type="radio" name="shape3">the blob</label>
363
- <label><input class="vh" type="radio" name="shape3">the bongo pair</label>
364
- <label class="on"><input class="vh" type="radio" name="shape3" checked>the bead</label>
365
- </div>
366
- </div>
367
- <div class="band"><span class="bl">material</span>
368
- <div class="cells" role="radiogroup" aria-label="Material">
369
- <label><input class="vh" type="radio" name="material3">chrome</label>
370
- <label><input class="vh" type="radio" name="material3">frost</label>
371
- <label><input class="vh" type="radio" name="material3">gold</label>
372
- <label class="on"><input class="vh" type="radio" name="material3" checked>obsidian</label>
373
- </div>
374
- </div>
375
- <div class="band"><span class="bl">style</span>
376
- <div class="cells" role="radiogroup" aria-label="Style">
377
- <label class="on"><input class="vh" type="radio" name="style3" checked>tinted</label>
378
- <label><input class="vh" type="radio" name="style3">washed</label>
379
- <label><input class="vh" type="radio" name="style3">plain</label>
380
- </div>
381
- </div>
382
- <div class="band"><span class="bl">colour</span>
383
- <div class="swatches" role="radiogroup" aria-label="Colour">
384
- <label class="sw on" style="--sw:var(--sea)"><input class="vh" type="radio" name="colour3" checked><span class="vh">sea</span></label>
385
- <label class="sw" style="--sw:var(--terracotta)"><input class="vh" type="radio" name="colour3"><span class="vh">terracotta</span></label>
386
- <label class="sw" style="--sw:var(--gold-soft)"><input class="vh" type="radio" name="colour3"><span class="vh">soft gold</span></label>
387
- <label class="sw" style="--sw:var(--sun-lit)"><input class="vh" type="radio" name="colour3"><span class="vh">sunlit</span></label>
388
- <label class="sw" style="--sw:var(--accent)"><input class="vh" type="radio" name="colour3"><span class="vh">the accent</span></label>
389
- </div>
390
- </div>
391
- </div>
392
- </div>
393
- <div class="pickDoors"><button type="button" class="door primary">save its planet</button><button type="button" class="door text">let the platform choose again</button></div>
394
- <p class="receipt" role="status">Saved. The sky, your list and the card draw it this way from here.</p>
395
- </div>
396
- </div>
397
-
398
- <div class="mSec">
399
- <div><h2>take it offline</h2><p class="why">Stops the server and its nightly backups. It stays in your list, marked torn down, and the repository is untouched.</p></div>
400
- <div class="body">
401
- <div class="typed">
402
- <label class="hairField"><input type="text" placeholder="Type the project's name to confirm" aria-label="Type the project's name to confirm"></label>
403
- <div class="doors"><button type="button" class="door danger">tear it down</button></div>
404
- </div>
405
- </div>
406
- </div>
407
- </div>
408
- </section>
409
- </main>
410
- <footer class="foot">A composition sheet for task 1003347. Nothing here is served.</footer>
411
- <script>
412
- /* The mock's state contract: read ?state= once, apply one state (bands | objects | saved).
413
- No motion in script; nothing is built here. */
414
- (function () {
415
- var state = new URLSearchParams(location.search || location.hash.slice(1) || (window.__Q || '')).get('state') || 'bands';
416
- if (['bands', 'objects', 'saved'].indexOf(state) === -1) state = 'bands';
417
- document.body.setAttribute('data-state', state);
418
- })();
419
- </script>
420
- </body>
421
- </html>