reviewflow 3.20.0 → 3.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/config/projectConfig.d.ts +7 -0
  3. package/dist/config/projectConfig.d.ts.map +1 -1
  4. package/dist/config/projectConfig.js +18 -0
  5. package/dist/config/projectConfig.js.map +1 -1
  6. package/dist/dashboard/index.html +626 -175
  7. package/dist/dashboard/modules/animations.d.ts +164 -0
  8. package/dist/dashboard/modules/animations.d.ts.map +1 -0
  9. package/dist/dashboard/modules/animations.js +405 -0
  10. package/dist/dashboard/modules/animations.js.map +1 -0
  11. package/dist/dashboard/modules/cardCounters.d.ts +47 -0
  12. package/dist/dashboard/modules/cardCounters.d.ts.map +1 -0
  13. package/dist/dashboard/modules/cardCounters.js +74 -0
  14. package/dist/dashboard/modules/cardCounters.js.map +1 -0
  15. package/dist/dashboard/modules/i18n.d.ts.map +1 -1
  16. package/dist/dashboard/modules/i18n.js +20 -2
  17. package/dist/dashboard/modules/i18n.js.map +1 -1
  18. package/dist/dashboard/modules/managePanel.d.ts +49 -0
  19. package/dist/dashboard/modules/managePanel.d.ts.map +1 -0
  20. package/dist/dashboard/modules/managePanel.js +123 -0
  21. package/dist/dashboard/modules/managePanel.js.map +1 -0
  22. package/dist/dashboard/modules/overview.d.ts +1 -0
  23. package/dist/dashboard/modules/overview.d.ts.map +1 -1
  24. package/dist/dashboard/modules/overview.js +14 -0
  25. package/dist/dashboard/modules/overview.js.map +1 -1
  26. package/dist/dashboard/modules/settingsModal.d.ts +77 -0
  27. package/dist/dashboard/modules/settingsModal.d.ts.map +1 -0
  28. package/dist/dashboard/modules/settingsModal.js +202 -0
  29. package/dist/dashboard/modules/settingsModal.js.map +1 -0
  30. package/dist/dashboard/modules/tabBar.d.ts +4 -0
  31. package/dist/dashboard/modules/tabBar.d.ts.map +1 -1
  32. package/dist/dashboard/modules/tabBar.js +6 -1
  33. package/dist/dashboard/modules/tabBar.js.map +1 -1
  34. package/dist/dashboard/styles.css +1373 -402
  35. package/dist/frameworks/config/configLoader.d.ts +8 -0
  36. package/dist/frameworks/config/configLoader.d.ts.map +1 -1
  37. package/dist/frameworks/config/configLoader.js +18 -0
  38. package/dist/frameworks/config/configLoader.js.map +1 -1
  39. package/dist/main/routes.d.ts.map +1 -1
  40. package/dist/main/routes.js +47 -2
  41. package/dist/main/routes.js.map +1 -1
  42. package/dist/main/server.d.ts.map +1 -1
  43. package/dist/main/server.js +22 -0
  44. package/dist/main/server.js.map +1 -1
  45. package/dist/modules/claude-invocation/interface-adapters/gateways/reviewReport.fileSystem.gateway.d.ts +1 -0
  46. package/dist/modules/claude-invocation/interface-adapters/gateways/reviewReport.fileSystem.gateway.d.ts.map +1 -1
  47. package/dist/modules/claude-invocation/interface-adapters/gateways/reviewReport.fileSystem.gateway.js +26 -5
  48. package/dist/modules/claude-invocation/interface-adapters/gateways/reviewReport.fileSystem.gateway.js.map +1 -1
  49. package/dist/modules/cli-configuration/entities/projectConfig/projectConfig.gateway.d.ts +20 -0
  50. package/dist/modules/cli-configuration/entities/projectConfig/projectConfig.gateway.d.ts.map +1 -0
  51. package/dist/modules/cli-configuration/entities/projectConfig/projectConfig.gateway.js +2 -0
  52. package/dist/modules/cli-configuration/entities/projectConfig/projectConfig.gateway.js.map +1 -0
  53. package/dist/modules/cli-configuration/entities/repositoryEntry/repositoryEntry.d.ts +13 -0
  54. package/dist/modules/cli-configuration/entities/repositoryEntry/repositoryEntry.d.ts.map +1 -0
  55. package/dist/modules/cli-configuration/entities/repositoryEntry/repositoryEntry.js +2 -0
  56. package/dist/modules/cli-configuration/entities/repositoryEntry/repositoryEntry.js.map +1 -0
  57. package/dist/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.d.ts +6 -1
  58. package/dist/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.d.ts.map +1 -1
  59. package/dist/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.js +116 -13
  60. package/dist/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.js.map +1 -1
  61. package/dist/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.d.ts +36 -0
  62. package/dist/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.d.ts.map +1 -1
  63. package/dist/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.js +78 -8
  64. package/dist/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.js.map +1 -1
  65. package/dist/modules/cli-configuration/interface-adapters/gateways/projectConfig.fileSystem.gateway.d.ts +7 -0
  66. package/dist/modules/cli-configuration/interface-adapters/gateways/projectConfig.fileSystem.gateway.d.ts.map +1 -0
  67. package/dist/modules/cli-configuration/interface-adapters/gateways/projectConfig.fileSystem.gateway.js +48 -0
  68. package/dist/modules/cli-configuration/interface-adapters/gateways/projectConfig.fileSystem.gateway.js.map +1 -0
  69. package/dist/modules/cli-configuration/usecases/cli/addRepositoriesToConfig.usecase.d.ts +1 -6
  70. package/dist/modules/cli-configuration/usecases/cli/addRepositoriesToConfig.usecase.d.ts.map +1 -1
  71. package/dist/modules/cli-configuration/usecases/cli/addRepositoriesToConfig.usecase.js.map +1 -1
  72. package/dist/modules/cli-configuration/usecases/cli/removeRepositoryFromConfig.usecase.d.ts +21 -0
  73. package/dist/modules/cli-configuration/usecases/cli/removeRepositoryFromConfig.usecase.d.ts.map +1 -0
  74. package/dist/modules/cli-configuration/usecases/cli/removeRepositoryFromConfig.usecase.js +27 -0
  75. package/dist/modules/cli-configuration/usecases/cli/removeRepositoryFromConfig.usecase.js.map +1 -0
  76. package/dist/modules/cli-configuration/usecases/cli/toggleRepositoryEnabled.usecase.d.ts +22 -0
  77. package/dist/modules/cli-configuration/usecases/cli/toggleRepositoryEnabled.usecase.d.ts.map +1 -0
  78. package/dist/modules/cli-configuration/usecases/cli/toggleRepositoryEnabled.usecase.js +27 -0
  79. package/dist/modules/cli-configuration/usecases/cli/toggleRepositoryEnabled.usecase.js.map +1 -0
  80. package/dist/modules/cli-configuration/usecases/cli/writeInitConfig.usecase.d.ts +1 -6
  81. package/dist/modules/cli-configuration/usecases/cli/writeInitConfig.usecase.d.ts.map +1 -1
  82. package/dist/modules/cli-configuration/usecases/cli/writeInitConfig.usecase.js.map +1 -1
  83. package/dist/modules/cli-configuration/usecases/dashboardRepositories/addRepositoryFromDashboard.usecase.d.ts +19 -0
  84. package/dist/modules/cli-configuration/usecases/dashboardRepositories/addRepositoryFromDashboard.usecase.d.ts.map +1 -0
  85. package/dist/modules/cli-configuration/usecases/dashboardRepositories/addRepositoryFromDashboard.usecase.js +30 -0
  86. package/dist/modules/cli-configuration/usecases/dashboardRepositories/addRepositoryFromDashboard.usecase.js.map +1 -0
  87. package/dist/modules/cli-configuration/usecases/dashboardRepositories/removeRepositoryFromDashboard.usecase.d.ts +16 -0
  88. package/dist/modules/cli-configuration/usecases/dashboardRepositories/removeRepositoryFromDashboard.usecase.d.ts.map +1 -0
  89. package/dist/modules/cli-configuration/usecases/dashboardRepositories/removeRepositoryFromDashboard.usecase.js +27 -0
  90. package/dist/modules/cli-configuration/usecases/dashboardRepositories/removeRepositoryFromDashboard.usecase.js.map +1 -0
  91. package/dist/modules/cli-configuration/usecases/dashboardRepositories/updateRepositoryEnabledFromDashboard.usecase.d.ts +17 -0
  92. package/dist/modules/cli-configuration/usecases/dashboardRepositories/updateRepositoryEnabledFromDashboard.usecase.d.ts.map +1 -0
  93. package/dist/modules/cli-configuration/usecases/dashboardRepositories/updateRepositoryEnabledFromDashboard.usecase.js +28 -0
  94. package/dist/modules/cli-configuration/usecases/dashboardRepositories/updateRepositoryEnabledFromDashboard.usecase.js.map +1 -0
  95. package/dist/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.d.ts +31 -0
  96. package/dist/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.d.ts.map +1 -0
  97. package/dist/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.js +102 -0
  98. package/dist/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.js.map +1 -0
  99. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.d.ts.map +1 -1
  100. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js +3 -0
  101. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js.map +1 -1
  102. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.d.ts.map +1 -1
  103. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.js +3 -0
  104. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.js.map +1 -1
  105. package/dist/modules/review-execution/entities/reviewContext/reviewContext.gateway.d.ts +1 -0
  106. package/dist/modules/review-execution/entities/reviewContext/reviewContext.gateway.d.ts.map +1 -1
  107. package/dist/modules/review-execution/entities/reviewContext/reviewContext.schema.d.ts +10 -2
  108. package/dist/modules/review-execution/entities/reviewContext/reviewContext.schema.d.ts.map +1 -1
  109. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.factory.d.ts +11 -0
  110. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.factory.d.ts.map +1 -0
  111. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.factory.js +22 -0
  112. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.factory.js.map +1 -0
  113. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.guard.d.ts +10 -0
  114. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.guard.d.ts.map +1 -1
  115. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.schema.d.ts +31 -1
  116. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.schema.d.ts.map +1 -1
  117. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.schema.js +11 -1
  118. package/dist/modules/review-execution/entities/reviewContext/reviewContextResult.schema.js.map +1 -1
  119. package/dist/modules/review-execution/interface-adapters/gateways/reviewContext.fileSystem.gateway.d.ts +1 -0
  120. package/dist/modules/review-execution/interface-adapters/gateways/reviewContext.fileSystem.gateway.d.ts.map +1 -1
  121. package/dist/modules/review-execution/interface-adapters/gateways/reviewContext.fileSystem.gateway.js +27 -1
  122. package/dist/modules/review-execution/interface-adapters/gateways/reviewContext.fileSystem.gateway.js.map +1 -1
  123. package/dist/modules/review-execution/services/reviewRecovery.service.d.ts +33 -0
  124. package/dist/modules/review-execution/services/reviewRecovery.service.d.ts.map +1 -0
  125. package/dist/modules/review-execution/services/reviewRecovery.service.js +80 -0
  126. package/dist/modules/review-execution/services/reviewRecovery.service.js.map +1 -0
  127. package/dist/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.d.ts +2 -0
  128. package/dist/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.d.ts.map +1 -1
  129. package/dist/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.js +14 -0
  130. package/dist/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.js.map +1 -1
  131. package/dist/modules/statistics-insights/interface-adapters/presenters/overview.presenter.d.ts +5 -0
  132. package/dist/modules/statistics-insights/interface-adapters/presenters/overview.presenter.d.ts.map +1 -1
  133. package/dist/modules/statistics-insights/interface-adapters/presenters/overview.presenter.js +20 -4
  134. package/dist/modules/statistics-insights/interface-adapters/presenters/overview.presenter.js.map +1 -1
  135. package/dist/tests/acceptance/177-dashboard-add-project-ui.acceptance.test.d.ts +12 -0
  136. package/dist/tests/acceptance/177-dashboard-add-project-ui.acceptance.test.d.ts.map +1 -0
  137. package/dist/tests/acceptance/177-dashboard-add-project-ui.acceptance.test.js +304 -0
  138. package/dist/tests/acceptance/177-dashboard-add-project-ui.acceptance.test.js.map +1 -0
  139. package/dist/tests/acceptance/178-dashboard-tabs-reposition.acceptance.test.d.ts +12 -0
  140. package/dist/tests/acceptance/178-dashboard-tabs-reposition.acceptance.test.d.ts.map +1 -0
  141. package/dist/tests/acceptance/178-dashboard-tabs-reposition.acceptance.test.js +131 -0
  142. package/dist/tests/acceptance/178-dashboard-tabs-reposition.acceptance.test.js.map +1 -0
  143. package/dist/tests/acceptance/179-dashboard-project-settings-modal.acceptance.test.d.ts +12 -0
  144. package/dist/tests/acceptance/179-dashboard-project-settings-modal.acceptance.test.d.ts.map +1 -0
  145. package/dist/tests/acceptance/179-dashboard-project-settings-modal.acceptance.test.js +312 -0
  146. package/dist/tests/acceptance/179-dashboard-project-settings-modal.acceptance.test.js.map +1 -0
  147. package/dist/tests/acceptance/91-dashboard-multi-project-overview.acceptance.test.js +5 -0
  148. package/dist/tests/acceptance/91-dashboard-multi-project-overview.acceptance.test.js.map +1 -1
  149. package/dist/tests/stubs/projectConfigGateway.stub.d.ts +15 -0
  150. package/dist/tests/stubs/projectConfigGateway.stub.d.ts.map +1 -0
  151. package/dist/tests/stubs/projectConfigGateway.stub.js +40 -0
  152. package/dist/tests/stubs/projectConfigGateway.stub.js.map +1 -0
  153. package/dist/tests/stubs/reviewContextGateway.stub.d.ts +1 -0
  154. package/dist/tests/stubs/reviewContextGateway.stub.d.ts.map +1 -1
  155. package/dist/tests/stubs/reviewContextGateway.stub.js +3 -0
  156. package/dist/tests/stubs/reviewContextGateway.stub.js.map +1 -1
  157. package/dist/tests/units/config/projectConfig.test.js +43 -0
  158. package/dist/tests/units/config/projectConfig.test.js.map +1 -1
  159. package/dist/tests/units/dashboard/modules/animations.test.d.ts +10 -0
  160. package/dist/tests/units/dashboard/modules/animations.test.d.ts.map +1 -0
  161. package/dist/tests/units/dashboard/modules/animations.test.js +223 -0
  162. package/dist/tests/units/dashboard/modules/animations.test.js.map +1 -0
  163. package/dist/tests/units/dashboard/modules/cardCounters.test.d.ts +2 -0
  164. package/dist/tests/units/dashboard/modules/cardCounters.test.d.ts.map +1 -0
  165. package/dist/tests/units/dashboard/modules/cardCounters.test.js +162 -0
  166. package/dist/tests/units/dashboard/modules/cardCounters.test.js.map +1 -0
  167. package/dist/tests/units/dashboard/modules/managePanel.test.d.ts +2 -0
  168. package/dist/tests/units/dashboard/modules/managePanel.test.d.ts.map +1 -0
  169. package/dist/tests/units/dashboard/modules/managePanel.test.js +112 -0
  170. package/dist/tests/units/dashboard/modules/managePanel.test.js.map +1 -0
  171. package/dist/tests/units/dashboard/modules/overview.test.js +92 -0
  172. package/dist/tests/units/dashboard/modules/overview.test.js.map +1 -1
  173. package/dist/tests/units/dashboard/modules/settingsModal.test.d.ts +2 -0
  174. package/dist/tests/units/dashboard/modules/settingsModal.test.d.ts.map +1 -0
  175. package/dist/tests/units/dashboard/modules/settingsModal.test.js +166 -0
  176. package/dist/tests/units/dashboard/modules/settingsModal.test.js.map +1 -0
  177. package/dist/tests/units/dashboard/modules/tabBar.test.js +40 -11
  178. package/dist/tests/units/dashboard/modules/tabBar.test.js.map +1 -1
  179. package/dist/tests/units/entities/reviewContext/reviewContext.schema.test.js +1 -0
  180. package/dist/tests/units/entities/reviewContext/reviewContext.schema.test.js.map +1 -1
  181. package/dist/tests/units/entities/reviewContext/reviewContextResult.factory.test.d.ts +2 -0
  182. package/dist/tests/units/entities/reviewContext/reviewContextResult.factory.test.d.ts.map +1 -0
  183. package/dist/tests/units/entities/reviewContext/reviewContextResult.factory.test.js +43 -0
  184. package/dist/tests/units/entities/reviewContext/reviewContextResult.factory.test.js.map +1 -0
  185. package/dist/tests/units/entities/reviewContext/reviewContextResult.guard.test.js +7 -3
  186. package/dist/tests/units/entities/reviewContext/reviewContextResult.guard.test.js.map +1 -1
  187. package/dist/tests/units/entities/reviewContext/reviewContextResult.schema.test.js +12 -1
  188. package/dist/tests/units/entities/reviewContext/reviewContextResult.schema.test.js.map +1 -1
  189. package/dist/tests/units/frameworks/config/configLoader.test.js +35 -1
  190. package/dist/tests/units/frameworks/config/configLoader.test.js.map +1 -1
  191. package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js +57 -0
  192. package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js.map +1 -1
  193. package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js +1 -0
  194. package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js.map +1 -1
  195. package/dist/tests/units/interface-adapters/gateways/reviewContext.fileSystem.gateway.test.js +64 -4
  196. package/dist/tests/units/interface-adapters/gateways/reviewContext.fileSystem.gateway.test.js.map +1 -1
  197. package/dist/tests/units/modules/claude-invocation/interface-adapters/gateways/reviewReport.fileSystem.gateway.test.js +56 -0
  198. package/dist/tests/units/modules/claude-invocation/interface-adapters/gateways/reviewReport.fileSystem.gateway.test.js.map +1 -1
  199. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.js +111 -0
  200. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.js.map +1 -1
  201. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.test.js +244 -3
  202. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/repositories.routes.test.js.map +1 -1
  203. package/dist/tests/units/modules/cli-configuration/interface-adapters/gateways/projectConfig.fileSystem.gateway.test.d.ts +2 -0
  204. package/dist/tests/units/modules/cli-configuration/interface-adapters/gateways/projectConfig.fileSystem.gateway.test.d.ts.map +1 -0
  205. package/dist/tests/units/modules/cli-configuration/interface-adapters/gateways/projectConfig.fileSystem.gateway.test.js +72 -0
  206. package/dist/tests/units/modules/cli-configuration/interface-adapters/gateways/projectConfig.fileSystem.gateway.test.js.map +1 -0
  207. package/dist/tests/units/modules/cli-configuration/usecases/cli/removeRepositoryFromConfig.usecase.test.d.ts +2 -0
  208. package/dist/tests/units/modules/cli-configuration/usecases/cli/removeRepositoryFromConfig.usecase.test.d.ts.map +1 -0
  209. package/dist/tests/units/modules/cli-configuration/usecases/cli/removeRepositoryFromConfig.usecase.test.js +76 -0
  210. package/dist/tests/units/modules/cli-configuration/usecases/cli/removeRepositoryFromConfig.usecase.test.js.map +1 -0
  211. package/dist/tests/units/modules/cli-configuration/usecases/cli/toggleRepositoryEnabled.usecase.test.d.ts +2 -0
  212. package/dist/tests/units/modules/cli-configuration/usecases/cli/toggleRepositoryEnabled.usecase.test.d.ts.map +1 -0
  213. package/dist/tests/units/modules/cli-configuration/usecases/cli/toggleRepositoryEnabled.usecase.test.js +84 -0
  214. package/dist/tests/units/modules/cli-configuration/usecases/cli/toggleRepositoryEnabled.usecase.test.js.map +1 -0
  215. package/dist/tests/units/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.test.d.ts +2 -0
  216. package/dist/tests/units/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.test.d.ts.map +1 -0
  217. package/dist/tests/units/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.test.js +141 -0
  218. package/dist/tests/units/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.test.js.map +1 -0
  219. package/dist/tests/units/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.test.js +44 -0
  220. package/dist/tests/units/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.test.js.map +1 -1
  221. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/overview.presenter.test.js +42 -0
  222. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/overview.presenter.test.js.map +1 -1
  223. package/dist/tests/units/services/reviewRecovery.service.test.d.ts +2 -0
  224. package/dist/tests/units/services/reviewRecovery.service.test.d.ts.map +1 -0
  225. package/dist/tests/units/services/reviewRecovery.service.test.js +49 -0
  226. package/dist/tests/units/services/reviewRecovery.service.test.js.map +1 -0
  227. package/dist/tests/units/services/runReviewRecovery.service.test.d.ts +2 -0
  228. package/dist/tests/units/services/runReviewRecovery.service.test.d.ts.map +1 -0
  229. package/dist/tests/units/services/runReviewRecovery.service.test.js +199 -0
  230. package/dist/tests/units/services/runReviewRecovery.service.test.js.map +1 -0
  231. package/package.json +1 -1
@@ -1,20 +1,62 @@
1
+
1
2
  * { margin: 0; padding: 0; box-sizing: border-box; }
2
3
 
3
4
  :root {
4
- --nsc-bg-base: #0b1220;
5
- --nsc-bg-elevated: #111a2b;
6
- --nsc-bg-surface: #162235;
7
- --nsc-bg-surface-strong: #1c2a40;
8
- --nsc-border-soft: rgba(163, 192, 224, 0.16);
9
- --nsc-border-strong: rgba(163, 192, 224, 0.28);
10
- --nsc-text-primary: #e8efff;
11
- --nsc-text-secondary: #b2c1dd;
12
- --nsc-text-muted: #8393b0;
13
- --nsc-focus: #7ad8ff;
14
- --nsc-action: #60c7ff;
15
- --nsc-warning: #f4bc71;
16
- --nsc-success: #62d3a8;
17
- --nsc-danger: #f07f88;
5
+ /* warm near-black backgrounds */
6
+ --bg-0: #0E0E10;
7
+ --bg-1: #141416;
8
+ --bg-2: #1A1A1D;
9
+ --bg-3: #212125;
10
+ --bg-4: #2A2A2F;
11
+ /* warm paper white inks */
12
+ --ink-0: #F4F2EE;
13
+ --ink-1: #C9C6BE;
14
+ --ink-2: #8A8780;
15
+ --ink-3: #5A5852;
16
+ --ink-4: #3A3935;
17
+ /* single sacred accent: amber-gold */
18
+ --accent: #F4A93D;
19
+ --accent-hover: #FFBC54;
20
+ --accent-active: #D8901F;
21
+ --accent-ghost: rgba(244, 169, 61, 0.10);
22
+ /* desaturated status set */
23
+ --success: #7BC47F;
24
+ --warning: #E0B341;
25
+ --danger: #D9656A;
26
+ --info: #7BA3C7;
27
+ /* typography */
28
+ --font-sans: 'Geist', system-ui, -apple-system, sans-serif;
29
+ --font-mono: 'JetBrains Mono', 'SF Mono', Menlo, monospace;
30
+ /* type scale */
31
+ --type-xs: 11px;
32
+ --type-sm: 12.5px;
33
+ --type-base: 14px;
34
+ --type-lg: 18px;
35
+ --type-xl: 28px;
36
+ /* spacing */
37
+ --space-1: 4px;
38
+ --space-2: 8px;
39
+ --space-3: 12px;
40
+ --space-4: 16px;
41
+ --space-5: 24px;
42
+ --space-6: 32px;
43
+ --space-7: 48px;
44
+
45
+ /* Legacy aliases — keeps existing selectors that reference --nsc-* working */
46
+ --nsc-bg-base: var(--bg-0);
47
+ --nsc-bg-elevated: var(--bg-1);
48
+ --nsc-bg-surface: var(--bg-2);
49
+ --nsc-bg-surface-strong: var(--bg-3);
50
+ --nsc-border-soft: var(--ink-4);
51
+ --nsc-border-strong: rgba(90, 88, 82, 0.5);
52
+ --nsc-text-primary: var(--ink-0);
53
+ --nsc-text-secondary: var(--ink-1);
54
+ --nsc-text-muted: var(--ink-2);
55
+ --nsc-focus: var(--accent);
56
+ --nsc-action: var(--accent-hover);
57
+ --nsc-warning: var(--warning);
58
+ --nsc-success: var(--success);
59
+ --nsc-danger: var(--danger);
18
60
  }
19
61
 
20
62
  /* Lucide icons base styling */
@@ -105,19 +147,40 @@
105
147
  }
106
148
 
107
149
  body {
108
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
109
- background:
110
- radial-gradient(1100px 700px at 12% -10%, #1a2a4a 0%, rgba(26, 42, 74, 0) 58%),
111
- linear-gradient(145deg, var(--nsc-bg-base) 0%, #0e1728 100%);
112
- color: var(--nsc-text-primary);
150
+ font-family: var(--font-sans);
151
+ background: var(--bg-0);
152
+ color: var(--ink-0);
113
153
  min-height: 100vh;
114
- padding: 1.5rem 0;
154
+ padding: 0;
155
+ -webkit-font-smoothing: antialiased;
156
+ -moz-osx-font-smoothing: grayscale;
157
+ }
158
+
159
+ /* Top accent line */
160
+ body::before {
161
+ content: '';
162
+ position: fixed;
163
+ top: 0;
164
+ left: 0;
165
+ right: 0;
166
+ height: 2px;
167
+ background: linear-gradient(90deg, transparent 0%, var(--accent) 40%, var(--accent-hover) 70%, transparent 100%);
168
+ opacity: 0.6;
169
+ z-index: 9999;
115
170
  }
116
171
 
117
- .container { margin: 1rem; }
172
+ /* Custom scrollbar */
173
+ ::-webkit-scrollbar { width: 6px; height: 6px; }
174
+ ::-webkit-scrollbar-track { background: transparent; }
175
+ ::-webkit-scrollbar-thumb { background: var(--ink-4); border-radius: 99px; }
176
+ ::-webkit-scrollbar-thumb:hover { background: var(--ink-3); }
177
+
178
+ ::selection { background: var(--accent-ghost); color: var(--ink-0); }
179
+
180
+ .container { margin: 0.75rem; }
118
181
 
119
182
  @media (min-width: 1024px) {
120
- .container { margin: 68px; }
183
+ .container { margin: 1.25rem 2rem; }
121
184
  }
122
185
 
123
186
  .dashboard-layout {
@@ -190,17 +253,64 @@ header {
190
253
  gap: 1rem;
191
254
  margin-bottom: 2rem;
192
255
  flex-wrap: wrap;
256
+ position: sticky;
257
+ top: 0;
258
+ z-index: 100;
259
+ padding: 0.75rem 0;
260
+ margin-top: -0.5rem;
261
+ backdrop-filter: blur(16px) saturate(140%);
262
+ -webkit-backdrop-filter: blur(16px) saturate(140%);
263
+ background: rgba(14, 14, 16, 0.85);
264
+ border-bottom: 1px solid var(--ink-4);
193
265
  }
194
266
 
195
267
  .logo {
196
- width: 48px; height: 48px;
197
- background: linear-gradient(145deg, #58c4ff 0%, #3c8cc4 100%);
198
- border-radius: 12px;
268
+ width: 44px; height: 44px;
199
269
  display: flex; align-items: center; justify-content: center;
200
- font-size: 24px;
270
+ position: relative;
271
+ flex-shrink: 0;
272
+ }
273
+
274
+ .logo svg {
275
+ width: 44px;
276
+ height: 44px;
277
+ overflow: visible;
201
278
  }
202
279
 
203
- h1 { font-size: 1.75rem; font-weight: 600; }
280
+ .logo .logo-frame {
281
+ fill: none;
282
+ stroke: var(--accent);
283
+ stroke-width: 1.5;
284
+ opacity: 0.35;
285
+ }
286
+
287
+ .logo .logo-line {
288
+ stroke: var(--ink-1);
289
+ stroke-width: 2;
290
+ stroke-linecap: round;
291
+ fill: none;
292
+ }
293
+
294
+ .logo .logo-line--accent { stroke: var(--accent); }
295
+
296
+ .logo .logo-check {
297
+ stroke: var(--success);
298
+ stroke-width: 2.5;
299
+ stroke-linecap: round;
300
+ stroke-linejoin: round;
301
+ fill: none;
302
+ }
303
+
304
+ .logo .logo-pulse {
305
+ fill: var(--accent);
306
+ filter: drop-shadow(0 0 4px var(--accent));
307
+ }
308
+
309
+ @media (prefers-reduced-motion: reduce) {
310
+ .logo .logo-pulse { animation: none !important; }
311
+ }
312
+
313
+ h1 { font-size: 1.75rem; font-weight: 700; letter-spacing: -0.025em; }
204
314
 
205
315
  .header-actions {
206
316
  display: flex;
@@ -223,11 +333,14 @@ h1 { font-size: 1.75rem; font-weight: 600; }
223
333
  }
224
334
 
225
335
  .btn-primary {
226
- background: rgba(96, 199, 255, 0.16);
227
- color: #9ce1ff;
228
- border: 1px solid rgba(96, 199, 255, 0.34);
336
+ background: var(--accent-ghost);
337
+ color: var(--accent);
338
+ border: 1px solid rgba(244, 169, 61, 0.34);
339
+ }
340
+ .btn-primary:hover {
341
+ background: rgba(244, 169, 61, 0.18);
342
+ border-color: var(--accent);
229
343
  }
230
- .btn-primary:hover { background: rgba(96, 199, 255, 0.25); }
231
344
 
232
345
  .btn-secondary {
233
346
  background: rgba(255, 255, 255, 0.03);
@@ -393,9 +506,9 @@ input:focus-visible,
393
506
  font-weight: 500;
394
507
  }
395
508
 
396
- .status-indicator.online { background: rgba(34, 197, 94, 0.2); color: #22c55e; }
397
- .status-indicator.offline { background: rgba(240, 127, 136, 0.2); color: var(--nsc-danger); }
398
- .status-indicator.connecting { background: rgba(122, 216, 255, 0.2); color: var(--nsc-focus); }
509
+ .status-indicator.online { background: rgba(123, 196, 127, 0.12); color: var(--success); border: 1px solid rgba(123, 196, 127, 0.2); }
510
+ .status-indicator.offline { background: rgba(217, 101, 106, 0.12); color: var(--danger); border: 1px solid rgba(217, 101, 106, 0.2); }
511
+ .status-indicator.connecting { background: var(--accent-ghost); color: var(--accent); border: 1px solid rgba(244, 169, 61, 0.2); }
399
512
 
400
513
  .status-dot {
401
514
  width: 8px; height: 8px;
@@ -414,12 +527,22 @@ input:focus-visible,
414
527
  }
415
528
 
416
529
  .card {
417
- background: linear-gradient(170deg, var(--nsc-bg-surface) 0%, #142034 100%);
418
- border: 1px solid var(--nsc-border-soft);
530
+ background: var(--bg-2);
531
+ border: none;
532
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);
419
533
  border-radius: 12px;
420
534
  padding: 1.25rem;
421
535
  position: relative;
422
536
  overflow: hidden;
537
+ height: 92px;
538
+ display: flex;
539
+ flex-direction: column;
540
+ justify-content: space-between;
541
+ transition: background 120ms ease;
542
+ }
543
+
544
+ .card:hover {
545
+ background: var(--bg-3);
423
546
  }
424
547
 
425
548
  .card::before {
@@ -433,20 +556,39 @@ input:focus-visible,
433
556
  }
434
557
 
435
558
  .card-priority::before {
436
- background: linear-gradient(180deg, #7ad8ff 0%, rgba(122, 216, 255, 0.2) 100%);
559
+ background: var(--accent);
560
+ opacity: 0.7;
561
+ }
562
+
563
+ .card-label {
564
+ font-size: var(--type-xs);
565
+ font-family: var(--font-mono);
566
+ color: var(--ink-2);
567
+ margin-bottom: 0.5rem;
568
+ text-transform: uppercase;
569
+ letter-spacing: 0.08em;
570
+ }
571
+
572
+ .card-label::before { content: '// '; opacity: 0.5; }
573
+
574
+ .card-value {
575
+ font-size: var(--type-xl);
576
+ font-weight: 500;
577
+ font-family: var(--font-mono);
578
+ font-variant-numeric: tabular-nums;
579
+ color: var(--ink-0);
580
+ line-height: 1;
437
581
  }
438
582
 
439
- .card-label { font-size: 0.75rem; color: var(--nsc-text-secondary); margin-bottom: 0.5rem; }
440
- .card-value { font-size: 1.75rem; font-weight: 700; }
441
- .card-value.running { color: var(--nsc-focus); }
442
- .card-value.queued { color: #8ab7ff; }
583
+ .card-value.running { color: var(--accent); }
584
+ .card-value.queued { color: var(--ink-1); }
443
585
 
444
586
  .focus-strip {
445
587
  display: grid;
446
- grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
588
+ grid-template-columns: repeat(3, 1fr);
447
589
  gap: 0.75rem;
448
- margin-top: -0.75rem;
449
- margin-bottom: 1.5rem;
590
+ margin-top: 0;
591
+ margin-bottom: 1.25rem;
450
592
  }
451
593
 
452
594
  .focus-strip.compact .focus-meta {
@@ -459,14 +601,15 @@ input:focus-visible,
459
601
  }
460
602
 
461
603
  .focus-chip {
462
- background: linear-gradient(160deg, var(--nsc-bg-surface) 0%, var(--nsc-bg-surface-strong) 100%);
463
- border: 1px solid var(--nsc-border-soft);
464
- border-radius: 10px;
604
+ background: var(--bg-2);
605
+ border: 1px solid var(--ink-4);
606
+ border-radius: 8px;
465
607
  padding: 0.65rem 0.75rem;
466
608
  display: flex;
467
609
  justify-content: space-between;
468
610
  align-items: center;
469
611
  gap: 0.5rem;
612
+ transition: border-color 150ms ease;
470
613
  }
471
614
 
472
615
  .focus-copy {
@@ -476,26 +619,47 @@ input:focus-visible,
476
619
  }
477
620
 
478
621
  .focus-label {
479
- font-size: 0.72rem;
480
- color: var(--nsc-text-secondary);
622
+ font-size: var(--type-xs);
623
+ font-family: var(--font-mono);
624
+ color: var(--ink-2);
481
625
  text-transform: uppercase;
482
- letter-spacing: 0.05em;
626
+ letter-spacing: 0.08em;
483
627
  }
484
628
 
485
629
  .focus-meta {
486
- font-size: 0.68rem;
487
- color: var(--nsc-text-muted);
630
+ font-size: var(--type-xs);
631
+ color: var(--ink-3);
488
632
  }
489
633
 
490
634
  .focus-value {
491
- font-size: 1.05rem;
492
- font-weight: 700;
493
- color: var(--nsc-text-primary);
635
+ font-size: var(--type-xl);
636
+ font-weight: 500;
637
+ font-family: var(--font-mono);
638
+ font-variant-numeric: tabular-nums;
639
+ color: var(--ink-0);
640
+ line-height: 1;
494
641
  }
495
642
 
496
- .focus-now .focus-value { color: var(--nsc-focus); }
497
- .focus-next .focus-value { color: var(--nsc-warning); }
498
- .focus-blocked .focus-value { color: var(--nsc-danger); }
643
+ /* Default state quiet (count === 0) */
644
+ .focus-now .focus-value,
645
+ .focus-next .focus-value,
646
+ .focus-blocked .focus-value {
647
+ color: var(--ink-2);
648
+ }
649
+
650
+ /* Active state — count > 0 */
651
+ .focus-now[data-active="true"] .focus-value { color: var(--accent); }
652
+ .focus-next[data-active="true"] .focus-value { color: var(--accent); }
653
+ /* Critical state — blocked > 0 */
654
+ .focus-blocked[data-active="critical"] .focus-value { color: var(--danger); }
655
+
656
+ .focus-now { border-color: rgba(244, 169, 61, 0.15); }
657
+ .focus-next { border-color: rgba(224, 179, 65, 0.12); }
658
+ .focus-blocked { border-color: rgba(217, 101, 106, 0.12); }
659
+
660
+ .focus-now[data-active="true"] { border-color: rgba(244, 169, 61, 0.35); }
661
+ .focus-next[data-active="true"] { border-color: rgba(224, 179, 65, 0.28); }
662
+ .focus-blocked[data-active="critical"] { border-color: rgba(217, 101, 106, 0.3); }
499
663
 
500
664
  .focus-toggle-btn {
501
665
  background: rgba(255, 255, 255, 0.03);
@@ -546,17 +710,34 @@ input:focus-visible,
546
710
  .card-claude.checking .status { color: #f59e0b; }
547
711
 
548
712
  .section {
549
- background: linear-gradient(175deg, var(--nsc-bg-elevated) 0%, #101b2d 100%);
550
- border: 1px solid var(--nsc-border-soft);
713
+ background: var(--bg-1);
714
+ border: 1px solid var(--ink-4);
551
715
  border-radius: 12px;
552
716
  margin-bottom: 1.5rem;
553
717
  overflow: hidden;
718
+ position: relative;
719
+ }
720
+
721
+ .section[data-attention="true"]::before {
722
+ content: '';
723
+ position: absolute;
724
+ left: 0;
725
+ top: 0;
726
+ bottom: 0;
727
+ width: 2px;
728
+ background: var(--accent);
729
+ z-index: 1;
554
730
  }
555
731
 
556
732
  .section-header {
557
733
  padding: 1rem 1.5rem;
558
- border-bottom: 1px solid var(--nsc-border-soft);
734
+ border-bottom: 1px solid var(--ink-4);
559
735
  font-weight: 600;
736
+ font-family: var(--font-mono);
737
+ font-size: var(--type-sm);
738
+ letter-spacing: 0.05em;
739
+ text-transform: uppercase;
740
+ color: var(--ink-1);
560
741
  display: flex;
561
742
  align-items: center;
562
743
  gap: 0.5rem;
@@ -574,10 +755,14 @@ input:focus-visible,
574
755
  }
575
756
 
576
757
  .section-header .badge-count {
577
- background: rgba(240, 127, 136, 0.16);
578
- color: #ff9ea5;
758
+ background: rgba(217, 101, 106, 0.12);
759
+ color: var(--danger);
579
760
  padding: 0.125rem 0.5rem;
580
761
  border-radius: 9999px;
762
+ font-family: var(--font-mono);
763
+ font-size: var(--type-xs);
764
+ font-variant-numeric: tabular-nums;
765
+ font-weight: 500;
581
766
  }
582
767
 
583
768
  .section-header .btn-sync {
@@ -2283,383 +2468,162 @@ body.compact-density .quality-trend {
2283
2468
  }
2284
2469
  }
2285
2470
 
2286
- /* =====================================================
2287
- DESIGN UPGRADE — Premium polish layer
2288
- Applied on top of base styles for visual refinement.
2289
- ===================================================== */
2290
-
2291
- /* Font smoothing + better background */
2292
- body {
2293
- -webkit-font-smoothing: antialiased;
2294
- -moz-osx-font-smoothing: grayscale;
2295
- background:
2296
- radial-gradient(ellipse 1400px 900px at 8% -12%, rgba(30, 58, 110, 0.55) 0%, transparent 55%),
2297
- radial-gradient(ellipse 600px 500px at 92% 105%, rgba(40, 20, 80, 0.25) 0%, transparent 50%),
2298
- linear-gradient(155deg, #080e1a 0%, #0b1220 40%, #0d1528 100%);
2471
+ /* --- MR items upgrade --- */
2472
+ .mr-item-accordion {
2473
+ border: 1px solid var(--ink-4);
2474
+ border-left: 2px solid transparent;
2475
+ border-radius: 10px;
2476
+ background: var(--bg-2);
2477
+ transition: border-color 0.2s, border-left-color 0.2s;
2299
2478
  }
2300
-
2301
- /* Top accent gradient line */
2302
- body::before {
2303
- content: '';
2304
- position: fixed;
2305
- top: 0;
2306
- left: 0;
2307
- right: 0;
2308
- height: 2px;
2309
- background: linear-gradient(90deg,
2310
- transparent 0%,
2311
- rgba(96, 199, 255, 0.4) 20%,
2312
- rgba(98, 211, 168, 0.4) 50%,
2313
- rgba(244, 188, 113, 0.3) 80%,
2314
- transparent 100%
2315
- );
2316
- z-index: 9999;
2479
+ .mr-item-accordion:hover {
2480
+ border-color: var(--ink-3);
2481
+ border-left-color: var(--accent);
2317
2482
  }
2318
-
2319
- /* Custom scrollbar */
2320
- ::-webkit-scrollbar { width: 6px; height: 6px; }
2321
- ::-webkit-scrollbar-track { background: transparent; }
2322
- ::-webkit-scrollbar-thumb { background: rgba(130, 160, 200, 0.18); border-radius: 99px; }
2323
- ::-webkit-scrollbar-thumb:hover { background: rgba(130, 160, 200, 0.3); }
2324
-
2325
- /* Text selection */
2326
- ::selection {
2327
- background: rgba(96, 199, 255, 0.25);
2328
- color: #fff;
2483
+ .mr-item-header:hover {
2484
+ background: var(--bg-3);
2329
2485
  }
2330
2486
 
2331
- /* --- Header --- */
2332
- header {
2333
- position: sticky;
2334
- top: 0;
2335
- z-index: 100;
2336
- padding: 0.75rem 0;
2337
- margin: -0.5rem 0 1.5rem;
2338
- backdrop-filter: blur(16px) saturate(140%);
2339
- -webkit-backdrop-filter: blur(16px) saturate(140%);
2340
- background: rgba(11, 18, 32, 0.72);
2341
- border-bottom: 1px solid rgba(130, 170, 220, 0.08);
2487
+ /* Active review card — live radial wash */
2488
+ .mr-item-accordion.is-running {
2489
+ border: 1px solid var(--accent);
2490
+ background: radial-gradient(circle at top left, var(--accent-ghost), transparent 60%), var(--bg-2);
2342
2491
  }
2343
2492
 
2344
- h1 {
2345
- font-weight: 700;
2346
- letter-spacing: -0.025em;
2347
- font-size: 1.6rem;
2348
- }
2493
+ /* Review status glow */
2494
+ .review-status.running { box-shadow: 0 0 8px rgba(244, 169, 61, 0.45); }
2495
+ .review-status.completed { box-shadow: 0 0 6px rgba(123, 196, 127, 0.4); }
2496
+ .review-status.failed { box-shadow: 0 0 6px rgba(217, 101, 106, 0.4); }
2349
2497
 
2350
- .logo {
2351
- background: linear-gradient(145deg, #5ec8ff 0%, #3b8fd4 50%, #2a6db0 100%);
2352
- box-shadow: 0 2px 12px rgba(90, 190, 255, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.15);
2353
- border-radius: 14px;
2498
+ /* Avatars */
2499
+ .mr-avatar, .review-avatar {
2500
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
2501
+ border: 2px solid var(--ink-4);
2354
2502
  }
2355
2503
 
2356
- .version-label {
2357
- font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
2358
- font-size: 0.7rem;
2359
- letter-spacing: 0.02em;
2360
- background: rgba(122, 216, 255, 0.06);
2361
- border-color: rgba(122, 216, 255, 0.15);
2362
- color: rgba(122, 216, 255, 0.7);
2504
+ /* Now lane */
2505
+ .now-lane {
2506
+ background: radial-gradient(circle at top left, var(--accent-ghost), transparent 60%), var(--bg-2);
2507
+ border: 1px solid rgba(244, 169, 61, 0.25);
2508
+ border-left: 3px solid var(--accent);
2509
+ border-radius: 12px;
2363
2510
  }
2364
2511
 
2365
- .status-indicator {
2366
- font-size: 0.8rem;
2367
- padding: 0.4rem 0.85rem;
2368
- backdrop-filter: blur(8px);
2369
- }
2370
- .status-indicator.online {
2371
- background: rgba(34, 197, 94, 0.12);
2372
- border: 1px solid rgba(34, 197, 94, 0.2);
2512
+ /* Section header clickable hover */
2513
+ .section-header.clickable:hover {
2514
+ background: var(--bg-2);
2373
2515
  }
2374
2516
 
2375
- /* --- Cards --- */
2376
- .card {
2377
- background: linear-gradient(170deg, rgba(22, 34, 53, 0.85) 0%, rgba(14, 23, 40, 0.95) 100%);
2378
- backdrop-filter: blur(12px);
2379
- border: 1px solid rgba(130, 170, 220, 0.1);
2380
- border-radius: 14px;
2381
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 4px 12px rgba(0, 0, 0, 0.06);
2382
- transition: border-color 0.3s, box-shadow 0.3s, transform 0.2s;
2517
+ /* Toasts */
2518
+ .toast {
2519
+ backdrop-filter: blur(16px) saturate(140%);
2520
+ border-radius: 10px;
2521
+ font-weight: 600;
2522
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.3);
2383
2523
  }
2384
- .card:hover {
2385
- border-color: rgba(130, 170, 220, 0.18);
2386
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2), 0 8px 24px rgba(0, 0, 0, 0.1);
2387
- transform: translateY(-1px);
2524
+ .toast.success {
2525
+ background: rgba(123, 196, 127, 0.12);
2526
+ border: 1px solid rgba(123, 196, 127, 0.25);
2388
2527
  }
2389
-
2390
- .card-priority::before {
2391
- width: 3px;
2392
- background: linear-gradient(180deg, rgba(122, 216, 255, 0.8) 0%, rgba(122, 216, 255, 0.1) 100%);
2528
+ .toast.error {
2529
+ background: rgba(217, 101, 106, 0.12);
2530
+ border: 1px solid rgba(217, 101, 106, 0.25);
2393
2531
  }
2394
-
2395
- .card-value {
2396
- font-weight: 800;
2397
- letter-spacing: -0.02em;
2532
+ .toast.info {
2533
+ background: var(--accent-ghost);
2534
+ border: 1px solid rgba(244, 169, 61, 0.2);
2398
2535
  }
2399
2536
 
2400
- /* --- Sections --- */
2401
- .section {
2402
- background: linear-gradient(178deg, rgba(17, 26, 43, 0.9) 0%, rgba(12, 20, 35, 0.95) 100%);
2403
- backdrop-filter: blur(8px);
2404
- border: 1px solid rgba(130, 170, 220, 0.08);
2537
+ /* Modal */
2538
+ .modal-overlay {
2539
+ backdrop-filter: blur(6px);
2540
+ background: rgba(0, 0, 0, 0.6);
2541
+ }
2542
+ .modal-content {
2543
+ background: var(--bg-2);
2544
+ border: 1px solid var(--ink-4);
2405
2545
  border-radius: 14px;
2406
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08), 0 4px 16px rgba(0, 0, 0, 0.04);
2546
+ box-shadow: 0 8px 40px rgba(0, 0, 0, 0.4);
2407
2547
  }
2408
2548
 
2409
- .section-header {
2410
- font-weight: 700;
2411
- letter-spacing: -0.01em;
2412
- font-size: 0.95rem;
2413
- padding: 1rem 1.25rem;
2414
- }
2415
- .section-header.clickable:hover {
2416
- background: rgba(122, 216, 255, 0.03);
2549
+ /* Inputs / Selects */
2550
+ .project-input, .model-select, .token-input {
2551
+ border-radius: 8px;
2552
+ background: var(--bg-3);
2553
+ border: 1px solid var(--ink-4);
2554
+ color: var(--ink-0);
2555
+ transition: border-color 0.2s, box-shadow 0.2s;
2417
2556
  }
2418
- .section-header .badge-count {
2419
- background: rgba(240, 127, 136, 0.1);
2420
- border: 1px solid rgba(240, 127, 136, 0.15);
2421
- font-size: 0.72rem;
2422
- font-weight: 700;
2557
+ .project-input:focus, .model-select:focus, .token-input:focus {
2558
+ border-color: var(--accent);
2559
+ box-shadow: 0 0 0 3px var(--accent-ghost);
2560
+ outline: none;
2423
2561
  }
2424
2562
 
2425
- /* --- Buttons --- */
2426
- .btn {
2427
- border-radius: 10px;
2428
- font-weight: 600;
2429
- letter-spacing: 0.01em;
2430
- transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
2563
+ /* Focus ring */
2564
+ button:focus-visible,
2565
+ a:focus-visible,
2566
+ select:focus-visible,
2567
+ input:focus-visible,
2568
+ [role='button']:focus-visible {
2569
+ outline: 2px solid var(--accent);
2570
+ outline-offset: 2px;
2571
+ box-shadow: 0 0 0 4px var(--accent-ghost);
2431
2572
  }
2432
- .btn:active { transform: scale(0.97); }
2433
2573
 
2434
- .btn-primary {
2435
- background: rgba(96, 199, 255, 0.12);
2436
- border: 1px solid rgba(96, 199, 255, 0.22);
2437
- }
2438
- .btn-primary:hover {
2439
- background: rgba(96, 199, 255, 0.2);
2440
- box-shadow: 0 0 16px rgba(96, 199, 255, 0.08);
2574
+ /* Empty states */
2575
+ .empty-state {
2576
+ color: var(--ink-3);
2577
+ font-size: 0.85rem;
2578
+ font-family: var(--font-mono);
2579
+ padding: 1rem;
2441
2580
  }
2442
2581
 
2443
- .btn-action {
2444
- border-radius: 6px;
2582
+ /* Config info */
2583
+ .config-info {
2584
+ border-radius: 10px;
2585
+ }
2586
+ .config-status.success {
2587
+ border-radius: 99px;
2445
2588
  font-weight: 600;
2446
- transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
2447
2589
  }
2448
- .btn-action:active { transform: scale(0.96); }
2449
2590
 
2450
- /* --- Focus strip --- */
2451
- .focus-chip {
2452
- backdrop-filter: blur(8px);
2453
- border-radius: 12px;
2454
- transition: border-color 0.2s, box-shadow 0.2s;
2591
+ /* Data loading */
2592
+ .data-loading {
2593
+ border-color: rgba(244, 169, 61, 0.2);
2594
+ color: var(--accent);
2455
2595
  }
2456
- .focus-now { border-color: rgba(122, 216, 255, 0.2); }
2457
- .focus-now:hover { box-shadow: 0 0 20px rgba(122, 216, 255, 0.06); }
2458
- .focus-next { border-color: rgba(244, 188, 113, 0.2); }
2459
- .focus-next:hover { box-shadow: 0 0 20px rgba(244, 188, 113, 0.06); }
2460
- .focus-blocked { border-color: rgba(240, 127, 136, 0.2); }
2461
- .focus-blocked:hover { box-shadow: 0 0 20px rgba(240, 127, 136, 0.06); }
2462
2596
 
2463
- /* --- MR items --- */
2464
- .mr-item-accordion {
2465
- border: 1px solid rgba(130, 170, 220, 0.08);
2466
- border-left: 2px solid transparent;
2467
- border-radius: 12px;
2468
- background: linear-gradient(180deg, rgba(13, 23, 42, 0.7) 0%, rgba(10, 19, 36, 0.85) 100%);
2469
- backdrop-filter: blur(6px);
2470
- transition: border-color 0.2s, box-shadow 0.2s, border-left-color 0.2s;
2471
- }
2472
- .mr-item-accordion:hover {
2473
- border-color: rgba(130, 170, 220, 0.14);
2474
- border-left-color: rgba(122, 216, 255, 0.3);
2597
+ /* Logs */
2598
+ .log-entry {
2599
+ font-family: var(--font-mono);
2600
+ font-size: 0.72rem;
2601
+ border-bottom-color: var(--ink-4);
2602
+ border-radius: 4px;
2603
+ margin-bottom: 1px;
2604
+ transition: background 0.15s;
2475
2605
  }
2476
- .mr-item-header:hover {
2477
- background: rgba(122, 216, 255, 0.02);
2606
+ .log-entry:hover {
2607
+ background: var(--bg-3);
2478
2608
  }
2479
2609
 
2480
- /* Review status glow */
2481
- .review-status.running { box-shadow: 0 0 8px rgba(245, 158, 11, 0.5); }
2482
- .review-status.completed { box-shadow: 0 0 6px rgba(34, 197, 94, 0.4); }
2483
- .review-status.failed { box-shadow: 0 0 6px rgba(239, 68, 68, 0.4); }
2484
-
2485
- /* Avatars */
2486
- .mr-avatar, .review-avatar {
2487
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25), 0 0 0 1px rgba(255, 255, 255, 0.04);
2488
- border: 2px solid rgba(255, 255, 255, 0.08);
2610
+ /* Markdown */
2611
+ .markdown-content {
2612
+ background: var(--bg-3);
2613
+ border: 1px solid var(--ink-4);
2614
+ border-radius: 10px;
2489
2615
  }
2490
2616
 
2491
- /* Stat badges */
2492
- .stat-badge {
2493
- border-radius: 6px;
2494
- font-weight: 700;
2495
- letter-spacing: 0.01em;
2496
- backdrop-filter: blur(4px);
2617
+ /* Progress bar */
2618
+ .progress-bar {
2619
+ background: var(--ink-4);
2620
+ height: 4px;
2497
2621
  }
2498
-
2499
- /* --- Queue lanes --- */
2500
- .queue-lane-header {
2501
- background: rgba(255, 255, 255, 0.015);
2502
- border-bottom: 1px solid rgba(130, 170, 220, 0.06);
2503
- }
2504
- .queue-lane-title {
2505
- font-size: 0.7rem;
2506
- font-weight: 800;
2507
- letter-spacing: 0.06em;
2508
- color: var(--nsc-text-secondary);
2509
- }
2510
- .queue-lane-count {
2511
- background: rgba(122, 216, 255, 0.08);
2512
- border-color: rgba(122, 216, 255, 0.15);
2513
- color: var(--nsc-focus);
2514
- }
2515
- .queue-lane {
2516
- border-radius: 12px;
2517
- backdrop-filter: blur(6px);
2518
- }
2519
-
2520
- /* --- Now lane --- */
2521
- .now-lane {
2522
- background: linear-gradient(165deg, rgba(96, 199, 255, 0.08) 0%, rgba(122, 216, 255, 0.03) 100%);
2523
- backdrop-filter: blur(8px);
2524
- border: 1px solid rgba(96, 199, 255, 0.18);
2525
- border-left: 3px solid rgba(96, 199, 255, 0.5);
2526
- border-radius: 14px;
2527
- box-shadow: 0 0 24px rgba(96, 199, 255, 0.04);
2528
- }
2529
- .now-lane-kicker {
2530
- font-size: 0.64rem;
2531
- letter-spacing: 0.06em;
2532
- }
2533
- .now-lane-quality {
2534
- background: rgba(0, 0, 0, 0.15);
2535
- border-color: rgba(130, 170, 220, 0.1);
2536
- border-radius: 10px;
2537
- backdrop-filter: blur(4px);
2538
- }
2539
-
2540
- /* --- Stat cards --- */
2541
- .stat-card {
2542
- border-radius: 12px;
2543
- backdrop-filter: blur(8px);
2544
- transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
2545
- }
2546
- .stat-card:hover {
2547
- transform: translateY(-2px);
2548
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
2549
- }
2550
-
2551
- /* --- Progress bar --- */
2552
- .progress-bar {
2553
- background: rgba(255, 255, 255, 0.06);
2554
- height: 5px;
2555
- }
2556
- .progress-bar-fill {
2557
- background: linear-gradient(90deg, #60c7ff 0%, #62d3a8 100%);
2558
- box-shadow: 0 0 8px rgba(96, 199, 255, 0.3);
2559
- }
2560
-
2561
- /* --- Toasts --- */
2562
- .toast {
2563
- backdrop-filter: blur(16px) saturate(140%);
2564
- border-radius: 12px;
2565
- font-weight: 600;
2566
- box-shadow: 0 4px 24px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(255, 255, 255, 0.04);
2567
- }
2568
- .toast.success {
2569
- background: rgba(34, 197, 94, 0.14);
2570
- border: 1px solid rgba(34, 197, 94, 0.25);
2571
- }
2572
- .toast.error {
2573
- background: rgba(239, 68, 68, 0.14);
2574
- border: 1px solid rgba(239, 68, 68, 0.25);
2575
- }
2576
- .toast.info {
2577
- background: rgba(59, 130, 246, 0.14);
2578
- border: 1px solid rgba(59, 130, 246, 0.25);
2579
- }
2580
-
2581
- /* --- Modal --- */
2582
- .modal-overlay {
2583
- backdrop-filter: blur(6px);
2584
- background: rgba(0, 0, 0, 0.5);
2585
- }
2586
- .modal-content {
2587
- background: rgba(22, 34, 53, 0.95);
2588
- backdrop-filter: blur(20px);
2589
- border: 1px solid rgba(130, 170, 220, 0.12);
2590
- border-radius: 16px;
2591
- box-shadow: 0 8px 40px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.03);
2592
- }
2593
-
2594
- /* --- Inputs / Selects --- */
2595
- .project-input, .model-select, .token-input {
2596
- border-radius: 10px;
2597
- background: rgba(0, 0, 0, 0.25);
2598
- border: 1px solid rgba(130, 170, 220, 0.1);
2599
- transition: border-color 0.2s, box-shadow 0.2s;
2600
- }
2601
- .project-input:focus, .model-select:focus, .token-input:focus {
2602
- border-color: rgba(96, 199, 255, 0.4);
2603
- box-shadow: 0 0 0 3px rgba(96, 199, 255, 0.08);
2604
- outline: none;
2605
- }
2606
-
2607
- /* Focus ring */
2608
- button:focus-visible,
2609
- a:focus-visible,
2610
- select:focus-visible,
2611
- input:focus-visible,
2612
- [role='button']:focus-visible {
2613
- outline: 2px solid rgba(122, 216, 255, 0.6);
2614
- outline-offset: 2px;
2615
- box-shadow: 0 0 0 4px rgba(122, 216, 255, 0.1);
2616
- }
2617
-
2618
- /* --- Empty states --- */
2619
- .empty-state {
2620
- color: rgba(130, 155, 190, 0.5);
2621
- font-style: italic;
2622
- font-size: 0.85rem;
2623
- }
2624
-
2625
- /* --- Config info --- */
2626
- .config-info {
2627
- border-radius: 10px;
2628
- backdrop-filter: blur(4px);
2629
- }
2630
- .config-status.success {
2631
- border-radius: 99px;
2632
- font-weight: 600;
2633
- }
2634
-
2635
- /* --- Data loading --- */
2636
- .data-loading {
2637
- backdrop-filter: blur(4px);
2638
- border-color: rgba(122, 216, 255, 0.12);
2639
- color: rgba(122, 216, 255, 0.7);
2640
- }
2641
-
2642
- /* --- Logs --- */
2643
- .log-entry {
2644
- font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', 'Monaco', monospace;
2645
- font-size: 0.72rem;
2646
- border-bottom-color: rgba(130, 170, 220, 0.05);
2647
- border-radius: 6px;
2648
- margin-bottom: 1px;
2649
- transition: background 0.15s;
2650
- }
2651
- .log-entry:hover {
2652
- background: rgba(255, 255, 255, 0.02);
2653
- }
2654
-
2655
- /* --- Markdown --- */
2656
- .markdown-content {
2657
- background: rgba(0, 0, 0, 0.15);
2658
- border: 1px solid rgba(130, 170, 220, 0.06);
2659
- border-radius: 12px;
2622
+ .progress-bar-fill {
2623
+ background: var(--accent);
2660
2624
  }
2661
2625
 
2662
- /* --- Collapsible list toggle --- */
2626
+ /* Collapsible list toggle */
2663
2627
  .collapsible-toggle {
2664
2628
  display: flex;
2665
2629
  align-items: center;
@@ -2669,9 +2633,9 @@ input:focus-visible,
2669
2633
  padding: 0.6rem 0;
2670
2634
  margin-top: 0.25rem;
2671
2635
  background: transparent;
2672
- border: 1px dashed rgba(130, 170, 220, 0.12);
2673
- border-radius: 10px;
2674
- color: var(--nsc-text-muted);
2636
+ border: 1px dashed var(--ink-4);
2637
+ border-radius: 8px;
2638
+ color: var(--ink-2);
2675
2639
  font-size: 0.78rem;
2676
2640
  font-weight: 600;
2677
2641
  cursor: pointer;
@@ -4897,3 +4861,1010 @@ body.overview-tab-active .dashboard-main > *:not(#overview-section) {
4897
4861
  transition: none !important;
4898
4862
  }
4899
4863
  }
4864
+
4865
+ /* SPEC-177 — Project CRUD UI + sidebar animations */
4866
+
4867
+ .manage-projects-toggle {
4868
+ display: flex;
4869
+ align-items: center;
4870
+ justify-content: space-between;
4871
+ gap: 0.5rem;
4872
+ width: auto;
4873
+ padding: 0.4rem 0.6rem;
4874
+ margin-bottom: 0.35rem;
4875
+ background: transparent;
4876
+ border: 1px solid rgba(251, 191, 36, 0.18);
4877
+ border-radius: 4px;
4878
+ color: #fbbf24;
4879
+ font-family: 'JetBrains Mono', ui-monospace, monospace;
4880
+ font-size: 0.72rem;
4881
+ letter-spacing: 0.06em;
4882
+ cursor: pointer;
4883
+ transition: border-color 200ms ease, background-color 200ms ease;
4884
+ }
4885
+
4886
+ .manage-projects-toggle:hover {
4887
+ border-color: rgba(251, 191, 36, 0.45);
4888
+ background-color: rgba(251, 191, 36, 0.04);
4889
+ }
4890
+
4891
+ .manage-projects-toggle[aria-expanded="true"] .manage-projects-toggle-icon {
4892
+ transform: rotate(180deg);
4893
+ }
4894
+
4895
+ .manage-projects-toggle-icon {
4896
+ width: 14px;
4897
+ height: 14px;
4898
+ transition: transform 200ms ease;
4899
+ }
4900
+
4901
+ #manage-panel {
4902
+ overflow: hidden;
4903
+ max-height: 0;
4904
+ opacity: 0;
4905
+ margin-bottom: 0;
4906
+ transition: max-height 250ms ease, opacity 250ms ease, margin-bottom 250ms ease;
4907
+ }
4908
+
4909
+ #manage-panel[data-open="true"] {
4910
+ max-height: 480px;
4911
+ opacity: 1;
4912
+ margin-bottom: 0.5rem;
4913
+ transition: max-height 250ms ease, opacity 250ms ease, margin-bottom 250ms ease;
4914
+ }
4915
+
4916
+ #manage-panel[data-open="false"] {
4917
+ transition: max-height 200ms ease, opacity 200ms ease, margin-bottom 200ms ease;
4918
+ }
4919
+
4920
+ #manage-panel .manage-panel-inner {
4921
+ display: flex;
4922
+ flex-direction: column;
4923
+ gap: 0.6rem;
4924
+ padding: 0.75rem;
4925
+ border: 1px solid rgba(251, 191, 36, 0.35);
4926
+ border-radius: 6px;
4927
+ background: var(--bg-3);
4928
+ box-shadow: 0 12px 36px rgba(0, 0, 0, 0.55), 0 0 0 1px rgba(0, 0, 0, 0.3);
4929
+ max-width: min(480px, 90vw);
4930
+ width: 100%;
4931
+ }
4932
+
4933
+ #manage-panel .manage-rows {
4934
+ display: flex;
4935
+ flex-direction: column;
4936
+ gap: 0.3rem;
4937
+ }
4938
+
4939
+ .manage-row {
4940
+ display: grid;
4941
+ grid-template-columns: 1fr auto auto auto;
4942
+ align-items: center;
4943
+ gap: 0.4rem;
4944
+ padding: 0.35rem 0.5rem;
4945
+ background: rgba(0, 0, 0, 0.25);
4946
+ border: 1px solid rgba(255, 255, 255, 0.06);
4947
+ border-radius: 3px;
4948
+ font-family: 'JetBrains Mono', ui-monospace, monospace;
4949
+ font-size: 0.72rem;
4950
+ color: #e7e5e4;
4951
+ transition: opacity 200ms ease, max-height 250ms ease, box-shadow 1500ms ease;
4952
+ overflow: hidden;
4953
+ }
4954
+
4955
+ .manage-row[data-enabled="false"] {
4956
+ opacity: 0.5;
4957
+ }
4958
+
4959
+ .manage-row-name {
4960
+ font-weight: 600;
4961
+ color: #fbbf24;
4962
+ white-space: nowrap;
4963
+ overflow: hidden;
4964
+ text-overflow: ellipsis;
4965
+ }
4966
+
4967
+ .manage-row-path {
4968
+ color: rgba(231, 229, 228, 0.55);
4969
+ font-size: 0.68rem;
4970
+ white-space: nowrap;
4971
+ overflow: hidden;
4972
+ text-overflow: ellipsis;
4973
+ }
4974
+
4975
+ .manage-row-toggle,
4976
+ .manage-row-delete {
4977
+ background: transparent;
4978
+ border: 1px solid rgba(255, 255, 255, 0.12);
4979
+ border-radius: 3px;
4980
+ color: #e7e5e4;
4981
+ font-family: inherit;
4982
+ font-size: 0.85rem;
4983
+ padding: 0 0.45rem;
4984
+ cursor: pointer;
4985
+ transition: transform 200ms ease, border-color 200ms ease, background-color 200ms ease;
4986
+ }
4987
+
4988
+ .manage-row-toggle .row-toggle-icon {
4989
+ display: inline-block;
4990
+ width: 10px;
4991
+ height: 10px;
4992
+ border-radius: 999px;
4993
+ background: #34d399;
4994
+ transition: transform 200ms ease, background-color 200ms ease;
4995
+ }
4996
+
4997
+ .manage-row-toggle.is-off .row-toggle-icon {
4998
+ background: #71717a;
4999
+ transform: rotate(180deg);
5000
+ }
5001
+
5002
+ .manage-row-toggle.is-on .row-toggle-icon {
5003
+ transform: rotate(0deg);
5004
+ }
5005
+
5006
+ .manage-row-delete:hover {
5007
+ border-color: #f87171;
5008
+ color: #f87171;
5009
+ }
5010
+
5011
+ .manage-row.is-entering {
5012
+ animation: spec177-manage-row-enter 1500ms ease forwards;
5013
+ }
5014
+
5015
+ .manage-row.is-leaving {
5016
+ max-height: 0;
5017
+ opacity: 0;
5018
+ padding-top: 0;
5019
+ padding-bottom: 0;
5020
+ margin-top: 0;
5021
+ margin-bottom: 0;
5022
+ border-width: 0;
5023
+ transition: max-height 250ms ease, opacity 250ms ease, padding 250ms ease, margin 250ms ease;
5024
+ }
5025
+
5026
+ @keyframes spec177-manage-row-enter {
5027
+ 0% {
5028
+ transform: translateY(-8px);
5029
+ opacity: 0;
5030
+ box-shadow: 0 0 0 0 rgba(52, 211, 153, 0);
5031
+ }
5032
+ 20% {
5033
+ transform: translateY(0);
5034
+ opacity: 1;
5035
+ box-shadow: 0 0 12px 2px rgba(52, 211, 153, 0.45);
5036
+ }
5037
+ 100% {
5038
+ transform: translateY(0);
5039
+ opacity: 1;
5040
+ box-shadow: 0 0 0 0 rgba(52, 211, 153, 0);
5041
+ }
5042
+ }
5043
+
5044
+ .add-form {
5045
+ display: flex;
5046
+ gap: 0.4rem;
5047
+ margin-top: 0.2rem;
5048
+ }
5049
+
5050
+ .add-form-input {
5051
+ flex: 1 1 auto;
5052
+ min-width: 0;
5053
+ padding: 0.35rem 0.5rem;
5054
+ background: rgba(0, 0, 0, 0.35);
5055
+ border: 1px solid rgba(251, 191, 36, 0.2);
5056
+ border-radius: 3px;
5057
+ color: #e7e5e4;
5058
+ font-family: 'JetBrains Mono', ui-monospace, monospace;
5059
+ font-size: 0.72rem;
5060
+ transition: border-color 200ms ease, box-shadow 200ms ease;
5061
+ }
5062
+
5063
+ .add-form-input:focus {
5064
+ outline: none;
5065
+ border-color: rgba(251, 191, 36, 0.6);
5066
+ }
5067
+
5068
+ .add-form-input.is-success {
5069
+ animation: spec177-input-success 1500ms ease forwards;
5070
+ }
5071
+
5072
+ @keyframes spec177-input-success {
5073
+ 0% {
5074
+ box-shadow: 0 0 0 0 rgba(52, 211, 153, 0);
5075
+ border-color: rgba(251, 191, 36, 0.2);
5076
+ }
5077
+ 30% {
5078
+ box-shadow: 0 0 12px 2px rgba(52, 211, 153, 0.55);
5079
+ border-color: #34d399;
5080
+ }
5081
+ 100% {
5082
+ box-shadow: 0 0 0 0 rgba(52, 211, 153, 0);
5083
+ border-color: rgba(251, 191, 36, 0.2);
5084
+ }
5085
+ }
5086
+
5087
+ .add-form-submit {
5088
+ padding: 0.35rem 0.7rem;
5089
+ background: rgba(251, 191, 36, 0.12);
5090
+ border: 1px solid rgba(251, 191, 36, 0.4);
5091
+ border-radius: 3px;
5092
+ color: #fbbf24;
5093
+ font-family: 'JetBrains Mono', ui-monospace, monospace;
5094
+ font-size: 0.72rem;
5095
+ letter-spacing: 0.04em;
5096
+ cursor: pointer;
5097
+ transition: background-color 200ms ease, border-color 200ms ease;
5098
+ }
5099
+
5100
+ .add-form-submit:hover {
5101
+ background: rgba(251, 191, 36, 0.22);
5102
+ border-color: #fbbf24;
5103
+ }
5104
+
5105
+ .add-form-submit.is-busy {
5106
+ animation: spec177-submit-busy 1200ms ease-in-out infinite;
5107
+ }
5108
+
5109
+ @keyframes spec177-submit-busy {
5110
+ 0%, 100% {
5111
+ border-color: rgba(251, 191, 36, 0.4);
5112
+ box-shadow: 0 0 0 0 rgba(251, 191, 36, 0);
5113
+ }
5114
+ 50% {
5115
+ border-color: #fbbf24;
5116
+ box-shadow: 0 0 10px 1px rgba(251, 191, 36, 0.4);
5117
+ }
5118
+ }
5119
+
5120
+ .add-form.is-error {
5121
+ animation: spec177-shake 300ms ease;
5122
+ }
5123
+
5124
+ @keyframes spec177-shake {
5125
+ 0%, 100% { transform: translateX(0); }
5126
+ 20% { transform: translateX(-4px); }
5127
+ 40% { transform: translateX(4px); }
5128
+ 60% { transform: translateX(-4px); }
5129
+ 80% { transform: translateX(4px); }
5130
+ }
5131
+
5132
+ .add-form-error {
5133
+ margin: 0;
5134
+ font-family: 'JetBrains Mono', ui-monospace, monospace;
5135
+ font-size: 0.68rem;
5136
+ color: #f87171;
5137
+ }
5138
+
5139
+ .dashboard-tab {
5140
+ transition: opacity 200ms ease, transform 1500ms ease, max-width 250ms ease, box-shadow 1500ms ease;
5141
+ }
5142
+
5143
+ .dashboard-tab[data-enabled="false"] {
5144
+ opacity: 0.4;
5145
+ }
5146
+
5147
+ .dashboard-tab.is-entering {
5148
+ animation: spec177-tab-enter 1500ms ease forwards;
5149
+ }
5150
+
5151
+ @keyframes spec177-tab-enter {
5152
+ 0% {
5153
+ transform: translateX(20px);
5154
+ opacity: 0;
5155
+ box-shadow: 0 0 0 0 rgba(52, 211, 153, 0);
5156
+ }
5157
+ 20% {
5158
+ transform: translateX(0);
5159
+ opacity: 1;
5160
+ box-shadow: 0 0 16px 3px rgba(52, 211, 153, 0.55);
5161
+ }
5162
+ 100% {
5163
+ transform: translateX(0);
5164
+ opacity: 1;
5165
+ box-shadow: 0 0 0 0 rgba(52, 211, 153, 0);
5166
+ }
5167
+ }
5168
+
5169
+ .dashboard-tab.is-leaving {
5170
+ opacity: 0;
5171
+ max-width: 0;
5172
+ padding-left: 0;
5173
+ padding-right: 0;
5174
+ margin: 0;
5175
+ border-width: 0;
5176
+ overflow: hidden;
5177
+ transition: opacity 250ms ease, max-width 250ms ease, padding 250ms ease, margin 250ms ease;
5178
+ }
5179
+
5180
+ @media (prefers-reduced-motion: reduce) {
5181
+ #manage-panel,
5182
+ #manage-panel .manage-panel-inner,
5183
+ .manage-row,
5184
+ .manage-row.is-entering,
5185
+ .manage-row.is-leaving,
5186
+ .manage-row-toggle,
5187
+ .manage-row-toggle .row-toggle-icon,
5188
+ .dashboard-tab,
5189
+ .dashboard-tab.is-entering,
5190
+ .dashboard-tab.is-leaving,
5191
+ .add-form,
5192
+ .add-form-input,
5193
+ .add-form-input.is-success,
5194
+ .add-form-submit,
5195
+ .add-form-submit.is-busy,
5196
+ .add-form.is-error {
5197
+ animation: none !important;
5198
+ transform: none !important;
5199
+ transition: opacity 150ms linear !important;
5200
+ box-shadow: none !important;
5201
+ }
5202
+ }
5203
+
5204
+ /* SPEC-178 — Project bar (horizontal navigation above cards) */
5205
+ .project-bar {
5206
+ position: relative;
5207
+ display: flex;
5208
+ align-items: flex-start;
5209
+ gap: 1rem;
5210
+ margin-bottom: 1rem;
5211
+ flex-wrap: nowrap;
5212
+ animation: project-bar-enter 250ms ease-out;
5213
+ }
5214
+
5215
+ .project-bar > #manage-projects-toggle {
5216
+ flex: 0 0 auto;
5217
+ }
5218
+
5219
+ .project-bar > #manage-panel {
5220
+ position: absolute;
5221
+ top: 100%;
5222
+ left: 0;
5223
+ z-index: 20;
5224
+ width: min(480px, 90vw);
5225
+ margin-top: 0.25rem;
5226
+ }
5227
+
5228
+ .project-bar > #dashboard-tabs {
5229
+ flex: 1 1 auto;
5230
+ min-width: 0;
5231
+ overflow-x: auto;
5232
+ }
5233
+
5234
+ /* SPEC-178 — Scope marker label above cards */
5235
+ .cards-scope-marker {
5236
+ font-family: 'JetBrains Mono', 'Fira Code', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
5237
+ font-size: 11px;
5238
+ letter-spacing: 0.12em;
5239
+ text-transform: uppercase;
5240
+ margin: 0 0 0.5rem 0;
5241
+ display: flex;
5242
+ gap: 0.5rem;
5243
+ align-items: baseline;
5244
+ transition: opacity 200ms ease-out;
5245
+ }
5246
+
5247
+ .cards-scope-marker .cards-scope-prefix {
5248
+ color: rgba(251, 191, 36, 0.55);
5249
+ }
5250
+
5251
+ .cards-scope-marker .cards-scope-label {
5252
+ color: rgba(251, 191, 36, 0.95);
5253
+ font-weight: 600;
5254
+ }
5255
+
5256
+ .cards-scope-marker[data-scope-kind="overview"] .cards-scope-label {
5257
+ color: rgba(243, 238, 232, 0.9);
5258
+ }
5259
+
5260
+ @keyframes project-bar-enter {
5261
+ from {
5262
+ opacity: 0;
5263
+ transform: translateY(-6px);
5264
+ }
5265
+ to {
5266
+ opacity: 1;
5267
+ transform: translateY(0);
5268
+ }
5269
+ }
5270
+
5271
+ @media (max-width: 900px) {
5272
+ .project-bar {
5273
+ flex-wrap: wrap;
5274
+ }
5275
+
5276
+ .project-bar > #dashboard-tabs {
5277
+ width: 100%;
5278
+ flex-basis: 100%;
5279
+ }
5280
+ }
5281
+
5282
+ @media (prefers-reduced-motion: reduce) {
5283
+ .project-bar {
5284
+ animation: none !important;
5285
+ }
5286
+
5287
+ .cards-scope-marker {
5288
+ transition: none !important;
5289
+ }
5290
+ }
5291
+
5292
+ /* SPEC-179 — Settings modal + sidebar Settings button (Agentic OS DNA) */
5293
+
5294
+ .sidebar-settings-button {
5295
+ display: flex;
5296
+ align-items: center;
5297
+ justify-content: flex-start;
5298
+ margin-top: 0.75rem;
5299
+ padding: 0.5rem 0.75rem;
5300
+ background: transparent;
5301
+ border: 1px solid rgba(255, 176, 32, 0.35);
5302
+ color: #ffb020;
5303
+ font-family: var(--font-mono, 'JetBrains Mono', monospace);
5304
+ font-size: 0.75rem;
5305
+ letter-spacing: 0.05em;
5306
+ text-transform: uppercase;
5307
+ cursor: pointer;
5308
+ transition: border-color 120ms ease, background-color 120ms ease, color 120ms ease;
5309
+ }
5310
+
5311
+ .sidebar-settings-button:hover,
5312
+ .sidebar-settings-button:focus-visible {
5313
+ border-color: #ffb020;
5314
+ background: rgba(255, 176, 32, 0.08);
5315
+ color: #ffd27a;
5316
+ outline: none;
5317
+ }
5318
+
5319
+ .sidebar-settings-button[hidden] {
5320
+ display: none !important;
5321
+ }
5322
+
5323
+ .sidebar-settings-button__prefix {
5324
+ font-weight: 600;
5325
+ }
5326
+
5327
+ .settings-modal {
5328
+ margin: auto;
5329
+ max-width: 600px;
5330
+ width: calc(100% - 2rem);
5331
+ padding: 0;
5332
+ border: 1px solid #ffb020;
5333
+ background: #1a1410;
5334
+ color: #f4ead7;
5335
+ font-family: var(--font-mono, 'JetBrains Mono', monospace);
5336
+ box-shadow: 0 0 32px rgba(255, 176, 32, 0.18);
5337
+ border-radius: 6px;
5338
+ }
5339
+
5340
+ .settings-modal::backdrop {
5341
+ background: rgba(10, 7, 4, 0.78);
5342
+ backdrop-filter: blur(2px);
5343
+ }
5344
+
5345
+ .settings-modal__form {
5346
+ display: flex;
5347
+ flex-direction: column;
5348
+ gap: 1rem;
5349
+ padding: 1.5rem;
5350
+ }
5351
+
5352
+ .settings-modal__title {
5353
+ margin: 0 0 0.5rem;
5354
+ color: #ffb020;
5355
+ font-size: 0.875rem;
5356
+ letter-spacing: 0.06em;
5357
+ text-transform: uppercase;
5358
+ }
5359
+
5360
+ .settings-modal__field {
5361
+ display: flex;
5362
+ flex-direction: column;
5363
+ gap: 0.35rem;
5364
+ border: none;
5365
+ padding: 0;
5366
+ }
5367
+
5368
+ .settings-modal__legend {
5369
+ color: #f4ead7;
5370
+ font-size: 0.75rem;
5371
+ text-transform: uppercase;
5372
+ letter-spacing: 0.05em;
5373
+ padding: 0;
5374
+ margin-bottom: 0.35rem;
5375
+ }
5376
+
5377
+ .settings-modal__label {
5378
+ font-size: 0.75rem;
5379
+ letter-spacing: 0.05em;
5380
+ text-transform: uppercase;
5381
+ color: #d6c89a;
5382
+ }
5383
+
5384
+ .settings-modal__radio {
5385
+ display: inline-flex;
5386
+ align-items: center;
5387
+ gap: 0.4rem;
5388
+ margin-right: 1rem;
5389
+ font-size: 0.875rem;
5390
+ color: #f4ead7;
5391
+ }
5392
+
5393
+ .settings-modal__input,
5394
+ .settings-modal__select {
5395
+ background: #0c0905;
5396
+ border: 1px solid rgba(255, 176, 32, 0.3);
5397
+ color: #f4ead7;
5398
+ padding: 0.4rem 0.6rem;
5399
+ font-family: inherit;
5400
+ font-size: 0.875rem;
5401
+ border-radius: 3px;
5402
+ }
5403
+
5404
+ .settings-modal__input:focus,
5405
+ .settings-modal__select:focus {
5406
+ outline: none;
5407
+ border-color: #ffb020;
5408
+ box-shadow: 0 0 0 2px rgba(255, 176, 32, 0.18);
5409
+ }
5410
+
5411
+ .settings-modal__error {
5412
+ margin: 0;
5413
+ min-height: 1.25em;
5414
+ color: #ff6464;
5415
+ font-size: 0.8125rem;
5416
+ }
5417
+
5418
+ .settings-modal__actions {
5419
+ display: flex;
5420
+ justify-content: flex-end;
5421
+ gap: 0.5rem;
5422
+ }
5423
+
5424
+ .settings-modal__cancel,
5425
+ .settings-modal__submit {
5426
+ padding: 0.4rem 0.85rem;
5427
+ border-radius: 3px;
5428
+ font-family: inherit;
5429
+ font-size: 0.8125rem;
5430
+ letter-spacing: 0.04em;
5431
+ cursor: pointer;
5432
+ border: 1px solid rgba(255, 176, 32, 0.3);
5433
+ background: transparent;
5434
+ color: #f4ead7;
5435
+ transition: background-color 120ms ease, color 120ms ease, border-color 120ms ease;
5436
+ }
5437
+
5438
+ .settings-modal__cancel:hover {
5439
+ border-color: #ffb020;
5440
+ }
5441
+
5442
+ .settings-modal__submit {
5443
+ background: #ffb020;
5444
+ border-color: #ffb020;
5445
+ color: #1a1410;
5446
+ font-weight: 600;
5447
+ }
5448
+
5449
+ .settings-modal__submit:hover {
5450
+ background: #ffd27a;
5451
+ }
5452
+
5453
+ .project-card__external {
5454
+ display: inline-flex;
5455
+ align-items: center;
5456
+ justify-content: center;
5457
+ margin-left: auto;
5458
+ padding: 0 0.35rem;
5459
+ color: #ffb020;
5460
+ font-size: 0.875rem;
5461
+ text-decoration: none;
5462
+ border-radius: 3px;
5463
+ transition: color 120ms ease, background-color 120ms ease;
5464
+ }
5465
+
5466
+ .project-card__external:hover,
5467
+ .project-card__external:focus-visible {
5468
+ color: #ffd27a;
5469
+ background: rgba(255, 176, 32, 0.1);
5470
+ outline: none;
5471
+ }
5472
+
5473
+ @media (prefers-reduced-motion: reduce) {
5474
+ .settings-modal {
5475
+ animation: none !important;
5476
+ transition: opacity 0.1s linear;
5477
+ }
5478
+
5479
+ .sidebar-settings-button {
5480
+ transition: none !important;
5481
+ }
5482
+ }
5483
+
5484
+ /* ============================================================
5485
+ OPERATOR'S CONSOLE — Amber redesign additions
5486
+ ============================================================ */
5487
+
5488
+ /* Tabular numerals for all number-displaying elements */
5489
+ #running-count,
5490
+ #queued-count,
5491
+ #completed-count,
5492
+ .focus-value,
5493
+ .badge-count,
5494
+ .card-value,
5495
+ .focus-now-count,
5496
+ .focus-next-count,
5497
+ .focus-blocked-count {
5498
+ font-variant-numeric: tabular-nums;
5499
+ font-family: var(--font-mono);
5500
+ font-weight: 500;
5501
+ }
5502
+
5503
+ /* Heartbeat empty state container */
5504
+ .heartbeat-empty-state {
5505
+ display: flex;
5506
+ flex-direction: column;
5507
+ align-items: center;
5508
+ gap: 1rem;
5509
+ padding: 2rem 1rem;
5510
+ text-align: center;
5511
+ }
5512
+
5513
+ .heartbeat-label {
5514
+ font-family: var(--font-mono);
5515
+ font-size: var(--type-xs);
5516
+ color: var(--ink-2);
5517
+ letter-spacing: 0.12em;
5518
+ text-transform: uppercase;
5519
+ }
5520
+
5521
+ .heartbeat-message {
5522
+ font-family: var(--font-sans);
5523
+ font-size: var(--type-sm);
5524
+ color: var(--ink-1);
5525
+ }
5526
+
5527
+ .heartbeat-line-container {
5528
+ width: 240px;
5529
+ height: 1px;
5530
+ background: var(--ink-4);
5531
+ position: relative;
5532
+ overflow: hidden;
5533
+ }
5534
+
5535
+ @media (prefers-reduced-motion: reduce) {
5536
+ .heartbeat-line-container {
5537
+ background: linear-gradient(90deg, transparent 0%, var(--accent) 50%, transparent 100%);
5538
+ opacity: 0.4;
5539
+ }
5540
+ }
5541
+
5542
+ /* Sidebar layout reset for slimmer profile */
5543
+ .dashboard-sidebar {
5544
+ display: flex;
5545
+ flex-direction: column;
5546
+ gap: 0.75rem;
5547
+ }
5548
+
5549
+ /* Attention strip (focus-strip moved to main) */
5550
+ .attention-strip {
5551
+ display: flex;
5552
+ flex-wrap: wrap;
5553
+ gap: 0.75rem;
5554
+ margin-bottom: 1.25rem;
5555
+ }
5556
+
5557
+ /* Tabs type-only upgrade */
5558
+ .dashboard-tab-bar-wrapper .dashboard-tab {
5559
+ position: relative;
5560
+ }
5561
+
5562
+ /* Shared tab underline element (injected via JS) */
5563
+ .tab-underline-indicator {
5564
+ position: absolute;
5565
+ bottom: -1px;
5566
+ height: 2px;
5567
+ background: var(--accent);
5568
+ pointer-events: none;
5569
+ opacity: 0;
5570
+ transition: none;
5571
+ }
5572
+
5573
+ /* Version label with mono font */
5574
+ .version-label {
5575
+ font-family: var(--font-mono);
5576
+ font-size: var(--type-xs);
5577
+ color: var(--ink-2);
5578
+ background: var(--bg-3);
5579
+ border: 1px solid var(--ink-4);
5580
+ border-radius: 4px;
5581
+ padding: 0.2rem 0.5rem;
5582
+ letter-spacing: 0.04em;
5583
+ }
5584
+
5585
+ /* Context bar chips (toolchain) */
5586
+ .context-bar {
5587
+ display: flex;
5588
+ flex-wrap: wrap;
5589
+ gap: 0.5rem;
5590
+ align-items: center;
5591
+ margin-bottom: 0.75rem;
5592
+ padding: 0.4rem 0;
5593
+ border-bottom: 1px solid var(--ink-4);
5594
+ }
5595
+
5596
+ .context-chip {
5597
+ display: inline-flex;
5598
+ align-items: center;
5599
+ gap: 0.3rem;
5600
+ padding: 0.2rem 0.55rem;
5601
+ background: var(--bg-3);
5602
+ border: 1px solid var(--ink-4);
5603
+ border-radius: 99px;
5604
+ font-family: var(--font-mono);
5605
+ font-size: var(--type-xs);
5606
+ color: var(--ink-2);
5607
+ letter-spacing: 0.04em;
5608
+ }
5609
+
5610
+ .context-chip .status-dot {
5611
+ width: 6px;
5612
+ height: 6px;
5613
+ }
5614
+
5615
+ /* Scope marker — minimal single-line, no separator block decoration */
5616
+ .cards-scope-marker {
5617
+ font-size: 13px;
5618
+ color: var(--ink-3);
5619
+ font-family: var(--font-mono);
5620
+ letter-spacing: 0.08em;
5621
+ text-transform: uppercase;
5622
+ opacity: 1;
5623
+ padding: 0;
5624
+ margin: 0 0 0.5rem 0;
5625
+ border: none;
5626
+ background: none;
5627
+ display: flex;
5628
+ gap: 0.4rem;
5629
+ align-items: baseline;
5630
+ }
5631
+
5632
+ .cards-scope-marker .cards-scope-prefix {
5633
+ color: var(--ink-3);
5634
+ opacity: 0.6;
5635
+ }
5636
+
5637
+ .cards-scope-marker .cards-scope-label {
5638
+ color: var(--ink-3);
5639
+ font-weight: 500;
5640
+ }
5641
+
5642
+ /* Version update button with amber accent */
5643
+ .btn-update {
5644
+ background: var(--accent);
5645
+ color: var(--bg-0);
5646
+ border: none;
5647
+ }
5648
+ .btn-update:hover { background: var(--accent-hover); }
5649
+
5650
+ /* Queue lane count with amber */
5651
+ .queue-lane-count {
5652
+ background: var(--accent-ghost);
5653
+ border-color: rgba(244, 169, 61, 0.25);
5654
+ color: var(--accent);
5655
+ font-family: var(--font-mono);
5656
+ font-variant-numeric: tabular-nums;
5657
+ }
5658
+
5659
+ /* Collapsible toggle hover */
5660
+ .collapsible-toggle:hover {
5661
+ background: var(--bg-3);
5662
+ border-color: var(--ink-3);
5663
+ color: var(--ink-1);
5664
+ }
5665
+ .collapsible-toggle:active { transform: scale(0.98); }
5666
+
5667
+ /* Stat badge with mono font */
5668
+ .stat-badge {
5669
+ font-family: var(--font-mono);
5670
+ font-variant-numeric: tabular-nums;
5671
+ font-weight: 500;
5672
+ border-radius: 4px;
5673
+ }
5674
+
5675
+ /* Team insights with token colors */
5676
+ .team-insights {
5677
+ background: var(--bg-2);
5678
+ border: 1px solid var(--ink-4);
5679
+ border-radius: 10px;
5680
+ padding: 1rem;
5681
+ }
5682
+
5683
+ /* AI section with amber accent */
5684
+ .ai-generate-btn {
5685
+ border-color: rgba(244, 169, 61, 0.35);
5686
+ background: var(--accent-ghost);
5687
+ color: var(--accent);
5688
+ }
5689
+ .ai-generate-btn:hover {
5690
+ background: rgba(244, 169, 61, 0.18);
5691
+ border-color: var(--accent);
5692
+ }
5693
+
5694
+ .ai-badge {
5695
+ background: var(--accent-ghost);
5696
+ border: 1px solid rgba(244, 169, 61, 0.35);
5697
+ color: var(--accent);
5698
+ }
5699
+
5700
+ .ai-team-card {
5701
+ background: var(--bg-2);
5702
+ border: 1px solid var(--ink-4);
5703
+ border-left: 3px solid var(--accent);
5704
+ border-radius: 10px;
5705
+ }
5706
+
5707
+ .ai-team-card-header {
5708
+ color: var(--accent);
5709
+ }
5710
+
5711
+ /* Sheet panels with new bg */
5712
+ .sheet-panel {
5713
+ background: var(--bg-1);
5714
+ border-left: 1px solid var(--ink-4);
5715
+ }
5716
+
5717
+ .sheet-stat-card {
5718
+ background: var(--bg-3);
5719
+ border: 1px solid var(--ink-4);
5720
+ }
5721
+
5722
+ /* Dev card with new bg */
5723
+ .dev-card {
5724
+ background: var(--bg-2);
5725
+ border: 1px solid var(--ink-4);
5726
+ }
5727
+ .dev-card:hover {
5728
+ border-color: var(--ink-2);
5729
+ }
5730
+
5731
+ /* Focus ring update */
5732
+ button:focus-visible,
5733
+ a:focus-visible,
5734
+ select:focus-visible,
5735
+ input:focus-visible,
5736
+ [role='button']:focus-visible {
5737
+ outline: 2px solid var(--accent);
5738
+ outline-offset: 2px;
5739
+ box-shadow: 0 0 0 4px var(--accent-ghost);
5740
+ }
5741
+
5742
+ @media (prefers-reduced-motion: reduce) {
5743
+ .status-dot {
5744
+ animation: none !important;
5745
+ }
5746
+ .heartbeat-line-container {
5747
+ overflow: visible;
5748
+ }
5749
+ .context-bar,
5750
+ .attention-strip,
5751
+ .context-chip {
5752
+ transition: none !important;
5753
+ animation: none !important;
5754
+ }
5755
+ .card {
5756
+ transition: none !important;
5757
+ }
5758
+ }
5759
+
5760
+ /* Logo SVG — life signal */
5761
+ @keyframes logo-pulse-breath {
5762
+ 0%, 100% { transform: scale(0.7); opacity: 0.35; }
5763
+ 50% { transform: scale(1.1); opacity: 1; }
5764
+ }
5765
+ @keyframes logo-check-glow {
5766
+ 0%, 90%, 100% { opacity: 0.6; }
5767
+ 93% { opacity: 1; filter: drop-shadow(0 0 3px var(--success)); }
5768
+ }
5769
+ @keyframes logo-flow-line {
5770
+ 0%, 100% { stroke-dashoffset: 0; opacity: 1; }
5771
+ 50% { stroke-dashoffset: -10; opacity: 0.6; }
5772
+ }
5773
+ .logo .logo-pulse {
5774
+ transform-origin: center;
5775
+ transform-box: fill-box;
5776
+ animation: logo-pulse-breath 2.8s ease-in-out infinite;
5777
+ }
5778
+ .logo .logo-check {
5779
+ animation: logo-check-glow 4.5s ease-in-out infinite;
5780
+ }
5781
+ .logo .logo-line--accent {
5782
+ stroke-dasharray: 12 4;
5783
+ animation: logo-flow-line 3.5s linear infinite;
5784
+ }
5785
+ @media (prefers-reduced-motion: reduce) {
5786
+ .logo .logo-pulse,
5787
+ .logo .logo-check,
5788
+ .logo .logo-line--accent {
5789
+ animation: none !important;
5790
+ }
5791
+ }
5792
+
5793
+ /* Task 6 — Toolchain chips: inline mono text, right-aligned in project-bar */
5794
+ /* Renamed from .context-chip to .toolchain-chip to avoid collision with the
5795
+ legacy .context-chip pill rule (line 5597). No !important needed. */
5796
+ .context-chips {
5797
+ flex: 0 0 auto;
5798
+ display: flex;
5799
+ gap: 1.75rem;
5800
+ align-items: center;
5801
+ margin-left: auto;
5802
+ padding: 0 0.25rem;
5803
+ height: 100%;
5804
+ }
5805
+ .context-chips .toolchain-chip {
5806
+ display: flex;
5807
+ flex-direction: row;
5808
+ align-items: center;
5809
+ gap: 0.5rem;
5810
+ font-family: var(--font-mono);
5811
+ font-size: 11px;
5812
+ white-space: nowrap;
5813
+ min-height: 28px;
5814
+ letter-spacing: 0.04em;
5815
+ }
5816
+ .context-chips .toolchain-chip-label {
5817
+ text-transform: uppercase;
5818
+ letter-spacing: 0.12em;
5819
+ color: var(--ink-2);
5820
+ font-size: 10px;
5821
+ font-weight: 500;
5822
+ }
5823
+ .context-chips .toolchain-chip .card-claude {
5824
+ display: inline-flex;
5825
+ align-items: center;
5826
+ gap: 6px;
5827
+ flex-direction: row;
5828
+ font-size: 12px;
5829
+ padding: 0;
5830
+ background: transparent;
5831
+ }
5832
+ .context-chips .toolchain-chip .card-claude .status { font-size: 12px; }
5833
+ .context-chips .toolchain-chip .card-claude .version {
5834
+ color: var(--ink-3);
5835
+ font-size: 10px;
5836
+ }
5837
+ .context-chips .toolchain-chip .card-claude.available,
5838
+ .context-chips .toolchain-chip .card-claude.available .status { color: var(--success); }
5839
+ .context-chips .toolchain-chip .card-claude.unavailable,
5840
+ .context-chips .toolchain-chip .card-claude.unavailable .status { color: var(--danger); }
5841
+ .context-chips .toolchain-chip .card-claude.checking,
5842
+ .context-chips .toolchain-chip .card-claude.checking .status { color: var(--warning); }
5843
+ .context-chips .toolchain-chip-model .model-select {
5844
+ background: var(--bg-1);
5845
+ color: var(--ink-1);
5846
+ border: 1px solid var(--ink-4);
5847
+ border-radius: 4px;
5848
+ padding: 3px 8px;
5849
+ font-family: var(--font-mono);
5850
+ font-size: 11px;
5851
+ line-height: 16px;
5852
+ cursor: pointer;
5853
+ transition: border-color 150ms ease;
5854
+ }
5855
+ .context-chips .toolchain-chip-model .model-select:hover { border-color: var(--accent); }
5856
+ .context-chips .toolchain-chip-model .model-select:focus {
5857
+ outline: none;
5858
+ border-color: var(--accent);
5859
+ box-shadow: 0 0 0 2px var(--accent-ghost);
5860
+ }
5861
+
5862
+ @media (max-width: 1100px) {
5863
+ .context-chips {
5864
+ margin-left: 0;
5865
+ width: 100%;
5866
+ flex-basis: 100%;
5867
+ margin-top: 0.5rem;
5868
+ justify-content: flex-end;
5869
+ }
5870
+ }