@bongos/core 1.19.726 → 1.19.728

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 (227) hide show
  1. package/.bongos-core.json +177 -492
  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/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_package.mjs +40 -1
  122. package/tests/cli_token_reissue.mjs +7 -7
  123. package/tests/cloud_bongos_pack.mjs +1 -1
  124. package/tests/currency_label.mjs +8 -8
  125. package/tests/dev_lib.mjs +4 -4
  126. package/tests/devbox_dmg_backdrop.mjs +1 -1
  127. package/tests/devbox_downloads.mjs +2 -2
  128. package/tests/devbox_icons.mjs +1 -1
  129. package/tests/discord_approvals.mjs +1 -1
  130. package/tests/discord_oauth.mjs +2 -2
  131. package/tests/executed_closure.mjs +6 -1
  132. package/tests/first_admin_bootstrap.mjs +1 -1
  133. package/tests/gate_approvals.mjs +5 -5
  134. package/tests/grade_aggregates_unavailable.mjs +1 -1
  135. package/tests/hook_user_agents.mjs +2 -2
  136. package/tests/init.mjs +6 -6
  137. package/tests/instance_config.mjs +1 -1
  138. package/tests/instance_manifest.mjs +5 -5
  139. package/tests/instance_mismatch_guard.mjs +13 -13
  140. package/tests/leak_scan_allowlist.mjs +94 -0
  141. package/tests/migrate_root_resolution.mjs +4 -4
  142. package/tests/mirror_redact.mjs +28 -4
  143. package/tests/module_catalog.mjs +5 -5
  144. package/tests/module_submissions.mjs +3 -3
  145. package/tests/package_core.mjs +1 -1
  146. package/tests/parallel-load.mjs +6 -6
  147. package/tests/projects_hub.mjs +2 -2
  148. package/tests/provision.mjs +50 -50
  149. package/tests/provisioning_github_app_routes.mjs +1 -1
  150. package/tests/provisioning_onboard_mode.mjs +2 -2
  151. package/tests/publish_reconciler.mjs +4 -4
  152. package/tests/sandbox_stage.mjs +1 -1
  153. package/tests/scrubber_corpus.mjs +3 -3
  154. package/tests/search_isolation.mjs +1 -1
  155. package/tests/session_records.mjs +1 -1
  156. package/tests/ship_card.mjs +6 -6
  157. package/tests/ship_ci_deploy.mjs +1 -1
  158. package/tests/single_host_hall.mjs +9 -9
  159. package/tests/smoke_preflight.mjs +1 -1
  160. package/tests/smoke_target.mjs +1 -1
  161. package/tests/status-probe.mjs +1 -1
  162. package/tests/status_mirror_sync.mjs +1 -1
  163. package/docs/adr/0004-amazonprimea-name-and-trademark-acceptance.md +0 -45
  164. package/docs/design/mocks/_schemes.css +0 -604
  165. package/docs/design/mocks/component-sheet.html +0 -428
  166. package/docs/design/mocks/hall/_tokens.css +0 -370
  167. package/docs/design/mocks/hall/board/v1.html +0 -846
  168. package/docs/design/mocks/hall/board/v2.html +0 -858
  169. package/docs/design/mocks/hall/board/v3.html +0 -884
  170. package/docs/design/mocks/hall/goals/v1.html +0 -1212
  171. package/docs/design/mocks/hall/goals/v2.html +0 -1192
  172. package/docs/design/mocks/hall/goals/v3.html +0 -1205
  173. package/docs/design/mocks/hall/hall-sheet.html +0 -244
  174. package/docs/design/mocks/hall/reading/v1.html +0 -1125
  175. package/docs/design/mocks/hall/reading/v2.html +0 -1177
  176. package/docs/design/mocks/hall/reading/v3.html +0 -1150
  177. package/docs/design/mocks/hall/settings/v1.html +0 -1238
  178. package/docs/design/mocks/hall/settings/v2.html +0 -1235
  179. package/docs/design/mocks/hall/settings/v3.html +0 -1299
  180. package/docs/design/mocks/hall/task/v1.html +0 -633
  181. package/docs/design/mocks/hall/task/v2.html +0 -646
  182. package/docs/design/mocks/hall/task/v3.html +0 -647
  183. package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg +0 -0
  184. package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg.json +0 -13
  185. package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg +0 -0
  186. package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg.json +0 -13
  187. package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg +0 -0
  188. package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg.json +0 -13
  189. package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg +0 -0
  190. package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg.json +0 -13
  191. package/docs/design/mocks/hub/hub-sheet.html +0 -192
  192. package/docs/design/mocks/hub/mine.html +0 -465
  193. package/docs/design/mocks/hub/picker.html +0 -421
  194. package/docs/design/mocks/hub/planets.html +0 -356
  195. package/docs/design/mocks/hub/v1.html +0 -1209
  196. package/docs/design/mocks/hub/v2.html +0 -1257
  197. package/docs/design/mocks/hub/v3.html +0 -1496
  198. package/docs/design/mocks/hub/wizard.html +0 -421
  199. package/docs/design/mocks/landing/landing-sheet.html +0 -131
  200. package/docs/design/mocks/landing/v1.html +0 -956
  201. package/docs/design/mocks/landing/v2.html +0 -708
  202. package/docs/design/mocks/landing/v3.html +0 -911
  203. package/docs/design/mocks/landing-page-mock.html +0 -687
  204. package/docs/design/mocks/landing-palettes.html +0 -103
  205. package/docs/design/mocks/projects-hub-mock.html +0 -991
  206. package/docs/design/mocks/projects-hub-variants.html +0 -146
  207. package/docs/design/mocks/projects-page-mock.html +0 -167
  208. package/docs/design/mocks/world/blue-hud/_tokens.css +0 -246
  209. package/docs/design/mocks/world/blue-hud/hall.html +0 -595
  210. package/docs/design/mocks/world/blue-hud/landing.html +0 -424
  211. package/docs/design/mocks/world/blue-hud/status.html +0 -410
  212. package/docs/design/mocks/world/chrome-blobs/_tokens.css +0 -479
  213. package/docs/design/mocks/world/chrome-blobs/hall.html +0 -553
  214. package/docs/design/mocks/world/chrome-blobs/landing-b.html +0 -581
  215. package/docs/design/mocks/world/chrome-blobs/landing.html +0 -328
  216. package/docs/design/mocks/world/chrome-blobs/status.html +0 -416
  217. package/docs/design/mocks/world/natgeo-editorial/_tokens.css +0 -377
  218. package/docs/design/mocks/world/natgeo-editorial/hall.html +0 -649
  219. package/docs/design/mocks/world/natgeo-editorial/landing-b.html +0 -743
  220. package/docs/design/mocks/world/natgeo-editorial/landing.html +0 -475
  221. package/docs/design/mocks/world/natgeo-editorial/status.html +0 -437
  222. package/docs/design/mocks/world/organic-cards/_tokens.css +0 -462
  223. package/docs/design/mocks/world/organic-cards/hall.html +0 -625
  224. package/docs/design/mocks/world/organic-cards/landing-b.html +0 -736
  225. package/docs/design/mocks/world/organic-cards/landing.html +0 -420
  226. package/docs/design/mocks/world/organic-cards/status.html +0 -458
  227. 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>