# QA RC79 Report

## Scope
RC79 continues standardization/centralization after RC78. It targets the remaining visible regressions from real screenshots:

- wrong/mislinked icons showing as generic user icons
- calendar expanded session detail being cramped/concatenated
- pass overview hero/equipment/detail layout being inconsistent
- edit profile form needing central form rhythm
- dashboard/progress containment guardrails

No quickfix rules were added to `app.css`; the runtime visual owner remains `assets/css/next-system.css`.

## Changes verified

### Icon registry / SVG contract
- Added missing canonical icon keys used by system components: `play`, `list`, `clock`, `exercise`, `preview`.
- Changed `profileIcon()` fallback from generic user icon to empty string.
- Fixed overview equipment chips to use `overviewEquipmentIcon(item)` directly instead of passing an SVG string into `profileIcon()`.
- Result: fallback user icons should no longer appear for equipment/action icons by mistake.

### Calendar expanded session detail
- Centralized `.next-calendar-expand` styling.
- Chips, title, summary and action row now have a clean component contract.
- Removed the loose day label from the bottom of expanded sessions.
- Overview button now opens the pass overview from calendar context instead of only selecting the day.

### Pass overview
- Centralized `.next-overview-hero`, `.next-equipment-panel`, overview block and checklist layout.
- Hero is forced to one clean column to prevent title/subtitle/equipment overlap.
- Equipment is a contained card within the overview hero.

### Edit profile
- Centralized `.next-edit-card`, `.next-field`, `.next-input`, `.next-option-grid`, `.next-option-button`, `.next-sticky-actions`.
- Form layout should now be more stable across mobile/tablet/desktop.

### Dashboard
- Added containment for `.next-dashboard-pass-card`, `.next-dashboard-progress-card`, `.next-progress-summary` and `.next-kpi-grid`.

## Checks
- JS syntax: OK (`node --check assets/js/app.js`)
- PHP lint: OK (`php -l ota_youtube_proxy.php`)
- ZIP integrity: OK
- Cache bumped to `96rc79`

## Browser QA note
Attempted Chromium headless screenshot with the same sandbox-safe flags used previously, but Chromium still fails/hangs on GPU/EGL initialization in this environment. Therefore visual screenshots are fallback-rendered fixtures. The actual app code has been syntax/lint/reference checked.

## QA screenshots
- `qa_screenshots/rc79_dashboard_mobile_390x844.png`
- `qa_screenshots/rc79_calendar_mobile_390x844.png`
- `qa_screenshots/rc79_overview_mobile_390x844.png`
- `qa_screenshots/rc79_edit_profile_mobile_390x844.png`
- `qa_screenshots/rc79_program_mobile_390x844.png`
- `qa_screenshots/rc79_profile_mobile_390x844.png`
- `qa_screenshots/rc79_audit_mobile_390x844.png`
- `qa_screenshots/rc79_consistency_ipad_820x1180.png`
- `qa_screenshots/rc79_consistency_desktop_1440x1024.png`
