# QA v96 RC21

## Scope

Precision polish based on real iPhone/iPad screenshots from RC20.

## Automated checks

- `node --check assets/js/app.js` — PASS
- `node --check assets/js/data.js` — PASS
- `node --check assets/js/shell.js` — PASS
- `node qa_check.js` — PASS
- Static core asset scan for `preview.html` and `assets/css/app.css` — PASS, 0 missing direct references
- CSS brace balance — PASS

## Browser screenshot attempt

Real DOM screenshots were attempted with:

1. Playwright + system Chromium + SwiftShader flags:
   - `--no-sandbox`
   - `--disable-dev-shm-usage`
   - `--disable-gpu`
   - `--disable-gpu-sandbox`
   - `--use-gl=swiftshader`
   - `--enable-unsafe-swiftshader`
2. Chromium CLI screenshot without `--disable-software-rasterizer`.

Result: blocked/hung in the sandbox. Playwright reached Chromium but navigation to local app was blocked with `net::ERR_BLOCKED_BY_ADMINISTRATOR`. Chromium CLI did not produce screenshots before timeout.

## Screenshot artifacts included

Because real DOM screenshots were blocked, these are included as static fallback/target screenshots only:

- `QA_v96_RC21_mobile_static.png`
- `QA_v96_RC21_ipad_static.png`
- `QA_v96_RC21_desktop_static.png`

They are not claimed to be live browser renders.

## Visual QA checklist against reported issues

- iPad Dagens pass time pill: CSS alignment adjusted.
- iPad duplicate menu icons: duplicate pseudo icon layer disabled.
- iPad hero frame: frame/background/border removed at tablet/desktop breakpoints.
- iPhone duplicate menu icons: duplicate pseudo icon layer disabled globally for dashboard menu.
- iPhone Dagens pass dumbbell icon: centered and nudged upward.
- iPhone KPI overflow: mobile KPI cells changed to vertical ring/icon → label → value layout with reduced value sizing and overflow guards.

## Remaining live-device verification needed

Because live browser screenshots were blocked in this sandbox, final visual acceptance must be confirmed on real Safari/Chrome devices after deployment.
