@unson/brainbase-mcp 0.6.0 → 0.8.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 (148) hide show
  1. package/contracts/foundation/graph-history.sql +634 -0
  2. package/contracts/judgment-value-proof/schema.json +43 -1
  3. package/dist/canonical-task-contract.d.ts +9 -0
  4. package/dist/canonical-task-contract.js +39 -0
  5. package/dist/canonical-task-principal.d.ts +16 -0
  6. package/dist/canonical-task-principal.js +36 -0
  7. package/dist/canonical-task-service.d.ts +251 -0
  8. package/dist/canonical-task-service.js +820 -0
  9. package/dist/cli.d.ts +2 -0
  10. package/dist/cli.js +107 -0
  11. package/dist/company-os-evaluation.d.ts +193 -0
  12. package/dist/company-os-evaluation.js +1150 -0
  13. package/dist/company-os-impact-review.d.ts +248 -0
  14. package/dist/company-os-impact-review.js +663 -0
  15. package/dist/company-os-learning-adoption.d.ts +288 -0
  16. package/dist/company-os-learning-adoption.js +944 -0
  17. package/dist/company-os-objectives.d.ts +63 -0
  18. package/dist/company-os-objectives.js +234 -0
  19. package/dist/company-os-receipt-adapter.d.ts +109 -0
  20. package/dist/company-os-receipt-adapter.js +636 -0
  21. package/dist/constraint-exception-store.d.ts +23 -0
  22. package/dist/constraint-exception-store.js +108 -0
  23. package/dist/constraint-resolution.d.ts +175 -0
  24. package/dist/constraint-resolution.js +922 -0
  25. package/dist/decision-adapter.d.ts +145 -0
  26. package/dist/decision-adapter.js +586 -0
  27. package/dist/durable-wait-http.d.ts +51 -0
  28. package/dist/durable-wait-http.js +497 -0
  29. package/dist/durable-waits.d.ts +234 -0
  30. package/dist/durable-waits.js +944 -0
  31. package/dist/execution-authority-http.d.ts +28 -0
  32. package/dist/execution-authority-http.js +359 -0
  33. package/dist/execution-authority.d.ts +201 -0
  34. package/dist/execution-authority.js +634 -0
  35. package/dist/foundation-authenticated-tools.d.ts +56 -0
  36. package/dist/foundation-authenticated-tools.js +347 -0
  37. package/dist/foundation-catalog.d.ts +26 -0
  38. package/dist/foundation-catalog.js +206 -0
  39. package/dist/foundation-constraint-store.d.ts +50 -0
  40. package/dist/foundation-constraint-store.js +215 -0
  41. package/dist/foundation-graph-http.d.ts +43 -0
  42. package/dist/foundation-graph-http.js +243 -0
  43. package/dist/foundation-graph-write.d.ts +90 -0
  44. package/dist/foundation-graph-write.js +447 -0
  45. package/dist/foundation-http.d.ts +90 -0
  46. package/dist/foundation-http.js +439 -0
  47. package/dist/foundation-public-provider.d.ts +140 -0
  48. package/dist/foundation-public-provider.js +192 -0
  49. package/dist/foundation-store.d.ts +132 -0
  50. package/dist/foundation-store.js +654 -0
  51. package/dist/graph-corrections.d.ts +157 -0
  52. package/dist/graph-corrections.js +620 -0
  53. package/dist/graph-foundation-reader.d.ts +60 -0
  54. package/dist/graph-foundation-reader.js +494 -0
  55. package/dist/graph-retrieval.d.ts +6 -1
  56. package/dist/graph-revision-reader.d.ts +80 -0
  57. package/dist/graph-revision-reader.js +246 -0
  58. package/dist/graph-web-http.d.ts +26 -0
  59. package/dist/graph-web-http.js +215 -0
  60. package/dist/graph-web.d.ts +364 -0
  61. package/dist/graph-web.js +639 -0
  62. package/dist/judgment-dag-composition.d.ts +224 -0
  63. package/dist/judgment-dag-composition.js +731 -0
  64. package/dist/judgment-dag.d.ts +2 -0
  65. package/dist/judgment-dag.js +1 -0
  66. package/dist/judgment-problem-snapshot.d.ts +213 -0
  67. package/dist/judgment-problem-snapshot.js +1073 -0
  68. package/dist/judgment-value-proof-review.d.ts +166 -0
  69. package/dist/judgment-value-proof-review.js +437 -0
  70. package/dist/judgment-value-proof.d.ts +28 -1
  71. package/dist/judgment-value-proof.js +53 -8
  72. package/dist/judgment-view-http.d.ts +22 -0
  73. package/dist/judgment-view-http.js +128 -0
  74. package/dist/judgment-view.d.ts +222 -0
  75. package/dist/judgment-view.js +627 -0
  76. package/dist/knowledge-adapter.d.ts +112 -0
  77. package/dist/knowledge-adapter.js +691 -0
  78. package/dist/knowledge-continuation.d.ts +127 -0
  79. package/dist/knowledge-continuation.js +446 -0
  80. package/dist/knowledge-lookup.d.ts +178 -0
  81. package/dist/knowledge-lookup.js +758 -0
  82. package/dist/local-web-fetch-bridge.d.ts +5 -0
  83. package/dist/local-web-fetch-bridge.js +37 -0
  84. package/dist/local-web-host.d.ts +109 -0
  85. package/dist/local-web-host.js +688 -0
  86. package/dist/local-web-security.d.ts +25 -0
  87. package/dist/local-web-security.js +95 -0
  88. package/dist/ontology-foundation.d.ts +209 -0
  89. package/dist/ontology-foundation.js +1000 -0
  90. package/dist/ontology.d.ts +13 -0
  91. package/dist/ontology.js +14 -0
  92. package/dist/organization-connection.d.ts +164 -0
  93. package/dist/organization-connection.js +428 -0
  94. package/dist/organization-graph.d.ts +15 -0
  95. package/dist/organization-graph.js +24 -4
  96. package/dist/personal-knowledge.d.ts +132 -0
  97. package/dist/personal-knowledge.js +779 -0
  98. package/dist/personal-memory-handover.d.ts +108 -0
  99. package/dist/personal-memory-handover.js +369 -0
  100. package/dist/philosophy-revision-reader.d.ts +85 -0
  101. package/dist/philosophy-revision-reader.js +241 -0
  102. package/dist/portable-graph.d.ts +24 -0
  103. package/dist/portable-graph.js +77 -0
  104. package/dist/problem-candidates.d.ts +149 -0
  105. package/dist/problem-candidates.js +898 -0
  106. package/dist/problem-selection.d.ts +238 -0
  107. package/dist/problem-selection.js +995 -0
  108. package/dist/resource-reservation-http.d.ts +31 -0
  109. package/dist/resource-reservation-http.js +371 -0
  110. package/dist/resource-reservations.d.ts +221 -0
  111. package/dist/resource-reservations.js +577 -0
  112. package/dist/server.d.ts +104 -2
  113. package/dist/server.js +186 -4
  114. package/dist/ssot.d.ts +6 -1
  115. package/dist/ssot.js +63 -5
  116. package/dist/streamable-http.d.ts +42 -0
  117. package/dist/streamable-http.js +288 -0
  118. package/dist/types.d.ts +20 -0
  119. package/dist/value-proof-review-http.d.ts +25 -0
  120. package/dist/value-proof-review-http.js +185 -0
  121. package/dist/world-model.d.ts +199 -0
  122. package/dist/world-model.js +955 -0
  123. package/package.json +230 -3
  124. package/ui/brainbase-tokens.css +56 -0
  125. package/ui/graph-own-share.js +367 -0
  126. package/ui/graph-projects-view.css +23 -0
  127. package/ui/graph-projects-view.js +730 -0
  128. package/ui/graph-registry-view.css +101 -0
  129. package/ui/graph-registry-view.js +804 -0
  130. package/ui/graph-view-shared.css +522 -0
  131. package/ui/graph-view-shared.js +1227 -0
  132. package/ui/judgment-view.css +312 -0
  133. package/ui/judgment-view.js +508 -0
  134. package/ui/local-web-shell.css +396 -0
  135. package/ui/local-web-shell.js +378 -0
  136. package/ui/objective-editor-http-port.js +154 -0
  137. package/ui/objective-editor.css +286 -0
  138. package/ui/objective-editor.js +1586 -0
  139. package/ui/outcome-knowledge.css +50 -14
  140. package/ui/outcome-knowledge.js +15 -1
  141. package/ui/outcome-mana.css +91 -14
  142. package/ui/outcome-mana.js +958 -61
  143. package/ui/value-proof-review.css +504 -0
  144. package/ui/value-proof-review.js +1104 -0
  145. package/ui/workspace-kit.css +485 -0
  146. package/ui/workspace-kit.js +229 -0
  147. package/ui/world-model-view.css +188 -0
  148. package/ui/world-model-view.js +486 -0
@@ -1,25 +1,61 @@
1
+ /*
2
+ * Organization edition look (moved from brainbase-organization apps/web/public/styles.css,
3
+ * where it was loaded before this file). Kept first so the cascade is the same as in the
4
+ * organization edition. Colors read the shared tokens, with the organization values as fallbacks.
5
+ */
6
+ .knowledge-outcome { display: grid; gap: 20px; color: var(--bb-color-ink, #17221c); }
7
+ .knowledge-outcome-head { padding: 24px; border: 1px solid var(--bb-color-border, #dce5df); border-radius: 16px; background: linear-gradient(135deg, var(--bb-color-header-start, #f7faf8), var(--bb-color-header-end, #eef5f0)); }
8
+ .knowledge-outcome-head h2 { margin: 4px 0 8px; font-size: clamp(1.45rem, 3vw, 2rem); }
9
+ .knowledge-eyebrow { color: var(--bb-color-eyebrow, #47715a); font-size: .72rem; font-weight: 750; letter-spacing: .12em; text-transform: uppercase; }
10
+ .knowledge-outcome-nav,
11
+ .knowledge-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
12
+ .knowledge-tab,
13
+ .knowledge-button { min-height: 40px; border: 1px solid var(--bb-color-control-border, #cbd8d0); border-radius: 9px; background: var(--bb-color-panel, #fff); color: inherit; padding: 8px 12px; font: inherit; cursor: pointer; }
14
+ .knowledge-tab.active,
15
+ .knowledge-button-primary { border-color: var(--bb-color-action, #35684c); background: var(--bb-color-action, #35684c); color: var(--bb-color-action-text, #fff); }
16
+ .knowledge-outcome-body { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(260px, .8fr); gap: 18px; }
17
+ .knowledge-outcome-primary,
18
+ .knowledge-outcome-detail { min-width: 0; padding: 18px; border: 1px solid var(--bb-color-border, #dce5df); border-radius: 14px; background: var(--bb-color-panel, #fff); }
19
+ .knowledge-unknown-copy { color: var(--bb-color-muted, #66736b); }
20
+ .knowledge-filter-region form,
21
+ .knowledge-form { display: grid; gap: 12px; }
22
+ .knowledge-outcome input,
23
+ .knowledge-outcome select,
24
+ .knowledge-outcome textarea { box-sizing: border-box; width: 100%; border: 1px solid var(--bb-color-border-strong, #bdcbc2); border-radius: 8px; background: var(--bb-color-panel, #fff); padding: 9px 10px; font: inherit; }
25
+ .knowledge-outcome button:focus-visible,
26
+ .knowledge-outcome input:focus-visible { outline: 3px solid #9fc9ad; outline-offset: 2px; }
27
+ .knowledge-state,
28
+ .knowledge-warning-copy { padding: 11px 12px; border-radius: 9px; background: #fff7e8; color: #694d18; }
29
+ .knowledge-list { display: grid; gap: 8px; }
30
+ @media (max-width: 1340px) {
31
+ .knowledge-outcome-body { grid-template-columns: 1fr; }
32
+ .knowledge-outcome-head,
33
+ .knowledge-outcome-primary,
34
+ .knowledge-outcome-detail { padding: 14px; }
35
+ }
36
+
1
37
  /* Knowledge outcome workspace. The component owns its layout so the shared
2
38
  shell cannot turn an operational master/detail surface into stacked cards. */
3
39
  .knowledge-outcome {
4
- --knowledge-paper: var(--paper, #fbfbf8);
5
- --knowledge-canvas: var(--canvas, #f2f3ef);
6
- --knowledge-ink: var(--ink, #111412);
7
- --knowledge-muted: var(--muted, #656b67);
8
- --knowledge-quiet: var(--quiet, #929894);
9
- --knowledge-line: var(--line, #d9ddd8);
10
- --knowledge-line-strong: var(--line-dark, #bfc5c0);
11
- --knowledge-green: var(--green, #087d62);
12
- --knowledge-green-soft: var(--green-soft, #e5f1ec);
13
- --knowledge-amber: var(--amber, #c9870c);
14
- --knowledge-amber-soft: var(--amber-soft, #fff0c7);
15
- --knowledge-red: var(--red, #d92335);
16
- --knowledge-red-soft: var(--red-soft, #fde9eb);
40
+ --knowledge-paper: var(--bb-color-panel, var(--paper, #fbfbf8));
41
+ --knowledge-canvas: var(--bb-color-surface, var(--canvas, #f2f3ef));
42
+ --knowledge-ink: var(--bb-color-ink, var(--ink, #111412));
43
+ --knowledge-muted: var(--bb-color-muted, var(--muted, #656b67));
44
+ --knowledge-quiet: var(--bb-color-muted, var(--quiet, #929894));
45
+ --knowledge-line: var(--bb-color-border, var(--line, #d9ddd8));
46
+ --knowledge-line-strong: var(--bb-color-border-strong, var(--line-dark, #bfc5c0));
47
+ --knowledge-green: var(--bb-color-accent, var(--green, #087d62));
48
+ --knowledge-green-soft: var(--bb-color-accent-soft, var(--green-soft, #e5f1ec));
49
+ --knowledge-amber: var(--bb-color-warning, var(--amber, #c9870c));
50
+ --knowledge-amber-soft: var(--bb-color-warning-soft, var(--amber-soft, #fff0c7));
51
+ --knowledge-red: var(--bb-color-danger, var(--red, #d92335));
52
+ --knowledge-red-soft: var(--bb-color-danger-soft, var(--red-soft, #fde9eb));
17
53
  display: grid;
18
54
  gap: 0;
19
55
  min-width: 0;
20
56
  color: var(--knowledge-ink);
21
57
  background: transparent;
22
- font-family: Geist, "Noto Sans JP", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
58
+ font-family: var(--bb-font-sans, Geist, "Noto Sans JP", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);
23
59
  line-height: 1.5;
24
60
  }
25
61
 
@@ -1043,10 +1043,24 @@ function defaultCandidateBody(values, context = {}) {
1043
1043
  };
1044
1044
  }
1045
1045
 
1046
+ /**
1047
+ * Creates the knowledge outcome workspace.
1048
+ *
1049
+ * @param {object} options
1050
+ * @param {(session: object|null, projectCode: string|null) => boolean} [options.canEditDestination]
1051
+ * Decides whether the current user may register this project's knowledge
1052
+ * document destination. It receives the resolved session value and the
1053
+ * project code; only a `true` result shows the registration form. Without
1054
+ * it, the form follows `canManageKnowledge(session)`. Revision,
1055
+ * supersession, and retirement always follow `canManageKnowledge`.
1056
+ */
1046
1057
  export function createKnowledgeOutcomeController(options = {}) {
1047
1058
  const { root, api, apiMutation, project, session, onStateChange, onCommitted, onRetired, resolveDecisionDomain, serializeDraftInput, serializeCandidate, serializeRevision, serializeRetire, serializePreview } = options;
1048
1059
  if (!root || typeof root.replaceChildren !== 'function') throw new Error('knowledge_root_unavailable');
1049
1060
  const code = projectCodeOf(project);
1061
+ const canEditDestination = () => (typeof options.canEditDestination === 'function'
1062
+ ? options.canEditDestination((typeof session === 'function' ? session() : session) ?? null, code ?? null) === true
1063
+ : canManageKnowledge(session));
1050
1064
  const projectValue = typeof project === 'function' ? project() : project;
1051
1065
  const ownerCandidates = [];
1052
1066
  for (const candidate of [projectValue?.owner, ...(projectValue?.members?.items ?? [])]) {
@@ -1154,7 +1168,7 @@ export function createKnowledgeOutcomeController(options = {}) {
1154
1168
  destination.append(destinationHeading);
1155
1169
  const destinationContent = makeElement('div', { className: 'knowledge-destination-content' });
1156
1170
  renderKnowledgeDestination(destinationContent, state.destination, {
1157
- canEdit: canManageKnowledge(session),
1171
+ canEdit: canEditDestination(),
1158
1172
  onReload: loadDestination,
1159
1173
  onSave: saveDestination,
1160
1174
  });
@@ -1,15 +1,55 @@
1
+ /*
2
+ * Organization edition look (moved from brainbase-organization apps/web/public/styles.css,
3
+ * where it was loaded before this file). Kept first so the cascade is the same as in the
4
+ * organization edition. Colors read the shared tokens, with the organization values as fallbacks.
5
+ */
6
+ .outcome-mana-root { display: grid; gap: 20px; color: var(--bb-color-ink, #17221c); }
7
+ .outcome-mana-header { padding: 24px; border: 1px solid var(--bb-color-border, #dce5df); border-radius: 16px; background: linear-gradient(135deg, var(--bb-color-header-start, #f7faf8), var(--bb-color-header-end, #eef5f0)); }
8
+ .outcome-mana-header h1 { margin: 4px 0 8px; font-size: clamp(1.45rem, 3vw, 2rem); }
9
+ .outcome-mana-eyebrow { color: var(--bb-color-eyebrow, #47715a); font-size: .72rem; font-weight: 750; letter-spacing: .12em; text-transform: uppercase; }
10
+ .outcome-mana-actions,
11
+ .outcome-mana-toolbar { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
12
+ .outcome-mana-button,
13
+ .outcome-mana-list-select { min-height: 40px; border: 1px solid var(--bb-color-control-border, #cbd8d0); border-radius: 9px; background: var(--bb-color-panel, #fff); color: inherit; padding: 8px 12px; font: inherit; cursor: pointer; }
14
+ .outcome-mana-button-primary { border-color: var(--bb-color-action, #35684c); background: var(--bb-color-action, #35684c); color: var(--bb-color-action-text, #fff); }
15
+ .outcome-mana-section { min-width: 0; padding: 18px; border: 1px solid var(--bb-color-border, #dce5df); border-radius: 14px; background: var(--bb-color-panel, #fff); }
16
+ .outcome-mana-section { display: grid; gap: 14px; }
17
+ .outcome-mana-section-heading { display: flex; justify-content: space-between; gap: 12px; align-items: start; }
18
+ .outcome-mana-section-heading h2 { margin: 0; font-size: 1.1rem; }
19
+ .outcome-mana-section-description,
20
+ .outcome-mana-muted { color: var(--bb-color-muted, #66736b); }
21
+ .outcome-mana-section form { display: grid; gap: 12px; }
22
+ .outcome-mana-trigger-options { display: flex; flex-wrap: wrap; gap: 10px 18px; min-width: 0; margin: 0; padding: 12px; border: 1px solid var(--bb-color-border, #dce5df); border-radius: 9px; }
23
+ .outcome-mana-trigger-options legend { padding-inline: 5px; }
24
+ .outcome-mana-choice { display: inline-flex; align-items: center; gap: 7px; min-width: max-content; }
25
+ .outcome-mana-root .outcome-mana-choice input { width: auto; margin: 0; }
26
+ .outcome-mana-root input,
27
+ .outcome-mana-root select,
28
+ .outcome-mana-root textarea { box-sizing: border-box; width: 100%; border: 1px solid var(--bb-color-border-strong, #bdcbc2); border-radius: 8px; background: var(--bb-color-panel, #fff); padding: 9px 10px; font: inherit; }
29
+ .outcome-mana-root button:focus-visible,
30
+ .outcome-mana-root input:focus-visible { outline: 3px solid #9fc9ad; outline-offset: 2px; }
31
+ .outcome-mana-state,
32
+ .outcome-mana-inline-error { padding: 11px 12px; border-radius: 9px; background: #fff7e8; color: #694d18; }
33
+ .outcome-mana-inline-success { padding: 11px 12px; border-radius: 9px; background: #edf8f1; color: #28573b; }
34
+ .outcome-mana-run-list { display: grid; gap: 8px; }
35
+ .outcome-mana-run-item { display: flex; gap: 8px; align-items: center; }
36
+ @media (max-width: 1340px) {
37
+ .outcome-mana-header,
38
+ .outcome-mana-section { padding: 14px; }
39
+ }
40
+
1
41
  .outcome-mana-root {
2
- --mana-bg: #f6f8f6;
3
- --mana-surface: #ffffff;
4
- --mana-surface-soft: #f0f5f1;
5
- --mana-ink: #172019;
6
- --mana-muted: #657269;
7
- --mana-border: #d5ded6;
8
- --mana-border-strong: #b9c8bb;
9
- --mana-accent: #087d62;
10
- --mana-accent-dark: #05624e;
11
- --mana-danger: #a13d3d;
12
- --mana-warning: #8a631d;
42
+ --mana-bg: var(--bb-color-surface, #f6f8f6);
43
+ --mana-surface: var(--bb-color-panel, #ffffff);
44
+ --mana-surface-soft: var(--bb-color-surface, #f0f5f1);
45
+ --mana-ink: var(--bb-color-ink, #172019);
46
+ --mana-muted: var(--bb-color-muted, #657269);
47
+ --mana-border: var(--bb-color-border, #d5ded6);
48
+ --mana-border-strong: var(--bb-color-border-strong, #b9c8bb);
49
+ --mana-accent: var(--bb-color-accent, #087d62);
50
+ --mana-accent-dark: var(--bb-color-accent-strong, #05624e);
51
+ --mana-danger: var(--bb-color-danger, #a13d3d);
52
+ --mana-warning: var(--bb-color-warning, #8a631d);
13
53
  --mana-shadow: 0 1px 2px rgba(23, 32, 25, 0.04), 0 10px 28px rgba(23, 32, 25, 0.055);
14
54
  box-sizing: border-box;
15
55
  max-width: 1180px;
@@ -17,7 +57,7 @@
17
57
  padding: 28px 24px 72px;
18
58
  color: var(--mana-ink);
19
59
  background: var(--mana-bg);
20
- font-family: Geist, Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
60
+ font-family: var(--bb-font-sans, Geist, Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);
21
61
  line-height: 1.5;
22
62
  }
23
63
  .outcome-mana-root *, .outcome-mana-root *::before, .outcome-mana-root *::after { box-sizing: border-box; }
@@ -55,7 +95,7 @@
55
95
  .outcome-mana-settings-workspace > .outcome-mana-view-heading { padding: 16px 18px; border: 1px solid var(--mana-border); border-radius: 12px; background: var(--mana-surface); }
56
96
  .outcome-mana-runs-view .outcome-mana-section-heading { border-radius: 12px 12px 0 0; }
57
97
  .outcome-mana-setting-card h3 { margin: 0 0 12px; font-size: .9rem; }
58
- .outcome-mana-setting-card p { margin: 0; color: var(--mana-muted); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .76rem; white-space: pre-wrap; overflow-wrap: anywhere; }
98
+ .outcome-mana-setting-card p { margin: 0; color: var(--mana-muted); font-family: var(--bb-font-mono, ui-monospace, SFMono-Regular, Menlo, monospace); font-size: .76rem; white-space: pre-wrap; overflow-wrap: anywhere; }
59
99
 
60
100
  /* The five operational surfaces share a dense, rail-based workspace. The
61
101
  data remains readable at the 1586px reference viewport while each rail
@@ -74,7 +114,7 @@ button.outcome-mana-connection-row:focus-visible { position: relative; z-index:
74
114
  .outcome-mana-connection-header { color: var(--mana-muted); background: var(--mana-surface-soft); font-size: .7rem; font-weight: 720; letter-spacing: .02em; }
75
115
  .outcome-mana-connector-identity { display: flex; min-width: 0; align-items: center; gap: 10px; }
76
116
  .outcome-mana-connector-icon-frame { display: grid; width: 30px; height: 30px; flex: 0 0 30px; place-items: center; border: 1px solid rgba(31,42,35,.08); border-radius: 8px; background: #f1f4f1; }
77
- .outcome-mana-connector-icon { display: block; width: 20px; height: 20px; opacity: .9; }
117
+ .outcome-mana-connector-icon { display: block; width: 20px; height: 20px; object-fit: contain; opacity: .9; }
78
118
  .outcome-mana-connector-copy { display: grid; min-width: 0; gap: 2px; }
79
119
  .outcome-mana-connector-copy strong { overflow: hidden; font-size: .79rem; font-weight: 740; text-overflow: ellipsis; white-space: nowrap; }
80
120
  .outcome-mana-connector-copy h3 { margin: 0; font-size: 1.05rem; }
@@ -91,6 +131,9 @@ button.outcome-mana-connection-row:focus-visible { position: relative; z-index:
91
131
  .outcome-mana-connection-inspector, .outcome-mana-resource-panel { position: sticky; top: 18px; margin: 0; }
92
132
  .outcome-mana-connection-inspector { min-height: 210px; padding: 18px; border: 1px solid var(--mana-border); border-radius: 12px; background: var(--mana-surface); box-shadow: var(--mana-shadow); }
93
133
  .outcome-mana-connection-inspector h3 { font-size: 1.05rem; }
134
+ .outcome-mana-resource-section { margin-top: 24px; }
135
+ .outcome-mana-project-resource-grid { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 12px; margin-top: 12px; }
136
+ .outcome-mana-project-resource-card { min-width: 0; padding: 14px; border: 1px solid var(--mana-border); border-radius: 11px; background: var(--mana-surface); }
94
137
  .outcome-mana-resource-panel { min-height: 210px; }
95
138
  .outcome-mana-detail-tabs { display: flex; gap: 5px; margin: 16px 0 14px; padding: 4px; overflow-x: auto; border-bottom: 1px solid var(--mana-border); }
96
139
  .outcome-mana-detail-tab { min-height: 34px; padding: 7px 12px; border: 0; border-bottom: 2px solid transparent; color: var(--mana-muted); background: transparent; font: inherit; font-size: .78rem; font-weight: 720; white-space: nowrap; cursor: pointer; }
@@ -198,6 +241,35 @@ textarea.outcome-mana-input { min-height: 92px; resize: vertical; }
198
241
  .outcome-mana-authority-row { display: grid; grid-template-columns: 1.1fr 1.2fr 1fr 1fr 1.1fr; min-width: 720px; align-items: center; gap: 12px; padding: 10px 12px; border-top: 1px solid var(--mana-border); font-size: 0.8rem; }
199
242
  .outcome-mana-authority-row:first-child { border-top: 0; }
200
243
  .outcome-mana-authority-header { color: var(--mana-muted); background: var(--mana-surface-soft); font-size: 0.73rem; font-weight: 700; }
244
+ .outcome-mana-resource-picker { display: grid; grid-column: 1 / -1; gap: 9px; min-width: 0; margin: 0; padding: 14px; border: 1px solid var(--mana-border); border-radius: 9px; }
245
+ .outcome-mana-resource-picker legend { padding: 0 5px; color: var(--mana-ink); font-size: .79rem; font-weight: 700; }
246
+ .outcome-mana-resource-choices { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
247
+ .outcome-mana-resource-choice { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 2px 8px; align-items: center; padding: 10px; border: 1px solid var(--mana-border); border-radius: 8px; background: #fff; cursor: pointer; }
248
+ .outcome-mana-resource-choice:has(input:checked) { border-color: var(--mana-accent); background: #edf8f1; }
249
+ .outcome-mana-resource-choice input { grid-row: 1 / 3; accent-color: var(--mana-accent); }
250
+ .outcome-mana-resource-choice span { overflow: hidden; font-size: .8rem; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; }
251
+ .outcome-mana-resource-choice small { overflow-wrap: anywhere; color: var(--mana-muted); font-size: .68rem; }
252
+ .outcome-mana-resource-choice .outcome-mana-resource-version { grid-column: 2; grid-row: auto; width: 100%; min-width: 0; margin-top: 5px; padding: 7px 9px; border: 1px solid var(--mana-border); border-radius: 7px; background: #fff; color: var(--mana-ink); font: .72rem ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; }
253
+ .outcome-mana-resource-preserved { margin: 0; padding: 8px 10px; border-radius: 7px; color: var(--mana-warning); background: #fff9e9; font-size: .74rem; }
254
+ .outcome-mana-resource-picker-value[hidden] { display: none; }
255
+ .outcome-mana-profile-picker { display: grid; gap: 10px; margin: 0; padding: 14px; border: 1px solid var(--mana-border); border-radius: 10px; background: #fbfdfb; }
256
+ .outcome-mana-profile-picker legend { padding: 0 5px; color: var(--mana-ink); font-size: .85rem; font-weight: 760; }
257
+ .outcome-mana-profile-picker > .outcome-mana-muted { margin: 0; font-size: .76rem; }
258
+ .outcome-mana-profile-card { display: grid; grid-template-columns: auto minmax(0,1fr) auto; align-items: start; gap: 10px; padding: 12px; border: 1px solid var(--mana-border); border-radius: 9px; background: #fff; cursor: pointer; }
259
+ .outcome-mana-profile-card.is-selected { border-color: var(--mana-accent); background: #edf8f1; box-shadow: 0 0 0 1px rgba(8,125,98,.12); }
260
+ .outcome-mana-profile-card > input { margin-top: 3px; accent-color: var(--mana-accent); }
261
+ .outcome-mana-profile-copy, .outcome-mana-profile-statuses { display: grid; gap: 5px; min-width: 0; }
262
+ .outcome-mana-profile-copy strong { font-size: .83rem; }
263
+ .outcome-mana-profile-copy small, .outcome-mana-profile-statuses small { color: var(--mana-muted); font-size: .72rem; line-height: 1.45; }
264
+ .outcome-mana-profile-statuses { justify-items: end; white-space: nowrap; }
265
+ .outcome-mana-profile-statuses [data-readiness="available"] { color: var(--mana-accent-dark); font-weight: 750; }
266
+ .outcome-mana-profile-statuses [data-readiness="unavailable"] { color: var(--mana-danger); font-weight: 750; }
267
+ .outcome-mana-profile-statuses [data-readiness="unknown"] { color: var(--mana-warning); }
268
+ .outcome-mana-resource-choice[hidden] { display: none; }
269
+ .outcome-mana-preflight-list { display: grid; gap: 9px; margin: 0 0 16px; }
270
+ .outcome-mana-preflight-item { padding: 12px; border: 1px solid var(--mana-border); border-radius: 9px; background: #fbfdfb; }
271
+ .outcome-mana-preflight-item > strong { display: inline-block; margin: 0 8px 8px 0; font-size: .82rem; }
272
+ .outcome-mana-preflight-item .outcome-mana-definition { margin-bottom: 0; }
201
273
  .outcome-mana-trigger-options { display: flex; flex-wrap: wrap; gap: 9px; margin: 0; padding: 0; border: 0; }
202
274
  .outcome-mana-trigger-options legend { width: 100%; margin-bottom: 1px; font-size: 0.8rem; font-weight: 700; }
203
275
  .outcome-mana-choice { display: inline-flex; align-items: center; gap: 7px; padding: 8px 10px; border: 1px solid var(--mana-border); border-radius: 8px; font-size: 0.82rem; cursor: pointer; }
@@ -219,8 +291,11 @@ textarea.outcome-mana-input { min-height: 92px; resize: vertical; }
219
291
  }
220
292
  @media (max-width: 920px) {
221
293
  .outcome-mana-overview-layout, .outcome-mana-connection-detail-layout, .outcome-mana-delegation-layout, .outcome-mana-settings-layout { grid-template-columns: minmax(0, 1fr); }
294
+ .outcome-mana-project-resource-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
222
295
  .outcome-mana-inspector, .outcome-mana-connection-inspector, .outcome-mana-resource-panel, .outcome-mana-settings-rail { position: static; }
223
296
  .outcome-mana-empty-steps { grid-template-columns: 1fr; }
297
+ .outcome-mana-profile-card { grid-template-columns: auto minmax(0,1fr); }
298
+ .outcome-mana-profile-statuses { grid-column: 2; justify-items: start; white-space: normal; }
224
299
  }
225
300
  @media (max-width: 1100px) {
226
301
  .outcome-mana-view-heading { display: grid; }
@@ -232,6 +307,7 @@ textarea.outcome-mana-input { min-height: 92px; resize: vertical; }
232
307
  .outcome-mana-section-heading, .outcome-mana-section-content { padding: 16px; }
233
308
  .outcome-mana-section-heading { display: grid; gap: 10px; }
234
309
  .outcome-mana-form { display: grid; grid-template-columns: 1fr; }
310
+ .outcome-mana-resource-choices { grid-template-columns: 1fr; }
235
311
  .outcome-mana-form > .outcome-mana-field, .outcome-mana-form > .outcome-mana-inline-fields, .outcome-mana-form > .outcome-mana-actions, .outcome-mana-form > .outcome-mana-inline-error { grid-column: auto; }
236
312
  .outcome-mana-inline-fields { grid-template-columns: 1fr; }
237
313
  .outcome-mana-actions .outcome-mana-button, .outcome-mana-toolbar .outcome-mana-button { flex: 1 1 150px; }
@@ -241,6 +317,7 @@ textarea.outcome-mana-input { min-height: 92px; resize: vertical; }
241
317
  .outcome-mana-view-heading { display: grid; }
242
318
  .outcome-mana-kpi-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
243
319
  .outcome-mana-overview-layout, .outcome-mana-connection-grid, .outcome-mana-settings-grid { grid-template-columns: 1fr; }
320
+ .outcome-mana-project-resource-grid { grid-template-columns: 1fr; }
244
321
  .outcome-mana-inspector, .outcome-mana-connection-inspector, .outcome-mana-resource-panel, .outcome-mana-settings-rail { position: static; }
245
322
  .outcome-mana-connection-detail-layout, .outcome-mana-delegation-layout, .outcome-mana-settings-layout { grid-template-columns: 1fr; }
246
323
  .outcome-mana-settings-fieldset { grid-template-columns: 1fr; }