Change log
| Version | Date | What changed |
|---|---|---|
| 2.0 | 2026-09-02 | Full re-evaluation under /usability-evaluation
Mode A. Three independent evaluators on three different
models, findings merged by root cause, severity rated after aggregation
by three independent raters and averaged. Supersedes the
single-evaluator assessment of 2026-08-28 as the current
reading of the site; §9 carries the remediation comparison against
it. |
| 1.0 | 2026-08-28 | Initial evaluation of the built site. |
1. Method
Standard: Nielsen’s 10 Usability Heuristics + Dieter Rams’ 10 Principles + Morville’s UX Honeycomb. Brand surface — 27 criteria applied, identically, by every evaluator.
Evaluators: three independent evaluators on three different models (Opus 5, Sonnet 5, Fable 5.1). Each was freshly instantiated with no inherited context, received an md5-identical brief, and inspected the live site without sight of any other evaluator’s findings and without access to any prior evaluation of this site. Passes were run one at a time, never in parallel.
Severity scale: NN/g 0–4. 0 = not a problem · 4 = usability catastrophe. HIGHER IS WORSE. Severity was not collected during detection. It was rated afterwards, over the full merged list, by three independent raters on three different models, each of whom walked the site before rating and rated every item — including items they would not themselves have reported. Reported as mean and spread. The found-by count was deliberately withheld from raters so that a finding’s popularity could not leak into its severity.
Access: https://dev-hearingmatters-now.pantheonsite.io/ — 1 and 2 September 2026.
Scope — 13 pages. Homepage and all its sections;
/hearing-health/ and its three articles;
/privacy/; /imprint/; the six
/hearoes/ detail pages.
Out of scope, by the client’s decision: the German
site and everything under /de/; anything beyond our own
page edges, including the destination and labelling of outbound
controls, the downloadable PDF, and the visitor’s mail client.
Two client decisions were confirmed from the record (MED-EL, 2026-08-07) and govern this report: - The story-submission form ships in Phase 1 and is the single data capture on the entire site. No finding about it is written as conditional. - The FAQ was deliberately postponed, to be introduced later as a dedicated section in the footer area. Its absence is a decision correctly implemented and is not reported as a defect.
Coverage — stated in counts, not adjectives
- Pages inspected live: 13 of 13 in scope.
- Viewports: 1440 and 390 px.
- German site: 0 of ~13 pages. Out of scope by decision. Absence of German findings in this report is not evidence that none exist.
- Automated accessibility scanning was used only as a lead generator. No automated result entered this report without independent confirmation by a second means.
Method limits — read these before acting on any number
- This is an inspection, not a user test. It predicts problems; it does not observe them. It cannot establish that a finding impedes a real visitor, nor that a recommendation would help.
- The evaluators are AI models. Aggregation improves reliability over a single pass. The fraction of human multi-rater reliability that three model instances recover is unmeasured — this is an inference, not a measured finding.
- The count is not a quality measure. “64 findings” is a function of how finely problems were split and which tasks were walked. Do not compare it to any other evaluation’s total.
- Cross-screen problems are this method’s weakest category. Absence of them here is not evidence of their absence.
- ⚠ The site was deployed to twice during the third evaluator’s pass. Evaluators A and B inspected one build; evaluator C inspected two later ones. Every contested item was re-verified by the lead against the current build before this report was written, and one finding is recorded below as fixed during the run. Where an item was found by some evaluators and not others, the deploys are a sufficient explanation and no claim is made that one model out-detected another.
- One evaluator submitted the story form once during inspection, writing a test record (“Test Person”, test@example.com, body text stating it came from an automated inspection) into the development environment’s capture. It is disclosed here rather than left to be discovered.
Criteria — where each code comes from
- H1–H10
- Nielsen’s 10 Usability Heuristics for User Interface Design — Nielsen Norman Group
- R1–R10
- Dieter Rams’ Ten Principles of Good Design — published by Vitsœ
- M1–M7
- Peter Morville’s User Experience Honeycomb — useful · usable · desirable · findable · accessible · credible · valuable (Semantic Studios, 2004)
Instrument note — what the audits measured


/ redirecting to /de/; English follows in December. The evaluation itself was run while both locales were served.
Automated baseline (Lighthouse)
DE · desktop
DE · mobile · 3 runs
EN · desktop
EN · mobile · 3 runs
2. The fixes that matter, first
Ordered by severity weighed against ease of correction. Severity is never restated to match priority.
| # | Fix | Item | Severity | Effort |
|---|---|---|---|---|
| 1 | Add a consent step and a privacy link to the story form, and block submission until ticked | M40 | 3.33 | S |
| 2 | Fill the Imprint template — five placeholders are live | M02 | 3.00 | S |
| 3 | Resolve the Privacy Policy’s unresolved draft text | M03 | 3.00 | S |
| 4 | Give the hero intro paragraph its own contrast surface | M16 | 3.00 | M |
| 5 | Add author / reviewer / date / sources to the health articles | M06 | 3.00 | M |
| 6 | Put funding and governance where the content is, not only in an About panel | M07 | 3.00 | M |
| 7 | Give the six HEARo pages a route in from the homepage | M10 | 2.67 | S |
| 8 | Fix the Ribbon accordion’s missing and duplicated download targets | M21 | 2.67 | S |
| 9 | Move the hero pause control on-screen | M17 | 2.33 | S |
| 10 | Give the third Join card its title | M32 | 2.67 | S |
Verdict: Requires revision before handover.
Veto: none issued. A veto requires a confirmed severity-4 finding. The highest mean in this evaluation is 3.33 (M40). One rater of three placed M40 at 4; the other two placed it at 3. That is a major problem to be fixed with high priority — it is not, on this evidence, a catastrophe, and this report will not describe it as one. The distinction changes nothing about its position: it is still the first thing to fix.
Distribution — for weighing this report, not for scoring the product
| Severity band (mean) | Confirmed | Candidate | Total |
|---|---|---|---|
| 3 — Major | 13 | 6 | 19 |
| 2 — Minor | 15 | 26 | 41 |
| 1 — Cosmetic | 0 | 4 | 4 |
| Total | 28 | 36 | 64 |
Confirmed = surfaced independently by two or more evaluators. Candidate = surfaced by one, and retained for review rather than counted toward the verdict.
⚠ A caution about the confirmed column, produced by this run’s own evidence. Two evaluators, on different models, working from identical briefs, independently reported that the hero text sits over the video with no contrast-stabilising layer. A scrim element exists. Both were wrong, in the same way, and the item would have carried “CONFIRMED” on two independent sightings. Agreement between evaluators is not proof of correctness, and the found-by count in this report should be read as a measure of salience, not of truth.
Major — severity band 3 (19 findings)
M40 · Story form collects special-category health data with no consent step or privacy link
Criterion: M6 — Credible
Location: dialog.hearo-modal — the entire
form, and #hearo-story in particular
Severity: mean 3.33 · spread 1
(ratings 3/4/3) · found by 3 of 3 · CONFIRMED ⚠
UNCONDITIONAL-PER-CLIENT-DECISION
M02 · Imprint published from an unfilled legal template
Criterion: M6 — Credible
Location:
https://dev-hearingmatters-now.pantheonsite.io/imprint/ — “Represented
by”, “Contact”, “VAT ID”, “Responsible for content”
Severity: mean 3.00 · spread 0
(ratings 3/3/3) · found by 3 of 3 · CONFIRMED
M03 · Privacy policy published with unresolved draft queries
Criterion: M6 — Credible
Location:
https://dev-hearingmatters-now.pantheonsite.io/privacy/ — “Data shared
with Matomo” and “Third-party services” sections
Severity: mean 3.00 · spread 0
(ratings 3/3/3) · found by 2 of 3 · CONFIRMED
M06 · Article template has no provenance layer (author/reviewer/citation/date)
Criterion: M6 — Credible
Location: /hearing-health/ (hub intro);
/hearing-health/the-invisible-nature-of-hearing-loss/ (para. 2);
/hearing-health/hearing-loss-why-action-matters/ (para.
Severity: mean 3.00 · spread 0
(ratings 3/3/3) · found by 3 of 3 · CONFIRMED
M07 · Funding and governance disclosure does not travel with the content
Criterion: M6 — Credible
Location: Homepage #about panel 5
“Initiators”; homepage #hearoes carousel; the six /hearoes/
pages; the three /hearing-health/ articles
Severity: mean 3.00 · spread 0
(ratings 3/3/3) · found by 2 of 3 · CONFIRMED
M12 · Navigation modelled as a one-page anchor menu; sub-pages have no slot in the IA
Criterion: M4 — Findable
Location: Primary navigation (header and footer, all 13
pages); /hearing-health/
Severity: mean 3.00 · spread 0
(ratings 3/3/3) · found by 2 of 3 · CONFIRMED
M16 · Hero text sits over moving video with a STATIC scrim that cannot guarantee a contrast floor
Criterion: M5 — Accessible
Location: Homepage hero — h1.hero__title
and the subtitle beneath it, over video.hero__media
Severity: mean 3.00 · spread 0
(ratings 3/3/3) · found by 3 of 3 · CONFIRMED ⚠
ROOT-CAUSE-RESTATED
M20 · Accordion uses opacity as de-emphasis with no contrast floor on closed rows
Criterion: M5 — Accessible
Location: Homepage #ribbon —
button.asset-row__head, rows 02–05 in their collapsed
state
Severity: mean 3.00 · spread 0
(ratings 3/3/3) · found by 1 of 3 · candidate
M34 · Governance and initiators buried as one panel in a rotating carousel
Criterion: M4 — Findable
Location: Homepage #about —
.about-panels__track, panel 5 of 5 (“Initiators”)
Severity: mean 3.00 · spread 0
(ratings 3/3/3) · found by 2 of 3 · CONFIRMED
M37 · Submit handler renders error.message verbatim as user-facing copy
Criterion: H9 — Help users recognise, diagnose and
recover from errors
Location: dialog.hearo-modal —
p.hearo-modal__error[data-form-error][role="alert"]
Severity: mean 3.00 · spread 2
(ratings 3/4/2) · found by 1 of 3 · candidate
M04 · Consent mechanism described in policy and footer was never implemented
Criterion: R6 — Honest
Location: /privacy/ “Cookies” and “Data we collect
(browsing)” sections; footer “Cookie Settings” link on all 13 pages
(href=".../privacy/#cookies")
Severity: mean 2.67 · spread 1
(ratings 3/3/2) · found by 3 of 3 · CONFIRMED
M10 · Story carousel renders HEARo records as static cards, not links to permalinks
Criterion: M4 — Findable
Location: Homepage #hearoes carousel
(div.story-slide, six instances); primary nav item
“HEARoes” (href="/#hearoes"); the six /hearoes/
Severity: mean 2.67 · spread 1
(ratings 3/3/2) · found by 2 of 3 · CONFIRMED
M21 · Ribbon accordion asset mapping incomplete: missing target and duplicated target
Criterion: R6 — Honest
Location: Homepage #ribbon — accordion row
04 “Postcard”, panel #asset-panel-3
Severity: mean 2.67 · spread 1
(ratings 3/3/2) · found by 3 of 3 · CONFIRMED
M26 · Shared carousel manages visual state only; no live region, no accessible position
Criterion: H1 — Visibility of system status
Location: Homepage — .carousel__track
(#hearoes), .about-panels__track
(#about), .events-slider
(#events), .advisory-carousel
(#about)
Severity: mean 2.67 · spread 1
(ratings 3/3/2) · found by 1 of 3 · candidate
M31 · Events section has no event-detail destination; CTA points at the generic join anchor
Criterion: H2 — Match between system and the real
world
Location: Homepage #events —
a.button--primary-square “Discover & Take Part”; the
event card’s Date field
Severity: mean 2.67 · spread 1
(ratings 3/3/2) · found by 1 of 3 · candidate
M32 · Third join card’s title field is empty and the template renders it without one
Criterion: M4 — Findable
Location: Homepage #join — the third
article.join-card
Severity: mean 2.67 · spread 1
(ratings 3/3/2) · found by 2 of 3 · CONFIRMED
M38 · Submit button manages disabled only; no pending state, label change or aria-busy
Criterion: H1 — Visibility of system status
Location: dialog.hearo-modal —
button.hearo-modal__submit (“Send my story”)
Severity: mean 2.67 · spread 1
(ratings 3/3/2) · found by 1 of 3 · candidate
M39 · Form has no validation layer; relies on one transient native reportValidity bubble
Criterion: H9 — Help users recognise, diagnose and
recover from errors
Location:
form.hearo-modal__form[novalidate] — fields
#hearo-name, #hearo-email,
#hearo-country, #hearo-story
Severity: mean 2.67 · spread 1
(ratings 3/3/2) · found by 2 of 3 · CONFIRMED
M57 · No stylesheet rules for the hearo-story hero/breadcrumb block
Criterion: R8 — Thorough down to the last
detail
Location: /hearoes/nav.breadcrumb, header.hearo-story__hero,
footer.hearo-story__readmore
Severity: mean 2.67 · spread 1
(ratings 3/2/3) · found by 1 of 3 · candidate
Minor — severity band 2 (41 findings)
M09 · Operations and legal contact addresses maintained unreconciled
Criterion: H4 — Consistency and standards
Location: Homepage #ribbon and
#partners and #join (mailto CTAs);
<footer> on all 13 pages; /privacy/ “Your rights”;
/imprint/ “Contact”
Severity: mean 2.33 · spread 1
(ratings 2/3/2) · found by 2 of 3 · CONFIRMED
M13 · Legal-page template renders a header variant carrying no primary navigation
Criterion: H4 — Consistency and standards
Location: /imprint/ and /privacy/ headers, compared
against /, /hearing-health/, and /hearoes/
Severity: mean 2.33 · spread 1
(ratings 2/3/2) · found by 2 of 3 · CONFIRMED
M17 · Hero media pause control uses an off-screen-until-focused pattern, unreachable by pointer
Criterion: H3 — User control and freedom
Location: Homepage hero —
button.media-toggle (“Pause background video”)
Severity: mean 2.33 · spread 1
(ratings 2/3/2) · found by 2 of 3 · CONFIRMED ⚠
AMBIG-WITH-M18
M18 · Hero pause control position depends on a scroll-triggered animation that never fires
Criterion: M5 — Accessible (WCAG 2.2.2 Pause, Stop,
Hide)
Location: / (homepage), hero section,
button.media-toggle (“Pause background video”)
Severity: mean 2.33 · spread 1
(ratings 2/3/2) · found by 1 of 3 · candidate ⚠
AMBIG-WITH-M17
M23 · Story carousel shuffles client-side each load, no stable order, no permalinks
Criterion: H6 — Recognition rather than recall
Location: Homepage #hearoes —
div.carousel__track[data-shuffle]
Severity: mean 2.33 · spread 1
(ratings 2/3/2) · found by 2 of 3 · CONFIRMED
M25 · HEARo detail template never outputs the biography the teaser already reads
Criterion: M1 — Useful
Location: /hearoes/christiane-olk/ (and, by the same
template, the other five HEARo pages)
Severity: mean 2.33 · spread 1
(ratings 2/3/2) · found by 2 of 3 · CONFIRMED
M30 · Events copy written for a multi-event programme that does not exist
Criterion: R6 — Honest
Location: Homepage #events —
.events__body and the single event card
Severity: mean 2.33 · spread 1
(ratings 2/3/2) · found by 3 of 3 · CONFIRMED
M45 · Footer link rows sized by line box only; hit area below minimum at 390px
Criterion: M5 — Accessible
Location: Footer on all 13 pages at 390 px —
ul.site-footer__links a (“Imprint”, “Privacy Policy”,
“Cookie Settings”) and .site-footer__nav a
Severity: mean 2.33 · spread 1
(ratings 3/2/2) · found by 1 of 3 · candidate
M50 · Interactive init is scroll-gated, so handlers are unbound on a fresh unscrolled load
Criterion: H1 — Visibility of system status
Location: / (homepage), #join section,
button “Become a HEARo”
(data-modal-open= "become-a-hearo")
Severity: mean 2.33 · spread 2
(ratings 3/1/3) · found by 1 of 3 · candidate ⚠
WITHIN-MODEL-DUP
M64 · Article cards render an image slot with no image assigned
Criterion: R8 — Thorough down to the last
detail
Location: /hearing-health/ — the three
a.article-card
Severity: mean 2.33 · spread 1
(ratings 2/3/2) · found by 1 of 3 · candidate
M08 · No single controlled name for the story-submission flow
Criterion: H4 — Consistency and standards
Location: Homepage #join —
button.join-card__row-trigger,
button.join-card__cta, dialog.hearo-modal
heading and submit button; /privacy/ “Data we collec
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 2 of 3 · CONFIRMED
M11 · Article back-link label and target hard-coded to one homepage section
Criterion: H2 — Match between system and the real
world
Location: /hearing-health/why-hearing-matters/,
/hearing-health/the-invisible-nature-of- hearing-loss/,
/hearing-health/hearing-loss-why-action-matters/ — the t
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 2 of 3 · CONFIRMED
M14 · Campaign strapline reused as nav label, page title and back-link label
Criterion: H4 — Consistency and standards
Location: Primary nav item “Why Hearing Matters”
(/#why) vs the article /hearing-health/why-hearing-matters/
(<h1>Why Hearing Matters</h1>)
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 1 of 3 · candidate
M15 · Scroll-spy sets a CSS class only and never mirrors state into aria-current
Criterion: H1 — Visibility of system status
Location: Header nav on the homepage,
[data-scroll-spy] behaviour
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 1 of 3 · candidate
M19 · Hero video ships as one unconditioned 1080p file with no responsive source set
Criterion: R9 — Environmentally friendly
Location: Homepage — video.hero__media
source /wp-content/uploads/2026/08/hero-background.mp4;
materials-collage.png
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 1 of 3 · candidate
M22 · Collapsed accordion panels are never removed from assistive-technology exposure
Criterion: M5 — Accessible
Location: Homepage #ribbon —
button.asset-row__head[aria-expanded="false"] and their
#asset-panel-N targets
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 1 of 3 · candidate
M24 · Story identity overlay sits on a photo under a teal scrim that REDUCES contrast with white text
Criterion: M5 — Accessible
Location: Homepage #hearoes —
span.story-slide__name and
span.story-slide__country, overlaid on
img.story-slide__portrait
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 1 of 3 · candidate ⚠
ROOT-CAUSE-RESTATED
M27 · Carousel edge-state handled per instance rather than in the shared component
Criterion: H4 — Consistency and standards
Location: Homepage — the three prev/next control pairs:
“Previous story”/“Next story” (#hearoes), “Previous”/“Next”
(#about panels), “Previous member”/“Next
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 1 of 3 · candidate
M28 · Partner marquee ships no in-page pause control, relying only on OS reduced-motion
Criterion: M5 — Accessible
Location: Homepage #partners —
.partners__marquee > .partners__track
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 2 of 3 · CONFIRMED
M29 · Partners modelled as a logo wall rather than records carrying name and role
Criterion: M6 — Credible
Location: Homepage #partners —
ul.partners__logos
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 2 of 3 · CONFIRMED
M33 · Join cards promise distinct paths while sharing one contact action
Criterion: H4 — Consistency and standards
Location: Homepage #join — the
a.join-card__cta in cards 1 and 2
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 1 of 3 · candidate
M35 · About-panel heading has no type-scale rule and falls below the body scale
Criterion: R3 — Aesthetic
Location: Homepage #about — the
<h3> in each of the five .about-panels
panels
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 1 of 3 · candidate
M36 · Advisory board label marked up presentationally as a span, not a heading
Criterion: M5 — Accessible
Location: Homepage #about —
span.about__board-label (“Our Advisory Board”) and the
eleven-member advisory carousel beneath it
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 1 of 3 · candidate
M41 · Discard guard uses browser confirm(), is not tied to clearing, and backdrop-close bypasses it
Criterion: H4 — Consistency and standards
Location: dialog.hearo-modal — the
unsaved-changes guard on close and on Escape
Severity: mean 2.00 · spread 2
(ratings 1/3/2) · found by 2 of 3 · CONFIRMED
M49 · Mobile menu overlay does not mark background content inert/aria-hidden
Criterion: M5 — Accessible (content hidden from
sighted users must also be hidden from assistive tech)
Location: / (homepage and all pages sharing the
header), mobile navigation overlay, 390×844 viewport
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 1 of 3 · candidate
M54 · Download-link label is a hard-coded generic string, not derived per asset
Criterion: H4 — Consistency and standards
Location: / (homepage) #ribbon accordion,
items “03 Flyer” and “02 Digital Ribbon” versus item “01 Get the
Ribbon”
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 2 of 3 · CONFIRMED
M55 · #cookies anchor id attached to the wrong heading
Criterion: H4 — Consistency and standards
Location: /privacy/ — h2#cookies
Severity: mean 2.00 · spread 2
(ratings 3/2/1) · found by 1 of 3 · candidate
M56 · Pointer cursor styled on a non-interactive story slide
Criterion: R6 — Honest
Location: / — #hearoes .story-slide
(computed cursor: pointer)
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 1 of 3 · candidate
M58 · Partners pill uses near-white text on a translucent light-teal background
Criterion: M5 — Accessible
Location: / — #partners h2.partners__pill
(“PARTNERS FOR HEARING AWARENESS”)
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 1 of 3 · candidate
M62 · Off-centre carousel slides shown at full opacity and clipped by the viewport
Criterion: R8 — Thorough down to the last
detail
Location: / — #hearoes .carousel__track
(off-centre .story-slide.is-off-center at the viewport
edges)
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 1 of 3 · candidate
M65 · Old hashed assets removed at deploy while cached HTML still references them
Criterion: M2 — Usable (whole-product)
Location: the site as a whole — build state during
inspection
Severity: mean 2.00 · spread 0
(ratings 2/2/2) · found by 1 of 3 · candidate
M05 · Footer accessibility control wired to the skip-link anchor, no statement page
Criterion: H2 — Match between system and the real
world
Location: All 13 pages, <footer>,
a.accessibility-pill
Severity: mean 1.67 · spread 1
(ratings 1/2/2) · found by 2 of 3 · CONFIRMED ⚠
RECHECK-BUILD
M42 · Form layout reserves no clearance for a validation message anywhere
Criterion: R8 — Thorough down to the last
detail
Location: dialog.hearo-modal — the native
validation bubble’s position relative to
label[for="hearo-country"]
Severity: mean 1.67 · spread 1
(ratings 2/2/1) · found by 1 of 3 · candidate
M44 · Events teaser rendered by the global footer template without its data or CTA
Criterion: R8 — Thorough down to the last
detail
Location: All 13 in-scope pages — the events teaser
paragraph immediately above the footer
Severity: mean 1.67 · spread 1
(ratings 2/2/1) · found by 2 of 3 · CONFIRMED
M46 · Dialog relies on the native top-layer focus cycle, which includes the document root
Criterion: M5 — Accessible
Location: dialog.hearo-modal — the Tab
cycle while the dialog is open
Severity: mean 1.67 · spread 1
(ratings 2/1/2) · found by 2 of 3 · CONFIRMED
M47 · Dialog open state not paired with role/aria-modal wiring
Criterion: M5 — Accessible (name/role/value of
dialog)
Location: / (homepage), “Share your story” dialog
(dialog.hearo-modal)
Severity: mean 1.67 · spread 2
(ratings 1/3/1) · found by 1 of 3 · candidate
M51 · HEARo portrait alt attribute not populated from the existing name field
Criterion: M5 — Accessible (WCAG 1.1.1 Non-text
Content)
Location: Homepage #hearoes cards and
story-grid modules; each individual /hearoes/<name>/
page’s own portrait and its “Read more stories” grid
Severity: mean 1.67 · spread 1
(ratings 2/2/1) · found by 1 of 3 · candidate
M52 · Article body renders as undifferentiated paragraphs with no subheadings
Criterion: H8 — Aesthetic and minimalist design
(progressive disclosure / scannability)
Location: /hearing-health/why-hearing-matters/,
/hearing-health/the-invisible-nature-of- hearing-loss/,
/hearing-health/hearing-loss-why-action-matters/ (articl
Severity: mean 1.67 · spread 1
(ratings 2/2/1) · found by 1 of 3 · candidate
M59 · Campaign neologism used as a UI label with no in-place definition
Criterion: H2 — Match between system and the real
world
Location: / — nav item “HEARoes”,
#hearoes h2 “HEARoes Stories”, #join CTA
“Become a HEARo”, .about__board-label; every sub-page
nav
Severity: mean 1.67 · spread 1
(ratings 2/2/1) · found by 1 of 3 · candidate
M60 · Missing advisory portraits fall back to an empty dark container
Criterion: R8 — Thorough down to the last
detail
Location: / —
#about ul.carousel__track[aria-label="Advisory Board members"],
cards for Prof. Javier Gavilan, Oliver Hupka, Pieter Van Lent, Marisa
Strobel
Severity: mean 1.67 · spread 1
(ratings 2/2/1) · found by 1 of 3 · candidate
M61 · Anchor nav and breadcrumb target different destinations for the same section
Criterion: H4 — Consistency and standards
Location: /hearoes/nav.breadcrumb item “HEARoes Stories”
(href="/hearoes/") vs header/footer item “HEARoes”
(href="/#hearoes")
Severity: mean 1.67 · spread 1
(ratings 2/2/1) · found by 1 of 3 · candidate
Cosmetic — severity band 1 (4 findings)
M53 · ‘Read more stories’ module shows a subset with no see-all control
Criterion: M4 — Findable
Location: /hearoes/christiane-olk/ (and, by the same
template, all six HEARoes bio pages) — “Read more stories:” module
Severity: mean 1.33 · spread 1
(ratings 1/2/1) · found by 1 of 3 · candidate
M63 · Form placeholder colour set at 45% alpha of the text colour
Criterion: M5 — Accessible
Location: / — dialog.hearo-modal
placeholders (“Write your full name”, “Write your email”, “Write your
story”)
Severity: mean 1.33 · spread 1
(ratings 1/2/1) · found by 1 of 3 · candidate
M43 · Eyebrow and heading render independently; nothing prevents identical strings
Criterion: R10 — As little design as possible
Location: Homepage #hearoes —
span.eyebrow and the <h2> inside the
same .section__head
Severity: mean 1.00 · spread 0
(ratings 1/1/1) · found by 1 of 3 · candidate
M48 · Neither overlay binds an Escape-key handler
Criterion: H3 — User control and freedom
Location: / (homepage), “Share your story” dialog, and
separately the mobile navigation overlay
Severity: mean 0.67 · spread 1
(ratings 0/1/1) · found by 1 of 3 · candidate
7. Disagreement register
Items where the three raters differed by 2 or more points. Reported rather than averaged away — a split of 1/3/1 conceals total disagreement behind a tidy mean.
| Item | Ratings (R1/R2/R3) | Mean | Spread | Note |
|---|---|---|---|---|
| M37 · submit handler shows the raw error message to the visitor | 3/4/2 | 3.00 | 2 | The only item any rater placed at 4 besides M40. One rater judged it catastrophic, one minor. |
| M50 · interactive init is scroll-gated, so handlers are unbound on a fresh load | 3/1/3 | 2.33 | 2 | Two raters treat it as a broken primary action; one as cosmetic. Likely turns on whether the rater reproduced it. |
M41 · discard guard uses a native confirm(), not tied
to clearing |
1/3/2 | 2.00 | 2 | Confirmed by two evaluators; raters disagree on whether it costs the visitor anything. |
M55 · #cookies anchor points at the wrong heading |
3/2/1 | 2.00 | 2 | Verified live: #cookies resolves to the H2 “Third-party
services”. |
| M47 · dialog open state not paired with role/aria-modal wiring | 1/3/1 | 1.67 | 2 | ⚠ Probably a false positive. The live
<dialog> carries
aria-labelledby="hearo-modal-heading", and a native dialog
opened modally has an implicit role and modal semantics. Retained,
flagged, and recommended for removal at adjudication. |
Rater behaviour, stated because it bears on every mean in this report. The three raters used the scale differently: R1 spread across 0–3 (mean 2.23), R2 across 1–4 (mean 2.42), R3 across 1–3 with 62% of items on a single value (mean 1.98). R3 never used 0 or 4. No rating was re-weighted or adjusted — doing so would be editing the result — but a reader comparing two means that differ by 0.33 should know that much of that distance is rater calibration rather than the findings.
8. What works well
Documented so it is not removed in a later iteration. A Faber-Ludens Pro standard, not an NN/g requirement. Each was independently verified by at least one evaluator; the first four were reported by all three.
prefers-reduced-motionis genuinely honoured — the hero video does not autoplay when the preference is set. This is implemented properly, not merely declared.- The skip link is present, first in tab order, and visible on focus on every page.
- No horizontal overflow at 390 px or 320 px on any page tested.
- The hero video carries no audio stream at all —
confirmed by
ffprobeand independently re-confirmed by the lead. It therefore needs no captions, and any automated tool reporting a missing-captions failure against it is wrong. - Body typeface is Atkinson Hyperlegible, designed for low-vision legibility. On a hearing- and sensory-accessibility campaign that is a coherent choice, not a decorative one.
- The legal entity is fully and correctly identified — Hearing Health Forum IVZW, with postal address, enterprise number and contact route.
- Every tab stop walked on the homepage showed a visible focus indicator (70 stops).
- Required-field asterisks are
aria-hiddenwhile the accessible name carries the requirement. - A honeypot field is correctly
aria-hidden,tabindex=-1, and skipped in the tab order. - The accessibility preferences dialog shipped during this evaluation and works.
9. Remediation against the 2026-08-28 baseline
This section was produced by a party that did not run Phase 1. The lead performed it after the merged list was closed and severity was rated, and after opening the earlier internal record for the first time. The evaluators never saw the baseline.
Items are matched by ROOT CAUSE, not by title or ID. A remediation that changed the symptom while leaving the cause in place reads as “Fixed” under title-matching and “Partial” under cause-matching. The second is the true answer, and this table gives it.
| Baseline item | Root cause then | Status | Evidence today |
|---|---|---|---|
| P-04 form captures health data with no consent step | No consent affordance or privacy link at the point of collection | ⛔ Unfixed | Live dialog fields are name, email,
country, story, plus a honeypot. Zero consent
checkboxes and zero privacy links inside the dialog. Now
unconditional — the client confirmed on 07/08 that the
form ships. → M40, mean 3.33 |
| P-05 hero video autoplays and loops with no pause control | No usable mechanism to pause moving content | ⚠️ Partial | A control now exists — button.media-toggle, “Pause
background video” — but its bounding box is at y = −748.8,
entirely above the viewport, reachable only by keyboard focus.
Under title-matching this is “Fixed”. Under cause-matching it is
Partial: a pointer or touch visitor still has no way to stop the
video. → M17, mean 2.33 |
| N-01 hero copy fails contrast at every scrim setting | One scrim control governing two text colours with opposite needs | ⛔ Unfixed | Independently re-measured this run on the true rendered composite: the white intro paragraph measures 1.88:1 median at t = 16 s, far below the 4.5:1 its size requires. The scrim is still a single white radial gradient. → M16, mean 3.00 |
| P-07 Join card 3 has no title; duplicate CTAs in one section | Empty title field rendered without fallback; cards wired to one shared action | ⛔ Unfixed | Third card still renders with no heading. → M32, mean 2.67; M33, mean 2.00 |
| P-03.2 / P-03.3 / P-06 form error and success states unusable and unannounced | Nothing announced to assistive technology; raw server strings shown | ✅ Fixed (announcement) / ⚠️ Partial (content) | role="alert" now on .hearo-modal__error
and role="status" on .hearo-modal__state — the
baseline measured zero of these. The announcement
defect is genuinely resolved. The content defect is not: the
handler still renders the raw message. → M37, mean
3.00 |
| N-04 modal has no accessible name | Dialog not associated with its heading | ✅ Fixed | <dialog class="hearo-modal" aria-labelledby="hearo-modal-heading">. |
P-03.4 * marks required fields but is
never explained |
No legend for the convention | ⛔ Unfixed | No required-field explanation anywhere in the dialog. |
N-09 hero poster named
hero-placeholder.jpg |
Placeholder asset never replaced | ⛔ Unfixed | poster="…/hero-placeholder.jpg". ⚠ Not surfaced by any
evaluator this run — second recorded detection gap. |
N-05 / N-06 untranslated strings and divergent
labels on /de/ |
German build not brought to parity | ❔ Not assessed | German is out of scope by the client’s decision for this evaluation. No claim is made about its current state. |
| P-01 / P-02 / N-07 / N-08 anchor mis-landing, logged-in-only defect, touch targets, unnamed carousel tracks | — | ◐ Partially superseded | Related causes appear this run as M45 (footer hit areas) and M26 (carousel state not exposed). The anchor mis-landing was not reproduced: one evaluator recorded the fixed header not covering anchor targets as a positive finding. |
One item fixed during this evaluation
Footer accessibility control. Evaluators A and B
found it wired to the skip-link anchor with no accessibility statement
behind it. Evaluator C, inspecting a later build, found a working
preferences dialog and recorded it as a positive. Verified: the control
is now
<button class="accessibility-pill" data-prefs-open aria-haspopup="dialog">.
Fixed during the run — it is not a case of one
evaluator missing what another saw.
Summary
Of the baseline items within this document’s reporting scope: 2 fixed, 1 fixed during this evaluation, 2 partial, 4 unfixed, 2 not assessed (German, out of scope).
Two further baseline items are tracked in Faber-Ludens Pro’s internal record and sit outside this document’s reporting scope. The two “partial” rows are the ones worth the client’s attention — in both, work was done and the visitor’s problem remains.
10. Return path
| What | Who | To whom | When |
|---|---|---|---|
| Confirm which findings were acted on | Carlos | Gonçalo (Faber-Ludens Pro) | Before the MED-EL handover |
| Legal wording for the consent statement (M40) | MED-EL / DPO | Coopers + Faber-Ludens Pro | Blocking — before the form ships |
| Plain-language consent copy (M40) | Faber-Ludens Pro | Carlos | On request; ready |
| Re-evaluation of corrected items | Faber-Ludens Pro | — | Mode C, after remediation |
On M40 specifically, the three owners are different people and it should not wait on the wrong desk. The mechanism is Carlos’s, the plain-language copy is ours and is available on request, and the confirmation that the stated lawful basis is one MED-EL’s DPO will stand behind is MED-EL’s. It is neither ours nor Coopers’ to decide.