# Store Manager (Web) — Screen Inventory

> Source: `docs/design/SCREEN_LIST.md` "Store Manager (SM)" block (21 role screens, post Change List v1.1 — CL-1 Upload Check List CRUD replacing the view-only templates screen + CL-2 Outsource Inbox) + the shared Auth entry (Module 0) the role passes through on login. Surface = Web (Next.js) desktop 1440×900. GZ scope = `own` (one Game Zone — Ahmedabad-1).
> **Pixel target:** the `screens/*.html` mockups at 1440×900. **States:** `states/`. **Modals/drawer:** `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` |
| `SM-DASH` (router) | Role-resolved Home | Post-login → SM 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` for the entry and reuses the shared profile/notif center via the topbar utility cluster. The full shared-auth set ships once in Wave 0 and is reused by every role.

## Store Manager (SM) — role screens

| # | Screen ID | Screen | Purpose | States / modals | Mockup |
|---|---|---|---|---|---|
| 1 | `SM-DASH` | Store Manager Dashboard | Own-GZ health: compliance, Pending **awaiting SM approval**, roster gaps, overdue | loading, empty, drilldown | `screens/02-dashboard.html` |
| 2 | `SM-USERS` | Team / Users (own GZ) | All staff in own Game Zone with role + reports-to; create/edit within zone | loading, empty, filter | `screens/03-users.html` |
| 3 | `SM-USER-NEW` | Onboard Staff (own GZ) | Stepper: details → role (≤ SM) → reports-to → certified rides; auto-tagged to SM's GZ | validation, reports-to picker, cert-rides multiselect | `screens/04-user-new.html` |
| 4 | `SM-USER-EDIT` | Edit Staff (own GZ) | Edit role/reports-to/certs/deactivate within own GZ | reassign-manager confirm (modal), deactivate | `screens/05-user-edit.html` |
| 5 | `SM-USER-DETAIL` | Staff Detail | Profile + sub-tree + checklist history (right drawer) | — | `screens/06-user-detail.html` |
| 6 | `SM-HIER-TREE` | Hierarchy Tree (own GZ) | TL → Monitors/Supervisor tree for own Game Zone | expand/collapse | `screens/07-hierarchy.html` |
| 7 | `SM-ROSTER` | Roster Builder (own GZ) | Drag/shift builder; day/week/month; by ride+shift; conflict + leave + gap alerts | conflict warn, leave overlay, publish modal | `screens/08-roster.html` |
| 8 | `SM-ROSTER-UPLOAD` | Roster Bulk Upload | Stepper: Upload Excel/CSV → Validate/dry-run → Review errors → Commit | validation-errors modal, dry-run, commit | `screens/09-roster-upload.html` |
| 9 | `SM-ROSTER-TEMPLATES` | Shift Templates | Manage Morning 10:00–16:00 / Evening 16:00–22:00 etc. | add/edit template (modal) | `screens/10-shift-templates.html` |
| 10 | `SM-ROSTER-LEAVE` | Leave & Absence | Mark/approve leave; triggers gap alerts | approve/deny, gap-alert | `screens/11-leave.html` |
| 11 | `SM-ROSTER-PUBLISH` | Publish Roster | Publish a roster period → triggers checklist auto-assign | confirm modal (fires auto-assign), re-publish warn | `screens/12-roster-publish.html` |
| 12 | `SM-CHK-OVERVIEW` | Checklist Status (own GZ) | All checklists in own GZ with live cascade status; Pending until SM+ approved | filter, overdue tab, drilldown drawer | `screens/13-checklist-overview.html` |
| 13 | `SM-CHK-ASSIGN` | Checklist Assignment / Override | View auto-assigned; manually assign/reassign to role/ride/employee/shift | assign modal, override confirm | `screens/14-checklist-assign.html` |
| 14 | `SM-CHK-APPROVE` | Store Manager Approval | Second-level: Approve (→ OH) or Send-back (→ filler); photo gallery + cascade timeline | photo lightbox, send-back-reason modal, approve confirm | `screens/15-checklist-approve.html` |
| 15 | `SM-CHK-UPLOAD` | Upload Check List (list + create) *(CL-1, replaces view-only `SM-CHK-TEMPLATES`)* | Manage own-GZ check lists: list seeded (read-only) + own custom; **New Check List** → ChecklistBuilder stepper (Details → Sections&Items → Assign → Review) | builder stepper, duplicate, deactivate | `screens/16-checklist-upload.html` |
| 16 | `SM-REP-POSITIVE` | Positive Report (own GZ) | All-G checklists per ride/shift/day | export, date range | `screens/17-report-positive.html` |
| 17 | `SM-REP-NEGATIVE` | Negative Report (own GZ) | All A-items + photos needing action in own GZ | photo gallery, export | `screens/18-report-negative.html` |
| 18 | `SM-REP-OVERDUE` | Overdue Report (own GZ) | Overdue/missed in own GZ; escalate-up indicator | export, escalate-up indicator | `screens/19-report-overdue.html` |
| 19 | `SM-CHK-TPL-ASSIGN` | Assign Check List (template → role/ride/shift) *(CL-1)* | Map a check list to role / ride / shift in own GZ (feeds auto-assign) | assign mapping, scope picker, match preview | `screens/20-checklist-tpl-assign.html` |
| 20 | `SM-CHK-TPL-EDIT` | Edit Check List (template) *(CL-1)* | Edit a check list's items / mapping (reuses the builder) | builder stepper, change-items confirm | `screens/21-checklist-tpl-edit.html` |
| 21 | `SM-WO-OUTSOURCE` | Outsource / Action-needed Inbox *(CL-2)* | Work-orders the Maintenance TL could not fix internally — review + decide outsource; **`wo-outsourced` is the only WO state that reaches SM** | WO detail, issue photos, return reason, WorkOrder ApprovalTimeline, outsource confirm | `screens/22-wo-outsource.html` |

## States (this pack)

| State | File | Where it appears |
|---|---|---|
| Loading (skeleton table/cards) | `states/loading.html` | `SM-DASH`, `SM-USERS`, `SM-CHK-OVERVIEW`, all `*-REP-*` |
| Empty (no-data / all-clear positive) | `states/empty.html` | `SM-CHK-OVERVIEW`, reports, roster with no shifts |
| Error (generic + retry) | `states/error.html` | any data screen |
| 403 (out-of-Game-Zone / action) | `states/forbidden.html` | any — no cross-GZ data leak |
| 401 (session expired → re-login) | `states/session-expired.html` | any (token expiry) |
| Locked (rate-limited login) | `states/locked.html` | `AUTH-LOGIN` |

## Modals / drawer (this pack)

| Modal | File | Trigger |
|---|---|---|
| Publish-roster confirm (fires auto-assign) | `modals/publish-confirm.html` | Publish on `SM-ROSTER` / `SM-ROSTER-PUBLISH` |
| Send-back reason (required textarea) | `modals/sendback-reason.html` | Send-back on `SM-CHK-APPROVE` |
| Assign / override checklist | `modals/assign-override.html` | Assign/Reassign on `SM-CHK-ASSIGN` |
| Bulk-upload validation errors | `modals/upload-errors.html` | Validate step on `SM-ROSTER-UPLOAD` |
| Reassign-manager confirm | `modals/reassign-manager.html` | change reports-to on `SM-USER-EDIT` |
| Outsource-decision confirm *(CL-2)* | `modals/outsource-confirm.html` | Confirm outsource on `SM-WO-OUTSOURCE` |

---

## Counts

- **22 screens** (1 login + Dashboard + Users + User-New + User-Edit + User-Detail + Hierarchy + Roster + Roster-Upload + Shift-Templates + Leave + Roster-Publish + Checklist-Overview + Checklist-Assign + Checklist-Approve + **Upload-Check-List** + 3 Reports + **Checklist-Tpl-Assign** + **Checklist-Tpl-Edit** + **WO-Outsource**) — covering the **21 `SM-*` role screens** (post CL-1/CL-2) + the auth entry.
- **6 state variants** · **6 modals/drawer**.
- **Total HTML artifacts in this pack: 22 screens + 6 states + 6 modals = 34 HTML files** (PNG render is a later step).

> The SM pack is the **manager-web archetype** for the remaining Step 3b web packs: the OH pack reuses the same shell + DataTable + approval + report screens, differing by the **Game-Zone selector** (OH `all`) vs the **branch badge** (SM `own`) and by the **final** vs **second** approval level. TL (web surface) reuses the roster + checklist + report screens at **team** scope.
