@bongos/core 1.19.725 → 1.19.727

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/.bongos-core.json +179 -494
  2. package/.devcontainer/Dockerfile +1 -1
  3. package/.devcontainer/devcontainer.json +2 -2
  4. package/.devcontainer/healthcheck.sh +1 -1
  5. package/.devcontainer/init-firewall.sh +1 -1
  6. package/.devcontainer/post-create.sh +2 -2
  7. package/.env.local.example +1 -1
  8. package/Dockerfile +1 -1
  9. package/docs/copy-inventory.md +1 -1
  10. package/docs/copy-registry.json +9 -9
  11. package/docs/module-api-changelog.md +4 -0
  12. package/docs/recipes/devbox-app-release.md +4 -4
  13. package/modules/dev-box/app/scripts/dmgbuild-settings.py +5 -5
  14. package/modules/dev-box/app/scripts/gen-brand.js +1 -1
  15. package/modules/dev-box/app/src/brand.js +1 -1
  16. package/modules/dev-box/app/test/unit.mjs +16 -16
  17. package/modules/dev-box/box-access.js +1 -1
  18. package/modules/dev-box/routes/box.js +1 -1
  19. package/modules/discord/discord-approvals.js +1 -1
  20. package/modules/grading/grader-model.js +1 -1
  21. package/modules/grading/grader-prompt.js +1 -1
  22. package/modules/grading/grader-workers/quality.js +1 -1
  23. package/modules/hall-ui/module.json +1 -1
  24. package/modules/hall-ui/public/brand-apply.js +1 -1
  25. package/modules/hall-ui/public/shell.js +1 -1
  26. package/modules/hall-ui/public/work.js +1 -1
  27. package/modules/lifecycle/conflict-resolve.js +1 -1
  28. package/modules/lifecycle/db-analytics.js +1 -1
  29. package/modules/lifecycle/routes/analytics.js +1 -1
  30. package/modules/onboarding/approval-broadcast.js +1 -1
  31. package/modules/onboarding/onboarding.js +1 -1
  32. package/modules/provisioning/tests/liveness.mjs +1 -1
  33. package/modules/public-landing/public/index.html +1 -1
  34. package/modules/public-landing/public/projects-floor.states.json +2 -2
  35. package/modules/public-landing/public/projects.probes.json +4 -4
  36. package/modules/public-landing/public/projects.states.json +2 -2
  37. package/modules/status-ui/module.json +1 -1
  38. package/modules/status-ui/public/status.js +4 -4
  39. package/modules/status-ui/public/style.css +1 -1
  40. package/modules/ui-design/kit/fixtures/cost-summary.json +1 -1
  41. package/modules/ui-design/kit/fixtures/featured-hub.json +1 -1
  42. package/modules/ui-design/kit/fixtures/featured.json +1 -1
  43. package/modules/ui-design/kit/fixtures/leaderboard.json +1 -1
  44. package/modules/ui-design/kit/fixtures/my-projects.json +1 -1
  45. package/modules/ui-design/kit/fixtures/progress.json +1 -1
  46. package/modules/ui-design/kit/fixtures/recent-shipped.json +1 -1
  47. package/package-lock.json +2 -2
  48. package/package.json +1 -1
  49. package/scripts/cron/style_guide_audit.sh +1 -1
  50. package/scripts/discord/lib.js +1 -1
  51. package/scripts/discord/post.js +1 -1
  52. package/scripts/gds/audit-authorship.sh +1 -1
  53. package/scripts/gds/audit-replay.sh +29 -2
  54. package/scripts/gds/audit-ships.js +1 -1
  55. package/scripts/gds/backfill-sessions.js +2 -2
  56. package/scripts/gds/cf-tunnel.js +4 -4
  57. package/scripts/gds/claude-materialize.js +2 -2
  58. package/scripts/gds/cli-lib.js +6 -6
  59. package/scripts/gds/cutover-codemod.js +1 -1
  60. package/scripts/gds/dev-lib.js +2 -2
  61. package/scripts/gds/diagnose-achievements.js +2 -2
  62. package/scripts/gds/fitness-checks-identity.js +6 -4
  63. package/scripts/gds/gate-review.js +14 -6
  64. package/scripts/gds/gen-diagrams.js +1 -1
  65. package/scripts/gds/leak-scan-allowlist.js +293 -0
  66. package/scripts/gds/learning-capture.js +1 -1
  67. package/scripts/gds/linkify-refs.js +2 -2
  68. package/scripts/gds/local-preview-lib.js +1 -1
  69. package/scripts/gds/mirror-lineage-check.js +1 -1
  70. package/scripts/gds/mirror-redact.js +17 -2
  71. package/scripts/gds/newcomer-floor.templates.json +1 -1
  72. package/scripts/gds/package-core.js +18 -1
  73. package/scripts/gds/paste-token.js +1 -1
  74. package/scripts/gds/provision-units.js +2 -2
  75. package/scripts/gds/publish-manifest.js +15 -0
  76. package/scripts/gds/repo-metrics.js +1 -1
  77. package/scripts/gds/sandbox-stage.js +1 -1
  78. package/scripts/gds/seed-bongos-coreB-tranche1-tasks.js +1 -1
  79. package/scripts/gds/seed-bongos-coreB-tranche2-tasks.js +1 -1
  80. package/scripts/gds/seed-bongos-goal-hierarchy-tasks.js +1 -1
  81. package/scripts/gds/seed-bongos-tasks.js +2 -2
  82. package/scripts/gds/seed-gds-v4-tasks.js +1 -1
  83. package/scripts/gds/seed-medusa-tasks.js +10 -10
  84. package/scripts/gds/seed-module-upstreaming.js +1 -1
  85. package/scripts/gds/seed-productization-tasks.js +6 -6
  86. package/scripts/gds/seed-provisioning-tasks.js +2 -2
  87. package/scripts/gds/seed-staging.sh +19 -6
  88. package/scripts/gds/ship-deploy-target.js +1 -1
  89. package/scripts/gds/ship-flow.js +1 -1
  90. package/scripts/gds/smoke-gds.js +1 -1
  91. package/scripts/status-probe.mjs +2 -2
  92. package/src/bongos/auth-discord.js +2 -2
  93. package/src/bongos/live-channel.js +1 -1
  94. package/src/bongos/permission-path-check.js +80 -3
  95. package/src/bongos/pool.js +1 -1
  96. package/src/bongos/routes/auth.js +11 -11
  97. package/src/bongos/routes/security.js +1 -1
  98. package/src/bongos/routes.js +1 -1
  99. package/src/branding.js +1 -1
  100. package/src/devbox-downloads.js +1 -1
  101. package/src/instance-config.js +2 -2
  102. package/src/module-api.js +1 -1
  103. package/src/module-loader/provenance.js +2 -2
  104. package/tests/art_stage.mjs +2 -2
  105. package/tests/auth_anthropic_identity.mjs +1 -1
  106. package/tests/auth_duplicate_cookie.mjs +1 -1
  107. package/tests/auth_error_brand.mjs +1 -1
  108. package/tests/auth_inactive_builder.mjs +1 -1
  109. package/tests/backup_cli.mjs +4 -4
  110. package/tests/bongos_box_connect.mjs +2 -2
  111. package/tests/bongos_downloads.mjs +2 -2
  112. package/tests/bongos_login.mjs +5 -5
  113. package/tests/box_connect_e2e.mjs +2 -2
  114. package/tests/box_dns_repoint.mjs +10 -10
  115. package/tests/box_host_keys.mjs +1 -1
  116. package/tests/box_onboard.mjs +9 -9
  117. package/tests/box_scope_session.mjs +1 -1
  118. package/tests/box_terminal_ssrf.mjs +7 -7
  119. package/tests/boxes.mjs +9 -9
  120. package/tests/branding.mjs +2 -2
  121. package/tests/bump_version.mjs +2 -2
  122. package/tests/cf_tunnel.mjs +40 -40
  123. package/tests/cli_token_reissue.mjs +7 -7
  124. package/tests/cloud_bongos_pack.mjs +1 -1
  125. package/tests/currency_label.mjs +8 -8
  126. package/tests/dev_lib.mjs +4 -4
  127. package/tests/devbox_dmg_backdrop.mjs +1 -1
  128. package/tests/devbox_downloads.mjs +2 -2
  129. package/tests/devbox_icons.mjs +1 -1
  130. package/tests/discord_approvals.mjs +1 -1
  131. package/tests/discord_oauth.mjs +2 -2
  132. package/tests/executed_closure.mjs +6 -1
  133. package/tests/first_admin_bootstrap.mjs +1 -1
  134. package/tests/gate_approvals.mjs +5 -5
  135. package/tests/government_protected_surfaces.mjs +137 -0
  136. package/tests/grade_aggregates_unavailable.mjs +1 -1
  137. package/tests/hook_user_agents.mjs +2 -2
  138. package/tests/init.mjs +6 -6
  139. package/tests/instance_config.mjs +1 -1
  140. package/tests/instance_manifest.mjs +5 -5
  141. package/tests/instance_mismatch_guard.mjs +13 -13
  142. package/tests/leak_scan_allowlist.mjs +94 -0
  143. package/tests/migrate_root_resolution.mjs +4 -4
  144. package/tests/mirror_redact.mjs +28 -4
  145. package/tests/module_catalog.mjs +5 -5
  146. package/tests/module_submissions.mjs +3 -3
  147. package/tests/package_core.mjs +1 -1
  148. package/tests/parallel-load.mjs +6 -6
  149. package/tests/projects_hub.mjs +2 -2
  150. package/tests/provision.mjs +50 -50
  151. package/tests/provisioning_github_app_routes.mjs +1 -1
  152. package/tests/provisioning_onboard_mode.mjs +2 -2
  153. package/tests/publish_reconciler.mjs +4 -4
  154. package/tests/sandbox_stage.mjs +1 -1
  155. package/tests/scrubber_corpus.mjs +3 -3
  156. package/tests/search_isolation.mjs +1 -1
  157. package/tests/session_records.mjs +1 -1
  158. package/tests/ship_card.mjs +6 -6
  159. package/tests/ship_ci_deploy.mjs +1 -1
  160. package/tests/single_host_hall.mjs +9 -9
  161. package/tests/smoke_preflight.mjs +1 -1
  162. package/tests/smoke_target.mjs +1 -1
  163. package/tests/status-probe.mjs +1 -1
  164. package/tests/status_mirror_sync.mjs +1 -1
  165. package/docs/adr/0004-amazonprimea-name-and-trademark-acceptance.md +0 -45
  166. package/docs/design/mocks/_schemes.css +0 -604
  167. package/docs/design/mocks/component-sheet.html +0 -428
  168. package/docs/design/mocks/hall/_tokens.css +0 -370
  169. package/docs/design/mocks/hall/board/v1.html +0 -846
  170. package/docs/design/mocks/hall/board/v2.html +0 -858
  171. package/docs/design/mocks/hall/board/v3.html +0 -884
  172. package/docs/design/mocks/hall/goals/v1.html +0 -1212
  173. package/docs/design/mocks/hall/goals/v2.html +0 -1192
  174. package/docs/design/mocks/hall/goals/v3.html +0 -1205
  175. package/docs/design/mocks/hall/hall-sheet.html +0 -244
  176. package/docs/design/mocks/hall/reading/v1.html +0 -1125
  177. package/docs/design/mocks/hall/reading/v2.html +0 -1177
  178. package/docs/design/mocks/hall/reading/v3.html +0 -1150
  179. package/docs/design/mocks/hall/settings/v1.html +0 -1238
  180. package/docs/design/mocks/hall/settings/v2.html +0 -1235
  181. package/docs/design/mocks/hall/settings/v3.html +0 -1299
  182. package/docs/design/mocks/hall/task/v1.html +0 -633
  183. package/docs/design/mocks/hall/task/v2.html +0 -646
  184. package/docs/design/mocks/hall/task/v3.html +0 -647
  185. package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg +0 -0
  186. package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg.json +0 -13
  187. package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg +0 -0
  188. package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg.json +0 -13
  189. package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg +0 -0
  190. package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg.json +0 -13
  191. package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg +0 -0
  192. package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg.json +0 -13
  193. package/docs/design/mocks/hub/hub-sheet.html +0 -192
  194. package/docs/design/mocks/hub/mine.html +0 -465
  195. package/docs/design/mocks/hub/picker.html +0 -421
  196. package/docs/design/mocks/hub/planets.html +0 -356
  197. package/docs/design/mocks/hub/v1.html +0 -1209
  198. package/docs/design/mocks/hub/v2.html +0 -1257
  199. package/docs/design/mocks/hub/v3.html +0 -1496
  200. package/docs/design/mocks/hub/wizard.html +0 -421
  201. package/docs/design/mocks/landing/landing-sheet.html +0 -131
  202. package/docs/design/mocks/landing/v1.html +0 -956
  203. package/docs/design/mocks/landing/v2.html +0 -708
  204. package/docs/design/mocks/landing/v3.html +0 -911
  205. package/docs/design/mocks/landing-page-mock.html +0 -687
  206. package/docs/design/mocks/landing-palettes.html +0 -103
  207. package/docs/design/mocks/projects-hub-mock.html +0 -991
  208. package/docs/design/mocks/projects-hub-variants.html +0 -146
  209. package/docs/design/mocks/projects-page-mock.html +0 -167
  210. package/docs/design/mocks/world/blue-hud/_tokens.css +0 -246
  211. package/docs/design/mocks/world/blue-hud/hall.html +0 -595
  212. package/docs/design/mocks/world/blue-hud/landing.html +0 -424
  213. package/docs/design/mocks/world/blue-hud/status.html +0 -410
  214. package/docs/design/mocks/world/chrome-blobs/_tokens.css +0 -479
  215. package/docs/design/mocks/world/chrome-blobs/hall.html +0 -553
  216. package/docs/design/mocks/world/chrome-blobs/landing-b.html +0 -581
  217. package/docs/design/mocks/world/chrome-blobs/landing.html +0 -328
  218. package/docs/design/mocks/world/chrome-blobs/status.html +0 -416
  219. package/docs/design/mocks/world/natgeo-editorial/_tokens.css +0 -377
  220. package/docs/design/mocks/world/natgeo-editorial/hall.html +0 -649
  221. package/docs/design/mocks/world/natgeo-editorial/landing-b.html +0 -743
  222. package/docs/design/mocks/world/natgeo-editorial/landing.html +0 -475
  223. package/docs/design/mocks/world/natgeo-editorial/status.html +0 -437
  224. package/docs/design/mocks/world/organic-cards/_tokens.css +0 -462
  225. package/docs/design/mocks/world/organic-cards/hall.html +0 -625
  226. package/docs/design/mocks/world/organic-cards/landing-b.html +0 -736
  227. package/docs/design/mocks/world/organic-cards/landing.html +0 -420
  228. package/docs/design/mocks/world/organic-cards/status.html +0 -458
  229. package/docs/design/mocks/world/world-sheet.html +0 -156
@@ -1,370 +0,0 @@
1
- /* The builders' hall in the chrome world - the candidate token tier for the composition round
2
- (task 1003302, goal 1000081). This file is what the round proposes should become the token tier of
3
- modules/hall-ui/public/style.css when task 1003303 builds the shell; the fifteen mocks under
4
- docs/design/mocks/hall/ all link it, so a steer here moves all fifteen at once.
5
-
6
- It is DESIGN.md's "Reuse: the hall and the status ledger" recipe, followed literally:
7
- 1. open on a bare :root carrying the pack's LIGHT values, exactly as config/branding.neutral.json
8
- has them (drift-tested), and no others;
9
- 2. add a derived tier below it REUSING THE WORLD'S NAMES - void*, glass*, accent-ink, accent-lift,
10
- accent-tint, accent-on, accent-glow, focus, type-halo, label-face, line, radius*, top-h - with
11
- the recipes from DESIGN.md's frontmatter, so an agent moving between the landing, the hub and
12
- the hall is in one world;
13
- 3. write the dark block twice at (0,2,0), pinning no accent literal;
14
- 4. keep composition out of it - every layout switch lives on the page's own body.
15
-
16
- THREE THINGS THIS FILE DOES THAT world.css DOES NOT, each one a hall problem the landing never had:
17
-
18
- a. THE STATUS VOCABULARY IS FIXED, AND IT IS THE ONE SANCTIONED EXCEPTION TO THE FIFTEEN RULE.
19
- DESIGN.md: "Status colours are the exception. This world's ok / warn / err are warm accent-derived
20
- states for a marketing surface. A surface that renders VERIFICATION state - the hall's chips, the
21
- status ledger's pillars, CI marks - keeps its own fixed green / amber / red vocabulary and must not
22
- adopt these." A grade that failed must not be salmon on a page whose primary door is also salmon.
23
- They are literal hexes on purpose; they are the only ones in this file; they live HERE rather than
24
- in any mock's own <style> (which tests/hall_audit.mjs would fail for redeclaring a pack var, and
25
- check-mock.js would fail for the literal); and DESIGN.md is what licenses them.
26
-
27
- THREE OF THE FOUR HAD TO MOVE, and that is a finding of this round, not a preference. style.css
28
- tuned them against the hall's retired ground (--bg #f5f6f8, --bg-card #ffffff). The chrome world's
29
- paper is darker (--bg #edecee), and measured against it the shipped values FAIL AA:
30
- ok #1a7f4b 4.27:1 on --bg warn #9a6700 4.13:1 on --bg
31
- info var(--sea) 3.85:1 on --bg and 4.36:1 on --bg-card, and 4.19:1 on dark --bg-card.
32
- So ok and warn are darkened, and info becomes a color-mix of the contract's --sea rather than the
33
- raw token: 86% over black in light, 91% over white in dark. Every pair now clears 4.5:1 on BOTH of
34
- its grounds in BOTH modes with about nine percent of headroom, the margin DESIGN.md sets for its
35
- own thinnest pair. --danger was already clear at 5.58:1 and is untouched. Task 1003303 should carry
36
- these values, not style.css's.
37
-
38
- b. THE HALL KEEPS BOTH MODES. The apex went dark only (ADR 0204) and light is now "the builders'
39
- hall's alone, its own hall-theme switch, untouched". The hall's switch writes html[data-theme],
40
- NOT html[data-mode] - so the dark tier below is written FOUR times, not twice: the world's two
41
- (data-mode + prefers-color-scheme, which is what check-mock.js measures and what the landing and
42
- the hub use) and the hall's own two (data-theme + prefers-color-scheme on :not([data-theme])),
43
- which is the selector shell.js actually sets. Task 1003303 may collapse this to the hall's pair
44
- once the mocks are done being read by the kit; the duplication is the round's, not the build's.
45
-
46
- c. --line IS A WIDTH HERE, NOT A COLOUR. DESIGN.md warns: "--line is a 1px WIDTH here and a hairline
47
- COLOUR in the hub's sheet; check the name before you port a rule." The hall follows world.css:
48
- --line is 1px, and the hairline's colour is --rule / --rule-soft. */
49
-
50
- :root {
51
- color-scheme: light;
52
-
53
- /* ---- the contract tier: the thirteen colours and two faces a host pack overrides, and nothing
54
- else. Values are config/branding.neutral.json theme.ui exactly (serve-internal.js COLOR_VARS
55
- re-declares these from the pack AFTER every stylesheet, so a host still wins). ---- */
56
- --bg: #edecee;
57
- --bg-card: #fbfafc;
58
- --bg-deep: #e2e1e4;
59
- --bg-frame: #f6f5f7;
60
- --ink: #17181a;
61
- --ink-soft: #55565a;
62
- --ink-faint: #65656a;
63
- --rule: #c6c6c8;
64
- --rule-soft: #dcdbdd;
65
- --accent: #fb9569;
66
- --accent-deep: #a3481a;
67
- --sea: #5b6fd0;
68
- --terracotta: #c9512c;
69
- --font-display: "Manrope", "Segoe UI", system-ui, -apple-system, sans-serif;
70
- --font-body: "Manrope", "Segoe UI", system-ui, -apple-system, sans-serif;
71
-
72
- /* ---- derived: the third face. Mono is where the hall quotes the machine - task ids, column heads,
73
- eyebrows, the rank label, a credit figure's unit. ---- */
74
- --font-mono: "JetBrains Mono", ui-monospace, "Cascadia Mono", Consolas, monospace;
75
-
76
- /* ---- derived: the void. The hall has no hero, so the void is only what a control needs when it sits
77
- over the plate in v3 - the one version that puts a rendered ground behind the shell. ---- */
78
- --void: #050508;
79
- --void-ink: #ffffff;
80
- --void-ink-soft: rgba(255, 255, 255, .70);
81
- --void-edge: rgba(23, 24, 26, .12);
82
- --void-pill: rgba(0, 0, 0, .5);
83
- --void-glass: rgba(23, 24, 26, .05);
84
- --void-glass-strong: rgba(23, 24, 26, .09);
85
-
86
- /* ---- derived: glass. Blur is a token because light glass over paper is a tint, not a frost. ---- */
87
- --glass: rgba(23, 24, 26, .05);
88
- --glass-strong: rgba(23, 24, 26, .08);
89
- --glass-edge: rgba(23, 24, 26, .12);
90
- --glass-blur: 0px;
91
-
92
- /* ---- derived: the skeleton tone. A hall problem the landing never had, because every hall page
93
- loads and the landing does not. The obvious choice, --bg-deep, is WRONG in dark: DESIGN.md
94
- says "in dark, deep collapses back to black", so --bg-deep and --bg are the same value and a
95
- skeleton painted with it is invisible on the black ground. This mix reads in BOTH modes and
96
- needs no dark twin, because both of its terms already flip. Found by the task archetype's
97
- build during this round; every archetype had solved it privately, so it is promoted here
98
- rather than left for 27 pages to reinvent. ---- */
99
- --skeleton: color-mix(in srgb, var(--ink) 10%, var(--bg-card));
100
-
101
- /* ---- derived: the reading measure. THE ch UNIT IS NOT A CHARACTER, and on this face the gap is
102
- large enough to have already shipped a bug. A ch is the width of the font's ZERO glyph, and
103
- Manrope's zero is much wider than its average lowercase, so 58ch renders about 72 characters.
104
- DESIGN.md asks for "max 56 to 62ch" for body copy; read as CSS ch that is roughly 70 to 77
105
- characters, well outside the measure it means. The live primer is the worked example:
106
- primer.css:138 sets `max-width: 72ch` under a comment reading "Roughly 60-72ch at 17px body",
107
- and it renders about 90 characters, which is the biggest reading defect on the page today.
108
- This token is MEASURED, not declared: 48ch renders ~60 characters at the hall's body size on
109
- Manrope. A surface wanting a different measure should re-measure rather than do the ch maths.
110
- Found by the reading archetype's build during this round. ---- */
111
- --measure: 48ch;
112
-
113
- /* ---- derived: accent behaviours. The One Warm Thing Rule holds in the hall too: the accent lights
114
- only what is pressable or live - the claim button, the current nav item, the active tab, the
115
- lit lifecycle step, a focus ring. A credit figure is data, not live, so it is ink. ---- */
116
- --accent-ink: color-mix(in srgb, var(--accent) 45%, #240e00);
117
- --accent-lift: color-mix(in srgb, var(--accent) 58%, #ffffff);
118
- --accent-tint: color-mix(in srgb, var(--accent) 30%, #fffdf9);
119
- --accent-on: #2a1305;
120
- --accent-glow: 0 0 0 0 transparent;
121
-
122
- /* ---- the status vocabulary: FIXED, not pack-driven, not accent-derived. See note (a) above:
123
- ok, warn and info are RE-MEASURED against the chrome world's paper, not style.css's values. ---- */
124
- --ok: #187444;
125
- --ok-weak: color-mix(in srgb, #187444 12%, var(--bg-card));
126
- --warn: #895c00;
127
- --warn-weak: color-mix(in srgb, #895c00 14%, var(--bg-card));
128
- --danger: #b42318;
129
- --danger-weak: color-mix(in srgb, #b42318 10%, var(--bg-card));
130
- --info: color-mix(in srgb, var(--sea) 86%, #000000);
131
- --info-weak: color-mix(in srgb, var(--sea) 11%, var(--bg-card));
132
-
133
- /* ---- derived: focus. The world's two-tone ring - a 2px accent-derived outline at 3px offset inside
134
- an 8px --bg halo, so the indicator keeps its own edge over whatever it lands on. ---- */
135
- --focus: color-mix(in srgb, var(--accent-deep) 82%, #3a1400);
136
-
137
- /* ---- derived: the label face flips. Mono caps read as precise on paper and thin on black, so light
138
- takes JetBrains Mono and dark takes the body face. Take the token, never the family. ---- */
139
- --label-face: var(--font-mono);
140
- --label-size: 11px;
141
- --label-space: .12em;
142
- --label-case: uppercase;
143
-
144
- /* ---- derived: type halo. Only v3 writes type over a plate; in light there is nothing behind. ---- */
145
- --type-halo: none;
146
-
147
- /* ---- structure. --line is a WIDTH (see note c). ---- */
148
- --line: 1px;
149
- --radius: 16px;
150
- --radius-sm: 10px;
151
- --radius-pill: 999px;
152
-
153
- /* ---- the shell's metrics. Names kept from style.css so task 1003303 ports rather than rewrites.
154
- --topbar-h stays under the kit's 80px top-bar floor. ---- */
155
- --top-h: 56px;
156
- --topbar-h: 56px;
157
- --sidebar-w: 240px;
158
- --sidebar-w-rail: 64px;
159
- --content-max: 1120px;
160
-
161
- /* ---- spacing. DESIGN.md's rhythm (6 / 10 / 14 / 22 / 34 / 52) replaces style.css's four-step
162
- --space-* scale; the old names alias onto it so no ported rule breaks. ---- */
163
- --sp-hair: 6px;
164
- --sp-xs: 10px;
165
- --sp-sm: 14px;
166
- --sp-md: 22px;
167
- --sp-lg: 34px;
168
- --sp-xl: 52px;
169
- --space-1: var(--sp-hair);
170
- --space-2: var(--sp-xs);
171
- --space-3: var(--sp-sm);
172
- --space-4: var(--sp-md);
173
-
174
- /* ---- the z ladder, unchanged from style.css ---- */
175
- --z-topbar: 30;
176
- --z-sidebar: 40;
177
- --z-scrim: 140;
178
- --z-drawer: 150;
179
-
180
- /* ---- the hall's own plate. DESIGN.md: "another surface adds its own and does not borrow these -
181
- the hall's forest plate, for instance, is the hall's." Round 1 shot it; only v3 renders it,
182
- and only in dark, where a black-ground plate composites with lighten and leaves no seam. ---- */
183
- --plate: none;
184
- --plate-blend: lighten;
185
- --plate-veil: none;
186
- }
187
-
188
- /* ---- dark, written for the world's switch (what check-mock.js and the kit measure) ---- */
189
- :root[data-mode="dark"] {
190
- color-scheme: dark;
191
- --bg: #000000;
192
- --bg-card: #101012;
193
- --bg-deep: #000000;
194
- --bg-frame: #08080a;
195
- --ink: #ffffff;
196
- --ink-soft: #c0c0c0;
197
- --ink-faint: #a8a8a8;
198
- --rule: rgba(255, 255, 255, .16);
199
- --rule-soft: rgba(255, 255, 255, .08);
200
- --void: #000000;
201
- --void-ink: var(--ink);
202
- --void-ink-soft: var(--ink-soft);
203
- --void-edge: rgba(255, 255, 255, .16);
204
- --void-glass: rgba(255, 255, 255, .075);
205
- --void-glass-strong: rgba(255, 255, 255, .14);
206
- --glass: rgba(255, 255, 255, .11);
207
- --glass-strong: rgba(255, 255, 255, .17);
208
- --glass-edge: rgba(255, 255, 255, .13);
209
- --glass-blur: 18px;
210
- --accent-ink: var(--accent);
211
- --accent-tint: color-mix(in srgb, var(--accent) 22%, #0b0a09);
212
- --accent-glow: 0 8px 28px color-mix(in srgb, var(--accent) 38%, transparent);
213
- --ok: #4ade80;
214
- --ok-weak: color-mix(in srgb, #4ade80 14%, var(--bg-card));
215
- --warn: #fbbf24;
216
- --warn-weak: color-mix(in srgb, #fbbf24 14%, var(--bg-card));
217
- --danger: #f87171;
218
- --danger-weak: color-mix(in srgb, #f87171 14%, var(--bg-card));
219
- --info: color-mix(in srgb, var(--sea) 91%, #ffffff);
220
- --info-weak: color-mix(in srgb, var(--sea) 18%, var(--bg-card));
221
- --focus: var(--accent);
222
- --label-face: var(--font-body);
223
- --label-size: 11.5px;
224
- --label-space: .1em;
225
- --type-halo: 0 2px 18px rgba(0, 0, 0, .94), 0 0 54px rgba(0, 0, 0, .72);
226
- --plate-veil: linear-gradient(to bottom, rgba(0, 0, 0, .82), rgba(0, 0, 0, .93));
227
- }
228
-
229
- @media (prefers-color-scheme: dark) {
230
- :root:not([data-mode="light"]) {
231
- color-scheme: dark;
232
- --bg: #000000;
233
- --bg-card: #101012;
234
- --bg-deep: #000000;
235
- --bg-frame: #08080a;
236
- --ink: #ffffff;
237
- --ink-soft: #c0c0c0;
238
- --ink-faint: #a8a8a8;
239
- --rule: rgba(255, 255, 255, .16);
240
- --rule-soft: rgba(255, 255, 255, .08);
241
- --void: #000000;
242
- --void-ink: var(--ink);
243
- --void-ink-soft: var(--ink-soft);
244
- --void-edge: rgba(255, 255, 255, .16);
245
- --void-glass: rgba(255, 255, 255, .075);
246
- --void-glass-strong: rgba(255, 255, 255, .14);
247
- --glass: rgba(255, 255, 255, .11);
248
- --glass-strong: rgba(255, 255, 255, .17);
249
- --glass-edge: rgba(255, 255, 255, .13);
250
- --glass-blur: 18px;
251
- --accent-ink: var(--accent);
252
- --accent-tint: color-mix(in srgb, var(--accent) 22%, #0b0a09);
253
- --accent-glow: 0 8px 28px color-mix(in srgb, var(--accent) 38%, transparent);
254
- --ok: #4ade80;
255
- --ok-weak: color-mix(in srgb, #4ade80 14%, var(--bg-card));
256
- --warn: #fbbf24;
257
- --warn-weak: color-mix(in srgb, #fbbf24 14%, var(--bg-card));
258
- --danger: #f87171;
259
- --danger-weak: color-mix(in srgb, #f87171 14%, var(--bg-card));
260
- --info: color-mix(in srgb, var(--sea) 91%, #ffffff);
261
- --info-weak: color-mix(in srgb, var(--sea) 18%, var(--bg-card));
262
- --focus: var(--accent);
263
- --label-face: var(--font-body);
264
- --label-size: 11.5px;
265
- --label-space: .1em;
266
- --type-halo: 0 2px 18px rgba(0, 0, 0, .94), 0 0 54px rgba(0, 0, 0, .72);
267
- --plate-veil: linear-gradient(to bottom, rgba(0, 0, 0, .82), rgba(0, 0, 0, .93));
268
- }
269
- }
270
-
271
- /* ---- dark again, for the hall's OWN switch: shell.js writes html[data-theme], not [data-mode].
272
- See note (b): these two blocks are what the shipped hall would actually use. ---- */
273
- html[data-theme="dark"] {
274
- color-scheme: dark;
275
- --bg: #000000;
276
- --bg-card: #101012;
277
- --bg-deep: #000000;
278
- --bg-frame: #08080a;
279
- --ink: #ffffff;
280
- --ink-soft: #c0c0c0;
281
- --ink-faint: #a8a8a8;
282
- --rule: rgba(255, 255, 255, .16);
283
- --rule-soft: rgba(255, 255, 255, .08);
284
- --void: #000000;
285
- --void-ink: var(--ink);
286
- --void-ink-soft: var(--ink-soft);
287
- --void-edge: rgba(255, 255, 255, .16);
288
- --void-glass: rgba(255, 255, 255, .075);
289
- --void-glass-strong: rgba(255, 255, 255, .14);
290
- --glass: rgba(255, 255, 255, .11);
291
- --glass-strong: rgba(255, 255, 255, .17);
292
- --glass-edge: rgba(255, 255, 255, .13);
293
- --glass-blur: 18px;
294
- --accent-ink: var(--accent);
295
- --accent-tint: color-mix(in srgb, var(--accent) 22%, #0b0a09);
296
- --accent-glow: 0 8px 28px color-mix(in srgb, var(--accent) 38%, transparent);
297
- --ok: #4ade80;
298
- --ok-weak: color-mix(in srgb, #4ade80 14%, var(--bg-card));
299
- --warn: #fbbf24;
300
- --warn-weak: color-mix(in srgb, #fbbf24 14%, var(--bg-card));
301
- --danger: #f87171;
302
- --danger-weak: color-mix(in srgb, #f87171 14%, var(--bg-card));
303
- --info: color-mix(in srgb, var(--sea) 91%, #ffffff);
304
- --info-weak: color-mix(in srgb, var(--sea) 18%, var(--bg-card));
305
- --focus: var(--accent);
306
- --label-face: var(--font-body);
307
- --label-size: 11.5px;
308
- --label-space: .1em;
309
- --type-halo: 0 2px 18px rgba(0, 0, 0, .94), 0 0 54px rgba(0, 0, 0, .72);
310
- --plate-veil: linear-gradient(to bottom, rgba(0, 0, 0, .82), rgba(0, 0, 0, .93));
311
- }
312
-
313
- @media (prefers-color-scheme: dark) {
314
- html:not([data-theme]) {
315
- color-scheme: dark;
316
- --bg: #000000;
317
- --bg-card: #101012;
318
- --bg-deep: #000000;
319
- --bg-frame: #08080a;
320
- --ink: #ffffff;
321
- --ink-soft: #c0c0c0;
322
- --ink-faint: #a8a8a8;
323
- --rule: rgba(255, 255, 255, .16);
324
- --rule-soft: rgba(255, 255, 255, .08);
325
- --void: #000000;
326
- --void-ink: var(--ink);
327
- --void-ink-soft: var(--ink-soft);
328
- --void-edge: rgba(255, 255, 255, .16);
329
- --void-glass: rgba(255, 255, 255, .075);
330
- --void-glass-strong: rgba(255, 255, 255, .14);
331
- --glass: rgba(255, 255, 255, .11);
332
- --glass-strong: rgba(255, 255, 255, .17);
333
- --glass-edge: rgba(255, 255, 255, .13);
334
- --glass-blur: 18px;
335
- --accent-ink: var(--accent);
336
- --accent-tint: color-mix(in srgb, var(--accent) 22%, #0b0a09);
337
- --accent-glow: 0 8px 28px color-mix(in srgb, var(--accent) 38%, transparent);
338
- --ok: #4ade80;
339
- --ok-weak: color-mix(in srgb, #4ade80 14%, var(--bg-card));
340
- --warn: #fbbf24;
341
- --warn-weak: color-mix(in srgb, #fbbf24 14%, var(--bg-card));
342
- --danger: #f87171;
343
- --danger-weak: color-mix(in srgb, #f87171 14%, var(--bg-card));
344
- --info: color-mix(in srgb, var(--sea) 91%, #ffffff);
345
- --info-weak: color-mix(in srgb, var(--sea) 18%, var(--bg-card));
346
- --focus: var(--accent);
347
- --label-face: var(--font-body);
348
- --label-size: 11.5px;
349
- --label-space: .1em;
350
- --type-halo: 0 2px 18px rgba(0, 0, 0, .94), 0 0 54px rgba(0, 0, 0, .72);
351
- --plate-veil: linear-gradient(to bottom, rgba(0, 0, 0, .82), rgba(0, 0, 0, .93));
352
- }
353
- }
354
-
355
- /* ---- THE RAIL SWITCH DELIBERATELY DOES NOT LIVE HERE. style.css collapses the sidebar to 64px at
356
- 1024px today, and an earlier draft of this file carried that as
357
- `@media (max-width:1024px){ :root { --sidebar-w: var(--sidebar-w-rail); } }`. That is broken,
358
- and the way it breaks is worth writing down because task 1003303 will be tempted to re-add it:
359
- the mock contract requires a page to declare its tokens on `body`, and a `body` declaration
360
- beats an INHERITED `:root` value at every width, so a page that sets --sidebar-w at all
361
- silently defeats the query. It is also rule 4 of the recipe in this file's own header, which
362
- the draft broke: composition belongs on the page's body, and the rail breakpoint is
363
- composition. Each version therefore states its own rail and drawer breakpoints on `body`,
364
- which is also what lets v3 hold the rail at every width instead of only under 1024. Found by
365
- the board archetype's build during this round. ---- */
366
-
367
- /* ---- The Kill Switch Rule. Nothing escapes it, and no motion is authored in JavaScript. ---- */
368
- @media (prefers-reduced-motion: reduce) {
369
- *, *::before, *::after { animation: none !important; transition: none !important; }
370
- }