@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.
- package/CHANGELOG.md +55 -0
- package/LICENSE +21 -0
- package/README.md +153 -0
- package/assets/dist/hippocampus.css +1 -0
- package/assets/hippocampus.scss +896 -0
- package/assets/javascript/blueprint.js +123 -0
- package/bin/hippocampus.js +106 -0
- package/docs/agent-roadmap.md +217 -0
- package/docs/agent-workflow.md +56 -0
- package/docs/agentic-patterns-to-port.md +273 -0
- package/docs/colour-pairings.md +41 -0
- package/docs/components.md +52 -0
- package/docs/copilot-ncrs-research-curator-agent.md +298 -0
- package/docs/custom-agents-usage.md +95 -0
- package/docs/design-actions-and-decisions.md +95 -0
- package/docs/gp-connect-real-data-to-production.md +66 -0
- package/docs/hippocampus-for-designers-and-researchers.md +261 -0
- package/docs/hippocampus-technical.md +373 -0
- package/docs/prompt-architecture-guardrails.md +39 -0
- package/docs/repeatable-research-round-ingestion.md +239 -0
- package/docs/research-knowledge-graph.md +552 -0
- package/docs/research-source-file-conventions.md +121 -0
- package/docs/source-model.md +252 -0
- package/index.js +47 -0
- package/lib/config.js +46 -0
- package/lib/context.js +59 -0
- package/lib/create-router.js +187 -0
- package/lib/discover-projects.js +45 -0
- package/lib/docs.js +72 -0
- package/lib/host-edit.js +151 -0
- package/lib/lint-knowledge.js +133 -0
- package/lib/load-knowledge.js +629 -0
- package/lib/package-paths.js +32 -0
- package/lib/paths.js +33 -0
- package/lib/resolve-root.js +84 -0
- package/lib/schema-version.js +96 -0
- package/lib/schema.js +346 -0
- package/package.json +70 -0
- package/scripts/audit-provenance.js +147 -0
- package/scripts/doctor.js +114 -0
- package/scripts/eject.js +51 -0
- package/scripts/import-blueprint-spreadsheet.js +242 -0
- package/scripts/import-design-actions.js +230 -0
- package/scripts/import-project-context.js +427 -0
- package/scripts/import-research-batch.js +160 -0
- package/scripts/import-research-deck.js +448 -0
- package/scripts/index-source-artefacts.js +261 -0
- package/scripts/init.js +232 -0
- package/scripts/install-skills.js +160 -0
- package/scripts/lib/artefact-text.js +347 -0
- package/scripts/lib/xlsx-grid.js +114 -0
- package/scripts/link-insights-to-needs.js +209 -0
- package/scripts/migrate-knowledge.js +73 -0
- package/scripts/promote-project-context-draft.js +125 -0
- package/scripts/promote-research-draft.js +236 -0
- package/scripts/smoke-routes.js +157 -0
- package/scripts/sync-project-context.js +236 -0
- package/scripts/sync-research-artefacts.js +294 -0
- package/scripts/triage-research-corpus.js +274 -0
- package/scripts/validate-knowledge.js +49 -0
- package/scripts/validate-skills.js +247 -0
- package/skills/COVERAGE-MATRIX.md +39 -0
- package/skills/README.md +77 -0
- package/skills/SKILL-FORMAT.md +100 -0
- package/skills/add-prototype-screen.skill.md +54 -0
- package/skills/add-scenario.skill.md +47 -0
- package/skills/add-user-needs.skill.md +51 -0
- package/skills/audit-knowledge-source.skill.md +47 -0
- package/skills/capture-route-review-pack.skill.md +52 -0
- package/skills/create-journey-from-scenario.skill.md +50 -0
- package/skills/deliver-service-slice.skill.md +65 -0
- package/skills/examples/README.md +15 -0
- package/skills/examples/non-copilot-research-ingestion.md +68 -0
- package/skills/examples/non-copilot-service-slice.md +64 -0
- package/skills/generate-service-slice.skill.md +57 -0
- package/skills/ingest-project-context.skill.md +58 -0
- package/skills/ingest-research-round.skill.md +60 -0
- package/skills/map-research-to-graph.skill.md +58 -0
- package/skills/record-accessibility-review.skill.md +52 -0
- package/skills/record-design-decision.skill.md +53 -0
- package/skills/review-research-import-draft.skill.md +45 -0
- package/skills/skills.json +464 -0
- package/skills/skills.schema.json +111 -0
- package/skills/structure-project-context-draft.skill.md +51 -0
- package/skills/structure-research-draft.skill.md +51 -0
- package/skills/triage-research-corpus.skill.md +51 -0
- package/skills/write-delivery-summary.skill.md +51 -0
- package/skills/write-route-review-summary.skill.md +55 -0
- package/views/hippocampus/_layout.html +45 -0
- package/views/hippocampus/blueprint-classic.html +39 -0
- package/views/hippocampus/blueprint.html +52 -0
- package/views/hippocampus/components/_blueprint-cell.njk +42 -0
- package/views/hippocampus/components/_blueprint-controls.njk +20 -0
- package/views/hippocampus/components/_blueprint-minimap.njk +14 -0
- package/views/hippocampus/components/_empty-state.njk +12 -0
- package/views/hippocampus/components/_journey-step.njk +21 -0
- package/views/hippocampus/components/_list.njk +23 -0
- package/views/hippocampus/components/_summary-card.njk +15 -0
- package/views/hippocampus/doc.html +11 -0
- package/views/hippocampus/docs.html +19 -0
- package/views/hippocampus/evidence-impact.html +53 -0
- package/views/hippocampus/graph.html +48 -0
- package/views/hippocampus/handover-empty.html +12 -0
- package/views/hippocampus/handover.html +56 -0
- package/views/hippocampus/index.html +46 -0
- package/views/hippocampus/journey-flow.html +31 -0
- package/views/hippocampus/journey.html +23 -0
- package/views/hippocampus/not-found.html +10 -0
- package/views/hippocampus/project.html +102 -0
- package/views/hippocampus/research.html +68 -0
- package/views/hippocampus/route-review.html +83 -0
- package/views/hippocampus/scenarios.html +56 -0
- package/views/hippocampus/trace.html +113 -0
- package/views/hippocampus/user-needs.html +32 -0
- package/views/hippocampus/user.html +157 -0
- 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}
|