@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,553 +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>Tasks, Builders' Hall</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&family=Manrope:wght@300;400;500;600&display=swap">
13
- <link rel="stylesheet" href="_tokens.css">
14
- <style>
15
- *{box-sizing:border-box}
16
- html,body{margin:0;padding:0}
17
- body{min-height:100dvh;background:var(--bg);color:var(--ink);font-family:var(--font-body);
18
- font-size:15px;-webkit-font-smoothing:antialiased;overflow-x:hidden}
19
- h1,h2,p,ul,ol{margin:0}
20
- ul,ol{list-style:none;padding:0}
21
- a{color:inherit;text-decoration:none}
22
- ::selection{background:var(--accent);color:var(--accent-on)}
23
- :focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:6px}
24
- .vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
25
- .ic{width:17px;height:17px;flex:none;stroke:currentColor;stroke-width:1.4;fill:none;
26
- stroke-linecap:round;stroke-linejoin:round}
27
-
28
- /* ---------- the ground: the misty forest, dark mode only ---------- */
29
- .plate{position:fixed;inset:0;z-index:-1;background-image:var(--plate);background-size:cover;
30
- background-position:50% 26%;filter:saturate(.95) brightness(1.24);transform:scale(1.04)}
31
-
32
- /* ---------- one rendered chrome object blooming behind the glass (dark only) ---------- */
33
- .blob{display:var(--shell-blob);position:absolute;width:var(--s);aspect-ratio:1;
34
- background-image:var(--plate-bead);background-repeat:no-repeat;background-size:100% auto;
35
- mix-blend-mode:var(--blob-blend);pointer-events:none;
36
- animation:settle .6s cubic-bezier(.16,1,.3,1) both}
37
- @keyframes settle{from{opacity:0;transform:scale(1.05)}to{opacity:.62;transform:scale(1)}}
38
-
39
- /* ---------- shell: an inset glass window in dark, full bleed in light ---------- */
40
- .shell{position:relative;margin:var(--shell-pad);min-height:calc(100dvh - var(--shell-pad) * 2);
41
- border-radius:var(--shell-radius);border:1px solid var(--shell-edge);background:var(--shell-bg);
42
- box-shadow:var(--shell-shadow);overflow:hidden;display:grid;grid-template-columns:240px minmax(0,1fr)}
43
-
44
- /* ---------- sidebar ---------- */
45
- .side{position:relative;z-index:1;display:flex;flex-direction:column;min-height:0;
46
- border-right:1px solid var(--panel-edge);background:var(--panel-bg);
47
- backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur))}
48
- .brand{display:flex;align-items:center;gap:10px;padding:16px 18px 12px;font-size:15.5px;
49
- letter-spacing:-.01em}
50
- .badge-mark{width:28px;height:28px;border-radius:9px;flex:none;display:grid;place-items:center;
51
- background:var(--badge-bg);color:var(--badge-ink);border:1px solid var(--rule-soft)}
52
- .badge-mark svg{width:16px;height:13px;display:block}
53
- .sidenav{flex:1;min-height:0;overflow-y:auto;padding:4px 12px 12px;
54
- scrollbar-width:thin;scrollbar-color:var(--rule) transparent}
55
- .sidenav::-webkit-scrollbar{width:8px}
56
- .sidenav::-webkit-scrollbar-thumb{background:var(--rule);border-radius:99px}
57
- .sidenav::-webkit-scrollbar-track{background:transparent}
58
- .grp{margin:16px 0 6px;padding:0 10px;font-family:var(--label-face);font-size:var(--label-size);
59
- letter-spacing:var(--label-space);text-transform:uppercase;color:var(--ink-faint)}
60
- .grp::after{content:var(--label-suffix)}
61
- .sidenav a{display:flex;align-items:center;gap:11px;min-height:34px;padding:6px 10px;
62
- border-radius:var(--radius-pill);font-family:var(--label-face);font-size:14px;color:var(--ink-soft);
63
- transition:background .18s ease,color .18s ease}
64
- .sidenav a:hover{background:var(--glass-strong);color:var(--ink)}
65
- .sidenav a[aria-current="page"]{background:var(--accent-tint);color:var(--accent-ink);
66
- border:1px solid color-mix(in srgb,var(--accent) 38%,transparent)}
67
- .signout{display:flex;align-items:center;gap:11px;margin:0 12px 14px;padding:9px 12px;min-height:36px;
68
- border-radius:var(--radius-pill);background:transparent;border:1px solid var(--rule-soft);
69
- color:var(--ink-soft);font-family:var(--label-face);font-size:14px;cursor:pointer;
70
- transition:background .18s ease,color .18s ease}
71
- .signout:hover{background:var(--glass-strong);color:var(--ink)}
72
-
73
- /* ---------- top bar ---------- */
74
- .col{display:flex;flex-direction:column;min-width:0}
75
- .top{position:relative;z-index:1;display:flex;align-items:center;gap:14px;height:56px;padding:0 20px;
76
- border-bottom:1px solid var(--panel-edge);background:var(--panel-bg);
77
- backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur))}
78
- .hallmark{font-size:17px;font-weight:500;letter-spacing:-.015em;white-space:nowrap}
79
- .search{position:relative;flex:1;max-width:430px;margin-left:auto}
80
- .search .ic{position:absolute;left:13px;top:50%;transform:translateY(-50%);color:var(--ink-faint);
81
- width:15px;height:15px}
82
- .search input{width:100%;min-height:34px;padding:7px 12px 7px 36px;border-radius:var(--radius-pill);
83
- border:1px solid var(--rule-soft);background:var(--glass);color:var(--ink);font-family:inherit;
84
- font-size:14px}
85
- .search input::placeholder{color:var(--ink-faint)}
86
- .badge{display:inline-flex;align-items:center;gap:7px;min-height:32px;padding:0 14px;
87
- border-radius:var(--radius-pill);border:1px solid var(--chip-edge);
88
- background:var(--chip-bg);color:var(--chip-ink);font-family:var(--label-face);
89
- font-size:var(--label-size);letter-spacing:var(--label-space);text-transform:var(--head-case);
90
- white-space:nowrap}
91
- .badge .dot{width:6px;height:6px;border-radius:50%;background:var(--ink-faint)}
92
- .mode-toggle{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;
93
- border-radius:var(--radius-pill);border:1px solid var(--rule-soft);background:transparent;
94
- color:var(--ink-soft);cursor:pointer}
95
- .mode-toggle:hover{background:var(--glass-strong);color:var(--ink)}
96
- .mode-toggle svg{width:15px;height:15px}
97
- .sun{display:none}
98
- :root[data-mode="dark"] .sun{display:block}
99
- :root[data-mode="dark"] .moon{display:none}
100
- @media (prefers-color-scheme:dark){:root:not([data-mode="light"]) .sun{display:block}
101
- :root:not([data-mode="light"]) .moon{display:none}}
102
- .who{display:flex;align-items:center;gap:7px}
103
- .avatar{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-size:13px;
104
- font-weight:500;background:var(--glass-strong);border:1px solid var(--rule-soft);color:var(--ink)}
105
- .caret{color:var(--ink-faint);width:12px;height:12px}
106
-
107
- /* ---------- board ---------- */
108
- .board{position:relative;flex:1;min-width:0;padding:22px 20px 26px;background:var(--board-bg)}
109
- .sheet{position:relative;z-index:1;max-width:1120px;margin:0 auto;padding:20px 20px 18px;
110
- border-radius:var(--radius);border:1px solid var(--sheet-edge);background:var(--sheet-bg);
111
- box-shadow:var(--sheet-shadow);
112
- backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur))}
113
- h1{font-size:26px;font-weight:500;letter-spacing:-.02em}
114
-
115
- .tabs{display:flex;flex-wrap:wrap;gap:6px;margin-top:14px}
116
- .tab{display:inline-flex;align-items:center;gap:8px;min-height:34px;padding:0 16px;cursor:pointer;
117
- border-radius:var(--radius-pill);border:1px solid transparent;background:transparent;
118
- color:var(--ink-soft);font-family:var(--label-face);font-size:13px;letter-spacing:var(--label-space);
119
- text-transform:var(--head-case);transition:background .18s ease,color .18s ease}
120
- .tab:hover{background:var(--glass-strong);color:var(--ink)}
121
- .tab .n{font-variant-numeric:tabular-nums}
122
- .tab[aria-selected="true"]{background:var(--tab-bg);color:var(--tab-ink);
123
- border-color:color-mix(in srgb,var(--accent) 55%,transparent);box-shadow:var(--accent-glow)}
124
- .tab .n{padding:1px 8px;border-radius:var(--radius-pill);background:var(--glass-strong);
125
- border:1px solid var(--rule-soft)}
126
- .tab[aria-selected="true"] .n{background:color-mix(in srgb,var(--accent) 26%,transparent);
127
- border-color:color-mix(in srgb,var(--tab-ink) 26%,transparent)}
128
-
129
- .filters{margin-top:14px;padding-bottom:14px;border-bottom:1px solid var(--rule-soft)}
130
- .fsearch{position:relative;max-width:340px}
131
- .fsearch input{width:100%;min-height:34px;padding:7px 12px;border-radius:var(--radius-pill);
132
- border:1px solid var(--rule-soft);background:var(--glass);color:var(--ink);font-family:inherit;
133
- font-size:13.5px}
134
- .fsearch input::placeholder{color:var(--ink-faint)}
135
- .selects{display:flex;flex-wrap:wrap;gap:7px;margin-top:10px}
136
- .sel{display:inline-flex;align-items:center;gap:7px;min-height:32px;padding:0 6px 0 13px;
137
- border-radius:var(--radius-pill);border:1px solid var(--rule-soft);background:var(--glass)}
138
- .sel-k{font-family:var(--label-face);font-size:var(--label-size);letter-spacing:var(--label-space);
139
- text-transform:var(--head-case);color:var(--ink-soft);white-space:nowrap}
140
- .sel select{appearance:none;-webkit-appearance:none;border:0;background:transparent;color:var(--ink);
141
- font-family:inherit;font-size:13px;min-height:30px;padding:0 22px 0 0;cursor:pointer;
142
- background-image:var(--chev);background-repeat:no-repeat;background-position:right 6px center;
143
- background-size:9px 6px;max-width:210px;text-overflow:ellipsis}
144
-
145
- .scroller{margin-top:14px;overflow-x:auto;border-radius:var(--radius-sm);
146
- scrollbar-width:thin;scrollbar-color:var(--rule) transparent}
147
- .scroller::-webkit-scrollbar{height:9px}
148
- .scroller::-webkit-scrollbar-thumb{background:var(--rule);border-radius:99px}
149
- .scroller::-webkit-scrollbar-track{background:transparent}
150
- table{width:100%;min-width:900px;border-collapse:collapse;font-size:13.5px}
151
- thead th{text-align:left;padding:9px 12px;border-bottom:1px solid var(--rule);
152
- font-family:var(--label-face);font-size:var(--label-size);letter-spacing:var(--label-space);
153
- text-transform:var(--head-case);color:var(--ink-faint);font-weight:400;white-space:nowrap}
154
- tbody td{padding:11px 12px;border-bottom:1px solid var(--rule-soft);vertical-align:middle}
155
- tbody tr:last-child td{border-bottom:0}
156
- tbody tr:hover td{background:var(--glass-strong)}
157
- .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
158
- .tid{font-family:var(--font-mono);font-size:12.5px;color:var(--ink-soft);white-space:nowrap}
159
- .ttl{min-width:280px}
160
- .goal{color:var(--ink-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:190px}
161
- .cred{color:var(--fig-accent);font-weight:500;font-variant-numeric:tabular-nums;text-align:right}
162
- .state{display:inline-flex;align-items:center;gap:8px;white-space:nowrap;color:var(--ink-soft)}
163
- .bead{width:8px;height:8px;border-radius:50%;flex:none;border:1px solid var(--ink-faint)}
164
- .state--active .bead{background:var(--accent);border-color:var(--accent);
165
- box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}
166
- .state--active{color:var(--ink)}
167
- tr.held .ttl,tr.held .goal{color:var(--ink-soft)}
168
- tr.held input[type=checkbox]{opacity:.45;cursor:not-allowed}
169
- tr.clash .clashcell{background:var(--hatch);color:var(--ink)}
170
- .lock{width:13px;height:13px;color:var(--ink-faint)}
171
-
172
- /* real checkboxes, drawn */
173
- input[type=checkbox]{appearance:none;-webkit-appearance:none;width:17px;height:17px;margin:0;
174
- border-radius:5px;border:1px solid var(--rule);background:var(--glass);cursor:pointer;
175
- display:grid;place-items:center}
176
- input[type=checkbox]:checked{background-color:var(--accent);border-color:var(--accent);
177
- background-image:var(--check);background-repeat:no-repeat;background-position:center;
178
- background-size:12px 12px}
179
-
180
- .bulk{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:16px}
181
- .bulk .count{margin-right:6px;font-family:var(--label-face);font-size:var(--label-size);
182
- letter-spacing:var(--label-space);text-transform:var(--head-case);color:var(--ink-faint)}
183
- .btn{min-height:34px;padding:0 16px;border-radius:var(--radius-pill);border:1px solid var(--rule-soft);
184
- background:var(--glass);color:var(--ink);font-family:inherit;font-size:13.5px;cursor:pointer;
185
- transition:background .18s ease}
186
- .btn:hover{background:var(--glass-strong)}
187
- .btn--go{background:var(--go-bg);color:var(--go-ink);border-color:transparent;font-weight:500;
188
- box-shadow:var(--accent-glow)}
189
- .btn--go:hover{background:color-mix(in srgb,var(--go-bg) 84%,#ffffff)}
190
- .pager{display:flex;align-items:center;gap:10px;margin-top:14px;font-size:13px;color:var(--ink-soft)}
191
- .pager .of{margin-right:auto;font-variant-numeric:tabular-nums}
192
- .empty{padding:40px 4px;color:var(--ink-faint);font-size:14px}
193
-
194
- @media (max-width:1023px){
195
- /* minmax(0,1fr), not 1fr: the sidenav's scrolling flex row would otherwise blow the track out */
196
- .shell{grid-template-columns:minmax(0,1fr)}
197
- .blob{display:none}
198
- .side{min-width:0;flex-direction:row;align-items:center;gap:10px;border-right:0;
199
- border-bottom:1px solid var(--panel-edge);padding:8px 10px}
200
- .brand{padding:0 4px 0 6px;flex:none}
201
- .brand > span:not(.badge-mark){display:none}
202
- .sidenav{display:flex;align-items:center;gap:4px;overflow-x:auto;overflow-y:hidden;padding:0;
203
- min-height:44px;
204
- -webkit-mask-image:linear-gradient(to right,#000 0 88%,transparent 100%);
205
- mask-image:linear-gradient(to right,#000 0 88%,transparent 100%)}
206
- .sidenav ul{display:flex;gap:4px}
207
- .sidenav a{white-space:nowrap;min-height:32px}
208
- .grp{margin:0 2px;padding:0;align-self:center;white-space:nowrap}
209
- .signout{margin:0;flex:none}
210
- .top{gap:8px;padding:0 12px}
211
- .hallmark{font-size:15px}
212
- .search{max-width:none}
213
- .badge{display:none}
214
- .board{padding:14px 10px 20px}
215
- .sheet{padding:14px 12px}
216
- }
217
- </style>
218
- </head>
219
- <body>
220
-
221
- <div class="plate" aria-hidden="true"></div>
222
-
223
- <svg width="0" height="0" style="position:absolute" aria-hidden="true" focusable="false"><defs>
224
- <symbol id="i-home" viewBox="0 0 20 20"><path d="M3 8.6 10 3l7 5.6V16a1 1 0 0 1-1 1h-3.4v-4.6H7.4V17H4a1 1 0 0 1-1-1z"/></symbol>
225
- <symbol id="i-map" viewBox="0 0 20 20"><path d="M2.6 5.4 7.4 3.4v11.2L2.6 16.6zM7.4 3.4l5.2 2v11.2l-5.2-2zM12.6 5.4l4.8-2v11.2l-4.8 2z"/></symbol>
226
- <symbol id="i-goal" viewBox="0 0 20 20"><circle cx="10" cy="10" r="7"/><circle cx="10" cy="10" r="3"/></symbol>
227
- <symbol id="i-task" viewBox="0 0 20 20"><path d="M6.6 4H5a1 1 0 0 0-1 1v11a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1h-1.6"/><rect x="6.6" y="2.4" width="6.8" height="3.2" rx="1"/><path d="M7.4 10h5.2M7.4 13h3.4"/></symbol>
228
- <symbol id="i-idea" viewBox="0 0 20 20"><path d="M10 2.6a5 5 0 0 0-3 9v1.8h6v-1.8a5 5 0 0 0-3-9z"/><path d="M8.2 16.4h3.6"/></symbol>
229
- <symbol id="i-pen" viewBox="0 0 20 20"><path d="m13.4 3.6 3 3L7.2 15.8l-3.8.8.8-3.8z"/><path d="m11.6 5.4 3 3"/></symbol>
230
- <symbol id="i-chart" viewBox="0 0 20 20"><path d="M3.4 16.6h13.2M6 13.4V8M10 13.4V4.4M14 13.4v-4"/></symbol>
231
- <symbol id="i-user" viewBox="0 0 20 20"><circle cx="10" cy="7" r="3.2"/><path d="M4 16.6a6 6 0 0 1 12 0"/></symbol>
232
- <symbol id="i-collab" viewBox="0 0 20 20"><circle cx="7" cy="8" r="2.6"/><circle cx="13" cy="8" r="2.6"/><path d="M2.8 16.2a4.4 4.4 0 0 1 8.4 0M8.8 16.2a4.4 4.4 0 0 1 8.4 0"/></symbol>
233
- <symbol id="i-board" viewBox="0 0 20 20"><path d="M4 16.6V9.4M10 16.6V3.4M16 16.6v-4.8"/></symbol>
234
- <symbol id="i-people" viewBox="0 0 20 20"><circle cx="8" cy="7.2" r="3"/><path d="M2.6 16.4a5.4 5.4 0 0 1 10.8 0"/><path d="M13.6 4.6a3 3 0 0 1 0 5.6M14.6 11.6a5.4 5.4 0 0 1 2.8 4.8"/></symbol>
235
- <symbol id="i-book" viewBox="0 0 20 20"><path d="M3.4 4.4A2 2 0 0 1 5.4 3H10v14H5.4a2 2 0 0 0-2 1.4z" transform="translate(0,-1)"/><path d="M16.6 4.4A2 2 0 0 0 14.6 3H10v14h4.6a2 2 0 0 1 2 1.4z" transform="translate(0,-1)"/></symbol>
236
- <symbol id="i-rank" viewBox="0 0 20 20"><path d="m10 3 2.1 4.3 4.7.7-3.4 3.3.8 4.7L10 13.8 5.8 16l.8-4.7L3.2 8l4.7-.7z"/></symbol>
237
- <symbol id="i-coin" viewBox="0 0 20 20"><circle cx="10" cy="10" r="7"/><path d="M10 6.2v7.6M12 8a2.4 2.4 0 0 0-4 1.2c0 2 4 1.4 4 3.2A2.4 2.4 0 0 1 8 13.2"/></symbol>
238
- <symbol id="i-nodes" viewBox="0 0 20 20"><circle cx="5" cy="5" r="2.2"/><circle cx="15" cy="5" r="2.2"/><circle cx="10" cy="15" r="2.2"/><path d="M6.6 6.6 9 13M13.4 6.6 11 13M7.2 5h5.6"/></symbol>
239
- <symbol id="i-globe" viewBox="0 0 20 20"><circle cx="10" cy="10" r="7"/><path d="M3 10h14M10 3a11 11 0 0 1 0 14 11 11 0 0 1 0-14z"/></symbol>
240
- <symbol id="i-box" viewBox="0 0 20 20"><path d="m10 3 6.4 3.4v7.2L10 17l-6.4-3.4V6.4z"/><path d="m3.6 6.4 6.4 3.4 6.4-3.4M10 9.8V17"/></symbol>
241
- <symbol id="i-code" viewBox="0 0 20 20"><path d="m7 6.6-4 3.4 4 3.4M13 6.6l4 3.4-4 3.4"/></symbol>
242
- <symbol id="i-eye" viewBox="0 0 20 20"><path d="M2.4 10S5.4 5 10 5s7.6 5 7.6 5-3 5-7.6 5-7.6-5-7.6-5z"/><circle cx="10" cy="10" r="2.2"/></symbol>
243
- <symbol id="i-anchor" viewBox="0 0 20 20"><circle cx="10" cy="4.6" r="1.8"/><path d="M10 6.4V17M5.6 8.6h8.8M3.4 12.4A7 7 0 0 0 10 17a7 7 0 0 0 6.6-4.6"/></symbol>
244
- <symbol id="i-gate" viewBox="0 0 20 20"><path d="M4 17V4.6a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1V17"/><path d="M2.6 17h14.8M12.6 10.6h.01"/></symbol>
245
- <symbol id="i-list" viewBox="0 0 20 20"><path d="M7 5.4h9.4M7 10h9.4M7 14.6h9.4M3.6 5.4h.01M3.6 10h.01M3.6 14.6h.01"/></symbol>
246
- <symbol id="i-key" viewBox="0 0 20 20"><circle cx="6.6" cy="9.4" r="3.2"/><path d="M9.6 8.6h7.2M14.6 8.6v3M16.8 8.6v2.4"/></symbol>
247
- <symbol id="i-out" viewBox="0 0 20 20"><path d="M12 15.4v1.2a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V3.4a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v1.2"/><path d="M8.6 10h8.4M14.4 7.2 17.2 10l-2.8 2.8"/></symbol>
248
- <symbol id="i-search" viewBox="0 0 20 20"><circle cx="8.8" cy="8.8" r="5.4"/><path d="m12.8 12.8 4 4"/></symbol>
249
- <symbol id="i-lock" viewBox="0 0 20 20"><rect x="4.6" y="8.6" width="10.8" height="8" rx="1.6"/><path d="M7.2 8.6V6.4a2.8 2.8 0 0 1 5.6 0v2.2"/></symbol>
250
- <symbol id="i-caret" viewBox="0 0 20 20"><path d="m5.6 8 4.4 4.4L14.4 8"/></symbol>
251
- </defs></svg>
252
-
253
- <div class="shell">
254
- <span class="blob" style="--s:500px;left:-16%;top:3%"></span>
255
-
256
- <aside class="side">
257
- <div class="brand">
258
- <span class="badge-mark" aria-hidden="true">
259
- <svg viewBox="0 0 26 20" fill="none" stroke="currentColor" stroke-width="1.5"
260
- stroke-linecap="round" stroke-linejoin="round">
261
- <ellipse cx="8.4" cy="5.6" rx="6.6" ry="2.9"/>
262
- <path d="M1.8 5.6v6.6a6.6 2.9 0 0 0 13.2 0V5.6"/>
263
- <ellipse cx="19.6" cy="8.4" rx="4.7" ry="2.1"/>
264
- <path d="M14.9 8.4v4.6a4.7 2.1 0 0 0 9.4 0V8.4"/>
265
- </svg>
266
- </span>
267
- <span>Cloud Bongos</span>
268
- </div>
269
- <nav class="sidenav" aria-label="Hall">
270
- <ul>
271
- <li><a href="/builders/home"><svg class="ic"><use href="#i-home"></use></svg>Home</a></li>
272
- <li><a href="/builders/roadmap"><svg class="ic"><use href="#i-map"></use></svg>Roadmap</a></li>
273
- <li><a href="/builders/goals"><svg class="ic"><use href="#i-goal"></use></svg>Goals</a></li>
274
- <li><a href="/builders/work" aria-current="page"><svg class="ic"><use href="#i-task"></use></svg>Tasks</a></li>
275
- <li><a href="/builders/ideas"><svg class="ic"><use href="#i-idea"></use></svg>Ideas</a></li>
276
- <li><a href="/builders/copy-desk"><svg class="ic"><use href="#i-pen"></use></svg>Copy desk</a></li>
277
- </ul>
278
- <p class="grp" id="g-you">You</p>
279
- <ul aria-labelledby="g-you">
280
- <li><a href="/builders/standing"><svg class="ic"><use href="#i-chart"></use></svg>Standing</a></li>
281
- <li><a href="/builders/profile"><svg class="ic"><use href="#i-user"></use></svg>Profile</a></li>
282
- </ul>
283
- <p class="grp" id="g-community">Community</p>
284
- <ul aria-labelledby="g-community">
285
- <li><a href="/builders/collab"><svg class="ic"><use href="#i-collab"></use></svg>Collab</a></li>
286
- <li><a href="/builders/leaderboard"><svg class="ic"><use href="#i-board"></use></svg>Leaderboard</a></li>
287
- <li><a href="/builders/people"><svg class="ic"><use href="#i-people"></use></svg>People</a></li>
288
- </ul>
289
- <p class="grp" id="g-docs">Docs</p>
290
- <ul aria-labelledby="g-docs">
291
- <li><a href="/builders/primer"><svg class="ic"><use href="#i-book"></use></svg>Primer</a></li>
292
- <li><a href="/builders/ranks"><svg class="ic"><use href="#i-rank"></use></svg>Ranks</a></li>
293
- <li><a href="/builders/economy"><svg class="ic"><use href="#i-coin"></use></svg>Economy</a></li>
294
- <li><a href="/builders/diagrams"><svg class="ic"><use href="#i-nodes"></use></svg>Diagrams</a></li>
295
- <li><a href="/builders/repo-atlas"><svg class="ic"><use href="#i-globe"></use></svg>Repo Atlas</a></li>
296
- <li><a href="/builders/modules"><svg class="ic"><use href="#i-box"></use></svg>Modules</a></li>
297
- <li><a href="/builders/api-docs"><svg class="ic"><use href="#i-code"></use></svg>API docs</a></li>
298
- </ul>
299
- <p class="grp" id="g-gov">Government</p>
300
- <ul aria-labelledby="g-gov">
301
- <li><a href="/builders/watch"><svg class="ic"><use href="#i-eye"></use></svg>Watch</a></li>
302
- <li><a href="/builders/harbor"><svg class="ic"><use href="#i-anchor"></use></svg>Harbor</a></li>
303
- <li><a href="/builders/gate"><svg class="ic"><use href="#i-gate"></use></svg>Gate</a></li>
304
- <li><a href="/builders/sessions"><svg class="ic"><use href="#i-list"></use></svg>Sessions</a></li>
305
- <li><a href="/builders/permissions"><svg class="ic"><use href="#i-key"></use></svg>Permissions</a></li>
306
- </ul>
307
- </nav>
308
- <button class="signout" type="button"><svg class="ic"><use href="#i-out"></use></svg>Sign out</button>
309
- </aside>
310
-
311
- <div class="col">
312
- <header class="top">
313
- <span class="hallmark">Builders' Hall</span>
314
- <div class="search">
315
- <svg class="ic"><use href="#i-search"></use></svg>
316
- <label class="vh" for="q">Search</label>
317
- <input id="q" type="search" placeholder="Search">
318
- </div>
319
- <span class="badge"><span class="dot"></span>Trusted</span>
320
- <button class="mode-toggle" id="mode" type="button" aria-label="Toggle light or dark">
321
- <svg class="moon" viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor"
322
- stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round">
323
- <path d="M16.2 12.4A6.8 6.8 0 0 1 7.6 3.8a6.8 6.8 0 1 0 8.6 8.6z"/>
324
- </svg>
325
- <svg class="sun" viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor"
326
- stroke-width="1.4" stroke-linecap="round">
327
- <circle cx="10" cy="10" r="3.9"/>
328
- <path d="M10 1.6v2.1M10 16.3v2.1M1.6 10h2.1M16.3 10h2.1M4.1 4.1l1.5 1.5M14.4 14.4l1.5 1.5M15.9 4.1l-1.5 1.5M5.6 14.4l-1.5 1.5"/>
329
- </svg>
330
- </button>
331
- <span class="who">
332
- <span class="avatar" aria-hidden="true">P</span>
333
- <svg class="ic caret" aria-hidden="true"><use href="#i-caret"></use></svg>
334
- </span>
335
- </header>
336
-
337
- <main class="board">
338
- <div class="sheet">
339
- <h1>Tasks</h1>
340
-
341
- <div class="tabs" role="tablist" aria-label="Task states">
342
- <button class="tab" role="tab" id="t-ready" aria-selected="true" aria-controls="p-ready" type="button">Ready <span class="n">42</span></button>
343
- <button class="tab" role="tab" id="t-prog" aria-selected="false" aria-controls="p-prog" type="button">In Progress <span class="n">15</span></button>
344
- <button class="tab" role="tab" id="t-back" aria-selected="false" aria-controls="p-back" type="button">Backlog <span class="n">89</span></button>
345
- <button class="tab" role="tab" id="t-done" aria-selected="false" aria-controls="p-done" type="button">Completed <span class="n">1107</span></button>
346
- </div>
347
-
348
- <div class="filters">
349
- <div class="fsearch">
350
- <label class="vh" for="fq">Filter tasks</label>
351
- <input id="fq" type="search" placeholder="task #, title, or goal">
352
- </div>
353
- <div class="selects">
354
- <span class="sel"><span class="sel-k">Sort</span>
355
- <select aria-label="Sort">
356
- <option>credits / minute (high to low)</option>
357
- <option>credits (high to low)</option>
358
- <option>newest first</option>
359
- </select></span>
360
- <span class="sel"><span class="sel-k">Version</span>
361
- <select aria-label="Version"><option>any</option><option>V1</option></select></span>
362
- <span class="sel"><span class="sel-k">Goal</span>
363
- <select aria-label="Goal"><option>any</option><option>Apex UI pass 2</option></select></span>
364
- <span class="sel"><span class="sel-k">Kind</span>
365
- <select aria-label="Kind"><option>any</option><option>feature</option></select></span>
366
- <span class="sel"><span class="sel-k">Discipline</span>
367
- <select aria-label="Discipline"><option>any</option><option>engineer</option></select></span>
368
- <span class="sel"><span class="sel-k">Newcomer</span>
369
- <select aria-label="Newcomer"><option>any</option><option>friendly</option></select></span>
370
- <span class="sel"><span class="sel-k">Creator</span>
371
- <select aria-label="Creator"><option>any</option><option>lars589</option></select></span>
372
- <span class="sel"><span class="sel-k">Age</span>
373
- <select aria-label="Age"><option>any</option><option>this week</option></select></span>
374
- <span class="sel"><span class="sel-k">Run mode</span>
375
- <select aria-label="Run mode"><option>any</option><option>parallel</option></select></span>
376
- </div>
377
- </div>
378
-
379
- <div id="p-ready" role="tabpanel" aria-labelledby="t-ready">
380
- <div class="scroller">
381
- <table>
382
- <caption class="vh">Claimable tasks, sorted by credits per minute</caption>
383
- <thead>
384
- <tr>
385
- <th scope="col"><label class="vh" for="all">Select all</label><input id="all" type="checkbox"></th>
386
- <th scope="col">Task</th>
387
- <th scope="col">Title</th>
388
- <th scope="col">Goal</th>
389
- <th scope="col" class="num">Credits</th>
390
- <th scope="col" class="num">Minutes</th>
391
- <th scope="col" class="num">Cr/min</th>
392
- <th scope="col">Status</th>
393
- </tr>
394
- </thead>
395
- <tbody>
396
- <!-- sample rows -->
397
- <tr>
398
- <td><label class="vh" for="r1">Select task 1003297</label><input id="r1" type="checkbox"></td>
399
- <th scope="row" class="tid">1003297</th>
400
- <td class="ttl">Landing: three composition versions in the chosen world</td>
401
- <td class="goal">Apex UI pass 2</td>
402
- <td class="cred">96</td><td class="num">40</td><td class="num">2.4</td>
403
- <td><span class="state"><span class="bead"></span>ready</span></td>
404
- </tr>
405
- <tr>
406
- <td><label class="vh" for="r2">Select task 1003302</label><input id="r2" type="checkbox"></td>
407
- <th scope="row" class="tid">1003302</th>
408
- <td class="ttl">Hall: five archetype mocks in the world</td>
409
- <td class="goal">Builders' hall in the world</td>
410
- <td class="cred">120</td><td class="num">55</td><td class="num">2.2</td>
411
- <td><span class="state"><span class="bead"></span>ready</span></td>
412
- </tr>
413
- <tr>
414
- <td><label class="vh" for="r3">Select task 1003310</label><input id="r3" type="checkbox"></td>
415
- <th scope="row" class="tid">1003310</th>
416
- <td class="ttl">Status: the index mock in the world</td>
417
- <td class="goal">Status ledger in the world</td>
418
- <td class="cred">60</td><td class="num">30</td><td class="num">2.0</td>
419
- <td><span class="state"><span class="bead"></span>ready</span></td>
420
- </tr>
421
- <tr>
422
- <td><label class="vh" for="r4">Select task 1003251</label><input id="r4" type="checkbox"></td>
423
- <th scope="row" class="tid">1003251</th>
424
- <td class="ttl">The manage view says which door the project runs</td>
425
- <td class="goal">Project hub</td>
426
- <td class="cred">45</td><td class="num">25</td><td class="num">1.8</td>
427
- <td><span class="state"><span class="bead"></span>ready</span></td>
428
- </tr>
429
- <tr class="held">
430
- <td><label class="vh" for="r5">Select task 1003240</label><input id="r5" type="checkbox" disabled></td>
431
- <th scope="row" class="tid">1003240</th>
432
- <td class="ttl">A gated project refuses strangers at the door</td>
433
- <td class="goal">Project hub</td>
434
- <td class="cred">72</td><td class="num">45</td><td class="num">1.6</td>
435
- <td><span class="state state--active"><span class="bead"></span>active
436
- <svg class="ic lock" aria-hidden="true"><use href="#i-lock"></use></svg></span></td>
437
- </tr>
438
- <tr class="clash">
439
- <td><label class="vh" for="r6">Select task 1003241</label><input id="r6" type="checkbox"></td>
440
- <th scope="row" class="tid">1003241</th>
441
- <td class="ttl">The wizard remembers a half-finished project</td>
442
- <td class="goal">Project hub</td>
443
- <td class="cred">54</td><td class="num">35</td><td class="num">1.5</td>
444
- <td class="clashcell"><span class="state"><span class="bead"></span>has file conflicts</span></td>
445
- </tr>
446
- <tr>
447
- <td><label class="vh" for="r7">Select task 1003242</label><input id="r7" type="checkbox"></td>
448
- <th scope="row" class="tid">1003242</th>
449
- <td class="ttl">Copy desk: flags carry a reason</td>
450
- <td class="goal">Copy desk</td>
451
- <td class="cred">38</td><td class="num">30</td><td class="num">1.3</td>
452
- <td><span class="state"><span class="bead"></span>ready</span></td>
453
- </tr>
454
- <tr>
455
- <td><label class="vh" for="r8">Select task 1003245</label><input id="r8" type="checkbox"></td>
456
- <th scope="row" class="tid">1003245</th>
457
- <td class="ttl">The identity chip opens the profile menu</td>
458
- <td class="goal">Apex UI pass 2</td>
459
- <td class="cred">30</td><td class="num">25</td><td class="num">1.2</td>
460
- <td><span class="state"><span class="bead"></span>ready</span></td>
461
- </tr>
462
- <tr>
463
- <td><label class="vh" for="r9">Select task 1003235</label><input id="r9" type="checkbox"></td>
464
- <th scope="row" class="tid">1003235</th>
465
- <td class="ttl">The hub answers the keyboard</td>
466
- <td class="goal">Project hub</td>
467
- <td class="cred">24</td><td class="num">20</td><td class="num">1.2</td>
468
- <td><span class="state"><span class="bead"></span>ready</span></td>
469
- </tr>
470
- <tr>
471
- <td><label class="vh" for="r10">Select task 1003239</label><input id="r10" type="checkbox"></td>
472
- <th scope="row" class="tid">1003239</th>
473
- <td class="ttl">A same-tab GitHub return stays put</td>
474
- <td class="goal">Project hub</td>
475
- <td class="cred">20</td><td class="num">20</td><td class="num">1.0</td>
476
- <td><span class="state"><span class="bead"></span>ready</span></td>
477
- </tr>
478
- </tbody>
479
- </table>
480
- </div>
481
-
482
- <div class="bulk" role="region" aria-label="Bulk actions">
483
- <span class="count" id="count">0 selected</span>
484
- <button class="btn btn--go" type="button">Bulk claim</button>
485
- <button class="btn" type="button">Bulk release</button>
486
- <button class="btn" type="button">Copy parallel prompt</button>
487
- <button class="btn" type="button">Copy sequential prompt</button>
488
- <button class="btn" type="button" id="clear">Clear</button>
489
- </div>
490
-
491
- <div class="pager">
492
- <span class="of">1 to 10 of 42</span>
493
- <button class="btn" type="button">Previous</button>
494
- <button class="btn" type="button">Next</button>
495
- </div>
496
- </div>
497
-
498
- <div id="p-prog" role="tabpanel" aria-labelledby="t-prog" hidden><p class="empty">Nothing here yet.</p></div>
499
- <div id="p-back" role="tabpanel" aria-labelledby="t-back" hidden><p class="empty">Nothing here yet.</p></div>
500
- <div id="p-done" role="tabpanel" aria-labelledby="t-done" hidden><p class="empty">Nothing here yet.</p></div>
501
- </div>
502
- </main>
503
- </div>
504
- </div>
505
-
506
- <script>
507
- (function () {
508
- var root = document.documentElement;
509
- function isDark() {
510
- var m = root.getAttribute('data-mode');
511
- if (m === 'dark') return true;
512
- if (m === 'light') return false;
513
- return window.matchMedia('(prefers-color-scheme: dark)').matches;
514
- }
515
- document.getElementById('mode').addEventListener('click', function () {
516
- var next = isDark() ? 'light' : 'dark';
517
- root.setAttribute('data-mode', next);
518
- try { localStorage.setItem('cb-color-mode', next); } catch (e) {}
519
- });
520
-
521
- var rows = Array.prototype.slice.call(document.querySelectorAll('tbody input[type=checkbox]'));
522
- var all = document.getElementById('all');
523
- var count = document.getElementById('count');
524
- function tally() {
525
- var n = rows.filter(function (c) { return c.checked; }).length;
526
- count.textContent = n + ' selected';
527
- all.checked = n > 0 && n === rows.filter(function (c) { return !c.disabled; }).length;
528
- }
529
- rows.forEach(function (c) { c.addEventListener('change', tally); });
530
- all.addEventListener('change', function () {
531
- rows.forEach(function (c) { if (!c.disabled) c.checked = all.checked; });
532
- tally();
533
- });
534
- document.getElementById('clear').addEventListener('click', function () {
535
- rows.forEach(function (c) { c.checked = false; });
536
- all.checked = false;
537
- tally();
538
- });
539
-
540
- var tabs = Array.prototype.slice.call(document.querySelectorAll('[role=tab]'));
541
- tabs.forEach(function (tab) {
542
- tab.addEventListener('click', function () {
543
- tabs.forEach(function (t) {
544
- var on = t === tab;
545
- t.setAttribute('aria-selected', on ? 'true' : 'false');
546
- document.getElementById(t.getAttribute('aria-controls')).hidden = !on;
547
- });
548
- });
549
- });
550
- })();
551
- </script>
552
- </body>
553
- </html>