@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,13 @@
1
+ fonts.css embeds two variable fonts as data URIs:
2
+
3
+ - Inter (registered under the family name 'SF Pro Text' so Framework7's iOS
4
+ font stack resolves it offline) — Copyright The Inter Project Authors,
5
+ licensed under the SIL Open Font License 1.1
6
+ (https://github.com/rsms/inter/blob/master/LICENSE.txt).
7
+ Source: https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7W0Q5nw.woff2
8
+ - Roboto — Copyright The Roboto Project Authors, licensed under the
9
+ Apache License 2.0 (https://github.com/googlefonts/roboto-classic).
10
+ Source: https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBHMdazQ.woff2
11
+
12
+ 'SF Pro Text' is an alias used for font-stack resolution only; no Apple font
13
+ data is included in this bundle.
@@ -0,0 +1,52 @@
1
+ framework7-core.css, framework7-components.css, md3-defaults.css and
2
+ f7-color-theme.mjs are built from the framework7 npm package
3
+ (https://github.com/framework7io/framework7), MIT. icons.css embeds the
4
+ framework7-icons font (https://github.com/framework7io/framework7-icons),
5
+ MIT. Upstream LICENSE files follow.
6
+
7
+ ── framework7 LICENSE ──
8
+ The MIT License (MIT)
9
+
10
+ Copyright (c) 2014 Vladimir Kharlampidi
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
13
+ this software and associated documentation files (the "Software"), to deal in
14
+ the Software without restriction, including without limitation the rights to
15
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
16
+ the Software, and to permit persons to whom the Software is furnished to do so,
17
+ subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
24
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
25
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
26
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
27
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
+
29
+ ── framework7-icons LICENSE ──
30
+ The MIT License (MIT)
31
+
32
+ Copyright (c) 2016 Vladimir Kharlampidi
33
+
34
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
35
+ this software and associated documentation files (the "Software"), to deal in
36
+ the Software without restriction, including without limitation the rights to
37
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
38
+ the Software, and to permit persons to whom the Software is furnished to do so,
39
+ subject to the following conditions:
40
+
41
+ The above copyright notice and this permission notice shall be included in all
42
+ copies or substantial portions of the Software.
43
+
44
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
45
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
46
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
47
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
48
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
49
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
50
+
51
+ device-frame.css is authored in this repository and is covered by this
52
+ repository's own license.
@@ -0,0 +1,6 @@
1
+ Built: 2026-07-02T16:14:45Z
2
+ framework7@8.3.4
3
+ framework7-icons@5.0.5
4
+ esbuild@0.21.5 (build-time only)
5
+ Inter: https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7W0Q5nw.woff2 sha256=c940764593d0fe5d596be327ca7558855e018039fb78509aa21921fd3644c3e4
6
+ Roboto: https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBHMdazQ.woff2 sha256=0a44e0bb6ba5c8537e8814c148ef7755f1bce12112361231f595ecc584a18d7a
@@ -0,0 +1,316 @@
1
+ /* device-frame.css — hand-authored phone chrome for mobile-mode mockups.
2
+ * Concatenated AFTER framework7-core/components/md3-defaults/fonts/icons by
3
+ * detect-project's mobile branch (brand-overrides.css comes last of all).
4
+ * Framework7 ships no @layer, so plain source order gives these rules
5
+ * precedence over core on any conflict.
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
+ * - .device-stage's 48px padding pairs with the ios/android viewport presets
13
+ * in render_mockup.js (preset width = device outer width + 96) so the
14
+ * content crop yields symmetric 48px margins.
15
+ * - .device--ios/.device--android set --f7-safe-area-top/bottom; Framework7's
16
+ * own navbar/toolbar/page-content offsets consume those vars, so F7 chrome
17
+ * clears the statusbar and home indicator exactly like on a real device.
18
+ * - .device-screen is a fixed-size, overflow:hidden canvas: it satisfies
19
+ * F7's html/body/.framework7-root height:100% chain and does the clipping
20
+ * for screens whose content is realistically taller than one viewport.
21
+ * - Statusbar glyphs (signal/wifi/battery) are pure CSS via currentColor —
22
+ * never emoji (the fidelity lint hard-fails emoji code points).
23
+ */
24
+
25
+ /* F7's JS sets --f7-ripple-transform per-tap at runtime; core's .ripple-wave
26
+ * consumes it with no fallback, which trips the CSS-health undefined-var check
27
+ * (check_css_health.js / lint check 8b). Static mockups never contain a live
28
+ * ripple, so a neutral default is both correct and silences the finding. */
29
+ :root {
30
+ --f7-ripple-transform: translate3d(0, 0, 0) scale(1);
31
+ }
32
+
33
+ .device-stage {
34
+ margin: 0;
35
+ /* height:auto overrides F7 core's body{height:100%} so the body hugs the
36
+ * device and the renderer's content crop lands at device bottom + 48px.
37
+ * No bottom padding for the same reason: the crop adds its own 48px, and
38
+ * the body background propagates to the canvas, so the margin paints. */
39
+ height: auto;
40
+ box-sizing: border-box;
41
+ padding: 48px 48px 0;
42
+ display: flex;
43
+ justify-content: center;
44
+ align-items: flex-start;
45
+ background: #eef0f3;
46
+ }
47
+
48
+ .device {
49
+ position: relative;
50
+ box-sizing: content-box;
51
+ flex-shrink: 0;
52
+ background: #1a1a1c;
53
+ box-shadow: 0 24px 64px rgba(0, 0, 0, 0.28), 0 0 0 1px rgba(0, 0, 0, 0.06);
54
+ }
55
+
56
+ .device--ios {
57
+ padding: 12px;
58
+ border-radius: 56px;
59
+ --f7-safe-area-top: 59px;
60
+ --f7-safe-area-bottom: 34px;
61
+ }
62
+
63
+ .device--android {
64
+ padding: 10px;
65
+ border-radius: 34px;
66
+ --f7-safe-area-top: 28px;
67
+ --f7-safe-area-bottom: 24px;
68
+ }
69
+
70
+ .device-screen {
71
+ position: relative;
72
+ overflow: hidden;
73
+ background: var(--f7-page-bg-color, #fff);
74
+ }
75
+
76
+ .device--ios .device-screen {
77
+ width: 393px;
78
+ height: 852px;
79
+ border-radius: 44px;
80
+ }
81
+
82
+ .device--android .device-screen {
83
+ width: 412px;
84
+ height: 915px;
85
+ border-radius: 24px;
86
+ }
87
+
88
+ /* Real F7 centers iOS navbar titles by measuring with JS; the static render
89
+ * has no JS, so give the title the full track and center it. MD titles are
90
+ * left-aligned by design and need nothing. */
91
+ .ios .navbar .title {
92
+ flex: 1;
93
+ text-align: var(--f7-navbar-title-text-align, center);
94
+ }
95
+
96
+ /* ── Statusbar (author INSIDE .device-screen, before the app content) ────── */
97
+
98
+ .device-statusbar {
99
+ position: absolute;
100
+ top: 0;
101
+ left: 0;
102
+ right: 0;
103
+ z-index: 20000; /* above F7 modals (~13500) — like a real phone */
104
+ display: flex;
105
+ align-items: center;
106
+ justify-content: space-between;
107
+ pointer-events: none;
108
+ color: #0a0a0a;
109
+ }
110
+
111
+ .device--ios .device-statusbar {
112
+ height: 59px;
113
+ padding: 6px 36px 12px;
114
+ font-size: 16px;
115
+ font-weight: 600;
116
+ }
117
+
118
+ .device--android .device-statusbar {
119
+ height: 28px;
120
+ padding: 0 18px;
121
+ font-size: 14px;
122
+ font-weight: 500;
123
+ }
124
+
125
+ .device-statusbar-time {
126
+ letter-spacing: -0.01em;
127
+ }
128
+
129
+ .device-statusbar-icons {
130
+ display: flex;
131
+ align-items: center;
132
+ gap: 6px;
133
+ }
134
+
135
+ /* Four bottom-aligned bars, drawn with layered currentColor gradients. */
136
+ .device-signal {
137
+ width: 19px;
138
+ height: 12px;
139
+ background-image: linear-gradient(currentColor, currentColor),
140
+ linear-gradient(currentColor, currentColor),
141
+ linear-gradient(currentColor, currentColor),
142
+ linear-gradient(currentColor, currentColor);
143
+ background-repeat: no-repeat;
144
+ background-size: 3px 5px, 3px 7px, 3px 9px, 3px 12px;
145
+ background-position: 0 100%, 5px 100%, 10px 100%, 15px 100%;
146
+ }
147
+
148
+ /* Two concentric top-border arcs + a dot via radial-gradient. */
149
+ .device-wifi {
150
+ position: relative;
151
+ width: 18px;
152
+ height: 13px;
153
+ overflow: hidden;
154
+ background: radial-gradient(circle at 50% 80%, currentColor 1.8px, transparent 2.2px);
155
+ }
156
+
157
+ .device-wifi::before,
158
+ .device-wifi::after {
159
+ content: '';
160
+ position: absolute;
161
+ left: 50%;
162
+ transform: translateX(-50%);
163
+ border: 2px solid transparent;
164
+ border-top-color: currentColor;
165
+ border-radius: 50%;
166
+ }
167
+
168
+ .device-wifi::before {
169
+ width: 17px;
170
+ height: 17px;
171
+ top: 0;
172
+ }
173
+
174
+ .device-wifi::after {
175
+ width: 9px;
176
+ height: 9px;
177
+ top: 4px;
178
+ }
179
+
180
+ /* Bordered shell, charge fill (::before), terminal nub (::after). */
181
+ .device-battery {
182
+ position: relative;
183
+ width: 25px;
184
+ height: 12px;
185
+ border: 1px solid;
186
+ border-radius: 4px;
187
+ opacity: 0.95;
188
+ }
189
+
190
+ .device-battery::before {
191
+ content: '';
192
+ position: absolute;
193
+ inset: 2px;
194
+ width: 65%;
195
+ background: currentColor;
196
+ border-radius: 1.5px;
197
+ }
198
+
199
+ .device-battery::after {
200
+ content: '';
201
+ position: absolute;
202
+ right: -4px;
203
+ top: 50%;
204
+ transform: translateY(-50%);
205
+ width: 2px;
206
+ height: 4px;
207
+ background: currentColor;
208
+ border-radius: 0 1px 1px 0;
209
+ }
210
+
211
+ /* ── Cutouts + indicators (also INSIDE .device-screen) ───────────────────── */
212
+
213
+ .device-dynamic-island {
214
+ position: absolute;
215
+ top: 11px;
216
+ left: 50%;
217
+ transform: translateX(-50%);
218
+ width: 122px;
219
+ height: 36px;
220
+ border-radius: 18px;
221
+ background: #000;
222
+ z-index: 20001;
223
+ }
224
+
225
+ /* Legacy-iOS variant, for completeness. */
226
+ .device-notch {
227
+ position: absolute;
228
+ top: 0;
229
+ left: 50%;
230
+ transform: translateX(-50%);
231
+ width: 210px;
232
+ height: 30px;
233
+ border-radius: 0 0 20px 20px;
234
+ background: #000;
235
+ z-index: 20001;
236
+ }
237
+
238
+ .device-camera-dot {
239
+ position: absolute;
240
+ top: 8px;
241
+ left: 50%;
242
+ transform: translateX(-50%);
243
+ width: 12px;
244
+ height: 12px;
245
+ border-radius: 50%;
246
+ background: #111;
247
+ z-index: 20001;
248
+ }
249
+
250
+ .device-home-indicator {
251
+ position: absolute;
252
+ bottom: 8px;
253
+ left: 50%;
254
+ transform: translateX(-50%);
255
+ width: 134px;
256
+ height: 5px;
257
+ border-radius: 3px;
258
+ background: rgba(0, 0, 0, 0.85);
259
+ z-index: 20000;
260
+ }
261
+
262
+ .device-gesture-pill {
263
+ position: absolute;
264
+ bottom: 8px;
265
+ left: 50%;
266
+ transform: translateX(-50%);
267
+ width: 108px;
268
+ height: 4px;
269
+ border-radius: 2px;
270
+ background: rgba(32, 33, 36, 0.75);
271
+ z-index: 20000;
272
+ }
273
+
274
+ /* Override-proof top offset with a safe-area floor. Two observed failure
275
+ * modes (Bluesky, LocalSend benchmarks): (1) models write style="padding:16px"
276
+ * on .page-content and the SHORTHAND wipes F7's computed navbar padding-top;
277
+ * (2) on navbar-less pages F7 sets no offset at all, so content renders under
278
+ * the statusbar — a real phone's safe area never allows that. Reassert F7's
279
+ * own calc with a safe-area minimum. Scoped to .page > .page-content so
280
+ * overlay content (sheets/dialogs) is untouched; inline padding-left/right/
281
+ * bottom keep working. */
282
+ .device-screen .page > .page-content {
283
+ padding-top: max(
284
+ calc(
285
+ var(--f7-page-navbar-offset, 0px) + var(--f7-page-toolbar-top-offset, 0px) +
286
+ var(--f7-page-subnavbar-offset, 0px) + var(--f7-page-searchbar-offset, 0px) +
287
+ var(--f7-page-content-extra-padding-top, 0px)
288
+ ),
289
+ var(--f7-safe-area-top, 0px)
290
+ ) !important;
291
+ }
292
+
293
+ /* The render viewport (513/528px) is wider than F7's 496px phone breakpoint,
294
+ * which would give action sheets their 480px tablet width — wider than the
295
+ * device screen itself. Re-pin overlays to phone geometry inside the frame
296
+ * (this selector's specificity beats the media-wrapped one, so the vendored
297
+ * files stay verbatim). */
298
+ .device-screen .actions-modal {
299
+ width: 100%;
300
+ left: 0;
301
+ margin-left: 0;
302
+ }
303
+
304
+ /* Dark-theme staging (pairs with F7's .dark root class; unused while mobile
305
+ * mode is light-only, staged for the dark-theme follow-up). */
306
+ .device--dark .device-statusbar {
307
+ color: #f5f5f7;
308
+ }
309
+
310
+ .device--dark .device-home-indicator {
311
+ background: rgba(255, 255, 255, 0.85);
312
+ }
313
+
314
+ .device--dark .device-gesture-pill {
315
+ background: rgba(232, 234, 237, 0.75);
316
+ }