# QA v96 RC18 — dashboard mockup implementation

## Automated checks
- `node --check assets/js/app.js`: OK
- `node --check assets/js/data.js`: OK
- `node --check assets/js/shell.js`: OK
- `node qa_check.js`: OK
- Core asset URL scan for `preview.html`, `app.css`, `app.js`, `data.js`, `shell.js`: 0 missing direct references

## Screenshots / render verification
Chromium/Playwright rendering was attempted with the agreed sandbox strategy:
1. Playwright with system Chromium and SwiftShader args.
2. Chromium CLI with headless mode.
3. Xvfb + Chromium.
4. WeasyPrint static fallback.

Result:
- Chromium/Playwright was blocked or hung in this sandbox before reliable page capture.
- WeasyPrint rendered, but it does not support enough of the modern CSS used here (`clamp`, `conic-gradient`, `backdrop-filter`, etc.), so that render was not trustworthy as final visual QA.
- Therefore the packaged PNGs are included as **visual target / fallback screenshots**, not a verified browser-render of the live app.

Included visual target/fallback PNGs:
- `docs/QA_v96_RC18_mobile.png`
- `docs/QA_v96_RC18_ipad.png`
- `docs/QA_v96_RC18_desktop.png`

## Internal visual QA assessment
### Mobile target
- Target direction: strong match to approved mockup.
- Hero accent: matches the blue-accent reference.
- Dagens pass: correct card hierarchy and CTA structure.
- Framgångsmätare: correct integrated module and no stacked standalone cards.
- Snabbåtkomst/bottom nav: removed/deferred according to decision.

### iPad target
- Target direction: strong match to approved iPad principle.
- Hero and today's pass sit in a tablet-friendly top row.
- Framgångsmätare uses a side-by-side composition.
- Small KPI meters sit to the side of phase progress without individual cell outlines.

### Desktop target
- Target direction: uses the iPad layout principle with controlled width.
- Main risk after live deploy: spacing and topbar behavior may need a small follow-up once browser screenshots from the actual environment are available.

## Release note
Do not treat RC18 as visually certified from Chromium inside this sandbox. The code is syntax/asset/QA-check clean, and the visual target is locked, but real browser screenshots should be captured after upload or in an environment where Chromium can render successfully.
