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,1557 @@
1
+
2
+ /* ==========================================================================
3
+ WorkflowKeeper · 工位 A2: 古典胡桃木造与黄铜机械工坊 · 精修
4
+ - 材质不动:胡桃木桌台、羊皮纸工卡、铸造黄铜铭牌、火漆印、黄铜铆钉。
5
+ - 精修:去掉卡片抬升(SVG 走线会错位)、指标大写喊叫、空态/零值幽灵透明;
6
+ paused 干邑纸底 + 5px 左边条;KPI 去掉发光。每天盯,不抢注意力。
7
+ ========================================================================== */
8
+
9
+ :root {
10
+ color-scheme: light;
11
+
12
+ /* ── 名贵木质与古典羊皮纸材质体系 (Woodcraft & Vellum Surface System) ── */
13
+ --wood-table: #1d140e; /* 深色百年胡桃木实木台面 */
14
+ --wood-header: #271b13; /* 红木雕花控制横梁 */
15
+ --wood-well: #150e09; /* 机械开槽下沉暗屉槽底 */
16
+ --paper-card: #fcf8ed; /* 手工复古羊皮纸工卡 */
17
+ --paper-card-hover: #ffffff; /* 拾起时微光纸白 */
18
+ --paper-dim: #f1ebd8; /* 浅暗牛皮纸 */
19
+
20
+ /* ── 精密黄铜与金工构件 (Horological Brass & Gold Alloys) ── */
21
+ --brass-gold: #c99a32; /* 纯正古董抛光黄铜金 */
22
+ --brass-light: #e8c86d; /* 铜件受光高光 */
23
+ --brass-dark: #7a5615; /* 氧化老铜暗边 */
24
+ --brass-border: 1px solid #c99a32; /* 黄铜细框 */
25
+ --wood-border: 1px solid #3d2a1c; /* 榫卯接缝木纹线 */
26
+
27
+ /* ── 机械触觉与立体浮雕阴影 (Tactile Cabinetry Elevation) ── */
28
+ --shadow-card: 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);
29
+ --shadow-hover: inset 0 1px 0 #ffffff, 0 0 0 1.5px #dcb04d, 0 6px 18px rgba(10, 5, 2, 0.55), 0 2px 4px rgba(0, 0, 0, 0.3);
30
+ --shadow-well: inset 2px 2px 5px rgba(0, 0, 0, 0.65), inset -1px -1px 0 rgba(201, 154, 50, 0.15);
31
+
32
+ /* ── 墨色与书写阶梯 (Carbon Gall Ink & Calligraphy) ── */
33
+ --ink-black: #1c130b; /* 浓稠铁胆墨水纯黑 */
34
+ --ink-brown: #4a3320; /* 深胡桃木色次级字 */
35
+ --ink-sepia: #78593a; /* 羊皮纸棕褐说明文字 */
36
+ --ink-faint: #ab9176; /* 泛黄暗淡印记 */
37
+
38
+ /* ── 古典火漆印章与宝石信号 (Wax Seal & Gemstone Decision Signals) ── */
39
+ --seal-red: #b91c1c; /* 🚨 只有人能拍板:威尼斯赤红火漆印 */
40
+ --seal-red-bg: #fef2f2;
41
+ --seal-red-ink: #7f1d1d;
42
+
43
+ --rose-open: #c026d3; /* 🔴 agent 或人均可:紫红火漆 */
44
+ --rose-bg: #fdf4ff;
45
+
46
+ --amber-cognac: #b45309; /* 🟡 main agent 自理 / ⏸ 挂着意见(干邑琥珀边条) */
47
+ --amber-bg: #fffbeb;
48
+ --amber-ink: #78350f;
49
+
50
+ --blue-cobalt: #1d4ed8; /* 皇家珐琅宝蓝(连线 flow / 交互项) */
51
+ --blue-bg: #eff6ff;
52
+ --blue-ink: #1e40af;
53
+
54
+ --green-emerald: #15803d; /* 翡翠深绿火漆(闭环 / 附着完成) */
55
+ --green-bg: #f0fdf4;
56
+ --green-ink: #166534;
57
+
58
+ --purple-damask: #7e22ce; /* 🟣 晋升 promoted / 丝绒缎带 ref 连线 */
59
+ --purple-bg: #faf5ff;
60
+ --purple-ink: #581c87;
61
+
62
+ /* ── 排版字体栈:古典人文衬线与钟表数字 ── */
63
+ --font-serif: "Georgia", "Palatino", "Palatino Linotype", "Book Antiqua", "Songti SC", "SimSun", serif;
64
+ --font-ui: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
65
+ --font-mono: ui-monospace, "SF Mono", "Cascadia Code", "Courier New", Consolas, monospace;
66
+ }
67
+
68
+ * { box-sizing: border-box; }
69
+ [hidden] { display: none !important; }
70
+
71
+ /* ── 复古黄铜嵌条极窄滚动条 ── */
72
+ ::-webkit-scrollbar { width: 8px; height: 8px; }
73
+ ::-webkit-scrollbar-track { background: #18100a; }
74
+ ::-webkit-scrollbar-thumb {
75
+ background: linear-gradient(180deg, #a87e2a 0%, #6e4e13 100%);
76
+ border-radius: 3px;
77
+ border: 1.5px solid #18100a;
78
+ }
79
+ ::-webkit-scrollbar-thumb:hover { background: #c99a32; }
80
+
81
+ body {
82
+ margin: 0;
83
+ /* 纯 CSS 双层胡桃木木纹质感底纹 */
84
+ background:
85
+ repeating-linear-gradient(0deg, rgba(255, 200, 120, 0.015) 0px, rgba(255, 200, 120, 0.015) 1px, transparent 1px, transparent 6px),
86
+ linear-gradient(180deg, #241a12 0%, #1c140e 100%);
87
+ background-attachment: fixed;
88
+ color: var(--ink-black);
89
+ font: 12.5px/1.55 var(--font-ui);
90
+ -webkit-font-smoothing: antialiased;
91
+ -moz-osx-font-smoothing: grayscale;
92
+ font-variant-numeric: tabular-nums;
93
+ }
94
+
95
+ /* ── 1. 顶栏:红木雕花与黄铜刻线控制台 ── */
96
+ header {
97
+ position: sticky;
98
+ top: 0;
99
+ z-index: 40;
100
+ background: linear-gradient(180deg, #2c1e15 0%, #20150e 100%);
101
+ border-bottom: 2px solid var(--brass-gold);
102
+ padding: 12px 22px 11px;
103
+ box-shadow: 0 4px 18px rgba(0, 0, 0, 0.6);
104
+ }
105
+ h1 {
106
+ margin: 0 0 2px;
107
+ font-family: var(--font-serif);
108
+ font-size: 18px;
109
+ font-weight: 700;
110
+ letter-spacing: 0.02em;
111
+ color: #f7eed8;
112
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.75);
113
+ }
114
+ .sub {
115
+ color: var(--brass-light);
116
+ font-size: 11px;
117
+ font-family: var(--font-serif);
118
+ font-style: italic;
119
+ opacity: 0.85;
120
+ }
121
+ .toolbar {
122
+ display: flex;
123
+ gap: 14px;
124
+ align-items: center;
125
+ margin-top: 8px;
126
+ font-size: 11.5px;
127
+ }
128
+ /* 黄铜金属复古拨钮按钮 */
129
+ .toolbar label {
130
+ cursor: pointer;
131
+ user-select: none;
132
+ display: inline-flex;
133
+ align-items: center;
134
+ gap: 6px;
135
+ background: linear-gradient(180deg, #fefbf3 0%, #f0e6ce 100%);
136
+ border: 1px solid var(--brass-gold);
137
+ border-radius: 4px;
138
+ padding: 3px 9px;
139
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4), inset 0 1px 0 #ffffff;
140
+ font-weight: 700;
141
+ font-family: var(--font-serif);
142
+ color: var(--ink-black);
143
+ transition: all 0.12s ease;
144
+ }
145
+ .toolbar label:hover {
146
+ background: #ffffff;
147
+ box-shadow: 0 2px 6px rgba(201, 154, 50, 0.4);
148
+ transform: translateY(-1px);
149
+ }
150
+ .toolbar label:active {
151
+ transform: translateY(1px);
152
+ box-shadow: inset 0 1px 2px rgba(0,0,0,0.3);
153
+ }
154
+ .toolbar input[type="checkbox"] {
155
+ accent-color: var(--brass-gold);
156
+ margin: 0;
157
+ cursor: pointer;
158
+ }
159
+
160
+ /* ── 2. 全局 KPI 仪器:机械字轮计数器 ── */
161
+ .kpis {
162
+ display: flex;
163
+ gap: 8px 18px;
164
+ flex-wrap: wrap;
165
+ align-items: baseline;
166
+ padding: 8px 22px;
167
+ font-size: 11.5px;
168
+ background: #18110b;
169
+ border-bottom: 1px solid var(--brass-dark);
170
+ box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.5);
171
+ }
172
+ .kpi {
173
+ display: inline-flex;
174
+ align-items: baseline;
175
+ gap: 5px;
176
+ background: rgba(0, 0, 0, 0.25);
177
+ padding: 2px 7px;
178
+ border-radius: 3px;
179
+ border: 1px solid rgba(201, 154, 50, 0.2);
180
+ }
181
+ .kpi b {
182
+ color: #f7eed8;
183
+ font-family: var(--font-serif);
184
+ font-size: 15.5px;
185
+ font-weight: 700;
186
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8);
187
+ font-variant-numeric: tabular-nums;
188
+ }
189
+ .kpi span {
190
+ color: #cbb89b;
191
+ font-size: 10.5px;
192
+ font-family: var(--font-serif);
193
+ }
194
+ .warn b, .kpi.warn b { color: #f59e0b; }
195
+ .bad b, .kpi.bad b { color: #ef4444; }
196
+ .banner {
197
+ margin: 12px 22px 0;
198
+ padding: 10px 14px;
199
+ border-radius: 5px;
200
+ background: #fff1f2;
201
+ border: 1.5px solid var(--seal-red);
202
+ border-left: 6px solid var(--seal-red);
203
+ box-shadow: 0 3px 10px rgba(0,0,0,0.3);
204
+ }
205
+ .banner ul { margin: 4px 0 0; padding-left: 18px; }
206
+ .empty { padding: 36px 22px; color: var(--ink-sepia); font-style: italic; }
207
+
208
+ /* ── 3. 责任分层仪表盘 (Dashboard Radar Tiers) ── */
209
+ .dash {
210
+ padding: 12px 22px 8px;
211
+ background: #201710;
212
+ border-bottom: 1.5px solid var(--brass-gold);
213
+ box-shadow: 0 3px 10px rgba(0, 0, 0, 0.4);
214
+ }
215
+ .tier {
216
+ display: grid;
217
+ grid-template-columns: 132px minmax(0, 1fr);
218
+ gap: 14px;
219
+ padding: 9px 0;
220
+ border-top: 1px solid rgba(201, 154, 50, 0.2);
221
+ align-items: start;
222
+ }
223
+ .tier:first-child { border-top: none; padding-top: 2px; }
224
+ .tierLab { display: flex; flex-direction: column; gap: 1px; padding-top: 2px; }
225
+ .tierWho {
226
+ font-family: var(--font-serif);
227
+ font-size: 11.5px;
228
+ font-weight: 700;
229
+ letter-spacing: 0.02em;
230
+ }
231
+ .tierGlyph { font-size: 9.5px; color: #b8a287; white-space: nowrap; font-family: var(--font-serif); }
232
+ .t1 .tierWho { color: #f87171; text-shadow: 0 1px 2px rgba(0,0,0,0.8); }
233
+ .t2 .tierWho { color: #f472b6; }
234
+ .t3 .tierWho { color: #fbbf24; text-shadow: 0 1px 2px rgba(0,0,0,0.8); }
235
+ .t4 .tierWho { color: #d6c4aa; }
236
+
237
+ .dCards { display: flex; flex-wrap: wrap; gap: 8px; align-items: stretch; }
238
+ .dFacts { width: 100%; margin-top: 6px; }
239
+
240
+ /* 羊皮纸与火漆印指标牌 */
241
+ .dc {
242
+ background: var(--paper-card);
243
+ border: 1px solid var(--brass-gold);
244
+ border-radius: 4px;
245
+ padding: 7px 12px;
246
+ min-width: 126px;
247
+ display: flex;
248
+ flex-direction: column;
249
+ gap: 1px;
250
+ box-shadow: var(--shadow-card);
251
+ transition: all 0.12s ease;
252
+ }
253
+ .dc:hover {
254
+ box-shadow: var(--shadow-hover);
255
+ }
256
+ .dc b {
257
+ font-family: var(--font-serif);
258
+ font-size: 21px;
259
+ font-weight: 800;
260
+ line-height: 1.15;
261
+ color: var(--ink-black);
262
+ letter-spacing: -0.01em;
263
+ }
264
+ .dLab { font-size: 10px; color: var(--ink-brown); font-weight: 600; letter-spacing: 0.01em; font-family: var(--font-serif); }
265
+ .dSub { font-size: 9px; color: var(--ink-sepia); margin-top: 1px; }
266
+ .dc.zero { background: #f4edd9; }
267
+ .dc.zero b { color: var(--ink-faint); font-weight: 400; }
268
+ .dc.lamp { background: #fee2e2; border-color: var(--seal-red); }
269
+ .dc.lamp b { color: var(--seal-red); }
270
+ .dc.red { background: #fdf2f8; border-color: var(--rose-open); }
271
+ .dc.red b { color: var(--rose-open); }
272
+ .dc.redSoft { border-color: var(--brass-gold); min-width: 90px; }
273
+ .dc.redSoft b { color: var(--rose-open); font-size: 16px; }
274
+ .dc.redSoft .dLab { font-size: 9px; }
275
+ .dc.amber { background: var(--amber-bg); border-color: var(--amber-cognac); }
276
+ .dc.amber b { color: var(--amber-ink); }
277
+ .dc.calm b { color: var(--ink-black); }
278
+
279
+ /* 均衡器:复古象牙与红木刻度尺 */
280
+ .eq {
281
+ background: var(--paper-card);
282
+ border: 1px solid var(--brass-gold);
283
+ border-radius: 4px;
284
+ padding: 7px 12px;
285
+ min-width: 240px;
286
+ flex: 1 1 240px;
287
+ box-shadow: var(--shadow-card);
288
+ }
289
+ .eqHead { display: flex; gap: 8px; align-items: baseline; margin-bottom: 5px; }
290
+ .eqHead b { font-family: var(--font-serif); font-size: 19px; font-weight: 800; color: var(--ink-black); }
291
+ .eqChk { margin-left: auto; font-size: 9.5px; color: var(--green-ink); font-weight: 750; white-space: nowrap; font-family: var(--font-serif); }
292
+ .eqBar {
293
+ display: flex;
294
+ gap: 1px;
295
+ height: 12px;
296
+ border-radius: 3px;
297
+ overflow: hidden;
298
+ background: #3a271a;
299
+ border: 1px solid var(--brass-dark);
300
+ }
301
+ .eqBar span {
302
+ font-size: 8.5px;
303
+ line-height: 12px;
304
+ font-weight: 800;
305
+ text-align: center;
306
+ overflow: hidden;
307
+ min-width: 14px;
308
+ color: #ffffff;
309
+ font-family: var(--font-serif);
310
+ }
311
+ .eqLeg { display: flex; flex-wrap: wrap; gap: 2px 10px; margin-top: 5px; font-size: 9.5px; color: var(--ink-brown); }
312
+ .eqLeg i {
313
+ font-style: normal;
314
+ display: inline-block;
315
+ width: 7px;
316
+ height: 7px;
317
+ border: 1px solid rgba(0,0,0,0.3);
318
+ border-radius: 2px;
319
+ margin-right: 4px;
320
+ vertical-align: 0;
321
+ }
322
+ .s-closed { background: #6b7280; }
323
+ .s-attached { background: #15803d; }
324
+ .s-open { background: #dc2626; }
325
+ .s-current { background: #2563eb; }
326
+ .s-unmarked { background: #d97706; }
327
+ .s-unread { background: #9ca3af; }
328
+ .s-init { background: #16a34a; }
329
+ .s-work { background: #3b82f6; }
330
+ .s-ledger { background: #9333ea; }
331
+
332
+ /* ── 4. 图例 (Legend Status Ribbon) ── */
333
+ .legend {
334
+ padding: 7px 22px;
335
+ background: #170f0a;
336
+ border-bottom: 1.5px solid var(--brass-gold);
337
+ display: flex;
338
+ gap: 16px;
339
+ flex-wrap: wrap;
340
+ align-items: center;
341
+ font-size: 11px;
342
+ color: #d6c4aa;
343
+ }
344
+ .lgGroup { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
345
+ .lgHead { color: var(--brass-light); font-weight: 700; text-transform: uppercase; font-size: 10px; letter-spacing: 0.05em; font-family: var(--font-serif); }
346
+ .lgItem { display: inline-flex; gap: 4px; align-items: center; max-width: 520px; }
347
+ .lgItem b { color: #f7eed8; font-weight: 700; font-family: var(--font-serif); }
348
+ .lgGlyph { display: inline-block; min-width: 13px; text-align: center; font-size: 11px; }
349
+ .lgDesc { color: #bca88d; }
350
+ .lgSep { width: 1.5px; height: 12px; background: rgba(201, 154, 50, 0.35); align-self: center; margin: 0 3px; display: inline-block; }
351
+ .lgSwatch {
352
+ display: inline-block;
353
+ width: 14px;
354
+ height: 10px;
355
+ border-radius: 2px;
356
+ border: 1px solid var(--brass-gold);
357
+ background: var(--paper-card);
358
+ }
359
+ .lgSwatch.lgMissing { border-color: var(--seal-red); background: #fee2e2; }
360
+ .lgSwatch.lgEmpty { border-style: dashed; }
361
+ .lgSwatch.lgPromoted { border-left: 4.5px solid var(--purple-damask); }
362
+ .lgSwatch.lgPaused { border-left: 4.5px solid var(--amber-cognac); }
363
+ .lgSwatch.lgLine { height: 0; border: 0; border-top: 2.5px solid var(--brass-gold); align-self: center; }
364
+ .lgSwatch.lgLine.ref { border-top: 2.5px dashed var(--purple-damask); }
365
+
366
+ /* ── 5. 声明与支撑托盘 (Support Trays) ── */
367
+ .trays {
368
+ display: flex;
369
+ flex-wrap: nowrap;
370
+ overflow-x: auto;
371
+ align-items: flex-start;
372
+ gap: 12px;
373
+ padding: 14px 22px 0;
374
+ }
375
+ .tray {
376
+ background: var(--paper-card);
377
+ border: 1.5px solid var(--brass-gold);
378
+ border-radius: 5px;
379
+ padding: 10px 12px;
380
+ min-width: 0;
381
+ flex: 0 0 auto;
382
+ box-shadow: var(--shadow-card);
383
+ }
384
+ .tray.rolecard { flex: 0 0 205px; }
385
+ .tray h2 {
386
+ font-family: var(--font-serif);
387
+ font-size: 13px;
388
+ font-weight: 800;
389
+ margin: 0 0 5px;
390
+ color: var(--ink-black);
391
+ letter-spacing: 0.01em;
392
+ }
393
+ .tray.master h2 { color: var(--green-ink); }
394
+ .tray.ledger h2 { color: var(--blue-ink); }
395
+ .tray.drift h2 { color: var(--amber-ink); }
396
+ .tray .hint { color: var(--ink-sepia); font-size: 10.5px; margin: 0 0 7px; line-height: 1.5; font-style: italic; }
397
+ .trayList { display: flex; flex-direction: column; gap: 3px; }
398
+ .trayN { color: var(--ink-sepia); font-weight: 700; font-size: 11px; margin-left: 3px; font-variant-numeric: tabular-nums; font-family: var(--font-serif); }
399
+
400
+ .slotRow {
401
+ display: grid;
402
+ grid-template-columns: 132px 1fr;
403
+ gap: 7px;
404
+ align-items: start;
405
+ margin-bottom: 4px;
406
+ padding: 3px;
407
+ }
408
+ .slotRow.noDecl .slotRowName { border-style: dashed; box-shadow: none; }
409
+ .slotZone { margin: 2px 0 8px; }
410
+ .slotZoneHead { display: flex; gap: 8px; align-items: baseline; font-size: 10px; color: var(--ink-sepia); margin-bottom: 3px; }
411
+ .szTitle { color: var(--ink-brown); font-weight: 700; font-family: var(--font-serif); }
412
+ .szCnt { margin-left: auto; }
413
+ .declSrc { color: var(--brass-dark); font-family: var(--font-mono); font-weight: 700; }
414
+
415
+ .slotZone.decl .slotGrid {
416
+ grid-template-columns: none;
417
+ grid-auto-flow: column;
418
+ grid-auto-columns: 132px;
419
+ padding-bottom: 2px;
420
+ }
421
+
422
+ /* ★ 锁定 132×46 标题格:铸造黄铜立体铭牌(Engraved Horological Brass Plate) */
423
+ .slotRowName {
424
+ display: flex;
425
+ flex-direction: column;
426
+ gap: 2px;
427
+ justify-content: center;
428
+ width: 132px;
429
+ height: 46px;
430
+ box-sizing: border-box;
431
+ overflow: hidden;
432
+ padding: 5px 8px;
433
+ /* 耀眼黄铜金属双向高光渐变 */
434
+ background: linear-gradient(135deg, #e6c875 0%, #aa7c11 50%, #d4af37 100%);
435
+ border: 1.5px solid #6b4d13;
436
+ border-radius: 4px;
437
+ flex: 0 0 auto;
438
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.7), 0 2px 5px rgba(0, 0, 0, 0.4);
439
+ }
440
+ .slotRowName b {
441
+ color: #2b1805;
442
+ font-family: var(--font-serif);
443
+ font-size: 11.5px;
444
+ font-weight: 850;
445
+ word-break: break-word;
446
+ line-height: 1.25;
447
+ display: block;
448
+ overflow: hidden;
449
+ text-overflow: ellipsis;
450
+ white-space: nowrap;
451
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
452
+ }
453
+ .slotRowName .srCnt {
454
+ color: #4a2d0a;
455
+ font-size: 9.5px;
456
+ font-weight: 800;
457
+ font-family: var(--font-mono);
458
+ }
459
+ .slotRow .slotGrid { margin: 0; }
460
+
461
+ .slotGrid {
462
+ display: grid;
463
+ grid-template-columns: repeat(auto-fill, minmax(104px, 1fr));
464
+ gap: 4px;
465
+ }
466
+ .slot {
467
+ background: var(--paper-card);
468
+ border: 1px solid rgba(201, 154, 50, 0.6);
469
+ border-radius: 4px;
470
+ padding: 5px 6px;
471
+ min-width: 0;
472
+ box-shadow: 0 1px 3px rgba(0,0,0,0.15);
473
+ transition: background-color 0.12s ease, border-color 0.12s ease;
474
+ }
475
+ .slot:hover {
476
+ background: #ffffff;
477
+ border-color: var(--brass-gold);
478
+ }
479
+ .slot.isEmpty { border-style: dashed; box-shadow: none; background: #f4edd9; }
480
+ .slot.tone-warn { border-color: var(--amber-cognac); }
481
+ .slot.needsEye { background: var(--amber-bg); border-color: var(--amber-cognac); }
482
+ .slot.tone-dim { background: #f4edd9; }
483
+ .slotHead { display: flex; gap: 4px; align-items: baseline; font-size: 9.5px; color: var(--ink-brown); }
484
+ .slotTitle { font-weight: 750; word-break: break-all; line-height: 1.25; font-family: var(--font-serif); }
485
+ .slotCnt { font-family: var(--font-serif); font-size: 15px; font-weight: 800; color: var(--ink-black); line-height: 1.2; margin-top: 2px; }
486
+ .slot.isEmpty .slotCnt { color: var(--ink-faint); font-weight: 400; }
487
+ .slot.needsEye .slotCnt { color: var(--amber-ink); }
488
+ .slotMarks { display: flex; gap: 3px; flex-wrap: wrap; font-size: 9px; min-height: 11px; }
489
+ .sm { color: var(--ink-sepia); }
490
+ .sm.pin { color: var(--green-ink); font-weight: 750; }
491
+ .sm.mine { color: var(--blue-ink); font-weight: 750; }
492
+ .sm.out { color: var(--amber-ink); font-weight: 750; }
493
+ .slotFile { font-size: 9px; color: var(--ink-brown); word-break: break-all; line-height: 1.35; margin-top: 2px; }
494
+ .slotMore { font-size: 9px; color: var(--ink-sepia); margin-top: 2px; }
495
+
496
+ /* 声明交互格 */
497
+ .slot.decl { cursor: pointer; height: 46px; box-sizing: border-box; overflow: hidden; }
498
+ .slot.decl.open { height: auto; overflow: visible; }
499
+ .slot.decl:not(.open) .declList { display: none; }
500
+ .declList { margin-top: 3px; }
501
+ .declItem { color: var(--blue-ink); font-size: 9.5px; line-height: 1.4; margin-top: 2px; overflow-wrap: anywhere; cursor: pointer; font-weight: 700; font-family: var(--font-serif); }
502
+ .declItem:hover { color: #1e3a8a; text-decoration: underline; }
503
+ .declItem.gone { color: var(--seal-red); }
504
+ .declTo { color: var(--purple-ink); margin-left: 3px; }
505
+ .declGone { color: var(--seal-red); margin-left: 3px; }
506
+ .declLoose { display: flex; flex-wrap: wrap; gap: 3px 10px; padding: 3px 2px; }
507
+ .declLoose .declItem { margin: 0; }
508
+ .declLooseWrap { grid-column: 2 / -1; }
509
+ .declNotes { display: flex; flex-wrap: wrap; gap: 5px; }
510
+ .declNote { color: var(--ink-sepia); font-size: 9.5px; font-style: italic; }
511
+ .declItemName { overflow-wrap: anywhere; }
512
+
513
+ .trayRootHead { font-size: 9.5px; color: var(--ink-sepia); margin: 6px 0 2px; padding-bottom: 2px; border-bottom: 1px dashed rgba(201, 154, 50, 0.4); font-family: var(--font-serif); }
514
+ .trayRow { background: var(--paper-card); border: 1px solid rgba(201, 154, 50, 0.6); border-radius: 4px; padding: 5px 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
515
+ .trayRow.hasUnmarked { border-left: 4.5px solid var(--amber-cognac); }
516
+ .trayRow.drifted { border-left: 4.5px solid var(--purple-damask); }
517
+ .trayRowHead { display: flex; gap: 6px; align-items: baseline; flex-wrap: wrap; font-size: 11px; }
518
+ .trayTitle { font-weight: 750; word-break: break-all; color: var(--ink-black); font-family: var(--font-serif); }
519
+ .trayRoot { color: var(--ink-sepia); font-size: 9.5px; }
520
+ .trayCnt { color: var(--ink-sepia); font-size: 9.5px; margin-left: auto; font-family: var(--font-serif); }
521
+ .trayDefine { font-size: 9.5px; color: var(--ink-brown); line-height: 1.45; margin-top: 2px; }
522
+ .trayPath { font-size: 9px; color: var(--ink-faint); margin-top: 2px; word-break: break-all; font-family: var(--font-mono); }
523
+ .badge.ok { background: var(--green-bg); color: var(--green-ink); border-color: var(--green-emerald); }
524
+ .badge.warn { background: var(--amber-bg); color: var(--amber-ink); border-color: var(--amber-cognac); }
525
+ .attachChip { font-size: 8.5px; border-radius: 3px; padding: 0 4px; background: var(--green-bg); color: var(--green-ink); border: 1px solid var(--green-emerald); font-weight: 750; }
526
+ .attachChip.none { background: var(--amber-bg); color: var(--amber-ink); border-color: var(--amber-cognac); }
527
+
528
+ /* 色带覆盖率 */
529
+ .covBar { display: flex; gap: 1px; margin-top: 6px; height: 12px; border-radius: 3px; overflow: hidden; background: #3a271a; border: 1px solid var(--brass-dark); }
530
+ .cov { flex: 1 1 auto; min-width: 16px; font-size: 8.5px; line-height: 12px; font-weight: 800; text-align: center; overflow: hidden; color: #ffffff; font-family: var(--font-serif); }
531
+ .cov-closed { background: #6b7280; }
532
+ .cov-attached { background: #15803d; }
533
+ .cov-unmarked { background: #d97706; }
534
+ .cov-archived { background: #9333ea; }
535
+ .cov-unread { background: #9ca3af; }
536
+ .cov-none { background: #4a3424; }
537
+ .promptLedger { margin-top: 8px; }
538
+ .driftSrc { display: flex; gap: 8px; flex-wrap: wrap; font-size: 9.5px; color: var(--ink-sepia); margin-top: 6px; }
539
+ .trayCovWrap { margin: 0 0 6px; }
540
+ .trayCovWrap .covBar { margin-top: 0; }
541
+
542
+ /* ── 6. 二维网格系统 (The 2D Matrix) ── */
543
+ .gridWrap { padding: 18px 22px 42px; overflow-x: auto; }
544
+ .gridInner { position: relative; }
545
+ .grid {
546
+ display: grid;
547
+ grid-template-columns: 150px repeat(var(--cols), minmax(340px, 1fr));
548
+ gap: 12px;
549
+ }
550
+ .corner { }
551
+
552
+ /* 仓库列头 (Root Header) —— 仿制黄铜挂角木制顶梁 */
553
+ .rootHead {
554
+ background: linear-gradient(180deg, #2b1d14 0%, #1f140d 100%);
555
+ border: 1px solid var(--brass-dark);
556
+ border-top: 3.5px solid var(--brass-gold);
557
+ border-radius: 4px;
558
+ padding: 8px 10px;
559
+ position: sticky;
560
+ top: 0;
561
+ z-index: 10;
562
+ box-shadow: 0 3px 10px rgba(0, 0, 0, 0.5);
563
+ }
564
+ .rootName {
565
+ font-family: var(--font-serif);
566
+ font-weight: 800;
567
+ font-size: 13.5px;
568
+ color: #f7eed8;
569
+ letter-spacing: 0.01em;
570
+ text-shadow: 0 1px 2px rgba(0,0,0,0.8);
571
+ }
572
+ .rootSub {
573
+ color: var(--brass-light);
574
+ font-size: 10.5px;
575
+ margin-top: 2px;
576
+ font-family: var(--font-serif);
577
+ font-style: italic;
578
+ opacity: 0.9;
579
+ }
580
+
581
+ /* 要你拍板 (Attn Alert - 威尼斯赤红火漆警报框) */
582
+ .attn { margin: 0 0 16px; }
583
+ .attn h2 { font-family: var(--font-serif); font-size: 16px; margin: 0 0 5px; color: #ef4444; font-weight: 800; text-shadow: 0 1px 2px rgba(0,0,0,0.8); }
584
+ .attnRow {
585
+ border: 1.5px solid var(--seal-red);
586
+ border-left: 6px solid var(--seal-red);
587
+ border-radius: 5px;
588
+ background: #fff1f2;
589
+ padding: 10px 14px;
590
+ margin-bottom: 8px;
591
+ box-shadow: 0 3px 12px rgba(0, 0, 0, 0.4);
592
+ }
593
+ .attnTop { display: flex; flex-wrap: wrap; gap: 8px; align-items: baseline; font-size: 11px; }
594
+ .attnWhere { font-weight: 800; color: var(--seal-red-ink); font-family: var(--font-serif); }
595
+ .attnBy, .attnWhen { color: var(--ink-sepia); font-size: 10px; }
596
+ .attnAsk { font-size: 13.5px; line-height: 1.55; margin: 6px 0 5px; color: var(--ink-black); font-weight: 750; font-family: var(--font-serif); }
597
+ .attnAsk.none { color: var(--ink-sepia); font-size: 11px; font-style: italic; }
598
+ .attnPath { font-size: 9.5px; color: var(--ink-sepia); word-break: break-all; font-family: var(--font-mono); }
599
+
600
+ /* 泳道标签 (Lane Label) —— 古董抽屉木质拉手标牌 */
601
+ .laneLabel {
602
+ background: linear-gradient(180deg, #2a1d14 0%, #20150e 100%);
603
+ border: 1px solid var(--brass-dark);
604
+ border-left: 3px solid var(--brass-gold);
605
+ border-radius: 4px;
606
+ padding: 9px 8px;
607
+ display: flex;
608
+ flex-direction: column;
609
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.4);
610
+ }
611
+ .laneLabel.undeclared { border-style: dashed; }
612
+ .laneId {
613
+ font-size: 10.5px;
614
+ font-weight: 800;
615
+ text-transform: uppercase;
616
+ color: var(--brass-light);
617
+ font-family: var(--font-serif);
618
+ letter-spacing: 0.05em;
619
+ }
620
+ .laneTitle {
621
+ font-family: var(--font-serif);
622
+ font-weight: 750;
623
+ font-size: 12.5px;
624
+ color: #f7eed8;
625
+ margin-top: 2px;
626
+ }
627
+ .laneSub {
628
+ font-size: 9.5px;
629
+ color: #cbb89b;
630
+ margin-top: 5px;
631
+ line-height: 1.4;
632
+ font-family: var(--font-serif);
633
+ font-style: italic;
634
+ }
635
+
636
+ /* 导轨槽容积 (Grid Cell Container) —— 下沉木榫暗格槽底 */
637
+ .cell {
638
+ display: flex;
639
+ flex-wrap: wrap;
640
+ gap: 9px;
641
+ align-content: flex-start;
642
+ background: var(--wood-well);
643
+ border: 1px solid #332115;
644
+ border-radius: 5px;
645
+ padding: 9px;
646
+ min-height: 60px;
647
+ box-shadow: var(--shadow-well);
648
+ }
649
+
650
+ /* ── 7. 文件夹卡片 (Folder Card Box · 73 个核心单元) ──
651
+ ★ Skill 突破:复古羊皮纸手工票据与黄铜角箍装订质感 */
652
+ .box {
653
+ flex: 1 1 240px;
654
+ min-width: 220px;
655
+ background: var(--paper-card);
656
+ border: 1px solid rgba(201, 154, 50, 0.7);
657
+ border-radius: 4px;
658
+ padding: 8px 10px;
659
+ position: relative;
660
+ outline: none;
661
+ box-shadow: var(--shadow-card);
662
+ transition: background-color 0.12s ease, box-shadow 0.12s ease, border-color 0.12s ease;
663
+ }
664
+ /* 纯 CSS 黄铜角箍微装饰(右上角铜件固定销) */
665
+ .box::after {
666
+ content: "";
667
+ position: absolute;
668
+ top: 3px;
669
+ right: 4px;
670
+ width: 4px;
671
+ height: 4px;
672
+ border-radius: 50%;
673
+ background: radial-gradient(circle, #f5d77f 30%, #a87e2a 100%);
674
+ box-shadow: 0 1px 1px rgba(0,0,0,0.4);
675
+ pointer-events: none;
676
+ }
677
+ .box:hover, .box:focus {
678
+ background: var(--paper-card-hover);
679
+ box-shadow: var(--shadow-hover);
680
+ border-color: var(--brass-gold);
681
+ z-index: 4;
682
+ }
683
+ .box:focus-visible {
684
+ outline: 2px solid var(--brass-gold);
685
+ outline-offset: 2px;
686
+ }
687
+ .box.missing {
688
+ border-color: var(--seal-red);
689
+ background: #fee2e2;
690
+ }
691
+ .box.isEmpty {
692
+ border-style: dashed;
693
+ background: #f1ebd8;
694
+ box-shadow: none;
695
+ }
696
+ .box.promoted {
697
+ border-left: 5px solid var(--purple-damask);
698
+ }
699
+ .box.dimmed {
700
+ opacity: 0.55;
701
+ }
702
+
703
+ /* 冻结规定:琥珀色左边条 = 挂着未关意见(卡住),绝不可漏,必须看得见 */
704
+ .box.paused {
705
+ border-left: 5px solid var(--amber-cognac);
706
+ background: var(--amber-bg);
707
+ }
708
+
709
+ .bCols { display: flex; gap: 7px; align-items: flex-start; }
710
+ .bMain { flex: 1 1 auto; min-width: 0; }
711
+ .bTop { display: flex; align-items: center; gap: 5px; flex-wrap: wrap; }
712
+
713
+ /* 门牌号:老式复古钟表字盘 / 打字机铜键标号 */
714
+ .bCode {
715
+ font-family: var(--font-serif);
716
+ font-size: 9.5px;
717
+ font-weight: 800;
718
+ color: #e6b84d;
719
+ background: #2a1b10;
720
+ border: 1px solid #735118;
721
+ border-radius: 3px;
722
+ padding: 0 5px;
723
+ letter-spacing: 0.04em;
724
+ margin-right: 3px;
725
+ box-shadow: inset 0 1px 2px rgba(0,0,0,0.5);
726
+ }
727
+ .bTitle {
728
+ font-family: var(--font-serif);
729
+ font-weight: 750;
730
+ font-size: 12.5px;
731
+ color: var(--ink-black);
732
+ word-break: break-all;
733
+ }
734
+
735
+ /* 状态徽章:珐琅与黄铜微型印鉴 */
736
+ .badge {
737
+ font-family: var(--font-serif);
738
+ font-size: 9px;
739
+ font-weight: 750;
740
+ border-radius: 3px;
741
+ padding: 1px 5px;
742
+ border: 1px solid var(--brass-gold);
743
+ box-shadow: 0 1px 2px rgba(0,0,0,0.15);
744
+ }
745
+ .badge.bad { background: #fee2e2; color: var(--seal-red); border-color: var(--seal-red); }
746
+ .badge.dim { background: #f1ebd8; color: var(--ink-sepia); }
747
+ .badge.pro { background: var(--purple-bg); color: var(--purple-ink); border-color: var(--purple-damask); }
748
+ .badge.pause { background: var(--amber-bg); color: var(--amber-ink); border-color: var(--amber-cognac); }
749
+ .badge.home { background: #fef3c7; color: #78350f; border-color: #d97706; }
750
+
751
+ /* 右侧标记栏 */
752
+ .bMarks {
753
+ flex: 0 0 auto;
754
+ display: flex;
755
+ flex-direction: column;
756
+ gap: 3px;
757
+ align-items: center;
758
+ padding-left: 7px;
759
+ border-left: 1px solid rgba(201, 154, 50, 0.4);
760
+ }
761
+ .mk { font-size: 12px; line-height: 1.2; }
762
+ .mkPrompt {
763
+ font-weight: 800;
764
+ font-size: 10px;
765
+ color: var(--green-ink);
766
+ border: 1px solid var(--green-emerald);
767
+ border-radius: 3px;
768
+ padding: 0 3px;
769
+ background: var(--green-bg);
770
+ font-family: var(--font-serif);
771
+ }
772
+ .mkPause { color: var(--amber-cognac); font-weight: 800; }
773
+ .mkOpen { color: var(--rose-open); font-weight: 800; }
774
+ .mkLamp { color: #b45309; }
775
+
776
+ /* 子项标签 */
777
+ .bKids { display: flex; flex-wrap: wrap; gap: 3px; margin-top: 5px; }
778
+ .kid {
779
+ display: inline-flex;
780
+ gap: 3px;
781
+ align-items: baseline;
782
+ font-size: 9px;
783
+ background: #f5eedb;
784
+ border: 1px solid #dbcbb0;
785
+ border-radius: 3px;
786
+ padding: 1px 5px;
787
+ }
788
+ .kidName { color: var(--ink-brown); word-break: break-all; font-weight: 600; }
789
+ .kidCnt { color: var(--ink-sepia); font-size: 8.5px; font-weight: 750; font-family: var(--font-serif); }
790
+
791
+ .bDefine {
792
+ color: var(--ink-brown);
793
+ font-size: 10.5px;
794
+ margin-top: 4px;
795
+ line-height: 1.45;
796
+ font-family: var(--font-serif);
797
+ }
798
+
799
+ /* 卡片底部 */
800
+ .bFoot {
801
+ display: flex;
802
+ justify-content: space-between;
803
+ gap: 6px;
804
+ margin-top: 6px;
805
+ padding-top: 4px;
806
+ border-top: 1px solid #ebd9b8;
807
+ font-size: 9.5px;
808
+ color: var(--ink-sepia);
809
+ }
810
+ .cnt { white-space: nowrap; font-weight: 750; color: var(--ink-black); font-family: var(--font-serif); }
811
+ .cnt.dim { color: var(--ink-faint); font-weight: 400; }
812
+ .bPath { text-align: right; word-break: break-all; color: var(--ink-sepia); font-family: var(--font-mono); font-size: 9px; }
813
+
814
+ /* 折叠区域 */
815
+ .why { margin-top: 5px; border-top: 1px dashed rgba(201, 154, 50, 0.4); padding-top: 4px; }
816
+ .ex { font-size: 9.5px; color: var(--ink-brown); line-height: 1.45; margin-top: 2px; }
817
+ .org {
818
+ display: inline-block;
819
+ font-size: 8.5px;
820
+ border-radius: 2.5px;
821
+ padding: 0 3px;
822
+ margin-right: 4px;
823
+ vertical-align: 1px;
824
+ font-weight: 750;
825
+ border: 1px solid;
826
+ font-family: var(--font-serif);
827
+ }
828
+ .org.declared { background: var(--blue-bg); color: var(--blue-ink); border-color: var(--blue-cobalt); }
829
+ .org.fact { background: var(--green-bg); color: var(--green-ink); border-color: var(--green-emerald); }
830
+ .org.inferred { background: var(--amber-bg); color: var(--amber-ink); border-color: var(--amber-cognac); }
831
+
832
+ /* 挂靠与暂停明细 */
833
+ .pauseBox { margin-top: 6px; border-top: 1.5px solid var(--amber-cognac); padding-top: 4px; }
834
+ .pauseHead { display: flex; gap: 5px; flex-wrap: wrap; align-items: baseline; font-size: 9.5px; margin-bottom: 2px; cursor: pointer; }
835
+ .pauseTag { color: var(--amber-ink); font-weight: 800; font-family: var(--font-serif); }
836
+ .pauseCnt { color: var(--amber-ink); font-weight: 700; font-family: var(--font-serif); }
837
+ .pnote { display: flex; gap: 5px; align-items: baseline; flex-wrap: wrap; font-size: 9.5px; margin-top: 2px; }
838
+ .pnSrc { color: var(--ink-black); font-family: var(--font-mono); word-break: break-all; }
839
+ .pnSubj { color: var(--ink-sepia); }
840
+
841
+ .attach { margin-top: 6px; border-top: 1px solid #ebd9b8; padding-top: 4px; }
842
+ .attHead { display: flex; gap: 6px; flex-wrap: wrap; font-size: 9.5px; color: var(--ink-brown); margin-bottom: 2px; cursor: pointer; }
843
+ .attCount { color: var(--blue-ink); font-weight: 800; }
844
+ .lamp { color: var(--seal-red); font-weight: 800; }
845
+ .staleTag { color: var(--amber-cognac); font-size: 9px; font-weight: 700; }
846
+ .brokenTag { color: var(--purple-damask); font-size: 9px; font-weight: 700; }
847
+ .att { display: flex; gap: 4px; align-items: baseline; flex-wrap: wrap; font-size: 9.5px; margin-top: 2px; }
848
+ .att.isStale { opacity: 1; }
849
+ .attKind {
850
+ font-size: 8.5px;
851
+ font-weight: 750;
852
+ border-radius: 2.5px;
853
+ padding: 0 3px;
854
+ background: #f1ebd8;
855
+ color: var(--ink-brown);
856
+ border: 1px solid var(--brass-gold);
857
+ font-family: var(--font-serif);
858
+ }
859
+ .attKind.k-qc { background: var(--seal-red-bg); color: var(--seal-red); border-color: var(--seal-red); }
860
+ .attKind.k-dispatch { background: var(--amber-bg); color: var(--amber-ink); border-color: var(--amber-cognac); }
861
+ .attKind.k-submit { background: var(--green-bg); color: var(--green-ink); border-color: var(--green-emerald); }
862
+ .attKind.k-review { background: var(--blue-bg); color: var(--blue-ink); border-color: var(--blue-cobalt); }
863
+ .attKind.k-queue { background: var(--purple-bg); color: var(--purple-ink); border-color: var(--purple-damask); }
864
+ .attSrc { color: var(--ink-black); word-break: break-all; }
865
+ .attWhy { flex-basis: 100%; color: var(--amber-ink); font-size: 9px; line-height: 1.4; margin-top: 1px; font-style: italic; }
866
+ .attMore { font-size: 9px; color: var(--ink-sepia); margin-top: 2px; }
867
+
868
+ /* ── 8. 黄铜齿轮发条连线 (Burnished Horological Brass Wire Edges) ── */
869
+ .edges {
870
+ position: absolute;
871
+ inset: 0;
872
+ width: 100%;
873
+ height: 100%;
874
+ pointer-events: none;
875
+ z-index: 2;
876
+ overflow: visible;
877
+ }
878
+ .edges path {
879
+ fill: none;
880
+ stroke-linecap: round;
881
+ stroke-width: 1.5;
882
+ transition: opacity 0.14s ease, stroke-width 0.14s ease;
883
+ }
884
+ .edges path.flow {
885
+ stroke: #c99a32;
886
+ filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.4));
887
+ }
888
+ .edges path.ref {
889
+ stroke: var(--purple-damask);
890
+ stroke-dasharray: 4 3;
891
+ }
892
+ .edges.hide path { display: none; }
893
+
894
+ /* ── 9. 板底五块统一折叠架构 (Bottom 5 Cabinetry Drawers) ── */
895
+ .module.broken, .module.attConf, .module.drawer, .module.events, .module.overflow {
896
+ margin: 12px 22px 0;
897
+ background: var(--paper-card);
898
+ border: 1.5px solid var(--brass-gold);
899
+ border-radius: 5px;
900
+ padding: 10px 14px;
901
+ box-shadow: var(--shadow-card);
902
+ }
903
+ .module.overflow { padding-bottom: 10px; margin-bottom: 24px; }
904
+ .module .fold > summary > h2 { display: inline; font-size: 13.5px; margin: 0; font-weight: 800; font-family: var(--font-serif); }
905
+ .module.events .fold > summary > h2 { color: var(--purple-ink); }
906
+ .module.attConf .fold > summary > h2 { color: var(--seal-red-ink); }
907
+ .module.drawer .fold > summary > h2 { color: var(--ink-brown); }
908
+ .module.broken .fold > summary > h2 { color: var(--purple-ink); }
909
+ .module.overflow .fold > summary > h2 { color: var(--amber-ink); }
910
+
911
+ .fold > summary {
912
+ cursor: pointer;
913
+ list-style: none;
914
+ user-select: none;
915
+ font-size: 12.5px;
916
+ font-weight: 750;
917
+ display: flex;
918
+ align-items: center;
919
+ gap: 6px;
920
+ font-family: var(--font-serif);
921
+ }
922
+ .fold > summary::-webkit-details-marker { display: none; }
923
+ .fold > summary::before { content: '⬥'; color: var(--brass-gold); font-size: 9px; display: inline-block; transition: transform 0.12s ease; }
924
+ .fold[open] > summary::before { content: '▾'; font-size: 11px; }
925
+ .fold > summary:hover { color: #000000; }
926
+ .foldBody { margin-top: 5px; }
927
+ .attN { font-size: 9.5px; color: var(--ink-brown); font-weight: 750; font-family: var(--font-serif); }
928
+ .alertTag { font-size: 9.5px; color: var(--seal-red); font-weight: 800; }
929
+
930
+ .drawerBox > summary {
931
+ cursor: pointer;
932
+ font-size: 12px;
933
+ font-weight: 700;
934
+ color: var(--ink-brown);
935
+ list-style: none;
936
+ user-select: none;
937
+ padding: 2px 0;
938
+ font-family: var(--font-serif);
939
+ }
940
+ .drawerBox > summary::-webkit-details-marker { display: none; }
941
+ .drawerBox > summary::before { content: '⬥ '; color: var(--brass-gold); font-size: 8px; }
942
+ .drawerBox[open] > summary::before { content: '▾ '; font-size: 10px; }
943
+ .drawerBox > summary:hover { color: var(--ink-black); }
944
+ .module.attConf .drawerBox > summary { color: var(--seal-red); }
945
+
946
+ .confGroup { border-left: 3px solid var(--seal-red); padding-left: 7px; margin: 6px 0 0; }
947
+ .confKey { display: flex; gap: 7px; align-items: baseline; flex-wrap: wrap; margin-bottom: 2px; }
948
+ .confCode { font-size: 8.5px; text-transform: uppercase; letter-spacing: 0.4px; color: var(--seal-red); font-weight: 800; font-family: var(--font-mono); }
949
+ .confKeyText { font-size: 10px; color: var(--ink-brown); overflow-wrap: anywhere; min-width: 0; }
950
+ .confN { font-size: 9.5px; color: var(--ink-sepia); margin-left: auto; white-space: nowrap; font-family: var(--font-serif); }
951
+
952
+ .module { padding: 12px 22px 0; }
953
+ .module h2 { font-family: var(--font-serif); font-size: 13.5px; margin: 0 0 3px; font-weight: 800; }
954
+ .module.init h2 { color: var(--green-ink); }
955
+ .module.ledger h2 { color: var(--blue-ink); }
956
+ .module.broken h2 { color: var(--purple-ink); }
957
+ .module .hint { color: var(--ink-sepia); font-size: 10.5px; margin: 0 0 8px; max-width: 900px; line-height: 1.5; font-style: italic; }
958
+ .warnTxt { color: var(--amber-ink); }
959
+ .modList { display: flex; flex-wrap: wrap; gap: 7px; }
960
+ .modList .box { flex: 1 1 260px; max-width: 420px; }
961
+
962
+ /* ── 10. 台账清单 (Ledger List) ── */
963
+ .ledgerList { display: flex; flex-direction: column; gap: 2px; }
964
+ .ldg {
965
+ display: grid;
966
+ grid-template-columns: minmax(160px, 1fr) 84px 84px 180px;
967
+ gap: 8px;
968
+ align-items: center;
969
+ background: var(--paper-card);
970
+ border: 1px solid rgba(201, 154, 50, 0.5);
971
+ border-radius: 4px;
972
+ padding: 4px 8px;
973
+ font-size: 10.5px;
974
+ box-shadow: 0 1px 2px rgba(0,0,0,0.08);
975
+ }
976
+ .ldg.pending { border-color: var(--amber-cognac); background: var(--amber-bg); }
977
+ .ldgTitle { font-weight: 700; overflow-wrap: anywhere; word-break: normal; min-width: 0; color: var(--ink-black); font-family: var(--font-serif); }
978
+ .ldgRoot, .ldgCnt { color: var(--ink-sepia); }
979
+ .ldgTo { color: var(--blue-ink); text-align: right; font-weight: 700; font-family: var(--font-serif); }
980
+ .ldg.pending .ldgTo { color: var(--amber-ink); }
981
+ .ldg.suggest { background: #fdfaf3; border-color: rgba(201, 154, 50, 0.4); margin-left: 16px; }
982
+ .ldg.suggest .ldgTitle { color: var(--blue-ink); font-weight: 400; }
983
+ .module.drawer h2 { color: var(--ink-brown); font-size: 12.5px; }
984
+
985
+ /* ── 11. 事件流 (Events Stream) ── */
986
+ .events { margin-top: 10px; background: var(--paper-card); border: 1.5px solid var(--brass-gold); border-radius: 5px; padding: 9px 11px; box-shadow: var(--shadow-card); }
987
+ .events h2 { font-size: 13px; margin: 0 0 3px; color: var(--purple-ink); font-weight: 800; font-family: var(--font-serif); }
988
+ .events .hint.firstRound { color: var(--ink-sepia); border-left: 2px solid var(--brass-gold); padding-left: 6px; }
989
+ .evList { display: flex; flex-direction: column; gap: 3px; margin-top: 5px; }
990
+ .evRow {
991
+ background: var(--paper-card);
992
+ border: 1px solid rgba(201, 154, 50, 0.5);
993
+ border-radius: 4px;
994
+ padding: 5px 8px;
995
+ border-left: 4px solid var(--ink-sepia);
996
+ }
997
+ .evRow.org-fact { border-left-color: var(--ink-sepia); }
998
+ .evRow.org-declared { border-left-color: var(--blue-cobalt); }
999
+ .evRow.org-inferred { border-left-color: var(--amber-cognac); }
1000
+ .evRow.sev-high { background: var(--seal-red-bg); border-left-color: var(--seal-red); }
1001
+ .evRow.acked { opacity: 0.5; }
1002
+ .evHead { display: flex; gap: 5px; align-items: baseline; flex-wrap: wrap; font-size: 10.5px; }
1003
+ .evOrigin { font-size: 8.5px; font-weight: 750; border-radius: 3px; padding: 1px 4px; border: 1px solid; font-family: var(--font-serif); }
1004
+ .evOrigin.org-fact { background: #f1ebd8; color: var(--ink-sepia); border-color: rgba(201, 154, 50, 0.5); }
1005
+ .evOrigin.org-declared { background: var(--blue-bg); color: var(--blue-ink); border-color: var(--blue-cobalt); }
1006
+ .evOrigin.org-inferred { background: var(--amber-bg); color: var(--amber-ink); border-color: var(--amber-cognac); }
1007
+ .evType { font-weight: 750; color: var(--ink-black); font-family: var(--font-serif); }
1008
+ .evCount { color: var(--amber-ink); font-size: 9.5px; font-weight: 750; font-family: var(--font-serif); }
1009
+ .evBox { color: var(--ink-brown); font-size: 9.5px; }
1010
+ .evPath { color: var(--ink-sepia); font-size: 9.5px; word-break: break-all; margin-left: auto; font-family: var(--font-mono); }
1011
+ .evFact { font-size: 9.5px; color: var(--ink-brown); line-height: 1.5; margin-top: 2px; }
1012
+ .evSample { font-size: 9px; color: var(--ink-sepia); margin-left: 8px; line-height: 1.45; }
1013
+
1014
+ /* ── 12. 溢出区 (Overflow Box) ── */
1015
+ .overflow { padding: 12px 22px 42px; }
1016
+ .overflow h2 { font-size: 13.5px; margin: 0 0 5px; color: var(--amber-ink); font-weight: 800; font-family: var(--font-serif); }
1017
+ .hint { color: var(--ink-sepia); font-size: 10.5px; margin: 0 0 10px; max-width: 900px; line-height: 1.55; }
1018
+ .ovList { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 5px; }
1019
+ .ov {
1020
+ flex: 0 1 auto;
1021
+ max-width: 100%;
1022
+ background: var(--amber-bg);
1023
+ border: 1px solid var(--amber-cognac);
1024
+ border-radius: 4px;
1025
+ padding: 5px 8px;
1026
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
1027
+ }
1028
+ .ovPath { font-weight: 750; font-size: 11px; word-break: break-all; color: var(--ink-black); display: flex; align-items: center; gap: 4px; font-family: var(--font-mono); }
1029
+ .ovMeta { color: var(--amber-ink); font-size: 9.5px; font-weight: 700; margin-top: 1px; font-family: var(--font-serif); }
1030
+ .ovAbs { color: var(--ink-sepia); font-size: 9px; word-break: break-all; font-family: var(--font-mono); margin-top: 1px; }
1031
+ .ovSample { color: var(--ink-brown); font-size: 9.5px; margin-top: 3px; word-break: break-all; }
1032
+
1033
+ .ofBox { display: block; padding: 7px 9px; margin: 2px 0 7px; }
1034
+ .ofHead { display: flex; gap: 7px; align-items: baseline; margin-bottom: 4px; border-bottom: 1.5px solid var(--brass-gold); padding-bottom: 3px; }
1035
+ .ofTotal { color: var(--ink-black); font-size: 13.5px; font-weight: 800; font-family: var(--font-serif); }
1036
+ .ofSrc { margin-left: auto; color: var(--brass-dark); font-size: 9.5px; font-family: var(--font-serif); font-weight: 700; }
1037
+ .ofRoot { margin-bottom: 4px; }
1038
+ .ofRoot > .slotRowName { cursor: pointer; }
1039
+ .ofRoot > .slotRowName:hover { box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.85), 0 3px 7px rgba(0, 0, 0, 0.45); }
1040
+ .ofRoot > .slotRowName .srCnt { color: #4a2d0a; font-size: 11px; }
1041
+ .ofDetail { display: none; padding: 2px 0 4px 7px; border-left: 2.5px solid var(--brass-gold); margin: 3px 0 0 3px; }
1042
+ .ofRoot.open .ofDetail { display: block; }
1043
+ .ofSub { display: grid; grid-template-columns: auto 52px 1fr; gap: 7px; align-items: baseline; padding: 2px 0; font-size: 9.5px; font-family: var(--font-mono); }
1044
+ .ofSub .ofName { color: var(--ink-brown); font-weight: 600; }
1045
+ .ofSub .ofCnt { color: var(--ink-black); text-align: right; font-weight: 750; font-family: var(--font-serif); }
1046
+ .ofSub .ofSample { color: var(--ink-sepia); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1047
+ .ofSub.isEmpty .ofName, .ofSub.isEmpty .ofCnt { color: var(--ink-faint); }
1048
+ .ofSub.needsEye .ofName { color: var(--amber-ink); font-weight: 750; }
1049
+
1050
+ code {
1051
+ background: #f5eedb;
1052
+ border: 1px solid #dbcbb0;
1053
+ padding: 1px 4px;
1054
+ border-radius: 2px;
1055
+ font-size: 10.5px;
1056
+ color: #78350f;
1057
+ font-family: var(--font-mono);
1058
+ }
1059
+
1060
+ /* ═══ A1 · 视觉家具重构(覆盖层,不改 HTML)══════════════════════════
1061
+ 仪表盘 = 木匣里的珐琅表盘(不再是羊皮纸小卡)
1062
+ 仓头 = 铸造铜牌(把 A 的最大亮点铺到主体)
1063
+ 文件夹 = 三种实物:线装档案 / 带袋公文夹 / 未裁纸片
1064
+ 永不 translateY(SVG 走线)。永不 @media。
1065
+ ════════════════════════════════════════════════════════════════ */
1066
+
1067
+ /* 1. 仪表盘:暗木抽屉 + 珐琅数字,和下面的羊皮纸档案彻底分开 */
1068
+ .dash {
1069
+ background:
1070
+ repeating-linear-gradient(90deg, rgba(201,154,50,.04) 0 1px, transparent 1px 28px),
1071
+ linear-gradient(180deg, #241810 0%, #1a120c 100%);
1072
+ padding: 14px 22px 12px;
1073
+ }
1074
+ .tier { padding: 11px 0; }
1075
+ .dc {
1076
+ background: linear-gradient(180deg, #322216 0%, #1a110c 100%);
1077
+ border: 1px solid #8a6a2a;
1078
+ border-radius: 3px;
1079
+ padding: 8px 12px 7px;
1080
+ min-width: 126px;
1081
+ display: flex;
1082
+ flex-direction: column;
1083
+ gap: 1px;
1084
+ box-shadow:
1085
+ inset 0 1px 0 rgba(232, 200, 109, .35),
1086
+ inset 0 -1px 0 rgba(0,0,0,.55),
1087
+ 0 2px 5px rgba(0,0,0,.4);
1088
+ }
1089
+ .dc b { color: #f7eed8; font-weight: 700; }
1090
+ .dLab { color: #cbb89b; font-weight: 500; }
1091
+ .dSub { color: #8a7358; }
1092
+ .dc.zero { background: #16100b; }
1093
+ .dc.zero b { color: #7a6550; font-weight: 400; }
1094
+ .dc.lamp {
1095
+ background: linear-gradient(180deg, #4a1a1a 0%, #2a1010 100%);
1096
+ border-color: var(--seal-red);
1097
+ }
1098
+ .dc.lamp b { color: #fecaca; }
1099
+ .dc.red {
1100
+ background: linear-gradient(180deg, #3a1830 0%, #221018 100%);
1101
+ border-color: #a21caf;
1102
+ }
1103
+ .dc.red b { color: #f5d0fe; }
1104
+ .dc.redSoft {
1105
+ min-width: 86px;
1106
+ border-radius: 14px;
1107
+ padding: 6px 10px;
1108
+ background: #241810;
1109
+ }
1110
+ .dc.redSoft b { color: #f0abfc; font-size: 16px; }
1111
+ .dc.amber {
1112
+ background: linear-gradient(180deg, #3a2410 0%, #221408 100%);
1113
+ border-color: var(--amber-cognac);
1114
+ }
1115
+ .dc.amber b { color: #fde68a; }
1116
+ .dc.calm b { color: #f7eed8; }
1117
+
1118
+ /* 均衡器仍是象牙尺 —— 和珐琅表盘不是同一种物件 */
1119
+ .eq {
1120
+ background: var(--paper-card);
1121
+ border: 1.5px solid var(--brass-gold);
1122
+ border-radius: 2px;
1123
+ box-shadow: inset 0 1px 0 #fff, 0 2px 6px rgba(0,0,0,.35);
1124
+ }
1125
+ .eqHead b { color: var(--ink-black); }
1126
+
1127
+ /* 2. 仓头:整块铸造铜牌(A 的亮点铺到 root) */
1128
+ .rootHead {
1129
+ background: linear-gradient(135deg, #e6c875 0%, #aa7c11 48%, #d4af37 100%);
1130
+ border: 1.5px solid #6b4d13;
1131
+ border-top: 1.5px solid #f0d78a;
1132
+ border-radius: 3px;
1133
+ box-shadow: inset 0 1px 0 rgba(255,255,255,.7), 0 2px 6px rgba(0,0,0,.45);
1134
+ }
1135
+ .rootName {
1136
+ color: #2b1805;
1137
+ text-shadow: 0 1px 0 rgba(255,255,255,.5);
1138
+ font-weight: 700;
1139
+ }
1140
+ .rootSub { color: #4a2d0a; font-style: normal; opacity: 1; }
1141
+
1142
+ /* 3. 格子 = 更深的木槽,档案坐进去 */
1143
+ .cell {
1144
+ background: #120c08;
1145
+ box-shadow: inset 2px 2px 7px rgba(0,0,0,.7), inset -1px -1px 0 rgba(201,154,50,.12);
1146
+ padding: 10px;
1147
+ gap: 8px;
1148
+ }
1149
+
1150
+ /* 4. 默认档案:线装羊皮纸(左脊皮革 + 铜钉)。空卡去掉脊和钉。 */
1151
+ .box {
1152
+ border-radius: 2px;
1153
+ background-color: var(--paper-card);
1154
+ background-image: linear-gradient(90deg, #4a3222 0 6px, #c99a32 6px 7px, transparent 7px);
1155
+ padding: 8px 10px 8px 16px;
1156
+ }
1157
+ .box.isEmpty {
1158
+ background-image: none;
1159
+ background-color: #f1ebd8;
1160
+ border-style: dashed;
1161
+ border-radius: 0;
1162
+ padding: 8px 10px;
1163
+ box-shadow: none;
1164
+ }
1165
+ .box.isEmpty::after { display: none; }
1166
+
1167
+ /* 有子目录 = 更厚的卷宗 */
1168
+ .box:has(.bKids) {
1169
+ box-shadow:
1170
+ inset 0 1px 0 #ffffff,
1171
+ 0 1px 0 rgba(201,154,50,.4),
1172
+ 0 4px 10px rgba(10,5,2,.42);
1173
+ background-image: linear-gradient(90deg, #5a3a24 0 8px, #d4af37 8px 9px, transparent 9px);
1174
+ padding-left: 18px;
1175
+ }
1176
+
1177
+ /* 有挂靠 = 公文夹:底部布袋口袋 */
1178
+ .box:has(.attach) .attach {
1179
+ background: #f1ebd8;
1180
+ margin: 8px -6px -6px 0;
1181
+ padding: 7px 8px 6px;
1182
+ border-top: 1px dashed #c9a56a;
1183
+ box-shadow: inset 0 2px 3px rgba(90,60,20,.12);
1184
+ }
1185
+
1186
+ /* 卡住 = 火漆封印(取代右上铜钉) */
1187
+ .box.paused {
1188
+ background-color: #f6e6c8;
1189
+ background-image: linear-gradient(90deg, #5c3a18 0 6px, #c99a32 6px 7px, transparent 7px);
1190
+ border-left: 5px solid var(--amber-cognac);
1191
+ }
1192
+ .box.paused::after { display: none; }
1193
+ .box.paused::before {
1194
+ content: "";
1195
+ position: absolute;
1196
+ top: 7px;
1197
+ right: 8px;
1198
+ width: 11px;
1199
+ height: 11px;
1200
+ border-radius: 50%;
1201
+ background: radial-gradient(circle at 35% 30%, #e07a3a, #9a3412 70%);
1202
+ box-shadow: 0 1px 2px rgba(0,0,0,.4), inset 0 1px 0 rgba(255,255,255,.25);
1203
+ pointer-events: none;
1204
+ }
1205
+
1206
+ .box.promoted {
1207
+ border-left: 6px solid var(--purple-damask);
1208
+ background-image: linear-gradient(90deg, #4c2a5c 0 6px, #c084fc 6px 7px, transparent 7px);
1209
+ }
1210
+
1211
+ /* 子项 = 索引签,不是第三种药丸 */
1212
+ .kid {
1213
+ background: #fffdf6;
1214
+ border: 1px solid #dcc9a4;
1215
+ border-bottom-width: 2px;
1216
+ border-radius: 2px 2px 0 0;
1217
+ padding: 0 5px 1px;
1218
+ }
1219
+
1220
+ /* 门牌:打字机键,更方 */
1221
+ .bCode {
1222
+ border-radius: 2px;
1223
+ min-width: 2.2em;
1224
+ text-align: center;
1225
+ }
1226
+
1227
+ /* ═══ A1 r3 · 按标注改五处,不动四行珐琅表盘形状 ═══ */
1228
+
1229
+ /* 1. 托盘 / 均衡器 / 格子:白底 → 香槟色薄膜 */
1230
+ .tray,
1231
+ .eq {
1232
+ background:
1233
+ linear-gradient(165deg,
1234
+ rgba(255, 244, 220, 0.82) 0%,
1235
+ rgba(232, 200, 148, 0.68) 42%,
1236
+ rgba(244, 224, 184, 0.78) 100%);
1237
+ box-shadow:
1238
+ inset 0 1px 0 rgba(255, 252, 240, 0.55),
1239
+ inset 0 -1px 0 rgba(160, 120, 60, 0.18),
1240
+ 0 2px 10px rgba(0, 0, 0, 0.32);
1241
+ }
1242
+ .eqHead b { color: var(--ink-black); }
1243
+ .slot {
1244
+ background:
1245
+ linear-gradient(180deg, rgba(252, 236, 206, 0.92) 0%, rgba(228, 198, 150, 0.86) 100%);
1246
+ }
1247
+ .slot:hover {
1248
+ background: linear-gradient(180deg, rgba(255, 246, 224, 0.96) 0%, rgba(236, 210, 168, 0.9) 100%);
1249
+ }
1250
+ .slot.isEmpty,
1251
+ .slot.tone-dim {
1252
+ background: linear-gradient(180deg, rgba(236, 214, 176, 0.7) 0%, rgba(214, 184, 132, 0.62) 100%);
1253
+ }
1254
+ .trayRow {
1255
+ background: linear-gradient(180deg, rgba(252, 236, 206, 0.9) 0%, rgba(228, 198, 150, 0.84) 100%);
1256
+ }
1257
+
1258
+ /* 2. An agent or you:粉 → 紫 */
1259
+ .t2 .tierWho { color: #8b5cf6; }
1260
+
1261
+ /* 3. 色带:红水银 / 蓝水银(灰段用银汞,绿/紫段同族水银) */
1262
+ .eqBar {
1263
+ height: 14px;
1264
+ border-radius: 3px;
1265
+ overflow: hidden;
1266
+ background: #1a120c;
1267
+ border: 1px solid #5a3d12;
1268
+ box-shadow: inset 0 2px 4px rgba(0,0,0,.5);
1269
+ }
1270
+ .eqBar span {
1271
+ line-height: 14px;
1272
+ box-shadow:
1273
+ inset 0 1px 0 rgba(255,255,255,.4),
1274
+ inset 0 -1px 0 rgba(0,0,0,.35);
1275
+ }
1276
+ .s-open {
1277
+ background: linear-gradient(180deg, #ffd4cc 0%, #e07068 16%, #9a2c28 40%, #d06058 56%, #ffc0b8 74%, #6b1818 100%);
1278
+ color: #fff8f5;
1279
+ }
1280
+ .s-current,
1281
+ .s-work {
1282
+ background: linear-gradient(180deg, #d8e6f8 0%, #6a8ec8 16%, #2a4a88 40%, #5a7ab8 56%, #c0d4f0 74%, #1a3260 100%);
1283
+ color: #f4f8ff;
1284
+ }
1285
+ .s-attached,
1286
+ .s-init {
1287
+ background: linear-gradient(180deg, #d4f0dc 0%, #5aaa78 16%, #1e6a3c 40%, #4a9870 56%, #b8e0c8 74%, #164828 100%);
1288
+ color: #f4fff8;
1289
+ }
1290
+ .s-ledger {
1291
+ background: linear-gradient(180deg, #e8d8f8 0%, #9a72c8 16%, #5a2a88 40%, #7a58b0 56%, #d4c0f0 74%, #3a1860 100%);
1292
+ color: #faf5ff;
1293
+ }
1294
+ .s-closed {
1295
+ background: linear-gradient(180deg, #eef2f4 0%, #9aa8b0 16%, #5a666e 40%, #889098 56%, #d8dee2 74%, #3a4046 100%);
1296
+ color: #f8fafc;
1297
+ }
1298
+ .s-unmarked {
1299
+ background: linear-gradient(180deg, #ffe8c8 0%, #d4a04a 16%, #8a5a12 40%, #c49038 56%, #f0d090 74%, #5a3a0c 100%);
1300
+ color: #fffaf0;
1301
+ }
1302
+ .s-unread {
1303
+ background: linear-gradient(180deg, #e8ecee 0%, #a8b0b4 18%, #6a7278 50%, #c0c6ca 78%, #4a5054 100%);
1304
+ color: #f4f6f8;
1305
+ }
1306
+ .eqLeg i {
1307
+ box-shadow: inset 0 1px 0 rgba(255,255,255,.35), inset 0 -1px 0 rgba(0,0,0,.3);
1308
+ border-color: rgba(0,0,0,.25);
1309
+ }
1310
+
1311
+ /* 4. 148 / 2021 / 2083:小木片 */
1312
+ .dc.calm {
1313
+ background:
1314
+ repeating-linear-gradient(90deg, rgba(40, 18, 6, 0.16) 0 1px, transparent 1px 6px),
1315
+ repeating-linear-gradient(0deg, rgba(255, 200, 120, 0.07) 0 1px, transparent 1px 4px),
1316
+ linear-gradient(180deg, #8a5630 0%, #6b3e22 38%, #5a3218 72%, #4a2814 100%);
1317
+ border: 1px solid #3d2412;
1318
+ border-radius: 3px;
1319
+ box-shadow:
1320
+ inset 0 1px 0 rgba(255, 220, 170, 0.28),
1321
+ inset 0 -2px 0 rgba(0, 0, 0, 0.4),
1322
+ 0 2px 0 #2a160c,
1323
+ 0 5px 10px rgba(0, 0, 0, 0.4);
1324
+ }
1325
+ .dc.calm b { color: #f3e2c4; text-shadow: 0 1px 1px rgba(0,0,0,.45); }
1326
+ .dc.calm .dLab { color: #d4b890; }
1327
+ .dc.calm .dSub { color: #b08960; }
1328
+
1329
+ /* 5. 文件夹卡:立体拉大,不抬升 */
1330
+ .cell {
1331
+ box-shadow:
1332
+ inset 3px 3px 12px rgba(0, 0, 0, 0.82),
1333
+ inset -1px -1px 0 rgba(201, 154, 50, 0.12);
1334
+ }
1335
+ .box {
1336
+ box-shadow:
1337
+ inset 0 1px 0 rgba(255, 255, 255, 0.9),
1338
+ inset 0 -2px 0 rgba(80, 50, 10, 0.2),
1339
+ 0 2px 0 rgba(201, 154, 50, 0.45),
1340
+ 0 6px 0 #1a1008,
1341
+ 0 10px 16px rgba(10, 5, 2, 0.5),
1342
+ 0 22px 40px rgba(10, 5, 2, 0.55);
1343
+ }
1344
+ .box:has(.bKids) {
1345
+ box-shadow:
1346
+ inset 0 1px 0 #ffffff,
1347
+ inset 0 -2px 0 rgba(80, 50, 10, 0.22),
1348
+ 0 2px 0 rgba(201, 154, 50, 0.5),
1349
+ 0 7px 0 #1a1008,
1350
+ 0 12px 18px rgba(10, 5, 2, 0.52),
1351
+ 0 24px 44px rgba(10, 5, 2, 0.58);
1352
+ }
1353
+ .box:hover, .box:focus {
1354
+ box-shadow:
1355
+ inset 0 1px 0 #ffffff,
1356
+ 0 0 0 1.5px #dcb04d,
1357
+ 0 2px 0 rgba(201, 154, 50, 0.55),
1358
+ 0 7px 0 #1a1008,
1359
+ 0 14px 24px rgba(10, 5, 2, 0.55),
1360
+ 0 26px 48px rgba(10, 5, 2, 0.5);
1361
+ }
1362
+ .box.isEmpty {
1363
+ box-shadow: none;
1364
+ }
1365
+
1366
+ /* ═══ A1 r4 · Lane 皮革(深色左边已去掉) ═══ */
1367
+ .laneLabel {
1368
+ position: relative;
1369
+ background:
1370
+ repeating-linear-gradient(90deg, rgba(0,0,0,.14) 0 1px, transparent 1px 6px),
1371
+ repeating-linear-gradient(0deg, rgba(255, 210, 160, .07) 0 1px, transparent 1px 4px),
1372
+ linear-gradient(180deg, #6e432c 0%, #4a2c1a 40%, #3a2012 100%);
1373
+ border: 1px solid #c99a32;
1374
+ box-shadow:
1375
+ inset 0 1px 0 rgba(255, 220, 180, 0.2),
1376
+ inset 0 -2px 0 rgba(0, 0, 0, 0.4),
1377
+ 0 3px 8px rgba(0, 0, 0, 0.45);
1378
+ }
1379
+ .laneLabel.undeclared { border-style: dashed; }
1380
+ .laneId { color: #e8c9a0; }
1381
+ .laneTitle { color: #f3e2c4; }
1382
+ .laneSub { color: #c4a07a; }
1383
+
1384
+ /* ═══ A1 r5 · L 铜角 / 四角铜钉 / 卡偏棕 ═══ */
1385
+
1386
+ /* L 形铜角:用在 Lane + 148/2021/2083 木片 */
1387
+ .laneLabel::before,
1388
+ .dc.calm::before {
1389
+ content: "";
1390
+ position: absolute;
1391
+ inset: 5px;
1392
+ pointer-events: none;
1393
+ background-image:
1394
+ linear-gradient(#e8c86d, #e8c86d), linear-gradient(#e8c86d, #e8c86d),
1395
+ linear-gradient(#e8c86d, #e8c86d), linear-gradient(#e8c86d, #e8c86d),
1396
+ linear-gradient(#e8c86d, #e8c86d), linear-gradient(#e8c86d, #e8c86d),
1397
+ linear-gradient(#e8c86d, #e8c86d), linear-gradient(#e8c86d, #e8c86d);
1398
+ background-size:
1399
+ 14px 2px, 2px 14px,
1400
+ 14px 2px, 2px 14px,
1401
+ 14px 2px, 2px 14px,
1402
+ 14px 2px, 2px 14px;
1403
+ background-repeat: no-repeat;
1404
+ background-position:
1405
+ top left, top left,
1406
+ top right, top right,
1407
+ bottom left, bottom left,
1408
+ bottom right, bottom right;
1409
+ }
1410
+ .dc.calm {
1411
+ position: relative;
1412
+ border: 1px solid #c99a32;
1413
+ }
1414
+
1415
+ /* 仪表盘芯片:四角铜钉(Only you / agent / main agent) */
1416
+ .dc.lamp,
1417
+ .dc.red,
1418
+ .dc.redSoft,
1419
+ .dc.amber {
1420
+ background-image:
1421
+ radial-gradient(circle at 8px 8px, #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px),
1422
+ radial-gradient(circle at calc(100% - 8px) 8px, #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px),
1423
+ radial-gradient(circle at 8px calc(100% - 8px), #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px),
1424
+ radial-gradient(circle at calc(100% - 8px) calc(100% - 8px), #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px);
1425
+ }
1426
+ .dc.lamp {
1427
+ background-color: #3a1414;
1428
+ background-image:
1429
+ radial-gradient(circle at 8px 8px, #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px),
1430
+ radial-gradient(circle at calc(100% - 8px) 8px, #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px),
1431
+ radial-gradient(circle at 8px calc(100% - 8px), #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px),
1432
+ radial-gradient(circle at calc(100% - 8px) calc(100% - 8px), #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px),
1433
+ linear-gradient(180deg, #4a1a1a 0%, #2a1010 100%);
1434
+ }
1435
+ .dc.red {
1436
+ background-color: #2e1428;
1437
+ background-image:
1438
+ radial-gradient(circle at 8px 8px, #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px),
1439
+ radial-gradient(circle at calc(100% - 8px) 8px, #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px),
1440
+ radial-gradient(circle at 8px calc(100% - 8px), #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px),
1441
+ radial-gradient(circle at calc(100% - 8px) calc(100% - 8px), #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px),
1442
+ linear-gradient(180deg, #3a1830 0%, #221018 100%);
1443
+ }
1444
+ .dc.redSoft {
1445
+ background-color: #241810;
1446
+ background-image:
1447
+ radial-gradient(circle at 8px 8px, #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px),
1448
+ radial-gradient(circle at calc(100% - 8px) 8px, #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px),
1449
+ radial-gradient(circle at 8px calc(100% - 8px), #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px),
1450
+ radial-gradient(circle at calc(100% - 8px) calc(100% - 8px), #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px);
1451
+ }
1452
+ .dc.amber {
1453
+ background-color: #2a1a0c;
1454
+ background-image:
1455
+ radial-gradient(circle at 8px 8px, #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px),
1456
+ radial-gradient(circle at calc(100% - 8px) 8px, #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px),
1457
+ radial-gradient(circle at 8px calc(100% - 8px), #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px),
1458
+ radial-gradient(circle at calc(100% - 8px) calc(100% - 8px), #f5e0a0 0 1.15px, #c99a32 1.15px 1.9px, #6b4d13 1.9px 2.35px, transparent 2.45px),
1459
+ linear-gradient(180deg, #3a2410 0%, #221408 100%);
1460
+ }
1461
+
1462
+ /* 三档色:白卡 = 截图奶油;本来就是这色的卡再偏棕;空卡再暗 */
1463
+ .tray,
1464
+ .eq {
1465
+ background: #f4ead6;
1466
+ }
1467
+ .slot {
1468
+ background: #f4ead6;
1469
+ }
1470
+ .slot:hover {
1471
+ background: #f7f0e0;
1472
+ }
1473
+ .slot.isEmpty,
1474
+ .slot.tone-dim {
1475
+ background: #e8dcc4;
1476
+ }
1477
+ .trayRow {
1478
+ background: #f4ead6;
1479
+ }
1480
+
1481
+ /* 板底四块折叠:奶油底 + 铜边 + L 铜角,和上面托盘同一套 */
1482
+ .module.attConf,
1483
+ .module.drawer,
1484
+ .module.events,
1485
+ .module.overflow {
1486
+ position: relative;
1487
+ background: #f4ead6;
1488
+ border: 1px solid #c99a32;
1489
+ border-radius: 3px;
1490
+ box-shadow:
1491
+ inset 0 1px 0 rgba(255, 252, 240, 0.55),
1492
+ 0 3px 10px rgba(0, 0, 0, 0.32);
1493
+ }
1494
+ .module.overflow { padding: 10px 14px 12px; margin-bottom: 24px; }
1495
+ .events {
1496
+ background: #f4ead6;
1497
+ border: 1px solid #c99a32;
1498
+ box-shadow: none;
1499
+ }
1500
+ .module.attConf::before,
1501
+ .module.drawer::before,
1502
+ .module.events::before,
1503
+ .module.overflow::before {
1504
+ content: "";
1505
+ position: absolute;
1506
+ inset: 5px;
1507
+ pointer-events: none;
1508
+ background-image:
1509
+ linear-gradient(#e8c86d, #e8c86d), linear-gradient(#e8c86d, #e8c86d),
1510
+ linear-gradient(#e8c86d, #e8c86d), linear-gradient(#e8c86d, #e8c86d),
1511
+ linear-gradient(#e8c86d, #e8c86d), linear-gradient(#e8c86d, #e8c86d),
1512
+ linear-gradient(#e8c86d, #e8c86d), linear-gradient(#e8c86d, #e8c86d);
1513
+ background-size:
1514
+ 14px 2px, 2px 14px,
1515
+ 14px 2px, 2px 14px,
1516
+ 14px 2px, 2px 14px,
1517
+ 14px 2px, 2px 14px;
1518
+ background-repeat: no-repeat;
1519
+ background-position:
1520
+ top left, top left,
1521
+ top right, top right,
1522
+ bottom left, bottom left,
1523
+ bottom right, bottom right;
1524
+ }
1525
+ .ldg,
1526
+ .evRow {
1527
+ background: #f4ead6;
1528
+ border: 1px solid rgba(201, 154, 50, 0.55);
1529
+ }
1530
+ .ldg.suggest { background: #e8dcc4; }
1531
+ .ov {
1532
+ background: #f0e2c4;
1533
+ border: 1px solid #c99a32;
1534
+ }
1535
+ .fold > summary:hover { color: var(--ink-black); }
1536
+
1537
+
1538
+ .box {
1539
+ background-color: #e5d0a8;
1540
+ }
1541
+ .box:has(.bKids) {
1542
+ background-color: #e5d0a8;
1543
+ }
1544
+ .box.paused {
1545
+ background-color: #dcc49a;
1546
+ }
1547
+ .box.isEmpty {
1548
+ background-color: #c5ae80;
1549
+ background-image: none;
1550
+ }
1551
+ .box:has(.attach) .attach {
1552
+ background: #d8c49a;
1553
+ }
1554
+ .kid {
1555
+ background: #ead9b4;
1556
+ border-color: #c4ae80;
1557
+ }