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.
- package/CHANGELOG.md +56 -0
- package/LICENSE +21 -0
- package/README.md +283 -2
- package/README.zh-CN.md +285 -0
- package/THIRD_PARTY_NOTICES.md +53 -0
- package/bin/pk.mjs +6 -0
- package/bin/postinstall.mjs +5 -0
- package/bin/strip-types.mjs +28 -0
- package/package.json +68 -4
- package/patches/README.md +111 -0
- package/patches/pi-ai-0.85.0.ts +122 -0
- package/patches/pi-ai-0.87.1.ts +122 -0
- package/scripts/apply-pi-streaming-patch.ts +86 -0
- package/skills/clerk/coverage/SKILL.md +35 -0
- package/skills/clerk/cross-check/SKILL.md +118 -0
- package/skills/clerk/deepen-dispatch/SKILL.md +69 -0
- package/skills/clerk/lane-follow-up/SKILL.md +94 -0
- package/skills/clerk/lane-plan/SKILL.md +107 -0
- package/skills/clerk/lane-slot/SKILL.md +113 -0
- package/skills/clerk/lane-topic/SKILL.md +116 -0
- package/skills/clerk/orientation/SKILL.md +160 -0
- package/skills/clerk/reconcile/SKILL.md +77 -0
- package/skills/clerk/skeleton-dispatch/SKILL.md +43 -0
- package/skills/clerk/spot-check/SKILL.md +52 -0
- package/skills/clerk/synthesis/SKILL.md +65 -0
- package/skills/table-follow-up/SKILL.md +42 -0
- package/src/cli.ts +319 -0
- package/src/codemap/README.md +13 -0
- package/src/codemap/engines.ts +102 -0
- package/src/codemap/facts.ts +504 -0
- package/src/context/agent-entry.ts +232 -0
- package/src/context/ask.ts +97 -0
- package/src/context/assemble.ts +1058 -0
- package/src/context/code-source.ts +103 -0
- package/src/context/k-briefs.ts +114 -0
- package/src/context/lineage.ts +100 -0
- package/src/context/object-brief.ts +300 -0
- package/src/context/owner-words.ts +191 -0
- package/src/context/pack-fixture.ts +342 -0
- package/src/context/project-rules.ts +160 -0
- package/src/intake/intake.ts +392 -0
- package/src/intake/material-rules.ts +166 -0
- package/src/intake/removal.ts +316 -0
- package/src/intake/skipped.ts +72 -0
- package/src/keeper/adjustment.ts +565 -0
- package/src/keeper/bounds/boundary.ts +509 -0
- package/src/keeper/bounds/command.ts +1665 -0
- package/src/keeper/bounds/paths.ts +164 -0
- package/src/keeper/bounds/reads.ts +718 -0
- package/src/keeper/bounds/shell-write-guard.ts +521 -0
- package/src/keeper/capabilities.ts +136 -0
- package/src/keeper/clerk-steps.ts +151 -0
- package/src/keeper/clerk-tools.ts +1424 -0
- package/src/keeper/conversation.ts +253 -0
- package/src/keeper/evidence.ts +662 -0
- package/src/keeper/fake-provider.ts +132 -0
- package/src/keeper/held.ts +15 -0
- package/src/keeper/history-tools.ts +163 -0
- package/src/keeper/jobs/answering.ts +53 -0
- package/src/keeper/key-check.ts +105 -0
- package/src/keeper/ledger-tools.ts +295 -0
- package/src/keeper/link-check.ts +185 -0
- package/src/keeper/merge.ts +260 -0
- package/src/keeper/note-origin.ts +56 -0
- package/src/keeper/numbers-check.ts +102 -0
- package/src/keeper/open-in-pi.ts +57 -0
- package/src/keeper/organize/absence.ts +266 -0
- package/src/keeper/organize/carried-on.ts +214 -0
- package/src/keeper/organize/clerk-coverage.ts +293 -0
- package/src/keeper/organize/clerk-prompts.ts +132 -0
- package/src/keeper/organize/clerk.ts +1395 -0
- package/src/keeper/organize/coverage-gate.ts +19 -0
- package/src/keeper/organize/coverage-tools.ts +765 -0
- package/src/keeper/organize/entries.ts +153 -0
- package/src/keeper/organize/entry-gate.ts +289 -0
- package/src/keeper/organize/fill-tools.ts +718 -0
- package/src/keeper/organize/follow-up.ts +280 -0
- package/src/keeper/organize/generation-check.ts +504 -0
- package/src/keeper/organize/graph.ts +230 -0
- package/src/keeper/organize/lane-tools.ts +289 -0
- package/src/keeper/organize/looked-tools.ts +54 -0
- package/src/keeper/organize/materials.ts +243 -0
- package/src/keeper/organize/owner-lines.ts +493 -0
- package/src/keeper/organize/place-tools.ts +216 -0
- package/src/keeper/organize/placement-inference.ts +1045 -0
- package/src/keeper/organize/placement-time.ts +320 -0
- package/src/keeper/organize/placing.ts +821 -0
- package/src/keeper/organize/positioning.ts +33 -0
- package/src/keeper/organize/readiness.ts +47 -0
- package/src/keeper/organize/reading.ts +401 -0
- package/src/keeper/organize/round-blocks.ts +65 -0
- package/src/keeper/organize/round-news.ts +164 -0
- package/src/keeper/organize/round-open.ts +586 -0
- package/src/keeper/organize/schedule-state.ts +39 -0
- package/src/keeper/organize/schedule.ts +137 -0
- package/src/keeper/organize/service.ts +409 -0
- package/src/keeper/organize/skills.ts +116 -0
- package/src/keeper/organize/slots.ts +85 -0
- package/src/keeper/organize/stage-gate.ts +175 -0
- package/src/keeper/organize/stage-tools.ts +471 -0
- package/src/keeper/organize/standing-notes.ts +141 -0
- package/src/keeper/organize/table-follow-up.ts +330 -0
- package/src/keeper/organize/takeover-clerk.ts +832 -0
- package/src/keeper/organize/takeover-state.ts +103 -0
- package/src/keeper/organize/takeover.ts +216 -0
- package/src/keeper/organize/update-pending.ts +535 -0
- package/src/keeper/organize/workbench-placement.ts +92 -0
- package/src/keeper/own-keys.ts +114 -0
- package/src/keeper/owner-text.ts +165 -0
- package/src/keeper/project-folder.ts +334 -0
- package/src/keeper/prompts.ts +101 -0
- package/src/keeper/references.ts +177 -0
- package/src/keeper/relook/compose.ts +120 -0
- package/src/keeper/relook/prompts.ts +36 -0
- package/src/keeper/roles.ts +259 -0
- package/src/keeper/round-tools.ts +227 -0
- package/src/keeper/route.ts +148 -0
- package/src/keeper/rules.ts +97 -0
- package/src/keeper/runtime.ts +1858 -0
- package/src/keeper/scope-tools.ts +194 -0
- package/src/keeper/sendback-text.ts +83 -0
- package/src/keeper/step-timing.ts +207 -0
- package/src/keeper/testing/clerk-script.ts +212 -0
- package/src/keeper/testing/streaming-arguments.ts +57 -0
- package/src/keeper/tools.ts +2340 -0
- package/src/keeper/utterance-tools.ts +64 -0
- package/src/keeper/verbatim.ts +397 -0
- package/src/ledger/adapters.ts +186 -0
- package/src/ledger/arrangements.ts +257 -0
- package/src/ledger/blame.ts +58 -0
- package/src/ledger/code-engine-child.ts +69 -0
- package/src/ledger/code-engine.ts +548 -0
- package/src/ledger/code.ts +607 -0
- package/src/ledger/docs.ts +294 -0
- package/src/ledger/git-read.ts +321 -0
- package/src/ledger/index.ts +1850 -0
- package/src/ledger/item-range.ts +16 -0
- package/src/ledger/lines.ts +328 -0
- package/src/ledger/numbering.ts +269 -0
- package/src/ledger/ranges.ts +74 -0
- package/src/ledger/rebuild-worker.ts +15 -0
- package/src/ledger/rebuild.ts +387 -0
- package/src/ledger/repo-scan.ts +181 -0
- package/src/ledger/schema.ts +450 -0
- package/src/ledger/sessions.ts +134 -0
- package/src/ledger/text-scan.ts +466 -0
- package/src/ledger/time.ts +185 -0
- package/src/ledger/ts-symbols.ts +180 -0
- package/src/ledger/views.ts +377 -0
- package/src/mcp/server.ts +127 -0
- package/src/mcp/tools.ts +187 -0
- package/src/model/ids.ts +23 -0
- package/src/model/k-types.ts +912 -0
- package/src/model/time.ts +85 -0
- package/src/model/types.ts +1382 -0
- package/src/model/views-k.ts +707 -0
- package/src/model/vocab.ts +269 -0
- package/src/process/analysis.ts +79 -0
- package/src/process/breakpoint-candidates.ts +383 -0
- package/src/process/breakpoints.ts +746 -0
- package/src/process/claim-check.ts +295 -0
- package/src/process/delivery-links.ts +52 -0
- package/src/process/facts.ts +487 -0
- package/src/process/generations.ts +138 -0
- package/src/process/index.ts +243 -0
- package/src/process/integration.ts +128 -0
- package/src/process/placement.ts +107 -0
- package/src/process/plan.ts +276 -0
- package/src/process/sendbacks.ts +244 -0
- package/src/process/text.ts +185 -0
- package/src/process/units.ts +543 -0
- package/src/process/unnumbered.ts +431 -0
- package/src/process/work.ts +884 -0
- package/src/scope/candidates.ts +86 -0
- package/src/scope/decisions.ts +229 -0
- package/src/scope/discover.ts +741 -0
- package/src/scope/ignore.ts +126 -0
- package/src/scope/ignored-place.ts +93 -0
- package/src/scope/skip.ts +161 -0
- package/src/scope/toolchain.ts +180 -0
- package/src/scope/worktree.ts +187 -0
- package/src/server/api.ts +549 -0
- package/src/server/app.ts +595 -0
- package/src/server/drafts-api.ts +170 -0
- package/src/server/folders-api.ts +243 -0
- package/src/server/graph-view.ts +639 -0
- package/src/server/http.ts +224 -0
- package/src/server/k-agent-api.ts +56 -0
- package/src/server/k-rounds-d99.ts +91 -0
- package/src/server/k-views.ts +405 -0
- package/src/server/keeper-page.ts +446 -0
- package/src/server/keys-api.ts +239 -0
- package/src/server/project-folder-api.ts +104 -0
- package/src/server/vendor.ts +14 -0
- package/src/server/workbench-content.ts +561 -0
- package/src/sources/anchor.ts +129 -0
- package/src/sources/files.ts +267 -0
- package/src/sources/gitobs.ts +41 -0
- package/src/sources/history.ts +231 -0
- package/src/sources/scan-worker.ts +10 -0
- package/src/sources/sessions/locate.ts +292 -0
- package/src/sources/sessions/read.ts +346 -0
- package/src/sources/sessions/scope.ts +42 -0
- package/src/sources/sessions/utterances.ts +223 -0
- package/src/sources/watch.ts +215 -0
- package/src/store/json-file.ts +50 -0
- package/src/store/paths.ts +39 -0
- package/src/store/project-store.ts +295 -0
- package/src/store/versions.ts +172 -0
- package/src/store/workspace.ts +216 -0
- package/src/table/check.ts +333 -0
- package/src/table/follow-up-tools.ts +30 -0
- package/src/table/follow-up.ts +344 -0
- package/src/table/import.ts +610 -0
- package/src/table/project-home.ts +61 -0
- package/src/table/sessions.ts +168 -0
- package/src/table/takeover.ts +483 -0
- package/src/util/git-check.ts +29 -0
- package/src/util/git.ts +411 -0
- package/src/util/own-ts.ts +15 -0
- package/src/util/paths.ts +225 -0
- package/template/FILLING-IN.md +148 -0
- package/template/examples/papertrail.json +747 -0
- package/template/projectkeeper.schema.json +1001 -0
- package/ui/app.js +1135 -0
- package/ui/failures.js +82 -0
- package/ui/flyout.js +120 -0
- package/ui/folder-chooser.js +264 -0
- package/ui/glossary.js +156 -0
- package/ui/graph-fit.js +157 -0
- package/ui/graph-material.js +61 -0
- package/ui/graph-palette.js +109 -0
- package/ui/graph-tools.js +62 -0
- package/ui/graph.js +1712 -0
- package/ui/index.html +31 -0
- package/ui/k/code-view.js +230 -0
- package/ui/k/draft-view.js +93 -0
- package/ui/k/k-views.css +224 -0
- package/ui/k/round-tree.js +450 -0
- package/ui/k/scope-k.js +159 -0
- package/ui/k-data.js +118 -0
- package/ui/k-fold.js +106 -0
- package/ui/k-process.css +302 -0
- package/ui/k-process.js +934 -0
- package/ui/keeper-activity.js +175 -0
- package/ui/keeper-view.js +801 -0
- package/ui/keeper.css +101 -0
- package/ui/key-order.js +62 -0
- package/ui/list-fold.js +67 -0
- package/ui/markdown.d.ts +21 -0
- package/ui/markdown.js +472 -0
- package/ui/placement.d.ts +92 -0
- package/ui/placement.js +445 -0
- package/ui/popover-place.d.ts +16 -0
- package/ui/popover-place.js +89 -0
- package/ui/popover.js +198 -0
- package/ui/project-folder.js +37 -0
- package/ui/shell-state.js +40 -0
- package/ui/strip-rows.js +171 -0
- package/ui/styles.css +492 -0
- package/ui/theme-pick.js +36 -0
- package/ui/theme.js +74 -0
- package/ui/themes/LICENSE.md +13 -0
- package/ui/themes/README.md +44 -0
- package/ui/themes/TOKENS.md +291 -0
- package/ui/themes/a1/board.css +1557 -0
- package/ui/themes/a1/pk.css +392 -0
- package/ui/themes/b1/board.css +1163 -0
- package/ui/themes/b1/pk.css +218 -0
- package/ui/themes/d2/board.css +518 -0
- package/ui/themes/d2/pk.css +243 -0
- package/ui/themes/guard.css +73 -0
- package/ui/themes/i1/board.css +776 -0
- package/ui/themes/i1/pk.css +223 -0
- package/ui/themes/manifest.json +13 -0
- package/ui/views.js +2796 -0
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
/* ───────────────────────────────────────────────────────────────────
|
|
2
|
+
* a1 · Walnut Workshop — 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. The whole file can be taken away and
|
|
8
|
+
* the factory look is back.
|
|
9
|
+
*
|
|
10
|
+
* Two surfaces (the theme's own nature): the table, the panels and the Keeper's panel are dark walnut with light text;
|
|
11
|
+
* the cards are parchment with dark ink. The tokens are set for the walnut on :root and set again on the parchment
|
|
12
|
+
* cards, so everything standing on a card takes the ink (custom properties inherit — WorkflowKeeper's .detail does the
|
|
13
|
+
* same). A third, small surface is the cast brass plate of the bin header, which gets its own dark text.
|
|
14
|
+
*
|
|
15
|
+
* The master (WorkflowKeeper's D87), part by part after the board:
|
|
16
|
+
* ground the walnut table (body): the board's grain and gradient.
|
|
17
|
+
* panel the rail and the Keeper's panel: the board's dashboard wood with brass pinstripes (.dash r2, WFK's .pool).
|
|
18
|
+
* section the enamel dial in a wood case (.dc r2): a wood gradient, an oxidised brass frame, a brass inset edge.
|
|
19
|
+
* head the cast brass plate (.rootHead r2): the brass gradient, dark engraved text with a white lift.
|
|
20
|
+
* card the parchment tray / module (.tray, .module r5): cream face, brass frame, the .box's brass line, hard lip
|
|
21
|
+
* and deep drop; the popover, flyout, dialog, note cards, the open strip row, the tooltip, the toast, the
|
|
22
|
+
* Keeper's tile in the rail are that card. Big cards (dialog, Keeper window) carry the module's brass
|
|
23
|
+
* corners; small floating ones the .box's brass pin.
|
|
24
|
+
* control the dark key (.dc / .bCode): wood gradient, brass edge and inset highlight, brass letters; the one that
|
|
25
|
+
* is on is a brass plate (WFK's .dispTab.on). On a card a control is the board's light brass-edged toolbar
|
|
26
|
+
* label. Segmented controls sit in a groove (the .cell / .eqBar well).
|
|
27
|
+
* well the sunken drawer (.cell, --shadow-well); on a card, the paper well of `code` / .kid.
|
|
28
|
+
* ─────────────────────────────────────────────────────────────────── */
|
|
29
|
+
|
|
30
|
+
:root {
|
|
31
|
+
/* ── Surfaces and lines: table < panel < card; the well sinks; brass hairlines separate the wood areas ── */
|
|
32
|
+
--pk-ground: var(--wood-table);
|
|
33
|
+
--pk-rail: #201710;
|
|
34
|
+
--pk-surface: var(--wood-header);
|
|
35
|
+
--pk-raised: #3d2a1c;
|
|
36
|
+
--pk-line: var(--brass-dark);
|
|
37
|
+
--pk-line-soft: rgba(201, 154, 50, 0.35);
|
|
38
|
+
--pk-line-strong: #a87e2a;
|
|
39
|
+
--pk-scrim: rgba(10, 5, 2, 0.55);
|
|
40
|
+
|
|
41
|
+
/* ── Text on wood, four steps: the board's light parchment whites and warm greys ── */
|
|
42
|
+
--pk-text-strong: #f7eed8;
|
|
43
|
+
--pk-text: #f3e2c4;
|
|
44
|
+
--pk-text-muted: #d6c4aa;
|
|
45
|
+
--pk-text-faint: #b8a287;
|
|
46
|
+
|
|
47
|
+
/* ── The signal on wood: lit brass (WFK's a1 rule — what can be pressed is brass) ── */
|
|
48
|
+
--pk-accent: var(--brass-light);
|
|
49
|
+
--pk-accent-bg: #2a1b10;
|
|
50
|
+
--pk-accent-hi: #f0d78a;
|
|
51
|
+
--pk-on-accent: #2b1805;
|
|
52
|
+
--pk-accent-soft: #3a2410;
|
|
53
|
+
--pk-flash: #8a5a12;
|
|
54
|
+
--pk-star: var(--brass-light);
|
|
55
|
+
|
|
56
|
+
/* ── The other families on wood: the board's mercury highlights, each on its dark mercury face ── */
|
|
57
|
+
--pk-green: #b8e0c8; --pk-green-bg: #164828; --pk-green-ln: #1e6a3c;
|
|
58
|
+
--pk-blue: #c0d4f0; --pk-blue-bg: #1a3260;
|
|
59
|
+
--pk-red: #f87171; --pk-red-bg: #3a1414; --pk-red-ln: #fecaca;
|
|
60
|
+
--pk-purple: #d4c0f0; --pk-purple-bg: #3a1860;
|
|
61
|
+
|
|
62
|
+
/* ── Selection ── */
|
|
63
|
+
--pk-sel-bg: #3a2410;
|
|
64
|
+
|
|
65
|
+
/* ── Fonts: the board's own; the π mark in its serif ── */
|
|
66
|
+
--pk-font-body: 12.5px/1.55 var(--font-ui);
|
|
67
|
+
--pk-font-ui: var(--font-ui);
|
|
68
|
+
--pk-font-mono: var(--font-mono);
|
|
69
|
+
--pk-font-display: var(--font-serif);
|
|
70
|
+
|
|
71
|
+
/* ── Radii: cabinetry, tight (cards 2–4px, trays 5px; the one pill the board has is 14px) ── */
|
|
72
|
+
--pk-radius: 4px;
|
|
73
|
+
--pk-radius-sm: 3px;
|
|
74
|
+
--pk-radius-xs: 2px;
|
|
75
|
+
--pk-radius-panel: 5px;
|
|
76
|
+
--pk-radius-pill: 14px;
|
|
77
|
+
|
|
78
|
+
/* ── Shadows: the parts of --shadow-hover; the picked-up card (.box:hover) for a window; the lane label's drop ── */
|
|
79
|
+
--pk-shadow-float: 0 6px 18px rgba(10, 5, 2, 0.55), 0 2px 4px rgba(0, 0, 0, 0.3);
|
|
80
|
+
--pk-shadow-window: inset 0 1px 0 #ffffff, 0 0 0 1.5px #dcb04d, 0 2px 0 rgba(201, 154, 50, 0.55), 0 7px 0 #1a1008, 0 14px 24px rgba(10, 5, 2, 0.55), 0 26px 48px rgba(10, 5, 2, 0.5);
|
|
81
|
+
--pk-shadow-raised: 0 3px 8px rgba(0, 0, 0, 0.45);
|
|
82
|
+
|
|
83
|
+
/* ── The card (the master): the parchment tray — cream face, brass frame, the .box's white lift, brass line, hard
|
|
84
|
+
lip and deep drop. Its text is set on the cards themselves, below. ── */
|
|
85
|
+
--pk-card-bg: #f4ead6;
|
|
86
|
+
--pk-card-texture: none;
|
|
87
|
+
--pk-card-border: var(--brass-gold);
|
|
88
|
+
--pk-card-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.9), inset 0 -2px 0 rgba(80, 50, 10, 0.2), 0 2px 0 rgba(201, 154, 50, 0.45), 0 6px 0 #1a1008, 0 10px 16px rgba(10, 5, 2, 0.5), 0 22px 40px rgba(10, 5, 2, 0.55);
|
|
89
|
+
--pk-card-radius: 3px;
|
|
90
|
+
--pk-card-text: var(--ink-black);
|
|
91
|
+
--pk-card-line: #c9a56a;
|
|
92
|
+
--pk-card-hover-border: #dcb04d;
|
|
93
|
+
--pk-card-foot-bg: #e8dcc4;
|
|
94
|
+
--pk-card-head-bg: #e8dcc4;
|
|
95
|
+
|
|
96
|
+
/* ── A section: the enamel dial's wood case (.dc r2); its head: the cast brass plate (.rootHead r2) ── */
|
|
97
|
+
--pk-section-bg: var(--wood-header);
|
|
98
|
+
--pk-section-border: #5a3d12;
|
|
99
|
+
--pk-section-radius: 3px;
|
|
100
|
+
--pk-section-shadow: inset 0 1px 0 rgba(232, 200, 109, 0.35), inset 0 -1px 0 rgba(0, 0, 0, 0.55), 0 2px 5px rgba(0, 0, 0, 0.4);
|
|
101
|
+
--pk-head-bg: var(--brass-gold);
|
|
102
|
+
--pk-head-texture: linear-gradient(135deg, #e6c875 0%, #aa7c11 48%, #d4af37 100%);
|
|
103
|
+
--pk-head-border: #6b4d13;
|
|
104
|
+
--pk-head-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.7), 0 2px 6px rgba(0, 0, 0, 0.45);
|
|
105
|
+
--pk-head-text: #2b1805;
|
|
106
|
+
|
|
107
|
+
/* ── Controls: the dark key with a brass edge and inset highlight (.dc); on, a brass plate ── */
|
|
108
|
+
--pk-control-bg: #322216;
|
|
109
|
+
--pk-control-texture: linear-gradient(180deg, #322216 0%, #1a110c 100%);
|
|
110
|
+
--pk-control-border: #8a6a2a;
|
|
111
|
+
--pk-control-shadow: inset 0 1px 0 rgba(232, 200, 109, 0.35), inset 0 -1px 0 rgba(0, 0, 0, 0.55), 0 2px 5px rgba(0, 0, 0, 0.4);
|
|
112
|
+
--pk-control-radius: 3px;
|
|
113
|
+
--pk-control-hover-bg: #3d2a1c;
|
|
114
|
+
--pk-control-hover-border: var(--brass-gold);
|
|
115
|
+
--pk-control-on: var(--brass-gold);
|
|
116
|
+
--pk-control-on-text: #2b1805;
|
|
117
|
+
--pk-control-on-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.7), 0 1px 3px rgba(0, 0, 0, 0.4);
|
|
118
|
+
|
|
119
|
+
/* ── The sunken well: the drawer's bottom (.cell) ── */
|
|
120
|
+
--pk-well-bg: var(--wood-well);
|
|
121
|
+
--pk-well-border: #332115;
|
|
122
|
+
--pk-well-shadow: var(--shadow-well);
|
|
123
|
+
--pk-code-bg: var(--wood-well);
|
|
124
|
+
|
|
125
|
+
/* ── The conversation: the owner's words on the amber wood of .dc.amber, with a brass-dark frame (WFK's D87) ── */
|
|
126
|
+
--pk-msg-user-bg: #3a2410;
|
|
127
|
+
--pk-msg-user-border: var(--brass-dark);
|
|
128
|
+
|
|
129
|
+
/* ── The graph (Spec §6.3; D53): parchment objects on the walnut table, the board's own picture. The four kinds are
|
|
130
|
+
the inks on paper (theme-palette-numbers.md; checked on this face: Plan / Work item 52.7 normal, 55.4 protan,
|
|
131
|
+
49.3 deutan; L* spread 9.0). Words on the objects in ink, the kind in the secondary ink; the object's colour
|
|
132
|
+
stays on its edge and top band. The lines are brass wire (.edges path.flow); what is written on a line, the
|
|
133
|
+
link-count chip and the corner marks' discs are paper, so the ink on them reads on the dark table. ── */
|
|
134
|
+
--pk-graph-bg: transparent; /* the table's grain shows through */
|
|
135
|
+
--pk-graph-intent: var(--blue-cobalt);
|
|
136
|
+
--pk-graph-plan: var(--purple-damask);
|
|
137
|
+
--pk-graph-work: var(--green-emerald);
|
|
138
|
+
--pk-graph-reality: var(--amber-cognac);
|
|
139
|
+
--pk-graph-node-bg: #f4ead6;
|
|
140
|
+
--pk-graph-node-text: var(--ink-black);
|
|
141
|
+
--pk-graph-node-kind: var(--ink-brown); /* the kind in the body's ink; the object's colour stays on its edges */
|
|
142
|
+
--pk-graph-node-muted: var(--ink-brown);
|
|
143
|
+
--pk-graph-node-faint: var(--ink-sepia);
|
|
144
|
+
/* the card's material, lent to the objects: the .box's white lift, its bottom shade, the brass line as the hard lip
|
|
145
|
+
under the card, its deep drop on the table */
|
|
146
|
+
--pk-graph-node-chamfer: rgba(255, 255, 255, 0.9);
|
|
147
|
+
--pk-graph-node-shade: rgba(80, 50, 10, 0.2);
|
|
148
|
+
--pk-graph-node-lip: var(--brass-dark);
|
|
149
|
+
--pk-graph-node-shadow: rgba(10, 5, 2, 0.55);
|
|
150
|
+
--pk-graph-edge: var(--brass-dark);
|
|
151
|
+
--pk-graph-edge-other: #a87e2a;
|
|
152
|
+
--pk-graph-edge-related: var(--brass-gold);
|
|
153
|
+
--pk-graph-edge-lit: var(--brass-light);
|
|
154
|
+
--pk-graph-edge-selected: #f7eed8;
|
|
155
|
+
--pk-graph-questioned: var(--rose-open); /* the board's own "open" signal; reads on the table and on a paper label */
|
|
156
|
+
--pk-graph-label-bg: #f4ead6;
|
|
157
|
+
--pk-graph-chip-bg: #f4ead6;
|
|
158
|
+
--pk-graph-chip-border: var(--brass-gold);
|
|
159
|
+
--pk-graph-selection: #ffffff;
|
|
160
|
+
--pk-graph-focus: var(--brass-light);
|
|
161
|
+
--pk-graph-diff-added: var(--green-emerald);
|
|
162
|
+
--pk-graph-diff-changed: var(--amber-cognac);
|
|
163
|
+
--pk-graph-diff-removed: var(--seal-red);
|
|
164
|
+
--pk-graph-replaced: #8a7358;
|
|
165
|
+
--pk-graph-danger: var(--seal-red-ink);
|
|
166
|
+
/* a folded group: a stack of the browner .box cards (r5), its count on a dim paper chip */
|
|
167
|
+
--pk-graph-group-bg: #e5d0a8;
|
|
168
|
+
--pk-graph-group-border: var(--brass-gold);
|
|
169
|
+
--pk-graph-group-back: #dcc49a;
|
|
170
|
+
--pk-graph-group-back-border: #c9a56a;
|
|
171
|
+
--pk-graph-group-chip: #e8dcc4;
|
|
172
|
+
/* the corner marks, in ink on their paper discs: the amber ink for ★, the seal's red ink for ⚑ and the ✎ that asks,
|
|
173
|
+
the body ink for a plain ✎, the blue ink for ⟳ */
|
|
174
|
+
--pk-graph-mark-star: var(--amber-ink);
|
|
175
|
+
--pk-graph-mark-flag: var(--seal-red-ink);
|
|
176
|
+
--pk-graph-mark-note: var(--ink-black);
|
|
177
|
+
--pk-graph-mark-ask: var(--seal-red-ink);
|
|
178
|
+
--pk-graph-mark-pending: var(--blue-ink);
|
|
179
|
+
}
|
|
180
|
+
/* The marks written on wood (the List's Observed reality cells) take the light set; the graph reads :root. The
|
|
181
|
+
legend's mark icons stand on the same paper disc as the objects' badges, so the ink reads there too. */
|
|
182
|
+
table.list { --pk-graph-mark-star: var(--brass-light); --pk-graph-mark-flag: #f59e0b; --pk-graph-mark-note: #f7eed8; --pk-graph-mark-ask: #f59e0b; --pk-graph-mark-pending: #c0d4f0; }
|
|
183
|
+
.legend .lg-mark { background: var(--pk-graph-chip-bg); }
|
|
184
|
+
|
|
185
|
+
/* ── On a parchment card the tokens are the ink and the paper: text, lines, the families, the accent (the board's
|
|
186
|
+
cognac edge, amber ink when lit), the light toolbar label as the control, the paper well of `code`. ── */
|
|
187
|
+
.popover, .flyout, dialog, .note-card, .strip-row.open, .graph-tip, .keeper-entry, #toast {
|
|
188
|
+
--pk-text-strong: var(--ink-black); --pk-text: var(--ink-black); --pk-text-muted: var(--ink-brown); --pk-text-faint: var(--ink-sepia);
|
|
189
|
+
--pk-surface: #f4ead6; --pk-raised: #fffdf6; --pk-rail: #e8dcc4;
|
|
190
|
+
--pk-line: #c9a56a; --pk-line-soft: #dbcbb0; --pk-line-strong: var(--brass-gold);
|
|
191
|
+
--pk-accent: var(--amber-cognac); --pk-accent-bg: var(--amber-bg); --pk-accent-hi: var(--amber-ink); --pk-on-accent: var(--amber-bg); --pk-accent-soft: #f6e6c8; --pk-flash: #f6e6c8; --pk-star: var(--brass-dark);
|
|
192
|
+
--pk-green: var(--green-ink); --pk-green-bg: var(--green-bg); --pk-green-ln: var(--green-emerald);
|
|
193
|
+
--pk-blue: var(--blue-ink); --pk-blue-bg: var(--blue-bg);
|
|
194
|
+
--pk-red: var(--seal-red-ink); --pk-red-bg: var(--seal-red-bg); --pk-red-ln: var(--seal-red);
|
|
195
|
+
--pk-purple: var(--purple-ink); --pk-purple-bg: var(--purple-bg);
|
|
196
|
+
--pk-sel-bg: #f6e6c8;
|
|
197
|
+
--pk-section-bg: #fffdf6; --pk-section-border: #dbcbb0; --pk-section-shadow: none;
|
|
198
|
+
--pk-control-bg: #f0e6ce; --pk-control-texture: linear-gradient(180deg, #fefbf3 0%, #f0e6ce 100%); --pk-control-border: var(--brass-gold); --pk-control-shadow: 0 1px 3px rgba(0, 0, 0, 0.4), inset 0 1px 0 #ffffff; --pk-control-hover-bg: #ffffff; --pk-control-hover-border: var(--brass-gold);
|
|
199
|
+
--pk-well-bg: #f5eedb; --pk-well-border: #dbcbb0; --pk-well-shadow: inset 0 2px 3px rgba(90, 60, 20, 0.12); --pk-code-bg: #f5eedb;
|
|
200
|
+
--pk-msg-user-bg: #f6e6c8; --pk-msg-user-border: var(--brass-gold);
|
|
201
|
+
--pk-shadow-raised: var(--shadow-card);
|
|
202
|
+
}
|
|
203
|
+
/* ── The floating cards and the dialog are WorkflowKeeper's Inbox row under Walnut (owner 2026-09-22, from the two
|
|
204
|
+
screenshots they sent): the deeper parchment (#e5d0a8), a leather spine with a brass line down the left, the
|
|
205
|
+
brass rivet, the row's stack of shadows, and one surface — no dim head band, no foot band. On it: the kind under
|
|
206
|
+
the title is the board's .bCode door number (brass letters on dark wood), the tags are .kid paper
|
|
207
|
+
chips, the buttons the app's brass-lettered keys (app.css button), `Details` the brass plate of the tab that is
|
|
208
|
+
on (.dispTab.on), a note card the board's .box (the lightest paper, its shadow). Every value is the theme's. ── */
|
|
209
|
+
.popover, .flyout, .graph-tip, dialog {
|
|
210
|
+
--pk-card-bg: #e5d0a8; --pk-card-texture: linear-gradient(90deg, #4a3222 0 5px, var(--brass-gold) 5px 6px, transparent 6px);
|
|
211
|
+
--pk-card-border: rgba(201, 154, 50, 0.7); --pk-card-line: rgba(201, 154, 50, 0.5); --pk-card-radius: 2px;
|
|
212
|
+
--pk-card-head-bg: transparent; --pk-card-foot-bg: transparent;
|
|
213
|
+
--pk-text-muted: var(--ink-brown); --pk-text-faint: var(--ink-brown);
|
|
214
|
+
--pk-surface: #e5d0a8; --pk-raised: #f5eedb; --pk-rail: #f1ebd8; --pk-line-soft: #dbcbb0; --pk-line: #c9a56a;
|
|
215
|
+
--pk-sel-bg: #f5eedb; --pk-accent-soft: #f5eedb; --pk-flash: #fcf8ed; --pk-radius-sm: 3px;
|
|
216
|
+
--pk-control-bg: #33241a; --pk-control-texture: linear-gradient(180deg, #33241a, #271b13); --pk-control-border: var(--brass-dark);
|
|
217
|
+
--pk-control-shadow: inset 0 1px 0 rgba(232, 200, 109, 0.16), 0 1px 0 rgba(10, 5, 2, 0.5);
|
|
218
|
+
--pk-control-hover-bg: #3d2c1f; --pk-control-hover-border: var(--brass-gold);
|
|
219
|
+
--pk-well-bg: #f5eedb; --pk-well-border: #dbcbb0; --pk-well-shadow: inset 0 1px 2px rgba(90, 60, 20, 0.1); --pk-code-bg: #f5eedb;
|
|
220
|
+
--pk-section-bg: #fcf8ed; --pk-section-border: rgba(201, 154, 50, 0.7);
|
|
221
|
+
}
|
|
222
|
+
.popover { border-top-color: var(--brass-gold); }
|
|
223
|
+
dialog { --pk-card-texture: linear-gradient(90deg, #4a3222 0 5px, var(--brass-gold) 5px 6px, transparent 6px); }
|
|
224
|
+
/* the door number under the title: brass letters sunk in dark wood */
|
|
225
|
+
.popover-sub { display: inline-block; font: 800 10.5px/1.6 var(--font-serif); letter-spacing: 0.04em; color: #e6b84d; background: #2a1b10; border: 1px solid #735118; border-radius: 3px; padding: 0 5px; margin-top: 3px; box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.5); }
|
|
226
|
+
/* the keys: brass letters on dark wood; the plate that is on for `Details`; the seal's red stays readable on wood */
|
|
227
|
+
.popover .btn, .flyout .btn, dialog .btn { color: var(--brass-light); }
|
|
228
|
+
.popover .btn.primary, .flyout .btn.primary, dialog .btn.primary { background: linear-gradient(180deg, var(--brass-light), var(--brass-gold)); color: #2c1e08; border-color: var(--brass-dark); font-weight: 600; }
|
|
229
|
+
.popover .btn.primary:hover:not(:disabled), .flyout .btn.primary:hover:not(:disabled), dialog .btn.primary:hover:not(:disabled) { background: var(--brass-light); }
|
|
230
|
+
.popover .btn.danger, .flyout .btn.danger, dialog .btn.danger { background: var(--seal-red-bg); color: var(--seal-red-ink); border-color: var(--seal-red); }
|
|
231
|
+
.popover .btn.active, .flyout .btn.active, dialog .btn.active { background: var(--amber-bg); color: var(--amber-ink); border-color: var(--amber-cognac); }
|
|
232
|
+
/* the close ring on paper */
|
|
233
|
+
.popover-close { background: #f1ebd8; border-color: #c9a55f; color: var(--ink-brown); }
|
|
234
|
+
.popover-close:hover { background: #ffffff; border-color: var(--brass-gold); color: var(--ink-black); }
|
|
235
|
+
/* The Keeper's tile in the rail is a tray tile (.slot), the row that opens in the strip a card lying among the rows:
|
|
236
|
+
both lighter in the hand than a floating card. */
|
|
237
|
+
.keeper-entry { --pk-card-border: rgba(201, 154, 50, 0.6); --pk-card-shadow: 0 1px 3px rgba(0, 0, 0, 0.15); color: var(--pk-card-text); }
|
|
238
|
+
.strip-row.open { --pk-card-shadow: 0 2px 0 rgba(201, 154, 50, 0.45), 0 3px 8px rgba(0, 0, 0, 0.45); }
|
|
239
|
+
/* The toast is a small card set down on the table (WorkflowKeeper's a1 toast): the card's face, not the lightest paper */
|
|
240
|
+
#toast { --pk-raised: #f4ead6; }
|
|
241
|
+
|
|
242
|
+
/* ── The Keeper's panel is wood, like WorkflowKeeper's Pi panel under Walnut (D87): the dashboard wood with its
|
|
243
|
+
brass pinstripes, a brass edge, and the light text of the table — its answers are the theme's brightest text. ── */
|
|
244
|
+
.keeper-panel {
|
|
245
|
+
--pk-card-bg: var(--wood-header);
|
|
246
|
+
--pk-card-texture: repeating-linear-gradient(90deg, rgba(201, 154, 50, 0.04) 0 1px, transparent 1px 28px), linear-gradient(180deg, #241810 0%, #1a120c 100%);
|
|
247
|
+
--pk-card-border: var(--brass-gold);
|
|
248
|
+
--pk-card-text: var(--pk-text);
|
|
249
|
+
--pk-card-line: rgba(201, 154, 50, 0.35);
|
|
250
|
+
--pk-card-radius: 5px;
|
|
251
|
+
--pk-shadow-window: inset 0 1px 0 rgba(255, 220, 180, 0.2), inset 0 -2px 0 rgba(0, 0, 0, 0.4), 0 3px 8px rgba(0, 0, 0, 0.45), 0 22px 40px rgba(10, 5, 2, 0.55);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/* ── On the cast brass plate (section heads, the strip's column heads) the text is the plate's engraved dark ── */
|
|
255
|
+
.section > header, .strip header {
|
|
256
|
+
--pk-text-strong: #2b1805; --pk-text: #2b1805; --pk-text-muted: #4a2d0a; --pk-text-faint: #4a2d0a;
|
|
257
|
+
--pk-line: #6b4d13; --pk-line-soft: #6b4d13; --pk-blue: #1e3a8a;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/* ── The ground: the board's body, restated from the tokens so this file is the one source ── */
|
|
261
|
+
body {
|
|
262
|
+
color: var(--pk-text);
|
|
263
|
+
font: var(--pk-font-body);
|
|
264
|
+
background:
|
|
265
|
+
repeating-linear-gradient(0deg, rgba(255, 200, 120, 0.015) 0px, rgba(255, 200, 120, 0.015) 1px, transparent 1px, transparent 6px),
|
|
266
|
+
linear-gradient(180deg, #241a12 0%, #1c140e 100%) var(--pk-ground);
|
|
267
|
+
}
|
|
268
|
+
input[type="checkbox"] { accent-color: var(--brass-gold); }
|
|
269
|
+
|
|
270
|
+
/* ── Classes board.css and the workbench both use: the guard put the metrics back; the colours are set here ── */
|
|
271
|
+
.empty { color: var(--pk-text-muted); }
|
|
272
|
+
.empty h2 { color: var(--pk-text-strong); }
|
|
273
|
+
|
|
274
|
+
/* ── Titles in the board's serif (its h1, .rootName, .bTitle, .tray h2); sizes stay the workbench's. On wood they
|
|
275
|
+
carry the board's engraved shadow; on the brass plate its white lift; on paper nothing. ── */
|
|
276
|
+
.brand, .page-head h1, .keeper-who, .section > header, .strip-title, .popover-title, .dialog-head h2, .more-title, .full-head h2, .walk-title, .empty h2 { font-family: var(--font-serif); }
|
|
277
|
+
.brand, .page-head h1, .keeper-who { color: var(--pk-text-strong); text-shadow: 0 1px 2px rgba(0, 0, 0, 0.75); }
|
|
278
|
+
.keeper-state { font-family: var(--pk-font-ui); }
|
|
279
|
+
.section > header, .strip-title { text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); }
|
|
280
|
+
.rail-section { color: var(--brass-light); font-family: var(--font-serif); }
|
|
281
|
+
|
|
282
|
+
/* ── The top bar is the board's header beam: the wood gradient, a brass line under it, its deep drop ── */
|
|
283
|
+
.topbar { background: linear-gradient(180deg, #2c1e15 0%, #20150e 100%) var(--wood-header); border-bottom-color: var(--brass-gold); box-shadow: 0 4px 18px rgba(0, 0, 0, 0.6); }
|
|
284
|
+
|
|
285
|
+
/* ── The rail is the dashboard wood with its brass pinstripes (.dash r2; WorkflowKeeper's .pool) ── */
|
|
286
|
+
.rail { background-image: repeating-linear-gradient(90deg, rgba(201, 154, 50, 0.04) 0 1px, transparent 1px 28px), linear-gradient(180deg, #241810 0%, #1a120c 100%); }
|
|
287
|
+
.nav-item.active { box-shadow: inset 3px 0 0 var(--brass-gold); }
|
|
288
|
+
|
|
289
|
+
/* ── The graph's control row is the board's instrument band (.kpis): sunk into the beam; the legend its ribbon; the
|
|
290
|
+
bottom strip the drawer's well (.cell) with the ribbon's brass line above it ── */
|
|
291
|
+
.graph-tools { background: #18110b; box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.5); }
|
|
292
|
+
.legend { background: #170f0a; }
|
|
293
|
+
.strip { border-top-color: var(--brass-gold); background: var(--wood-well); box-shadow: var(--shadow-well); }
|
|
294
|
+
|
|
295
|
+
/* ── A section is the dial's wood case: lighter at the top edge, darker below (.dc r2), under its brass plate ── */
|
|
296
|
+
.section, details.fold { background-image: linear-gradient(180deg, var(--pk-raised) 0%, var(--pk-section-bg) 100%); }
|
|
297
|
+
|
|
298
|
+
/* ── Buttons are brass-lettered keys (WorkflowKeeper's a1 buttons); on paper, the toolbar label's amber ink ── */
|
|
299
|
+
.btn { color: var(--pk-accent-hi); }
|
|
300
|
+
/* Where the accent is words on paper rather than an edge, it is the amber ink (the cognac edge reads 4.2:1 as text) */
|
|
301
|
+
.flyout .read-flag.alert, .popover .note-body h4, dialog .note-body h4 { color: var(--pk-accent-hi); }
|
|
302
|
+
|
|
303
|
+
/* ── Segmented controls after the tray tiles in a groove: the well holds the segments; the one that is on is a cast
|
|
304
|
+
brass plate (WorkflowKeeper's .dispTab.on). Only paint changes: the segments keep their size. ── */
|
|
305
|
+
.segmented { background: var(--pk-well-bg); background-image: none; box-shadow: var(--pk-well-shadow); border-color: var(--pk-well-border); }
|
|
306
|
+
.segmented button:hover:not(:disabled) { color: var(--pk-text); }
|
|
307
|
+
.segmented button.active { background-image: var(--pk-head-texture); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); }
|
|
308
|
+
.segmented button:disabled { color: var(--pk-text-faint); }
|
|
309
|
+
|
|
310
|
+
/* ── The card's head and foot: the detail drawer's dim paper head (WorkflowKeeper's .detail-head), the .box's
|
|
311
|
+
pocket at the foot (:has(.attach) .attach: a dashed brass line, a shallow inset) ── */
|
|
312
|
+
.popover-head { background: var(--pk-card-head-bg); border-radius: var(--pk-card-radius) var(--pk-card-radius) 0 0; }
|
|
313
|
+
.dialog-head { background: var(--pk-card-head-bg); border-radius: var(--pk-radius-panel) var(--pk-radius-panel) 0 0; }
|
|
314
|
+
.popover-foot { border-top: 1px dashed rgba(201, 154, 50, 0.45); }
|
|
315
|
+
.strip-row.open > .item { box-shadow: inset 0 -1px 0 var(--pk-card-line); }
|
|
316
|
+
/* A note card on the parchment row is the board's .box: the lightest paper, a brass hairline, the card's shadow */
|
|
317
|
+
.popover .note-card, dialog .note-card { --pk-raised: var(--paper-card); --pk-card-border: rgba(201, 154, 50, 0.7); --pk-card-shadow: var(--shadow-card); --pk-card-texture: none; }
|
|
318
|
+
/* The Keeper's head is the header beam over its panel */
|
|
319
|
+
.keeper-head { background: linear-gradient(180deg, #2c1e15 0%, #20150e 100%); border-bottom-color: var(--brass-gold); box-shadow: 0 4px 18px rgba(0, 0, 0, 0.6); }
|
|
320
|
+
|
|
321
|
+
/* ── The .box's brass pin on the small floating cards; the module's brass corners on the big ones ── */
|
|
322
|
+
.popover::after, .flyout::after, .graph-tip::after, #toast::after {
|
|
323
|
+
content: ""; position: absolute; top: 3px; right: 4px; width: 4px; height: 4px; border-radius: 50%;
|
|
324
|
+
background: radial-gradient(circle, #f5d77f 30%, #a87e2a 100%); box-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); pointer-events: none;
|
|
325
|
+
}
|
|
326
|
+
dialog::before, .keeper-panel.floating::before {
|
|
327
|
+
content: ""; position: absolute; inset: 5px; pointer-events: none;
|
|
328
|
+
background-image:
|
|
329
|
+
linear-gradient(#e8c86d, #e8c86d), linear-gradient(#e8c86d, #e8c86d),
|
|
330
|
+
linear-gradient(#e8c86d, #e8c86d), linear-gradient(#e8c86d, #e8c86d),
|
|
331
|
+
linear-gradient(#e8c86d, #e8c86d), linear-gradient(#e8c86d, #e8c86d),
|
|
332
|
+
linear-gradient(#e8c86d, #e8c86d), linear-gradient(#e8c86d, #e8c86d);
|
|
333
|
+
background-size: 14px 2px, 2px 14px, 14px 2px, 2px 14px, 14px 2px, 2px 14px, 14px 2px, 2px 14px;
|
|
334
|
+
background-repeat: no-repeat;
|
|
335
|
+
background-position: top left, top left, top right, top right, bottom left, bottom left, bottom right, bottom right;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/* ── Tags and marks: the board's badges keep a hairline edge (a ring, so nothing grows) ── */
|
|
339
|
+
.tag { box-shadow: 0 0 0 1px var(--pk-line-soft); }
|
|
340
|
+
|
|
341
|
+
/* ── Scrollbars where the workbench already asked for thin ones: the board's brass thumb (color-scheme: light would
|
|
342
|
+
otherwise hand the dark wood a light thumb) ── */
|
|
343
|
+
.rail, .keeper-stream, .popover-body, .flyout, .strip .items, .walk-spine { scrollbar-color: var(--pk-line-strong) transparent; }
|
|
344
|
+
|
|
345
|
+
/* ── The List's layers (owner 2026-09-30: 「list界面,[模块块头]都用 … workflowlens里面lane标签的UI … 中间[Owner's words、
|
|
346
|
+
Product 与 Goal]的内容用[WorkflowLens Sign in 卡片]的UI … 所有的模块界面,你可用[带竖条纹的深色面板]的样式」). The
|
|
347
|
+
three are WorkflowKeeper's own, copied value for value:
|
|
348
|
+
the plate the Sign in card: cover.css `.loginplate` (the leather, its #3d2a1c edge, the seven-part shadow, the
|
|
349
|
+
brass inlay hairline, the four rivets), `.signin` and `.flab` for its engraved title and labels, the
|
|
350
|
+
vellum `.paper` slot for the product;
|
|
351
|
+
the lane the lane label: board.css `.laneLabel` r4/r5 (the leather, the brass frame, the L brass corners) with
|
|
352
|
+
`.laneId` / `.laneTitle` / `.laneSub`;
|
|
353
|
+
the panel the dark striped wood: cover.css `.strip` (the plank joints every 208px, the grain, the vignette).
|
|
354
|
+
The plate and the panel are the cover's, not the board's (WorkflowKeeper's themes/a1/cover.css @ 6756fe2): the
|
|
355
|
+
one place this layer takes values beyond board.css, at the owner's request. ── */
|
|
356
|
+
:root {
|
|
357
|
+
--pk-plate-bg: #251a11;
|
|
358
|
+
--pk-plate-texture: repeating-linear-gradient(0deg, rgba(255, 200, 120, 0.02) 0 1px, transparent 1px 6px), repeating-linear-gradient(88deg, rgba(0, 0, 0, 0.07) 0 2px, transparent 2px 96px), linear-gradient(180deg, #2f2115 0%, #251a11 58%, #1f150d 100%);
|
|
359
|
+
--pk-plate-border: #3d2a1c;
|
|
360
|
+
--pk-plate-border-width: 1.5px;
|
|
361
|
+
--pk-plate-radius: 6px;
|
|
362
|
+
--pk-plate-shadow: inset 0 1px 0 rgba(255, 210, 140, 0.12), inset 0 -1px 0 rgba(0, 0, 0, 0.55), inset 1px 0 0 rgba(255, 210, 140, 0.05), inset -1px 0 0 rgba(0, 0, 0, 0.3), 0 2px 0 rgba(0, 0, 0, 0.4), 0 10px 22px rgba(0, 0, 0, 0.45), 0 28px 60px rgba(0, 0, 0, 0.55);
|
|
363
|
+
--pk-plate-inlay: rgba(201, 154, 50, 0.26);
|
|
364
|
+
--pk-plate-rivet: radial-gradient(circle at 35% 30%, #f5d77f 18%, #a87e2a 62%, #6b4d13 100%);
|
|
365
|
+
--pk-plate-rivet-shadow: 0 1px 2px rgba(0, 0, 0, 0.55);
|
|
366
|
+
--pk-plate-kicker: var(--brass-light);
|
|
367
|
+
--pk-slot-bg: var(--paper-card);
|
|
368
|
+
--pk-slot-text: var(--ink-black);
|
|
369
|
+
--pk-slot-border: rgba(201, 154, 50, 0.7);
|
|
370
|
+
--pk-slot-shadow: inset 0 1px 0 #ffffff, 0 1px 0 rgba(201, 154, 50, 0.4), 0 3px 8px rgba(10, 5, 2, 0.38), 0 1px 2px rgba(0, 0, 0, 0.2);
|
|
371
|
+
--pk-lane-bg: #4a2c1a;
|
|
372
|
+
--pk-lane-texture: repeating-linear-gradient(90deg, rgba(0, 0, 0, 0.14) 0 1px, transparent 1px 6px), repeating-linear-gradient(0deg, rgba(255, 210, 160, 0.07) 0 1px, transparent 1px 4px), linear-gradient(180deg, #6e432c 0%, #4a2c1a 40%, #3a2012 100%);
|
|
373
|
+
--pk-lane-border: var(--brass-gold);
|
|
374
|
+
--pk-lane-radius: 4px;
|
|
375
|
+
--pk-lane-shadow: inset 0 1px 0 rgba(255, 220, 180, 0.2), inset 0 -2px 0 rgba(0, 0, 0, 0.4), 0 3px 8px rgba(0, 0, 0, 0.45);
|
|
376
|
+
--pk-lane-corner: var(--brass-light);
|
|
377
|
+
--pk-lane-kicker: #e8c9a0;
|
|
378
|
+
--pk-lane-title: #f3e2c4;
|
|
379
|
+
--pk-lane-sub: #c4a07a;
|
|
380
|
+
--pk-lane-link: var(--brass-light);
|
|
381
|
+
--pk-module-bg: #1f150e;
|
|
382
|
+
--pk-module-texture: radial-gradient(60% 42% at 46% 42%, rgba(232, 200, 109, 0.055) 0%, rgba(232, 200, 109, 0.018) 48%, transparent 74%), radial-gradient(130% 110% at 50% 50%, transparent 50%, rgba(0, 0, 0, 0.5) 100%), repeating-linear-gradient(90deg, rgba(0, 0, 0, 0.3) 0 2px, rgba(232, 200, 109, 0.045) 2px 3px, transparent 3px 208px), repeating-linear-gradient(0deg, rgba(0, 0, 0, 0.14) 0 1px, transparent 1px 11px), repeating-linear-gradient(0deg, rgba(0, 0, 0, 0.08) 0 2px, transparent 2px 29px), repeating-linear-gradient(0deg, rgba(0, 0, 0, 0.06) 0 1px, transparent 1px 47px), repeating-linear-gradient(0deg, rgba(255, 200, 120, 0.045) 0 1px, transparent 1px 5px), linear-gradient(180deg, #291d13 0%, #1f150e 55%, #150e09 100%);
|
|
383
|
+
--pk-module-border: #3d2a1c;
|
|
384
|
+
--pk-module-shadow: inset 0 1px 0 rgba(255, 210, 140, 0.06), 0 2px 0 rgba(0, 0, 0, 0.4), 0 10px 22px rgba(0, 0, 0, 0.35);
|
|
385
|
+
}
|
|
386
|
+
/* The engraved serif of the plate and the lane label, with their shadows (.signin, .flab; .laneId, .laneTitle, .laneSub). */
|
|
387
|
+
.list-plate .plate-title, .list-plate .plate-label, .list-plate .plate-slot, .ab-head.lane .lane-kicker, .ab-head.lane .lane-title, .ab-head.lane .lane-sub { font-family: var(--font-serif); }
|
|
388
|
+
.list-plate .plate-title, .list-plate .plate-label { text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); }
|
|
389
|
+
.list-plate .plate-slot { font-size: 15px; }
|
|
390
|
+
.ab-head.lane .lane-title { text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8); }
|
|
391
|
+
/* On the paper slot the product's ❓ keeps its ink */
|
|
392
|
+
.list-plate .plate-slot .q-mark { color: var(--seal-red-ink); }
|