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