Skip to content

Commit 3eafba5

Browse files
authored
Merge branch 'master' into daves-branch6
2 parents e9d5759 + 501d0ea commit 3eafba5

73 files changed

Lines changed: 15613 additions & 222 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.azad/.locked-paths

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
[
22
"/Users/davidevans/Documents/Projects/procurement-prototype/app/views/current/search-results.html",
33
"/Users/davidevans/Documents/Projects/procurement-prototype/app/views/current/create-account/email-verification.html",
4-
"/Users/davidevans/Documents/Projects/procurement-prototype/app/views/current/create-account/email-welcome.html"
4+
"/Users/davidevans/Documents/Projects/procurement-prototype/app/views/current/create-account/email-welcome.html",
5+
"/Users/davidevans/Documents/Projects/procurement-prototype/app/views/current/search-results-dashboard.html"
56
]
169 KB
Loading

app/assets/images/woundcare.png

193 KB
Loading
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
2+
3+
.app-card {
4+
&--blue {
5+
border-color: nhsuk-tint(nhsuk-colour("blue"), 30%);
6+
color: nhsuk-shade(nhsuk-colour("blue"), 30%);
7+
background-color: nhsuk-tint(nhsuk-colour("blue"), 80%);
8+
9+
&.nhsuk-card--clickable:active {
10+
border-color: nhsuk-shade(nhsuk-colour("blue"), 30%);
11+
}
12+
}
13+
14+
&--green {
15+
border-color: nhsuk-tint(nhsuk-colour("green"), 40%);
16+
color: nhsuk-shade(nhsuk-colour("green"), 40%);
17+
background-color: nhsuk-tint(nhsuk-colour("green"), 80%);
18+
19+
&.nhsuk-card--clickable:active {
20+
border-color: nhsuk-shade(nhsuk-colour("green"), 40%);
21+
}
22+
}
23+
24+
&--orange {
25+
border-color: nhsuk-shade(nhsuk-colour("warm-yellow"), 10%);
26+
color: nhsuk-shade(nhsuk-colour("warm-yellow"), 70%);
27+
background-color: nhsuk-tint(nhsuk-colour("warm-yellow"), 70%);
28+
29+
&.nhsuk-card--clickable:active {
30+
border-color: nhsuk-shade(nhsuk-colour("warm-yellow"), 30%);
31+
}
32+
33+
blockquote {
34+
border-color: nhsuk-colour("warm-yellow");
35+
}
36+
}
37+
38+
&--red {
39+
border-color: nhsuk-tint(nhsuk-colour("red"), 50%);
40+
color: nhsuk-shade(nhsuk-colour("red"), 50%);
41+
background-color: nhsuk-tint(nhsuk-colour("red"), 80%);
42+
43+
&.nhsuk-card--clickable:active {
44+
border-color: nhsuk-shade(nhsuk-colour("red"), 50%);
45+
}
46+
}
47+
48+
&--blue,
49+
&--green,
50+
&--orange,
51+
&--red,
52+
&--yellow {
53+
.nhsuk-card__link,
54+
.nhsuk-card__link:hover {
55+
color: inherit;
56+
}
57+
}
58+
59+
&--offset {
60+
background-color: rgba(nhsuk-colour("grey-5"), 0.5);
61+
}
62+
}
63+
64+
.app-card--compact {
65+
@include nhsuk-responsive-margin(3, "bottom");
66+
67+
.nhsuk-card__heading {
68+
@include nhsuk-responsive-margin(2, "bottom");
69+
}
70+
71+
.nhsuk-card__content {
72+
@include nhsuk-responsive-padding(4);
73+
}
74+
}
75+
76+
// Align counts across cards
77+
.nhsuk-card:has(> .nhsuk-card__content > .app-card__data) {
78+
display: flex;
79+
80+
.nhsuk-card__heading {
81+
line-height: 1.2;
82+
}
83+
84+
.nhsuk-card__content {
85+
display: flex;
86+
flex: 1;
87+
flex-direction: column;
88+
justify-content: space-between;
89+
}
90+
}
91+
92+
.app-card__data {
93+
@include nhsuk-font-size(48);
94+
@include nhsuk-typography-weight-bold;
95+
}
96+
97+
.nhsuk-card--feature > .nhsuk-card__content {
98+
& > .app-card__heading {
99+
&--green {
100+
background-color: nhsuk-colour("green");
101+
}
102+
103+
&--grey {
104+
background-color: nhsuk-colour("grey-1");
105+
}
106+
107+
&--orange {
108+
color: nhsuk-shade(nhsuk-colour("warm-yellow"), 80%);
109+
background-color: nhsuk-colour("warm-yellow");
110+
}
111+
112+
&--red {
113+
background-color: nhsuk-colour("red");
114+
}
115+
}
116+
}
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
2+
3+
/* Section heading with coloured underline */
4+
.compass-section { margin-bottom: 48px; }
5+
.compass-section__heading {
6+
font-size: 22px; font-weight: 700; color: #212b32;
7+
padding-bottom: 12px; border-bottom: 4px solid #003087;
8+
margin-bottom: 4px; display: flex; align-items: center; gap: 10px;
9+
}
10+
.compass-section__subtitle { font-size: 15px; color: #4c6272; margin-bottom: 20px; }
11+
12+
/* 2-column grid */
13+
.compass-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
14+
15+
/* Stat tile with coloured top border */
16+
.stat-tile {
17+
background: #fff; border: 1px solid #d8dde0;
18+
border-top: 4px solid #003087; padding: 20px;
19+
}
20+
.stat-tile--green { border-top-color: #007f3b; }
21+
.stat-tile--aqua { border-top-color: #00a9ce; }
22+
.stat-tile--yellow { border-top-color: #ffb81c; }
23+
.stat-tile--red { border-top-color: #da291c; }
24+
.stat-tile--purple { border-top-color: #330072; }
25+
.stat-tile__label { font-size: 13px; font-weight: 600; color: #4c6272; text-transform: uppercase; letter-spacing: .4px; margin-bottom: 8px; }
26+
.stat-tile__value { font-size: 32px; font-weight: 700; color: #212b32; line-height: 1; margin-bottom: 4px; }
27+
.stat-tile__sub { font-size: 14px; color: #4c6272; }
28+
29+
/* Card label (eyebrow text) */
30+
.compass-card__label {
31+
font-size: 13px; font-weight: 700; color: #4c6272;
32+
text-transform: uppercase; letter-spacing: .5px; margin-bottom: 8px;
33+
display: flex; align-items: center; gap: 8px;
34+
}
35+
36+
/* Horizontal bar chart */
37+
.bar-chart { display: flex; flex-direction: column; gap: 10px; margin-top: 12px; }
38+
.bar-item { display: flex; align-items: center; gap: 12px; }
39+
.bar-label { font-size: 14px; color: #212b32; min-width: 148px; flex-shrink: 0; }
40+
.bar-track { flex: 1; background: #f0f4f5; height: 28px; overflow: hidden; }
41+
.bar-fill { height: 100%; display: flex; align-items: center; padding-left: 10px; font-size: 12px; font-weight: 700; color: #fff; min-width: 20px; }
42+
.bar-count { font-size: 14px; font-weight: 600; min-width: 36px; text-align: right; }
43+
44+
/* Segmented bar */
45+
.seg-bar { height: 36px; display: flex; overflow: hidden; margin: 12px 0; }
46+
.seg-bar__seg { display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; color: #fff; }
47+
.seg-legend { display: flex; flex-wrap: wrap; gap: 12px; }
48+
.seg-legend__item { display: flex; align-items: center; gap: 6px; font-size: 13px; }
49+
.seg-legend__dot { width: 12px; height: 12px; flex-shrink: 0; }
50+
51+
/* Timeline chart */
52+
.timeline-chart { margin-top: 12px; }
53+
.timeline-row { display: flex; align-items: center; gap: 12px; margin-bottom: 10px; }
54+
.timeline-lbl { font-size: 13px; color: #212b32; min-width: 124px; }
55+
.timeline-track { flex: 1; background: #f0f4f5; height: 24px; overflow: hidden; }
56+
.timeline-fill { height: 100%; }
57+
.timeline-num { font-size: 13px; font-weight: 600; min-width: 28px; text-align: right; }
58+
59+
/* Trust comparison list */
60+
.trust-list { display: flex; flex-direction: column; }
61+
.trust-item { padding: 12px 0; border-bottom: 1px solid #d8dde0; display: flex; align-items: center; gap: 12px; }
62+
.trust-item:last-child { border-bottom: none; }
63+
.trust-item__rank {
64+
width: 28px; height: 28px; border-radius: 50%;
65+
background: #f0f4f5; display: flex; align-items: center; justify-content: center;
66+
font-size: 12px; font-weight: 700; color: #4c6272; flex-shrink: 0;
67+
}
68+
.trust-item__rank--you { background: #003087; color: #fff; font-size: 11px; }
69+
.trust-item__name { flex: 1; font-size: 14px; font-weight: 600; color: #212b32; }
70+
.trust-item__type { font-size: 12px; color: #768692; font-weight: 400; }
71+
.trust-item__bar { flex: 2; height: 16px; background: #f0f4f5; overflow: hidden; }
72+
.trust-item__bar-fill { height: 100%; }
73+
.trust-item__count { font-size: 14px; font-weight: 700; min-width: 36px; text-align: right; }
74+
75+
/* Activity feed */
76+
.activity-feed { display: flex; flex-direction: column; }
77+
.activity-item { padding: 14px 0; border-bottom: 1px solid #d8dde0; display: flex; gap: 12px; align-items: flex-start; }
78+
.activity-item:last-child { border-bottom: none; }
79+
.activity-item__date { margin-left: auto; font-size: 12px; color: #768692; flex-shrink: 0; white-space: nowrap; }
80+
81+
/* Filter pill bar (no NHS equivalent for toggle pills) */
82+
.filter-bar {
83+
background: #fff; border: 1px solid #d8dde0;
84+
padding: 16px 20px; margin-bottom: 32px;
85+
display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
86+
}
87+
.filter-bar__label { font-size: 14px; font-weight: 700; color: #4c6272; flex-shrink: 0; }
88+
.filter-pill {
89+
padding: 6px 14px; font-size: 14px; font-family: inherit;
90+
border: 2px solid #d8dde0; background: #f0f4f5; color: #212b32;
91+
border-radius: 100px; cursor: pointer;
92+
}
93+
.filter-pill--active { background: #003087; border-color: #003087; color: #fff; }
94+
.filter-bar__count { margin-left: auto; font-size: 14px; color: #4c6272; }
95+
.filter-bar__count strong { color: #003087; }
96+
97+
/* Feature comparison table overrides */
98+
.feature-table th { background: #003087; color: #fff; }
99+
.feature-table th:first-child { background: #f0f4f5; color: #4c6272; font-size: 12px; text-transform: uppercase; letter-spacing: .4px; }
100+
.check { color: #007f3b; font-weight: 700; font-size: 16px; }
101+
.cross { color: #aeb7bd; font-size: 16px; }
102+
103+
/* ROI positive */
104+
.roi-positive { color: #007f3b; font-weight: 700; }
105+
106+
/* Price range bars */
107+
.price-tier { margin-bottom: 16px; }
108+
.price-tier__header { display: flex; justify-content: space-between; margin-bottom: 6px; }
109+
.price-tier__bar { height: 20px; }
110+
111+
/* Donut chart */
112+
.donut-wrap { display: flex; align-items: center; gap: 24px; margin-top: 12px; }
113+
.donut { position: relative; width: 128px; height: 128px; flex-shrink: 0; }
114+
.donut svg { transform: rotate(-90deg); }
115+
.donut__center { position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); text-align: center; }
116+
.donut__center .d-num { font-size: 22px; font-weight: 700; color: #003087; display: block; }
117+
.donut__center .d-lbl { font-size: 11px; color: #4c6272; }
118+
.donut-legend { display: flex; flex-direction: column; gap: 8px; }
119+
.donut-legend__item { display: flex; align-items: center; gap: 8px; font-size: 13px; }
120+
.donut-legend__dot { width: 12px; height: 12px; border-radius: 50%; flex-shrink: 0; }
121+
.donut-legend__val { margin-left: auto; font-weight: 700; padding-left: 16px; }
122+
123+
/* SME card panel */
124+
.sme-card { padding: 14px; border: 1px solid #d8dde0; border-left: 4px solid #007f3b; margin-bottom: 10px; }
125+
.sme-card--aqua { border-left-color: #00a9ce; }
126+
127+
/* Innovation row */
128+
.innovation-row { display: flex; align-items: center; gap: 10px; padding: 10px 12px; background: #f0f4f5; margin-bottom: 8px; }
129+
130+
/* Live pulse dot */
131+
.live-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: #00a9ce; margin-right: 4px; animation: pulse 2s infinite; }
132+
@keyframes pulse { 0%,100%{opacity:1} 50%{opacity:.35} }
133+
134+
/* Footnote */
135+
.compass-footnote { font-size: 13px; color: #768692; margin-top: 12px; padding-top: 12px; border-top: 1px solid #d8dde0; }
136+
137+
/* CTA panel */
138+
.cta-panel { background: #003087; color: #fff; padding: 28px 32px; display: flex; align-items: center; gap: 24px; flex-wrap: wrap; }
139+
.cta-panel h3 { color: #fff; font-size: 20px; margin: 0 0 6px; }
140+
.cta-panel p { opacity: .85; margin: 0; font-size: 15px; }
141+
142+
@media (max-width: 768px) {
143+
.compass-grid-2 { grid-template-columns: 1fr; }
144+
.trust-banner__stats { display: none; }
145+
.donut-wrap { flex-direction: column; }
146+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/* ── Viz bars ─────────────────────────────────────────── */
2+
.app-bar-track {
3+
background: #f0f4f5;
4+
height: 20px;
5+
margin-top: 2px;
6+
}
7+
.app-bar-fill {
8+
background: #005eb8;
9+
height: 100%;
10+
display: flex;
11+
align-items: center;
12+
justify-content: flex-end;
13+
padding-right: 6px;
14+
}
15+
.app-bar-fill span {
16+
color: #fff;
17+
font-size: 12px;
18+
font-weight: 600;
19+
}
20+
21+
/* ── Stat panels ──────────────────────────────────────── */
22+
.app-stat-row {
23+
display: grid;
24+
grid-template-columns: repeat(3, 1fr);
25+
gap: 1px;
26+
background: #d8dde0;
27+
border: 1px solid #d8dde0;
28+
margin-bottom: 24px;
29+
}
30+
.app-stat {
31+
background: #fff;
32+
padding: 16px;
33+
text-align: center;
34+
}
35+
.app-stat__value {
36+
display: block;
37+
font-size: 32px;
38+
font-weight: 700;
39+
line-height: 1;
40+
margin-bottom: 4px;
41+
}
42+
.app-stat__label {
43+
font-size: 14px;
44+
color: #4c6272;
45+
}
46+
47+
/* ── Legend row ───────────────────────────────────────── */
48+
.app-legend {
49+
display: flex;
50+
gap: 16px;
51+
flex-wrap: wrap;
52+
margin-top: 12px;
53+
}
54+
.app-legend__item {
55+
display: flex;
56+
align-items: center;
57+
gap: 6px;
58+
font-size: 14px;
59+
}
60+
.app-legend__swatch {
61+
width: 12px;
62+
height: 12px;
63+
border-radius: 2px;
64+
flex-shrink: 0;
65+
}

app/assets/sass/main.scss

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
@import 'components/hero';
1313
@import 'components/a-z';
1414
@import 'components/category';
15+
@import 'components/data-viz';
16+
@import 'components/dashboard';
17+
@import 'components/cards';
1518

1619

1720
.nhsuk-width-container {

app/routes.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ router.use('/current', require('./views/current/routes'))
114114
router.use('/v1', require('./views/v1/routes'))
115115
// v2 routes
116116
router.use('/v2', require('./views/v2/routes'))
117+
// v3 routes
118+
router.use('/v3', require('./views/v3/routes'))
117119

118120

119121

app/views/current/dashboard.html

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ <h1 class='nhsuk-heading-l'>Welcome back</h1>
3030
<p class="nhsuk-body nhsuk-body-l"> How will you shape procurement in your trust today? </p>
3131

3232

33-
3433
</div>
3534
</div>
3635

@@ -45,13 +44,8 @@ <h1 class='nhsuk-heading-l'>Welcome back</h1>
4544

4645
<div class="nhsuk-card nhsuk-card--clickable">
4746
<div class="nhsuk-card__content">
48-
<h3 class="nhsuk-card__heading">
49-
Search
50-
</h3>
51-
<p>Search and compare medical products</p>
52-
53-
<p><a href="search">Search now</a></p>
54-
47+
<h3 class="nhsuk-card__heading"><a href="search">Search and compare medical technologies</a></h3>
48+
<p>Look up a specific product or browse categories to find evidence and peer contact information.</p>
5549
</div>
5650
</div>
5751

@@ -65,13 +59,8 @@ <h3 class="nhsuk-card__heading">
6559

6660
<div class="nhsuk-card nhsuk-card--clickable">
6761
<div class="nhsuk-card__content">
68-
<h3 class="nhsuk-card__heading">
69-
Collaborate
70-
</h3>
71-
<p>Share evaluations with other NHS trusts</p>
72-
73-
<p><a href="quick-share-upload-multiple">Share now</a></p>
74-
62+
<h3 class="nhsuk-card__heading"><a href="search">Share your experience with medical technologies</a></h3>
63+
<p>Upload your own product trials, case studies, evaluation criteria or business cases.</p>
7564
</div>
7665
</div>
7766

0 commit comments

Comments
 (0)