@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,481 @@
1
+ /* macos-frame.css — hand-authored glue for macos-mode (native AppKit app)
2
+ * mockups. Concatenated LAST by detect-project's macos branch:
3
+ * branding.css = puppertino.css + fonts.css + desktop-frame.css + macos-frame.css
4
+ * so plain source order lets these rules extend the desktop bundle's mac
5
+ * window chrome and Puppertino's widgets. Never regenerated by
6
+ * tools/build_macosui_bundle.sh.
7
+ *
8
+ * These classes ship in branding.css on purpose: the fidelity lint hard-fails
9
+ * classes a mockup defines in its own <style> block, so the frame must be
10
+ * pre-defined here and mockups may only USE these class names. The CSS vars
11
+ * below also whitelist the macOS system palette for the lint's colour check.
12
+ *
13
+ * The load-bearing bits:
14
+ * - .desktop-titlebar--macos-unified is a MODIFIER on .desktop-titlebar
15
+ * (NSWindowToolbarStyleUnified: 52px, traffic lights → title left-of-
16
+ * toolbar → toolbar items right). The contract stays "exactly one
17
+ * .desktop-titlebar", with or without the modifier.
18
+ * - .macos-stage--menubar flips the stage to a COLUMN: .desktop-stage is a
19
+ * flex row, so without the modifier a menubar strip would sit beside the
20
+ * window, not above it. The strip is full-bleed and positioned so its
21
+ * dropdown paints over the later-DOM window.
22
+ * - .desktop-window-content is re-declared flex-column here with
23
+ * .macos-statusbar { margin-top: auto } — the win32 round-2 floating-
24
+ * statusbar pin lives in win32-frame.css and does NOT carry over.
25
+ * - Sheets are position:absolute inside .desktop-window-content (top-
26
+ * anchored, like real NSWindow sheets); never fixed (escapes the frame).
27
+ */
28
+
29
+ :root {
30
+ --macos-accent: #007aff;
31
+ --macos-window-bg: #f6f6f6;
32
+ --macos-sidebar-bg: #eaeaec;
33
+ --macos-row-alt: #f5f5f7;
34
+ --macos-border: #dcdcde;
35
+ --macos-text-secondary: #6e6e73;
36
+ /* macOS system palette (Apple HIG system colours) — declared here so the
37
+ * lint's colour whitelist admits them; use for progress/status accents. */
38
+ --macos-green: #34c759;
39
+ --macos-red: #ff3b30;
40
+ --macos-orange: #ff9500;
41
+ --macos-yellow: #ffcc00;
42
+ --macos-gray: #98989d;
43
+ }
44
+
45
+ .desktop-window {
46
+ font-family: -apple-system, 'SF Pro Text', 'Inter', 'Helvetica Neue', sans-serif;
47
+ font-size: 13px;
48
+ color: #1d1d1f;
49
+ }
50
+
51
+ .desktop-window-content {
52
+ display: flex;
53
+ flex-direction: column;
54
+ background: var(--macos-window-bg);
55
+ }
56
+
57
+ /* ── Unified titlebar (NSWindowToolbarStyleUnified) ───────────────────────── */
58
+
59
+ .desktop-titlebar.desktop-titlebar--macos-unified {
60
+ height: 52px;
61
+ padding: 0 16px 0 20px;
62
+ background: linear-gradient(#f7f7f7, #efeff0);
63
+ gap: 12px;
64
+ }
65
+
66
+ /* Unified titles sit left-of-toolbar, not absolutely centered like classic. */
67
+ .desktop-titlebar--macos-unified .desktop-window-title {
68
+ position: static;
69
+ left: auto;
70
+ right: auto;
71
+ text-align: left;
72
+ font-size: 14px;
73
+ font-weight: 600;
74
+ margin-left: 8px;
75
+ pointer-events: none;
76
+ }
77
+
78
+ .macos-toolbar-items {
79
+ display: flex;
80
+ align-items: center;
81
+ gap: 6px;
82
+ margin-left: auto;
83
+ flex-shrink: 0;
84
+ color: #57575c;
85
+ }
86
+
87
+ .macos-toolbar-item {
88
+ display: flex;
89
+ align-items: center;
90
+ justify-content: center;
91
+ width: 34px;
92
+ height: 28px;
93
+ border: none;
94
+ border-radius: 6px;
95
+ background: none;
96
+ box-shadow: none;
97
+ min-width: 0;
98
+ padding: 0;
99
+ color: inherit;
100
+ }
101
+
102
+ .macos-toolbar-item svg {
103
+ width: 17px;
104
+ height: 17px;
105
+ }
106
+
107
+ .macos-toolbar-item--active {
108
+ background: rgba(0, 0, 0, 0.08);
109
+ }
110
+
111
+ .macos-toolbar-sep {
112
+ width: 1px;
113
+ height: 20px;
114
+ background: var(--macos-border);
115
+ margin: 0 4px;
116
+ }
117
+
118
+ /* ── Menu bar strip (screen-top; menu-open steps ONLY) ────────────────────── */
119
+
120
+ /* The stage is a flex ROW by default — this modifier stacks strip-then-window. */
121
+ body.desktop-stage.macos-stage--menubar {
122
+ flex-direction: column;
123
+ align-items: center;
124
+ padding-top: 0;
125
+ }
126
+
127
+ .macos-menubar {
128
+ align-self: stretch;
129
+ margin: 0 -48px 48px;
130
+ display: flex;
131
+ align-items: center;
132
+ gap: 2px;
133
+ height: 25px;
134
+ padding: 0 16px;
135
+ background: rgba(246, 246, 246, 0.96);
136
+ border-bottom: 1px solid var(--macos-border);
137
+ font-size: 13px;
138
+ color: #1d1d1f;
139
+ /* explicit stacking so the dropdown paints over the later-DOM window */
140
+ position: relative;
141
+ z-index: 5000;
142
+ }
143
+
144
+ /* The glyph is drawn, not typed (U+F8FF is private-use and font-dependent). */
145
+ .macos-menubar-apple {
146
+ width: 13px;
147
+ height: 15px;
148
+ margin-right: 10px;
149
+ background: #1d1d1f;
150
+ -webkit-mask: radial-gradient(circle at 65% 28%, transparent 3px, #000 3.5px) content-box;
151
+ mask: radial-gradient(circle at 65% 28%, transparent 3px, #000 3.5px) content-box;
152
+ border-radius: 45% 55% 48% 52% / 60% 60% 40% 40%;
153
+ }
154
+
155
+ .macos-menubar-item {
156
+ padding: 3px 10px;
157
+ border-radius: 4px;
158
+ position: relative;
159
+ white-space: nowrap;
160
+ }
161
+
162
+ .macos-menubar-item--app {
163
+ font-weight: 700;
164
+ }
165
+
166
+ .macos-menubar-item.macos-menu-open {
167
+ background: var(--macos-accent);
168
+ color: #ffffff;
169
+ }
170
+
171
+ /* ── Menus (dropdown from the menubar; also context menus) ────────────────── */
172
+
173
+ .macos-menu {
174
+ display: none;
175
+ position: absolute;
176
+ top: 100%;
177
+ left: 0;
178
+ min-width: 240px;
179
+ padding: 5px;
180
+ margin: 1px 0 0;
181
+ list-style: none;
182
+ background: rgba(246, 246, 246, 0.98);
183
+ border: 1px solid rgba(0, 0, 0, 0.12);
184
+ border-radius: 8px;
185
+ box-shadow: 0 10px 34px rgba(0, 0, 0, 0.28);
186
+ color: #1d1d1f;
187
+ z-index: 6000;
188
+ }
189
+
190
+ .macos-menu-open > .macos-menu {
191
+ display: block;
192
+ }
193
+
194
+ .macos-menu-item {
195
+ display: flex;
196
+ align-items: center;
197
+ justify-content: space-between;
198
+ gap: 28px;
199
+ padding: 4px 10px;
200
+ border-radius: 5px;
201
+ white-space: nowrap;
202
+ font-size: 13px;
203
+ }
204
+
205
+ .macos-menu-item--hover {
206
+ background: var(--macos-accent);
207
+ color: #ffffff;
208
+ }
209
+
210
+ .macos-menu-item--disabled {
211
+ color: rgba(29, 29, 31, 0.35);
212
+ }
213
+
214
+ .macos-menu-shortcut {
215
+ color: var(--macos-text-secondary);
216
+ letter-spacing: 1px;
217
+ }
218
+
219
+ .macos-menu-item--hover .macos-menu-shortcut {
220
+ color: inherit;
221
+ }
222
+
223
+ .macos-menu-divider {
224
+ height: 1px;
225
+ margin: 5px 10px;
226
+ background: rgba(0, 0, 0, 0.1);
227
+ list-style: none;
228
+ }
229
+
230
+ /* Submenu rows: single row + drawn cascade arrow — never inline children. */
231
+ .macos-menu-sub::after {
232
+ content: '';
233
+ width: 0;
234
+ height: 0;
235
+ border-left: 4px solid currentColor;
236
+ border-top: 4px solid transparent;
237
+ border-bottom: 4px solid transparent;
238
+ margin-left: 12px;
239
+ }
240
+
241
+ /* Secondary windows (Preferences, About, utility panels) are much smaller
242
+ * than the fixed 1480×900 main window — this modifier lets them size to
243
+ * content. Standalone in the stage (a real macOS Preferences window is its
244
+ * own window, not an overlay). */
245
+ .desktop-window.macos-window--compact {
246
+ width: auto;
247
+ height: auto;
248
+ min-width: 560px;
249
+ max-width: 860px;
250
+ }
251
+
252
+ /* ── App scaffold ─────────────────────────────────────────────────────────── */
253
+
254
+ .macos-source-list {
255
+ flex-shrink: 0;
256
+ width: 200px;
257
+ background: var(--macos-sidebar-bg);
258
+ border-right: 1px solid var(--macos-border);
259
+ padding: 10px 8px;
260
+ box-sizing: border-box;
261
+ font-size: 13px;
262
+ }
263
+
264
+ .macos-source-item {
265
+ display: flex;
266
+ align-items: center;
267
+ gap: 7px;
268
+ padding: 5px 9px;
269
+ border-radius: 6px;
270
+ color: #1d1d1f;
271
+ }
272
+
273
+ .macos-source-item--selected {
274
+ background: rgba(0, 0, 0, 0.08);
275
+ font-weight: 600;
276
+ }
277
+
278
+ /* Icon+label tab strip (Inspector tabs, Preferences toolbar-tabs) — the real
279
+ * macOS pattern is a segmented row of icon-over-label buttons, not text pills;
280
+ * a deterministic class beats improvised chips (the .tui-panel lesson). */
281
+ .macos-tab-strip {
282
+ flex-shrink: 0;
283
+ display: flex;
284
+ justify-content: center;
285
+ gap: 4px;
286
+ padding: 6px 10px;
287
+ background: #ececee;
288
+ border-bottom: 1px solid var(--macos-border);
289
+ }
290
+
291
+ .macos-tab {
292
+ display: flex;
293
+ flex-direction: column;
294
+ align-items: center;
295
+ gap: 3px;
296
+ min-width: 58px;
297
+ padding: 4px 10px;
298
+ border-radius: 7px;
299
+ font-size: 11px;
300
+ color: var(--macos-text-secondary);
301
+ }
302
+
303
+ .macos-tab svg {
304
+ width: 17px;
305
+ height: 17px;
306
+ }
307
+
308
+ .macos-tab--selected {
309
+ background: rgba(0, 0, 0, 0.1);
310
+ color: #1d1d1f;
311
+ font-weight: 600;
312
+ }
313
+
314
+ .macos-filterbar {
315
+ flex-shrink: 0;
316
+ display: flex;
317
+ align-items: center;
318
+ gap: 6px;
319
+ padding: 5px 12px;
320
+ background: #ececee;
321
+ border-bottom: 1px solid var(--macos-border);
322
+ font-size: 12px;
323
+ color: var(--macos-text-secondary);
324
+ }
325
+
326
+ .macos-filter-chip {
327
+ padding: 2px 10px;
328
+ border-radius: 9px;
329
+ }
330
+
331
+ .macos-filter-chip--active {
332
+ background: rgba(0, 0, 0, 0.14);
333
+ color: #1d1d1f;
334
+ font-weight: 600;
335
+ }
336
+
337
+ /* NSTableView stand-in: header row + striped rows. */
338
+ .macos-table {
339
+ flex: 1;
340
+ min-height: 0;
341
+ overflow: hidden;
342
+ background: #ffffff;
343
+ font-size: 13px;
344
+ }
345
+
346
+ .macos-table-header {
347
+ display: flex;
348
+ padding: 4px 12px;
349
+ border-bottom: 1px solid var(--macos-border);
350
+ background: #f9f9fa;
351
+ color: var(--macos-text-secondary);
352
+ font-size: 11px;
353
+ font-weight: 600;
354
+ }
355
+
356
+ .macos-table-row {
357
+ display: flex;
358
+ align-items: center;
359
+ gap: 10px;
360
+ padding: 8px 12px;
361
+ border-bottom: 1px solid #f0f0f2;
362
+ }
363
+
364
+ .macos-table-row--alt {
365
+ background: var(--macos-row-alt);
366
+ }
367
+
368
+ .macos-table-row--selected {
369
+ background: var(--macos-accent);
370
+ color: #ffffff;
371
+ }
372
+
373
+ /* Cell-based list rows (the NSOutlineView/NSTableView CELL pattern — most mac
374
+ * app main windows are cell lists, NOT column grids; .macos-table-header is
375
+ * only for real data grids). One .macos-list-cell per row; sub-elements match
376
+ * the view's recorded row_anatomy. */
377
+ .macos-list-cell {
378
+ display: flex;
379
+ flex-direction: column;
380
+ gap: 4px;
381
+ padding: 9px 14px;
382
+ border-bottom: 1px solid #f0f0f2;
383
+ }
384
+
385
+ .macos-list-cell--alt {
386
+ background: var(--macos-row-alt);
387
+ }
388
+
389
+ .macos-list-cell--selected {
390
+ background: var(--macos-accent);
391
+ color: #ffffff;
392
+ }
393
+
394
+ .macos-list-cell-title {
395
+ font-weight: 600;
396
+ font-size: 13px;
397
+ }
398
+
399
+ .macos-list-progress {
400
+ height: 5px;
401
+ background: #e4e4e8;
402
+ border-radius: 3px;
403
+ overflow: hidden;
404
+ }
405
+
406
+ .macos-list-progress-fill {
407
+ height: 100%;
408
+ background: var(--macos-accent);
409
+ border-radius: 3px;
410
+ }
411
+
412
+ .macos-list-cell-status {
413
+ font-size: 11px;
414
+ color: var(--macos-text-secondary);
415
+ }
416
+
417
+ .macos-list-cell--selected .macos-list-cell-status {
418
+ color: rgba(255, 255, 255, 0.85);
419
+ }
420
+
421
+ .macos-statusbar {
422
+ flex-shrink: 0;
423
+ /* margin-top:auto pins the bar to the window bottom even when the client
424
+ * area doesn't flex-grow (the win32 round-2 floating-statusbar lesson). */
425
+ margin-top: auto;
426
+ display: flex;
427
+ align-items: center;
428
+ justify-content: space-between;
429
+ padding: 4px 12px;
430
+ background: #ececee;
431
+ border-top: 1px solid var(--macos-border);
432
+ font-size: 11px;
433
+ color: var(--macos-text-secondary);
434
+ }
435
+
436
+ /* ── Sheets (NSWindow sheets attach under the titlebar; nothing dims) ─────── */
437
+
438
+ .macos-sheet {
439
+ position: absolute;
440
+ top: 0;
441
+ left: 50%;
442
+ transform: translateX(-50%);
443
+ min-width: 420px;
444
+ background: #f2f2f4;
445
+ border-radius: 0 0 10px 10px;
446
+ box-shadow: 0 18px 50px rgba(0, 0, 0, 0.35), 0 0 0 1px rgba(0, 0, 0, 0.08);
447
+ padding: 18px 20px 16px;
448
+ z-index: 800;
449
+ }
450
+
451
+ .macos-sheet-buttons {
452
+ display: flex;
453
+ justify-content: flex-end;
454
+ gap: 10px;
455
+ margin-top: 16px;
456
+ }
457
+
458
+ /* ── Popover (with drawn arrow) ───────────────────────────────────────────── */
459
+
460
+ .macos-popover {
461
+ position: absolute;
462
+ background: #f6f6f8;
463
+ border: 1px solid rgba(0, 0, 0, 0.14);
464
+ border-radius: 10px;
465
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.3);
466
+ padding: 14px;
467
+ z-index: 900;
468
+ }
469
+
470
+ .macos-popover::before {
471
+ content: '';
472
+ position: absolute;
473
+ top: -7px;
474
+ left: 50%;
475
+ transform: translateX(-50%) rotate(45deg);
476
+ width: 12px;
477
+ height: 12px;
478
+ background: #f6f6f8;
479
+ border-left: 1px solid rgba(0, 0, 0, 0.14);
480
+ border-top: 1px solid rgba(0, 0, 0, 0.14);
481
+ }