projectkeeper 0.0.0-stage → 1.0.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 (276) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/LICENSE +21 -0
  3. package/README.md +283 -2
  4. package/README.zh-CN.md +285 -0
  5. package/THIRD_PARTY_NOTICES.md +53 -0
  6. package/bin/pk.mjs +6 -0
  7. package/bin/postinstall.mjs +5 -0
  8. package/bin/strip-types.mjs +28 -0
  9. package/package.json +68 -4
  10. package/patches/README.md +111 -0
  11. package/patches/pi-ai-0.85.0.ts +122 -0
  12. package/patches/pi-ai-0.87.1.ts +122 -0
  13. package/scripts/apply-pi-streaming-patch.ts +86 -0
  14. package/skills/clerk/coverage/SKILL.md +35 -0
  15. package/skills/clerk/cross-check/SKILL.md +118 -0
  16. package/skills/clerk/deepen-dispatch/SKILL.md +69 -0
  17. package/skills/clerk/lane-follow-up/SKILL.md +94 -0
  18. package/skills/clerk/lane-plan/SKILL.md +107 -0
  19. package/skills/clerk/lane-slot/SKILL.md +113 -0
  20. package/skills/clerk/lane-topic/SKILL.md +116 -0
  21. package/skills/clerk/orientation/SKILL.md +160 -0
  22. package/skills/clerk/reconcile/SKILL.md +77 -0
  23. package/skills/clerk/skeleton-dispatch/SKILL.md +43 -0
  24. package/skills/clerk/spot-check/SKILL.md +52 -0
  25. package/skills/clerk/synthesis/SKILL.md +65 -0
  26. package/skills/table-follow-up/SKILL.md +42 -0
  27. package/src/cli.ts +319 -0
  28. package/src/codemap/README.md +13 -0
  29. package/src/codemap/engines.ts +102 -0
  30. package/src/codemap/facts.ts +504 -0
  31. package/src/context/agent-entry.ts +232 -0
  32. package/src/context/ask.ts +97 -0
  33. package/src/context/assemble.ts +1058 -0
  34. package/src/context/code-source.ts +103 -0
  35. package/src/context/k-briefs.ts +114 -0
  36. package/src/context/lineage.ts +100 -0
  37. package/src/context/object-brief.ts +300 -0
  38. package/src/context/owner-words.ts +191 -0
  39. package/src/context/pack-fixture.ts +342 -0
  40. package/src/context/project-rules.ts +160 -0
  41. package/src/intake/intake.ts +392 -0
  42. package/src/intake/material-rules.ts +166 -0
  43. package/src/intake/removal.ts +316 -0
  44. package/src/intake/skipped.ts +72 -0
  45. package/src/keeper/adjustment.ts +565 -0
  46. package/src/keeper/bounds/boundary.ts +509 -0
  47. package/src/keeper/bounds/command.ts +1665 -0
  48. package/src/keeper/bounds/paths.ts +164 -0
  49. package/src/keeper/bounds/reads.ts +718 -0
  50. package/src/keeper/bounds/shell-write-guard.ts +521 -0
  51. package/src/keeper/capabilities.ts +136 -0
  52. package/src/keeper/clerk-steps.ts +151 -0
  53. package/src/keeper/clerk-tools.ts +1424 -0
  54. package/src/keeper/conversation.ts +253 -0
  55. package/src/keeper/evidence.ts +662 -0
  56. package/src/keeper/fake-provider.ts +132 -0
  57. package/src/keeper/held.ts +15 -0
  58. package/src/keeper/history-tools.ts +163 -0
  59. package/src/keeper/jobs/answering.ts +53 -0
  60. package/src/keeper/key-check.ts +105 -0
  61. package/src/keeper/ledger-tools.ts +295 -0
  62. package/src/keeper/link-check.ts +185 -0
  63. package/src/keeper/merge.ts +260 -0
  64. package/src/keeper/note-origin.ts +56 -0
  65. package/src/keeper/numbers-check.ts +102 -0
  66. package/src/keeper/open-in-pi.ts +57 -0
  67. package/src/keeper/organize/absence.ts +266 -0
  68. package/src/keeper/organize/carried-on.ts +214 -0
  69. package/src/keeper/organize/clerk-coverage.ts +293 -0
  70. package/src/keeper/organize/clerk-prompts.ts +132 -0
  71. package/src/keeper/organize/clerk.ts +1395 -0
  72. package/src/keeper/organize/coverage-gate.ts +19 -0
  73. package/src/keeper/organize/coverage-tools.ts +765 -0
  74. package/src/keeper/organize/entries.ts +153 -0
  75. package/src/keeper/organize/entry-gate.ts +289 -0
  76. package/src/keeper/organize/fill-tools.ts +718 -0
  77. package/src/keeper/organize/follow-up.ts +280 -0
  78. package/src/keeper/organize/generation-check.ts +504 -0
  79. package/src/keeper/organize/graph.ts +230 -0
  80. package/src/keeper/organize/lane-tools.ts +289 -0
  81. package/src/keeper/organize/looked-tools.ts +54 -0
  82. package/src/keeper/organize/materials.ts +243 -0
  83. package/src/keeper/organize/owner-lines.ts +493 -0
  84. package/src/keeper/organize/place-tools.ts +216 -0
  85. package/src/keeper/organize/placement-inference.ts +1045 -0
  86. package/src/keeper/organize/placement-time.ts +320 -0
  87. package/src/keeper/organize/placing.ts +821 -0
  88. package/src/keeper/organize/positioning.ts +33 -0
  89. package/src/keeper/organize/readiness.ts +47 -0
  90. package/src/keeper/organize/reading.ts +401 -0
  91. package/src/keeper/organize/round-blocks.ts +65 -0
  92. package/src/keeper/organize/round-news.ts +164 -0
  93. package/src/keeper/organize/round-open.ts +586 -0
  94. package/src/keeper/organize/schedule-state.ts +39 -0
  95. package/src/keeper/organize/schedule.ts +137 -0
  96. package/src/keeper/organize/service.ts +409 -0
  97. package/src/keeper/organize/skills.ts +116 -0
  98. package/src/keeper/organize/slots.ts +85 -0
  99. package/src/keeper/organize/stage-gate.ts +175 -0
  100. package/src/keeper/organize/stage-tools.ts +471 -0
  101. package/src/keeper/organize/standing-notes.ts +141 -0
  102. package/src/keeper/organize/table-follow-up.ts +330 -0
  103. package/src/keeper/organize/takeover-clerk.ts +832 -0
  104. package/src/keeper/organize/takeover-state.ts +103 -0
  105. package/src/keeper/organize/takeover.ts +216 -0
  106. package/src/keeper/organize/update-pending.ts +535 -0
  107. package/src/keeper/organize/workbench-placement.ts +92 -0
  108. package/src/keeper/own-keys.ts +114 -0
  109. package/src/keeper/owner-text.ts +165 -0
  110. package/src/keeper/project-folder.ts +334 -0
  111. package/src/keeper/prompts.ts +101 -0
  112. package/src/keeper/references.ts +177 -0
  113. package/src/keeper/relook/compose.ts +120 -0
  114. package/src/keeper/relook/prompts.ts +36 -0
  115. package/src/keeper/roles.ts +259 -0
  116. package/src/keeper/round-tools.ts +227 -0
  117. package/src/keeper/route.ts +148 -0
  118. package/src/keeper/rules.ts +97 -0
  119. package/src/keeper/runtime.ts +1858 -0
  120. package/src/keeper/scope-tools.ts +194 -0
  121. package/src/keeper/sendback-text.ts +83 -0
  122. package/src/keeper/step-timing.ts +207 -0
  123. package/src/keeper/testing/clerk-script.ts +212 -0
  124. package/src/keeper/testing/streaming-arguments.ts +57 -0
  125. package/src/keeper/tools.ts +2340 -0
  126. package/src/keeper/utterance-tools.ts +64 -0
  127. package/src/keeper/verbatim.ts +397 -0
  128. package/src/ledger/adapters.ts +186 -0
  129. package/src/ledger/arrangements.ts +257 -0
  130. package/src/ledger/blame.ts +58 -0
  131. package/src/ledger/code-engine-child.ts +69 -0
  132. package/src/ledger/code-engine.ts +548 -0
  133. package/src/ledger/code.ts +607 -0
  134. package/src/ledger/docs.ts +294 -0
  135. package/src/ledger/git-read.ts +321 -0
  136. package/src/ledger/index.ts +1850 -0
  137. package/src/ledger/item-range.ts +16 -0
  138. package/src/ledger/lines.ts +328 -0
  139. package/src/ledger/numbering.ts +269 -0
  140. package/src/ledger/ranges.ts +74 -0
  141. package/src/ledger/rebuild-worker.ts +15 -0
  142. package/src/ledger/rebuild.ts +387 -0
  143. package/src/ledger/repo-scan.ts +181 -0
  144. package/src/ledger/schema.ts +450 -0
  145. package/src/ledger/sessions.ts +134 -0
  146. package/src/ledger/text-scan.ts +466 -0
  147. package/src/ledger/time.ts +185 -0
  148. package/src/ledger/ts-symbols.ts +180 -0
  149. package/src/ledger/views.ts +377 -0
  150. package/src/mcp/server.ts +127 -0
  151. package/src/mcp/tools.ts +187 -0
  152. package/src/model/ids.ts +23 -0
  153. package/src/model/k-types.ts +912 -0
  154. package/src/model/time.ts +85 -0
  155. package/src/model/types.ts +1382 -0
  156. package/src/model/views-k.ts +707 -0
  157. package/src/model/vocab.ts +269 -0
  158. package/src/process/analysis.ts +79 -0
  159. package/src/process/breakpoint-candidates.ts +383 -0
  160. package/src/process/breakpoints.ts +746 -0
  161. package/src/process/claim-check.ts +295 -0
  162. package/src/process/delivery-links.ts +52 -0
  163. package/src/process/facts.ts +487 -0
  164. package/src/process/generations.ts +138 -0
  165. package/src/process/index.ts +243 -0
  166. package/src/process/integration.ts +128 -0
  167. package/src/process/placement.ts +107 -0
  168. package/src/process/plan.ts +276 -0
  169. package/src/process/sendbacks.ts +244 -0
  170. package/src/process/text.ts +185 -0
  171. package/src/process/units.ts +543 -0
  172. package/src/process/unnumbered.ts +431 -0
  173. package/src/process/work.ts +884 -0
  174. package/src/scope/candidates.ts +86 -0
  175. package/src/scope/decisions.ts +229 -0
  176. package/src/scope/discover.ts +741 -0
  177. package/src/scope/ignore.ts +126 -0
  178. package/src/scope/ignored-place.ts +93 -0
  179. package/src/scope/skip.ts +161 -0
  180. package/src/scope/toolchain.ts +180 -0
  181. package/src/scope/worktree.ts +187 -0
  182. package/src/server/api.ts +549 -0
  183. package/src/server/app.ts +595 -0
  184. package/src/server/drafts-api.ts +170 -0
  185. package/src/server/folders-api.ts +243 -0
  186. package/src/server/graph-view.ts +639 -0
  187. package/src/server/http.ts +224 -0
  188. package/src/server/k-agent-api.ts +56 -0
  189. package/src/server/k-rounds-d99.ts +91 -0
  190. package/src/server/k-views.ts +405 -0
  191. package/src/server/keeper-page.ts +446 -0
  192. package/src/server/keys-api.ts +239 -0
  193. package/src/server/project-folder-api.ts +104 -0
  194. package/src/server/vendor.ts +14 -0
  195. package/src/server/workbench-content.ts +561 -0
  196. package/src/sources/anchor.ts +129 -0
  197. package/src/sources/files.ts +267 -0
  198. package/src/sources/gitobs.ts +41 -0
  199. package/src/sources/history.ts +231 -0
  200. package/src/sources/scan-worker.ts +10 -0
  201. package/src/sources/sessions/locate.ts +292 -0
  202. package/src/sources/sessions/read.ts +346 -0
  203. package/src/sources/sessions/scope.ts +42 -0
  204. package/src/sources/sessions/utterances.ts +223 -0
  205. package/src/sources/watch.ts +215 -0
  206. package/src/store/json-file.ts +50 -0
  207. package/src/store/paths.ts +39 -0
  208. package/src/store/project-store.ts +295 -0
  209. package/src/store/versions.ts +172 -0
  210. package/src/store/workspace.ts +216 -0
  211. package/src/table/check.ts +333 -0
  212. package/src/table/follow-up-tools.ts +30 -0
  213. package/src/table/follow-up.ts +344 -0
  214. package/src/table/import.ts +610 -0
  215. package/src/table/project-home.ts +61 -0
  216. package/src/table/sessions.ts +168 -0
  217. package/src/table/takeover.ts +483 -0
  218. package/src/util/git-check.ts +29 -0
  219. package/src/util/git.ts +411 -0
  220. package/src/util/own-ts.ts +15 -0
  221. package/src/util/paths.ts +225 -0
  222. package/template/FILLING-IN.md +148 -0
  223. package/template/examples/papertrail.json +747 -0
  224. package/template/projectkeeper.schema.json +1001 -0
  225. package/ui/app.js +1135 -0
  226. package/ui/failures.js +82 -0
  227. package/ui/flyout.js +120 -0
  228. package/ui/folder-chooser.js +264 -0
  229. package/ui/glossary.js +156 -0
  230. package/ui/graph-fit.js +157 -0
  231. package/ui/graph-material.js +61 -0
  232. package/ui/graph-palette.js +109 -0
  233. package/ui/graph-tools.js +62 -0
  234. package/ui/graph.js +1712 -0
  235. package/ui/index.html +31 -0
  236. package/ui/k/code-view.js +230 -0
  237. package/ui/k/draft-view.js +93 -0
  238. package/ui/k/k-views.css +224 -0
  239. package/ui/k/round-tree.js +450 -0
  240. package/ui/k/scope-k.js +159 -0
  241. package/ui/k-data.js +118 -0
  242. package/ui/k-fold.js +106 -0
  243. package/ui/k-process.css +302 -0
  244. package/ui/k-process.js +934 -0
  245. package/ui/keeper-activity.js +175 -0
  246. package/ui/keeper-view.js +801 -0
  247. package/ui/keeper.css +101 -0
  248. package/ui/key-order.js +62 -0
  249. package/ui/list-fold.js +67 -0
  250. package/ui/markdown.d.ts +21 -0
  251. package/ui/markdown.js +472 -0
  252. package/ui/placement.d.ts +92 -0
  253. package/ui/placement.js +445 -0
  254. package/ui/popover-place.d.ts +16 -0
  255. package/ui/popover-place.js +89 -0
  256. package/ui/popover.js +198 -0
  257. package/ui/project-folder.js +37 -0
  258. package/ui/shell-state.js +40 -0
  259. package/ui/strip-rows.js +171 -0
  260. package/ui/styles.css +492 -0
  261. package/ui/theme-pick.js +36 -0
  262. package/ui/theme.js +74 -0
  263. package/ui/themes/LICENSE.md +13 -0
  264. package/ui/themes/README.md +44 -0
  265. package/ui/themes/TOKENS.md +291 -0
  266. package/ui/themes/a1/board.css +1557 -0
  267. package/ui/themes/a1/pk.css +392 -0
  268. package/ui/themes/b1/board.css +1163 -0
  269. package/ui/themes/b1/pk.css +218 -0
  270. package/ui/themes/d2/board.css +518 -0
  271. package/ui/themes/d2/pk.css +243 -0
  272. package/ui/themes/guard.css +73 -0
  273. package/ui/themes/i1/board.css +776 -0
  274. package/ui/themes/i1/pk.css +223 -0
  275. package/ui/themes/manifest.json +13 -0
  276. package/ui/views.js +2796 -0
@@ -0,0 +1,243 @@
1
+ /* ───────────────────────────────────────────────────────────────────
2
+ * d2 · Warm Clay — ProjectKeeper's layer (Spec §6.16; CKC-09 AC-41; the UI line's V3)
3
+ *
4
+ * board.css beside this file is the owner's, frozen: not a byte of it changes. This file is loaded after it and gives
5
+ * every `--pk-*` token of ui/styles.css (the contract in ../TOKENS.md) a value the board already has — its tokens where
6
+ * they exist, its own literals where they do not — and then the parts the board never had (a segmented control, a
7
+ * conversation, a graph). No colour, shadow or radius that is not in board.css. It is the one light theme: board.css
8
+ * writes its colours light-dark() and pins `color-scheme: light` on :root, so the light values are in force here and
9
+ * the native controls (selects, checkboxes, scrollbars) follow.
10
+ *
11
+ * The master (WorkflowKeeper's D87): everything is made after d2's card — the full clay brick: a --surface face, a
12
+ * --line frame, the --r-card radius and --elev-card (a top light, a stepped side wall, a warm drop). The popover, the
13
+ * docked and floating Keeper, the dialog, a note card, the open row of the bottom strip and the graph tooltip are
14
+ * that card. Section heads and strip column heads are the board's column plaque (.rootHead: a raised shelf, --raise
15
+ * with --elev-raise). Controls are its raised tiles; the one that is on is solid clay pressed in (.dispTab.on). The
16
+ * radius ladder is the hierarchy: 18 panel > 14 well > 11 card > 8 tile > 5 micro; the four layers one reads are
17
+ * page (--bg) < sunken tray (--well) < card (--surface) < raised part (--raise).
18
+ *
19
+ * Two calls this light theme asked for (measured, and said in the report):
20
+ * - The terracotta --accent (#b46a46) reads at most 3.97:1 on the lightest face, so as a text colour it cannot reach
21
+ * 4.5 — the board itself uses it as words only that way (its tray titles). Where accent-coloured words carry
22
+ * meaning (active states, the amber decision tags) this layer writes them in the board's own deep clay #8a5a3d
23
+ * (the dark value of its --accent-line, 4.5–5.6:1 on the faces); the terracotta itself stays on edges and faces.
24
+ * - --amber (#9a6a10) reads 4.36 on the card, so it is only ever an edge, a fill or a mark, never body text.
25
+ * ─────────────────────────────────────────────────────────────────── */
26
+
27
+ :root {
28
+ /* ── Surfaces and lines: the paper ladder — page < sunken well < card < raised part; the bands are sunken trays ── */
29
+ --pk-ground: var(--bg);
30
+ --pk-rail: var(--well);
31
+ --pk-surface: var(--surface);
32
+ --pk-raised: var(--raise);
33
+ --pk-line: var(--line);
34
+ --pk-line-soft: var(--line-soft);
35
+ --pk-line-strong: var(--accent-line);
36
+ --pk-scrim: rgba(110,80,60,.33); /* the warm dim of the board's own press shadow */
37
+
38
+ /* ── Text, four steps: readings and titles, body, secondary, faint ──
39
+ The board's fg3/meta do not reach 4.5:1 on the well and the page, so the faint step is the board's deepened chip
40
+ ink --neutral-seg-fg (4.6 on the well, 6.0 on the page); muted and faint stand a size and a case apart instead
41
+ of a shade apart. */
42
+ --pk-text-strong: var(--fg);
43
+ --pk-text: var(--fg);
44
+ --pk-text-muted: var(--fg2);
45
+ --pk-text-faint: var(--neutral-seg-fg);
46
+
47
+ /* ── The signal: clay terracotta on edges and lit faces; the primary button presses deeper into the clay ── */
48
+ --pk-accent: var(--accent);
49
+ --pk-accent-bg: var(--amber-bg);
50
+ --pk-accent-hi: #8a5a3d;
51
+ --pk-on-accent: var(--raise);
52
+ --pk-accent-soft: var(--surface); /* a selected row lifts a paper face out of the tray */
53
+ --pk-flash: var(--amber-line);
54
+ --pk-star: var(--amber);
55
+
56
+ /* ── The other families ── */
57
+ --pk-green: var(--green); --pk-green-bg: var(--green-bg); --pk-green-ln: var(--green-line);
58
+ --pk-blue: var(--link); --pk-blue-bg: var(--blue-bg);
59
+ --pk-red: var(--red); --pk-red-bg: var(--red-bg); --pk-red-ln: var(--red);
60
+ --pk-purple: var(--plum); --pk-purple-bg: var(--plum-bg);
61
+
62
+ /* ── Selection: the segment that is on is solid clay with paper words, pressed in (the board's .dispTab.on) ── */
63
+ --pk-sel-bg: var(--neutral-seg);
64
+ --pk-control-on: var(--accent);
65
+ --pk-control-on-text: var(--raise);
66
+ --pk-control-on-shadow: var(--elev-press);
67
+
68
+ /* ── Fonts: the board's own (its body keeps the board's tabular numbers) ── */
69
+ --pk-font-body: 12.5px/1.55 "Segoe UI","Microsoft YaHei UI","Microsoft YaHei",system-ui,sans-serif;
70
+ --pk-font-ui: "Segoe UI","Microsoft YaHei UI","Microsoft YaHei",system-ui,sans-serif;
71
+ --pk-font-mono: ui-monospace, Consolas, monospace;
72
+ --pk-font-display: "Segoe UI","Microsoft YaHei UI","Microsoft YaHei",system-ui,sans-serif;
73
+
74
+ /* ── Radii: the ladder is the hierarchy — 18 panel > 14 well > 11 card > 8 tile > 5 micro; pills are 999 ── */
75
+ --pk-radius: var(--r-card);
76
+ --pk-radius-sm: var(--r-tile);
77
+ --pk-radius-xs: var(--r-micro);
78
+ --pk-radius-panel: var(--r-panel);
79
+ --pk-radius-pill: 999px;
80
+
81
+ /* ── Shadows ── */
82
+ --pk-shadow-float: var(--elev-card);
83
+ --pk-shadow-window: var(--elev-panel);
84
+ --pk-shadow-raised: var(--elev-raise);
85
+
86
+ /* ── The card (the master): the full clay brick — paper face, hairline frame, the card radius, the stepped
87
+ side wall and warm drop of --elev-card. The clay is matte: no texture, its light comes from the shadows. ── */
88
+ --pk-card-bg: var(--surface);
89
+ --pk-card-texture: none;
90
+ --pk-card-border: var(--line);
91
+ --pk-card-shadow: var(--elev-card);
92
+ --pk-card-radius: var(--r-card);
93
+ --pk-card-text: var(--fg);
94
+ --pk-card-line: var(--line-soft);
95
+ --pk-card-hover-border: var(--accent-line);
96
+ --pk-card-foot-bg: var(--well); /* the popover's foot: a sunken strip */
97
+ --pk-card-head-bg: var(--raise);
98
+
99
+ /* ── A section is a flat drawer lying on the page (the board's tray); its head is the column plaque — a raised
100
+ shelf on --raise with --elev-raise, like the board's .rootHead ── */
101
+ --pk-section-bg: var(--surface);
102
+ --pk-section-border: var(--line);
103
+ --pk-section-radius: var(--r-panel);
104
+ --pk-section-shadow: var(--elev-drawer);
105
+ --pk-head-bg: var(--raise);
106
+ --pk-head-texture: none;
107
+ --pk-head-border: var(--line);
108
+ --pk-head-shadow: var(--elev-raise);
109
+ --pk-head-text: var(--fg);
110
+
111
+ /* ── Controls: the raised tiles of the board's toolbar (raise, hairline, --elev-raise, the tile radius) ── */
112
+ --pk-control-bg: var(--raise);
113
+ --pk-control-texture: none;
114
+ --pk-control-border: var(--line);
115
+ --pk-control-shadow: var(--elev-raise);
116
+ --pk-control-radius: var(--r-tile);
117
+ --pk-control-hover-bg: var(--raise);
118
+ --pk-control-hover-border: var(--accent-line);
119
+
120
+ /* ── The sunken well: inputs, the composer, quoted sources, code — the board's groove ── */
121
+ --pk-well-bg: var(--well);
122
+ --pk-well-border: var(--line);
123
+ --pk-well-shadow: var(--elev-groove);
124
+ --pk-code-bg: var(--well);
125
+
126
+ /* ── The conversation: the owner's words on the amber-tinted face (WorkflowKeeper's D87) ── */
127
+ --pk-msg-user-bg: var(--amber-bg);
128
+ --pk-msg-user-border: var(--amber-line);
129
+
130
+ /* ── The graph (Spec §6.3; D53): the light values of theme-palette-numbers.md — Plan / Work item ΔE 49.8 normal,
131
+ 30.5 protan, 23.8 deutan (factory floor 25.2 / 21.1), L* spread 2.5. The words on an object are the body
132
+ colours; a kind's colour stays on its border and top band. --amber reads 4.36 on the card: edge and band only.
133
+ Every value here is the board's own light literal, not its var(): the graph reads its palette with
134
+ getComputedStyle(:root).getPropertyValue (graph-palette.js), where a var() chain into the board's light-dark()
135
+ tokens comes back unresolved — so the light values are written out. The DOM parts still use the vars. ── */
136
+ --pk-graph-bg: #efe3d0;
137
+ --pk-graph-intent: #42719a;
138
+ --pk-graph-plan: #8f6288;
139
+ --pk-graph-work: #437a4c;
140
+ --pk-graph-reality: #9a6a10;
141
+ --pk-graph-node-bg: #fbf5ec;
142
+ --pk-graph-node-text: #2f241d;
143
+ --pk-graph-node-kind: #5f5045;
144
+ --pk-graph-node-muted: #5f5045;
145
+ --pk-graph-node-faint: #7c6a5a; /* 4.76 on the node face */
146
+ /* the card's material lent to the objects: the top light, the deepest step of the side wall 3px below, the warm drop */
147
+ --pk-graph-node-chamfer: rgba(255,255,255,.72);
148
+ --pk-graph-node-shade: none;
149
+ --pk-graph-node-brush: none;
150
+ --pk-graph-node-lip: #c4a575;
151
+ --pk-graph-node-shadow: rgba(127,92,70,.32);
152
+ /* the lines, quiet to loud on the paper: structure; other links and the dotted inferred; the focused path;
153
+ pointed at; selected (the deep clay, 4.6 on the ground) */
154
+ --pk-graph-edge: #8d7358;
155
+ --pk-graph-edge-other: #7c6a5a;
156
+ --pk-graph-edge-related: #5f5045;
157
+ --pk-graph-edge-lit: #2f241d;
158
+ --pk-graph-edge-selected: #8a5a3d;
159
+ --pk-graph-questioned: #9a6a10;
160
+ --pk-graph-label-bg: #fffaf1;
161
+ --pk-graph-chip-bg: #fffaf1;
162
+ --pk-graph-chip-border: #d8c3aa;
163
+ --pk-graph-selection: #2f241d; /* never one of the kinds */
164
+ --pk-graph-focus: #9a6a10;
165
+ --pk-graph-diff-added: #437a4c;
166
+ --pk-graph-diff-changed: #9a6a10;
167
+ --pk-graph-diff-removed: #b04a44;
168
+ --pk-graph-replaced: #c98a64;
169
+ --pk-graph-danger: #b04a44;
170
+ --pk-graph-group-bg: #fffaf1;
171
+ --pk-graph-group-border: #d8c3aa;
172
+ --pk-graph-group-back: #fbf5ec;
173
+ --pk-graph-group-back-border: #e9dbc7;
174
+ --pk-graph-group-chip: #dbc6a6;
175
+ /* the corner marks: attention in amber, the note in ink, pending in link blue */
176
+ --pk-graph-mark-star: #9a6a10;
177
+ --pk-graph-mark-flag: #9a6a10;
178
+ --pk-graph-mark-note: #2f241d;
179
+ --pk-graph-mark-ask: #9a6a10;
180
+ --pk-graph-mark-pending: #42719a;
181
+ }
182
+
183
+ /* ── The ground: the board's body, restated from the tokens so this file is the one source ── */
184
+ body { color: var(--pk-text); font: var(--pk-font-body); background: var(--pk-ground); }
185
+ input[type="checkbox"] { accent-color: var(--accent); }
186
+
187
+ /* ── Classes board.css and the workbench both use: the guard put the metrics back; the colours are set here ── */
188
+ .empty { color: var(--pk-text-muted); }
189
+
190
+ /* ── The top bar is the board's own page head: a paper shelf on the panel shadow ── */
191
+ .topbar { background: var(--surface); border-bottom-color: var(--line); box-shadow: var(--elev-panel); }
192
+
193
+ /* ── The legend band sits with the other sunken trays (the board's own .legend would leave it on the card face) ── */
194
+ .legend { background: var(--pk-rail); }
195
+
196
+ /* ── Tags: a plain tag is a classification, not a signal (the author's rule) — the board's one matte clay pill
197
+ (.kid/.org/.attKind): the well face, the deepened chip ink, the pill radius, no border. The decision tag
198
+ (.tag.amber) stays loud: the amber tint with a deep clay word; the other signal tints keep the board's pairs. ── */
199
+ .tag { background: var(--well); color: var(--neutral-seg-fg); border-radius: 999px; box-shadow: inset 0 1px 0 rgba(255,255,255,.5); }
200
+ .tag.amber { color: #8a5a3d; }
201
+
202
+ /* ── The process view's signal words (increment K, CKC-24) on the one light theme: on the sunken list face the
203
+ board's red/green words on their own tints read 4.0–4.2:1. The chips lift onto the paper face — as the segmented
204
+ plates lift out of their groove — keeping hue and mark; amber words take the deep clay, as everywhere (D46 ≥ 4.5).
205
+ The classes are the process view's own (k-process.css), wherever they stand: the work cell, the intent cell, the
206
+ generation bands, the popover's open items. ── */
207
+ :is(td.proc, .genrow, .kp-open) .tag.red { background: var(--raise); color: var(--red); box-shadow: 0 0 0 1px var(--red-line); }
208
+ :is(td.proc, .genrow, .kp-open) .tag.green { background: var(--raise); color: var(--green); box-shadow: 0 0 0 1px var(--green-line); }
209
+ :is(td.proc, .genrow, .kp-open) .tag.amber { background: var(--raise); }
210
+ .route { padding: 0 4px; border-radius: var(--r-micro); }
211
+ .route.closed { background: var(--raise); color: var(--green); box-shadow: 0 0 0 1px var(--green-line); }
212
+ .route.back { background: var(--raise); color: var(--red); box-shadow: 0 0 0 1px var(--red-line); }
213
+ .route.hand { background: var(--raise); color: var(--link); box-shadow: 0 0 0 1px var(--line); }
214
+ .flag { padding-left: 4px; }
215
+ .flag.back { background: var(--raise); color: var(--red); box-shadow: 0 0 0 1px var(--red-line); border-radius: var(--r-micro); }
216
+ .flag.up, .intent-flag, .text-btn.copy { color: #8a5a3d; }
217
+ .order .moved { color: #8a5a3d; }
218
+
219
+ /* ── The strip's marks: tiny grooved chips, like the board's legend swatches ── */
220
+ .mk { border-radius: var(--r-micro); box-shadow: var(--elev-groove); }
221
+
222
+ /* ── Segmented controls after the declaration tiles: a sunken groove holding raised label plates; the one that is
223
+ on is solid clay pressed in with paper words. Only paint changes: the tiles keep their size, the row its height. ── */
224
+ .segmented { background: var(--well); border-color: var(--line); border-radius: var(--r-card); box-shadow: var(--elev-well); }
225
+ .segmented button { background: var(--raise); color: var(--fg2); border-radius: var(--r-tile); box-shadow: inset 0 1px 0 rgba(255,255,255,.80), 0 0 0 1px var(--line); }
226
+ .segmented button:hover:not(:disabled) { color: var(--fg); }
227
+ .segmented button.active { background: var(--accent); color: var(--raise); box-shadow: var(--elev-press); }
228
+
229
+ /* ── The popover's foot: the sunken strip is grooved into the card ── */
230
+ .popover-foot { box-shadow: var(--elev-well); }
231
+
232
+ /* ── Accent-coloured words are written in the board's deep clay (4.5–5.6:1 on these faces); the terracotta itself
233
+ stays on edges, rings and faces. The selected view is a paper face lifted out of the tray with a clay spine. ── */
234
+ .btn.active, .read-mark.alert, .read-flag.alert, .outline-modes button.active, .mobile-nav button.active,
235
+ .dock-robot.on, .graph-float .btn.small.active, .text-btn.sel, .note-body h4 { color: #8a5a3d; }
236
+ .nav-item.active, .outline .ol-area.sel, .outline .ol-work.sel { color: #8a5a3d; }
237
+ .nav-item.active, .outline .ol-area.sel, .outline .ol-work.sel { background: var(--pk-accent-soft); box-shadow: inset 2px 0 0 var(--accent); }
238
+
239
+ /* ── Buttons: the word turns clay on hover, as the board's own buttons do ── */
240
+ .btn:hover:not(:disabled), .search-trigger:hover, .coverage-pill:hover { color: var(--accent); }
241
+
242
+ /* ── Scrollbars: thin, the clay line's tone ── */
243
+ main, .rail, .keeper-stream, .popover-body, .flyout, .strip .items, .dialog-body { scrollbar-color: var(--accent-line) transparent; }
@@ -0,0 +1,73 @@
1
+ /* ───────────────────────────────────────────────────────────────────
2
+ * The theme guard — always the last stylesheet (Spec §6.16; after WorkflowKeeper's skin-guard.css).
3
+ *
4
+ * The four frozen board.css files were written for WorkflowKeeper's static Board page: one long document that scrolls
5
+ * as a whole, with a sticky `header`, a 14–18px `h1` and a `body` of its own. ProjectKeeper's shell is a grid whose
6
+ * main view scrolls by itself, and its markup has `header` elements inside every section and strip column. Loaded
7
+ * after styles.css, a theme's element-level rules would land on that markup and turn the shell into a long page.
8
+ *
9
+ * So this file restates the shell's LAYOUT invariants and puts back ProjectKeeper's own sizes where a theme's element
10
+ * or class rule hits them. It says no colour, no shadow, no font family: the look belongs to the theme (board.css and
11
+ * its pk.css), the skeleton to the workbench. What each theme leaks and what happens to it is tabled in TOKENS.md.
12
+ * ─────────────────────────────────────────────────────────────────── */
13
+
14
+ /* The shell: full height, the main view scrolls, the rest does not. */
15
+ html,body{height:100%}
16
+ body{margin:0}
17
+ /* The panels (D100): the top bar, the rail, the main panel and the drawer are grid areas; the main panel is a column
18
+ whose view scrolls inside it; filling the window lays it over the rest. */
19
+ .shell{display:grid;height:100dvh;min-height:480px}
20
+ .rail{flex-direction:column;min-height:0;overflow:auto}
21
+ .main-panel{display:flex;flex-direction:column;min-height:0;min-width:0;overflow:hidden}
22
+ .drawer{display:flex;flex-direction:column}
23
+ body.maximised .main-panel{position:fixed}
24
+ .topbar{position:static;min-height:48px;height:auto;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap}
25
+ .body{display:flex;flex-direction:column;min-height:0;min-width:0;flex:1;position:relative}
26
+ main{flex:1;min-height:0;overflow:auto;min-width:0;display:flex;flex-direction:column}
27
+
28
+ /* Board.css makes every `header` a sticky page head (z-index 30–40, its own padding and margins). ProjectKeeper's
29
+ headers are the heads of sections, strip columns and cards: in the flow, at the workbench's sizes. */
30
+ header{position:static;top:auto;z-index:auto;margin:0}
31
+ .section>header{padding:9px 12px}
32
+ .strip header{display:block;padding:6px 12px}
33
+ .keeper-head{padding:12px 14px}
34
+ .dialog-head{padding:14px 18px}
35
+ .popover-head{padding:10px 10px 8px 14px}
36
+
37
+ /* The heading scale is the workbench's (Spec §6.16: titles and labels set apart by size); a theme's `h1` is 14–18px. */
38
+ h1,h2,h3,h4{margin:0}
39
+ h1{font-size:22px;font-weight:600;letter-spacing:-.4px}
40
+ h2{font-size:16px;font-weight:600}
41
+ h3{font-size:13px;font-weight:600}
42
+ h4{font-size:12px;font-weight:600}
43
+ .dialog-head h2{font-size:15px}
44
+ .empty h2{font-size:17px}
45
+ .walk-step h3{font-size:14px}
46
+ .md h1{font-size:15px}.md h2{font-size:14px}.md h3{font-size:13px}
47
+ .md h1,.md h2,.md h3,.md h4,.md h5,.md h6{margin:10px 0 4px;font-weight:700;letter-spacing:0}
48
+
49
+ /* Class names both sides use. Board.css's `.legend` wraps and pads for a page, `.mk` is a 12–13px glyph, `.empty` a
50
+ padded page area, `.fold > summary` pulls itself 8px out of its box. Only the metrics come back; colours stay theirs. */
51
+ .legend{display:flex;flex-wrap:nowrap;align-items:center;gap:10px;white-space:nowrap;padding:6px 12px;border-bottom:0}
52
+ .mk{font-size:10.5px;line-height:1;width:16px;height:16px}
53
+ .empty{padding:44px 20px;text-align:center;max-width:64ch;margin:0 auto}
54
+ details.fold>summary{margin:0}
55
+ details.fold>summary::before{margin-right:0;font-size:10px}
56
+ .toolbar{margin-top:0;font-size:inherit}
57
+
58
+ /* Floating layers keep their positions: the docked and popped-out Keeper, the popover and its scrim, the control-row
59
+ flyouts, the graph tooltip, the pill and the dialog are never part of the document flow. */
60
+ .keeper-panel{position:fixed;overflow:hidden}
61
+ .keeper-panel.docked{top:calc(var(--pk-top) + var(--pk-gap));right:var(--pk-gap);bottom:var(--pk-gap);z-index:32}
62
+ body.maximised .keeper-panel.docked{top:var(--pk-gap)}
63
+ .keeper-panel.floating{z-index:45}
64
+ .keeper-panel:not(.open){display:none}
65
+ .popover{position:fixed;z-index:40}
66
+ .popover-scrim{position:fixed;inset:0;z-index:39}
67
+ .flyout{position:fixed;z-index:36}
68
+ .graph-tip{position:fixed;z-index:40}
69
+ .graph-float{position:absolute;z-index:5}
70
+ .keeper-dock{position:fixed;z-index:30}
71
+ #toast{position:fixed;z-index:20}
72
+ dialog{position:fixed;padding:0;margin:auto}
73
+ [hidden]{display:none!important}