@hippo-digital/hippocampus 1.0.0-rc.1

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 (116) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/LICENSE +21 -0
  3. package/README.md +153 -0
  4. package/assets/dist/hippocampus.css +1 -0
  5. package/assets/hippocampus.scss +896 -0
  6. package/assets/javascript/blueprint.js +123 -0
  7. package/bin/hippocampus.js +106 -0
  8. package/docs/agent-roadmap.md +217 -0
  9. package/docs/agent-workflow.md +56 -0
  10. package/docs/agentic-patterns-to-port.md +273 -0
  11. package/docs/colour-pairings.md +41 -0
  12. package/docs/components.md +52 -0
  13. package/docs/copilot-ncrs-research-curator-agent.md +298 -0
  14. package/docs/custom-agents-usage.md +95 -0
  15. package/docs/design-actions-and-decisions.md +95 -0
  16. package/docs/gp-connect-real-data-to-production.md +66 -0
  17. package/docs/hippocampus-for-designers-and-researchers.md +261 -0
  18. package/docs/hippocampus-technical.md +373 -0
  19. package/docs/prompt-architecture-guardrails.md +39 -0
  20. package/docs/repeatable-research-round-ingestion.md +239 -0
  21. package/docs/research-knowledge-graph.md +552 -0
  22. package/docs/research-source-file-conventions.md +121 -0
  23. package/docs/source-model.md +252 -0
  24. package/index.js +47 -0
  25. package/lib/config.js +46 -0
  26. package/lib/context.js +59 -0
  27. package/lib/create-router.js +187 -0
  28. package/lib/discover-projects.js +45 -0
  29. package/lib/docs.js +72 -0
  30. package/lib/host-edit.js +151 -0
  31. package/lib/lint-knowledge.js +133 -0
  32. package/lib/load-knowledge.js +629 -0
  33. package/lib/package-paths.js +32 -0
  34. package/lib/paths.js +33 -0
  35. package/lib/resolve-root.js +84 -0
  36. package/lib/schema-version.js +96 -0
  37. package/lib/schema.js +346 -0
  38. package/package.json +70 -0
  39. package/scripts/audit-provenance.js +147 -0
  40. package/scripts/doctor.js +114 -0
  41. package/scripts/eject.js +51 -0
  42. package/scripts/import-blueprint-spreadsheet.js +242 -0
  43. package/scripts/import-design-actions.js +230 -0
  44. package/scripts/import-project-context.js +427 -0
  45. package/scripts/import-research-batch.js +160 -0
  46. package/scripts/import-research-deck.js +448 -0
  47. package/scripts/index-source-artefacts.js +261 -0
  48. package/scripts/init.js +232 -0
  49. package/scripts/install-skills.js +160 -0
  50. package/scripts/lib/artefact-text.js +347 -0
  51. package/scripts/lib/xlsx-grid.js +114 -0
  52. package/scripts/link-insights-to-needs.js +209 -0
  53. package/scripts/migrate-knowledge.js +73 -0
  54. package/scripts/promote-project-context-draft.js +125 -0
  55. package/scripts/promote-research-draft.js +236 -0
  56. package/scripts/smoke-routes.js +157 -0
  57. package/scripts/sync-project-context.js +236 -0
  58. package/scripts/sync-research-artefacts.js +294 -0
  59. package/scripts/triage-research-corpus.js +274 -0
  60. package/scripts/validate-knowledge.js +49 -0
  61. package/scripts/validate-skills.js +247 -0
  62. package/skills/COVERAGE-MATRIX.md +39 -0
  63. package/skills/README.md +77 -0
  64. package/skills/SKILL-FORMAT.md +100 -0
  65. package/skills/add-prototype-screen.skill.md +54 -0
  66. package/skills/add-scenario.skill.md +47 -0
  67. package/skills/add-user-needs.skill.md +51 -0
  68. package/skills/audit-knowledge-source.skill.md +47 -0
  69. package/skills/capture-route-review-pack.skill.md +52 -0
  70. package/skills/create-journey-from-scenario.skill.md +50 -0
  71. package/skills/deliver-service-slice.skill.md +65 -0
  72. package/skills/examples/README.md +15 -0
  73. package/skills/examples/non-copilot-research-ingestion.md +68 -0
  74. package/skills/examples/non-copilot-service-slice.md +64 -0
  75. package/skills/generate-service-slice.skill.md +57 -0
  76. package/skills/ingest-project-context.skill.md +58 -0
  77. package/skills/ingest-research-round.skill.md +60 -0
  78. package/skills/map-research-to-graph.skill.md +58 -0
  79. package/skills/record-accessibility-review.skill.md +52 -0
  80. package/skills/record-design-decision.skill.md +53 -0
  81. package/skills/review-research-import-draft.skill.md +45 -0
  82. package/skills/skills.json +464 -0
  83. package/skills/skills.schema.json +111 -0
  84. package/skills/structure-project-context-draft.skill.md +51 -0
  85. package/skills/structure-research-draft.skill.md +51 -0
  86. package/skills/triage-research-corpus.skill.md +51 -0
  87. package/skills/write-delivery-summary.skill.md +51 -0
  88. package/skills/write-route-review-summary.skill.md +55 -0
  89. package/views/hippocampus/_layout.html +45 -0
  90. package/views/hippocampus/blueprint-classic.html +39 -0
  91. package/views/hippocampus/blueprint.html +52 -0
  92. package/views/hippocampus/components/_blueprint-cell.njk +42 -0
  93. package/views/hippocampus/components/_blueprint-controls.njk +20 -0
  94. package/views/hippocampus/components/_blueprint-minimap.njk +14 -0
  95. package/views/hippocampus/components/_empty-state.njk +12 -0
  96. package/views/hippocampus/components/_journey-step.njk +21 -0
  97. package/views/hippocampus/components/_list.njk +23 -0
  98. package/views/hippocampus/components/_summary-card.njk +15 -0
  99. package/views/hippocampus/doc.html +11 -0
  100. package/views/hippocampus/docs.html +19 -0
  101. package/views/hippocampus/evidence-impact.html +53 -0
  102. package/views/hippocampus/graph.html +48 -0
  103. package/views/hippocampus/handover-empty.html +12 -0
  104. package/views/hippocampus/handover.html +56 -0
  105. package/views/hippocampus/index.html +46 -0
  106. package/views/hippocampus/journey-flow.html +31 -0
  107. package/views/hippocampus/journey.html +23 -0
  108. package/views/hippocampus/not-found.html +10 -0
  109. package/views/hippocampus/project.html +102 -0
  110. package/views/hippocampus/research.html +68 -0
  111. package/views/hippocampus/route-review.html +83 -0
  112. package/views/hippocampus/scenarios.html +56 -0
  113. package/views/hippocampus/trace.html +113 -0
  114. package/views/hippocampus/user-needs.html +32 -0
  115. package/views/hippocampus/user.html +157 -0
  116. package/views/hippocampus/users.html +32 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,55 @@
1
+ # Changelog
2
+
3
+ ## 1.0.0
4
+
5
+ First published release.
6
+
7
+ A design-knowledge base for NHS Prototype Kit projects: research rounds,
8
+ participants, insights and design actions alongside the user needs, scenarios,
9
+ journeys and screens they justify, rendered as a viewer inside your prototype.
10
+
11
+ ### Install and wiring
12
+
13
+ - `hippocampus init` writes the config and an empty knowledge base, then makes
14
+ two host edits inside marked, reversible blocks. `--dry-run` shows a diff,
15
+ `--no-wire` prints the lines instead, `eject` takes them back out and leaves
16
+ every byte of data.
17
+ - The end marker carries a hash of the block body, so a block your team has
18
+ edited is reported and left alone rather than overwritten.
19
+ - The `viewsPath` insertion applies only on exactly one match of a plain array
20
+ of string literals. When it cannot be certain, it writes nothing to that file
21
+ and prints the lines to paste.
22
+ - The viewer serves its own stylesheet, client JS and layout from its router, so
23
+ a host needs no sass entry point and no stylesheet link.
24
+
25
+ ### Rooting
26
+
27
+ - `--root` > `HIPPOCAMPUS_ROOT` > nearest `hippocampus.config.json` > nearest
28
+ `package.json` outside `node_modules` > cwd, with the winning rule reported.
29
+ - A root resolving inside `node_modules` is a hard error, not a guess.
30
+ - Commands that need a knowledge base refuse when none is found and say where
31
+ they looked, rather than exiting 0 having done nothing.
32
+
33
+ ### Validation
34
+
35
+ - Three tiers: errors are broken references, warnings are gaps worth filling,
36
+ info is coverage. `--strict` promotes warnings to failures.
37
+ - `doctor` checks wiring, integrity and every route, and prints the resolved
38
+ root first.
39
+
40
+ ### Data contract
41
+
42
+ - `schemaVersion` 1. Record schemas are passthrough, so fields written by a
43
+ newer version survive a read and a write; the linter names unrecognised fields
44
+ so a typo still surfaces.
45
+ - `_meta.json` records the version; absent means 1 and is never invented on
46
+ read. Data newer than the code is refused rather than read partially.
47
+
48
+ ### Docs and skills
49
+
50
+ - The 16 guides are served at `{basePath}/docs`, version-matched to the
51
+ installed package rather than copied into your repo.
52
+ - `skills install` copies the 19 agent skills into `.github/skills` with content
53
+ hashes, so an upgrade can tell a stale copy from one your team has edited.
54
+ - `init` reports research material in `hippocampus/source-artefacts/` rather
55
+ than silently committing it; `--private-artefacts` gitignores it.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Hippo Digital Limited
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,153 @@
1
+ # @hippo-digital/hippocampus
2
+
3
+ A design-knowledge base for NHS Prototype Kit projects. It holds the research a
4
+ service is built on - rounds, participants, insights, design actions - alongside
5
+ the user needs, scenarios, journeys and screens those findings justify, and
6
+ renders the whole thing as a viewer inside your prototype.
7
+
8
+ The point is that a screen can be traced back to the reason it exists: from a
9
+ route, to the needs it meets, to the insights that evidenced them, to the people
10
+ who said so, and forward again to the design actions still open against it.
11
+
12
+ ## Install
13
+
14
+ ```bash
15
+ npm install @hippo-digital/hippocampus
16
+ ```
17
+
18
+ `nhsuk-prototype-kit` and `nhsuk-frontend` are peer dependencies - your project
19
+ already has them, and two copies of the frontend sass in one build is a lost
20
+ afternoon.
21
+
22
+ ## Set it up
23
+
24
+ ```bash
25
+ npx hippocampus init
26
+ ```
27
+
28
+ writes `hippocampus.config.json` and an empty knowledge base, then makes the two
29
+ host edits for you. Both live between markers and are backed up first; a block
30
+ you have since edited is reported and left alone rather than overwritten.
31
+ `--dry-run` shows the diff and writes nothing, `--no-wire` writes the data and
32
+ prints the edits for you to paste, and `npx hippocampus eject` takes the edits
33
+ back out and leaves every byte of your knowledge base where it is.
34
+
35
+ ```bash
36
+ npx hippocampus doctor # what is wired, what is not, and where it looked
37
+ npx hippocampus skills install # copy the agent skills into .github/skills
38
+ ```
39
+
40
+ `skills install` records a hash of what it wrote, so a later upgrade can tell a
41
+ stale copy from one your team has edited - the edited one is left alone.
42
+
43
+ ## Wiring it by hand
44
+
45
+ Two lines in `app/routes.js`:
46
+
47
+ ```js
48
+ const { createHippocampus } = require('@hippo-digital/hippocampus')
49
+
50
+ const hippocampus = createHippocampus()
51
+ router.use(hippocampus.router)
52
+ ```
53
+
54
+ and one entry in `app.js`:
55
+
56
+ ```js
57
+ const hippocampus = require('@hippo-digital/hippocampus').createHippocampus()
58
+
59
+ viewsPath: ['app/views/', hippocampus.viewsPath]
60
+ ```
61
+
62
+ That is all of it. The viewer serves its own stylesheet, client JS and layout
63
+ from its router, so there is no sass entry point to add, no stylesheet link to
64
+ paste into your template, and nothing to re-copy when you upgrade.
65
+
66
+ ## Point it at a project
67
+
68
+ Add `hippocampus.config.json` at the root of your prototype:
69
+
70
+ ```json
71
+ {
72
+ "configVersion": 1,
73
+ "dataDir": "hippocampus",
74
+ "artefactsDir": "artefacts"
75
+ }
76
+ ```
77
+
78
+ and a `hippocampus/source/project.json`. Everything else is optional - a
79
+ knowledge base with nothing in it boots, renders every route, and tells you what
80
+ to add next.
81
+
82
+ Commands resolve the project the same way every time:
83
+
84
+ ```
85
+ --root <dir> > HIPPOCAMPUS_ROOT > nearest hippocampus.config.json
86
+ > nearest package.json outside node_modules > cwd
87
+ ```
88
+
89
+ A root that resolves inside `node_modules` is an error, not a guess - it would
90
+ otherwise produce an empty knowledge base and no explanation.
91
+
92
+ ## Commands
93
+
94
+ ```bash
95
+ npx hippocampus doctor # wiring, integrity and routes - start here
96
+ npx hippocampus validate # parse, check integrity, report coverage gaps
97
+ npx hippocampus validate --strict # and fail on warnings
98
+ npx hippocampus research triage # rank a research folder before importing anything
99
+ npx hippocampus research sync # inbox artefacts to reviewable drafts
100
+ npx hippocampus source index # record what was ingested, before the copies go
101
+ npx hippocampus migrate # write a schema upgrade back to disk
102
+ npx hippocampus --help
103
+ ```
104
+
105
+ `validate` reports in three tiers. Errors are broken references. Warnings are
106
+ gaps worth filling - and on a new project, a list of what to do next. Info is
107
+ coverage: nothing is wrong, something is thin.
108
+
109
+ ```
110
+ hippocampus: knowledge data is valid
111
+ info 51 of 108 insights link to no user need
112
+ info 108 of 132 needs (82%) sit at priority "medium"
113
+ ```
114
+
115
+ ## Documentation
116
+
117
+ The guides are served by the viewer at `{basePath}/docs`, so they always
118
+ describe the version you have installed. Nothing is copied into your repo -
119
+ a copied guide goes stale within a release, and the stale one is the copy people
120
+ read, because it is the one sitting in their editor.
121
+
122
+ `skills install` is the deliberate exception: an agent reads skills as repo
123
+ files, so those are copied, with hashes so an upgrade can tell a stale copy from
124
+ one your team has edited.
125
+
126
+ ## Keeping research material out of the repo
127
+
128
+ If your shared drive is the system of record - download into the inbox, extract
129
+ the knowledge, delete the copy - then run:
130
+
131
+ ```bash
132
+ npx hippocampus source index
133
+ ```
134
+
135
+ first. It writes `hippocampus/manifests/source-index.json` and a readable
136
+ `.md` beside it: every artefact's exact filename, size, sha256, which round it
137
+ belongs to, where it was recorded as coming from, and which knowledge records
138
+ cite it. The hash is the part that cannot be recovered later - it is what proves
139
+ a file you find on the drive in a year is the one the findings were drawn from,
140
+ rather than an edited descendant.
141
+
142
+ It also names the artefacts whose origin was never written down, which is the
143
+ list worth clearing before anything is deleted.
144
+
145
+ `init --private-artefacts` gitignores the copies once the index exists.
146
+
147
+ ## Data contract
148
+
149
+ Within a `schemaVersion`, changes are additive and unknown fields survive a read
150
+ and a write - so data written by a newer version of this package still loads in
151
+ an older one. `hippocampus/source/_meta.json` records the version; absent means
152
+ version 1. Data newer than the code is refused rather than read partially,
153
+ because reading forward is how a knowledge base gets destroyed by the next write.
@@ -0,0 +1 @@
1
+ .knowledge-admin-theme{background:#f6f5f2;font-family:-apple-system,"Segoe UI",Roboto,Arial,sans-serif}.knowledge-admin-theme .nhsuk-header{background:#1c1c1a}.knowledge-admin-theme h1,.knowledge-admin-theme h2,.knowledge-admin-theme h3,.knowledge-admin-theme h4{font-weight:600;letter-spacing:-0.01em}.knowledge-admin-theme .nhsuk-caption-l{color:#706f68;font-size:14px;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.knowledge-admin-theme a{color:#00726b}.knowledge-admin-theme .nhsuk-back-link,.knowledge-admin-theme .nhsuk-back-link__icon{color:#00726b}.knowledge-admin-theme .knowledge-card,.knowledge-admin-theme .knowledge-section,.knowledge-admin-theme .knowledge-blueprint-step,.knowledge-admin-theme .knowledge-linked-block{background:#fff;border-color:#e3e1d9;border-radius:3px;box-shadow:none}.knowledge-admin-theme .knowledge-card__meta,.knowledge-admin-theme .knowledge-muted{color:#8c8a80;font-family:ui-monospace,"SF Mono",Consolas,monospace;font-size:12px;letter-spacing:.03em;text-transform:uppercase}.knowledge-admin-theme .nhsuk-button{background:#1c1c1a;border-radius:2px}.knowledge-admin-theme .nhsuk-button--secondary{background:rgba(0,0,0,0);border-color:#1c1c1a;color:#1c1c1a}.knowledge-admin-theme .nhsuk-tag{border-radius:2px}.knowledge-admin-theme code{background:#e6f6f5;font-family:ui-monospace,"SF Mono",Consolas,monospace}.knowledge-grid{display:grid;grid-template-columns:repeat(auto-fit, minmax(240px, 1fr));gap:16px;margin-top:32px}.knowledge-list{display:grid;gap:16px}.knowledge-card,.knowledge-section,.knowledge-blueprint-step{border:1px solid #d8dde0;padding:24px;margin-bottom:24px;background:#fff}.knowledge-card,.knowledge-linked-block,.knowledge-timeline__item,.knowledge-admin-theme .nhsuk-lede-text{max-width:70ch}.knowledge-section>p,.knowledge-admin-theme .nhsuk-list--bullet,.knowledge-admin-theme .nhsuk-list--number{max-width:70ch}.knowledge-card__meta{color:#4c6272;font-size:16px;margin-bottom:8px}.knowledge-timeline{list-style:none;padding-left:0}.knowledge-timeline__item{border-left:4px solid #005eb8;padding-left:24px;margin-bottom:32px}.knowledge-admin-theme .knowledge-timeline__item{border-left-color:#00726b}.knowledge-blueprint-step__header{align-items:flex-start;display:flex;justify-content:space-between;gap:16px}.knowledge-lane{border-top:1px solid #d8dde0;display:grid;grid-template-columns:220px minmax(0, 1fr);gap:24px;padding:16px 0}.knowledge-lane[hidden]{display:none}.knowledge-lane__label h3{font-size:16px;margin:0}.knowledge-lane__content{max-width:70ch}.knowledge-lane__content>:last-child{margin-bottom:0}.knowledge-boundary{border-top:2px dashed #005eb8;color:#005eb8;font-size:14px;font-weight:700;letter-spacing:.04em;padding-top:8px;text-transform:uppercase}.knowledge-admin-theme .knowledge-boundary{border-top-color:#00726b;color:#00726b}.knowledge-tagged-item{border-left:4px solid #768692;margin-bottom:8px;padding:8px 12px;background:#f0f4f5}.knowledge-tagged-item strong{display:block;font-size:14px}.knowledge-tagged-item--high{border-left-color:#d5281b;background:#fbeae5}.knowledge-tagged-item--medium{border-left-color:#ffb81c;background:#fff9e6}.knowledge-admin-theme .knowledge-tagged-item--high{border-left-color:#8e5300;background:#fdf3e6}.knowledge-admin-theme .knowledge-tagged-item--medium{border-left-color:#ed8b00;background:#fdf3e6}.knowledge-linked-block{border-top:1px solid #d8dde0;padding-top:24px;margin-top:24px}.knowledge-linked-block:first-of-type{border-top:0;padding-top:0;margin-top:0}.knowledge-linked-block__detail{background:#f0f4f5;margin:24px 0;padding:16px}.knowledge-graph-summary{display:grid;grid-template-columns:repeat(auto-fit, minmax(140px, 1fr));gap:12px;margin:24px 0}.knowledge-graph-summary div{background:#f0f4f5;border-left:4px solid #005eb8;padding:12px}.knowledge-admin-theme .knowledge-graph-summary div{background:#e6f6f5;border-left-color:#00726b}.knowledge-graph-summary strong,.knowledge-graph-summary span{display:block}.knowledge-graph-summary strong{font-size:28px;line-height:1}.knowledge-graph-summary span{color:#4c6272;font-size:14px;margin-top:4px}.knowledge-graph{display:grid;grid-template-columns:repeat(auto-fit, minmax(220px, 1fr));gap:12px;margin-top:24px}.knowledge-graph__node{border:1px solid #d8dde0;border-top:4px solid #768692;padding:12px}.knowledge-graph__node strong,.knowledge-graph__node span{display:block}.knowledge-graph__node strong{color:#4c6272;font-size:14px;margin-bottom:4px}.knowledge-graph__node span{font-size:16px}.knowledge-graph__node--user{border-top-color:#005eb8}.knowledge-graph__node--scenario{border-top-color:#d5281b}.knowledge-graph__node--need{border-top-color:#007f3b}.knowledge-graph__node--evidence{border-top-color:#7c2855}.knowledge-admin-theme .knowledge-graph__node--scenario{border-top-color:#330072}.knowledge-admin-theme .knowledge-graph__node--need{border-top-color:#006747}.knowledge-graph__node--journey,.knowledge-graph__node--screen,.knowledge-graph__node--decision{border-top-color:#ffb81c}.knowledge-edge-list{display:grid;gap:8px}.knowledge-edge-list li{background:#f0f4f5;display:grid;grid-template-columns:minmax(0, 1fr) auto minmax(0, 1fr);gap:12px;padding:12px}.knowledge-edge-list span{color:#4c6272;font-size:14px;font-weight:700;text-transform:uppercase}.knowledge-trace-controls{display:flex;flex-wrap:wrap;align-items:flex-end;gap:16px 24px;margin-bottom:0}.knowledge-trace-controls__field{display:flex;flex-direction:column;width:100%;max-width:320px}.knowledge-trace-controls__field .nhsuk-label{margin-bottom:4px}.knowledge-trace-controls__submit{margin:0}.knowledge-trace-timeline,.knowledge-trace-children{list-style:none;margin:0;padding-left:0}.knowledge-trace-timeline{position:relative}.knowledge-trace-timeline::before{background:#005eb8;bottom:0;content:"";left:13px;position:absolute;top:8px;width:4px}.knowledge-trace-group,.knowledge-trace-item{position:relative}.knowledge-trace-group{padding-left:48px}.knowledge-trace-group__content{margin-bottom:24px}.knowledge-trace-group__content h3{margin-bottom:16px}.knowledge-trace-children{display:grid;gap:16px}.knowledge-trace-children .knowledge-trace-children{border-left:2px solid #d8dde0;margin-top:16px;padding-left:24px}.knowledge-trace-item{padding-left:48px}.knowledge-trace-item__marker{background:#fff;border:4px solid #005eb8;border-radius:50%;height:20px;left:3px;position:absolute;top:4px;width:20px}.knowledge-trace-children .knowledge-trace-item__marker{border-color:#768692}.knowledge-trace-item__content{max-width:70ch;border-top:1px solid #d8dde0;padding:16px 0 8px}.knowledge-trace-item--selected .knowledge-trace-item__content{background:#f0f4f5;border-left:4px solid #005eb8;border-top:0;margin:8px 0 32px;padding:16px}.knowledge-trace-item--selected .knowledge-trace-item__marker{background:#005eb8}.knowledge-admin-theme .knowledge-trace-timeline::before{background:#00726b}.knowledge-admin-theme .knowledge-trace-item__marker{border-color:#00726b}.knowledge-admin-theme .knowledge-trace-children .knowledge-trace-item__marker{border-color:#768692}.knowledge-admin-theme .knowledge-trace-item--selected .knowledge-trace-item__content{border-left-color:#00726b}.knowledge-admin-theme .knowledge-trace-item--selected .knowledge-trace-item__marker{background:#00726b}.knowledge-trace-item__date{color:#4c6272;font-size:16px;font-weight:700;margin-bottom:4px}.knowledge-trace-item__heading{font-size:22px;margin:0 0 8px}.knowledge-trace-item__type{display:inline-block;padding:2px 10px;margin-bottom:8px;font-size:14px;font-weight:700;color:#fff;background:#768692;border-radius:12px}.knowledge-trace-item__type--user{background:#005eb8}.knowledge-trace-item__type--scenario{background:#d5281b}.knowledge-trace-item__type--need{background:#007f3b}.knowledge-admin-theme .knowledge-trace-item__type--scenario{background:#330072}.knowledge-admin-theme .knowledge-trace-item__type--need{background:#006747}.knowledge-trace-item__type--evidence{background:#7c2855}.knowledge-trace-item__type--journey,.knowledge-trace-item__type--screen,.knowledge-trace-item__type--decision{color:#212b32;background:#ffb81c}.knowledge-trace-item__relationship{color:#4c6272;font-size:16px;margin-bottom:4px}.knowledge-trace-item__relationship strong{color:#212b32}.knowledge-muted{color:#4c6272}.knowledge-confidence-tag{display:inline-block;padding:2px 8px;font-size:13px;font-weight:700;border-radius:10px}.knowledge-confidence-tag--high{color:#00726b;background:#e6f6f5}.knowledge-confidence-tag--medium{color:#00758f;background:#e6f6fa}.knowledge-confidence-tag--low{color:#4c6272;background:#f0f4f5}.knowledge-matrix-wrap{overflow-x:auto}.knowledge-matrix{border-collapse:collapse;min-width:1200px;width:100%}.knowledge-matrix th,.knowledge-matrix td{border:1px solid #d8dde0;padding:12px;text-align:left;vertical-align:top}.knowledge-matrix thead th,.knowledge-matrix tbody th{background:#f0f4f5}.knowledge-matrix__boundary td{border-top:2px dashed #005eb8;color:#005eb8;font-weight:700;text-transform:uppercase}.knowledge-admin-theme .knowledge-matrix__boundary td{border-top-color:#00726b;color:#00726b}.knowledge-blueprint-controls{position:sticky;top:0;z-index:2;display:flex;flex-wrap:wrap;gap:16px 24px;align-items:flex-start;padding:12px 0;margin-bottom:24px;background:#fff;border-bottom:1px solid #d8dde0}.knowledge-blueprint-controls__lenses{display:flex;flex-wrap:wrap;gap:8px}.knowledge-lens-btn{padding:6px 14px;font:inherit;color:#005eb8;background:#fff;border:2px solid #005eb8;border-radius:20px;cursor:pointer}.knowledge-lens-btn[aria-pressed=true]{color:#fff;background:#005eb8}.knowledge-admin-theme .knowledge-lens-btn{color:#00726b;border-color:#00726b}.knowledge-admin-theme .knowledge-lens-btn[aria-pressed=true]{background:#00726b}.knowledge-blueprint-controls__lanes{display:flex;flex-wrap:wrap;gap:8px 16px;padding:0;margin:0;border:0}.knowledge-blueprint-controls__lanes legend{width:100%;font-size:14px;font-weight:700}.knowledge-lane-toggle{display:inline-flex;align-items:center;gap:4px;font-size:14px}.knowledge-blueprint-layout{display:grid;grid-template-columns:72px 1fr;gap:24px}.knowledge-blueprint-minimap{position:sticky;top:64px;align-self:start}.knowledge-blueprint-minimap ul{position:relative;padding:0;margin:0;list-style:none}.knowledge-blueprint-minimap ul::before{position:absolute;top:16px;bottom:16px;left:15px;width:2px;content:"";background:#d8dde0}.knowledge-blueprint-minimap li{position:relative;margin-bottom:16px}.knowledge-blueprint-minimap a{position:relative;display:block}.knowledge-blueprint-minimap__marker{display:flex;align-items:center;justify-content:center;width:32px;height:32px;font-weight:700;color:#005eb8;background:#fff;border:2px solid #005eb8;border-radius:50%}.knowledge-blueprint-minimap a.is-active .knowledge-blueprint-minimap__marker{color:#fff;background:#005eb8}.knowledge-admin-theme .knowledge-blueprint-minimap__marker{color:#00726b;border-color:#00726b}.knowledge-admin-theme .knowledge-blueprint-minimap a.is-active .knowledge-blueprint-minimap__marker{background:#00726b}.knowledge-blueprint-step{scroll-margin-top:88px}.knowledge-flow-diagram{overflow-x:auto;padding:24px;margin-bottom:24px;background:#fff;border:1px solid #d8dde0}.knowledge-flow-source{overflow-x:auto;white-space:pre}.knowledge-admin-theme .knowledge-flow-diagram{border-color:#e3e1d9;border-radius:3px}@media(max-width: 48.0525em){.knowledge-blueprint-layout{display:block}.knowledge-blueprint-minimap{position:static;margin-bottom:16px}.knowledge-blueprint-minimap ul{display:flex;flex-wrap:wrap;gap:8px}.knowledge-blueprint-minimap ul::before{display:none}.knowledge-blueprint-minimap li{margin-bottom:0}.knowledge-lane{grid-template-columns:1fr;gap:8px}.knowledge-edge-list li{grid-template-columns:1fr}.knowledge-trace-controls{grid-template-columns:1fr;gap:0}.knowledge-trace-timeline::before{left:9px}.knowledge-trace-group,.knowledge-trace-item{padding-left:36px}.knowledge-trace-item__marker{height:16px;left:1px;width:16px}}.knowledge-admin-theme .knowledge-empty-state{max-width:70ch;padding:24px;margin-bottom:24px;background:#fff;border-left:4px solid #aeb7bd}.knowledge-admin-theme .knowledge-empty-state h2{margin-top:0}.knowledge-admin-theme .knowledge-empty-state p:last-child{margin-bottom:0}.knowledge-admin-theme .knowledge-doc{max-width:76ch;padding:24px 32px;background:#fff}.knowledge-admin-theme .knowledge-doc h1{margin-top:0}.knowledge-admin-theme .knowledge-doc h2,.knowledge-admin-theme .knowledge-doc h3{margin-top:32px}.knowledge-admin-theme .knowledge-doc pre{padding:16px;overflow-x:auto;background:#f6f5f2;border-left:4px solid #aeb7bd}.knowledge-admin-theme .knowledge-doc code{font-size:15px}.knowledge-admin-theme .knowledge-doc table{width:100%;margin-bottom:24px;border-collapse:collapse}.knowledge-admin-theme .knowledge-doc th,.knowledge-admin-theme .knowledge-doc td{padding:8px 12px;text-align:left;vertical-align:top;border-bottom:1px solid #d8dde0}