@supportpages.io/wtfm 0.0.0-stage → 0.3.0

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 (275) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +23 -0
  3. package/README.md +392 -2
  4. package/dist/actions.d.ts +98 -0
  5. package/dist/actions.js +86 -0
  6. package/dist/actions.js.map +1 -0
  7. package/dist/agent-settings.d.ts +22 -0
  8. package/dist/agent-settings.js +35 -0
  9. package/dist/agent-settings.js.map +1 -0
  10. package/dist/api.d.ts +14 -0
  11. package/dist/api.js +159 -0
  12. package/dist/api.js.map +1 -0
  13. package/dist/article-link.d.ts +16 -0
  14. package/dist/article-link.js +25 -0
  15. package/dist/article-link.js.map +1 -0
  16. package/dist/artifacts.d.ts +45 -0
  17. package/dist/artifacts.js +144 -0
  18. package/dist/artifacts.js.map +1 -0
  19. package/dist/brand.d.ts +4 -0
  20. package/dist/brand.js +9 -0
  21. package/dist/brand.js.map +1 -0
  22. package/dist/bridge.d.ts +2964 -0
  23. package/dist/bridge.js +1036 -0
  24. package/dist/bridge.js.map +1 -0
  25. package/dist/capacity.d.ts +5 -0
  26. package/dist/capacity.js +11 -0
  27. package/dist/capacity.js.map +1 -0
  28. package/dist/credentials.d.ts +13 -0
  29. package/dist/credentials.js +88 -0
  30. package/dist/credentials.js.map +1 -0
  31. package/dist/development-tls.d.ts +8 -0
  32. package/dist/development-tls.js +38 -0
  33. package/dist/development-tls.js.map +1 -0
  34. package/dist/errors.d.ts +15 -0
  35. package/dist/errors.js +18 -0
  36. package/dist/errors.js.map +1 -0
  37. package/dist/export.d.ts +11 -0
  38. package/dist/export.js +91 -0
  39. package/dist/export.js.map +1 -0
  40. package/dist/hosted-operations.d.ts +108 -0
  41. package/dist/hosted-operations.js +120 -0
  42. package/dist/hosted-operations.js.map +1 -0
  43. package/dist/hosting-benefits.d.ts +66 -0
  44. package/dist/hosting-benefits.js +67 -0
  45. package/dist/hosting-benefits.js.map +1 -0
  46. package/dist/index.d.ts +2 -0
  47. package/dist/index.js +49 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/local-inventory.d.ts +22 -0
  50. package/dist/local-inventory.js +59 -0
  51. package/dist/local-inventory.js.map +1 -0
  52. package/dist/local-setup.d.ts +208 -0
  53. package/dist/local-setup.js +140 -0
  54. package/dist/local-setup.js.map +1 -0
  55. package/dist/pairing.d.ts +71 -0
  56. package/dist/pairing.js +235 -0
  57. package/dist/pairing.js.map +1 -0
  58. package/dist/preferences.d.ts +18 -0
  59. package/dist/preferences.js +44 -0
  60. package/dist/preferences.js.map +1 -0
  61. package/dist/progress.d.ts +205 -0
  62. package/dist/progress.js +224 -0
  63. package/dist/progress.js.map +1 -0
  64. package/dist/reminders.d.ts +31 -0
  65. package/dist/reminders.js +73 -0
  66. package/dist/reminders.js.map +1 -0
  67. package/dist/replace-connection.d.ts +6 -0
  68. package/dist/replace-connection.js +77 -0
  69. package/dist/replace-connection.js.map +1 -0
  70. package/dist/repository-actions.d.ts +18 -0
  71. package/dist/repository-actions.js +9 -0
  72. package/dist/repository-actions.js.map +1 -0
  73. package/dist/repository-benefits.d.ts +96 -0
  74. package/dist/repository-benefits.js +64 -0
  75. package/dist/repository-benefits.js.map +1 -0
  76. package/dist/run-update.d.ts +17 -0
  77. package/dist/run-update.js +27 -0
  78. package/dist/run-update.js.map +1 -0
  79. package/dist/runs.d.ts +541 -0
  80. package/dist/runs.js +146 -0
  81. package/dist/runs.js.map +1 -0
  82. package/dist/runtime.d.ts +12 -0
  83. package/dist/runtime.js +58 -0
  84. package/dist/runtime.js.map +1 -0
  85. package/dist/schema.d.ts +277 -0
  86. package/dist/schema.js +66 -0
  87. package/dist/schema.js.map +1 -0
  88. package/dist/server.d.ts +4 -0
  89. package/dist/server.js +298 -0
  90. package/dist/server.js.map +1 -0
  91. package/dist/session.d.ts +1714 -0
  92. package/dist/session.js +619 -0
  93. package/dist/session.js.map +1 -0
  94. package/dist/settings.d.ts +9 -0
  95. package/dist/settings.js +21 -0
  96. package/dist/settings.js.map +1 -0
  97. package/dist/sync.d.ts +495 -0
  98. package/dist/sync.js +191 -0
  99. package/dist/sync.js.map +1 -0
  100. package/dist/telemetry-scrub.d.ts +13 -0
  101. package/dist/telemetry-scrub.js +51 -0
  102. package/dist/telemetry-scrub.js.map +1 -0
  103. package/dist/telemetry.d.ts +73 -0
  104. package/dist/telemetry.js +173 -0
  105. package/dist/telemetry.js.map +1 -0
  106. package/dist/walkthroughs.d.ts +224 -0
  107. package/dist/walkthroughs.js +109 -0
  108. package/dist/walkthroughs.js.map +1 -0
  109. package/dist/workspace.d.ts +14 -0
  110. package/dist/workspace.js +127 -0
  111. package/dist/workspace.js.map +1 -0
  112. package/dist/writer-agent.d.ts +21 -0
  113. package/dist/writer-agent.js +27 -0
  114. package/dist/writer-agent.js.map +1 -0
  115. package/dist/writer-entry.d.ts +171 -0
  116. package/dist/writer-entry.js +233 -0
  117. package/dist/writer-entry.js.map +1 -0
  118. package/dist/writing-style.d.ts +7 -0
  119. package/dist/writing-style.js +52 -0
  120. package/dist/writing-style.js.map +1 -0
  121. package/engine/SYNC.json +4 -0
  122. package/engine/VERSION +1 -0
  123. package/engine/detect-project/README.md +141 -0
  124. package/engine/detect-project/SKILL.md +1421 -0
  125. package/engine/detect-project/assets/desktop/desktop-frame.css +428 -0
  126. package/engine/detect-project/assets/game/game-frame.css +132 -0
  127. package/engine/detect-project/assets/macosui/LICENSE-puppertino.txt +21 -0
  128. package/engine/detect-project/assets/macosui/VERSIONS.txt +1 -0
  129. package/engine/detect-project/assets/macosui/fonts.css +15 -0
  130. package/engine/detect-project/assets/macosui/macos-frame.css +481 -0
  131. package/engine/detect-project/assets/macosui/puppertino.css +2153 -0
  132. package/engine/detect-project/assets/mobileui/LICENSE-fonts.txt +13 -0
  133. package/engine/detect-project/assets/mobileui/LICENSE-framework7.txt +52 -0
  134. package/engine/detect-project/assets/mobileui/VERSIONS.txt +6 -0
  135. package/engine/detect-project/assets/mobileui/device-frame.css +316 -0
  136. package/engine/detect-project/assets/mobileui/f7-color-theme.mjs +1345 -0
  137. package/engine/detect-project/assets/mobileui/f7-icons-names.json +1254 -0
  138. package/engine/detect-project/assets/mobileui/fonts.css +16 -0
  139. package/engine/detect-project/assets/mobileui/framework7-components.css +39 -0
  140. package/engine/detect-project/assets/mobileui/framework7-core.css +5245 -0
  141. package/engine/detect-project/assets/mobileui/icons.css +31 -0
  142. package/engine/detect-project/assets/mobileui/md3-defaults.css +89 -0
  143. package/engine/detect-project/assets/mobileui/platforms.json +46 -0
  144. package/engine/detect-project/assets/tailwind-fallback.css +1729 -0
  145. package/engine/detect-project/assets/webtui/LICENSE-webtui.txt +28 -0
  146. package/engine/detect-project/assets/webtui/VERSIONS.txt +7 -0
  147. package/engine/detect-project/assets/webtui/terminal-frame.css +195 -0
  148. package/engine/detect-project/assets/webtui/theme-catppuccin.css +1 -0
  149. package/engine/detect-project/assets/webtui/theme-everforest.css +1 -0
  150. package/engine/detect-project/assets/webtui/theme-gruvbox.css +1 -0
  151. package/engine/detect-project/assets/webtui/theme-nord.css +1 -0
  152. package/engine/detect-project/assets/webtui/theme-vitesse.css +1 -0
  153. package/engine/detect-project/assets/webtui/themes.json +37 -0
  154. package/engine/detect-project/assets/webtui/webtui-core.css +1 -0
  155. package/engine/detect-project/assets/win32ui/7css.css +2 -0
  156. package/engine/detect-project/assets/win32ui/LICENSE-7css.txt +21 -0
  157. package/engine/detect-project/assets/win32ui/VERSIONS.txt +1 -0
  158. package/engine/detect-project/assets/win32ui/win32-frame.css +278 -0
  159. package/engine/detect-project/package-lock.json +12 -0
  160. package/engine/detect-project/package.json +10 -0
  161. package/engine/detect-project/scripts/apply_runtime_profiles.js +313 -0
  162. package/engine/detect-project/scripts/check_css_health.js +412 -0
  163. package/engine/detect-project/scripts/check_project_map.js +150 -0
  164. package/engine/detect-project/scripts/check_runtime_coverage.js +311 -0
  165. package/engine/detect-project/scripts/check_runtime_recipe_quality.js +184 -0
  166. package/engine/detect-project/scripts/classify_app_type.sh +246 -0
  167. package/engine/detect-project/scripts/classify_surface.sh +95 -0
  168. package/engine/detect-project/scripts/classify_workspace.js +39 -0
  169. package/engine/detect-project/scripts/compile_css.sh +447 -0
  170. package/engine/detect-project/scripts/detect_static.js +645 -0
  171. package/engine/detect-project/scripts/detect_structure.js +187 -0
  172. package/engine/detect-project/scripts/include_census.js +451 -0
  173. package/engine/detect-project/scripts/json_get.js +142 -0
  174. package/engine/detect-project/scripts/merge_json.js +52 -0
  175. package/engine/detect-project/scripts/recommend_model_tier.js +252 -0
  176. package/engine/detect-project/scripts/resolve_route_chains.js +135 -0
  177. package/engine/detect-project/scripts/run_css_build.sh +40 -0
  178. package/engine/detect-project/scripts/sanitize_css.js +83 -0
  179. package/engine/detect-project/scripts/test_classify_surface.js +108 -0
  180. package/engine/detect-project/scripts/test_node_helpers.js +142 -0
  181. package/engine/detect-project/scripts/test_recommend_model_tier.js +119 -0
  182. package/engine/detect-project/scripts/test_resolve_route_chains.js +182 -0
  183. package/engine/detect-project/scripts/test_runtime_coverage.js +323 -0
  184. package/engine/detect-project/scripts/test_runtime_recipe_quality.js +187 -0
  185. package/engine/detect-project/scripts/theme_overrides.js +169 -0
  186. package/engine/detect-project/scripts/write_branding.js +129 -0
  187. package/engine/generate-illustrated-article/SKILL.md +461 -0
  188. package/engine/generate-illustrated-article/contracts/desktop.md +90 -0
  189. package/engine/generate-illustrated-article/contracts/game.md +38 -0
  190. package/engine/generate-illustrated-article/contracts/label-evidence.md +38 -0
  191. package/engine/generate-illustrated-article/contracts/macos.md +79 -0
  192. package/engine/generate-illustrated-article/contracts/mobile.md +40 -0
  193. package/engine/generate-illustrated-article/contracts/terminal.md +29 -0
  194. package/engine/generate-illustrated-article/contracts/win32.md +43 -0
  195. package/engine/generate-illustrated-article/package-lock.json +366 -0
  196. package/engine/generate-illustrated-article/package.json +15 -0
  197. package/engine/generate-illustrated-article/scripts/article_blocks.js +34 -0
  198. package/engine/generate-illustrated-article/scripts/check_article_json.js +105 -0
  199. package/engine/generate-illustrated-article/scripts/emit_walkthrough_signals.js +100 -0
  200. package/engine/generate-illustrated-article/scripts/extract_images.js +187 -0
  201. package/engine/generate-illustrated-article/scripts/generate_content_images.js +376 -0
  202. package/engine/generate-illustrated-article/scripts/include_census.js +451 -0
  203. package/engine/generate-illustrated-article/scripts/inject_assets.js +1691 -0
  204. package/engine/generate-illustrated-article/scripts/jit_mockup_css.js +191 -0
  205. package/engine/generate-illustrated-article/scripts/label_evidence.js +87 -0
  206. package/engine/generate-illustrated-article/scripts/lint_article_copy.js +252 -0
  207. package/engine/generate-illustrated-article/scripts/lint_mockup_fidelity.js +2403 -0
  208. package/engine/generate-illustrated-article/scripts/polish_tickets.js +1148 -0
  209. package/engine/generate-illustrated-article/scripts/related_repos.sh +52 -0
  210. package/engine/generate-illustrated-article/scripts/render_all.js +177 -0
  211. package/engine/generate-illustrated-article/scripts/render_mockup.js +665 -0
  212. package/engine/generate-illustrated-article/scripts/render_ready.js +164 -0
  213. package/engine/generate-illustrated-article/scripts/resolve_workspace.sh +86 -0
  214. package/engine/generate-illustrated-article/scripts/runtime_region_geometry.js +55 -0
  215. package/engine/generate-illustrated-article/scripts/source_paths.js +49 -0
  216. package/engine/generate-illustrated-article/scripts/test_control_visibility.js +30 -0
  217. package/engine/generate-illustrated-article/scripts/test_emit_walkthrough_signals.js +157 -0
  218. package/engine/generate-illustrated-article/scripts/test_generate_content_images.js +168 -0
  219. package/engine/generate-illustrated-article/scripts/test_include_census.js +126 -0
  220. package/engine/generate-illustrated-article/scripts/test_label_evidence.js +49 -0
  221. package/engine/generate-illustrated-article/scripts/test_lint_article_copy.js +138 -0
  222. package/engine/generate-illustrated-article/scripts/test_lint_mockup_fidelity.js +653 -0
  223. package/engine/generate-illustrated-article/scripts/test_node_ports.js +152 -0
  224. package/engine/generate-illustrated-article/scripts/test_polish_tickets.js +481 -0
  225. package/engine/generate-illustrated-article/scripts/test_related_repos.js +64 -0
  226. package/engine/generate-illustrated-article/scripts/test_render_ready.js +85 -0
  227. package/engine/generate-illustrated-article/scripts/test_source_paths.js +68 -0
  228. package/engine/generate-illustrated-article/scripts/trace_hook.js +79 -0
  229. package/engine/generate-illustrated-article/scripts/trace_hook.sh +4 -0
  230. package/engine/generate-illustrated-article/scripts/validate_html.js +114 -0
  231. package/engine/generate-illustrated-article/scripts/watermark.js +69 -0
  232. package/install.sh +14 -0
  233. package/package.json +57 -4
  234. package/scripts/auth.mjs +33 -0
  235. package/scripts/auto-update.mjs +7 -0
  236. package/scripts/build-plugin.mjs +58 -0
  237. package/scripts/build-release.mjs +94 -0
  238. package/scripts/check-release.mjs +40 -0
  239. package/scripts/check-runtime.mjs +10 -0
  240. package/scripts/cli.mjs +8 -0
  241. package/scripts/install.mjs +64 -0
  242. package/scripts/lib/agent-runner.mjs +181 -0
  243. package/scripts/lib/agent-settings.mjs +215 -0
  244. package/scripts/lib/article-skills.mjs +82 -0
  245. package/scripts/lib/auto-update.mjs +50 -0
  246. package/scripts/lib/brand.mjs +9 -0
  247. package/scripts/lib/browser.mjs +12 -0
  248. package/scripts/lib/claude-connection.mjs +33 -0
  249. package/scripts/lib/claude-permissions.mjs +47 -0
  250. package/scripts/lib/claude-plugin.mjs +15 -0
  251. package/scripts/lib/claude-writer.mjs +10 -0
  252. package/scripts/lib/cli-main.mjs +85 -0
  253. package/scripts/lib/cli.mjs +888 -0
  254. package/scripts/lib/codex-config.mjs +51 -0
  255. package/scripts/lib/codex-integration.mjs +61 -0
  256. package/scripts/lib/codex-skill.mjs +34 -0
  257. package/scripts/lib/harness-models.mjs +109 -0
  258. package/scripts/lib/install.mjs +269 -0
  259. package/scripts/lib/managed-writer.mjs +38 -0
  260. package/scripts/lib/planning.mjs +263 -0
  261. package/scripts/lib/prepare-update.mjs +85 -0
  262. package/scripts/lib/refresh-writers.mjs +12 -0
  263. package/scripts/lib/remove.mjs +167 -0
  264. package/scripts/lib/renderer.mjs +34 -0
  265. package/scripts/lib/terminal.mjs +252 -0
  266. package/scripts/lib/uninit.mjs +72 -0
  267. package/scripts/lib/update.mjs +55 -0
  268. package/scripts/lib/writer-recovery.mjs +35 -0
  269. package/scripts/lib/yolo.mjs +362 -0
  270. package/scripts/plugin-session.mjs +65 -0
  271. package/scripts/prepare-update.mjs +12 -0
  272. package/scripts/publish-release.mjs +92 -0
  273. package/scripts/skills/supportpages/SKILL.md +120 -0
  274. package/scripts/smoke-release.mjs +101 -0
  275. package/server.json +27 -0
@@ -0,0 +1,428 @@
1
+ /* desktop-frame.css — hand-authored OS window chrome for desktop-mode mockups.
2
+ * Appended AFTER the app's own compiled CSS by detect-project's desktop branch
3
+ * (STEP D2), so on any conflict plain source order gives these rules
4
+ * precedence — with !important reserved for the geometry rules that arbitrary
5
+ * app CSS is known to fight (height chains).
6
+ *
7
+ * These classes ship in branding.css on purpose: the fidelity lint hard-fails
8
+ * classes that a mockup defines in its own <style> block, so the frame must be
9
+ * pre-defined here and mockups may only USE these class names. Same trick
10
+ * whitelists the traffic-light hexes for the lint's colour check.
11
+ *
12
+ * The load-bearing bits:
13
+ * - .desktop-stage's 48px padding pairs with the macos/windows viewport
14
+ * presets in render_mockup.js (preset width 1576 = window 1480 + 96) so
15
+ * the content crop yields symmetric 48px margins. The 1480×900 window is
16
+ * the same size as the `web` browser preset, so every PC-class capture
17
+ * (browser, Electron/Tauri, Win32, macOS) comes out the same size.
18
+ * - html/body height:auto !important breaks the app's own height chain
19
+ * (#root { height: 100vh } is near-universal in Electron renderers); the
20
+ * window is the only fixed-height box, so the crop lands at window
21
+ * bottom + 48px instead of viewport bottom.
22
+ * - .desktop-window is a fixed-size, overflow:hidden canvas: it clips app
23
+ * content that is realistically taller than one window, exactly like
24
+ * .device-screen does for phones.
25
+ * - Caption glyphs (minimise/maximise/close) are pure CSS via currentColor —
26
+ * never unicode (dingbat ✕ etc. would fail the emoji lint).
27
+ * - window_chrome fork: "native" uses .desktop-titlebar; "hybrid" uses the
28
+ * app's own header bar plus .desktop-traffic-lights--overlay /
29
+ * .desktop-caption-buttons--overlay; "custom" uses no frame chrome at all.
30
+ */
31
+
32
+ html {
33
+ height: auto !important;
34
+ }
35
+
36
+ .desktop-stage {
37
+ margin: 0;
38
+ /* height:auto + no bottom padding: the render crop adds its own 48px and
39
+ * the body background propagates to the canvas, so the margin paints. */
40
+ height: auto !important;
41
+ box-sizing: border-box;
42
+ padding: 48px 48px 0;
43
+ display: flex;
44
+ justify-content: center;
45
+ align-items: flex-start;
46
+ background: #eef0f3;
47
+ }
48
+
49
+ .desktop-window {
50
+ position: relative;
51
+ box-sizing: border-box;
52
+ width: 1480px;
53
+ height: 900px;
54
+ flex-shrink: 0;
55
+ display: flex;
56
+ flex-direction: column;
57
+ overflow: hidden;
58
+ background: var(--desktop-window-bg, #ffffff);
59
+ box-shadow: 0 22px 68px rgba(0, 0, 0, 0.33), 0 0 0 1px rgba(0, 0, 0, 0.08);
60
+ }
61
+
62
+ .desktop-window--mac {
63
+ border-radius: 12px;
64
+ }
65
+
66
+ .desktop-window--win {
67
+ border-radius: 8px;
68
+ }
69
+
70
+ /* Headless Chromium on Linux paints space-occupying scrollbars; a real
71
+ * desktop-app screenshot shows none (overlay scrollbars / hidden until
72
+ * scrolled). */
73
+ .desktop-window ::-webkit-scrollbar {
74
+ display: none;
75
+ }
76
+
77
+ /* ── Native titlebar (window_chrome: "native" only) ──────────────────────── */
78
+
79
+ .desktop-titlebar {
80
+ position: relative;
81
+ flex-shrink: 0;
82
+ display: flex;
83
+ align-items: center;
84
+ background: var(--desktop-titlebar-bg, linear-gradient(#f9f9f9, #f0f0f0));
85
+ border-bottom: 1px solid rgba(0, 0, 0, 0.09);
86
+ }
87
+
88
+ .desktop-window--mac .desktop-titlebar {
89
+ height: 38px;
90
+ padding: 0 20px;
91
+ font-family: -apple-system, 'SF Pro Text', system-ui, 'Helvetica Neue', Arial, sans-serif;
92
+ }
93
+
94
+ .desktop-window--win .desktop-titlebar {
95
+ height: 32px;
96
+ padding: 0 0 0 12px;
97
+ font-family: 'Segoe UI Variable', 'Segoe UI', system-ui, Arial, sans-serif;
98
+ }
99
+
100
+ .desktop-window-title {
101
+ font-size: 13px;
102
+ font-weight: 500;
103
+ color: rgba(0, 0, 0, 0.82);
104
+ white-space: nowrap;
105
+ overflow: hidden;
106
+ text-overflow: ellipsis;
107
+ }
108
+
109
+ /* macOS centers the title in the WINDOW, not in the space left over after the
110
+ * traffic lights — absolute centering reproduces that statically. */
111
+ .desktop-window--mac .desktop-window-title {
112
+ position: absolute;
113
+ left: 80px;
114
+ right: 80px;
115
+ text-align: center;
116
+ pointer-events: none;
117
+ }
118
+
119
+ .desktop-window--win .desktop-window-title {
120
+ font-size: 12px;
121
+ margin-right: auto;
122
+ }
123
+
124
+ /* ── macOS traffic lights ─────────────────────────────────────────────────── */
125
+
126
+ .desktop-traffic-lights {
127
+ display: flex;
128
+ align-items: center;
129
+ gap: 8px;
130
+ flex-shrink: 0;
131
+ }
132
+
133
+ .desktop-traffic-lights span {
134
+ width: 12px;
135
+ height: 12px;
136
+ border-radius: 50%;
137
+ box-shadow: inset 0 0 0 0.5px rgba(0, 0, 0, 0.18);
138
+ }
139
+
140
+ .desktop-traffic-lights span:nth-child(1) {
141
+ background: #ff5f57;
142
+ }
143
+
144
+ .desktop-traffic-lights span:nth-child(2) {
145
+ background: #febc2e;
146
+ }
147
+
148
+ .desktop-traffic-lights span:nth-child(3) {
149
+ background: #28c840;
150
+ }
151
+
152
+ /* Hybrid chrome (titleBarStyle: hidden/hiddenInset): the app draws its own
153
+ * header bar and the SYSTEM draws the traffic lights over it — float them
154
+ * top-left of the window above the app's bar. */
155
+ .desktop-traffic-lights--overlay {
156
+ position: absolute;
157
+ top: 14px;
158
+ left: 20px;
159
+ z-index: 10000;
160
+ }
161
+
162
+ /* ── Windows caption buttons ──────────────────────────────────────────────── */
163
+
164
+ .desktop-caption-buttons {
165
+ display: flex;
166
+ align-self: stretch;
167
+ margin-left: auto;
168
+ flex-shrink: 0;
169
+ color: #1b1b1b;
170
+ }
171
+
172
+ .desktop-caption-buttons span {
173
+ position: relative;
174
+ width: 46px;
175
+ display: flex;
176
+ align-items: center;
177
+ justify-content: center;
178
+ }
179
+
180
+ /* Minimise: a single hairline. */
181
+ .desktop-caption-min::before {
182
+ content: '';
183
+ width: 10px;
184
+ height: 1px;
185
+ background: currentColor;
186
+ }
187
+
188
+ /* Maximise: a square outline. */
189
+ .desktop-caption-max::before {
190
+ content: '';
191
+ box-sizing: border-box;
192
+ width: 9px;
193
+ height: 9px;
194
+ border: 1px solid currentColor;
195
+ border-radius: 1px;
196
+ }
197
+
198
+ /* Close: two crossed hairlines — never a unicode ✕ (emoji lint). */
199
+ .desktop-caption-close::before,
200
+ .desktop-caption-close::after {
201
+ content: '';
202
+ position: absolute;
203
+ width: 13px;
204
+ height: 1px;
205
+ background: currentColor;
206
+ }
207
+
208
+ .desktop-caption-close::before {
209
+ transform: rotate(45deg);
210
+ }
211
+
212
+ .desktop-caption-close::after {
213
+ transform: rotate(-45deg);
214
+ }
215
+
216
+ /* Hybrid chrome on Windows (titleBarOverlay): system caption buttons drawn
217
+ * over the app's own header bar, top-right of the window. */
218
+ .desktop-caption-buttons--overlay {
219
+ position: absolute;
220
+ top: 0;
221
+ right: 0;
222
+ height: 32px;
223
+ z-index: 10000;
224
+ }
225
+
226
+ /* ── App UI container ─────────────────────────────────────────────────────── */
227
+
228
+ .desktop-window-content {
229
+ position: relative;
230
+ flex: 1;
231
+ /* min-height:0 lets the flex item actually clip instead of growing the
232
+ * fixed-height window when app content (100vh roots, long lists) is
233
+ * taller than the window. */
234
+ min-height: 0;
235
+ overflow: hidden;
236
+ /* contain makes this element the containing block for position:fixed
237
+ * DESCENDANTS and clips their paint (the game-frame .game-screen trick).
238
+ * Real desktop-app CSS is written against "the viewport IS my window" —
239
+ * fixed sidebars/headers (`fixed top-0 left-0 h-screen`) are routine and
240
+ * the containing-chain rule makes mockups copy them verbatim. Without
241
+ * containment they anchor to the render viewport and paint OUTSIDE the
242
+ * OS frame (observed: meetily's fixed sidebar escaping to the stage's
243
+ * top-left while `ml-64` main content stayed inside). With it, fixed
244
+ * descendants anchor to the window content area — exactly where the real
245
+ * OS window puts them. Overlays are unaffected: the contract already
246
+ * mandates position:absolute for modals/dropdowns. */
247
+ contain: layout paint;
248
+ }
249
+
250
+ /* A lone app root must fill the window interior. Models sometimes hard-code a
251
+ * guessed pixel height on the root (e.g. height:860px inside the 900px window),
252
+ * leaving an unfilled strip of frame background below the app. min-height wins
253
+ * over an inline height, so a short root stretches to the window bottom while
254
+ * over-tall content still clips via the parent's overflow:hidden. Scoped to
255
+ * :only-child so multi-sibling layouts (app bar + main authored as siblings)
256
+ * keep their own sizing. */
257
+ .desktop-window-content > :only-child {
258
+ min-height: 100%;
259
+ }
260
+
261
+ /* ── App macro-layout bones ───────────────────────────────────────────────────
262
+ * Layer these ONTO the app's real classes when authoring the shell. Real app
263
+ * stylesheets frequently size panes with runtime-dependent flex bases
264
+ * (flex-basis:100% sidebars, wrap rows, JS-measured panels) that collapse in a
265
+ * static mockup — a sidebar swallows the window and the main pane clips off the
266
+ * edge. These pin the macro proportions deterministically; the app's own CSS
267
+ * still paints all the visuals inside each pane. */
268
+ /* !important is load-bearing: these are layered onto real app classes whose own
269
+ * rules (e.g. `body.theme-dark .sidebar { flex: 0 1 100% }`) out-specify a bare
270
+ * frame class — the bones must win the layout properties or they do nothing.
271
+ * Same pattern as the mobile frame reasserting F7's page-content offsets. */
272
+ .desktop-app-rows { /* vertical shell: titlebar/toolbar rows over content */
273
+ display: flex !important;
274
+ flex-direction: column !important;
275
+ height: 100%;
276
+ min-height: 0;
277
+ }
278
+ .desktop-app-columns { /* horizontal shell: sidebar(s) beside main pane */
279
+ display: flex !important;
280
+ flex-direction: row !important;
281
+ flex: 1 1 0 !important;
282
+ min-height: 0;
283
+ flex-wrap: nowrap !important;
284
+ }
285
+ .desktop-pane-fixed { /* sidebar/rail — pair with an inline width from source */
286
+ flex: 0 0 auto !important;
287
+ min-width: 0 !important;
288
+ max-width: none !important;
289
+ min-height: 0;
290
+ overflow: hidden;
291
+ }
292
+ .desktop-pane-fill { /* main content pane — takes the remaining space */
293
+ flex: 1 1 0 !important;
294
+ min-width: 0 !important;
295
+ max-width: none !important;
296
+ min-height: 0;
297
+ overflow: hidden;
298
+ }
299
+
300
+ /* ── Data-widget stand-ins ────────────────────────────────────────────────────
301
+ * Desktop apps routinely render trees, data grids, and code editors through JS
302
+ * widgets (grid libraries, editor components, design-system packages) whose CSS
303
+ * is runtime-generated or lives in an unbuilt package dist — so it is NOT in
304
+ * branding.css and can never be. Mockups must author self-contained stand-ins;
305
+ * these classes give them correct bones. Colours inherit from the app theme. */
306
+ .desktop-tree-row { /* sidebar tree/list row: icon + label per line */
307
+ display: flex !important;
308
+ align-items: center;
309
+ gap: 8px;
310
+ padding: 4px 12px;
311
+ white-space: nowrap;
312
+ overflow: hidden;
313
+ text-overflow: ellipsis;
314
+ font-size: 13px;
315
+ }
316
+ .desktop-tree-row--active {
317
+ background: rgba(128, 128, 128, 0.22);
318
+ }
319
+ table.desktop-table { /* data grid: browser-native column alignment */
320
+ width: 100%;
321
+ border-collapse: collapse;
322
+ font-size: 12.5px;
323
+ line-height: 1.35;
324
+ }
325
+ .desktop-table th {
326
+ text-align: left;
327
+ font-weight: 600;
328
+ padding: 6px 10px;
329
+ border-bottom: 2px solid rgba(128, 128, 128, 0.35);
330
+ white-space: nowrap;
331
+ }
332
+ .desktop-table td {
333
+ padding: 5px 10px;
334
+ border-bottom: 1px solid rgba(128, 128, 128, 0.18);
335
+ white-space: nowrap;
336
+ overflow: hidden;
337
+ text-overflow: ellipsis;
338
+ max-width: 260px;
339
+ }
340
+ .desktop-code-editor { /* code/query editor: gutter + mono content rows */
341
+ display: flex !important;
342
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
343
+ font-size: 13px;
344
+ line-height: 1.5;
345
+ overflow: hidden;
346
+ }
347
+ .desktop-code-gutter { /* line numbers — one number per content line */
348
+ flex: 0 0 auto;
349
+ padding: 8px 10px 8px 14px;
350
+ text-align: right;
351
+ opacity: 0.45;
352
+ user-select: none;
353
+ }
354
+ .desktop-code-lines {
355
+ flex: 1 1 0;
356
+ padding: 8px 12px 8px 6px;
357
+ white-space: pre;
358
+ overflow: hidden;
359
+ }
360
+
361
+ /* Pane hygiene — a deliberate LOW-specificity net, no !important: when an app's
362
+ * own list-row CSS exists it out-specifies these and nothing changes; when the
363
+ * row styles live in an unbuilt package (so the mockup's rows would jam into
364
+ * one inline line), these paint them as sane rows. */
365
+ .desktop-pane-fixed a,
366
+ .desktop-pane-fixed li,
367
+ .desktop-pane-fixed [class*="-item"] {
368
+ display: flex;
369
+ align-items: center;
370
+ gap: 6px;
371
+ padding: 3px 10px;
372
+ white-space: nowrap;
373
+ overflow: hidden;
374
+ }
375
+
376
+ .desktop-toolbar { /* horizontal control strip: search/filter/actions */
377
+ display: flex !important;
378
+ flex-direction: row !important;
379
+ align-items: center;
380
+ gap: 8px;
381
+ padding: 6px 10px;
382
+ flex: 0 0 auto;
383
+ white-space: nowrap;
384
+ overflow: hidden;
385
+ }
386
+ .desktop-statusbar { /* bottom status strip — pins to the app-root bottom */
387
+ display: flex !important;
388
+ align-items: center;
389
+ gap: 14px;
390
+ margin-top: auto;
391
+ padding: 4px 12px;
392
+ font-size: 11.5px;
393
+ border-top: 1px solid rgba(128, 128, 128, 0.25);
394
+ flex: 0 0 auto;
395
+ white-space: nowrap;
396
+ overflow: hidden;
397
+ }
398
+
399
+ /* Dialogs. An app's own modal-surface CSS is frequently JS-injected or lives in
400
+ * an unbuilt package, so a bare app modal class renders TRANSPARENT with the
401
+ * page bleeding through. .desktop-modal guarantees an opaque, centered surface;
402
+ * the injector's window-bg bridge re-paints it in the app's own canvas colour
403
+ * when the app themes via body classes. */
404
+ .desktop-modal-backdrop {
405
+ position: absolute;
406
+ inset: 0;
407
+ background: rgba(0, 0, 0, 0.45);
408
+ z-index: 900;
409
+ }
410
+ .desktop-modal {
411
+ position: absolute;
412
+ top: 50%;
413
+ left: 50%;
414
+ transform: translate(-50%, -50%);
415
+ border: 1px solid rgba(128, 128, 128, 0.35);
416
+ border-radius: 8px;
417
+ box-shadow: 0 18px 50px rgba(0, 0, 0, 0.45);
418
+ z-index: 1000;
419
+ max-width: 85%;
420
+ max-height: 85%;
421
+ overflow: hidden;
422
+ }
423
+ /* Fallback surface at ZERO specificity (:where) so the app's own dialog/surface
424
+ * class — layered onto .desktop-modal — always wins, regardless of source
425
+ * order. Without :where this stomped dark apps' dialogs white. */
426
+ :where(.desktop-modal) {
427
+ background: var(--desktop-window-bg, #ffffff);
428
+ }
@@ -0,0 +1,132 @@
1
+ /* game-frame.css — hand-authored playfield frame for game-mode mockups.
2
+ * Appended AFTER the app's own compiled CSS by detect-project's game branch
3
+ * (STEP G2), so on any conflict plain source order gives these rules
4
+ * precedence — with !important reserved for the geometry rules arbitrary
5
+ * app CSS is known to fight (height chains).
6
+ *
7
+ * These classes ship in branding.css on purpose: the fidelity lint hard-fails
8
+ * classes that a mockup defines in its own <style> block, so the frame must be
9
+ * pre-defined here and mockups may only USE these class names.
10
+ *
11
+ * The load-bearing bits:
12
+ * - .game-stage's 48px padding pairs with the `game` viewport preset in
13
+ * render_mockup.js (preset width 1296 = max screen 1200 + 96). Unlike the
14
+ * desktop stage it is justify-content: flex-start, NOT center: game screens
15
+ * vary in size per project (game_metadata.display_size), and a left-anchored
16
+ * screen at x=48 gives the content crop symmetric 48px margins for ANY
17
+ * screen width — no per-game preset needed.
18
+ * - html/body height:auto !important breaks full-viewport height chains
19
+ * (canvas games routinely style body/#container at 100vh/100%); the screen
20
+ * is the only fixed-height box, so the crop lands at screen bottom + 48px.
21
+ * - .game-screen is a fixed-size, IN-FLOW, overflow:hidden playfield. This is
22
+ * the structural fix for the observed failure mode where a scene authored
23
+ * as position:fixed layers over an auto-height body measures a 0-height
24
+ * content extent and screenshots near-blank. Everything in a game mockup —
25
+ * scene, HUD, overlay menus — anchors inside it; position:fixed is never
26
+ * used.
27
+ * - The scene itself is an inline <svg class="game-scene" viewBox="0 0 W H">
28
+ * where W×H is the game's LOGICAL canvas size: the viewBox does the
29
+ * scaling into the display-sized screen, so scene coordinates stay in
30
+ * logical game units copyable verbatim from the draw code (never a CSS
31
+ * transform: scale).
32
+ */
33
+
34
+ html {
35
+ height: auto !important;
36
+ }
37
+
38
+ .game-stage {
39
+ margin: 0;
40
+ /* height:auto + no bottom padding: the render crop adds its own 48px and
41
+ * the body background propagates to the canvas, so the margin paints. */
42
+ height: auto !important;
43
+ box-sizing: border-box;
44
+ padding: 48px 48px 0;
45
+ display: flex;
46
+ justify-content: flex-start;
47
+ align-items: flex-start;
48
+ background: #101216;
49
+ }
50
+
51
+ /* The playfield. Default size fits a 16:10 desktop-web game; mockups size it
52
+ * per-game with an inline style copied verbatim from game_metadata.display_size
53
+ * (fit-width 1200 / fit-height 900 / 1:1 when the logical canvas is smaller). */
54
+ .game-screen {
55
+ position: relative;
56
+ box-sizing: border-box;
57
+ width: 1200px;
58
+ height: 750px;
59
+ flex-shrink: 0;
60
+ overflow: hidden;
61
+ /* Layout+paint containment makes .game-screen the containing block for
62
+ * position:fixed DESCENDANTS and clips their paint. Real game CSS regularly
63
+ * positions its UI overlay containers fixed against the viewport; inside a
64
+ * mockup the screen IS the viewport, so faithful copies of that markup
65
+ * anchor and clip correctly here instead of escaping the frame. */
66
+ contain: layout paint;
67
+ background: #000000;
68
+ box-shadow: 0 22px 68px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255, 255, 255, 0.07);
69
+ }
70
+
71
+ /* Headless Chromium on Linux paints space-occupying scrollbars; a game screen
72
+ * never shows one. */
73
+ .game-screen ::-webkit-scrollbar {
74
+ display: none;
75
+ }
76
+
77
+ /* The canvas-scene host — a single inline SVG filling the screen. The viewBox
78
+ * carries the game's logical coordinate space; preserveAspectRatio and the
79
+ * display-sized .game-screen do the rest. */
80
+ .game-scene {
81
+ position: absolute;
82
+ inset: 0;
83
+ width: 100%;
84
+ height: 100%;
85
+ display: block;
86
+ }
87
+
88
+ /* HUD stand-in for games whose HUD is CANVAS-DRAWN (game_metadata.hud_kind ==
89
+ * "canvas") — position it with inline top/left/right copied from the draw
90
+ * code. Games with a DOM HUD use their real markup instead (its CSS is already
91
+ * in branding.css). */
92
+ .game-hud {
93
+ position: absolute;
94
+ z-index: 10;
95
+ display: flex;
96
+ gap: 24px;
97
+ white-space: nowrap;
98
+ }
99
+
100
+ .game-hud--stacked {
101
+ flex-direction: column;
102
+ gap: 4px;
103
+ }
104
+
105
+ .game-hud-item {
106
+ display: flex;
107
+ flex-direction: column;
108
+ gap: 2px;
109
+ white-space: nowrap;
110
+ }
111
+
112
+ /* Centered DOM overlay (menu / pause / game-over / name prompt) inside the
113
+ * screen. This replaces the position:fixed habit: real games position these
114
+ * overlays against the viewport, but in a mockup the screen IS the viewport.
115
+ * Dim the scene behind it with an inline neutral rgba background when the real
116
+ * overlay does. */
117
+ .game-overlay-menu {
118
+ position: absolute;
119
+ inset: 0;
120
+ z-index: 20;
121
+ display: flex;
122
+ flex-direction: column;
123
+ align-items: center;
124
+ justify-content: center;
125
+ gap: 16px;
126
+ text-align: center;
127
+ }
128
+
129
+ /* Pixel-art rendering for sprite/image content. */
130
+ .game-pixelated {
131
+ image-rendering: pixelated;
132
+ }
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2019 Edgar Pérez
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ puppertino 1.5.1 (dist/css/newfull.css composition, flattened; dark_mode class-gated)