# Operation Head (Web) — Screen Inventory

> Source: `docs/design/SCREEN_LIST.md` "Operation Head (OH)" block (22 role screens — CL-1 added `OH-CHK-UPLOAD` / `OH-CHK-TPL-ASSIGN` / `OH-CHK-TPL-EDIT`, CL-2 added `OH-WO-OVERVIEW`) + the shared Auth screens (Module 0) the role passes through on login. Surface = Web (Next.js, 1440×900). GZ scope = `all`.
> **Pixel target:** the `screens/*.html` mockups at 1440px. **States:** `states/`. **Modals/drawers:** `modals/`.

---

## Auth (shared — built in Wave 0, included here as the entry path)

| Screen ID | Screen | Purpose | States / modals | Mockup |
|---|---|---|---|---|
| `AUTH-LOGIN` | Login | Email/phone + password sign-in | error (bad creds), locked (rate-limited), loading | `screens/01-login.html` |
| `OH-DASH` (router) | Role-resolved Dashboard | Post-login → OH Dashboard via `/me` role resolve | loading | `screens/02-dashboard.html` |

> `AUTH-FORGOT / AUTH-OTP / AUTH-RESET / AUTH-LOGOUT / SH-NOTIF / SH-PROFILE` are Wave-0 shared screens; this pack mocks `01-login.html` + a `19-profile.html` to show the role's entry + utility-cluster landing. The full shared-auth set ships once in Wave 0 and is reused by every role.

## Operation Head (OH) — role screens (22)

| # | Screen ID | Screen | Purpose | States / modals | Mockup |
|---|---|---|---|---|---|
| 1 | `OH-DASH` | Operation Head Dashboard | Org-wide health: per-Game-Zone compliance %, **Pending** counts (daily/weekly/monthly/quarterly/yearly), overdue, roster gaps; per-GZ tiles | loading, per-GZ drilldown, empty | `screens/02-dashboard.html` |
| 2 | `OH-GZ-LIST` | Game Zones List | All branches; one Store Manager each; status per GZ | loading, empty, no-results | `screens/03-game-zones.html` |
| 3 | `OH-GZ-NEW` | Add Game Zone | Create a branch (name, location, capacity, assign SM) | validation; modal: assign-SM | `screens/04-game-zone-new.html` |
| 4 | `OH-GZ-EDIT` | Edit Game Zone | Edit branch + reassign Store Manager | modal: reassign-SM confirm | `screens/05-game-zone-edit.html` |
| 5 | `OH-GZ-DETAIL` | Game Zone Detail | One branch end-to-end: staff, rides, rosters, checklist status (tabbed) | tabbed, loading | `screens/06-game-zone-detail.html` |
| 6 | `OH-RIDE-MASTER` | Rides / Activity Zones Master | Maintain ride list per Game Zone | add/edit ride, deactivate | `screens/07-ride-master.html` |
| 7 | `OH-USERS` | All Users (cross-GZ) | Every user across all GZ with role + reports-to | filter by GZ/role, search, empty | `screens/08-users.html` |
| 8 | `OH-USER-NEW` | Onboard User | Create user → role → reports-to → Game Zone → certified rides (wizard) | validation, reports-to picker, cert-rides multiselect | `screens/09-user-new.html` |
| 9 | `OH-USER-EDIT` | Edit User | Change role/reports-to/GZ/certs/deactivate | modal: reassign-manager confirm; modal: deactivate | `screens/10-user-edit.html` |
| 10 | `OH-USER-DETAIL` | User Detail | Profile + position in hierarchy + assigned-checklist history | drawer, loading | `screens/11-user-detail.html` |
| 11 | `OH-ROLES` | Roles & Access Matrix (editable) | View + **live-edit** the 7-role dynamic RBAC matrix | save, scope-change confirm | `screens/12-roles-matrix.html` |
| 12 | `OH-HIER-TREE` | Hierarchy Tree (org-wide) | Visual 7-level tree across all GZ; per-GZ filter | expand/collapse, per-GZ filter | `screens/13-hierarchy.html` |
| 13 | `OH-ROSTER-ALL` | All-Zones Roster Overview | Cross-branch day/week/month roster + gap alerts (read-only) | day/week/month toggle, gap-alert badge, empty | `screens/14-roster-all.html` |
| 14 | `OH-CHK-OVERVIEW` | Checklist Status Overview | Every checklist across all GZ with live cascade status + **Pending** until OH-approved | filter (GZ/ride/shift/period/status), overdue tab, drilldown drawer | `screens/15-checklist-overview.html` |
| 15 | `OH-CHK-APPROVE` | OH Approval / Verify | **Final** approval: Approve (→ Done) or Send-back with reason; view photos | drawer; modal: send-back-reason; modal: approve-confirm; photo-lightbox | `screens/16-checklist-approve.html` |
| 16 | `OH-REP-POSITIVE` | Positive Report (org) | All-G/compliant checklists per GZ/ride/shift/day | export PDF/Excel, date range, empty | `screens/17-report-positive.html` |
| 17 | `OH-REP-NEGATIVE` | Negative Report (org) | All A-items + their photos needing action, across all GZ | photo-lightbox, export, filter by GZ | `screens/18-report-negative.html` |
| 18 | `OH-REP-OVERDUE` | Overdue / Escalation Report | Missed/overdue checklists escalated to OH | export, drilldown to GZ | `screens/20-report-overdue.html` |
| 19 | `OH-CHK-UPLOAD` *(CL-1)* | Upload Check List (list + create) | Template list (seeded + custom, all GZ) + **New Check List** → `ChecklistBuilder` Stepper (Details → Sections&Items → Assign → Review); builder fields: name, frequency (daily/weekly/monthly/quarterly/yearly/opening/closing), ride, which-role-fills, GZ scope, sections→items (text, test method, G/A, requires-photo-on-A) | builder wizard, filters, duplicate, deactivate, draft; modal: change-items-confirm | `screens/21-checklist-upload.html` |
| 20 | `OH-CHK-TPL-ASSIGN` *(CL-1)* | Assign Check List | Map a template → role / ride / shift / GZ scope (feeds auto-assign, `FOUNDATION_SPEC §3`) | builder step 3, scope picker; modal: assign-template | `screens/22-checklist-tpl-assign.html` |
| 21 | `OH-CHK-TPL-EDIT` *(CL-1)* | Edit Check List | Edit a template's items / mapping (reuses the builder); changes apply to future instances | builder re-entry, change-items warning; modal: change-items-confirm | `screens/23-checklist-tpl-edit.html` |
| 22 | `OH-WO-OVERVIEW` *(CL-2)* | Action / Work-Order Overview (org) | Org-wide Action/Work-Order table across all GZ with `wo-*` state badges (Open→Routed→Assigned→In-progress/Returned→Done/Outsourced); read/monitor only | filter (GZ/ride/state/priority), state KPIs, drilldown drawer | `screens/24-wo-overview.html` |
| — | `SH-PROFILE` (utility) | Profile / Settings | Own profile, role, logout (utility-cluster landing) | — | `screens/19-profile.html` |

## States (this pack)

| State | File | Where it appears |
|---|---|---|
| Loading (skeleton) | `states/loading.html` | `OH-DASH`, `OH-CHK-OVERVIEW`, any table |
| Empty (no data) | `states/empty.html` | `OH-GZ-LIST`, `OH-USERS`, reports with no records |
| No-results (after filter) | `states/no-results.html` | `OH-USERS`, `OH-CHK-OVERVIEW`, reports |
| Error (generic + retry) | `states/error.html` | any data screen |
| 401 (session expired) | `states/session-expired.html` | any (redirect to login) |
| 403 (forbidden action) | `states/forbidden.html` | any RBAC-denied action (defensive — OH is full-access, shown for completeness/role parity) |

## Modals / drawers (this pack)

| Modal / drawer | File | Trigger |
|---|---|---|
| Send-back reason (required textarea) | `modals/send-back-reason.html` | Send-back on `OH-CHK-APPROVE` |
| Approve confirm | `modals/approve-confirm.html` | Approve on `OH-CHK-APPROVE` (→ Done) |
| Assign Store Manager | `modals/assign-store-manager.html` | `OH-GZ-NEW` / `OH-GZ-EDIT` (one SM per GZ) |
| Reassign manager confirm | `modals/reassign-manager.html` | `OH-USER-EDIT` (change reports-to) |
| Deactivate user confirm | `modals/deactivate-user.html` | `OH-USER-EDIT` |
| Photo evidence lightbox | `modals/photo-lightbox.html` | photo thumbnail on `OH-CHK-APPROVE` / `OH-REP-NEGATIVE` |
| Assign template *(CL-1)* | `modals/assign-template.html` | "Assign" on `OH-CHK-UPLOAD` / `OH-CHK-TPL-ASSIGN` (template → role/ride/shift/GZ) |
| Change-items confirm *(CL-1)* | `modals/change-items-confirm.html` | Save on `OH-CHK-TPL-EDIT` when editing an active, assigned template |

---

## Counts

- **24 screen mockups** (login + dashboard + 22 OH role screens, profile reuses one numbering slot; `01`–`24`) — covering the 22 `OH-*` role screens + the auth entry + profile. CL-1/CL-2 added `21-checklist-upload.html`, `22-checklist-tpl-assign.html`, `23-checklist-tpl-edit.html`, `24-wo-overview.html`.
- **6 state variants** · **8 modals/drawers** (CL-1 added assign-template + change-items-confirm).
- **Total HTML artifacts in this pack: 24 screens + 6 states + 8 modals = 38 HTML files** (PNG render is a later step).

> The OH pack is the **top-authority web counterpart** of the anchor. The Store Manager (SM) web pack is a near-clone of this pack scoped to **one** Game Zone (non-interactive branch badge instead of the selector, `OH-ROLES` matrix is read-only for SM, no Game-Zone CRUD). Building OH here makes SM largely a scope-down.
