coding-agent-harness 1.0.2 → 1.0.4

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 (177) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/CONTRIBUTING.md +98 -0
  3. package/README.md +211 -86
  4. package/README.zh-CN.md +54 -34
  5. package/SKILL.md +25 -18
  6. package/docs-release/README.md +9 -5
  7. package/docs-release/architecture/overview.md +17 -5
  8. package/docs-release/architecture/overview.zh-CN.md +9 -5
  9. package/docs-release/assets/dashboard-overview.png +0 -0
  10. package/docs-release/guides/agent-installation.en-US.md +31 -8
  11. package/docs-release/guides/agent-installation.md +34 -9
  12. package/docs-release/guides/contributing.md +100 -0
  13. package/docs-release/guides/contributing.zh-CN.md +99 -0
  14. package/docs-release/guides/document-audience-and-surfaces.en-US.md +3 -2
  15. package/docs-release/guides/document-audience-and-surfaces.md +3 -2
  16. package/docs-release/guides/full-legacy-migration-subagent-strategy.md +2 -2
  17. package/docs-release/guides/full-legacy-migration-subagent-strategy.zh-CN.md +2 -2
  18. package/docs-release/guides/legacy-migration-agent-prompt.md +0 -11
  19. package/docs-release/guides/legacy-migration-agent-prompt.zh-CN.md +0 -11
  20. package/docs-release/guides/migration-playbook.en-US.md +14 -15
  21. package/docs-release/guides/migration-playbook.md +14 -15
  22. package/docs-release/guides/parent-control-repository-pattern.en-US.md +7 -5
  23. package/docs-release/guides/parent-control-repository-pattern.md +7 -5
  24. package/docs-release/guides/preset-development.md +214 -0
  25. package/docs-release/guides/repository-operating-models.en-US.md +5 -4
  26. package/docs-release/guides/repository-operating-models.md +5 -4
  27. package/docs-release/guides/task-state-machine.en-US.md +207 -0
  28. package/docs-release/guides/task-state-machine.md +214 -0
  29. package/docs-release/intl/en-US.md +1 -1
  30. package/docs-release/intl/zh-CN.md +1 -1
  31. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/findings.md +7 -0
  32. package/package.json +8 -3
  33. package/presets/legacy-migration/checks/preset-check.mjs +3 -0
  34. package/presets/legacy-migration/preset.yaml +134 -0
  35. package/presets/legacy-migration/scripts/plan-work-queue.mjs +4 -0
  36. package/presets/legacy-migration/scripts/scaffold-task-contracts.mjs +4 -0
  37. package/presets/legacy-migration/templates/execution_strategy.append.md +18 -0
  38. package/presets/legacy-migration/templates/findings.seed.md +17 -0
  39. package/presets/legacy-migration/templates/review.seed.md +12 -0
  40. package/presets/legacy-migration/templates/task_plan.append.md +9 -0
  41. package/presets/legacy-migration/templates/visual_map.append.md +12 -0
  42. package/presets/legacy-migration/workbench/dashboard-panels.yaml +2 -0
  43. package/presets/legacy-migration/workbench/migration-queue.schema.json +23 -0
  44. package/presets/lesson-sedimentation/preset.yaml +23 -0
  45. package/presets/lesson-sedimentation/templates/prompt.md +23 -0
  46. package/presets/module/preset.yaml +25 -0
  47. package/presets/module/templates/execution_strategy.append.md +8 -0
  48. package/presets/module/templates/task_plan.append.md +17 -0
  49. package/presets/standard-task/preset.yaml +31 -0
  50. package/presets/standard-task/templates/task_plan.append.md +7 -0
  51. package/references/adversarial-review-standard.md +2 -2
  52. package/references/agents-md-pattern.md +2 -2
  53. package/references/delivery-operating-model-standard.md +3 -3
  54. package/references/docs-directory-standard.md +6 -7
  55. package/references/harness-ledger.md +53 -96
  56. package/references/lessons-governance.md +88 -93
  57. package/references/module-parallel-standard.md +14 -14
  58. package/references/planning-loop.md +12 -6
  59. package/references/pull-request-standard.md +118 -0
  60. package/references/repo-governance-standard.md +11 -2
  61. package/references/review-routing-standard.md +7 -1
  62. package/references/ssot-governance.md +67 -59
  63. package/references/taskr-gap-analysis.md +600 -0
  64. package/references/walkthrough-closeout.md +7 -7
  65. package/scripts/check-harness.mjs +40 -301
  66. package/scripts/commands/dashboard-command.mjs +67 -0
  67. package/scripts/commands/migration-command.mjs +96 -0
  68. package/scripts/commands/preset-command.mjs +73 -0
  69. package/scripts/commands/task-command.mjs +327 -0
  70. package/scripts/harness.mjs +55 -260
  71. package/scripts/lib/capability-registry.mjs +66 -8
  72. package/scripts/lib/check-module-parallel.mjs +237 -0
  73. package/scripts/lib/check-profiles.mjs +61 -153
  74. package/scripts/lib/check-task-contracts.mjs +47 -0
  75. package/scripts/lib/core-shared.mjs +10 -0
  76. package/scripts/lib/dashboard-data.mjs +29 -6
  77. package/scripts/lib/dashboard-workbench.mjs +52 -12
  78. package/scripts/lib/dashboard-writer.mjs +14 -2
  79. package/scripts/lib/git-status-summary.mjs +46 -0
  80. package/scripts/lib/governance-index-generator.mjs +174 -0
  81. package/scripts/lib/governance-sync.mjs +514 -0
  82. package/scripts/lib/governance-table-boundary.mjs +175 -0
  83. package/scripts/lib/harness-core.mjs +5 -0
  84. package/scripts/lib/lesson-maintenance.mjs +36 -29
  85. package/scripts/lib/migration-support.mjs +1 -1
  86. package/scripts/lib/preset-audit-contracts.mjs +37 -0
  87. package/scripts/lib/preset-engine.mjs +497 -0
  88. package/scripts/lib/preset-registry.mjs +627 -0
  89. package/scripts/lib/preset-resource-contracts.mjs +83 -0
  90. package/scripts/lib/review-confirm-git-gate.mjs +248 -0
  91. package/scripts/lib/status-dashboard-renderer.mjs +102 -0
  92. package/scripts/lib/subagent-authorization-audit.mjs +196 -0
  93. package/scripts/lib/task-completion-consistency.mjs +16 -0
  94. package/scripts/lib/task-index.mjs +93 -0
  95. package/scripts/lib/task-lesson-candidates.mjs +242 -0
  96. package/scripts/lib/task-lesson-sedimentation.mjs +326 -0
  97. package/scripts/lib/task-lifecycle/review-confirm.mjs +101 -0
  98. package/scripts/lib/task-lifecycle/review-gates.mjs +70 -0
  99. package/scripts/lib/task-lifecycle/text-utils.mjs +24 -0
  100. package/scripts/lib/task-lifecycle.mjs +297 -403
  101. package/scripts/lib/task-review-model.mjs +469 -0
  102. package/scripts/lib/task-scanner.mjs +130 -236
  103. package/scripts/lib/task-tombstone-commands.mjs +140 -0
  104. package/scripts/postinstall.mjs +14 -0
  105. package/skills/preset-creator/SKILL.md +179 -0
  106. package/skills/preset-creator/references/complex-task-skeleton/README.md +31 -0
  107. package/skills/preset-creator/references/complex-task-skeleton/artifacts/INDEX.md +12 -0
  108. package/skills/preset-creator/references/complex-task-skeleton/brief.md +32 -0
  109. package/skills/preset-creator/references/complex-task-skeleton/execution_strategy.md +71 -0
  110. package/skills/preset-creator/references/complex-task-skeleton/findings.md +24 -0
  111. package/skills/preset-creator/references/complex-task-skeleton/lesson_candidates.md +70 -0
  112. package/skills/preset-creator/references/complex-task-skeleton/long-running-task-contract.md +76 -0
  113. package/skills/preset-creator/references/complex-task-skeleton/progress.md +33 -0
  114. package/skills/preset-creator/references/complex-task-skeleton/references/INDEX.md +13 -0
  115. package/skills/preset-creator/references/complex-task-skeleton/review.md +107 -0
  116. package/skills/preset-creator/references/complex-task-skeleton/task_plan.md +111 -0
  117. package/skills/preset-creator/references/complex-task-skeleton/visual_map.md +50 -0
  118. package/skills/preset-creator/references/preset-package-skeleton.md +296 -0
  119. package/templates/AGENTS.md.template +19 -15
  120. package/templates/dashboard/assets/app-src/00-state.js +1 -0
  121. package/templates/dashboard/assets/app-src/10-router.js +2 -1
  122. package/templates/dashboard/assets/app-src/20-overview.js +11 -5
  123. package/templates/dashboard/assets/app-src/30-tasks.js +92 -246
  124. package/templates/dashboard/assets/app-src/35-task-detail.js +246 -0
  125. package/templates/dashboard/assets/app-src/45-review.js +241 -22
  126. package/templates/dashboard/assets/app-src/50-migration.js +24 -10
  127. package/templates/dashboard/assets/app-src/90-bindings.js +171 -29
  128. package/templates/dashboard/assets/app.css +698 -156
  129. package/templates/dashboard/assets/app.css.manifest.json +9 -0
  130. package/templates/dashboard/assets/app.js +662 -91
  131. package/templates/dashboard/assets/app.manifest.json +1 -0
  132. package/templates/dashboard/assets/css-src/00-foundation.css +342 -0
  133. package/templates/dashboard/assets/css-src/10-panels-flow.css +236 -0
  134. package/templates/dashboard/assets/css-src/20-briefs-controls.css +398 -0
  135. package/templates/dashboard/assets/css-src/30-task-index.css +739 -0
  136. package/templates/dashboard/assets/css-src/35-review-workspace.css +507 -0
  137. package/templates/dashboard/assets/css-src/40-detail-modules-migration.css +427 -0
  138. package/templates/dashboard/assets/css-src/50-responsive-overrides.css +551 -0
  139. package/templates/dashboard/assets/i18n.js +123 -21
  140. package/templates/ledger/Harness-Ledger.md +13 -25
  141. package/templates/lessons/lesson-arch-process-change.md +1 -1
  142. package/templates/lessons/lesson-new-doc.md +1 -1
  143. package/templates/lessons/lesson-ref-change.md +1 -1
  144. package/templates/planning/execution_strategy.md +31 -0
  145. package/templates/planning/lesson_candidates.md +18 -6
  146. package/templates/planning/optional/artifacts/INDEX.md +3 -3
  147. package/templates/planning/optional/references/INDEX.md +3 -3
  148. package/templates/planning/review.md +59 -0
  149. package/templates/planning/task_plan.md +36 -13
  150. package/templates/reference/execution-workflow-standard.md +4 -3
  151. package/templates/reference/pull-request-standard.md +80 -0
  152. package/templates/reference/repo-governance-standard.md +7 -6
  153. package/templates/reference/review-routing-standard.md +6 -0
  154. package/templates/reference/walkthrough-standard.md +2 -1
  155. package/templates/verifier/verifier-output.md +1 -1
  156. package/templates-zh-CN/AGENTS.md.template +20 -16
  157. package/templates-zh-CN/ledger/Harness-Ledger.md +17 -40
  158. package/templates-zh-CN/planning/execution_strategy.md +30 -0
  159. package/templates-zh-CN/planning/lesson_candidates.md +18 -6
  160. package/templates-zh-CN/planning/review.md +59 -1
  161. package/templates-zh-CN/planning/task_plan.md +30 -10
  162. package/templates-zh-CN/reference/adversarial-review-standard.md +1 -1
  163. package/templates-zh-CN/reference/docs-library-standard.md +1 -1
  164. package/templates-zh-CN/reference/execution-workflow-standard.md +4 -3
  165. package/templates-zh-CN/reference/harness-ledger-standard.md +2 -2
  166. package/templates-zh-CN/reference/pull-request-standard.md +106 -0
  167. package/templates-zh-CN/reference/repo-governance-standard.md +4 -3
  168. package/templates-zh-CN/reference/review-routing-standard.md +8 -1
  169. package/templates-zh-CN/reference/walkthrough-standard.md +3 -2
  170. package/templates-zh-CN/walkthrough/Closeout-SSoT.md +1 -1
  171. package/docs-release/assets/dashboard-overview-en.png +0 -0
  172. package/scripts/smoke-dashboard.mjs +0 -92
  173. package/scripts/test-harness.mjs +0 -1395
  174. package/templates/ssot/Feature-SSoT.md +0 -43
  175. package/templates/ssot/Lessons-SSoT.md +0 -44
  176. package/templates-zh-CN/ssot/Feature-SSoT.md +0 -49
  177. package/templates-zh-CN/ssot/Lessons-SSoT.md +0 -49
@@ -0,0 +1,551 @@
1
+ /* Mobile Responsiveness Rules */
2
+ @media (max-width: 920px) {
3
+ .hero {
4
+ flex-direction: column;
5
+ align-items: flex-start;
6
+ }
7
+
8
+ .metrics-grid,
9
+ .detail-grid,
10
+ .health-panel {
11
+ grid-template-columns: 1fr;
12
+ }
13
+
14
+ .hero-actions {
15
+ justify-content: flex-start;
16
+ width: 100%;
17
+ }
18
+
19
+ .task-row {
20
+ grid-template-columns: 1fr;
21
+ padding: 16px;
22
+ gap: 8px;
23
+ }
24
+
25
+ .task-row-head {
26
+ display: none;
27
+ }
28
+
29
+ .task-row > span:not(:first-child)::before {
30
+ content: attr(data-label) ": ";
31
+ display: inline-block;
32
+ color: var(--muted);
33
+ font-size: 12px;
34
+ font-weight: 600;
35
+ margin-right: 8px;
36
+ min-width: 90px;
37
+ }
38
+
39
+ .index-toolbar {
40
+ grid-template-columns: 1fr;
41
+ }
42
+
43
+ /* Card rows collapse on mobile */
44
+ .task-row-card {
45
+ grid-template-columns: 4px 1fr;
46
+ gap: 8px;
47
+ padding: 12px 16px 12px 0;
48
+ }
49
+ .task-row-card .row-status,
50
+ .task-row-card .row-progress,
51
+ .task-row-card .row-brief {
52
+ grid-column: 2;
53
+ }
54
+ .task-row-card .row-progress {
55
+ max-width: 200px;
56
+ }
57
+
58
+ .task-stats-bar {
59
+ gap: 8px;
60
+ }
61
+ .stat-chip {
62
+ min-width: 56px;
63
+ padding: 6px 12px;
64
+ }
65
+ .stat-chip.completion {
66
+ min-width: 140px;
67
+ }
68
+
69
+ .warning-row {
70
+ grid-template-columns: 1fr;
71
+ gap: 8px;
72
+ padding: 16px;
73
+ }
74
+
75
+ .detail-side {
76
+ position: static;
77
+ }
78
+ }
79
+
80
+ /* Slide-over Drawer Component */
81
+ .drawer-overlay {
82
+ position: fixed;
83
+ top: 0;
84
+ left: 0;
85
+ width: 100%;
86
+ height: 100%;
87
+ background: rgba(0, 0, 0, 0.45);
88
+ backdrop-filter: blur(4px);
89
+ z-index: 1000;
90
+ opacity: 0;
91
+ pointer-events: none;
92
+ transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
93
+ }
94
+ .drawer-overlay.active {
95
+ opacity: 1;
96
+ pointer-events: auto;
97
+ }
98
+
99
+ .task-drawer {
100
+ position: fixed;
101
+ top: 0;
102
+ right: 0;
103
+ width: 65vw;
104
+ max-width: 100%;
105
+ height: 100%;
106
+ background: var(--paper);
107
+ border-left: 1px solid var(--line);
108
+ box-shadow: -8px 0 32px rgba(0, 0, 0, 0.25);
109
+ z-index: 1001;
110
+ display: flex;
111
+ flex-direction: column;
112
+ transform: translateX(105%);
113
+ transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1);
114
+ }
115
+ .task-drawer.active {
116
+ transform: translateX(0);
117
+ }
118
+ @media (max-width: 768px) {
119
+ .task-drawer {
120
+ width: 100%;
121
+ }
122
+ }
123
+
124
+ .task-drawer-header {
125
+ padding: 20px 24px;
126
+ border-bottom: 1px solid var(--line);
127
+ display: flex;
128
+ justify-content: space-between;
129
+ align-items: center;
130
+ background: var(--paper-2);
131
+ }
132
+ .task-drawer-header h2 {
133
+ font-size: 18px;
134
+ font-weight: 800;
135
+ margin: 0;
136
+ letter-spacing: -0.01em;
137
+ }
138
+ .task-drawer-header button.btn-close {
139
+ background: none;
140
+ border: none;
141
+ font-size: 24px;
142
+ font-weight: 300;
143
+ color: var(--muted);
144
+ cursor: pointer;
145
+ padding: 4px 10px;
146
+ border-radius: 6px;
147
+ transition: all 0.2s ease;
148
+ }
149
+ .task-drawer-header button.btn-close:hover {
150
+ background: var(--line);
151
+ color: var(--ink);
152
+ }
153
+
154
+ .task-drawer-body {
155
+ flex: 1;
156
+ overflow-y: auto;
157
+ padding: 24px;
158
+ }
159
+
160
+ .drawer-task-summary {
161
+ display: flex;
162
+ justify-content: space-between;
163
+ align-items: center;
164
+ gap: 12px;
165
+ margin-bottom: 18px;
166
+ background: var(--paper-2);
167
+ border: 1px solid var(--line);
168
+ padding: 12px 14px;
169
+ border-radius: 8px;
170
+ }
171
+
172
+ .drawer-task-summary span {
173
+ display: block;
174
+ margin-bottom: 3px;
175
+ color: var(--muted);
176
+ font-size: 11px;
177
+ font-weight: 800;
178
+ text-transform: uppercase;
179
+ }
180
+
181
+ .drawer-task-summary strong {
182
+ display: block;
183
+ font-size: 22px;
184
+ font-weight: 850;
185
+ color: var(--accent);
186
+ line-height: 1;
187
+ }
188
+
189
+ /* Compact brief card teaser styles */
190
+ .brief-teaser {
191
+ font-size: 13px;
192
+ color: var(--muted);
193
+ line-height: 1.5;
194
+ margin: 0 0 14px;
195
+ display: -webkit-box;
196
+ -webkit-line-clamp: 3;
197
+ -webkit-box-orient: vertical;
198
+ overflow: hidden;
199
+ text-overflow: ellipsis;
200
+ }
201
+ .card-actions {
202
+ display: flex;
203
+ flex-wrap: wrap;
204
+ align-items: center;
205
+ gap: 10px;
206
+ margin-top: auto;
207
+ }
208
+ .btn-drawer-trigger {
209
+ padding: 6px 14px;
210
+ background: var(--paper-2);
211
+ border: 1px solid var(--line);
212
+ border-radius: 6px;
213
+ font-size: 12px;
214
+ font-weight: 700;
215
+ color: var(--ink);
216
+ cursor: pointer;
217
+ transition: all 0.2s ease;
218
+ }
219
+ .btn-drawer-trigger:hover {
220
+ background: var(--accent);
221
+ color: var(--paper);
222
+ border-color: var(--accent);
223
+ }
224
+
225
+ /* Compact capsules for module list tasks */
226
+ .module-task-row {
227
+ display: flex;
228
+ justify-content: space-between;
229
+ align-items: center;
230
+ padding: 10px 14px;
231
+ background: var(--paper-2);
232
+ border: 1px solid var(--line);
233
+ border-radius: 8px;
234
+ margin-bottom: 8px;
235
+ text-decoration: none;
236
+ transition: all 0.2s ease;
237
+ }
238
+ .module-task-row:hover {
239
+ border-color: var(--accent);
240
+ transform: translateX(3px);
241
+ }
242
+ .module-task-left {
243
+ display: flex;
244
+ align-items: center;
245
+ gap: 8px;
246
+ min-width: 0;
247
+ }
248
+ .module-task-dot {
249
+ width: 8px;
250
+ height: 8px;
251
+ border-radius: 50%;
252
+ flex-shrink: 0;
253
+ }
254
+ .module-task-dot.state-pass { background: #4caf50; }
255
+ .module-task-dot.state-warn { background: #ff9800; }
256
+ .module-task-dot.state-fail { background: #f44336; }
257
+
258
+ .module-task-title {
259
+ font-size: 13px;
260
+ font-weight: 600;
261
+ color: var(--ink);
262
+ white-space: nowrap;
263
+ overflow: hidden;
264
+ text-overflow: ellipsis;
265
+ }
266
+ .module-task-pct {
267
+ font-family: var(--font-mono);
268
+ font-size: 12px;
269
+ color: var(--accent);
270
+ font-weight: 700;
271
+ flex-shrink: 0;
272
+ margin-left: 8px;
273
+ }
274
+
275
+ /* Inline card pagination controls */
276
+ .module-pager {
277
+ display: flex;
278
+ justify-content: space-between;
279
+ align-items: center;
280
+ margin-top: 12px;
281
+ padding: 6px 12px;
282
+ background: var(--paper-2);
283
+ border: 1px solid var(--line);
284
+ border-radius: 8px;
285
+ }
286
+ .module-pager button {
287
+ background: var(--paper);
288
+ border: 1px solid var(--line);
289
+ color: var(--ink);
290
+ padding: 4px 10px;
291
+ border-radius: 6px;
292
+ font-size: 11px;
293
+ font-weight: 700;
294
+ cursor: pointer;
295
+ transition: all 0.15s ease;
296
+ }
297
+ .module-pager button:hover:not(:disabled) {
298
+ background: var(--accent);
299
+ color: var(--paper);
300
+ border-color: var(--accent);
301
+ }
302
+ .module-pager button:disabled {
303
+ opacity: 0.4;
304
+ cursor: not-allowed;
305
+ }
306
+ .module-pager span {
307
+ font-size: 11px;
308
+ font-weight: 800;
309
+ color: var(--muted);
310
+ }
311
+
312
+ /* Clickable lessons in sidebar */
313
+ .lesson-panel .lesson {
314
+ padding: 10px 14px;
315
+ background: var(--paper-2);
316
+ border: 1px solid var(--line);
317
+ border-radius: 8px;
318
+ margin-bottom: 8px;
319
+ cursor: pointer;
320
+ transition: all 0.2s ease;
321
+ }
322
+ .lesson-panel .lesson:hover {
323
+ border-color: var(--accent);
324
+ transform: translateX(3px);
325
+ }
326
+
327
+ /* SSoT Ledger Visual Panel */
328
+ .ledger-panel {
329
+ background: var(--paper-2);
330
+ border: 1px solid var(--line);
331
+ border-radius: 12px;
332
+ padding: 16px;
333
+ margin-top: 16px;
334
+ }
335
+ .ledger-panel h2 {
336
+ font-size: 14px;
337
+ font-weight: 800;
338
+ color: var(--ink);
339
+ margin: 0 0 12px;
340
+ }
341
+ .ledger-split-bar {
342
+ display: flex;
343
+ height: 8px;
344
+ border-radius: 4px;
345
+ overflow: hidden;
346
+ background: var(--line);
347
+ margin-bottom: 8px;
348
+ }
349
+ .ledger-split-segment {
350
+ height: 100%;
351
+ }
352
+ .ledger-split-segment.closed { background: #4caf50; }
353
+ .ledger-split-segment.open { background: #ff9800; }
354
+ .ledger-split-segment.blocked { background: #f44336; }
355
+
356
+ .ledger-split-legend {
357
+ display: flex;
358
+ justify-content: space-between;
359
+ font-size: 11px;
360
+ color: var(--muted);
361
+ font-weight: 600;
362
+ margin-bottom: 16px;
363
+ }
364
+ .ledger-split-legend-item {
365
+ display: flex;
366
+ align-items: center;
367
+ gap: 4px;
368
+ }
369
+ .ledger-split-legend-dot {
370
+ width: 6px;
371
+ height: 6px;
372
+ border-radius: 50%;
373
+ }
374
+ .ledger-split-legend-dot.closed { background: #4caf50; }
375
+ .ledger-split-legend-dot.open { background: #ff9800; }
376
+ .ledger-split-legend-dot.blocked { background: #f44336; }
377
+
378
+ .ledger-gauge-row {
379
+ display: grid;
380
+ grid-template-columns: 1fr 1fr;
381
+ gap: 12px;
382
+ }
383
+ .ledger-gauge-card {
384
+ background: var(--paper);
385
+ border: 1px solid var(--line);
386
+ border-radius: 8px;
387
+ padding: 10px;
388
+ text-align: center;
389
+ }
390
+ .ledger-gauge-card span {
391
+ display: block;
392
+ font-size: 9px;
393
+ font-weight: 800;
394
+ color: var(--muted);
395
+ text-transform: uppercase;
396
+ margin-bottom: 4px;
397
+ }
398
+ .ledger-gauge-card strong {
399
+ font-size: 16px;
400
+ font-weight: 800;
401
+ color: var(--accent);
402
+ }
403
+
404
+ /* Scroll containment for total overview cards */
405
+ .warning-workbench .warning-list {
406
+ max-height: 360px;
407
+ overflow-y: auto;
408
+ }
409
+ .lesson-panel {
410
+ max-height: 320px;
411
+ overflow-y: auto;
412
+ }
413
+ .health-panel .health-lists {
414
+ max-height: 260px;
415
+ overflow-y: auto;
416
+ }
417
+
418
+ /* Elegant scrollbar style matching custom amber accent */
419
+ .warning-workbench .warning-list::-webkit-scrollbar,
420
+ .lesson-panel::-webkit-scrollbar,
421
+ .health-panel .health-lists::-webkit-scrollbar {
422
+ width: 6px;
423
+ }
424
+ .warning-workbench .warning-list::-webkit-scrollbar-track,
425
+ .lesson-panel::-webkit-scrollbar-track,
426
+ .health-panel .health-lists::-webkit-scrollbar-track {
427
+ background: transparent;
428
+ }
429
+ .warning-workbench .warning-list::-webkit-scrollbar-thumb,
430
+ .lesson-panel::-webkit-scrollbar-thumb,
431
+ .health-panel .health-lists::-webkit-scrollbar-thumb {
432
+ background: var(--accent);
433
+ border-radius: 3px;
434
+ opacity: 0.5;
435
+ }
436
+
437
+ .task-state-summary {
438
+ display: grid;
439
+ grid-template-columns: repeat(4, minmax(0, 1fr));
440
+ gap: 10px;
441
+ margin: 14px 0 18px;
442
+ }
443
+ .task-state-summary > div {
444
+ background: var(--paper);
445
+ border: 1px solid var(--line);
446
+ border-radius: 8px;
447
+ padding: 10px;
448
+ min-width: 0;
449
+ }
450
+ .task-state-summary span:first-child {
451
+ display: block;
452
+ color: var(--muted);
453
+ font-size: 10px;
454
+ font-weight: 800;
455
+ margin-bottom: 6px;
456
+ text-transform: uppercase;
457
+ }
458
+ .task-state-summary .tag {
459
+ display: flex;
460
+ width: 100%;
461
+ min-width: 0;
462
+ max-width: 100%;
463
+ white-space: normal;
464
+ text-align: center;
465
+ overflow-wrap: anywhere;
466
+ }
467
+ .review-actions {
468
+ display: grid;
469
+ gap: 10px;
470
+ }
471
+ .review-actions p {
472
+ margin: 0;
473
+ color: var(--muted);
474
+ font-size: 12px;
475
+ line-height: 1.45;
476
+ }
477
+ .review-check {
478
+ display: flex;
479
+ align-items: flex-start;
480
+ gap: 8px;
481
+ color: var(--text);
482
+ font-size: 12px;
483
+ line-height: 1.4;
484
+ }
485
+ .review-actions input[type="text"],
486
+ .review-actions input:not([type]) {
487
+ width: 100%;
488
+ min-width: 0;
489
+ border: 1px solid var(--line);
490
+ border-radius: 8px;
491
+ background: var(--paper);
492
+ color: var(--text);
493
+ padding: 9px 10px;
494
+ font: inherit;
495
+ }
496
+ .review-confirm-copy {
497
+ display: flex;
498
+ justify-content: flex-start;
499
+ }
500
+ .review-actions .copy-task-name.review-copy-task-name {
501
+ width: fit-content;
502
+ background: var(--paper-2);
503
+ color: var(--ink);
504
+ border: 1px solid var(--line);
505
+ padding: 6px 10px;
506
+ }
507
+ .review-actions button {
508
+ width: 100%;
509
+ border: 0;
510
+ border-radius: 8px;
511
+ background: var(--accent);
512
+ color: #fff;
513
+ cursor: pointer;
514
+ font-weight: 800;
515
+ padding: 10px 12px;
516
+ }
517
+ .review-actions button:disabled,
518
+ .review-actions input:disabled {
519
+ cursor: not-allowed;
520
+ opacity: 0.55;
521
+ }
522
+ .review-result {
523
+ min-height: 18px;
524
+ color: var(--muted);
525
+ font-size: 12px;
526
+ }
527
+
528
+ @media (max-width: 760px) {
529
+ .visibility-shell {
530
+ overflow-x: hidden;
531
+ }
532
+ .detail-hero {
533
+ flex-direction: column;
534
+ }
535
+ .detail-hero h2,
536
+ .detail-hero p {
537
+ overflow-wrap: anywhere;
538
+ }
539
+ .review-hero-tags {
540
+ justify-content: flex-start;
541
+ }
542
+ .review-workspace,
543
+ .review-workspace-grid,
544
+ .review-workspace-main,
545
+ .review-workspace-side {
546
+ min-width: 0;
547
+ }
548
+ .task-state-summary {
549
+ grid-template-columns: repeat(2, minmax(0, 1fr));
550
+ }
551
+ }