@bitmagic/cli 0.1.83-dev.1 → 0.1.83-dev.3

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 (206) hide show
  1. package/README.md +69 -0
  2. package/assets/skills/publishing-to-steam/SKILL.md +218 -0
  3. package/dist/assets/vxl-summary.d.ts +6 -20
  4. package/dist/assets/vxl-summary.js +9 -100
  5. package/dist/assets/vxl-summary.js.map +1 -1
  6. package/dist/cli.d.ts +1 -0
  7. package/dist/cli.js +2 -0
  8. package/dist/cli.js.map +1 -1
  9. package/dist/commands/check.js +5 -0
  10. package/dist/commands/check.js.map +1 -1
  11. package/dist/commands/forge.js +1 -1
  12. package/dist/commands/forge.js.map +1 -1
  13. package/dist/commands/ios.js +88 -136
  14. package/dist/commands/ios.js.map +1 -1
  15. package/dist/commands/steam-build.d.ts +67 -0
  16. package/dist/commands/steam-build.js +286 -0
  17. package/dist/commands/steam-build.js.map +1 -0
  18. package/dist/commands/steam-portal.d.ts +1 -0
  19. package/dist/commands/steam-portal.js +319 -0
  20. package/dist/commands/steam-portal.js.map +1 -0
  21. package/dist/commands/steam-upload.d.ts +37 -0
  22. package/dist/commands/steam-upload.js +174 -0
  23. package/dist/commands/steam-upload.js.map +1 -0
  24. package/dist/commands/steam.d.ts +1 -0
  25. package/dist/commands/steam.js +504 -0
  26. package/dist/commands/steam.js.map +1 -0
  27. package/dist/commands/verify.js +6 -0
  28. package/dist/commands/verify.js.map +1 -1
  29. package/dist/editor/asset-viewer.js +5 -4
  30. package/dist/editor/asset-viewer.js.map +1 -1
  31. package/dist/editor/server.js +1 -1
  32. package/dist/editor/server.js.map +1 -1
  33. package/dist/editor/shell-page.js +3 -3
  34. package/dist/forge/browser-host.d.ts +1 -1
  35. package/dist/forge/browser-host.js +1 -1
  36. package/dist/forge/browser-host.js.map +1 -1
  37. package/dist/ios/native-overrides.d.ts +27 -0
  38. package/dist/ios/native-overrides.js +87 -0
  39. package/dist/ios/native-overrides.js.map +1 -0
  40. package/dist/ios/record-validate.d.ts +1 -33
  41. package/dist/ios/record-validate.js +2 -100
  42. package/dist/ios/record-validate.js.map +1 -1
  43. package/dist/ios/store-bridge.d.ts +26 -0
  44. package/dist/ios/store-bridge.js +224 -0
  45. package/dist/ios/store-bridge.js.map +1 -0
  46. package/dist/ios/storekit-config.d.ts +15 -0
  47. package/dist/ios/storekit-config.js +106 -0
  48. package/dist/ios/storekit-config.js.map +1 -0
  49. package/dist/ios/xcode-template.d.ts +12 -3
  50. package/dist/ios/xcode-template.js +158 -27
  51. package/dist/ios/xcode-template.js.map +1 -1
  52. package/dist/package/collect-urls.d.ts +1 -1
  53. package/dist/package/collect-urls.js +10 -2
  54. package/dist/package/collect-urls.js.map +1 -1
  55. package/dist/package/offline-payload.d.ts +35 -0
  56. package/dist/package/offline-payload.js +142 -0
  57. package/dist/package/offline-payload.js.map +1 -0
  58. package/dist/package/packaged-check.d.ts +39 -0
  59. package/dist/package/packaged-check.js +104 -0
  60. package/dist/package/packaged-check.js.map +1 -0
  61. package/dist/package/transform.d.ts +4 -4
  62. package/dist/package/transform.js +3 -3
  63. package/dist/project/published-three.d.ts +14 -0
  64. package/dist/project/published-three.js +91 -0
  65. package/dist/project/published-three.js.map +1 -0
  66. package/dist/publish/bundle.js +6 -0
  67. package/dist/publish/bundle.js.map +1 -1
  68. package/dist/scaffold/project-files.js +7 -4
  69. package/dist/scaffold/project-files.js.map +1 -1
  70. package/dist/scaffold/project.js +2 -0
  71. package/dist/scaffold/project.js.map +1 -1
  72. package/dist/scaffold/skill-files.js +3 -1
  73. package/dist/scaffold/skill-files.js.map +1 -1
  74. package/dist/scaffold/steam-skill-files.d.ts +2 -0
  75. package/dist/scaffold/steam-skill-files.js +7 -0
  76. package/dist/scaffold/steam-skill-files.js.map +1 -0
  77. package/dist/steam/art-generate.d.ts +55 -0
  78. package/dist/steam/art-generate.js +174 -0
  79. package/dist/steam/art-generate.js.map +1 -0
  80. package/dist/steam/art-render.d.ts +25 -0
  81. package/dist/steam/art-render.js +157 -0
  82. package/dist/steam/art-render.js.map +1 -0
  83. package/dist/steam/art-use.d.ts +20 -0
  84. package/dist/steam/art-use.js +84 -0
  85. package/dist/steam/art-use.js.map +1 -0
  86. package/dist/steam/art.d.ts +98 -0
  87. package/dist/steam/art.js +243 -0
  88. package/dist/steam/art.js.map +1 -0
  89. package/dist/steam/check.d.ts +21 -0
  90. package/dist/steam/check.js +113 -0
  91. package/dist/steam/check.js.map +1 -0
  92. package/dist/steam/config.d.ts +57 -0
  93. package/dist/steam/config.js +145 -0
  94. package/dist/steam/config.js.map +1 -0
  95. package/dist/steam/electron-cache.d.ts +11 -0
  96. package/dist/steam/electron-cache.js +105 -0
  97. package/dist/steam/electron-cache.js.map +1 -0
  98. package/dist/steam/fuses.d.ts +16 -0
  99. package/dist/steam/fuses.js +75 -0
  100. package/dist/steam/fuses.js.map +1 -0
  101. package/dist/steam/icon-files.d.ts +16 -0
  102. package/dist/steam/icon-files.js +70 -0
  103. package/dist/steam/icon-files.js.map +1 -0
  104. package/dist/steam/image-info.d.ts +16 -0
  105. package/dist/steam/image-info.js +89 -0
  106. package/dist/steam/image-info.js.map +1 -0
  107. package/dist/steam/launch-check.d.ts +12 -0
  108. package/dist/steam/launch-check.js +101 -0
  109. package/dist/steam/launch-check.js.map +1 -0
  110. package/dist/steam/media.d.ts +48 -0
  111. package/dist/steam/media.js +155 -0
  112. package/dist/steam/media.js.map +1 -0
  113. package/dist/steam/package-macos.d.ts +52 -0
  114. package/dist/steam/package-macos.js +268 -0
  115. package/dist/steam/package-macos.js.map +1 -0
  116. package/dist/steam/package-windows.d.ts +23 -0
  117. package/dist/steam/package-windows.js +83 -0
  118. package/dist/steam/package-windows.js.map +1 -0
  119. package/dist/steam/paths.d.ts +35 -0
  120. package/dist/steam/paths.js +44 -0
  121. package/dist/steam/paths.js.map +1 -0
  122. package/dist/steam/playtest-shots.d.ts +18 -0
  123. package/dist/steam/playtest-shots.js +83 -0
  124. package/dist/steam/playtest-shots.js.map +1 -0
  125. package/dist/steam/portal-recipes.d.ts +25 -0
  126. package/dist/steam/portal-recipes.js +61 -0
  127. package/dist/steam/portal-recipes.js.map +1 -0
  128. package/dist/steam/portal.d.ts +58 -0
  129. package/dist/steam/portal.js +340 -0
  130. package/dist/steam/portal.js.map +1 -0
  131. package/dist/steam/raster.d.ts +58 -0
  132. package/dist/steam/raster.js +285 -0
  133. package/dist/steam/raster.js.map +1 -0
  134. package/dist/steam/shell-files.d.ts +17 -0
  135. package/dist/steam/shell-files.js +268 -0
  136. package/dist/steam/shell-files.js.map +1 -0
  137. package/dist/steam/specs.d.ts +61 -0
  138. package/dist/steam/specs.js +103 -0
  139. package/dist/steam/specs.js.map +1 -0
  140. package/dist/steam/steampipe.d.ts +46 -0
  141. package/dist/steam/steampipe.js +170 -0
  142. package/dist/steam/steampipe.js.map +1 -0
  143. package/dist/steam/store-copy.d.ts +88 -0
  144. package/dist/steam/store-copy.js +214 -0
  145. package/dist/steam/store-copy.js.map +1 -0
  146. package/dist/steam/tags.d.ts +9 -0
  147. package/dist/steam/tags.js +52 -0
  148. package/dist/steam/tags.js.map +1 -0
  149. package/dist/steam/trailer.d.ts +34 -0
  150. package/dist/steam/trailer.js +141 -0
  151. package/dist/steam/trailer.js.map +1 -0
  152. package/dist/theme/kernel.d.ts +14 -0
  153. package/dist/theme/kernel.js +15 -0
  154. package/dist/theme/kernel.js.map +1 -0
  155. package/dist/theme/theme-io.js +11 -16
  156. package/dist/theme/theme-io.js.map +1 -1
  157. package/dist/vendor/hud-theme/catalog.js +71 -0
  158. package/dist/vendor/hud-theme/engine/hud/ThemeTokens.js +115 -0
  159. package/dist/{theme/theme-color-math.js → vendor/hud-theme/engine/hud/colorMath.js} +13 -14
  160. package/dist/vendor/hud-theme/engine/hud/decorations.js +179 -0
  161. package/dist/vendor/hud-theme/engine/hud/fonts.js +147 -0
  162. package/dist/vendor/hud-theme/engine/hud/presets.js +80 -0
  163. package/dist/vendor/hud-theme/engine/hud/resolveWorldTheme.js +66 -0
  164. package/dist/vendor/hud-theme/engine/hud/themes/bitmagic.js +29 -0
  165. package/dist/vendor/hud-theme/engine/hud/themes/nexus.js +69 -0
  166. package/dist/vendor/hud-theme/engine/hud/themes/racing.js +57 -0
  167. package/dist/vendor/hud-theme/engine/hud/themes/rift-raider.js +63 -0
  168. package/dist/vendor/hud-theme/engine/hud/themes/simulator.js +55 -0
  169. package/dist/vendor/hud-theme/engine/hud/themes/village-keep.js +108 -0
  170. package/dist/vendor/hud-theme/engine/hud/validateTheme.js +535 -0
  171. package/dist/vendor/hud-theme/index.js +26 -0
  172. package/dist/{theme/theme-merge.js → vendor/hud-theme/merge.js} +0 -1
  173. package/dist/{theme/theme-report.js → vendor/hud-theme/report.js} +8 -9
  174. package/dist/{theme/theme-stored.js → vendor/hud-theme/stored.js} +6 -9
  175. package/dist/{theme/theme-validate.js → vendor/hud-theme/validate-strict.js} +102 -164
  176. package/dist/verify/browser.d.ts +11 -0
  177. package/dist/verify/browser.js +222 -155
  178. package/dist/verify/browser.js.map +1 -1
  179. package/dist/verify/categories.d.ts +1 -1
  180. package/dist/verify/categories.js +1 -0
  181. package/dist/verify/categories.js.map +1 -1
  182. package/dist/verify/classify.d.ts +14 -2
  183. package/dist/verify/classify.js +23 -4
  184. package/dist/verify/classify.js.map +1 -1
  185. package/dist/verify/hud-theme.d.ts +19 -14
  186. package/dist/verify/hud-theme.js +23 -17
  187. package/dist/verify/hud-theme.js.map +1 -1
  188. package/dist/verify/mobile-parity.d.ts +1 -1
  189. package/dist/verify/mobile-parity.js +1 -1
  190. package/dist/verify/start.d.ts +3 -2
  191. package/dist/verify/start.js +1 -1
  192. package/dist/verify/start.js.map +1 -1
  193. package/package.json +8 -6
  194. package/dist/theme/hud-theme-catalog.d.ts +0 -235
  195. package/dist/theme/hud-theme-catalog.js +0 -389
  196. package/dist/theme/hud-theme-catalog.js.map +0 -1
  197. package/dist/theme/theme-color-math.d.ts +0 -21
  198. package/dist/theme/theme-color-math.js.map +0 -1
  199. package/dist/theme/theme-merge.d.ts +0 -36
  200. package/dist/theme/theme-merge.js.map +0 -1
  201. package/dist/theme/theme-report.d.ts +0 -28
  202. package/dist/theme/theme-report.js.map +0 -1
  203. package/dist/theme/theme-stored.d.ts +0 -21
  204. package/dist/theme/theme-stored.js.map +0 -1
  205. package/dist/theme/theme-validate.d.ts +0 -41
  206. package/dist/theme/theme-validate.js.map +0 -1
@@ -0,0 +1,57 @@
1
+ // Racing theme — motorsport telemetry conventions (the "Racing" kit style):
2
+ // white line-art structure on near-black, red reserved for STATE, tall condensed
3
+ // display caps, hard corners, nothing glazed. Danger is a hot red-orange kept
4
+ // distinct from the crimson brand; caution is amber; sectors are green.
5
+ export const RACING_THEME_DATA = {
6
+ name: 'Racing',
7
+ // One-line mood label, read by the agent catalogue so an AI picks the right
8
+ // preset without trying each one. It lives HERE, beside the tokens it
9
+ // describes, so that changing the style and changing its description are the
10
+ // same edit — it drifted badly when it lived only in the agent mirror. The
11
+ // engine validator ignores unknown top-level keys, so this never reaches
12
+ // ThemeTokens; `PRESET_EVOKES` in presets.ts is what exposes it.
13
+ evokes: 'Motorsport telemetry — white line-art chrome on black with red reserved for state, tall narrow gothic caps, amber caution / green sector',
14
+ font: {
15
+ key: 'archivo-narrow',
16
+ case: 'upper',
17
+ weightBody: 500,
18
+ weightHeading: 700,
19
+ trackingLabel: 1.2,
20
+ outlineWidth: 0,
21
+ },
22
+ colors: {
23
+ // NOT red. The engine spends `primary` on both FILLS and accent TYPE —
24
+ // 13 `color: var(--hud-color-primary)` sites in hudBaseStyles/modalCard
25
+ // (lobby title + status, success toast, reticle, counters, modal title)
26
+ // plus whatever the game's own panels use it for. Any red here is red
27
+ // TYPE on a near-black HUD, which is what kept getting reported, and no
28
+ // saturated red can be fixed by tuning: even pure #FF0000 tops out at
29
+ // 4.87:1 on this surface.
30
+ //
31
+ // So Racing takes the OTHER half of its own reference: white line-art
32
+ // chrome, with red reserved for state. Red did not leave the style — it
33
+ // moved to `danger` below, where it means the redline, a failed run and
34
+ // critical health, which is exactly how a real timing board uses it.
35
+ primary: '#E8EDF2',
36
+ danger: '#FF4D3A',
37
+ warning: '#FFB000',
38
+ success: '#22C55E',
39
+ background: '#07090C',
40
+ surface: '#0E1319',
41
+ text: '#F2F5F8',
42
+ textMuted: '#9BA4AE', // 5.99:1 -> 7.39:1 under bebas-neue's narrow strokes
43
+ outline: '#C9D2DA',
44
+ },
45
+ shape: {
46
+ // Buttons are OBJECTS even when the panels are flat: `bevel` paints the
47
+ // white-top/dark-bottom gradient over buttons, counters and bars, and a
48
+ // 2px border in colors.outline follows the radius. The plates keep their
49
+ // hairline language — only the controls gain relief.
50
+ radiusPill: 4,
51
+ radiusCard: 2,
52
+ glow: 'none',
53
+ imageRendering: 'auto',
54
+ borderWidth: 2,
55
+ bevel: 0.5,
56
+ },
57
+ };
@@ -0,0 +1,63 @@
1
+ // Rift Raider theme — mobile action-RPG conventions (the "Rift Raider" kit
2
+ // style): cast-gold medallion frames on dark INDIGO glass, cream display type
3
+ // with a dark bronze stroke, ornate royal borders and a leather-grain backdrop.
4
+ // The outline token is the dark keyline, not the gold: it edges gold buttons AND
5
+ // strokes cream text, and both read right in bronze.
6
+ //
7
+ // The reference's material law is that GOLD IS TRIM, NOT FILL — it belongs to
8
+ // the band around a dark face, never to the face itself. `primary` stays gold
9
+ // because the engine spends it on frames, rules and accent type; the faces it
10
+ // sits against come from `surface`.
11
+ export const RIFT_RAIDER_THEME_DATA = {
12
+ name: 'Rift Raider',
13
+ // One-line mood label, read by the agent catalogue so an AI picks the right
14
+ // preset without trying each one. It lives HERE, beside the tokens it
15
+ // describes, so that changing the style and changing its description are the
16
+ // same edit — it drifted badly when it lived only in the agent mirror. The
17
+ // engine validator ignores unknown top-level keys, so this never reaches
18
+ // ThemeTokens; `PRESET_EVOKES` in presets.ts is what exposes it.
19
+ evokes: 'Mobile action-RPG — cast-gold medallion frames on dark indigo glass, chunky cream type with a dark ink ring, royal borders (Diablo-style)',
20
+ font: {
21
+ // Baloo 2, not lilita-one: Google serves Lilita One at a single weight,
22
+ // so `weightBody` and `weightHeading` both collapsed to 400 and this
23
+ // preset had NO type hierarchy at all — the one thing a HUD needs to
24
+ // separate a label from the value it labels. Baloo 2 is the same
25
+ // rounded chunky voice and ships 400-800, and it is the face the kit
26
+ // half of this style already uses.
27
+ key: 'baloo-2',
28
+ case: 'upper',
29
+ weightBody: 500,
30
+ weightHeading: 700,
31
+ trackingLabel: 0.8,
32
+ outlineWidth: 2,
33
+ },
34
+ colors: {
35
+ primary: '#F0B23A',
36
+ danger: '#D6332E',
37
+ warning: '#E07A28',
38
+ success: '#5FB35A',
39
+ // The dark ladder sits at hue ~256, not the old ~217. This style's
40
+ // violet accents live at 269, and against a hue-217 navy the surfaces
41
+ // and the accents read as two unrelated colour families sharing a
42
+ // screen. Lightness is held; only hue moves.
43
+ background: '#0B0716',
44
+ surface: '#191228',
45
+ text: '#FFF6E2',
46
+ textMuted: '#B9A889',
47
+ outline: '#5A3D0C',
48
+ },
49
+ shape: {
50
+ radiusPill: 14,
51
+ radiusCard: 14,
52
+ glow: 'gold',
53
+ imageRendering: 'auto',
54
+ borderWidth: 2,
55
+ bevel: 0.85,
56
+ },
57
+ decorations: {
58
+ progressBar: { borderImage: 'royal-frame' },
59
+ healthBar: { borderImage: 'royal-frame' },
60
+ toast: { borderImage: 'royal-frame' },
61
+ controls: { backdrop: 'grain-texture' },
62
+ },
63
+ };
@@ -0,0 +1,55 @@
1
+ // Simulator theme — instrument-panel conventions (the "Simulator" kit style):
2
+ // flat slate plates, hard corners, neutral grey-blue structure and ONE azure
3
+ // accent reserved for state. No glow and no decoration on the plates — the seriousness
4
+ // IS the absence of jewellery. Bars run semantic green / amber / red.
5
+ export const SIMULATOR_THEME_DATA = {
6
+ name: 'Simulator',
7
+ // One-line mood label, read by the agent catalogue so an AI picks the right
8
+ // preset without trying each one. It lives HERE, beside the tokens it
9
+ // describes, so that changing the style and changing its description are the
10
+ // same edit — it drifted badly when it lived only in the agent mirror. The
11
+ // engine validator ignores unknown top-level keys, so this never reaches
12
+ // ThemeTokens; `PRESET_EVOKES` in presets.ts is what exposes it.
13
+ evokes: 'Serious instrument panel — flat slate, hard corners, one azure accent for state, thin meters and a bare dial, no glow or ornament (flight/truck sim)',
14
+ font: {
15
+ key: 'ibm-plex-sans',
16
+ case: 'upper',
17
+ weightBody: 400,
18
+ weightHeading: 700,
19
+ trackingLabel: 0.8,
20
+ outlineWidth: 0,
21
+ },
22
+ colors: {
23
+ primary: '#2E9BDB',
24
+ danger: '#C8453F',
25
+ warning: '#D8A32E',
26
+ success: '#4E9E57',
27
+ background: '#0E141B',
28
+ surface: '#161E27',
29
+ text: '#DDE5EC',
30
+ textMuted: '#A2B0BE', // 4.84:1 -> 7.60:1; 4.5:1 is a 12-14px bar, not a 10px one
31
+ outline: '#46586A',
32
+ },
33
+ shape: {
34
+ // CONTOURED, NOT MOULDED — and that split is deliberate.
35
+ //
36
+ // The reference has neither: across eight screens of the Farming
37
+ // Simulator UI there is not one moulded control, and the first pass
38
+ // took it literally and set `bevel: 0`. Dead flat read as underdrawn
39
+ // next to the rest of the kit, so the call was made to depart from the
40
+ // reference here: `bevel` is what paints the white-top/dark-bottom
41
+ // gradient over buttons, counters and bars, and a modest 0.35 gives the
42
+ // fill and edge some depth.
43
+ //
44
+ // What stays gone is the SILHOUETTE moulding — the lip, the dome, the
45
+ // cast shadow — which is what made this style look like a mobile game
46
+ // wearing a simulator's palette. `borderWidth` stays 1: the edge here is
47
+ // a hairline, not the 2px rim the four physical styles carry.
48
+ radiusPill: 4,
49
+ radiusCard: 2,
50
+ glow: 'none',
51
+ imageRendering: 'auto',
52
+ borderWidth: 1,
53
+ bevel: 0.35,
54
+ },
55
+ };
@@ -0,0 +1,108 @@
1
+ // Village Keep theme — cartoon-strategy conventions (the "Village Keep" kit
2
+ // style): a light parchment ground for the big UI, darker moulded furniture for
3
+ // the HUD itself, candy-green buttons, rounded everything, maximum gloss and
4
+ // zero glow.
5
+ //
6
+ // THREE LEVELS, and they are the whole point of this preset:
7
+ //
8
+ // background #E9E1CE the light ground the BIG UI stands on — a game's own
9
+ // dialogs and panels paint themselves with this, and the
10
+ // lobby's text input is a light well because of it.
11
+ // surface #6E5C44 the HUD FURNITURE — counters, timers, toasts, the
12
+ // controls box, bubbles. 4.92:1 darker than the ground it
13
+ // sits on and 3.29:1 against a sunny-green world, so it
14
+ // reads as an object laid over the field rather than a
15
+ // patch of it.
16
+ // trough #3A3126 per-element, for the two bars: a channel has to be the
17
+ // darkest thing in the widget or the fill cannot be the
18
+ // brightest.
19
+ //
20
+ // Getting those three apart needed an engine token. `text` used to carry two
21
+ // jobs — ink on the light ground AND ink on the furniture — which only agree on a
22
+ // uniformly dark theme. With one ink the furniture caps out around #9E9276, which
23
+ // is 1.4:1 against grass and so is not furniture at all; that ceiling is why this
24
+ // style spent three rounds flipping between a washed-out HUD and a uniformly dark
25
+ // one. `--hud-color-on-surface` (see ThemeManager) derives the second ink, so the
26
+ // ground can stay light while the furniture goes as dark as it needs to. Here it
27
+ // resolves to white at 6.41:1, and its muted companion to #DEDAD5 at 4.65:1.
28
+ //
29
+ // What the palette still has to solve by hand:
30
+ //
31
+ // - `primary`, `danger` and `warning` are each a FILL colour and an accent TYPE
32
+ // colour, and on this style the type sits on `surface` (five of the six
33
+ // `color: var(--hud-color-primary)` rules do). Type wants a light value,
34
+ // which is the opposite of the usual instinct for a fill — but going light
35
+ // lets `--hud-color-on-primary` / `--hud-color-on-danger` derive BLACK, and a
36
+ // dark label on a bright candy fill clears far more than white on a mid one.
37
+ // Both jobs come out ahead.
38
+ // - the one place that trade does NOT hold is the health bar, whose fill sits in
39
+ // a near-black trough where a pale salmon reads as neither red nor alarming.
40
+ // That is what the per-element overrides at the bottom are for.
41
+ export const VILLAGE_KEEP_THEME_DATA = {
42
+ name: 'Village Keep',
43
+ // One-line mood label, read by the agent catalogue so an AI picks the right
44
+ // preset without trying each one. It lives HERE, beside the tokens it
45
+ // describes, so that changing the style and changing its description are the
46
+ // same edit — it drifted badly when it lived only in the agent mirror. The
47
+ // engine validator ignores unknown top-level keys, so this never reaches
48
+ // ThemeTokens; `PRESET_EVOKES` in presets.ts is what exposes it.
49
+ evokes: 'Cartoon strategy — light parchment panels with darker moulded HUD chips over a sunny world, candy-green glossy buttons, ink-outlined type, zero glow (Clash-style)',
50
+ font: {
51
+ key: 'fredoka',
52
+ case: 'upper',
53
+ weightBody: 500,
54
+ weightHeading: 700,
55
+ trackingLabel: 0.6,
56
+ // Light type on the furniture wants a dark ring — the pairing the ink
57
+ // ring was invented for, and what keeps the bar's inside-value legible
58
+ // where it crosses its own fill.
59
+ outlineWidth: 2,
60
+ },
61
+ colors: {
62
+ primary: '#9BDB4F', // 3.86:1 as accent type on the furniture; auto-label black 12.64
63
+ danger: '#FFA898', // 3.45:1 as type; auto-label black 11.31
64
+ warning: '#FFC46B', // 4.08:1 as type; the mobile button's black label 13.36
65
+ success: '#A5E27E', // 4.20:1 as type
66
+ background: '#E9E1CE',
67
+ surface: '#6E5C44',
68
+ text: '#413A2C', // 8.64:1 on the ground — this ink is for the BIG UI
69
+ textMuted: '#585040', // 6.12:1 on the ground
70
+ outline: '#3A6212', // dark forest edge: the button's ring and the panel's border
71
+ },
72
+ shape: {
73
+ radiusPill: 14,
74
+ radiusCard: 18,
75
+ glow: 'none',
76
+ imageRendering: 'auto',
77
+ borderWidth: 3,
78
+ bevel: 0.9,
79
+ },
80
+ decorations: {
81
+ // The gloss is on the small pill only. On a near-black surface it cost
82
+ // nothing to put it on the controls box as well, but against mid-brown
83
+ // furniture the highlight lifts the backdrop under the first key rows far
84
+ // enough to take their muted label from 4.65:1 to 3.88:1 — and a
85
+ // highlight is a button-and-chip device in the reference anyway, not
86
+ // something laid across an information panel.
87
+ toast: { backdrop: 'candy-gloss' },
88
+ },
89
+ elements: {
90
+ // `background` is the light ground now, and `hudBaseStyles` paints a bar
91
+ // TRACK with it — which would put a light fill inside a light channel and
92
+ // leave the reading to guesswork. The reference settles it the same way:
93
+ // its resource meters are near-black troughs precisely so the coloured
94
+ // fill is the brightest thing in the bar.
95
+ progressBar: { colors: { background: '#3A3126' } },
96
+ healthBar: {
97
+ colors: {
98
+ background: '#3A3126',
99
+ // Deeper than the global values, which are tuned to be legible as
100
+ // TYPE on the mid-brown furniture. In a near-black trough that
101
+ // tuning inverts: a pale salmon is 1.9:1 there and reads as
102
+ // neither red nor urgent, where this is 3.11:1 and unmistakable.
103
+ danger: '#E2452F',
104
+ warning: '#E89A2A',
105
+ },
106
+ },
107
+ },
108
+ };