@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,462 +0,0 @@
1
- /* organic-cards - "The grove": Cloud Bongos as a sculpted paper garden, every value sampled from the owner's
2
- template (site-4-green-brown-organic-card-system.jpg) and from the two ground plates the pages actually ship.
3
- Palette strategy: FULL - three named fields carry the system (sea green grounds the slab, bark brown the
4
- quiet marks, lit tan every live or pressable thing), with wood terracotta reserved for the small drum in the
5
- bongo mark. All four are world constants that never flip with the mode; only the neutrals and the plates do.
6
- Faces: Nunito 400/600/800 (the template's rounded, wide-aperture voice); JetBrains Mono 400/500 only for the
7
- light hall's uppercase labels, per the hall-1 template.
8
- Materials: photographic leaf plates over sculpted paper, a soft-focus forest behind the dark hall's glass,
9
- paper grain plus a raking ripple, tinted (never grey) shadows, circular badges, 1px light edges on dark glass.
10
- Corners: ALL-SOFT - 22px on cards and containers, 12px on chips, pill on buttons, inputs and tabs.
11
- Derived from the contract: the fifteen contract tokens are the host's override surface and carry the world's
12
- identity - --sea is the slab and the light primary, --accent every live or pressable thing, --accent-deep every
13
- quiet mark, --terracotta the small drum in the bongo mark. Everything below them is a DERIVED token: the fields,
14
- surface fills, edges, plates, bars and control colours are named here so page CSS never holds a colour, and a
15
- host may override any of them too. Page CSS consumes tokens only and never branches on the colour mode; the
16
- sole literals left in the two pages carry no hue at all: the mark's four specular #fff highlights, which stay
17
- white by contract, white inset sheens that tint a material, and the #000 channel of one mask gradient. */
18
-
19
- :root {
20
- /* ---- the four named fields + cream: world constants, identical in both modes ---- */
21
- --sea: #2a5a46; /* green - the ground of the grove */
22
- --accent-deep: #74513a; /* brown - bark, the second field */
23
- --accent: #e3c39c; /* tan - the lit thing: badges, doors */
24
- --terracotta: #b07a4e; /* wood - the small drum's shell */
25
- --cream: #f2e6c8; /* cream - type on any dark field */
26
-
27
- --font-display: 'Nunito', 'Trebuchet MS', system-ui, sans-serif;
28
- --font-body: 'Nunito', 'Trebuchet MS', system-ui, sans-serif;
29
- --font-mono: 'JetBrains Mono', ui-monospace, 'Cascadia Mono', Consolas, monospace;
30
-
31
- --radius: 22px;
32
- --radius-sm: 12px;
33
- --radius-pill: 999px;
34
- --line: 1px;
35
- --zoom: 1;
36
-
37
- /* the inherited bongo mark (top bar + hall): warm wood shells, cream heads */
38
- --skin-hi: #fdf3de;
39
- --skin-mid: #edd4a8;
40
- --skin-lo: #c6a273;
41
- --drum-shadow: #13291e;
42
-
43
- /* the rendered hero object: wood bongos with a monstera leaf, real alpha, reads on both grounds */
44
- --plate-object: url(../../../../../.impeccable/mocks/world-assets/r2-bongos-organic-a-cut.png);
45
-
46
- /* paper grain and the template's raking ripple, layered over every ground */
47
- --grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E");
48
- /* the template's raking ripple runs ACROSS the ground, almost horizontal, in wide soft bands */
49
- --ripple: repeating-linear-gradient(174deg, rgba(255, 255, 255, .034) 0 7px, rgba(0, 0, 0, .030) 7px 20px, transparent 20px 58px);
50
-
51
- /* the wide feature slab (the template's signature dark-green panel): dark in BOTH modes, so its
52
- ink, hairlines and track are world constants; only the fill follows the ground it sits on */
53
- --on-sea: #f2e6c8;
54
- --on-sea-soft: #ccd6b7;
55
- --sea-rule: rgba(242, 230, 200, .20);
56
- --sea-track: rgba(9, 26, 19, .45);
57
- --slab-edge: rgba(242, 230, 200, .17);
58
- --slab-div: rgba(242, 230, 200, .13);
59
-
60
- /* --lead / --lead-dot (the leader line into the photograph) are per-mode: the tan reads on the dark
61
- plate but measures 1.5:1 on the pale one, so light derives them from --accent-deep instead. */
62
-
63
- /* ================= LIGHT (the pale sage twin, sampled from r2-leaves-light.jpg) ================= */
64
- --bg: #c8d7bf;
65
- --bg-card: #f4f7f0;
66
- --bg-deep: #b7cbaf;
67
- --bg-frame: #d9e4d0;
68
- --ink: #163c2a;
69
- --ink-soft: #2f5240;
70
- --ink-faint: #476350;
71
- --rule: #9db69a;
72
- --rule-soft: #c6d5c0;
73
-
74
- --ok: #2e6b45;
75
- --warn: #7d5410;
76
- --err: #8d3a22;
77
- --focus: var(--accent-deep);
78
- --on-accent: #2c4636;
79
-
80
- --shadow-card: 8px 14px 26px -14px rgba(58, 74, 58, .42), 2px 3px 7px rgba(58, 74, 58, .14);
81
- --shadow-lift: 12px 24px 40px -16px rgba(58, 74, 58, .48), 3px 5px 11px rgba(58, 74, 58, .18);
82
- --mark-shadow: 24px 32px 46px rgba(78, 94, 76, .38);
83
- --grain-op: .07;
84
- --ripple-op: .17;
85
- --ground-glow: radial-gradient(1200px 700px at 50% 8%, rgba(255, 255, 255, .55), transparent 62%),
86
- radial-gradient(130% 105% at 50% 46%, transparent 42%, rgba(120, 134, 112, .30));
87
-
88
- --plate-hero: url(../../../../../.impeccable/mocks/world-assets/r2-leaves-light.jpg);
89
- --plate-forest: none;
90
- --plate-leaf: none;
91
- --forest-filter: none;
92
- --leaf-op: 0;
93
- --hall-tint: linear-gradient(180deg, #d9e4d0, #cedcc4);
94
- --hero-band: linear-gradient(152deg, #d5e1cc 0%, #c8d7bf 50%, #bccfb2 100%);
95
- --scrim-a: rgba(240, 244, 234, .50);
96
- --scrim-mid: rgba(240, 244, 234, .22);
97
- --scrim-b: rgba(240, 244, 234, 0);
98
- --scrim-reach: 66%;
99
- --head-band: linear-gradient(150deg, #b9cdb0 0%, #c6d6ba 50%, #aec3a6 100%);
100
- /* the light plate carries a straight sage-to-cream paper seam at its 33% mark; crop past it so the
101
- hero ground is one continuous cream field rather than a hard vertical step behind the headline */
102
- --plate-size: auto 150%;
103
- --plate-pos: 93% center;
104
- --slab: var(--sea);
105
-
106
- --field-green: #c7d9b8;
107
- --on-green: #163c2a;
108
- --on-green-soft: #3d5c48;
109
- --field-brown: #74513a;
110
- --on-brown: #f2e6c8;
111
- --on-brown-soft: #e6d4b5;
112
- --field-tan: #e8cfa8;
113
- --on-tan: #2a4436;
114
- --on-tan-soft: #3f5a4a;
115
- --field-deep: #5b4130;
116
- --on-deep: #f2e6c8;
117
- --on-deep-soft: #dcc7a6;
118
- --field-mute: #c2cdbc;
119
- --on-mute: #3d5245;
120
-
121
- --tile-fill: rgba(206, 222, 199, .90);
122
- --tile-edge: rgba(22, 60, 42, .13);
123
- --tile-ink: #163c2a;
124
- --bar-track: #c3d3bd;
125
- --bar-fill: linear-gradient(90deg, #c1904f, #dcb480);
126
-
127
- --glass: #f4f7f0;
128
- --glass-edge: #ccdac5;
129
- --glass-filter: none;
130
- --glass-inner: none;
131
- --panel: #f9fbf6;
132
- --panel-edge: #d7e2d1;
133
- --side-bg: #eff3e9;
134
- --side-edge: #dae5d2;
135
- --thead-bg: #eef3e8;
136
-
137
- --row-alt: rgba(22, 60, 42, .030);
138
- --row-hover: rgba(116, 81, 58, .09);
139
- --row-dim: .62;
140
- --hatch: color-mix(in srgb, var(--warn) 26%, transparent);
141
- --hatch-ink: var(--warn);
142
- --ink-held: var(--ink-faint);
143
- /* the core goes well below the accent's own value: a mid-tone core against mid-tone foliage lands at
144
- 2.3:1 whichever way you turn it, so the pair is a near-black core inside a near-white casing */
145
- --lead: color-mix(in srgb, var(--accent-deep) 44%, #000000);
146
- --lead-dot: var(--accent-deep);
147
- --lead-case: rgba(248, 250, 244, .94);
148
- --shade: rgba(58, 74, 58, .34);
149
- --opt-fg: #163c2a;
150
- --opt-bg: #f4f7f0;
151
- --input-bg: #ffffff;
152
- --input-bd: #b7c9b1;
153
-
154
- --nav-cur-bg: color-mix(in srgb, var(--accent-deep) 13%, var(--side-bg));
155
- --nav-cur-fg: var(--accent-deep);
156
- --nav-hover: rgba(42, 90, 70, .10);
157
- --rank-bg: color-mix(in srgb, var(--accent-deep) 12%, var(--panel));
158
- --rank-fg: var(--accent-deep);
159
- --rank-bd: color-mix(in srgb, var(--accent-deep) 30%, transparent);
160
- --tab-sel-bg: transparent;
161
- --tab-sel-fg: var(--accent-deep);
162
- --tab-sel-line: inset 0 -2px 0 var(--accent-deep);
163
- --tab-radius: 11px 11px 3px 3px;
164
- --tab-bg: transparent;
165
- --tab-bd: transparent;
166
- --btn-1-bg: var(--sea);
167
- --btn-1-fg: #f2e6c8;
168
- --btn-2-bg: transparent;
169
- --btn-2-fg: var(--accent-deep);
170
- --btn-2-bd: var(--accent-deep);
171
- --btn-o-bg: transparent;
172
- --btn-o-fg: var(--accent-deep);
173
- --btn-o-bd: var(--accent-deep);
174
- --door-2-bd: rgba(22, 60, 42, .50);
175
-
176
- --label-font: var(--font-mono);
177
- --label-ls: .06em;
178
- --label-weight: 500;
179
- --nav-font: var(--font-mono);
180
- --nav-tt: uppercase;
181
- --nav-ls: .04em;
182
- --nav-weight: 400;
183
- --th-font: var(--font-mono);
184
- --th-tt: uppercase;
185
- --th-ls: .05em;
186
- --th-weight: 500;
187
- --side-brand: block;
188
-
189
- --sb-thumb: #a8bda2;
190
- --sb-track: transparent;
191
- --moon-o: 0;
192
- --sun-o: 1;
193
- --toggle-bg: #c1d2b9;
194
- --toggle-bd: rgba(22, 60, 42, .24);
195
- }
196
-
197
- /* ================= DARK (judged first: the template's green world) ================= */
198
- :root[data-mode="dark"] {
199
- --bg: #2f6049;
200
- --bg-card: #3a6d57;
201
- --bg-deep: #22503e;
202
- --bg-frame: #15382a;
203
- --ink: #f2e6c8;
204
- --ink-soft: #e0cfab;
205
- --ink-faint: #c3d4bd;
206
- --rule: rgba(242, 230, 200, .22);
207
- --rule-soft: rgba(242, 230, 200, .11);
208
-
209
- --ok: #8fc79c;
210
- --warn: #e2b45c;
211
- --err: #e08c6a;
212
- --focus: color-mix(in srgb, var(--accent) 82%, #ffffff);
213
- --on-accent: #1b3a2a;
214
-
215
- --shadow-card: 10px 18px 32px -16px rgba(8, 24, 16, .80), 2px 3px 8px rgba(8, 24, 16, .34);
216
- --shadow-lift: 14px 28px 46px -18px rgba(8, 24, 16, .86), 3px 5px 12px rgba(8, 24, 16, .40);
217
- --mark-shadow: 26px 34px 52px rgba(7, 22, 15, .68);
218
- --grain-op: .06;
219
- --ripple-op: .40;
220
- --ground-glow: radial-gradient(1200px 700px at 50% 8%, rgba(255, 255, 255, .10), transparent 62%),
221
- radial-gradient(130% 105% at 50% 46%, transparent 40%, rgba(9, 28, 19, .52));
222
-
223
- --plate-hero: url(../../../../../.impeccable/mocks/world-assets/r2-leaves-dark.jpg);
224
- --plate-forest: url(../../../../../.impeccable/mocks/world-assets/forest-mist.jpg);
225
- --plate-leaf: url(../../../../../.impeccable/mocks/world-assets/r2-leaves-dark.jpg);
226
- --forest-filter: blur(2px) saturate(.88) brightness(1.16) contrast(1.14);
227
- --leaf-op: .12;
228
- --hall-tint: linear-gradient(180deg, rgba(17, 40, 30, .24), rgba(9, 26, 19, .46));
229
- --hero-band: linear-gradient(152deg, #37684f 0%, #2f6049 46%, #24523e 100%);
230
- --scrim-a: rgba(18, 42, 32, .34);
231
- --scrim-mid: rgba(18, 42, 32, .15);
232
- --scrim-b: rgba(18, 42, 32, 0);
233
- --scrim-reach: 54%;
234
- --head-band: linear-gradient(150deg, #3f7264 0%, #356254 48%, #284c40 100%);
235
- --plate-size: cover;
236
- --plate-pos: right center;
237
- --slab: color-mix(in srgb, var(--sea) 74%, #000000);
238
-
239
- --field-green: #7c9c64;
240
- --on-green: #11261b;
241
- --on-green-soft: #16301f;
242
- --field-brown: #6b4a35;
243
- --on-brown: #f2e6c8;
244
- --on-brown-soft: #ddc9a7;
245
- --field-tan: #d5b48f;
246
- --on-tan: #1b3a2a;
247
- --on-tan-soft: #2c4436;
248
- --field-deep: #3d2b1f;
249
- --on-deep: #ecdcbb;
250
- --on-deep-soft: #c9b795;
251
- --field-mute: #2f4a3c;
252
- --on-mute: #b9c9b3;
253
-
254
- --tile-fill: rgba(28, 66, 52, .80);
255
- --tile-edge: rgba(242, 230, 200, .17);
256
- --tile-ink: #f2e6c8;
257
- --bar-track: rgba(10, 28, 20, .48);
258
- --bar-fill: linear-gradient(90deg, color-mix(in srgb, var(--accent) 78%, #8a6a44), var(--accent));
259
-
260
- --glass: rgba(19, 42, 32, .42);
261
- --glass-edge: rgba(244, 236, 214, .34);
262
- --glass-filter: blur(22px) saturate(1.08);
263
- --glass-inner: inset 0 1px 0 rgba(255, 255, 255, .14);
264
- --panel: rgba(15, 37, 28, .34);
265
- --panel-edge: rgba(244, 236, 214, .13);
266
- --side-bg: rgba(12, 32, 24, .40);
267
- --side-edge: rgba(244, 236, 214, .13);
268
- --thead-bg: rgba(12, 32, 24, .58);
269
-
270
- --row-alt: rgba(255, 255, 255, .030);
271
- --row-hover: color-mix(in srgb, var(--accent) 12%, transparent);
272
- --row-dim: .58;
273
- --hatch: color-mix(in srgb, var(--warn) 34%, transparent);
274
- --hatch-ink: var(--warn);
275
- --ink-held: var(--ink-faint);
276
- --lead: var(--accent);
277
- --lead-dot: var(--accent);
278
- --lead-case: rgba(9, 26, 19, .88);
279
- --shade: rgba(7, 22, 15, .55);
280
- --opt-fg: #f2e6c8;
281
- --opt-bg: #1e4335;
282
- --input-bg: rgba(8, 24, 17, .42);
283
- --input-bd: rgba(244, 236, 214, .20);
284
-
285
- --nav-cur-bg: var(--accent);
286
- --nav-cur-fg: var(--on-accent);
287
- --nav-hover: rgba(242, 230, 200, .09);
288
- --rank-bg: transparent;
289
- --rank-fg: #f2e6c8;
290
- --rank-bd: rgba(242, 230, 200, .32);
291
- --tab-sel-bg: var(--accent);
292
- --tab-sel-fg: var(--on-accent);
293
- --tab-sel-line: none;
294
- --tab-radius: var(--radius-pill);
295
- --tab-bg: rgba(255, 255, 255, .05);
296
- --tab-bd: rgba(244, 236, 214, .14);
297
- --btn-1-bg: var(--accent);
298
- --btn-1-fg: var(--on-accent);
299
- --btn-2-bg: transparent;
300
- --btn-2-fg: #f2e6c8;
301
- --btn-2-bd: rgba(242, 230, 200, .34);
302
- --btn-o-bg: transparent;
303
- --btn-o-fg: #f2e6c8;
304
- --btn-o-bd: rgba(242, 230, 200, .34);
305
- --door-2-bd: rgba(242, 230, 200, .40);
306
-
307
- --label-font: var(--font-body);
308
- --label-ls: .13em;
309
- --label-weight: 700;
310
- --nav-font: var(--font-body);
311
- --nav-tt: none;
312
- --nav-ls: .005em;
313
- --nav-weight: 600;
314
- --th-font: var(--font-body);
315
- --th-tt: none;
316
- --th-ls: .01em;
317
- --th-weight: 700;
318
- --side-brand: block;
319
-
320
- --sb-thumb: rgba(242, 230, 200, .22);
321
- --sb-track: transparent;
322
- --moon-o: 1;
323
- --sun-o: 0;
324
- --toggle-bg: rgba(9, 26, 19, .55);
325
- --toggle-bd: rgba(242, 230, 200, .24);
326
- }
327
-
328
- @media (prefers-color-scheme: dark) {
329
- :root:not([data-mode="light"]) {
330
- --bg: #2f6049;
331
- --bg-card: #3a6d57;
332
- --bg-deep: #22503e;
333
- --bg-frame: #15382a;
334
- --ink: #f2e6c8;
335
- --ink-soft: #e0cfab;
336
- --ink-faint: #c3d4bd;
337
- --rule: rgba(242, 230, 200, .22);
338
- --rule-soft: rgba(242, 230, 200, .11);
339
-
340
- --ok: #8fc79c;
341
- --warn: #e2b45c;
342
- --err: #e08c6a;
343
- --focus: color-mix(in srgb, var(--accent) 82%, #ffffff);
344
- --on-accent: #1b3a2a;
345
-
346
- --shadow-card: 10px 18px 32px -16px rgba(8, 24, 16, .80), 2px 3px 8px rgba(8, 24, 16, .34);
347
- --shadow-lift: 14px 28px 46px -18px rgba(8, 24, 16, .86), 3px 5px 12px rgba(8, 24, 16, .40);
348
- --mark-shadow: 26px 34px 52px rgba(7, 22, 15, .68);
349
- --grain-op: .06;
350
- --ripple-op: .40;
351
- --ground-glow: radial-gradient(1200px 700px at 50% 8%, rgba(255, 255, 255, .10), transparent 62%),
352
- radial-gradient(130% 105% at 50% 46%, transparent 40%, rgba(9, 28, 19, .52));
353
-
354
- --plate-hero: url(../../../../../.impeccable/mocks/world-assets/r2-leaves-dark.jpg);
355
- --plate-forest: url(../../../../../.impeccable/mocks/world-assets/forest-mist.jpg);
356
- --plate-leaf: url(../../../../../.impeccable/mocks/world-assets/r2-leaves-dark.jpg);
357
- --forest-filter: blur(2px) saturate(.88) brightness(1.16) contrast(1.14);
358
- --leaf-op: .12;
359
- --hall-tint: linear-gradient(180deg, rgba(17, 40, 30, .24), rgba(9, 26, 19, .46));
360
- --hero-band: linear-gradient(152deg, #37684f 0%, #2f6049 46%, #24523e 100%);
361
- --scrim-a: rgba(18, 42, 32, .34);
362
- --scrim-mid: rgba(18, 42, 32, .15);
363
- --scrim-b: rgba(18, 42, 32, 0);
364
- --scrim-reach: 54%;
365
- --head-band: linear-gradient(150deg, #3f7264 0%, #356254 48%, #284c40 100%);
366
- --plate-size: cover;
367
- --plate-pos: right center;
368
- --slab: color-mix(in srgb, var(--sea) 74%, #000000);
369
-
370
- --field-green: #7c9c64;
371
- --on-green: #11261b;
372
- --on-green-soft: #16301f;
373
- --field-brown: #6b4a35;
374
- --on-brown: #f2e6c8;
375
- --on-brown-soft: #ddc9a7;
376
- --field-tan: #d5b48f;
377
- --on-tan: #1b3a2a;
378
- --on-tan-soft: #2c4436;
379
- --field-deep: #3d2b1f;
380
- --on-deep: #ecdcbb;
381
- --on-deep-soft: #c9b795;
382
- --field-mute: #2f4a3c;
383
- --on-mute: #b9c9b3;
384
-
385
- --tile-fill: rgba(28, 66, 52, .80);
386
- --tile-edge: rgba(242, 230, 200, .17);
387
- --tile-ink: #f2e6c8;
388
- --bar-track: rgba(10, 28, 20, .48);
389
- --bar-fill: linear-gradient(90deg, color-mix(in srgb, var(--accent) 78%, #8a6a44), var(--accent));
390
-
391
- --glass: rgba(19, 42, 32, .42);
392
- --glass-edge: rgba(244, 236, 214, .34);
393
- --glass-filter: blur(22px) saturate(1.08);
394
- --glass-inner: inset 0 1px 0 rgba(255, 255, 255, .14);
395
- --panel: rgba(15, 37, 28, .34);
396
- --panel-edge: rgba(244, 236, 214, .13);
397
- --side-bg: rgba(12, 32, 24, .40);
398
- --side-edge: rgba(244, 236, 214, .13);
399
- --thead-bg: rgba(12, 32, 24, .58);
400
-
401
- --row-alt: rgba(255, 255, 255, .030);
402
- --row-hover: color-mix(in srgb, var(--accent) 12%, transparent);
403
- --row-dim: .58;
404
- --hatch: color-mix(in srgb, var(--warn) 34%, transparent);
405
- --hatch-ink: var(--warn);
406
- --ink-held: var(--ink-faint);
407
- --lead: var(--accent);
408
- --lead-dot: var(--accent);
409
- --lead-case: rgba(9, 26, 19, .88);
410
- --shade: rgba(7, 22, 15, .55);
411
- --opt-fg: #f2e6c8;
412
- --opt-bg: #1e4335;
413
- --input-bg: rgba(8, 24, 17, .42);
414
- --input-bd: rgba(244, 236, 214, .20);
415
-
416
- --nav-cur-bg: var(--accent);
417
- --nav-cur-fg: var(--on-accent);
418
- --nav-hover: rgba(242, 230, 200, .09);
419
- --rank-bg: transparent;
420
- --rank-fg: #f2e6c8;
421
- --rank-bd: rgba(242, 230, 200, .32);
422
- --tab-sel-bg: var(--accent);
423
- --tab-sel-fg: var(--on-accent);
424
- --tab-sel-line: none;
425
- --tab-radius: var(--radius-pill);
426
- --tab-bg: rgba(255, 255, 255, .05);
427
- --tab-bd: rgba(244, 236, 214, .14);
428
- --btn-1-bg: var(--accent);
429
- --btn-1-fg: var(--on-accent);
430
- --btn-2-bg: transparent;
431
- --btn-2-fg: #f2e6c8;
432
- --btn-2-bd: rgba(242, 230, 200, .34);
433
- --btn-o-bg: transparent;
434
- --btn-o-fg: #f2e6c8;
435
- --btn-o-bd: rgba(242, 230, 200, .34);
436
- --door-2-bd: rgba(242, 230, 200, .40);
437
-
438
- --label-font: var(--font-body);
439
- --label-ls: .13em;
440
- --label-weight: 700;
441
- --nav-font: var(--font-body);
442
- --nav-tt: none;
443
- --nav-ls: .005em;
444
- --nav-weight: 600;
445
- --th-font: var(--font-body);
446
- --th-tt: none;
447
- --th-ls: .01em;
448
- --th-weight: 700;
449
- --side-brand: block;
450
-
451
- --sb-thumb: rgba(242, 230, 200, .22);
452
- --sb-track: transparent;
453
- --moon-o: 1;
454
- --sun-o: 0;
455
- --toggle-bg: rgba(9, 26, 19, .55);
456
- --toggle-bd: rgba(242, 230, 200, .24);
457
- }
458
- }
459
-
460
- @media (prefers-reduced-motion: reduce) {
461
- *, *::before, *::after { animation: none !important; transition: none !important; }
462
- }