rcf-lite 0.28.4 → 0.30.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 (882) hide show
  1. package/CHANGELOG.md +194 -1
  2. package/bin/rcf.js +4 -0
  3. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-001.json +1 -1
  4. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-002.json +1 -1
  5. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-003.json +1 -1
  6. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-004.json +1 -1
  7. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-005.json +1 -1
  8. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-006.json +1 -1
  9. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-007.json +1 -1
  10. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-009.json +1 -1
  11. package/blueprints/application-account-settings/contributions/tacs/tac-2601-application-account-settings-shell.json +4 -4
  12. package/blueprints/application-account-settings/contributions/tacs/tac-2602-application-account-settings-capability-discovery.json +2 -2
  13. package/blueprints/application-account-settings/contributions/tacs/tac-2603-application-account-settings-hosted-ui-bridge.json +2 -2
  14. package/blueprints/application-account-settings/contributions/tacs/tac-2604-application-account-settings-session-store.json +7 -7
  15. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25105.json +3 -15
  16. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25106.json +2 -10
  17. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25111.json +3 -6
  18. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25112.json +4 -4
  19. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-001.json +1 -1
  20. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-002.json +1 -1
  21. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-003.json +1 -1
  22. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-004.json +1 -1
  23. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-005.json +1 -1
  24. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-006.json +1 -1
  25. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-007.json +1 -1
  26. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-008.json +1 -1
  27. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-009.json +1 -1
  28. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-014.json +1 -1
  29. package/blueprints/application-admin-console/contributions/tacs/tac-2201-application-admin-console-shell.json +4 -4
  30. package/blueprints/application-admin-console/contributions/tacs/tac-2202-application-admin-console-capability-discovery.json +7 -7
  31. package/blueprints/application-admin-console/contributions/tacs/tac-2203-application-admin-console-permission-matrix.json +2 -2
  32. package/blueprints/application-admin-console/contributions/tacs/tac-2204-application-admin-console-audit-view.json +2 -2
  33. package/blueprints/application-admin-console/contributions/tacs/tac-2214-application-admin-console-access-gated-signin-surface.json +3 -2
  34. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21107.json +2 -2
  35. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21111.json +3 -11
  36. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21112.json +4 -4
  37. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21815.json +2 -2
  38. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21816.json +2 -2
  39. package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-001.json +1 -1
  40. package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-002.json +1 -2
  41. package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-004.json +1 -1
  42. package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-008.json +1 -1
  43. package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-016.json +1 -1
  44. package/blueprints/application-api-rest/contributions/tacs/tac-301-application-api-rest-request-pipeline.json +4 -4
  45. package/blueprints/application-api-rest/contributions/tacs/tac-302-application-api-rest-auth-middleware.json +4 -4
  46. package/blueprints/application-api-rest/contributions/tacs/tac-303-application-api-rest-contract-surface.json +4 -4
  47. package/blueprints/application-api-rest/contributions/tacs/tac-304-application-api-rest-resource-layer.json +4 -4
  48. package/blueprints/application-api-rest/contributions/tacs/tac-305-application-api-rest-observability.json +4 -4
  49. package/blueprints/application-api-rest/contributions/tacs/tac-306-application-api-rest-operability.json +4 -4
  50. package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2102.json +1 -1
  51. package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2103.json +1 -1
  52. package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2104.json +4 -4
  53. package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2105.json +2 -2
  54. package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2108.json +1 -1
  55. package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2110.json +1 -1
  56. package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2111.json +1 -1
  57. package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2118.json +1 -1
  58. package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2119.json +2 -2
  59. package/blueprints/application-charts/contributions/tacs/tac-1901-application-charts-render-shell.json +4 -4
  60. package/blueprints/application-charts/contributions/tacs/tac-1902-application-charts-keyboard-traversal.json +4 -4
  61. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18105.json +1 -1
  62. package/blueprints/application-dashboard/contributions/tacs/tac-2001-application-dashboard-tile-grid.json +4 -4
  63. package/blueprints/application-dashboard/contributions/tacs/tac-2002-application-dashboard-filter-chrome.json +4 -4
  64. package/blueprints/application-dashboard/contributions/tacs/tac-2003-application-dashboard-export-handle.json +2 -2
  65. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19106.json +1 -1
  66. package/blueprints/application-datatable/contributions/tacs/tac-1801-application-datatable-shell.json +4 -4
  67. package/blueprints/application-datatable/contributions/tacs/tac-1802-application-datatable-query-adapter.json +4 -4
  68. package/blueprints/application-datatable/contributions/tacs/tac-1803-application-datatable-selection-model.json +2 -2
  69. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17101.json +1 -1
  70. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17102.json +1 -1
  71. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17103.json +1 -1
  72. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17105.json +1 -1
  73. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-001.json +1 -1
  74. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-002.json +1 -1
  75. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-003.json +1 -1
  76. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-004.json +1 -1
  77. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-005.json +2 -2
  78. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-006.json +1 -1
  79. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-007.json +2 -2
  80. package/blueprints/application-empty-error-states/contributions/tacs/tac-2301-application-empty-error-states-state-machine.json +5 -5
  81. package/blueprints/application-empty-error-states/contributions/tacs/tac-2302-application-empty-error-states-recovery-router.json +2 -2
  82. package/blueprints/application-empty-error-states/contributions/tacs/tac-2303-application-empty-error-states-offline-buffer.json +5 -5
  83. package/blueprints/application-error-handling/contributions/tacs/tac-1701-application-error-handling-boundary.json +6 -6
  84. package/blueprints/application-error-handling/contributions/tacs/tac-1702-application-error-handling-record-factory.json +4 -4
  85. package/blueprints/application-error-handling/contributions/user-stories/application-error-handling-us-16101.json +1 -1
  86. package/blueprints/application-error-handling/contributions/user-stories/application-error-handling-us-16107.json +4 -4
  87. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-001.json +1 -1
  88. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-002.json +1 -1
  89. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-003.json +1 -1
  90. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-004.json +1 -1
  91. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-005.json +1 -1
  92. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-006.json +2 -2
  93. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-007.json +2 -2
  94. package/blueprints/application-file-upload/contributions/tacs/tac-2401-application-file-upload-input.json +7 -7
  95. package/blueprints/application-file-upload/contributions/tacs/tac-2402-application-file-upload-transport.json +8 -8
  96. package/blueprints/application-file-upload/contributions/tacs/tac-2403-application-file-upload-progress-announcer.json +11 -11
  97. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23102.json +1 -1
  98. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23105.json +1 -1
  99. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-001.json +1 -1
  100. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-002.json +1 -1
  101. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-003.json +1 -1
  102. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-004.json +1 -1
  103. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-005.json +1 -1
  104. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-006.json +2 -2
  105. package/blueprints/application-forms-wizard/contributions/tacs/tac-2501-application-forms-wizard-task-list.json +7 -7
  106. package/blueprints/application-forms-wizard/contributions/tacs/tac-2502-application-forms-wizard-error-summary.json +4 -4
  107. package/blueprints/application-forms-wizard/contributions/tacs/tac-2503-application-forms-wizard-draft-store.json +4 -4
  108. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24101.json +1 -1
  109. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-001.json +1 -1
  110. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-002.json +1 -1
  111. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-003.json +1 -1
  112. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-004.json +1 -1
  113. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-005.json +2 -2
  114. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-006.json +2 -2
  115. package/blueprints/application-notifications-in-app/contributions/tacs/tac-2101-application-notifications-in-app-live-region.json +6 -6
  116. package/blueprints/application-notifications-in-app/contributions/tacs/tac-2102-application-notifications-in-app-centre.json +9 -9
  117. package/blueprints/application-notifications-in-app/contributions/tacs/tac-2103-application-notifications-in-app-preferences.json +4 -4
  118. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20101.json +1 -1
  119. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20102.json +1 -1
  120. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20103.json +2 -2
  121. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20105.json +4 -4
  122. package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-001.json +1 -1
  123. package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-002.json +1 -1
  124. package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-003.json +1 -1
  125. package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-004.json +1 -1
  126. package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-005.json +1 -1
  127. package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-006.json +1 -1
  128. package/blueprints/application-onboarding-tour/contributions/tacs/tac-2701-application-onboarding-tour-step-runner.json +4 -4
  129. package/blueprints/application-onboarding-tour/contributions/tacs/tac-2702-application-onboarding-tour-checklist-slot.json +2 -2
  130. package/blueprints/application-onboarding-tour/contributions/tacs/tac-2703-application-onboarding-tour-completion-store.json +2 -2
  131. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26108.json +2 -2
  132. package/blueprints/application-spa/contributions/requirements/application-spa-req-004.json +1 -2
  133. package/blueprints/application-spa/contributions/requirements/application-spa-req-007.json +1 -1
  134. package/blueprints/application-spa/contributions/requirements/application-spa-req-014.json +1 -1
  135. package/blueprints/application-spa/contributions/requirements/application-spa-req-015.json +1 -1
  136. package/blueprints/application-spa/contributions/requirements/application-spa-req-017.json +1 -1
  137. package/blueprints/application-spa/contributions/requirements/application-spa-req-018.json +1 -1
  138. package/blueprints/application-spa/contributions/tacs/tac-201-application-spa-app-shell.json +4 -4
  139. package/blueprints/application-spa/contributions/tacs/tac-202-application-spa-theme-system.json +4 -4
  140. package/blueprints/application-spa/contributions/tacs/tac-207-application-spa-token-adherence-probe.json +6 -6
  141. package/blueprints/application-spa/contributions/tacs/tac-208-application-spa-icon-adherence-probe.json +6 -6
  142. package/blueprints/application-spa/contributions/tacs/tac-209-application-spa-csp-styled-adherence-probe.json +6 -6
  143. package/blueprints/application-spa/contributions/tacs/tac-210-application-spa-external-dependency-provisioning-probe.json +8 -8
  144. package/blueprints/application-spa/contributions/tacs/tac-211-application-spa-core-flow-e2e-probe.json +8 -8
  145. package/blueprints/application-spa/contributions/user-stories/application-spa-us-1101.json +2 -2
  146. package/blueprints/application-spa/contributions/user-stories/application-spa-us-1102.json +1 -1
  147. package/blueprints/application-spa/contributions/user-stories/application-spa-us-1107.json +1 -1
  148. package/blueprints/application-spa/contributions/user-stories/application-spa-us-1117.json +1 -1
  149. package/blueprints/application-spa/contributions/user-stories/application-spa-us-1129.json +4 -4
  150. package/blueprints/application-spa/contributions/user-stories/application-spa-us-1130.json +4 -4
  151. package/blueprints/application-spa/contributions/user-stories/application-spa-us-1131.json +1 -1
  152. package/blueprints/application-spa/contributions/user-stories/application-spa-us-1132.json +6 -6
  153. package/blueprints/application-spa/contributions/user-stories/application-spa-us-1133.json +5 -5
  154. package/blueprints/application-spa/contributions/user-stories/application-spa-us-1134.json +2 -2
  155. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-001.json +1 -1
  156. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-002.json +1 -1
  157. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-003.json +1 -1
  158. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-004.json +1 -1
  159. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-005.json +1 -1
  160. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-006.json +1 -1
  161. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-007.json +1 -1
  162. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-008.json +1 -1
  163. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-009.json +1 -1
  164. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-010.json +1 -1
  165. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-011.json +1 -1
  166. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-012.json +1 -1
  167. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-013.json +1 -1
  168. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-014.json +1 -1
  169. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-015.json +1 -1
  170. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-016.json +1 -1
  171. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-017.json +1 -1
  172. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-018.json +1 -1
  173. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-019.json +1 -1
  174. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-020.json +1 -1
  175. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-021.json +1 -1
  176. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-022.json +1 -1
  177. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-023.json +1 -1
  178. package/blueprints/delivery-ci-workflows/contributions/tacs/tac-701-delivery-ci-workflows-gate-runner.json +6 -6
  179. package/blueprints/delivery-ci-workflows/contributions/tacs/tac-702-delivery-ci-workflows-gate-report.json +4 -4
  180. package/blueprints/delivery-ci-workflows/contributions/tacs/tac-703-delivery-ci-workflows-aggregate-report.json +4 -4
  181. package/blueprints/delivery-ci-workflows/contributions/tacs/tac-704-delivery-ci-workflows-workflow-materialiser.json +6 -6
  182. package/blueprints/delivery-ci-workflows/contributions/tacs/tac-705-delivery-ci-workflows-release-workflow.json +6 -6
  183. package/blueprints/delivery-ci-workflows/contributions/tacs/tac-706-delivery-ci-workflows-scheduled-audit.json +4 -4
  184. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6101.json +1 -1
  185. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6102.json +1 -1
  186. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6103.json +1 -1
  187. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6104.json +1 -1
  188. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6106.json +1 -1
  189. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6107.json +1 -1
  190. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6109.json +1 -1
  191. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6110.json +1 -1
  192. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6111.json +1 -1
  193. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6113.json +1 -1
  194. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6115.json +1 -1
  195. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6116.json +1 -1
  196. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6117.json +1 -1
  197. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6118.json +1 -1
  198. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6119.json +1 -1
  199. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6120.json +1 -1
  200. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6122.json +1 -1
  201. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6123.json +1 -1
  202. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6124.json +1 -1
  203. package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-001.json +1 -1
  204. package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-002.json +1 -1
  205. package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-003.json +1 -1
  206. package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-004.json +1 -1
  207. package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-005.json +1 -1
  208. package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-006.json +1 -1
  209. package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-007.json +1 -1
  210. package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-008.json +1 -1
  211. package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-009.json +1 -1
  212. package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-010.json +1 -1
  213. package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-011.json +1 -1
  214. package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-012.json +1 -1
  215. package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-013.json +1 -1
  216. package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-014.json +1 -1
  217. package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1301-deploy-cloudflare-workers-deploy-adapter.json +6 -6
  218. package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1302-deploy-cloudflare-workers-wrangler-manifest.json +8 -8
  219. package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1303-deploy-cloudflare-workers-preview-url-resolver.json +6 -6
  220. package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1304-deploy-cloudflare-workers-promote-gate.json +8 -8
  221. package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1305-deploy-cloudflare-workers-served-surface-verifier.json +8 -8
  222. package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1306-deploy-cloudflare-workers-deploy-ci-workflows.json +8 -8
  223. package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12101.json +1 -1
  224. package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12102.json +2 -2
  225. package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12105.json +1 -1
  226. package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12109.json +1 -1
  227. package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12113.json +2 -2
  228. package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12114.json +1 -1
  229. package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12115.json +1 -1
  230. package/blueprints/deploy-hetzner-server/contributions/requirements/deploy-hetzner-server-req-001.json +1 -1
  231. package/blueprints/deploy-hetzner-server/contributions/requirements/deploy-hetzner-server-req-002.json +1 -1
  232. package/blueprints/deploy-hetzner-server/contributions/requirements/deploy-hetzner-server-req-003.json +1 -1
  233. package/blueprints/deploy-hetzner-server/contributions/requirements/deploy-hetzner-server-req-004.json +1 -1
  234. package/blueprints/deploy-hetzner-server/contributions/requirements/deploy-hetzner-server-req-005.json +1 -1
  235. package/blueprints/deploy-hetzner-server/contributions/requirements/deploy-hetzner-server-req-006.json +1 -1
  236. package/blueprints/deploy-hetzner-server/contributions/tacs/tac-3801-deploy-hetzner-server-provisioner.json +3 -2
  237. package/blueprints/deploy-hetzner-server/contributions/tacs/tac-3802-deploy-hetzner-server-manifest-schema.json +3 -2
  238. package/blueprints/deploy-hetzner-server/contributions/tacs/tac-3803-deploy-hetzner-server-cloud-init-template.json +3 -2
  239. package/blueprints/deploy-hetzner-server/contributions/tacs/tac-3804-deploy-hetzner-server-firewall-shape.json +3 -2
  240. package/blueprints/deploy-hetzner-server/contributions/user-stories/deploy-hetzner-server-us-37101.json +4 -4
  241. package/blueprints/deploy-hetzner-server/contributions/user-stories/deploy-hetzner-server-us-37102.json +3 -3
  242. package/blueprints/deploy-hetzner-server/contributions/user-stories/deploy-hetzner-server-us-37103.json +4 -4
  243. package/blueprints/deploy-hetzner-server/contributions/user-stories/deploy-hetzner-server-us-37104.json +2 -2
  244. package/blueprints/deploy-hetzner-server/contributions/user-stories/deploy-hetzner-server-us-37105.json +2 -2
  245. package/blueprints/deploy-hetzner-server/contributions/user-stories/deploy-hetzner-server-us-37106.json +3 -3
  246. package/blueprints/deploy-hetzner-server/contributions/user-stories/deploy-hetzner-server-us-37107.json +2 -2
  247. package/blueprints/deploy-hetzner-server/contributions/user-stories/deploy-hetzner-server-us-37108.json +2 -2
  248. package/blueprints/deploy-hetzner-server/contributions/user-stories/deploy-hetzner-server-us-37109.json +2 -2
  249. package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-001.json +1 -1
  250. package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-002.json +1 -1
  251. package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-003.json +1 -1
  252. package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-004.json +1 -1
  253. package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-005.json +1 -1
  254. package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-006.json +1 -1
  255. package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-007.json +1 -1
  256. package/blueprints/edge-cloudflare-access/contributions/tacs/tac-3501-edge-cloudflare-access-jwt-validator.json +6 -4
  257. package/blueprints/edge-cloudflare-access/contributions/tacs/tac-3502-edge-cloudflare-access-application-declaration.json +3 -2
  258. package/blueprints/edge-cloudflare-access/contributions/tacs/tac-3503-edge-cloudflare-access-policy-shape.json +3 -2
  259. package/blueprints/edge-cloudflare-access/contributions/tacs/tac-3504-edge-cloudflare-access-audit-sink.json +3 -2
  260. package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34101.json +1 -1
  261. package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34102.json +5 -5
  262. package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34103.json +1 -1
  263. package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34104.json +3 -3
  264. package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34105.json +1 -1
  265. package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34106.json +1 -1
  266. package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34107.json +5 -5
  267. package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34110.json +1 -1
  268. package/blueprints/edge-cloudflare-rate-limiting/contributions/requirements/edge-cloudflare-rate-limiting-req-001.json +1 -1
  269. package/blueprints/edge-cloudflare-rate-limiting/contributions/requirements/edge-cloudflare-rate-limiting-req-002.json +1 -1
  270. package/blueprints/edge-cloudflare-rate-limiting/contributions/requirements/edge-cloudflare-rate-limiting-req-003.json +1 -1
  271. package/blueprints/edge-cloudflare-rate-limiting/contributions/requirements/edge-cloudflare-rate-limiting-req-004.json +1 -1
  272. package/blueprints/edge-cloudflare-rate-limiting/contributions/requirements/edge-cloudflare-rate-limiting-req-005.json +1 -1
  273. package/blueprints/edge-cloudflare-rate-limiting/contributions/tacs/tac-3701-edge-cloudflare-rate-limiting-manifest-schema.json +6 -4
  274. package/blueprints/edge-cloudflare-rate-limiting/contributions/tacs/tac-3702-edge-cloudflare-rate-limiting-management-surface-doc.json +3 -2
  275. package/blueprints/edge-cloudflare-rate-limiting/contributions/tacs/tac-3703-edge-cloudflare-rate-limiting-drift-audit-runner.json +3 -2
  276. package/blueprints/edge-cloudflare-rate-limiting/contributions/user-stories/edge-cloudflare-rate-limiting-us-36101.json +2 -2
  277. package/blueprints/edge-cloudflare-rate-limiting/contributions/user-stories/edge-cloudflare-rate-limiting-us-36103.json +1 -1
  278. package/blueprints/edge-cloudflare-rate-limiting/contributions/user-stories/edge-cloudflare-rate-limiting-us-36104.json +6 -6
  279. package/blueprints/edge-cloudflare-rate-limiting/contributions/user-stories/edge-cloudflare-rate-limiting-us-36106.json +2 -2
  280. package/blueprints/edge-cloudflare-tunnel/contributions/requirements/edge-cloudflare-tunnel-req-001.json +1 -1
  281. package/blueprints/edge-cloudflare-tunnel/contributions/requirements/edge-cloudflare-tunnel-req-002.json +1 -1
  282. package/blueprints/edge-cloudflare-tunnel/contributions/requirements/edge-cloudflare-tunnel-req-003.json +1 -1
  283. package/blueprints/edge-cloudflare-tunnel/contributions/requirements/edge-cloudflare-tunnel-req-004.json +1 -1
  284. package/blueprints/edge-cloudflare-tunnel/contributions/requirements/edge-cloudflare-tunnel-req-005.json +1 -1
  285. package/blueprints/edge-cloudflare-tunnel/contributions/requirements/edge-cloudflare-tunnel-req-006.json +1 -1
  286. package/blueprints/edge-cloudflare-tunnel/contributions/requirements/edge-cloudflare-tunnel-req-007.json +1 -1
  287. package/blueprints/edge-cloudflare-tunnel/contributions/tacs/tac-4001-edge-cloudflare-tunnel-connector-shape.json +3 -2
  288. package/blueprints/edge-cloudflare-tunnel/contributions/tacs/tac-4002-edge-cloudflare-tunnel-manifest-schema.json +3 -2
  289. package/blueprints/edge-cloudflare-tunnel/contributions/tacs/tac-4003-edge-cloudflare-tunnel-access-binding.json +3 -2
  290. package/blueprints/edge-cloudflare-tunnel/contributions/tacs/tac-4004-edge-cloudflare-tunnel-zone-and-hostname-apply.json +3 -2
  291. package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39101.json +3 -3
  292. package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39102.json +2 -2
  293. package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39103.json +4 -4
  294. package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39104.json +2 -2
  295. package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39105.json +2 -2
  296. package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39106.json +5 -5
  297. package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39107.json +2 -2
  298. package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39108.json +3 -3
  299. package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39109.json +4 -4
  300. package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39110.json +3 -3
  301. package/blueprints/edge-cloudflare-turnstile/contributions/requirements/edge-cloudflare-turnstile-req-001.json +1 -1
  302. package/blueprints/edge-cloudflare-turnstile/contributions/requirements/edge-cloudflare-turnstile-req-002.json +1 -1
  303. package/blueprints/edge-cloudflare-turnstile/contributions/requirements/edge-cloudflare-turnstile-req-003.json +1 -1
  304. package/blueprints/edge-cloudflare-turnstile/contributions/requirements/edge-cloudflare-turnstile-req-004.json +1 -1
  305. package/blueprints/edge-cloudflare-turnstile/contributions/requirements/edge-cloudflare-turnstile-req-005.json +1 -1
  306. package/blueprints/edge-cloudflare-turnstile/contributions/tacs/tac-3601-edge-cloudflare-turnstile-widget-mount.json +3 -2
  307. package/blueprints/edge-cloudflare-turnstile/contributions/tacs/tac-3602-edge-cloudflare-turnstile-server-verifier.json +9 -6
  308. package/blueprints/edge-cloudflare-turnstile/contributions/tacs/tac-3603-edge-cloudflare-turnstile-magic-link-hook.json +3 -2
  309. package/blueprints/edge-cloudflare-turnstile/contributions/user-stories/edge-cloudflare-turnstile-us-35101.json +3 -3
  310. package/blueprints/edge-cloudflare-turnstile/contributions/user-stories/edge-cloudflare-turnstile-us-35102.json +4 -4
  311. package/blueprints/edge-cloudflare-turnstile/contributions/user-stories/edge-cloudflare-turnstile-us-35103.json +6 -6
  312. package/blueprints/edge-cloudflare-turnstile/contributions/user-stories/edge-cloudflare-turnstile-us-35104.json +2 -2
  313. package/blueprints/edge-cloudflare-turnstile/contributions/user-stories/edge-cloudflare-turnstile-us-35105.json +1 -1
  314. package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-001.json +1 -1
  315. package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-002.json +1 -1
  316. package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-003.json +1 -1
  317. package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-004.json +1 -1
  318. package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-005.json +1 -1
  319. package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-006.json +1 -1
  320. package/blueprints/email-smtp-resend/contributions/tacs/tac-401-email-smtp-resend-send-adapter.json +8 -8
  321. package/blueprints/email-smtp-resend/contributions/tacs/tac-402-email-smtp-resend-webhook-verifier.json +10 -10
  322. package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4101.json +1 -1
  323. package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4102.json +1 -1
  324. package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4103.json +1 -1
  325. package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4105.json +1 -1
  326. package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4106.json +2 -2
  327. package/blueprints/jobs-background/contributions/requirements/jobs-background-req-001.json +1 -1
  328. package/blueprints/jobs-background/contributions/requirements/jobs-background-req-002.json +1 -1
  329. package/blueprints/jobs-background/contributions/requirements/jobs-background-req-003.json +1 -1
  330. package/blueprints/jobs-background/contributions/requirements/jobs-background-req-004.json +1 -1
  331. package/blueprints/jobs-background/contributions/requirements/jobs-background-req-005.json +1 -1
  332. package/blueprints/jobs-background/contributions/requirements/jobs-background-req-006.json +1 -1
  333. package/blueprints/jobs-background/contributions/tacs/tac-3101-jobs-background-job-definition.json +4 -4
  334. package/blueprints/jobs-background/contributions/tacs/tac-3102-jobs-background-scheduler.json +6 -6
  335. package/blueprints/jobs-background/contributions/tacs/tac-3103-jobs-background-run-log.json +6 -6
  336. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30101.json +1 -1
  337. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30102.json +3 -3
  338. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30103.json +1 -1
  339. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30104.json +4 -4
  340. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30105.json +1 -1
  341. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30106.json +1 -1
  342. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30107.json +1 -1
  343. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30108.json +1 -1
  344. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30109.json +1 -1
  345. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-001.json +1 -1
  346. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-002.json +1 -1
  347. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-003.json +1 -1
  348. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-004.json +1 -1
  349. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-005.json +1 -1
  350. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-006.json +1 -1
  351. package/blueprints/messaging-queue-cloudflare/contributions/tacs/tac-3001-messaging-queue-cloudflare-producer-facade.json +6 -6
  352. package/blueprints/messaging-queue-cloudflare/contributions/tacs/tac-3002-messaging-queue-cloudflare-consumer-registration.json +2 -2
  353. package/blueprints/messaging-queue-cloudflare/contributions/tacs/tac-3003-messaging-queue-cloudflare-event-sink.json +2 -2
  354. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29101.json +1 -1
  355. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29102.json +1 -1
  356. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29103.json +1 -1
  357. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29104.json +2 -2
  358. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29105.json +1 -1
  359. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29106.json +2 -2
  360. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29107.json +1 -1
  361. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29108.json +1 -1
  362. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-001.json +1 -1
  363. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-002.json +1 -1
  364. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-003.json +1 -1
  365. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-004.json +1 -1
  366. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-005.json +1 -1
  367. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-006.json +1 -1
  368. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-101.json +1 -1
  369. package/blueprints/object-storage-s3/contributions/tacs/tac-2901-object-storage-s3-facade.json +6 -6
  370. package/blueprints/object-storage-s3/contributions/tacs/tac-2902-object-storage-s3-multipart-uploader.json +2 -2
  371. package/blueprints/object-storage-s3/contributions/tacs/tac-2903-object-storage-s3-event-sink.json +2 -2
  372. package/blueprints/object-storage-s3/contributions/tacs/tac-2904-object-storage-s3-hetzner-endpoint-helper.json +2 -2
  373. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28101.json +1 -1
  374. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28102.json +1 -1
  375. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28103.json +2 -2
  376. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28104.json +1 -1
  377. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28105.json +2 -2
  378. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28106.json +1 -1
  379. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28110.json +1 -1
  380. package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-001.json +1 -1
  381. package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-002.json +1 -1
  382. package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-003.json +1 -1
  383. package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-004.json +1 -1
  384. package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-005.json +1 -1
  385. package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-006.json +1 -1
  386. package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-007.json +1 -1
  387. package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-008.json +1 -1
  388. package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-009.json +1 -1
  389. package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-010.json +1 -1
  390. package/blueprints/observability-essentials/contributions/tacs/tac-801-observability-essentials-liveness-probe.json +4 -4
  391. package/blueprints/observability-essentials/contributions/tacs/tac-802-observability-essentials-readiness-probe.json +12 -12
  392. package/blueprints/observability-essentials/contributions/tacs/tac-803-observability-essentials-status-page.json +6 -6
  393. package/blueprints/observability-essentials/contributions/tacs/tac-804-observability-essentials-notification-outcome.json +8 -8
  394. package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7101.json +1 -1
  395. package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7103.json +3 -3
  396. package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7106.json +2 -2
  397. package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7107.json +1 -1
  398. package/blueprints/observability-logging/contributions/requirements/observability-logging-req-001.json +1 -1
  399. package/blueprints/observability-logging/contributions/requirements/observability-logging-req-002.json +1 -1
  400. package/blueprints/observability-logging/contributions/requirements/observability-logging-req-003.json +1 -1
  401. package/blueprints/observability-logging/contributions/requirements/observability-logging-req-004.json +1 -1
  402. package/blueprints/observability-logging/contributions/requirements/observability-logging-req-005.json +1 -1
  403. package/blueprints/observability-logging/contributions/requirements/observability-logging-req-006.json +8 -2
  404. package/blueprints/observability-logging/contributions/tacs/tac-1601-observability-logging-logger-factory.json +6 -6
  405. package/blueprints/observability-logging/contributions/tacs/tac-1602-observability-logging-redaction-boundary.json +2 -2
  406. package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15101.json +4 -4
  407. package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15103.json +2 -2
  408. package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15104.json +2 -2
  409. package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15105.json +1 -1
  410. package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15106.json +1 -1
  411. package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15107.json +2 -2
  412. package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15108.json +1 -1
  413. package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15109.json +3 -3
  414. package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-001.json +1 -1
  415. package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-002.json +1 -1
  416. package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-003.json +1 -1
  417. package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-004.json +1 -1
  418. package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-005.json +1 -1
  419. package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-006.json +1 -1
  420. package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-007.json +1 -1
  421. package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-008.json +1 -1
  422. package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1501-observability-probe-endpoints-profile-resolver.json +6 -6
  423. package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1502-observability-probe-endpoints-handler-set.json +4 -4
  424. package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1503-observability-probe-endpoints-listener-topology.json +6 -6
  425. package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1504-observability-probe-endpoints-non-http-adapters.json +4 -4
  426. package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14101.json +2 -2
  427. package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14102.json +1 -1
  428. package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14105.json +3 -3
  429. package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-001.json +1 -1
  430. package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-002.json +1 -1
  431. package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-003.json +1 -1
  432. package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-004.json +1 -1
  433. package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-005.json +1 -1
  434. package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-006.json +1 -1
  435. package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-007.json +1 -1
  436. package/blueprints/persistence-data-d1/contributions/tacs/tac-1401-persistence-data-d1-facade.json +6 -6
  437. package/blueprints/persistence-data-d1/contributions/tacs/tac-1402-persistence-data-d1-migration-catalog.json +4 -4
  438. package/blueprints/persistence-data-d1/contributions/tacs/tac-1403-persistence-data-d1-deploy-gate.json +4 -4
  439. package/blueprints/persistence-data-d1/contributions/tacs/tac-1404-persistence-data-d1-recovery-runner.json +4 -4
  440. package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13101.json +2 -2
  441. package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13102.json +1 -1
  442. package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13107.json +2 -2
  443. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-001.json +1 -1
  444. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-002.json +1 -1
  445. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-003.json +1 -1
  446. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-004.json +1 -1
  447. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-005.json +1 -1
  448. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-006.json +1 -1
  449. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-007.json +1 -1
  450. package/blueprints/persistence-data-postgres/contributions/tacs/tac-2801-persistence-data-postgres-facade.json +6 -6
  451. package/blueprints/persistence-data-postgres/contributions/tacs/tac-2802-persistence-data-postgres-migration-runner.json +4 -4
  452. package/blueprints/persistence-data-postgres/contributions/tacs/tac-2803-persistence-data-postgres-transaction-helper.json +2 -2
  453. package/blueprints/persistence-data-postgres/contributions/tacs/tac-2804-persistence-data-postgres-recovery-runner.json +4 -4
  454. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27101.json +1 -1
  455. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27102.json +4 -4
  456. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27103.json +1 -1
  457. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27104.json +2 -2
  458. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27105.json +1 -1
  459. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27106.json +1 -1
  460. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27107.json +1 -1
  461. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27108.json +1 -1
  462. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27109.json +1 -1
  463. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27110.json +1 -1
  464. package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-001.json +1 -1
  465. package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-002.json +1 -1
  466. package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-003.json +1 -1
  467. package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-004.json +1 -1
  468. package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-005.json +1 -1
  469. package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-006.json +1 -1
  470. package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-007.json +1 -1
  471. package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-008.json +1 -1
  472. package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-009.json +1 -1
  473. package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-010.json +1 -1
  474. package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-011.json +1 -1
  475. package/blueprints/persistence-data-sqlite/contributions/tacs/tac-601-persistence-data-sqlite-store.json +6 -6
  476. package/blueprints/persistence-data-sqlite/contributions/tacs/tac-602-persistence-data-sqlite-migration-runner.json +2 -2
  477. package/blueprints/persistence-data-sqlite/contributions/tacs/tac-603-persistence-data-sqlite-migration-catalog.json +4 -4
  478. package/blueprints/persistence-data-sqlite/contributions/tacs/tac-604-persistence-data-sqlite-backup-runner.json +2 -2
  479. package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5101.json +2 -2
  480. package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5103.json +1 -1
  481. package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5104.json +1 -1
  482. package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5106.json +1 -1
  483. package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5110.json +2 -2
  484. package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5111.json +1 -1
  485. package/blueprints/platform-cloudflare-cron-triggers/contributions/requirements/platform-cloudflare-cron-triggers-req-001.json +1 -1
  486. package/blueprints/platform-cloudflare-cron-triggers/contributions/requirements/platform-cloudflare-cron-triggers-req-002.json +1 -1
  487. package/blueprints/platform-cloudflare-cron-triggers/contributions/requirements/platform-cloudflare-cron-triggers-req-003.json +1 -1
  488. package/blueprints/platform-cloudflare-cron-triggers/contributions/requirements/platform-cloudflare-cron-triggers-req-004.json +1 -1
  489. package/blueprints/platform-cloudflare-cron-triggers/contributions/tacs/tac-3301-platform-cloudflare-cron-triggers-scheduled-handler.json +6 -1
  490. package/blueprints/platform-cloudflare-cron-triggers/contributions/tacs/tac-3302-platform-cloudflare-cron-triggers-expression-router.json +9 -2
  491. package/blueprints/platform-cloudflare-cron-triggers/contributions/tacs/tac-3303-platform-cloudflare-cron-triggers-event-sink.json +6 -1
  492. package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32101.json +6 -6
  493. package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32102.json +5 -5
  494. package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32103.json +3 -3
  495. package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32104.json +4 -4
  496. package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32105.json +4 -4
  497. package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32106.json +4 -4
  498. package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32107.json +3 -3
  499. package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-001.json +1 -1
  500. package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-002.json +1 -1
  501. package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-003.json +1 -1
  502. package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-004.json +1 -1
  503. package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-005.json +1 -1
  504. package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-006.json +1 -1
  505. package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-007.json +1 -1
  506. package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-008.json +1 -1
  507. package/blueprints/platform-cloudflare-durable-objects/contributions/tacs/tac-3401-platform-cloudflare-durable-objects-namespace-facade.json +6 -4
  508. package/blueprints/platform-cloudflare-durable-objects/contributions/tacs/tac-3402-platform-cloudflare-durable-objects-single-cell-shape.json +6 -4
  509. package/blueprints/platform-cloudflare-durable-objects/contributions/tacs/tac-3403-platform-cloudflare-durable-objects-alarm-handler.json +6 -4
  510. package/blueprints/platform-cloudflare-durable-objects/contributions/tacs/tac-3404-platform-cloudflare-durable-objects-websocket-hub.json +6 -4
  511. package/blueprints/platform-cloudflare-durable-objects/contributions/tacs/tac-3405-platform-cloudflare-durable-objects-event-sink.json +3 -2
  512. package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33101.json +5 -5
  513. package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33102.json +4 -4
  514. package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33103.json +5 -5
  515. package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33104.json +5 -5
  516. package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33105.json +5 -5
  517. package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33106.json +4 -4
  518. package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33107.json +3 -3
  519. package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33108.json +5 -5
  520. package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33109.json +3 -3
  521. package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33110.json +4 -4
  522. package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33111.json +3 -3
  523. package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33112.json +3 -3
  524. package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33113.json +5 -5
  525. package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-001.json +1 -1
  526. package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-002.json +1 -1
  527. package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-003.json +1 -1
  528. package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-004.json +1 -1
  529. package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-005.json +1 -1
  530. package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-006.json +1 -1
  531. package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-007.json +1 -1
  532. package/blueprints/platform-cloudflare-kv/contributions/tacs/tac-3201-platform-cloudflare-kv-facade.json +3 -2
  533. package/blueprints/platform-cloudflare-kv/contributions/tacs/tac-3202-platform-cloudflare-kv-cache-aside.json +3 -2
  534. package/blueprints/platform-cloudflare-kv/contributions/tacs/tac-3203-platform-cloudflare-kv-event-sink.json +3 -2
  535. package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31101.json +4 -4
  536. package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31102.json +3 -3
  537. package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31103.json +4 -4
  538. package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31104.json +4 -4
  539. package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31105.json +4 -4
  540. package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31106.json +3 -3
  541. package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31107.json +3 -3
  542. package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31108.json +3 -3
  543. package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31109.json +4 -4
  544. package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31110.json +5 -5
  545. package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31111.json +5 -5
  546. package/blueprints/platform-docker-compose-host/contributions/requirements/platform-docker-compose-host-req-001.json +1 -1
  547. package/blueprints/platform-docker-compose-host/contributions/requirements/platform-docker-compose-host-req-002.json +1 -1
  548. package/blueprints/platform-docker-compose-host/contributions/requirements/platform-docker-compose-host-req-003.json +1 -1
  549. package/blueprints/platform-docker-compose-host/contributions/requirements/platform-docker-compose-host-req-004.json +1 -1
  550. package/blueprints/platform-docker-compose-host/contributions/requirements/platform-docker-compose-host-req-005.json +1 -1
  551. package/blueprints/platform-docker-compose-host/contributions/requirements/platform-docker-compose-host-req-006.json +1 -1
  552. package/blueprints/platform-docker-compose-host/contributions/requirements/platform-docker-compose-host-req-007.json +1 -1
  553. package/blueprints/platform-docker-compose-host/contributions/tacs/tac-3901-platform-docker-compose-host-compose-layout.json +3 -2
  554. package/blueprints/platform-docker-compose-host/contributions/tacs/tac-3902-platform-docker-compose-host-secrets-mount.json +3 -2
  555. package/blueprints/platform-docker-compose-host/contributions/tacs/tac-3903-platform-docker-compose-host-healthcheck-lint.json +3 -2
  556. package/blueprints/platform-docker-compose-host/contributions/tacs/tac-3904-platform-docker-compose-host-reverse-proxy-artefact.json +3 -2
  557. package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38101.json +5 -5
  558. package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38102.json +4 -4
  559. package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38103.json +4 -4
  560. package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38104.json +4 -4
  561. package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38105.json +3 -3
  562. package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38106.json +3 -3
  563. package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38107.json +3 -3
  564. package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38108.json +3 -3
  565. package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38109.json +3 -3
  566. package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38110.json +3 -3
  567. package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-001.json +1 -1
  568. package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-002.json +1 -1
  569. package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-003.json +1 -1
  570. package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-004.json +1 -1
  571. package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-006.json +1 -1
  572. package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-010.json +1 -1
  573. package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-011.json +1 -1
  574. package/blueprints/security-auth-clerk/contributions/tacs/tac-1001-security-auth-clerk-middleware.json +6 -6
  575. package/blueprints/security-auth-clerk/contributions/tacs/tac-1002-security-auth-clerk-authorisation-adapter.json +8 -3
  576. package/blueprints/security-auth-clerk/contributions/tacs/tac-1003-security-auth-clerk-session-verifier.json +8 -8
  577. package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9102.json +1 -1
  578. package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9108.json +1 -1
  579. package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9112.json +6 -6
  580. package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9113.json +6 -6
  581. package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-002.json +1 -1
  582. package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-003.json +1 -1
  583. package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-004.json +1 -1
  584. package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-005.json +1 -1
  585. package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-006.json +1 -1
  586. package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-011.json +1 -1
  587. package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-013.json +1 -1
  588. package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-014.json +1 -1
  589. package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-015.json +1 -1
  590. package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-016.json +1 -1
  591. package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-017.json +1 -1
  592. package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-018.json +1 -1
  593. package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-019.json +1 -1
  594. package/blueprints/security-auth-keycloak/contributions/tacs/tac-1201-security-auth-keycloak-discovery-client.json +10 -10
  595. package/blueprints/security-auth-keycloak/contributions/tacs/tac-1202-security-auth-keycloak-jwt-verifier.json +8 -8
  596. package/blueprints/security-auth-keycloak/contributions/tacs/tac-1203-security-auth-keycloak-introspection-client.json +8 -8
  597. package/blueprints/security-auth-keycloak/contributions/tacs/tac-1204-security-auth-keycloak-provider-router.json +6 -6
  598. package/blueprints/security-auth-keycloak/contributions/tacs/tac-1205-security-auth-keycloak-role-adapter.json +4 -4
  599. package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11102.json +1 -1
  600. package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11103.json +2 -2
  601. package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11104.json +1 -1
  602. package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11106.json +3 -3
  603. package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11111.json +2 -2
  604. package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11114.json +1 -1
  605. package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11115.json +5 -5
  606. package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11116.json +7 -7
  607. package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11117.json +7 -7
  608. package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11118.json +7 -7
  609. package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11119.json +7 -7
  610. package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11120.json +6 -6
  611. package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-002.json +1 -1
  612. package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-003.json +1 -1
  613. package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-004.json +1 -1
  614. package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-005.json +1 -1
  615. package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-008.json +1 -1
  616. package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-009.json +1 -1
  617. package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-010.json +1 -1
  618. package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-011.json +1 -1
  619. package/blueprints/security-auth-magic-link/contributions/tacs/tac-501-security-auth-magic-link-manager.json +6 -6
  620. package/blueprints/security-auth-magic-link/contributions/tacs/tac-502-security-auth-magic-link-session-manager.json +6 -6
  621. package/blueprints/security-auth-magic-link/contributions/tacs/tac-503-security-auth-magic-link-login-routes.json +10 -10
  622. package/blueprints/security-auth-magic-link/contributions/tacs/tac-504-security-auth-magic-link-email-delivery-adapter.json +2 -2
  623. package/blueprints/security-auth-magic-link/contributions/tacs/tac-505-security-auth-magic-link-principal-registry.json +2 -2
  624. package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3111.json +2 -2
  625. package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-002.json +1 -1
  626. package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-003.json +1 -1
  627. package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-005.json +1 -1
  628. package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-006.json +1 -1
  629. package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-008.json +1 -1
  630. package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-009.json +1 -1
  631. package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-011.json +1 -1
  632. package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-012.json +1 -1
  633. package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-013.json +1 -1
  634. package/blueprints/security-auth-oauth2/contributions/tacs/tac-1101-security-auth-oauth2-flow-controller.json +24 -14
  635. package/blueprints/security-auth-oauth2/contributions/tacs/tac-1102-security-auth-oauth2-provider-adapter.json +4 -4
  636. package/blueprints/security-auth-oauth2/contributions/tacs/tac-1103-security-auth-oauth2-session-bridge.json +10 -10
  637. package/blueprints/security-auth-oauth2/contributions/tacs/tac-1104-security-auth-oauth2-provider-selector.json +8 -3
  638. package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10111.json +1 -1
  639. package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10112.json +1 -1
  640. package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10114.json +5 -5
  641. package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-001.json +1 -1
  642. package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-002.json +1 -1
  643. package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-003.json +1 -1
  644. package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-004.json +1 -1
  645. package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-005.json +1 -1
  646. package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-006.json +1 -1
  647. package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-007.json +1 -1
  648. package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-008.json +1 -1
  649. package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-009.json +1 -1
  650. package/blueprints/security-secrets-management/contributions/tacs/tac-901-security-secrets-management-manager-client.json +8 -8
  651. package/blueprints/security-secrets-management/contributions/tacs/tac-902-security-secrets-management-manifest.json +4 -4
  652. package/blueprints/security-secrets-management/contributions/tacs/tac-903-security-secrets-management-env-reflector.json +4 -4
  653. package/blueprints/security-secrets-management/contributions/tacs/tac-904-security-secrets-management-rotation-gate.json +8 -8
  654. package/blueprints/security-secrets-management/contributions/tacs/tac-905-security-secrets-management-agent-cli.json +4 -4
  655. package/fixtures/canary-manifest.json +9 -9
  656. package/guidance/define-draft-shapes.md +89 -0
  657. package/guidance/define-intake.md +97 -0
  658. package/guidance/define-intent.md +107 -0
  659. package/guidance/define-litmus.md +102 -0
  660. package/guidance/discover-prototype.md +67 -0
  661. package/guidance/discovery-prototypes.md +69 -0
  662. package/guidance/harness-template.md +34 -0
  663. package/guidance/managed/agent-instructions-block.hash +1 -1
  664. package/guidance/managed/agent-instructions-block.md +34 -0
  665. package/guidance/manifest.json +10 -2
  666. package/package.json +1 -1
  667. package/rcf/adrs/adr-4124-define-freeze-verb.json +30 -0
  668. package/rcf/adrs/adr-4126-persona-tagged-blockers-two-levels.json +40 -0
  669. package/rcf/adrs/adr-4127-readiness-tab-order-and-register.json +40 -0
  670. package/rcf/adrs/adr-4129-questions-harness-driven-loop.json +25 -0
  671. package/rcf/adrs/adr-4130-intake-harness-split-tool-scanned.json +20 -0
  672. package/rcf/adrs/adr-4131-gates-bite-ack-recorded-override.json +30 -0
  673. package/rcf/adrs/adr-4132-prototypes-in-discovery-as-evidence.json +20 -0
  674. package/rcf/adrs/adr-4133-dag-dependency-depth-layout.json +40 -0
  675. package/rcf/adrs/adr-4134-index-json-route.json +35 -0
  676. package/rcf/adrs/adr-4135-readiness-po-register-and-adapter.json +35 -0
  677. package/rcf/adrs/adr-4136-embedding-host-fixture.json +35 -0
  678. package/rcf/code-nodes/cn-725.json +18 -2
  679. package/rcf/code-nodes/cn-726.json +10 -2
  680. package/rcf/code-nodes/cn-727.json +13 -4
  681. package/rcf/code-nodes/cn-728.json +18 -2
  682. package/rcf/code-nodes/cn-729.json +10 -2
  683. package/rcf/code-nodes/cn-730.json +13 -3
  684. package/rcf/code-nodes/cn-731.json +20 -0
  685. package/rcf/code-nodes/cn-732.json +14 -0
  686. package/rcf/code-nodes/cn-733.json +14 -0
  687. package/rcf/code-nodes/cn-734.json +14 -0
  688. package/rcf/code-nodes/cn-735.json +20 -0
  689. package/rcf/code-nodes/cn-736.json +14 -0
  690. package/rcf/code-nodes/cn-737.json +14 -0
  691. package/rcf/code-nodes/cn-738.json +14 -0
  692. package/rcf/code-nodes/cn-739.json +18 -0
  693. package/rcf/code-nodes/cn-740.json +19 -0
  694. package/rcf/code-nodes/cn-741.json +16 -0
  695. package/rcf/code-nodes/cn-742.json +16 -0
  696. package/rcf/code-nodes/cn-743.json +15 -0
  697. package/rcf/code-nodes/cn-744.json +22 -0
  698. package/rcf/code-nodes/cn-745.json +16 -0
  699. package/rcf/code-nodes/cn-746.json +14 -0
  700. package/rcf/code-nodes/cn-747.json +18 -0
  701. package/rcf/code-nodes/cn-748.json +16 -0
  702. package/rcf/code-nodes/cn-749.json +16 -0
  703. package/rcf/code-nodes/cn-750.json +15 -0
  704. package/rcf/code-nodes/cn-751.json +18 -0
  705. package/rcf/code-nodes/cn-752.json +14 -0
  706. package/rcf/code-nodes/cn-753.json +19 -0
  707. package/rcf/code-nodes/cn-754.json +17 -0
  708. package/rcf/code-nodes/cn-755.json +14 -0
  709. package/rcf/code-nodes/cn-756.json +15 -0
  710. package/rcf/code-nodes/cn-757.json +21 -0
  711. package/rcf/code-nodes/cn-758.json +16 -0
  712. package/rcf/code-nodes/cn-759.json +21 -0
  713. package/rcf/code-nodes/cn-760.json +19 -0
  714. package/rcf/code-nodes/cn-761.json +16 -0
  715. package/rcf/code-nodes/cn-762.json +18 -0
  716. package/rcf/code-nodes/cn-763.json +18 -0
  717. package/rcf/code-nodes/cn-764.json +15 -0
  718. package/rcf/code-nodes/cn-765.json +23 -0
  719. package/rcf/code-nodes/cn-766.json +17 -0
  720. package/rcf/code-nodes/cn-767.json +17 -0
  721. package/rcf/code-nodes/cn-768.json +19 -0
  722. package/rcf/code-nodes/cn-769.json +17 -0
  723. package/rcf/code-nodes/cn-770.json +18 -0
  724. package/rcf/fbs/fbs-196.json +13 -5
  725. package/rcf/fbs/fbs-198.json +42 -0
  726. package/rcf/fbs/fbs-199.json +59 -0
  727. package/rcf/fbs/fbs-200.json +46 -0
  728. package/rcf/fbs/fbs-201.json +49 -0
  729. package/rcf/fbs/fbs-202.json +170 -0
  730. package/rcf/fbs/fbs-203.json +100 -0
  731. package/rcf/requirements/req-002.json +2 -2
  732. package/rcf/requirements/req-173.json +2 -2
  733. package/rcf/requirements/req-174.json +10 -4
  734. package/rcf/requirements/req-175.json +10 -4
  735. package/rcf/requirements/req-176.json +25 -0
  736. package/rcf/requirements/req-177.json +31 -0
  737. package/rcf/requirements/req-178.json +31 -0
  738. package/rcf/requirements/req-179.json +31 -0
  739. package/rcf/requirements/req-180.json +31 -0
  740. package/rcf/requirements/req-181.json +31 -0
  741. package/rcf/requirements/req-182.json +25 -0
  742. package/rcf/requirements/req-186.json +25 -0
  743. package/rcf/requirements/req-187.json +31 -0
  744. package/rcf/requirements/req-188.json +25 -0
  745. package/rcf/tacs/tac-001.json +7 -7
  746. package/rcf/tacs/tac-002.json +23 -23
  747. package/rcf/tacs/tac-003.json +5 -5
  748. package/rcf/tacs/tac-004.json +9 -9
  749. package/rcf/tacs/tac-005.json +7 -7
  750. package/rcf/tacs/tac-006.json +21 -21
  751. package/rcf/tacs/tac-007.json +7 -7
  752. package/rcf/tacs/tac-008.json +7 -7
  753. package/rcf/tacs/tac-4101-feedback-cli.json +5 -5
  754. package/rcf/tacs/tac-4102-feedback-store.json +9 -9
  755. package/rcf/tacs/tac-4103-feedback-redact.json +5 -5
  756. package/rcf/tacs/tac-4104-feedback-fingerprint.json +3 -3
  757. package/rcf/tacs/tac-4105-feedback-render.json +7 -7
  758. package/rcf/tacs/tac-4106-feedback-destination.json +5 -5
  759. package/rcf/tacs/tac-4107-feedback-gh.json +7 -7
  760. package/rcf/tacs/tac-4108-feedback-hook.json +7 -7
  761. package/rcf/tacs/tac-4121-define-ledgers.json +16 -3
  762. package/rcf/tacs/tac-4122-define-gates.json +69 -5
  763. package/rcf/tacs/tac-4123-define-readiness.json +66 -4
  764. package/rcf/tacs/tac-4124-define-freeze.json +28 -0
  765. package/rcf/tacs/tac-4125-build-bundle-refuse-override-skip.json +43 -0
  766. package/rcf/tacs/tac-4126-define-validate-findings.json +32 -0
  767. package/rcf/tacs/tac-4127-readiness-view.json +49 -0
  768. package/rcf/tacs/tac-4128-define-guidance.json +59 -0
  769. package/rcf/tacs/tac-4129-define-questions.json +45 -0
  770. package/rcf/tacs/tac-4130-define-intake-brief.json +35 -0
  771. package/rcf/tacs/tac-4131-build-dag-view.json +39 -0
  772. package/rcf/tacs/tac-4132-id-lookup.json +42 -0
  773. package/rcf/tacs/tac-4133-readiness-po-layer.json +37 -0
  774. package/rcf/tacs/tac-4134-wespa-host-fixture.json +54 -0
  775. package/rcf/test-suites/ts-016.json +3 -3
  776. package/rcf/test-suites/ts-215.json +148 -4
  777. package/rcf/test-suites/ts-216.json +19 -3
  778. package/rcf/test-suites/ts-218.json +78 -0
  779. package/rcf/test-suites/ts-219.json +70 -0
  780. package/rcf/test-suites/ts-220.json +78 -0
  781. package/rcf/test-suites/ts-221.json +78 -0
  782. package/rcf/test-suites/ts-222.json +100 -0
  783. package/rcf/test-suites/ts-223.json +94 -0
  784. package/rcf/test-suites/ts-224.json +70 -0
  785. package/rcf/test-suites/ts-225.json +78 -0
  786. package/rcf/test-suites/ts-226.json +158 -0
  787. package/rcf/test-suites/ts-227.json +38 -0
  788. package/rcf/test-suites/ts-228.json +86 -0
  789. package/rcf/test-suites/ts-229.json +83 -0
  790. package/rcf/test-suites/ts-230.json +76 -0
  791. package/rcf/test-suites/ts-231.json +104 -0
  792. package/rcf/test-suites/ts-232.json +109 -0
  793. package/rcf/test-suites/ts-233.json +61 -0
  794. package/rcf/test-suites/ts-234.json +53 -0
  795. package/rcf/test-suites/ts-235.json +53 -0
  796. package/rcf/user-stories/us-17302.json +50 -0
  797. package/rcf/user-stories/us-17401.json +14 -2
  798. package/rcf/user-stories/us-17402.json +55 -0
  799. package/rcf/user-stories/us-17403.json +60 -0
  800. package/rcf/user-stories/us-17404.json +51 -0
  801. package/rcf/user-stories/us-17405.json +61 -0
  802. package/rcf/user-stories/us-17406.json +51 -0
  803. package/rcf/user-stories/us-17502.json +60 -0
  804. package/rcf/user-stories/us-17503.json +65 -0
  805. package/rcf/user-stories/us-17504.json +46 -0
  806. package/rcf/user-stories/us-17601.json +58 -0
  807. package/rcf/user-stories/us-17702.json +51 -0
  808. package/rcf/user-stories/us-17802.json +40 -0
  809. package/rcf/user-stories/us-17902.json +46 -0
  810. package/rcf/user-stories/us-18001.json +55 -0
  811. package/rcf/user-stories/us-18002.json +35 -0
  812. package/rcf/user-stories/us-18101.json +35 -0
  813. package/rcf/user-stories/us-18202.json +40 -0
  814. package/rcf/user-stories/us-18601.json +55 -0
  815. package/rcf/user-stories/us-18602.json +50 -0
  816. package/rcf/user-stories/us-18603.json +45 -0
  817. package/rcf/user-stories/us-18701.json +50 -0
  818. package/rcf/user-stories/us-18702.json +50 -0
  819. package/rcf/user-stories/us-18801.json +45 -0
  820. package/rcf/user-stories/us-204.json +59 -0
  821. package/rcf/user-stories/us-205.json +64 -0
  822. package/rcf/user-stories/us-206.json +54 -0
  823. package/releases/releases.yaml +21 -1
  824. package/src/blueprint/consistency-lint.js +72 -3
  825. package/src/cli/build.js +206 -3
  826. package/src/cli/freeze.js +780 -0
  827. package/src/cli/help.js +12 -0
  828. package/src/cli/ledger.js +228 -12
  829. package/src/cli/questions.js +288 -0
  830. package/src/cli/readiness.js +393 -74
  831. package/src/cli/validate.js +8 -0
  832. package/src/cli/view.js +29 -0
  833. package/src/define/concern-catalogue.js +130 -0
  834. package/src/define/freeze-record.js +104 -15
  835. package/src/define/ledgers.js +210 -11
  836. package/src/define/probe-runner.js +55 -0
  837. package/src/define/validate-findings.js +256 -0
  838. package/src/intake/index.js +1 -1
  839. package/src/intake/orchestrator.js +117 -0
  840. package/src/mcp/tools.js +354 -0
  841. package/src/query/delta.js +6 -0
  842. package/src/query/gates.js +1258 -48
  843. package/src/query/index.js +22 -3
  844. package/src/query/questions.js +438 -0
  845. package/src/query/readiness.js +427 -9
  846. package/src/query/refuse-on-admissibility.js +137 -4
  847. package/src/ruleset/ruleset.json +35 -0
  848. package/src/server/index.js +24 -2
  849. package/src/server/routes.js +68 -1
  850. package/src/setup/identity-seed.js +17 -0
  851. package/src/view/build-dag.js +563 -0
  852. package/src/view/components/badge.js +41 -0
  853. package/src/view/components/diff.js +72 -0
  854. package/src/view/components/doc-row.js +62 -0
  855. package/src/view/components/empty-state.js +35 -0
  856. package/src/view/components/entity-selector.js +137 -0
  857. package/src/view/components/filter-bar.js +97 -0
  858. package/src/view/components/findings-list.js +49 -0
  859. package/src/view/components/index.js +12 -0
  860. package/src/view/components/pill.js +46 -0
  861. package/src/view/components/sub-tab-strip.js +43 -0
  862. package/src/view/components/toast.js +25 -0
  863. package/src/view/components-fixture.js +265 -0
  864. package/src/view/doc-renderers/architecture.js +304 -0
  865. package/src/view/doc-renderers/build.js +160 -0
  866. package/src/view/doc-renderers/index.js +2 -0
  867. package/src/view/doc-renderers/prd.js +35 -6
  868. package/src/view/html-page.js +700 -602
  869. package/src/view/index.js +96 -3
  870. package/src/view/live-client.js +39 -6
  871. package/src/view/needs-work.js +79 -0
  872. package/src/view/page-init.js +2193 -0
  873. package/src/view/readiness/phrasebook.js +115 -0
  874. package/src/view/readiness/po-layer.js +288 -0
  875. package/src/view/readiness/question-adapter.js +329 -0
  876. package/src/view/readiness/stage-legend.js +71 -0
  877. package/src/view/readiness.js +505 -0
  878. package/src/view/style.css +2017 -382
  879. package/src/view/test-host/embed-client.js +121 -0
  880. package/src/view/test-host/fixture.js +183 -0
  881. package/src/view/test-host/lints.js +220 -0
  882. package/src/view/view-index.js +323 -0
@@ -1,37 +1,52 @@
1
1
  /*
2
- * RCF view stylesheet. Vanilla CSS, no preprocessor, no framework.
3
- * Document-type colour tokens match the Mermaid classDef palette in
4
- * mermaid-diagram.js so the diagram and the page agree visually.
2
+ * RCF view stylesheet.
5
3
  *
6
- * Phase 3.3 polish: warmer surface palette, subtle card shadows + hover,
7
- * sticky tab bar with backdrop-blur, indigo accent, wider spacing rhythm,
8
- * refined typography stack. Same information density; nicer to look at.
4
+ * Viewer UI refresh PR 1 (w-2026-10-02-dave-010, Dex / wespa relay
5
+ * f0384046 on 2026-10-02): replaces the earlier single-theme indigo
6
+ * palette with the Stravica brand kit tokens (--sv-* cobalt / ink /
7
+ * paper) in a light + dark pair. theme=light|dark on the root page
8
+ * wins; theme=auto (and absent) falls through to prefers-color-scheme,
9
+ * with absent defaulting to light per Dex's wespa requirements.
10
+ *
11
+ * The viewer fills the viewport height and owns its scrolling (the
12
+ * host is a fixed box in wespa, 56px header plus a sidebar); nothing
13
+ * scrolls horizontally at narrow widths; the tab nav stays sticky
14
+ * while content scrolls. embed=1 stamps data-embed on <html>, which
15
+ * hides the brand block and the footer but keeps the tabstrip.
16
+ *
17
+ * Legacy --colour-* names are kept as aliases that map to the new
18
+ * tokens, so every doc-renderer / mermaid / product-map rule written
19
+ * against the old palette still works and gets dark theme for free.
9
20
  */
10
21
 
11
- :root {
22
+ :root,
23
+ :root[data-theme="light"] {
12
24
  color-scheme: light;
13
25
 
14
- /* Neutrals - slightly warmer than pure greys */
15
- --colour-text: #0f172a;
16
- --colour-heading: #0b1220;
17
- --colour-muted: #6b7280;
18
- --colour-subtle: #94a3b8;
19
- --colour-bg: #fdfdfd;
20
- --colour-surface: #f7f8fa;
21
- --colour-surface-2: #eef1f6;
22
- --colour-border: #e4e7ec;
23
- --colour-border-strong: #cbd5e1;
24
-
25
- /* Accent - indigo. Distinctive but professional. */
26
- --colour-accent: #4f46e5;
27
- --colour-accent-hover: #4338ca;
28
- --colour-accent-subtle: #eef2ff;
29
- --colour-link: var(--colour-accent);
30
-
31
- /* Error / broken states */
32
- --colour-broken-bg: #fee2e2;
33
- --colour-broken-text: #7f1d1d;
34
- --colour-broken-border: #dc2626;
26
+ /* Stravica brand kit, light. */
27
+ --sv-canvas: #F6F8FC;
28
+ --sv-surface: #FFFFFF;
29
+ --sv-raised: #EEF2F8;
30
+ --sv-ink: #111927;
31
+ --sv-muted: #536176;
32
+ --sv-border: #D8DFEA;
33
+ --sv-control: #738198;
34
+ --sv-link: #2447EB;
35
+ --sv-hover: #1737C7;
36
+ --sv-active: #E9EEFF;
37
+ --sv-button: #2447EB;
38
+ --sv-onbutton: #FFFFFF;
39
+ --sv-code: #EEF2F8;
40
+ --sv-success: #116B4D;
41
+ --sv-successbg: #E7F4ED;
42
+ --sv-warning: #895000;
43
+ --sv-warningbg: #FFF3DC;
44
+ --sv-danger: #B4233B;
45
+ --sv-dangerbg: #FDECF0;
46
+ --sv-focus: #2447EB;
47
+
48
+ --sv-font: Arial, Helvetica, sans-serif;
49
+ --sv-mono: ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", monospace;
35
50
 
36
51
  /* Doc-type palette - kept in sync with mermaid classDef */
37
52
  --colour-prd: #fde68a;
@@ -46,152 +61,262 @@
46
61
  --colour-ts: #99f6e4;
47
62
  --colour-tc: #d9f99d;
48
63
 
49
- /* Elevation */
50
64
  --shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.04), 0 1px 3px rgba(15, 23, 42, 0.03);
51
65
  --shadow-md: 0 4px 10px rgba(15, 23, 42, 0.05), 0 2px 4px rgba(15, 23, 42, 0.04);
52
66
  --shadow-lg: 0 12px 28px rgba(15, 23, 42, 0.08), 0 4px 8px rgba(15, 23, 42, 0.04);
53
67
 
54
- /* Radii */
55
68
  --radius-sm: 6px;
56
69
  --radius-md: 10px;
57
70
  --radius-lg: 14px;
58
71
 
59
- /* Transitions */
60
72
  --t-fast: 120ms ease;
61
73
  --t-med: 180ms ease;
74
+
75
+ /* Legacy --colour-* aliases over --sv-* so pre-existing rules keep
76
+ their meaning and inherit dark theme automatically. */
77
+ --colour-text: var(--sv-ink);
78
+ --colour-heading: var(--sv-ink);
79
+ --colour-muted: var(--sv-muted);
80
+ --colour-subtle: var(--sv-control);
81
+ --colour-bg: var(--sv-surface);
82
+ --colour-surface: var(--sv-raised);
83
+ --colour-surface-2: var(--sv-raised);
84
+ --colour-border: var(--sv-border);
85
+ --colour-border-strong: var(--sv-control);
86
+ --colour-accent: var(--sv-link);
87
+ --colour-accent-hover: var(--sv-hover);
88
+ --colour-accent-subtle: var(--sv-active);
89
+ --colour-link: var(--sv-link);
90
+ --colour-broken-bg: var(--sv-dangerbg);
91
+ --colour-broken-text: var(--sv-danger);
92
+ --colour-broken-border: var(--sv-danger);
93
+ }
94
+
95
+ :root[data-theme="dark"] {
96
+ color-scheme: dark;
97
+
98
+ --sv-canvas: #0B111B;
99
+ --sv-surface: #101925;
100
+ --sv-raised: #182334;
101
+ --sv-ink: #EDF2FA;
102
+ --sv-muted: #AAB7CA;
103
+ --sv-border: #2C3A4F;
104
+ --sv-control: #75859D;
105
+ --sv-link: #A3B5FF;
106
+ --sv-hover: #C0CDFF;
107
+ --sv-active: #1D2C50;
108
+ --sv-button: #A3B5FF;
109
+ --sv-onbutton: #0B111B;
110
+ --sv-code: #0D1521;
111
+ --sv-success: #80D9B1;
112
+ --sv-successbg: #102D24;
113
+ --sv-warning: #F1CA7A;
114
+ --sv-warningbg: #322712;
115
+ --sv-danger: #FFA3B3;
116
+ --sv-dangerbg: #361C28;
117
+ --sv-focus: #A3B5FF;
118
+
119
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4), 0 1px 3px rgba(0, 0, 0, 0.3);
120
+ --shadow-md: 0 4px 10px rgba(0, 0, 0, 0.45), 0 2px 4px rgba(0, 0, 0, 0.35);
121
+ --shadow-lg: 0 12px 28px rgba(0, 0, 0, 0.55), 0 4px 8px rgba(0, 0, 0, 0.4);
122
+ }
123
+
124
+ @media (prefers-color-scheme: dark) {
125
+ :root:not([data-theme="light"]):not([data-theme="dark"]) {
126
+ color-scheme: dark;
127
+
128
+ --sv-canvas: #0B111B;
129
+ --sv-surface: #101925;
130
+ --sv-raised: #182334;
131
+ --sv-ink: #EDF2FA;
132
+ --sv-muted: #AAB7CA;
133
+ --sv-border: #2C3A4F;
134
+ --sv-control: #75859D;
135
+ --sv-link: #A3B5FF;
136
+ --sv-hover: #C0CDFF;
137
+ --sv-active: #1D2C50;
138
+ --sv-button: #A3B5FF;
139
+ --sv-onbutton: #0B111B;
140
+ --sv-code: #0D1521;
141
+ --sv-success: #80D9B1;
142
+ --sv-successbg: #102D24;
143
+ --sv-warning: #F1CA7A;
144
+ --sv-warningbg: #322712;
145
+ --sv-danger: #FFA3B3;
146
+ --sv-dangerbg: #361C28;
147
+ --sv-focus: #A3B5FF;
148
+
149
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4), 0 1px 3px rgba(0, 0, 0, 0.3);
150
+ --shadow-md: 0 4px 10px rgba(0, 0, 0, 0.45), 0 2px 4px rgba(0, 0, 0, 0.35);
151
+ --shadow-lg: 0 12px 28px rgba(0, 0, 0, 0.55), 0 4px 8px rgba(0, 0, 0, 0.4);
152
+ }
62
153
  }
63
154
 
64
155
  * { box-sizing: border-box; }
65
156
 
66
157
  html { font-size: 16px; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
67
158
 
159
+ /* Viewport-height scroll box: the viewer owns scrolling inside the
160
+ host iframe. The host sizes the frame; we fill it, reflow on resize,
161
+ and never produce a horizontal page scroll (lists wrap, the DAG and
162
+ mermaid svgs scroll inside their own panels). */
163
+ html, body {
164
+ height: 100%;
165
+ margin: 0;
166
+ }
167
+
68
168
  body {
69
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI Variable', 'Segoe UI', Roboto, 'Helvetica Neue', system-ui, sans-serif;
169
+ font-family: var(--sv-font);
70
170
  line-height: 1.55;
71
- color: var(--colour-text);
72
- background: var(--colour-bg);
73
- max-width: 80rem;
74
- margin: 0 auto;
75
- padding: 0 2rem 3rem;
171
+ color: var(--sv-ink);
172
+ background: var(--sv-canvas);
173
+ min-height: 100vh;
174
+ display: flex;
175
+ flex-direction: column;
176
+ overflow-x: hidden;
76
177
  font-feature-settings: 'cv02', 'cv03', 'cv04', 'cv11';
77
178
  }
78
179
 
79
180
  /* --------------------------------------------------------------------
80
- * Header
181
+ * App shell: compact header with brand, sticky tabstrip, tools well.
81
182
  * -------------------------------------------------------------------- */
82
183
 
83
- header {
84
- padding: 2rem 0 1rem;
85
- margin-bottom: 0.75rem;
184
+ header.app-header {
185
+ position: sticky;
186
+ top: 0;
187
+ z-index: 20;
188
+ background: var(--sv-surface);
189
+ border-bottom: 1px solid var(--sv-border);
190
+ }
191
+
192
+ header.app-header .bar {
193
+ max-width: 1280px;
194
+ margin: 0 auto;
195
+ padding: 0.5rem 1rem 0;
86
196
  display: flex;
87
- flex-direction: column;
88
- gap: 0.35rem;
197
+ align-items: center;
198
+ gap: 1rem;
89
199
  }
90
200
 
91
- header h1 {
92
- margin: 0;
93
- font-size: 2rem;
94
- font-weight: 700;
95
- letter-spacing: -0.02em;
96
- color: var(--colour-heading);
201
+ /* D17: icon mark only; the tool name is NOT shown as text. The stack
202
+ under review (project name) is the prominent text in .product, with
203
+ a muted "review surface" sub-label; no technology chip. */
204
+ .brand {
97
205
  display: flex;
98
206
  align-items: center;
99
- gap: 0.75rem;
207
+ gap: 0.4rem;
208
+ color: var(--sv-muted);
209
+ white-space: nowrap;
100
210
  }
101
211
 
102
- /* Stravica kit mark alongside the project name, shared identity with
103
- * the marketing site (stravica.ai). SVG is inlined as a data URL so no
104
- * separate asset has to ship. */
105
- header h1::before {
106
- content: '';
212
+ .brand .mark {
213
+ /* Inline SVG of the Stravica kit mark from
214
+ stravica.ai/public/brand/assets/icons/favicon.svg (same paths and
215
+ colours as the favicon above). The SVG carries its own ink tile
216
+ and radius so no background styling is needed here. */
217
+ width: 18px;
218
+ height: 18px;
107
219
  display: inline-block;
108
- width: 2rem;
109
- height: 2rem;
110
220
  flex-shrink: 0;
111
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 136 180' width='136' height='180' role='img'%3E%3Ctitle%3EStravica ribbon symbol%3C/title%3E%3Cdesc%3E%3C/desc%3E%3Cdefs%3E%3ClinearGradient id='ma' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop stop-color='%23174CFF'/%3E%3Cstop offset='1' stop-color='%23263BFF'/%3E%3C/linearGradient%3E%3ClinearGradient id='mb' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop stop-color='%231674FF'/%3E%3Cstop offset='1' stop-color='%232854FF'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cg transform='translate(0 0) scale(1.0)'%3E%3Cpath fill='url(%23ma)' d='M86 4 L10 48 Q4 51 4 58 L4 81 Q4 87 10 84 L80 45 Q86 42 86 35 Z'/%3E%3Cpath fill='url(%23ma)' d='M88 108 L129 125 L47 172 Q41 176 41 170 L41 142 Q41 136 47 133 Z'/%3E%3Cpath fill='url(%23mb)' d='M41 84 L74 65 Q78 63 83 66 L124 88 Q130 91 130 98 L130 121 Q130 126 124 123 Z'/%3E%3C/g%3E%3C/svg%3E");
112
- background-repeat: no-repeat;
113
- background-position: center;
114
- background-size: contain;
115
- border-radius: var(--radius-sm);
116
- box-shadow: var(--shadow-sm);
117
221
  }
118
222
 
119
- .subtitle {
120
- color: var(--colour-muted);
121
- margin: 0;
122
- font-size: 0.95rem;
223
+ .product {
224
+ display: flex;
225
+ align-items: center;
226
+ gap: 0.5rem;
227
+ white-space: nowrap;
228
+ min-width: 0;
229
+ padding-left: 0.75rem;
230
+ border-left: 1px solid var(--sv-border);
123
231
  }
124
232
 
125
- /* --------------------------------------------------------------------
126
- * Tab bar (sticky, blurred backdrop)
127
- * -------------------------------------------------------------------- */
233
+ .product .name {
234
+ font-weight: 700;
235
+ font-size: 1.05rem;
236
+ color: var(--sv-ink);
237
+ overflow: hidden;
238
+ text-overflow: ellipsis;
239
+ }
240
+
241
+ .product .sub {
242
+ font-size: 0.72rem;
243
+ font-weight: 500;
244
+ color: var(--sv-muted);
245
+ }
128
246
 
129
247
  nav.tabs {
130
248
  display: flex;
131
- flex-wrap: wrap;
132
249
  gap: 0.25rem;
133
- padding: 0.5rem 0.5rem 0;
134
- position: sticky;
135
- top: 0;
136
- z-index: 10;
137
- background: rgba(253, 253, 253, 0.85);
138
- backdrop-filter: saturate(180%) blur(12px);
139
- -webkit-backdrop-filter: saturate(180%) blur(12px);
140
- border-bottom: 1px solid var(--colour-border);
141
- margin: 0 -0.5rem;
250
+ margin-left: 1rem;
251
+ flex: 1 1 auto;
252
+ min-width: 0;
253
+ overflow-x: auto;
254
+ -webkit-overflow-scrolling: touch;
142
255
  }
143
256
 
144
257
  nav.tabs button {
145
258
  appearance: none;
146
- border: 1px solid transparent;
147
- border-radius: var(--radius-md) var(--radius-md) 0 0;
259
+ border: none;
148
260
  background: transparent;
149
- color: var(--colour-muted);
150
- padding: 0.6rem 1.1rem;
261
+ color: var(--sv-muted);
262
+ display: inline-flex;
263
+ align-items: center;
264
+ min-height: 2.5rem;
265
+ padding: 0 0.85rem;
266
+ text-decoration: none;
267
+ border-bottom: 3px solid transparent;
268
+ white-space: nowrap;
269
+ font-family: inherit;
151
270
  font-size: 0.95rem;
152
271
  font-weight: 500;
153
272
  cursor: pointer;
154
- font-family: inherit;
155
273
  transition: background var(--t-fast), color var(--t-fast), border-color var(--t-fast);
156
- margin-bottom: -1px;
157
- position: relative;
158
274
  }
159
275
 
160
276
  nav.tabs button:hover {
161
- background: var(--colour-accent-subtle);
162
- color: var(--colour-accent-hover);
277
+ color: var(--sv-ink);
278
+ background: var(--sv-raised);
163
279
  }
164
280
 
165
281
  nav.tabs button[aria-selected="true"] {
166
- background: var(--colour-bg);
167
- color: var(--colour-heading);
168
- font-weight: 600;
169
- border-color: var(--colour-border);
170
- border-bottom-color: var(--colour-bg);
282
+ color: var(--sv-ink);
283
+ font-weight: 700;
284
+ border-bottom-color: var(--sv-link);
171
285
  }
172
286
 
173
- nav.tabs button[aria-selected="true"]::after {
174
- content: '';
175
- position: absolute;
176
- left: 0.9rem;
177
- right: 0.9rem;
178
- bottom: -1px;
179
- height: 2px;
180
- background: var(--colour-accent);
181
- border-radius: 2px;
287
+ nav.tabs button:focus-visible {
288
+ outline: 3px solid var(--sv-focus);
289
+ outline-offset: -3px;
182
290
  }
183
291
 
184
- nav.tabs button:focus-visible {
185
- outline: 2px solid var(--colour-accent);
186
- outline-offset: 2px;
292
+ .tools {
293
+ display: flex;
294
+ align-items: center;
295
+ gap: 0.5rem;
296
+ flex-shrink: 0;
187
297
  }
188
298
 
299
+ /* Embed contract (D10): data-embed="1" suppresses the footer and
300
+ left-aligns the tab nav; the icon mark and project name stay (D17
301
+ keeps the stack under review named even under embed). */
302
+ html[data-embed="1"] .app-footer { display: none; }
303
+ html[data-embed="1"] nav.tabs { margin-left: 0; }
304
+
189
305
  /* --------------------------------------------------------------------
190
- * Panels + section headings
306
+ * Main content area
191
307
  * -------------------------------------------------------------------- */
192
308
 
309
+ main {
310
+ flex: 1 1 auto;
311
+ max-width: 1280px;
312
+ width: 100%;
313
+ margin: 0 auto;
314
+ padding: 1.25rem 1rem 3rem;
315
+ overflow-x: hidden;
316
+ }
317
+
193
318
  section[role="tabpanel"] {
194
- padding-top: 2rem;
319
+ padding-top: 1rem;
195
320
  }
196
321
 
197
322
  section[role="tabpanel"][hidden] {
@@ -202,50 +327,33 @@ h2.tab-heading {
202
327
  font-size: 1.5rem;
203
328
  font-weight: 700;
204
329
  letter-spacing: -0.015em;
205
- color: var(--colour-heading);
330
+ color: var(--sv-ink);
206
331
  margin: 0 0 1.25rem;
207
332
  padding-bottom: 0.5rem;
208
- border-bottom: 1px solid var(--colour-border);
209
- position: relative;
210
- }
211
-
212
- h2.tab-heading::before {
213
- content: '';
214
- position: absolute;
215
- left: 0;
216
- bottom: -1px;
217
- width: 3rem;
218
- height: 2px;
219
- background: var(--colour-accent);
220
- border-radius: 2px;
333
+ border-bottom: 1px solid var(--sv-border);
221
334
  }
222
335
 
223
336
  .group-heading {
224
- font-size: 1.1rem;
337
+ font-size: 0.8rem;
225
338
  font-weight: 600;
226
339
  margin-top: 2.25rem;
227
340
  margin-bottom: 1rem;
228
- color: var(--colour-heading);
341
+ color: var(--sv-ink);
229
342
  text-transform: uppercase;
230
343
  letter-spacing: 0.06em;
231
- font-size: 0.8rem;
232
344
  }
233
345
 
234
- /* --------------------------------------------------------------------
235
- * Overview diagram
236
- * -------------------------------------------------------------------- */
237
-
238
346
  /* --------------------------------------------------------------------
239
347
  * Doc article - the rendered doc body inside a card
240
348
  * -------------------------------------------------------------------- */
241
349
 
242
350
  article.doc {
243
- border: 1px solid var(--colour-border);
351
+ border: 1px solid var(--sv-border);
244
352
  border-left-width: 5px;
245
353
  padding: 1.25rem 1.5rem;
246
354
  border-radius: var(--radius-md);
247
355
  margin-bottom: 1.5rem;
248
- background: var(--colour-bg);
356
+ background: var(--sv-surface);
249
357
  box-shadow: var(--shadow-sm);
250
358
  transition: box-shadow var(--t-med), transform var(--t-med);
251
359
  }
@@ -254,15 +362,10 @@ article.doc h3 {
254
362
  margin: 0 0 0.85rem;
255
363
  font-size: 1.2rem;
256
364
  font-weight: 600;
257
- color: var(--colour-heading);
365
+ color: var(--sv-ink);
258
366
  letter-spacing: -0.01em;
259
367
  }
260
368
 
261
- /* When the article is embedded inside a doc-details wrapper, the parent
262
- * details already carries the border + shadow + radius + background +
263
- * coloured left accent. Strip the article's own card treatment so we
264
- * don't render a card inside a card. Also hide the article's own h3 -
265
- * the summary line already carries the title. */
266
369
  details.doc-details > article.doc {
267
370
  border: none;
268
371
  border-radius: 0;
@@ -286,18 +389,17 @@ article.doc-fbs { border-left-color: var(--colour-fbs); }
286
389
  article.doc-ts { border-left-color: var(--colour-ts); }
287
390
 
288
391
  article.doc p { margin: 0.45rem 0; }
289
- article.doc h4 { margin: 1.1rem 0 0.45rem; font-size: 1rem; font-weight: 600; color: var(--colour-heading); }
290
- article.doc h5 { margin: 0.6rem 0 0.3rem; font-size: 0.925rem; font-weight: 600; color: var(--colour-heading); }
392
+ article.doc h4 { margin: 1.1rem 0 0.45rem; font-size: 1rem; font-weight: 600; color: var(--sv-ink); }
393
+ article.doc h5 { margin: 0.6rem 0 0.3rem; font-size: 0.925rem; font-weight: 600; color: var(--sv-ink); }
291
394
 
292
395
  .field-list { margin: 0.85rem 0; }
293
396
  .field-list ul { margin: 0.3rem 0; padding-left: 1.5rem; }
294
397
  .field-list ul li { margin: 0.2rem 0; }
295
- .field-list dl dt { font-weight: 600; margin-top: 0.5rem; color: var(--colour-heading); }
398
+ .field-list dl dt { font-weight: 600; margin-top: 0.5rem; color: var(--sv-ink); }
296
399
  .field-list dl dd { margin-left: 0; margin-bottom: 0.35rem; }
297
- /* 0.28.2 (issue #235): structured TAD fields render as a table. */
298
400
  .field-list table.field-table { border-collapse: collapse; width: 100%; margin: 0.35rem 0 0.85rem; font-size: 0.95em; }
299
- .field-list table.field-table th, .field-list table.field-table td { text-align: left; padding: 0.35rem 0.55rem; border-bottom: 1px solid var(--colour-rule, rgba(0,0,0,0.12)); vertical-align: top; }
300
- .field-list table.field-table th { font-weight: 600; color: var(--colour-heading); background: var(--colour-tint, rgba(0,0,0,0.03)); }
401
+ .field-list table.field-table th, .field-list table.field-table td { text-align: left; padding: 0.35rem 0.55rem; border-bottom: 1px solid var(--sv-border); vertical-align: top; }
402
+ .field-list table.field-table th { font-weight: 600; color: var(--sv-ink); background: var(--sv-raised); }
301
403
  .field-list table.field-table tr:last-child td { border-bottom: 0; }
302
404
 
303
405
  /* --------------------------------------------------------------------
@@ -316,15 +418,11 @@ article.doc h5 { margin: 0.6rem 0 0.3rem; font-size: 0.925rem; font-weight: 600;
316
418
  box-shadow: none;
317
419
  }
318
420
 
319
- .ac-list .ac-item:last-child {
320
- margin-bottom: 0;
321
- }
322
-
421
+ .ac-list .ac-item:last-child { margin-bottom: 0; }
323
422
  .ac-list .ac-item p { margin: 0.3rem 0; }
324
423
  .ac-list .ac-gwt p { margin: 0.2rem 0; }
325
- .ac-meta { color: var(--colour-muted); font-size: 0.875rem; }
424
+ .ac-meta { color: var(--sv-muted); font-size: 0.875rem; }
326
425
 
327
- /* AC pills (used in FBS -> AC nav on the Build tab) */
328
426
  .ac-pills {
329
427
  display: flex;
330
428
  flex-wrap: wrap;
@@ -337,16 +435,16 @@ article.doc h5 { margin: 0.6rem 0 0.3rem; font-size: 0.925rem; font-weight: 600;
337
435
  padding: 0.22rem 0.7rem;
338
436
  border-radius: 999px;
339
437
  background: var(--colour-ac);
340
- color: #3730a3;
438
+ color: var(--sv-link);
341
439
  text-decoration: none;
342
440
  font-size: 0.85rem;
343
441
  font-weight: 500;
344
- border: 1px solid #c7d2fe;
442
+ border: 1px solid var(--sv-border);
345
443
  transition: background var(--t-fast), transform var(--t-fast), box-shadow var(--t-fast);
346
444
  }
347
445
 
348
446
  .ac-pills .ac-pill:hover {
349
- background: #c7d2fe;
447
+ background: var(--sv-active);
350
448
  box-shadow: var(--shadow-sm);
351
449
  transform: translateY(-1px);
352
450
  }
@@ -361,8 +459,8 @@ article.doc h5 { margin: 0.6rem 0 0.3rem; font-size: 0.925rem; font-weight: 600;
361
459
  }
362
460
 
363
461
  .ac-resolved.broken {
364
- border-left-color: var(--colour-broken-border);
365
- background: var(--colour-broken-bg);
462
+ border-left-color: var(--sv-danger);
463
+ background: var(--sv-dangerbg);
366
464
  }
367
465
 
368
466
  .tc {
@@ -381,9 +479,10 @@ article.doc h5 { margin: 0.6rem 0 0.3rem; font-size: 0.925rem; font-weight: 600;
381
479
  .subdiagram {
382
480
  margin: 1.25rem 0;
383
481
  padding: 0.85rem;
384
- background: var(--colour-surface);
385
- border: 1px solid var(--colour-border);
482
+ background: var(--sv-raised);
483
+ border: 1px solid var(--sv-border);
386
484
  border-radius: var(--radius-md);
485
+ overflow-x: auto;
387
486
  }
388
487
 
389
488
  pre.mermaid {
@@ -401,28 +500,26 @@ pre.mermaid {
401
500
  * -------------------------------------------------------------------- */
402
501
 
403
502
  details.doc-details {
404
- border: 1px solid var(--colour-border);
503
+ border: 1px solid var(--sv-border);
405
504
  border-radius: var(--radius-md);
406
505
  margin-bottom: 0.85rem;
407
- background: var(--colour-bg);
506
+ background: var(--sv-surface);
408
507
  box-shadow: var(--shadow-sm);
409
508
  transition: box-shadow var(--t-med), border-color var(--t-med);
410
509
  }
411
510
 
412
511
  details.doc-details:hover {
413
512
  box-shadow: var(--shadow-md);
414
- border-color: var(--colour-border-strong);
513
+ border-color: var(--sv-control);
415
514
  }
416
515
 
417
- details.doc-details[open] {
418
- box-shadow: var(--shadow-md);
419
- }
516
+ details.doc-details[open] { box-shadow: var(--shadow-md); }
420
517
 
421
518
  details.doc-details > summary {
422
519
  cursor: pointer;
423
520
  padding: 0.75rem 1rem;
424
521
  font-weight: 500;
425
- color: var(--colour-heading);
522
+ color: var(--sv-ink);
426
523
  list-style: none;
427
524
  display: flex;
428
525
  align-items: center;
@@ -444,33 +541,28 @@ details.doc-details > summary > .status {
444
541
  margin-left: auto;
445
542
  }
446
543
 
447
- details.doc-details > summary:hover {
448
- background: var(--colour-surface);
449
- }
544
+ details.doc-details > summary:hover { background: var(--sv-raised); }
450
545
 
451
546
  details.doc-details > summary::-webkit-details-marker { display: none; }
452
547
 
453
- /* Custom chevron */
454
548
  details.doc-details > summary::before {
455
549
  content: '';
456
550
  display: inline-block;
457
551
  width: 0.6rem;
458
552
  height: 0.6rem;
459
- border-right: 2px solid var(--colour-muted);
460
- border-bottom: 2px solid var(--colour-muted);
553
+ border-right: 2px solid var(--sv-control);
554
+ border-bottom: 2px solid var(--sv-control);
461
555
  transform: rotate(-45deg);
462
556
  transition: transform var(--t-fast);
463
557
  flex-shrink: 0;
464
558
  margin-right: 0.15rem;
465
559
  }
466
560
 
467
- details.doc-details[open] > summary::before {
468
- transform: rotate(45deg);
469
- }
561
+ details.doc-details[open] > summary::before { transform: rotate(45deg); }
470
562
 
471
563
  details.doc-details[open] > summary {
472
564
  border-radius: var(--radius-md) var(--radius-md) 0 0;
473
- border-bottom: 1px solid var(--colour-border);
565
+ border-bottom: 1px solid var(--sv-border);
474
566
  }
475
567
 
476
568
  details.doc-details > article,
@@ -487,25 +579,21 @@ details.doc-details.doc-adr-wrap { border-left: 4px solid var(--colour-adr); }
487
579
  details.doc-details.doc-fbs-wrap { border-left: 4px solid var(--colour-fbs); }
488
580
  details.doc-details.doc-ts-wrap { border-left: 4px solid var(--colour-ts); }
489
581
 
490
- .nested-details {
491
- margin: 0 1rem 1rem;
492
- }
582
+ .nested-details { margin: 0 1rem 1rem; }
493
583
 
494
584
  .nested-details > h4 {
495
585
  margin: 0.75rem 0 0.6rem;
496
- color: var(--colour-muted);
586
+ color: var(--sv-muted);
497
587
  font-size: 0.85rem;
498
588
  font-weight: 600;
499
589
  text-transform: uppercase;
500
590
  letter-spacing: 0.04em;
501
591
  }
502
592
 
503
- /* --------------------------------------------------------------------
504
- * Nested details: strip the outer-card treatment so a REQ card
505
- * expanded to show its US children doesn't render "card inside card
506
- * inside card". Keep the coloured left accent so hierarchy is still
507
- * visible, drop border/radius/shadow/background on the other sides.
508
- * -------------------------------------------------------------------- */
593
+ /* Nested details: strip the outer-card treatment so a REQ card
594
+ expanded to show its US children doesn't render "card inside card
595
+ inside card". Keep the coloured left accent so hierarchy is still
596
+ visible, drop border/radius/shadow/background on the other sides. */
509
597
 
510
598
  details.doc-details details.doc-details {
511
599
  border-top-color: transparent;
@@ -518,9 +606,7 @@ details.doc-details details.doc-details {
518
606
  }
519
607
 
520
608
  details.doc-details details.doc-details:hover,
521
- details.doc-details details.doc-details[open] {
522
- box-shadow: none;
523
- }
609
+ details.doc-details details.doc-details[open] { box-shadow: none; }
524
610
 
525
611
  details.doc-details details.doc-details:hover {
526
612
  border-top-color: transparent;
@@ -533,12 +619,10 @@ details.doc-details details.doc-details > summary {
533
619
  border-radius: 0;
534
620
  }
535
621
 
536
- details.doc-details details.doc-details > summary:hover {
537
- background: var(--colour-surface);
538
- }
622
+ details.doc-details details.doc-details > summary:hover { background: var(--sv-raised); }
539
623
 
540
624
  details.doc-details details.doc-details[open] > summary {
541
- border-bottom: 1px dashed var(--colour-border);
625
+ border-bottom: 1px dashed var(--sv-border);
542
626
  border-radius: 0;
543
627
  }
544
628
 
@@ -552,26 +636,26 @@ details.doc-details details.doc-details > .us-body {
552
636
  /* Raw-JSON disclosure (dev-facing, quiet) */
553
637
  details.raw-json {
554
638
  margin-top: 1rem;
555
- border-top: 1px dashed var(--colour-border);
639
+ border-top: 1px dashed var(--sv-border);
556
640
  padding-top: 0.75rem;
557
641
  }
558
642
 
559
643
  details.raw-json summary {
560
644
  cursor: pointer;
561
- color: var(--colour-muted);
645
+ color: var(--sv-muted);
562
646
  font-size: 0.8125rem;
563
647
  padding: 0.15rem 0;
564
648
  }
565
649
 
566
- details.raw-json summary:hover { color: var(--colour-accent); }
650
+ details.raw-json summary:hover { color: var(--sv-link); }
567
651
 
568
652
  details.raw-json pre {
569
- background: var(--colour-surface-2);
653
+ background: var(--sv-raised);
570
654
  padding: 0.85rem 1rem;
571
655
  border-radius: var(--radius-sm);
572
656
  overflow-x: auto;
573
657
  font-size: 0.8rem;
574
- border: 1px solid var(--colour-border);
658
+ border: 1px solid var(--sv-border);
575
659
  margin-top: 0.5rem;
576
660
  }
577
661
 
@@ -580,27 +664,31 @@ details.raw-json pre {
580
664
  * -------------------------------------------------------------------- */
581
665
 
582
666
  a {
583
- color: var(--colour-link);
667
+ color: var(--sv-link);
584
668
  text-decoration: none;
585
669
  transition: color var(--t-fast);
586
670
  }
587
671
 
588
672
  a:hover {
589
- color: var(--colour-accent-hover);
673
+ color: var(--sv-hover);
590
674
  text-decoration: underline;
591
675
  text-underline-offset: 3px;
592
676
  }
593
677
 
678
+ :where(a, button, input, select, summary, [tabindex]):focus-visible {
679
+ outline: 3px solid var(--sv-focus);
680
+ outline-offset: 2px;
681
+ }
682
+
594
683
  code {
595
- background: var(--colour-surface-2);
684
+ background: var(--sv-code);
596
685
  padding: 0.12rem 0.35rem;
597
686
  border-radius: 4px;
598
687
  font-size: 0.875em;
599
- font-family: 'JetBrains Mono', 'SF Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
600
- color: #3730a3;
688
+ font-family: var(--sv-mono);
689
+ color: var(--sv-link);
601
690
  }
602
691
 
603
- /* Status pill (compact, coloured by status) */
604
692
  .status {
605
693
  display: inline-block;
606
694
  padding: 0.15rem 0.6rem;
@@ -613,33 +701,33 @@ code {
613
701
  }
614
702
 
615
703
  .status.notStarted {
616
- color: var(--colour-muted);
617
- background: var(--colour-surface-2);
618
- border-color: var(--colour-border);
704
+ color: var(--sv-muted);
705
+ background: var(--sv-raised);
706
+ border-color: var(--sv-border);
619
707
  }
620
708
 
621
709
  .status.inProgress {
622
- color: #0c4a6e;
623
- background: #e0f2fe;
624
- border-color: #bae6fd;
710
+ color: var(--sv-link);
711
+ background: var(--sv-active);
712
+ border-color: var(--sv-link);
625
713
  }
626
714
 
627
715
  .status.complete {
628
- color: #065f46;
629
- background: #d1fae5;
630
- border-color: #a7f3d0;
716
+ color: var(--sv-success);
717
+ background: var(--sv-successbg);
718
+ border-color: var(--sv-success);
631
719
  }
632
720
 
633
721
  .status.verified {
634
- color: #14532d;
635
- background: #bbf7d0;
636
- border-color: #86efac;
722
+ color: var(--sv-success);
723
+ background: var(--sv-successbg);
724
+ border-color: var(--sv-success);
637
725
  }
638
726
 
639
727
  .status.blocked {
640
- color: var(--colour-broken-text);
641
- background: var(--colour-broken-bg);
642
- border-color: var(--colour-broken-border);
728
+ color: var(--sv-danger);
729
+ background: var(--sv-dangerbg);
730
+ border-color: var(--sv-danger);
643
731
  }
644
732
 
645
733
  .status.draft,
@@ -650,38 +738,33 @@ code {
650
738
  .status.deprecated,
651
739
  .status.proposed,
652
740
  .status.accepted {
653
- color: var(--colour-muted);
654
- background: var(--colour-surface-2);
655
- border-color: var(--colour-border);
741
+ color: var(--sv-muted);
742
+ background: var(--sv-raised);
743
+ border-color: var(--sv-border);
656
744
  }
657
745
 
658
746
  .status.approved,
659
- .status.accepted { color: #065f46; background: #d1fae5; border-color: #a7f3d0; }
747
+ .status.accepted { color: var(--sv-success); background: var(--sv-successbg); border-color: var(--sv-success); }
660
748
  .status.deprecated,
661
- .status.superseded { color: var(--colour-muted); background: var(--colour-surface); border-color: var(--colour-border); }
749
+ .status.superseded { color: var(--sv-muted); background: var(--sv-raised); border-color: var(--sv-border); }
662
750
 
663
- /* Broken doc / tree error banner */
664
751
  .broken {
665
- background: var(--colour-broken-bg);
666
- border: 1px solid var(--colour-broken-border);
667
- color: var(--colour-broken-text);
752
+ background: var(--sv-dangerbg);
753
+ border: 1px solid var(--sv-danger);
754
+ color: var(--sv-danger);
668
755
  padding: 0.65rem 0.9rem;
669
756
  border-radius: var(--radius-sm);
670
757
  margin-bottom: 0.85rem;
671
758
  }
672
759
 
673
- .broken ul {
674
- margin: 0.3rem 0 0 1.35rem;
675
- }
760
+ .broken ul { margin: 0.3rem 0 0 1.35rem; }
676
761
 
677
- .broken-doc {
678
- border-left-color: var(--colour-broken-border);
679
- }
762
+ .broken-doc { border-left-color: var(--sv-danger); }
680
763
 
681
764
  .tree-errors {
682
- background: var(--colour-broken-bg);
683
- border: 1px solid var(--colour-broken-border);
684
- color: var(--colour-broken-text);
765
+ background: var(--sv-dangerbg);
766
+ border: 1px solid var(--sv-danger);
767
+ color: var(--sv-danger);
685
768
  padding: 1.1rem 1.35rem;
686
769
  border-radius: var(--radius-md);
687
770
  margin-bottom: 2rem;
@@ -692,7 +775,7 @@ code {
692
775
  margin: 0 0 0.5rem;
693
776
  font-size: 1.15rem;
694
777
  font-weight: 700;
695
- color: var(--colour-broken-text);
778
+ color: var(--sv-danger);
696
779
  border: none;
697
780
  padding: 0;
698
781
  }
@@ -701,27 +784,72 @@ code {
701
784
  * Footer
702
785
  * -------------------------------------------------------------------- */
703
786
 
704
- footer {
705
- border-top: 1px solid var(--colour-border);
706
- padding-top: 1.25rem;
707
- margin-top: 3rem;
708
- color: var(--colour-muted);
709
- font-size: 0.85rem;
787
+ /* Shell footer: one compact muted line - version, GitHub, docs
788
+ links (new tab, rel="noopener", never target="_top") and the
789
+ live-update pill as the current viewer's connection dot. Hidden
790
+ under data-embed="1" per the Dex / wespa contract. */
791
+ footer.app-footer {
792
+ max-width: 1280px;
793
+ width: 100%;
794
+ margin: 0 auto;
795
+ padding: 0.55rem 1rem;
796
+ border-top: 1px solid var(--sv-border);
797
+ color: var(--sv-muted);
798
+ font-size: 0.78rem;
799
+ flex-shrink: 0;
800
+ display: flex;
801
+ align-items: center;
802
+ flex-wrap: wrap;
803
+ gap: 0.6rem;
804
+ }
805
+
806
+ footer.app-footer a {
807
+ color: var(--sv-link);
808
+ text-decoration: none;
809
+ }
810
+
811
+ footer.app-footer a:hover { text-decoration: underline; }
812
+
813
+ footer.app-footer .sep { color: var(--sv-control); }
814
+
815
+ footer.app-footer .live {
816
+ margin-left: auto;
817
+ display: inline-flex;
818
+ align-items: center;
819
+ gap: 0.4rem;
820
+ padding: 0.2rem 0.55rem;
821
+ border: 1px solid var(--sv-control);
822
+ border-radius: 999px;
823
+ background: var(--sv-raised);
824
+ white-space: nowrap;
825
+ color: var(--sv-muted);
826
+ }
827
+
828
+ footer.app-footer .live .dot {
829
+ width: 8px;
830
+ height: 8px;
831
+ border-radius: 50%;
832
+ background: #4c9a2a;
833
+ display: inline-block;
710
834
  }
711
835
 
836
+ footer.app-footer .live.reconnecting .dot { background: #d68f00; }
837
+ footer.app-footer .live.disconnected .dot { background: #b03a2e; }
838
+
712
839
  /* --------------------------------------------------------------------
713
840
  * Print
714
841
  * -------------------------------------------------------------------- */
715
842
 
716
843
  @media print {
717
- body { max-width: none; padding: 0; }
844
+ html, body { height: auto; }
845
+ body { max-width: none; padding: 0; display: block; }
846
+ header.app-header { position: static; border: none; }
718
847
  nav.tabs { display: none; }
719
848
  section[role="tabpanel"][hidden] { display: block !important; }
720
849
  pre.mermaid { page-break-inside: avoid; }
721
850
  article.doc { page-break-inside: avoid; box-shadow: none; }
722
851
  details.doc-details { break-inside: avoid; box-shadow: none; }
723
852
  details.doc-details[open] > summary { border: none; }
724
- header h1::before { display: none; }
725
853
  }
726
854
 
727
855
  /* --------------------------------------------------------------------
@@ -729,9 +857,13 @@ footer {
729
857
  * -------------------------------------------------------------------- */
730
858
 
731
859
  @media (max-width: 720px) {
732
- body { padding: 0 1rem 2rem; }
733
- header h1 { font-size: 1.55rem; }
734
- nav.tabs button { padding: 0.5rem 0.8rem; font-size: 0.9rem; }
860
+ header.app-header .bar { flex-wrap: wrap; gap: 0.75rem; padding: 0.5rem 0.75rem 0; }
861
+ .product { flex: 1; }
862
+ .product .sub { display: none; }
863
+ /* Narrow: tabs wrap beneath the bar as their own full-width row. */
864
+ nav.tabs { order: 3; flex: 1 1 100%; margin-left: 0; }
865
+ nav.tabs button { padding: 0 0.65rem; font-size: 0.9rem; }
866
+ main { padding: 1rem 0.75rem 2rem; }
735
867
  article.doc { padding: 1rem 1.15rem; }
736
868
  details.doc-details > article,
737
869
  details.doc-details > section,
@@ -741,19 +873,6 @@ footer {
741
873
 
742
874
  /* --------------------------------------------------------------------
743
875
  * Deep-link scope overlay (w-2026-08-30-dave-020)
744
- *
745
- * When body.rcf-scoped is present the client has applied a URL-driven
746
- * scope (blueprint / node). Everything inside #rcf-live-content is
747
- * dimmed except:
748
- * - .rcf-in-scope a doc that IS in the scope set
749
- * - .rcf-scope-ancestor an ancestor of an in-scope doc (kept full
750
- * strength so the drill-down chain is legible)
751
- * - .rcf-customised an in-scope doc whose bytes differ from
752
- * the shipping blueprint source (a project
753
- * customisation over the applied contribution)
754
- *
755
- * Left visible-but-dimmed rather than hidden so the reader can see
756
- * where in the tree the scoped set sits.
757
876
  * -------------------------------------------------------------------- */
758
877
 
759
878
  body.rcf-scoped #rcf-live-content [data-doc-id]:not(.rcf-in-scope):not(.rcf-scope-ancestor) {
@@ -762,38 +881,32 @@ body.rcf-scoped #rcf-live-content [data-doc-id]:not(.rcf-in-scope):not(.rcf-scop
762
881
  }
763
882
  body.rcf-scoped #rcf-live-content [data-doc-id].rcf-in-scope {
764
883
  opacity: 1;
765
- outline: 2px solid #4c9a2a;
884
+ outline: 2px solid var(--sv-success);
766
885
  outline-offset: 2px;
767
886
  }
768
887
  body.rcf-scoped #rcf-live-content [data-doc-id].rcf-in-scope.rcf-customised {
769
- outline-color: #d68f00;
770
- box-shadow: 0 0 0 3px rgba(214, 143, 0, 0.18);
888
+ outline-color: var(--sv-warning);
889
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--sv-warning) 20%, transparent);
771
890
  }
772
891
 
773
892
  #rcf-scope-banner {
774
893
  margin: 0 0 1rem;
775
894
  padding: 0.5rem 0.8rem;
776
- border: 1px solid #d68f00;
777
- background: #fff7e6;
778
- color: #6b4300;
895
+ border: 1px solid var(--sv-warning);
896
+ background: var(--sv-warningbg);
897
+ color: var(--sv-warning);
779
898
  font-size: 0.9rem;
780
899
  border-radius: 4px;
781
900
  }
782
- #rcf-scope-banner a { color: #b03a2e; text-decoration: underline; }
901
+ #rcf-scope-banner a { color: var(--sv-danger); text-decoration: underline; }
783
902
 
784
903
  /* --------------------------------------------------------------------
785
904
  * Product Map tab (REQ-170, US-17001..17007)
786
- *
787
- * Controls, jump nav, bucket cards, status mini pills, empty rollup.
788
- * Language is the viewer's existing indigo + rounded + soft-shadow
789
- * tokens; no new palette entries, so light and dark stay coherent. The
790
- * layout is single-column at the max page width the viewer uses
791
- * elsewhere (80rem); mobile is not the target (never breaks at 1024px).
792
905
  * -------------------------------------------------------------------- */
793
906
 
794
907
  .pm-controls {
795
908
  position: sticky;
796
- top: 3.25rem; /* below the sticky nav.tabs */
909
+ top: 3rem;
797
910
  z-index: 5;
798
911
  display: flex;
799
912
  flex-wrap: wrap;
@@ -801,20 +914,20 @@ body.rcf-scoped #rcf-live-content [data-doc-id].rcf-in-scope.rcf-customised {
801
914
  gap: 0.75rem 1rem;
802
915
  padding: 0.6rem 0.9rem;
803
916
  margin: 0 0 1.1rem;
804
- background: rgba(253, 253, 253, 0.9);
805
- backdrop-filter: saturate(180%) blur(8px);
806
- -webkit-backdrop-filter: saturate(180%) blur(8px);
807
- border: 1px solid var(--colour-border);
917
+ background: var(--sv-surface);
918
+ border: 1px solid var(--sv-border);
808
919
  border-radius: var(--radius-md);
809
920
  box-shadow: var(--shadow-sm);
810
921
  }
811
922
 
923
+ html[data-embed="1"] .pm-controls { top: 3rem; }
924
+
812
925
  .pm-group-tabs {
813
926
  display: inline-flex;
814
927
  gap: 0.15rem;
815
928
  padding: 0.2rem;
816
- background: var(--colour-surface);
817
- border: 1px solid var(--colour-border);
929
+ background: var(--sv-raised);
930
+ border: 1px solid var(--sv-border);
818
931
  border-radius: var(--radius-md);
819
932
  }
820
933
 
@@ -822,7 +935,7 @@ body.rcf-scoped #rcf-live-content [data-doc-id].rcf-in-scope.rcf-customised {
822
935
  appearance: none;
823
936
  border: 1px solid transparent;
824
937
  background: transparent;
825
- color: var(--colour-muted);
938
+ color: var(--sv-muted);
826
939
  font-family: inherit;
827
940
  font-size: 0.9rem;
828
941
  font-weight: 500;
@@ -833,52 +946,42 @@ body.rcf-scoped #rcf-live-content [data-doc-id].rcf-in-scope.rcf-customised {
833
946
  }
834
947
 
835
948
  .pm-group-btn:hover {
836
- color: var(--colour-heading);
837
- background: var(--colour-bg);
949
+ color: var(--sv-ink);
950
+ background: var(--sv-surface);
838
951
  }
839
952
 
840
953
  .pm-group-btn[aria-selected="true"] {
841
- background: var(--colour-bg);
842
- color: var(--colour-heading);
954
+ background: var(--sv-surface);
955
+ color: var(--sv-ink);
843
956
  font-weight: 600;
844
957
  box-shadow: var(--shadow-sm);
845
- border-color: var(--colour-border);
846
- }
847
-
848
- .pm-group-btn:focus-visible {
849
- outline: 2px solid var(--colour-accent);
850
- outline-offset: 2px;
958
+ border-color: var(--sv-border);
851
959
  }
852
960
 
853
961
  .pm-status-filter {
854
962
  display: inline-flex;
855
963
  align-items: center;
856
964
  gap: 0.5rem;
857
- color: var(--colour-muted);
965
+ color: var(--sv-muted);
858
966
  font-size: 0.85rem;
859
967
  }
860
968
 
861
969
  .pm-status-select {
862
970
  appearance: none;
863
971
  -webkit-appearance: none;
864
- border: 1px solid var(--colour-border);
972
+ border: 1px solid var(--sv-control);
865
973
  border-radius: var(--radius-sm);
866
- background: var(--colour-bg);
974
+ background: var(--sv-surface);
867
975
  padding: 0.35rem 2rem 0.35rem 0.75rem;
868
976
  font-family: inherit;
869
977
  font-size: 0.9rem;
870
- color: var(--colour-heading);
978
+ color: var(--sv-ink);
871
979
  cursor: pointer;
872
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12'%3E%3Cpath fill='%236b7280' d='M2 4l4 4 4-4z'/%3E%3C/svg%3E");
980
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12'%3E%3Cpath fill='%23738198' d='M2 4l4 4 4-4z'/%3E%3C/svg%3E");
873
981
  background-repeat: no-repeat;
874
982
  background-position: right 0.55rem center;
875
983
  }
876
984
 
877
- .pm-status-select:focus-visible {
878
- outline: 2px solid var(--colour-accent);
879
- outline-offset: 2px;
880
- }
881
-
882
985
  .pm-bulk {
883
986
  display: inline-flex;
884
987
  gap: 0.4rem;
@@ -887,9 +990,9 @@ body.rcf-scoped #rcf-live-content [data-doc-id].rcf-in-scope.rcf-customised {
887
990
 
888
991
  .pm-bulk-btn {
889
992
  appearance: none;
890
- border: 1px solid var(--colour-border);
891
- background: var(--colour-bg);
892
- color: var(--colour-muted);
993
+ border: 1px solid var(--sv-border);
994
+ background: var(--sv-surface);
995
+ color: var(--sv-muted);
893
996
  font-family: inherit;
894
997
  font-size: 0.8rem;
895
998
  font-weight: 500;
@@ -900,18 +1003,17 @@ body.rcf-scoped #rcf-live-content [data-doc-id].rcf-in-scope.rcf-customised {
900
1003
  }
901
1004
 
902
1005
  .pm-bulk-btn:hover {
903
- color: var(--colour-heading);
904
- background: var(--colour-accent-subtle);
905
- border-color: var(--colour-accent-subtle);
1006
+ color: var(--sv-ink);
1007
+ background: var(--sv-active);
1008
+ border-color: var(--sv-link);
906
1009
  }
907
1010
 
908
- /* Grouping heading and jump nav */
909
1011
  .pm-group-heading {
910
1012
  font-size: 0.8rem;
911
1013
  font-weight: 600;
912
1014
  text-transform: uppercase;
913
1015
  letter-spacing: 0.06em;
914
- color: var(--colour-muted);
1016
+ color: var(--sv-muted);
915
1017
  margin: 0.5rem 0 0.75rem;
916
1018
  }
917
1019
 
@@ -921,16 +1023,16 @@ body.rcf-scoped #rcf-live-content [data-doc-id].rcf-in-scope.rcf-customised {
921
1023
  gap: 0.35rem;
922
1024
  padding: 0.55rem 0.7rem;
923
1025
  margin-bottom: 1rem;
924
- background: var(--colour-surface);
925
- border: 1px solid var(--colour-border);
1026
+ background: var(--sv-raised);
1027
+ border: 1px solid var(--sv-border);
926
1028
  border-radius: var(--radius-md);
927
1029
  }
928
1030
 
929
1031
  .pm-jump-chip {
930
1032
  appearance: none;
931
- border: 1px solid var(--colour-border);
932
- background: var(--colour-bg);
933
- color: var(--colour-heading);
1033
+ border: 1px solid var(--sv-border);
1034
+ background: var(--sv-surface);
1035
+ color: var(--sv-ink);
934
1036
  padding: 0.25rem 0.65rem;
935
1037
  border-radius: 999px;
936
1038
  font-family: inherit;
@@ -945,9 +1047,9 @@ body.rcf-scoped #rcf-live-content [data-doc-id].rcf-in-scope.rcf-customised {
945
1047
  }
946
1048
 
947
1049
  .pm-jump-chip:hover {
948
- background: var(--colour-accent-subtle);
949
- border-color: #c7d2fe;
950
- color: var(--colour-accent-hover);
1050
+ background: var(--sv-active);
1051
+ border-color: var(--sv-link);
1052
+ color: var(--sv-hover);
951
1053
  }
952
1054
 
953
1055
  .pm-jump-chip .pm-jump-label {
@@ -957,27 +1059,21 @@ body.rcf-scoped #rcf-live-content [data-doc-id].rcf-in-scope.rcf-customised {
957
1059
  }
958
1060
 
959
1061
  .pm-jump-chip .pm-jump-count {
960
- color: var(--colour-muted);
1062
+ color: var(--sv-muted);
961
1063
  font-variant-numeric: tabular-nums;
962
1064
  font-size: 0.75rem;
963
1065
  }
964
1066
 
965
- .pm-jump-chip:focus-visible {
966
- outline: 2px solid var(--colour-accent);
967
- outline-offset: 2px;
968
- }
969
-
970
- /* Buckets: <details class="pm-bucket"> */
971
1067
  details.pm-bucket {
972
- border: 1px solid var(--colour-border);
1068
+ border: 1px solid var(--sv-border);
973
1069
  border-radius: var(--radius-md);
974
- background: var(--colour-bg);
1070
+ background: var(--sv-surface);
975
1071
  box-shadow: var(--shadow-sm);
976
1072
  margin-bottom: 0.6rem;
977
1073
  transition: box-shadow var(--t-med), border-color var(--t-med);
978
1074
  }
979
1075
 
980
- details.pm-bucket:hover { border-color: var(--colour-border-strong); }
1076
+ details.pm-bucket:hover { border-color: var(--sv-control); }
981
1077
  details.pm-bucket[open] { box-shadow: var(--shadow-md); }
982
1078
 
983
1079
  details.pm-bucket > summary.pm-bucket-heading {
@@ -988,33 +1084,30 @@ details.pm-bucket > summary.pm-bucket-heading {
988
1084
  align-items: center;
989
1085
  gap: 0.65rem;
990
1086
  border-radius: var(--radius-md);
991
- color: var(--colour-heading);
1087
+ color: var(--sv-ink);
992
1088
  font-weight: 600;
993
1089
  font-size: 0.95rem;
994
1090
  }
995
1091
 
996
1092
  details.pm-bucket > summary.pm-bucket-heading::-webkit-details-marker { display: none; }
997
1093
 
998
- /* Custom chevron matching the doc-details drilldowns */
999
1094
  details.pm-bucket > summary.pm-bucket-heading::before {
1000
1095
  content: '';
1001
1096
  display: inline-block;
1002
1097
  width: 0.6rem;
1003
1098
  height: 0.6rem;
1004
- border-right: 2px solid var(--colour-muted);
1005
- border-bottom: 2px solid var(--colour-muted);
1099
+ border-right: 2px solid var(--sv-control);
1100
+ border-bottom: 2px solid var(--sv-control);
1006
1101
  transform: rotate(-45deg);
1007
1102
  transition: transform var(--t-fast);
1008
1103
  flex-shrink: 0;
1009
1104
  }
1010
1105
 
1011
- details.pm-bucket[open] > summary.pm-bucket-heading::before {
1012
- transform: rotate(45deg);
1013
- }
1106
+ details.pm-bucket[open] > summary.pm-bucket-heading::before { transform: rotate(45deg); }
1014
1107
 
1015
1108
  details.pm-bucket[open] > summary.pm-bucket-heading {
1016
1109
  border-radius: var(--radius-md) var(--radius-md) 0 0;
1017
- border-bottom: 1px solid var(--colour-border);
1110
+ border-bottom: 1px solid var(--sv-border);
1018
1111
  }
1019
1112
 
1020
1113
  .pm-bucket-label {
@@ -1026,14 +1119,12 @@ details.pm-bucket[open] > summary.pm-bucket-heading {
1026
1119
  }
1027
1120
 
1028
1121
  .pm-bucket-count {
1029
- color: var(--colour-muted);
1122
+ color: var(--sv-muted);
1030
1123
  font-weight: 500;
1031
1124
  font-variant-numeric: tabular-nums;
1032
1125
  }
1033
1126
 
1034
- .pm-bucket-anchor {
1035
- display: none;
1036
- }
1127
+ .pm-bucket-anchor { display: none; }
1037
1128
 
1038
1129
  .pm-mini-row {
1039
1130
  display: inline-flex;
@@ -1050,38 +1141,32 @@ details.pm-bucket[open] > summary.pm-bucket-heading {
1050
1141
  font-size: 0.72rem;
1051
1142
  font-weight: 600;
1052
1143
  text-align: center;
1053
- color: var(--colour-muted);
1054
- background: var(--colour-surface-2);
1055
- border: 1px solid var(--colour-border);
1144
+ color: var(--sv-muted);
1145
+ background: var(--sv-raised);
1146
+ border: 1px solid var(--sv-border);
1056
1147
  font-variant-numeric: tabular-nums;
1057
1148
  }
1058
1149
 
1059
- .pm-mini-approved { color: #065f46; background: #d1fae5; border-color: #a7f3d0; }
1060
- .pm-mini-review { color: #0c4a6e; background: #e0f2fe; border-color: #bae6fd; }
1061
- .pm-mini-draft { color: var(--colour-muted); background: var(--colour-surface); border-color: var(--colour-border); }
1062
- .pm-mini-needsRevision { color: var(--colour-broken-text); background: var(--colour-broken-bg); border-color: var(--colour-broken-border); }
1063
- .pm-mini-superseded { color: var(--colour-subtle); background: var(--colour-surface); border-color: var(--colour-border); }
1064
-
1065
- .pm-bucket-body {
1066
- padding: 0.75rem 1rem 1rem;
1067
- }
1150
+ .pm-mini-approved { color: var(--sv-success); background: var(--sv-successbg); border-color: var(--sv-success); }
1151
+ .pm-mini-review { color: var(--sv-link); background: var(--sv-active); border-color: var(--sv-link); }
1152
+ .pm-mini-draft { color: var(--sv-muted); background: var(--sv-raised); border-color: var(--sv-border); }
1153
+ .pm-mini-needsRevision { color: var(--sv-danger); background: var(--sv-dangerbg); border-color: var(--sv-danger); }
1154
+ .pm-mini-superseded { color: var(--sv-control); background: var(--sv-raised); border-color: var(--sv-border); }
1068
1155
 
1156
+ .pm-bucket-body { padding: 0.75rem 1rem 1rem; }
1069
1157
  .pm-bucket-body .pm-tad-root { margin-bottom: 0.65rem; }
1070
1158
 
1071
1159
  .pm-bucket-empty {
1072
- color: var(--colour-muted);
1160
+ color: var(--sv-muted);
1073
1161
  font-size: 0.85rem;
1074
1162
  }
1075
1163
 
1076
- /* Empty-under-filter rollup */
1077
- .pm-empty-roll {
1078
- margin-bottom: 0.75rem;
1079
- }
1164
+ .pm-empty-roll { margin-bottom: 0.75rem; }
1080
1165
  .pm-empty-toggle {
1081
1166
  appearance: none;
1082
- border: 1px dashed var(--colour-border-strong);
1083
- background: var(--colour-surface);
1084
- color: var(--colour-muted);
1167
+ border: 1px dashed var(--sv-control);
1168
+ background: var(--sv-raised);
1169
+ color: var(--sv-muted);
1085
1170
  padding: 0.4rem 0.8rem;
1086
1171
  border-radius: var(--radius-sm);
1087
1172
  font-family: inherit;
@@ -1090,28 +1175,22 @@ details.pm-bucket[open] > summary.pm-bucket-heading {
1090
1175
  cursor: pointer;
1091
1176
  }
1092
1177
  .pm-empty-toggle:hover {
1093
- color: var(--colour-heading);
1094
- background: var(--colour-accent-subtle);
1178
+ color: var(--sv-ink);
1179
+ background: var(--sv-active);
1095
1180
  }
1096
1181
 
1097
- /* When active grouping is in hide-empty mode, hide empty buckets */
1098
- .pm-group.pm-hide-empty details.pm-bucket[data-pm-empty-under-filter="true"] {
1099
- display: none;
1100
- }
1182
+ .pm-group.pm-hide-empty details.pm-bucket[data-pm-empty-under-filter="true"] { display: none; }
1101
1183
 
1102
- /* Loading state */
1103
1184
  .pm-group[data-pm-loading="true"] .pm-jump-nav::after {
1104
1185
  content: 'Loading grouping...';
1105
- color: var(--colour-muted);
1186
+ color: var(--sv-muted);
1106
1187
  font-size: 0.8rem;
1107
1188
  margin-left: 0.5rem;
1108
1189
  }
1109
1190
 
1110
- /* Compact spacing for nested pm-req cards inside a bucket body */
1111
1191
  .pm-bucket-body details.doc-req-wrap.pm-req { margin-bottom: 0.5rem; }
1112
1192
  .pm-bucket-body .pm-comp-story details.doc-us-wrap.pm-us { margin-bottom: 0.5rem; }
1113
1193
 
1114
- /* Print: reveal every bucket */
1115
1194
  @media print {
1116
1195
  details.pm-bucket { break-inside: avoid; box-shadow: none; }
1117
1196
  details.pm-bucket[open] > summary.pm-bucket-heading { border-bottom: none; }
@@ -1119,10 +1198,6 @@ details.pm-bucket[open] > summary.pm-bucket-heading {
1119
1198
  .pm-jump-nav { display: none; }
1120
1199
  }
1121
1200
 
1122
- /* Blueprint badge (AC-17008-1). Rendered inside every pm-req summary
1123
- whose REQ came from an applied blueprint, and inside pm-req-parent
1124
- lines. Compact, low-contrast pill so it reads as attribution rather
1125
- than status. */
1126
1201
  .pm-blueprint-badge {
1127
1202
  display: inline-block;
1128
1203
  margin-left: 0.4rem;
@@ -1130,31 +1205,1591 @@ details.pm-bucket[open] > summary.pm-bucket-heading {
1130
1205
  border-radius: 999px;
1131
1206
  font-size: 0.68rem;
1132
1207
  font-weight: 600;
1133
- color: var(--colour-muted);
1134
- background: var(--colour-surface-2);
1135
- border: 1px solid var(--colour-border);
1208
+ color: var(--sv-muted);
1209
+ background: var(--sv-raised);
1210
+ border: 1px solid var(--sv-border);
1136
1211
  font-variant-numeric: tabular-nums;
1137
1212
  letter-spacing: 0.01em;
1138
1213
  vertical-align: baseline;
1139
1214
  text-transform: none;
1140
1215
  }
1141
1216
 
1142
- .pm-blueprint-cap {
1143
- margin: 0.85rem 0 0.25rem;
1144
- }
1217
+ .pm-blueprint-cap { margin: 0.85rem 0 0.25rem; }
1145
1218
  .pm-blueprint-cap-heading {
1146
1219
  margin: 0 0 0.35rem;
1147
1220
  font-size: 0.85rem;
1148
1221
  font-weight: 600;
1149
- color: var(--colour-muted);
1222
+ color: var(--sv-muted);
1150
1223
  text-transform: uppercase;
1151
1224
  letter-spacing: 0.03em;
1152
1225
  }
1153
1226
  .pm-blueprint-cap-count {
1154
1227
  font-weight: 500;
1155
- color: var(--colour-subtle);
1228
+ color: var(--sv-control);
1156
1229
  margin-left: 0.25rem;
1157
1230
  }
1158
- .pm-blueprint-cap-body {
1159
- display: block;
1231
+ .pm-blueprint-cap-body { display: block; }
1232
+
1233
+ /* --------------------------------------------------------------------
1234
+ * Viewer UI refresh PR 2 (w-2026-10-02-dave-010): shared component
1235
+ * stylesheet. Mounted alongside the pre-existing selectors so each
1236
+ * component (DocRow, FilterBar, Badge, EmptyState, Toast, SubTabStrip)
1237
+ * can be mounted by later tabs without touching the base rules.
1238
+ * Compact density is a requirement, not a default - the paddings here
1239
+ * are deliberately tighter than the pre-PR-1 shell (decision 13).
1240
+ * -------------------------------------------------------------------- */
1241
+
1242
+ /* DocRow (replaces details.doc-details under the new component model;
1243
+ old and new coexist until each tab is cut over, PRs 3-6). */
1244
+ details.rcf-row {
1245
+ background: var(--sv-surface);
1246
+ border: 1px solid var(--sv-border);
1247
+ border-radius: var(--radius-md);
1248
+ margin-bottom: 0.4rem;
1249
+ box-shadow: var(--shadow-sm);
1250
+ transition: box-shadow var(--t-med), border-color var(--t-med);
1251
+ }
1252
+
1253
+ details.rcf-row:hover { border-color: var(--sv-control); }
1254
+ details.rcf-row[open] { box-shadow: var(--shadow-md); }
1255
+ details.rcf-row[hidden] { display: none; }
1256
+
1257
+ details.rcf-row > summary {
1258
+ list-style: none;
1259
+ cursor: pointer;
1260
+ padding: 0.55rem 0.75rem;
1261
+ display: flex;
1262
+ align-items: center;
1263
+ gap: 0.6rem;
1264
+ border-radius: var(--radius-md);
1265
+ color: var(--sv-ink);
1266
+ font-weight: 500;
1267
+ transition: background var(--t-fast);
1268
+ }
1269
+
1270
+ details.rcf-row > summary::-webkit-details-marker { display: none; }
1271
+
1272
+ details.rcf-row > summary::before {
1273
+ content: '';
1274
+ display: inline-block;
1275
+ width: 0.45rem;
1276
+ height: 0.45rem;
1277
+ border-right: 2px solid var(--sv-control);
1278
+ border-bottom: 2px solid var(--sv-control);
1279
+ transform: rotate(-45deg);
1280
+ transition: transform var(--t-fast);
1281
+ flex-shrink: 0;
1282
+ }
1283
+
1284
+ details.rcf-row[open] > summary::before { transform: rotate(45deg); }
1285
+
1286
+ details.rcf-row > summary:hover { background: var(--sv-raised); }
1287
+
1288
+ details.rcf-row > summary .id {
1289
+ font-family: var(--sv-mono);
1290
+ font-size: 0.85rem;
1291
+ color: var(--sv-link);
1292
+ flex-shrink: 0;
1293
+ }
1294
+
1295
+ details.rcf-row > summary .title {
1296
+ flex: 1 1 auto;
1297
+ min-width: 0;
1298
+ overflow: hidden;
1299
+ text-overflow: ellipsis;
1300
+ white-space: nowrap;
1301
+ }
1302
+
1303
+ details.rcf-row > summary .meta {
1304
+ display: flex;
1305
+ flex-wrap: wrap;
1306
+ gap: 0.3rem;
1307
+ align-items: center;
1308
+ flex-shrink: 0;
1309
+ margin-left: auto;
1310
+ }
1311
+
1312
+ details.rcf-row[open] > summary {
1313
+ border-radius: var(--radius-md) var(--radius-md) 0 0;
1314
+ border-bottom: 1px solid var(--sv-border);
1315
+ }
1316
+
1317
+ details.rcf-row > .rcf-row-body {
1318
+ padding: 0.65rem 0.9rem 0.85rem 1.95rem;
1319
+ }
1320
+
1321
+ details.rcf-row > .rcf-row-body > p:first-child { margin-top: 0; }
1322
+ details.rcf-row > .rcf-row-body > p:last-child { margin-bottom: 0; }
1323
+
1324
+ /* Badge: count / facet / accent variants. */
1325
+ .rcf-badge {
1326
+ display: inline-flex;
1327
+ align-items: baseline;
1328
+ gap: 0.3rem;
1329
+ padding: 0 0.5rem;
1330
+ min-height: 1.1rem;
1331
+ border-radius: 0.3rem;
1332
+ font-size: 0.72rem;
1333
+ font-weight: 700;
1334
+ border: 1px solid var(--sv-border);
1335
+ background: var(--sv-raised);
1336
+ color: var(--sv-muted);
1337
+ white-space: nowrap;
1338
+ font-variant-numeric: tabular-nums;
1339
+ line-height: 1.4;
1340
+ }
1341
+
1342
+ .rcf-badge .rcf-badge-label {
1343
+ color: var(--sv-muted);
1344
+ font-weight: 500;
1345
+ text-transform: uppercase;
1346
+ letter-spacing: 0.04em;
1347
+ font-size: 0.65rem;
1348
+ }
1349
+
1350
+ .rcf-badge .rcf-badge-value {
1351
+ color: var(--sv-ink);
1352
+ }
1353
+
1354
+ .rcf-badge--facet {
1355
+ background: var(--sv-raised);
1356
+ color: var(--sv-ink);
1357
+ border-color: var(--sv-border);
1358
+ }
1359
+
1360
+ .rcf-badge--facet .rcf-badge-value {
1361
+ color: var(--sv-ink);
1362
+ font-weight: 600;
1363
+ }
1364
+
1365
+ .rcf-badge--accent {
1366
+ background: var(--sv-active);
1367
+ border-color: var(--sv-link);
1368
+ color: var(--sv-link);
1369
+ }
1370
+
1371
+ .rcf-badge--accent .rcf-badge-label { color: var(--sv-link); }
1372
+ .rcf-badge--accent .rcf-badge-value { color: var(--sv-link); }
1373
+
1374
+ /* FilterBar: sticky under the tabstrip, inline controls with a right-
1375
+ hand live count and an Expand all affordance. */
1376
+ .rcf-filterbar {
1377
+ display: flex;
1378
+ flex-wrap: wrap;
1379
+ gap: 0.5rem 0.75rem;
1380
+ align-items: center;
1381
+ padding: 0.55rem 0.75rem;
1382
+ margin: 0 0 0.75rem;
1383
+ background: var(--sv-surface);
1384
+ border: 1px solid var(--sv-border);
1385
+ border-radius: var(--radius-md);
1386
+ position: sticky;
1387
+ top: 3rem;
1388
+ z-index: 10;
1389
+ box-shadow: var(--shadow-sm);
1390
+ }
1391
+
1392
+ .rcf-filterbar .rcf-filter-text {
1393
+ flex: 1 1 16rem;
1394
+ min-width: 10rem;
1395
+ min-height: 2.1rem;
1396
+ padding: 0 0.55rem;
1397
+ border: 1px solid var(--sv-control);
1398
+ border-radius: var(--radius-sm);
1399
+ background: var(--sv-surface);
1400
+ color: var(--sv-ink);
1401
+ font: inherit;
1402
+ }
1403
+
1404
+ .rcf-filterbar .rcf-filter-label {
1405
+ display: inline-flex;
1406
+ gap: 0.4rem;
1407
+ align-items: center;
1408
+ color: var(--sv-muted);
1409
+ font-size: 0.85rem;
1410
+ white-space: nowrap;
1411
+ }
1412
+
1413
+ .rcf-filterbar .rcf-filter-select {
1414
+ min-height: 2.1rem;
1415
+ padding: 0 0.5rem;
1416
+ border: 1px solid var(--sv-control);
1417
+ border-radius: var(--radius-sm);
1418
+ background: var(--sv-surface);
1419
+ color: var(--sv-ink);
1420
+ font: inherit;
1421
+ }
1422
+
1423
+ .rcf-filterbar .rcf-filter-toggle {
1424
+ display: inline-flex;
1425
+ align-items: center;
1426
+ gap: 0.35rem;
1427
+ color: var(--sv-muted);
1428
+ font-size: 0.85rem;
1429
+ white-space: nowrap;
1430
+ }
1431
+
1432
+ .rcf-filterbar .rcf-filter-toggle input {
1433
+ margin: 0;
1434
+ accent-color: var(--sv-link);
1435
+ }
1436
+
1437
+ .rcf-filterbar .rcf-filter-count {
1438
+ margin-left: auto;
1439
+ color: var(--sv-muted);
1440
+ font-size: 0.85rem;
1441
+ font-variant-numeric: tabular-nums;
1442
+ white-space: nowrap;
1443
+ }
1444
+
1445
+ .rcf-filterbar .rcf-filter-expand {
1446
+ appearance: none;
1447
+ background: none;
1448
+ border: 0;
1449
+ padding: 0;
1450
+ color: var(--sv-link);
1451
+ cursor: pointer;
1452
+ font: inherit;
1453
+ font-size: 0.85rem;
1454
+ text-decoration: underline;
1455
+ text-underline-offset: 2px;
1456
+ }
1457
+
1458
+ .rcf-filterbar .rcf-filter-expand:hover { color: var(--sv-hover); }
1459
+
1460
+ html[data-embed="1"] .rcf-filterbar { top: 2.75rem; }
1461
+
1462
+ /* EmptyState: dashed outline, centred muted text. */
1463
+ .rcf-empty-state {
1464
+ padding: 1rem;
1465
+ border: 1px dashed var(--sv-control);
1466
+ border-radius: var(--radius-md);
1467
+ color: var(--sv-muted);
1468
+ text-align: center;
1469
+ background: var(--sv-raised);
1470
+ }
1471
+
1472
+ .rcf-empty-state .rcf-empty-state-title {
1473
+ margin: 0;
1474
+ font-weight: 600;
1475
+ color: var(--sv-ink);
1476
+ }
1477
+
1478
+ .rcf-empty-state .rcf-empty-state-hint {
1479
+ margin: 0.3rem 0 0;
1480
+ font-size: 0.9rem;
1481
+ }
1482
+
1483
+ .rcf-empty-state .rcf-empty-state-action {
1484
+ margin: 0.5rem 0 0;
1485
+ font-size: 0.85rem;
1486
+ color: var(--sv-ink);
1487
+ }
1488
+
1489
+ .rcf-empty-state .rcf-empty-state-action code {
1490
+ background: var(--sv-surface);
1491
+ }
1492
+
1493
+ /* Toast: shell-mounted container, bottom-centre, opacity-fades. */
1494
+ .rcf-toast {
1495
+ position: fixed;
1496
+ left: 50%;
1497
+ bottom: 1.5rem;
1498
+ transform: translateX(-50%);
1499
+ background: var(--sv-ink);
1500
+ color: var(--sv-canvas);
1501
+ padding: 0.55rem 1rem;
1502
+ border-radius: var(--radius-sm);
1503
+ font-size: 0.85rem;
1504
+ box-shadow: var(--shadow-md);
1505
+ opacity: 0;
1506
+ transition: opacity 0.15s ease;
1507
+ pointer-events: none;
1508
+ max-width: 90vw;
1509
+ z-index: 50;
1510
+ }
1511
+
1512
+ .rcf-toast.show { opacity: 1; }
1513
+
1514
+ /* SubTabStrip: chip-like row under a tab heading. */
1515
+ .rcf-subtabs {
1516
+ display: flex;
1517
+ gap: 0.25rem;
1518
+ border-bottom: 1px solid var(--sv-border);
1519
+ margin: 0 0 1rem;
1520
+ }
1521
+
1522
+ .rcf-subtabs button {
1523
+ appearance: none;
1524
+ background: transparent;
1525
+ border: 0;
1526
+ padding: 0.45rem 0.9rem;
1527
+ color: var(--sv-muted);
1528
+ font: inherit;
1529
+ font-size: 0.95rem;
1530
+ font-weight: 500;
1531
+ cursor: pointer;
1532
+ border-bottom: 2px solid transparent;
1533
+ margin-bottom: -1px;
1534
+ transition: color var(--t-fast), border-color var(--t-fast), background var(--t-fast);
1535
+ }
1536
+
1537
+ .rcf-subtabs button:hover {
1538
+ color: var(--sv-ink);
1539
+ background: var(--sv-raised);
1540
+ }
1541
+
1542
+ .rcf-subtabs button[aria-selected="true"] {
1543
+ color: var(--sv-ink);
1544
+ font-weight: 700;
1545
+ border-bottom-color: var(--sv-link);
1546
+ }
1547
+
1548
+ .rcf-subtabs button:focus-visible {
1549
+ outline: 3px solid var(--sv-focus);
1550
+ outline-offset: -3px;
1551
+ }
1552
+
1553
+ /* Decision 17: when the tree carries no project name, the .product
1554
+ block collapses to nothing and the brand icon is on its own. */
1555
+ .product:empty { display: none; }
1556
+
1557
+ /* -----------------------------------------------------------------
1558
+ Viewer UI refresh PR 3: Requirements tab and PRD EntitySelector
1559
+ ----------------------------------------------------------------- */
1560
+
1561
+ /* The Requirements list column: tighter spacing than the generic
1562
+ doc-details so a long list stays scannable. */
1563
+ .rcf-requirements-list { display: block; }
1564
+ .rcf-requirements-list > details.rcf-row { margin-bottom: 0.4rem; }
1565
+
1566
+ /* "Needs work" marker on a REQ row: accent border on the left so it
1567
+ stands out in the long list without screaming. */
1568
+ details.rcf-row.needs-work { border-left: 3px solid var(--sv-warning); }
1569
+ details.rcf-row.needs-work > summary .rcf-badge--accent { color: var(--sv-warning); border-color: var(--sv-warning); }
1570
+
1571
+ .rcf-req-description { margin-top: 0.4rem; }
1572
+ .rcf-req-rationale { font-size: 0.9rem; }
1573
+ .rcf-req-tags { display: flex; flex-wrap: wrap; gap: 0.25rem; margin: 0.5rem 0; }
1574
+ .rcf-req-needswork {
1575
+ padding: 0.4rem 0.6rem;
1576
+ border-left: 3px solid var(--sv-warning);
1577
+ background: var(--sv-warningbg);
1578
+ color: var(--sv-warning);
1579
+ border-radius: var(--radius-sm);
1580
+ margin: 0.4rem 0 0.6rem;
1581
+ font-size: 0.9rem;
1582
+ }
1583
+
1584
+ .rcf-req-stories { margin-top: 0.9rem; }
1585
+ .rcf-req-stories > h4 {
1586
+ margin: 0 0 0.4rem;
1587
+ color: var(--sv-muted);
1588
+ font-size: 0.8rem;
1589
+ text-transform: uppercase;
1590
+ letter-spacing: 0.05em;
1591
+ }
1592
+
1593
+ /* Inner rows (user stories nested under a REQ): slightly recessed. */
1594
+ details.rcf-row.rcf-row--inner {
1595
+ background: var(--sv-canvas);
1596
+ border-color: var(--sv-border);
1597
+ margin-bottom: 0.3rem;
1598
+ }
1599
+ details.rcf-row.rcf-row--inner > summary { padding: 0.4rem 0.6rem; }
1600
+
1601
+ /* Collapsed slice diagram and raw JSON disclosures on a REQ row. */
1602
+ .rcf-req-slice, .rcf-req-raw {
1603
+ margin: 0.6rem 0 0;
1604
+ border: 1px solid var(--sv-border);
1605
+ border-radius: var(--radius-sm);
1606
+ background: var(--sv-canvas);
1607
+ }
1608
+ .rcf-req-slice > summary, .rcf-req-raw > summary {
1609
+ padding: 0.4rem 0.6rem;
1610
+ cursor: pointer;
1611
+ color: var(--sv-muted);
1612
+ font-size: 0.85rem;
1613
+ }
1614
+ .rcf-req-slice-body { padding: 0.5rem 0.75rem 0.75rem; }
1615
+ .rcf-req-raw > pre { padding: 0.6rem 0.75rem; margin: 0; overflow: auto; }
1616
+
1617
+ /* PRD tab (viewer UI refresh PR 3): the five lists collapsed, each
1618
+ with a count badge; EntitySelector sits below the article. */
1619
+ .rcf-prd-list {
1620
+ margin: 0.4rem 0;
1621
+ padding: 0;
1622
+ background: var(--sv-canvas);
1623
+ border: 1px solid var(--sv-border);
1624
+ border-radius: var(--radius-sm);
1625
+ }
1626
+ .rcf-prd-list > summary {
1627
+ list-style: none;
1628
+ display: flex;
1629
+ align-items: center;
1630
+ gap: 0.5rem;
1631
+ padding: 0.5rem 0.75rem;
1632
+ cursor: pointer;
1633
+ }
1634
+ .rcf-prd-list > summary::-webkit-details-marker { display: none; }
1635
+ .rcf-prd-list > summary::before {
1636
+ content: "";
1637
+ width: 0.4rem;
1638
+ height: 0.4rem;
1639
+ border-right: 2px solid var(--sv-control);
1640
+ border-bottom: 2px solid var(--sv-control);
1641
+ transform: rotate(-45deg);
1642
+ transition: transform 0.12s;
1643
+ flex: none;
1644
+ }
1645
+ .rcf-prd-list[open] > summary::before { transform: rotate(45deg); }
1646
+ .rcf-prd-list > summary:hover { background: var(--sv-raised); }
1647
+ .rcf-prd-list-body { padding: 0.25rem 1.25rem 0.75rem; }
1648
+ .rcf-prd-list-body ul { margin: 0.3rem 0; padding-left: 1.1rem; }
1649
+
1650
+ .rcf-prd-requirements {
1651
+ margin-top: 1rem;
1652
+ padding: 0.75rem;
1653
+ background: var(--sv-surface);
1654
+ border: 1px solid var(--sv-border);
1655
+ border-radius: var(--radius-md);
1656
+ }
1657
+ .rcf-prd-requirements-head {
1658
+ display: flex;
1659
+ align-items: baseline;
1660
+ gap: 0.75rem;
1661
+ flex-wrap: wrap;
1662
+ margin-bottom: 0.5rem;
1663
+ }
1664
+ .rcf-prd-requirements-head h3 { margin: 0; }
1665
+ .rcf-prd-requirements-open {
1666
+ margin-left: auto;
1667
+ color: var(--sv-link);
1668
+ text-decoration: none;
1669
+ font-size: 0.9rem;
1670
+ }
1671
+ .rcf-prd-requirements-open:hover { text-decoration: underline; }
1672
+
1673
+ /* EntitySelector itself: total line, type-ahead input + results pane,
1674
+ chip row of area facets. */
1675
+ .rcf-entity-selector {
1676
+ display: block;
1677
+ margin-top: 0.25rem;
1678
+ }
1679
+ .rcf-entity-selector-head {
1680
+ display: flex;
1681
+ align-items: baseline;
1682
+ gap: 0.5rem;
1683
+ margin-bottom: 0.4rem;
1684
+ color: var(--sv-muted);
1685
+ font-size: 0.9rem;
1686
+ }
1687
+ .rcf-entity-selector-total { color: var(--sv-ink); font-weight: 600; }
1688
+ .rcf-entity-selector-jump {
1689
+ position: relative;
1690
+ margin-bottom: 0.5rem;
1691
+ }
1692
+ .rcf-entity-selector-input {
1693
+ width: 100%;
1694
+ min-height: 2.3rem;
1695
+ padding: 0 0.6rem;
1696
+ border: 1px solid var(--sv-control);
1697
+ border-radius: var(--radius-sm);
1698
+ background: var(--sv-surface);
1699
+ color: var(--sv-ink);
1700
+ font: inherit;
1701
+ }
1702
+ .rcf-entity-selector-results {
1703
+ position: absolute;
1704
+ left: 0;
1705
+ right: 0;
1706
+ top: 100%;
1707
+ z-index: 5;
1708
+ margin-top: 0.25rem;
1709
+ padding: 0.25rem;
1710
+ max-height: 20rem;
1711
+ overflow: auto;
1712
+ background: var(--sv-surface);
1713
+ border: 1px solid var(--sv-border);
1714
+ border-radius: var(--radius-sm);
1715
+ box-shadow: var(--shadow-md);
1716
+ }
1717
+ .rcf-entity-selector-result {
1718
+ display: flex;
1719
+ gap: 0.6rem;
1720
+ padding: 0.4rem 0.5rem;
1721
+ text-decoration: none;
1722
+ color: var(--sv-ink);
1723
+ border-radius: var(--radius-sm);
1724
+ }
1725
+ .rcf-entity-selector-result:hover { background: var(--sv-raised); }
1726
+ .rcf-entity-selector-result-id {
1727
+ color: var(--sv-link);
1728
+ font-family: var(--sv-mono, ui-monospace, monospace);
1729
+ font-size: 0.85rem;
1730
+ flex: none;
1731
+ }
1732
+ .rcf-entity-selector-result-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1733
+ .rcf-entity-selector-result-facet {
1734
+ color: var(--sv-muted);
1735
+ font-size: 0.8rem;
1736
+ }
1737
+ .rcf-entity-selector-empty { padding: 0.5rem 0.75rem; }
1738
+ .rcf-entity-selector-facets-lead { margin-bottom: 0.35rem; }
1739
+ .rcf-entity-selector-facets {
1740
+ display: flex;
1741
+ flex-wrap: wrap;
1742
+ gap: 0.35rem;
1743
+ }
1744
+ .rcf-entity-selector-chip {
1745
+ display: inline-flex;
1746
+ align-items: center;
1747
+ gap: 0.3rem;
1748
+ padding: 0.15rem 0.6rem;
1749
+ border-radius: 999px;
1750
+ border: 1px solid var(--sv-control);
1751
+ background: var(--sv-surface);
1752
+ color: var(--sv-ink);
1753
+ text-decoration: none;
1754
+ font-size: 0.8rem;
1755
+ }
1756
+ .rcf-entity-selector-chip:hover {
1757
+ background: var(--sv-active);
1758
+ border-color: var(--sv-link);
1759
+ color: var(--sv-link);
1760
+ }
1761
+ .rcf-entity-selector-chip .rcf-badge { background: transparent; }
1762
+ .rcf-entity-selector-chip:hover .rcf-badge-value { color: var(--sv-link); }
1763
+
1764
+ /* ---- Architecture tab (viewer UI refresh PR 4) --------------------- */
1765
+
1766
+ .rcf-architecture-head {
1767
+ display: flex;
1768
+ align-items: center;
1769
+ gap: 0.6rem;
1770
+ margin: 0 0 0.75rem 0;
1771
+ padding: 0.3rem 0;
1772
+ flex-wrap: wrap;
1773
+ }
1774
+ .rcf-architecture-head-id {
1775
+ font-weight: 600;
1776
+ color: var(--sv-ink);
1777
+ }
1778
+ .rcf-architecture-head-title {
1779
+ margin: 0;
1780
+ font-size: 1.1rem;
1781
+ }
1782
+
1783
+ .rcf-tad-group-heading,
1784
+ .rcf-architecture-components > .group-heading,
1785
+ .rcf-architecture-decisions > .group-heading {
1786
+ margin: 1.1rem 0 0.5rem 0;
1787
+ }
1788
+
1789
+ .rcf-tad-sections {
1790
+ display: flex;
1791
+ flex-direction: column;
1792
+ gap: 0.4rem;
1793
+ margin-bottom: 0.5rem;
1794
+ }
1795
+ .rcf-tad-section > summary {
1796
+ display: flex;
1797
+ align-items: baseline;
1798
+ gap: 0.5rem;
1799
+ }
1800
+ .rcf-tad-section > summary::before {
1801
+ flex: 0 0 auto;
1802
+ }
1803
+ .rcf-tad-section-title {
1804
+ display: inline-flex;
1805
+ flex-wrap: wrap;
1806
+ align-items: baseline;
1807
+ gap: 0.4rem;
1808
+ min-width: 0;
1809
+ flex: 1 1 auto;
1810
+ }
1811
+ .rcf-tad-section-title > strong {
1812
+ color: var(--sv-ink);
1813
+ }
1814
+ .rcf-tad-preview {
1815
+ color: var(--sv-muted);
1816
+ font-weight: 400;
1817
+ overflow: hidden;
1818
+ text-overflow: ellipsis;
1819
+ white-space: nowrap;
1820
+ max-width: min(60ch, 70vw);
1821
+ }
1822
+ .rcf-tad-section--empty .rcf-tad-preview {
1823
+ font-style: italic;
1824
+ }
1825
+ .rcf-tad-empty {
1826
+ color: var(--sv-muted);
1827
+ margin: 0;
1828
+ }
1829
+ .rcf-tad-empty-command {
1830
+ background: var(--sv-code);
1831
+ padding: 0.1rem 0.35rem;
1832
+ border-radius: var(--r);
1833
+ font-family: var(--sv-mono);
1834
+ font-size: 0.85em;
1835
+ word-break: break-all;
1836
+ }
1837
+ .rcf-tad-raw {
1838
+ margin: 0.6rem 0 1rem 0;
1839
+ }
1840
+ .rcf-tad-raw > summary {
1841
+ cursor: pointer;
1842
+ color: var(--sv-muted);
1843
+ }
1844
+ .rcf-tad-raw > pre {
1845
+ background: var(--sv-code);
1846
+ padding: 0.5rem;
1847
+ overflow: auto;
1848
+ max-height: 24rem;
1849
+ border-radius: var(--r);
1850
+ }
1851
+ .rcf-tad-anchor {
1852
+ display: inline-block;
1853
+ width: 0;
1854
+ height: 0;
1855
+ }
1856
+
1857
+ .rcf-arch-row > summary .id {
1858
+ font-family: var(--sv-mono);
1859
+ font-size: 0.85em;
1860
+ color: var(--sv-muted);
1861
+ max-width: 14ch;
1862
+ overflow: hidden;
1863
+ text-overflow: ellipsis;
1864
+ white-space: nowrap;
1865
+ }
1866
+ .rcf-tac-list,
1867
+ .rcf-adr-list {
1868
+ display: flex;
1869
+ flex-direction: column;
1870
+ gap: 0.35rem;
1871
+ }
1872
+ .rcf-architecture-components,
1873
+ .rcf-architecture-decisions {
1874
+ margin-top: 0.5rem;
1875
+ }
1876
+
1877
+ /* ---- Build tab (viewer UI refresh PR 5) --------------------------- */
1878
+
1879
+ .rcf-build-head {
1880
+ display: flex;
1881
+ align-items: baseline;
1882
+ flex-wrap: wrap;
1883
+ gap: 0.5rem;
1884
+ margin: 0 0 0.75rem 0;
1885
+ }
1886
+ .rcf-build-head-id {
1887
+ font-weight: 600;
1888
+ color: var(--sv-ink);
1889
+ }
1890
+
1891
+ .rcf-build-stats {
1892
+ margin: 0 0 1rem 0;
1893
+ }
1894
+ .rcf-build-stats-row {
1895
+ display: flex;
1896
+ flex-wrap: wrap;
1897
+ gap: 1.5rem;
1898
+ }
1899
+ .rcf-build-stat {
1900
+ display: flex;
1901
+ flex-direction: column;
1902
+ gap: 0.1rem;
1903
+ }
1904
+ .rcf-build-stat-n {
1905
+ font-size: 1.5rem;
1906
+ font-weight: 700;
1907
+ line-height: 1.1;
1908
+ color: var(--sv-ink);
1909
+ }
1910
+ .rcf-build-stat-l {
1911
+ color: var(--sv-muted);
1912
+ font-size: 0.8rem;
1913
+ }
1914
+ .rcf-build-progress {
1915
+ margin-top: 0.6rem;
1916
+ height: 0.5rem;
1917
+ background: var(--sv-raised);
1918
+ border-radius: 999px;
1919
+ overflow: hidden;
1920
+ display: flex;
1921
+ }
1922
+ .rcf-build-progress-seg {
1923
+ display: block;
1924
+ height: 100%;
1925
+ }
1926
+ .rcf-build-progress-seg--verified { background: var(--sv-success); }
1927
+ .rcf-build-progress-seg--complete { background: var(--sv-success); opacity: 0.6; }
1928
+ .rcf-build-progress-seg--inprogress { background: var(--sv-warning); }
1929
+
1930
+ .rcf-build-anchor {
1931
+ display: inline-block;
1932
+ width: 0;
1933
+ height: 0;
1934
+ }
1935
+
1936
+ .rcf-build-subpanel {
1937
+ margin-top: 0.2rem;
1938
+ }
1939
+ .rcf-build-subpanel[hidden] {
1940
+ display: none;
1941
+ }
1942
+
1943
+ .rcf-build-specs-list {
1944
+ display: flex;
1945
+ flex-direction: column;
1946
+ gap: 0.35rem;
1947
+ }
1948
+
1949
+ .rcf-build-row > summary .id {
1950
+ display: inline-flex;
1951
+ align-items: baseline;
1952
+ gap: 0.4rem;
1953
+ flex: none;
1954
+ }
1955
+ .rcf-spec-order {
1956
+ min-width: 1.6rem;
1957
+ text-align: right;
1958
+ color: var(--sv-muted);
1959
+ }
1960
+ .rcf-spec-id {
1961
+ color: var(--sv-link);
1962
+ }
1963
+
1964
+ .rcf-pill--build-queue {
1965
+ background: var(--sv-active);
1966
+ color: var(--sv-link);
1967
+ border-color: transparent;
1968
+ }
1969
+
1970
+ .rcf-spec-summary { margin: 0.4rem 0 0.6rem; }
1971
+ .rcf-spec-block { margin: 0.6rem 0 0; }
1972
+ .rcf-spec-block > h4 {
1973
+ margin: 0 0 0.3rem;
1974
+ color: var(--sv-muted);
1975
+ font-size: 0.8rem;
1976
+ text-transform: uppercase;
1977
+ letter-spacing: 0.05em;
1978
+ }
1979
+ .rcf-spec-block > p,
1980
+ .rcf-spec-block > ul { margin: 0.2rem 0; }
1981
+ .rcf-spec-link-row {
1982
+ font-size: 0.9rem;
1983
+ }
1984
+ .rcf-spec-deliverables,
1985
+ .rcf-spec-deps {
1986
+ margin: 0.3rem 0 0.3rem 1.2rem;
1987
+ padding: 0;
1988
+ font-size: 0.9rem;
1989
+ }
1990
+ .rcf-spec-deliverables > li,
1991
+ .rcf-spec-deps > li {
1992
+ margin: 0.1rem 0;
1993
+ }
1994
+ .rcf-spec-dag {
1995
+ margin: 0.8rem 0 0.2rem;
1996
+ font-size: 0.9rem;
1997
+ }
1998
+
1999
+ /* ---- Build / DAG (viewer UI refresh PR 6, TAC-4131, ADR-4133) -------- */
2000
+
2001
+ .rcf-dag {
2002
+ display: flex;
2003
+ flex-direction: column;
2004
+ gap: 0.75rem;
2005
+ }
2006
+
2007
+ .rcf-dag-toolbar {
2008
+ background: var(--sv-surface);
2009
+ border: 1px solid var(--sv-border);
2010
+ border-radius: 10px;
2011
+ padding: 0.6rem 0.75rem;
2012
+ display: flex;
2013
+ flex-direction: column;
2014
+ gap: 0.5rem;
2015
+ }
2016
+ .rcf-dag-toolbar-row {
2017
+ display: flex;
2018
+ flex-wrap: wrap;
2019
+ gap: 0.5rem;
2020
+ align-items: center;
2021
+ }
2022
+ .rcf-dag-toolbar-findings {
2023
+ border-top: 1px dashed var(--sv-border);
2024
+ padding-top: 0.5rem;
2025
+ }
2026
+
2027
+ .rcf-dag-label {
2028
+ display: inline-flex;
2029
+ gap: 0.35rem;
2030
+ align-items: center;
2031
+ }
2032
+ .rcf-dag-select {
2033
+ min-height: 2.1rem;
2034
+ padding: 0 0.5rem;
2035
+ border: 1px solid var(--sv-control);
2036
+ border-radius: 6px;
2037
+ background: var(--sv-surface);
2038
+ color: var(--sv-ink);
2039
+ }
2040
+
2041
+ .rcf-dag-chip {
2042
+ display: inline-flex;
2043
+ align-items: center;
2044
+ gap: 0.3rem;
2045
+ padding: 0.15rem 0.6rem;
2046
+ border-radius: 999px;
2047
+ border: 1px solid var(--sv-control);
2048
+ background: var(--sv-surface);
2049
+ color: var(--sv-ink);
2050
+ font-size: 0.8rem;
2051
+ cursor: pointer;
2052
+ min-height: 1.9rem;
2053
+ }
2054
+ .rcf-dag-chip:hover { background: var(--sv-raised); }
2055
+ .rcf-dag-chip[aria-pressed="true"] {
2056
+ background: var(--sv-active);
2057
+ border-color: var(--sv-link);
2058
+ color: var(--sv-link);
2059
+ font-weight: 700;
2060
+ }
2061
+
2062
+ .rcf-dag-grid {
2063
+ display: grid;
2064
+ grid-template-columns: minmax(0, 1fr) 20rem;
2065
+ gap: 0.75rem;
2066
+ align-items: start;
2067
+ }
2068
+ @media (max-width: 900px) {
2069
+ .rcf-dag-grid { grid-template-columns: minmax(0, 1fr); }
2070
+ }
2071
+
2072
+ .rcf-dag-canvas-wrap {
2073
+ padding: 0.5rem;
2074
+ overflow: auto;
2075
+ max-height: 70vh;
2076
+ min-height: 24rem;
2077
+ }
2078
+
2079
+ .rcf-dag-canvas {
2080
+ position: relative;
2081
+ color: var(--sv-ink);
2082
+ }
2083
+
2084
+ .rcf-dag-edges {
2085
+ position: absolute;
2086
+ left: 0;
2087
+ top: 0;
2088
+ pointer-events: none;
2089
+ }
2090
+ .rcf-dag-edge {
2091
+ fill: none;
2092
+ stroke: var(--sv-border);
2093
+ stroke-width: 1.2;
2094
+ opacity: 1;
2095
+ transition: opacity 120ms ease, stroke 120ms ease, stroke-width 120ms ease;
2096
+ }
2097
+ .rcf-dag-canvas[data-rcf-dag-sel] .rcf-dag-edge { opacity: 0.22; }
2098
+ .rcf-dag-edge[data-rcf-dag-edge-role="up"] {
2099
+ stroke: var(--sv-link);
2100
+ stroke-width: 2.2;
2101
+ opacity: 1;
2102
+ marker-end: url(#rcf-dag-arrow-up);
2103
+ }
2104
+ .rcf-dag-edge[data-rcf-dag-edge-role="down"] {
2105
+ stroke: var(--sv-warning);
2106
+ stroke-width: 2.2;
2107
+ opacity: 1;
2108
+ marker-end: url(#rcf-dag-arrow-down);
2109
+ }
2110
+ .rcf-dag-edge[data-rcf-dag-hidden="1"] { opacity: 0.08; }
2111
+
2112
+ .rcf-dag-colhead {
2113
+ position: absolute;
2114
+ font-size: 0.7rem;
2115
+ color: var(--sv-muted);
2116
+ font-weight: 700;
2117
+ letter-spacing: 0.05em;
2118
+ text-transform: uppercase;
2119
+ pointer-events: none;
2120
+ }
2121
+
2122
+ .rcf-dag-lane-head {
2123
+ position: absolute;
2124
+ border-top: 1px dashed var(--sv-control);
2125
+ padding-top: 0.4rem;
2126
+ font-size: 0.7rem;
2127
+ color: var(--sv-muted);
2128
+ font-weight: 700;
2129
+ letter-spacing: 0.05em;
2130
+ text-transform: uppercase;
2131
+ pointer-events: none;
2132
+ }
2133
+ .rcf-dag-canvas:not([data-has-unconnected="1"]) .rcf-dag-lane-head { display: none; }
2134
+ .rcf-dag-canvas[data-rcf-dag-unconnected-hidden="1"] .rcf-dag-lane-head,
2135
+ .rcf-dag-canvas[data-rcf-dag-unconnected-hidden="1"] .rcf-dag-node[data-unconnected="1"] {
2136
+ display: none;
2137
+ }
2138
+
2139
+ .rcf-dag-node {
2140
+ position: absolute;
2141
+ display: flex;
2142
+ align-items: center;
2143
+ gap: 0.4rem;
2144
+ padding: 0 0.5rem;
2145
+ border: 1px solid var(--sv-border);
2146
+ border-radius: 6px;
2147
+ background: var(--sv-surface);
2148
+ color: var(--sv-ink);
2149
+ cursor: pointer;
2150
+ text-align: left;
2151
+ font-size: 0.78rem;
2152
+ transition: opacity 120ms ease, border-color 120ms ease, border-width 120ms ease, box-shadow 120ms ease;
2153
+ overflow: hidden;
2154
+ }
2155
+ .rcf-dag-node:hover { background: var(--sv-raised); }
2156
+ .rcf-dag-node:focus-visible { outline: 2px solid var(--sv-focus); outline-offset: 2px; }
2157
+ .rcf-dag-canvas[data-rcf-dag-sel] .rcf-dag-node { opacity: 0.3; }
2158
+ .rcf-dag-node[data-rcf-dag-role="sel"] {
2159
+ opacity: 1;
2160
+ border: 2px solid var(--sv-ink);
2161
+ }
2162
+ .rcf-dag-node[data-rcf-dag-role="up"] {
2163
+ opacity: 1;
2164
+ border: 2px solid var(--sv-link);
2165
+ }
2166
+ .rcf-dag-node[data-rcf-dag-role="down"] {
2167
+ opacity: 1;
2168
+ border: 2px solid var(--sv-warning);
2169
+ }
2170
+ .rcf-dag-node[data-rcf-dag-hidden="1"] { opacity: 0.15; pointer-events: none; }
2171
+ .rcf-dag-node[data-rcf-dag-critical="on"] {
2172
+ box-shadow: 0 0 0 3px var(--sv-warningbg);
2173
+ }
2174
+ .rcf-dag-node-id {
2175
+ color: var(--sv-link);
2176
+ flex: none;
2177
+ }
2178
+ .rcf-dag-node-title {
2179
+ flex: 1;
2180
+ min-width: 0;
2181
+ overflow: hidden;
2182
+ text-overflow: ellipsis;
2183
+ white-space: nowrap;
2184
+ }
2185
+ .rcf-dag-node-dot {
2186
+ width: 0.55rem;
2187
+ height: 0.55rem;
2188
+ border-radius: 50%;
2189
+ background: var(--sv-control);
2190
+ flex: none;
2191
+ }
2192
+ .rcf-dag-node-dot--ok { background: var(--sv-success); }
2193
+ .rcf-dag-node-dot--warn { background: var(--sv-warning); }
2194
+ .rcf-dag-node-dot--none { background: var(--sv-control); }
2195
+ .rcf-dag-node-tag {
2196
+ font-size: 0.6rem;
2197
+ font-weight: 700;
2198
+ text-transform: uppercase;
2199
+ letter-spacing: 0.03em;
2200
+ padding: 0 0.3rem;
2201
+ border-radius: 999px;
2202
+ background: var(--sv-active);
2203
+ color: var(--sv-link);
2204
+ border: 1px solid transparent;
2205
+ flex: none;
2206
+ }
2207
+
2208
+ .rcf-dag-inspector {
2209
+ padding: 0.75rem;
2210
+ position: sticky;
2211
+ top: 3.6rem;
2212
+ max-height: 70vh;
2213
+ overflow: auto;
2214
+ }
2215
+ .rcf-dag-inspector-body h3 {
2216
+ margin: 0.2rem 0 0.5rem;
2217
+ font-size: 1rem;
2218
+ }
2219
+ .rcf-dag-inspector-body h4 {
2220
+ margin: 0.7rem 0 0.2rem;
2221
+ color: var(--sv-muted);
2222
+ font-size: 0.75rem;
2223
+ text-transform: uppercase;
2224
+ letter-spacing: 0.05em;
2225
+ }
2226
+ .rcf-dag-inspector-body ul.rcf-dag-inspector-list {
2227
+ list-style: none;
2228
+ padding: 0;
2229
+ margin: 0;
2230
+ font-size: 0.85rem;
2231
+ }
2232
+ .rcf-dag-inspector-body ul.rcf-dag-inspector-list li {
2233
+ display: flex;
2234
+ gap: 0.3rem;
2235
+ align-items: baseline;
2236
+ margin: 0.15rem 0;
2237
+ }
2238
+ .rcf-dag-inspector-body .rcf-dag-inspector-meta {
2239
+ display: flex;
2240
+ gap: 0.3rem;
2241
+ flex-wrap: wrap;
2242
+ margin-bottom: 0.6rem;
2243
+ }
2244
+
2245
+ .rcf-dag-legend {
2246
+ margin: 0;
2247
+ }
2248
+
2249
+ /* --------------------------------------------------------------------
2250
+ * ID lookup (viewer UI refresh PR 7, TAC-4132)
2251
+ *
2252
+ * SearchButton sits inside `.tools` right of the tabstrip; the
2253
+ * LookupModal is portalled into the shell outside #rcf-live-content
2254
+ * so the SSE innerHTML swap never blows it away. Tokens reuse the
2255
+ * Stravica brand palette so both themes work with no dark-only edge.
2256
+ * -------------------------------------------------------------------- */
2257
+
2258
+ .rcf-search-btn {
2259
+ display: inline-flex;
2260
+ align-items: center;
2261
+ gap: 0.35rem;
2262
+ padding: 0.3rem 0.6rem;
2263
+ background: var(--sv-surface, #ffffff);
2264
+ color: var(--sv-text, inherit);
2265
+ border: 1px solid var(--sv-border, #d6dbe3);
2266
+ border-radius: 999px;
2267
+ font: inherit;
2268
+ font-size: 0.85rem;
2269
+ line-height: 1;
2270
+ cursor: pointer;
2271
+ transition: background-color 0.1s ease-out, border-color 0.1s ease-out;
2272
+ }
2273
+ .rcf-search-btn:hover { background: var(--sv-surface-hover, #f0f3f8); }
2274
+ .rcf-search-btn:focus-visible { outline: 3px solid var(--sv-focus); outline-offset: 2px; }
2275
+ .rcf-search-btn .rcf-search-icon { flex-shrink: 0; opacity: 0.75; }
2276
+ .rcf-search-btn .rcf-search-kbd {
2277
+ display: inline-flex;
2278
+ gap: 0.1rem;
2279
+ margin-left: 0.1rem;
2280
+ color: var(--sv-muted);
2281
+ font-size: 0.7rem;
2282
+ }
2283
+ .rcf-search-btn .rcf-search-kbd kbd {
2284
+ padding: 0 0.25rem;
2285
+ border: 1px solid var(--sv-border, #d6dbe3);
2286
+ border-radius: 3px;
2287
+ background: var(--sv-surface, #ffffff);
2288
+ font-family: inherit;
2289
+ }
2290
+
2291
+ @media (max-width: 640px) {
2292
+ .rcf-search-btn .rcf-search-kbd { display: none; }
2293
+ }
2294
+
2295
+ .rcf-lookup[hidden] { display: none !important; }
2296
+ .rcf-lookup {
2297
+ position: fixed;
2298
+ inset: 0;
2299
+ z-index: 1000;
2300
+ display: flex;
2301
+ align-items: flex-start;
2302
+ justify-content: center;
2303
+ padding: 4rem 1rem 1rem;
2304
+ pointer-events: none;
2305
+ }
2306
+ .rcf-lookup-backdrop {
2307
+ position: absolute;
2308
+ inset: 0;
2309
+ background: rgba(8, 15, 25, 0.4);
2310
+ pointer-events: auto;
2311
+ }
2312
+ .rcf-lookup-panel {
2313
+ position: relative;
2314
+ width: min(42rem, 100%);
2315
+ max-height: calc(100vh - 6rem);
2316
+ display: flex;
2317
+ flex-direction: column;
2318
+ gap: 0.75rem;
2319
+ padding: 1rem 1rem 0.75rem;
2320
+ background: var(--sv-surface, #ffffff);
2321
+ color: var(--sv-text, inherit);
2322
+ border: 1px solid var(--sv-border, #d6dbe3);
2323
+ border-radius: 10px;
2324
+ box-shadow: 0 20px 50px -20px rgba(8, 15, 25, 0.4);
2325
+ pointer-events: auto;
2326
+ overflow: hidden;
2327
+ }
2328
+ .rcf-lookup-head {
2329
+ display: flex;
2330
+ align-items: center;
2331
+ justify-content: space-between;
2332
+ gap: 1rem;
2333
+ }
2334
+ .rcf-lookup-heading {
2335
+ margin: 0;
2336
+ font-size: 1rem;
2337
+ color: var(--sv-text);
2338
+ }
2339
+ .rcf-lookup-close {
2340
+ background: transparent;
2341
+ border: 1px solid transparent;
2342
+ color: var(--sv-muted);
2343
+ font: inherit;
2344
+ font-size: 0.8rem;
2345
+ padding: 0.25rem 0.5rem;
2346
+ border-radius: 4px;
2347
+ cursor: pointer;
2348
+ }
2349
+ .rcf-lookup-close:hover { color: var(--sv-text); border-color: var(--sv-border); }
2350
+ .rcf-lookup-close:focus-visible { outline: 3px solid var(--sv-focus); outline-offset: 1px; }
2351
+
2352
+ .rcf-lookup-field { display: flex; flex-direction: column; gap: 0.25rem; }
2353
+ .rcf-lookup-label {
2354
+ font-size: 0.75rem;
2355
+ color: var(--sv-muted);
2356
+ text-transform: uppercase;
2357
+ letter-spacing: 0.05em;
2358
+ }
2359
+ .rcf-lookup-input {
2360
+ padding: 0.55rem 0.75rem;
2361
+ font: inherit;
2362
+ font-size: 0.95rem;
2363
+ border: 1px solid var(--sv-border, #d6dbe3);
2364
+ border-radius: 6px;
2365
+ background: var(--sv-surface-sub, #fbfcfe);
2366
+ color: var(--sv-text);
2367
+ }
2368
+ .rcf-lookup-input:focus-visible { outline: 3px solid var(--sv-focus); outline-offset: 1px; border-color: var(--sv-link, #3a5bb5); }
2369
+
2370
+ .rcf-lookup-status { margin: 0; font-size: 0.75rem; color: var(--sv-muted); min-height: 1rem; }
2371
+
2372
+ .rcf-lookup-results {
2373
+ list-style: none;
2374
+ padding: 0;
2375
+ margin: 0;
2376
+ overflow-y: auto;
2377
+ flex: 1 1 auto;
2378
+ display: flex;
2379
+ flex-direction: column;
2380
+ gap: 0.1rem;
2381
+ }
2382
+ .rcf-lookup-row {
2383
+ display: grid;
2384
+ grid-template-columns: auto auto 1fr auto;
2385
+ align-items: baseline;
2386
+ gap: 0.5rem;
2387
+ padding: 0.4rem 0.5rem;
2388
+ border-radius: 6px;
2389
+ cursor: pointer;
2390
+ border: 1px solid transparent;
2391
+ }
2392
+ .rcf-lookup-row:hover { background: var(--sv-surface-hover, #f0f3f8); }
2393
+ .rcf-lookup-row.is-active {
2394
+ background: var(--sv-surface-hover, #f0f3f8);
2395
+ border-color: var(--sv-link, #3a5bb5);
2396
+ }
2397
+ .rcf-lookup-row mark {
2398
+ background: var(--sv-highlight, rgba(114, 149, 255, 0.35));
2399
+ color: inherit;
2400
+ padding: 0 1px;
2401
+ border-radius: 2px;
2402
+ }
2403
+ .rcf-lookup-kind {
2404
+ grid-column: 1;
2405
+ display: inline-flex;
2406
+ align-items: center;
2407
+ padding: 0 0.4rem;
2408
+ font-size: 0.7rem;
2409
+ font-weight: 600;
2410
+ text-transform: uppercase;
2411
+ letter-spacing: 0.05em;
2412
+ background: var(--sv-pill-bg, #e4e9f4);
2413
+ color: var(--sv-pill-text, #2a3550);
2414
+ border-radius: 999px;
2415
+ line-height: 1.6;
2416
+ }
2417
+ .rcf-lookup-kind-ac { background: #ede1ff; color: #4a2a7a; }
2418
+ .rcf-lookup-kind-us { background: #d8e8ff; color: #1f3f78; }
2419
+ .rcf-lookup-kind-req { background: #d5efe0; color: #1f5733; }
2420
+ .rcf-lookup-kind-tac { background: #ffe6cc; color: #704000; }
2421
+ .rcf-lookup-kind-adr { background: #ffd9d9; color: #7a2222; }
2422
+ .rcf-lookup-kind-fbs { background: #e2e7f2; color: #2a3550; }
2423
+ .rcf-lookup-kind-ts { background: #f3dbff; color: #5a2070; }
2424
+ .rcf-lookup-kind-prd { background: #fff2b8; color: #705300; }
2425
+ .rcf-lookup-kind-tad { background: #cfe9ff; color: #0f3f6a; }
2426
+ .rcf-lookup-kind-bs { background: #e4e4e4; color: #333333; }
2427
+
2428
+ .rcf-lookup-id {
2429
+ grid-column: 2;
2430
+ font-family: var(--sv-mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
2431
+ font-weight: 600;
2432
+ color: var(--sv-text);
2433
+ font-size: 0.85rem;
2434
+ }
2435
+ .rcf-lookup-title {
2436
+ grid-column: 3;
2437
+ font-size: 0.9rem;
2438
+ color: var(--sv-text);
2439
+ }
2440
+ .rcf-lookup-parent {
2441
+ grid-column: 4;
2442
+ font-size: 0.75rem;
2443
+ color: var(--sv-muted);
2444
+ }
2445
+ .rcf-lookup-snippet {
2446
+ grid-column: 1 / -1;
2447
+ margin: 0.1rem 0 0 0;
2448
+ font-size: 0.78rem;
2449
+ color: var(--sv-muted);
2450
+ line-height: 1.35;
2451
+ }
2452
+
2453
+ .rcf-lookup-empty {
2454
+ padding: 1rem 0.5rem 0.75rem;
2455
+ text-align: center;
2456
+ color: var(--sv-muted);
2457
+ font-size: 0.85rem;
2458
+ }
2459
+ .rcf-lookup-empty-msg { margin: 0 0 0.5rem; }
2460
+ .rcf-lookup-reload {
2461
+ padding: 0.35rem 0.75rem;
2462
+ background: var(--sv-surface, #ffffff);
2463
+ color: var(--sv-text);
2464
+ border: 1px solid var(--sv-border, #d6dbe3);
2465
+ border-radius: 6px;
2466
+ cursor: pointer;
2467
+ font: inherit;
2468
+ font-size: 0.85rem;
2469
+ }
2470
+ .rcf-lookup-reload:hover { background: var(--sv-surface-hover, #f0f3f8); }
2471
+ .rcf-lookup-reload:focus-visible { outline: 3px solid var(--sv-focus); outline-offset: 1px; }
2472
+
2473
+ html[data-theme="dark"] .rcf-lookup-backdrop { background: rgba(0, 0, 0, 0.55); }
2474
+ html[data-theme="dark"] .rcf-lookup-kind { background: rgba(255, 255, 255, 0.08); color: var(--sv-text); }
2475
+ html[data-theme="dark"] .rcf-lookup-kind-ac { background: rgba(140, 90, 220, 0.3); color: #e2c9ff; }
2476
+ html[data-theme="dark"] .rcf-lookup-kind-us { background: rgba(80, 130, 220, 0.3); color: #c4dcff; }
2477
+ html[data-theme="dark"] .rcf-lookup-kind-req { background: rgba(80, 170, 110, 0.3); color: #c3eacc; }
2478
+ html[data-theme="dark"] .rcf-lookup-kind-tac { background: rgba(200, 130, 60, 0.3); color: #ffd4a8; }
2479
+ html[data-theme="dark"] .rcf-lookup-kind-adr { background: rgba(220, 100, 100, 0.3); color: #ffc9c9; }
2480
+ html[data-theme="dark"] .rcf-lookup-kind-ts { background: rgba(180, 110, 220, 0.3); color: #e8c9ff; }
2481
+ html[data-theme="dark"] .rcf-lookup-kind-fbs { background: rgba(140, 150, 170, 0.3); color: #d4dbea; }
2482
+ html[data-theme="dark"] .rcf-lookup-kind-prd { background: rgba(200, 170, 60, 0.3); color: #ffe88b; }
2483
+ html[data-theme="dark"] .rcf-lookup-kind-tad { background: rgba(80, 160, 220, 0.3); color: #c7e6ff; }
2484
+ html[data-theme="dark"] .rcf-lookup-kind-bs { background: rgba(160, 160, 160, 0.3); color: #d9d9d9; }
2485
+
2486
+ html[data-rcf-lookup-open] { overflow: hidden; }
2487
+
2488
+ /* ID lookup landing highlight (design section 6: "scrolls and flashes
2489
+ the target"). A short brand-cobalt wash fades out so the picked
2490
+ entity reads unambiguously in a long tree. */
2491
+ @keyframes rcfLookupFlash {
2492
+ 0% { background-color: var(--sv-cobalt, #1e40af); color: #ffffff; }
2493
+ 40% { background-color: var(--sv-cobalt, #1e40af); color: #ffffff; }
2494
+ 100% { background-color: transparent; color: inherit; }
2495
+ }
2496
+ .is-rcf-lookup-flash {
2497
+ animation: rcfLookupFlash 1200ms ease-out 1;
2498
+ border-radius: 2px;
2499
+ }
2500
+
2501
+ /* ---- Shared pill colour variants (used by Readiness PO layer PR 8) ---- */
2502
+
2503
+ .rcf-pill {
2504
+ display: inline-flex;
2505
+ align-items: center;
2506
+ gap: 0.3rem;
2507
+ padding: 0.05rem 0.6rem;
2508
+ border-radius: 999px;
2509
+ font-size: 0.78rem;
2510
+ font-weight: 700;
2511
+ border: 1px solid var(--sv-border);
2512
+ background: var(--sv-raised);
2513
+ color: var(--sv-ink);
2514
+ white-space: nowrap;
2515
+ }
2516
+ .rcf-pill--ok {
2517
+ background: var(--sv-successbg);
2518
+ color: var(--sv-success);
2519
+ border-color: transparent;
2520
+ }
2521
+ .rcf-pill--warn {
2522
+ background: var(--sv-warningbg);
2523
+ color: var(--sv-warning);
2524
+ border-color: transparent;
2525
+ }
2526
+ .rcf-pill--fail {
2527
+ background: var(--sv-dangerbg);
2528
+ color: var(--sv-danger);
2529
+ border-color: transparent;
2530
+ }
2531
+ .rcf-pill--info {
2532
+ background: var(--sv-active);
2533
+ color: var(--sv-link);
2534
+ border-color: transparent;
2535
+ }
2536
+
2537
+ /* ---- Readiness PO layer (viewer UI refresh PR 8, TAC-4133, ADR-4135) --- */
2538
+
2539
+ .rcf-po-verdicts {
2540
+ display: grid;
2541
+ grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
2542
+ gap: 0.75rem;
2543
+ align-items: stretch;
2544
+ margin: 0.5rem 0 1rem;
2545
+ }
2546
+ .rcf-po-verdict {
2547
+ background: var(--sv-surface);
2548
+ border: 1px solid var(--sv-border);
2549
+ border-radius: 10px;
2550
+ padding: 1rem;
2551
+ display: flex;
2552
+ flex-direction: column;
2553
+ gap: 0.3rem;
2554
+ height: 100%;
2555
+ }
2556
+ .rcf-po-verdict--build { opacity: 0.95; }
2557
+ .rcf-po-verdict__eyebrow {
2558
+ font-size: 0.78rem;
2559
+ text-transform: uppercase;
2560
+ letter-spacing: 0.05em;
2561
+ margin: 0;
2562
+ }
2563
+ .rcf-po-verdict__heading {
2564
+ font-size: 1.2rem;
2565
+ margin: 0.1rem 0 0.3rem;
2566
+ display: flex;
2567
+ align-items: center;
2568
+ gap: 0.4rem;
2569
+ flex-wrap: wrap;
2570
+ }
2571
+ .rcf-po-verdict__count {
2572
+ margin: 0.1rem 0;
2573
+ }
2574
+ .rcf-po-verdict__verdict {
2575
+ margin-top: auto;
2576
+ padding-top: 0.4rem;
2577
+ font-size: 0.78rem;
2578
+ }
2579
+ .rcf-po-verdict__verdict code {
2580
+ background: var(--sv-code);
2581
+ padding: 0.1rem 0.3rem;
2582
+ border-radius: 0.25rem;
2583
+ word-break: break-word;
2584
+ display: inline-block;
2585
+ max-width: 100%;
2586
+ }
2587
+ .rcf-chain-term {
2588
+ font-family: var(--sv-mono);
2589
+ font-size: 0.72rem;
2590
+ font-weight: 400;
2591
+ color: var(--sv-muted);
2592
+ margin-left: 0.25rem;
2593
+ vertical-align: middle;
2594
+ }
2595
+
2596
+ .rcf-po-questions,
2597
+ .rcf-po-next,
2598
+ .rcf-po-reqwork,
2599
+ .rcf-po-engineer-section {
2600
+ margin-top: 1.25rem;
2601
+ }
2602
+ .rcf-po-questions__head,
2603
+ .rcf-po-reqwork > h2 {
2604
+ display: flex;
2605
+ align-items: baseline;
2606
+ gap: 0.5rem;
2607
+ }
2608
+ .rcf-po-questions__head h2 { margin: 0; font-size: 1.2rem; }
2609
+ .rcf-po-reqwork > h2 { font-size: 1.2rem; margin: 0 0 0.3rem; }
2610
+ .rcf-po-next > h2 { font-size: 1.2rem; margin: 0 0 0.4rem; }
2611
+
2612
+ .rcf-po-question-group {
2613
+ background: var(--sv-surface);
2614
+ border: 1px solid var(--sv-border);
2615
+ border-radius: 10px;
2616
+ padding: 0.75rem 1rem;
2617
+ margin: 0.75rem 0 0;
2618
+ }
2619
+ .rcf-po-question-group--optional {
2620
+ border-style: dashed;
2621
+ }
2622
+ .rcf-po-question-group__head { margin-bottom: 0.3rem; }
2623
+ .rcf-po-question-group__head h3 {
2624
+ margin: 0;
2625
+ color: var(--sv-muted);
2626
+ font-size: 0.85rem;
2627
+ text-transform: uppercase;
2628
+ letter-spacing: 0.05em;
2629
+ }
2630
+ .rcf-po-question {
2631
+ padding: 0.55rem 0;
2632
+ border-top: 1px solid var(--sv-border);
2633
+ }
2634
+ .rcf-po-question:first-of-type { border-top: 0; }
2635
+ .rcf-po-question__head {
2636
+ display: flex;
2637
+ align-items: baseline;
2638
+ gap: 0.5rem;
2639
+ }
2640
+ .rcf-po-question__heading {
2641
+ margin: 0;
2642
+ font-size: 1rem;
2643
+ }
2644
+ .rcf-po-question__ask {
2645
+ margin: 0.35rem 0 0.2rem;
2646
+ }
2647
+ .rcf-po-question__hint { margin: 0; }
2648
+ .rcf-po-question__detail {
2649
+ margin-top: 0.4rem;
2650
+ }
2651
+ .rcf-po-question__detail summary { cursor: pointer; }
2652
+
2653
+ .rcf-badge--q {
2654
+ display: inline-block;
2655
+ padding: 0 0.5rem;
2656
+ border-radius: 0.3rem;
2657
+ font-size: 0.72rem;
2658
+ font-weight: 700;
2659
+ background: var(--sv-raised);
2660
+ color: var(--sv-muted);
2661
+ border: 1px solid var(--sv-border);
2662
+ white-space: nowrap;
2663
+ }
2664
+ .rcf-badge--count {
2665
+ display: inline-block;
2666
+ padding: 0 0.5rem;
2667
+ border-radius: 0.3rem;
2668
+ font-size: 0.78rem;
2669
+ font-weight: 700;
2670
+ background: var(--sv-raised);
2671
+ color: var(--sv-muted);
2672
+ border: 1px solid var(--sv-border);
2673
+ white-space: nowrap;
2674
+ }
2675
+
2676
+ .rcf-po-next__card {
2677
+ background: var(--sv-surface);
2678
+ border: 1px solid var(--sv-border);
2679
+ border-radius: 10px;
2680
+ padding: 0.75rem 1rem;
2681
+ }
2682
+ .rcf-po-next__card p { margin: 0.35rem 0; }
2683
+
2684
+ .rcf-po-reqwork__table {
2685
+ width: 100%;
2686
+ border-collapse: collapse;
2687
+ font-size: 0.9rem;
2688
+ margin-top: 0.3rem;
2689
+ }
2690
+ .rcf-po-reqwork__table th,
2691
+ .rcf-po-reqwork__table td {
2692
+ text-align: left;
2693
+ padding: 0.45rem 0.5rem;
2694
+ border-bottom: 1px solid var(--sv-border);
2695
+ vertical-align: top;
2696
+ }
2697
+ .rcf-po-reqwork__table th {
2698
+ color: var(--sv-muted);
2699
+ font-weight: 700;
2700
+ font-size: 0.75rem;
2701
+ text-transform: uppercase;
2702
+ letter-spacing: 0.05em;
2703
+ }
2704
+ .rcf-po-reqwork__id {
2705
+ color: var(--sv-link);
2706
+ font-family: var(--sv-mono);
2707
+ }
2708
+ .rcf-po-reqwork__empty {
2709
+ padding: 1rem;
2710
+ border: 1px dashed var(--sv-control);
2711
+ border-radius: 0.5rem;
2712
+ color: var(--sv-muted);
2713
+ text-align: center;
2714
+ margin: 0.3rem 0 0;
2715
+ }
2716
+
2717
+ .rcf-po-engineer-section .rcf-row.doc-row {
2718
+ border: 1px solid var(--sv-border);
2719
+ border-radius: 10px;
2720
+ background: var(--sv-surface);
2721
+ }
2722
+ .rcf-po-engineer-section .rcf-row.doc-row > summary {
2723
+ padding: 0.6rem 0.9rem;
2724
+ }
2725
+ .rcf-po-engineer-section .rcf-row.doc-row > summary .id {
2726
+ font-family: var(--sv-font);
2727
+ color: var(--sv-ink);
2728
+ font-weight: 700;
2729
+ }
2730
+
2731
+ .rcf-stage-legend {
2732
+ border: 1px solid var(--sv-border);
2733
+ border-radius: 10px;
2734
+ background: var(--sv-surface);
2735
+ color: var(--sv-ink);
2736
+ padding: 1rem 1.25rem;
2737
+ max-width: 48rem;
2738
+ width: calc(100vw - 2rem);
2739
+ }
2740
+ .rcf-stage-legend::backdrop { background: rgba(17, 25, 39, 0.45); }
2741
+ .rcf-stage-legend__head {
2742
+ display: flex;
2743
+ align-items: baseline;
2744
+ gap: 0.75rem;
2745
+ margin-bottom: 0.4rem;
2746
+ }
2747
+ .rcf-stage-legend__head h2 {
2748
+ flex: 1;
2749
+ font-size: 1.1rem;
2750
+ margin: 0;
2751
+ }
2752
+ .rcf-stage-legend__intro {
2753
+ margin: 0.1rem 0 0.6rem;
2754
+ font-size: 0.85rem;
2755
+ }
2756
+ .rcf-stage-legend__table {
2757
+ width: 100%;
2758
+ border-collapse: collapse;
2759
+ font-size: 0.9rem;
2760
+ }
2761
+ .rcf-stage-legend__table th,
2762
+ .rcf-stage-legend__table td {
2763
+ text-align: left;
2764
+ padding: 0.4rem 0.5rem;
2765
+ border-bottom: 1px solid var(--sv-border);
2766
+ vertical-align: top;
2767
+ }
2768
+ .rcf-stage-legend__table th {
2769
+ color: var(--sv-muted);
2770
+ font-size: 0.75rem;
2771
+ text-transform: uppercase;
2772
+ letter-spacing: 0.05em;
2773
+ }
2774
+ .rcf-stage-legend__table tr.rcf-stage-legend__highlighted td {
2775
+ background: var(--sv-active);
2776
+ }
2777
+ .rcf-stage-legend__table .rcf-stage-legend__code code {
2778
+ color: var(--sv-link);
2779
+ }
2780
+ .rcf-stage-legend__close {
2781
+ min-height: 2rem;
2782
+ padding: 0 0.75rem;
2783
+ border-radius: 0.375rem;
2784
+ border: 1px solid var(--sv-control);
2785
+ background: var(--sv-surface);
2786
+ color: var(--sv-ink);
2787
+ cursor: pointer;
2788
+ }
2789
+ .rcf-stage-legend__close:hover { background: var(--sv-raised); }
2790
+
2791
+ [data-rcf-stage-ref] { cursor: pointer; }
2792
+ [data-rcf-stage-ref]:focus-visible {
2793
+ outline: 2px solid var(--sv-focus);
2794
+ outline-offset: 1px;
1160
2795
  }