coding-agent-harness 1.0.1 → 1.0.2

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 (159) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.en-US.md +14 -0
  3. package/README.md +111 -86
  4. package/README.zh-CN.md +270 -0
  5. package/SKILL.md +116 -189
  6. package/docs-release/README.md +72 -5
  7. package/docs-release/architecture/overview.md +286 -28
  8. package/docs-release/architecture/overview.zh-CN.md +288 -0
  9. package/docs-release/assets/dashboard-overview-en.png +0 -0
  10. package/docs-release/assets/harness-architecture.svg +163 -0
  11. package/docs-release/assets/harness-workflow.svg +64 -0
  12. package/docs-release/guides/agent-installation.en-US.md +214 -0
  13. package/docs-release/guides/agent-installation.md +123 -26
  14. package/docs-release/guides/document-audience-and-surfaces.en-US.md +112 -0
  15. package/docs-release/guides/document-audience-and-surfaces.md +112 -0
  16. package/docs-release/guides/full-legacy-migration-subagent-strategy.md +334 -0
  17. package/docs-release/guides/full-legacy-migration-subagent-strategy.zh-CN.md +334 -0
  18. package/docs-release/guides/legacy-migration-agent-prompt.md +384 -0
  19. package/docs-release/guides/legacy-migration-agent-prompt.zh-CN.md +361 -0
  20. package/docs-release/guides/migration-playbook.en-US.md +325 -0
  21. package/docs-release/guides/migration-playbook.md +329 -0
  22. package/docs-release/guides/parent-control-repository-pattern.en-US.md +252 -0
  23. package/docs-release/guides/parent-control-repository-pattern.md +252 -0
  24. package/docs-release/guides/repository-operating-models.en-US.md +196 -0
  25. package/docs-release/guides/repository-operating-models.md +196 -0
  26. package/docs-release/intl/README.md +15 -0
  27. package/docs-release/intl/de-DE.md +18 -0
  28. package/docs-release/intl/en-US.md +18 -0
  29. package/docs-release/intl/es-ES.md +18 -0
  30. package/docs-release/intl/fr-FR.md +18 -0
  31. package/docs-release/intl/ja-JP.md +18 -0
  32. package/docs-release/intl/ko-KR.md +18 -0
  33. package/docs-release/intl/zh-CN.md +18 -0
  34. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/brief.md +13 -0
  35. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/lesson_candidates.md +24 -0
  36. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/progress.md +1 -1
  37. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/task_plan.md +4 -2
  38. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/{visual_roadmap.md → visual_map.md} +9 -1
  39. package/package.json +3 -1
  40. package/references/agents-md-pattern.md +3 -3
  41. package/references/docs-directory-standard.md +47 -3
  42. package/references/external-source-intake-standard.md +75 -0
  43. package/references/harness-ledger.md +5 -3
  44. package/references/legacy-12-phase-bootstrap.md +41 -0
  45. package/references/lessons-governance.md +23 -6
  46. package/references/planning-loop.md +41 -3
  47. package/references/project-onboarding-audit.md +10 -0
  48. package/references/repo-governance-standard.md +2 -0
  49. package/references/testing-standard.md +50 -0
  50. package/references/walkthrough-closeout.md +6 -5
  51. package/scripts/check-harness.mjs +76 -35
  52. package/scripts/harness.mjs +303 -12
  53. package/scripts/lib/capability-registry.mjs +533 -0
  54. package/scripts/lib/check-profiles.mjs +510 -0
  55. package/scripts/lib/core-shared.mjs +186 -0
  56. package/scripts/lib/dashboard-data.mjs +389 -0
  57. package/scripts/lib/dashboard-workbench.mjs +217 -0
  58. package/scripts/lib/dashboard-writer.mjs +93 -2
  59. package/scripts/lib/harness-core.mjs +10 -1318
  60. package/scripts/lib/lesson-maintenance.mjs +145 -0
  61. package/scripts/lib/markdown-utils.mjs +158 -0
  62. package/scripts/lib/migration-planner.mjs +478 -0
  63. package/scripts/lib/migration-support.mjs +312 -0
  64. package/scripts/lib/task-lifecycle.mjs +755 -0
  65. package/scripts/lib/task-scanner.mjs +682 -0
  66. package/scripts/smoke-dashboard.mjs +22 -0
  67. package/scripts/test-harness.mjs +926 -14
  68. package/templates/AGENTS.md.template +41 -30
  69. package/templates/architecture/Architecture-SSoT.md +21 -0
  70. package/templates/architecture/README.md +49 -0
  71. package/templates/architecture/critical-flows.md +22 -0
  72. package/templates/architecture/local-repo-context.md +20 -0
  73. package/templates/architecture/service-catalog.md +17 -0
  74. package/templates/architecture/services/service-template.md +31 -0
  75. package/templates/architecture/system-map.md +22 -0
  76. package/templates/dashboard/assets/app-src/00-state.js +41 -0
  77. package/templates/dashboard/assets/app-src/10-router.js +76 -0
  78. package/templates/dashboard/assets/app-src/20-overview.js +235 -0
  79. package/templates/dashboard/assets/app-src/30-tasks.js +563 -0
  80. package/templates/dashboard/assets/app-src/40-modules.js +58 -0
  81. package/templates/dashboard/assets/app-src/45-review.js +128 -0
  82. package/templates/dashboard/assets/app-src/50-migration.js +169 -0
  83. package/templates/dashboard/assets/app-src/60-shared.js +61 -0
  84. package/templates/dashboard/assets/app-src/90-bindings.js +382 -0
  85. package/templates/dashboard/assets/app.css +2575 -310
  86. package/templates/dashboard/assets/app.js +1498 -307
  87. package/templates/dashboard/assets/app.manifest.json +11 -0
  88. package/templates/dashboard/assets/i18n.js +429 -44
  89. package/templates/dashboard/assets/mermaid-renderer.js +58 -8
  90. package/templates/development/README.md +52 -0
  91. package/templates/development/codebase-map.md +11 -0
  92. package/templates/development/cross-repo-debugging.md +18 -0
  93. package/templates/development/external-context/service-template.md +33 -0
  94. package/templates/development/external-source-packs/README.md +24 -0
  95. package/templates/development/external-source-packs/digest-template.md +28 -0
  96. package/templates/development/local-setup.md +16 -0
  97. package/templates/development/stubs-and-mocks.md +11 -0
  98. package/templates/integrations/README.md +40 -0
  99. package/templates/integrations/api-contract.md +42 -0
  100. package/templates/integrations/event-contract.md +46 -0
  101. package/templates/integrations/third-party/vendor-template.md +42 -0
  102. package/templates/integrations/webhook-contract.md +41 -0
  103. package/templates/planning/brief.md +32 -0
  104. package/templates/planning/lesson_candidates.md +58 -0
  105. package/templates/planning/long-running-task-contract.md +7 -0
  106. package/templates/planning/module_brief.md +25 -0
  107. package/templates/planning/module_session_prompt.md +6 -0
  108. package/templates/planning/task_plan.md +7 -5
  109. package/templates/planning/{visual_roadmap.md → visual_map.md} +24 -2
  110. package/templates/reference/docs-library-standard.md +31 -0
  111. package/templates/reference/execution-workflow-standard.md +4 -2
  112. package/templates/reference/external-source-intake-standard.md +82 -0
  113. package/templates/reference/harness-ledger-standard.md +1 -0
  114. package/templates/reference/repo-governance-standard.md +6 -4
  115. package/templates/reference/walkthrough-standard.md +2 -1
  116. package/templates/walkthrough/walkthrough-template.md +2 -2
  117. package/templates-zh-CN/AGENTS.md.template +69 -70
  118. package/templates-zh-CN/architecture/Architecture-SSoT.md +21 -0
  119. package/templates-zh-CN/architecture/README.md +51 -0
  120. package/templates-zh-CN/architecture/critical-flows.md +24 -0
  121. package/templates-zh-CN/architecture/local-repo-context.md +20 -0
  122. package/templates-zh-CN/architecture/service-catalog.md +17 -0
  123. package/templates-zh-CN/architecture/services/service-template.md +31 -0
  124. package/templates-zh-CN/architecture/system-map.md +22 -0
  125. package/templates-zh-CN/development/README.md +54 -0
  126. package/templates-zh-CN/development/codebase-map.md +11 -0
  127. package/templates-zh-CN/development/cross-repo-debugging.md +18 -0
  128. package/templates-zh-CN/development/external-context/service-template.md +33 -0
  129. package/templates-zh-CN/development/external-source-packs/README.md +24 -0
  130. package/templates-zh-CN/development/external-source-packs/digest-template.md +28 -0
  131. package/templates-zh-CN/development/local-setup.md +16 -0
  132. package/templates-zh-CN/development/stubs-and-mocks.md +11 -0
  133. package/templates-zh-CN/integrations/README.md +42 -0
  134. package/templates-zh-CN/integrations/api-contract.md +42 -0
  135. package/templates-zh-CN/integrations/event-contract.md +46 -0
  136. package/templates-zh-CN/integrations/third-party/vendor-template.md +42 -0
  137. package/templates-zh-CN/integrations/webhook-contract.md +41 -0
  138. package/templates-zh-CN/planning/brief.md +32 -0
  139. package/templates-zh-CN/planning/lesson_candidates.md +58 -0
  140. package/templates-zh-CN/planning/long-running-task-contract.md +1 -1
  141. package/templates-zh-CN/planning/module_brief.md +25 -0
  142. package/templates-zh-CN/planning/module_plan.md +2 -2
  143. package/templates-zh-CN/planning/module_session_prompt.md +4 -3
  144. package/templates-zh-CN/planning/task_plan.md +10 -4
  145. package/templates-zh-CN/planning/{visual_roadmap.md → visual_map.md} +21 -2
  146. package/templates-zh-CN/reference/docs-library-standard.md +35 -0
  147. package/templates-zh-CN/reference/execution-workflow-standard.md +9 -2
  148. package/templates-zh-CN/reference/external-source-intake-standard.md +82 -0
  149. package/templates-zh-CN/reference/harness-ledger-standard.md +5 -2
  150. package/templates-zh-CN/reference/repo-governance-standard.md +2 -0
  151. package/templates-zh-CN/reference/walkthrough-standard.md +4 -4
  152. package/templates-zh-CN/walkthrough/Closeout-SSoT.md +2 -2
  153. package/templates-zh-CN/walkthrough/walkthrough-template.md +2 -2
  154. package/templates-zh-CN/dashboard/assets/app.css +0 -399
  155. package/templates-zh-CN/dashboard/assets/app.js +0 -435
  156. package/templates-zh-CN/dashboard/assets/i18n.js +0 -47
  157. package/templates-zh-CN/dashboard/assets/markdown-reader.js +0 -116
  158. package/templates-zh-CN/dashboard/assets/mermaid-renderer.js +0 -59
  159. package/templates-zh-CN/dashboard/index.html +0 -18
@@ -1,399 +1,2664 @@
1
+ @import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700;800&family=JetBrains+Mono:ital,wght@0,400;0,500;1,400&display=swap');
2
+
1
3
  :root {
2
4
  color-scheme: light;
3
- --bg: #f4f6f3;
4
- --surface: #fbfcf8;
5
- --surface-2: #eef2ec;
6
- --ink: #182018;
7
- --muted: #627061;
8
- --line: #dce3d8;
9
- --accent: #2e6b4f;
10
- --accent-2: #9d6b2f;
11
- --danger: #a83f32;
12
- --warn: #9a6a13;
13
- --ok: #2f7b4f;
14
- --shadow: 0 18px 45px rgba(32, 43, 28, 0.10);
15
- font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
5
+
6
+ /* Backgrounds & Surfaces */
7
+ --bg: #f3f4f6; /* Slate 100: Elegant silver-gray background base */
8
+ --paper: #ffffff; /* Pure White: Card surface */
9
+ --paper-2: #e5e7eb; /* Slate 200: Soft tab & hover tint */
10
+
11
+ /* Typography */
12
+ --ink: #111827; /* Slate 900: Deep obsidian text */
13
+ --muted: #4b5563; /* Slate 600: Secondary text */
14
+
15
+ /* Borders & Dividers */
16
+ --line: #d1d5db; /* Slate 300: High-contrast thin border line */
17
+
18
+ /* Branding Accents */
19
+ --accent: #d97706; /* Amber 600: Rich golden amber for primary actions */
20
+ --accent-2: #ca8a04; /* Yellow 600: Deep warm gold for gradients */
21
+
22
+ /* Semantic Statuses */
23
+ --danger: #e11d48; /* Rose 600: Blockers, failures, and errors */
24
+ --warn: #ea580c; /* Orange 600: Warnings and advice */
25
+ --ok: #16a34a; /* Green 600: Complete and verified */
26
+
27
+ /* Dimensions, Shadows, & Glows */
28
+ --shadow: 0 10px 15px -3px rgba(17, 24, 39, 0.03), 0 4px 6px -4px rgba(17, 24, 39, 0.03), 0 1px 3px rgba(0, 0, 0, 0.01);
29
+ --shadow-hover: 0 20px 25px -5px rgba(17, 24, 39, 0.06), 0 10px 10px -5px rgba(17, 24, 39, 0.03);
30
+ --glow: 0 0 20px rgba(217, 119, 6, 0.08);
31
+
32
+ /* Typography Scale */
33
+ --font-sans: "Plus Jakarta Sans", ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
34
+ --font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
16
35
  }
17
36
 
18
37
  [data-theme="dark"] {
19
38
  color-scheme: dark;
20
- --bg: #151812;
21
- --surface: #1d2219;
22
- --surface-2: #252d20;
23
- --ink: #edf1e8;
24
- --muted: #a9b4a1;
25
- --line: #384230;
26
- --accent: #83c69d;
27
- --accent-2: #d3a15f;
28
- --danger: #e17668;
29
- --warn: #e0b456;
30
- --ok: #85cf9b;
31
- --shadow: 0 18px 45px rgba(0, 0, 0, 0.28);
32
- }
33
-
34
- * { box-sizing: border-box; }
39
+
40
+ /* Backgrounds & Surfaces */
41
+ --bg: #121214; /* Dark Charcoal: Obsidian dark grey */
42
+ --paper: #1a1a1c; /* Elevated dark gray zinc surface */
43
+ --paper-2: #27272a; /* Zinc 800: Hover tint and active tab */
44
+
45
+ /* Typography */
46
+ --ink: #f4f4f5; /* Zinc 100: Soft white contrast text */
47
+ --muted: #9ca3af; /* Slate 400: Mid-tone tech gray */
48
+
49
+ /* Borders & Dividers */
50
+ --line: #2b2b2e; /* Subdued dark border line */
51
+
52
+ /* Branding Accents */
53
+ --accent: #fbbf24; /* Amber 400: Radiant warm amber */
54
+ --accent-2: #f59e0b; /* Amber 500: Deep glowing amber */
55
+
56
+ /* Semantic Statuses */
57
+ --danger: #fb7185; /* Rose 400: High-visibility error rose */
58
+ --warn: #fbbf24; /* Amber 400: Warm warning amber */
59
+ --ok: #34d399; /* Green 400: Success mint green */
60
+
61
+ /* Shadows & Glows */
62
+ --shadow: 0 20px 30px rgba(0, 0, 0, 0.3);
63
+ --shadow-hover: 0 25px 40px rgba(0, 0, 0, 0.45);
64
+ --glow: 0 0 25px rgba(251, 191, 36, 0.12);
65
+ }
66
+
67
+ /* Animations & Keyframes */
68
+ @keyframes shimmer-flow {
69
+ 0% { background-position: 100% 0%; }
70
+ 100% { background-position: -100% 0%; }
71
+ }
72
+
73
+ @keyframes pulse-ok {
74
+ 0%, 100% { box-shadow: 0 0 0 0 rgba(22, 163, 74, 0.15), var(--shadow); }
75
+ 50% { box-shadow: 0 0 0 6px rgba(22, 163, 74, 0), var(--shadow); }
76
+ }
77
+
78
+ @keyframes pulse-warn {
79
+ 0%, 100% { box-shadow: 0 0 0 0 rgba(217, 119, 6, 0.15), var(--shadow); }
80
+ 50% { box-shadow: 0 0 0 6px rgba(217, 119, 6, 0), var(--shadow); }
81
+ }
82
+
83
+ @keyframes pulse-fail {
84
+ 0%, 100% { box-shadow: 0 0 0 0 rgba(225, 29, 72, 0.15), var(--shadow); }
85
+ 50% { box-shadow: 0 0 0 6px rgba(225, 29, 72, 0), var(--shadow); }
86
+ }
87
+
88
+ /* Reset & Scrollbars */
89
+ * {
90
+ box-sizing: border-box;
91
+ outline-color: var(--accent);
92
+ }
93
+
35
94
  body {
36
95
  margin: 0;
37
96
  background: var(--bg);
97
+ background-image: radial-gradient(ellipse at top, var(--paper-2), var(--bg));
38
98
  color: var(--ink);
99
+ font-family: var(--font-sans);
100
+ -webkit-font-smoothing: antialiased;
101
+ -moz-osx-font-smoothing: grayscale;
39
102
  }
40
- button, select {
41
- font: inherit;
103
+
104
+ a {
105
+ color: inherit;
106
+ text-decoration: none;
107
+ transition: color 0.2s ease;
108
+ }
109
+
110
+ a:hover {
111
+ color: var(--accent);
112
+ }
113
+
114
+ button, input, select {
115
+ font-family: inherit;
116
+ }
117
+
118
+ ::-webkit-scrollbar {
119
+ width: 8px;
120
+ height: 8px;
121
+ }
122
+
123
+ ::-webkit-scrollbar-track {
124
+ background: transparent;
125
+ }
126
+
127
+ ::-webkit-scrollbar-thumb {
128
+ background: var(--line);
129
+ border-radius: 999px;
130
+ }
131
+
132
+ ::-webkit-scrollbar-thumb:hover {
133
+ background: var(--muted);
134
+ }
135
+
136
+ /* Base Layout Container — full-width fluid */
137
+ .visibility-shell {
138
+ width: 100%;
139
+ max-width: 100%;
140
+ padding: 40px clamp(16px, 3vw, 48px) 80px;
141
+ box-sizing: border-box;
142
+ }
143
+
144
+ /* Page Header / Hero */
145
+ .hero {
146
+ display: flex;
147
+ justify-content: space-between;
148
+ align-items: center;
149
+ gap: 24px;
150
+ margin-bottom: 32px;
151
+ }
152
+
153
+ .hero-copy h1 {
154
+ margin: 0;
155
+ font-size: clamp(24px, 4.5vw, 36px);
156
+ font-weight: 800;
157
+ letter-spacing: -0.025em;
158
+ background: linear-gradient(135deg, var(--accent) 0%, var(--accent-2) 100%);
159
+ -webkit-background-clip: text;
160
+ -webkit-text-fill-color: transparent;
161
+ }
162
+
163
+ .hero-sub {
164
+ max-width: 800px;
165
+ color: var(--muted);
166
+ font-size: 14px;
167
+ line-height: 1.5;
168
+ margin: 6px 0 0;
169
+ font-weight: 500;
170
+ }
171
+
172
+ .eyebrow {
173
+ color: var(--accent);
174
+ font-weight: 800;
175
+ font-size: 11px;
176
+ letter-spacing: 0.08em;
177
+ margin: 0 0 6px;
178
+ text-transform: uppercase;
179
+ }
180
+
181
+ .hero-actions {
182
+ display: flex;
183
+ flex-wrap: wrap;
184
+ align-items: center;
185
+ gap: 8px;
186
+ }
187
+
188
+ .hero-actions a,
189
+ .hero-actions button,
190
+ .section-head a,
191
+ .section-head button {
192
+ display: inline-flex;
193
+ align-items: center;
194
+ justify-content: center;
195
+ border: 1px solid var(--line);
196
+ background: var(--paper);
197
+ color: var(--ink);
198
+ border-radius: 999px; /* Capsules */
199
+ padding: 8px 16px;
200
+ font-size: 13px;
201
+ font-weight: 600;
202
+ cursor: pointer;
203
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.02);
204
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
205
+ }
206
+
207
+ .hero-actions a.active {
208
+ background: var(--accent);
209
+ color: var(--paper);
210
+ border-color: var(--accent);
211
+ }
212
+
213
+ .hero-actions a:hover:not(.active),
214
+ .hero-actions button:hover,
215
+ .section-head a:hover,
216
+ .section-head button:hover {
217
+ background: var(--paper-2);
218
+ border-color: var(--muted);
219
+ transform: translateY(-1px);
220
+ }
221
+
222
+ .stack {
223
+ display: grid;
224
+ gap: 24px;
225
+ }
226
+
227
+ /* Cockpit Two-Column Layout Grid */
228
+ .dashboard-grid {
229
+ display: grid;
230
+ grid-template-columns: 1fr;
231
+ gap: 24px;
232
+ margin-top: 16px;
233
+ }
234
+
235
+ @media (min-width: 1024px) {
236
+ .dashboard-grid {
237
+ grid-template-columns: minmax(0, 2fr) minmax(320px, 1fr);
238
+ align-items: start;
239
+ }
240
+ }
241
+
242
+ .status-card-group {
243
+ display: flex;
244
+ flex-direction: column;
245
+ gap: 16px;
246
+ }
247
+
248
+ .metrics-grid {
249
+ display: grid;
250
+ grid-template-columns: repeat(2, 1fr);
251
+ gap: 16px;
252
+ }
253
+
254
+ .status-primary,
255
+ .metric,
256
+ .flow-panel,
257
+ .migration-panel,
258
+ .lesson-panel,
259
+ .health-panel,
260
+ .task-group,
261
+ .detail-hero,
262
+ .doc-section,
263
+ .doc-library,
264
+ .side-panel,
265
+ .module-card,
266
+ .index-toolbar {
267
+ background: var(--paper);
268
+ border: 1px solid var(--line);
269
+ border-radius: 12px; /* Smoother rounding */
270
+ box-shadow: var(--shadow);
271
+ backdrop-filter: blur(12px);
272
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
273
+ }
274
+
275
+ .status-primary {
276
+ padding: 20px;
277
+ border-width: 1.5px;
278
+ }
279
+
280
+ .status-primary.pass {
281
+ border-color: rgba(22, 163, 74, 0.3);
282
+ animation: pulse-ok 4s infinite;
283
+ }
284
+
285
+ .status-primary.warn {
286
+ border-color: rgba(217, 119, 6, 0.3);
287
+ animation: pulse-warn 4s infinite;
288
+ }
289
+
290
+ .status-primary.fail {
291
+ border-color: rgba(225, 29, 72, 0.3);
292
+ animation: pulse-fail 4s infinite;
293
+ }
294
+
295
+ .status-primary span,
296
+ .metric span,
297
+ .subtle,
298
+ .task-row small,
299
+ .card-head p,
300
+ .detail-hero p,
301
+ .health-panel p {
302
+ color: var(--muted);
303
+ font-size: 13px;
304
+ font-weight: 500;
305
+ }
306
+
307
+ .status-primary strong {
308
+ display: block;
309
+ font-size: 24px;
310
+ font-weight: 800;
311
+ line-height: 1.2;
312
+ margin: 6px 0;
313
+ }
314
+
315
+ .status-primary p {
316
+ margin: 0;
317
+ font-size: 13px;
318
+ font-weight: 600;
319
+ }
320
+
321
+ .metric {
322
+ min-height: 104px;
323
+ padding: 18px;
324
+ display: flex;
325
+ flex-direction: column;
326
+ justify-content: space-between;
327
+ }
328
+
329
+ .metric strong {
330
+ display: block;
331
+ font-size: 32px;
332
+ font-weight: 800;
333
+ line-height: 1;
334
+ color: var(--accent);
335
+ }
336
+
337
+ /* Sections & Panel Layouts */
338
+ .section-head {
339
+ display: flex;
340
+ justify-content: space-between;
341
+ gap: 18px;
342
+ align-items: center;
343
+ margin-bottom: 16px;
344
+ }
345
+
346
+ .section-head h2,
347
+ .detail-hero h2,
348
+ .side-panel h3,
349
+ .module-card h2 {
350
+ margin: 0;
351
+ font-size: 18px;
352
+ font-weight: 800;
353
+ letter-spacing: -0.015em;
354
+ }
355
+
356
+ .flow-panel,
357
+ .migration-panel,
358
+ .lesson-panel,
359
+ .health-panel {
360
+ padding: 24px;
361
+ }
362
+
363
+ .flow-canvas {
364
+ min-height: 220px;
365
+ overflow: auto;
366
+ background: var(--paper-2);
367
+ border: 1px solid var(--line);
368
+ border-radius: 8px;
369
+ padding: 20px;
370
+ }
371
+
372
+ .progress-bar-container {
373
+ margin-top: 8px;
374
+ }
375
+
376
+ .progress-bar {
377
+ display: flex;
378
+ height: 28px;
379
+ border-radius: 8px;
380
+ overflow: hidden;
381
+ background: var(--paper-2);
382
+ border: 1px solid var(--line);
383
+ }
384
+
385
+ .progress-segment {
386
+ transition: width 0.4s ease;
387
+ min-width: 2px;
388
+ }
389
+
390
+ .progress-segment.done {
391
+ background: #16a34a;
392
+ }
393
+
394
+ .progress-segment.active {
395
+ background: var(--accent);
396
+ }
397
+
398
+ .progress-segment.planned {
399
+ background: var(--paper-2);
400
+ border-right: 1px solid var(--line);
401
+ }
402
+
403
+ .progress-legend {
404
+ display: flex;
405
+ gap: 20px;
406
+ margin-top: 12px;
407
+ font-size: 13px;
408
+ font-weight: 500;
409
+ color: var(--muted);
410
+ }
411
+
412
+ .legend-item {
413
+ display: inline-flex;
414
+ align-items: center;
415
+ gap: 6px;
416
+ }
417
+
418
+ .legend-dot {
419
+ width: 10px;
420
+ height: 10px;
421
+ border-radius: 3px;
422
+ display: inline-block;
423
+ }
424
+
425
+ .legend-dot.done { background: #16a34a; }
426
+ .legend-dot.active { background: var(--accent); }
427
+ .legend-dot.planned { background: var(--paper-2); border: 1px solid var(--line); }
428
+
429
+ .runway-breakdown,
430
+ .group-pager {
431
+ display: flex;
432
+ flex-wrap: wrap;
433
+ align-items: center;
434
+ justify-content: space-between;
435
+ gap: 12px;
436
+ margin-top: 16px;
437
+ }
438
+
439
+ .runway-breakdown a,
440
+ .group-pager {
441
+ border: 1px solid var(--line);
442
+ background: var(--paper);
443
+ border-radius: 8px;
444
+ padding: 12px 16px;
445
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.01);
446
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
447
+ }
448
+
449
+ .runway-breakdown a {
450
+ display: grid;
451
+ gap: 4px;
452
+ min-width: 190px;
453
+ }
454
+
455
+ .runway-breakdown a:hover {
456
+ border-color: var(--accent);
457
+ background: var(--paper-2);
458
+ transform: translateY(-2px);
459
+ box-shadow: var(--shadow);
460
+ }
461
+
462
+ .runway-breakdown a strong {
463
+ font-size: 13px;
464
+ font-weight: 700;
465
+ }
466
+
467
+ .runway-breakdown span,
468
+ .group-pager span {
469
+ color: var(--muted);
470
+ font-size: 12px;
471
+ font-weight: 500;
472
+ }
473
+
474
+ .mermaid-rendered {
475
+ margin: 0;
476
+ max-width: 100%;
477
+ max-height: min(68vh, 620px);
478
+ overflow: auto;
479
+ border: 1px solid var(--line);
480
+ border-radius: 10px;
481
+ background: var(--paper-2);
482
+ padding: 12px;
483
+ }
484
+
485
+ .mermaid-fallback {
486
+ margin: 0;
487
+ max-width: 100%;
488
+ max-height: min(68vh, 620px);
489
+ overflow: auto;
490
+ border: 1px dashed var(--line);
491
+ border-radius: 10px;
492
+ background: var(--paper-2);
493
+ padding: 12px;
494
+ }
495
+
496
+ .task-drawer .mermaid-rendered,
497
+ .task-drawer .mermaid-fallback,
498
+ .review-workspace .mermaid-rendered,
499
+ .review-workspace .mermaid-fallback {
500
+ max-height: 420px;
501
+ }
502
+
503
+ .mermaid-fallback pre {
504
+ margin: 0;
505
+ white-space: pre;
506
+ }
507
+
508
+ .mermaid-rendered figcaption,
509
+ .mermaid-fallback figcaption {
510
+ color: var(--muted);
511
+ font-size: 12px;
512
+ margin-bottom: 12px;
513
+ font-weight: 500;
514
+ }
515
+
516
+ .mermaid-rendered svg {
517
+ min-width: min(100%, 720px);
518
+ max-width: none;
519
+ height: auto;
520
+ }
521
+
522
+ .mermaid-node rect {
523
+ fill: var(--paper);
524
+ stroke: var(--line);
525
+ stroke-width: 1.5px;
526
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
527
+ }
528
+
529
+ .mermaid-node:hover rect {
530
+ stroke: var(--accent);
531
+ filter: drop-shadow(0 4px 6px rgba(0, 0, 0, 0.05));
532
+ }
533
+
534
+ .mermaid-node text {
535
+ fill: var(--ink);
536
+ font-family: var(--font-sans);
537
+ font-size: 13px;
538
+ font-weight: 600;
539
+ pointer-events: none;
540
+ }
541
+
542
+ .mermaid-edge {
543
+ stroke: var(--line);
544
+ stroke-width: 2px;
545
+ fill: none;
546
+ transition: stroke 0.25s ease;
547
+ }
548
+
549
+ .mermaid-node:hover ~ .mermaid-edge,
550
+ .mermaid-edge:hover {
551
+ stroke: var(--accent);
552
+ }
553
+
554
+ .mermaid-arrow {
555
+ fill: var(--line);
556
+ transition: fill 0.25s ease;
557
+ }
558
+
559
+ /* Active Task Briefs */
560
+ .task-briefs {
561
+ display: grid;
562
+ gap: 16px;
563
+ }
564
+
565
+ .brief-grid {
566
+ display: grid;
567
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 400px), 1fr));
568
+ gap: 16px;
569
+ }
570
+
571
+ .brief-card {
572
+ background: var(--paper);
573
+ border: 1px solid var(--line);
574
+ border-radius: 12px;
575
+ box-shadow: var(--shadow);
576
+ padding: 20px;
577
+ overflow: hidden;
578
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
579
+ }
580
+
581
+ .brief-card:hover {
582
+ transform: translateY(-3px);
583
+ box-shadow: var(--shadow-hover);
584
+ border-color: var(--accent);
585
+ }
586
+
587
+ .brief-card.compact {
588
+ box-shadow: none;
589
+ background: transparent;
590
+ border-color: var(--line);
591
+ padding: 16px 0;
592
+ }
593
+
594
+ .brief-card.compact:hover {
595
+ transform: none;
596
+ box-shadow: none;
597
+ border-color: var(--line);
598
+ }
599
+
600
+ .card-head {
601
+ display: flex;
602
+ justify-content: space-between;
603
+ gap: 14px;
604
+ margin-bottom: 14px;
605
+ }
606
+
607
+ .card-head a {
608
+ font-size: 15px;
609
+ font-weight: 800;
610
+ color: var(--ink);
611
+ }
612
+
613
+ .card-head a:hover {
614
+ color: var(--accent);
615
+ }
616
+
617
+ .card-head p {
618
+ margin: 4px 0 0;
619
+ font-family: var(--font-mono);
620
+ font-size: 11px;
621
+ }
622
+
623
+ /* Beautiful Shimmering Progress Bar */
624
+ .progress {
625
+ height: 8px;
626
+ border-radius: 999px;
627
+ background: var(--paper-2);
628
+ overflow: hidden;
629
+ margin: 14px 0;
630
+ }
631
+
632
+ .progress i {
633
+ display: block;
634
+ height: 100%;
635
+ border-radius: 999px;
636
+ background: linear-gradient(90deg, var(--accent) 0%, var(--accent-2) 50%, var(--accent) 100%);
637
+ background-size: 200% 100%;
638
+ animation: shimmer-flow 3s infinite linear;
639
+ }
640
+
641
+ /* Translucent Tags & Status Pills */
642
+ .tag {
643
+ display: inline-flex;
644
+ align-items: center;
645
+ justify-content: center;
646
+ height: fit-content;
647
+ border-radius: 999px; /* Pill */
648
+ padding: 4px 10px;
649
+ font-size: 11px;
650
+ font-weight: 700;
651
+ letter-spacing: 0.02em;
652
+ background: var(--paper-2);
653
+ color: var(--muted);
654
+ white-space: nowrap;
655
+ border: 1px solid transparent;
656
+ transition: all 0.2s ease;
657
+ }
658
+
659
+ .tag.pass {
660
+ color: var(--ok);
661
+ background: rgba(22, 163, 74, 0.08);
662
+ border-color: rgba(22, 163, 74, 0.2);
663
+ }
664
+
665
+ .tag.warn {
666
+ color: var(--warn);
667
+ background: rgba(217, 119, 6, 0.08);
668
+ border-color: rgba(217, 119, 6, 0.2);
669
+ }
670
+
671
+ .tag.fail {
672
+ color: var(--danger);
673
+ background: rgba(225, 29, 72, 0.08);
674
+ border-color: rgba(225, 29, 72, 0.2);
675
+ }
676
+
677
+ /* Premium Typography & Markdown Rendering */
678
+ .markdown {
679
+ line-height: 1.6;
680
+ overflow-wrap: anywhere;
681
+ font-size: 14px;
682
+ }
683
+
684
+ .markdown h1 {
685
+ font-size: 24px;
686
+ font-weight: 800;
687
+ letter-spacing: -0.02em;
688
+ margin-bottom: 16px;
689
+ }
690
+
691
+ .markdown h2 {
692
+ font-size: 18px;
693
+ font-weight: 800;
694
+ letter-spacing: -0.015em;
695
+ margin-top: 24px;
696
+ margin-bottom: 12px;
697
+ border-bottom: 1px solid var(--line);
698
+ padding-bottom: 6px;
699
+ }
700
+
701
+ .markdown h3 {
702
+ font-size: 15px;
703
+ font-weight: 700;
704
+ margin-top: 18px;
705
+ margin-bottom: 8px;
706
+ }
707
+
708
+ .markdown p, .markdown ul, .markdown ol {
709
+ margin-bottom: 16px;
710
+ }
711
+
712
+ .markdown pre {
713
+ overflow: auto;
714
+ background: var(--paper-2);
715
+ border: 1px solid var(--line);
716
+ border-radius: 8px;
717
+ padding: 14px;
718
+ font-family: var(--font-mono);
719
+ font-size: 13px;
720
+ }
721
+
722
+ .markdown code {
723
+ font-family: var(--font-mono);
724
+ background: var(--paper-2);
725
+ border: 1px solid var(--line);
726
+ border-radius: 4px;
727
+ padding: 2px 5px;
728
+ font-size: 12px;
729
+ }
730
+
731
+ .markdown blockquote {
732
+ border-left: 4px solid var(--accent);
733
+ padding: 8px 16px;
734
+ margin: 0 0 16px;
735
+ background: var(--paper-2);
736
+ border-radius: 0 8px 8px 0;
737
+ color: var(--muted);
738
+ }
739
+
740
+ .rendered-table-wrap {
741
+ overflow: auto;
742
+ border: 1px solid var(--line);
743
+ border-radius: 8px;
744
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.01);
745
+ margin-bottom: 16px;
746
+ }
747
+
748
+ .rendered-table {
749
+ width: 100%;
750
+ border-collapse: collapse;
751
+ font-size: 13px;
752
+ }
753
+
754
+ .rendered-table th {
755
+ background: var(--paper-2);
756
+ font-weight: 700;
757
+ color: var(--ink);
758
+ border-bottom: 2px solid var(--line);
759
+ padding: 10px 12px;
760
+ }
761
+
762
+ .rendered-table td {
763
+ border-bottom: 1px solid var(--line);
764
+ padding: 10px 12px;
765
+ vertical-align: top;
766
+ }
767
+
768
+ .rendered-table tr:last-child td {
769
+ border-bottom: none;
770
+ }
771
+
772
+ .rendered-table tr:hover {
773
+ background: var(--paper-2);
774
+ }
775
+
776
+ .missing-brief {
777
+ border-left: 3px solid var(--warn);
778
+ padding: 12px 16px;
779
+ background: rgba(217, 119, 6, 0.04);
780
+ border-radius: 0 8px 8px 0;
781
+ color: var(--muted);
782
+ }
783
+
784
+ /* Linear-style Form Controls & Search bar */
785
+ .index-toolbar {
786
+ display: grid;
787
+ grid-template-columns: minmax(220px, 1.8fr) 170px 170px auto;
788
+ gap: 12px;
789
+ align-items: center;
790
+ padding: 16px;
791
+ box-shadow: var(--shadow);
792
+ }
793
+
794
+ .index-toolbar input,
795
+ .index-toolbar select,
796
+ .warning-toolbar select {
797
+ border: 1px solid var(--line);
798
+ background: var(--paper);
799
+ color: var(--ink);
800
+ border-radius: 8px;
801
+ padding: 10px 14px;
802
+ font-size: 13px;
803
+ font-weight: 600;
804
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.01);
805
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
806
+ }
807
+
808
+ .index-toolbar input:focus,
809
+ .index-toolbar select:focus,
810
+ .warning-toolbar select:focus {
811
+ border-color: var(--accent);
812
+ box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1);
813
+ outline: none;
814
+ }
815
+
816
+ .task-group {
817
+ overflow: hidden;
818
+ }
819
+
820
+ .task-group .section-head {
821
+ display: flex;
822
+ justify-content: space-between;
823
+ align-items: center;
824
+ padding: 16px 20px;
825
+ border-bottom: 1px solid var(--line);
826
+ border-left: 4px solid var(--accent);
827
+ margin: 0;
828
+ background: var(--paper-2);
829
+ }
830
+
831
+ .task-group .section-head h2 {
832
+ font-size: 15px;
833
+ font-weight: 800;
834
+ }
835
+
836
+ .task-group .section-head .group-actions {
837
+ display: flex;
838
+ align-items: center;
839
+ gap: 16px;
840
+ }
841
+
842
+ .task-group .section-head .group-progress {
843
+ display: flex;
844
+ align-items: center;
845
+ gap: 8px;
846
+ font-size: 12px;
847
+ font-weight: 700;
848
+ color: var(--muted);
849
+ }
850
+
851
+ .task-group .section-head .group-progress-track {
852
+ width: 80px;
853
+ height: 6px;
854
+ background: var(--paper);
855
+ border-radius: 3px;
856
+ overflow: hidden;
857
+ border: 1px solid var(--line);
858
+ }
859
+
860
+ .task-group .section-head .group-progress-fill {
861
+ height: 100%;
862
+ border-radius: 3px;
863
+ background: linear-gradient(90deg, var(--accent), var(--accent-2));
864
+ transition: width 0.4s ease;
865
+ }
866
+
867
+ .task-list {
868
+ display: grid;
869
+ }
870
+
871
+ /* Legacy task-row (kept for compatibility) */
872
+ .task-row {
873
+ display: grid;
874
+ grid-template-columns: minmax(0, 1.8fr) 130px 100px 140px;
875
+ gap: 12px;
876
+ align-items: center;
877
+ padding: 14px 20px;
878
+ border-bottom: 1px solid var(--line);
879
+ text-decoration: none;
880
+ background: var(--paper);
881
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
882
+ }
883
+
884
+ .task-row-head {
885
+ color: var(--muted);
886
+ font-size: 11px;
887
+ font-weight: 800;
888
+ text-transform: uppercase;
889
+ letter-spacing: 0.08em;
890
+ background: var(--paper-2);
891
+ }
892
+
893
+ .task-row:hover:not(.task-row-head) {
894
+ background: var(--paper-2);
895
+ transform: translateX(4px);
896
+ }
897
+
898
+ .task-row span:first-child {
899
+ min-width: 0;
900
+ }
901
+
902
+ .task-row strong {
903
+ font-size: 14px;
904
+ font-weight: 700;
905
+ color: var(--ink);
906
+ }
907
+
908
+ .task-row small {
909
+ display: block;
910
+ font-family: var(--font-mono);
911
+ font-size: 11px;
912
+ margin-top: 4px;
913
+ }
914
+
915
+ /* === Task Index Layout Redesign (Cockpit Style C) === */
916
+ .tasks-grid {
917
+ display: grid;
918
+ grid-template-columns: 1fr;
919
+ gap: 24px;
920
+ margin-top: 16px;
921
+ }
922
+
923
+ @media (min-width: 1024px) {
924
+ .tasks-grid {
925
+ grid-template-columns: minmax(0, 2fr) minmax(320px, 1fr);
926
+ align-items: start;
927
+ }
928
+ .tasks-sidebar {
929
+ position: sticky;
930
+ top: 24px;
931
+ }
932
+ }
933
+
934
+ /* Sidebar Widgets */
935
+ .sidebar-card {
936
+ background: var(--paper);
937
+ border: 1px solid var(--line);
938
+ border-radius: 12px;
939
+ padding: 20px;
940
+ box-shadow: var(--shadow);
941
+ display: flex;
942
+ flex-direction: column;
943
+ gap: 16px;
944
+ transition: box-shadow 0.25s;
945
+ }
946
+
947
+ .sidebar-card h3 {
948
+ margin: 0;
949
+ font-size: 13px;
950
+ font-weight: 800;
951
+ text-transform: uppercase;
952
+ letter-spacing: 0.05em;
953
+ color: var(--accent);
954
+ border-left: 3px solid var(--accent);
955
+ padding-left: 8px;
956
+ line-height: 1.2;
957
+ }
958
+
959
+ .sidebar-card .input-group {
960
+ display: flex;
961
+ flex-direction: column;
962
+ gap: 6px;
963
+ }
964
+
965
+ .sidebar-card .select-group {
966
+ display: flex;
967
+ flex-direction: column;
968
+ gap: 6px;
969
+ }
970
+
971
+ .sidebar-card .select-group label {
972
+ font-size: 11px;
973
+ font-weight: 700;
974
+ color: var(--muted);
975
+ text-transform: uppercase;
976
+ }
977
+
978
+ .sidebar-card input,
979
+ .sidebar-card select {
980
+ width: 100%;
981
+ border: 1px solid var(--line);
982
+ background: var(--paper);
983
+ color: var(--ink);
984
+ border-radius: 8px;
985
+ padding: 10px 14px;
986
+ font-size: 13px;
987
+ font-weight: 600;
988
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.01);
989
+ transition: all 0.2s;
990
+ }
991
+
992
+ .sidebar-card input:focus,
993
+ .sidebar-card select:focus {
994
+ border-color: var(--accent);
995
+ box-shadow: 0 0 0 3px rgba(217, 119, 6, 0.15);
996
+ outline: none;
997
+ }
998
+
999
+ .sidebar-card .search-stats {
1000
+ font-size: 12px;
1001
+ color: var(--muted);
1002
+ text-align: right;
1003
+ border-top: 1px dashed var(--line);
1004
+ padding-top: 12px;
1005
+ margin-top: 4px;
1006
+ }
1007
+
1008
+ .sidebar-card .search-stats strong {
1009
+ color: var(--ink);
1010
+ }
1011
+
1012
+ /* Stats Hero Gauge inside Sidebar Stats */
1013
+ .stats-hero-gauge {
1014
+ display: flex;
1015
+ flex-direction: column;
1016
+ align-items: center;
1017
+ gap: 4px;
1018
+ padding: 16px 0;
1019
+ background: var(--bg);
1020
+ border-radius: 10px;
1021
+ border: 1px solid var(--line);
1022
+ margin-bottom: 4px;
1023
+ }
1024
+
1025
+ .gauge-percentage {
1026
+ font-size: 32px;
1027
+ font-weight: 800;
1028
+ color: var(--accent);
1029
+ letter-spacing: -0.02em;
1030
+ line-height: 1;
1031
+ }
1032
+
1033
+ .gauge-label {
1034
+ font-size: 11px;
1035
+ color: var(--muted);
1036
+ font-weight: 700;
1037
+ text-transform: uppercase;
1038
+ }
1039
+
1040
+ .stats-breakdown {
1041
+ display: flex;
1042
+ flex-direction: column;
1043
+ gap: 10px;
1044
+ }
1045
+
1046
+ .stats-breakdown-row {
1047
+ display: flex;
1048
+ justify-content: space-between;
1049
+ align-items: center;
1050
+ font-size: 13px;
1051
+ font-weight: 600;
1052
+ padding: 4px 0;
1053
+ border-bottom: 1px solid var(--line);
1054
+ }
1055
+
1056
+ .stats-breakdown-row:last-child {
1057
+ border-bottom: none;
1058
+ }
1059
+
1060
+ .stats-breakdown-row .stat-label {
1061
+ color: var(--muted);
1062
+ display: flex;
1063
+ align-items: center;
1064
+ gap: 8px;
1065
+ }
1066
+
1067
+ .stats-breakdown-row .stat-value {
1068
+ color: var(--ink);
1069
+ font-weight: 800;
1070
+ }
1071
+
1072
+ .stats-breakdown-row .state-dot {
1073
+ width: 8px;
1074
+ height: 8px;
1075
+ border-radius: 50%;
1076
+ display: inline-block;
1077
+ }
1078
+
1079
+ /* Legend items */
1080
+ .legend-list {
1081
+ display: flex;
1082
+ flex-direction: column;
1083
+ gap: 12px;
1084
+ }
1085
+
1086
+ .legend-item {
1087
+ display: flex;
1088
+ align-items: flex-start;
1089
+ gap: 10px;
1090
+ font-size: 12px;
1091
+ line-height: 1.4;
1092
+ }
1093
+
1094
+ .legend-item .badge {
1095
+ font-size: 10px;
1096
+ padding: 2px 6px;
1097
+ border-radius: 4px;
1098
+ font-weight: 700;
1099
+ white-space: nowrap;
1100
+ display: inline-flex;
1101
+ }
1102
+
1103
+ .legend-item .badge.ready {
1104
+ background: rgba(22, 163, 74, 0.08);
1105
+ color: #16a34a;
1106
+ border: 1px solid rgba(22, 163, 74, 0.15);
1107
+ }
1108
+
1109
+ .legend-item .badge.map-ready {
1110
+ background: rgba(217, 119, 6, 0.08);
1111
+ color: var(--accent);
1112
+ border: 1px solid rgba(217, 119, 6, 0.15);
1113
+ }
1114
+
1115
+ .legend-item span {
1116
+ color: var(--muted);
1117
+ }
1118
+
1119
+ /* Layout Toggle styling */
1120
+ .layout-toggle-group {
1121
+ display: flex;
1122
+ background: var(--bg);
1123
+ border: 1px solid var(--line);
1124
+ border-radius: 8px;
1125
+ padding: 2px;
1126
+ gap: 2px;
1127
+ }
1128
+
1129
+ .layout-btn {
1130
+ flex: 1;
1131
+ border: none;
1132
+ background: transparent;
1133
+ color: var(--muted);
1134
+ font-size: 12px;
1135
+ font-weight: 700;
1136
+ padding: 8px 12px;
1137
+ border-radius: 6px;
1138
+ cursor: pointer;
1139
+ display: inline-flex;
1140
+ align-items: center;
1141
+ justify-content: center;
1142
+ gap: 6px;
1143
+ transition: all 0.2s ease;
1144
+ }
1145
+
1146
+ .layout-btn:hover {
1147
+ color: var(--ink);
1148
+ }
1149
+
1150
+ .layout-btn.active {
1151
+ background: var(--paper);
1152
+ color: var(--accent);
1153
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
1154
+ }
1155
+
1156
+ /* Beautiful taskstatsbar metrics strip */
1157
+ .task-stats-bar {
1158
+ display: flex;
1159
+ flex-wrap: wrap;
1160
+ gap: 12px;
1161
+ align-items: center;
1162
+ padding: 16px 20px;
1163
+ background: var(--paper);
1164
+ border: 1px solid var(--line);
1165
+ border-radius: 12px;
1166
+ box-shadow: var(--shadow);
1167
+ margin-bottom: 24px;
1168
+ backdrop-filter: blur(10px);
1169
+ }
1170
+
1171
+ .stat-chip {
1172
+ display: flex;
1173
+ flex-direction: column;
1174
+ align-items: center;
1175
+ gap: 4px;
1176
+ padding: 8px 16px;
1177
+ border-radius: 8px;
1178
+ background: var(--paper-2);
1179
+ min-width: 64px;
1180
+ transition: transform 0.2s, box-shadow 0.2s;
1181
+ }
1182
+
1183
+ .stat-chip:hover {
1184
+ transform: translateY(-1px);
1185
+ box-shadow: 0 4px 6px rgba(0,0,0,0.02);
1186
+ }
1187
+
1188
+ .stat-chip .stat-value {
1189
+ font-size: 20px;
1190
+ font-weight: 800;
1191
+ color: var(--ink);
1192
+ line-height: 1;
1193
+ }
1194
+
1195
+ .stat-chip .stat-label {
1196
+ font-size: 11px;
1197
+ color: var(--muted);
1198
+ font-weight: 700;
1199
+ text-transform: uppercase;
1200
+ }
1201
+
1202
+ .stat-chip.in-progress .stat-value {
1203
+ color: var(--accent);
1204
+ }
1205
+
1206
+ .stat-chip.review .stat-value {
1207
+ color: var(--accent-2);
1208
+ }
1209
+
1210
+ .stat-chip.blocked .stat-value {
1211
+ color: var(--danger);
1212
+ }
1213
+
1214
+ .stat-chip.done .stat-value {
1215
+ color: var(--ok);
1216
+ }
1217
+
1218
+ .stat-chip.completion {
1219
+ flex: 1;
1220
+ min-width: 180px;
1221
+ flex-direction: row;
1222
+ gap: 12px;
1223
+ align-items: center;
1224
+ }
1225
+
1226
+ .stat-bar-track {
1227
+ flex: 1;
1228
+ height: 8px;
1229
+ background: var(--paper);
1230
+ border-radius: 4px;
1231
+ border: 1px solid var(--line);
1232
+ overflow: hidden;
1233
+ position: relative;
1234
+ }
1235
+
1236
+ .stat-bar-fill {
1237
+ height: 100%;
1238
+ background: linear-gradient(90deg, var(--accent), var(--accent-2));
1239
+ border-radius: 4px;
1240
+ transition: width 0.5s ease;
1241
+ }
1242
+
1243
+ /* Beautiful upgraded Task Row List view styling */
1244
+ .task-list {
1245
+ display: flex;
1246
+ flex-direction: column;
1247
+ gap: 1px;
1248
+ background: var(--line);
1249
+ border-radius: 12px;
1250
+ overflow: hidden;
1251
+ border: 1px solid var(--line);
1252
+ margin-top: 16px;
1253
+ }
1254
+
1255
+ /* Table Header for Task List */
1256
+ .task-list-header {
1257
+ display: grid;
1258
+ grid-template-columns: minmax(0, 1fr) 100px 120px 100px 100px;
1259
+ gap: 16px;
1260
+ align-items: center;
1261
+ padding: 10px 20px;
1262
+ background: var(--paper-2);
1263
+ border-bottom: 1px solid var(--line);
1264
+ font-size: 11px;
1265
+ font-weight: 700;
1266
+ color: var(--muted);
1267
+ text-transform: uppercase;
1268
+ letter-spacing: 0.05em;
1269
+ }
1270
+
1271
+ .mini-progress-track {
1272
+ width: 80px;
1273
+ height: 6px;
1274
+ background: var(--bg);
1275
+ border-radius: 3px;
1276
+ border: 1px solid var(--line);
1277
+ overflow: hidden;
1278
+ position: relative;
1279
+ display: inline-block;
1280
+ }
1281
+
1282
+ .mini-progress-fill {
1283
+ height: 100%;
1284
+ background: linear-gradient(90deg, var(--row-accent, var(--accent)), var(--accent-2));
1285
+ border-radius: 3px;
1286
+ transition: width 0.4s;
1287
+ }
1288
+
1289
+ .task-row-card {
1290
+ display: grid;
1291
+ grid-template-columns: minmax(0, 1fr) 100px 120px 100px 100px;
1292
+ gap: 16px;
1293
+ align-items: center;
1294
+ padding: 14px 20px;
1295
+ text-decoration: none;
1296
+ background: var(--paper);
1297
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
1298
+ position: relative;
1299
+ }
1300
+
1301
+ .task-row-card:hover {
1302
+ background: var(--paper-2);
1303
+ z-index: 1;
1304
+ }
1305
+
1306
+ .row-accent-bar {
1307
+ position: absolute;
1308
+ left: 0;
1309
+ top: 0;
1310
+ bottom: 0;
1311
+ width: 4px;
1312
+ background: var(--row-accent, var(--muted));
1313
+ transition: width 0.2s;
1314
+ }
1315
+
1316
+ .task-row-card:hover .row-accent-bar {
1317
+ width: 6px;
1318
+ }
1319
+
1320
+ .row-main {
1321
+ min-width: 0;
1322
+ }
1323
+
1324
+ .row-main strong {
1325
+ font-size: 14px;
1326
+ font-weight: 700;
1327
+ color: var(--ink);
1328
+ display: block;
1329
+ overflow: hidden;
1330
+ text-overflow: ellipsis;
1331
+ white-space: nowrap;
1332
+ }
1333
+
1334
+ .row-meta {
1335
+ display: block;
1336
+ font-family: var(--font-mono);
1337
+ font-size: 11px;
1338
+ color: var(--muted);
1339
+ overflow: hidden;
1340
+ text-overflow: ellipsis;
1341
+ white-space: nowrap;
1342
+ margin-top: 4px;
1343
+ }
1344
+
1345
+ .row-status {
1346
+ display: flex;
1347
+ align-items: center;
1348
+ }
1349
+
1350
+ .row-progress {
1351
+ display: flex;
1352
+ align-items: center;
1353
+ gap: 8px;
1354
+ }
1355
+
1356
+ .row-pct {
1357
+ font-size: 11px;
1358
+ font-weight: 800;
1359
+ color: var(--ink);
1360
+ min-width: 32px;
1361
+ text-align: right;
1362
+ }
1363
+
1364
+ .row-brief {
1365
+ display: inline-flex;
1366
+ }
1367
+
1368
+ .row-map {
1369
+ display: inline-flex;
1370
+ }
1371
+
1372
+ /* Task Card Grid */
1373
+ .task-card-grid {
1374
+ display: grid;
1375
+ grid-template-columns: 1fr;
1376
+ gap: 16px;
1377
+ margin-top: 16px;
1378
+ }
1379
+
1380
+ @media (min-width: 640px) {
1381
+ .task-card-grid {
1382
+ grid-template-columns: repeat(2, 1fr);
1383
+ }
1384
+ }
1385
+
1386
+ @media (min-width: 1440px) {
1387
+ .task-card-grid {
1388
+ grid-template-columns: repeat(3, 1fr);
1389
+ }
1390
+ }
1391
+
1392
+ /* Elegant Task Card Component */
1393
+ .task-card {
1394
+ display: flex;
1395
+ flex-direction: column;
1396
+ background: var(--paper);
1397
+ border: 1px solid var(--line);
1398
+ border-radius: 12px;
1399
+ padding: 16px;
1400
+ gap: 12px;
1401
+ text-decoration: none;
1402
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px -1px rgba(0, 0, 0, 0.01);
1403
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
1404
+ position: relative;
1405
+ overflow: hidden;
1406
+ }
1407
+
1408
+ .task-card::before {
1409
+ content: "";
1410
+ position: absolute;
1411
+ top: 0;
1412
+ left: 0;
1413
+ right: 0;
1414
+ height: 4px;
1415
+ background: var(--row-accent, var(--muted));
1416
+ transition: height 0.25s;
1417
+ }
1418
+
1419
+ .task-card:hover {
1420
+ transform: translateY(-3px);
1421
+ box-shadow: var(--shadow-hover), 0 0 0 1px var(--row-accent);
1422
+ border-color: transparent;
1423
+ }
1424
+
1425
+ .task-card:hover::before {
1426
+ height: 6px;
1427
+ }
1428
+
1429
+ .task-card .card-header {
1430
+ display: flex;
1431
+ justify-content: space-between;
1432
+ align-items: center;
1433
+ gap: 8px;
1434
+ margin-top: 4px;
1435
+ }
1436
+
1437
+ .task-card .card-id {
1438
+ font-family: var(--font-mono);
1439
+ font-size: 11px;
1440
+ font-weight: 600;
1441
+ color: var(--muted);
1442
+ background: var(--paper-2);
1443
+ padding: 2px 6px;
1444
+ border-radius: 4px;
1445
+ }
1446
+
1447
+ .task-card .card-title {
1448
+ margin: 0;
1449
+ font-size: 14px;
1450
+ font-weight: 700;
1451
+ color: var(--ink);
1452
+ line-height: 1.4;
1453
+ display: -webkit-box;
1454
+ -webkit-line-clamp: 2;
1455
+ -webkit-box-orient: vertical;
1456
+ overflow: hidden;
1457
+ text-overflow: ellipsis;
1458
+ height: 38px;
1459
+ }
1460
+
1461
+ .task-card .card-meta {
1462
+ display: flex;
1463
+ align-items: center;
1464
+ gap: 6px;
1465
+ font-size: 11px;
1466
+ color: var(--muted);
1467
+ font-weight: 600;
1468
+ }
1469
+
1470
+ .task-card .meta-module {
1471
+ overflow: hidden;
1472
+ text-overflow: ellipsis;
1473
+ white-space: nowrap;
1474
+ max-width: 100%;
1475
+ display: inline-flex;
1476
+ align-items: center;
1477
+ gap: 4px;
1478
+ }
1479
+
1480
+ .task-card .card-progress {
1481
+ display: flex;
1482
+ align-items: center;
1483
+ gap: 8px;
1484
+ margin-top: auto;
1485
+ }
1486
+
1487
+ .task-card .card-progress-track {
1488
+ flex: 1;
1489
+ height: 6px;
1490
+ background: var(--paper-2);
1491
+ border-radius: 3px;
1492
+ border: 1px solid var(--line);
1493
+ overflow: hidden;
1494
+ }
1495
+
1496
+ .task-card .card-progress-fill {
1497
+ height: 100%;
1498
+ background: linear-gradient(90deg, var(--row-accent, var(--accent)), var(--accent-2));
1499
+ border-radius: 3px;
1500
+ transition: width 0.4s;
1501
+ }
1502
+
1503
+ .task-card .progress-pct {
1504
+ font-size: 11px;
1505
+ font-weight: 800;
1506
+ color: var(--ink);
1507
+ min-width: 32px;
1508
+ text-align: right;
1509
+ }
1510
+
1511
+ .task-card .card-badges {
1512
+ display: flex;
1513
+ flex-wrap: wrap;
1514
+ gap: 6px;
1515
+ border-top: 1px dashed var(--line);
1516
+ padding-top: 10px;
1517
+ }
1518
+
1519
+ .task-card .badge,
1520
+ .task-row-card .badge {
1521
+ font-size: 10px;
1522
+ font-weight: 700;
1523
+ padding: 2px 6px;
1524
+ border-radius: 4px;
1525
+ display: inline-flex;
1526
+ align-items: center;
1527
+ gap: 4px;
1528
+ }
1529
+
1530
+ .task-card .badge.brief.ready,
1531
+ .task-row-card .badge.brief.ready {
1532
+ background: rgba(22, 163, 74, 0.08);
1533
+ color: #16a34a;
1534
+ border: 1px solid rgba(22, 163, 74, 0.15);
1535
+ }
1536
+
1537
+ .task-card .badge.brief.missing,
1538
+ .task-row-card .badge.brief.missing {
1539
+ background: var(--bg);
1540
+ color: var(--muted);
1541
+ border: 1px solid var(--line);
1542
+ }
1543
+
1544
+ .task-card .badge.map.ready,
1545
+ .task-row-card .badge.map.ready {
1546
+ background: rgba(217, 119, 6, 0.08);
1547
+ color: var(--accent);
1548
+ border: 1px solid rgba(217, 119, 6, 0.15);
1549
+ }
1550
+
1551
+ .task-card .badge.map.missing,
1552
+ .task-row-card .badge.map.missing {
1553
+ background: var(--bg);
1554
+ color: var(--muted);
1555
+ border: 1px solid var(--line);
1556
+ }
1557
+
1558
+ .review-queue-stats {
1559
+ display: grid;
1560
+ grid-template-columns: 1fr;
1561
+ gap: 10px;
1562
+ }
1563
+
1564
+ .review-queue-stats .metric {
1565
+ min-height: 82px;
1566
+ padding: 14px;
1567
+ }
1568
+
1569
+ .review-queue-summary {
1570
+ display: grid;
1571
+ gap: 14px;
1572
+ }
1573
+
1574
+ .review-queue-card {
1575
+ gap: 14px;
1576
+ }
1577
+
1578
+ .review-queue-card .side-panel {
1579
+ box-shadow: none;
1580
+ background: var(--bg);
1581
+ padding: 14px;
1582
+ }
1583
+
1584
+ .review-queue-actions {
1585
+ display: flex;
1586
+ gap: 10px;
1587
+ flex-wrap: wrap;
1588
+ align-items: center;
1589
+ }
1590
+
1591
+ .review-queue-actions a,
1592
+ .review-queue-actions button {
1593
+ border: 1px solid var(--line);
1594
+ background: var(--paper-2);
1595
+ color: var(--ink);
1596
+ border-radius: 8px;
1597
+ padding: 8px 12px;
1598
+ font-size: 12px;
1599
+ font-weight: 800;
1600
+ text-decoration: none;
1601
+ cursor: pointer;
1602
+ }
1603
+
1604
+ .review-queue-actions a:hover,
1605
+ .review-queue-actions button:hover {
1606
+ border-color: var(--accent);
1607
+ }
1608
+
1609
+ .runtime-banner {
1610
+ display: flex;
1611
+ flex-wrap: wrap;
1612
+ gap: 10px;
1613
+ align-items: center;
1614
+ margin: 14px 0;
1615
+ padding: 12px 16px;
1616
+ border: 1px solid rgba(217, 119, 6, 0.22);
1617
+ border-radius: 10px;
1618
+ background: rgba(217, 119, 6, 0.08);
1619
+ color: var(--ink);
1620
+ }
1621
+
1622
+ .runtime-banner span {
1623
+ color: var(--muted);
1624
+ }
1625
+
1626
+ .runtime-banner code {
1627
+ font-family: var(--font-mono);
1628
+ font-size: 12px;
1629
+ }
1630
+
1631
+ .review-workspace {
1632
+ display: grid;
1633
+ gap: 20px;
1634
+ }
1635
+
1636
+ .review-workspace-grid {
1637
+ display: grid;
1638
+ grid-template-columns: minmax(0, 1fr);
1639
+ gap: 20px;
1640
+ }
1641
+
1642
+ @media (min-width: 1180px) {
1643
+ .review-workspace-grid {
1644
+ grid-template-columns: minmax(0, 2fr) minmax(320px, 420px);
1645
+ align-items: start;
1646
+ }
1647
+ }
1648
+
1649
+ .review-workspace-side {
1650
+ position: sticky;
1651
+ top: 16px;
1652
+ }
1653
+
1654
+ .review-hero-tags {
1655
+ display: flex;
1656
+ flex-wrap: wrap;
1657
+ justify-content: flex-end;
1658
+ gap: 8px;
1659
+ }
1660
+
1661
+ /* Beautiful Group Header styling */
1662
+ .task-group {
1663
+ background: var(--paper);
1664
+ border: 1px solid var(--line);
1665
+ border-radius: 12px;
1666
+ box-shadow: var(--shadow);
1667
+ padding: 20px;
1668
+ margin-bottom: 24px;
1669
+ }
1670
+
1671
+ .task-group .section-head {
1672
+ display: flex;
1673
+ justify-content: space-between;
1674
+ align-items: center;
1675
+ border-bottom: 1px solid var(--line);
1676
+ padding-bottom: 16px;
1677
+ margin-bottom: 8px;
1678
+ border-left: none; /* remove legacy left border */
1679
+ }
1680
+
1681
+ .task-group .section-head h2 {
1682
+ font-size: 16px;
1683
+ font-weight: 800;
1684
+ margin: 0;
1685
+ color: var(--ink);
1686
+ }
1687
+
1688
+ .task-group .section-head .subtle {
1689
+ font-size: 12px;
1690
+ color: var(--muted);
1691
+ margin: 4px 0 0;
1692
+ font-weight: 600;
1693
+ }
1694
+
1695
+ .task-group .group-actions {
1696
+ display: flex;
1697
+ align-items: center;
1698
+ gap: 16px;
1699
+ }
1700
+
1701
+ .task-group .group-progress {
1702
+ display: flex;
1703
+ align-items: center;
1704
+ gap: 8px;
1705
+ font-size: 12px;
1706
+ font-weight: 700;
1707
+ color: var(--ink);
1708
+ }
1709
+
1710
+ .task-group .group-progress-track {
1711
+ width: 60px;
1712
+ height: 6px;
1713
+ background: var(--paper-2);
1714
+ border-radius: 3px;
1715
+ border: 1px solid var(--line);
1716
+ overflow: hidden;
1717
+ }
1718
+
1719
+ .task-group .group-progress-fill {
1720
+ height: 100%;
1721
+ background: linear-gradient(90deg, var(--accent), var(--accent-2));
1722
+ border-radius: 3px;
1723
+ transition: width 0.4s;
1724
+ }
1725
+
1726
+ /* Responsive arrangement for search tool order */
1727
+ @media (max-width: 1023px) {
1728
+ .tasks-grid {
1729
+ display: flex;
1730
+ flex-direction: column;
1731
+ }
1732
+ .tasks-sidebar {
1733
+ order: -1;
1734
+ }
1735
+ }
1736
+
1737
+ .crumbs {
1738
+ display: flex;
1739
+ align-items: center;
1740
+ gap: 8px;
1741
+ color: var(--muted);
1742
+ margin-bottom: 16px;
1743
+ font-size: 13px;
1744
+ font-weight: 600;
1745
+ }
1746
+
1747
+ .crumbs a:hover {
1748
+ color: var(--accent);
1749
+ }
1750
+
1751
+ /* Detail view panels */
1752
+ .detail-hero {
1753
+ display: flex;
1754
+ justify-content: space-between;
1755
+ gap: 18px;
1756
+ padding: 24px;
1757
+ margin-bottom: 20px;
1758
+ }
1759
+
1760
+ .detail-hero > div {
1761
+ min-width: 0;
1762
+ }
1763
+
1764
+ .crumbs,
1765
+ .eyebrow {
1766
+ overflow-wrap: anywhere;
1767
+ }
1768
+
1769
+ .detail-score {
1770
+ font-size: 42px;
1771
+ font-weight: 800;
1772
+ color: var(--accent);
1773
+ line-height: 1;
1774
+ }
1775
+
1776
+ .phase-timeline {
1777
+ display: grid;
1778
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
1779
+ gap: 12px;
1780
+ margin-bottom: 24px;
1781
+ }
1782
+
1783
+ .phase-timeline h2 {
1784
+ grid-column: 1 / -1;
1785
+ margin: 0 0 4px;
1786
+ font-size: 16px;
1787
+ }
1788
+
1789
+ .phase-step {
1790
+ background: var(--paper);
1791
+ border: 1px solid var(--line);
1792
+ border-radius: 12px;
1793
+ padding: 16px;
1794
+ box-shadow: var(--shadow);
1795
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
1796
+ }
1797
+
1798
+ .phase-step:hover {
1799
+ transform: translateY(-2px);
1800
+ box-shadow: var(--shadow-hover);
1801
+ }
1802
+
1803
+ .phase-step strong {
1804
+ font-size: 14px;
1805
+ font-weight: 800;
1806
+ }
1807
+
1808
+ .phase-step p {
1809
+ color: var(--muted);
1810
+ min-height: 42px;
1811
+ font-size: 12px;
1812
+ margin: 8px 0;
1813
+ line-height: 1.4;
1814
+ }
1815
+
1816
+ .detail-grid {
1817
+ display: grid;
1818
+ grid-template-columns: minmax(0, 1.8fr) minmax(280px, 360px);
1819
+ gap: 20px;
1820
+ align-items: start;
1821
+ }
1822
+
1823
+ .detail-main {
1824
+ display: grid;
1825
+ gap: 20px;
1826
+ }
1827
+
1828
+ .doc-section {
1829
+ padding: 24px;
1830
+ }
1831
+
1832
+ .doc-library {
1833
+ padding: 22px;
1834
+ }
1835
+
1836
+ .doc-accordion-list {
1837
+ display: grid;
1838
+ gap: 10px;
1839
+ }
1840
+
1841
+ .doc-accordion {
1842
+ border: 1px solid var(--line);
1843
+ border-radius: 10px;
1844
+ background: var(--paper-2);
1845
+ overflow: clip;
1846
+ }
1847
+
1848
+ .doc-accordion[open] {
1849
+ background: var(--paper);
1850
+ box-shadow: 0 10px 28px rgba(15, 23, 42, 0.08);
1851
+ }
1852
+
1853
+ .doc-accordion summary {
1854
+ cursor: pointer;
1855
+ display: grid;
1856
+ grid-template-columns: minmax(120px, max-content) minmax(0, 1fr);
1857
+ gap: 12px;
1858
+ align-items: center;
1859
+ padding: 14px 16px;
1860
+ list-style: none;
1861
+ }
1862
+
1863
+ .doc-accordion summary::-webkit-details-marker {
1864
+ display: none;
1865
+ }
1866
+
1867
+ .doc-accordion summary::before {
1868
+ content: "›";
1869
+ width: 20px;
1870
+ height: 20px;
1871
+ display: inline-grid;
1872
+ place-items: center;
1873
+ grid-column: 1;
1874
+ grid-row: 1;
1875
+ margin-right: 8px;
1876
+ color: var(--accent);
1877
+ transform: rotate(0deg);
1878
+ transition: transform 0.2s ease;
1879
+ }
1880
+
1881
+ .doc-accordion[open] summary::before {
1882
+ transform: rotate(90deg);
1883
+ }
1884
+
1885
+ .doc-accordion summary span {
1886
+ grid-column: 1;
1887
+ grid-row: 1;
1888
+ padding-left: 28px;
1889
+ font-weight: 850;
1890
+ color: var(--ink);
1891
+ }
1892
+
1893
+ .doc-accordion summary small {
1894
+ min-width: 0;
1895
+ overflow: hidden;
1896
+ text-overflow: ellipsis;
1897
+ white-space: nowrap;
1898
+ color: var(--muted);
1899
+ font-family: var(--font-mono);
1900
+ font-size: 11px;
1901
+ }
1902
+
1903
+ .doc-accordion .markdown {
1904
+ border-top: 1px solid var(--line);
1905
+ padding: 18px 22px 22px;
1906
+ }
1907
+
1908
+ .detail-side {
1909
+ display: grid;
1910
+ gap: 16px;
1911
+ position: sticky;
1912
+ top: 16px;
1913
+ }
1914
+
1915
+ .side-panel {
1916
+ padding: 20px;
1917
+ }
1918
+
1919
+ .side-panel a {
1920
+ display: inline-flex;
1921
+ margin: 6px 6px 0 0;
1922
+ padding: 6px 12px;
1923
+ border-radius: 999px; /* Pill */
1924
+ background: var(--paper-2);
1925
+ border: 1px solid var(--line);
1926
+ font-size: 12px;
1927
+ font-weight: 700;
1928
+ transition: all 0.2s ease;
1929
+ }
1930
+
1931
+ .side-panel a:hover {
1932
+ background: var(--accent);
1933
+ color: var(--paper);
1934
+ border-color: var(--accent);
1935
+ transform: scale(1.03);
1936
+ }
1937
+
1938
+ .finding {
1939
+ display: grid;
1940
+ gap: 4px;
1941
+ padding: 10px 0;
1942
+ border-bottom: 1px solid var(--line);
1943
+ }
1944
+
1945
+ .finding:last-child {
1946
+ border-bottom: none;
1947
+ }
1948
+
1949
+ .finding.open {
1950
+ color: var(--danger);
1951
+ border-left: 2px solid var(--danger);
1952
+ padding-left: 8px;
1953
+ }
1954
+
1955
+ .finding strong {
1956
+ font-size: 12px;
1957
+ text-transform: uppercase;
1958
+ letter-spacing: 0.05em;
1959
+ }
1960
+
1961
+ .finding span {
1962
+ font-size: 13px;
1963
+ font-weight: 500;
1964
+ }
1965
+
1966
+ /* Module Grid */
1967
+ .module-grid {
1968
+ display: grid;
1969
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 400px), 1fr));
1970
+ gap: 16px;
1971
+ }
1972
+
1973
+ .module-card {
1974
+ padding: 24px;
1975
+ }
1976
+
1977
+ .module-more {
1978
+ display: inline-flex;
1979
+ margin-top: 14px;
1980
+ padding: 8px 16px;
1981
+ border-radius: 999px;
1982
+ background: var(--paper-2);
1983
+ border: 1px solid var(--line);
1984
+ font-size: 12px;
1985
+ font-weight: 700;
1986
+ transition: all 0.2s ease;
1987
+ }
1988
+
1989
+ .module-more:hover {
1990
+ background: var(--accent);
1991
+ color: var(--paper);
1992
+ border-color: var(--accent);
1993
+ }
1994
+
1995
+ /* Migration workbench */
1996
+ .migration-grid {
1997
+ display: grid;
1998
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
1999
+ gap: 12px;
2000
+ margin-bottom: 16px;
2001
+ }
2002
+
2003
+ .migration-grid > div,
2004
+ .migration-grid > button,
2005
+ .lesson {
2006
+ background: var(--paper-2);
2007
+ color: var(--ink);
2008
+ border: 1px solid var(--line);
2009
+ border-radius: 10px;
2010
+ padding: 16px;
2011
+ text-align: left;
2012
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
2013
+ }
2014
+
2015
+ .migration-grid > button {
2016
+ cursor: pointer;
2017
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.01);
2018
+ }
2019
+
2020
+ .migration-grid > button.active,
2021
+ .migration-grid > button:hover {
2022
+ border-color: var(--accent);
2023
+ background: var(--paper);
2024
+ transform: translateY(-2px);
2025
+ box-shadow: var(--shadow);
2026
+ }
2027
+
2028
+ .migration-grid p {
2029
+ margin: 6px 0 0;
2030
+ color: var(--muted);
2031
+ font-size: 12px;
2032
+ }
2033
+
2034
+ .warning-workbench {
2035
+ border-top: 1px solid var(--line);
2036
+ padding-top: 20px;
2037
+ }
2038
+
2039
+ .warning-toolbar,
2040
+ .pager {
2041
+ display: flex;
2042
+ align-items: center;
2043
+ gap: 10px;
2044
+ flex-wrap: wrap;
2045
+ }
2046
+
2047
+ .warning-toolbar {
2048
+ justify-content: space-between;
2049
+ margin-bottom: 14px;
2050
+ color: var(--muted);
2051
+ font-size: 13px;
2052
+ font-weight: 500;
2053
+ }
2054
+
2055
+ .pager button {
2056
+ border: 1px solid var(--line);
2057
+ background: var(--paper);
2058
+ color: var(--ink);
2059
+ border-radius: 999px;
2060
+ padding: 6px 14px;
2061
+ font-size: 12px;
2062
+ font-weight: 700;
2063
+ cursor: pointer;
2064
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
2065
+ }
2066
+
2067
+ .pager button:disabled {
2068
+ opacity: 0.3;
2069
+ cursor: not-allowed;
2070
+ }
2071
+
2072
+ .pager button:hover:not(:disabled) {
2073
+ background: var(--paper-2);
2074
+ border-color: var(--muted);
2075
+ }
2076
+
2077
+ .warning-list {
2078
+ display: grid;
2079
+ border: 1px solid var(--line);
2080
+ border-radius: 12px;
2081
+ overflow: hidden;
2082
+ box-shadow: var(--shadow);
2083
+ }
2084
+
2085
+ .warning-row {
2086
+ display: grid;
2087
+ grid-template-columns: minmax(220px, 1.2fr) auto 80px 120px 140px minmax(220px, 1.5fr);
2088
+ gap: 12px;
2089
+ align-items: center;
2090
+ padding: 14px 18px;
2091
+ background: var(--paper);
2092
+ border-bottom: 1px solid var(--line);
2093
+ transition: all 0.2s ease;
2094
+ }
2095
+
2096
+ .warning-row:last-child {
2097
+ border-bottom: 0;
2098
+ }
2099
+
2100
+ .warning-row:hover {
2101
+ background: var(--paper-2);
2102
+ }
2103
+
2104
+ .warning-row p {
2105
+ margin: 0;
2106
+ color: var(--muted);
2107
+ font-size: 12px;
2108
+ font-weight: 500;
2109
+ line-height: 1.4;
2110
+ }
2111
+
2112
+ .warning-row strong {
2113
+ font-size: 13px;
2114
+ font-weight: 800;
2115
+ }
2116
+
2117
+ .lesson + .lesson {
2118
+ margin-top: 10px;
2119
+ }
2120
+
2121
+ .lesson:hover {
2122
+ transform: translateY(-1px);
2123
+ box-shadow: var(--shadow);
2124
+ }
2125
+
2126
+ .health-panel {
2127
+ display: grid;
2128
+ grid-template-columns: 280px minmax(0, 1fr);
2129
+ gap: 24px;
2130
+ }
2131
+
2132
+ .health-lists {
2133
+ display: grid;
2134
+ gap: 10px;
2135
+ }
2136
+
2137
+ details {
2138
+ background: var(--paper-2);
2139
+ border: 1px solid var(--line);
2140
+ border-radius: 8px;
2141
+ padding: 12px 16px;
2142
+ transition: all 0.2s ease;
2143
+ }
2144
+
2145
+ details[open] {
2146
+ background: var(--paper);
2147
+ border-color: var(--accent);
2148
+ }
2149
+
2150
+ details summary {
2151
+ font-weight: 700;
2152
+ cursor: pointer;
2153
+ font-size: 13px;
2154
+ }
2155
+
2156
+ .empty {
2157
+ color: var(--muted);
2158
+ border: 2px dashed var(--line);
2159
+ border-radius: 8px;
2160
+ padding: 24px;
2161
+ text-align: center;
2162
+ font-weight: 500;
2163
+ font-size: 13px;
2164
+ }
2165
+
2166
+ /* Mobile Responsiveness Rules */
2167
+ @media (max-width: 920px) {
2168
+ .hero {
2169
+ flex-direction: column;
2170
+ align-items: flex-start;
2171
+ }
2172
+
2173
+ .metrics-grid,
2174
+ .detail-grid,
2175
+ .health-panel {
2176
+ grid-template-columns: 1fr;
2177
+ }
2178
+
2179
+ .hero-actions {
2180
+ justify-content: flex-start;
2181
+ width: 100%;
2182
+ }
2183
+
2184
+ .task-row {
2185
+ grid-template-columns: 1fr;
2186
+ padding: 16px;
2187
+ gap: 8px;
2188
+ }
2189
+
2190
+ .task-row-head {
2191
+ display: none;
2192
+ }
2193
+
2194
+ .task-row > span:not(:first-child)::before {
2195
+ content: attr(data-label) ": ";
2196
+ display: inline-block;
2197
+ color: var(--muted);
2198
+ font-size: 12px;
2199
+ font-weight: 600;
2200
+ margin-right: 8px;
2201
+ min-width: 90px;
2202
+ }
2203
+
2204
+ .index-toolbar {
2205
+ grid-template-columns: 1fr;
2206
+ }
2207
+
2208
+ /* Card rows collapse on mobile */
2209
+ .task-row-card {
2210
+ grid-template-columns: 4px 1fr;
2211
+ gap: 8px;
2212
+ padding: 12px 16px 12px 0;
2213
+ }
2214
+ .task-row-card .row-status,
2215
+ .task-row-card .row-progress,
2216
+ .task-row-card .row-brief {
2217
+ grid-column: 2;
2218
+ }
2219
+ .task-row-card .row-progress {
2220
+ max-width: 200px;
2221
+ }
2222
+
2223
+ .task-stats-bar {
2224
+ gap: 8px;
2225
+ }
2226
+ .stat-chip {
2227
+ min-width: 56px;
2228
+ padding: 6px 12px;
2229
+ }
2230
+ .stat-chip.completion {
2231
+ min-width: 140px;
2232
+ }
2233
+
2234
+ .warning-row {
2235
+ grid-template-columns: 1fr;
2236
+ gap: 8px;
2237
+ padding: 16px;
2238
+ }
2239
+
2240
+ .detail-side {
2241
+ position: static;
2242
+ }
2243
+ }
2244
+
2245
+ /* Slide-over Drawer Component */
2246
+ .drawer-overlay {
2247
+ position: fixed;
2248
+ top: 0;
2249
+ left: 0;
2250
+ width: 100%;
2251
+ height: 100%;
2252
+ background: rgba(0, 0, 0, 0.45);
2253
+ backdrop-filter: blur(4px);
2254
+ z-index: 1000;
2255
+ opacity: 0;
2256
+ pointer-events: none;
2257
+ transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
2258
+ }
2259
+ .drawer-overlay.active {
2260
+ opacity: 1;
2261
+ pointer-events: auto;
2262
+ }
2263
+
2264
+ .task-drawer {
2265
+ position: fixed;
2266
+ top: 0;
2267
+ right: -67vw;
2268
+ width: 65vw;
2269
+ max-width: 100%;
2270
+ height: 100%;
2271
+ background: var(--paper);
2272
+ border-left: 1px solid var(--line);
2273
+ box-shadow: -8px 0 32px rgba(0, 0, 0, 0.25);
2274
+ z-index: 1001;
2275
+ display: flex;
2276
+ flex-direction: column;
2277
+ transition: right 0.35s cubic-bezier(0.16, 1, 0.3, 1);
42
2278
  }
43
- .layout {
44
- min-height: 100vh;
45
- display: grid;
46
- grid-template-columns: 248px minmax(0, 1fr);
2279
+ .task-drawer.active {
2280
+ right: 0;
47
2281
  }
48
- .sidebar {
49
- border-right: 1px solid var(--line);
50
- background: var(--surface);
51
- padding: 22px 18px;
52
- position: sticky;
53
- top: 0;
54
- height: 100vh;
2282
+ @media (max-width: 768px) {
2283
+ .task-drawer {
2284
+ width: 100%;
2285
+ right: -102%;
2286
+ }
55
2287
  }
56
- .brand {
57
- display: grid;
58
- gap: 4px;
59
- margin-bottom: 24px;
2288
+
2289
+ .task-drawer-header {
2290
+ padding: 20px 24px;
2291
+ border-bottom: 1px solid var(--line);
2292
+ display: flex;
2293
+ justify-content: space-between;
2294
+ align-items: center;
2295
+ background: var(--paper-2);
60
2296
  }
61
- .brand strong { font-size: 18px; }
62
- .brand span { color: var(--muted); font-size: 13px; }
63
- .nav {
64
- display: grid;
65
- gap: 6px;
2297
+ .task-drawer-header h2 {
2298
+ font-size: 18px;
2299
+ font-weight: 800;
2300
+ margin: 0;
2301
+ letter-spacing: -0.01em;
66
2302
  }
67
- .nav button, .control button, .drawer-tabs button {
68
- border: 0;
69
- background: transparent;
2303
+ .task-drawer-header button.btn-close {
2304
+ background: none;
2305
+ border: none;
2306
+ font-size: 24px;
2307
+ font-weight: 300;
70
2308
  color: var(--muted);
71
- border-radius: 7px;
72
- padding: 9px 10px;
73
- text-align: left;
74
2309
  cursor: pointer;
2310
+ padding: 4px 10px;
2311
+ border-radius: 6px;
2312
+ transition: all 0.2s ease;
75
2313
  }
76
- .nav button.active, .nav button:hover, .control button.active, .drawer-tabs button.active {
77
- background: var(--surface-2);
2314
+ .task-drawer-header button.btn-close:hover {
2315
+ background: var(--line);
78
2316
  color: var(--ink);
79
2317
  }
80
- .main {
81
- padding: 24px clamp(18px, 4vw, 44px);
82
- min-width: 0;
83
- }
84
- .topbar {
85
- display: flex;
86
- justify-content: space-between;
87
- gap: 18px;
88
- align-items: flex-start;
89
- margin-bottom: 22px;
2318
+
2319
+ .task-drawer-body {
2320
+ flex: 1;
2321
+ overflow-y: auto;
2322
+ padding: 24px;
90
2323
  }
91
- .eyebrow {
92
- color: var(--muted);
2324
+
2325
+ /* Compact brief card teaser styles */
2326
+ .brief-teaser {
93
2327
  font-size: 13px;
94
- margin: 0 0 6px;
2328
+ color: var(--muted);
2329
+ line-height: 1.5;
2330
+ margin: 0 0 14px;
2331
+ display: -webkit-box;
2332
+ -webkit-line-clamp: 3;
2333
+ -webkit-box-orient: vertical;
2334
+ overflow: hidden;
2335
+ text-overflow: ellipsis;
95
2336
  }
96
- h1, h2, h3, p { margin-top: 0; letter-spacing: 0; }
97
- h1 { font-size: clamp(26px, 4vw, 42px); line-height: 1.04; max-width: 760px; }
98
- h2 { font-size: 20px; }
99
- h3 { font-size: 15px; }
100
- .controls {
2337
+ .card-actions {
101
2338
  display: flex;
102
- flex-wrap: wrap;
103
- gap: 8px;
104
- justify-content: flex-end;
2339
+ gap: 10px;
2340
+ margin-top: auto;
105
2341
  }
106
- .control {
107
- display: inline-flex;
2342
+ .btn-drawer-trigger {
2343
+ padding: 6px 14px;
2344
+ background: var(--paper-2);
108
2345
  border: 1px solid var(--line);
109
- border-radius: 8px;
110
- padding: 3px;
111
- background: var(--surface);
2346
+ border-radius: 6px;
2347
+ font-size: 12px;
2348
+ font-weight: 700;
2349
+ color: var(--ink);
2350
+ cursor: pointer;
2351
+ transition: all 0.2s ease;
112
2352
  }
113
- .status-grid {
114
- display: grid;
115
- grid-template-columns: minmax(260px, 1.4fr) repeat(3, minmax(150px, 0.7fr));
116
- gap: 12px;
117
- margin-bottom: 18px;
2353
+ .btn-drawer-trigger:hover {
2354
+ background: var(--accent);
2355
+ color: var(--paper);
2356
+ border-color: var(--accent);
118
2357
  }
119
- .panel, .metric, .table-panel, .drawer {
120
- background: var(--surface);
2358
+
2359
+ /* Compact capsules for module list tasks */
2360
+ .module-task-row {
2361
+ display: flex;
2362
+ justify-content: space-between;
2363
+ align-items: center;
2364
+ padding: 10px 14px;
2365
+ background: var(--paper-2);
121
2366
  border: 1px solid var(--line);
122
2367
  border-radius: 8px;
123
- box-shadow: var(--shadow);
124
- }
125
- .metric {
126
- padding: 16px;
127
- min-height: 112px;
128
- }
129
- .metric strong {
130
- display: block;
131
- font-size: 30px;
132
- line-height: 1;
2368
+ margin-bottom: 8px;
2369
+ text-decoration: none;
2370
+ transition: all 0.2s ease;
133
2371
  }
134
- .metric span, .muted { color: var(--muted); }
135
- .readiness {
136
- padding: 18px;
2372
+ .module-task-row:hover {
2373
+ border-color: var(--accent);
2374
+ transform: translateX(3px);
137
2375
  }
138
- .readiness .state {
139
- display: inline-flex;
2376
+ .module-task-left {
2377
+ display: flex;
140
2378
  align-items: center;
141
- border-radius: 7px;
142
- padding: 6px 9px;
143
- font-weight: 700;
144
- margin-bottom: 14px;
145
- }
146
- .state.pass, .tag.pass { background: color-mix(in srgb, var(--ok) 18%, transparent); color: var(--ok); }
147
- .state.warn, .tag.warn { background: color-mix(in srgb, var(--warn) 18%, transparent); color: var(--warn); }
148
- .state.fail, .tag.fail, .tag.open { background: color-mix(in srgb, var(--danger) 18%, transparent); color: var(--danger); }
149
- .page-grid {
150
- display: grid;
151
- grid-template-columns: minmax(0, 1fr) 410px;
152
- gap: 16px;
153
- align-items: start;
154
- }
155
- .page-grid > * {
156
- min-width: 0;
157
- }
158
- .table-panel {
159
- overflow: hidden;
2379
+ gap: 8px;
160
2380
  min-width: 0;
161
2381
  }
162
- .panel-head {
163
- display: flex;
164
- justify-content: space-between;
165
- gap: 12px;
166
- padding: 14px 16px;
167
- border-bottom: 1px solid var(--line);
168
- }
169
- .table-wrap { overflow: auto; }
170
- table {
171
- width: 100%;
172
- border-collapse: collapse;
173
- font-size: 14px;
2382
+ .module-task-dot {
2383
+ width: 8px;
2384
+ height: 8px;
2385
+ border-radius: 50%;
2386
+ flex-shrink: 0;
174
2387
  }
175
- [data-density="compact"] table { font-size: 13px; }
176
- th, td {
177
- padding: 11px 12px;
178
- border-bottom: 1px solid var(--line);
179
- vertical-align: top;
180
- text-align: left;
2388
+ .module-task-dot.state-pass { background: #4caf50; }
2389
+ .module-task-dot.state-warn { background: #ff9800; }
2390
+ .module-task-dot.state-fail { background: #f44336; }
2391
+
2392
+ .module-task-title {
2393
+ font-size: 13px;
2394
+ font-weight: 600;
2395
+ color: var(--ink);
2396
+ white-space: nowrap;
2397
+ overflow: hidden;
2398
+ text-overflow: ellipsis;
181
2399
  }
182
- [data-density="compact"] th, [data-density="compact"] td { padding: 7px 9px; }
183
- th {
184
- color: var(--muted);
2400
+ .module-task-pct {
2401
+ font-family: var(--font-mono);
185
2402
  font-size: 12px;
2403
+ color: var(--accent);
186
2404
  font-weight: 700;
187
- text-transform: uppercase;
188
- }
189
- tr {
190
- cursor: pointer;
191
- }
192
- tr:hover td {
193
- background: color-mix(in srgb, var(--accent) 8%, transparent);
2405
+ flex-shrink: 0;
2406
+ margin-left: 8px;
194
2407
  }
195
- .linklike {
196
- border: 0;
197
- padding: 0;
198
- background: transparent;
199
- color: var(--accent);
200
- font: inherit;
201
- text-align: left;
202
- cursor: pointer;
203
- overflow-wrap: anywhere;
2408
+
2409
+ /* Inline card pagination controls */
2410
+ .module-pager {
2411
+ display: flex;
2412
+ justify-content: space-between;
2413
+ align-items: center;
2414
+ margin-top: 12px;
2415
+ padding: 6px 12px;
2416
+ background: var(--paper-2);
2417
+ border: 1px solid var(--line);
2418
+ border-radius: 8px;
204
2419
  }
205
- .linklike:hover { text-decoration: underline; }
206
- .tag {
207
- display: inline-flex;
208
- border-radius: 999px;
209
- padding: 4px 8px;
210
- font-size: 12px;
2420
+ .module-pager button {
2421
+ background: var(--paper);
2422
+ border: 1px solid var(--line);
2423
+ color: var(--ink);
2424
+ padding: 4px 10px;
2425
+ border-radius: 6px;
2426
+ font-size: 11px;
211
2427
  font-weight: 700;
212
- background: var(--surface-2);
213
- }
214
- .bar {
215
- height: 7px;
216
- border-radius: 999px;
217
- background: var(--surface-2);
218
- overflow: hidden;
219
- margin-top: 6px;
2428
+ cursor: pointer;
2429
+ transition: all 0.15s ease;
220
2430
  }
221
- .bar i {
222
- display: block;
223
- height: 100%;
2431
+ .module-pager button:hover:not(:disabled) {
224
2432
  background: var(--accent);
2433
+ color: var(--paper);
2434
+ border-color: var(--accent);
225
2435
  }
226
- .drawer {
227
- position: sticky;
228
- top: 18px;
229
- min-width: 0;
230
- max-height: calc(100vh - 36px);
231
- overflow: hidden;
232
- display: grid;
233
- grid-template-rows: auto auto auto minmax(0, 1fr);
234
- }
235
- .drawer-head {
236
- padding: 15px 16px;
237
- border-bottom: 1px solid var(--line);
238
- }
239
- .drawer-tabs {
240
- display: flex;
241
- gap: 4px;
242
- overflow-x: auto;
243
- padding: 8px;
244
- border-bottom: 1px solid var(--line);
2436
+ .module-pager button:disabled {
2437
+ opacity: 0.4;
2438
+ cursor: not-allowed;
245
2439
  }
246
- .drawer-mode {
247
- display: flex;
248
- gap: 6px;
249
- padding: 8px 12px;
250
- border-bottom: 1px solid var(--line);
2440
+ .module-pager span {
2441
+ font-size: 11px;
2442
+ font-weight: 800;
2443
+ color: var(--muted);
251
2444
  }
252
- .drawer-mode button {
2445
+
2446
+ /* Clickable lessons in sidebar */
2447
+ .lesson-panel .lesson {
2448
+ padding: 10px 14px;
2449
+ background: var(--paper-2);
253
2450
  border: 1px solid var(--line);
254
- background: transparent;
255
- color: var(--muted);
256
- border-radius: 7px;
257
- padding: 6px 9px;
2451
+ border-radius: 8px;
2452
+ margin-bottom: 8px;
258
2453
  cursor: pointer;
2454
+ transition: all 0.2s ease;
259
2455
  }
260
- .drawer-mode button.active {
261
- color: var(--ink);
262
- background: var(--surface-2);
263
- }
264
- .drawer-tabs button {
265
- white-space: nowrap;
266
- font-size: 13px;
2456
+ .lesson-panel .lesson:hover {
2457
+ border-color: var(--accent);
2458
+ transform: translateX(3px);
267
2459
  }
268
- .drawer-body {
2460
+
2461
+ /* SSoT Ledger Visual Panel */
2462
+ .ledger-panel {
2463
+ background: var(--paper-2);
2464
+ border: 1px solid var(--line);
2465
+ border-radius: 12px;
269
2466
  padding: 16px;
270
- overflow: auto;
2467
+ margin-top: 16px;
271
2468
  }
272
- .markdown {
273
- line-height: 1.55;
2469
+ .ledger-panel h2 {
2470
+ font-size: 14px;
2471
+ font-weight: 800;
274
2472
  color: var(--ink);
2473
+ margin: 0 0 12px;
275
2474
  }
276
- .markdown h1 { font-size: 24px; }
277
- .markdown h2 { font-size: 18px; margin-top: 18px; }
278
- .markdown pre {
279
- white-space: pre-wrap;
280
- background: var(--surface-2);
281
- border-radius: 7px;
282
- padding: 10px;
283
- overflow: auto;
2475
+ .ledger-split-bar {
2476
+ display: flex;
2477
+ height: 8px;
2478
+ border-radius: 4px;
2479
+ overflow: hidden;
2480
+ background: var(--line);
2481
+ margin-bottom: 8px;
284
2482
  }
285
- .rendered-table-wrap {
286
- overflow: auto;
287
- margin: 12px 0;
288
- border: 1px solid var(--line);
289
- border-radius: 7px;
2483
+ .ledger-split-segment {
2484
+ height: 100%;
290
2485
  }
291
- .rendered-table {
292
- min-width: 520px;
293
- background: var(--surface);
2486
+ .ledger-split-segment.closed { background: #4caf50; }
2487
+ .ledger-split-segment.open { background: #ff9800; }
2488
+ .ledger-split-segment.blocked { background: #f44336; }
2489
+
2490
+ .ledger-split-legend {
2491
+ display: flex;
2492
+ justify-content: space-between;
2493
+ font-size: 11px;
2494
+ color: var(--muted);
2495
+ font-weight: 600;
2496
+ margin-bottom: 16px;
294
2497
  }
295
- .md-table {
296
- margin: 0 0 2px;
297
- box-shadow: none;
2498
+ .ledger-split-legend-item {
2499
+ display: flex;
2500
+ align-items: center;
2501
+ gap: 4px;
298
2502
  }
299
- .mermaid-fallback {
300
- margin: 12px 0;
301
- border: 1px solid var(--line);
302
- border-radius: 8px;
303
- padding: 10px;
304
- background: var(--surface-2);
2503
+ .ledger-split-legend-dot {
2504
+ width: 6px;
2505
+ height: 6px;
2506
+ border-radius: 50%;
305
2507
  }
306
- .mermaid-rendered {
307
- margin: 12px 0;
2508
+ .ledger-split-legend-dot.closed { background: #4caf50; }
2509
+ .ledger-split-legend-dot.open { background: #ff9800; }
2510
+ .ledger-split-legend-dot.blocked { background: #f44336; }
2511
+
2512
+ .ledger-gauge-row {
2513
+ display: grid;
2514
+ grid-template-columns: 1fr 1fr;
2515
+ gap: 12px;
2516
+ }
2517
+ .ledger-gauge-card {
2518
+ background: var(--paper);
308
2519
  border: 1px solid var(--line);
309
2520
  border-radius: 8px;
310
2521
  padding: 10px;
311
- background: var(--surface-2);
312
- overflow-x: auto;
2522
+ text-align: center;
313
2523
  }
314
- .mermaid-rendered figcaption {
315
- font-weight: 700;
316
- color: var(--accent);
317
- margin-bottom: 8px;
2524
+ .ledger-gauge-card span {
2525
+ display: block;
2526
+ font-size: 9px;
2527
+ font-weight: 800;
2528
+ color: var(--muted);
2529
+ text-transform: uppercase;
2530
+ margin-bottom: 4px;
318
2531
  }
319
- .mermaid-rendered svg {
320
- min-width: 360px;
321
- width: 100%;
322
- height: auto;
2532
+ .ledger-gauge-card strong {
2533
+ font-size: 16px;
2534
+ font-weight: 800;
2535
+ color: var(--accent);
323
2536
  }
324
- .mermaid-node rect {
325
- fill: var(--surface);
326
- stroke: var(--accent);
327
- stroke-width: 1.5;
2537
+
2538
+ /* Scroll containment for total overview cards */
2539
+ .warning-workbench .warning-list {
2540
+ max-height: 360px;
2541
+ overflow-y: auto;
328
2542
  }
329
- .mermaid-node text {
330
- fill: var(--ink);
331
- font-size: 11px;
2543
+ .lesson-panel {
2544
+ max-height: 320px;
2545
+ overflow-y: auto;
332
2546
  }
333
- .mermaid-edge {
334
- stroke: var(--accent);
335
- stroke-width: 1.5;
336
- fill: none;
2547
+ .health-panel .health-lists {
2548
+ max-height: 260px;
2549
+ overflow-y: auto;
337
2550
  }
338
- .mermaid-arrow {
339
- fill: var(--accent);
2551
+
2552
+ /* Elegant scrollbar style matching custom amber accent */
2553
+ .warning-workbench .warning-list::-webkit-scrollbar,
2554
+ .lesson-panel::-webkit-scrollbar,
2555
+ .health-panel .health-lists::-webkit-scrollbar {
2556
+ width: 6px;
2557
+ }
2558
+ .warning-workbench .warning-list::-webkit-scrollbar-track,
2559
+ .lesson-panel::-webkit-scrollbar-track,
2560
+ .health-panel .health-lists::-webkit-scrollbar-track {
2561
+ background: transparent;
340
2562
  }
341
- .graph-panel {
342
- margin-bottom: 16px;
343
- overflow: hidden;
2563
+ .warning-workbench .warning-list::-webkit-scrollbar-thumb,
2564
+ .lesson-panel::-webkit-scrollbar-thumb,
2565
+ .health-panel .health-lists::-webkit-scrollbar-thumb {
2566
+ background: var(--accent);
2567
+ border-radius: 3px;
2568
+ opacity: 0.5;
344
2569
  }
345
- .graph-lanes {
2570
+
2571
+ .task-state-summary {
346
2572
  display: grid;
347
- grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
2573
+ grid-template-columns: repeat(4, minmax(0, 1fr));
348
2574
  gap: 10px;
349
- padding: 14px;
2575
+ margin: 14px 0 18px;
350
2576
  }
351
- .lane {
352
- display: grid;
353
- gap: 5px;
354
- min-height: 88px;
2577
+ .task-state-summary > div {
2578
+ background: var(--paper);
355
2579
  border: 1px solid var(--line);
356
2580
  border-radius: 8px;
357
2581
  padding: 10px;
358
- background: var(--surface-2);
359
2582
  }
360
- .lane span, .lane small {
2583
+ .task-state-summary span:first-child {
2584
+ display: block;
361
2585
  color: var(--muted);
362
- overflow-wrap: anywhere;
363
- }
364
- .mermaid-fallback figcaption {
365
- font-weight: 700;
366
- color: var(--accent);
367
- margin-bottom: 8px;
2586
+ font-size: 10px;
2587
+ font-weight: 800;
2588
+ margin-bottom: 6px;
2589
+ text-transform: uppercase;
368
2590
  }
369
- .risk-list {
2591
+ .review-actions {
370
2592
  display: grid;
2593
+ gap: 10px;
2594
+ }
2595
+ .review-actions p {
2596
+ margin: 0;
2597
+ color: var(--muted);
2598
+ font-size: 12px;
2599
+ line-height: 1.45;
2600
+ }
2601
+ .review-check {
2602
+ display: flex;
2603
+ align-items: flex-start;
371
2604
  gap: 8px;
2605
+ color: var(--text);
2606
+ font-size: 12px;
2607
+ line-height: 1.4;
372
2608
  }
373
- .risk-item {
374
- border-left: 3px solid var(--accent-2);
375
- padding: 8px 10px;
376
- background: var(--surface-2);
377
- border-radius: 6px;
2609
+ .review-actions input[type="text"],
2610
+ .review-actions input:not([type]) {
2611
+ width: 100%;
2612
+ min-width: 0;
2613
+ border: 1px solid var(--line);
2614
+ border-radius: 8px;
2615
+ background: var(--paper);
2616
+ color: var(--text);
2617
+ padding: 9px 10px;
2618
+ font: inherit;
378
2619
  }
379
- .empty {
2620
+ .review-actions button {
2621
+ width: 100%;
2622
+ border: 0;
2623
+ border-radius: 8px;
2624
+ background: var(--accent);
2625
+ color: #fff;
2626
+ cursor: pointer;
2627
+ font-weight: 800;
2628
+ padding: 10px 12px;
2629
+ }
2630
+ .review-actions button:disabled,
2631
+ .review-actions input:disabled {
2632
+ cursor: not-allowed;
2633
+ opacity: 0.55;
2634
+ }
2635
+ .review-result {
2636
+ min-height: 18px;
380
2637
  color: var(--muted);
381
- padding: 18px;
2638
+ font-size: 12px;
382
2639
  }
383
- @media (max-width: 980px) {
384
- .layout { grid-template-columns: 1fr; }
385
- .sidebar {
386
- position: static;
387
- height: auto;
388
- border-right: 0;
389
- border-bottom: 1px solid var(--line);
2640
+
2641
+ @media (max-width: 760px) {
2642
+ .visibility-shell {
2643
+ overflow-x: hidden;
2644
+ }
2645
+ .detail-hero {
2646
+ flex-direction: column;
2647
+ }
2648
+ .detail-hero h2,
2649
+ .detail-hero p {
2650
+ overflow-wrap: anywhere;
2651
+ }
2652
+ .review-hero-tags {
2653
+ justify-content: flex-start;
2654
+ }
2655
+ .review-workspace,
2656
+ .review-workspace-grid,
2657
+ .review-workspace-main,
2658
+ .review-workspace-side {
2659
+ min-width: 0;
2660
+ }
2661
+ .task-state-summary {
2662
+ grid-template-columns: repeat(2, minmax(0, 1fr));
390
2663
  }
391
- .nav { grid-template-columns: repeat(4, minmax(0, 1fr)); }
392
- .status-grid, .page-grid { grid-template-columns: 1fr; }
393
- .drawer { position: static; max-height: none; }
394
- }
395
- @media (max-width: 620px) {
396
- .topbar { display: block; }
397
- .controls { justify-content: flex-start; }
398
- .nav { grid-template-columns: repeat(2, minmax(0, 1fr)); }
399
2664
  }